diff --git a/.github/actions/tests-module-hydrodyn/action.yml b/.github/actions/tests-module-hydrodyn/action.yml index eb453ec203..a58e130c0f 100644 --- a/.github/actions/tests-module-hydrodyn/action.yml +++ b/.github/actions/tests-module-hydrodyn/action.yml @@ -4,6 +4,6 @@ author: 'Rafael Mudafort https://github.com/rafmudaf' runs: using: "composite" steps: - - run: ctest -VV -j7 -R hd_ -LE python + - run: ctest -VV -j1 -R hd_ -LE python working-directory: ${{runner.workspace}}/openfast/build shell: bash diff --git a/.github/actions/tests-module-seastate/action.yml b/.github/actions/tests-module-seastate/action.yml new file mode 100644 index 0000000000..53694beb4f --- /dev/null +++ b/.github/actions/tests-module-seastate/action.yml @@ -0,0 +1,9 @@ +name: 'SeaState module tests' +description: 'Run tests specific to the SeaState module' +author: 'Rafael Mudafort https://github.com/rafmudaf' +runs: + using: "composite" + steps: + - run: ctest -VV -j7 -R seastate_ -LE python + working-directory: ${{runner.workspace}}/openfast/build + shell: bash diff --git a/.github/workflows/automated-dev-tests.yml b/.github/workflows/automated-dev-tests.yml index 7da144a293..f8e2b398c0 100644 --- a/.github/workflows/automated-dev-tests.yml +++ b/.github/workflows/automated-dev-tests.yml @@ -387,6 +387,8 @@ jobs: test-target: regression - name: Run MoorDyn tests uses: ./.github/actions/tests-module-moordyn + - name: Run SeaState tests + uses: ./.github/actions/tests-module-seastate - name: Run SubDyn tests uses: ./.github/actions/tests-module-subdyn - name: Failing test artifacts @@ -441,6 +443,8 @@ jobs: uses: ./.github/actions/tests-module-moordyn - name: Run NWTC Library tests uses: ./.github/actions/tests-module-nwtclibrary + - name: Run SeaState tests + uses: ./.github/actions/tests-module-seastate - name: Run SubDyn tests uses: ./.github/actions/tests-module-subdyn - name: Run VersionInfo tests diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a8792b190..5b14d3dd8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,6 +179,7 @@ set(OPENFAST_MODULES elastodyn beamdyn subdyn + seastate hydrodyn orcaflex-interface extptfm diff --git a/docs/OtherSupporting/HydroDyn/HydroDyn_MacCamy-Fuchs.docx b/docs/OtherSupporting/HydroDyn/HydroDyn_MacCamy-Fuchs.docx new file mode 100644 index 0000000000..5a2f466c95 Binary files /dev/null and b/docs/OtherSupporting/HydroDyn/HydroDyn_MacCamy-Fuchs.docx differ diff --git a/docs/OtherSupporting/HydroDyn/HydroDyn_WaveStretching_Plan.docx b/docs/OtherSupporting/HydroDyn/HydroDyn_WaveStretching_Plan.docx index 9537a3f256..2b1c21814d 100644 Binary files a/docs/OtherSupporting/HydroDyn/HydroDyn_WaveStretching_Plan.docx and b/docs/OtherSupporting/HydroDyn/HydroDyn_WaveStretching_Plan.docx differ diff --git a/docs/OtherSupporting/OutListParameters.xlsx b/docs/OtherSupporting/OutListParameters.xlsx index 03146fa76a..c63c101d77 100644 Binary files a/docs/OtherSupporting/OutListParameters.xlsx and b/docs/OtherSupporting/OutListParameters.xlsx differ diff --git a/docs/OtherSupporting/SeaState/SeaState_Constrained_NewWave.docx b/docs/OtherSupporting/SeaState/SeaState_Constrained_NewWave.docx new file mode 100644 index 0000000000..a2081c6551 Binary files /dev/null and b/docs/OtherSupporting/SeaState/SeaState_Constrained_NewWave.docx differ diff --git a/docs/OtherSupporting/SeaState/SeaState_WaveMod7.docx b/docs/OtherSupporting/SeaState/SeaState_WaveMod7.docx new file mode 100644 index 0000000000..a8121f67f9 Binary files /dev/null and b/docs/OtherSupporting/SeaState/SeaState_WaveMod7.docx differ diff --git a/docs/source/testing/regression_test.rst b/docs/source/testing/regression_test.rst index 491fd05659..9262e6bdc1 100644 --- a/docs/source/testing/regression_test.rst +++ b/docs/source/testing/regression_test.rst @@ -40,6 +40,7 @@ configuration as described in the following sections. In both modes of execution a directory is created in the build directory called ``reg_tests`` where all of the input files for the test cases are copied +(but not overwritten) and all of the locally generated outputs are stored. Ultimately, both CTest and the manual execution program call a series of Python scripts and libraries in ``reg_tests`` and ``reg_tests/lib``. One such script is ``lib/pass_fail.py`` diff --git a/docs/source/user/aerodyn/examples/ad_driver_example.dvr b/docs/source/user/aerodyn/examples/ad_driver_example.dvr index ea92c3edd1..c93fcfe122 100644 --- a/docs/source/user/aerodyn/examples/ad_driver_example.dvr +++ b/docs/source/user/aerodyn/examples/ad_driver_example.dvr @@ -6,7 +6,7 @@ False Echo - Echo input parameters to ".ech"? 3 AnalysisType - {1: multiple turbines, one simulation, 2: one turbine, one time-dependent simulation, 3: one turbine, combined cases} 11.0 TMax - Total run time [used only when AnalysisType/=3] (s) 0.5 DT - Simulation time step [used only when AnalysisType/=3] (s) -"./AD.dat" AeroFile - Name of the primary AeroDyn input file +"ad_primary_example.dat" AeroFile - Name of the primary AeroDyn input file ----- Environmental Conditions ---------------------------------------------------------- 1025 FldDens - Density of working fluid (kg/m^3) 1.4639E-05 KinVisc - Kinematic viscosity of working fluid (m^2/s) @@ -19,7 +19,7 @@ False Echo - Echo input parameters to ".ech"? "unused" InflowFile - Name of the InflowWind input file [used only when CompInflow=1] 9.0 HWindSpeed - Horizontal wind speed [used only when CompInflow=0 and AnalysisType=1] (m/s) 140 RefHt - Reference height for horizontal wind speed [used only when CompInflow=0] (m) - 0.10 PLExp - Power law exponent [used only when CompInflow=0 and AnalysisType=1] (-) + 0.10 PLExp - Power law exponent [used only when CompInflow=0 and AnalysisType=1] (-) ----- Turbine Data ---------------------------------------------------------------------- 1 NumTurbines - Number of turbines ----- Turbine(1) Geometry --------------------------------------------------------------- diff --git a/docs/source/user/aerodyn/examples/ad_primary_example.dat b/docs/source/user/aerodyn/examples/ad_primary_example.dat index 67a6035a3f..61e5eb13a1 100644 --- a/docs/source/user/aerodyn/examples/ad_primary_example.dat +++ b/docs/source/user/aerodyn/examples/ad_primary_example.dat @@ -3,7 +3,7 @@ Description line that will be printed in the output file and written to the scre ====== General Options ============================================================================ True Echo - Echo the input to ".AD.ech"? (flag) "default" DTAero - Time interval for aerodynamic calculations {or "default"} (s) - 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] + 1 WakeMod - Type of wake/induction model (switch) {0=none, 1=BEMT, 2=DBEMT, 3=OLAF} [WakeMod cannot be 2 or 3 when linearizing] 1 AFAeroMod - Type of blade airfoil aerodynamics model (switch) {1=steady model, 2=Beddoes-Leishman unsteady model} [AFAeroMod must be 1 when linearizing] 0 TwrPotent - Type of tower influence on wind based on potential flow around the tower (switch) {0=none, 1=baseline potential flow, 2=potential flow with Bak correction} 0 TwrShadow - Calculate tower influence on wind based on downstream tower shadow (switch) {0=none, 1=Powles model, 2=Eames model} @@ -33,10 +33,12 @@ True TIDrag - Include the drag term in the tangential-induc 2 DBEMT_Mod - Type of dynamic BEMT (DBEMT) model {1=constant tau1, 2=time-dependent tau1, 3=constant tau1 with continuous formulation} (-) [used only when WakeMod=2] 4 tau1_const - Time constant for DBEMT (s) [used only when WakeMod=2 and DBEMT_Mod=1 or 3] ====== OLAF -- cOnvecting LAgrangian Filaments (Free Vortex Wake) Theory Options ================== [used only when WakeMod=3] -"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] +"unused" OLAFInputFileName - Input file for OLAF [used only when WakeMod=3] ====== Beddoes-Leishman Unsteady Airfoil Aerodynamics Options ===================================== [used only when AFAeroMod=2] - 1 UAMod - Unsteady Aero Model Switch (switch) {2=B-L Gonzalez, 3=B-L Minnema/Pierce, 4=B-L HGM 4-states, 5=B-L 5 states, 6=Oye, 7=Boeing-Vertol} [used only when AFAeroMod=2] + 1 UAMod - Unsteady Aero Model Switch (switch) {2=B-L Gonzalez, 3=B-L Minnema/Pierce, 4=B-L HGM 4-states, 5=B-L HGM+vortex 5 states, 6=Oye, 7=Boeing-Vertol} [used only when AFAeroMod=2] FALSE FLookup - Flag to indicate whether a lookup for f' will be calculated (TRUE) or whether best-fit exponential equations will be used (FALSE); if FALSE S1-S4 must be provided in airfoil input files (flag) [used only when AFAeroMod=2] + 0.25 UAStartRad - Starting radius for dynamic stall (fraction of rotor radius [0.0,1.0]) [used only when AFAeroMod=2; if line is missing UAStartRad=0] + 0.95 UAEndRad - Ending radius for dynamic stall (fraction of rotor radius [0.0,1.0]) [used only when AFAeroMod=2; if line is missing UAEndRad=1] ====== Airfoil Information ========================================================================= 1 AFTabMod - Interpolation method for multiple airfoil tables {1=1D interpolation on AoA (first table only); 2=2D interpolation on AoA and Re; 3=2D interpolation on AoA and UserProp} (-) 1 InCol_Alfa - The column in the airfoil tables that contains the angle of attack (-) @@ -61,27 +63,30 @@ True UseBlCm - Include aerodynamic pitching moment in calcul "Test01_UAE_AeroDyn_blade.dat" ADBlFile(2) - Name of file containing distributed aerodynamic properties for Blade #2 (-) [unused if NumBl < 2] "Test01_UAE_AeroDyn_blade.dat" ADBlFile(3) - Name of file containing distributed aerodynamic properties for Blade #3 (-) [unused if NumBl < 3] ====== Hub Properties ============================================================================== [used only when Buoyancy=True] - 0.0 VolHub - Hub volume (m^3) - 0.0 HubCenBx - Hub center of buoyancy x direction offset (m) + 0 VolHub - Hub volume (m^3) + 0 HubCenBx - Hub center of buoyancy x direction offset (m) ====== Nacelle Properties ========================================================================== [used only when Buoyancy=True] - 0.0 VolNac - Nacelle volume (m^3) -0.0, 0.0, 0.0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) + 0 VolNac - Nacelle volume (m^3) + 0, 0, 0 NacCenB - Position of nacelle center of buoyancy from yaw bearing in nacelle coordinates (m) +====== Tail Fin Aerodynamics ======================================================================= +False TFinAero - Calculate tail fin aerodynamics model (flag) +"unused" TFinFile - Input file for tail fin aerodynamics [used only when TFinAero=True] ====== Tower Influence and Aerodynamics ============================================================ [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True] 5 NumTwrNds - Number of tower nodes used in the analysis (-) [used only when TwrPotent/=0, TwrShadow/=0, TwrAero=True, or Buoyancy=True] -TwrElev TwrDiam TwrCd TwrTI (used only with TwrShadow=2) TwrCb (used only with Buoyancy=True) -(m) (m) (-) (-) (-) -0.0000000E+00 6.0000000E+00 0.0000000E+00 1.0000000E-01 0.0 -2.0000000E+01 5.5000000E+00 0.0000000E+00 1.0000000E-01 0.0 -4.0000000E+01 5.0000000E+00 0.0000000E+00 1.0000000E-01 0.0 -6.0000000E+01 4.5000000E+00 0.0000000E+00 1.0000000E-01 0.0 -8.0000000E+01 4.0000000E+00 0.0000000E+00 1.0000000E-01 0.0 +TwrElev TwrDiam TwrCd TwrTI TwrCb ! TwrTI used only when TwrShadow=2; TwrCb used only when Buoyancy=True +(m) (m) (-) (-) (-) +0.0000000E+00 6.0000000E+00 0.0000000E+00 1.0000000E-01 0.0000000E+00 +2.0000000E+01 5.5000000E+00 0.0000000E+00 1.0000000E-01 0.0000000E+00 +4.0000000E+01 5.0000000E+00 0.0000000E+00 1.0000000E-01 0.0000000E+00 +6.0000000E+01 4.5000000E+00 0.0000000E+00 1.0000000E-01 0.0000000E+00 +8.0000000E+01 4.0000000E+00 0.0000000E+00 1.0000000E-01 0.0000000E+00 ====== Outputs ==================================================================================== -True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) +True SumPrint - Generate a summary file listing input options and interpolated properties to ".AD.sum"? (flag) 4 NBlOuts - Number of blade node outputs [0 - 9] (-) 1, 3, 4, 6 BlOutNd - Blade nodes whose values will be output (-) 0 NTwOuts - Number of tower node outputs [0 - 9] (-) 1 TwOutNd - Tower nodes whose values will be output (-) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) "B1N1VDisx, B1N1VDisy, B1N1VDisz" ! disturbed wind velocity at Blade 1, Node 1 "B1N2VDisx, B1N2VDisy, B1N2VDisz" ! disturbed wind velocity at Blade 1, Node 2 "B1N3VDisx, B1N3VDisy, B1N3VDisz" ! disturbed wind velocity at Blade 1, Node 3 @@ -93,18 +98,19 @@ True SumPrint - Generate a summary file listing input option "B1N1Alpha, B1N2Alpha, B1N3Alpha" "B1N1Theta, B1N2Theta, B1N3Theta" END of OutList section (the word "END" must appear in the first 3 columns of the last OutList line) -====== Outputs for all blade stations (same ending as above for B1N1.... ============================ [optional section] - 1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) - "All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) - OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"Fx, Fy" -"Vx, Vy" -Vrel -TnInd -AxInd -Theta -Phi -Vindx -Vindy -Alpha +====== Outputs for all blade stations (same ending as above for B1N1.... =========================== [optional section] + 1 BldNd_BladesOut - Number of blades to output all node information at. Up to number of blades on turbine. (-) +"All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) + OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) +"Fx, Fy" +"Vx, Vy" +"Vrel" +"TnInd" +"AxInd" +"Theta" +"Phi" +"Vindx" +"Vindy" +"Alpha" END (the word "END" must appear in the first 3 columns of this last OutList line in the optional nodal output section) +==================================================================================================== \ No newline at end of file diff --git a/docs/source/user/beamdyn/examples/bd_primary_nrel_5mw.inp b/docs/source/user/beamdyn/examples/bd_primary_nrel_5mw.inp index 1fcd7475e1..9850a2f21a 100644 --- a/docs/source/user/beamdyn/examples/bd_primary_nrel_5mw.inp +++ b/docs/source/user/beamdyn/examples/bd_primary_nrel_5mw.inp @@ -78,7 +78,7 @@ True RotStates - Orient states in the rotating frame during line ---------------------- PITCH ACTUATOR PARAMETERS ------------------------------- False UsePitchAct - Whether a pitch actuator should be used (flag) 200 PitchJ - Pitch actuator inertia (kg-m^2) [used only when UsePitchAct is true] - 2E+07 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] + 20000000 PitchK - Pitch actuator stiffness (kg-m^2/s^2) [used only when UsePitchAct is true] 500000 PitchC - Pitch actuator damping (kg-m^2/s) [used only when UsePitchAct is true] ---------------------- OUTPUTS ------------------------------------------------- True SumPrint - Print summary data to ".sum" (flag) @@ -92,17 +92,18 @@ True SumPrint - Print summary data to ".sum" (flag) "N1Mxl,N1Myl,N1Mzl" "TipTDxr, TipTDyr, TipTDzr" "TipRDxr, TipRDyr, TipRDzr" -END of input file (the word "END" must appear in the first 3 columns of the last OutList line) +END of OutList section (the word "END" must appear in the first 3 columns of the last OutList line) ====== Outputs for all blade stations (same ending as above for B1N1.... =========================== (optional section) - "All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) +"All" BldNd_BlOutNd - Future feature will allow selecting a portion of the nodes to output. Not implemented yet. (-) OutList - The next line(s) contains a list of output parameters. See OutListParameters.xlsx for a listing of available output channels, (-) -"TDxr, TDyr, TDzr" -"TVxr, TVyr, TVzr" -"TAxr, TAyr, TAzr" -"RDxr, RDyr, RDzr" -"RVxr, RVyr, RVzr" -"RAxr, RAyr, RAzr" -"Fxr, Fyr, Fzr" +"TDxr, TDyr, TDzr" +"TVxr, TVyr, TVzr" +"TAxr, TAyr, TAzr" +"RDxr, RDyr, RDzr" +"RVxr, RVyr, RVzr" +"RAxr, RAyr, RAzr" +"Fxr, Fyr, Fzr" "TipTDxr, TipTDyr, TipTDzr" "TipRDxr, TipRDyr, TipRDzr" -END of input file (the word "END" must appear in the first 3 columns of this last OutList line) +END (the word "END" must appear in the first 3 columns of this last OutList line in the optional nodal output section) +-------------------------------------------------------------------------------- diff --git a/docs/source/user/hydrodyn/appendix.rst b/docs/source/user/hydrodyn/appendix.rst index 21493a3ada..96447e6631 100644 --- a/docs/source/user/hydrodyn/appendix.rst +++ b/docs/source/user/hydrodyn/appendix.rst @@ -282,10 +282,6 @@ structure:: 1.0 2.0 3.0 4.0 5.0 6.0 uMorisonInSteady - input displacements and rotations for the morison elements (m, rads) 7.0 8.0 9.0 10.0 11.0 12.0 uDotMorisonInSteady - input translational and rotational velocities for the morison elements (m/s, rads/s) 13.0 14.0 15.0 16.0 17.0 18.0 uDotDotMorisonInSteady - input translational and rotational acccelerations for the morison elements (m/s^2, rads/s^2) - ---------------------- Waves multipoint elevation output ------------------------------- - TRUE WaveElevSeriesFlag - T/F flag to calculate the wave elevation field (for movies) - 5.0 5.0 WaveElevDX WaveElevDY - WaveElevSeries spacing -- WaveElevDX WaveElevDY - 3 3 WaveElevNX WaveElevNY - WaveElevSeries points -- WaveElevNX WaveElevNY END of driver input file .. _hd-output-channels: diff --git a/docs/source/user/hydrodyn/input_files.rst b/docs/source/user/hydrodyn/input_files.rst index 0d433b0430..fd3f27877f 100644 --- a/docs/source/user/hydrodyn/input_files.rst +++ b/docs/source/user/hydrodyn/input_files.rst @@ -143,362 +143,6 @@ The echo file has the naming convention of **OutRootName**\ *.HD.ech*. driver input file when running HydroDyn standalone, or by FAST when running a coupled simulation. -Environmental Conditions ------------------------- -Environmental conditions are now specified in the driver input file but are left in -the primary input file for legacy compatibility. Use the keyword -DEFAULT to pass in values specified by the driver input file. Otherwise, -values given in the primary input file will overwrite those given in the -driver input file. **WtrDens** specifies the water density and must be a value greater than -or equal to zero; a typical value of seawater is around 1025 -kg/m\ :sup:`3`. **WtrDpth** specifies the water depth (depth of the flat -seabed), based on the reference MSL, and must be a value greater than -zero. **MSL2SWL** is the offset between the MSL and SWL, positive -upward. This parameter is useful when simulating the effect of tides or -storm-surge sea-level variations without having to alter the -substructure geometry information. This parameter is unused with -**WaveMod** = 6 and must be set to zero if you are using a -potential-flow model (**PotMod** = 1 or 2). - -Waves ------ - -The WAVES section of the input file controls the internal generation of -first-order waves or the use of externally generated waves, used by both -the strip-theory and potential-flow solutions. The wave spectrum -settings in this section only pertain to the first-order wave frequency -components. When second-order terms are optionally enabled—see the -:ref:`hd-2nd_order_waves_input` and :ref:`hd-2nd_order_floating_platform_forces_input` -sections below—the second-order terms are calculated using the -first-order wave-component amplitudes and extra energy is added to the -wave spectrum (at the difference and sum frequencies). - -**WaveMod** specifies the incident wave kinematics model. The options -are: - -* 0: none = still water - -* 1: regular (periodic) waves - -* 1P#: regular (periodic) waves with user-specified phase, for example - 1P20.0 for regular waves with a 20˚ phase (without P#, the phase - will be random, based on **WaveSeed**); 0˚ phase represents a - cosine function, starting at the peak and decreasing in time - -* 2: Irregular (stochastic) waves based on the JONSWAP or - Pierson-Moskowitz frequency spectrum - -* 3: Irregular (stochastic) waves based on a white-noise frequency - spectrum - -* 4: Irregular (stochastic) waves based on a user-defined frequency - spectrum from routine *UserWaveSpctrm()*; see Appendix D for - compiling instructions - -* 5: Externally generated wave-elevation time series - -* 6: Externally generated full wave-kinematics time series - -Option 4 requires that the *UserWaveSpctrm()* subroutine of the -*Waves.f90* source file be implemented by the user, and will require -recompiling either the standalone HydroDyn program or FAST. Option 5 -allows the use of externally generated wave-elevation time series, from -which the hydrodynamic loads in the potential-flow solution or the wave -kinematics used in the strip-theory solution are derived internally. -Option 6 allows the use of full externally generated wave kinematics for -use with the strip-theory solution (but not the potential-flow -solution). With options 5 and 6, the externally generated wave data is -provided through input files, all of which have the root name given by -the **WvKinFile** parameter below. - -This version does not include the ability to model stretching of -internally generated incident wave kinematics to the instantaneous free -surface; you must set **WaveStMod** = 0. - -**WaveTMax** sets the length of the incident wave kinematics time -series, but it also determines the frequency step used in the inverse -FFT, from which the internal wave time series are derived (*Δω* = -2\ *π*/**WaveTMax**). If **WaveTMax** is less than the total simulation -time, HydroDyn implements repeating wave kinematics that have a period -of **WaveTMax**; **WaveTMax** must not be less than the total simulation -time when **WaveMod** = 5. **WaveDT** determines the time step for the -wave kinematics time series, but it also determines the maximum -frequency in the inverse FFT (*ω\ max* = *π*/**WaveDT**). When modeling -irregular sea states, we recommend that **WaveTMax** be set to at least -1 hour (3600 s) and that **WaveDT** be a value in the range between 0.1 -and 1.0 s to ensure sufficient resolution of the wave spectrum and wave -kinematics. When HydroDyn is coupled to FAST, **WaveDT** may be -specified arbitrarily independently from the glue code time step of FAST -(the wave kinematics will be interpolated in time as necessary); -**WaveDT** must equal the glue code time step of FAST when **WaveMod** = -6. - -For internally generated waves, the wave height (crest-to-trough, twice -the amplitude) for regular waves and the significant wave height for -irregular waves is set using **WaveHs** (only used when **WaveMod** = 1, -2, or 3). The wave period for regular waves and the peak-spectral wave -period for irregular waves is controlled with the **WaveTp** parameter -(only used when **WaveMod** = 1 or 2). **WavePkShp** is the peak-shape -parameter of JONSWAP irregular wave spectrum (only used when **WaveMod** -= 2). Set **WavePkShp** to DEFAULT to obtain the value recommended in -the IEC 61400-3 Annex B, derived based on the peak-spectral period and -significant wave height [IEC, 2009]. Set **WavePkShp** to 1.0 for the -Pierson-Moskowitz spectrum. - -**WvLowCOff** and **WvHiCOff** control the lower and upper cut-off -frequencies (in rad/s) of the first-order wave spectrum; the first-order -wave-component amplitudes are zeroed below and above these cut-off -frequencies, respectively. **WvLowCOff** may be set lower than the -low-energy limit of the first-order wave spectrum to minimize -computational expense. Setting a proper upper cut-off frequency -(**WvHiCOff**) also minimizes computational expense and is important to -prevent nonphysical effects when approaching of the breaking-wave limit -and to avoid nonphysical wave forces at high frequencies (i.e., at short -wavelengths) when using a strip-theory solution. **WvLowCOff** and -**WvHiCOff** are unused when **WaveMod** = 0, 1, or 6. - -**WaveDir** (unused when **WaveMod** = 0 or 6) is the mean wave -propagation heading direction (in degrees), and must be in the range -(-180,180]. A heading of 0 corresponds to wave propagation in the -positive X-axis direction. And a heading of 90 corresponds to wave -propagation in the positive Y-axis direction. **WaveDirMod** specifies -the wave directional spreading model (only used when **WaveMod** = 2, 3, -or 4). Setting **WaveDirMod** to 0 disables directional spreading, -resulting in long-crested (plane-progressive) sea states propagating in -the **WaveDir** direction. Setting **WaveDirMod** to 1 enables the -modeling of short-crested sea states, with a mean propagation direction -of **WaveDir**, through the commonly used cosine spreading function -(COS:sup:`2\ S`) to define the directional spreading spectrum, based on -the spreading coefficient (*S*) defined via **WaveDirSpread**. The wave -directional spreading spectrum is discretized with an equal-energy -method using **WaveNDir** number of equal-energy bins. **WaveNDir** is -an odd-valued integer greater or equal to 1 (1 or 3 or 5…), but HydroDyn -may slightly increase the specified value of **WaveNDir** to ensure that -there is the same number of wave components within each direction bin; -setting **WaveNDir** = 1 is equivalent to setting **WaveDirMod** = 0. -The range of the directional spread (in degrees) is defined via -**WaveDirSpread**. The equal-energy method assumes that the directional -spreading spectrum is the product of a frequency spectrum and a -spreading function i.e. *S*\ (*ω*,\ *β*) = *S*\ (*ω*)\ *D*\ (*β*). -Directional spreading is not permitted when using Newman’s approximation -of the second-order difference-frequency potential-flow loads. - -**WaveSeed(1)** and **WavedSeed(2)** (unused when **WaveMod** = 0, 5, or -6) combined determine the initial seed (starting point) for the internal -pseudorandom number generator (pRNG) needed to derive the internal wave -kinematics from the wave frequency and direction spectra. If both are -numeric values, the Fortran intrinsic pRNG is used. If **WaveSeed(2)** -is the string "RANLUX", an alternative pRNG included with the NWTC Library -is used and the value of **WaveSeed(1)** is the seed. If you want to -run different time-domain realizations for given boundary conditions (of -significant wave height, and peak-spectral period, etc.), you should -change one or both seeds between simulations. While the phase of each -wave frequency and direction component of the wave spectrum is always -based on a uniform distribution (except when using the 1P# **WaveMod** -option), the amplitude of the wave frequency spectrum can also be -randomized (following a normal distribution) by setting **WaveNDAmp** to -TRUE. Setting **WaveNDAmp** to FALSE means that the amplitude of the -wave frequency spectrum always matches the target spectrum. -**WaveNDAmp** is only used with **WaveMod** = 2, 3, or 4. - -When using externally generated wave data (**WaveMod** = 5 or 6), input -parameter **WvKinFile** should be set to the root name of the input -file(s) (without extension) containing the data. - -Using externally generated wave-elevation time series (**WaveMod** = 5) -requires a text-formatted input data file with the extension *.Elev* -containing two columns of data—the first is time (starting at zero) (in -s) and the second is the wave elevation at (0,0) (in m), separated by -whitespace. Header lines (identified as those not beginning with a -number) are ignored. The time series must be at least **WaveTMax** in -length and not less than the total simulation time and the time step -must match **WaveDT**. The wave-elevation time series specified is -assumed to be of first order and long-crested, but is not checked for -physical correctness. When second-order terms are optionally enabled—see -the 2\ :sup:`ND`-ORDER WAVES and 2\ :sup:`ND`-ORDER FLOATING PLATFORM -FORCES sections below—the second-order terms are calculated using the -wave-component amplitudes derived from the provided wave-elevation time -series and extra energy is added to the wave spectrum (at the difference -and sum frequencies). - -Using full externally generated wave kinematics (**WaveMod** = 6) -requires eight text-formatted input data files, all without headers. -Seven files with extensions *.Vxi*, *.Vyi*, *.Vzi*, *.Axi*, *.Ayi*, -*.Azi*, and *.DynP* correspond to the *X*, *Y*, and *Z* velocities (in -m/s) and accelerations (in m/s\ :sup:`2`) in the global inertial-frame -coordinate system and the dynamic pressure (in Pa) time series. Each of -these files must have exactly **WaveTMax**/**DT** rows and *N* -whitepace-separated columns, where *N* is the total number of internal -HydroDyn analysis nodes (corresponding exactly to those written to the -HydroDyn summary file). Time is absent from the files, but is assumed to -go from zero to **WaveTMax** – **WaveDT** in steps of **WaveDT**. To use -this feature, it is the burden of the user to generate wave kinematics -data at each of HydroDyn’s time steps and analysis nodes. HydroDyn will -not interpolate the data; as such, when HydroDyn is coupled to FAST, -**WaveDT** must equal the glue code time step of FAST. A numerical value -(including 0) in a file is assumed to be valid data (with 0 -corresponding to 0 m/s, 0 m/s\ :sup:`2`, or 0 Pa); a nonnumeric string -will designate that the node is outside of the water at that time step -(above the instantaneous water elevation or below the seabed)—externally -generated wave kinematics used with **WaveMod** = 6 are not limited to -the domain between a flat seabed and SWL and may consider wave -stretching, higher-order wave theories, or an uneven seabed. All seven -files must have nonnumeric strings in the same locations within the -file. The eighth file, with extension *.Elev*, must contain the wave -elevation (in m) at each of the **NWaveElev** points on the SWL where -wave elevations can be output—see below; this data is required for -output purposes only and is not used by HydroDyn for other means. This -file must have exactly **WaveTMax**/**DT** rows and **NWaveElev** -whitepace-separated columns and only valid numeric data is allowed (the -file will have **NWaveElev** + ( **WaveElevNX** × **WaveElevNY** ) -columns when HydroDyn is operated in standalone mode). The data in these -files is not processed (filtered, etc.) or checked for physical -correctness (other than for consistency in the location of the -nonnumeric strings). Full externally generated wave kinematics -(**WaveMod** = 6) cannot be used in conjunction with the potential-flow -solution. - -You can generate up to 9 wave elevation outputs. **NWaveElev** -determines the number (between 0 and 9), and the whitespace-separated -lists of **WaveElevxi** and **WaveElevyi** determine the locations of -these **NWaveElev** number of points on the SWL plane in the global -inertial-frame coordinate system. - -.. _hd-2nd_order_waves_input: - -2\ :sup:`nd`-Order Waves ------------------------- -The 2\ :sup:`ND`-ORDER WAVES section (unused when **WaveMod** = 0 or 6) -of the input file allows the option of adding second-order contributions -to the wave kinematics used by the strip-theory solution. When -second-order terms are optionally enabled, the second-order terms are -calculated using the first-order wave-component amplitudes and extra -energy is added to the wave spectrum (at the difference and sum -frequencies). The second-order terms cannot be computed without also -including the first-order terms from the WAVES section above. Enabling -the second-order terms allows one to capture some of the nonlinearities -of real surface waves, permitting more accurate modeling of sea states -and the associated wave loads at the expense of greater computational -effort (mostly at HydroDyn initialization). - -While the cut-off frequencies in this section apply to both the -second-order wave kinematics used by strip theory and the second-order -diffraction loads in potential-flow theory, the second-order terms -themselves are enabled separately. The second-order wave kinematics used -by strip theory are enabled in this section while the second-order -diffraction loads in potential-flow theory are enabled in the -:ref:`hd-2nd_order_floating_platform_forces_input` section below. While the -second-order effects are included when enabled, the wave elevations -output from HydroDyn will only include the second-order terms when the -second-order wave kinematics are enabled in this section. - -To use second-order wave kinematics in the strip-theory solution, set -**WvDiffQTF** and/or **WvSumQTF** to TRUE. When **WvDiffQTF** is set to -TRUE, second-order difference-frequency terms, calculated using the full -difference-frequency QTF, are incorporated in the wave kinematics. When -**WvSumQTF** is set to TRUE, second-order sum-frequency terms, -calculated using the full sum-frequency QTF, are incorporated in the -wave kinematics. The full difference- and sum-frequency wave kinematics -QTFs are implemented analytically following [Sharma and Dean, 1981], -which extends Stokes second-order theory to irregular multidirectional -waves. A setting of FALSE disregards the second-order contributions to -the wave kinematics in the strip-theory solution. - -**WvLowCOffD** and **WvHiCOffD** control the lower and upper cut-off -frequencies (in rad/s) of the second-order difference-frequency terms; -the second-order difference-frequency terms are zeroed below and above -these cut-off frequencies, respectively. The cut-offs apply directly to -the physical difference frequencies, not the two individual first-order -frequency components of the difference frequencies. When enabling -second-order potential-flow theory, a setting of **WvLowCOffD** = 0 is -advised to avoid eliminating the mean-drift term (second-order wave -kinematics do not have a nonzero mean). **WvHiCOffD** need not be set -higher than the peak-spectral frequency of the first-order wave spectrum -(*ω\ p* = 2\ *π*/**WaveTp**) to minimize computational expense. - -Likewise, **WvLowCOffS** and **WvHiCOffS** control the lower and upper -cut-off frequencies (in rad/s) of the second-order sum-frequency terms; -the second-order sum-frequency terms are zeroed below and above these -cut-off frequencies, respectively. The cut-offs apply directly to the -physical sum frequencies, not the two individual first-order frequency -components of the sum frequencies. **WvLowCOffS** need not be set lower -than the peak-spectral frequency of the first-order wave spectrum -(*ω\ p* = 2\ *π*/**WaveTp**) to minimize computational expense. Setting -a proper upper cut-off frequency (**WvHiCOffS**) also minimizes -computational expense and is important to (1) ensure convergence of the -second-order summations, (2) avoid unphysical "bumps" in the wave -troughs, (3) prevent nonphysical effects when approaching of the -breaking-wave limit, and (4) avoid nonphysical wave forces at high -frequencies (i.e., at short wavelengths) when using a strip-theory -solution. - -Because the second-order terms are calculated using the first-order -wave-component amplitudes, the second-order cut-off frequencies -(**WvLowCOffD**, **WvHiCOffD**, **WvLowCOffS**, and **WvHiCOffS**) are -used in conjunction with the first-order cut-off frequencies -(**WvLowCOff** and **WvHiCOff**) from the WAVES section. However, the -second-order cut-off frequencies are not used by Newman’s approximation -of the second-order difference-frequency potential-flow loads, which are -derived solely from first-order effects. - -Current -------- -You can include water velocity due to a current model by setting -**CurrMod** = 1. If **CurrMod** is set to zero, then the simulation will -not include current. **CurrMod** = 2 requires that the *UserCurrent()* -subroutine of the *Current.f90* source file be implemented by the user, -and will require recompiling either the standalone HydroDyn program or -FAST. Current induces steady hydrodynamic loads through the viscous-drag -terms (both distributed and lumped) of strip-theory members. Current is -not used in the potential-flow solution or when **WaveMod** = 6. - -HydroDyn’s standard current model includes three sub-models: -near-surface, sub-surface, and depth-independent, as illustrated in -:numref:`hd-fig:current_sub_model`. All three currents are vector summed, -along with the wave particle kinematics velocity. - -.. figure:: figs/current_sub_models.jpg - :align: center - :name: hd-fig:current_sub_model - - Standard Current Sub-Models - -The sub-surface current model follows a power law, - -.. math:: - :label: SubsurfacePowerLaw - - U_{SS}(Z) = U_{0_{SS}} \left( \frac{Z+d}{d} \right)^{ \frac{1}{7} } - -where :math:`Z` is the local depth below the SWL (negative downward), :math:`d` is the -water depth (equal to **WtrDpth** + **MSL2SWL**), and :math:`U_{0_{SS}}` is the current -velocity at SWL, corresponding to **CurrSSV0**. The heading of the -sub-surface current is defined using **CurrSSDir** following the same -convention as **WaveDir**. - -The near-surface current model follows a linear relationship down to a -reference depth such that, - -.. math:: - :label: NearsurfacePowerLaw - - U_{NS}(Z) = U_{0_{NS}} \left( \frac{Z+h_{ref}}{h_{ref}} \right), Z\in[-h_{ref},0] - -otherwise, - -.. math:: - :label: NearsurfaceDeep - - U_{NS}(Z) = 0 - -where :math:`h_{ref}` is the reference depth corresponding to **CurrNSRef** and must be -positive valued. :math:`U_{0_{NS}}` is the current velocity at SWL, corresponding to -**CurrNSV0**. The heading of the near-surface current is defined using -**CurrNSDir**, following the same convention as **WaveDir**. - -The depth-independent current velocity everywhere equals **CurrDIV**. -This current has a heading direction **CurrDIDir**, following the same -convention as **WaveDir**. Floating Platform ----------------- diff --git a/docs/source/user/seastate/input_files.rst b/docs/source/user/seastate/input_files.rst new file mode 100644 index 0000000000..050acacfcc --- /dev/null +++ b/docs/source/user/seastate/input_files.rst @@ -0,0 +1,415 @@ +Input Files +=========== + +The user configures the sea state model parameters via a primary SeaState input file. +When used in standalone mode, an additional driver input file is +required. This driver file specifies initialization inputs normally +provided to SeaState by OpenFAST. + +No lines should be added or removed from the input files, except in +tables where the number of rows is specified. + +THIS DOCUMENTATION COMES FROM THE OLD HYDRODYN DOCUMENTATION AND MUST BE UPDATED FOR SEASTATE + +Units +~~~~~ +SeaState uses the SI system (kg, m, s, N). + +.. _sea-driver-input: + +SeaState Driver Input File +~~~~~~~~~~~~~~~~~~~~~~~~~~ +The driver input file is only needed for the standalone version of +SeaState and contains inputs normally generated by OpenFAST or the +HydroDyn driver, and are +necessary to control the sea state conditions for uncoupled models. A +sample SeaState driver input file is given in Appendix B. + +.. _sea-primary-input: + +SeaState Primary Input File +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +Environmental Conditions +------------------------ +Environmental conditions are now specified in the driver input file but are left in +the primary input file for legacy compatibility. Use the keyword +DEFAULT to pass in values specified by the driver input file. Otherwise, +values given in the primary input file will overwrite those given in the +driver input file. **WtrDens** specifies the water density and must be a value greater than +or equal to zero; a typical value of seawater is around 1025 +kg/m\ :sup:`3`. **WtrDpth** specifies the water depth (depth of the flat +seabed), based on the reference MSL, and must be a value greater than +zero. **MSL2SWL** is the offset between the MSL and SWL, positive +upward. This parameter is useful when simulating the effect of tides or +storm-surge sea-level variations without having to alter the +substructure geometry information. This parameter is unused with +**WaveMod** = 6 and must be set to zero if you are using a +potential-flow model (**PotMod** = 1 or 2). + + +Waves +----- + +The WAVES section of the input file controls the internal generation of +first-order waves or the use of externally generated waves, used by both +the strip-theory and potential-flow solutions. The wave spectrum +settings in this section only pertain to the first-order wave frequency +components. When second-order terms are optionally enabled—see the +:ref:`sea-2nd_order_waves_input` and :ref:`sea-2nd_order_floating_platform_forces_input` +sections below—the second-order terms are calculated using the +first-order wave-component amplitudes and extra energy is added to the +wave spectrum (at the difference and sum frequencies). + +**WaveMod** specifies the incident wave kinematics model. The options +are: + +* 0: none = still water + +* 1: regular (periodic) waves + +* 1P#: regular (periodic) waves with user-specified phase, for example + 1P20.0 for regular waves with a 20˚ phase (without P#, the phase + will be random, based on **WaveSeed**); 0˚ phase represents a + cosine function, starting at the peak and decreasing in time + +* 2: Irregular (stochastic) waves based on the JONSWAP or + Pierson-Moskowitz frequency spectrum + +* 3: Irregular (stochastic) waves based on a white-noise frequency + spectrum + +* 4: Irregular (stochastic) waves based on a user-defined frequency + spectrum from routine *UserWaveSpctrm()*; see Appendix D for + compiling instructions + +* 5: Externally generated wave-elevation time series + +* 6: Externally generated full wave-kinematics time series + +Option 4 requires that the *UserWaveSpctrm()* subroutine of the +*Waves.f90* source file be implemented by the user, and will require +recompiling either the standalone HydroDyn program or FAST. Option 5 +allows the use of externally generated wave-elevation time series, from +which the hydrodynamic loads in the potential-flow solution or the wave +kinematics used in the strip-theory solution are derived internally. +Option 6 allows the use of full externally generated wave kinematics for +use with the strip-theory solution (but not the potential-flow +solution). With options 5 and 6, the externally generated wave data is +provided through input files, all of which have the root name given by +the **WvKinFile** parameter below. + +This version does not include the ability to model stretching of +internally generated incident wave kinematics to the instantaneous free +surface; you must set **WaveStMod** = 0. + +**WaveTMax** sets the length of the incident wave kinematics time +series, but it also determines the frequency step used in the inverse +FFT, from which the internal wave time series are derived (*Δω* = +2\ *π*/**WaveTMax**). If **WaveTMax** is less than the total simulation +time, HydroDyn implements repeating wave kinematics that have a period +of **WaveTMax**; **WaveTMax** must not be less than the total simulation +time when **WaveMod** = 5. **WaveDT** determines the time step for the +wave kinematics time series, but it also determines the maximum +frequency in the inverse FFT (*ω\ max* = *π*/**WaveDT**). When modeling +irregular sea states, we recommend that **WaveTMax** be set to at least +1 hour (3600 s) and that **WaveDT** be a value in the range between 0.1 +and 1.0 s to ensure sufficient resolution of the wave spectrum and wave +kinematics. When HydroDyn is coupled to FAST, **WaveDT** may be +specified arbitrarily independently from the glue code time step of FAST +(the wave kinematics will be interpolated in time as necessary); +**WaveDT** must equal the glue code time step of FAST when **WaveMod** = +6. + +For internally generated waves, the wave height (crest-to-trough, twice +the amplitude) for regular waves and the significant wave height for +irregular waves is set using **WaveHs** (only used when **WaveMod** = 1, +2, or 3). The wave period for regular waves and the peak-spectral wave +period for irregular waves is controlled with the **WaveTp** parameter +(only used when **WaveMod** = 1 or 2). **WavePkShp** is the peak-shape +parameter of JONSWAP irregular wave spectrum (only used when **WaveMod** += 2). Set **WavePkShp** to DEFAULT to obtain the value recommended in +the IEC 61400-3 Annex B, derived based on the peak-spectral period and +significant wave height [IEC, 2009]. Set **WavePkShp** to 1.0 for the +Pierson-Moskowitz spectrum. + +**WvLowCOff** and **WvHiCOff** control the lower and upper cut-off +frequencies (in rad/s) of the first-order wave spectrum; the first-order +wave-component amplitudes are zeroed below and above these cut-off +frequencies, respectively. **WvLowCOff** may be set lower than the +low-energy limit of the first-order wave spectrum to minimize +computational expense. Setting a proper upper cut-off frequency +(**WvHiCOff**) also minimizes computational expense and is important to +prevent nonphysical effects when approaching of the breaking-wave limit +and to avoid nonphysical wave forces at high frequencies (i.e., at short +wavelengths) when using a strip-theory solution. **WvLowCOff** and +**WvHiCOff** are unused when **WaveMod** = 0, 1, or 6. + +**WaveDir** (unused when **WaveMod** = 0 or 6) is the mean wave +propagation heading direction (in degrees), and must be in the range +(-180,180]. A heading of 0 corresponds to wave propagation in the +positive X-axis direction. And a heading of 90 corresponds to wave +propagation in the positive Y-axis direction. **WaveDirMod** specifies +the wave directional spreading model (only used when **WaveMod** = 2, 3, +or 4). Setting **WaveDirMod** to 0 disables directional spreading, +resulting in long-crested (plane-progressive) sea states propagating in +the **WaveDir** direction. Setting **WaveDirMod** to 1 enables the +modeling of short-crested sea states, with a mean propagation direction +of **WaveDir**, through the commonly used cosine spreading function +(COS:sup:`2\ S`) to define the directional spreading spectrum, based on +the spreading coefficient (*S*) defined via **WaveDirSpread**. The wave +directional spreading spectrum is discretized with an equal-energy +method using **WaveNDir** number of equal-energy bins. **WaveNDir** is +an odd-valued integer greater or equal to 1 (1 or 3 or 5…), but HydroDyn +may slightly increase the specified value of **WaveNDir** to ensure that +there is the same number of wave components within each direction bin; +setting **WaveNDir** = 1 is equivalent to setting **WaveDirMod** = 0. +The range of the directional spread (in degrees) is defined via +**WaveDirSpread**. The equal-energy method assumes that the directional +spreading spectrum is the product of a frequency spectrum and a +spreading function i.e. *S*\ (*ω*,\ *β*) = *S*\ (*ω*)\ *D*\ (*β*). +Directional spreading is not permitted when using Newman’s approximation +of the second-order difference-frequency potential-flow loads. + +**WaveSeed(1)** and **WavedSeed(2)** (unused when **WaveMod** = 0, 5, or +1) combined determine the initial seed (starting point) for the internal +pseudorandom number generator (pRNG) needed to derive the internal wave +kinematics from the wave frequency and direction spectra. If both are +numeric values, the Fortran intrinsic pRNG is used. If **WaveSeed(2)** +is the string "RANLUX", an alternative pRNG included with the NWTC Library +is used and the value of **WaveSeed(1)** is the seed. If you want to +run different time-domain realizations for given boundary conditions (of +significant wave height, and peak-spectral period, etc.), you should +change one or both seeds between simulations. While the phase of each +wave frequency and direction component of the wave spectrum is always +based on a uniform distribution (except when using the 1P# **WaveMod** +option), the amplitude of the wave frequency spectrum can also be +randomized (following a normal distribution) by setting **WaveNDAmp** to +TRUE. Setting **WaveNDAmp** to FALSE means that the amplitude of the +wave frequency spectrum always matches the target spectrum. +**WaveNDAmp** is only used with **WaveMod** = 2, 3, or 4. + +When using externally generated wave data (**WaveMod** = 5 or 6), input +parameter **WvKinFile** should be set to the root name of the input +file(s) (without extension) containing the data. + +Using externally generated wave-elevation time series (**WaveMod** = 5) +requires a text-formatted input data file with the extension *.Elev* +containing two columns of data—the first is time (starting at zero) (in +s) and the second is the wave elevation at (0,0) (in m), separated by +whitespace. Header lines (identified as those not beginning with a +number) are ignored. The time series must be at least **WaveTMax** in +length and not less than the total simulation time and the time step +must match **WaveDT**. The wave-elevation time series specified is +assumed to be of first order and long-crested, but is not checked for +physical correctness. When second-order terms are optionally enabled—see +the 2\ :sup:`ND`-ORDER WAVES and 2\ :sup:`ND`-ORDER FLOATING PLATFORM +FORCES sections below—the second-order terms are calculated using the +wave-component amplitudes derived from the provided wave-elevation time +series and extra energy is added to the wave spectrum (at the difference +and sum frequencies). + +Using full externally generated wave kinematics (**WaveMod** = 6) +requires eight text-formatted input data files, all without headers. +Seven files with extensions *.Vxi*, *.Vyi*, *.Vzi*, *.Axi*, *.Ayi*, +*.Azi*, and *.DynP* correspond to the *X*, *Y*, and *Z* velocities (in +m/s) and accelerations (in m/s\ :sup:`2`) in the global inertial-frame +coordinate system and the dynamic pressure (in Pa) time series. Each of +these files must have exactly **WaveTMax**/**DT** rows and *N* +whitepace-separated columns, where *N* is the total number of internal +HydroDyn analysis nodes (corresponding exactly to those written to the +HydroDyn summary file). Time is absent from the files, but is assumed to +go from zero to **WaveTMax** – **WaveDT** in steps of **WaveDT**. To use +this feature, it is the burden of the user to generate wave kinematics +data at each of HydroDyn’s time steps and analysis nodes. HydroDyn will +not interpolate the data; as such, when HydroDyn is coupled to FAST, +**WaveDT** must equal the glue code time step of FAST. A numerical value +(including 0) in a file is assumed to be valid data (with 0 +corresponding to 0 m/s, 0 m/s\ :sup:`2`, or 0 Pa); a nonnumeric string +will designate that the node is outside of the water at that time step +(above the instantaneous water elevation or below the seabed)—externally +generated wave kinematics used with **WaveMod** = 6 are not limited to +the domain between a flat seabed and SWL and may consider wave +stretching, higher-order wave theories, or an uneven seabed. All seven +files must have nonnumeric strings in the same locations within the +file. The eighth file, with extension *.Elev*, must contain the wave +elevation (in m) at each of the **NWaveElev** points on the SWL where +wave elevations can be output—see below; this data is required for +output purposes only and is not used by HydroDyn for other means. This +file must have exactly **WaveTMax**/**DT** rows and **NWaveElev** +whitepace-separated columns and only valid numeric data is allowed (the +file will have **NWaveElev** + ( **WaveElevNX** × **WaveElevNY** ) +columns when HydroDyn is operated in standalone mode). The data in these +files is not processed (filtered, etc.) or checked for physical +correctness (other than for consistency in the location of the +nonnumeric strings). Full externally generated wave kinematics +(**WaveMod** = 6) cannot be used in conjunction with the potential-flow +solution. + +You can generate up to 9 wave elevation outputs. **NWaveElev** +determines the number (between 0 and 9), and the whitespace-separated +lists of **WaveElevxi** and **WaveElevyi** determine the locations of +these **NWaveElev** number of points on the SWL plane in the global +inertial-frame coordinate system. + +.. _sea-2nd_order_waves_input: + +2\ :sup:`nd`-Order Waves +------------------------ +The 2\ :sup:`ND`-ORDER WAVES section (unused when **WaveMod** = 0 or 6) +of the input file allows the option of adding second-order contributions +to the wave kinematics used by the strip-theory solution. When +second-order terms are optionally enabled, the second-order terms are +calculated using the first-order wave-component amplitudes and extra +energy is added to the wave spectrum (at the difference and sum +frequencies). The second-order terms cannot be computed without also +including the first-order terms from the WAVES section above. Enabling +the second-order terms allows one to capture some of the nonlinearities +of real surface waves, permitting more accurate modeling of sea states +and the associated wave loads at the expense of greater computational +effort (mostly at HydroDyn initialization). + +While the cut-off frequencies in this section apply to both the +second-order wave kinematics used by strip theory and the second-order +diffraction loads in potential-flow theory, the second-order terms +themselves are enabled separately. The second-order wave kinematics used +by strip theory are enabled in this section while the second-order +diffraction loads in potential-flow theory are enabled in the +:ref:`sea-2nd_order_floating_platform_forces_input` section below. While the +second-order effects are included when enabled, the wave elevations +output from HydroDyn will only include the second-order terms when the +second-order wave kinematics are enabled in this section. + +To use second-order wave kinematics in the strip-theory solution, set +**WvDiffQTF** and/or **WvSumQTF** to TRUE. When **WvDiffQTF** is set to +TRUE, second-order difference-frequency terms, calculated using the full +difference-frequency QTF, are incorporated in the wave kinematics. When +**WvSumQTF** is set to TRUE, second-order sum-frequency terms, +calculated using the full sum-frequency QTF, are incorporated in the +wave kinematics. The full difference- and sum-frequency wave kinematics +QTFs are implemented analytically following [Sharma and Dean, 1981], +which extends Stokes second-order theory to irregular multidirectional +waves. A setting of FALSE disregards the second-order contributions to +the wave kinematics in the strip-theory solution. + +**WvLowCOffD** and **WvHiCOffD** control the lower and upper cut-off +frequencies (in rad/s) of the second-order difference-frequency terms; +the second-order difference-frequency terms are zeroed below and above +these cut-off frequencies, respectively. The cut-offs apply directly to +the physical difference frequencies, not the two individual first-order +frequency components of the difference frequencies. When enabling +second-order potential-flow theory, a setting of **WvLowCOffD** = 0 is +advised to avoid eliminating the mean-drift term (second-order wave +kinematics do not have a nonzero mean). **WvHiCOffD** need not be set +higher than the peak-spectral frequency of the first-order wave spectrum +(*ω\ p* = 2\ *π*/**WaveTp**) to minimize computational expense. + +Likewise, **WvLowCOffS** and **WvHiCOffS** control the lower and upper +cut-off frequencies (in rad/s) of the second-order sum-frequency terms; +the second-order sum-frequency terms are zeroed below and above these +cut-off frequencies, respectively. The cut-offs apply directly to the +physical sum frequencies, not the two individual first-order frequency +components of the sum frequencies. **WvLowCOffS** need not be set lower +than the peak-spectral frequency of the first-order wave spectrum +(*ω\ p* = 2\ *π*/**WaveTp**) to minimize computational expense. Setting +a proper upper cut-off frequency (**WvHiCOffS**) also minimizes +computational expense and is important to (1) ensure convergence of the +second-order summations, (2) avoid unphysical "bumps" in the wave +troughs, (3) prevent nonphysical effects when approaching of the +breaking-wave limit, and (4) avoid nonphysical wave forces at high +frequencies (i.e., at short wavelengths) when using a strip-theory +solution. + +Because the second-order terms are calculated using the first-order +wave-component amplitudes, the second-order cut-off frequencies +(**WvLowCOffD**, **WvHiCOffD**, **WvLowCOffS**, and **WvHiCOffS**) are +used in conjunction with the first-order cut-off frequencies +(**WvLowCOff** and **WvHiCOff**) from the WAVES section. However, the +second-order cut-off frequencies are not used by Newman’s approximation +of the second-order difference-frequency potential-flow loads, which are +derived solely from first-order effects. + +Current +------- +You can include water velocity due to a current model by setting +**CurrMod** = 1. If **CurrMod** is set to zero, then the simulation will +not include current. **CurrMod** = 2 requires that the *UserCurrent()* +subroutine of the *Current.f90* source file be implemented by the user, +and will require recompiling either the standalone HydroDyn program or +FAST. Current induces steady hydrodynamic loads through the viscous-drag +terms (both distributed and lumped) of strip-theory members. Current is +not used in the potential-flow solution or when **WaveMod** = 6. + +HydroDyn’s standard current model includes three sub-models: +near-surface, sub-surface, and depth-independent, as illustrated in +:numref:`sea-fig:current_sub_model`. All three currents are vector summed, +along with the wave particle kinematics velocity. + +.. figure:: figs/current_sub_models.jpg + :align: center + :name: sea-fig:current_sub_model + + Standard Current Sub-Models + +The sub-surface current model follows a power law, + +.. math:: + :label: SubsurfacePowerLaw + + U_{SS}(Z) = U_{0_{SS}} \left( \frac{Z+d}{d} \right)^{ \frac{1}{7} } + +where :math:`Z` is the local depth below the SWL (negative downward), :math:`d` is the +water depth (equal to **WtrDpth** + **MSL2SWL**), and :math:`U_{0_{SS}}` is the current +velocity at SWL, corresponding to **CurrSSV0**. The heading of the +sub-surface current is defined using **CurrSSDir** following the same +convention as **WaveDir**. + +The near-surface current model follows a linear relationship down to a +reference depth such that, + +.. math:: + :label: NearsurfacePowerLaw + + U_{NS}(Z) = U_{0_{NS}} \left( \frac{Z+h_{ref}}{h_{ref}} \right), Z\in[-h_{ref},0] + +otherwise, + +.. math:: + :label: NearsurfaceDeep + + U_{NS}(Z) = 0 + +where :math:`h_{ref}` is the reference depth corresponding to **CurrNSRef** and must be +positive valued. :math:`U_{0_{NS}}` is the current velocity at SWL, corresponding to +**CurrNSV0**. The heading of the near-surface current is defined using +**CurrNSDir**, following the same convention as **WaveDir**. + +The depth-independent current velocity everywhere equals **CurrDIV**. +This current has a heading direction **CurrDIDir**, following the same +convention as **WaveDir**. + + + +Output Channels +--------------- +This section controls output quantities generated by HydroDyn. Enter one +or more lines containing quoted strings that in turn contain one or more +output parameter names. Separate output parameter names by any +combination of commas, semicolons, spaces, and/or tabs. If you prefix a +parameter name with a minus sign, "-", underscore, "_", or the +characters "m" or "M", HydroDyn will multiply the value for that channel +by –1 before writing the data. The parameters are not necessarily +written in the order they are listed in the input file. HydroDyn allows +you to use multiple lines so that you can break your list into +meaningful groups and so the lines can be shorter. You may enter +comments after the closing quote on any of the lines. Entering a line +with the string "END" at the beginning of the line or at the beginning +of a quoted string found at the beginning of the line will cause +HydroDyn to quit scanning for more lines of channel names. Member- and +joint-related quantities are generated for the requested +:ref:`sea-member-output-list` and :ref:`sea-joint-output-list`. +If HydroDyn encounters an unknown/invalid +channel name, it warns the users but will remove the suspect channel +from the output file. Please refer to Appendix C for a complete list of +possible output parameters. diff --git a/glue-codes/fast-farm/src/FAST_Farm_Subs.f90 b/glue-codes/fast-farm/src/FAST_Farm_Subs.f90 index 8fa232a625..7b33fe2831 100644 --- a/glue-codes/fast-farm/src/FAST_Farm_Subs.f90 +++ b/glue-codes/fast-farm/src/FAST_Farm_Subs.f90 @@ -1775,19 +1775,19 @@ END SUBROUTINE Farm_InitFAST SUBROUTINE Farm_InitMD( farm, ErrStat, ErrMsg ) ! Passed variables - type(All_FastFarm_Data), INTENT(INOUT) :: farm !< FAST.Farm data - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message + type(All_FastFarm_Data), TARGET, INTENT(INOUT) :: farm !< FAST.Farm data + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message ! local variables - type(MD_InitInputType) :: MD_InitInp - type(MD_InitOutputType) :: MD_InitOut + type(MD_InitInputType) :: MD_InitInp + type(MD_InitOutputType) :: MD_InitOut - INTEGER(IntKi) :: nt ! loop counter for rotor number - INTEGER(IntKi) :: ErrStat2 ! Temporary Error status - CHARACTER(ErrMsgLen) :: ErrMsg2 ! Temporary Error message - CHARACTER(*), PARAMETER :: RoutineName = 'Farm_InitMD' - + INTEGER(IntKi) :: nt ! loop counter for rotor number + INTEGER(IntKi) :: ErrStat2 ! Temporary Error status + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Temporary Error message + CHARACTER(*), PARAMETER :: RoutineName = 'Farm_InitMD' + TYPE(MeshType), POINTER :: SubstructureMotion ErrStat = ErrID_None ErrMsg = "" @@ -1880,9 +1880,7 @@ SUBROUTINE Farm_InitMD( farm, ErrStat, ErrMsg ) - ! Set up mesh maps between MoorDyn and floating platforms. - ! (for now assuming ElastoDyn - eventually could differentiate at the turbine level) - + ! Set up mesh maps between MoorDyn and floating platforms (or substructure). ! allocate mesh mappings for coupling farm-level MoorDyn with OpenFAST instances ALLOCATE( farm%m%MD_2_FWrap(farm%p%NumTurbines), farm%m%FWrap_2_MD(farm%p%NumTurbines), STAT = ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1892,38 +1890,24 @@ SUBROUTINE Farm_InitMD( farm, ErrStat, ErrMsg ) END IF ! MoorDyn point mesh to/from ElastoDyn (or SubDyn) point mesh - do nt = 1,farm%p%NumTurbines + do nt = 1,farm%p%NumTurbines !if (farm%MD%p%NFairs(nt) > 0 ) then ! only set up a mesh map if MoorDyn has connections to this turbine ! loads - CALL MeshMapCreate( farm%MD%y%CoupledLoads(nt), & - farm%FWrap(nt)%m%Turbine%MeshMapData%u_ED_PlatformPtMesh_MDf, farm%m%MD_2_FWrap(nt), ErrStat2, ErrMsg2 ) - - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':MD_2_FWrap' ) + CALL MeshMapCreate( farm%MD%y%CoupledLoads(nt), farm%FWrap(nt)%m%Turbine%MeshMapData%SubstructureLoads_Tmp_Farm, farm%m%MD_2_FWrap(nt), ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':MD_2_FWrap' ) ! kinematics - CALL MeshMapCreate( farm%FWrap(nt)%m%Turbine%ED%y%PlatformPtMesh, & - farm%MD%Input(1)%CoupledKinematics(nt), farm%m%FWrap_2_MD(nt), ErrStat2, ErrMsg2 ) - - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':FWrap_2_MD' ) + IF (farm%FWrap(nt)%m%Turbine%p_FAST%CompSub == Module_SD) then + SubstructureMotion => farm%FWrap(nt)%m%Turbine%SD%y%y3Mesh + ELSE + SubstructureMotion => farm%FWrap(nt)%m%Turbine%ED%y%PlatformPtMesh + END IF + + CALL MeshMapCreate( SubstructureMotion, farm%MD%Input(1)%CoupledKinematics(nt), farm%m%FWrap_2_MD(nt), ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':FWrap_2_MD' ) - ! Since SubDyn connections are not enabled yet, issue warning - if (allocated(farm%FWrap(nt)%m%Turbine%SD%Input)) then - call SetErrStat( ErrID_Warn, 'Turbine '//trim(Num2LStr(nt))//': Farm moorings connected to ElastoDyn platform reference instead of SubDyn', Errstat, ErrMsg, RoutineName//':MD_2_FWrap' ) - endif - - ! SubDyn alternative: - !CALL MeshMapCreate( farm%MD%y%CoupledLoads(nt), & - ! farm%FWrap(nt)%m%Turbine%SD%Input(1)%LMesh, farm%m%MD_2_FWrap, ErrStat2, ErrMsg2 ) - ! - !CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':MD_2_FWrap' ) - ! - !CALL MeshMapCreate( farm%FWrap(nt)%m%Turbine%SD%y%y2Mesh, & - ! farm%MD%Input(1)%CoupledKinematics(nt), farm%m%FWrap_2_MD, ErrStat2, ErrMsg2 ) - ! - !CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':FWrap_2_MD' ) - !end if - end do + end do farm%p%Module_Ver( ModuleFF_MD) = MD_InitOut%Ver @@ -1939,19 +1923,20 @@ END SUBROUTINE Farm_InitMD !---------------------------------------------------------------------------------------------------------------------------------- !> This routine moves a farm-level MoorDyn simulation one step forward, to catch up with FWrap_Increment subroutine FARM_MD_Increment(t, n, farm, ErrStat, ErrMsg) - REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds - INTEGER(IntKi), INTENT(IN ) :: n !< Current step of the simulation in FARM MoorDyn terms - type(All_FastFarm_Data), INTENT(INOUT) :: farm !< FAST.Farm data - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message - - INTEGER(IntKi) :: nt - INTEGER(IntKi) :: n_ss - INTEGER(IntKi) :: n_FMD - REAL(DbKi) :: t_next ! time at next step after this one (s) - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FARM_MD_Increment' + REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds + INTEGER(IntKi), INTENT(IN ) :: n !< Current step of the simulation in FARM MoorDyn terms + type(All_FastFarm_Data), TARGET, INTENT(INOUT) :: farm !< FAST.Farm data + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message + + INTEGER(IntKi) :: nt + INTEGER(IntKi) :: n_ss + INTEGER(IntKi) :: n_FMD + REAL(DbKi) :: t_next ! time at next step after this one (s) + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'FARM_MD_Increment' + TYPE(MeshType), POINTER :: SubstructureMotion ErrStat = ErrID_None ErrMsg = "" @@ -1978,28 +1963,29 @@ subroutine FARM_MD_Increment(t, n, farm, ErrStat, ErrMsg) do nt = 1,farm%p%NumTurbines !if (farm%MD%p%NFairs(nt) > 0 ) then - - CALL Transfer_Point_to_Point( farm%FWrap(nt)%m%Turbine%ED%y%PlatformPtMesh, farm%MD%Input(1)%CoupledKinematics(nt), & - farm%m%FWrap_2_MD(nt), ErrStat2, ErrMsg2 ) - - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//'u_MD%CoupledKinematics' ) - - ! SubDyn alternative - !CALL Transfer_Point_to_Point( farm%FWrap(nt)%m%Turbine%SD%y%y2Mesh, farm%MD%Input(1)%CoupledKinematics(nt), farm%m%FWrap_2_MD(nt), ErrStat, ErrMsg ) - !end if - end do + + IF (farm%FWrap(nt)%m%Turbine%p_FAST%CompSub == Module_SD) then + SubstructureMotion => farm%FWrap(nt)%m%Turbine%SD%y%y3Mesh + ELSE + SubstructureMotion => farm%FWrap(nt)%m%Turbine%ED%y%PlatformPtMesh + END IF + + CALL Transfer_Point_to_Point( SubstructureMotion, farm%MD%Input(1)%CoupledKinematics(nt), farm%m%FWrap_2_MD(nt), ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//'u_MD%CoupledKinematics' ) + + !end if + end do ! ----- update states and calculate outputs ----- CALL MD_UpdateStates( t, n_FMD, farm%MD%Input, farm%MD%InputTimes, farm%MD%p, farm%MD%x, & farm%MD%xd, farm%MD%z, farm%MD%OtherSt, farm%MD%m, ErrStat2, ErrMsg2 ) - CALL SetErrStat( Errstat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + CALL MD_CalcOutput( t, farm%MD%Input(1), farm%MD%p, farm%MD%x, farm%MD%xd, farm%MD%z, & farm%MD%OtherSt, farm%MD%y, farm%MD%m, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -2008,25 +1994,18 @@ subroutine FARM_MD_Increment(t, n, farm, ErrStat, ErrMsg) if (farm%MD%p%nCpldCons(nt) > 0 ) then ! only map loads if MoorDyn has connections to this turbine (currently considering only Point connections <<< ) - ! copy the MD output mesh for this turbine into a copy mesh within the FAST instance - !CALL MeshCopy ( farm%MD%y%CoupledLoads(nt), farm%FWrap(nt)%m%Turbine%MeshMapData%u_FarmMD_CoupledLoads, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - ! CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':MeshCopy CoupledLoads' ) - - - ! mapping - CALL Transfer_Point_to_Point( farm%MD%y%CoupledLoads(nt), farm%FWrap(nt)%m%Turbine%MeshMapData%u_ED_PlatformPtMesh_MDf, & + IF (farm%FWrap(nt)%m%Turbine%p_FAST%CompSub == Module_SD) then + SubstructureMotion => farm%FWrap(nt)%m%Turbine%SD%y%y3Mesh + ELSE + SubstructureMotion => farm%FWrap(nt)%m%Turbine%ED%y%PlatformPtMesh + END IF + + ! mapping; Note: SubstructureLoads_Tmp_Farm contains loads from the farm-level (at a previous step); gets integrated into individual turbines inside FWrap_Increment() + CALL Transfer_Point_to_Point( farm%MD%y%CoupledLoads(nt), farm%FWrap(nt)%m%Turbine%MeshMapData%SubstructureLoads_Tmp_Farm, & farm%m%MD_2_FWrap(nt), ErrStat2, ErrMsg2, & - farm%MD%Input(1)%CoupledKinematics(nt), farm%FWrap(nt)%m%Turbine%ED%y%PlatformPtMesh ) !u_MD and y_ED contain the displacements needed for moment calculations + farm%MD%Input(1)%CoupledKinematics(nt), SubstructureMotion ) !u_MD and y_ED contain the displacements needed for moment calculations CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - - ! SubDyn alternative - !CALL Transfer_Point_to_Point( farm%MD%y%CoupledLoads(nt), farm%FWrap(nt)%m%Turbine%MeshMapData%u_SD_LMesh_2, & - ! farm%m%MD_2_FWrap(nt), ErrStat2, ErrMsg2, & - ! farm%MD%Input(1)%CoupledKinematics(nt), farm%FWrap(nt)%m%Turbine%SD%y%y2Mesh ) !u_MD and y_SD contain the displacements needed for moment calculations - ! - !farm%FWrap(nt)%m%Turbine%MeshMapData%u_SD_LMesh%Force = farm%FWrap(nt)%m%Turbine%MeshMapData%u_SD_LMesh%Force + farm%FWrap(nt)%m%Turbine%MeshMapData%u_SD_LMesh_2%Force - !farm%FWrap(nt)%m%Turbine%MeshMapData%u_SD_LMesh%Moment = farm%FWrap(nt)%m%Turbine%MeshMapData%u_SD_LMesh%Moment + farm%FWrap(nt)%m%Turbine%MeshMapData%u_SD_LMesh_2%Moment end if end do diff --git a/glue-codes/openfast/src/FastLibAPI.cpp b/glue-codes/openfast/src/FastLibAPI.cpp index 12f58a7c7f..ffed53e099 100644 --- a/glue-codes/openfast/src/FastLibAPI.cpp +++ b/glue-codes/openfast/src/FastLibAPI.cpp @@ -8,7 +8,6 @@ #include #include - FastLibAPI::FastLibAPI(std::string input_file): n_turbines(1), i_turb(0), diff --git a/glue-codes/simulink/examples/Run_Test01_SIG.m b/glue-codes/simulink/examples/Run_Test01_SIG.m index 77b9062c42..992ac4ccc1 100644 --- a/glue-codes/simulink/examples/Run_Test01_SIG.m +++ b/glue-codes/simulink/examples/Run_Test01_SIG.m @@ -32,6 +32,11 @@ FAST_InputFileName = [ OpenFASTRoot 'AWT_YFix_WSt.fst' ]; TMax = 20; +OutList = {'Time','Wind1VelX','Wind1VelY','Wind1VelZ','LSSGagVxa','LSSGagPxa','TeetDefl',... + 'TipDxb2','TipDyb2','TipALxb2','TipALyb2','Spn2ALxb1','Spn2ALyb1','YawBrRDxt',... + 'YawBrRDyt','YawBrRVxp','YawBrRVyp','YawBrRAxp','YawBrRAyp','RootMyc1','RootMxc1',... + 'RootFxc2','RootFyc2','Spn3MLxb1','Spn3MLyb1','RotTorq','YawBrMzn','TwrBsMzt'}; + % run the model sim('Test01_SIG.mdl',[0,TMax]); diff --git a/modules/aerodyn/src/AeroAcoustics.f90 b/modules/aerodyn/src/AeroAcoustics.f90 index 77449b40bc..ebb61f1239 100644 --- a/modules/aerodyn/src/AeroAcoustics.f90 +++ b/modules/aerodyn/src/AeroAcoustics.f90 @@ -1508,7 +1508,7 @@ SUBROUTINE TBLTE(ALPSTAR,C,U,THETA,PHI,L,R,p,d99Var2,dstarVar1,dstarVar2,StallVa IF (ALPSTAR .GT. StallVal) ST2 = 4.72 * ST1 ST1PRIM = (ST1+ST2)/2. ! Eq 33 from BPM Airfoil Self-noise and Prediction paper CALL A0COMP(RC,A0) ! compute -20 dB dropout (returns A0) - CALL A0COMP(3.*RC,A02) ! compute -20 dB dropout for AoA > AoA_0 (returns A02) + CALL A0COMP(3.0_ReKi*RC,A02) ! compute -20 dB dropout for AoA > AoA_0 (returns A02) ! Evaluate minimum and maximum 'a' curves at a0 CALL AMIN(A0,AMINA0) CALL AMAX(A0,AMAXA0) @@ -2332,7 +2332,7 @@ SUBROUTINE TBLTE_TNO(U,THETA,PHI,D,R,Cfall,d99all,EdgeVelAll,p,SPLP,SPLS,SPLALPH Mach = U / p%SpdSound ! Directivity function - CALL DIRECTH_TE(REAL(Mach),THETA,PHI,DBARH,errStat2,errMsg2) + CALL DIRECTH_TE(REAL(Mach,ReKi),THETA,PHI,DBARH,errStat2,errMsg2) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsgn, RoutineName ) do i_omega = 1,n_freq diff --git a/modules/aerodyn/src/AeroDyn.f90 b/modules/aerodyn/src/AeroDyn.f90 index 2ef0eed64f..3825faf97e 100644 --- a/modules/aerodyn/src/AeroDyn.f90 +++ b/modules/aerodyn/src/AeroDyn.f90 @@ -2511,9 +2511,9 @@ subroutine SetInputsForBEMT(p, u, m, indx, errStat, errMsg) character(*), intent( out) :: ErrMsg !< Error message if ErrStat /= ErrID_None ! local variables - real(R8Ki) :: x_hat(3) - real(R8Ki) :: y_hat(3) - real(R8Ki) :: z_hat(3) + !real(R8Ki) :: x_hat(3) + !real(R8Ki) :: y_hat(3) + !real(R8Ki) :: z_hat(3) real(R8Ki) :: x_hat_disk(3) real(R8Ki) :: y_hat_disk(3) real(R8Ki) :: z_hat_disk(3) @@ -3269,10 +3269,10 @@ subroutine SetOutputsFromBEMT( p, u, m, y ) y%BladeLoad(k)%Moment(:,j) = matmul( moment, m%orientationAnnulus(:,:,j,k) ) ! moment per unit length of the jth node in the kth blade else - ! Transfer loads from the airfoil frame to the blade frame - y%BladeLoad(k)%Force(:,j) = matmul( forceAirfoil, u%BladeMotion(k)%Orientation(:,:,j) ) ! force per unit length of the jth node in the kth blade - y%BladeLoad(k)%Moment(:,j) = matmul( momentAirfoil, u%BladeMotion(k)%Orientation(:,:,j) ) ! moment per unit length of the jth node in the kth blade - endif + ! Transfer loads from the airfoil frame to the blade frame + y%BladeLoad(k)%Force(:,j) = matmul( forceAirfoil, u%BladeMotion(k)%Orientation(:,:,j) ) ! force per unit length of the jth node in the kth blade + y%BladeLoad(k)%Moment(:,j) = matmul( momentAirfoil, u%BladeMotion(k)%Orientation(:,:,j) ) ! moment per unit length of the jth node in the kth blade + endif end do !j=nodes end do !k=blades diff --git a/modules/aerodyn/src/AeroDyn_Driver_Subs.f90 b/modules/aerodyn/src/AeroDyn_Driver_Subs.f90 index 2af1a7f720..a9d2174977 100644 --- a/modules/aerodyn/src/AeroDyn_Driver_Subs.f90 +++ b/modules/aerodyn/src/AeroDyn_Driver_Subs.f90 @@ -2225,6 +2225,7 @@ subroutine userHubMotion(nt, iWT, dvr, ADI, FED, arr, azimuth, rotSpeed, rotAcc, alphaTq = min(max(alphaTq, 0._ReKi), 1.0_ReKi) ! Bounding value ! --- Rotor torque + !bjj: note: WriteOutput isn't always computed when AD_CalcOutput is called (though it appears to be okay in AeroDyn_Inflow.f90); be careful that AllOuts( RtAeroMxh ) is up to date. rotTorque = ADI%m%AD%rotors(iWT)%AllOuts( RtAeroMxh ) ! Optional filtering of input torque rotTorque_filt = ( 1.0 - alphaTq )*rotTorque + alphaTq*rotTorque_filt_prev diff --git a/modules/aerodyn/src/AeroDyn_IO.f90 b/modules/aerodyn/src/AeroDyn_IO.f90 index b8ab0babd8..6450bbc614 100644 --- a/modules/aerodyn/src/AeroDyn_IO.f90 +++ b/modules/aerodyn/src/AeroDyn_IO.f90 @@ -1582,12 +1582,12 @@ END SUBROUTINE AD_PrintSum !! 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 07-Sep-2022 16:15:55. +!! This routine was generated by Write_ChckOutLst.m using the parameters listed in OutListParameters.xlsx at 27-Oct-2022 11:00:28. SUBROUTINE SetOutParam(OutList, p, p_AD, ErrStat, ErrMsg ) !.................................................................................................................................. - + IMPLICIT NONE - + ! Passed variables CHARACTER(ChanLen), INTENT(IN) :: OutList(:) !< The list of user-requested outputs @@ -1841,12 +1841,12 @@ SUBROUTINE SetOutParam(OutList, p, p_AD, 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 !---------------------------------------------------------------------------------------------------------------------------------- @@ -2120,11 +2120,12 @@ subroutine calcCantAngle(f, xi,stencilSize,n,cantAngle) real(ReKi) :: cx(stencilSize), cf(stencilSize), xiIn(stencilSize) real(ReKi) :: fIn(stencilSize), cPrime(n), fPrime(n), xiAbs(n) real(ReKi), intent(inout) :: cantAngle(n) + real(ReKi), parameter :: ThisTol = 1e-6 do i = 1,size(xi) xiAbs = abs(xi-xi(i)) - call hpsort_eps_epw (n, xiAbs, sortInd, 1e-6) + call hpsort_eps_epw (n, xiAbs, sortInd, ThisTol) if (i.eq.1) then fIn = f(1:stencilSize) @@ -2404,7 +2405,7 @@ subroutine hpsort_eps_epw (n, ra, ind, eps) implicit none !-input/output variables integer(IntKi), intent(in) :: n - real(ReKi), intent(in) :: eps + real, intent(in) :: eps integer(IntKi) :: ind (n) real(ReKi) :: ra (n) !-local variables diff --git a/modules/aerodyn/src/AirfoilInfo.f90 b/modules/aerodyn/src/AirfoilInfo.f90 index 477d46ca50..91cb0f02fa 100644 --- a/modules/aerodyn/src/AirfoilInfo.f90 +++ b/modules/aerodyn/src/AirfoilInfo.f90 @@ -1051,7 +1051,7 @@ SUBROUTINE CalculateUACoeffs(CalcDefaults,p,ColCl,ColCd,ColCm,ColUAf,UA_f_cn) ! Compute variables to help x3 state with +/-180-degree wrap-around issues ! and make sure that the separation function is monotonic before iLow and after iHigh: - call ComputeUASeparationFunction_zero(p, ColUAf, p%Coefs(:,ColCl)) ! this was comparing with alpha0, but now we compaer with alphaUpper and alphaLower + call ComputeUASeparationFunction_zero(p, ColUAf, p%Coefs(:,ColCl)) ! this was comparing with alpha0, but now we compare with alphaUpper and alphaLower ! Ensuring everything is in harmony diff --git a/modules/aerodyn/src/FVW_IO.f90 b/modules/aerodyn/src/FVW_IO.f90 index 1efc58adfd..bdbeb6b686 100644 --- a/modules/aerodyn/src/FVW_IO.f90 +++ b/modules/aerodyn/src/FVW_IO.f90 @@ -41,8 +41,8 @@ SUBROUTINE FVW_ReadInputFile( FileName, p, m, Inp, ErrStat, ErrMsg ) !------------------------ CIRCULATION SPECIFICATIONS ------------------------------------------- CALL ReadCom(UnIn,FileName, '--- Circulation specification header' , ErrStat2, ErrMsg2 ); if(Failed()) return CALL ReadVarWDefault(UnIn,FileName,Inp%CircSolvMethod ,'CircSolvMethod' ,'', idCircPolarData, ErrStat2,ErrMsg2); if(Failed())return - CALL ReadVarWDefault(UnIn,FileName,Inp%CircSolvConvCrit ,'CircSolvConvCrit ' ,'', 0.001 , ErrStat2,ErrMsg2); if(Failed())return - CALL ReadVarWDefault(UnIn,FileName,Inp%CircSolvRelaxation,'CircSolvRelaxation','', 0.1 , ErrStat2,ErrMsg2); if(Failed())return + CALL ReadVarWDefault(UnIn,FileName,Inp%CircSolvConvCrit ,'CircSolvConvCrit ' ,'', 0.001_ReKi , ErrStat2,ErrMsg2); if(Failed())return + CALL ReadVarWDefault(UnIn,FileName,Inp%CircSolvRelaxation,'CircSolvRelaxation','', 0.1_ReKi , ErrStat2,ErrMsg2); if(Failed())return CALL ReadVarWDefault(UnIn,FileName,Inp%CircSolvMaxIter ,'CircSolvMaxIter' ,'', 30 , ErrStat2,ErrMsg2); if(Failed())return CALL ReadVar (UnIn,FileName,Inp%CirculationFile ,'CirculationFile' ,'' , ErrStat2,ErrMsg2); if(Failed())return !------------------------ WAKE OPTIONS ------------------------------------------- diff --git a/modules/aerodyn/src/FVW_Subs.f90 b/modules/aerodyn/src/FVW_Subs.f90 index 64dc8c6a28..69e45094d8 100644 --- a/modules/aerodyn/src/FVW_Subs.f90 +++ b/modules/aerodyn/src/FVW_Subs.f90 @@ -1047,8 +1047,8 @@ subroutine FVW_InitRegularization(x, p, m, ErrStat, ErrMsg) if (p%RegDeterMethod==idRegDeterConstant) then ! Constant reg param throughout the wake if (p%WakeRegMethod==idRegAge) then ! NOTE: age method implies a division by rc - p%WingRegParam=max(0.01, p%WingRegParam) - p%WakeRegParam=max(0.01, p%WakeRegParam) + p%WingRegParam=max(0.01_ReKi, p%WingRegParam) + p%WakeRegParam=max(0.01_ReKi, p%WakeRegParam) endif ! Set reg param on wing and first NW diff --git a/modules/aerodyn/src/FVW_Tests.f90 b/modules/aerodyn/src/FVW_Tests.f90 index 6de6f7dff1..e2299e97e1 100644 --- a/modules/aerodyn/src/FVW_Tests.f90 +++ b/modules/aerodyn/src/FVW_Tests.f90 @@ -653,8 +653,8 @@ subroutine Test_LatticeToSegment(mvtk,iStat) ! Test trailed vorticity ! LatticeGamma2(1,:)=1 ! LatticeGamma2(2,:)=2 - CALL MeshMe(LatticePoints1,(/0.,0.,0./)) - CALL MeshMe(LatticePoints2,(/0.,0.,1./)) + CALL MeshMe(LatticePoints1,(/0.0_ReKi,0.0_ReKi,0.0_ReKi/)) + CALL MeshMe(LatticePoints2,(/0.0_ReKi,0.0_ReKi,1.0_ReKi/)) CALL WrVTK_Lattice('Points1.vtk',mvtk,LatticePoints1, LatticeGamma1, bladeframe=bladeframe) CALL WrVTK_Lattice('Points2.vtk',mvtk,LatticePoints2, LatticeGamma2, bladeframe=bladeframe) diff --git a/modules/aerodyn/src/UnsteadyAero.f90 b/modules/aerodyn/src/UnsteadyAero.f90 index 84f0addf1c..dce8be0f54 100644 --- a/modules/aerodyn/src/UnsteadyAero.f90 +++ b/modules/aerodyn/src/UnsteadyAero.f90 @@ -1753,7 +1753,7 @@ subroutine BV_getAlphas(i, j, u, p, xd, BL_p, tc, alpha_34, alphaE_L, alphaLag_D !print*,'dalpha ', dalphaL,dalphaD ! --- Alpha dynamic - isgn = sign(1.0,adotnorm) + isgn = sign(1.0_ReKi,adotnorm) alphaE_L = alpha_34 - dalphaL*isgn alphaLag_D = alpha_34 - dalphaD*isgn ! NOTE: not effective alpha yet for drag end subroutine BV_getAlphas diff --git a/modules/aerodyn14/src/AeroDyn14.f90 b/modules/aerodyn14/src/AeroDyn14.f90 index 52eb44358f..71cdb1cbd4 100644 --- a/modules/aerodyn14/src/AeroDyn14.f90 +++ b/modules/aerodyn14/src/AeroDyn14.f90 @@ -873,7 +873,7 @@ SUBROUTINE AD14_CalcOutput( Time, u, p, x, xd, z, O, y, m, ErrStat, ErrMess ) ! calculate yaw angle ! note: YawAng should use the Hub instead of the RotorFurl, but it is calculated this way to ! get the same answers as previous version. - m%Rotor%YawAng = ATAN2( -1.*u%TurbineComponents%RotorFurl%Orientation(1,2), u%TurbineComponents%RotorFurl%Orientation(1,1) ) + m%Rotor%YawAng = ATAN2( -1.0_ReKi*u%TurbineComponents%RotorFurl%Orientation(1,2), u%TurbineComponents%RotorFurl%Orientation(1,1) ) m%Rotor%SYaw = SIN( m%Rotor%YawAng ) m%Rotor%CYaw = COS( m%Rotor%YawAng ) @@ -959,7 +959,7 @@ SUBROUTINE AD14_CalcOutput( Time, u, p, x, xd, z, O, y, m, ErrStat, ErrMess ) ! note: the equation below should use TurbineComponents%Blade markers, but this is used to get the ! same answers as the previous version (before v13.00.00) - AzimuthAngle = ATAN2( -1.*DOT_PRODUCT( u%TurbineComponents%Hub%Orientation(3,:), & + AzimuthAngle = ATAN2( -1.0_ReKi*DOT_PRODUCT( u%TurbineComponents%Hub%Orientation(3,:), & u%TurbineComponents%RotorFurl%Orientation(2,:) ), & DOT_PRODUCT( u%TurbineComponents%Hub%Orientation(3,:), & u%TurbineComponents%RotorFurl%Orientation(3,:) ) ) + pi + (IBlade - 1)*p%TwoPiNB diff --git a/modules/aerodyn14/src/AeroSubs.f90 b/modules/aerodyn14/src/AeroSubs.f90 index d47f5137c7..6435e51060 100644 --- a/modules/aerodyn14/src/AeroSubs.f90 +++ b/modules/aerodyn14/src/AeroSubs.f90 @@ -5185,7 +5185,7 @@ FUNCTION FGAMMA( R, J, M, N ) / REAL( (J+N) * (J+N+2) * ((J-N)*(J-N)-1), ReKi ) ELSE IF ( ABS(J-N) == 1 ) THEN !bjj: why don't we use the pi() variable? or PibyTwo - FGAMMA = 3.14159265 * SIGN(1., REAL(R-M, ReKi) ) * .5 & + FGAMMA = Pi * SIGN(1.0_ReKi, REAL(R-M, ReKi) ) * .5 & / SQRT( HFUNC(M,N) * HFUNC(R,J) ) & / SQRT( REAL( (2*N+1) * (2*J+1) , ReKi) ) diff --git a/modules/hydrodyn/CMakeLists.txt b/modules/hydrodyn/CMakeLists.txt index 07e0319ec3..feee1f8f7c 100644 --- a/modules/hydrodyn/CMakeLists.txt +++ b/modules/hydrodyn/CMakeLists.txt @@ -16,20 +16,16 @@ if (GENERATE_TYPES) generate_f90_types(src/Conv_Radiation.txt ${CMAKE_CURRENT_LIST_DIR}/src/Conv_Radiation_Types.f90) - generate_f90_types(src/Current.txt ${CMAKE_CURRENT_LIST_DIR}/src/Current_Types.f90) generate_f90_types(src/HydroDyn.txt ${CMAKE_CURRENT_LIST_DIR}/src/HydroDyn_Types.f90) generate_f90_types(src/Morison.txt ${CMAKE_CURRENT_LIST_DIR}/src/Morison_Types.f90) generate_f90_types(src/SS_Radiation.txt ${CMAKE_CURRENT_LIST_DIR}/src/SS_Radiation_Types.f90) generate_f90_types(src/SS_Excitation.txt ${CMAKE_CURRENT_LIST_DIR}/src/SS_Excitation_Types.f90) generate_f90_types(src/WAMIT.txt ${CMAKE_CURRENT_LIST_DIR}/src/WAMIT_Types.f90) generate_f90_types(src/WAMIT2.txt ${CMAKE_CURRENT_LIST_DIR}/src/WAMIT2_Types.f90) - generate_f90_types(src/Waves.txt ${CMAKE_CURRENT_LIST_DIR}/src/Waves_Types.f90) - generate_f90_types(src/Waves2.txt ${CMAKE_CURRENT_LIST_DIR}/src/Waves2_Types.f90) endif() add_library(hydrodynlib src/Conv_Radiation.f90 - src/Current.f90 src/HydroDyn.f90 src/HydroDyn_Input.f90 src/HydroDyn_Output.f90 @@ -37,46 +33,46 @@ add_library(hydrodynlib src/Morison_Output.f90 src/SS_Radiation.f90 src/SS_Excitation.f90 - src/UserWaves.f90 src/WAMIT.f90 src/WAMIT2.f90 src/WAMIT_Interp.f90 - src/Waves.f90 - src/Waves2.f90 - src/Waves2_Output.f90 src/Conv_Radiation_Types.f90 - src/Current_Types.f90 src/HydroDyn_Types.f90 src/Morison_Types.f90 src/SS_Radiation_Types.f90 src/SS_Excitation_Types.f90 src/WAMIT_Types.f90 src/WAMIT2_Types.f90 - src/Waves_Types.f90 - src/Waves2_Types.f90 ) -target_link_libraries(hydrodynlib nwtclibs) +target_link_libraries(hydrodynlib seastlib nwtclibs) + +# HydroDyn Driver Subs Library +add_library(hydrodyn_driver_subs + src/HydroDyn_DriverSubs.f90 +) +target_link_libraries(hydrodyn_driver_subs hydrodynlib) # Driver add_executable(hydrodyn_driver src/HydroDyn_DriverCode.f90 ) -target_link_libraries(hydrodyn_driver hydrodynlib versioninfolib) +target_link_libraries(hydrodyn_driver hydrodyn_driver_subs versioninfolib) # C-bindings interface library add_library(hydrodyn_c_binding SHARED src/HydroDyn_C_Binding.f90 ) -target_link_libraries(hydrodyn_c_binding hydrodynlib versioninfolib) +target_link_libraries(hydrodyn_c_binding hydrodynlib seastlib versioninfolib) if(APPLE OR UNIX) target_compile_definitions(hydrodyn_c_binding PRIVATE IMPLICIT_DLLEXPORT) endif() + #add_executable(ss_radiation # src/SS_Radiation_DriverCode.f90) #target_link_libraries(ss_radiation hydrodynlib nwtclibs) -install(TARGETS hydrodynlib hydrodyn_driver hydrodyn_c_binding +install(TARGETS hydrodynlib hydrodyn_driver hydrodyn_driver_subs hydrodyn_c_binding EXPORT "${CMAKE_PROJECT_NAME}Libraries" RUNTIME DESTINATION bin LIBRARY DESTINATION lib diff --git a/modules/hydrodyn/python-lib/hydrodyn_library.py b/modules/hydrodyn/python-lib/hydrodyn_library.py index f9abfff7b2..3cf6847bfa 100644 --- a/modules/hydrodyn/python-lib/hydrodyn_library.py +++ b/modules/hydrodyn/python-lib/hydrodyn_library.py @@ -162,8 +162,10 @@ def __init__(self, library_path): def _initialize_routines(self): self.HydroDyn_C_Init.argtypes = [ POINTER(c_char), # OutRootName - POINTER(c_char_p), # input file string - POINTER(c_int), # input file string length + POINTER(c_char_p), # SeaState input file string + POINTER(c_int), # SeaState input file string length + POINTER(c_char_p), # HydroDyn input file string + POINTER(c_int), # HydroDyn input file string length POINTER(c_float), # gravity POINTER(c_float), # defWtrDens POINTER(c_float), # defWtrDpth @@ -216,14 +218,17 @@ def _initialize_routines(self): self.HydroDyn_C_End.restype = c_int # hydrodyn_init ------------------------------------------------------------------------------------------------------------ - def hydrodyn_init(self, input_string_array): + def hydrodyn_init(self, seast_input_string_array, hd_input_string_array): # nodePositions -- N x 6 array -- position info as [x1,y1,z1,Rx1,Ry1,Rz1] # Primary input file will be passed as a single string joined by # C_NULL_CHAR. - input_string = '\x00'.join(input_string_array) - input_string = input_string.encode('utf-8') - input_string_length = len(input_string) + seast_input_string = '\x00'.join(seast_input_string_array) + seast_input_string = seast_input_string.encode('utf-8') + seast_input_string_length = len(seast_input_string) + hd_input_string = '\x00'.join(hd_input_string_array) + hd_input_string = hd_input_string.encode('utf-8') + hd_input_string_length = len(hd_input_string) self._numChannels_c = c_int(0) @@ -264,8 +269,10 @@ def hydrodyn_init(self, input_string_array): # call HydroDyn_C_Init self.HydroDyn_C_Init( _outRootName_c, # IN: rootname for HD file writing - c_char_p(input_string), # IN: input file string - byref(c_int(input_string_length)), # IN: input file string length + c_char_p(seast_input_string), # IN: SeaState input file string + byref(c_int(seast_input_string_length)),# IN: SeaState input file string length + c_char_p(hd_input_string), # IN: HydroDyn input file string + byref(c_int(hd_input_string_length)), # IN: HydroDyn input file string length byref(c_float(self.gravity)), # IN: gravity byref(c_float(self.defWtrDens)), # IN: default water density byref(c_float(self.defWtrDpth)), # IN: default water depth diff --git a/modules/hydrodyn/src/Conv_Radiation.f90 b/modules/hydrodyn/src/Conv_Radiation.f90 index 1aa6b961f9..ed3a595f4b 100644 --- a/modules/hydrodyn/src/Conv_Radiation.f90 +++ b/modules/hydrodyn/src/Conv_Radiation.f90 @@ -1,5 +1,5 @@ !********************************************************************************************************************************** -! The Conv_Radiation and Conv_Radiation_Types modules make up a template for creating user-defined calculations in the FAST Modularization +! The Conv_Radiation and Conv_Radiation_Types modules make up a template for creating user-defined calculations in the FAST Modularization ! Framework. Conv_Radiations_Types will be auto-generated based on a description of the variables for the module. ! ! "Conv_Radiation" should be replaced with the name of your module. Example: HydroDyn @@ -21,114 +21,102 @@ ! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ! See the License for the specific language governing permissions and ! limitations under the License. -! +! !********************************************************************************************************************************** MODULE Conv_Radiation - USE Conv_Radiation_Types + USE Conv_Radiation_Types USE NWTC_Library USE NWTC_FFTPACK - + IMPLICIT NONE - + PRIVATE - + REAL(DbKi), PARAMETER, PRIVATE :: OnePlusEps = 1.0 + EPSILON(OnePlusEps) !< The number slighty greater than unity in the precision of DbKi. TYPE(ProgDesc), PARAMETER :: Conv_Rdtn_ProgDesc = ProgDesc( 'Conv_Radiation', '', '' ) - + ! ..... Public Subroutines ................................................................................................... PUBLIC :: Conv_Rdtn_Init ! Initialization routine PUBLIC :: Conv_Rdtn_End ! Ending routine (includes clean up) - - PUBLIC :: Conv_Rdtn_UpdateStates ! Loose coupling routine for solving for constraint states, integrating + + PUBLIC :: Conv_Rdtn_UpdateStates ! Loose coupling routine for solving for constraint states, integrating ! continuous states, and updating discrete states PUBLIC :: Conv_Rdtn_CalcOutput ! Routine for computing outputs - + PUBLIC :: Conv_Rdtn_CalcConstrStateResidual ! Tight coupling routine for returning the constraint state residual PUBLIC :: Conv_Rdtn_CalcContStateDeriv ! Tight coupling routine for computing derivatives of continuous states PUBLIC :: Conv_Rdtn_UpdateDiscState ! Tight coupling routine for updating discrete states - - + + CONTAINS !---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is called at the start of the simulation to perform initialization steps. +!> This routine is called at the start of the simulation to perform initialization steps. !! The parameters are set here and not changed during the simulation. !! The initial states and initial guess for the input are defined. -SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) +SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, InitOut, ErrStat, ErrMsg ) !.................................................................................................................................. TYPE(Conv_Rdtn_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine TYPE(Conv_Rdtn_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined - TYPE(Conv_Rdtn_ParameterType), INTENT( OUT) :: p !< Parameters + TYPE(Conv_Rdtn_ParameterType), INTENT( OUT) :: p !< Parameters TYPE(Conv_Rdtn_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states TYPE(Conv_Rdtn_DiscreteStateType), INTENT( OUT) :: xd !< Initial discrete states TYPE(Conv_Rdtn_ConstraintStateType), INTENT( OUT) :: z !< Initial guess of the constraint states - TYPE(Conv_Rdtn_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states - TYPE(Conv_Rdtn_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; + TYPE(Conv_Rdtn_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states + TYPE(Conv_Rdtn_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; !! only the output mesh is initialized) - TYPE(Conv_Rdtn_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables - REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: the rate that - !! (1) Conv_Rdtn_UpdateStates() is called in loose coupling & - !! (2) Conv_Rdtn_UpdateDiscState() is called in tight coupling. - !! Input is the suggested time from the glue code; - !! Output is the actual coupling interval that will be used - !! by the glue code. + TYPE(Conv_Rdtn_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables TYPE(Conv_Rdtn_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - + ! Local variables - - REAL(SiKi) :: Omega ! Wave frequency (rad/s) - REAL(DbKi) :: Krnl_Fact ! Factor used to scale the magnitude of the RdtnKnrl as required by the discrete time (co)sine transform (-) + + REAL(SiKi) :: Omega ! Wave frequency (rad/s) + REAL(DbKi) :: Krnl_Fact ! Factor used to scale the magnitude of the RdtnKnrl as required by the discrete time (co)sine transform (-) REAL(DbKi) :: RdtnTMax ! Analysis time for wave radiation kernel calculations (sec), may be different from Init_Data%RdtnTMax REAL(ReKi) :: RdtnDOmega ! Frequency step for wave radiation kernel calculations (rad/s) REAL(ReKi) :: RdtnOmegaMax ! Maximum frequency used in the (co)sine transform to fine the radiation impulse response functions (rad/s) REAL(DbKi), ALLOCATABLE :: RdtnTime (:) ! Simulation times at which the instantaneous values of the wave radiation kernel are determined (sec) LOGICAL :: RdtnFrmAM ! Determine the wave radiation kernel from the frequency-dependent hydrodynamic added mass matrix? (.TRUE = yes, .FALSE. = determine the wave radiation kernel from the frequency-dependent hydrodynamic damping matrix) !JASON: SHOULD YOU MAKE THIS AN INPUT???<--JASON: IT IS NOT WISE TO COMPUTE THE RADIATION KERNEL FROM THE FREQUENCY-DEPENDENT ADDED MASS MATRIX, UNLESS A CORRECTION IS APPLIED. THIS IS DESCRIBED IN THE WAMIT USER'S GUIDE!!!! INTEGER :: NStepRdtn2 ! ( NStepRdtn-1 )/2 - INTEGER :: Indx ! Cycles through the upper-triangular portion (diagonal and above) of the frequency-dependent hydrodynamic added mass and damping matrices from the radiation problem INTEGER :: I ! Generic index INTEGER :: J ! Generic index INTEGER :: K ! Generic index INTEGER :: LastInd ! Index into the arrays saved from the last call as a starting point for this call - + TYPE(FFT_DataType) :: FFT_Data ! the instance of the FFT module we're using ! Error handling CHARACTER(1024) :: ErrMsg2 ! Temporary error message for calls INTEGER(IntKi) :: ErrStat2 ! Temporary error status for calls - + ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - + + ErrStat = ErrID_None + ErrMsg = "" + ! For now, this is the only model we have implemented - RdtnFrmAM = .FALSE. - - ! Initialize the NWTC Subroutine Library - - CALL NWTC_Init( ) + RdtnFrmAM = .FALSE. - ! If HighFreq is greater than ! RdtnOmegaMax, Abort because RdtnDT must be reduced in order to have ! sufficient accuracy in the computation of the radiation impulse response ! functions: - p%NBody = InitInp%NBody - p%RdtnDT = InitInp%RdtnDT - RdtnOmegaMax = Pi / InitInp%RdtnDT - + p%NBody = InitInp%NBody + p%RdtnDT = InitInp%RdtnDT ! this is also Interval + RdtnOmegaMax = Pi / InitInp%RdtnDT + IF ( InitInp%HighFreq > RdtnOmegaMax ) THEN ! .TRUE. if the highest frequency component (not counting infinity) in the WAMIT file is greater than RdtnOmegaMax ErrMsg = ' Based on the frequency range found in "'//TRIM(InitInp%WAMITFile)//'.1",' // & ' RdtnDT must be set smaller than '//TRIM(Num2LStr( Pi/InitInp%HighFreq ))//' sec'// & @@ -136,13 +124,13 @@ SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, ErrStat = ErrID_Fatal RETURN END IF - + call AllocAry( u%Velocity, 6*p%NBody, "u%Velocity" , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Conv_Rdtn_Init' ) - call AllocAry( y%F_Rdtn , 6*p%NBody, "y%F_Rdtn" , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Conv_Rdtn_Init' ) + call AllocAry( y%F_Rdtn , 6*p%NBody, "y%F_Rdtn" , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Conv_Rdtn_Init' ) + + u%Velocity = 0.0 !this is an initial guess; + - u%Velocity = 0.0 !this is an initial guess; - - ! Perform some initialization computations including calculating the total ! number of frequency components = total number of time steps in the wave, ! radiation kernel, calculating the frequency step, and ALLOCATing the @@ -158,9 +146,9 @@ SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, ! = Pi/RdtnTMax p%NStepRdtn = CEILING ( InitInp%RdtnTMax/p%RdtnDT ) ! Set NStepRdtn to an odd integer - + IF ( MOD(p%NStepRdtn,2) == 0 ) p%NStepRdtn = p%NStepRdtn + 1 ! larger or equal to RdtnTMax/RdtnDT. - + NStepRdtn2 = MAX( ( p%NStepRdtn-1 )/2, 1 ) ! Make sure that NStepRdtn-1 is an even product of small factors (PSF) that is greater p%NStepRdtn = 2*PSF ( NStepRdtn2, 9 ) + 1 ! or equal to RdtnTMax/RdtnDT to ensure that the (co)sine transform is efficient. @@ -200,7 +188,7 @@ SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, LastInd = 1 IF ( RdtnFrmAM ) THEN ! .TRUE. if we will determine the wave radiation kernel from the frequency-dependent hydrodynamic added mass matrix - + ! Calculate the factor needed by the discrete sine transform in the ! calculation of the wave radiation kernel: @@ -248,13 +236,13 @@ SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, ! the wave radiation kernel: CALL InitSINT ( p%NStepRdtn, FFT_Data, .TRUE., ErrStat ) - + IF ( ErrStat /= ErrID_None ) THEN ErrMsg = 'Error Initializating Sine Transforms' ErrStat = ErrID_Fatal RETURN END IF - + DO J = 1,6*p%NBody ! Loop through all rows of RdtnKrnl DO K = 1,6*p%NBody ! Loop through all columns of RdtnKrnl above and including the diagonal CALL ApplySINT( p%RdtnKrnl(:,J,K), FFT_Data, ErrStat ) @@ -344,41 +332,19 @@ SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, END IF - - ! IF ( InitInp%UnSum > 0 ) THEN - ! - ! ! Write the header for this section - ! WRITE( InitInp%UnSum, '(//)' ) - ! WRITE( InitInp%UnSum, '(A)' ) 'Radiation memory effect kernel' - ! WRITE( InitInp%UnSum, '(//)' ) - ! WRITE( InitInp%UnSum, '(1X,A10,2X,A10,21(2X,A16))' ) ' n ' , ' t ', ' K11 ', ' K12 ', ' K13 ', ' K14 ', ' K15 ', ' K16 ', ' K22 ', ' K23 ', ' K24 ', ' K25 ', ' K26 ', ' K33 ', ' K34 ', ' K35 ', 'K36 ', ' K44 ', ' K45 ', ' K46 ', ' K55 ', ' K56 ', ' K66 ' - ! WRITE( InitInp%UnSum, '(1X,A10,2X,A10,21(2X,A16))' ) ' (-) ' , ' (s) ', ' (kg/s^2) ', ' (kg/s^2) ', ' (kg/s^2) ', ' (kgm/s^2) ', ' (kgm/s^2) ', ' (kgm/s^2) ', ' (kg/s^2) ', ' (kg/s^2) ', ' (kgm/s^2) ', ' (kgm/s^2) ', ' (kgm/s^2) ', ' (kg/s^2) ', ' (kgm/s^2) ', ' (kgm/s^2) ', ' (kgm/s^2) ', '(kgm^2/s^2)', '(kgm^2/s^2)', '(kgm^2/s^2)', '(kgm^2/s^2)', '(kgm^2/s^2)', '(kgm^2/s^2)' - ! - ! ! Write the data - ! DO I = 0,p%NStepRdtn-1 - ! - ! WRITE( InitInp%UnSum, '(1X,I10,2X,E12.5,21(2X,ES16.5))' ) I, I*p%RdtnDT, p%RdtnKrnl(I,1,1), p%RdtnKrnl(I,1,2), p%RdtnKrnl(I,1,3), p%RdtnKrnl(I,1,4), p%RdtnKrnl(I,1,5), p%RdtnKrnl(I,1,6), p%RdtnKrnl(I,2,2), p%RdtnKrnl(I,2,3), p%RdtnKrnl(I,2,4), p%RdtnKrnl(I,2,5), p%RdtnKrnl(I,2,6), p%RdtnKrnl(I,3,3), p%RdtnKrnl(I,3,4), p%RdtnKrnl(I,3,5), p%RdtnKrnl(I,3,6), p%RdtnKrnl(I,4,4), p%RdtnKrnl(I,4,5), p%RdtnKrnl(I,4,6), p%RdtnKrnl(I,5,5), p%RdtnKrnl(I,5,6), p%RdtnKrnl(I,6,6) - ! - ! END DO - ! - !END IF - - + + IF ( ALLOCATED( RdtnTime ) ) DEALLOCATE( RdtnTime ) - ! If you want to choose your own rate instead of using what the glue code suggests, tell the glue code the rate at which - ! this module must be called here: - - Interval = p%RdtnDT m%LastIndRdtn = 0 OtherState%IndRdtn = 0 - + ! bjj: these initializations don't matter, but I don't like seeing the compilation warning in IVF: x%DummyContState = 0.0 z%DummyConstrState = 0.0 - y%F_Rdtn = 0.0 - InitOut%DummyInitOut = 0 + y%F_Rdtn = 0.0 + InitOut%DummyInitOut = 0 END SUBROUTINE Conv_Rdtn_Init !---------------------------------------------------------------------------------------------------------------------------------- @@ -387,56 +353,56 @@ SUBROUTINE Conv_Rdtn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) !.................................................................................................................................. TYPE(Conv_Rdtn_InputType), INTENT(INOUT) :: u !< System inputs - TYPE(Conv_Rdtn_ParameterType), INTENT(INOUT) :: p !< Parameters + TYPE(Conv_Rdtn_ParameterType), INTENT(INOUT) :: p !< Parameters TYPE(Conv_Rdtn_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states TYPE(Conv_Rdtn_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states TYPE(Conv_Rdtn_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states - TYPE(Conv_Rdtn_OtherStateType), INTENT(INOUT) :: OtherState !< Other/optimization states + TYPE(Conv_Rdtn_OtherStateType), INTENT(INOUT) :: OtherState !< Other/optimization states TYPE(Conv_Rdtn_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - + + ErrStat = ErrID_None + ErrMsg = "" + + ! Place any last minute operations or calculations here: - ! Close files here: - - + ! Close files here: + + ! Destroy the input data: - + CALL Conv_Rdtn_DestroyInput( u, ErrStat, ErrMsg ) ! Destroy the parameter data: - + CALL Conv_Rdtn_DestroyParam( p, ErrStat, ErrMsg ) ! Destroy the state data: - + CALL Conv_Rdtn_DestroyContState( x, ErrStat, ErrMsg ) CALL Conv_Rdtn_DestroyDiscState( xd, ErrStat, ErrMsg ) CALL Conv_Rdtn_DestroyConstrState( z, ErrStat, ErrMsg ) CALL Conv_Rdtn_DestroyOtherState( OtherState, ErrStat, ErrMsg ) - + CALL Conv_Rdtn_DestroyMisc( m, ErrStat, ErrMsg ) ! Destroy the output data: - + CALL Conv_Rdtn_DestroyOutput( y, ErrStat, ErrMsg ) - + END SUBROUTINE Conv_Rdtn_End @@ -459,63 +425,63 @@ SUBROUTINE Conv_Rdtn_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherS !! Output: Constraint states at t + Interval TYPE(Conv_Rdtn_OtherStateType), INTENT(INOUT) :: OtherState !< Input: Other states at t; !! Output: Other states at t + Interval - TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None ! Local variables - + TYPE(Conv_Rdtn_InputType) :: u !< Instantaneous inputs INTEGER(IntKi) :: ErrStat2 !< Error status of the operation (secondary error) CHARACTER(ErrMsgLen) :: ErrMsg2 !< Error message if ErrStat2 /= ErrID_None character(*), parameter :: RoutineName = 'Conv_Rdtn_UpdateStates' - - + + ! Initialize variables ErrStat = ErrID_None ! no error has occurred ErrMsg = "" - - + + ! This subroutine contains an example of how the states could be updated. Developers will ! want to adjust the logic as necessary for their own situations. - - + + ! Get the inputs at time t, based on the array of values sent by the glue code: call Conv_Rdtn_CopyInput( Inputs(1), u, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - - - CALL Conv_Rdtn_Input_ExtrapInterp( Inputs, InputTimes, u, t, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + + CALL Conv_Rdtn_Input_ExtrapInterp( Inputs, InputTimes, u, t, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) RETURN - - + + ! Update discrete states: ! Note that xd [discrete state] is changed in Conv_Rdtn_UpdateDiscState() so xd will now contain values at t+Interval ! We'll first make a copy that contains xd at time t, which will be used in computing the constraint states - + CALL Conv_Rdtn_UpdateDiscState( t, n, u, p, x, xd, z, OtherState, m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - - + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ! Integrate (update) continuous states (x) here: !x = function of dxdt and x ! Destroy local variables before returning - + CALL Conv_Rdtn_DestroyInput( u, ErrStat2, ErrMsg2) - - + + END SUBROUTINE Conv_Rdtn_UpdateStates !---------------------------------------------------------------------------------------------------------------------------------- !> Routine for computing outputs, used in both loose and tight coupling. -SUBROUTINE Conv_Rdtn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) +SUBROUTINE Conv_Rdtn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) !.................................................................................................................................. - + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds TYPE(Conv_Rdtn_InputType), INTENT(IN ) :: u !< Inputs at Time TYPE(Conv_Rdtn_ParameterType), INTENT(IN ) :: p !< Parameters @@ -525,39 +491,41 @@ SUBROUTINE Conv_Rdtn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat TYPE(Conv_Rdtn_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time TYPE(Conv_Rdtn_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh con- !! nectivity information does not have to be recalculated) - TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - + ! REAL(ReKi) :: F_Rdtn (6) REAL(ReKi) :: F_RdtnDT (6*p%NBody) ! The portion of the total load contribution from wave radiation damping associated with the convolution integral proportional to ( RdtnDT - RdtnRmndr ) (N, N-m) - + INTEGER :: I ! Generic index INTEGER :: J ! Generic index INTEGER :: K ! Generic index - + INTEGER(IntKi) :: MaxInd ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - + + ErrStat = ErrID_None + ErrMsg = "" + + ! Perform numerical convolution to determine the load contribution from wave ! radiation damping: - + MaxInd = MIN(p%NStepRdtn-1,OtherState%IndRdtn) ! Note: xd%IndRdtn index is from the previous time-step since this state was for the previous time-step - + DO I = 1,6*p%NBody ! Loop through all wave radiation damping forces and moments F_RdtnDT (I) = 0.0 ! F_RdtnRmndr(I) = 0.0 DO J = 1,6*p%NBody ! Loop through all platform DOFs - - DO K = 0, MaxInd ! Loop through all NStepRdtn time steps in the radiation Kernel (less than NStepRdtn time steps are used when ZTime < RdtnTmax) + ! Contribution from the first and last time steps are halved to make the integration 2nd-order accurate + F_RdtnDT(I) = F_RdtnDT(I) - 0.5_SiKi * p%RdtnKrnl(MaxInd,I,J)*xd%XDHistory(0,J) & + - 0.5_SiKi * p%RdtnKrnl(0,I,J)*xd%XDHistory(MaxInd,J) + DO K = 1, MaxInd-1 ! Loop through all remaining NStepRdtn-2 time steps in the radiation Kernel (less than NStepRdtn time steps are used when ZTime < RdtnTmax) F_RdtnDT(I) = F_RdtnDT(I) - p%RdtnKrnl(MaxInd-K,I,J)*xd%XDHistory(K,J) - END DO + END DO !DO K = MAX(0,xd%IndRdtn-p%NStepRdtn ),xd%IndRdtn-1 ! Loop through all NStepRdtn time steps in the radiation Kernel (less than NStepRdtn time steps are used when ZTime < RdtnTmax) ! F_RdtnDT (I) = F_RdtnDT (I) - p%RdtnKrnl(xd%IndRdtn-1-K,I,J)*xd%XDHistory(MOD(K,p%NStepRdtn1),J) !END DO ! K - All NStepRdtn time steps in the radiation Kernel (less than NStepRdtn time steps are used when ZTime < RdtnTmax) @@ -572,69 +540,68 @@ SUBROUTINE Conv_Rdtn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat END DO ! I - All wave radiation damping forces and moments - y%F_Rdtn = p%RdtnDT*F_RdtnDT !F_Rdtn + y%F_Rdtn = p%RdtnDT*F_RdtnDT !F_Rdtn END SUBROUTINE Conv_Rdtn_CalcOutput !---------------------------------------------------------------------------------------------------------------------------------- !> Tight coupling routine for computing derivatives of continuous states. -SUBROUTINE Conv_Rdtn_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, ErrStat, ErrMsg ) +SUBROUTINE Conv_Rdtn_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, ErrStat, ErrMsg ) !.................................................................................................................................. - + REAL(DbKi), INTENT(IN ) :: Time ! Current simulation time in seconds - TYPE(Conv_Rdtn_InputType), INTENT(IN ) :: u ! Inputs at Time - TYPE(Conv_Rdtn_ParameterType), INTENT(IN ) :: p ! Parameters + TYPE(Conv_Rdtn_InputType), INTENT(IN ) :: u ! Inputs at Time + TYPE(Conv_Rdtn_ParameterType), INTENT(IN ) :: p ! Parameters TYPE(Conv_Rdtn_ContinuousStateType), INTENT(IN ) :: x ! Continuous states at Time TYPE(Conv_Rdtn_DiscreteStateType), INTENT(IN ) :: xd ! Discrete states at Time TYPE(Conv_Rdtn_ConstraintStateType), INTENT(IN ) :: z ! Constraint states at Time - TYPE(Conv_Rdtn_OtherStateType), INTENT(IN ) :: OtherState ! Other states at Time - TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m ! Initial misc/optimization variables + TYPE(Conv_Rdtn_OtherStateType), INTENT(IN ) :: OtherState ! Other states at Time + TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m ! Initial misc/optimization variables TYPE(Conv_Rdtn_ContinuousStateType), INTENT( OUT) :: dxdt ! Continuous state derivatives at Time - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation + INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - + ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - + + ErrStat = ErrID_None + ErrMsg = "" + + ! Compute the first time derivatives of the continuous states here: - + dxdt%DummyContState = 0.0 - + END SUBROUTINE Conv_Rdtn_CalcContStateDeriv !---------------------------------------------------------------------------------------------------------------------------------- !> Tight coupling routine for updating discrete states. -SUBROUTINE Conv_Rdtn_UpdateDiscState( Time, n, u, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) +SUBROUTINE Conv_Rdtn_UpdateDiscState( Time, n, u, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) !.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds INTEGER(IntKi), INTENT(IN ) :: n !< Current step of the simulation: t = n*Interval - TYPE(Conv_Rdtn_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Conv_Rdtn_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(Conv_Rdtn_InputType), INTENT(IN ) :: u !< Inputs at Time + TYPE(Conv_Rdtn_ParameterType), INTENT(IN ) :: p !< Parameters TYPE(Conv_Rdtn_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(Conv_Rdtn_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at Time; + TYPE(Conv_Rdtn_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at Time; !! Output: Discrete states at Time + Interval TYPE(Conv_Rdtn_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time TYPE(Conv_Rdtn_OtherStateType), INTENT(INOUT) :: OtherState !< Other states at Time (output: other states at Time + Interval) !! THIS (intent out) BREAKS THE FRAMEWORK (but we don't care at this level) - TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None ! Local Variables - REAL(ReKi) :: IncrmntUD ! Incremental change in UD over a single radiation time step (m/s, rad/s) REAL(ReKi) :: RdtnRmndr ! Fractional amount of the p%RdtnDT timestep INTEGER(IntKi) :: J ! Generic index INTEGER(IntKi) :: K ! Generic index - + ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" + + ErrStat = ErrID_None + ErrMsg = "" ! Find the index xd%IndRdtn, where RdtnTime(IndRdtn) is the largest value in @@ -649,7 +616,7 @@ SUBROUTINE Conv_Rdtn_UpdateDiscState( Time, n, u, p, x, xd, z, OtherState, m, Er ! This subroutine can only be called at integer multiples of p%RdtnDT, if RdtnRmdr > 0, then this requirement has been violated! IF (RdtnRmndr > EPSILON(0.0_ReKi) ) THEN - ErrStat = ErrID_FATAL + ErrStat = ErrID_FATAL ErrMsg = "Conv_Rdtn_UpdateDiscState() must be called at integer multiples of the radiation timestep." RETURN END IF @@ -666,13 +633,13 @@ SUBROUTINE Conv_Rdtn_UpdateDiscState( Time, n, u, p, x, xd, z, OtherState, m, Er ! NOTE: When IndRdtn > LastIndRdtn, IndRdtn will equal LastIndRdtn + 1 if DT <= RdtnDT; ! When IndRdtn > LastIndRdtn, IndRdtn will be greater than LastIndRdtn + 1 if DT > RdtnDT. !BJJ: this needs a better check so that it is ALWAYS done (MATLAB/Simulink could possibly avoid this step by starting at Time>0, OR there may be some numerical issues where this is NOT EXACTLY zero) - - IF ( OtherState%IndRdtn < (p%NStepRdtn) ) THEN + + IF ( OtherState%IndRdtn < (p%NStepRdtn) ) THEN DO J = 1,6*p%NBody ! Loop through all platform DOFs xd%XDHistory(OtherState%IndRdtn,J) = u%Velocity(J) ! XDHistory was allocated as a zero-based array! END DO ! J - All platform DOFs ELSE - + ! Shift the stored history by one index DO K = 0,p%NStepRdtn-2 DO J = 1,6*p%NBody ! Loop through all DOFs @@ -687,35 +654,35 @@ SUBROUTINE Conv_Rdtn_UpdateDiscState( Time, n, u, p, x, xd, z, OtherState, m, Er END SUBROUTINE Conv_Rdtn_UpdateDiscState !---------------------------------------------------------------------------------------------------------------------------------- !> Tight coupling routine for solving for the residual of the constraint state equations. -SUBROUTINE Conv_Rdtn_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m, z_residual, ErrStat, ErrMsg ) +SUBROUTINE Conv_Rdtn_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m, z_residual, ErrStat, ErrMsg ) !.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(Conv_Rdtn_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Conv_Rdtn_ParameterType), INTENT(IN ) :: p !< Parameters + + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + TYPE(Conv_Rdtn_InputType), INTENT(IN ) :: u !< Inputs at Time + TYPE(Conv_Rdtn_ParameterType), INTENT(IN ) :: p !< Parameters TYPE(Conv_Rdtn_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time TYPE(Conv_Rdtn_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time TYPE(Conv_Rdtn_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time (possibly a guess) TYPE(Conv_Rdtn_OtherStateType), INTENT(INOUT) :: OtherState !< Other states at Time - TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables - TYPE(Conv_Rdtn_ConstraintStateType), INTENT( OUT) :: z_residual !< Residual of the constraint state equations using - !! the input values described above + TYPE(Conv_Rdtn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(Conv_Rdtn_ConstraintStateType), INTENT( OUT) :: z_residual !< Residual of the constraint state equations using + !! the input values described above INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - + ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - + + ErrStat = ErrID_None + ErrMsg = "" + + ! Solve for the constraint states here: - + z_residual%DummyConstrState = 0 END SUBROUTINE Conv_Rdtn_CalcConstrStateResidual !---------------------------------------------------------------------------------------------------------------------------------- - + END MODULE Conv_Radiation !********************************************************************************************************************************** diff --git a/modules/hydrodyn/src/Conv_Radiation.txt b/modules/hydrodyn/src/Conv_Radiation.txt index e421042b54..711c028559 100644 --- a/modules/hydrodyn/src/Conv_Radiation.txt +++ b/modules/hydrodyn/src/Conv_Radiation.txt @@ -28,7 +28,6 @@ typedef ^ ^ SiKi typedef ^ ^ SiKi HdroDmpng {:}{:}{:} - - "" - typedef ^ ^ INTEGER NInpFreq - - - "" - typedef ^ ^ DbKi RdtnTMax - - - "" - -typedef ^ ^ INTEGER UnSum - - - "" - # # # Define outputs from the initialization routine here: diff --git a/modules/hydrodyn/src/Conv_Radiation_Types.f90 b/modules/hydrodyn/src/Conv_Radiation_Types.f90 index 4c69b4d103..2e506d7241 100644 --- a/modules/hydrodyn/src/Conv_Radiation_Types.f90 +++ b/modules/hydrodyn/src/Conv_Radiation_Types.f90 @@ -45,7 +45,6 @@ MODULE Conv_Radiation_Types REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: HdroDmpng !< [-] INTEGER(IntKi) :: NInpFreq !< [-] REAL(DbKi) :: RdtnTMax !< [-] - INTEGER(IntKi) :: UnSum !< [-] END TYPE Conv_Rdtn_InitInputType ! ======================= ! ========= Conv_Rdtn_InitOutputType ======= @@ -168,7 +167,6 @@ SUBROUTINE Conv_Rdtn_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode ENDIF DstInitInputData%NInpFreq = SrcInitInputData%NInpFreq DstInitInputData%RdtnTMax = SrcInitInputData%RdtnTMax - DstInitInputData%UnSum = SrcInitInputData%UnSum END SUBROUTINE Conv_Rdtn_CopyInitInput SUBROUTINE Conv_Rdtn_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -260,7 +258,6 @@ SUBROUTINE Conv_Rdtn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END IF Int_BufSz = Int_BufSz + 1 ! NInpFreq Db_BufSz = Db_BufSz + 1 ! RdtnTMax - Int_BufSz = Int_BufSz + 1 ! UnSum IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -371,8 +368,6 @@ SUBROUTINE Conv_Rdtn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_Xferred = Int_Xferred + 1 DbKiBuf(Db_Xferred) = InData%RdtnTMax Db_Xferred = Db_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%UnSum - Int_Xferred = Int_Xferred + 1 END SUBROUTINE Conv_Rdtn_PackInitInput SUBROUTINE Conv_Rdtn_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -496,8 +491,6 @@ SUBROUTINE Conv_Rdtn_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt Int_Xferred = Int_Xferred + 1 OutData%RdtnTMax = DbKiBuf(Db_Xferred) Db_Xferred = Db_Xferred + 1 - OutData%UnSum = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 END SUBROUTINE Conv_Rdtn_UnPackInitInput SUBROUTINE Conv_Rdtn_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) diff --git a/modules/hydrodyn/src/Current_Types.f90 b/modules/hydrodyn/src/Current_Types.f90 deleted file mode 100644 index a768b5d0b3..0000000000 --- a/modules/hydrodyn/src/Current_Types.f90 +++ /dev/null @@ -1,2026 +0,0 @@ -!STARTOFREGISTRYGENERATEDFILE 'Current_Types.f90' -! -! WARNING This file is generated automatically by the FAST registry. -! Do not edit. Your changes to this file will be lost. -! -! FAST Registry -!********************************************************************************************************************************* -! Current_Types -!................................................................................................................................. -! This file is part of Current. -! -! Copyright (C) 2012-2016 National Renewable Energy Laboratory -! -! Licensed under the Apache License, Version 2.0 (the "License"); -! you may not use this file except in compliance with the License. -! You may obtain a copy of the License at -! -! http://www.apache.org/licenses/LICENSE-2.0 -! -! Unless required by applicable law or agreed to in writing, software -! distributed under the License is distributed on an "AS IS" BASIS, -! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -! See the License for the specific language governing permissions and -! limitations under the License. -! -! -! W A R N I N G : This file was automatically generated from the FAST registry. Changes made to this file may be lost. -! -!********************************************************************************************************************************* -!> This module contains the user-defined types needed in Current. It also contains copy, destroy, pack, and -!! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. -MODULE Current_Types -!--------------------------------------------------------------------------------------------------------------------------------- -USE NWTC_Library -IMPLICIT NONE -! ========= Current_InitInputType ======= - TYPE, PUBLIC :: Current_InitInputType - REAL(SiKi) :: CurrSSV0 !< [-] - CHARACTER(80) :: CurrSSDirChr !< [-] - REAL(SiKi) :: CurrSSDir !< [-] - REAL(SiKi) :: CurrNSRef !< [-] - REAL(SiKi) :: CurrNSV0 !< [-] - REAL(SiKi) :: CurrNSDir !< [-] - REAL(SiKi) :: CurrDIV !< [-] - REAL(SiKi) :: CurrDIDir !< [-] - INTEGER(IntKi) :: CurrMod !< [-] - REAL(SiKi) :: WtrDpth !< [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: MorisonNodezi !< [-] - INTEGER(IntKi) :: NMorisonNodes !< [-] - CHARACTER(1024) :: DirRoot !< [-] - END TYPE Current_InitInputType -! ======================= -! ========= Current_InitOutputType ======= - TYPE, PUBLIC :: Current_InitOutputType - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: CurrVxi !< [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: CurrVyi !< [-] - REAL(SiKi) :: PCurrVxiPz0 !< [-] - REAL(SiKi) :: PCurrVyiPz0 !< [-] - END TYPE Current_InitOutputType -! ======================= -! ========= Current_ContinuousStateType ======= - TYPE, PUBLIC :: Current_ContinuousStateType - REAL(SiKi) :: DummyContState !< Remove this variable if you have continuous states [-] - END TYPE Current_ContinuousStateType -! ======================= -! ========= Current_DiscreteStateType ======= - TYPE, PUBLIC :: Current_DiscreteStateType - REAL(SiKi) :: DummyDiscState !< Remove this variable if you have discrete states [-] - END TYPE Current_DiscreteStateType -! ======================= -! ========= Current_ConstraintStateType ======= - TYPE, PUBLIC :: Current_ConstraintStateType - REAL(SiKi) :: DummyConstrState !< Remove this variable if you have constraint states [-] - END TYPE Current_ConstraintStateType -! ======================= -! ========= Current_OtherStateType ======= - TYPE, PUBLIC :: Current_OtherStateType - INTEGER(IntKi) :: DummyOtherState !< Remove this variable if you have other states [-] - END TYPE Current_OtherStateType -! ======================= -! ========= Current_MiscVarType ======= - TYPE, PUBLIC :: Current_MiscVarType - REAL(ReKi) :: DummyMiscVar !< Remove this variable if you have misc/optimization variables [-] - END TYPE Current_MiscVarType -! ======================= -! ========= Current_ParameterType ======= - TYPE, PUBLIC :: Current_ParameterType - REAL(DbKi) :: DT !< Time step for continuous state integration and discrete state update [seconds] - END TYPE Current_ParameterType -! ======================= -! ========= Current_InputType ======= - TYPE, PUBLIC :: Current_InputType - REAL(SiKi) :: DummyInput !< Remove this variable if you have input data [-] - END TYPE Current_InputType -! ======================= -! ========= Current_OutputType ======= - TYPE, PUBLIC :: Current_OutputType - REAL(SiKi) :: DummyOutput !< Remove this variable if you have output data [-] - END TYPE Current_OutputType -! ======================= -CONTAINS - SUBROUTINE Current_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_InitInputType), INTENT(IN) :: SrcInitInputData - TYPE(Current_InitInputType), INTENT(INOUT) :: DstInitInputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyInitInput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstInitInputData%CurrSSV0 = SrcInitInputData%CurrSSV0 - DstInitInputData%CurrSSDirChr = SrcInitInputData%CurrSSDirChr - DstInitInputData%CurrSSDir = SrcInitInputData%CurrSSDir - DstInitInputData%CurrNSRef = SrcInitInputData%CurrNSRef - DstInitInputData%CurrNSV0 = SrcInitInputData%CurrNSV0 - DstInitInputData%CurrNSDir = SrcInitInputData%CurrNSDir - DstInitInputData%CurrDIV = SrcInitInputData%CurrDIV - DstInitInputData%CurrDIDir = SrcInitInputData%CurrDIDir - DstInitInputData%CurrMod = SrcInitInputData%CurrMod - DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth -IF (ALLOCATED(SrcInitInputData%MorisonNodezi)) THEN - i1_l = LBOUND(SrcInitInputData%MorisonNodezi,1) - i1_u = UBOUND(SrcInitInputData%MorisonNodezi,1) - IF (.NOT. ALLOCATED(DstInitInputData%MorisonNodezi)) THEN - ALLOCATE(DstInitInputData%MorisonNodezi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%MorisonNodezi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%MorisonNodezi = SrcInitInputData%MorisonNodezi -ENDIF - DstInitInputData%NMorisonNodes = SrcInitInputData%NMorisonNodes - DstInitInputData%DirRoot = SrcInitInputData%DirRoot - END SUBROUTINE Current_CopyInitInput - - SUBROUTINE Current_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_InitInputType), INTENT(INOUT) :: InitInputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyInitInput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(InitInputData%MorisonNodezi)) THEN - DEALLOCATE(InitInputData%MorisonNodezi) -ENDIF - END SUBROUTINE Current_DestroyInitInput - - SUBROUTINE Current_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_InitInputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackInitInput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! CurrSSV0 - Int_BufSz = Int_BufSz + 1*LEN(InData%CurrSSDirChr) ! CurrSSDirChr - Re_BufSz = Re_BufSz + 1 ! CurrSSDir - Re_BufSz = Re_BufSz + 1 ! CurrNSRef - Re_BufSz = Re_BufSz + 1 ! CurrNSV0 - Re_BufSz = Re_BufSz + 1 ! CurrNSDir - Re_BufSz = Re_BufSz + 1 ! CurrDIV - Re_BufSz = Re_BufSz + 1 ! CurrDIDir - Int_BufSz = Int_BufSz + 1 ! CurrMod - Re_BufSz = Re_BufSz + 1 ! WtrDpth - Int_BufSz = Int_BufSz + 1 ! MorisonNodezi allocated yes/no - IF ( ALLOCATED(InData%MorisonNodezi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! MorisonNodezi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%MorisonNodezi) ! MorisonNodezi - END IF - Int_BufSz = Int_BufSz + 1 ! NMorisonNodes - Int_BufSz = Int_BufSz + 1*LEN(InData%DirRoot) ! DirRoot - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%CurrSSV0 - Re_Xferred = Re_Xferred + 1 - DO I = 1, LEN(InData%CurrSSDirChr) - IntKiBuf(Int_Xferred) = ICHAR(InData%CurrSSDirChr(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - ReKiBuf(Re_Xferred) = InData%CurrSSDir - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%CurrNSRef - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%CurrNSV0 - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%CurrNSDir - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%CurrDIV - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%CurrDIDir - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%CurrMod - Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WtrDpth - Re_Xferred = Re_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%MorisonNodezi) ) 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%MorisonNodezi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%MorisonNodezi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%MorisonNodezi,1), UBOUND(InData%MorisonNodezi,1) - ReKiBuf(Re_Xferred) = InData%MorisonNodezi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IntKiBuf(Int_Xferred) = InData%NMorisonNodes - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(InData%DirRoot) - IntKiBuf(Int_Xferred) = ICHAR(InData%DirRoot(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END SUBROUTINE Current_PackInitInput - - SUBROUTINE Current_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_InitInputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackInitInput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%CurrSSV0 = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - DO I = 1, LEN(OutData%CurrSSDirChr) - OutData%CurrSSDirChr(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%CurrSSDir = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%CurrNSRef = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%CurrNSV0 = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%CurrNSDir = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%CurrDIV = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%CurrDIDir = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%CurrMod = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WtrDpth = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! MorisonNodezi 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%MorisonNodezi)) DEALLOCATE(OutData%MorisonNodezi) - ALLOCATE(OutData%MorisonNodezi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%MorisonNodezi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%MorisonNodezi,1), UBOUND(OutData%MorisonNodezi,1) - OutData%MorisonNodezi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - OutData%NMorisonNodes = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(OutData%DirRoot) - OutData%DirRoot(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END SUBROUTINE Current_UnPackInitInput - - SUBROUTINE Current_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_InitOutputType), INTENT(IN) :: SrcInitOutputData - TYPE(Current_InitOutputType), INTENT(INOUT) :: DstInitOutputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyInitOutput' -! - ErrStat = ErrID_None - ErrMsg = "" -IF (ALLOCATED(SrcInitOutputData%CurrVxi)) THEN - i1_l = LBOUND(SrcInitOutputData%CurrVxi,1) - i1_u = UBOUND(SrcInitOutputData%CurrVxi,1) - IF (.NOT. ALLOCATED(DstInitOutputData%CurrVxi)) THEN - ALLOCATE(DstInitOutputData%CurrVxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%CurrVxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%CurrVxi = SrcInitOutputData%CurrVxi -ENDIF -IF (ALLOCATED(SrcInitOutputData%CurrVyi)) THEN - i1_l = LBOUND(SrcInitOutputData%CurrVyi,1) - i1_u = UBOUND(SrcInitOutputData%CurrVyi,1) - IF (.NOT. ALLOCATED(DstInitOutputData%CurrVyi)) THEN - ALLOCATE(DstInitOutputData%CurrVyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%CurrVyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%CurrVyi = SrcInitOutputData%CurrVyi -ENDIF - DstInitOutputData%PCurrVxiPz0 = SrcInitOutputData%PCurrVxiPz0 - DstInitOutputData%PCurrVyiPz0 = SrcInitOutputData%PCurrVyiPz0 - END SUBROUTINE Current_CopyInitOutput - - SUBROUTINE Current_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_InitOutputType), INTENT(INOUT) :: InitOutputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyInitOutput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(InitOutputData%CurrVxi)) THEN - DEALLOCATE(InitOutputData%CurrVxi) -ENDIF -IF (ALLOCATED(InitOutputData%CurrVyi)) THEN - DEALLOCATE(InitOutputData%CurrVyi) -ENDIF - END SUBROUTINE Current_DestroyInitOutput - - SUBROUTINE Current_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_InitOutputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackInitOutput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! CurrVxi allocated yes/no - IF ( ALLOCATED(InData%CurrVxi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! CurrVxi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%CurrVxi) ! CurrVxi - END IF - Int_BufSz = Int_BufSz + 1 ! CurrVyi allocated yes/no - IF ( ALLOCATED(InData%CurrVyi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! CurrVyi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%CurrVyi) ! CurrVyi - END IF - Re_BufSz = Re_BufSz + 1 ! PCurrVxiPz0 - Re_BufSz = Re_BufSz + 1 ! PCurrVyiPz0 - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IF ( .NOT. ALLOCATED(InData%CurrVxi) ) 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%CurrVxi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%CurrVxi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%CurrVxi,1), UBOUND(InData%CurrVxi,1) - ReKiBuf(Re_Xferred) = InData%CurrVxi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%CurrVyi) ) 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%CurrVyi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%CurrVyi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%CurrVyi,1), UBOUND(InData%CurrVyi,1) - ReKiBuf(Re_Xferred) = InData%CurrVyi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - ReKiBuf(Re_Xferred) = InData%PCurrVxiPz0 - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%PCurrVyiPz0 - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_PackInitOutput - - SUBROUTINE Current_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_InitOutputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackInitOutput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CurrVxi 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%CurrVxi)) DEALLOCATE(OutData%CurrVxi) - ALLOCATE(OutData%CurrVxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%CurrVxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%CurrVxi,1), UBOUND(OutData%CurrVxi,1) - OutData%CurrVxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CurrVyi 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%CurrVyi)) DEALLOCATE(OutData%CurrVyi) - ALLOCATE(OutData%CurrVyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%CurrVyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%CurrVyi,1), UBOUND(OutData%CurrVyi,1) - OutData%CurrVyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - OutData%PCurrVxiPz0 = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%PCurrVyiPz0 = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_UnPackInitOutput - - SUBROUTINE Current_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_ContinuousStateType), INTENT(IN) :: SrcContStateData - TYPE(Current_ContinuousStateType), INTENT(INOUT) :: DstContStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyContState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstContStateData%DummyContState = SrcContStateData%DummyContState - END SUBROUTINE Current_CopyContState - - SUBROUTINE Current_DestroyContState( ContStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_ContinuousStateType), INTENT(INOUT) :: ContStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyContState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Current_DestroyContState - - SUBROUTINE Current_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_ContinuousStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackContState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyContState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyContState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_PackContState - - SUBROUTINE Current_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_ContinuousStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackContState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyContState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_UnPackContState - - SUBROUTINE Current_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_DiscreteStateType), INTENT(IN) :: SrcDiscStateData - TYPE(Current_DiscreteStateType), INTENT(INOUT) :: DstDiscStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyDiscState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstDiscStateData%DummyDiscState = SrcDiscStateData%DummyDiscState - END SUBROUTINE Current_CopyDiscState - - SUBROUTINE Current_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_DiscreteStateType), INTENT(INOUT) :: DiscStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyDiscState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Current_DestroyDiscState - - SUBROUTINE Current_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_DiscreteStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackDiscState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyDiscState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyDiscState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_PackDiscState - - SUBROUTINE Current_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_DiscreteStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackDiscState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyDiscState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_UnPackDiscState - - SUBROUTINE Current_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_ConstraintStateType), INTENT(IN) :: SrcConstrStateData - TYPE(Current_ConstraintStateType), INTENT(INOUT) :: DstConstrStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyConstrState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstConstrStateData%DummyConstrState = SrcConstrStateData%DummyConstrState - END SUBROUTINE Current_CopyConstrState - - SUBROUTINE Current_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_ConstraintStateType), INTENT(INOUT) :: ConstrStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyConstrState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Current_DestroyConstrState - - SUBROUTINE Current_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_ConstraintStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackConstrState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyConstrState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyConstrState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_PackConstrState - - SUBROUTINE Current_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_ConstraintStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackConstrState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyConstrState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_UnPackConstrState - - SUBROUTINE Current_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_OtherStateType), INTENT(IN) :: SrcOtherStateData - TYPE(Current_OtherStateType), INTENT(INOUT) :: DstOtherStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyOtherState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstOtherStateData%DummyOtherState = SrcOtherStateData%DummyOtherState - END SUBROUTINE Current_CopyOtherState - - SUBROUTINE Current_DestroyOtherState( OtherStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_OtherStateType), INTENT(INOUT) :: OtherStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyOtherState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Current_DestroyOtherState - - SUBROUTINE Current_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_OtherStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackOtherState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! DummyOtherState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IntKiBuf(Int_Xferred) = InData%DummyOtherState - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Current_PackOtherState - - SUBROUTINE Current_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_OtherStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackOtherState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyOtherState = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Current_UnPackOtherState - - SUBROUTINE Current_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_MiscVarType), INTENT(IN) :: SrcMiscData - TYPE(Current_MiscVarType), INTENT(INOUT) :: DstMiscData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyMisc' -! - ErrStat = ErrID_None - ErrMsg = "" - DstMiscData%DummyMiscVar = SrcMiscData%DummyMiscVar - END SUBROUTINE Current_CopyMisc - - SUBROUTINE Current_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_MiscVarType), INTENT(INOUT) :: MiscData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyMisc' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Current_DestroyMisc - - SUBROUTINE Current_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_MiscVarType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackMisc' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyMiscVar - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyMiscVar - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_PackMisc - - SUBROUTINE Current_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_MiscVarType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackMisc' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyMiscVar = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_UnPackMisc - - SUBROUTINE Current_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_ParameterType), INTENT(IN) :: SrcParamData - TYPE(Current_ParameterType), INTENT(INOUT) :: DstParamData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyParam' -! - ErrStat = ErrID_None - ErrMsg = "" - DstParamData%DT = SrcParamData%DT - END SUBROUTINE Current_CopyParam - - SUBROUTINE Current_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_ParameterType), INTENT(INOUT) :: ParamData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyParam' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Current_DestroyParam - - SUBROUTINE Current_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_ParameterType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackParam' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Db_BufSz = Db_BufSz + 1 ! DT - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - DbKiBuf(Db_Xferred) = InData%DT - Db_Xferred = Db_Xferred + 1 - END SUBROUTINE Current_PackParam - - SUBROUTINE Current_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_ParameterType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackParam' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DT = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - END SUBROUTINE Current_UnPackParam - - SUBROUTINE Current_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_InputType), INTENT(IN) :: SrcInputData - TYPE(Current_InputType), INTENT(INOUT) :: DstInputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyInput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstInputData%DummyInput = SrcInputData%DummyInput - END SUBROUTINE Current_CopyInput - - SUBROUTINE Current_DestroyInput( InputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_InputType), INTENT(INOUT) :: InputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyInput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Current_DestroyInput - - SUBROUTINE Current_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_InputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackInput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyInput - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyInput - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_PackInput - - SUBROUTINE Current_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_InputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackInput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyInput = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_UnPackInput - - SUBROUTINE Current_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Current_OutputType), INTENT(IN) :: SrcOutputData - TYPE(Current_OutputType), INTENT(INOUT) :: DstOutputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyOutput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstOutputData%DummyOutput = SrcOutputData%DummyOutput - END SUBROUTINE Current_CopyOutput - - SUBROUTINE Current_DestroyOutput( OutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Current_OutputType), INTENT(INOUT) :: OutputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyOutput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Current_DestroyOutput - - SUBROUTINE Current_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Current_OutputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackOutput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyOutput - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyOutput - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_PackOutput - - SUBROUTINE Current_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Current_OutputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackOutput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyOutput = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Current_UnPackOutput - - - SUBROUTINE Current_Input_ExtrapInterp(u, t, u_out, t_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is given by the size of u -! -! expressions below based on either -! -! f(t) = a -! f(t) = a + b * t, or -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = u1, f(t2) = u2, f(t3) = u3 (as appropriate) -! -!.................................................................................................................................. - - TYPE(Current_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs - TYPE(Current_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: t_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Current_Input_ExtrapInterp' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - if ( size(t) .ne. size(u)) then - CALL SetErrStat(ErrID_Fatal,'size(t) must equal size(u)',ErrStat,ErrMsg,RoutineName) - RETURN - endif - order = SIZE(u) - 1 - IF ( order .eq. 0 ) THEN - CALL Current_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL Current_Input_ExtrapInterp1(u(1), u(2), t, u_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 2 ) THEN - CALL Current_Input_ExtrapInterp2(u(1), u(2), u(3), t, u_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE - CALL SetErrStat(ErrID_Fatal,'size(u) must be less than 4 (order must be less than 3).',ErrStat,ErrMsg,RoutineName) - RETURN - ENDIF - END SUBROUTINE Current_Input_ExtrapInterp - - - SUBROUTINE Current_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is 1. -! -! f(t) = a + b * t, or -! -! where a and b are determined as the solution to -! f(t1) = u1, f(t2) = u2 -! -!.................................................................................................................................. - - TYPE(Current_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 - TYPE(Current_InputType), INTENT(IN) :: u2 ! Input at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs - TYPE(Current_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(2) ! Times associated with the Inputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - CHARACTER(*), PARAMETER :: RoutineName = 'Current_Input_ExtrapInterp1' - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / t(2) - b = -(u1%DummyInput - u2%DummyInput) - u_out%DummyInput = u1%DummyInput + b * ScaleFactor - END SUBROUTINE Current_Input_ExtrapInterp1 - - - SUBROUTINE Current_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is 2. -! -! expressions below based on either -! -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = u1, f(t2) = u2, f(t3) = u3 -! -!.................................................................................................................................. - - TYPE(Current_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 - TYPE(Current_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 - TYPE(Current_InputType), INTENT(IN) :: u3 ! Input at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs - TYPE(Current_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(3) ! Times associated with the Inputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: c ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Current_Input_ExtrapInterp2' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(2), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(2) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(1), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / (t(2) * t(3) * (t(2) - t(3))) - b = (t(3)**2*(u1%DummyInput - u2%DummyInput) + t(2)**2*(-u1%DummyInput + u3%DummyInput))* scaleFactor - c = ( (t(2)-t(3))*u1%DummyInput + t(3)*u2%DummyInput - t(2)*u3%DummyInput ) * scaleFactor - u_out%DummyInput = u1%DummyInput + b + c * t_out - END SUBROUTINE Current_Input_ExtrapInterp2 - - - SUBROUTINE Current_Output_ExtrapInterp(y, t, y_out, t_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is given by the size of y -! -! expressions below based on either -! -! f(t) = a -! f(t) = a + b * t, or -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = y1, f(t2) = y2, f(t3) = y3 (as appropriate) -! -!.................................................................................................................................. - - TYPE(Current_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs - TYPE(Current_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: t_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Current_Output_ExtrapInterp' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - if ( size(t) .ne. size(y)) then - CALL SetErrStat(ErrID_Fatal,'size(t) must equal size(y)',ErrStat,ErrMsg,RoutineName) - RETURN - endif - order = SIZE(y) - 1 - IF ( order .eq. 0 ) THEN - CALL Current_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL Current_Output_ExtrapInterp1(y(1), y(2), t, y_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 2 ) THEN - CALL Current_Output_ExtrapInterp2(y(1), y(2), y(3), t, y_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE - CALL SetErrStat(ErrID_Fatal,'size(y) must be less than 4 (order must be less than 3).',ErrStat,ErrMsg,RoutineName) - RETURN - ENDIF - END SUBROUTINE Current_Output_ExtrapInterp - - - SUBROUTINE Current_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is 1. -! -! f(t) = a + b * t, or -! -! where a and b are determined as the solution to -! f(t1) = y1, f(t2) = y2 -! -!.................................................................................................................................. - - TYPE(Current_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 - TYPE(Current_OutputType), INTENT(IN) :: y2 ! Output at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs - TYPE(Current_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(2) ! Times associated with the Outputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - CHARACTER(*), PARAMETER :: RoutineName = 'Current_Output_ExtrapInterp1' - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / t(2) - b = -(y1%DummyOutput - y2%DummyOutput) - y_out%DummyOutput = y1%DummyOutput + b * ScaleFactor - END SUBROUTINE Current_Output_ExtrapInterp1 - - - SUBROUTINE Current_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is 2. -! -! expressions below based on either -! -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = y1, f(t2) = y2, f(t3) = y3 -! -!.................................................................................................................................. - - TYPE(Current_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 - TYPE(Current_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 - TYPE(Current_OutputType), INTENT(IN) :: y3 ! Output at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs - TYPE(Current_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(3) ! Times associated with the Outputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: c ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Current_Output_ExtrapInterp2' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(2), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(2) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(1), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / (t(2) * t(3) * (t(2) - t(3))) - b = (t(3)**2*(y1%DummyOutput - y2%DummyOutput) + t(2)**2*(-y1%DummyOutput + y3%DummyOutput))* scaleFactor - c = ( (t(2)-t(3))*y1%DummyOutput + t(3)*y2%DummyOutput - t(2)*y3%DummyOutput ) * scaleFactor - y_out%DummyOutput = y1%DummyOutput + b + c * t_out - END SUBROUTINE Current_Output_ExtrapInterp2 - -END MODULE Current_Types -!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index 2c05caa186..e1ef0997db 100644 --- a/modules/hydrodyn/src/HydroDyn.f90 +++ b/modules/hydrodyn/src/HydroDyn.f90 @@ -30,10 +30,10 @@ MODULE HydroDyn use Morison USE WAMIT USE WAMIT2 + use SeaState USE HydroDyn_Input USE HydroDyn_Output - USE Current - USE Waves2 + #ifdef USE_FIT USE FIT_MODULES USE FIT_Types @@ -76,148 +76,6 @@ MODULE HydroDyn CONTAINS -SUBROUTINE WvStretch_Init(WaveStMod, WtrDpth, NStepWave, NNodes, & - NWaveElev, WaveElev, WaveKinzi, WaveTime, & - WaveVel0, WaveAcc0, WaveDynP0, & - WavePVel0, WavePAcc0, WavePDynP0, & - WaveVel , WaveAcc , WaveDynP , & - nodeInWater, ErrStat, ErrMsg ) - - - INTEGER, INTENT(IN ) :: WaveStMod - REAL(SiKi), INTENT(IN ) :: WtrDpth - INTEGER, INTENT(IN ) :: NStepWave - INTEGER, INTENT(IN ) :: NNodes - INTEGER, INTENT(IN ) :: NWaveElev - REAL(SiKi), INTENT(IN ) :: WaveElev(0:,:) - REAL(SiKi), INTENT(IN ) :: WaveKinzi(:) - REAL(SiKi), INTENT(IN ) :: WaveTime(0:) - REAL(SiKi), INTENT(IN ) :: WaveVel0(0:,:,:) !< Wave velocity in Global coordinate system at Z = 0. Each point in this array has a corresponding entry (same index #) in the WaveVel array - REAL(SiKi), INTENT(IN ) :: WaveAcc0(0:,:,:) - REAL(SiKi), INTENT(IN ) :: WaveDynP0(0:,:) - REAL(SiKi), INTENT(IN ) :: WavePVel0(0:,:,:) !< Wave velocity in Global coordinate system at Z = 0. Each point in this array has a corresponding entry (same index #) in the WaveVel array - REAL(SiKi), INTENT(IN ) :: WavePAcc0(0:,:,:) - REAL(SiKi), INTENT(IN ) :: WavePDynP0(0:,:) - REAL(SiKi), INTENT(INOUT) :: WaveVel(0:,:,:) - REAL(SiKi), INTENT(INOUT) :: WaveAcc(0:,:,:) - REAL(SiKi), INTENT(INOUT) :: WaveDynP(0:,:) - INTEGER(IntKi), INTENT(INOUT) :: nodeInWater(0:,:) - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - ! Local variables - INTEGER(IntKi) :: I, J !< Local loop counters - REAL(SiKi) :: wavekinzloc ,WavePVel0loc - - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - - - DO I = 0,NStepWave-1 ! Loop through all time steps - - DO J = 1,NNodes - - SELECT CASE ( WaveStMod ) ! Which model are we using to extrapolate the incident wave kinematics to the instantaneous free surface? - - CASE ( 0 ) ! None = no stretching. - ! Since we have no stretching, the wave kinematics between the seabed and - ! the mean sea level are left unchanged; below the seabed or above the - ! mean sea level, the wave kinematics are zero: - IF ( ( WaveKinzi(J) < -WtrDpth ) .OR. ( WaveKinzi(J) > 0.0 ) ) THEN ! .TRUE. if the elevation of the point defined by WaveKinzi(J) lies below the seabed or above mean sea level (exclusive) - - WaveDynP (I,J ) = 0.0 - WaveVel (I,J,:) = 0.0 - WaveAcc (I,J,:) = 0.0 - nodeInWater(I,J ) = 0 - ELSE - nodeInWater(I,J ) = 1 - END IF - CASE ( 1 ) ! Vertical stretching. - - - ! Vertical stretching says that the wave kinematics above the mean sea level - ! equal the wave kinematics at the mean sea level. The wave kinematics - ! below the mean sea level are left unchanged: - IF ( ( WaveKinzi(J) < -WtrDpth ) .OR. ( WaveKinzi(J) > WaveElev(I,J) ) ) THEN ! .TRUE. if the elevation of the point defined by WaveKinzi(J) lies below the seabed or above the instantaneous wave elevation (exclusive) - - WaveDynP (I,J ) = 0.0 - WaveVel (I,J,:) = 0.0 - WaveAcc (I,J,:) = 0.0 - nodeInWater(I,J ) = 0 - ELSE - nodeInWater(I,J ) = 1 - IF ( WaveKinzi(J) >= 0.0_ReKi ) THEN - ! Set the wave kinematics to the kinematics at mean sea level for locations above MSL, but below the wave elevation. - WaveDynP (I,J ) = WaveDynP0 (I,J ) - WaveVel (I,J,:) = WaveVel0 (I,J,:) - WaveAcc (I,J,:) = WaveAcc0 (I,J,:) - END IF - ! Otherwise, do nothing because the kinematics have already be set correctly via the various Waves modules - END IF - - - - - CASE ( 2 ) ! Extrapolation stretching. - - - ! Extrapolation stretching uses a linear Taylor expansion of the wave - ! kinematics (and their partial derivatives with respect to z) at the mean - ! sea level to find the wave kinematics above the mean sea level. The - ! wave kinematics below the mean sea level are left unchanged: - - - IF ( ( WaveKinzi(J) < -WtrDpth ) .OR. ( WaveKinzi(J) > WaveElev(I,J) ) ) THEN ! .TRUE. if the elevation of the point defined by WaveKinzi(J) lies below the seabed or above the instantaneous wave elevation (exclusive) - - WaveDynP (I,J ) = 0.0 - WaveVel (I,J,:) = 0.0 - WaveAcc (I,J,:) = 0.0 - nodeInWater(I,J ) = 0 - ELSE - nodeInWater(I,J ) = 1 - wavekinzloc = WaveKinzi(J) - WavePVel0loc = WavePVel0 (I,J,1) - IF ( WaveKinzi(J) >= 0.0_ReKi ) THEN - ! Set the wave kinematics to the kinematics at mean sea level for locations above MSL, but below the wave elevation. - WaveDynP (I,J ) = WaveDynP0 (I,J ) + WaveKinzi(J)*WavePDynP0 (I,J ) - WaveVel (I,J,:) = WaveVel0 (I,J,:) + WaveKinzi(J)*WavePVel0 (I,J,:) - WaveAcc (I,J,:) = WaveAcc0 (I,J,:) + WaveKinzi(J)*WavePAcc0 (I,J,:) - END IF - ! Otherwise, do nothing because the kinematics have already be set correctly via the various Waves modules - END IF - - - CASE ( 3 ) ! Wheeler stretching. - - - ! Wheeler stretching says that wave kinematics calculated using Airy theory - ! at the mean sea level should actually be applied at the instantaneous - ! free surface and that Airy wave kinematics computed at locations between - ! the seabed and the mean sea level should be shifted vertically to new - ! locations in proportion to their elevation above the seabed. - ! - ! Computing the wave kinematics with Wheeler stretching requires that first - ! say that the wave kinematics we computed at the elevations defined by - ! the WaveKinzi0Prime(:) array are actual applied at the elevations found - ! by stretching the elevations in the WaveKinzi0Prime(:) array using the - ! instantaneous wave elevation--these new elevations are stored in the - ! WaveKinzi0St(:) array. Next, we interpolate the wave kinematics - ! computed without stretching to the desired elevations (defined in the - ! WaveKinzi(:) array) using the WaveKinzi0St(:) array: - - - ENDSELECT - END DO ! J - All points where the incident wave kinematics will be computed - END DO ! I - All time steps - - ! Set the ending timestep to the same as the first timestep - WaveDynP (NStepWave,: ) = WaveDynP (0,: ) - WaveVel (NStepWave,:,:) = WaveVel (0,:,:) - WaveAcc (NStepWave,:,:) = WaveAcc (0,:,:) - -END SUBROUTINE WvStretch_Init - !---------------------------------------------------------------------------------------------------------------------------------- !> This routine is called at the start of the simulation to perform initialization steps. !! The parameters are set here and not changed during the simulation. @@ -225,7 +83,7 @@ END SUBROUTINE WvStretch_Init SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) !.................................................................................................................................. - TYPE(HydroDyn_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine. + TYPE(HydroDyn_InitInputType), INTENT(INOUT) :: InitInp !< Input data for initialization routine. [INOUT because of a move_alloc() statement] TYPE(HydroDyn_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined TYPE(HydroDyn_ParameterType), INTENT( OUT) :: p !< Parameters TYPE(HydroDyn_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states @@ -251,35 +109,12 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I CHARACTER(1024) :: SummaryName ! name of the HydroDyn summary file TYPE(HydroDyn_InputFile) :: InputFileData !< Data from input file TYPE(FileInfoType) :: InFileInfo !< The derived type for holding the full input file for parsing -- we may pass this in the future - TYPE(Waves_InitOutputType) :: Waves_InitOut ! Initialization Outputs from the Waves module initialization -! TYPE(Waves2_InitOutputType) :: Waves2_InitOut ! Initialization Outputs from the Waves2 module initialization - TYPE(Current_InitOutputType) :: Current_InitOut ! Initialization Outputs from the Current module initialization ! LOGICAL :: hasWAMITOuts ! Are there any WAMIT-related outputs ! LOGICAL :: hasMorisonOuts ! Are there any Morison-related outputs ! INTEGER :: numHydroOuts ! total number of WAMIT and Morison outputs INTEGER :: I, J, k, iBody ! Generic counters - REAL(SiKi) :: WaveNmbr ! Wavenumber of the current frequency component (1/meter) ! These are dummy variables to satisfy the framework, but are not used - TYPE(Waves_InputType) :: Waves_u ! Waves module initial guess for the input; the input mesh is not defined because it is not used by the waves module - TYPE(Waves_ParameterType) :: Waves_p ! Waves module parameters - TYPE(Waves_ContinuousStateType) :: Waves_x ! Waves module initial continuous states - TYPE(Waves_DiscreteStateType) :: Waves_xd ! Waves module discrete states - TYPE(Waves_ConstraintStateType) :: Waves_z ! Waves module initial guess of the constraint states - TYPE(Waves_OtherStateType) :: WavesOtherState ! Waves module other states - TYPE(Waves_MiscVarType) :: Waves_m ! Waves module misc/optimization data - TYPE(Waves_OutputType) :: Waves_y ! Waves module outputs - - - TYPE(Current_InputType) :: Current_u ! Current module initial guess for the input; the input mesh is not defined because it is not used by the Current module - TYPE(Current_ParameterType) :: Current_p ! Current module parameters - TYPE(Current_ContinuousStateType) :: Current_x ! Current module initial continuous states - TYPE(Current_DiscreteStateType) :: Current_xd ! Current module discrete states - TYPE(Current_ConstraintStateType) :: Current_z ! Current module initial guess of the constraint states - TYPE(Current_OtherStateType) :: CurrentOtherState ! Current module other states - TYPE(Current_OutputType) :: Current_y ! Current module outputs - TYPE(Current_MiscVarType) :: Current_m ! Current module misc/optimization data - #ifdef USE_FIT ! FIT - related data @@ -294,42 +129,21 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I TYPE(FIT_InitOutputType) :: FIT_InitOut ! Initialization Outputs from the FIT module initialization #endif - Real(ReKi) :: Np - Real(ReKi) :: dftreal - Real(ReKi) :: dftimag ! WAMIT Mesh real(R8Ki) :: theta(3), orientation(3,3) - ! Wave Stretching Data - REAL(SiKi), ALLOCATABLE :: tmpWaveKinzi(: ) - INTEGER :: tmpNWaveElev - REAL(SiKi), ALLOCATABLE :: tmpWaveElevxi(: ) - REAL(SiKi), ALLOCATABLE :: tmpWaveElevyi(: ) - REAL(SiKi), ALLOCATABLE :: tmpWaveElevXY(:,: ) - REAL(SiKi), ALLOCATABLE :: WaveElevSt (:,: ) - REAL(SiKi), ALLOCATABLE :: WaveVel0 (:,:,:) - REAL(SiKi), ALLOCATABLE :: WaveAcc0 (:,:,:) - REAL(SiKi), ALLOCATABLE :: WaveDynP0 (:,: ) - REAL(SiKi), ALLOCATABLE :: WaveVel2S0 (:,:,:) - REAL(SiKi), ALLOCATABLE :: WaveAcc2S0 (:,:,:) - REAL(SiKi), ALLOCATABLE :: WaveDynP2S0 (:,: ) - REAL(SiKi), ALLOCATABLE :: WaveVel2D0 (:,:,:) - REAL(SiKi), ALLOCATABLE :: WaveAcc2D0 (:,:,:) - REAL(SiKi), ALLOCATABLE :: WaveDynP2D0 (:,: ) - - INTEGER(IntKi) :: ErrStat2 ! local error status CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_Init' - ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" p%UnOutFile = -1 !bjj: this was being written to the screen when I had an error in my HD input file, so I'm going to initialize here. + p%PointsToSeaState = .true. ! this should be true unless we are initializing from restart (in a different driver/routine) #ifdef BETA_BUILD CALL DispBetaNotice( "This is a beta version of HydroDyn and is for testing purposes only."//NewLine//"This version includes user waves, WaveMod=6 and the ability to write example user waves." ) @@ -367,13 +181,18 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! Parse all HydroDyn-related input and populate the InputFileData structure - CALL HydroDyn_ParseInput( InitInp%InputFile, InitInp%OutRootName, InitInp%defWtrDens, InitInp%defWtrDpth, InitInp%defMSL2SWL, InFileInfo, InputFileData, ErrStat2, ErrMsg2 ) + CALL HydroDyn_ParseInput( InitInp%InputFile, InitInp%OutRootName, InFileInfo, InputFileData, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN END IF + InputFileData%Morison%WtrDens = InitInp%WtrDens + InputFileData%Morison%WtrDpth = InitInp%WtrDpth + InputFileData%Morison%MSL2SWL = InitInp%MSL2SWL + + ! Verify all the necessary initialization data. Do this at the HydroDynInput module-level ! because the HydroDynInput module is also responsible for parsing all this @@ -399,7 +218,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ELSE IF (Initlocal%PotMod == 2) THEN ! This is the FIT potential flow model and the time step needs to be >= the driver timestep, and and integer multiple if larger ! We example WaveDT for this timestep size because FIT is tied to WaveDT - IF ( ( .NOT. EqualRealNos(mod(real(Initlocal%Waves%WaveDT,ReKi), real(Interval,ReKi)) , 0.0_ReKi) ) .OR. Initlocal%Waves%WaveDT <= 0.0_DbKi ) THEn + IF ( ( .NOT. EqualRealNos(mod(real(Initlocal%WaveDT,ReKi), real(Interval,ReKi)) , 0.0_ReKi) ) .OR. Initlocal%WaveDT <= 0.0_DbKi ) THEn CALL SetErrStat(ErrID_Fatal,'The value of WaveDT is not greater than zero and an integer multiple of the glue code timestep.',ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -420,8 +239,8 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I IF ( InputFileData%HDSum ) THEN - SummaryName = TRIM(InitInp%OutRootName)//'.HD.sum' - CALL HDOut_OpenSum( InputFileData%UnSum, SummaryName, HydroDyn_ProgDesc, ErrStat2, ErrMsg2 ) !this must be called before the Waves_Init() routine so that the appropriate wave data can be written to the summary file + SummaryName = TRIM(InitInp%OutRootName)//'.sum' + CALL HDOut_OpenSum( InputFileData%UnSum, SummaryName, HydroDyn_ProgDesc, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -441,418 +260,21 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I p%AddBQuad = InputFileData%AddBQuad - ! Set summary unit number in Waves, Radiation, and Morison initialization input data - InputFileData%Waves%UnSum = InputFileData%UnSum - InputFileData%WAMIT%Conv_Rdtn%UnSum = InputFileData%UnSum - InputFileData%Morison%UnSum = InputFileData%UnSum + ! Set summary unit number in Morison initialization input data + InputFileData%Morison%UnSum = InputFileData%UnSum - ! distribute wave field and turbine location variables as needed to submodule initInputs - InputFileData%Waves%WaveFieldMod = InitInp%WaveFieldMod - InputFileData%Waves%PtfmLocationX = InitInp%PtfmLocationX - InputFileData%Waves%PtfmLocationY = InitInp%PtfmLocationY - ! Now call each sub-module's *_Init subroutine ! to fully initialize each sub-module based on the necessary initialization data - - - ! Initialize Current module - - CALL Current_Init(InputFileData%Current, Current_u, Current_p, Current_x, Current_xd, Current_z, CurrentOtherState, & - Current_y, Current_m, Interval, Current_InitOut, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! Verify that Current_Init() did not request a different Interval! - - IF ( p%DT /= Interval ) THEN - CALL SetErrStat(ErrID_Fatal,'Current Module attempted to change timestep interval, but this is not allowed. Current Module must use the HydroDyn Interval.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - END IF - - - ! Move initialization output data from Current module into the initialization input data for the Waves module - - IF (ALLOCATED(Current_InitOut%CurrVxi)) CALL Move_Alloc( Current_InitOut%CurrVxi, InputFileData%Waves%CurrVxi ) - IF (ALLOCATED(Current_InitOut%CurrVyi)) CALL Move_Alloc( Current_InitOut%CurrVyi, InputFileData%Waves%CurrVyi ) - - InputFileData%Waves%PCurrVxiPz0 = Current_InitOut%PCurrVxiPz0 - InputFileData%Waves%PCurrVyiPz0 = Current_InitOut%PCurrVyiPz0 - - - ! Copy the WaveElevXY data in from the HydroDyn InitInp - - IF (ALLOCATED(InitInp%WaveElevXY)) THEN - call AllocAry(tmpWaveElevXY,size(InitInp%WaveElevXY,DIM=1),size(InitInp%WaveElevXY,DIM=2),'tmpWaveElevXY',ErrStat2,ErrMsg2) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - tmpWaveElevXY = InitInp%WaveElevXY - ENDIF - - - ! Initialize Waves module - -!========================================================================== -! Initialize Wave Stretching data for 1st Order Waves -!========================================================================== - IF (InputFileData%Waves%WaveStMod > 0) THEN - ! Allocate the temporary storage array for the WvKinxi - ALLOCATE ( tmpWaveKinzi(InputFileData%Waves%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for tmpWaveKinzi array.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp() - RETURN - END IF - - - - tmpWaveKinzi = InputFileData%Waves%WaveKinzi - InputFileData%Waves%WaveKinzi = 0.0_ReKi ! Force all zi coordinates to 0.0 for this version of the Waves initialization - - - ! We will use the user-requested wave elevation arrays to compute the wave elevations for stretching at ALL node locations. - ! We are going to store the user-requested wave elevation output locations so that we can restore them after we done. - IF (InputFileData%Waves%NWaveElev > 0) THEN - tmpNWaveElev = InputFileData%Waves%NWaveElev - CALL MOVE_ALLOC( InputFileData%Waves%WaveElevxi, tmpWaveElevxi ) ! (from, to) - CALL MOVE_ALLOC( InputFileData%Waves%WaveElevyi, tmpWaveElevyi ) - END IF - - - ALLOCATE ( InputFileData%Waves%WaveElevxi(InputFileData%Waves%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for tmpWaveKinzi array.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp() - RETURN - END IF - ALLOCATE ( InputFileData%Waves%WaveElevyi(InputFileData%Waves%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for tmpWaveKinzi array.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp() - RETURN - END IF - - InputFileData%Waves%NWaveElev = InputFileData%Waves%NWaveKin - InputFileData%Waves%WaveElevxi = InputFileData%Waves%WaveKinxi - InputFileData%Waves%WaveElevyi = InputFileData%Waves%WaveKinyi - - - CALL Waves_Init(InputFileData%Waves, Waves_u, Waves_p, Waves_x, Waves_xd, Waves_z, WavesOtherState, & - Waves_y, Waves_m, Interval, Waves_InitOut, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! Store the wave elevations coming out of the Waves_Init for use in the stretching calculations - ALLOCATE ( WaveElevSt(0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveElevSt array.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp() - RETURN - END IF - WaveElevSt = Waves_InitOut%WaveElev - - - ! We need to reset the wave elevation arrays - DEALLOCATE(InputFileData%Waves%WaveElevxi) - DEALLOCATE(InputFileData%Waves%WaveElevyi) - InputFileData%Waves%NWaveElev = tmpNWaveElev - - IF (InputFileData%Waves%NWaveElev > 0) THEN - CALL MOVE_ALLOC( tmpWaveElevxi, InputFileData%Waves%WaveElevxi ) ! (from, to) - CALL MOVE_ALLOC( tmpWaveElevyi, InputFileData%Waves%WaveElevyi ) - END IF - - ALLOCATE ( WaveDynP0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP0.', ErrStat, ErrMsg, RoutineName) - - ALLOCATE ( WaveVel0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin,3), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel0.', ErrStat, ErrMsg, RoutineName) - - ALLOCATE ( WaveAcc0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin,3), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0.', ErrStat, ErrMsg, RoutineName) - - - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! Copy the init output arrays into the MSL versions - WaveDynP0 = Waves_InitOut%WaveDynP - WaveAcc0 = Waves_InitOut%WaveAcc - WaveVel0 = Waves_InitOut%WaveVel - - - InputFileData%Waves%WaveKinzi = tmpWaveKinzi - - ! Deallocate data which will be allocated again within the Waves_Init routine - DEALLOCATE( Waves_InitOut%WaveDynP ) - DEALLOCATE( Waves_InitOut%WaveAcc ) - DEALLOCATE( Waves_InitOut%WaveVel ) - DEALLOCATE( Waves_InitOut%PWaveDynP0 ) - DEALLOCATE( Waves_InitOut%PWaveAcc0 ) - DEALLOCATE( Waves_InitOut%PWaveVel0 ) - DEALLOCATE( Waves_InitOut%WaveElevC0) - DEALLOCATE( Waves_InitOut%WaveDirArr) - DEALLOCATE( Waves_InitOut%WaveElev ) - DEALLOCATE( Waves_InitOut%WaveTime ) - DEALLOCATE( Waves_InitOut%NodeInWater ) - END IF -!========================================================================== - - CALL Waves_Init(InputFileData%Waves, Waves_u, Waves_p, Waves_x, Waves_xd, Waves_z, WavesOtherState, & - Waves_y, Waves_m, Interval, Waves_InitOut, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - ! Verify that Waves_Init() did not request a different Interval! - - IF ( p%DT /= Interval ) THEN - CALL SetErrStat(ErrID_Fatal,'Waves Module attempted to change timestep interval, but this is not allowed. Waves Module must use the HydroDyn Interval.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - END IF - - ! Copy the wave elevation time series corresponding to WaveElevXY to the output. - - IF (ALLOCATED(Waves_InitOut%WaveElevSeries)) CALL MOVE_ALLOC( Waves_InitOut%WaveElevSeries, InitOut%WaveElevSeries ) - IF (ALLOCATED(InputFileData%Waves%WaveElevXY)) CALL MOVE_ALLOC(InputFileData%Waves%WaveElevXY, tmpWaveElevXY) ! move this back for waves2 later ! Copy Waves initialization output into the initialization input type for the WAMIT module - p%NWaveElev = InputFileData%Waves%NWaveElev - p%NStepWave = Waves_InitOut%NStepWave - - CALL MOVE_ALLOC( Waves_InitOut%WaveTime, p%WaveTime ) - CALL MOVE_ALLOC( Waves_InitOut%WaveElev, p%WaveElev1 ) ! allocate p%WaveElev1, set p%WaveElev1 = Waves_InitOut%WaveElev, and deallocate Waves_InitOut%WaveElev + !p%NWaveElev = InputFileData%Waves%NWaveElev + p%NStepWave = InitInp%NStepWave - ! Copy the first order wave elevation information to p%WaveElev1 so that we can output the total, first, and second order wave elevation separately - ALLOCATE ( p%WaveElev (0:p%NStepWave, p%NWaveElev ) , STAT=ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat(ErrID_Fatal,'Error allocating memory for the WaveElev array.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - END IF - p%WaveElev = p%WaveElev1 - - + p%WaveTime => InitInp%WaveTime m%LastIndWave = 1 - - IF ( InputFileData%Waves%WaveMod /= 6 ) THEN - - !---------------------------------- - ! Initialize Waves2 module - !---------------------------------- - - - IF (InputFileData%Waves2%WvDiffQTFF .OR. InputFileData%Waves2%WvSumQTFF ) THEN - ! Set a few things from the Waves module output - InputFileData%Waves2%NStepWave = Waves_InitOut%NStepWave - InputFileData%Waves2%NStepWave2 = Waves_InitOut%NStepWave2 - InputFileData%Waves2%WaveDOmega = Waves_InitOut%WaveDOmega - - ! Copy the WaveElevXY data in from the HydroDyn InputFileData - IF (ALLOCATED(tmpWaveElevXY)) CALL MOVE_ALLOC(tmpWaveElevXY, InputFileData%Waves2%WaveElevXY) - - ! Temporarily move arrays to init input for Waves2 (save some space) - CALL MOVE_ALLOC(p%WaveTime, InputFileData%Waves2%WaveTime) - CALL MOVE_ALLOC(Waves_InitOut%WaveElevC0, InputFileData%Waves2%WaveElevC0) - CALL MOVE_ALLOC(Waves_InitOut%WaveDirArr, InputFileData%Waves2%WaveDirArr) - -!========================================================================== -! Initialize Wave Stretching data for 2nd Order Waves -!========================================================================== - IF (InputFileData%Waves%WaveStMod > 0) THEN - ! Set the wave kinematics zi locations to zero to generate kinematics at MSL - InputFileData%Waves2%WaveKinzi = 0 - - ! We will use the user-requested wave elevation arrays to compute the wave elevations for stretching at ALL node locations. - ! We are going to store the user-requested wave elevation output locations so that we can restore them after we done. - IF (InputFileData%Waves2%NWaveElev > 0) THEN - tmpNWaveElev = InputFileData%Waves2%NWaveElev - CALL MOVE_ALLOC( InputFileData%Waves2%WaveElevxi, tmpWaveElevxi ) ! (from, to) - CALL MOVE_ALLOC( InputFileData%Waves2%WaveElevyi, tmpWaveElevyi ) - END IF - - - ALLOCATE ( InputFileData%Waves2%WaveElevxi(InputFileData%Waves2%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveElevxi array.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp() - RETURN - END IF - ALLOCATE ( InputFileData%Waves2%WaveElevyi(InputFileData%Waves2%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveElevyi array.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp() - RETURN - END IF - - InputFileData%Waves2%NWaveElev = InputFileData%Waves2%NWaveKin - InputFileData%Waves2%WaveElevxi = InputFileData%Waves2%WaveKinxi - InputFileData%Waves2%WaveElevyi = InputFileData%Waves2%WaveKinyi - - CALL Waves2_Init(InputFileData%Waves2, m%u_Waves2, p%Waves2, x%Waves2, xd%Waves2, z%Waves2, OtherState%Waves2, & - y%Waves2, m%Waves2, Interval, InitOut%Waves2, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - ! Store the wave elevations coming out of the Waves_Init for use in the stretching calculations - WaveElevSt = WaveElevSt + p%Waves2%WaveElev2 - - ! We need to reset the wave elevation arrays - DEALLOCATE(InputFileData%Waves2%WaveElevxi) - DEALLOCATE(InputFileData%Waves2%WaveElevyi) - InputFileData%Waves2%NWaveElev = tmpNWaveElev - - IF (InputFileData%Waves2%NWaveElev > 0) THEN - CALL MOVE_ALLOC( tmpWaveElevxi, InputFileData%Waves2%WaveElevxi ) ! (from, to) - CALL MOVE_ALLOC( tmpWaveElevyi, InputFileData%Waves2%WaveElevyi ) - END IF - - - ALLOCATE ( WaveDynP2D0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2D0.', ErrStat, ErrMsg, RoutineName) - - ALLOCATE ( WaveVel2D0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin,3), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2D0.', ErrStat, ErrMsg, RoutineName) - - ALLOCATE ( WaveAcc2D0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin,3), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2D0.', ErrStat, ErrMsg, RoutineName) - - ALLOCATE ( WaveDynP2S0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2S0.', ErrStat, ErrMsg, RoutineName) - - ALLOCATE ( WaveVel2S0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin,3), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2S0.', ErrStat, ErrMsg, RoutineName) - - ALLOCATE ( WaveAcc2S0 (0:Waves_InitOut%NStepWave,InputFileData%Waves%NWaveKin,3), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2S0.', ErrStat, ErrMsg, RoutineName) - - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! Copy the init output arrays into the MSL versions - WaveDynP2D0 = InitOut%Waves2%WaveDynP2D - WaveAcc2D0 = InitOut%Waves2%WaveAcc2D - WaveVel2D0 = InitOut%Waves2%WaveVel2D - WaveDynP2S0 = InitOut%Waves2%WaveDynP2S - WaveAcc2S0 = InitOut%Waves2%WaveAcc2S - WaveVel2S0 = InitOut%Waves2%WaveVel2S - - ! Reset the wave kinematics zi locations - InputFileData%Waves2%WaveKinzi = InputFileData%Waves%WaveKinzi - - ! Deallocate arrays which will be re-allocated in the next call to Waves2_Init - DEALLOCATE ( p%Waves2%WaveElev2 ) - DEALLOCATE ( InitOut%Waves2%WaveVel2D ) - DEALLOCATE ( InitOut%Waves2%WaveAcc2D ) - DEALLOCATE ( InitOut%Waves2%WaveDynP2D ) - DEALLOCATE ( InitOut%Waves2%WaveVel2S ) - DEALLOCATE ( InitOut%Waves2%WaveAcc2S ) - DEALLOCATE ( InitOut%Waves2%WaveDynP2S ) - - END IF -!========================================================================== - - - - - - -!FIXME: why is this called again? I'm either not remembering something, or I don't undestand the wave stretching above. -- ADP - CALL Waves2_Init(InputFileData%Waves2, m%u_Waves2, p%Waves2, x%Waves2, xd%Waves2, z%Waves2, OtherState%Waves2, & - y%Waves2, m%Waves2, Interval, InitOut%Waves2, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! move arrays back - CALL MOVE_ALLOC(InputFileData%Waves2%WaveTime, p%WaveTime) - CALL MOVE_ALLOC(InputFileData%Waves2%WaveElevC0, Waves_InitOut%WaveElevC0) - CALL MOVE_ALLOC(InputFileData%Waves2%WaveDirArr, Waves_InitOut%WaveDirArr) - - ! Verify that Waves2_Init() did not request a different Interval! - - IF ( p%DT /= Interval ) THEN - CALL SetErrStat(ErrID_Fatal,'Waves2 Module attempted to change timestep interval, but this is not allowed. '// & - ' Waves2 Module must use the HydroDyn Interval.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - END IF - - - ! If we calculated the wave elevation series data (for visualization purposes), add the second order corrections to the first order. - IF (ALLOCATED(InputFileData%Waves2%WaveElevXY)) THEN - ! Make sure the sizes of the two resulting arrays are identical... - IF ( SIZE(InitOut%WaveElevSeries,DIM=1) /= SIZE(InitOut%Waves2%WaveElevSeries2,DIM=1) .OR. & - SIZE(InitOut%WaveElevSeries,DIM=2) /= SIZE(InitOut%Waves2%WaveElevSeries2,DIM=2)) THEN - CALL SetErrStat(ErrID_Fatal,' WaveElevSeries arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - ELSE - DO J=1,SIZE(InitOut%WaveElevSeries,DIM=2) - DO I = 0,p%NStepWave - InitOut%WaveElevSeries(I,J) = InitOut%Waves2%WaveElevSeries2(I,J) + InitOut%WaveElevSeries(I,J) - ENDDO - ENDDO - ENDIF - ENDIF - - ! If we calculated wave elevations, it is now stored in p%WaveElev. So we need to add the corrections. - IF (p%Waves2%NWaveElev > 0 ) THEN - ! Make sure the sizes of the two resulting arrays are identical... - IF ( SIZE(p%WaveElev,DIM=1) /= SIZE(p%Waves2%WaveElev2,DIM=1) .OR. & - SIZE(p%WaveElev,DIM=2) /= SIZE(p%Waves2%WaveElev2,DIM=2)) THEN - CALL SetErrStat(ErrID_Fatal,' WaveElev(NWaveElev) arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - ELSE - DO J=1,SIZE(p%Waves2%WaveElev2,DIM=2) - DO I = 0,p%NStepWave - p%WaveElev(I,J) = p%Waves2%WaveElev2(I,J) + p%WaveElev(I,J) - ENDDO - ENDDO - CALL MOVE_ALLOC(p%Waves2%WaveElev2,p%WaveElev2) - ENDIF - ENDIF - - ! The acceleration, velocity, and dynamic pressures will get added to the parts passed to the morrison module later... - - ELSE - ! these need to be set to zero since we don't have a UseWaves2 flag: - p%Waves2%NWaveElev = 0 - p%Waves2%WvDiffQTFF = .FALSE. - p%Waves2%WvSumQTFF = .FALSE. - p%Waves2%NumOuts = 0 - - ENDIF ! InputFileData%Waves2%WvDiffQTFF .OR. InputFileData%Waves2%WvSumQTFF - - - ! Is there a WAMIT body? @@ -864,7 +286,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I InputFileData%WAMIT%WtrDpth = InputFileData%Morison%WtrDpth ! The data in InputFileData%Morison%WtrDpth was directly placed there when we parsed the HydroDyn input file p%NBody = InputFileData%NBody p%NBodyMod = InputFileData%NBodyMod - + InputFileData%WAMIT%WaveElev1 => InitInp%WaveElev1 call AllocAry( m%F_PtfmAdd, 6*InputFileData%NBody, "m%F_PtfmAdd", ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) call AllocAry( m%F_Waves , 6*InputFileData%NBody, "m%F_Waves" , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -887,7 +309,6 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I allocate( y%WAMIT( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array y%WAMIT.', ErrStat, ErrMsg, RoutineName ) allocate( m%WAMIT( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array m%WAMIT.', ErrStat, ErrMsg, RoutineName ) allocate( m%u_WAMIT( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array m%u_WAMIT.', ErrStat, ErrMsg, RoutineName ) - allocate( InitOut%WAMIT( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array InitOut%WAMIT.', ErrStat, ErrMsg, RoutineName ) InputFileData%WAMIT%PtfmVol0 = InputFileData%PtfmVol0 InputFileData%WAMIT%WAMITULEN = InputFileData%WAMITULEN(1) @@ -915,7 +336,6 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I allocate( y%WAMIT( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array y%WAMIT.', ErrStat, ErrMsg, RoutineName ) allocate( m%WAMIT( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array m%WAMIT.', ErrStat, ErrMsg, RoutineName ) allocate( m%u_WAMIT( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array m%u_WAMIT.', ErrStat, ErrMsg, RoutineName ) - allocate( InitOut%WAMIT( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array InitOut%WAMIT.', ErrStat, ErrMsg, RoutineName ) InputFileData%WAMIT%PtfmVol0 (1) = InputFileData%PtfmVol0 (1) InputFileData%WAMIT%WAMITULEN = InputFileData%WAMITULEN (1) InputFileData%WAMIT%PtfmRefxt (1) = InputFileData%PtfmRefxt (1) @@ -932,26 +352,28 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I return end if - ! Copy Waves initialization output into the initialization input type for the WAMIT module + ! Copy SeaState initialization output into the initialization input type for the WAMIT module - InputFileData%WAMIT%RhoXg = Waves_InitOut%RhoXg - InputFileData%WAMIT%NStepWave = Waves_InitOut%NStepWave - InputFileData%WAMIT%NStepWave2 = Waves_InitOut%NStepWave2 - InputFileData%WAMIT%WaveDirMin = Waves_InitOut%WaveDirMin - InputFileData%WAMIT%WaveDirMax = Waves_InitOut%WaveDirMax - InputFileData%WAMIT%WaveDOmega = Waves_InitOut%WaveDOmega + InputFileData%WAMIT%RhoXg = InitInp%RhoXg + InputFileData%WAMIT%NStepWave = InitInp%NStepWave + InputFileData%WAMIT%NStepWave2 = InitInp%NStepWave2 + InputFileData%WAMIT%WaveDirMin = InitInp%WaveDirMin + InputFileData%WAMIT%WaveDirMax = InitInp%WaveDirMax + InputFileData%WAMIT%WaveDOmega = InitInp%WaveDOmega ! Init inputs for the SS_Excitation model (set this just in case it will be used) - InputFileData%WAMIT%WaveDir = Waves_InitOut%WaveDir - CALL MOVE_ALLOC(Waves_InitOut%WaveElev0, InputFileData%WAMIT%WaveElev0) - + InputFileData%WAMIT%WaveDir = InitInp%WaveDir + CALL MOVE_ALLOC( InitInp%WaveElev0, InputFileData%WAMIT%WaveElev0 ) ! Temporarily move arrays to init input for WAMIT (save some space) - CALL MOVE_ALLOC(p%WaveTime, InputFileData%WAMIT%WaveTime) - CALL MOVE_ALLOC(Waves_InitOut%WaveElevC0, InputFileData%WAMIT%WaveElevC0) - CALL MOVE_ALLOC(Waves_InitOut%WaveDirArr, InputFileData%WAMIT%WaveDirArr) + + InputFileData%WAMIT%WaveTime => InitInp%WaveTime + InputFileData%WAMIT%WaveElevC0 => InitInp%WaveElevC0 + CALL MOVE_ALLOC( InitInp%WaveElevC, InputFileData%WAMIT%WaveElevC ) + InputFileData%WAMIT%seast_interp_p = InitInp%seast_interp_p + InputFileData%WAMIT%WaveDirArr => InitInp%WaveDirArr CALL WAMIT_Init(InputFileData%WAMIT, m%u_WAMIT(1), p%WAMIT(1), x%WAMIT(1), xd%WAMIT(1), z%WAMIT, OtherState%WAMIT(1), & - y%WAMIT(1), m%WAMIT(1), Interval, InitOut%WAMIT(1), ErrStat2, ErrMsg2 ) + y%WAMIT(1), m%WAMIT(1), Interval, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -975,7 +397,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I InputFileData%WAMIT%PtfmCOByt (1) = InputFileData%PtfmCOByt (i) CALL WAMIT_Init(InputFileData%WAMIT, m%u_WAMIT(i), p%WAMIT(i), x%WAMIT(i), xd%WAMIT(i), z%WAMIT, OtherState%WAMIT(i), & - y%WAMIT(i), m%WAMIT(i), Interval, InitOut%WAMIT(i), ErrStat2, ErrMsg2 ) + y%WAMIT(i), m%WAMIT(i), Interval, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -999,22 +421,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I WRITE( InputFileData%UnSum, '(A18,6(2X,ES20.6))') ' External: ',0.0,0.0,InputFileData%WAMIT%RhoXg*InputFileData%PtfmVol0(iBody),InputFileData%WAMIT%RhoXg*InputFileData%PtfmVol0(iBody)*InputFileData%PtfmCOByt(iBody), -InputFileData%WAMIT%RhoXg*InputFileData%PtfmVol0(iBody)*InputFileData%PtfmCOBxt(iBody), 0.0 ! and the moment about Y due to the COB being offset from the WAMIT reference point end do END IF - - - ! Verify that WAMIT_Init() did not request a different Interval! - - IF ( p%DT /= Interval ) THEN - CALL SetErrStat(ErrID_Fatal,'WAMIT Module attempted to change timestep interval, but this is not allowed. WAMIT Module must use the HydroDyn Interval.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - END IF - - ! move arrays back - CALL MOVE_ALLOC(InputFileData%WAMIT%WaveTime, p%WaveTime ) - CALL MOVE_ALLOC(InputFileData%WAMIT%WaveElevC0, Waves_InitOut%WaveElevC0) - CALL MOVE_ALLOC(InputFileData%WAMIT%WaveDirArr, Waves_InitOut%WaveDirArr) - !----------------------------------------- ! Initialize the WAMIT2 Calculations @@ -1026,18 +433,18 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! Flag required for indicating when to try using arrays that are allocated p%WAMIT2used = .TRUE. - ! Temporarily move arrays to init input for WAMIT2 (save some space) - CALL MOVE_ALLOC(p%WaveTime, InputFileData%WAMIT2%WaveTime) - CALL MOVE_ALLOC(Waves_InitOut%WaveElevC0, InputFileData%WAMIT2%WaveElevC0) - CALL MOVE_ALLOC(Waves_InitOut%WaveDirArr, InputFileData%WAMIT2%WaveDirArr) + ! init input for WAMIT2 pointers to save space + !InputFileData%WAMIT2%WaveTime => InitInp%WaveTime ! This isn't actually used within WAMIT2 GJH 9/30/2021 + InputFileData%WAMIT2%WaveElevC0 => InitInp%WaveElevC0 + InputFileData%WAMIT2%WaveDirArr => InitInp%WaveDirArr ! Copy Waves initialization output into the initialization input type for the WAMIT module - InputFileData%WAMIT2%RhoXg = Waves_InitOut%RhoXg - InputFileData%WAMIT2%NStepWave = Waves_InitOut%NStepWave - InputFileData%WAMIT2%NStepWave2 = Waves_InitOut%NStepWave2 - InputFileData%WAMIT2%WaveDirMin = Waves_InitOut%WaveDirMin - InputFileData%WAMIT2%WaveDirMax = Waves_InitOut%WaveDirMax - InputFileData%WAMIT2%WaveDOmega = Waves_InitOut%WaveDOmega + InputFileData%WAMIT2%RhoXg = InitInp%RhoXg + InputFileData%WAMIT2%NStepWave = InitInp%NStepWave + InputFileData%WAMIT2%NStepWave2 = InitInp%NStepWave2 + InputFileData%WAMIT2%WaveDirMin = InitInp%WaveDirMin + InputFileData%WAMIT2%WaveDirMax = InitInp%WaveDirMax + InputFileData%WAMIT2%WaveDOmega = InitInp%WaveDOmega InputFileData%WAMIT2%Gravity = InitInp%Gravity InputFileData%WAMIT2%WtrDpth = InputFileData%Morison%WtrDpth ! The data in InputFileData%Morison%WtrDpth was directly placed there when we parsed the HydroDyn input file @@ -1055,13 +462,8 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I call AllocAry( InputFileData%WAMIT2%PtfmRefzt , InputFileData%NBody, "PtfmRefzt" , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) call AllocAry( InputFileData%WAMIT2%PtfmRefztRot, InputFileData%NBody, "PtfmRefztRot", ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) allocate( p%WAMIT2( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array p%WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( x%WAMIT2( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array x%WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( xd%WAMIT2( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array xd%WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( OtherState%WAMIT2(1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array OtherState%WAMIT2.', ErrStat, ErrMsg, RoutineName ) allocate( y%WAMIT2( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array y%WAMIT2.', ErrStat, ErrMsg, RoutineName ) allocate( m%WAMIT2( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array m%WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( m%u_WAMIT2( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array m%u_WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( InitOut%WAMIT2( 1), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array InitOut%WAMIT2.', ErrStat, ErrMsg, RoutineName ) InputFileData%WAMIT2%PtfmRefxt = InputFileData%PtfmRefxt InputFileData%WAMIT2%PtfmRefyt = InputFileData%PtfmRefyt InputFileData%WAMIT2%PtfmRefzt = InputFileData%PtfmRefzt @@ -1076,13 +478,8 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I call AllocAry( InputFileData%WAMIT2%PtfmRefzt , 1, "PtfmRefzt" , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) call AllocAry( InputFileData%WAMIT2%PtfmRefztRot, 1, "PtfmRefztRot", ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) allocate( p%WAMIT2( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array p%WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( x%WAMIT2( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array x%WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( xd%WAMIT2( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array xd%WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( OtherState%WAMIT2(InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array OtherState%WAMIT2.', ErrStat, ErrMsg, RoutineName ) allocate( y%WAMIT2( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array y%WAMIT2.', ErrStat, ErrMsg, RoutineName ) allocate( m%WAMIT2( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array m%WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( m%u_WAMIT2( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array m%u_WAMIT2.', ErrStat, ErrMsg, RoutineName ) - allocate( InitOut%WAMIT2( InputFileData%NBody), stat = ErrStat2 ); if (ErrStat2 /=0) call SetErrStat( ErrID_Fatal, 'Failed to allocate array InitOut%WAMIT2.', ErrStat, ErrMsg, RoutineName ) InputFileData%WAMIT2%PtfmRefxt (1) = InputFileData%PtfmRefxt (1) InputFileData%WAMIT2%PtfmRefyt (1) = InputFileData%PtfmRefyt (1) InputFileData%WAMIT2%PtfmRefzt (1) = InputFileData%PtfmRefzt (1) @@ -1095,8 +492,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I return end if - CALL WAMIT2_Init(InputFileData%WAMIT2, m%u_WAMIT2(1), p%WAMIT2(1), x%WAMIT2(1), xd%WAMIT2(1), z%WAMIT2, OtherState%WAMIT2(1), & - y%WAMIT2(1), m%WAMIT2(1), Interval, InitOut%WAMIT2(1), ErrStat2, ErrMsg2 ) + CALL WAMIT2_Init(InputFileData%WAMIT2, p%WAMIT2(1), y%WAMIT2(1), m%WAMIT2(1), ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -1112,8 +508,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I InputFileData%WAMIT2%PtfmRefzt (1) = InputFileData%PtfmRefzt (i) InputFileData%WAMIT2%PtfmRefztRot(1) = InputFileData%PtfmRefztRot(i) - CALL WAMIT2_Init(InputFileData%WAMIT2, m%u_WAMIT2(i), p%WAMIT2(i), x%WAMIT2(i), xd%WAMIT2(i), z%WAMIT2, OtherState%WAMIT2(i), & - y%WAMIT2(i), m%WAMIT2(i), Interval, InitOut%WAMIT2(i), ErrStat2, ErrMsg2 ) + CALL WAMIT2_Init(InputFileData%WAMIT2, p%WAMIT2(i), y%WAMIT2(i), m%WAMIT2(i), ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -1122,21 +517,6 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I end do - ! move arrays back - CALL MOVE_ALLOC(InputFileData%WAMIT2%WaveTime, p%WaveTime ) - CALL MOVE_ALLOC(InputFileData%WAMIT2%WaveElevC0, Waves_InitOut%WaveElevC0) - CALL MOVE_ALLOC(InputFileData%WAMIT2%WaveDirArr, Waves_InitOut%WaveDirArr) - - - ! Verify that WAMIT2_Init() did not request a different Interval! - - IF ( p%DT /= Interval ) THEN - CALL SetErrStat(ErrID_Fatal,'WAMIT2 Module attempted to change timestep interval, but this is not allowed. '// & - 'WAMIT2 Module must use the HydroDyn Interval.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - END IF - ELSE ! Flag used in output handling to indicate when to ignore WAMIT2 outputs. p%WAMIT2used = .FALSE. @@ -1154,14 +534,14 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! General FITInitData%InputFile = InputFileData%PotFile FITInitData%Gravity = InputFileData%Gravity - FITInitData%Rho = InputFileData%Waves%WtrDens + FITInitData%Rho = InputFileData%Morison%WtrDens FITInitData%time_end = InitInp%TMax - FITInitData%dtime = InputFileData%Waves%WaveDT ! Set the FIT module's timestep equal to the WaveDT timestep, this was checked earlier to make sure it is an integer muliple of the glue-code timestep! + FITInitData%dtime = InitInp%WaveDT ! Set the FIT module's timestep equal to the WaveDT timestep, this was checked earlier to make sure it is an integer muliple of the glue-code timestep! ! Waves ! Need to pre-process the incoming wave data to be compatible with FIT - FITInitData%N_omega = Waves_InitOut%NStepWave2 - FITInitData%Wave_angle = Waves_InitOut%WaveDir + FITInitData%N_omega = InitInp%NStepWave2 + FITInitData%Wave_angle = InitInp%WaveDir ! allocate waves data arrays for FIT CALL AllocAry( FITInitData%Wave_amp, FITInitData%N_omega, "Wave_amp", ErrStat2, ErrMsg2 ) @@ -1178,14 +558,14 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I END IF ! Populate wave arrays - Np = 2*(Waves_InitOut%WaveDOmega + 1) - DO I = 1 , Waves_InitOut%NStepWave2 + Np = 2*(InitInp%WaveDOmega + 1) + DO I = 1 , InitInp%NStepWave2 - dftreal = Waves_InitOut%WaveElevC0( 1,ABS(I ) ) - dftimag = Waves_InitOut%WaveElevC0( 2, ABS(I ) )*SIGN(1,I) + dftreal = InitInp%WaveElevC0( 1,ABS(I ) ) + dftimag = InitInp%WaveElevC0( 2, ABS(I ) )*SIGN(1,I) FITInitData%Wave_amp (I) = sqrt( dftreal**2 + dftimag**2 ) * 2.0 / Np - FITInitData%Wave_omega (I) = I*Waves_InitOut%WaveDOmega - FITInitData%Wave_number(I) = I*Waves_InitOut%WaveDOmega**2. / InputFileData%Gravity + FITInitData%Wave_omega (I) = I*InitInp%WaveDOmega + FITInitData%Wave_number(I) = I*InitInp%WaveDOmega**2. / InputFileData%Gravity FITInitData%Wave_phase (I) = atan2( dftimag, dftreal ) END DO @@ -1201,8 +581,6 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I END IF - - END IF ! Check for WaveMod = 6 ! Are there Morison elements? @@ -1210,162 +588,32 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I IF ( InputFileData%Morison%NMembers > 0 ) THEN - ! Copy Waves initialization output into the initialization input type for the Morison module + ! Copy SeaState initialization output into the initialization input type for the Morison module - InputFileData%Morison%NStepWave = Waves_InitOut%NStepWave + InputFileData%Morison%NStepWave = InitInp%NStepWave + InputFileData%Morison%WaveTime => InitInp%WaveTime + InputFileData%Morison%WaveAcc => InitInp%WaveAcc + InputFileData%Morison%WaveDynP => InitInp%WaveDynP + InputFileData%Morison%WaveVel => InitInp%WaveVel + InputFileData%Morison%PWaveAcc0 => InitInp%PWaveAcc0 + InputFileData%Morison%PWaveDynP0 => InitInp%PWaveDynP0 + InputFileData%Morison%PWaveVel0 => InitInp%PWaveVel0 + InputFileData%Morison%WaveElev1 => InitInp%WaveElev1 + InputFileData%Morison%WaveElev2 => InitInp%WaveElev2 - ! Temporarily move array to init input for Morison (save some space) - CALL MOVE_ALLOC( p%WaveTime, InputFileData%Morison%WaveTime ) + InputFileData%Morison%MCFD = InitInp%MCFD + InputFileData%Morison%WaveAccMCF => InitInp%WaveAccMCF + InputFileData%Morison%PWaveAccMCF0 => InitInp%PWaveAccMCF0 - ! Permanently move these wave values to Morison init input (and note they are potentially modified by 2nd order stuff before being sent to Morison) - CALL MOVE_ALLOC( Waves_InitOut%WaveAcc, InputFileData%Morison%WaveAcc ) - CALL MOVE_ALLOC( Waves_InitOut%WaveDynP, InputFileData%Morison%WaveDynP ) - CALL MOVE_ALLOC( Waves_InitOut%WaveVel, InputFileData%Morison%WaveVel ) - CALL MOVE_ALLOC( Waves_InitOut%nodeInWater,InputFileData%Morison%nodeInWater ) ! moved to Morison%p%nodeInWater in the init routine - + InputFileData%Morison%WaveStMod = InitInp%WaveStMod ! If we did some second order wave kinematics corrections to the acceleration, velocity or ! dynamic pressure using the Waves2 module, then we need to add these to the values that we ! will be passing into the Morrison module. - ! Difference frequency results - IF ( p%Waves2%WvDiffQTFF ) THEN - - ! Dynamic pressure -- difference frequency terms - IF ( SIZE(InputFileData%Morison%WaveDynP,DIM=1) /= SIZE(InitOut%Waves2%WaveDynP2D,DIM=1) .OR. & - SIZE(InputFileData%Morison%WaveDynP,DIM=2) /= SIZE(InitOut%Waves2%WaveDynP2D,DIM=2)) THEN - CALL SetErrStat(ErrID_Fatal, & - ' WaveDynP arrays for first and second order wave elevations are of different sizes. '//NewLine// & - 'Morrison: '// TRIM(Num2LStr(SIZE(InputFileData%Morison%WaveDynP,DIM=1)))//'x'// & - TRIM(Num2LStr(SIZE(InputFileData%Morison%WaveDynP,DIM=2)))//NewLine// & - 'Waves2: '// TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=1)))//'x'// & - TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=2))), & - ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - ELSE - InputFileData%Morison%WaveDynP = InputFileData%Morison%WaveDynP + InitOut%Waves2%WaveDynP2D - IF (InputFileData%Waves%WaveStMod > 0 ) WaveDynP0 = WaveDynP0 + WaveDynP2D0 - ENDIF - - ! Particle velocity -- difference frequency terms - IF ( SIZE(InputFileData%Morison%WaveVel,DIM=1) /= SIZE(InitOut%Waves2%WaveVel2D,DIM=1) .OR. & - SIZE(InputFileData%Morison%WaveVel,DIM=2) /= SIZE(InitOut%Waves2%WaveVel2D,DIM=2) .OR. & - SIZE(InputFileData%Morison%WaveVel,DIM=3) /= SIZE(InitOut%Waves2%WaveVel2D,DIM=3)) THEN - CALL SetErrStat(ErrID_Fatal, & - ' WaveVel arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - ELSE - InputFileData%Morison%WaveVel = InputFileData%Morison%WaveVel + InitOut%Waves2%WaveVel2D - IF (InputFileData%Waves%WaveStMod > 0 ) WaveVel0 = WaveVel0 + WaveVel2D0 - ENDIF - - - ! Particle acceleration -- difference frequency terms - IF ( SIZE(InputFileData%Morison%WaveAcc,DIM=1) /= SIZE(InitOut%Waves2%WaveAcc2D,DIM=1) .OR. & - SIZE(InputFileData%Morison%WaveAcc,DIM=2) /= SIZE(InitOut%Waves2%WaveAcc2D,DIM=2) .OR. & - SIZE(InputFileData%Morison%WaveAcc,DIM=3) /= SIZE(InitOut%Waves2%WaveAcc2D,DIM=3)) THEN - CALL SetErrStat(ErrID_Fatal, & - ' WaveAcc arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - ELSE - InputFileData%Morison%WaveAcc = InputFileData%Morison%WaveAcc + InitOut%Waves2%WaveAcc2D - IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2D0 - ENDIF - - ENDIF ! second order wave kinematics difference frequency results - - ! Sum frequency results - IF ( p%Waves2%WvSumQTFF ) THEN - - ! Dynamic pressure -- sum frequency terms - IF ( SIZE(InputFileData%Morison%WaveDynP,DIM=1) /= SIZE(InitOut%Waves2%WaveDynP2S,DIM=1) .OR. & - SIZE(InputFileData%Morison%WaveDynP,DIM=2) /= SIZE(InitOut%Waves2%WaveDynP2S,DIM=2)) THEN - CALL SetErrStat(ErrID_Fatal, & - ' WaveDynP arrays for first and second order wave elevations are of different sizes. '//NewLine// & - 'Morrison: '// TRIM(Num2LStr(SIZE(InputFileData%Morison%WaveDynP,DIM=1)))//'x'// & - TRIM(Num2LStr(SIZE(InputFileData%Morison%WaveDynP,DIM=2)))//NewLine// & - 'Waves2: '// TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=1)))//'x'// & - TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=2))), & - ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - ELSE - InputFileData%Morison%WaveDynP = InputFileData%Morison%WaveDynP + InitOut%Waves2%WaveDynP2S - IF (InputFileData%Waves%WaveStMod > 0 ) WaveDynP0 = WaveDynP0 + WaveDynP2S0 - ENDIF - - ! Particle velocity -- sum frequency terms - IF ( SIZE(InputFileData%Morison%WaveVel,DIM=1) /= SIZE(InitOut%Waves2%WaveVel2S,DIM=1) .OR. & - SIZE(InputFileData%Morison%WaveVel,DIM=2) /= SIZE(InitOut%Waves2%WaveVel2S,DIM=2) .OR. & - SIZE(InputFileData%Morison%WaveVel,DIM=3) /= SIZE(InitOut%Waves2%WaveVel2S,DIM=3)) THEN - CALL SetErrStat(ErrID_Fatal, & - ' WaveVel arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - ELSE - InputFileData%Morison%WaveVel = InputFileData%Morison%WaveVel + InitOut%Waves2%WaveVel2S - IF (InputFileData%Waves%WaveStMod > 0 ) WaveVel0 = WaveVel0 + WaveVel2S0 - ENDIF - - ! Particle velocity -- sum frequency terms - IF ( SIZE(InputFileData%Morison%WaveAcc,DIM=1) /= SIZE(InitOut%Waves2%WaveAcc2S,DIM=1) .OR. & - SIZE(InputFileData%Morison%WaveAcc,DIM=2) /= SIZE(InitOut%Waves2%WaveAcc2S,DIM=2) .OR. & - SIZE(InputFileData%Morison%WaveAcc,DIM=3) /= SIZE(InitOut%Waves2%WaveAcc2S,DIM=3)) THEN - CALL SetErrStat(ErrID_Fatal, & - ' WaveAcc arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - ELSE - InputFileData%Morison%WaveAcc = InputFileData%Morison%WaveAcc + InitOut%Waves2%WaveAcc2S - IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2S0 - ENDIF - - ENDIF ! second order wave kinematics sum frequency results - -!============================================================================== - ! TODO: 1/29/2016 GJH - ! This is where we need to perform Wave Stretching, now that the wave kinematics have been combined. - ! We will call a new subroutine to perform this work. - ! As an input, this code needs the kinematics at the (X,Y,0) location which in a Z-line above/below all the nodes where kinematics are computed. - ! This code will alter the kinematics for stretching AND alter the nodeInWater array based on the combined wave elevation information - IF (InputFileData%Waves%WaveStMod > 0 ) THEN - call WvStretch_Init( InputFileData%Waves%WaveStMod, InputFileData%Waves%WtrDpth, InputFileData%Morison%NStepWave, InputFileData%Morison%NNodes, & - p%NWaveElev, WaveElevSt, InputFileData%Waves%WaveKinzi, InputFileData%Morison%WaveTime, & - WaveVel0, WaveAcc0, WaveDynP0, & - Waves_InitOut%PWaveVel0, Waves_InitOut%PWaveAcc0, Waves_InitOut%PWaveDynP0, & - InputFileData%Morison%WaveVel, InputFileData%Morison%WaveAcc, InputFileData%Morison%WaveDynP, & - InputFileData%Morison%nodeInWater, ErrStat, ErrMsg ) - DEALLOCATE(WaveElevSt) - DEALLOCATE(WaveVel0) - DEALLOCATE(WaveAcc0) - DEALLOCATE(WaveDynP0) - END IF -!============================================================================== - ! In this version, this can only be TRUE if the precomiler flag WRITE_WV_KIN set and WaveMod not equal to 5 or 6 and WvKinFile is a valid string - IF ( ( InputFileData%Waves%WaveMod == 5 .OR. InputFileData%Waves%WaveMod == 6 ) .AND. InputFileData%Echo ) THEN - call HDOut_WriteWvKinFiles( TRIM(InputFileData%Waves%WvKinFile)//'_ech', HydroDyn_ProgDesc, InputFileData%Morison%NStepWave, InputFileData%Morison%NNodes, & - p%NWaveElev, InputFileData%Morison%nodeInWater, p%WaveElev, InputFileData%Waves%WaveKinzi, InputFileData%Morison%WaveTime, & - InputFileData%Morison%WaveVel, InputFileData%Morison%WaveAcc, InputFileData%Morison%WaveDynP, & - ErrStat, ErrMsg ) - ELSE IF (InputFileData%Waves%WriteWvKin ) THEN - call HDOut_WriteWvKinFiles( TRIM(InputFileData%Waves%WvKinFile), HydroDyn_ProgDesc, InputFileData%Morison%NStepWave, InputFileData%Morison%NNodes, & - p%NWaveElev, InputFileData%Morison%nodeInWater, p%WaveElev, InputFileData%Waves%WaveKinzi, InputFileData%Morison%WaveTime, & - InputFileData%Morison%WaveVel, InputFileData%Morison%WaveAcc, InputFileData%Morison%WaveDynP, & - ErrStat, ErrMsg ) - END IF - - - ! Check the output switch to see if Morison is needing to send outputs back to HydroDyn via the WriteOutput array - - IF ( InputFileData%OutSwtch > 0 ) THEN - InputFileData%Morison%OutSwtch = 2 ! only HydroDyn or the Driver code will write outputs to the file, that's why we are forcing this to 2. - ELSE - InputFileData%Morison%OutSwtch = 0 - END IF + + InputFileData%Morison%seast_interp_p = InitInp%seast_interp_p ! Initialize the Morison Element Calculations @@ -1377,62 +625,13 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I RETURN END IF - ! move array back - CALL MOVE_ALLOC( InputFileData%Morison%WaveTime, p%WaveTime ) - - - IF ( u%Morison%Mesh%Committed ) THEN - ! we need the translation displacement mesh for loads transfer: - CALL MeshCopy ( SrcMesh = u%Morison%Mesh & - , DestMesh = m%MrsnMesh_position & - , CtrlCode = MESH_NEWCOPY & - , IOS = COMPONENT_INPUT & - , TranslationDisp = .TRUE. & - , ErrStat = ErrStat2 & - , ErrMess = ErrMsg2 ) ! automatically sets DestMesh%RemapFlag = .TRUE. - - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'HydroDyn_Init:m%MrsnMesh_position') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - m%MrsnMesh_position%TranslationDisp = 0.0 ! bjj: this is actually initialized in the ModMesh module, but I'll do it here anyway. - - END IF - - ! Verify that Morison_Init() did not request a different Interval! - - IF ( p%DT /= Interval ) THEN - CALL SetErrStat(ErrID_Fatal,'Morison Module attempted to change timestep interval, but this is not allowed. Morison Module must use the HydroDyn Interval.',ErrStat,ErrMsg,RoutineName) - CALL CleanUp() - RETURN - END IF - END IF ! ( InputFileData%Morison%NMembers > 0 ) !=============================================== p%PotMod = InputFileData%Potmod IF ( InputFileData%UnSum > 0 ) THEN - IF (InputFileData%Waves%WaveMod /= 0 .AND. InputFileData%Waves%WaveMod /= 6) THEN - ! Write the header for this section - WRITE( InputFileData%UnSum, '(//)' ) - WRITE( InputFileData%UnSum, '(1X,A15)' ) 'Wave Kinematics' - WRITE( InputFileData%UnSum, '(/)' ) - WRITE( InputFileData%UnSum, '(1X,A10,2X,A14,2X,A14,2X,A14,2X,A19,2X,A19)' ) & - ' m ', ' k ', ' Omega[m] ', ' Direction ', 'REAL(DFT{WaveElev})','IMAG(DFT{WaveElev})' - WRITE( InputFileData%UnSum, '(1X,A10,2X,A14,2X,A14,2X,A14,2X,A19,2X,A19)' ) & - ' (-) ', ' (1/m) ', ' (rad/s) ', ' (deg) ', ' (m) ',' (m) ' - - ! Write the data - DO I = -1*Waves_InitOut%NStepWave2+1,Waves_InitOut%NStepWave2 - WaveNmbr = WaveNumber ( I*Waves_InitOut%WaveDOmega, InitInp%Gravity, InputFileData%Waves%WtrDpth ) - WRITE( InputFileData%UnSum, '(1X,I10,2X,ES14.5,2X,ES14.5,2X,ES14.5,2X,ES14.5,7X,ES14.5)' ) I, WaveNmbr, I*Waves_InitOut%WaveDOmega, & - Waves_InitOut%WaveDirArr(ABS(I)), Waves_InitOut%WaveElevC0( 1,ABS(I ) ) , Waves_InitOut%WaveElevC0( 2, ABS(I ) )*SIGN(1,I) - END DO - END IF - - + IF ( InputFileData%PotMod == 1 .AND. InputFileData%WAMIT%RdtnMod == 1) THEN ! Write the header for this section: Note: When NBodyMod = 1 the kernel is now 6*NBody by 6*Nbody in size, ! and we have NBody 6 by 6 kernels for NBodyMod=2 or 3 @@ -1508,15 +707,6 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I !========================================== - ! Deallocate any remaining Waves Output data - IF(ALLOCATED( Waves_InitOut%WaveElevC0 )) DEALLOCATE( Waves_InitOut%WaveElevC0 ) - IF(ALLOCATED( Waves_InitOut%WaveAcc )) DEALLOCATE( Waves_InitOut%WaveAcc ) - IF(ALLOCATED( Waves_InitOut%WaveDynP )) DEALLOCATE( Waves_InitOut%WaveDynP ) - IF(ALLOCATED( Waves_InitOut%WaveTime )) DEALLOCATE( Waves_InitOut%WaveTime ) - IF(ALLOCATED( Waves_InitOut%WaveVel )) DEALLOCATE( Waves_InitOut%WaveVel ) - IF(ALLOCATED( Waves_InitOut%WaveElevC0 )) DEALLOCATE( Waves_InitOut%WaveElevC0 ) - !IF(ALLOCATED( InputFileData%WAMIT%WaveElevC0 )) DEALLOCATE( InputFileData%WAMIT%WaveElevC0) - ! Close the summary file IF ( InputFileData%HDSum ) THEN CALL HDOut_CloseSum( InputFileData%UnSum, ErrStat2, ErrMsg2 ) @@ -1668,15 +858,15 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I END IF m%AllHdroOrigin%RemapFlag = .TRUE. - ! Create the Output file if requested + ! Set some more parameters p%OutSwtch = InputFileData%OutSwtch p%Delim = '' - !p%Morison%Delim = p%Delim ! Need to set this from within Morison to follow framework - !p%WAMIT%Delim = p%Delim ! Need to set this from within Morison to follow framework p%OutFmt = InputFileData%OutFmt p%OutSFmt = InputFileData%OutSFmt p%NumOuts = InputFileData%NumOuts - + p%WtrDpth = InputFileData%Morison%WtrDpth + + CALL HDOUT_Init( HydroDyn_ProgDesc, InitInp%OutRootName, InputFileData, y, p, m, InitOut, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -1698,17 +888,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! Define initialization-routine output here: InitOut%Ver = HydroDyn_ProgDesc - ! These three come directly from processing the inputs, and so will exist even if not using Morison elements: - InitOut%WtrDens = InputFileData%Morison%WtrDens - InitOut%WtrDpth = InputFileData%Morison%WtrDpth - InitOut%MSL2SWL = InputFileData%Morison%MSL2SWL - p%WtrDpth = InitOut%WtrDpth - - IF ( InitInp%hasIce ) THEN - IF ((InputFileData%Waves%WaveMod /= 0) .OR. (InputFileData%Current%CurrMod /= 0) ) THEN - CALL SetErrStat(ErrID_Fatal,'Waves and Current must be turned off in HydroDyn when ice loading is computed. Set WaveMod=0 and CurrMod=0.',ErrStat,ErrMsg,RoutineName) - END IF - END IF + !............................................................................................ ! Initialize Jacobian: @@ -1729,48 +909,12 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I CONTAINS !................................ SUBROUTINE CleanUp() - - CALL HydroDyn_DestroyInputFile( InputFileData, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL NWTC_Library_DestroyFileInfoType(InFileInfo,ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - - CALL Waves_DestroyInitOutput( Waves_InitOut, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Current_DestroyInitOutput( Current_InitOut, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - - - ! These are dummy variables to satisfy the framework, but are not used again: - - CALL Waves_DestroyInput( Waves_u, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyParam( Waves_p, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyContState( Waves_x, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyDiscState( Waves_xd, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyConstrState( Waves_z, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyOtherState( WavesOtherState, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyOutput( Waves_y, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - - - CALL Current_DestroyInput( Current_u, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Current_DestroyParam( Current_p, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Current_DestroyContState( Current_x, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Current_DestroyDiscState( Current_xd, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Current_DestroyConstrState( Current_z, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Current_DestroyOtherState( CurrentOtherState, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Current_DestroyOutput( Current_y, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - CALL Current_DestroyMisc( Current_m, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - - if (allocated(tmpWaveKinzi )) deallocate(tmpWaveKinzi ) - if (allocated(tmpWaveElevxi)) deallocate(tmpWaveElevxi) - if (allocated(tmpWaveElevyi)) deallocate(tmpWaveElevyi) - if (allocated(tmpWaveElevXY)) deallocate(tmpWaveElevXY) - if (allocated(WaveElevSt )) deallocate(WaveElevSt ) - if (allocated(WaveVel0 )) deallocate(WaveVel0 ) - if (allocated(WaveAcc0 )) deallocate(WaveAcc0 ) - if (allocated(WaveDynP0 )) deallocate(WaveDynP0 ) - if (allocated(WaveVel2S0 )) deallocate(WaveVel2S0 ) - if (allocated(WaveAcc2S0 )) deallocate(WaveAcc2S0 ) - if (allocated(WaveDynP2S0 )) deallocate(WaveDynP2S0 ) - if (allocated(WaveVel2D0 )) deallocate(WaveVel2D0 ) - if (allocated(WaveAcc2D0 )) deallocate(WaveAcc2D0 ) - if (allocated(WaveDynP2D0 )) deallocate(WaveDynP2D0 ) + ! Use DEALLOCATEpointers = .false. + ! NOTE: All of the pointer data originated in SeaState, and SeaState is responsible for deallocating the data + ! all other modules are responsible for nullifying their versions of the pointers when they are done with the data + + CALL HydroDyn_DestroyInputFile( InputFileData, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + CALL NWTC_Library_DestroyFileInfoType(InFileInfo,ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) END SUBROUTINE CleanUp !................................ @@ -1788,10 +932,10 @@ SUBROUTINE HydroDyn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) TYPE(HydroDyn_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states TYPE(HydroDyn_OtherStateType), INTENT(INOUT) :: OtherState !< Other/optimization states TYPE(HydroDyn_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(HydroDyn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(HydroDyn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - + INTEGER(IntKi) :: ErrStat2 ! local error status CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message @@ -1801,10 +945,12 @@ SUBROUTINE HydroDyn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ErrStat = ErrID_None ErrMsg = "" + - ! Write the HydroDyn-level output file data if the user requested module-level output + ! Write the HydroDyn-level output file data FROM THE LAST COMPLETED TIME STEP if the user requested module-level output ! and the current time has advanced since the last stored time step. + IF ( p%OutSwtch == 1 .OR. p%OutSwtch == 3) THEN CALL HDOut_WriteOutputs( m%LastOutTime, y, p, m%Decimate, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -1816,24 +962,27 @@ SUBROUTINE HydroDyn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ! Destroy the input data: (ignore errors) - CALL HydroDyn_DestroyInput( u, ErrStat2, ErrMsg2 ) + CALL HydroDyn_DestroyInput( u, ErrStat2, ErrMsg2, DEALLOCATEpointers=.not. p%PointsToSeaState ) ! Destroy the parameter data: (ignore errors) - CALL HydroDyn_DestroyParam( p, ErrStat2, ErrMsg2 ) + ! Need to nullify pointers so that SeaState module data is not deallocated by HD (i.e., use DEALLOCATEpointers=.false. when it points to SeaState data) + ! on restart, the data is a separate copy of the SeaState module data, hence the PointsToSeaState parameter + CALL HydroDyn_DestroyParam( p, ErrStat2, ErrMsg2, DEALLOCATEpointers=.not. p%PointsToSeaState ) ! Destroy the state data: (ignore errors) - CALL HydroDyn_DestroyContState( x, ErrStat2, ErrMsg2 ) - CALL HydroDyn_DestroyDiscState( xd, ErrStat2, ErrMsg2 ) - CALL HydroDyn_DestroyConstrState( z, ErrStat2, ErrMsg2 ) - CALL HydroDyn_DestroyOtherState( OtherState, ErrStat2, ErrMsg2 ) + CALL HydroDyn_DestroyContState( x, ErrStat2, ErrMsg2, DEALLOCATEpointers=.not. p%PointsToSeaState ) + CALL HydroDyn_DestroyDiscState( xd, ErrStat2, ErrMsg2, DEALLOCATEpointers=.not. p%PointsToSeaState ) + CALL HydroDyn_DestroyConstrState( z, ErrStat2, ErrMsg2, DEALLOCATEpointers=.not. p%PointsToSeaState ) + CALL HydroDyn_DestroyOtherState( OtherState, ErrStat2, ErrMsg2, DEALLOCATEpointers=.not. p%PointsToSeaState ) + ! Destroy misc variables: (ignore errors) - CALL HydroDyn_DestroyMisc( m, ErrStat2, ErrMsg2 ) + CALL HydroDyn_DestroyMisc( m, ErrStat2, ErrMsg2, DEALLOCATEpointers=.not. p%PointsToSeaState ) ! Destroy the output data: (ignore errors) - CALL HydroDyn_DestroyOutput( y, ErrStat2, ErrMsg2 ) + CALL HydroDyn_DestroyOutput( y, ErrStat2, ErrMsg2, DEALLOCATEpointers=.not. p%PointsToSeaState ) END SUBROUTINE HydroDyn_End @@ -1862,16 +1011,14 @@ SUBROUTINE HydroDyn_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherSt CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None ! Local variables - INTEGER :: I, iWAMIT, iBody ! Generic loop counters -! TYPE(HydroDyn_ContinuousStateType) :: dxdt ! Continuous state derivatives at t - TYPE(HydroDyn_DiscreteStateType) :: xd_t ! Discrete states at t (copy) - TYPE(HydroDyn_ConstraintStateType) :: z_Residual ! Residual of the constraint state functions (Z) - TYPE(HydroDyn_InputType) :: u ! Instantaneous inputs + INTEGER :: I, iWAMIT ! Generic loop counters INTEGER(IntKi) :: ErrStat2 ! Error status of the operation (secondary error) CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat2 /= ErrID_None INTEGER :: nTime ! number of inputs TYPE(WAMIT_InputType), ALLOCATABLE :: Inputs_WAMIT(:) + TYPE(Morison_InputType), ALLOCATABLE :: Inputs_Morison(:) + TYPE(Morison_InputType) :: u_Morison CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_UpdateStates' ! Create dummy variables required by framework but which are not used by the module @@ -1882,84 +1029,115 @@ SUBROUTINE HydroDyn_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherSt TYPE(FIT_ContinuousStateType) :: FIT_x ! Input: Continuous states at t; #endif - REAL(ReKi) :: rotdisp(3) ! Initialize variables ErrStat = ErrID_None ! no error has occurred ErrMsg = "" + nTime = size(Inputs) + + IF (INPUTS(1)%Morison%Mesh%Committed) THEN - + ALLOCATE( Inputs_Morison(nTime), STAT = ErrStat2 ) + IF (ErrStat2 /=0) THEN + CALL SetErrStat( ErrID_Fatal, 'Failed to allocate array Inputs_Morison.', ErrStat, ErrMsg, RoutineName ) + RETURN + END IF - ! Return without doing any work if the we are not using a potential flow model - IF ( p%PotMod == 0 ) RETURN - - ! Return without doing any work if the input mesh is not initialized (NOT USING WAMIT) - !IF ( .NOT. Inputs(1)%WAMIT%Mesh%Initialized ) RETURN - - nTime = size(Inputs) - - - ! Allocate array of WAMIT inputs + DO i=1,nTime + CALL Morison_CopyInput(Inputs(i)%Morison, Inputs_Morison(i), MESH_NEWCOPY, ErrStat2, ErrMsg2) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END DO + CALL Morison_CopyInput(Inputs(1)%Morison, u_Morison, MESH_NEWCOPY, ErrStat2, ErrMsg2) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + CALL Morison_Input_ExtrapInterp(Inputs_Morison, InputTimes, u_Morison, t, ErrStat2, ErrMsg2) ! get inputs at time t + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + IF (ErrStat < AbortErrLev) THEN + ! Update the discrete states of Morison - The state of the high-pass velocity filter + CALL Morison_UpdateDiscState( t, u_Morison, p%Morison, x%Morison, xd%Morison, & + z%Morison, OtherState%Morison, m%Morison, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + + call Morison_DestroyInput(u_Morison, ErrStat2, ErrMsg2) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) -!FIXME: Error handling appears to be broken here - - IF ( p%PotMod == 1 ) THEN - - ALLOCATE( Inputs_WAMIT(nTime), STAT = ErrStat2 ) - IF (ErrStat2 /=0) THEN - CALL SetErrStat( ErrID_Fatal, 'Failed to allocate array Inputs_WAMIT.', ErrStat, ErrMsg, RoutineName ) - RETURN + do i=1,size(Inputs_Morison) + call Morison_DestroyInput(Inputs_Morison(i), ErrStat2, ErrMsg2) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + end do + deallocate(Inputs_Morison) + END IF + + ! Return without doing any work if the we are not using a potential flow model + IF ( p%PotMod == 0 ) THEN + RETURN + ELSEIF ( p%PotMod == 1 ) THEN + + ALLOCATE( Inputs_WAMIT(nTime), STAT = ErrStat2 ) + IF (ErrStat2 /=0) THEN + CALL SetErrStat( ErrID_Fatal, 'Failed to allocate array Inputs_WAMIT.', ErrStat, ErrMsg, RoutineName ) + RETURN + END IF - if ( p%NBodyMod == 1 .or. p%NBody == 1 ) then - ! For this NBodyMod or NBody=1, there is only one WAMIT object, so copy the necessary inputs and then call WAMIT_UpdateStates - do I=1,nTime - ! Copy the inputs from the HD mesh into the WAMIT mesh - call MeshCopy( Inputs(I)%WAMITMesh, Inputs_WAMIT(I)%Mesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - end do + if ( p%NBodyMod == 1 .or. p%NBody == 1 ) then + ! For this NBodyMod or NBody=1, there is only one WAMIT object, so copy the necessary inputs and then call WAMIT_UpdateStates + do I=1,nTime + ! Copy the inputs from the HD mesh into the WAMIT mesh + call MeshCopy( Inputs(I)%WAMITMesh, Inputs_WAMIT(I)%Mesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + end do - if (ErrStat < AbortErrLev) then ! if there was an error copying the input meshes, we'll skip this step and then cleanup the temporary input meshes - ! Update the WAMIT module states + if (ErrStat < AbortErrLev) then ! if there was an error copying the input meshes, we'll skip this step and then cleanup the temporary input meshes + ! Update the WAMIT module states - call WAMIT_UpdateStates( t, n, Inputs_WAMIT, InputTimes, p%WAMIT(1), x%WAMIT(1), xd%WAMIT(1), z%WAMIT, OtherState%WAMIT(1), m%WAMIT(1), ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call WAMIT_UpdateStates( t, n, Inputs_WAMIT, InputTimes, p%WAMIT(1), x%WAMIT(1), xd%WAMIT(1), z%WAMIT, OtherState%WAMIT(1), m%WAMIT(1), ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - end if + end if - else + else - ! We have multiple WAMIT objects + ! We have multiple WAMIT objects - ! Loop over number of inputs and copy them into an array of WAMIT inputs - do iWAMIT = 1, p%nWAMITObj - - do I=1,nTime - ! We need to create to valid mesh data structures in our Inputs_WAMIT(I)%Mesh using the miscvar version as a template, but the actually data will be generated below - call MeshCopy( m%u_WAMIT(iWAMIT)%Mesh, Inputs_WAMIT(I)%Mesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - ! We need to copy the iWAMIT-th node data from the Inputs(I)%WAMITMesh onto the 1st node of the Inputs_WAMIT(I)%Mesh - Inputs_WAMIT(I)%Mesh%TranslationDisp(:,1) = Inputs(I)%WAMITMesh%TranslationDisp(:,iWAMIT) - Inputs_WAMIT(I)%Mesh%Orientation (:,:,1)= Inputs(I)%WAMITMesh%Orientation (:,:,iWAMIT) - Inputs_WAMIT(I)%Mesh%TranslationVel (:,1) = Inputs(I)%WAMITMesh%TranslationVel (:,iWAMIT) - Inputs_WAMIT(I)%Mesh%RotationVel (:,1) = Inputs(I)%WAMITMesh%RotationVel (:,iWAMIT) - Inputs_WAMIT(I)%Mesh%TranslationAcc (:,1) = Inputs(I)%WAMITMesh%TranslationAcc (:,iWAMIT) - Inputs_WAMIT(I)%Mesh%RotationAcc (:,1) = Inputs(I)%WAMITMesh%RotationAcc (:,iWAMIT) - end do + ! Loop over number of inputs and copy them into an array of WAMIT inputs + do iWAMIT = 1, p%nWAMITObj - ! UpdateStates for the iWAMIT-th body - call WAMIT_UpdateStates( t, n, Inputs_WAMIT, InputTimes, p%WAMIT(iWAMIT), x%WAMIT(iWAMIT), xd%WAMIT(iWAMIT), z%WAMIT, OtherState%WAMIT(iWAMIT), m%WAMIT(iWAMIT), ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + do I=1,nTime + ! We need to create to valid mesh data structures in our Inputs_WAMIT(I)%Mesh using the miscvar version as a template, but the actually data will be generated below + call MeshCopy( m%u_WAMIT(iWAMIT)%Mesh, Inputs_WAMIT(I)%Mesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + end do if (ErrStat > AbortErrLev) exit - end do + do I=1,nTime + ! We need to copy the iWAMIT-th node data from the Inputs(I)%WAMITMesh onto the 1st node of the Inputs_WAMIT(I)%Mesh + Inputs_WAMIT(I)%Mesh%TranslationDisp(:,1) = Inputs(I)%WAMITMesh%TranslationDisp(:,iWAMIT) + Inputs_WAMIT(I)%Mesh%Orientation (:,:,1)= Inputs(I)%WAMITMesh%Orientation (:,:,iWAMIT) + Inputs_WAMIT(I)%Mesh%TranslationVel (:,1) = Inputs(I)%WAMITMesh%TranslationVel (:,iWAMIT) + Inputs_WAMIT(I)%Mesh%RotationVel (:,1) = Inputs(I)%WAMITMesh%RotationVel (:,iWAMIT) + Inputs_WAMIT(I)%Mesh%TranslationAcc (:,1) = Inputs(I)%WAMITMesh%TranslationAcc (:,iWAMIT) + Inputs_WAMIT(I)%Mesh%RotationAcc (:,1) = Inputs(I)%WAMITMesh%RotationAcc (:,iWAMIT) + end do + + ! UpdateStates for the iWAMIT-th body + call WAMIT_UpdateStates( t, n, Inputs_WAMIT, InputTimes, p%WAMIT(iWAMIT), x%WAMIT(iWAMIT), xd%WAMIT(iWAMIT), z%WAMIT, OtherState%WAMIT(iWAMIT), m%WAMIT(iWAMIT), ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + if (ErrStat > AbortErrLev) exit + + end do - end if + end if - ! deallocate temporary inputs - do I=1,nTime - call WAMIT_DestroyInput( Inputs_WAMIT(I), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - end do + ! deallocate temporary inputs + do I=1,nTime + call WAMIT_DestroyInput( Inputs_WAMIT(I), ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + end do - deallocate(Inputs_WAMIT) + deallocate(Inputs_WAMIT) #ifdef USE_FIT ELSE IF ( p%PotMod == 2 ) THEN ! FIT @@ -2006,6 +1184,28 @@ SUBROUTINE HydroDyn_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherSt END IF + !CALL Cleanup() + +contains + subroutine Cleanup() + + if (allocated(Inputs_Morison)) then + do i=1,size(Inputs_Morison) + call Morison_DestroyInput(Inputs_Morison(i), ErrStat2, ErrMsg2) + end do + deallocate(Inputs_Morison) + end if + call Morison_DestroyInput(u_Morison, ErrStat2, ErrMsg2) + + + if (allocated(Inputs_WAMIT)) then + do i=1,size(Inputs_WAMIT) + call Wamit_DestroyInput(Inputs_WAMIT(i), ErrStat2, ErrMsg2) + end do + deallocate(Inputs_WAMIT) + end if + + end subroutine Cleanup END SUBROUTINE HydroDyn_UpdateStates @@ -2022,7 +1222,7 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, TYPE(HydroDyn_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time TYPE(HydroDyn_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time TYPE(HydroDyn_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh con- - !! nectivity information does not have to be recalculated) + !! nectivity information does not have to be recalculated) + for previous WriteOutput results TYPE(HydroDyn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables INTEGER(IntKi), INTENT( OUT) :: ErrStat !! Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !! Error message if ErrStat /= ErrID_None @@ -2037,40 +1237,34 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, TYPE(FIT_ConstraintStateType) :: FIT_z ! Initial guess of the constraint states TYPE(FIT_InputType) :: Inputs_FIT #endif - REAL(ReKi) :: WaveElev (p%NWaveElev) ! Instantaneous total elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) - REAL(ReKi) :: WaveElev1(p%NWaveElev) ! Instantaneous first order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) - REAL(ReKi) :: WaveElev2(p%NWaveElev) ! Instantaneous first order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) - + REAL(ReKi) :: q(6*p%NBody), qdot(6*p%NBody), qdotsq(6*p%NBody), qdotdot(6*p%NBody) REAL(ReKi) :: rotdisp(3) ! small angle rotational displacements - REAL(ReKi) :: AllOuts(MaxHDOutputs) - integer(IntKi) :: iBody, indxStart, indxEnd, iWAMIT ! Counters + integer(IntKi) :: iBody, indxStart, indxEnd ! Counters ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" - WaveElev1 = 0.0_ReKi - WaveElev2 = 0.0_ReKi ! In case we don't use 2nd order waves - + - ! Compute outputs here: + ! Write the Hydrodyn-level output file data FROM THE LAST COMPLETED TIME STEP if the user requested module-level output + ! and the current time has advanced since the last stored time step. Note that this must be done before filling y%WriteOutput + ! so that we don't get recent results. Also note that this may give strange results in the .HD.out files of linearization simulations. + IF ( (p%OutSwtch == 1 .OR. p%OutSwtch == 3) .AND. ( Time > m%LastOutTime ) ) THEN + CALL HDOut_WriteOutputs( m%LastOutTime, y, p, m%Decimate, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) + END IF + m%LastOutTime = Time ! time associated with the next values of y%WriteOutput + + !------------------------------------------------------------------- ! Additional stiffness, damping forces. These need to be placed on a point mesh which is located at the WAMIT reference point (WRP). ! This mesh will need to get mapped by the glue code for use by either ElastoDyn or SubDyn. !------------------------------------------------------------------- - ! Deal with any output from the Waves2 module.... - IF (p%Waves2%WvDiffQTFF .OR. p%Waves2%WvSumQTFF ) THEN - - ! Waves2_CalcOutput is called only so that the wave elevations can be output (if requested). - CALL Waves2_CalcOutput( Time, m%u_Waves2, p%Waves2, x%Waves2, xd%Waves2, & - z%Waves2, OtherState%Waves2, y%Waves2, m%Waves2, ErrStat2, ErrMsg2 ) - - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) - END IF if ( p%PotMod == 1 ) then @@ -2165,12 +1359,7 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, if (p%WAMIT2used) then if ( p%NBodyMod == 1 .or. p%NBody == 1 ) then - ! Copy the inputs from the HD mesh into the WAMIT mesh - call MeshCopy( u%WAMITMesh, m%u_WAMIT2(1)%Mesh, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) - if ( ErrStat >= AbortErrLev ) return - call WAMIT2_CalcOutput( Time, p%WaveTime, m%u_WAMIT2(1), p%WAMIT2(1), x%WAMIT2(1), xd%WAMIT2(1), & - z%WAMIT2, OtherState%WAMIT2(1), y%WAMIT2(1), m%WAMIT2(1), ErrStat2, ErrMsg2 ) + call WAMIT2_CalcOutput( Time, p%WaveTime, p%WAMIT2(1), y%WAMIT2(1), m%WAMIT2(1), ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) do iBody=1,p%NBody y%WAMITMesh%Force (:,iBody) = y%WAMITMesh%Force (:,iBody) + y%WAMIT2(1)%Mesh%Force (:,iBody) @@ -2181,16 +1370,7 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, else do iBody=1,p%NBody - ! We need to copy the iWAMIT2-th node data from the Inputs(I)%WAMIT2Mesh onto the 1st node of the Inputs_WAMIT2(I)%Mesh - m%u_WAMIT2(iBody)%Mesh%TranslationDisp(:,1) = u%WAMITMesh%TranslationDisp(:,iBody) - m%u_WAMIT2(iBody)%Mesh%Orientation (:,:,1)= u%WAMITMesh%Orientation (:,:,iBody) - m%u_WAMIT2(iBody)%Mesh%TranslationVel (:,1) = u%WAMITMesh%TranslationVel (:,iBody) - m%u_WAMIT2(iBody)%Mesh%RotationVel (:,1) = u%WAMITMesh%RotationVel (:,iBody) - m%u_WAMIT2(iBody)%Mesh%TranslationAcc (:,1) = u%WAMITMesh%TranslationAcc (:,iBody) - m%u_WAMIT2(iBody)%Mesh%RotationAcc (:,1) = u%WAMITMesh%RotationAcc (:,iBody) - - call WAMIT2_CalcOutput( Time, p%WaveTime, m%u_WAMIT2(iBody), p%WAMIT2(iBody), x%WAMIT2(iBody), xd%WAMIT2(iBody), & - z%WAMIT2, OtherState%WAMIT2(iBody), y%WAMIT2(iBody), m%WAMIT2(iBody), ErrStat2, ErrMsg2 ) + call WAMIT2_CalcOutput( Time, p%WaveTime, p%WAMIT2(iBody), y%WAMIT2(iBody), m%WAMIT2(iBody), ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) y%WAMITMesh%Force (:,iBody) = y%WAMITMesh%Force (:,iBody) + y%WAMIT2(iBody)%Mesh%Force (:,1) y%WAMITMesh%Moment(:,iBody) = y%WAMITMesh%Moment(:,iBody) + y%WAMIT2(iBody)%Mesh%Moment(:,1) @@ -2227,70 +1407,24 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) END IF - ! Integrate all the mesh loads onto the platfrom reference Point (PRP) at (0,0,0) - m%F_Hydro = CalcLoadsAtWRP( y, u, m%AllHdroOrigin, u%PRPMesh, m%MrsnMesh_position, m%HD_MeshMap, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) - - - ! Compute the wave elevations at the requested output locations for this time. Note that p%WaveElev has the second order added to it already. - - ! Second order wave elevation, if calculated (This array is split out for speed because of the if) - if (allocated(p%WaveElev2)) then - DO I=1,p%NWaveElev - WaveElev2(I) = InterpWrappedStpReal ( REAL(Time, SiKi), p%WaveTime(:), p%WaveElev2(:,I), & - m%LastIndWave, p%NStepWave + 1 ) - END DO - endif - - DO I=1,p%NWaveElev - WaveElev1(I) = InterpWrappedStpReal ( REAL(Time, SiKi), p%WaveTime(:), p%WaveElev1(:,I), & - m%LastIndWave, p%NStepWave + 1 ) - WaveElev(I) = InterpWrappedStpReal ( REAL(Time, SiKi), p%WaveTime(:), p%WaveElev(:,I), & - m%LastIndWave, p%NStepWave + 1 ) - - END DO - - - - - ! Write the HydroDyn-level output file data if the user requested module-level output - ! and the current time has advanced since the last stored time step. - - IF ( (p%OutSwtch == 1 .OR. p%OutSwtch == 3) .AND. ( Time > m%LastOutTime ) ) THEN - CALL HDOut_WriteOutputs( m%LastOutTime, y, p, m%Decimate, ErrStat2, ErrMsg2 ) + m%F_Hydro = CalcLoadsAtWRP( y, u, m%AllHdroOrigin, m%HD_MeshMap, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) - END IF + - ! Map calculated results into the AllOuts Array - CALL HDOut_MapOutputs( Time, p, y, m%WAMIT, m%WAMIT2, p%NWaveElev, WaveElev, WaveElev1, WaveElev2, m%F_PtfmAdd, m%F_Waves, m%F_Hydro, u%PRPMesh, q, qdot, qdotdot, AllOuts, ErrStat2, ErrMsg2 ) + ! Map calculated results into the first p%NumOuts values of the y%WriteOutput Array + CALL HDOut_MapOutputs( p, y, m%WAMIT, m%WAMIT2, m%F_PtfmAdd, m%F_Waves, m%F_Hydro, u%PRPMesh, q, qdot, qdotdot, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) - DO I = 1,p%NumOuts - y%WriteOutput(I) = p%OutParam(I)%SignM * AllOuts( p%OutParam(I)%Indx ) - END DO ! Aggregate the sub-module outputs - - IF ( p%OutSwtch > 0) THEN - - J = p%NumOuts + 1 - - IF (ALLOCATED( p%Waves2%OutParam ) .AND. p%Waves2%NumOuts > 0) THEN - DO I=1, p%Waves2%NumOuts - y%WriteOutput(J) = y%Waves2%WriteOutput(I) - J = J + 1 - END DO - END IF - - IF (ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0) THEN - DO I=1, p%Morison%NumOuts - y%WriteOutput(J) = y%Morison%WriteOutput(I) - J = J + 1 - END DO - END IF - + IF (p%Morison%NumOuts > 0) THEN + J = p%NumOuts + 1 + DO I=1, p%Morison%NumOuts + y%WriteOutput(J) = y%Morison%WriteOutput(I) + J = J + 1 + END DO END IF m%LastOutTime = Time @@ -2395,13 +1529,11 @@ END SUBROUTINE HydroDyn_CalcConstrStateResidual !---------------------------------------------------------------------------------------------------------------------------------- -function CalcLoadsAtWRP( y, u, AllHdroOrigin, PRP_Position, MrsnMesh_Position, MeshMapData, ErrStat, ErrMsg ) +function CalcLoadsAtWRP( y, u, AllHdroOrigin, MeshMapData, ErrStat, ErrMsg ) type(HydroDyn_OutputType), intent(inout) :: y ! Hydrodyn outputs type(HydroDyn_InputType), intent(in ) :: u ! Hydrodyn inputs type(MeshType), intent(inout) :: AllHdroOrigin ! This is the mesh which data is mapped onto. We pass it in to avoid allocating it at each call - type(MeshType), intent(inout) :: PRP_Position ! These are the kinematics associated the PRP at (0,0,0). We pass it in to avoid allocating it at each call - type(MeshType), intent(in ) :: MrsnMesh_Position ! These are the kinematics associated with the Morison loads mesh. We pass it in to avoid allocating it at each call type(HD_ModuleMapType), intent(inout) :: MeshMapData ! Mesh mapping data structures integer(IntKi), intent( out) :: ErrStat ! Error status of the operation character(*), intent( out) :: ErrMsg ! Error message if ErrStat /= ErrID_None @@ -2416,7 +1548,7 @@ function CalcLoadsAtWRP( y, u, AllHdroOrigin, PRP_Position, MrsnMesh_Position, if ( y%WAMITMesh%Committed ) then ! Just transfer the loads because the meshes are at the same location (0,0,0) - call Transfer_Point_to_Point( y%WAMITMesh, AllHdroOrigin, MeshMapData%W_P_2_PRP_P, ErrStat2, ErrMsg2, u%WAMITMesh, PRP_Position ) + call Transfer_Point_to_Point( y%WAMITMesh, AllHdroOrigin, MeshMapData%W_P_2_PRP_P, ErrStat2, ErrMsg2, u%WAMITMesh, u%PRPMesh ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'CalcLoadsAtWRP') if (ErrStat >= AbortErrLev) return @@ -2428,7 +1560,7 @@ function CalcLoadsAtWRP( y, u, AllHdroOrigin, PRP_Position, MrsnMesh_Position, if ( y%Morison%Mesh%Committed ) then - call Transfer_Point_to_Point( y%Morison%Mesh, AllHdroOrigin, MeshMapData%M_P_2_PRP_P, ErrStat2, ErrMsg2, u%Morison%Mesh, PRP_Position ) + call Transfer_Point_to_Point( y%Morison%Mesh, AllHdroOrigin, MeshMapData%M_P_2_PRP_P, ErrStat2, ErrMsg2, u%Morison%Mesh, u%PRPMesh ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'CalcLoadsAtWRP') if (ErrStat >= AbortErrLev) return @@ -2479,7 +1611,7 @@ SUBROUTINE HD_JacobianPInput( t, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrM TYPE(HydroDyn_ContinuousStateType) :: x_m TYPE(HydroDyn_InputType) :: u_perturb REAL(R8Ki) :: delta ! delta change in input or state - INTEGER(IntKi) :: i, j, k, startingI, startingJ, bOffset, offsetI, offsetJ, n_du_plus1 + INTEGER(IntKi) :: i, j, k, startingI, startingJ, bOffset, offsetI, n_du_plus1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 @@ -3035,12 +2167,10 @@ SUBROUTINE HD_Init_Jacobian_y( p, y, InitOut, ErrStat, ErrMsg) CHARACTER(*) , INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None ! local variables: - INTEGER(IntKi) :: i,j,k, index_last, index_next + INTEGER(IntKi) :: i,index_last, index_next INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'HD_Init_Jacobian_y' - LOGICAL :: Mask(FIELDMASK_SIZE) ! flags to determine if this field is part of the packing - logical, allocatable :: AllOut(:) @@ -3213,9 +2343,8 @@ SUBROUTINE HD_Init_Jacobian( p, u, y, InitOut, ErrStat, ErrMsg) CHARACTER(*), PARAMETER :: RoutineName = 'HD_Init_Jacobian' ! local variables: - INTEGER(IntKi) :: i, j, k, index, index_last, nu, i_meshField, m, meshFieldCount - REAL(R8Ki) :: MaxThrust, MaxTorque, perturb_t, perturb - REAL(R8Ki) :: ScaleLength + INTEGER(IntKi) :: i, j, index, nu, i_meshField, m, meshFieldCount + REAL(R8Ki) :: perturb_t, perturb LOGICAL :: FieldMask(FIELDMASK_SIZE) ! flags to determine if this field is part of the packing @@ -3610,7 +2739,6 @@ SUBROUTINE Compute_dY(p, y_p, y_m, delta, dY) ! local variables: integer(IntKi) :: indx_first ! index indicating next value of dY to be filled - logical :: Mask(FIELDMASK_SIZE) ! flags to determine if this field is part of the packing integer(IntKi) :: k @@ -3658,8 +2786,7 @@ SUBROUTINE HD_GetOP( t, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg, u_op, - INTEGER(IntKi) :: i, j, k, index, nu - INTEGER(IntKi) :: ny + INTEGER(IntKi) :: i, j, index, nu INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'HD_GetOP' diff --git a/modules/hydrodyn/src/HydroDyn.txt b/modules/hydrodyn/src/HydroDyn.txt index 541a6dbcce..0f4137f018 100644 --- a/modules/hydrodyn/src/HydroDyn.txt +++ b/modules/hydrodyn/src/HydroDyn.txt @@ -14,19 +14,20 @@ # ...... Include files (definitions from NWTC Library) ............................................................................ # make sure that the file name does not have any trailing white spaces! include Registry_NWTC_Library.txt -usefrom Current.txt -usefrom Waves.txt -usefrom Waves2.txt +#usefrom Current.txt +#usefrom Waves.txt +#usefrom Waves2.txt usefrom Conv_Radiation.txt usefrom SS_Radiation.txt usefrom SS_Excitation.txt usefrom WAMIT.txt usefrom WAMIT2.txt usefrom Morison.txt +usefrom SeaState.txt #usefrom FIT.txt -param HydroDyn/HydroDyn unused INTEGER MaxHDOutputs - 537 - "The maximum number of output channels supported by this module" - -param HydroDyn/HydroDyn unused INTEGER MaxUserOutputs - 4583 - " Total possible number of output channels: Waves2 = 18 + SS_Excitation = 7 + SS_Radiation = 7 + Morison= 4032 + HydroDyn=519 = 4583" - +param HydroDyn/HydroDyn unused INTEGER MaxHDOutputs - 510 - "The maximum number of output channels supported by this module" - +param HydroDyn/HydroDyn unused INTEGER MaxUserOutputs - 5150 - " Total possible number of output channels: SS_Excitation = 7 + SS_Radiation = 7 + Morison= 4626 + HydroDyn=510 = 5150" - ######################### # ..... Input file data ........................................................................................................... @@ -37,9 +38,9 @@ typedef ^ ^ ReKi typedef ^ ^ ReKi AddCLin {:}{:}{:} - - "Additional stiffness matrix" - typedef ^ ^ ReKi AddBLin {:}{:}{:} - - "Additional linear damping matrix" - typedef ^ ^ ReKi AddBQuad {:}{:}{:} - - "Additional quadratic damping (drag) matrix" - -typedef ^ ^ Waves_InitInputType Waves - - - "Initialization data for Waves module" - -typedef ^ ^ Waves2_InitInputType Waves2 - - - "Initialization data for Waves module" - -typedef ^ ^ Current_InitInputType Current - - - "Initialization data for Current module" - +#typedef ^ ^ Waves_InitInputType Waves - - - "Initialization data for Waves module" - +#typedef ^ ^ Waves2_InitInputType Waves2 - - - "Initialization data for Waves module" - +typedef ^ ^ SeaSt_InitInputType SeaState - - - "Initialization data for SeaState module" - typedef ^ ^ CHARACTER(1024) PotFile {:} - - "The name of the root potential flow file (without extension for WAMIT, complete name for FIT)" - typedef ^ ^ INTEGER nWAMITObj - - - "number of WAMIT input files. If NBodyMod = 1 then nPotFiles will be 1 even if NBody > 1" - typedef ^ ^ INTEGER vecMultiplier - - - "multiplier for the WAMIT vectors and matrices. If NBodyMod=1 then this = NBody, else 1" - @@ -76,44 +77,64 @@ typedef HydroDyn/HydroDyn InitInputType CHARACTER(1 typedef ^ ^ LOGICAL UseInputFile - .TRUE. - "Supplied by Driver: .TRUE. if using a input file, .FALSE. if all inputs are being passed in by the caller" - typedef ^ ^ FileInfoType PassedFileData - - - "If we don't use the input file, pass everything through this" - typedef ^ ^ CHARACTER(1024) OutRootName - - - "Supplied by Driver: The name of the root file (without extension) including the full path" - -typedef ^ ^ Logical Linearize - .FALSE. - "Flag that tells this module if the glue code wants to linearize." - +typedef ^ ^ Logical Linearize - .FALSE. - "Flag that tells this module if the glue code wants to linearize." - typedef ^ ^ ReKi Gravity - - - "Supplied by Driver: Gravitational acceleration" "(m/s^2)" -typedef ^ ^ ReKi defWtrDens - - - "Default water density from the driver; may be overwritten " "(kg/m^3)" -typedef ^ ^ ReKi defWtrDpth - - - "Default water depth from the driver; may be overwritten " "m" -typedef ^ ^ ReKi defMSL2SWL - - - "Default mean sea level to still water level from the driver; may be overwritten" "m" +typedef ^ ^ ReKi WtrDens - - - "Water density from the driver; may be overwritten " "(kg/m^3)" +typedef ^ ^ ReKi WtrDpth - - - "Water depth from the driver; may be overwritten " "m" +typedef ^ ^ ReKi MSL2SWL - - - "Mean sea level to still water level from the driver; may be overwritten" "m" typedef ^ ^ DbKi TMax - - - "Supplied by Driver: The total simulation time" "(sec)" -typedef ^ ^ LOGICAL HasIce - - - "Supplied by Driver: Whether this simulation has ice loading (flag)" - -typedef ^ ^ SiKi WaveElevXY {:}{:} - - "Supplied by Driver: X-Y locations for WaveElevation output (for visualization). First dimension is the X (1) and Y (2) coordinate. Second dimension is the point number." "m,-" -typedef ^ ^ INTEGER WaveFieldMod - - - "Wave field handling (-) (switch) 0: use individual HydroDyn inputs without adjustment, 1: adjust wave phases based on turbine offsets from farm origin" - typedef ^ ^ ReKi PtfmLocationX - - - "Supplied by Driver: X coordinate of platform location in the wave field" "m" typedef ^ ^ ReKi PtfmLocationY - - - "Supplied by Driver: Y coordinate of platform location in the wave field" "m" # +typedef ^ ^ INTEGER NStepWave - 0 - "Total number of frequency components = total number of time steps in the incident wave" - +typedef ^ ^ INTEGER NStepWave2 - 0 - "NStepWave / 2" - +typedef ^ ^ SiKi RhoXg - - - "= WtrDens*Gravity" - +typedef ^ ^ INTEGER WaveMod - - - "Incident wave kinematics model {0: none=still water, 1: plane progressive (regular), 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: white-noise spectrum, 4: user-defind spectrum from routine UserWaveSpctrm (irregular), 5: GH BLADED }" - +typedef ^ ^ INTEGER WaveStMod - - - "Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching}" - +typedef ^ ^ INTEGER WaveDirMod - - - "Directional wave spreading function {0: none, 1: COS2S} [only used if WaveMod=6]" - +typedef ^ ^ SiKi WvLowCOff - - - "Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4]" (rad/s) +typedef ^ ^ SiKi WvHiCOff - - - "High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4]" (rad/s) +typedef ^ ^ SiKi WvLowCOffD - - - "Minimum frequency used in the difference methods [Ignored if all difference methods = 0]" (rad/s) +typedef ^ ^ SiKi WvHiCOffD - - - "Maximum frequency used in the difference methods [Ignored if all difference methods = 0]" (rad/s) +typedef ^ ^ SiKi WvLowCOffS - - - "Minimum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) +typedef ^ ^ SiKi WvHiCOffS - - - "Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) +typedef ^ ^ LOGICAL InvalidWithSSExctn - - - "Whether SeaState configuration is invalid with HydroDyn's state-space excitation (ExctnMod=2)" (-) +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation (points to SeaState module data)" - +typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation (points to SeaState module data)" - +typedef ^ ^ SiKi WaveElev0 {:} - - "Instantaneous elevation time-series of incident waves at the platform reference point" (meters) +typedef ^ ^ SiKi WaveTime {*} - - "Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined (points to SeaState module data)" (sec) +typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data)" (N/m^2) +typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data)" (m/s^2) +typedef ^ ^ SiKi WaveAccMCF {*}{*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data)" (m/s^2) +typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) (points to SeaState module data)" (m/s) +typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data)" (N/m^2) +typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data)" (m/s^2) +typedef ^ ^ SiKi PWaveAccMCF0 {*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data)" (m/s^2) +typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) (points to SeaState module data)" (m/s) +typedef ^ ^ SiKi WaveElevC0 {*}{*} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part (points to SeaState module data)" (meters) +typedef ^ ^ SiKi WaveElevC {:}{:}{:} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at all grid points. First column is real part, second column is imaginary part" (meters) +typedef ^ ^ SiKi WaveDirArr {*} - - "Wave direction array. Each frequency has a unique direction of WaveNDir > 1 (points to SeaState module data)" (degrees) +typedef ^ ^ SiKi WaveDirMin - - - "Minimum wave direction." (degrees) +typedef ^ ^ SiKi WaveDirMax - - - "Maximum wave direction." (degrees) +typedef ^ ^ SiKi WaveDir - - - "Incident wave propagation heading direction" (degrees) +typedef ^ ^ LOGICAL WaveMultiDir - - - "Indicates the waves are multidirectional -- set by HydroDyn_Input" - +typedef ^ ^ SiKi WaveDOmega - - - "Frequency step for incident wave calculations" (rad/s) +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +typedef ^ ^ SiKi MCFD - - - "Diameter of MacCamy-Fuchs members" (meters) +# # # Define outputs from the initialization routine here: # -typedef ^ InitOutputType WAMIT_InitOutputType WAMIT {:} - - "Initialization output from the WAMIT module" - -typedef ^ InitOutputType WAMIT2_InitOutputType WAMIT2 {:} - - "Initialization output from the WAMIT2 module" - -typedef ^ InitOutputType Waves2_InitOutputType Waves2 - - - "Initialization output from the Waves2 module" - -typedef ^ ^ Morison_InitOutputType Morison - - - "Initialization output from the Morison module" - -typedef ^ ^ CHARACTER(ChanLen) WriteOutputHdr {:} - - "The is the list of all HD-related output channel header strings (includes all sub-module channels)" - +typedef ^ InitOutputType Morison_InitOutputType Morison - - - "Initialization output from the Morison module" - +typedef ^ InitOutputType CHARACTER(ChanLen) WriteOutputHdr {:} - - "The is the list of all HD-related output channel header strings (includes all sub-module channels)" - typedef ^ ^ CHARACTER(ChanLen) WriteOutputUnt {:} - - "The is the list of all HD-related output channel unit strings (includes all sub-module channels)" - -typedef ^ ^ SiKi WaveElevSeries {:}{:} - - "Wave elevation time-series at each of the points given by WaveElevXY. First dimension is the timestep. Second dimension is XY point number corresponding to second dimension of WaveElevXY." (m) typedef ^ ^ ProgDesc Ver - - - "Version of HydroDyn" -typedef ^ ^ ReKi WtrDens - - - "Water density" (kg/m^3) -typedef ^ ^ ReKi WtrDpth - - - "Water depth" (m) -typedef ^ ^ ReKi MSL2SWL - - - "Offset between still-water level and mean sea level" (m) typedef ^ ^ CHARACTER(LinChanLen) LinNames_y {:} - - "Names of the outputs used in linearization" - typedef ^ ^ CHARACTER(LinChanLen) LinNames_x {:} - - "Names of the continuous states used in linearization" - typedef ^ ^ CHARACTER(LinChanLen) LinNames_u {:} - - "Names of the inputs used in linearization" - typedef ^ InitOutputType INTEGER DerivOrder_x {:} - - "Integer that tells FAST/MBC3 the maximum derivative order of continuous states used in linearization" - typedef ^ ^ LOGICAL IsLoad_u {:} - - "Flag that tells FAST if the inputs used in linearization are loads (for preconditioning matrix)" - -typedef ^ ^ ReKi WaveVel {:}{:}{:} - - "output for now just to pass to MoorDyn" - -typedef ^ ^ ReKi WaveAcc {:}{:}{:} - - "output for now just to pass to MoorDyn" - -typedef ^ ^ ReKi WaveDynP {:}{:} - - "output for now just to pass to MoorDyn" - -typedef ^ ^ ReKi WaveElev {:}{:} - - "output for now just to pass to MoorDyn" - -typedef ^ ^ ReKi WaveTime {:} - - "output for now just to pass to MoorDyn" - - # ..... HD_ModuleMapType .................................................................................................................... typedef ^ HD_ModuleMapType MeshMapType uW_P_2_PRP_P - - - "Mesh mapping data: WAMIT body kinematics to PRP node at (0,0,0)" - @@ -126,41 +147,31 @@ typedef ^ HD_ModuleMapType MeshMapType # Define continuous (differentiable) states here: # typedef ^ ContinuousStateType WAMIT_ContinuousStateType WAMIT {:} - - "continuous states from the wamit module" - -typedef ^ ContinuousStateType WAMIT2_ContinuousStateType WAMIT2 {:} - - "continuous states from the wamit2 module" - -typedef ^ ContinuousStateType Waves2_ContinuousStateType Waves2 - - - "continuous states from the waves2 module" - typedef ^ ContinuousStateType Morison_ContinuousStateType Morison - - - "continuous states from the Morison module" - # # # Define discrete (nondifferentiable) states here: # typedef ^ DiscreteStateType WAMIT_DiscreteStateType WAMIT {:} - - "discrete states from the wamit module" - -typedef ^ DiscreteStateType WAMIT2_DiscreteStateType WAMIT2 {:} - - "discrete states from the wamit2 module" - -#typedef ^ DiscreteStateType FIT_DiscreteStateType FIT - - - "discrete states from the FIT module" - -typedef ^ DiscreteStateType Waves2_DiscreteStateType Waves2 - - - "discrete states from the waves2 module" - typedef ^ DiscreteStateType Morison_DiscreteStateType Morison - - - "discrete states from the Morison module" - # # # Define constraint states here: # typedef ^ ConstraintStateType WAMIT_ConstraintStateType WAMIT - - - "constraint states from WAMIT (may be empty)" - -typedef ^ ConstraintStateType WAMIT2_ConstraintStateType WAMIT2 - - - "constraint states from WAMIT2 (may be empty)" - -typedef ^ ConstraintStateType Waves2_ConstraintStateType Waves2 - - - "constraint states from the waves2 module" - typedef ^ ConstraintStateType Morison_ConstraintStateType Morison - - - "constraint states from the Morison module" - # # # Define any other states here: # typedef ^ OtherStateType WAMIT_OtherStateType WAMIT {:} - - "OtherState information from the WAMIT module" - -typedef ^ OtherStateType WAMIT2_OtherStateType WAMIT2 {:} - - "OtherState information from the WAMIT2 module" - #typedef ^ OtherStateType FIT_OtherStateType FIT - - - "OtherState information from the FIT module" - -typedef ^ OtherStateType Waves2_OtherStateType Waves2 - - - "OtherState information from the Waves2 module" - typedef ^ ^ Morison_OtherStateType Morison - - - "OtherState information from the Morison module" - # ..... Misc/Optimization variables................................................................................................. # Define any data that are used only for efficiency purposes (these variables are not associated with time): # e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc. typedef ^ MiscVarType MeshType AllHdroOrigin - - - "An intermediate mesh used to transfer hydrodynamic loads from the various HD-related meshes to the AllHdroOrigin mesh" - -typedef ^ ^ MeshType MrsnMesh_position - - - "A motions mesh which has all translational displacements set to zero. Used in the transfer of hydrodynamic loads from the various HD-related meshes to the AllHdroOrigin mesh" - typedef ^ ^ HD_ModuleMapType HD_MeshMap - - - typedef ^ ^ INTEGER Decimate - - - "The output decimation counter" - typedef ^ ^ DbKi LastOutTime - - - "Last time step which was written to the output file (sec)" - @@ -170,11 +181,8 @@ typedef ^ ^ ReKi typedef ^ ^ ReKi F_Waves {:} - - "The total waves forces on a WAMIT body calculated by first and second order methods (WAMIT and WAMIT2 modules)" - typedef ^ ^ WAMIT_MiscVarType WAMIT {:} - - "misc var information from the WAMIT module" - typedef ^ ^ WAMIT2_MiscVarType WAMIT2 {:} - - "misc var information from the WAMIT2 module" - -typedef ^ ^ Waves2_MiscVarType Waves2 - - - "misc var information from the Waves2 module" - typedef ^ ^ Morison_MiscVarType Morison - - - "misc var information from the Morison module" - typedef ^ ^ WAMIT_InputType u_WAMIT {:} - - "WAMIT module inputs" - -typedef ^ ^ WAMIT2_InputType u_WAMIT2 {:} - - "WAMIT2 module inputs" - -typedef ^ ^ Waves2_InputType u_Waves2 - - - "Waves2 module inputs" - # ..... Parameters ................................................................................................................ # Define parameters here: # Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states: @@ -185,7 +193,6 @@ typedef ^ ^ WAMIT_Param typedef ^ ^ WAMIT2_ParameterType WAMIT2 {:} - - "Parameter data for the WAMIT2 module" - typedef ^ ^ LOGICAL WAMIT2used - .FALSE. - "Indicates when WAMIT2 is used. Shortcuts some calculations" - #typedef ^ ^ FIT_ParameterType FIT - - - "Parameter data for the FIT module" - -typedef ^ ^ Waves2_ParameterType Waves2 - - - "Parameter data for the Waves2 module" - typedef ^ ^ Morison_ParameterType Morison - - - "Parameter data for the Morison module" - typedef ^ ^ INTEGER PotMod - - - "1 if using WAMIT model, 0 if no potential flow model, or 2 if FIT model" - typedef ^ ^ INTEGER NBody - - - "[>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6]" - @@ -193,12 +200,8 @@ typedef ^ ^ INTEGER typedef ^ ^ INTEGER totalStates - - - "Number of excitation and radiation states for all WAMIT bodies" - typedef ^ ^ INTEGER totalExctnStates - - - "Number of excitation states for all WAMIT bodies" - typedef ^ ^ INTEGER totalRdtnStates - - - "Number of radiation states for all WAMIT bodies" - -typedef ^ ^ SiKi WaveTime {:} - - "Array of time samples, (sec)" - +typedef ^ ^ SiKi WaveTime {*} - - "Array of time samples, (sec)" - typedef ^ ^ INTEGER NStepWave - - - "Number of data points in the wave kinematics arrays" - -typedef ^ ^ INTEGER NWaveElev - - - "Number of wave elevation outputs" - -typedef ^ ^ SiKi WaveElev {:}{:} - - "Total wave elevation" - -typedef ^ ^ SiKi WaveElev1 {:}{:} - - "First order wave elevation" - -typedef ^ ^ SiKi WaveElev2 {:}{:} - - "Second order wave elevation" - typedef ^ ^ ReKi WtrDpth - - - "Water depth" (m) typedef ^ ^ ReKi AddF0 {:}{:} - - "Additional pre-load forces and moments (N,N,N,N-m,N-m,N-m)" - typedef ^ ^ ReKi AddCLin {:}{:}{:} - - "Additional stiffness matrix" - @@ -218,6 +221,7 @@ typedef ^ ^ Integer typedef ^ ^ R8Ki du {:} - - "vector that determines size of perturbation for u (inputs)" - typedef ^ ^ R8Ki dx {:} - - "vector that determines size of perturbation for x (continuous states)" - typedef ^ ^ Integer Jac_ny - - - "number of outputs in jacobian matrix" - +typedef ^ ParameterType LOGICAL PointsToSeaState - .TRUE. - "Flag that determines if the data contains pointers to SeaState module or if new copies (from restart)" - # # # ..... Inputs .................................................................................................................... @@ -232,7 +236,6 @@ typedef ^ InputType MeshType # Define outputs that are contained on the mesh here: typedef ^ OutputType WAMIT_OutputType WAMIT {:} - - "WAMIT module outputs" - typedef ^ OutputType WAMIT2_OutputType WAMIT2 {:} - - "WAMIT2 module outputs" - -typedef ^ OutputType Waves2_OutputType Waves2 - - - "Waves2 module outputs" - typedef ^ ^ Morison_OutputType Morison - - - "Morison module outputs" - typedef ^ OutputType MeshType WAMITMesh - - - "Point Loads at the WAMIT reference point(s) in the inertial frame" - typedef ^ ^ ReKi WriteOutput {:} - - "Outputs to be written to the output file(s)" - diff --git a/modules/hydrodyn/src/HydroDyn_C_Binding.f90 b/modules/hydrodyn/src/HydroDyn_C_Binding.f90 index 532b7fc44b..37278bac6a 100644 --- a/modules/hydrodyn/src/HydroDyn_C_Binding.f90 +++ b/modules/hydrodyn/src/HydroDyn_C_Binding.f90 @@ -20,6 +20,8 @@ MODULE HydroDyn_C_BINDING USE ISO_C_BINDING + USE SeaState + USE SeaState_Types USE HydroDyn USE HydroDyn_Types USE NWTC_Library @@ -42,7 +44,7 @@ MODULE HydroDyn_C_BINDING !------------------------------------------------------------------------------------ ! Version info for display - type(ProgDesc), parameter :: version = ProgDesc( 'HydroDyn library', '', '' ) + type(ProgDesc), parameter :: version = ProgDesc( 'HydroDyn+SeaState library', '', '' ) !------------------------------------------------------------------------------------ ! Potential issues @@ -70,16 +72,40 @@ MODULE HydroDyn_C_BINDING integer(IntKi) :: InterpOrder !------------------------------ ! Primary HD derived data types - type(HydroDyn_InputType), allocatable :: u(:) !< Inputs at T, T-dt, T-2*dt (history kept for updating states) - type(HydroDyn_InitInputType) :: InitInp !< Initialization data - type(HydroDyn_InitOutputType) :: InitOutData !< Initial output data -- Names, units, and version info. - type(HydroDyn_ParameterType) :: p !< Parameters - type(HydroDyn_ContinuousStateType) :: x(0:2) !< continuous states at Time t and t+dt (predicted) - type(HydroDyn_DiscreteStateType) :: xd(0:2) !< discrete states at Time t and t+dt (predicted) - type(HydroDyn_ConstraintStateType) :: z(0:2) !< Constraint states at Time t and t+dt (predicted) - type(HydroDyn_OtherStateType) :: OtherStates(0:2) !< Initial other/optimization states - type(HydroDyn_OutputType) :: y !< Initial output (outputs are not calculated; only the output mesh is initialized) - type(HydroDyn_MiscVarType) :: m !< Misc variables for optimization (not copied in glue code) + type :: HD_data + type(HydroDyn_InputType), allocatable :: u(:) !< Inputs at T, T-dt, T-2*dt (history kept for updating states) + type(HydroDyn_InitInputType) :: InitInp !< Initialization data + type(HydroDyn_InitOutputType) :: InitOutData !< Initial output data -- Names, units, and version info. + type(HydroDyn_ParameterType) :: p !< Parameters + type(HydroDyn_ContinuousStateType) :: x(0:2) !< continuous states at Time t and t+dt (predicted) + type(HydroDyn_DiscreteStateType) :: xd(0:2) !< discrete states at Time t and t+dt (predicted) + type(HydroDyn_ConstraintStateType) :: z(0:2) !< Constraint states at Time t and t+dt (predicted) + type(HydroDyn_OtherStateType) :: OtherStates(0:2) !< Initial other/optimization states + type(HydroDyn_OutputType) :: y !< Initial output (outputs are not calculated; only the output mesh is initialized) + type(HydroDyn_MiscVarType) :: m !< Misc variables for optimization (not copied in glue code) + logical :: Initialized = .FALSE. + end type HD_data + + type(HD_data) :: HD + + ! Primary SeaState derived data types + ! NOTE: SeaSt does not contain states, so only using single instance of states. + type :: SeaSt_data + type(SeaSt_InputType) :: u !< Inputs at T -- since no states, only need single + type(SeaSt_InitInputType) :: InitInp !< Initialization data + type(SeaSt_InitOutputType) :: InitOutData !< Initial output data -- Names, units, and version info. + type(SeaSt_ParameterType) :: p !< Parameters + type(SeaSt_ContinuousStateType) :: x !< continuous states -- contains no data + type(SeaSt_DiscreteStateType) :: xd !< discrete states -- contains no data + type(SeaSt_ConstraintStateType) :: z !< Constraint states -- contains no data + type(SeaSt_OtherStateType) :: OtherStates !< Initial other/optimization states + type(SeaSt_OutputType) :: y !< Initial output (outputs are not calculated; only the output mesh is initialized) + type(SeaSt_MiscVarType) :: m !< Misc variables for optimization (not copied in glue code) + logical :: Initialized = .FALSE. + end type SeaSt_data + + type(SeaSt_data) :: SeaSt + !------------------------------ ! Time tracking ! When we are performing a correction step, time information of previous @@ -174,7 +200,9 @@ end subroutine SetErr !=============================================================================================================== !--------------------------------------------- HydroDyn Init---------------------------------------------------- !=============================================================================================================== -SUBROUTINE HydroDyn_C_Init( OutRootName_C, InputFileString_C, InputFileStringLength_C, & +SUBROUTINE HydroDyn_C_Init( OutRootName_C, & + SeaSt_InputFileString_C, SeaSt_InputFileStringLength_C, & + HD_InputFileString_C, HD_InputFileStringLength_C, & Gravity_C, defWtrDens_C, defWtrDpth_C, defMSL2SWL_C, & PtfmRefPtPositionX_C, PtfmRefPtPositionY_C, & NumNodePts_C, InitNodePositions_C, & @@ -189,8 +217,10 @@ SUBROUTINE HydroDyn_C_Init( OutRootName_C, InputFileString_C, InputFileStringLen #endif character(kind=c_char), intent(in ) :: OutRootName_C(IntfStrLen) !< Root name to use for echo files and other - type(c_ptr), intent(in ) :: InputFileString_C !< Input file as a single string with lines deliniated by C_NULL_CHAR - integer(c_int), intent(in ) :: InputFileStringLength_C !< lenght of the input file string + type(c_ptr), intent(in ) :: SeaSt_InputFileString_C !< SeaSt input file as a single string with lines deliniated by C_NULL_CHAR + integer(c_int), intent(in ) :: SeaSt_InputFileStringLength_C !< SeaSt length of the input file string + type(c_ptr), intent(in ) :: HD_InputFileString_C !< HD input file as a single string with lines deliniated by C_NULL_CHAR + integer(c_int), intent(in ) :: HD_InputFileStringLength_C !< HD length of the input file string real(c_float), intent(in ) :: Gravity_C !< Gravitational constant (set by calling code) real(c_float), intent(in ) :: defWtrDens_C !< Default value for water density (may be overridden by input file) real(c_float), intent(in ) :: defWtrDpth_C !< Default value for water density (may be overridden by input file) @@ -213,16 +243,17 @@ SUBROUTINE HydroDyn_C_Init( OutRootName_C, InputFileString_C, InputFileStringLen character(kind=c_char), intent( out) :: ErrMsg_C(ErrMsgLen_C) !< Error message (C_NULL_CHAR terminated) ! Local Variables - character(IntfStrLen) :: OutRootName !< Root name to use for echo files and other - character(kind=C_char, len=InputFileStringLength_C), pointer :: InputFileString !< Input file as a single string with NULL chracter separating lines - - real(DbKi) :: TimeInterval !< timestep for HD - integer(IntKi) :: ErrStat !< aggregated error message - character(ErrMsgLen) :: ErrMsg !< aggregated error message - integer(IntKi) :: ErrStat2 !< temporary error status from a call - character(ErrMsgLen) :: ErrMsg2 !< temporary error message from a call - integer(IntKi) :: i,j,k !< generic counters - character(*), parameter :: RoutineName = 'HydroDyn_C_Init' !< for error handling + character(IntfStrLen) :: OutRootName !< Root name to use for echo files and other + character(kind=C_char, len=SeaSt_InputFileStringLength_C), pointer :: SeaSt_InputFileString !< Input file as a single string with NULL chracter separating lines + character(kind=C_char, len=HD_InputFileStringLength_C), pointer :: HD_InputFileString !< Input file as a single string with NULL chracter separating lines + + real(DbKi) :: TimeInterval !< timestep for HD + integer(IntKi) :: ErrStat !< aggregated error message + character(ErrMsgLen) :: ErrMsg !< aggregated error message + integer(IntKi) :: ErrStat2 !< temporary error status from a call + character(ErrMsgLen) :: ErrMsg2 !< temporary error message from a call + integer(IntKi) :: i,j,k !< generic counters + character(*), parameter :: RoutineName = 'HydroDyn_C_Init' !< for error handling ! Initialize error handling ErrStat = ErrID_None @@ -240,43 +271,15 @@ SUBROUTINE HydroDyn_C_Init( OutRootName_C, InputFileString_C, InputFileStringLen if (Failed()) return endif - ! Get fortran pointer to C_NULL_CHAR deliniated input file as a string - call C_F_pointer(InputFileString_C, InputFileString) - - ! Get the data to pass to HD_Init - call InitFileInfo(InputFileString, InitInp%PassedFileData, ErrStat2, ErrMsg2); if (Failed()) return - - ! For diagnostic purposes, the following can be used to display the contents - ! of the InFileInfo data structure. - ! CU is the screen -- system dependent. - !call Print_FileInfo_Struct( CU, InitInp%PassedFileData ) - ! Set other inputs for calling HydroDyn_Init - InitInp%InputFile = "passed_hd_file" ! dummy - InitInp%UseInputFile = .FALSE. ! this probably should be passed in - InitInp%HasIce = .FALSE. ! Always keep at false unless interfacing to ice modules - ! Linearization - ! for now, set linearization to false. Pass this in later when interface supports it - ! Note: we may want to linearize at T=0 for added mass effects, but that might be - ! special case - InitInp%Linearize = .FALSE. - - ! RootName -- for output of echo or other files - OutRootName = TRANSFER( OutRootName_C, OutRootName ) - i = INDEX(OutRootName,C_NULL_CHAR) - 1 ! if this has a c null character at the end... - if ( i > 0 ) OutRootName = OutRootName(1:I) ! remove it - InitInp%OutRootName = trim(OutRootName) - - ! Values passed in - InitInp%Gravity = REAL(Gravity_C, ReKi) - InitInp%defWtrDens = REAL(defWtrDens_C, ReKi) - InitInp%defWtrDpth = REAL(defWtrDpth_C, ReKi) - InitInp%defMSL2SWL = REAL(defMSL2SWL_C, ReKi) + !-------------------------------------------------------------------------------------------------------------------------------- + ! Initialize wrapper variables + !-------------------------------------------------------------------------------------------------------------------------------- + ! Simulation time TimeInterval = REAL(DT_C, DbKi) dT_Global = TimeInterval ! Assume this DT is constant for all simulation N_Global = 0_IntKi ! Assume we are on timestep 0 at start t_initial = REAL(T_Initial_C, DbKi) - InitInp%TMax = REAL(TMax_C, DbKi) ! Number of bodies and initial positions ! - NumNodePts is the number of interface Mesh points we are expecting on the python @@ -294,31 +297,15 @@ SUBROUTINE HydroDyn_C_Init( OutRootName_C, InputFileString_C, InputFileStringLen call AllocAry( tmpNodeFrc, 6, NumNodePts, "tmpNodeFrc", ErrStat2, ErrMsg2 ); if (Failed()) return tmpNodePos(1:6,1:NumNodePts) = reshape( real(InitNodePositions_C(1:6*NumNodePts),ReKi), (/6,NumNodePts/) ) - ! Platform reference position - ! The HD model uses this for building the moddel. This is only specified as an (X,Y) - ! position (no Z). - InitInp%PtfmLocationX = REAL(PtfmRefPtPositionX_C, ReKi) - InitInp%PtfmLocationY = REAL(PtfmRefPtPositionY_C, ReKi) - - - ! Wave eleveation output - ! Wave elevations can be exported for a set of points (grid or any other layout). - ! This feature is used only in the driver codes for exporting for visualization - ! and could be added to this inteface. - ! Skipping this for now. Maybe add later. - !InitInp%WaveElevXY - - !---------------------------------------------------- - ! Allocate input array u and corresponding InputTimes - !---------------------------------------------------- - ! These inputs are used in the time stepping algorithm within HD_UpdateStates + ! Allocate input array u and corresponding InputTimes for SeaState and HD + ! These inputs are used in the time stepping algorithm within HD%UpdateStates ! For quadratic interpolation (InterpOrder==2), 3 timesteps are used. For ! linear (InterOrder==1), 2 timesteps (the HD code can handle either). ! u(1) inputs at t ! u(2) inputs at t - dt ! u(3) inputs at t - 2*dt ! quadratic only - allocate(u(InterpOrder+1), STAT=ErrStat2) + allocate(HD%u(InterpOrder+1), STAT=ErrStat2) if (ErrStat2 /= 0) then ErrStat2 = ErrID_Fatal ErrMsg2 = "Could not allocate inuput" @@ -327,28 +314,163 @@ SUBROUTINE HydroDyn_C_Init( OutRootName_C, InputFileString_C, InputFileStringLen call AllocAry( InputTimes, InterpOrder+1, "InputTimes", ErrStat2, ErrMsg2 ); if (Failed()) return + + !-------------------------------------------------------------------------------------------------------------------------------- + ! SeaState initialize + !-------------------------------------------------------------------------------------------------------------------------------- + + ! Get fortran pointer to C_NULL_CHAR deliniated input file as a string + call C_F_pointer(SeaSt_InputFileString_C, SeaSt_InputFileString) + + ! Get the data to pass to SeaSt%Init + call InitFileInfo(SeaSt_InputFileString, SeaSt%InitInp%PassedFileData, ErrStat2, ErrMsg2); if (Failed()) return + + ! For diagnostic purposes, the following can be used to display the contents + ! of the InFileInfo data structure. + ! CU is the screen -- system dependent. + !call Print_FileInfo_Struct( CU, SeaSt%InitInp%PassedFileData ) + + ! Set other inputs for calling SeaState_Init + SeaSt%InitInp%hasIce = .FALSE. ! Always keep at false unless interfacing to ice modules + SeaSt%InitInp%InputFile = "passed_SeaSt_file" ! dummy + SeaSt%InitInp%UseInputFile = .FALSE. ! this probably should be passed in + ! Linearization + ! for now, set linearization to false. Pass this in later when interface supports it + ! Note: we may want to linearize at T=0 for added mass effects, but that might be + ! special case + HD%InitInp%Linearize = .FALSE. + + ! RootName -- for output of echo or other files + OutRootName = TRANSFER( OutRootName_C, OutRootName ) + i = INDEX(OutRootName,C_NULL_CHAR) - 1 ! if this has a c null character at the end... + if ( i > 0 ) OutRootName = OutRootName(1:I) ! remove it + SeaSt%InitInp%OutRootName = trim(OutRootName)//".SEA" + + ! Values passed in + SeaSt%InitInp%Gravity = REAL(Gravity_C, ReKi) + SeaSt%InitInp%defWtrDens = REAL(defWtrDens_C, ReKi) ! use values from SeaState + SeaSt%InitInp%defWtrDpth = REAL(defWtrDpth_C, ReKi) ! use values from SeaState + SeaSt%InitInp%defMSL2SWL = REAL(defMSL2SWL_C, ReKi) ! use values from SeaState + SeaSt%InitInp%TMax = REAL(TMax_C, DbKi) + + ! Wave elevation output + ! Wave elevations can be exported for a set of points (grid or any other layout). + ! This feature is used only in the driver codes for exporting for visualization + ! and could be added to this inteface. + ! Skipping this for now. Maybe add later. + !SeaSt%InitInp%WaveElevXY + + call SeaSt_Init( SeaSt%InitInp, SeaSt%u, SeaSt%p, SeaSt%x, SeaSt%xd, SeaSt%z, SeaSt%OtherStates, SeaSt%y, SeaSt%m, TimeInterval, SeaSt%InitOutData, ErrStat, ErrMsg ) + if (Failed()) return + SeaSt%Initialized = .true. + + + + !-------------------------------------------------------------------------------------------------------------------------------- + ! HydroDyn initialize + !-------------------------------------------------------------------------------------------------------------------------------- + + ! Get fortran pointer to C_NULL_CHAR deliniated input file as a string + call C_F_pointer(HD_InputFileString_C, HD_InputFileString) + + ! Get the data to pass to HD%Init + call InitFileInfo(HD_InputFileString, HD%InitInp%PassedFileData, ErrStat2, ErrMsg2); if (Failed()) return + + ! For diagnostic purposes, the following can be used to display the contents + ! of the InFileInfo data structure. + ! CU is the screen -- system dependent. + !call Print_FileInfo_Struct( CU, HD%InitInp%PassedFileData ) + + ! Set other inputs for calling HydroDyn_Init + HD%InitInp%InputFile = "passed_hd_file" ! dummy + HD%InitInp%UseInputFile = .FALSE. ! this probably should be passed in + ! Linearization + ! for now, set linearization to false. Pass this in later when interface supports it + ! Note: we may want to linearize at T=0 for added mass effects, but that might be + ! special case + HD%InitInp%Linearize = .FALSE. + + ! RootName -- for output of echo or other files + OutRootName = TRANSFER( OutRootName_C, OutRootName ) + i = INDEX(OutRootName,C_NULL_CHAR) - 1 ! if this has a c null character at the end... + if ( i > 0 ) OutRootName = OutRootName(1:I) ! remove it + HD%InitInp%OutRootName = trim(OutRootName)//".HD" + + ! Values passed in + HD%InitInp%Gravity = REAL(Gravity_C, ReKi) + HD%InitInp%WtrDens = REAL(defWtrDens_C, ReKi) ! use values from SeaState + HD%InitInp%WtrDpth = REAL(defWtrDpth_C, ReKi) ! use values from SeaState + HD%InitInp% MSL2SWL = REAL(defMSL2SWL_C, ReKi) ! use values from SeaState + HD%InitInp%TMax = REAL(TMax_C, DbKi) + + ! Transfer data from SeaState + ! Need to set up other module's InitInput data here because we will also need to clean up SeaState data and would rather not defer that cleanup + HD%InitInp%NStepWave = SeaSt%InitOutData%NStepWave + HD%InitInp%NStepWave2 = SeaSt%InitOutData%NStepWave2 + HD%InitInp%RhoXg = SeaSt%InitOutData%RhoXg + HD%InitInp%WaveMod = SeaSt%InitOutData%WaveMod + HD%InitInp%WaveStMod = SeaSt%InitOutData%WaveStMod + HD%InitInp%WaveDirMod = SeaSt%InitOutData%WaveDirMod + HD%InitInp%WvLowCOff = SeaSt%InitOutData%WvLowCOff + HD%InitInp%WvHiCOff = SeaSt%InitOutData%WvHiCOff + HD%InitInp%WvLowCOffD = SeaSt%InitOutData%WvLowCOffD + HD%InitInp%WvHiCOffD = SeaSt%InitOutData%WvHiCOffD + HD%InitInp%WvLowCOffS = SeaSt%InitOutData%WvLowCOffS + HD%InitInp%WvHiCOffS = SeaSt%InitOutData%WvHiCOffS + HD%InitInp%InvalidWithSSExctn = SeaSt%InitOutData%InvalidWithSSExctn + + HD%InitInp%WaveDirMin = SeaSt%InitOutData%WaveDirMin + HD%InitInp%WaveDirMax = SeaSt%InitOutData%WaveDirMax + HD%InitInp%WaveDir = SeaSt%InitOutData%WaveDir + HD%InitInp%WaveMultiDir = SeaSt%InitOutData%WaveMultiDir + HD%InitInp%WaveDOmega = SeaSt%InitOutData%WaveDOmega + HD%InitInp%MCFD = SeaSt%InitOutData%MCFD + + CALL MOVE_ALLOC( SeaSt%InitOutData%WaveElev0, HD%InitInp%WaveElev0 ) + if(associated(SeaSt%InitOutData%WaveTime )) HD%InitInp%WaveTime => SeaSt%InitOutData%WaveTime + if(associated(SeaSt%InitOutData%WaveDynP )) HD%InitInp%WaveDynP => SeaSt%InitOutData%WaveDynP + if(associated(SeaSt%InitOutData%WaveAcc )) HD%InitInp%WaveAcc => SeaSt%InitOutData%WaveAcc + if(associated(SeaSt%InitOutData%WaveVel )) HD%InitInp%WaveVel => SeaSt%InitOutData%WaveVel + if(associated(SeaSt%InitOutData%PWaveDynP0)) HD%InitInp%PWaveDynP0 => SeaSt%InitOutData%PWaveDynP0 + if(associated(SeaSt%InitOutData%PWaveAcc0 )) HD%InitInp%PWaveAcc0 => SeaSt%InitOutData%PWaveAcc0 + if(associated(SeaSt%InitOutData%PWaveVel0 )) HD%InitInp%PWaveVel0 => SeaSt%InitOutData%PWaveVel0 + if(associated(SeaSt%InitOutData%WaveElevC0)) HD%InitInp%WaveElevC0 => SeaSt%InitOutData%WaveElevC0 + CALL MOVE_ALLOC( SeaSt%InitOutData%WaveElevC, HD%InitInp%WaveElevC ) + if(associated(SeaSt%InitOutData%WaveDirArr)) HD%InitInp%WaveDirArr => SeaSt%InitOutData%WaveDirArr + if(associated(SeaSt%InitOutData%WaveElev1 )) HD%InitInp%WaveElev1 => SeaSt%InitOutData%WaveElev1 + if(associated(SeaSt%InitOutData%WaveElev2 )) HD%InitInp%WaveElev2 => SeaSt%InitOutData%WaveElev2 + + HD%InitInp%WaveAccMCF => SeaSt%InitOutData%WaveAccMCF + HD%InitInp%PWaveAccMCF0 => SeaSt%InitOutData%PWaveAccMCF0 + + call SeaSt_Interp_CopyParam(SeaSt%InitOutData%SeaSt_Interp_p, HD%InitInp%SeaSt_Interp_p, MESH_NEWCOPY, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + + ! Platform reference position + ! The HD model uses this for building the moddel. This is only specified as an (X,Y) + ! position (no Z). + HD%InitInp%PtfmLocationX = REAL(PtfmRefPtPositionX_C, ReKi) + HD%InitInp%PtfmLocationY = REAL(PtfmRefPtPositionY_C, ReKi) + + + !------------------------------------------------------------- ! Call the main subroutine HydroDyn_Init - ! TimeInterval and InitInp are passed into HD_Init, all the rest are set by HD_Init + ! TimeInterval and HD%InitInp are passed into HD%Init, all the rest are set by HD%Init ! ! NOTE: Pass u(1) only (this is empty and will be set inside Init). We will copy ! this to u(2) and u(3) afterwards - call HydroDyn_Init( InitInp, u(1), p, x(STATE_CURR), xd(STATE_CURR), z(STATE_CURR), OtherStates(STATE_CURR), y, m, TimeInterval, InitOutData, ErrStat2, ErrMsg2 ) + call HydroDyn_Init( HD%InitInp, HD%u(1), HD%p, HD%x(STATE_CURR), HD%xd(STATE_CURR), HD%z(STATE_CURR), HD%OtherStates(STATE_CURR), HD%y, HD%m, TimeInterval, HD%InitOutData, ErrStat2, ErrMsg2 ) if (Failed()) return + HD%Initialized = .true. !------------------------------------------------------------- ! Sanity checks - !------------------------------------------------------------- call CheckDepth(ErrStat2,ErrMsg2); if (Failed()) return call CheckNodes(ErrStat2,ErrMsg2); if (Failed()) return - !------------------------------------------------------------- - ! Set the interface meshes for motion inputs and loads output - !------------------------------------------------------------- - call SetMotionLoadsInterfaceMeshes(ErrStat2,ErrMsg2); if (Failed()) return - - !------------------------------------------------------------- ! Setup other prior timesteps ! We fill InputTimes with negative times, but the Input values are identical for each of those times; this allows @@ -357,7 +479,7 @@ SUBROUTINE HydroDyn_C_Init( OutRootName_C, InputFileString_C, InputFileStringLen ! order = SIZE(Input) !------------------------------------------------------------- do i=2,InterpOrder+1 - call HydroDyn_CopyInput (u(1), u(i), MESH_NEWCOPY, Errstat2, ErrMsg2) + call HydroDyn_CopyInput (HD%u(1), HD%u(i), MESH_NEWCOPY, Errstat2, ErrMsg2) if (Failed()) return enddo do i = 1, InterpOrder + 1 @@ -368,40 +490,46 @@ SUBROUTINE HydroDyn_C_Init( OutRootName_C, InputFileString_C, InputFileStringLen !------------------------------------------------------------- ! Initial setup of other pieces of x,xd,z,OtherStates - !------------------------------------------------------------- - CALL HydroDyn_CopyContState ( x( STATE_CURR), x( STATE_PRED), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyDiscState ( xd( STATE_CURR), xd( STATE_PRED), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyConstrState( z( STATE_CURR), z( STATE_PRED), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyOtherState ( OtherStates(STATE_CURR), OtherStates(STATE_PRED), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyContState ( HD%x( STATE_CURR), HD%x( STATE_PRED), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyDiscState ( HD%xd( STATE_CURR), HD%xd( STATE_PRED), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyConstrState( HD%z( STATE_CURR), HD%z( STATE_PRED), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyOtherState ( HD%OtherStates(STATE_CURR), HD%OtherStates(STATE_PRED), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return !------------------------------------------------------------- ! Setup the previous timestep copies of states - !------------------------------------------------------------- - CALL HydroDyn_CopyContState ( x( STATE_CURR), x( STATE_LAST), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyDiscState ( xd( STATE_CURR), xd( STATE_LAST), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyConstrState( z( STATE_CURR), z( STATE_LAST), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyOtherState ( OtherStates(STATE_CURR), OtherStates(STATE_LAST), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyContState ( HD%x( STATE_CURR), HD%x( STATE_LAST), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyDiscState ( HD%xd( STATE_CURR), HD%xd( STATE_LAST), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyConstrState( HD%z( STATE_CURR), HD%z( STATE_LAST), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyOtherState ( HD%OtherStates(STATE_CURR), HD%OtherStates(STATE_LAST), MESH_NEWCOPY, Errstat2, ErrMsg2); if (Failed()) return -!TODO -! Is there any other InitOutData should be returned -! Any additional warnings or error handling necessary - !------------------------------------------------- - ! Set output channel information for driver code - !------------------------------------------------- + !-------------------------------------------------------------------------------------------------------------------------------- + ! Set the interface meshes and outputs + !-------------------------------------------------------------------------------------------------------------------------------- + call SetMotionLoadsInterfaceMeshes(ErrStat2,ErrMsg2); if (Failed()) return + + !------------------------------------------------------------- + ! Set output channel information for driver code ! Number of channels - NumChannels_C = size(InitOutData%WriteOutputHdr) + NumChannels_C = size(SeaSt%InitOutData%WriteOutputHdr) + size(HD%InitOutData%WriteOutputHdr) ! transfer the output channel names and units to c_char arrays for returning ! Upgrade idea: use C_NULL_CHAR as delimiters. Requires rework of Python ! side of code. k=1 - do i=1,NumChannels_C + do i=1,size(SeaSt%InitOutData%WriteOutputHdr) do j=1,ChanLen ! max length of channel name. Same for units - OutputChannelNames_C(k)=InitOutData%WriteOutputHdr(i)(j:j) - OutputChannelUnits_C(k)=InitOutData%WriteOutputUnt(i)(j:j) + OutputChannelNames_C(k)=SeaSt%InitOutData%WriteOutputHdr(i)(j:j) + OutputChannelUnits_C(k)=SeaSt%InitOutData%WriteOutputUnt(i)(j:j) + k=k+1 + enddo + enddo + do i=1,size(HD%InitOutData%WriteOutputHdr) + do j=1,ChanLen ! max length of channel name. Same for units + OutputChannelNames_C(k)=HD%InitOutData%WriteOutputHdr(i)(j:j) + OutputChannelUnits_C(k)=HD%InitOutData%WriteOutputUnt(i)(j:j) k=k+1 enddo enddo @@ -526,24 +654,24 @@ subroutine SetMotionLoadsInterfaceMeshes(ErrStat3,ErrMsg3) !------------------------------------------------------------- ! Set the mapping meshes ! PRP - principle reference point - call MeshMapCreate( HD_MotionMesh, u(1)%PRPMesh, Map_Motion_2_HD_PRP_P, ErrStat3, ErrMsg3 ) + call MeshMapCreate( HD_MotionMesh, HD%u(1)%PRPMesh, Map_Motion_2_HD_PRP_P, ErrStat3, ErrMsg3 ) if (ErrStat3 >= AbortErrLev) return ! WAMIT - floating bodies using potential flow - if ( u(1)%WAMITMesh%Committed ) then ! input motions - call MeshMapCreate( HD_MotionMesh, u(1)%WAMITMesh, Map_Motion_2_HD_WB_P, ErrStat3, ErrMsg3 ) + if ( HD%u(1)%WAMITMesh%Committed ) then ! input motions + call MeshMapCreate( HD_MotionMesh, HD%u(1)%WAMITMesh, Map_Motion_2_HD_WB_P, ErrStat3, ErrMsg3 ) if (ErrStat3 >= AbortErrLev) return endif - if ( y%WAMITMesh%Committed ) then ! output loads - call MeshMapCreate( y%WAMITMesh, HD_LoadMesh, Map_HD_WB_P_2_Load, ErrStat3, ErrMsg3 ) + if ( HD%y%WAMITMesh%Committed ) then ! output loads + call MeshMapCreate( HD%y%WAMITMesh, HD_LoadMesh, Map_HD_WB_P_2_Load, ErrStat3, ErrMsg3 ) if (ErrStat3 >= AbortErrLev) return endif ! Morison - nodes for strip theory - if ( u(1)%Morison%Mesh%Committed ) then ! input motions - call MeshMapCreate( HD_MotionMesh, u(1)%Morison%Mesh, Map_Motion_2_HD_Mo_P, ErrStat3, ErrMsg3 ) + if ( HD%u(1)%Morison%Mesh%Committed ) then ! input motions + call MeshMapCreate( HD_MotionMesh, HD%u(1)%Morison%Mesh, Map_Motion_2_HD_Mo_P, ErrStat3, ErrMsg3 ) if (ErrStat3 >= AbortErrLev) return endif - if ( y%Morison%Mesh%Committed ) then ! output loads - call MeshMapCreate( y%Morison%Mesh, HD_LoadMesh, Map_HD_Mo_P_2_Load, ErrStat3, ErrMsg3 ) + if ( HD%y%Morison%Mesh%Committed ) then ! output loads + call MeshMapCreate( HD%y%Morison%Mesh, HD_LoadMesh, Map_HD_Mo_P_2_Load, ErrStat3, ErrMsg3 ) if (ErrStat3 >= AbortErrLev) return endif @@ -560,18 +688,18 @@ subroutine CheckNodes(ErrStat3,ErrMsg3) ErrStat3 = ErrID_None ErrMsg3 = "" if ( NumNodePts > 1 ) then - if ( u(1)%Morison%Mesh%Committed .and. u(1)%WAMITMesh%Committed ) then - if ( (u(1)%Morison%Mesh%Nnodes + u(1)%WAMITMesh%Nnodes) < NumNodePts ) then + if ( HD%u(1)%Morison%Mesh%Committed .and. HD%u(1)%WAMITMesh%Committed ) then + if ( (HD%u(1)%Morison%Mesh%Nnodes + HD%u(1)%WAMITMesh%Nnodes) < NumNodePts ) then ErrStat3 = ErrID_Fatal ErrMsg3 = "More nodes passed into library than exist in HydroDyn model" endif - elseif ( u(1)%Morison%Mesh%Committed ) then ! No WAMIT - if ( u(1)%Morison%Mesh%Nnodes < NumNodePts ) then + elseif ( HD%u(1)%Morison%Mesh%Committed ) then ! No WAMIT + if ( HD%u(1)%Morison%Mesh%Nnodes < NumNodePts ) then ErrStat3 = ErrID_Fatal ErrMsg3 = "More nodes passed into library than exist in HydroDyn model Morison mesh" endif - elseif ( u(1)%WAMITMesh%Committed ) then ! No Morison - if ( u(1)%WAMITMesh%Nnodes < NumNodePts ) then + elseif ( HD%u(1)%WAMITMesh%Committed ) then ! No Morison + if ( HD%u(1)%WAMITMesh%Nnodes < NumNodePts ) then ErrStat3 = ErrID_Fatal ErrMsg3 = "More nodes passed into library than exist in HydroDyn model WAMIT mesh" endif @@ -591,15 +719,15 @@ subroutine CheckDepth(ErrStat3,ErrMsg3) real(ReKi) :: tmpZpos !< temporary z-position ErrStat3 = ErrID_None ErrMsg3 = "" - tmpZpos=-0.001_ReKi*abs(p%WtrDpth) ! Initial comparison value close to surface - if ( NumNodePts == 1 .and. u(1)%Morison%Mesh%Committed ) then - do i=1,u(1)%Morison%Mesh%Nnodes + tmpZpos=-0.001_ReKi*abs(HD%p%WtrDpth) ! Initial comparison value close to surface + if ( NumNodePts == 1 .and. HD%u(1)%Morison%Mesh%Committed ) then + do i=1,HD%u(1)%Morison%Mesh%Nnodes ! Find lowest Morison node - if (u(1)%Morison%Mesh%Position(3,i) < tmpZpos) then - tmpZpos = u(1)%Morison%Mesh%Position(3,i) + if (HD%u(1)%Morison%Mesh%Position(3,i) < tmpZpos) then + tmpZpos = HD%u(1)%Morison%Mesh%Position(3,i) endif enddo - if (tmpZpos < -abs(p%WtrDpth)*0.9_ReKi) then ! within 10% of the seafloor + if (tmpZpos < -abs(HD%p%WtrDpth)*0.9_ReKi) then ! within 10% of the seafloor ErrStat3 = ErrID_Severe ErrMsg3 = "Inconsistent model"//NewLine//" -- Single library input node for simulating rigid floating structure."// & NewLine//" -- Lowest Morison node is is in lowest 10% of water depth indicating fixed bottom structure from HydroDyn."// & @@ -628,13 +756,13 @@ SUBROUTINE HydroDyn_C_CalcOutput(Time_C, NumNodePts_C, NodePos_C, NodeVel_C, Nod real(c_float), intent(in ) :: NodeVel_C( 6*NumNodePts_C ) !< A 6xNumNodePts_C array [Vx,Vy,Vz,RVx,RVy,RVz] -- velocities (global) real(c_float), intent(in ) :: NodeAcc_C( 6*NumNodePts_C ) !< A 6xNumNodePts_C array [Ax,Ay,Az,RAx,RAy,RAz] -- accelerations (global) real(c_float), intent( out) :: NodeFrc_C( 6*NumNodePts_C ) !< A 6xNumNodePts_C array [Fx,Fy,Fz,Mx,My,Mz] -- forces and moments (global) - real(c_float), intent( out) :: OutputChannelValues_C(p%NumOuts) + real(c_float), intent( out) :: OutputChannelValues_C(SeaSt%p%NumOuts+HD%p%NumOuts) integer(c_int), intent( out) :: ErrStat_C character(kind=c_char), intent( out) :: ErrMsg_C(ErrMsgLen_C) ! Local variables real(DbKi) :: Time - integer(IntKi) :: iNode + integer(IntKi) :: iNode,i,k integer(IntKi) :: ErrStat !< aggregated error status character(ErrMsgLen) :: ErrMsg !< aggregated error message integer(IntKi) :: ErrStat2 !< temporary error status from a call @@ -664,17 +792,17 @@ SUBROUTINE HydroDyn_C_CalcOutput(Time_C, NumNodePts_C, NodePos_C, NodeVel_C, Nod ! Transfer motions to input meshes call Set_MotionMesh( ErrStat2, ErrMsg2 ) ! update motion mesh with input motion arrays if (Failed()) return - call HD_SetInputMotion( u(1), ErrStat2, ErrMsg2 ) ! transfer input motion mesh to u(1) meshes + call HD_SetInputMotion( HD%u(1), ErrStat2, ErrMsg2 ) ! transfer input motion mesh to u(1) meshes if (Failed()) return ! Call the main subroutine HydroDyn_CalcOutput to get the resulting forces and moments at time T - CALL HydroDyn_CalcOutput( Time, u(1), p, x(STATE_CURR), xd(STATE_CURR), z(STATE_CURR), OtherStates(STATE_CURR), y, m, ErrStat2, ErrMsg2 ) + CALL HydroDyn_CalcOutput( Time, HD%u(1), HD%p, HD%x(STATE_CURR), HD%xd(STATE_CURR), HD%z(STATE_CURR), HD%OtherStates(STATE_CURR), HD%y, HD%m, ErrStat2, ErrMsg2 ) if (Failed()) return ! Transfer resulting load meshes to intermediate mesh - call HD_TransferLoads( u(1), y, ErrStat2, ErrMsg2 ) + call HD_TransferLoads( HD%u(1), HD%y, ErrStat2, ErrMsg2 ) if (Failed()) return @@ -683,8 +811,20 @@ SUBROUTINE HydroDyn_C_CalcOutput(Time_C, NumNodePts_C, NodePos_C, NodeVel_C, Nod ! Reshape for return NodeFrc_C(1:6*NumNodePts) = reshape( real(tmpNodeFrc(1:6,1:NumNodePts), c_float), (/6*NumNodePts/) ) + + ! call SeaState to get outputs of WaveElev, etc + call SeaSt_CalcOutput( Time, SeaSt%u, SeaSt%p, SeaSt%x, SeaSt%xd, SeaSt%z, SeaSt%OtherStates, SeaSt%y, SeaSt%m, ErrStat2, ErrMsg2 ) + ! Get the output channel info out of y - OutputChannelValues_C = REAL(y%WriteOutput, C_FLOAT) + k=1 + do i=1,size(SeaSt%y%WriteOutput) + OutputChannelValues_C(k) = REAL(SeaSt%y%WriteOutput(i), C_FLOAT) + k=k+1 + enddo + do i=1,size(HD%y%WriteOutput) + OutputChannelValues_C(k) = REAL(HD%y%WriteOutput(i), C_FLOAT) + k=k+1 + enddo ! Set error status call SetErr(ErrStat,ErrMsg,ErrStat_C,ErrMsg_C) @@ -746,7 +886,7 @@ SUBROUTINE HydroDyn_C_UpdateStates( Time_C, TimeNext_C, NumNodePts_C, NodePos_C, !------------------------------------------------------- ! Check the time for current timestep and next timestep !------------------------------------------------------- - ! These inputs are used in the time stepping algorithm within HD_UpdateStates + ! These inputs are used in the time stepping algorithm within HD%UpdateStates ! For quadratic interpolation (InterpOrder==2), 3 timesteps are used. For ! linear (InterOrder==1), 2 timesteps (the HD code can handle either). ! u(1) inputs at t + dt ! Next timestep @@ -781,17 +921,17 @@ SUBROUTINE HydroDyn_C_UpdateStates( Time_C, TimeNext_C, NumNodePts_C, NodePos_C, ! Step back to previous state because we are doing a correction step ! -- repeating the T -> T+dt update with new inputs at T+dt ! -- the STATE_CURR contains states at T+dt from the previous call, so revert those - CALL HydroDyn_CopyContState (x( STATE_LAST), x( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyDiscState (xd( STATE_LAST), xd( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyConstrState (z( STATE_LAST), z( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyOtherState (OtherStates(STATE_LAST), OtherStates(STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyContState (HD%x( STATE_LAST), HD%x( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyDiscState (HD%xd( STATE_LAST), HD%xd( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyConstrState (HD%z( STATE_LAST), HD%z( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyOtherState (HD%OtherStates(STATE_LAST), HD%OtherStates(STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return else ! Cycle inputs back one timestep since we are moving forward in time. if (InterpOrder>1) then ! quadratic, so keep the old time - call HydroDyn_CopyInput( u(INPUT_CURR), u(INPUT_LAST), MESH_UPDATECOPY, ErrStat2, ErrMsg2); if (Failed()) return + call HydroDyn_CopyInput( HD%u(INPUT_CURR), HD%u(INPUT_LAST), MESH_UPDATECOPY, ErrStat2, ErrMsg2); if (Failed()) return endif ! Move inputs from previous t+dt (now t) to t - call HydroDyn_CopyInput( u(INPUT_PRED), u(INPUT_CURR), MESH_UPDATECOPY, ErrStat2, ErrMsg2); if (Failed()) return + call HydroDyn_CopyInput( HD%u(INPUT_PRED), HD%u(INPUT_CURR), MESH_UPDATECOPY, ErrStat2, ErrMsg2); if (Failed()) return endif !------------------------------------------------------- @@ -805,21 +945,21 @@ SUBROUTINE HydroDyn_C_UpdateStates( Time_C, TimeNext_C, NumNodePts_C, NodePos_C, ! Transfer motions to input meshes call Set_MotionMesh( ErrStat2, ErrMsg2 ) ! update motion mesh with input motion arrays if (Failed()) return - call HD_SetInputMotion( u(INPUT_PRED), ErrStat2, ErrMsg2 ) ! transfer input motion mesh to u(1) meshes + call HD_SetInputMotion( HD%u(INPUT_PRED), ErrStat2, ErrMsg2 ) ! transfer input motion mesh to u(1) meshes if (Failed()) return ! Set copy the current state over to the predicted state for sending to UpdateStates ! -- The STATE_PREDicted will get updated in the call. ! -- The UpdateStates routine expects this to contain states at T at the start of the call (history not passed in) - CALL HydroDyn_CopyContState (x( STATE_CURR), x( STATE_PRED), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyDiscState (xd( STATE_CURR), xd( STATE_PRED), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyConstrState (z( STATE_CURR), z( STATE_PRED), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyOtherState (OtherStates(STATE_CURR), OtherStates(STATE_PRED), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyContState (HD%x( STATE_CURR), HD%x( STATE_PRED), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyDiscState (HD%xd( STATE_CURR), HD%xd( STATE_PRED), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyConstrState (HD%z( STATE_CURR), HD%z( STATE_PRED), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyOtherState (HD%OtherStates(STATE_CURR), HD%OtherStates(STATE_PRED), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return ! Call the main subroutine HydroDyn_UpdateStates to get the velocities - CALL HydroDyn_UpdateStates( InputTimes(INPUT_CURR), N_Global, u, InputTimes, p, x(STATE_PRED), xd(STATE_PRED), z(STATE_PRED), OtherStates(STATE_PRED), m, ErrStat2, ErrMsg2 ) + CALL HydroDyn_UpdateStates( InputTimes(INPUT_CURR), N_Global, HD%u, InputTimes, HD%p, HD%x(STATE_PRED), HD%xd(STATE_PRED), HD%z(STATE_PRED), HD%OtherStates(STATE_PRED), HD%m, ErrStat2, ErrMsg2 ) if (Failed()) return @@ -829,16 +969,16 @@ SUBROUTINE HydroDyn_C_UpdateStates( Time_C, TimeNext_C, NumNodePts_C, NodePos_C, ! move current state at T to previous state at T-dt ! -- STATE_LAST now contains info at time T ! -- this allows repeating the T --> T+dt update - CALL HydroDyn_CopyContState (x( STATE_CURR), x( STATE_LAST), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyDiscState (xd( STATE_CURR), xd( STATE_LAST), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyConstrState (z( STATE_CURR), z( STATE_LAST), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyOtherState (OtherStates(STATE_CURR), OtherStates(STATE_LAST), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyContState (HD%x( STATE_CURR), HD%x( STATE_LAST), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyDiscState (HD%xd( STATE_CURR), HD%xd( STATE_LAST), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyConstrState (HD%z( STATE_CURR), HD%z( STATE_LAST), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyOtherState (HD%OtherStates(STATE_CURR), HD%OtherStates(STATE_LAST), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return ! Update the predicted state as the new current state ! -- we have now advanced from T to T+dt. This allows calling with CalcOuput to get the outputs at T+dt - CALL HydroDyn_CopyContState (x( STATE_PRED), x( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyDiscState (xd( STATE_PRED), xd( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyConstrState (z( STATE_PRED), z( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return - CALL HydroDyn_CopyOtherState (OtherStates(STATE_PRED), OtherStates(STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyContState (HD%x( STATE_PRED), HD%x( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyDiscState (HD%xd( STATE_PRED), HD%xd( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyConstrState (HD%z( STATE_PRED), HD%z( STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return + CALL HydroDyn_CopyOtherState (HD%OtherStates(STATE_PRED), HD%OtherStates(STATE_CURR), MESH_UPDATECOPY, Errstat2, ErrMsg2); if (Failed()) return @@ -887,10 +1027,10 @@ SUBROUTINE HydroDyn_C_End(ErrStat_C,ErrMsg_C) BIND (C, NAME='HydroDyn_C_End') ! Call the main subroutine HydroDyn_End ! If u is not allocated, then we didn't get far at all in initialization, - ! or HD_C_End got called before Init. We don't want a segfault, so check + ! or HD%C_End got called before Init. We don't want a segfault, so check ! for allocation. - if (allocated(u)) then - call HydroDyn_End( u(1), p, x(STATE_CURR), xd(STATE_CURR), z(STATE_CURR), OtherStates(STATE_CURR), y, m, ErrStat2, ErrMsg2 ) + if (allocated(HD%u)) then + call HydroDyn_End( HD%u(1), HD%p, HD%x(STATE_CURR), HD%xd(STATE_CURR), HD%z(STATE_CURR), HD%OtherStates(STATE_CURR), HD%y, HD%m, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) endif @@ -898,27 +1038,38 @@ SUBROUTINE HydroDyn_C_End(ErrStat_C,ErrMsg_C) BIND (C, NAME='HydroDyn_C_End') ! logic is required here (this isn't necessary in the fortran driver ! or in openfast, but may be when this code is called from C, Python, ! or some other code using the c-bindings. - if (allocated(u)) then - do i=2,size(u) - call HydroDyn_DestroyInput( u(i), ErrStat2, ErrMsg2 ) + if (allocated(HD%u)) then + do i=2,size(HD%u) + call HydroDyn_DestroyInput( HD%u(i), ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) enddo - if (allocated(u)) deallocate(u) + if (allocated(HD%u)) deallocate(HD%u) endif ! Destroy any other copies of states (rerun on (STATE_CURR) is ok) - call HydroDyn_DestroyContState( x( STATE_LAST), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyDiscState( xd( STATE_LAST), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyConstrState( z( STATE_LAST), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyOtherState( OtherStates(STATE_LAST), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyContState( x( STATE_CURR), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyDiscState( xd( STATE_CURR), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyConstrState( z( STATE_CURR), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyOtherState( OtherStates(STATE_CURR), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyContState( x( STATE_PRED), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyDiscState( xd( STATE_PRED), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyConstrState( z( STATE_PRED), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call HydroDyn_DestroyOtherState( OtherStates(STATE_PRED), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyContState( HD%x( STATE_LAST), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyDiscState( HD%xd( STATE_LAST), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyConstrState( HD%z( STATE_LAST), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyOtherState( HD%OtherStates(STATE_LAST), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyContState( HD%x( STATE_CURR), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyDiscState( HD%xd( STATE_CURR), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyConstrState( HD%z( STATE_CURR), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyOtherState( HD%OtherStates(STATE_CURR), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyContState( HD%x( STATE_PRED), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyDiscState( HD%xd( STATE_PRED), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyConstrState( HD%z( STATE_PRED), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call HydroDyn_DestroyOtherState( HD%OtherStates(STATE_PRED), ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + + ! Call the main subroutine SeaSt_End + call SeaSt_End( SeaSt%u, SeaSt%p, SeaSt%x, SeaSt%xd, SeaSt%z, SeaSt%OtherStates, SeaSt%y, SeaSt%m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ! Destroy any other copies of states (rerun on (STATE_CURR) is ok) + call SeaSt_DestroyContState( SeaSt%x , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call SeaSt_DestroyDiscState( SeaSt%xd , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call SeaSt_DestroyConstrState( SeaSt%z , ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call SeaSt_DestroyOtherState( SeaSt%OtherStates, ErrStat2, ErrMsg2 ); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ! if deallocate other items now @@ -973,21 +1124,21 @@ end subroutine Set_MotionMesh !> Map the motion of the intermediate input mesh over to the input meshes !! This routine is operating on module level data, hence few inputs -subroutine HD_SetInputMotion( u_local, ErrStat3, ErrMsg3 ) - type(HydroDyn_InputType), intent(inout) :: u_local ! Only one input (probably at T) +subroutine HD_SetInputMotion( HD_u_local, ErrStat3, ErrMsg3 ) + type(HydroDyn_InputType), intent(inout) :: HD_u_local ! Only one input (probably at T) integer(IntKi), intent( out) :: ErrStat3 character(ErrMsgLen), intent( out) :: ErrMsg3 ! Principle reference point - CALL Transfer_Point_to_Point( HD_MotionMesh, u_local%PRPMesh, Map_Motion_2_HD_PRP_P, ErrStat3, ErrMsg3 ) + CALL Transfer_Point_to_Point( HD_MotionMesh, HD_u_local%PRPMesh, Map_Motion_2_HD_PRP_P, ErrStat3, ErrMsg3 ) if (ErrStat3 >= AbortErrLev) return ! WAMIT mesh - if ( u_local%WAMITMesh%Committed ) then - call Transfer_Point_to_Point( HD_MotionMesh, u_local%WAMITMesh, Map_Motion_2_HD_WB_P, ErrStat3, ErrMsg3 ) + if ( HD_u_local%WAMITMesh%Committed ) then + call Transfer_Point_to_Point( HD_MotionMesh, HD_u_local%WAMITMesh, Map_Motion_2_HD_WB_P, ErrStat3, ErrMsg3 ) if (ErrStat3 >= AbortErrLev) return endif ! Morison mesh - if ( u_local%Morison%Mesh%Committed ) then - call Transfer_Point_to_Point( HD_MotionMesh, u_local%Morison%Mesh, Map_Motion_2_HD_Mo_P, ErrStat3, ErrMsg3 ) + if ( HD_u_local%Morison%Mesh%Committed ) then + call Transfer_Point_to_Point( HD_MotionMesh, HD_u_local%Morison%Mesh, Map_Motion_2_HD_Mo_P, ErrStat3, ErrMsg3 ) if (ErrStat3 >= AbortErrLev) return endif end subroutine HD_SetInputMotion @@ -998,9 +1149,9 @@ end subroutine HD_SetInputMotion !! temporary mesh -- prevents accidental overwrite of WAMIT loads on HD_LoadMesh !! with the mapping of the Morison loads. !! This routine is operating on module level data, hence few inputs -subroutine HD_TransferLoads( u_local, y_local, ErrStat3, ErrMsg3 ) - type(HydroDyn_InputType), intent(in ) :: u_local ! Only one input (probably at T) - type(HydroDyn_OutputType), intent(in ) :: y_local ! Only one input (probably at T) +subroutine HD_TransferLoads( HD_u_local, HD_y_local, ErrStat3, ErrMsg3 ) + type(HydroDyn_InputType), intent(in ) :: HD_u_local ! Only one input (probably at T) + type(HydroDyn_OutputType), intent(in ) :: HD_y_local ! Only one input (probably at T) integer(IntKi), intent( out) :: ErrStat3 character(ErrMsgLen), intent( out) :: ErrMsg3 @@ -1008,19 +1159,19 @@ subroutine HD_TransferLoads( u_local, y_local, ErrStat3, ErrMsg3 ) HD_LoadMesh%Moment = 0.0_ReKi ! WAMIT mesh - if ( y_local%WAMITMesh%Committed ) then + if ( HD_y_local%WAMITMesh%Committed ) then HD_LoadMesh_tmp%Force = 0.0_ReKi HD_LoadMesh_tmp%Moment = 0.0_ReKi - call Transfer_Point_to_Point( y_local%WAMITMesh, HD_LoadMesh_tmp, Map_HD_WB_P_2_Load, ErrStat3, ErrMsg3, u_local%WAMITMesh, HD_MotionMesh ) + call Transfer_Point_to_Point( HD_y_local%WAMITMesh, HD_LoadMesh_tmp, Map_HD_WB_P_2_Load, ErrStat3, ErrMsg3, HD_u_local%WAMITMesh, HD_MotionMesh ) if (ErrStat3 >= AbortErrLev) return HD_LoadMesh%Force = HD_LoadMesh%Force + HD_LoadMesh_tmp%Force HD_LoadMesh%Moment = HD_LoadMesh%Moment + HD_LoadMesh_tmp%Moment endif ! Morison mesh - if ( y_local%Morison%Mesh%Committed ) then + if ( HD_y_local%Morison%Mesh%Committed ) then HD_LoadMesh_tmp%Force = 0.0_ReKi HD_LoadMesh_tmp%Moment = 0.0_ReKi - call Transfer_Point_to_Point( y_local%Morison%Mesh, HD_LoadMesh_tmp, Map_HD_Mo_P_2_Load, ErrStat3, ErrMsg3, u_local%Morison%Mesh, HD_MotionMesh ) + call Transfer_Point_to_Point( HD_y_local%Morison%Mesh, HD_LoadMesh_tmp, Map_HD_Mo_P_2_Load, ErrStat3, ErrMsg3, HD_u_local%Morison%Mesh, HD_MotionMesh ) if (ErrStat3 >= AbortErrLev) return HD_LoadMesh%Force = HD_LoadMesh%Force + HD_LoadMesh_tmp%Force HD_LoadMesh%Moment = HD_LoadMesh%Moment + HD_LoadMesh_tmp%Moment diff --git a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 index 926e58e35e..1f5b0f4ba3 100644 --- a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 +++ b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 @@ -22,120 +22,79 @@ PROGRAM HydroDynDriver - USE NWTC_Library - USE HydroDyn - USE HydroDyn_Types - USE HydroDyn_Output - USE ModMesh_Types - USE VersionInfo + USE HydroDynDriverSubs IMPLICIT NONE - - TYPE HD_Drvr_InitInput - LOGICAL :: Echo - REAL(ReKi) :: Gravity - REAL(ReKi) :: WtrDens - REAL(ReKi) :: WtrDpth - REAL(ReKi) :: MSL2SWL - CHARACTER(1024) :: HDInputFile - CHARACTER(1024) :: OutRootName - LOGICAL :: Linearize - INTEGER :: NSteps - REAL(DbKi) :: TimeInterval - INTEGER :: PRPInputsMod - CHARACTER(1024) :: PRPInputsFile - REAL(ReKi) :: uPRPInSteady(6) - REAL(ReKi) :: uDotPRPInSteady(6) - REAL(ReKi) :: uDotDotPRPInSteady(6) - LOGICAL :: WaveElevSeriesFlag !< Should we put together a wave elevation series and save it to file? - REAL(ReKi) :: WaveElevdX !< Spacing in the X direction for wave elevation series (m) - REAL(ReKi) :: WaveElevdY !< Spacing in the Y direction for the wave elevation series (m) - INTEGER(IntKi) :: WaveElevNX !< Number of points in the X direction for the wave elevation series (-) - INTEGER(IntKi) :: WaveElevNY !< Number of points in the X direction for the wave elevation series (-) - END TYPE HD_Drvr_InitInput - -! ----------------------------------------------------------------------------------- -! NOTE: this module and the ModMesh.f90 modules must use the Fortran compiler flag: -! /fpp because of they both have preprocessor statements -! ----------------------------------------------------------------------------------- - - INTEGER(IntKi), PARAMETER :: NumInp = 1 ! Number of inputs sent to HydroDyn_UpdateStates + INTEGER(IntKi), PARAMETER :: NumInp = 1 ! Number of inputs sent to HydroDyn_UpdateStates ! Program variables - REAL(DbKi) :: Time ! Variable for storing time, in seconds + REAL(DbKi) :: Time ! Variable for storing time, in seconds - REAL(DbKi) :: InputTime(NumInp) ! Variable for storing time associated with inputs, in seconds - REAL(DbKi) :: Interval ! HD module requested time interval - INTEGER(B1Ki), ALLOCATABLE :: SaveAry(:) ! Array to store packed data structure + REAL(DbKi) :: InputTime(NumInp) ! Variable for storing time associated with inputs, in seconds + REAL(DbKi) :: Interval ! HD module requested time interval - TYPE(HydroDyn_InitInputType) :: InitInData ! Input data for initialization - TYPE(HydroDyn_InitOutputType) :: InitOutData ! Output data from initialization + type(SeaSt_InitInputType) :: InitInData_SeaSt ! Input data for initialization + type(SeaSt_InitOutputType) :: InitOutData_SeaSt ! Output data from initialization - TYPE(HydroDyn_ContinuousStateType) :: x ! Continuous states - TYPE(HydroDyn_ContinuousStateType) :: x_new ! Continuous states at updated time - TYPE(HydroDyn_DiscreteStateType) :: xd ! Discrete states - TYPE(HydroDyn_DiscreteStateType) :: xd_new ! Discrete states at updated time - TYPE(HydroDyn_ConstraintStateType) :: z ! Constraint states - TYPE(HydroDyn_ConstraintStateType) :: z_residual ! Residual of the constraint state equations (Z) - TYPE(HydroDyn_OtherStateType) :: OtherState ! Other states - TYPE(HydroDyn_MiscVarType) :: m ! Misc/optimization variables + type(SeaSt_ContinuousStateType) :: x_SeaSt ! Continuous states + type(SeaSt_DiscreteStateType) :: xd_SeaSt ! Discrete states + type(SeaSt_ConstraintStateType) :: z_SeaSt ! Constraint states + type(SeaSt_OtherStateType) :: OtherState_SeaSt ! Other states + type(SeaSt_MiscVarType) :: m_SeaSt ! Misc/optimization variables - TYPE(HydroDyn_ParameterType) :: p ! Parameters - !TYPE(HydroDyn_InputType) :: u ! System inputs [OLD STYLE] - TYPE(HydroDyn_InputType) :: u(NumInp) ! System inputs - TYPE(HydroDyn_OutputType) :: y ! System outputs + type(SeaSt_ParameterType) :: p_SeaSt ! Parameters + type(SeaSt_InputType) :: u_SeaSt(NumInp) ! System inputs + type(SeaSt_OutputType) :: y_SeaSt ! System outputs - TYPE(HydroDyn_ContinuousStateType) :: dxdt ! First time derivatives of the continuous states - - INTEGER(IntKi) :: UnPRPInp ! PRP Inputs file identifier - INTEGER(IntKi) :: UnMorisonInp ! Morison Inputs file identifier - INTEGER(IntKi) :: UnHD_Out ! Output file identifier - REAL(ReKi), ALLOCATABLE :: PRPin(:,:) ! Variable for storing time, forces, and body velocities, in m/s or rad/s for PRP - REAL(ReKi), ALLOCATABLE :: Morisonin(:,:) ! Variable for storing time, forces, and body velocities, in m/s or rad/s for Morison elements - - INTEGER(IntKi) :: NBody ! Number of WAMIT bodies to work with if prescribing kinematics on each body (PRPInputsMod<0) - INTEGER(IntKi) :: I ! Generic loop counter - INTEGER(IntKi) :: J ! Generic loop counter + TYPE(HydroDyn_InitInputType) :: InitInData_HD ! Input data for initialization + TYPE(HydroDyn_InitOutputType) :: InitOutData_HD ! Output data from initialization + + TYPE(HydroDyn_ContinuousStateType) :: x ! Continuous states + TYPE(HydroDyn_ContinuousStateType) :: x_new ! Continuous states at updated time + TYPE(HydroDyn_DiscreteStateType) :: xd ! Discrete states + TYPE(HydroDyn_DiscreteStateType) :: xd_new ! Discrete states at updated time + TYPE(HydroDyn_ConstraintStateType) :: z ! Constraint states + TYPE(HydroDyn_OtherStateType) :: OtherState ! Other states + TYPE(HydroDyn_MiscVarType) :: m ! Misc/optimization variables + + TYPE(HydroDyn_ParameterType) :: p ! Parameters + TYPE(HydroDyn_InputType) :: u(NumInp) ! System inputs + TYPE(HydroDyn_OutputType) :: y ! System outputs + INTEGER(IntKi) :: n ! Loop counter (for time step) - INTEGER(IntKi) :: ErrStat,ErrStat2 ! Status of error message - CHARACTER(1024) :: ErrMsg,ErrMsg2 ! Error message if ErrStat /= ErrID_None - REAL(ReKi) :: dcm (3,3) ! The resulting transformation matrix from X to x, (-). + INTEGER(IntKi) :: ErrStat ! Status of error message + CHARACTER(ErrMsgLen) :: ErrMsg ! Error message if ErrStat /= ErrID_None + REAL(R8Ki) :: dcm (3,3) ! The resulting transformation matrix from X to x, (-). CHARACTER(1024) :: drvrFilename ! Filename and path for the driver input file. This is passed in as a command line argument when running the Driver exe. - TYPE(HD_Drvr_InitInput) :: drvrInitInp ! Initialization data for the driver program + TYPE(HD_Drvr_Data) :: drvrData ! Data for the driver program (from an input file) + TYPE(HD_Drvr_MappingData) :: mappingData ! data for mesh mappings in the driver - integer :: StrtTime (8) ! Start time of simulation (including intialization) - integer :: SimStrtTime (8) ! Start time of simulation (after initialization) - real(ReKi) :: PrevClockTime ! Clock time at start of simulation in seconds - real(ReKi) :: UsrTime1 ! User CPU time for simulation initialization - real(ReKi) :: UsrTime2 ! User CPU time for simulation (without intialization) - real(DbKi) :: TiLstPrn ! The simulation time of the last print - real(DbKi) :: t_global ! Current simulation time (for global/FAST simulation) - real(DbKi) :: SttsTime ! Amount of time between screen status messages (sec) - integer :: n_SttsTime ! Number of time steps between screen status messages (-) + integer :: StrtTime (8) ! Start time of simulation (including intialization) + integer :: SimStrtTime (8) ! Start time of simulation (after initialization) + real(ReKi) :: PrevClockTime ! Clock time at start of simulation in seconds + real(ReKi) :: UsrTime1 ! User CPU time for simulation initialization + real(ReKi) :: UsrTime2 ! User CPU time for simulation (without intialization) + real(DbKi) :: TiLstPrn ! The simulation time of the last print + integer :: n_SttsTime ! Number of time steps between screen status messages (-) - type(MeshType) :: RefPtMesh ! 1-node Point mesh located at (0,0,0) in global system where all PRP-related driver inputs are set - type(MeshMapType) :: HD_Ref_2_WB_P ! Mesh mapping between Reference pt mesh and WAMIT body(ies) mesh - type(MeshMapType) :: HD_Ref_2_M_P ! Mesh mapping between Reference pt mesh and Morison mesh - real(R8Ki) :: theta(3) ! mesh creation helper data + + logical :: SeaState_Initialized, HydroDyn_Initialized ! For testing - LOGICAL :: DoTight = .FALSE. REAL(DbKi) :: maxAngle ! For debugging, see what the largest rotational angle input is for the simulation - CHARACTER(10) :: AngleMsg ! For debugging, a string version of the largest rotation input - INTEGER :: UnMeshDebug - CHARACTER(50) :: MeshDebugFile - CHARACTER(20) :: FlagArg ! Flag argument from command line - CHARACTER(200) :: git_commit ! String containing the current git commit hash - - TYPE(ProgDesc), PARAMETER :: version = ProgDesc( 'HydroDyn Driver', '', '' ) ! The version number of this program. + CHARACTER(20) :: FlagArg ! Flag argument from command line ! Variables Init - Time = -99999 + Time = -99999 ! initialize to negative number for error messages + ErrStat = ErrID_None + ErrMsg = "" + SeaState_Initialized = .false. + HydroDyn_Initialized = .false. !............................................................................................................................... ! Routines called in initialization @@ -164,1012 +123,366 @@ PROGRAM HydroDynDriver drvrFilename = '' CALL CheckArgs( drvrFilename, Flag=FlagArg ) IF ( LEN( TRIM(FlagArg) ) > 0 ) CALL NormStop() + + + ! Get the current time + call date_and_time ( Values=StrtTime ) ! Let's time the whole simulation + call cpu_time ( UsrTime1 ) ! Initial time (this zeros the start time when used as a MATLAB function) + ! Display the copyright notice and compile info: CALL DispCopyrightLicense( version%Name ) CALL DispCompileRuntimeInfo( version%Name ) - ! Parse the driver input file and run the simulation based on that file - CALL ReadDriverInputFile( drvrFilename, drvrInitInp, ErrStat, ErrMsg ) - IF ( ErrStat /= 0 ) THEN - CALL WrScr( ErrMsg ) - STOP - END IF - InitInData%Gravity = drvrInitInp%Gravity - InitInData%defWtrDens = drvrInitInp%WtrDens - InitInData%defWtrDpth = drvrInitInp%WtrDpth - InitInData%defMSL2SWL = drvrInitInp%MSL2SWL - InitInData%UseInputFile = .TRUE. - InitInData%InputFile = drvrInitInp%HDInputFile - InitInData%OutRootName = drvrInitInp%OutRootName - InitInData%TMax = drvrInitInp%NSteps * drvrInitInp%TimeInterval - InitInData%Linearize = drvrInitInp%Linearize - - ! Get the current time - call date_and_time ( Values=StrtTime ) ! Let's time the whole simulation - call cpu_time ( UsrTime1 ) ! Initial time (this zeros the start time when used as a MATLAB function) - SttsTime = 1.0 ! seconds - ! figure out how many time steps we should go before writing screen output: - n_SttsTime = MAX( 1, NINT( SttsTime / drvrInitInp%TimeInterval ) ) ! this may not be the final TimeInterval, though!!! GJH 8/14/14 - - !BJJ: added this for IceFloe/IceDyn - InitInData%hasIce = .FALSE. - + ! Parse the driver input file and run the simulation based on that file + CALL ReadDriverInputFile( drvrFilename, drvrData, ErrStat, ErrMsg ) + CALL CheckError() + + ! Read the PRPInputsFile: + CALL ReadPRPInputsFile( drvrData, ErrStat, ErrMsg ) + CALL CheckError() + + drvrData%OutData%NumOuts = 0 + drvrData%OutData%n_Out = 0 + drvrData%TMax = (drvrData%NSteps-1) * drvrData%TimeInterval ! Starting time is always t = 0.0 + + ! figure out how many time steps we should go before writing screen output (roughly once per second): + n_SttsTime = MAX( 1, NINT( 1.0_DbKi / drvrData%TimeInterval ) ) ! this may not be the final TimeInterval, though!!! GJH 8/14/14 + IF ( drvrData%PRPInputsMod < 0 ) THEN + if (drvrData%NSteps < 3) then + ErrStat = ErrID_Fatal + ErrMsg = 'Interpolation requires at least 3 data points in PRPInputsFile when PRPInputsMod < 0.' + CALL CheckError() + end if + END IF !------------------------------------------------------------------------------------- ! Begin Simulation Setup !------------------------------------------------------------------------------------- - + + ! Initialize the SeaState module + InitInData_SeaSt%hasIce = .FALSE. + InitInData_SeaSt%Gravity = drvrData%Gravity + InitInData_SeaSt%defWtrDens = drvrData%WtrDens + InitInData_SeaSt%defWtrDpth = drvrData%WtrDpth + InitInData_SeaSt%defMSL2SWL = drvrData%MSL2SWL + InitInData_SeaSt%UseInputFile = .TRUE. + InitInData_SeaSt%InputFile = drvrData%SeaStateInputFile + InitInData_SeaSt%OutRootName = trim(drvrData%OutRootName)//'.SEA' + InitInData_SeaSt%TMax = drvrData%TMax + InitInData_SeaSt%Linearize = drvrData%Linearize + + Interval = drvrData%TimeInterval + + call SeaSt_Init( InitInData_SeaSt, u_SeaSt(1), p_SeaSt, x_SeaSt, xd_SeaSt, z_SeaSt, OtherState_SeaSt, y_SeaSt, m_SeaSt, Interval, InitOutData_SeaSt, ErrStat, ErrMsg ) + SeaState_Initialized = .true. + CALL CheckError() + + if ( Interval /= drvrData%TimeInterval) then + ErrMsg = 'The SeaState Module attempted to change timestep interval, but this is not allowed. The SeaState Module must use the Driver Interval.' + ErrStat = ErrID_Fatal + call HD_DvrEnd() + end if - IF ( drvrInitInp%PRPInputsMod == 2 ) THEN - - ! Open the PRP inputs data file - CALL GetNewUnit( UnPRPInp ) - CALL OpenFInpFile ( UnPRPInp, drvrInitInp%PRPInputsFile, ErrStat, ErrMsg ) - IF (ErrStat >=AbortErrLev) THEN - call WrScr( ErrMsg ) - STOP - ENDIF - - - ALLOCATE ( PRPin(drvrInitInp%NSteps, 19), STAT = ErrStat ) - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Error allocating space for PRPin array.' - CALL WrScr( ErrMsg ) - CLOSE( UnPRPInp ) - STOP - END IF - - DO n = 1,drvrInitInp%NSteps - READ (UnPRPInp,*,IOSTAT=ErrStat) (PRPin (n,J), J=1,19) - - IF ( ErrStat /= 0 ) THEN - ErrMsg = ' Error reading the PRP input time-series file. ' - CALL WrScr( ErrMsg ) - STOP - END IF - END DO - - ! Close the inputs file - CLOSE ( UnPRPInp ) - END IF - - ! multi-body kinematics driver option (time, PRP DOFs 1-6, body1 DOFs 1-6, body2 DOFs 1-6...) - IF ( drvrInitInp%PRPInputsMod < 0 ) THEN - - NBODY = -drvrInitInp%PRPInputsMod - ! Open the WAMIT inputs data file - CALL GetNewUnit( UnPRPInp ) - CALL OpenFInpFile ( UnPRPInp, drvrInitInp%PRPInputsFile, ErrStat, ErrMsg ) - IF (ErrStat >=AbortErrLev) THEN - call WrScr( ErrMsg ) - STOP - ENDIF - - - ALLOCATE ( PRPin(drvrInitInp%NSteps, 7+6*NBODY), STAT = ErrStat ) - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Error allocating space for PRPin array.' - CALL WrScr( ErrMsg ) - CLOSE( UnPRPInp ) - STOP - END IF - - PRINT *, 'NBody is '//trim(Num2LStr(NBody))//' and planning to read in '//trim(Num2LStr(7+6*NBODY))//' columns from the input file' - - DO n = 1,drvrInitInp%NSteps - READ (UnPRPInp,*,IOSTAT=ErrStat) (PRPin (n,J), J=1,7+6*NBODY) - - IF ( ErrStat /= 0 ) THEN - ErrMsg = ' Error reading the WAMIT input time-series file (for multiple bodies). ' - CALL WrScr( ErrMsg ) - STOP - END IF - END DO - - ! Close the inputs file - CLOSE ( UnPRPInp ) - ELSE - NBody = 0 - END IF - - - ! Setup the arrays for the wave elevation timeseries if requested by the driver input file - IF ( drvrInitInp%WaveElevSeriesFlag ) THEN - ALLOCATE ( InitInData%WaveElevXY(2,drvrInitInp%WaveElevNX*drvrInitInp%WaveElevNY), STAT=ErrStat ) - IF ( ErrStat >= ErrID_Fatal ) THEN - CALL HydroDyn_End( u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) - IF ( ErrStat /= ErrID_None ) THEN - CALL WrScr( ErrMsg ) - END IF - STOP - END IF - - ! Set the values - n = 0 ! Dummy counter we are using to get the current point number - DO I = 0,drvrInitInp%WaveElevNX-1 - DO J = 0, drvrInitInp%WaveElevNY-1 - n = n+1 - ! X dimension - InitInData%WaveElevXY(1,n) = drvrInitInp%WaveElevDX*(I - 0.5*(drvrInitInp%WaveElevNX-1)) - ! Y dimension - InitInData%WaveElevXY(2,n) = drvrInitInp%WaveElevDY*(J - 0.5*(drvrInitInp%WaveElevNY-1)) - ENDDO - ENDDO - ENDIF + ! Set HD Init Inputs based on SeaStates Init Outputs + call SetHD_InitInputs() ! Initialize the module - Interval = drvrInitInp%TimeInterval - CALL HydroDyn_Init( InitInData, u(1), p, x, xd, z, OtherState, y, m, Interval, InitOutData, ErrStat, ErrMsg ) - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if + Interval = drvrData%TimeInterval + CALL HydroDyn_Init( InitInData_HD, u(1), p, x, xd, z, OtherState, y, m, Interval, InitOutData_HD, ErrStat, ErrMsg ) + HydroDyn_Initialized = .true. + CALL CheckError() - IF ( Interval /= drvrInitInp%TimeInterval) THEN - CALL WrScr('The HydroDyn Module attempted to change timestep interval, but this is not allowed. The HydroDyn Module must use the Driver Interval.') - call HD_DvrCleanup() - + IF ( Interval /= drvrData%TimeInterval) THEN + ErrMsg = ' The HydroDyn Module attempted to change timestep interval, but this is not allowed. The HydroDyn Module must use the Driver Interval.' + ErrStat = ErrID_Fatal + call HD_DvrEnd() END IF - ! Write the gridded wave elevation data to a file - - IF ( drvrInitInp%WaveElevSeriesFlag ) CALL WaveElevGrid_Output (drvrInitInp, InitInData, InitOutData, p, ErrStat, ErrMsg) - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if + ! Initialization to concatenate all module data into a single output file + CALL InitOutputFile(InitOutData_HD, InitOutData_SeaSt, drvrData, ErrStat, ErrMsg ); CALL CheckError() - ! Destroy initialization data - - CALL HydroDyn_DestroyInitInput( InitInData, ErrStat, ErrMsg ) - CALL HydroDyn_DestroyInitOutput( InitOutData, ErrStat, ErrMsg ) + ! Destroy InitInput and InitOutput data (and nullify pointers to SeaState data) + CALL SeaSt_DestroyInitInput( InitInData_SeaSt, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ); CALL CheckError() + CALL SeaSt_DestroyInitOutput( InitOutData_SeaSt, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ); CALL CheckError() + CALL HydroDyn_DestroyInitInput( InitInData_HD, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ); CALL CheckError() + CALL HydroDyn_DestroyInitOutput( InitOutData_HD, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ); CALL CheckError() + - ! Create Mesh mappings if ( u(1)%WAMITMesh%Initialized ) then ! Create mesh mappings between (0,0,0) reference point mesh and the WAMIT body(ies) mesh [ 1 node per body ] - CALL MeshMapCreate( u(1)%PRPMesh, u(1)%WAMITMesh, HD_Ref_2_WB_P, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'HydroDynDriver') - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if + CALL MeshMapCreate( u(1)%PRPMesh, u(1)%WAMITMesh, mappingData%HD_Ref_2_WB_P, ErrStat, ErrMsg ); CALL CheckError() endif if ( u(1)%Morison%Mesh%Initialized ) then ! Create mesh mappings between (0,0,0) reference point mesh and the Morison mesh - CALL MeshMapCreate( u(1)%PRPMesh, u(1)%Morison%Mesh, HD_Ref_2_M_P, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'HydroDynDriver') - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if + CALL MeshMapCreate( u(1)%PRPMesh, u(1)%Morison%Mesh, mappingData%HD_Ref_2_M_P, ErrStat, ErrMsg ); CALL CheckError() endif + ! validate data from HD + IF ( drvrData%PRPInputsMod < 0 ) THEN + if (drvrData%NBody /= u(1)%WAMITMesh%NNodes) then + ErrStat = ErrID_Fatal + ErrMsg = 'PRPInputsFile must contain data for '//trim(num2lstr(u(1)%WAMITMesh%NNodes))//' WAMIT nodes as well as PRPmesh when PRPInputsMod < 0.' + CALL CheckError() + end if + END IF - - ! Set any steady-state inputs, once before the time-stepping loop - - IF (( drvrInitInp%PRPInputsMod /= 2 ) .AND. ( drvrInitInp%PRPInputsMod >= 0 )) THEN - - u(1)%PRPMesh%TranslationDisp(:,1) = drvrInitInp%uPRPInSteady(1:3) + + ! Set any steady-state inputs, once before the time-stepping loop (these don't change, so we don't need to update them in the time-marching simulation) + CALL SetHDInputs_Constant(u(1), mappingData, drvrData, ErrStat, ErrMsg); CALL CheckError() - ! Compute direction cosine matrix from the rotation angles - CALL SmllRotTrans( 'InputRotation', REAL(drvrInitInp%uPRPInSteady(4), ReKi), REAL(drvrInitInp%uPRPInSteady(5), ReKi), REAL(drvrInitInp%uPRPInSteady(6), ReKi), dcm, 'Junk', ErrStat, ErrMsg ) - u(1)%PRPMesh%Orientation(:,:,1) = dcm + !............................................................................................................................... + ! --- Linearization + !............................................................................................................................... + if (drvrData%Linearize) then + ! --- Creating useful EDRPtMesh - u(1)%PRPMesh%TranslationVel(:,1) = drvrInitInp%uDotPRPInSteady(1:3) - u(1)%PRPMesh%RotationVel(:,1) = drvrInitInp%uDotPRPInSteady(4:6) - u(1)%PRPMesh%TranslationAcc(:,1) = drvrInitInp%uDotDotPRPInSteady(1:3) - u(1)%PRPMesh%RotationAcc(:,1) = drvrInitInp%uDotDotPRPInSteady(4:6) - - IF ( u(1)%WAMITMesh%Initialized ) THEN - - ! Map PRP kinematics to the WAMIT mesh with 1 to NBody nodes - CALL Transfer_Point_to_Point( u(1)%PRPMesh, u(1)%WAMITMesh, HD_Ref_2_WB_P, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'HydroDynDriver') - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if - - END IF ! u(1)%WAMITMesh%Initialized - - if ( u(1)%Morison%Mesh%Initialized ) then - - ! Map PRP kinematics to the Morison mesh - CALL Transfer_Point_to_Point( u(1)%PRPMesh, u(1)%Morison%Mesh, HD_Ref_2_M_P, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'HydroDynDriver') - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if - end if ! u(1)%Morison%Mesh%Initialized + call Eye(dcm, ErrStat, ErrMsg ); CALL CheckError() + call CreatePointMesh(mappingData%EDRPt_Loads, (/0.0_ReKi, 0.0_ReKi, drvrData%PtfmRefzt/), dcm, HasMotion=.false., HasLoads=.true., ErrStat=ErrStat, ErrMsg=ErrMsg ); CALL CheckError() + call CreatePointMesh(mappingData%EDRPt_Motion, (/0.0_ReKi, 0.0_ReKi, drvrData%PtfmRefzt/), dcm, HasMotion=.true., HasLoads=.false., ErrStat=ErrStat, ErrMsg=ErrMsg ); CALL CheckError() + call CreatePointMesh(mappingData%ZZZPtMeshMotion, (/0.0_ReKi, 0.0_ReKi, 0.0_ReKi /), dcm, HasMotion=.true., HasLoads=.false., ErrStat=ErrStat, ErrMsg=ErrMsg ); CALL CheckError() + call CreatePointMesh(mappingData%ZZZPtMeshLoads , (/0.0_ReKi, 0.0_ReKi, 0.0_ReKi /), dcm, HasMotion=.false., HasLoads=.true., ErrStat=ErrStat, ErrMsg=ErrMsg ); CALL CheckError() + + CALL MeshMapCreate( u(1)%PRPMesh, mappingData%EDRPt_Motion, mappingData%HD_Ref_2_ED_Ref, ErrStat, ErrMsg ); CALL CheckError() + CALL MeshMapCreate( mappingData%EDRPt_Motion, u(1)%PRPMesh, mappingData%ED_Ref_2_HD_Ref, ErrStat, ErrMsg ); CALL CheckError() - END IF + CALL MeshMapCreate( m%AllHdroOrigin, mappingData%EDRPt_Loads, mappingData%HD_RefLoads_2_ED_Ref, ErrStat, ErrMsg ); CALL CheckError() + CALL MeshMapCreate( m%AllHdroOrigin, mappingData%ZZZPtMeshLoads, mappingData%HD_RefLoads_2_ZZZLoads,ErrStat, ErrMsg ); CALL CheckError() + + endif - !............................................................................................................................... ! Routines called in loose coupling -- the glue code may implement this in various ways !............................................................................................................................... Time = 0.0 - CALL SimStatus_FirstTime( TiLstPrn, PrevClockTime, SimStrtTime, UsrTime2, time, InitInData%TMax ) + CALL SimStatus_FirstTime( TiLstPrn, PrevClockTime, SimStrtTime, UsrTime2, Time, drvrData%TMax ) ! loop through time steps maxAngle = 0.0 - - DO n = 1, drvrInitInp%NSteps + mappingData%Ind = 1 ! initialize - Time = (n-1) * drvrInitInp%TimeInterval - InputTime(1) = Time + DO n = 1, drvrData%NSteps + Time = (n-1) * drvrData%TimeInterval + InputTime(1) = Time + ! Modify u (likely from the outputs of another module or a set of test conditions) here: + call SetHDInputs(Time, n, u(1), mappingData, drvrData, ErrStat, ErrMsg); CALL CheckError() + ! SeaState has no inputs, so no need to set them. - ! PRPInputsMod 2: Reads time series of positions, velocities, and accelerations for the platform reference point - IF ( drvrInitInp%PRPInputsMod == 2 ) THEN - - u(1)%PRPMesh%TranslationDisp(:,1) = PRPin(n,2:4) - - ! Compute direction cosine matrix from the rotation angles - - IF ( abs(PRPin(n,5)) > maxAngle ) maxAngle = abs(PRPin(n,5)) - IF ( abs(PRPin(n,6)) > maxAngle ) maxAngle = abs(PRPin(n,6)) - IF ( abs(PRPin(n,7)) > maxAngle ) maxAngle = abs(PRPin(n,7)) - - CALL SmllRotTrans( 'InputRotation', REAL(PRPin(n,5),ReKi), REAL(PRPin(n,6),ReKi), REAL(PRPin(n,7),ReKi), dcm, 'Junk', ErrStat, ErrMsg ) - u(1)%PRPMesh%Orientation(:,:,1) = dcm - u(1)%PRPMesh%TranslationVel(:,1) = PRPin(n,8:10) - u(1)%PRPMesh%RotationVel(:,1) = PRPin(n,11:13) - u(1)%PRPMesh%TranslationAcc(:,1) = PRPin(n,14:16) - u(1)%PRPMesh%RotationAcc(:,1) = PRPin(n,17:19) - - IF ( u(1)%WAMITMesh%Initialized ) THEN - ! Map kinematics to the WAMIT mesh with 1 to NBody nodes - CALL Transfer_Point_to_Point( u(1)%PRPMesh, u(1)%WAMITMesh, HD_Ref_2_WB_P, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'HydroDynDriver') - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if - END IF + + if (n==1 .and. drvrData%Linearize) then + ! we set u(1)%PRPMesh motions, so we should assume that EDRP changed similarly: + call Transfer_Point_to_Point( u(1)%PRPMesh, mappingData%EDRPt_Motion, mappingData%HD_Ref_2_ED_Ref, ErrStat, ErrMsg); CALL CheckError() - IF ( u(1)%Morison%Mesh%Initialized ) THEN - ! Map kinematics to the WAMIT mesh with 1 to NBody nodes - CALL Transfer_Point_to_Point( u(1)%PRPMesh, u(1)%Morison%Mesh, HD_Ref_2_M_P, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'HydroDynDriver') - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if - END IF - - end if + !call MeshPrintInfo ( 21, mappingData%EDRPt_Motion) + !call MeshPrintInfo ( 22, u(1)%PRPMesh) - !@mhall: new kinematics input for moving bodies individually - ! PRPInputsMod < 0: Reads time series of positions for each body individually, and uses finite differences to also get velocities and accelerations. - ! The number of bodies is the negative of PRPInputsMod. - IF ( drvrInitInp%PRPInputsMod < 0 ) THEN - - ! platform reference point (PRP), and body 1-NBody displacements - u(1)%PRPMesh%TranslationDisp(:,1) = PRPin(n,2:4) - DO I=1,NBody - u(1)%WAMITMesh%TranslationDisp(:,I) = PRPin(n, 6*I+2:6*I+4) - END DO - - ! PRP and body 1-NBody orientations (skipping the maxAngle stuff) - CALL SmllRotTrans( 'InputRotation', REAL(PRPin(n,5),ReKi), REAL(PRPin(n,6),ReKi), REAL(PRPin(n,7),ReKi), dcm, 'PRP orientation', ErrStat, ErrMsg ) - u(1)%PRPMesh%Orientation(:,:,1) = dcm - DO I=1, NBody - CALL SmllRotTrans( 'InputRotation', REAL(PRPin(n,6*I+5),ReKi), REAL(PRPin(n,6*I+6),ReKi), REAL(PRPin(n,6*I+7),ReKi), dcm, 'body orientation', ErrStat, ErrMsg ) - u(1)%PRPMesh%Orientation(:,:,1) = dcm - END DO - - ! use finite differences for velocities and accelerations - IF (n == 1) THEN ! use forward differences for first time step - - u(1)%PRPMesh%TranslationVel(:,1) = (PRPin(n+1, 2:4) - PRPin(n , 2:4))/drvrInitInp%TimeInterval - u(1)%PRPMesh%RotationVel( :,1) = (PRPin(n+1, 5:7) - PRPin(n , 5:7))/drvrInitInp%TimeInterval - u(1)%PRPMesh%TranslationAcc(:,1) = (PRPin(n+2, 2:4) - 2*PRPin(n+1, 2:4) + PRPin(n, 2:4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - u(1)%PRPMesh%RotationAcc( :,1) = (PRPin(n+2, 5:7) - 2*PRPin(n+1, 5:7) + PRPin(n, 5:7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - - DO I=1,NBody - u(1)%WAMITMesh%TranslationVel(:,I) = (PRPin(n+1, 6*I+2:6*I+4) - PRPin(n , 6*I+2:6*I+4))/drvrInitInp%TimeInterval - u(1)%WAMITMesh%RotationVel( :,I) = (PRPin(n+1, 6*I+5:6*I+7) - PRPin(n , 6*I+5:6*I+7))/drvrInitInp%TimeInterval - u(1)%WAMITMesh%TranslationAcc(:,I) = (PRPin(n+2, 6*I+2:6*I+4) - 2*PRPin(n+1, 6*I+2:6*I+4) + PRPin(n, 6*I+2:6*I+4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - u(1)%WAMITMesh%RotationAcc( :,I) = (PRPin(n+2, 6*I+5:6*I+7) - 2*PRPin(n+1, 6*I+5:6*I+7) + PRPin(n, 6*I+5:6*I+7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - END DO - - ELSE IF (n == drvrInitInp%NSteps) THEN ! use backward differences for last time step - - u(1)%PRPMesh%TranslationVel(:,1) = (PRPin(n, 2:4) - PRPin(n-1, 2:4))/drvrInitInp%TimeInterval - u(1)%PRPMesh%RotationVel( :,1) = (PRPin(n, 5:7) - PRPin(n-1, 5:7))/drvrInitInp%TimeInterval - u(1)%PRPMesh%TranslationAcc(:,1) = (PRPin(n, 2:4) - 2*PRPin(n-1, 2:4) + PRPin(n-2, 2:4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - u(1)%PRPMesh%RotationAcc( :,1) = (PRPin(n, 5:7) - 2*PRPin(n-1, 5:7) + PRPin(n-2, 5:7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - - DO I=1,NBody - u(1)%WAMITMesh%TranslationVel(:,I) = (PRPin(n, 6*I+2:6*I+4) - PRPin(n-1, 6*I+2:6*I+4))/drvrInitInp%TimeInterval - u(1)%WAMITMesh%RotationVel( :,I) = (PRPin(n, 6*I+5:6*I+7) - PRPin(n-1, 6*I+5:6*I+7))/drvrInitInp%TimeInterval - u(1)%WAMITMesh%TranslationAcc(:,I) = (PRPin(n, 6*I+2:6*I+4) - 2*PRPin(n-1, 6*I+2:6*I+4) + PRPin(n-2, 6*I+2:6*I+4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - u(1)%WAMITMesh%RotationAcc( :,I) = (PRPin(n, 6*I+5:6*I+7) - 2*PRPin(n-1, 6*I+5:6*I+7) + PRPin(n-2, 6*I+5:6*I+7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - END DO - - ELSE ! otherwise use central differences for intermediate time steps - - u(1)%PRPMesh%TranslationVel(:,1) = (PRPin(n+1, 2:4) - PRPin(n-1, 2:4))*0.5/drvrInitInp%TimeInterval - u(1)%PRPMesh%RotationVel( :,1) = (PRPin(n+1, 5:7) - PRPin(n-1, 5:7))*0.5/drvrInitInp%TimeInterval - u(1)%PRPMesh%TranslationAcc(:,1) = (PRPin(n+1, 2:4) - 2*PRPin(n, 2:4) + PRPin(n-1, 2:4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - u(1)%PRPMesh%RotationAcc( :,1) = (PRPin(n+1, 5:7) - 2*PRPin(n, 5:7) + PRPin(n-1, 5:7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - - DO I=1,NBody - u(1)%WAMITMesh%TranslationVel(:,I) = (PRPin(n+1, 6*I+2:6*I+4) - PRPin(n-1, 6*I+2:6*I+4))*0.5/drvrInitInp%TimeInterval - u(1)%WAMITMesh%RotationVel( :,I) = (PRPin(n+1, 6*I+5:6*I+7) - PRPin(n-1, 6*I+5:6*I+7))*0.5/drvrInitInp%TimeInterval - u(1)%WAMITMesh%TranslationAcc(:,I) = (PRPin(n+1, 6*I+2:6*I+4) - 2*PRPin(n, 6*I+2:6*I+4) + PRPin(n-1, 6*I+2:6*I+4))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - u(1)%WAMITMesh%RotationAcc( :,I) = (PRPin(n+1, 6*I+5:6*I+7) - 2*PRPin(n, 6*I+5:6*I+7) + PRPin(n-1, 6*I+5:6*I+7))/(drvrInitInp%TimeInterval*drvrInitInp%TimeInterval) - END DO - - END IF - - IF ( u(1)%Morison%Mesh%Initialized ) THEN - ! Map kinematics to the WAMIT mesh with 1 to NBody nodes - CALL Transfer_Point_to_Point( u(1)%PRPMesh, u(1)%Morison%Mesh, HD_Ref_2_M_P, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'HydroDynDriver') - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if - END IF - - END IF - !@mhall: end of addition - + call Linearization(Time, u(1), p, x, xd, z, OtherState, y, m, .true., mappingData, ErrStat, ErrMsg); CALL CheckError() + call Linearization(Time, u(1), p, x, xd, z, OtherState, y, m, .false., mappingData, ErrStat, ErrMsg); CALL CheckError() + end if - ! Calculate outputs at n - CALL HydroDyn_CalcOutput( Time, u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if - + call SeaSt_CalcOutput( Time, u_SeaSt(1), p_SeaSt, x_SeaSt, xd_SeaSt, z_SeaSt, OtherState_SeaSt, y_SeaSt, m_SeaSt, ErrStat, ErrMsg ); CALL CheckError() + CALL HydroDyn_CalcOutput( Time, u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ); CALL CheckError() + + ! Write output to a file which is managed by the driver program and not the individual modules + CALL FillOutputFile(Time, y_SeaSt, y, drvrData, ErrStat, ErrMsg); CALL CheckError() + ! Get state variables at next step: INPUT at step n, OUTPUT at step n + 1 - CALL HydroDyn_UpdateStates( Time, n, u, InputTime, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) - if (errStat >= AbortErrLev) then - ! Clean up and exit - call HD_DvrCleanup() - end if + CALL HydroDyn_UpdateStates( Time, n, u, InputTime, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ); CALL CheckError() IF ( MOD( n + 1, n_SttsTime ) == 0 ) THEN - - CALL SimStatus( TiLstPrn, PrevClockTime, time, InitInData%TMax ) - + CALL SimStatus( TiLstPrn, PrevClockTime, time, drvrData%TMax ) ENDIF - ! Write output to a file which is managed by the driver program and not the individual modules - ! TODO - END DO - - -! For now, finish here. -call HD_DvrCleanup() - - + ! For now, finish here. + call HD_DvrEnd() - CONTAINS +CONTAINS +!---------------------------------------------------------------------------------------------------------------------------------- +subroutine SetHD_InitInputs() + + InitInData_HD%Gravity = drvrData%Gravity + InitInData_HD%UseInputFile = .TRUE. + InitInData_HD%InputFile = drvrData%HDInputFile + InitInData_HD%OutRootName = trim(drvrData%OutRootName)//'.HD' + InitInData_HD%TMax = drvrData%TMax + InitInData_HD%Linearize = drvrData%Linearize + + ! Data from InitOutData_SeaSt: + InitInData_HD%WtrDens = InitOutData_SeaSt%WtrDens + InitInData_HD%WtrDpth = InitOutData_SeaSt%WtrDpth + InitInData_HD%MSL2SWL = InitOutData_SeaSt%MSL2SWL + InitInData_HD%NStepWave = InitOutData_SeaSt%NStepWave + InitInData_HD%NStepWave2 = InitOutData_SeaSt%NStepWave2 + InitInData_HD%RhoXg = InitOutData_SeaSt%RhoXg + InitInData_HD%WaveMod = InitOutData_SeaSt%WaveMod + InitInData_HD%WaveStMod = InitOutData_SeaSt%WaveStMod + InitInData_HD%WaveDirMod = InitOutData_SeaSt%WaveDirMod + InitInData_HD%WvLowCOff = InitOutData_SeaSt%WvLowCOff + InitInData_HD%WvHiCOff = InitOutData_SeaSt%WvHiCOff + InitInData_HD%WvLowCOffD = InitOutData_SeaSt%WvLowCOffD + InitInData_HD%WvHiCOffD = InitOutData_SeaSt%WvHiCOffD + InitInData_HD%WvLowCOffS = InitOutData_SeaSt%WvLowCOffS + InitInData_HD%WvHiCOffS = InitOutData_SeaSt%WvHiCOffS + + InitInData_HD%InvalidWithSSExctn = InitOutData_SeaSt%InvalidWithSSExctn + + InitInData_HD%WaveDirMin = InitOutData_SeaSt%WaveDirMin + InitInData_HD%WaveDirMax = InitOutData_SeaSt%WaveDirMax + InitInData_HD%WaveDir = InitOutData_SeaSt%WaveDir + InitInData_HD%WaveMultiDir = InitOutData_SeaSt%WaveMultiDir + InitInData_HD%WaveDOmega = InitOutData_SeaSt%WaveDOmega + InitInData_HD%MCFD = InitOutData_SeaSt%MCFD + !InitInData_HD%WaveElev0 => InitOutData_SeaSt%WaveElev0 + CALL MOVE_ALLOC( InitOutData_SeaSt%WaveElev0, InitInData_HD%WaveElev0 ) + InitInData_HD%WaveTime => InitOutData_SeaSt%WaveTime + InitInData_HD%WaveDynP => InitOutData_SeaSt%WaveDynP + InitInData_HD%WaveAcc => InitOutData_SeaSt%WaveAcc + InitInData_HD%WaveVel => InitOutData_SeaSt%WaveVel + + InitInData_HD%PWaveDynP0 => InitOutData_SeaSt%PWaveDynP0 + InitInData_HD%PWaveAcc0 => InitOutData_SeaSt%PWaveAcc0 + InitInData_HD%PWaveVel0 => InitOutData_SeaSt%PWaveVel0 + + InitInData_HD%WaveAccMCF => InitOutData_SeaSt%WaveAccMCF + InitInData_HD%PWaveAccMCF0 => InitOutData_SeaSt%PWaveAccMCF0 + + InitInData_HD%WaveElevC0 => InitOutData_SeaSt%WaveElevC0 + CALL MOVE_ALLOC( InitOutData_SeaSt%WaveElevC, InitInData_HD%WaveElevC ) + InitInData_HD%WaveDirArr => InitOutData_SeaSt%WaveDirArr + InitInData_HD%WaveElev1 => InitOutData_SeaSt%WaveElev1 + InitInData_HD%WaveElev2 => InitOutData_SeaSt%WaveElev2 + + call SeaSt_Interp_CopyParam(InitOutData_SeaSt%SeaSt_Interp_p, InitInData_HD%SeaSt_Interp_p, MESH_NEWCOPY, ErrStat, ErrMsg ); CALL CheckError() + + +end subroutine SetHD_InitInputs +!---------------------------------------------------------------------------------------------------------------------------------- +subroutine CheckError() - -!==================================================================================================== -SUBROUTINE CleanupEchoFile( EchoFlag, UnEcho) -! The routine cleans up the module echo file and resets the NWTC_Library, reattaching it to -! any existing echo information -!---------------------------------------------------------------------------------------------------- - LOGICAL, INTENT( IN ) :: EchoFlag ! local version of echo flag - INTEGER, INTENT( IN ) :: UnEcho ! echo unit number + IF ( ErrStat /= ErrID_None) THEN - - ! Close this module's echo file + IF ( ErrStat >= AbortErrLev ) THEN + CALL HD_DvrEnd() + END IF - IF ( EchoFlag ) THEN - CLOSE(UnEcho) + CALL WrScr( NewLine//TRIM(ErrMsg)//NewLine ) + ErrStat = ErrID_None END IF - - - -END SUBROUTINE CleanupEchoFile -subroutine HD_DvrCleanup() +end subroutine CheckError +!---------------------------------------------------------------------------------------------------------------------------------- +subroutine HD_DvrEnd() ! Local variables - character(len(errMsg)) :: errMsg2 ! temporary Error message if ErrStat /= ErrID_None - integer(IntKi) :: errStat2 ! temporary Error status of the operation - + character(*), parameter :: RoutineName = 'HD_DvrEnd' + INTEGER(IntKi) :: ErrStat2 ! Status of error message + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None - errStat2 = ErrID_None - errMsg2 = "" + call WriteOutputFile(drvrData, ErrStat2, ErrMsg2) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if (drvrData%OutData%unOutFile > 0) CLOSE(drvrData%OutData%unOutFile) - - call HydroDyn_DestroyInitInput( InitInData, errStat2, errMsg2 ) - call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'HD_DvrCleanup' ) - call HydroDyn_DestroyDiscState( xd_new, errStat2, errMsg2 ) - call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'HD_DvrCleanup' ) - call HydroDyn_DestroyContState( x_new, errStat2, errMsg2 ) - call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'HD_DvrCleanup' ) - call HydroDyn_End( u(1), p, x, xd, z, OtherState, y, m, errStat2, errMsg2 ) - call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'HD_DvrCleanup' ) - - if ( ErrStat /= ErrID_None ) then !This assumes PRESENT(ErrID) is also .TRUE. : - CALL WrScr(NewLine//NewLine//'Error status and messages after execution:'//NewLine//' ErrStat: '// & - TRIM(Num2LStr(ErrStat))//NewLine//' ErrMsg returned: '//TRIM(ErrMsg)//NewLine) - if ( time < 0.0 ) then - ErrMsg = 'at initialization' - else if ( time > InitInData%TMax ) then - ErrMsg = 'after computing the solution' - else - ErrMsg = 'at simulation time '//trim(Num2LStr(time))//' of '//trim(Num2LStr(InitInData%TMax))//' seconds' - end if - - - CALL ProgAbort( 'HydroDyn encountered an error '//trim(errMsg)//'.'//NewLine//' Simulation error level: '& - //trim(GetErrStr(errStat)), TrapErrors=.FALSE., TimeWait=3._ReKi ) ! wait 3 seconds (in case they double-clicked and got an error) + if (SeaState_Initialized) then + call SeaSt_End( u_SeaSt(1), p_SeaSt, x_SeaSt, xd_SeaSt, z_SeaSt, OtherState_SeaSt, y_SeaSt, m_SeaSt, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) end if - ! Print *, time - call RunTimes( StrtTime, REAL(UsrTime1,ReKi), SimStrtTime, REAL(UsrTime2,ReKi), time ) - call NormStop() - -end subroutine HD_DvrCleanup - - -SUBROUTINE ReadDriverInputFile( inputFile, InitInp, ErrStat, ErrMsg ) - - CHARACTER(1024), INTENT( IN ) :: inputFile - TYPE(HD_Drvr_InitInput), INTENT( OUT ) :: InitInp - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables + if (HydroDyn_Initialized) then + call HydroDyn_End( u(1), p, x, xd, z, OtherState, y, m, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + end if - INTEGER :: I ! generic integer for counting - INTEGER :: J ! generic integer for counting - CHARACTER( 2) :: strI ! string version of the loop counter - - INTEGER :: UnIn ! Unit number for the input file - INTEGER :: UnEchoLocal ! The local unit number for this module's echo file - CHARACTER(1024) :: EchoFile ! Name of HydroDyn echo file - CHARACTER(1024) :: Line ! String to temporarially hold value of read line - CHARACTER(1024) :: TmpPath ! Temporary storage for relative path name - CHARACTER(1024) :: TmpFmt ! Temporary storage for format statement - CHARACTER(1024) :: FileName ! Name of HydroDyn input file - - REAL(ReKi) :: TmpRealVar2(2) !< Temporary real array size 2 - INTEGER(IntKi) :: TmpIntVar2(2) !< Temporary integer array size 2 - - - - ! Initialize the echo file unit to -1 which is the default to prevent echoing, we will alter this based on user input - UnEchoLocal = -1 - - FileName = TRIM(inputFile) - - CALL GetNewUnit( UnIn ) - CALL OpenFInpFile ( UnIn, FileName, ErrStat, ErrMsg ) - IF (ErrStat >=AbortErrLev) THEN - call WrScr( ErrMsg ) - STOP - ENDIF - - - CALL WrScr( 'Opening HydroDyn Driver input file: '//FileName ) - - - !------------------------------------------------------------------------------------------------- - ! File header - !------------------------------------------------------------------------------------------------- - - CALL ReadCom( UnIn, FileName, 'HydroDyn Driver input file header line 1', ErrStat, ErrMsg ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrStat = ErrID_Fatal - CLOSE( UnIn ) - RETURN - END IF - - - CALL ReadCom( UnIn, FileName, 'HydroDyn Driver input file header line 2', ErrStat, ErrMsg ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrStat = ErrID_Fatal - CLOSE( UnIn ) - RETURN - END IF - - - ! Echo Input Files. - - CALL ReadVar ( UnIn, FileName, InitInp%Echo, 'Echo', 'Echo Input', ErrStat, ErrMsg ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrStat = ErrID_Fatal - CLOSE( UnIn ) - RETURN - END IF - - - ! If we are Echoing the input then we should re-read the first three lines so that we can echo them - ! using the NWTC_Library routines. The echoing is done inside those routines via a global variable - ! which we must store, set, and then replace on error or completion. - - IF ( InitInp%Echo ) THEN - - EchoFile = TRIM(FileName)//'.ech' - CALL GetNewUnit( UnEchoLocal ) - CALL OpenEcho ( UnEchoLocal, EchoFile, ErrStat, ErrMsg ) - IF ( ErrStat /= ErrID_None ) THEN - !ErrMsg = ' Failed to open Echo file.' - ErrStat = ErrID_Fatal - CLOSE( UnIn ) - RETURN - END IF - - REWIND(UnIn) - - CALL ReadCom( UnIn, FileName, 'HydroDyn Driver input file header line 1', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read HydroDyn Driver input file header line 1.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - CALL ReadCom( UnIn, FileName, 'HydroDyn Driver input file header line 2', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read HydroDyn Driver input file header line 2.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - ! Echo Input Files. Note this line is prevented from being echoed by the ReadVar routine. - - CALL ReadVar ( UnIn, FileName, InitInp%Echo, 'Echo', 'Echo the input file data', ErrStat, ErrMsg, UnEchoLocal ) - !WRITE (UnEchoLocal,Frmt ) InitInp%Echo, 'Echo', 'Echo input file' - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read Echo parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - END IF - !------------------------------------------------------------------------------------------------- - ! Environmental conditions section - !------------------------------------------------------------------------------------------------- - - ! Header - - CALL ReadCom( UnIn, FileName, 'Environmental conditions header', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read Comment line.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - ! Gravity - Gravity. - - CALL ReadVar ( UnIn, FileName, InitInp%Gravity, 'Gravity', 'Gravity', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read Gravity parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - ! WtrDens - Water density. - - CALL ReadVar ( UnIn, FileName, InitInp%WtrDens, 'WtrDens', 'Water density', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read WtrDens parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - ! WtrDpth - Water depth. - - CALL ReadVar ( UnIn, FileName, InitInp%WtrDpth, 'WtrDpth', 'Water depth', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read WtrDpth parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - ! MSL2SWL - Offset between still-water level and mean sea level. - - CALL ReadVar ( UnIn, FileName, InitInp%MSL2SWL, 'MSL2SWL', 'Offset between still-water level and mean sea level', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read MSL2SWL parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - !------------------------------------------------------------------------------------------------- - ! HYDRODYN section - !------------------------------------------------------------------------------------------------- - - ! Header - - CALL ReadCom( UnIn, FileName, 'HYDRODYN header', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read Comment line.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - ! HDInputFile - - CALL ReadVar ( UnIn, FileName, InitInp%HDInputFile, 'HDInputFile', & - 'HydroDyn input filename', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read HDInputFile parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - ! OutRootName - - CALL ReadVar ( UnIn, FileName, InitInp%OutRootName, 'OutRootName', & - 'HydroDyn output root filename', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read OutRootName parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - ! Linearize - - CALL ReadVar ( UnIn, FileName, InitInp%Linearize, 'Linearize', & - 'Linearize parameter', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read Linearize parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - ! NSteps - - CALL ReadVar ( UnIn, FileName, InitInp%NSteps, 'NSteps', & - 'Number of time steps in the HydroDyn simulation', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read NSteps parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - ! TimeInterval - - CALL ReadVar ( UnIn, FileName, InitInp%TimeInterval, 'TimeInterval', & - 'Time interval for any HydroDyn inputs', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read TimeInterval parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - !------------------------------------------------------------------------------------------------- - ! PRP INPUTS section - !------------------------------------------------------------------------------------------------- - - ! Header - - CALL ReadCom( UnIn, FileName, 'PRP INPUTS header', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read Comment line.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - - ! PRPInputsMod - - CALL ReadVar ( UnIn, FileName, InitInp%PRPInputsMod, 'PRPInputsMod', & - 'Model for the PRP (principal reference point) inputs', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read PRPInputsMod parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - ! PRPInputsFile - - CALL ReadVar ( UnIn, FileName, InitInp%PRPInputsFile, 'PRPInputsFile', & - 'Filename for the PRP HydroDyn inputs', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read PRPInputsFile parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - !------------------------------------------------------------------------------------------------- - ! PRP STEADY STATE INPUTS section - !------------------------------------------------------------------------------------------------- - - ! Header + ! Destroy Initialization data + CALL SeaSt_DestroyInitOutput( InitOutData_SeaSt, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL SeaSt_DestroyInitInput( InitInData_SeaSt, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL HydroDyn_DestroyInitInput( InitInData_HD, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL HydroDyn_DestroyInitOutput( InitOutData_HD, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + + ! Destroy copies of HD data + call HydroDyn_DestroyDiscState( xd_new, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) - CALL ReadCom( UnIn, FileName, 'PRP STEADY STATE INPUTS header', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read Comment line.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - - ! uPRPInSteady + call HydroDyn_DestroyContState( x_new, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) - CALL ReadAry ( UnIn, FileName, InitInp%uPRPInSteady, 6, 'uPRPInSteady', & - 'PRP Steady-state displacements and rotations.', ErrStat, ErrMsg, UnEchoLocal) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read uPRPInSteady parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - ! uDotPRPInSteady - CALL ReadAry ( UnIn, FileName, InitInp%uDotPRPInSteady, 6, 'uDotPRPInSteady', & - 'PRP Steady-state translational and rotational velocities.', ErrStat, ErrMsg, UnEchoLocal) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read uDotPRPInSteady parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - ! uDotDotPRPInSteady + ! Destroy other data + IF (ALLOCATED(drvrData%PRPin)) DEALLOCATE(drvrData%PRPin) + IF (ALLOCATED(drvrData%PRPinTime)) DEALLOCATE(drvrData%PRPinTime) + + IF (ALLOCATED(drvrData%OutData%WriteOutputHdr)) DEALLOCATE(drvrData%OutData%WriteOutputHdr) + IF (ALLOCATED(drvrData%OutData%WriteOutputUnt)) DEALLOCATE(drvrData%OutData%WriteOutputUnt) + IF (ALLOCATED(drvrData%OutData%Storage )) DEALLOCATE(drvrData%OutData%Storage ) + + ! Destroy mappings + CALL MeshMapDestroy( mappingData%HD_Ref_2_WB_P, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL MeshMapDestroy( mappingData%HD_Ref_2_M_P, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) - CALL ReadAry ( UnIn, FileName, InitInp%uDotDotPRPInSteady, 6, 'uDotDotPRPInSteady', & - 'PRP Steady-state translational and rotational accelerations.', ErrStat, ErrMsg, UnEchoLocal) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read uDotDotPRPInSteady parameter.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - IF ( InitInp%PRPInputsMod /= 1 ) THEN - InitInp%uPRPInSteady = 0.0 - InitInp%uDotPRPInSteady = 0.0 - InitInp%uDotDotPRPInSteady = 0.0 - END IF - - - !------------------------------------------------------------------------------------------------- - !> ### Waves elevation series section - !------------------------------------------------------------------------------------------------- - - !> Header - -CALL ReadCom( UnIn, FileName, 'Waves multipoint elevation output header', ErrStat, ErrMsg, UnEchoLocal ) - - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read Comment line.' - ErrStat = ErrID_Fatal - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - !> WaveElevSeriesFlag -- are we doing multipoint wave elevation output? - CALL ReadVar ( UnIn, FileName, InitInp%WaveElevSeriesFlag, 'WaveElevSeriesFlag', 'WaveElevSeriesFlag', ErrStat, ErrMsg ) - IF ( ErrStat /= ErrID_None ) THEN - ErrMsg = ' Failed to read WaveElevSeries parameter.' - ErrStat = ErrID_Fatal - CLOSE( UnIn ) - RETURN - END IF - - - !> WaveElevDX and WaveElevNY -- point spacing (m) - CALL ReadAry ( UnIn, FileName, TmpRealVar2, 2, 'WaveElevDX WaveElevDY', & - 'WaveElevSeries spacing -- WaveElevDX WaveElevDY', ErrStat, ErrMsg, UnEchoLocal) - - IF ( ErrStat /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,'Failed to read WaveElevDX and WaveElevDY parameters.',ErrStat,ErrMsg,'ReadDriverInputFile') - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - InitInp%WaveElevDX = TmpRealVar2(1) - InitInp%WaveElevDY = TmpRealVar2(2) - - - - !> WaveElevNX and WaveElevNY -- point spacing (m) - CALL ReadAry ( UnIn, FileName, TmpIntVar2, 2, 'WaveElevNX WaveElevNY', & - 'WaveElevSeries points -- WaveElevNX WaveElevNY', ErrStat, ErrMsg, UnEchoLocal) - - IF ( ErrStat /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,' Failed to read WaveElevNX and WaveElevNY parameters.',ErrStat,ErrMsg,'ReadDriverInputFile') - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) - RETURN - END IF - - - IF (MOD(TmpIntVar2(1),2) == 0) THEN - TmpIntVar2(1) = TmpIntVar2(1)+1 - CALL SetErrStat( ErrID_Warn, "Changing WaveElevNX to an odd number ("//TRIM(Num2LStr(TmpIntVar2(1)))// & - ") so that there is a point at the origin.",ErrStat,ErrMsg,'ReadDriverInputFile' ) - ENDIF - IF (MOD(TmpIntVar2(2),2) == 0) THEN - TmpIntVar2(2) = TmpIntVar2(2)+1 - CALL SetErrStat( ErrID_Warn, "Changing WaveElevNX to an odd number ("//TRIM(Num2LStr(TmpIntVar2(2)))// & - ") so that there is a point at the origin.",ErrStat,ErrMsg,'ReadDriverInputFile' ) - ENDIF - InitInp%WaveElevNX = TmpIntVar2(1) - InitInp%WaveElevNY = TmpIntVar2(2) - - - !> if the flag was false, set the spacing and number of points to 0 - IF ( .NOT. InitInp%WaveElevSeriesFlag ) THEN - InitInp%WaveElevDX = 0.0_ReKi - InitInp%WaveElevDY = 0.0_ReKi - InitInp%WaveElevNX = 0_IntKi - InitInp%WaveElevNY = 0_IntKi - ENDIF - - - + CALL MeshDestroy( mappingData%EDRPt_Motion, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL MeshDestroy( mappingData%EDRPt_Loads, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL MeshDestroy( mappingData%ZZZPtMeshMotion, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL MeshDestroy( mappingData%ZZZPtMeshLoads, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + + CALL MeshMapDestroy( mappingData%ED_Ref_2_HD_Ref, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL MeshMapDestroy( mappingData%HD_Ref_2_ED_Ref, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL MeshMapDestroy( mappingData%HD_RefLoads_2_ED_Ref, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + CALL MeshMapDestroy( mappingData%HD_RefLoads_2_ZZZLoads, ErrStat2, ErrMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + + if ( ErrStat /= ErrID_None ) then + CALL WrScr(NewLine//NewLine//'Error status after execution:'//TRIM(Num2LStr(ErrStat))//NewLine//TRIM(ErrMsg)//NewLine) + + if (ErrStat >= AbortErrLev) then + if ( time < 0.0 ) then + ErrMsg = 'at initialization' + else if ( time > drvrData%TMax ) then + ErrMsg = 'after computing the solution' + else + ErrMsg = 'at simulation time '//trim(Num2LStr(time))//' of '//trim(Num2LStr(drvrData%TMax))//' seconds' + end if + + CALL ProgAbort( 'HydroDyn Driver encountered an error '//trim(errMsg)//'.'// & + NewLine//' Simulation error level: '//trim(GetErrStr(errStat)), TrapErrors=.FALSE., TimeWait=3._ReKi ) ! wait 3 seconds (in case they double-clicked and got an error) + end if + end if - CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) - CLOSE( UnIn ) + + ! Print *, time + call RunTimes( StrtTime, REAL(UsrTime1,ReKi), SimStrtTime, REAL(UsrTime2,ReKi), time ) + call NormStop() -END SUBROUTINE ReadDriverInputFile - -SUBROUTINE WaveElevGrid_Output (drvrInitInp, HDynInitInp, HDynInitOut, HDyn_p, ErrStat, ErrMsg) - - TYPE(HD_drvr_InitInput), INTENT( IN ) :: drvrInitInp - TYPE(HydroDyn_InitInputType), INTENT( IN ) :: HDynInitInp - TYPE(HydroDyn_InitOutputType), INTENT( IN ) :: HDynInitOut ! Output data from initialization - TYPE(HydroDyn_ParameterType), INTENT( IN ) :: HDyn_p ! Output data from initialization - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Temporary local variables - INTEGER(IntKi) :: ErrStatTmp !< Temporary variable for the status of error message - CHARACTER(1024) :: ErrMsgTmp !< Temporary variable for the error message - - INTEGER(IntKi) :: WaveElevFileUn !< Number for the output file for the wave elevation series - CHARACTER(1024) :: WaveElevFileName !< Name for the output file for the wave elevation series - CHARACTER(128) :: WaveElevFmt !< Format specifier for the output file for wave elevation series - - - WaveElevFmt = "(F14.7,3x,F14.7,3x,F14.7)" - - ErrMsg = "" - ErrStat = ErrID_None - ErrMsgTmp = "" - ErrStatTmp = ErrID_None - - - ! If we calculated the wave elevation at a set of coordinates for use with making movies, put it into an output file - WaveElevFileName = TRIM(drvrInitInp%OutRootName)//".WaveElev.out" - CALL GetNewUnit( WaveElevFileUn ) - - CALL OpenFOutFile( WaveElevFileUn, WaveElevFileName, ErrStat, ErrMsg ) - IF ( ErrStat /= ErrID_None) THEN - IF ( ErrStat >= AbortErrLev ) RETURN - END IF - - ! Write some useful header information -! WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## This file was generated by '//TRIM(GetNVD(HDyn_Drv_ProgDesc))// & -! ' on '//CurDate()//' at '//CurTime()//'.' - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## This file was generated on '//CurDate()//' at '//CurTime()//'.' - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## This file contains the wave elevations at a series of points '// & - 'through the entire timeseries.' - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## It is arranged as blocks of X,Y,Elevation at each timestep' - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## Each block is separated by two blank lines for use in gnuplot' - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# ' - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# WaveTMax = '//TRIM(Num2LStr(HDyn_p%WaveTime(HDyn_P%NStepWave))) - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# NStepWave = '//TRIM(Num2LStr(HDyn_p%NStepWave)) - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# GridXPoints = '//TRIM(Num2LStr(drvrInitInp%WaveElevNX)) - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# GridYPoints = '//TRIM(Num2LStr(drvrInitInp%WaveElevNY)) - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# GridDX = '//TRIM(Num2LStr(drvrInitInp%WaveElevDX)) - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# GridDY = '//TRIM(Num2LStr(drvrInitInp%WaveElevDY)) - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# MaxWaveElev = '//TRIM(Num2LStr(MAXVAL(HDynInitOut%WaveElevSeries))) - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# MinWaveElev = '//TRIM(Num2LStr(MINVAL(HDynInitOut%WaveElevSeries))) - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# ' - - ! Timestep looping - DO I = 0,HDyn_p%NStepWave - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) NewLine - WRITE (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# Time: '//TRIM(Num2LStr(HDyn_p%WaveTime(I))) - ! Now output the X,Y, Elev info for this timestep - DO J=1,SIZE(HDynInitInp%WaveElevXY,DIM=2) - WRITE (WaveElevFileUn,WaveElevFmt, IOSTAT=ErrStatTmp ) HDynInitInp%WaveElevXY(1,J),& - HDynInitInp%WaveElevXY(2,J),HDynInitOut%WaveElevSeries(I,J) - ENDDO - - ENDDO - - ! Done. Close the file - CLOSE (WaveElevFileUn) - -END SUBROUTINE WaveElevGrid_Output - +end subroutine HD_DvrEnd !---------------------------------------------------------------------------------------------------------------------------------- + END PROGRAM HydroDynDriver diff --git a/modules/hydrodyn/src/HydroDyn_DriverSubs.f90 b/modules/hydrodyn/src/HydroDyn_DriverSubs.f90 new file mode 100644 index 0000000000..11bef74431 --- /dev/null +++ b/modules/hydrodyn/src/HydroDyn_DriverSubs.f90 @@ -0,0 +1,1260 @@ +!********************************************************************************************************************************** +! HydroDyn_DriverSubs +!.................................................................................................................................. +! LICENSING +! Copyright (C) 2022 Envision Energy USA LTD +! +! This file is part of HydroDyn. +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +!********************************************************************************************************************************** + +MODULE HydroDynDriverSubs + + USE NWTC_Library + use SeaState + use SeaState_Types + USE HydroDyn + USE HydroDyn_Types + USE HydroDyn_Output + USE ModMesh_Types + USE VersionInfo + + IMPLICIT NONE + + TYPE HD_Drvr_MappingData + Integer(IntKi) :: Ind ! index for interpolation + type(MeshMapType) :: HD_Ref_2_WB_P ! Mesh mapping between HD Reference pt mesh and WAMIT body(ies) mesh + type(MeshMapType) :: HD_Ref_2_M_P ! Mesh mapping between HD Reference pt mesh and Morison mesh + + ! For 6x6 linearization + type(MeshType) :: EDRPt_Loads ! 1-node Point mesh located at (0,0,zRef) in global system where ElastoDyn Reference point is + type(MeshType) :: EDRPt_Motion ! 1-node Point mesh located at (0,0,zRef) in global system where ElastoDyn Reference point is + type(MeshType) :: ZZZPtMeshMotion ! 1-node Point mesh located at (0,0,0) in global system and never moving + type(MeshType) :: ZZZPtMeshLoads ! 1-node Point mesh located at (0,0,0) in global system and never moving + type(MeshMapType) :: ED_Ref_2_HD_Ref ! Mesh mapping between ED Reference pt mesh and HD PRP mesh + type(MeshMapType) :: HD_Ref_2_ED_Ref ! Mesh mapping between HD Reference pt mesh and ED ref poing mesh + type(MeshMapType) :: HD_RefLoads_2_ED_Ref ! Mesh mapping between HDHdroOrigin pt mesh and ED ref point mesh for loads + type(MeshMapType) :: HD_RefLoads_2_ZZZLoads ! Mesh mapping between HDHdroOrigin pt mesh and ZZZPtMesh + + END TYPE HD_Drvr_MappingData + + TYPE HD_Drvr_OutputFile + INTEGER :: NumOuts + INTEGER :: NumOutsMods(2) + CHARACTER(ChanLen), ALLOCATABLE :: WriteOutputHdr(:) + CHARACTER(ChanLen), ALLOCATABLE :: WriteOutputUnt(:) + REAL(ReKi), ALLOCATABLE :: Storage(:,:) + CHARACTER(500) :: FileDescLines(3) + INTEGER :: unOutFile = -1 + CHARACTER(20) :: OutFmt + CHARACTER(20) :: OutFmt_t + INTEGER :: n_Out = 0 + REAL(DbKi) :: TimeData(2) + END TYPE HD_Drvr_OutputFile + + TYPE HD_Drvr_Data + LOGICAL :: Echo + REAL(ReKi) :: Gravity + REAL(ReKi) :: WtrDens + REAL(ReKi) :: WtrDpth + REAL(ReKi) :: MSL2SWL + CHARACTER(1024) :: HDInputFile + CHARACTER(1024) :: SeaStateInputFile + CHARACTER(1024) :: OutRootName + LOGICAL :: Linearize + LOGICAL :: WrTxtOutFile = .true. + LOGICAL :: WrBinOutFile = .false. + INTEGER :: NSteps + REAL(DbKi) :: TimeInterval + REAL(DbKi) :: TMax + INTEGER :: PRPInputsMod + CHARACTER(1024) :: PRPInputsFile + REAL(R8Ki) :: uPRPInSteady(6) + REAL(R8Ki) :: uDotPRPInSteady(6) + REAL(R8Ki) :: uDotDotPRPInSteady(6) + REAL(R8Ki), ALLOCATABLE :: PRPin(:,:) ! Variable for storing time, forces, and body velocities, in m/s or rad/s for PRP + REAL(R8Ki), ALLOCATABLE :: PRPinTime(:) ! Variable for storing time, forces, and body velocities, in m/s or rad/s for PRP + INTEGER(IntKi) :: NBody ! Number of WAMIT bodies to work with if prescribing kinematics on each body (PRPInputsMod<0) + REAL(ReKi) :: PtfmRefzt + TYPE(HD_Drvr_OutputFile) :: OutData + character(500) :: FTitle ! description from 2nd line of driver file + + END TYPE HD_Drvr_Data + +! ----------------------------------------------------------------------------------- +! NOTE: this module and the ModMesh.f90 modules must use the Fortran compiler flag: +! /fpp because of they both have preprocessor statements +! ----------------------------------------------------------------------------------- + TYPE(ProgDesc), PARAMETER :: version = ProgDesc( 'HydroDyn Driver', '', '' ) ! The version number of this program. + character(*), parameter :: Delim = Tab + + +CONTAINS + +SUBROUTINE ReadDriverInputFile( FileName, drvrData, ErrStat, ErrMsg ) + + CHARACTER(*), INTENT( IN ) :: FileName + TYPE(HD_Drvr_Data), INTENT( INOUT ) :: drvrData + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + + INTEGER :: UnIn ! Unit number for the input file + INTEGER :: UnEchoLocal ! The local unit number for this module's echo file + CHARACTER(1024) :: EchoFile ! Name of HydroDyn echo file + CHARACTER(1024) :: PriPath ! Temporary storage for relative path name + + integer(IntKi) :: errStat2 ! temporary error status of the operation + character(ErrMsgLen) :: errMsg2 ! temporary error message + character(*), parameter :: RoutineName = 'ReadDriverInputFile' + + + ! Initialize the echo file unit to -1 which is the default to prevent echoing, we will alter this based on user input + UnEchoLocal = -1 + ErrStat = ErrID_None + ErrMsg = "" + + CALL GetNewUnit( UnIn ) + CALL OpenFInpFile ( UnIn, FileName, ErrStat2, ErrMsg2 ) + if (Failed()) return + + + CALL WrScr( 'Opening HydroDyn Driver input file: '//trim(FileName) ) + call GetPath( TRIM(FileName), PriPath ) ! store path name in case any of the file names are relative to the primary input file + + + !------------------------------------------------------------------------------------------------- + ! File header + !------------------------------------------------------------------------------------------------- + + CALL ReadCom( UnIn, FileName, 'HydroDyn Driver input file header line 1', ErrStat2, ErrMsg2 ) + if (Failed()) return + + + CALL ReadStr( UnIn, FileName, drvrData%FTitle, 'FTitle', 'HydroDyn Driver input file header line 2', ErrStat2, ErrMsg2 ) + if (Failed()) return + + + ! Echo Input Files. + CALL ReadVar ( UnIn, FileName, drvrData%Echo, 'Echo', 'Echo Input', ErrStat2, ErrMsg2 ) + if (Failed()) return + + + ! If we are Echoing the input then we should re-read the first three lines so that we can echo them + ! using the NWTC_Library routines. The echoing is done inside those routines via a global variable + ! which we must store, set, and then replace on error or completion. + + IF ( drvrData%Echo ) THEN + + EchoFile = TRIM(FileName)//'.ech' + CALL GetNewUnit( UnEchoLocal ) + CALL OpenEcho ( UnEchoLocal, EchoFile, ErrStat2, ErrMsg2 ) + if (Failed()) return + + + REWIND(UnIn) + + CALL ReadCom( UnIn, FileName, 'HydroDyn Driver input file header line 1', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + CALL ReadCom( UnIn, FileName, 'HydroDyn Driver input file header line 2', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! Echo Input Files. Note this line is prevented from being echoed by the ReadVar routine. + CALL ReadVar ( UnIn, FileName, drvrData%Echo, 'Echo', 'Echo the input file data', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + + END IF + !------------------------------------------------------------------------------------------------- + ! Environmental conditions section + !------------------------------------------------------------------------------------------------- + + ! Header + CALL ReadCom( UnIn, FileName, 'Environmental conditions header', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! Gravity - Gravity. + CALL ReadVar ( UnIn, FileName, drvrData%Gravity, 'Gravity', 'Gravity', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! WtrDens - Water density. + CALL ReadVar ( UnIn, FileName, drvrData%WtrDens, 'WtrDens', 'Water density', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! WtrDpth - Water depth. + CALL ReadVar ( UnIn, FileName, drvrData%WtrDpth, 'WtrDpth', 'Water depth', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! MSL2SWL - Offset between still-water level and mean sea level. + CALL ReadVar ( UnIn, FileName, drvrData%MSL2SWL, 'MSL2SWL', 'Offset between still-water level and mean sea level', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + !------------------------------------------------------------------------------------------------- + ! HYDRODYN section + !------------------------------------------------------------------------------------------------- + + ! Header + CALL ReadCom( UnIn, FileName, 'HYDRODYN header', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! HDInputFile + CALL ReadVar ( UnIn, FileName, drvrData%HDInputFile, 'HDInputFile', 'HydroDyn input filename', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + IF ( PathIsRelative( drvrData%HDInputFile ) ) drvrData%HDInputFile = TRIM(PriPath)//TRIM(drvrData%HDInputFile) + + ! SeaStInputFile + CALL ReadVar ( UnIn, FileName, drvrData%SeaStateInputFile, 'SeaStateInputFile', 'SeaState input filename', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + IF ( PathIsRelative( drvrData%SeaStateInputFile ) ) drvrData%SeaStateInputFile = TRIM(PriPath)//TRIM(drvrData%SeaStateInputFile) + + ! OutRootName + CALL ReadVar ( UnIn, FileName, drvrData%OutRootName, 'OutRootName', 'HydroDyn output root filename', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + IF ( PathIsRelative( drvrData%OutRootName ) ) drvrData%OutRootName = TRIM(PriPath)//TRIM(drvrData%OutRootName) + + ! Linearize + CALL ReadVar ( UnIn, FileName, drvrData%Linearize, 'Linearize', 'Linearize parameter', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! NSteps + CALL ReadVar ( UnIn, FileName, drvrData%NSteps, 'NSteps', 'Number of time steps in the HydroDyn simulation', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! TimeInterval + CALL ReadVar ( UnIn, FileName, drvrData%TimeInterval, 'TimeInterval', 'Time interval for any HydroDyn inputs', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + + !------------------------------------------------------------------------------------------------- + ! PRP INPUTS section + !------------------------------------------------------------------------------------------------- + + ! Header + CALL ReadCom( UnIn, FileName, 'PRP INPUTS header', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! PRPInputsMod + CALL ReadVar ( UnIn, FileName, drvrData%PRPInputsMod, 'PRPInputsMod', 'Model for the PRP (principal reference point) inputs', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! PtfmRefzt + CALL ReadVar ( UnIn, FileName, drvrData%PtfmRefzt, 'PtfmRefzt', 'Vertical distance from the ground level to the platform reference point', ErrStat, ErrMsg, UnEchoLocal ) + if (Failed()) return + + ! PRPInputsFile + CALL ReadVar ( UnIn, FileName, drvrData%PRPInputsFile, 'PRPInputsFile', 'Filename for the PRP HydroDyn inputs', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + IF ( PathIsRelative( drvrData%PRPInputsFile ) ) drvrData%PRPInputsFile = TRIM(PriPath)//TRIM(drvrData%PRPInputsFile) + + + !------------------------------------------------------------------------------------------------- + ! PRP STEADY STATE INPUTS section + !------------------------------------------------------------------------------------------------- + + ! Header + CALL ReadCom( UnIn, FileName, 'PRP STEADY STATE INPUTS header', ErrStat2, ErrMsg2, UnEchoLocal ) + if (Failed()) return + + ! uPRPInSteady + CALL ReadAry ( UnIn, FileName, drvrData%uPRPInSteady, 6, 'uPRPInSteady', 'PRP Steady-state displacements and rotations.', ErrStat2, ErrMsg2, UnEchoLocal) + if (Failed()) return + + ! uDotPRPInSteady + CALL ReadAry ( UnIn, FileName, drvrData%uDotPRPInSteady, 6, 'uDotPRPInSteady', 'PRP Steady-state translational and rotational velocities.', ErrStat2, ErrMsg2, UnEchoLocal) + if (Failed()) return + + ! uDotDotPRPInSteady + CALL ReadAry ( UnIn, FileName, drvrData%uDotDotPRPInSteady, 6, 'uDotDotPRPInSteady', 'PRP Steady-state translational and rotational accelerations.', ErrStat2, ErrMsg2, UnEchoLocal) + if (Failed()) return + + + IF ( drvrData%PRPInputsMod /= 1 ) THEN + drvrData%uPRPInSteady = 0.0 + drvrData%uDotPRPInSteady = 0.0 + drvrData%uDotDotPRPInSteady = 0.0 + END IF + + drvrData%WrTxtOutFile = .true. + drvrData%WrBinOutFile = .false. + + + CALL cleanup() + +CONTAINS + + logical function Failed() + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + Failed = ErrStat >= AbortErrLev + if (Failed) call Cleanup() + + end function Failed + + subroutine Cleanup() + CLOSE( UnIn ) + IF ( UnEchoLocal > 0 ) CLOSE( UnEchoLocal ) + end subroutine Cleanup + +END SUBROUTINE ReadDriverInputFile +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE ReadPRPInputsFile( drvrData, ErrStat, ErrMsg ) + + TYPE(HD_Drvr_Data), INTENT( INOUT ) :: drvrData + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + + INTEGER :: UnIn ! Unit number for the input file + INTEGER :: UnEchoLocal ! The local unit number for this module's echo file +! CHARACTER(1024) :: EchoFile ! Name of HydroDyn echo file + + integer(IntKi) :: n, sizeAry + integer(IntKi) :: errStat2 ! temporary error status of the operation + character(ErrMsgLen) :: errMsg2 ! temporary error message + character(*), parameter :: RoutineName = 'ReadDriverInputFile' + real(ReKi), allocatable :: TmpAry(:) + integer(IntKi) :: NumDataLines, numHeaderLines + + ! Initialize the echo file unit to -1 which is the default to prevent echoing, we will alter this based on user input + UnEchoLocal = -1 + UnIn = -1 + + ErrStat = ErrID_None + ErrMsg = "" + + drvrData%NBody= 0 + + IF ( drvrData%PRPInputsMod == 2 ) THEN + sizeAry = 19 + ELSEIF ( drvrData%PRPInputsMod < 0 ) THEN + ! multi-body kinematics driver option (time, PRP DOFs 1-6, body1 DOFs 1-6, body2 DOFs 1-6...) + + drvrData%NBody = -drvrData%PRPInputsMod + sizeAry = 7 + 6*drvrData%NBody + + call WrScr( 'NBody is '//trim(Num2LStr(drvrData%NBody))//' and planning to read in '//trim(Num2LStr(sizeAry))//' columns from the input file' ) + + ELSE + + RETURN + + END IF + + ! Open the (PRP or WAMIT) inputs data file + CALL GetNewUnit( UnIn ) + CALL OpenFInpFile ( UnIn, trim(drvrData%PRPInputsFile), ErrStat2, ErrMsg2 ) + if (Failed()) return + + ! Determine how many lines of data (how many time steps) are in the PRP input file + CALL GetFileLength(UnIn, trim(drvrData%PRPInputsFile), sizeAry, NumDataLines, NumHeaderLines, ErrStat2, ErrMsg2) + if (Failed()) return + CALL AllocAry(TmpAry, sizeAry, 'TmpAry', ErrStat2, ErrMsg2) + if (Failed()) return + CALL AllocAry(drvrData%PRPin, NumDataLines, sizeAry-1, 'PRPin', ErrStat2, ErrMsg2) + if (Failed()) return + CALL AllocAry(drvrData%PRPinTime, NumDataLines, 'PRPinTime', ErrStat2, ErrMsg2) + if (Failed()) return + + !seems like it would be more efficient to switch the indices on drvrData%PRPin + DO n = 1,NumDataLines + CALL ReadAry ( UnIn, drvrData%PRPInputsFile, TmpAry, sizeAry, 'Line', 'drvrData%PRPin', ErrStat2, ErrMsg2, UnEchoLocal ) + drvrData%PRPin(n,:) = TmpAry(2:sizeAry) + drvrData%PRPinTime(n) = TmpAry(1) + if (Failed()) return + END DO + + call Cleanup() + +CONTAINS + + logical function Failed() + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + Failed = ErrStat >= AbortErrLev + if (Failed) call Cleanup() + + end function Failed + + subroutine Cleanup() + IF ( ALLOCATED(TmpAry) ) DEALLOCATE(TmpAry) + IF ( UnIn > 0 ) CLOSE( UnIn ) + IF ( UnEchoLocal > 0 ) CLOSE( UnEchoLocal ) + end subroutine Cleanup + + SUBROUTINE GetFileLength(UnitDataFile, Filename, NumDataColumns, NumDataLines, NumHeaderLines, ErrStat, ErrMsg) + + IMPLICIT NONE + + ! Passed variables + INTEGER(IntKi), INTENT(IN ) :: UnitDataFile !< Unit number of the file we are looking at. + CHARACTER(*), INTENT(IN ) :: Filename !< The name of the file we are looking at. + INTEGER(IntKi), INTENT( OUT) :: NumDataColumns !< The number of columns in the data file. + INTEGER(IntKi), INTENT( OUT) :: NumDataLines !< Number of lines containing data + INTEGER(IntKi), INTENT( OUT) :: NumHeaderLines !< Number of header lines at the start of the file + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error Message to return (empty if all good) + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Status flag if there were any problems (ErrID_None if all good) + + ! Local Variables + CHARACTER(2048) :: ErrMsgTmp !< Temporary message variable. Used in calls. + INTEGER(IntKi) :: ErrStatTmp !< Temporary error status. Used in calls. + INTEGER(IntKi) :: LclErrStat !< Temporary error status. Used locally to indicate when we have reached the end of the file. + INTEGER(IntKi) :: TmpIOErrStat !< Temporary error status for the internal read of the first word to a real number + LOGICAL :: IsRealNum !< Flag indicating if the first word on the line was a real number + + CHARACTER(MaxFileInfoLineLen*4) :: TextLine !< One line of text read from the file + INTEGER(IntKi) :: LineLen !< The length of the line read in + CHARACTER(MaxFileInfoLineLen) :: StrRead !< String containing the first word read in + REAL(SiKi) :: RealRead !< Returns value of the number (if there was one), or NaN (as set by NWTC_Num) if there wasn't + CHARACTER(24) :: Words(20) !< Array of words we extract from a line. We shouldn't have more than 20. + INTEGER(IntKi) :: i !< simple integer counter + INTEGER(IntKi) :: LineNumber !< the line I am on + LOGICAL :: LineHasText !< Flag indicating if the line I just read has text. If so, it is a header line. + LOGICAL :: HaveReadData !< Flag indicating if I have started reading data. + INTEGER(IntKi) :: NumWords !< Number of words on a line + INTEGER(IntKi) :: FirstDataLineNum !< Line number of the first row of data in the file + CHARACTER(*), PARAMETER :: RoutineName = 'GetFileLength' + + ! Initialize the error handling + ErrStat = ErrID_None + ErrStatTmp = ErrID_None + LclErrStat = ErrID_None + ErrMsg = '' + ErrMsgTmp = '' + + ! Set some of the flags and counters + HaveReadData = .FALSE. + NumDataColumns = 0 + NumHeaderLines = 0 + NumDataLines = 0 + LineNumber = 0 + + ! Just in case we were handed a file that we are part way through reading (should never be true), rewind to the start + REWIND( UnitDataFile ) + + !------------------------------------ + !> The variable LclErrStat is used to indicate when we have reached the end of the file or had an error from + !! ReadLine. Until that occurs, we read each line, and decide if it contained any non-numeric data. The + !! first group of lines containing non-numeric data is considered the header. The first line of all numeric + !! data is considered the start of the data section. Any non-numeric containing found within the data section + !! will be considered as an invalid file format at which point we will return a fatal error from this routine. + + DO WHILE ( LclErrStat == ErrID_None ) + + !> Reset the indicator flag for the non-numeric content + LineHasText = .FALSE. + + !> Read in a single line from the file + CALL ReadLine( UnitDataFile, '', TextLine, LineLen, LclErrStat ) + + !> If there was an error in reading the file, then exit. + !! Possible causes: reading beyond end of file in which case we are done so don't process it. + IF ( LclErrStat /= ErrID_None ) EXIT + + !> Increment the line counter. + LineNumber = LineNumber + 1 + + !> Read all the words on the line into the array called 'Words'. Only the first words will be encountered + !! will be stored. The others are empty (i.e. only three words on the line, so the remaining 17 are empty). + CALL GetWords( TextLine, Words, SIZE(Words), NumWords ) + + !> Now cycle through the first 'NumWords' of non-empty values stored in 'Words'. Words should contain + !! everything that is on the line. The subroutine ReadRealNumberFromString will set a flag 'IsRealNum' + !! when the value in Words(i) can be read as a real(SiKi). 'StrRead' will contain the string equivalent. + DO i=1,NumWords + CALL ReadRealNumberFromString( Words(i), RealRead, StrRead, IsRealNum, ErrStatTmp, ErrMsgTmp, TmpIOErrStat ) + IF ( .NOT. IsRealNum) THEN + LineHasText = .TRUE. + END IF + END DO + + !> If all the words on that line had no text in them, then it must have been a line of data. + !! If not, then we have either a header line, which is ok, or a line containing text in the middle of the + !! the data section, which is not good (the flag HaveReadData tells us which case this is). + IF ( LineHasText ) THEN + IF ( HaveReadData ) THEN ! Uh oh, we have already read a line of data before now, so there is a problem + CALL SetErrStat( ErrID_Fatal, ' Found text on line '//TRIM(Num2LStr(LineNumber))//' of '//TRIM(FileName)// & + ' when real numbers were expected. There may be a problem with the file.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + RETURN + END IF + ELSE + NumHeaderLines = NumHeaderLines + 1 + END IF + ELSE ! No text, must be data line + NumDataLines = NumDataLines + 1 + ! If this is the first row of data, then store the number of words that were on the line + IF ( .NOT. HaveReadData ) THEN + ! If this is the first line of data, keep some relevant info about it and the number of columns in it + HaveReadData = .TRUE. + FirstDataLineNum = LineNumber ! Keep the line number of the first row of data (for error reporting) + NumDataColumns = NumWords + ELSE + ! Make sure that the number columns on the row matches the number of columnns on the first row of data. + IF ( NumWords /= NumDataColumns ) THEN + CALL SetErrStat( ErrID_Fatal, ' Error in data file: '//TRIM(Filename)//'.'// & + ' The number of data columns on line '//TRIM(Num2LStr(LineNumber))// & + '('//TRIM(Num2LStr(NumWords))//' columns) is different than the number of columns on first row of data '// & + ' (line: '//TRIM(Num2LStr(FirstDataLineNum))//', '//TRIM(Num2LStr(NumDataColumns))//' columns).', & + ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + RETURN + END IF + END IF + END IF + END IF + END DO + REWIND( UnitDataFile ) + END SUBROUTINE GetFileLength + + SUBROUTINE ReadRealNumberFromString(StringToParse, ValueRead, StrRead, IsRealNum, ErrStat, ErrMsg, IOErrStat) + + CHARACTER(*), INTENT(IN ) :: StringToParse !< The string we were handed. + REAL(SiKi), INTENT( OUT) :: ValueRead !< The variable being read. Returns as NaN (library defined) if not a Real. + CHARACTER(*), INTENT( OUT) :: StrRead !< A string containing what was read from the ReadNum routine. + LOGICAL, INTENT( OUT) :: IsRealNum !< Flag indicating if we successfully read a Real + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< ErrID level returned from ReadNum + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message including message from ReadNum + INTEGER(IntKi), INTENT( OUT) :: IOErrStat !< Error status from the internal read. Useful for diagnostics. + + ! Initialize some things + ErrStat = ErrID_None + ErrMsg = '' + + ! ReadNum returns a string contained in StrRead. So, we now try to do an internal read to VarRead and then trap errors. + READ(StringToParse,*,IOSTAT=IOErrStat) StrRead + READ(StringToParse,*,IOSTAT=IOErrStat) ValueRead + + ! If IOErrStat==0, then we have a real number, anything else is a problem. + IF (IOErrStat==0) THEN + IsRealNum = .TRUE. + ELSE + IsRealNum = .FALSE. + ValueRead = NaN ! This is NaN as defined in the NWTC_Num. + ErrMsg = 'Not a real number. '//TRIM(ErrMsg)//NewLine + ErrSTat = ErrID_Severe + END IF + + RETURN + END SUBROUTINE ReadRealNumberFromString + +END SUBROUTINE ReadPRPInputsFile +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE InitOutputFile(InitOutData_HD, InitOutData_SeaSt, drvrData, ErrStat, ErrMsg) + + TYPE(HydroDyn_InitOutputType), INTENT(IN) :: InitOutData_HD ! Output data from initialization + TYPE(SeaSt_InitOutputType), INTENT(IN) :: InitOutData_SeaSt ! Output data from initialization + TYPE(HD_Drvr_Data), INTENT( INOUT ) :: drvrData + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + integer(IntKi) :: FmtWidth, TChanLen + integer(IntKi) :: i, Indx + integer(IntKi) :: errStat2 ! temporary error status of the operation + character(ErrMsgLen) :: errMsg2 ! temporary error message + character(*), parameter :: RoutineName = 'InitOutputFile' + + ErrStat = ErrID_None + ErrMsg = "" + + drvrData%OutData%n_Out = 0 + drvrData%OutData%OutFmt = "ES15.6E2" + CALL ChkRealFmtStr( drvrData%OutData%OutFmt, 'OutFmt', FmtWidth, ErrStat2, ErrMsg2 ) + !IF ( drvrData%WrTxtOutFile .and. FmtWidth < MinChanLen ) CALL SetErrStat( ErrID_Warn, 'OutFmt produces a column width of '// & + ! TRIM(Num2LStr(FmtWidth))//'), which may be too small.', ErrStat, ErrMsg, RoutineName ) + + if (drvrData%TMax < 1.0_DbKi) then ! log10(0) gives floating point divide-by-zero error + TChanLen = MinChanLen + else + TChanLen = max( MinChanLen, int(log10(drvrData%TMax))+7 ) + end if + drvrData%OutData%OutFmt_t = 'F'//trim(num2lstr( TChanLen ))//'.4' ! 'F10.4' + + + + drvrData%OutData%NumOutsMods = 0 + if (Allocated(InitOutData_SeaSt%WriteOutputHdr)) drvrData%OutData%NumOutsMods(1) = size(InitOutData_SeaSt%WriteOutputHdr) + if (Allocated(InitOutData_HD%WriteOutputHdr )) drvrData%OutData%NumOutsMods(2) = size(InitOutData_HD%WriteOutputHdr) + drvrData%OutData%NumOuts = sum(drvrData%OutData%NumOutsMods) + 1 ! add 1 for time channel + + call AllocAry(drvrData%OutData%WriteOutputHdr, drvrData%OutData%NumOuts, ' DriverWriteOutputHdr', ErrStat2, ErrMsg2); call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call AllocAry(drvrData%OutData%WriteOutputUnt, drvrData%OutData%NumOuts, ' DriverWriteOutputUnt', ErrStat2, ErrMsg2); call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call AllocAry(drvrData%OutData%Storage, drvrData%OutData%NumOuts-1, drvrData%NSteps, ' DriverWriteOutputStorage', ErrStat2, ErrMsg2); call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + IF (ErrStat >= AbortErrLev) RETURN + + ! Fill concatenated WriteOuput header and unit arrays: + drvrData%OutData%WriteOutputHdr(1) = 'Time' + drvrData%OutData%WriteOutputUnt(1) = '(s)' + Indx = 1 + do i=1,drvrData%OutData%NumOutsMods(1) + Indx = Indx + 1 + drvrData%OutData%WriteOutputHdr(Indx) = InitOutData_SeaSt%WriteOutputHdr(i) + drvrData%OutData%WriteOutputUnt(Indx) = InitOutData_SeaSt%WriteOutputUnt(i) + end do + + do i=1,drvrData%OutData%NumOutsMods(2) + Indx = Indx + 1 + drvrData%OutData%WriteOutputHdr(Indx) = InitOutData_HD%WriteOutputHdr(i) + drvrData%OutData%WriteOutputUnt(Indx) = InitOutData_HD%WriteOutputUnt(i) + end do + + ! get lines for output file: + drvrData%OutData%FileDescLines(1) = 'Predictions were generated on '//CurDate()//' at '//CurTime()//' using '//TRIM(GetVersion(version)) + drvrData%OutData%FileDescLines(2) = 'linked with ' //' '//TRIM(GetNVD(NWTC_Ver )) ! we'll get the rest of the linked modules in the section below + drvrData%OutData%FileDescLines(3) = 'Description from the driver input file: '//TRIM(drvrData%FTitle) + + + IF (drvrData%WrTxtOutFile) THEN + + call GetNewUnit(drvrData%OutData%unOutFile, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + drvrData%OutData%unOutFile = -1 + return + end if + + call OpenFOutFile ( drvrData%OutData%unOutFile, trim(drvrData%OutRootName)//'.out', ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + drvrData%OutData%unOutFile = -1 + return + end if + + ! Add some file information: + + WRITE (drvrData%OutData%unOutFile,'(/,A)') TRIM( drvrData%OutData%FileDescLines(1) ) + WRITE (drvrData%OutData%unOutFile,'(1X,A)') TRIM( drvrData%OutData%FileDescLines(2) ) + WRITE (drvrData%OutData%unOutFile,'()' ) !print a blank line + WRITE (drvrData%OutData%unOutFile,'(A)' ) TRIM( drvrData%OutData%FileDescLines(3) ) + WRITE (drvrData%OutData%unOutFile,'()' ) !print a blank line + + + !...................................................... + ! Write the names of the output parameters on one line: + !...................................................... + CALL WrFileNR ( drvrData%OutData%unOutFile, trim(drvrData%OutData%WriteOutputHdr(1)) ) + DO I=2,drvrData%OutData%NumOuts + CALL WrFileNR ( drvrData%OutData%unOutFile, Delim//trim(drvrData%OutData%WriteOutputHdr(I)) ) + ENDDO ! I + + WRITE (drvrData%OutData%unOutFile,'()') + + !...................................................... + ! Write the units of the output parameters on one line: + !...................................................... + CALL WrFileNR ( drvrData%OutData%unOutFile, trim(drvrData%OutData%WriteOutputUnt(1)) ) + DO I=2,drvrData%OutData%NumOuts + CALL WrFileNR ( drvrData%OutData%unOutFile, Delim//trim(drvrData%OutData%WriteOutputUnt(I)) ) + ENDDO ! I + + WRITE (drvrData%OutData%unOutFile,'()') + + END IF + + IF (drvrData%WrBinOutFile) THEN + drvrData%OutData%TimeData(1) = 0.0_DbKi ! This is the first output time, which we will set later + drvrData%OutData%TimeData(2) = drvrData%TimeInterval ! This is the (constant) time between subsequent writes to the output file + END IF + + +END SUBROUTINE InitOutputFile +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE FillOutputFile(time, y_SeaSt, y_HD, drvrData, ErrStat, ErrMsg) + REAL(DbKi), INTENT( IN ) :: time + TYPE(SeaSt_OutputType), INTENT( IN ) :: y_SeaSt ! SeaState outputs + TYPE(HydroDyn_OutputType), INTENT( IN ) :: y_HD ! HydroDyn outputs + TYPE(HD_Drvr_Data), INTENT( INOUT ) :: drvrData + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + character(60) :: TmpStr + integer(IntKi) :: i, Indx + integer(IntKi) :: errStat2 ! temporary error status of the operation + character(ErrMsgLen) :: errMsg2 ! temporary error message + character(*), parameter :: RoutineName = 'FillOutputFile' + + ErrStat = ErrID_None + ErrMsg = "" + + IF ( drvrData%OutData%n_Out < drvrData%NSteps ) THEN + drvrData%OutData%n_Out = drvrData%OutData%n_Out + 1 + ELSE IF (drvrData%WrBinOutFile) THEN + ErrStat = ErrID_Warn + ErrMsg = 'Not all data could be written to the binary output file.' + END IF + + ! Fill data array with concatenated writeOutput data: + Indx = 0 + do i=1,drvrData%OutData%NumOutsMods(1) + Indx = Indx + 1 + drvrData%OutData%Storage(Indx, drvrData%OutData%n_Out) = y_SeaSt%WriteOutput(i) + end do + do i=1,drvrData%OutData%NumOutsMods(2) + Indx = Indx + 1 + drvrData%OutData%Storage(Indx, drvrData%OutData%n_Out) = y_HD%WriteOutput(i) + end do + + + IF (drvrData%WrTxtOutFile) THEN + ! Write one line of tabular output: + + ! time + WRITE( TmpStr, '('//trim(drvrData%OutData%OutFmt_t)//')' ) time + CALL WrFileNR( drvrData%OutData%unOutFile, trim(TmpStr) ) + + ! write the individual module output (convert to SiKi if necessary, so that we don't need to print so many digits in the exponent) + CALL WrNumAryFileNR ( drvrData%OutData%unOutFile, REAL(drvrData%OutData%Storage(:,drvrData%OutData%n_Out),SiKi), '"'//Delim//'"'//drvrData%OutData%OutFmt, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + ! write a new line (advance to the next line) + WRITE (drvrData%OutData%unOutFile,'()') + END IF + + + IF (drvrData%WrBinOutFile) THEN + ! store time data + IF ( drvrData%OutData%n_Out == 1_IntKi ) THEN + drvrData%OutData%TimeData(drvrData%OutData%n_Out) = time ! First time in the output file + END IF + END IF + + +END SUBROUTINE FillOutputFile +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE WriteOutputFile(drvrData, ErrStat, ErrMsg) + TYPE(HD_Drvr_Data), INTENT( IN ) :: drvrData + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ErrStat = ErrID_None + ErrMsg = "" + + IF (drvrData%WrTxtOutFile) THEN + IF (drvrData%OutData%unOutFile > 0) CLOSE(drvrData%OutData%unOutFile) + END IF + + IF (drvrData%WrBinOutFile .AND. drvrData%OutData%n_Out > 0) THEN + + CALL WrBinFAST(TRIM(drvrData%OutRootName)//'.outb', FileFmtID_ChanLen_In, TRIM(drvrData%OutData%FileDescLines(1))//' '//TRIM(drvrData%OutData%FileDescLines(2))//'; '//TRIM(drvrData%OutData%FileDescLines(3)), & + drvrData%OutData%WriteOutputHdr, drvrData%OutData%WriteOutputUnt, drvrData%OutData%TimeData, drvrData%OutData%Storage(:,1:drvrData%OutData%n_Out), ErrStat, ErrMsg) + + END IF + + +END SUBROUTINE WriteOutputFile +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE SetHDInputs_Constant(u_HD, mappingData, drvrData, ErrStat, ErrMsg) + TYPE(HydroDyn_InputType), INTENT( INOUT ) :: u_HD ! HydroDyn inputs + TYPE(HD_Drvr_MappingData), INTENT( INOUT ) :: mappingData + TYPE(HD_Drvr_Data), INTENT( IN ) :: drvrData + + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + integer(IntKi) :: errStat2 ! temporary error status of the operation + character(ErrMsgLen) :: errMsg2 ! temporary error message + character(*), parameter :: RoutineName = 'SetHDInputs_Constant' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (( drvrData%PRPInputsMod /= 2 ) .AND. ( drvrData%PRPInputsMod >= 0 )) THEN + + u_HD%PRPMesh%TranslationDisp(:,1) = drvrData%uPRPInSteady(1:3) + + ! Compute direction cosine matrix from the rotation angles + CALL SmllRotTrans( 'InputRotation', drvrData%uPRPInSteady(4), drvrData%uPRPInSteady(5), drvrData%uPRPInSteady(6), u_HD%PRPMesh%Orientation(:,:,1), 'Junk', ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + u_HD%PRPMesh%TranslationVel(:,1) = drvrData%uDotPRPInSteady(1:3) + u_HD%PRPMesh%RotationVel(:,1) = drvrData%uDotPRPInSteady(4:6) + u_HD%PRPMesh%TranslationAcc(:,1) = drvrData%uDotDotPRPInSteady(1:3) + u_HD%PRPMesh%RotationAcc(:,1) = drvrData%uDotDotPRPInSteady(4:6) + + CALL PRP_TransferToMotionInputs(u_HD, mappingData, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + END IF + +END SUBROUTINE SetHDInputs_Constant +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE SetHDInputs(time, n, u_HD, mappingData, drvrData, ErrStat, ErrMsg) + REAL(DbKi), INTENT( IN ) :: time + INTEGER(IntKi), INTENT( IN ) :: n + TYPE(HydroDyn_InputType), INTENT( INOUT ) :: u_HD ! HydroDyn inputs + TYPE(HD_Drvr_MappingData), INTENT( INOUT ) :: mappingData + TYPE(HD_Drvr_Data), INTENT( IN ) :: drvrData + + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + integer(IntKi) :: errStat2 ! temporary error status of the operation + character(ErrMsgLen) :: errMsg2 ! temporary error message + character(*), parameter :: RoutineName = 'SetHDInputs_Constant' + real(R8Ki) :: yInterp(size(drvrData%PRPin,2)) + integer(intKi) :: indxHigh, indxMid, indxLow + integer(intKi) :: i + + ErrStat = ErrID_None + ErrMsg = "" + + ! PRPInputsMod 2: Reads time series of positions, velocities, and accelerations for the platform reference point + IF ( drvrData%PRPInputsMod == 2 ) THEN + call InterpStpMat( time, drvrData%PRPinTime, drvrData%PRPin, mappingData%Ind, size(drvrData%PRPinTime), yInterp ) + + u_HD%PRPMesh%TranslationDisp(:,1) = yInterp(1:3) + + ! Compute direction cosine matrix from the rotation angles + +! maxAngle = max( maxAngle, abs(yInterp(4:6)) ) + + CALL SmllRotTrans( 'InputRotation', yInterp(4), yInterp(5), yInterp(6), u_HD%PRPMesh%Orientation(:,:,1), 'Junk', ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + u_HD%PRPMesh%TranslationVel(:,1) = yInterp( 7: 9) + u_HD%PRPMesh%RotationVel(:,1) = yInterp(10:12) + u_HD%PRPMesh%TranslationAcc(:,1) = yInterp(13:15) + u_HD%PRPMesh%RotationAcc(:,1) = yInterp(16:18) + + CALL PRP_TransferToMotionInputs(u_HD, mappingData, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + ELSEIF ( drvrData%PRPInputsMod < 0 ) THEN + + !@mhall: new kinematics input for moving bodies individually + ! PRPInputsMod < 0: Reads time series of positions for each body individually, and uses finite differences to also get velocities and accelerations. + ! The number of bodies is the negative of PRPInputsMod. + + i = min(n,drvrData%NSteps) + if (n <= drvrData%NSteps .and. .not. EqualRealNos( time, drvrData%PRPinTime(i) ) ) then + call SetErrStat(ErrID_Fatal, 'time does not match PRP input file data', ErrStat, ErrMsg, RoutineName) + return + end if + + ! platform reference point (PRP), and body 1-NBody displacements + u_HD%PRPMesh%TranslationDisp(:,1) = drvrData%PRPin(n,1:3) + DO I=1,drvrData%NBody + u_HD%WAMITMesh%TranslationDisp(:,I) = drvrData%PRPin(n, 6*I+1:6*I+3) + END DO + + ! PRP and body 1-NBody orientations (skipping the maxAngle stuff) + CALL SmllRotTrans( 'InputRotation', drvrData%PRPin(n, 4), drvrData%PRPin(n, 5), drvrData%PRPin(n, 6), u_HD%PRPMesh%Orientation(:,:,1), 'PRP orientation', ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + DO I=1, drvrData%NBody + CALL SmllRotTrans( 'InputRotation', drvrData%PRPin(n,6*I+4), drvrData%PRPin(n,6*I+5), drvrData%PRPin(n,6*I+6), u_HD%WAMITMesh%Orientation(:,:,I), 'body orientation', ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + END DO + + ! use finite differences for velocities and accelerations + IF (n == 1) THEN ! use forward differences for first time step + indxHigh = n+2 + indxMid = n+1 + indxLow = n + + u_HD%PRPMesh%TranslationVel(:,1) = (drvrData%PRPin(indxMid , 1:3) - drvrData%PRPin(indxLow , 1:3))/drvrData%TimeInterval + u_HD%PRPMesh%RotationVel( :,1) = (drvrData%PRPin(indxMid , 4:6) - drvrData%PRPin(indxLow , 4:6))/drvrData%TimeInterval + + DO I=1,drvrData%NBody + u_HD%WAMITMesh%TranslationVel(:,I) = (drvrData%PRPin(indxMid, 6*I+1:6*I+3) - drvrData%PRPin(indxLow, 6*I+1:6*I+3))/drvrData%TimeInterval + u_HD%WAMITMesh%RotationVel( :,I) = (drvrData%PRPin(indxMid, 6*I+4:6*I+6) - drvrData%PRPin(indxLow, 6*I+4:6*I+6))/drvrData%TimeInterval + END DO + + ELSE IF (n >= drvrData%NSteps) THEN ! use backward differences for last time step + indxHigh = n + indxMid = n-1 + indxLow = n-2 + + u_HD%PRPMesh%TranslationVel(:,1) = (drvrData%PRPin(indxHigh, 1:3) - drvrData%PRPin(indxMid, 1:3))/drvrData%TimeInterval + u_HD%PRPMesh%RotationVel( :,1) = (drvrData%PRPin(indxHigh, 4:6) - drvrData%PRPin(indxMid, 4:6))/drvrData%TimeInterval + + DO I=1,drvrData%NBody + u_HD%WAMITMesh%TranslationVel(:,I) = (drvrData%PRPin(indxHigh, 6*I+1:6*I+3) - drvrData%PRPin(indxMid, 6*I+1:6*I+3))/drvrData%TimeInterval + u_HD%WAMITMesh%RotationVel( :,I) = (drvrData%PRPin(indxHigh, 6*I+4:6*I+6) - drvrData%PRPin(indxMid, 6*I+4:6*I+6))/drvrData%TimeInterval + END DO + + ELSE ! otherwise use central differences for intermediate time steps + indxHigh = n+1 + indxMid = n + indxLow = n -1 + + u_HD%PRPMesh%TranslationVel(:,1) = (drvrData%PRPin(indxHigh, 1:3) - drvrData%PRPin(indxLow, 1:3))*0.5/drvrData%TimeInterval + u_HD%PRPMesh%RotationVel( :,1) = (drvrData%PRPin(indxHigh, 4:6) - drvrData%PRPin(indxLow, 4:6))*0.5/drvrData%TimeInterval + + DO I=1,drvrData%NBody + u_HD%WAMITMesh%TranslationVel(:,I) = (drvrData%PRPin(indxHigh, 6*I+1:6*I+3) - drvrData%PRPin(indxLow, 6*I+1:6*I+3))*0.5/drvrData%TimeInterval + u_HD%WAMITMesh%RotationVel( :,I) = (drvrData%PRPin(indxHigh, 6*I+4:6*I+6) - drvrData%PRPin(indxLow, 6*I+4:6*I+6))*0.5/drvrData%TimeInterval + END DO + + END IF + + ! calculate accelerations based on displacements: + u_HD%PRPMesh%TranslationAcc(:,1) = (drvrData%PRPin(indxHigh, 1:3) - 2*drvrData%PRPin(indxMid, 1:3) + drvrData%PRPin(indxLow, 1:3)) /(drvrData%TimeInterval**2) + u_HD%PRPMesh%RotationAcc( :,1) = (drvrData%PRPin(indxHigh, 4:6) - 2*drvrData%PRPin(indxMid, 4:6) + drvrData%PRPin(indxLow, 4:6)) /(drvrData%TimeInterval**2) + + DO I=1,drvrData%NBody + u_HD%WAMITMesh%TranslationAcc(:,I) = (drvrData%PRPin(indxHigh, 6*I+1:6*I+3) - 2*drvrData%PRPin(indxMid, 6*I+1:6*I+3) + drvrData%PRPin(indxLow, 6*I+1:6*I+3))/(drvrData%TimeInterval**2) + u_HD%WAMITMesh%RotationAcc( :,I) = (drvrData%PRPin(indxHigh, 6*I+4:6*I+6) - 2*drvrData%PRPin(indxMid, 6*I+4:6*I+6) + drvrData%PRPin(indxLow, 6*I+4:6*I+6))/(drvrData%TimeInterval**2) + END DO + + + ! half of the PRP_TransferToMotionInputs routine: + IF ( u_HD%Morison%Mesh%Initialized ) THEN + ! Map kinematics to the WAMIT mesh with 1 to NBody nodes + CALL Transfer_Point_to_Point( u_HD%PRPMesh, u_HD%Morison%Mesh, mappingData%HD_Ref_2_M_P, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + END IF + + ELSE + ! constant inputs are not recalculated at each time step. Instead this is called at initialization + ! CALL SetHDInputs_Constant() + END IF + +END SUBROUTINE +!---------------------------------------------------------------------------------------------------------------------------------- +!> Compute Rigid body loads at the PRP, after a perturbation of the PRP +SUBROUTINE PRP_CalcOutput(t, u, p, x, xd, z, OtherState, y, m, EDRPtMotion, Loads, mappingData, ErrStat, ErrMsg) + TYPE(MeshType) , INTENT(INOUT) :: EDRPtMotion !< + REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds + TYPE(HydroDyn_InputType), INTENT(INOUT) :: u !< Inputs at Time (note that this is intent out because we're copying the u%WAMITMesh into m%u_wamit%mesh) + TYPE(HydroDyn_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(HydroDyn_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(HydroDyn_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(HydroDyn_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time + TYPE(HydroDyn_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time + TYPE(HydroDyn_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh con- + !! nectivity information does not have to be recalculated) + TYPE(HydroDyn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + INTEGER(IntKi), INTENT( OUT) :: ErrStat !! Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !! Error message if ErrStat /= ErrID_None + + Real(ReKi) , INTENT(OUT) :: Loads(18) !< Loads at PRP and EDRP + TYPE(HD_Drvr_MappingData), INTENT(INOUT) :: mappingData + + INTEGER(IntKi) :: ErrStat2 ! Status of error message + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None + CHARACTER(*), PARAMETER :: RoutineName = 'PRP_CalcOutput' + + ErrStat = ErrID_None + ErrMsg = "" + + call HydroDyn_CalcOutput( t, u, p, x, xd, z, OtherState, y, m, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + ! Integrate all the mesh loads onto the platfrom reference Point (PRP) at (0,0,0) + Loads(1:6) = m%F_Hydro ! NOTE this is mapped to PRP using m%AllHdroOrigin + + ! --- Transfer loads from HydroOrigin to EDRPLoads + call Transfer_Point_to_Point( m%AllHdroOrigin, mappingData%EDRPt_Loads, mappingData%HD_RefLoads_2_ED_Ref, ErrStat2, ErrMsg2, u%PRPMesh, EDRPtMotion ) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + Loads(7:9) = mappingData%EDRPt_Loads%Force(:,1) + Loads(10:12) = mappingData%EDRPt_Loads%Moment(:,1) + + ! --- Transfer loads from HydroOrigin to (0,0,0) + call Transfer_Point_to_Point( m%AllHdroOrigin, mappingData%ZZZPtMeshLoads, mappingData%HD_RefLoads_2_ZZZLoads, ErrStat2, ErrMsg2, u%PRPMesh, mappingData%ZZZPtMeshMotion ) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + Loads(13:15) = mappingData%ZZZPtMeshLoads%Force(:,1) + Loads(16:18) = mappingData%ZZZPtMeshLoads%Moment(:,1) + + !print*,'LoadsPRP',Loads(1:6) + !print*,'LoadsEDP',Loads(7:12) + !print*,'Loads000',Loads(13:18) + +END SUBROUTINE PRP_CalcOutput +!---------------------------------------------------------------------------------------------------------------------------------- +!> Pertub the "PRP" inputs and trigger the rigid body motion on the other HydroDyn meshes +SUBROUTINE PRP_Perturb_u( n, perturb_sign, p, u, EDRPMotion, du, Motion_HDRP, mappingData, ErrStat, ErrMsg) + INTEGER( IntKi ) , INTENT(IN ) :: n !< number of array element to use + INTEGER( IntKi ) , INTENT(IN ) :: perturb_sign !< +1 or -1 (value to multiply perturbation by; positive or negative difference) + TYPE(HydroDyn_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(HydroDyn_InputType), target , INTENT(INOUT) :: u !< perturbed HD inputs + TYPE(MeshType) , target , INTENT(INOUT) :: EDRPMotion !< + REAL( R8Ki ) , INTENT( OUT) :: du !< amount that specific input was perturbed + logical , INTENT(IN ) :: Motion_HDRP !< If True, perturb the PRP otherwise perturb the EDRP for motion + TYPE(HD_Drvr_MappingData), INTENT(INOUT) :: mappingData + integer(IntKi) , intent( out) :: errStat ! Status of error message + character(*) , intent( out) :: errMsg ! Error message if ErrStat /= ErrID_None + + type(MeshType), pointer :: pointMesh !Alias + + ! local variables + integer :: fieldType ! 1=TranslationDisp, 2=Orientation, 3=TranslationVel etc. 6 + integer :: fieldIndx + integer :: fieldIndx6 + integer , parameter :: node =1 + Real(R8Ki) perturb_t, perturb +! REAL(R8Ki) :: dcm (3,3) ! The resulting transformation matrix from X to x, (-). +! Real(R8Ki) :: theta(3) + INTEGER(IntKi) :: ErrStat2 ! Status of error message + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None + character(*), parameter :: RoutineName = 'PRP_Perturb_u' + + ErrStat = ErrID_None + ErrMsg = "" + + ! From "n" to: field type, axis, variable + fieldType = int((n-1)/3)+1 ! 1=TranslationDisp, 2=Orientation, 3=TranslationVel etc. 6 + fieldIndx = mod(n-1,3)+1 ! 1=x, 2=y 3=z (axis) + fieldIndx6= mod(n-1,6)+1 ! 1=x, 2=y 3=z 4=theta_x, 5=theta_y 6=theta_z (variable) + + ! Perturbation amplitude + perturb_t = 0.02_ReKi*D2R * max(p%WtrDpth,1.0_ReKi) ! translation input scaling + perturb = 2*D2R ! rotational input scaling + !perturb_t = 1.0 + !perturb = 0.1 + if (fieldIndx6<=3) then + du = perturb_t ! TranslationDisp,TranslationVel, TranslationAcc + elseif (fieldIndx<=6) then !rotational fields + du = perturb ! Orientation, RotationVel, RotationAcc + else + call SetErrStat(ErrID_Fatal, 'Wrong field index', ErrStat, ErrMsg, RoutineName) + return + endif + + if (Motion_HDRP) then + pointMesh => u%PRPMesh + else + pointMesh => EDRPMotion + endif + + ! --- Perturbing the point mesh + !print*,'' + !print*,'Perturb',n, perturb_sign + SELECT CASE(fieldType) + CASE ( 1) !Module/Mesh/Field: u%PRPMesh%TranslationDisp = 1 + pointMesh%TranslationDisp (fieldIndx,node) = pointMesh%TranslationDisp (fieldIndx,node) + du * perturb_sign + CASE ( 2) !Module/Mesh/Field: u%PRPMesh%Orientation = 2 + CALL PerturbOrientationMatrix( pointMesh%Orientation(:,:,node), du * perturb_sign, fieldIndx, UseSmlAngle=.true. ) + CASE ( 3) !Module/Mesh/Field: u%PRPMesh%TranslationVel = 3 + pointMesh%TranslationVel( fieldIndx,node) = pointMesh%TranslationVel( fieldIndx,node) + du * perturb_sign + CASE ( 4) !Module/Mesh/Field: u%PRPMesh%RotationVel = 4 + pointMesh%RotationVel (fieldIndx,node) = pointMesh%RotationVel (fieldIndx,node) + du * perturb_sign + CASE ( 5) !Module/Mesh/Field: u%PRPMesh%TranslationAcc = 5 + pointMesh%TranslationAcc( fieldIndx,node) = pointMesh%TranslationAcc( fieldIndx,node) + du * perturb_sign + CASE ( 6) !Module/Mesh/Field: u%PRPMesh%RotationAcc = 6 + pointMesh%RotationAcc(fieldIndx,node) = pointMesh%RotationAcc(fieldIndx,node) + du * perturb_sign + CASE default + call SetErrStat(ErrID_Fatal, 'Wrong fieldType', ErrStat, ErrMsg, RoutineName) + END SELECT + + ! --- Trigger ED->PRP or PRP->ED + if (Motion_HDRP) then + ! PRP->ED + call Transfer_Point_to_Point( u%PRPMesh, EDRPMotion, mappingData%HD_Ref_2_ED_Ref, ErrStat2, ErrMsg2 ); + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + else + ! ED->PRP + call Transfer_Point_to_Point( EDRPMotion, u%PRPMesh, mappingData%ED_Ref_2_HD_Ref, ErrStat2, ErrMsg2 ); + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + !print*,'-------------------------------------------- EDRP -------------------------------------' + !call MeshPrintInfo (CU, EDRPMotion) + !print*,'' + !print*,'-------------------------------------------- PRP -------------------------------------' + !call MeshPrintInfo (CU, u%PRPMesh) + endif + + CALL PRP_TransferToMotionInputs(u, mappingData, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + +END SUBROUTINE PRP_Perturb_u +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE PRP_TransferToMotionInputs(u, mappingData, ErrStat, ErrMsg) + TYPE(HydroDyn_InputType), target , INTENT(INOUT) :: u !< perturbed HD inputs + TYPE(HD_Drvr_MappingData), INTENT(INOUT) :: mappingData + integer(IntKi) , intent( out) :: errStat ! Status of error message + character(*) , intent( out) :: errMsg ! Error message if ErrStat /= ErrID_None + + ! local variables + INTEGER(IntKi) :: ErrStat2 ! Status of error message + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None + character(*), parameter :: RoutineName = 'PRP_TransferToMotionInputs' + + ErrStat = ErrID_None + ErrMsg = "" + + + ! Map PRP kinematics to the WAMIT mesh with 1 to NBody nodes + IF ( u%WAMITMesh%Initialized ) THEN + CALL Transfer_Point_to_Point( u%PRPMesh, u%WAMITMesh, mappingData%HD_Ref_2_WB_P, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + END IF + + ! Map PRP kinematics to the Morison mesh + if ( u%Morison%Mesh%Initialized ) then + CALL Transfer_Point_to_Point( u%PRPMesh, u%Morison%Mesh, mappingData%HD_Ref_2_M_P, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + end if + +END SUBROUTINE PRP_TransferToMotionInputs +!---------------------------------------------------------------------------------------------------------------------------------- +!> Calculate the partial derivative of the output functions (Y) with respect to the inputs (u) +SUBROUTINE PRP_JacobianPInput( t, u, p, x, xd, z, OtherState, y, m, dYdu, Motion_HDRP, mappingData, ErrStat, ErrMsg) + REAL(DbKi), INTENT(IN ) :: t !< Time in seconds at operating point + TYPE(HydroDyn_InputType), INTENT(INOUT) :: u !< Inputs at Time (note that this is intent out because we're copying the u%WAMITMesh into m%u_wamit%mesh) + TYPE(HydroDyn_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(HydroDyn_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(HydroDyn_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(HydroDyn_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time + TYPE(HydroDyn_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time + TYPE(HydroDyn_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh con- + !! nectivity information does not have to be recalculated) + TYPE(HydroDyn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + REAL(R8Ki), ALLOCATABLE, OPTIONAL, INTENT(INOUT) :: dYdu(:,:) !< Partial derivatives of output functions (Y) with respect + logical, INTENT(IN ) :: Motion_HDRP !< If True, perturb the PRP otherwise perturb the EDRP for motion + TYPE(HD_Drvr_MappingData), INTENT(INOUT) :: mappingData + + ! local variables + TYPE(HydroDyn_OutputType) :: y_tmp + TYPE(HydroDyn_InputType) :: u_perturb + TYPE(MeshType) :: EDRPtMotion_perturb + Real(ReKi) :: Loads_p(18) + Real(ReKi) :: Loads_m(18) + REAL(R8Ki) :: delta ! delta change in input or state + integer(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'PRP_JacobianPInput' + + ErrStat = ErrID_None + ErrMsg = '' + + ! allocate dYdu if necessary + if (.not. allocated(dYdu)) then + call AllocAry(dYdu, size(Loads_p), 18, 'dYdu', ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + if (ErrStat >= AbortErrLev) return + + dYdu=0.0_ReKi + endif + + ! make a copy of the inputs to perturb + call HydroDyn_CopyInput( u, u_perturb, MESH_NEWCOPY, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + call MeshCopy(mappingData%EDRPt_Motion, EDRPtMotion_perturb, MESH_NEWCOPY, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + + ! make a copy of outputs because we will need two for the central difference computations (with orientations) + call HydroDyn_CopyOutput( y, y_tmp, MESH_NEWCOPY, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + + if (ErrStat >= AbortErrLev) then + call cleanup() + return + end if + + do i=1,size(dYdu,2) + ! get u_op + delta u + call HydroDyn_CopyInput( u, u_perturb, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + call MeshCopy(mappingData%EDRPt_Motion, EDRPtMotion_perturb, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + call PRP_Perturb_u(i, 1, p, u_perturb, EDRPtMotion_perturb, delta, Motion_HDRP, mappingData, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + ! compute y at u_op + delta u + call PRP_CalcOutput( t, u_perturb, p, x, xd, z, OtherState, y_tmp, m, EDRPtMotion_perturb, Loads_p, mappingData, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + + ! get u_op - delta u + call HydroDyn_CopyInput( u, u_perturb, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + call MeshCopy(mappingData%EDRPt_Motion, EDRPtMotion_perturb, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + call PRP_Perturb_u( i, -1, p, u_perturb, EDRPtMotion_perturb, delta , Motion_HDRP, mappingData, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + ! compute y at u_op - delta u + call PRP_CalcOutput( t, u_perturb, p, x, xd, z, OtherState, y_tmp, m, EDRPtMotion_perturb, Loads_m, mappingData, ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + + ! get central difference: + dYdu(:,i) = (Loads_p-Loads_m) / (2.0_R8Ki*delta) + end do + + call cleanup() + +contains + subroutine cleanup() + call HydroDyn_DestroyOutput( y_tmp, ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + call HydroDyn_DestroyInput ( u_perturb, ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + call MeshDestroy( EDRPtMotion_perturb, ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2, ErrStat,ErrMsg,RoutineName) + end subroutine cleanup + +END SUBROUTINE PRP_JacobianPInput +!---------------------------------------------------------------------------------------------------------------------------------- +! --- Rigid body Linearization at t=0 +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE Linearization(t, u, p, x, xd, z, OtherState, y, m, Motion_HDRP, mappingData, ErrStat, ErrMsg) + REAL(DbKi), INTENT(IN ) :: t !< Time in seconds at operating point + TYPE(HydroDyn_InputType), INTENT(INOUT) :: u !< Inputs at Time (note that this is intent out because we're copying the u%WAMITMesh into m%u_wamit%mesh) + TYPE(HydroDyn_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(HydroDyn_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(HydroDyn_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(HydroDyn_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time + TYPE(HydroDyn_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time + TYPE(HydroDyn_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh con- + !! nectivity information does not have to be recalculated) + TYPE(HydroDyn_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + logical , INTENT(IN ) :: Motion_HDRP !< If True, perturb the PRP otherwise perturb the EDRP for motion + TYPE(HD_Drvr_MappingData), INTENT(INOUT) :: mappingData + integer(IntKi) , intent( out) :: errStat ! Status of error message + character(*) , intent( out) :: errMsg ! Error message if ErrStat /= ErrID_None + + real(R8Ki), allocatable, dimension(:,:) :: dYdu + integer :: i,j + character(40) :: sMotion + CHARACTER(13) :: sTime + character(*), parameter :: Fmt = 'F18.5' + + + ErrStat = ErrID_None + ErrMsg = "" + + !print*,'>>>> Linearize', drvrData%PtfmRefzt + if (Motion_HDRP) then + sMotion ='motions at PRP' + else + sMotion ='motions at EDRP' + endif + + WRITE (sTime,'(F13.6)') t + + CALL WrScr( '') + CALL WrScr( 'Performing rigid-body linearization at t='//sTime//' s with '//trim(sMotion) ) + call PRP_JacobianPInput( t, u, p, x, xd, z, OtherState, y, m, dYdu, Motion_HDRP, mappingData, ErrStat, ErrMsg) + if (ErrStat >= AbortErrLev) then + call cleanup() + return + end if + + + do i=1,size(dYdu,1) + do j=1,size(dYdu,2) + if(abs(dYdu(i,j))<1e-5) then + dYdu(i,j)=0.0_ReKi + endif + enddo + enddo + + ! for some reason, printing to CU skips printing the first letter of the matrix name, so I added a blank before the matrix name: + CALL WrScr( '---------------------------------------------------------------------------------------') + call WrMatrix( dYdu( 1: 6, 1: 6), CU, Fmt, ' K (Loads at PRP, '//trim(sMotion)//')' ) ! HD F_Hydro loads; translation and rotation displacement + call WrMatrix( dYdu( 7:12, 1: 6), CU, Fmt, ' K (Loads at EDRP, '//trim(sMotion)//')' ) ! HD AllHdroOrigin loads transferred to EDRP; translation and rotation displacement + call WrMatrix( dYdu(13:18, 1: 6), CU, Fmt, ' K (Loads at 0,0,0, fixed, '//trim(sMotion)//')' ) ! HD AllHdroOrigin loads transferred to fixed 0,0,0 point; translation and rotation displacement + call WrMatrix( dYdu( 1: 6, 7:12), CU, Fmt, ' C' ) ! HD F_Hydro loads; translation and rotation velocity + call WrMatrix( dYdu( 1: 6, 13:18), CU, Fmt, ' M' ) ! HD F_Hydro loads; translation and rotation acceleration + CALL WrScr( '') + + call cleanup() + +contains + subroutine cleanup() + if (allocated(dYdu)) deallocate(dYdu) + end subroutine cleanup + +END SUBROUTINE LINEARIZATION +!---------------------------------------------------------------------------------------------------------------------------------- +END MODULE HydroDynDriverSubs + diff --git a/modules/hydrodyn/src/HydroDyn_Input.f90 b/modules/hydrodyn/src/HydroDyn_Input.f90 index fcbac6fa6c..1f39d2c7fe 100644 --- a/modules/hydrodyn/src/HydroDyn_Input.f90 +++ b/modules/hydrodyn/src/HydroDyn_Input.f90 @@ -24,113 +24,15 @@ MODULE HydroDyn_Input USE NWTC_Library USE HydroDyn_Types USE HydroDyn_Output - USE Waves - USE Waves2_Output + USE SeaState USE Morison USE Morison_Output USE NWTC_RandomNumber IMPLICIT NONE - PRIVATE :: CheckMeshOutput - CONTAINS -!==================================================================================================== -FUNCTION CheckMeshOutput( output, numMemberOut, MOutLst, numJointOut ) -! The routine -!---------------------------------------------------------------------------------------------------- -! - CHARACTER(ChanLen), INTENT ( IN ) :: output - INTEGER, INTENT ( IN ) :: numMemberOut - TYPE(Morison_MOutput), INTENT ( IN ) :: MOutLst(:) - INTEGER, INTENT ( IN ) :: numJointOut - !INTEGER, INTENT ( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - !CHARACTER(*), INTENT ( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - LOGICAL :: CheckMeshOutput - - INTEGER :: ErrStat - CHARACTER(ChanLen) :: outputTmp - INTEGER :: indx1, indx2 - CHARACTER(4) :: testStr - outputTmp = TRIM(output) - - testStr = outputTmp(1:4) - CALL Conv2UC( testStr ) - - ! Reverse the sign (+/-) of the output channel if the user prefixed the - ! channel name with a '-', '_', 'm', or 'M' character indicating "minus". - - IF ( INDEX( '-_', outputTmp(1:1) ) > 0 ) THEN - - ! ex, '-TipDxc1' causes the sign of TipDxc1 to be switched. - outputTmp = outputTmp(2:) - testStr = outputTmp(1:4) - CALL Conv2UC( testStr ) - - ELSE IF ( INDEX( 'mM', outputTmp(1:1) ) > 0 ) THEN ! We'll assume this is a variable name for now, (if not, we will check later if OutListTmp(2:) is also a variable name) - - IF ( ( INDEX( 'mM', outputTmp(2:2) ) > 0 ) .OR. ( INDEX( 'jJ', outputTmp(2:2) ) > 0 ) ) THEN - outputTmp = outputTmp(2:) - - END IF - - ELSE IF ( INDEX( 'jJ', outputTmp(1:1) ) == 0 .AND. ( testStr /= 'WAVE' ) ) THEN - ! Invalid output label because the label does not start: -M,-m,-J,-j,_M,_m,_J,_j,MM,mM,Mm,mm,MJ,mJ,Mj,mj, j,J,m,M - CheckMeshOutput = .FALSE. - RETURN - END IF - - IF (( INDEX( 'mM', outputTmp(1:1) ) > 0 ) .OR. ( INDEX( 'jJ', outputTmp(1:1) ) > 0 )) THEN - ! Read the second character, it should be a number from 1 to 9 - - READ( outputTmp(2:2), '(i1)', IOSTAT = ErrStat) indx1 - IF ( ErrStat /=0 ) THEN - ! Not a numerical digit!!! - CheckMeshOutput = .FALSE. - RETURN - END IF - - ! Examine members - IF ( INDEX( 'mM', outputTmp(1:1) ) > 0 ) THEN - IF ( indx1 > numMemberOut ) THEN - CheckMeshOutput = .FALSE. - RETURN - END IF - ! Now make sure the next letter is n or N and then look for the second index - IF ( INDEX( 'nN', outputTmp(3:3) ) == 0 ) THEN - ! Invalid member label - CheckMeshOutput = .FALSE. - RETURN - END IF - READ( outputTmp(4:4), '(i1)', IOSTAT = ErrStat) indx2 - IF ( indx2 > MOutLst(indx1)%NOutLoc ) THEN - CheckMeshOutput = .FALSE. - RETURN - END IF - - - END IF - - IF ( INDEX( 'jJ', outputTmp(1:1) ) > 0 ) THEN - IF ( indx1 > numJointOut ) THEN - CheckMeshOutput = .FALSE. - RETURN - END IF - END IF - ELSE - ! This should be a wave elevation channel - READ( outputTmp(5:5), '(i1)', IOSTAT = ErrStat) indx1 - IF ( ErrStat /=0 ) THEN - ! Not a numerical digit!!! - CheckMeshOutput = .FALSE. - RETURN - END IF - END IF - - CheckMeshOutput = .TRUE. -END FUNCTION CheckMeshOutput !==================================================================================================== SUBROUTINE PrintBadChannelWarning(NUserOutputs, UserOutputs , foundMask, ErrStat, ErrMsg ) @@ -160,7 +62,7 @@ END SUBROUTINE PrintBadChannelWarning !==================================================================================================== -SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, defMSL2SWL, FileInfo_In, InputFileData, ErrStat, ErrMsg ) +SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, FileInfo_In, InputFileData, ErrStat, ErrMsg ) ! This public subroutine reads the input required for HydroDyn from the file whose name is an ! input parameter. !---------------------------------------------------------------------------------------------------- @@ -168,9 +70,6 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp ! Passed variables CHARACTER(*), intent(in ) :: InputFileName !< The name of the input file, for putting in echo file. CHARACTER(*), intent(in ) :: OutRootName !< The rootname of the echo file, possibly opened in this routine - real(ReKi), intent(in ) :: defWtrDens !< default value for water density - real(ReKi), intent(in ) :: defWtrDpth !< default value for water depth - real(ReKi), intent(in ) :: defMSL2SWL !< default value for mean sea level to still water level TYPE(FileInfoType), INTENT(IN ) :: FileInfo_In !< The derived type for holding the file information TYPE(HydroDyn_InputFile), INTENT(INOUT) :: InputFileData ! the hydrodyn input file data INTEGER, INTENT( OUT) :: ErrStat ! returns a non-zero value when an error occurs @@ -181,16 +80,16 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp CHARACTER( 2) :: strI ! string version of the loop counter INTEGER :: UnEc ! The local unit number for this module's echo file CHARACTER(1024) :: EchoFile ! Name of HydroDyn echo file - CHARACTER(1024) :: Line ! String to temporarially hold value of read line + CHARACTER(MaxFileInfoLineLen) :: Line ! String to temporarially hold value of read line real(ReKi), ALLOCATABLE :: tmpVec1(:), tmpVec2(:) ! Temporary arrays for WAMIT data integer(IntKi) :: startIndx, endIndx ! indices into working arrays INTEGER, ALLOCATABLE :: tmpArray(:) ! Temporary array storage of the joint output list REAL(ReKi), ALLOCATABLE :: tmpReArray(:) ! Temporary array storage of the joint output list - CHARACTER(1) :: Line1 ! The first character of an input line INTEGER(IntKi) :: CurLine !< Current entry in FileInfo_In%Lines array INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_ParaseInput' + ! Initialize local data UnEc = -1 @@ -208,7 +107,7 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp if (Failed()) return; if ( InputFileData%Echo ) then - EchoFile = TRIM(OutRootName)//'.HD.ech' + EchoFile = TRIM(OutRootName)//'.ech' CALL OpenEcho ( UnEc, TRIM(EchoFile), ErrStat2, ErrMsg2 ) if (Failed()) return; WRITE(UnEc, '(A)') 'Echo file for AeroDyn 15 primary input file: '//trim(InputFileName) @@ -221,248 +120,6 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp if (Failed()) return endif - - !------------------------------------------------------------------------------------------------- - ! Environmental conditions section - !------------------------------------------------------------------------------------------------- - if ( InputFileData%Echo ) WRITE(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo - CurLine = CurLine + 1 - - ! WtrDens - Water density. - CALL ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDens', InputFileData%Waves%WtrDens, real(defWtrDens,SiKi), ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WtrDpth - Water depth - CALL ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDpth', InputFileData%Morison%WtrDpth, defWtrDpth, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! MSL2SWL - CALL ParseVarWDefault ( FileInfo_In, CurLine, 'MSL2SWL', InputFileData%Morison%MSL2SWL, defMSL2SWL, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - - !------------------------------------------------------------------------------------------------- - ! Data section for waves - !------------------------------------------------------------------------------------------------- - if ( InputFileData%Echo ) WRITE(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo - CurLine = CurLine + 1 - - ! WaveMod - Wave kinematics model switch. - call ParseVar( FileInfo_In, CurLine, 'WaveMod', InputFileData%Waves%WaveModChr, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - CALL Conv2UC( InputFileData%Waves%WaveModChr ) ! Convert Line to upper case. - - InputFileData%Waves%WavePhase = 0.0 - InputFileData%Waves%WaveNDAmp = .FALSE. - - - ! WaveStMod - Model switch for stretching incident wave kinematics to instantaneous free surface. - call ParseVar( FileInfo_In, CurLine, 'WaveStMod', InputFileData%Waves%WaveStMod, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveTMax - Analysis time for incident wave calculations. - call ParseVar( FileInfo_In, CurLine, 'WaveTMax', InputFileData%Waves%WaveTMax, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveDT - Time step for incident wave calculations - call ParseVar( FileInfo_In, CurLine, 'WaveDT', InputFileData%Waves%WaveDT, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveHs - Significant wave height - call ParseVar( FileInfo_In, CurLine, 'WaveHs', InputFileData%Waves%WaveHs, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveTp - Peak spectral period. - call ParseVar( FileInfo_In, CurLine, 'WaveTp', InputFileData%Waves%WaveTp, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WavePkShp - Peak shape parameter. - call ParseVar( FileInfo_In, CurLine, 'WavePkShp', InputFileData%Waves%WavePkShpChr, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WvLowCOff - Low Cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s). - call ParseVar( FileInfo_In, CurLine, 'WvLowCOff', InputFileData%Waves%WvLowCOff, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WvHiCOff - High Cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s). - call ParseVar( FileInfo_In, CurLine, 'WvHiCOff', InputFileData%Waves%WvHiCOff, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveDir - Mean wave heading direction. - call ParseVar( FileInfo_In, CurLine, 'WaveDir', InputFileData%Waves%WaveDir, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveDirMod - Directional spreading function {0: None, 1: COS2S} (-) [Used only if WaveMod=2] - call ParseVar( FileInfo_In, CurLine, 'WaveDirMod', InputFileData%Waves%WaveDirMod, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveDirSpread - Spreading coefficient [only used if WaveMod=2 and WaveDirMod=1] - call ParseVar( FileInfo_In, CurLine, 'WaveDirSpread', InputFileData%Waves%WaveDirSpread, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveNDir - The number of wave directions to calculate [must be odd; only used if WaveDirMod=1] - call ParseVar( FileInfo_In, CurLine, 'WaveNDir', InputFileData%Waves%WaveNDir, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveDirRange - Full range of the wave directions from WaveDir - WaveDirRange/2 to WaveDir + WaveDirRange/2 (only used if WaveMod=2 and WaveDirMod=1) - call ParseVar( FileInfo_In, CurLine, 'WaveDirRange', InputFileData%Waves%WaveDirRange, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! Negative values should be treated as positive. - InputFileData%Waves%WaveDirRange = ABS( InputFileData%Waves%WaveDirRange ) - - - ! WaveSeed(1) - call ParseVar( FileInfo_In, CurLine, 'WaveSeed(1)', InputFileData%Waves%WaveSeed(1), ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - InputFileData%Waves%RNG%RandSeed(1) = InputFileData%Waves%WaveSeed(1) - - !WaveSeed(2) - call ParseVar( FileInfo_In, CurLine, 'WaveSeed(2)', Line, ErrStat2, ErrMsg2, UnEc ) ! Read into a string and then parse - if (Failed()) return; - - READ (Line,*,IOSTAT=ErrStat2) Line1 ! check the first character to make sure we don't have T/F, which can be interpreted as 1/-1 or 0 in Fortran - CALL Conv2UC( Line1 ) - IF ( (Line1 == 'T') .OR. (Line1 == 'F') ) THEN - ErrStat2 = ErrID_Fatal - ErrMsg2 = ' WaveSeed(2): Invalid RNG type.' - if (Failed()) return; - ENDIF - -!FIXME: there is something a little strange here. RandSeed(2) is an integer, but what if we get an error on the next read? - READ (Line,*,IOSTAT=ErrStat2) InputFileData%Waves%WaveSeed(2) - InputFileData%Waves%RNG%RandSeed(2) = InputFileData%Waves%WaveSeed(2) - - IF (ErrStat2 == 0) THEN ! the user entered a number - InputFileData%Waves%RNG%RNG_type = "NORMAL" - InputFileData%Waves%RNG%pRNG = pRNG_INTRINSIC - - ELSE - - InputFileData%Waves%RNG%RNG_type = ADJUSTL( Line ) - CALL Conv2UC( InputFileData%Waves%RNG%RNG_type ) - - IF ( InputFileData%Waves%RNG%RNG_type == "RANLUX") THEN - InputFileData%Waves%RNG%pRNG = pRNG_RANLUX - ELSE - ErrStat2 = ErrID_Fatal - ErrMsg2 = ' WaveSeed(2): Invalid alternative random number generator.' - if (Failed()) return; - ENDIF - - ENDIF - - - ! WaveNDAmp - Flag for normally distributed amplitudes. - call ParseVar( FileInfo_In, CurLine, 'WaveNDAmp', InputFileData%Waves%WaveNDAmp, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WvKinFile - call ParseVar( FileInfo_In, CurLine, 'WvKinFile', InputFileData%Waves%WvKinFile, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! NWaveElev - call ParseVar( FileInfo_In, CurLine, 'NWaveElev', InputFileData%Waves%NWaveElev, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! This check is needed here instead of being located in HydroDynInput_ProcessInputData() because - ! we need to allocate arrays. If _GetInput() was skipped, then these array would already have - ! been allocated and populated. - - IF ( InputFileData%Waves%NWaveElev < 0 .OR. InputFileData%Waves%NWaveElev > 9 ) THEN - ErrStat2 = ErrID_Fatal - ErrMsg2 = 'NWaveElev must be greater than or equal to zero and less than 10.' - if (Failed()) return; - END IF - - ! allocate space for the output location arrays: - CALL AllocAry( InputFileData%Waves%WaveElevxi, InputFileData%Waves%NWaveElev, 'WaveElevxi' , ErrStat2, ErrMsg2); if (Failed()) return; - CALL AllocAry( InputFileData%Waves%WaveElevyi, InputFileData%Waves%NWaveElev, 'WaveElevyi' , ErrStat2, ErrMsg2); if (Failed()) return; - - ! WaveElevxi - call ParseAry ( FileInfo_In, CurLine, 'WaveElevxi.', InputFileData%Waves%WaveElevxi, InputFileData%Waves%NWaveElev, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WaveElevyi - call ParseAry ( FileInfo_In, CurLine, 'WaveElevyi.', InputFileData%Waves%WaveElevyi, InputFileData%Waves%NWaveElev, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - - !------------------------------------------------------------------------------------------------- - ! Data section for 2nd Order Waves - !------------------------------------------------------------------------------------------------- - if ( InputFileData%Echo ) WRITE(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo - CurLine = CurLine + 1 - - ! WvDiffQTFF - Second order waves -- difference forces - call ParseVar( FileInfo_In, CurLine, 'WvDiffQTF', InputFileData%Waves2%WvDiffQTFF, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WvSumQTFF - Second order waves -- sum forces - call ParseVar( FileInfo_In, CurLine, 'WvSumQTF', InputFileData%Waves2%WvSumQTFF, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WvLowCOffD -- Minimum frequency used in the difference methods (rad/s) [Only used if DiffQTF /= 0] - call ParseVar( FileInfo_In, CurLine, 'WvLowCOffD', InputFileData%Waves2%WvLowCOffD, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WvHiCOffD -- Maximum frequency used in the difference methods (rad/s) [Only used if DiffQTF /= 0] - call ParseVar( FileInfo_In, CurLine, 'WvHiCOffD', InputFileData%Waves2%WvHiCOffD, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WvLowCOffS -- Minimum frequency used in the sum-QTF (rad/s) [Only used if SumQTF /= 0] - call ParseVar( FileInfo_In, CurLine, 'WvLowCOffS', InputFileData%Waves2%WvLowCOffS, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! WvHiCOffS -- Maximum frequency used in the sum-QTF (rad/s) [Only used if SumQTF /= 0] - call ParseVar( FileInfo_In, CurLine, 'WvHiCOffS', InputFileData%Waves2%WvHiCOffS, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - - !------------------------------------------------------------------------------------------------- - ! Data section for current - !------------------------------------------------------------------------------------------------- - if ( InputFileData%Echo ) WRITE(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo - CurLine = CurLine + 1 - - ! CurrMod - Current profile model switch - call ParseVar( FileInfo_In, CurLine, 'CurrMod', InputFileData%Current%CurrMod, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! CurrSSV0 - Sub-surface current velocity at still water level - call ParseVar( FileInfo_In, CurLine, 'CurrSSV0', InputFileData%Current%CurrSSV0, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - - ! CurrSSDirChr - Sub-surface current heading direction - call ParseVar( FileInfo_In, CurLine, 'CurrSSDir', InputFileData%Current%CurrSSDirChr, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - CALL Conv2UC( InputFileData%Current%CurrSSDirChr ) ! Convert Line to upper case. - - - ! CurrNSRef - Near-surface current reference depth. - call ParseVar( FileInfo_In, CurLine, 'CurrNSRef', InputFileData%Current%CurrNSRef, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! CurrNSV0 - Near-surface current velocity at still water level. - call ParseVar( FileInfo_In, CurLine, 'CurrNSV0', InputFileData%Current%CurrNSV0, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! CurrNSDir - Near-surface current heading direction. - call ParseVar( FileInfo_In, CurLine, 'CurrNSDir', InputFileData%Current%CurrNSDir, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! CurrDIV - Depth-independent current velocity. - call ParseVar( FileInfo_In, CurLine, 'CurrDIV', InputFileData%Current%CurrDIV, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - ! CurrDIDir - Depth-independent current heading direction. - call ParseVar( FileInfo_In, CurLine, 'CurrDIDir', InputFileData%Current%CurrDIDir, ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; - - !------------------------------------------------------------------------------------------------- ! Data section for floating platform !------------------------------------------------------------------------------------------------- @@ -478,6 +135,15 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp call ParseVar( FileInfo_In, CurLine, 'ExctnMod', InputFileData%WAMIT%ExctnMod, ErrStat2, ErrMsg2, UnEc ) if (Failed()) return; + ! ExctnDisp - Use body displacements to compute Wave Excitations {0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0]} (switch) + call ParseVar( FileInfo_In, CurLine, 'ExctnDisp', InputFileData%WAMIT%ExctnDisp, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! ExctnCutOff - Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] [used only when PotMod=1, ExctnMod>0, and ExctnDisp=2]) + ! [STATE-SPACE REQUIRES *.ssexctn INPUT FILE] + call ParseVar( FileInfo_In, CurLine, 'ExctnCutOff', InputFileData%WAMIT%ExctnCutOff, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + ! RdtnMod - Radiation memory-effect model {1: convolution, 2: state-space} (switch) ! [STATE-SPACE REQUIRES *.ss INPUT FILE] call ParseVar( FileInfo_In, CurLine, 'RdtnMod', InputFileData%WAMIT%RdtnMod, ErrStat2, ErrMsg2, UnEc ) @@ -665,6 +331,19 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp end do END DO + !------------------------------------------------------------------------------------------------- + ! Strip Theory Section + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) WRITE(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! WaveDisp - Method of computing Wave Kinematics {0: use undisplaced position, 1: use displaced position) } (switch) + call ParseVar( FileInfo_In, CurLine, 'WaveDisp', InputFileData%Morison%WaveDisp, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! AMMod - Method of computing distributed added-mass force. {0: nodes below SWL when undisplaced. 1: Up to the free surface} (switch) + call ParseVar( FileInfo_In, CurLine, 'AMMod', InputFileData%Morison%AMMod, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; !------------------------------------------------------------------------------------------------- ! Axial Coefficients Section @@ -683,7 +362,7 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp CurLine = CurLine + 1 IF ( InputFileData%Morison%NAxCoefs > 0 ) THEN - CALL AllocAry( tmpReArray, 4, 'temporary array for AxialCoefs', ErrStat2, ErrMsg2 ) + CALL AllocAry( tmpReArray, 7, 'temporary array for AxialCoefs', ErrStat2, ErrMsg2 ) if (Failed()) return; ! Allocate memory for Axial Coef-related arrays @@ -702,6 +381,9 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp InputFileData%Morison%AxialCoefs(I)%AxCd = tmpReArray(2) InputFileData%Morison%AxialCoefs(I)%AxCa = tmpReArray(3) InputFileData%Morison%AxialCoefs(I)%AxCp = tmpReArray(4) + InputFileData%Morison%AxialCoefs(I)%AxFDMod = NINT(tmpReArray(5)) + InputFileData%Morison%AxialCoefs(I)%AxVnCOff = tmpReArray(6) + InputFileData%Morison%AxialCoefs(I)%AxFDLoFSc = tmpReArray(7) END DO if (allocated(tmpReArray)) deallocate(tmpReArray) @@ -805,10 +487,14 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp if ( InputFileData%Echo ) WRITE(UnEc, '(A)') 'Simple hydrodynamic coefficients table header line 2: '//NewLine//trim(FileInfo_In%Lines(CurLine)) CurLine = CurLine + 1 + CALL AllocAry( tmpReArray, 12, 'temporary array for Simple hydrodynamic coefficients', ErrStat2, ErrMsg2 ) - if (Failed()) return; - call ParseAry( FileInfo_In, CurLine, 'Simple hydrodynamic coefficients table row '//trim( Int2LStr(I)), tmpReArray, size(tmpReArray), ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; + if (Failed()) return + ! call ParseAry( FileInfo_In, CurLine, 'Simple hydrodynamic coefficients table row '//trim( Int2LStr(I)), tmpReArray, size(tmpReArray), ErrStat2, ErrMsg2, UnEc ) + ! if (Failed()) return; + CALL ParseRAryWKywrd( FileInfo_In, CurLine, 'Simple hydrodynamic coefficients table row '//trim( Int2LStr(1_IntKi)), tmpReArray, size(tmpReArray), & + 'MCF', 1.0_ReKi, (/5,6/), InputFileData%Morison%SimplMCF, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return InputFileData%Morison%SimplCd = tmpReArray( 1) InputFileData%Morison%SimplCdMG = tmpReArray( 2) @@ -825,7 +511,6 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp if (allocated(tmpReArray)) deallocate(tmpReArray) - !------------------------------------------------------------------------------------------------- ! Depth-based Hydrodynamic Coefficients Section !------------------------------------------------------------------------------------------------- @@ -856,8 +541,12 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp END IF DO I = 1,InputFileData%Morison%NCoefDpth - call ParseAry( FileInfo_In, CurLine, ' CoefDpths coefficients table row '//trim( Int2LStr(I)), tmpReArray, size(tmpReArray), ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; + ! call ParseAry( FileInfo_In, CurLine, ' CoefDpths coefficients table row '//trim( Int2LStr(I)), tmpReArray, size(tmpReArray), ErrStat2, ErrMsg2, UnEc ) + ! if (Failed()) return; + CALL ParseRAryWKywrd( FileInfo_In, CurLine, ' CoefDpths coefficients table row '//trim( Int2LStr(I)), tmpReArray, size(tmpReArray), & + 'MCF', 1.0_ReKi, (/6,7/), InputFileData%Morison%CoefDpths(I)%DpthMCF, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return + InputFileData%Morison%CoefDpths(I)%Dpth = tmpReArray( 1) InputFileData%Morison%CoefDpths(I)%DpthCd = tmpReArray( 2) @@ -873,6 +562,14 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp InputFileData%Morison%CoefDpths(I)%DpthAxCp = tmpReArray(12) InputFileData%Morison%CoefDpths(I)%DpthAxCpMG = tmpReArray(13) END DO + + DO I = 2,InputFileData%Morison%NCoefDpth + IF (InputFileData%Morison%CoefDpths(I)%DpthMCF .NEQV. InputFileData%Morison%CoefDpths(1)%DpthMCF) THEN + ErrStat2 = ErrID_Fatal + ErrMsg2 = 'In the depth-based hydrodynamic coefficients, MCF is specified for some depth but not others.' + if (Failed()) RETURN + END IF + END DO if (allocated(tmpReArray)) deallocate(tmpReArray) END IF @@ -908,8 +605,12 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp END IF DO I = 1,InputFileData%Morison%NCoefMembers - call ParseAry( FileInfo_In, CurLine, 'Member-based hydrodynamic coefficients table row '//trim( Int2LStr(I)), tmpReArray, size(tmpReArray), ErrStat2, ErrMsg2, UnEc ) - if (Failed()) return; + !call ParseAry( FileInfo_In, CurLine, 'Member-based hydrodynamic coefficients table row '//trim( Int2LStr(I)), tmpReArray, size(tmpReArray), ErrStat2, ErrMsg2, UnEc ) + ! if (Failed()) return; + + CALL ParseRAryWKywrd( FileInfo_In, CurLine, 'Member-based hydrodynamic coefficients table row '//trim( Int2LStr(I)), tmpReArray, size(tmpReArray), & + 'MCF', 1.0_ReKi, (/10,11,12,13/), InputFileData%Morison%CoefMembers(I)%MemberMCF, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return InputFileData%Morison%CoefMembers(I)%MemberID = NINT(tmpReArray( 1)) InputFileData%Morison%CoefMembers(I)%MemberCd1 = tmpReArray( 2) @@ -1275,680 +976,248 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp RETURN CONTAINS - !.............................. - logical function Failed() - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - Failed = ErrStat >= AbortErrLev - if (Failed) call Cleanup() - end function Failed - SUBROUTINE Cleanup() - IF (ALLOCATED(tmpArray )) DEALLOCATE(tmpArray ) - IF (ALLOCATED(tmpReArray)) DEALLOCATE(tmpReArray) - IF (ALLOCATED(tmpVec1 )) DEALLOCATE(tmpVec1 ) - IF (ALLOCATED(tmpVec2 )) DEALLOCATE(tmpVec2 ) - ! Cleanup the Echo file and global variables - if (UnEc > 0) close ( UnEc ) - END SUBROUTINE Cleanup -END SUBROUTINE HydroDyn_ParseInput - - - - - -!==================================================================================================== -SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrStat, ErrMsg ) -! This private subroutine verifies the input required for HydroDyn is correctly specified. -!---------------------------------------------------------------------------------------------------- - - - ! Passed variables - - TYPE(HydroDyn_InitInputType), INTENT( IN ) :: InitInp ! the hydrodyn data - REAL(DbKi), INTENT( IN ) :: Interval ! The DT supplied by the glue code/driver - TYPE(HydroDyn_InputFile), INTENT( INOUT ) :: InputFileData ! the hydrodyn input file data - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - INTEGER :: I ! Generic loop counter index - INTEGER :: J ! Generic loop counter index - INTEGER :: K ! Generic loop counter index - INTEGER :: Itemp ! @mhall: additional temporary index - CHARACTER(1024) :: TmpPath ! Temporary storage for relative path name - LOGICAL :: FoundID ! Boolean flag indicating whether an ID from one tables is found in one of the other input table - REAL(ReKi) :: MinDepth ! The minimum depth entry in the Depth-based Hydrodynamic coefficents table - REAL(ReKi) :: MaxDepth ! The maximum depth entry in the Depth-based Hydrodynamic coefficents table - REAL(ReKi) :: z1 - REAL(ReKi) :: z2 - REAL(ReKi) :: MinMembrDpth - REAL(ReKi) :: MaxMembrDpth -! CHARACTER(ChanLen), ALLOCATABLE :: tmpOutLst(:) ! - CHARACTER(3) :: TmpExtension ! Temporary variable for holding the file extension for 10d, 11d, 12d, 10s, 11s, 12s WAMIT files - LOGICAL :: TmpFileExist ! Temporary variable in checking the existance of an input file. - LOGICAL :: JointUsed - REAL(ReKi) :: l - REAL(ReKi) :: lvec(3) - LOGICAL, ALLOCATABLE :: foundMask(:) - INTEGER :: WaveModIn - INTEGER(IntKi) :: ErrStat2, IOS - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'HydroDynInput_ProcessInitData' - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrStat2 = ErrID_None - ErrMsg = "" - ErrMsg2 = "" - - - !------------------------------------------------------------------------- - ! Check environmental conditions - !------------------------------------------------------------------------- - - - ! WtrDens - Water density. - - IF ( InputFileData%Waves%WtrDens < 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WtrDens must not be negative.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - ! WtrDpth - Water depth - - ! First adjust water depth based on MSL2SWL values - InputFileData%Morison%WtrDpth = InputFileData%Morison%WtrDpth + InputFileData%Morison%MSL2SWL - - IF ( InputFileData%Morison%WtrDpth <= 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WtrDpth must be greater than zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - ! MSL2SWL - Mean sea level to still water level - - IF ( InputFileData%PotMod == 1 .AND. .NOT. EqualRealNos(InputFileData%Morison%MSL2SWL, 0.0_ReKi) ) THEN - CALL SetErrStat( ErrID_Fatal,'MSL2SWL must be 0 when PotMod = 1 (WAMIT).',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - ! WaveMod - Wave kinematics model switch. - - IF ( LEN_TRIM(InputFileData%Waves%WaveModChr) > 1 ) THEN - - IF ( InputFileData%Waves%WaveModChr(1:2) == '1P' ) THEN ! The user wants to specify the phase in place of a random phase - - READ (InputFileData%Waves%WaveModChr(3:),*,IOSTAT=IOS ) InputFileData%Waves%WavePhase - CALL CheckIOS ( IOS, "", 'WavePhase', NumType, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) RETURN - - WaveModIn = 1 - InputFileData%Waves%WaveMod = 10 ! Internally define WaveMod = 10 to mean regular waves with a specified (nonrandom) phase - InputFileData%Waves%WavePhase = InputFileData%Waves%WavePhase*D2R ! Convert the phase from degrees to radians - - ELSE ! The user must have specified WaveMod incorrectly. - CALL SetErrStat( ErrID_Fatal,'WaveMod incorrectly specified',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ELSE - ! The line below only works for 1 digit reads - READ( InputFileData%Waves%WaveModChr, *, IOSTAT=IOS ) InputFileData%Waves%WaveMod - CALL CheckIOS ( IOS, "", 'WaveMod', NumType, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) RETURN - - WaveModIn = InputFileData%Waves%WaveMod - - END IF ! LEN_TRIM(InputFileData%Waves%WaveModChr) - - IF ( (WaveModIn == 6) .AND. .NOT. EqualRealNos(InputFileData%Morison%MSL2SWL, 0.0_ReKi) ) THEN - CALL SetErrStat( ErrID_Fatal,'MSL2SWL must be 0 when WaveMod = 6.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - IF ( WaveModIn < 0 .OR. WaveModIn > 6 ) THEN - IF ( InputFileData%PotMod == 1 ) THEN - CALL SetErrStat( ErrID_Fatal,'WaveMod must be 0, 1, 1P#, 2, 3, 4, 5, or 6.',ErrStat,ErrMsg,RoutineName) - RETURN -!ADP: This seems like a strange test on ErrStat... - ELSE IF ( ErrStat /= ErrID_None .OR. WaveModIn /= 5) THEN - CALL SetErrStat( ErrID_Fatal,'WaveMod must be 0, 1, 1P#, 2, 3, 4, or 5.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - END IF - - ! Linearization Checks - ! LIN-TODO: - !errors if: - !if ( & - ! (WaveModIn /= 0) .or. & - ! (InputFileData%Waves2%WvDiffQTFF /= .false.) .or. & - ! (InputFileData%Waves2%WvSumQTFF /= .false.) .or. & - ! (InputFileData%PotMod /= 0 .or. InputFileData%PotMod /=1) .or. & - ! (InputFileData%WAMIT%ExctnMod /=0 .or. InputFileData%WAMIT%ExctnMod /=2) .or. & - ! (InputFileData%WAMIT%RdtnMod /=0 .or. InputFileData%WAMIT%RdtnMod /=2) .or. & - ! (InputFileData%WAMIT2%MnDrift /=0) .or. & - ! (InputFileData%WAMIT2%NewmanApp /= 0) .or. & - ! (InputFileData%WAMIT2%SumQTF /= 0 ) ) then - ! - !end if - - - ! WaveStMod - Model switch for stretching incident wave kinematics to instantaneous free surface. - - ! TODO: We are only implementing WaveStMod = 0 (No stretching) at this point in time. 1 Mar 2013 GJH - - IF ( InputFileData%Waves%WaveStMod /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WaveStMod must be 0. Future versions of HydroDyn will once again support other wave stretching models.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - IF ( InputFileData%Waves%WaveMod /= 6 .AND. InputFileData%Morison%NMembers > 0 .AND. InputFileData%Waves%WaveMod > 0 ) THEN - - IF ( ( InputFileData%Waves%WaveStMod /= 0 ) .AND. ( InputFileData%Waves%WaveStMod /= 1 ) .AND. & - ( InputFileData%Waves%WaveStMod /= 2 ) ) THEN ! (TODO: future version will support 3) .AND. ( InputFileData%Waves%WaveStMod /= 3 ) ) THEN - ErrMsg = ' WaveStMod must be 0, 1, or 2.' !, or 3.' - ErrStat = ErrID_Fatal - - RETURN - END IF - - !IF ( ( InputFileData%Waves%WaveStMod /= 3 ) .AND. ( InputFileData%Waves%WaveMod == 5 ) ) THEN - ! ErrMsg = ' WaveStMod must be set to 3 when WaveMod is set to 5.' - ! ErrStat = ErrID_Fatal - ! - ! RETURN - !END IF - - - - ELSE !don't use this one - - ! NOTE: Do not read in WaveStMod for floating platforms since it is - ! inconsistent to use stretching (which is a nonlinear correction) for - ! the viscous drag term in Morison's equation while not accounting for - ! stretching in the diffraction and radiation problems (according to - ! Paul Sclavounos, there are such corrections). Instead, the viscous - ! drag term from Morison's equation is computed by integrating up to - ! the MSL, regardless of the instantaneous free surface elevation. - - InputFileData%Waves%WaveStMod = 0 - - END IF - - - ! WaveTMax - Analysis time for incident wave calculations. - - IF ( InputFileData%Waves%WaveMod == 0 ) THEN ! .TRUE if we DO NOT HAVE have incident waves. - - ! TODO: Issue warning if WaveTMax was not already 0.0 in this case. - IF ( .NOT. EqualRealNos(InputFileData%Waves%WaveTMax, 0.0_DbKi) ) THEN - CALL WrScr( ' Setting WaveTMax to 0.0 since WaveMod = 0' ) - InputFileData%Waves%WaveTMax = 0.0 - END IF - IF ( .NOT. EqualRealNos(InputFileData%Waves%WaveDir, 0.0_SiKi) ) THEN - CALL WrScr( ' Setting WaveDir to 0.0 since WaveMod = 0' ) - InputFileData%Waves%WaveDir = 0.0 - END IF - ELSEIF ( InputFileData%Waves%WaveMod == 5 ) THEN ! User wave elevation file reading in - IF (InitInp%TMax > InputFileData%Waves%WaveTMax ) THEN - CALL SetErrstat( ErrID_Fatal, ' WaveTMax must be larger than the simulation time for user wave elevations (WaveMod == 5).',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - ELSE - IF (InitInp%TMax > InputFileData%Waves%WaveTMax ) THEN - CALL WrScr( ' WaveTMax is less then the simulation time. Wave data will repeat every WaveTMax seconds.') - END IF - END IF - - - ! WaveDT - Time step for incident wave calculations - - IF ( InputFileData%Waves%WaveMod > 0 ) THEN ! .TRUE if we have incident waves. - - IF ( InputFileData%Waves%WaveDT <= 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WaveDT must be greater than zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - IF ( (InputFileData%Waves%WaveMod == 6) .AND. (.NOT. EqualRealNos(InputFileData%Waves%WaveDT, Interval)) ) THEN - CALL SetErrStat( ErrID_Fatal,'WaveDT must equal the simulation DT value when WaveMod = 6.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - ELSE - - InputFileData%Waves%WaveDT = 0.0 - - END IF - - - ! WaveHs - Significant wave height - - IF ( ( InputFileData%Waves%WaveMod /= 0 ) .AND. ( InputFileData%Waves%WaveMod /= 4 ) .AND. ( InputFileData%Waves%WaveMod /= 5 ) ) THEN ! .TRUE. (when WaveMod = 1, 2, 3, or 10) if we have plane progressive (regular), JONSWAP/Pierson-Moskowitz spectrum (irregular) waves, or white-noise waves, but not user-defined or GH Bladed wave data. - - IF ( InputFileData%Waves%WaveHs <= 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WaveHs must be greater than zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ELSE - - InputFileData%Waves%WaveHs = 0.0 - - END IF - - - ! WaveTp - Peak spectral period. - ! We commented out the if else block due to a bug when WaveMod == 3, and then WaveTp is hence set to 0.0. See line 1092 of Waves.f90 (as of 11/24/2014) GJH - !IF ( ( InputFileData%Waves%WaveMod == 1 ) .OR. ( InputFileData%Waves%WaveMod == 2 ) .OR. ( InputFileData%Waves%WaveMod == 10 ) ) THEN ! .TRUE. (when WaveMod = 1, 2, or 10) if we have plane progressive (regular), JONSWAP/Pierson-Moskowitz spectrum (irregular) waves. - - IF ( InputFileData%Waves%WaveTp <= 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WaveTp must be greater than zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ! ELSE - - ! InputFileData%Waves%WaveTp = 0.0 - - ! END IF - - - ! WavePkShp - Peak shape parameter. - - CALL Conv2UC( InputFileData%Waves%WavePkShpChr ) ! Convert Line to upper case. - - IF ( InputFileData%Waves%WaveMod == 2 ) THEN ! .TRUE if we have JONSWAP/Pierson-Moskowitz spectrum (irregular) waves, but not GH Bladed wave data. - - IF ( TRIM(InputFileData%Waves%WavePkShpChr) == 'DEFAULT' ) THEN ! .TRUE. when one wants to use the default value of the peak shape parameter, conditioned on significant wave height and peak spectral period. - - InputFileData%Waves%WavePkShp = WavePkShpDefault ( InputFileData%Waves%WaveHs, InputFileData%Waves%WaveTp ) - - ELSE ! The input must have been specified numerically. - - READ (InputFileData%Waves%WavePkShpChr,*,IOSTAT=IOS) InputFileData%Waves%WavePkShp - CALL CheckIOS ( IOS, "", 'WavePkShp', NumType, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) RETURN - - IF ( ( InputFileData%Waves%WavePkShp < 1.0 ) .OR. ( InputFileData%Waves%WavePkShp > 7.0 ) ) THEN - CALL SetErrStat( ErrID_Fatal,'WavePkShp must be greater than or equal to 1 and less than or equal to 7.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - END IF - - ELSE - - InputFileData%Waves%WavePkShp = 1.0 - - END IF - - - ! WvLowCOff and WvHiCOff - Wave Cut-off frequency + SUBROUTINE ParseRAryWKywrd( FileInfo, LineNum, AryName, Ary, AryLen, Kywrd, KywrdVal, KywrdEntry, HasKywrd, ErrStat, ErrMsg, UnEc ) - IF ( InputFileData%Waves%WvLowCOff < 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WvLowCOff must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ! Threshold upper cut-off based on sampling rate - IF ( EqualRealNos(InputFileData%Waves%WaveDT, 0.0_DbKi) ) THEN - InputFileData%Waves%WvHiCOff = 10000.0; ! This is not going to be used because WaveDT is zero. - ELSE - InputFileData%Waves%WvHiCOff = MIN( REAL( Pi/InputFileData%Waves%WaveDT,SiKi), InputFileData%Waves%WvHiCOff ) - END IF - - !TODO Issue warning if we changed WvHiCOff GJH 7/24/13 - - IF ( InputFileData%Waves%WvLowCOff >= InputFileData%Waves%WvHiCOff ) THEN - CALL SetErrSTat( ErrID_Fatal,'WvLowCOff must be less than WvHiCOff.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - ! Copy over the first order frequency limits to the WAMIT2 module which needs them. - InputFileData%WAMIT2%WvLowCOff = InputFileData%Waves%WvLowCOff - InputFileData%WAMIT2%WvHiCOff = InputFileData%Waves%WvHiCOff - - - ! WaveDir - Wave heading direction. - - IF ( ( InputFileData%Waves%WaveMod > 0 ) .AND. ( InputFileData%Waves%WaveMod /= 6 ) ) THEN ! .TRUE if we have incident waves, but not user input wave data. - - IF ( ( InputFileData%Waves%WaveDir <= -180.0 ) .OR. ( InputFileData%Waves%WaveDir > 180.0 ) ) THEN - CALL SetErrStat( ErrID_Fatal,'WaveDir must be greater than -180 and less than or equal to 180.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ELSE - - InputFileData%Waves%WaveDir = 0.0 - - END IF - - - ! Multi-directional waves - - ! Check the WaveDirMod value - IF ( InputFileData%Waves%WaveDirMod < 0 .OR. InputFileData%Waves%WaveDirMod > 1 ) THEN - CALL SetErrStat( ErrID_Fatal,'WaveDirMod must be either 0 (No spreading) or 1 (COS2S spreading function)',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ! Check if we are doing multidirectional waves or not. - ! We can only use multi directional waves on WaveMod=2,3,4 - InputFileData%Waves%WaveMultiDir = .FALSE. ! Set flag to false to start - IF ( InputFileData%Waves%WaveMod >= 2 .AND. InputFileData%Waves%WaveMod <= 4 .AND. InputFileData%Waves%WaveDirMod == 1 ) THEN - InputFileData%Waves%WaveMultiDir = .TRUE. - ELSEIF ( (InputFileData%Waves%WaveMod < 2 .OR. InputFileData%Waves%WaveMod >4) .AND. InputFileData%Waves%WaveDirMod == 1 ) THEN - CALL SetErrStat( ErrID_Warn,'WaveDirMod unused unless WaveMod == 2, 3, or 4. Ignoring WaveDirMod.',ErrStat,ErrMsg,RoutineName) - ENDIF - - - ! Check to see if the for some reason the wave direction spreading range is set to zero. If it is, - ! we don't have any spreading, so we will turn off the multidirectional waves. - IF ( InputFileData%Waves%WaveMultiDir .AND. EqualRealNos( InputFileData%Waves%WaveDirRange, 0.0_SiKi ) ) THEN - CALL SetErrStat( ErrID_Warn,' WaveDirRange set to zero, so multidirectional waves are turned off.',ErrStat,ErrMsg,RoutineName) - InputFileData%Waves%WaveMultiDir = .FALSE. - ENDIF - - - - ! We check the following only if we set WaveMultiDir to true, otherwise ignore them and set them to zero - IF ( InputFileData%Waves%WaveMultiDir ) THEN - - ! Check WaveDirSpread - IF ( InputFileData%Waves%WaveDirSpread <= 0.0 ) THEN - - CALL SetErrStat( ErrID_Fatal,'WaveDirSpread cannot negative or zero.',ErrStat,ErrMsg,RoutineName) - RETURN - - ENDIF - - - ! Check that the number of wave directions is a positive odd number. - ! -> If it is less than 0, error out. - ! -> If it is even, we will increment it by 1. - IF ( InputFileData%Waves%WaveNDir <= 0_IntKi ) THEN - CALL SetErrStat( ErrID_Fatal,' WaveNDir must be an odd number greater than 0.',ErrStat,ErrMsg,RoutineName) - RETURN - ENDIF - - ! Check that the value for WaveNDir is odd - IF ( MODULO( InputFileData%Waves%WaveNDir, 2_IntKi) == 0_IntKi ) THEN - InputFileData%Waves%WaveNDir = InputFileData%Waves%WaveNDir + 1 - CALL SetErrStat( ErrID_Warn,'WaveNDir must be odd. Changing the value to '//Num2LStr(InputFileData%Waves%WaveNDir),ErrStat,ErrMsg,RoutineName) - ENDIF - - ! Now check that the WaveDirRange is less than 360 degrees (not sure why we would want that) - IF ( InputFileData%Waves%WaveDirRange > 360.0_ReKi ) THEN - CALL SetErrStat( ErrID_Fatal,' WaveDirRange should be less than a full circle.',ErrStat,ErrMsg,RoutineName) - ENDIF - - ELSE ! Set everything to zero if we aren't going to use it - - InputFileData%Waves%WaveNDir = 1 ! Only one direction set -- this shouldn't get used later anyhow - InputFileData%Waves%WaveDirRange = PiBy2 ! This is so that the constant C=1 in the COS2S function (it shouldn't get called, but in case it does) - InputFileData%Waves%WaveDirSpread = 0.0 - - END IF - - - ! WaveSeed(1), !WaveSeed(2) - - IF ( .NOT. ( ( InputFileData%Waves%WaveMod > 0 ) .AND. ( InputFileData%Waves%WaveMod /= 5 ) .AND. ( InputFileData%Waves%WaveMod /= 10 ) ) ) THEN !.TRUE. for plane progressive (regular) with random phase or irregular wave - - DO I = 1,2 - - InputFileData%Waves%WaveSeed(I) = 0 - - END DO !I - - END IF - - - ! WvKinFile - - IF ( InputFileData%Waves%WaveMod == 5 .OR. InputFileData%Waves%WaveMod == 6 ) THEN ! .TRUE if we are to read user-supplied wave elevation or wave kinematics file(s). - - IF ( LEN_TRIM( InputFileData%Waves%WvKinFile ) == 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WvKinFile must not be an empty string.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - IF ( PathIsRelative( InputFileData%Waves%WvKinFile ) ) THEN - CALL GetPath( TRIM(InitInp%InputFile), TmpPath ) - InputFileData%Waves%WvKinFile = TRIM(TmpPath)//TRIM(InputFileData%Waves%WvKinFile) - END IF - InputFileData%Waves%WriteWvKin = .FALSE. - ELSE !don't use this one - -#ifdef WRITE_WV_KIN - IF ( LEN_TRIM( InputFileData%Waves%WvKinFile ) == 0 ) THEN - InputFileData%Waves%WriteWvKin = .FALSE. - ELSE - InputFileData%Waves%WriteWvKin = .TRUE. - IF ( PathIsRelative( InputFileData%Waves%WvKinFile ) ) THEN - CALL GetPath( TRIM(InputFileData%InputFile), TmpPath ) - InputFileData%Waves%WvKinFile = TRIM(TmpPath)//TRIM(InputFileData%Waves%WvKinFile) - END IF - END IF - -#else - InputFileData%Waves%WvKinFile = "" - InputFileData%Waves%WriteWvKin = .FALSE. -#endif - END IF - - - ! NWaveElev - - IF ( InputFileData%Waves%NWaveElev < 0 ) THEN - - CALL SetErrStat( ErrID_Fatal,'NWaveElev must not be negative.',ErrStat,ErrMsg,RoutineName) - RETURN - - END IF - - - - !------------------------------------------------------------------------- - ! Check 2nd Order Waves section - !------------------------------------------------------------------------- - - - ! Difference frequency cutoffs - - ! WvLowCOffD and WvHiCOffD - Wave Cut-off frequency - IF ( InputFileData%Waves2%WvLowCOffD < 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WvLowCOffD must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ! Check that the order given makes sense. - IF ( InputFileData%Waves2%WvLowCOffD >= InputFileData%Waves2%WvHiCOffD ) THEN - CALL SetErrStat( ErrID_Fatal,'WvLowCOffD must be less than WvHiCOffD.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - ! Sum frequency cutoffs - - ! WvLowCOffS and WvHiCOffD - Wave Cut-off frequency - IF ( InputFileData%Waves2%WvLowCOffS < 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'WvLowCOffS must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ! Check that the order given makes sense. - IF ( InputFileData%Waves2%WvLowCOffS >= InputFileData%Waves2%WvHiCOffS ) THEN - CALL SetErrStat( ErrID_Fatal,'WvLowCOffS must be less than WvHiCOffS.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - ! Copy over the 2nd order limits to the WAMIT2 module which needs them. - InputFileData%WAMIT2%WvLowCOffD = InputFileData%Waves2%WvLowCOffD - InputFileData%WAMIT2%WvHiCOffD = InputFileData%Waves2%WvHiCOffD - InputFileData%WAMIT2%WvLowCOffS = InputFileData%Waves2%WvLowCOffS - InputFileData%WAMIT2%WvHiCOffS = InputFileData%Waves2%WvHiCOffS - - - - !------------------------------------------------------------------------- - ! Check Current section - !------------------------------------------------------------------------- - - - ! CurrMod - Current profile model switch - - IF ( ( InputFileData%Current%CurrMod /= 0 ) .AND. ( InputFileData%Current%CurrMod /= 1 ) .AND. ( InputFileData%Current%CurrMod /= 2 ) ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrMod must be 0, 1, or 2.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - IF ( ( InputFileData%Current%CurrMod /= 0 ) .AND. ( InputFileData%Waves%WaveMod == 6 ) ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrMod must be set to 0 when WaveMod is set to 6: user-input wave data.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - ! CurrSSV0 - Sub-surface current velocity at still water level - - IF ( InputFileData%Current%CurrMod == 1 ) THEN ! .TRUE if we have standard current. - - IF ( InputFileData%Current%CurrSSV0 < 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrSSV0 must not be less than zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ELSE - - InputFileData%Current%CurrSSV0 = 0.0 - - END IF - - - ! CurrSSDirChr - Sub-surface current heading direction - - IF ( InputFileData%Current%CurrMod == 1 ) THEN ! .TRUE if we have standard current. - - - IF ( TRIM(InputFileData%Current%CurrSSDirChr) == 'DEFAULT' ) THEN ! .TRUE. when one wants to use the default value of codirectionality between sub-surface current and incident wave propogation heading directions. - - IF ( InputFileData%Waves%WaveMod == 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrSSDir must not be set to ''DEFAULT'' when WaveMod is set to 0.',ErrStat,ErrMsg,RoutineName) + ! Arguments declarations. + INTEGER, INTENT(IN) :: AryLen !< The length of the array to parse. + TYPE (FileInfoType), INTENT(IN) :: FileInfo !< The derived type for holding the file information. + INTEGER(IntKi), INTENT(INOUT) :: LineNum !< The number of the line to parse. + CHARACTER(*), INTENT(IN) :: AryName !< The array name we are trying to fill. + REAL(ReKi), INTENT(OUT) :: Ary(AryLen) !< The array to receive the input values. + CHARACTER(*), INTENT(IN) :: Kywrd !< The keyword to look for + REAL(ReKi), INTENT(IN) :: KywrdVal !< Value to be used when the keyword is encountered + INTEGER(IntKi), INTENT(IN) :: KywrdEntry(:) !< Entries where the provided keyword is allowed + LOGICAL, INTENT(OUT) :: HasKywrd !< T/F to indicate whether keyword is present + INTEGER(IntKi), INTENT(OUT) :: ErrStat !< The error status. + CHARACTER(*), INTENT(OUT) :: ErrMsg !< The error message, if ErrStat /= 0. + INTEGER, INTENT(IN), OPTIONAL :: UnEc !< I/O unit for echo file. If present and > 0, write to UnEc. + + ! Local declarations. + INTEGER(IntKi) :: i,j ! Local counter. + CHARACTER(25), ALLOCATABLE :: tmpChrArray(:) ! Temporary character array storage + + CHARACTER(*), PARAMETER :: RoutineName = 'ParseRAryWKywrd' + + hasKywrd = .FALSE. + ErrStat = ErrID_None + ErrMsg = "" + + CALL AllocAry( tmpChrArray, AryLen, 'temporary array for ParseRAryWKywrd', ErrStat, ErrMsg ) + IF (ErrStat /= 0) THEN + ErrStat = ErrID_Fatal + ErrMsg = 'Error allocating temporary array for ParseRAryWKywrd ' // ' when parsing ' // AryName RETURN END IF - - InputFileData%Current%CurrSSDir = InputFileData%Waves%WaveDir - - ELSE ! The input must have been specified numerically. - - READ (InputFileData%Current%CurrSSDirChr,*,IOSTAT=IOS) InputFileData%Current%CurrSSDir - CALL CheckIOS ( IOS, "", 'CurrSSDir', NumType, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) RETURN - - IF ( ( InputFileData%Current%CurrSSDir <= -180.0 ) .OR. ( InputFileData%Current%CurrSSDir > 180.0 ) ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrSSDir must be greater than -180 and less than or equal to 180.',ErrStat,ErrMsg,RoutineName) + + CALL ParseAry( FileInfo, LineNum, AryName, tmpChrArray, size(tmpChrArray), ErrStat, ErrMsg, UnEc ) + IF (ErrStat /= 0) THEN + ErrStat = ErrID_Fatal + ErrMsg = 'Error parsing ' // AryName RETURN END IF - + + DO j = 1,size(KywrdEntry) + i = KywrdEntry(j) + IF ( TRIM(tmpChrArray(i)) == Kywrd ) THEN + hasKywrd = .TRUE. + END IF + END DO + + IF ( hasKywrd ) THEN + DO j = 1,size(KywrdEntry) + i = KywrdEntry(j) + IF ( TRIM(tmpChrArray(i)) == Kywrd ) THEN + tmpChrArray(i) = Num2Lstr(KywrdVal) + ELSE + ErrStat = ErrID_Fatal + ErrMsg = 'When parsing ' // AryName // ', ' // kywrd // ' is used at some but not all relevant places.' + RETURN + END IF + END DO END IF + + DO i=1,AryLen + READ(tmpChrArray(i),*,IOSTAT=ErrStat) Ary(i) + IF (ErrStat /= 0) THEN + ErrStat = ErrID_Fatal + ErrMsg = 'When parsing ' // AryName // ', nonnumerical entry is encountered where numerical entry is expected.' + RETURN; + END IF + END DO + + IF (ALLOCATED(tmpChrArray)) DEALLOCATE(tmpChrArray) + + END SUBROUTINE ParseRAryWKywrd + + + !.............................. + logical function Failed() + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + Failed = ErrStat >= AbortErrLev + if (Failed) call Cleanup() + end function Failed + SUBROUTINE Cleanup() + IF (ALLOCATED(tmpArray )) DEALLOCATE(tmpArray ) + IF (ALLOCATED(tmpReArray)) DEALLOCATE(tmpReArray) + IF (ALLOCATED(tmpVec1 )) DEALLOCATE(tmpVec1 ) + IF (ALLOCATED(tmpVec2 )) DEALLOCATE(tmpVec2 ) + ! Cleanup the Echo file and global variables + if (UnEc > 0) close ( UnEc ) + END SUBROUTINE Cleanup +END SUBROUTINE HydroDyn_ParseInput - ELSE - - InputFileData%Current%CurrSSDir = 0.0 - END IF + +!==================================================================================================== +SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrStat, ErrMsg ) +! This private subroutine verifies the input required for HydroDyn is correctly specified. +!---------------------------------------------------------------------------------------------------- - ! CurrNSRef - Near-surface current reference depth. - IF ( InputFileData%Current%CurrMod == 1 ) THEN ! .TRUE if we have standard current. + ! Passed variables - IF ( InputFileData%Current%CurrNSRef <= 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrNSRef must be greater than zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF + TYPE(HydroDyn_InitInputType), INTENT( IN ) :: InitInp ! the hydrodyn data + REAL(DbKi), INTENT( IN ) :: Interval ! The DT supplied by the glue code/driver + TYPE(HydroDyn_InputFile), INTENT( INOUT ) :: InputFileData ! the hydrodyn input file data + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ELSE + INTEGER :: I ! Generic loop counter index + INTEGER :: J ! Generic loop counter index + INTEGER :: K ! Generic loop counter index + CHARACTER(1024) :: TmpPath ! Temporary storage for relative path name + LOGICAL :: FoundID ! Boolean flag indicating whether an ID from one tables is found in one of the other input table + REAL(ReKi) :: MinDepth ! The minimum depth entry in the Depth-based Hydrodynamic coefficents table + REAL(ReKi) :: MaxDepth ! The maximum depth entry in the Depth-based Hydrodynamic coefficents table + REAL(ReKi) :: z1 + REAL(ReKi) :: z2 + REAL(ReKi) :: MinMembrDpth + REAL(ReKi) :: MaxMembrDpth +! CHARACTER(ChanLen), ALLOCATABLE :: tmpOutLst(:) ! + CHARACTER(3) :: TmpExtension ! Temporary variable for holding the file extension for 10d, 11d, 12d, 10s, 11s, 12s WAMIT files + LOGICAL :: TmpFileExist ! Temporary variable in checking the existance of an input file. + LOGICAL :: JointUsed + REAL(ReKi) :: l + REAL(ReKi) :: lvec(3) + LOGICAL, ALLOCATABLE :: foundMask(:) + + INTEGER(IntKi) :: ErrStat2, IOS + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'HydroDynInput_ProcessInitData' + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrStat2 = ErrID_None + ErrMsg = "" + ErrMsg2 = "" + + + !------------------------------------------------------------------------- + ! Check environmental conditions + !------------------------------------------------------------------------- - InputFileData%Current%CurrNSRef = 0.0 + + ! WtrDens - Water density. + IF ( InputFileData%Morison%WtrDens < 0.0 ) THEN + CALL SetErrStat( ErrID_Fatal,'WtrDens must not be negative.',ErrStat,ErrMsg,RoutineName) + RETURN END IF + ! WtrDpth - Water depth + + ! First adjust water depth based on MSL2SWL values + InputFileData%Morison%WtrDpth = InputFileData%Morison%WtrDpth + InputFileData%Morison%MSL2SWL + + IF ( InputFileData%Morison%WtrDpth <= 0.0 ) THEN + CALL SetErrStat( ErrID_Fatal,'WtrDpth must be greater than zero.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF - ! CurrNSV0 - Near-surface current velocity at still water level. - - IF ( InputFileData%Current%CurrMod == 1 ) THEN ! .TRUE if we have standard current. - - IF ( InputFileData%Current%CurrNSV0 < 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrNSV0 must not be less than zero.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - ELSE - InputFileData%Current%CurrNSV0 = 0.0 + ! MSL2SWL - Mean sea level to still water level + + IF ( InputFileData%PotMod == 1 .AND. .NOT. EqualRealNos(InputFileData%Morison%MSL2SWL, 0.0_ReKi) ) THEN + CALL SetErrStat( ErrID_Fatal,'SeaState MSL2SWL must be 0 when PotMod = 1 (WAMIT).',ErrStat,ErrMsg,RoutineName) + RETURN END IF + IF ( InputFileData%PotMod == 1 .AND. .NOT. EqualRealNos(InputFileData%Morison%MSL2SWL, 0.0_ReKi) ) THEN + CALL SetErrStat( ErrID_Fatal,'HydroDyn MSL2SWL must be 0 when PotMod = 1 (WAMIT).',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + + + ! WaveMod - Wave kinematics model switch. -- Check that actual data was passed in from SeaState. If none exists, then set WaveMod=0 and warn + if (.not. associated(InitInp%WaveTime) .or. InitInp%NStepWave == 0) then + call SetErrStat( ErrID_Fatal,' No SeaState wave information available. Setting WaveMod=0.',ErrStat,ErrMsg,RoutineName) + return + endif - ! CurrNSDir - Near-surface current heading direction. - - IF ( InputFileData%Current%CurrMod == 1 ) THEN ! .TRUE if we have standard current. - - IF ( ( InputFileData%Current%CurrNSDir <= -180.0 ) .OR. ( InputFileData%Current%CurrNSDir > 180.0 ) ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrNSDir must be greater than -180 and less than or equal to 180.',ErrStat,ErrMsg,RoutineName) + IF ( InputFileData%PotMod > 0 .and. InitInp%WaveMod == 6 ) THEN + CALL SetErrStat( ErrID_Fatal,'WaveMod must be 0, 1, 1P#, 2, 3, 4, or 5 when PotMod is not 0',ErrStat,ErrMsg,RoutineName) RETURN - END IF - - ELSE - - InputFileData%Current%CurrNSDir = 0.0 - END IF - - ! CurrDIV - Depth-independent current velocity. - - IF ( InputFileData%Current%CurrMod == 1 ) THEN ! .TRUE if we have standard current. - - IF ( InputFileData%Current%CurrDIV < 0.0 ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrDIV must not be less than zero.',ErrStat,ErrMsg,RoutineName) - RETURN + ! Linearization Checks + ! LIN-TODO: + !errors if: + !if ( & + ! (WaveModIn /= 0) .or. & + ! (InputFileData%Waves2%WvDiffQTFF /= .false.) .or. & + ! (InputFileData%Waves2%WvSumQTFF /= .false.) .or. & + ! (InputFileData%PotMod /= 0 .or. InputFileData%PotMod /=1) .or. & + ! (InputFileData%WAMIT%ExctnMod /=0 .or. InputFileData%WAMIT%ExctnMod /=2) .or. & + ! (InputFileData%WAMIT%RdtnMod /=0 .or. InputFileData%WAMIT%RdtnMod /=2) .or. & + ! (InputFileData%WAMIT2%MnDrift /=0) .or. & + ! (InputFileData%WAMIT2%NewmanApp /= 0) .or. & + ! (InputFileData%WAMIT2%SumQTF /= 0 ) ) then + ! + !end if + + + ! WaveStMod - Model switch for stretching incident wave kinematics to instantaneous free surface. + IF ( InitInp%WaveMod /= 0 .AND. InputFileData%Morison%NMembers > 0 ) THEN + IF ( InitInp%WaveMod /= 6 ) THEN + IF ( ( InitInp%WaveStMod /= 0 ) .AND. ( InitInp%WaveStMod /= 1 ) .AND. & + ( InitInp%WaveStMod /= 2 ) .AND. ( InitInp%WaveStMod /= 3 ) ) THEN + ErrMsg = ' WaveStMod must be 0, 1, 2, or 3.' + ErrStat = ErrID_Fatal + RETURN + END IF + ELSE + IF ( ( InitInp%WaveStMod /= 0 ) .AND. ( InitInp%WaveStMod /= 1 ) .AND. & + ( InitInp%WaveStMod /= 3 ) ) THEN + ErrMsg = ' WaveStMod must be 0, 1, or 3 when WaveMod = 6.' + ErrStat = ErrID_Fatal + RETURN + END IF END IF - - ELSE - - InputFileData%Current%CurrDIV = 0.0 - END IF + + ! Copy over the first order frequency limits to the WAMIT2 module which needs them. + InputFileData%WAMIT2%WvLowCOff = InitInp%WvLowCOff + InputFileData%WAMIT2%WvHiCOff = InitInp%WvHiCOff - ! CurrDIDir - Depth-independent current heading direction. - IF ( InputFileData%Current%CurrMod == 1 ) THEN ! .TRUE if we have standard current. + ! Copy over the 2nd order limits to the WAMIT2 module which needs them. + InputFileData%WAMIT2%WvLowCOffD = InitInp%WvLowCOffD + InputFileData%WAMIT2%WvHiCOffD = InitInp%WvHiCOffD + InputFileData%WAMIT2%WvLowCOffS = InitInp%WvLowCOffS + InputFileData%WAMIT2%WvHiCOffS = InitInp%WvHiCOffS - IF ( ( InputFileData%Current%CurrDIDir <= -180.0 ) .OR. ( InputFileData%Current%CurrDIDir > 180.0 ) ) THEN - CALL SetErrStat( ErrID_Fatal,'CurrDIDir must be greater than -180 and less than or equal to 180.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF + ! Set the flag for multidirectional waves for WAMIT2 module. It needs to know since the Newman approximation + ! can only use uni-directional waves. + InputFileData%WAMIT2%WaveMultiDir = InitInp%WaveMultiDir - ELSE - InputFileData%Current%CurrDIDir = 0.0 - END IF ! PotFile - Root name of potential flow files @@ -1969,17 +1238,16 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS end do !TODO: Move this to where the WAMIT modules are initialized - InputFileData%WAMIT%WAMITFile = InputFileData%PotFile(1) - InputFileData%WAMIT2%WAMITFile = InputFileData%PotFile(1) + InputFileData%WAMIT%WAMITFile = InputFileData%PotFile(1) + InputFileData%WAMIT2%WAMITFile = InputFileData%PotFile(1) - ! Set the flag for multidirectional waves for WAMIT2 module. It needs to know since the Newman approximation - ! can only use uni-directional waves. - InputFileData%WAMIT2%WaveMultiDir = InputFileData%Waves%WaveMultiDir - ELSE InputFileData%PotFile = "" InputFileData%WAMIT%WAMITFile = "" - InputFileData%WAMIT2%WAMITFile = "" + InputFileData%WAMIT2%WAMITFile = "" + ! These can be set to zero because they are only used if PotMod = 1 + InputFileData%WAMIT%ExctnMod = 0 + InputFileData%WAMIT%RdtnMod = 0 END IF ! Set the WAMIT file name on the Convolution module @@ -2002,8 +1270,17 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS InputFileData%WAMIT2%WAMITULEN = 1.0 END IF - - + + ! ExctnDisp - Method of computing Wave Excitation + if ( InputFileData%PotMod /= 1 .or. InputFileData%WAMIT%ExctnMod == 0 .or. InitInp%WaveMod == 0) then + InputFileData%WAMIT%ExctnDisp = 0 !Force ExctnDisp = 0, so that the Grid of Wave Excitation forces is not computed (saves time and memory) + end if + + ! ExctnCutOff + if ( InputFileData%PotMod == 1 .and. InputFileData%WAMIT%ExctnMod > 0 .and. InputFileData%WAMIT%ExctnDisp == 2 .and. InputFileData%WAMIT%ExctnCutOff <= 0.0 ) then + CALL SetErrStat( ErrID_Fatal,'ExctnCutOff must be greater than zero.',ErrStat,ErrMsg,RoutineName) + end if + ! PtfmVol0 - Displaced volume of water when the platform is in its undisplaced position IF ( InputFileData%PotMod == 1 ) THEN @@ -2266,21 +1543,10 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS !.................. if ( (InputFileData%WAMIT%ExctnMod == 2) ) then - if ( InputFileData%Waves%WaveMod == 6 ) then - call SetErrStat( ErrID_Fatal, 'Externally generated full wave-kinematics time series cannot be used with state-space wave excitations. Set WaveMod 0, 1, 1P#, 2, 3, 4, or 5.', ErrStat, ErrMsg, RoutineName ) - end if - - if ( InputFileData%Waves%WaveDirMod /= 0 ) then - call SetErrStat( ErrID_Fatal, 'Directional spreading cannot be used with state-space wave excitations. Set WaveDirMod=0.', ErrStat, ErrMsg, RoutineName ) + if ( InitInp%InvalidWithSSExctn ) then + call SetErrStat( ErrID_Fatal, 'Given SeaState conditions cannot be used with state-space wave excitations. In SeaState, set WaveMod to 0, 1, 1P#, 2, 3, 4, or 5; WaveDirMod=0; WvDiffQTF=FALSE; and WvSumQTF=FALSE. Or in HydroDyn set ExctnMod to 0 or 1.', ErrStat, ErrMsg, RoutineName ) end if - if ( InputFileData%Waves2%WvDiffQTFF ) then - call SetErrStat( ErrID_Fatal, 'Cannot use full difference-frequency 2nd-order wave kinematics with state-space wave excitations. Set WvDiffQTF=FALSE.', ErrStat, ErrMsg, RoutineName ) - end if - - if ( InputFileData%Waves2%WvSumQTFF ) then - call SetErrStat( ErrID_Fatal, 'Cannot use full summation-frequency 2nd-order wave kinematics with state-space wave excitations. Set WvSumQTF=FALSE.', ErrStat, ErrMsg, RoutineName ) - end if if ( InputFileData%PotMod /= 1 ) then call SetErrStat( ErrID_Fatal, 'Potential-flow model via WAMIT must be used with state-space wave excitations. Set PotMod= 1.', ErrStat, ErrMsg, RoutineName ) @@ -2309,22 +1575,6 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS !.................. if (InitInp%Linearize) then - if ( InputFileData%Waves%WaveMod /= 0 ) then - call SetErrStat( ErrID_Fatal, 'Still water conditions must be used for linearization. Set WaveMod=0.', ErrStat, ErrMsg, RoutineName ) - end if - - if ( InputFileData%Waves%WaveDirMod /= 0 ) then - call SetErrStat( ErrID_Fatal, 'No directional spreading must be used for linearization. Set WaveDirMod=0.', ErrStat, ErrMsg, RoutineName ) - end if - - if ( InputFileData%Waves2%WvDiffQTFF ) then - call SetErrStat( ErrID_Fatal, 'Cannot use full difference-frequency 2nd-order wave kinematics for linearization. Set WvDiffQTF=FALSE.', ErrStat, ErrMsg, RoutineName ) - end if - - if ( InputFileData%Waves2%WvSumQTFF ) then - call SetErrStat( ErrID_Fatal, 'Cannot use full summation-frequency 2nd-order wave kinematics for linearization. Set WvSumQTF=FALSE.', ErrStat, ErrMsg, RoutineName ) - end if - if ( InputFileData%PotMod > 1 ) then call SetErrStat( ErrID_Fatal, 'Potential-flow model cannot be set to FIT for linearization. Set PotMod= 0 or 1.', ErrStat, ErrMsg, RoutineName ) end if @@ -2354,10 +1604,19 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS end if end if - - + !------------------------------------------------------------------------------------------------- + ! Strip Theory Options Section + !------------------------------------------------------------------------------------------------- + IF ( InputFileData%Morison%WaveDisp /= 0 .AND. InputFileData%Morison%WaveDisp /= 1) THEN + CALL SetErrStat( ErrID_Fatal,'WaveDisp must be 0 or 1',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + IF ( InputFileData%Morison%AMMod /= 0 .AND. InputFileData%Morison%AMMod /= 1) THEN + CALL SetErrStat( ErrID_Fatal,'AMMod must be 0 or 1',ErrStat,ErrMsg,RoutineName) + RETURN + END IF !------------------------------------------------------------------------------------------------- ! Member Joints Section @@ -2381,13 +1640,25 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS DO I = 1,InputFileData%Morison%NAxCoefs IF ( InputFileData%Morison%AxialCoefs(I)%AxCd < 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'AxCd must be greater or equal to zero.',ErrStat,ErrMsg,RoutineName) + CALL SetErrStat( ErrID_Fatal,'AxCd must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) RETURN END IF IF ( InputFileData%Morison%AxialCoefs(I)%AxCa < 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'AxCa must be greater or equal to zero.',ErrStat,ErrMsg,RoutineName) + CALL SetErrStat( ErrID_Fatal,'AxCa must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) RETURN END IF + IF ( InputFileData%Morison%AxialCoefs(I)%AxCp < 0 ) THEN + CALL SetErrStat( ErrID_Fatal,'AxCp must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + IF ( InputFileData%Morison%AxialCoefs(I)%AxFDMod /= 0_IntKi .AND. InputFileData%Morison%AxialCoefs(I)%AxFDMod /= 1_IntKi ) THEN + CALL SetErrStat( ErrID_Fatal,'AxFDMod must be 0 or 1.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + IF ( InputFileData%Morison%AxialCoefs(I)%AxFDLoFSc < 0_ReKi .OR. InputFileData%Morison%AxialCoefs(I)%AxFDLoFSc > 1_ReKi ) THEN + CALL SetErrStat( ErrID_Fatal,'AxFDLoFSc must be between 0 and 1 inclusive.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF ! Make sure that the current AxCoefID is not used elsewhere in the table. DO J = I+1,InputFileData%Morison%NAxCoefs @@ -2911,7 +2182,7 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS CALL SetErrStat(ErrStat2, ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) RETURN ELSE - InputFileData%Morison%FilledGroups(I)%FillDens = InputFileData%Waves%WtrDens + InputFileData%Morison%FilledGroups(I)%FillDens = InputFileData%Morison%WtrDens END IF END DO @@ -2933,7 +2204,7 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS InputFileData%Morison%MGTop = -999999.0 InputFileData%Morison%MGBottom = 999999.0 - + DO I = 1,InputFileData%Morison%NMGDepths ! Store the boundaries of the marine growth zone IF ( InputFileData%Morison%MGDepths(I)%MGDpth > InputFileData%Morison%MGTop ) THEN @@ -3086,100 +2357,39 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS RETURN END IF foundMask = .FALSE. - ! Extract Waves2 list - InputFileData%Waves2%NumOuts = GetWaves2Channels ( InputFileData%NUserOutputs, InputFileData%UserOutputs, InputFileData%Waves2%OutList, foundMask, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - -! ! Extract WAMIT2 list -! InputFileData%WAMIT2%NumOuts = GetWAMIT2Channels ( InputFileData%NUserOutputs, InputFileData%UserOutputs, InputFileData%WAMIT2%OutList, foundMask, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) -! + ! Extract Morison list - !foundMask = .FALSE. InputFileData%Morison%NumOuts = GetMorisonChannels ( InputFileData%NUserOutputs, InputFileData%UserOutputs, InputFileData%Morison%OutList, foundMask, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) ! Attach remaining items to the HydroDyn list - !foundMask = .FALSE. - call Allocary(InputFileData%OutList, InputFileData%NUserOutputs, "InputFileData%OutList", ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - InputFileData%NumOuts = HDOut_GetChannels ( InputFileData%NUserOutputs, InputFileData%UserOutputs, InputFileData%OutList , foundMask, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + InputFileData%NumOuts = HDOut_GetChannels ( InputFileData%NUserOutputs, InputFileData%UserOutputs, InputFileData%OutList, foundMask, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + CALL PrintBadChannelWarning(InputFileData%NUserOutputs, InputFileData%UserOutputs , foundMask, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF (ErrStat >= AbortErrLev ) RETURN DEALLOCATE(foundMask) - + ELSE + InputFileData%NumOuts = 0 + InputFileData%Morison%NumOuts = 0 END IF ! Now that we have the sub-lists organized, lets do some additional validation. - - - - !---------------------------------------------------------- - ! Mesh-related Output List - !---------------------------------------------------------- - - IF ( InputFileData%Morison%NumOuts > 0 ) THEN - - ! Create an output list for validated outputs - ALLOCATE ( InputFileData%Morison%ValidOutList(InputFileData%Morison%NumOuts), STAT = ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating valid output list array.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - DO I =1, InputFileData%Morison%NumOuts - - InputFileData%Morison%ValidOutList(I) = CheckMeshOutput( InputFileData%Morison%OutList(I), InputFileData%Morison%NMOutputs, InputFileData%Morison%MOutLst, InputFileData%Morison%NJOutputs ) - - END DO - - END IF - - !---------------------------------------------------------- ! Populate data in sub-types from parent or other module types !---------------------------------------------------------- - ! Current - ! For wave kinematic calculations, the effective water depth is the user input water depth (positive valued) + MSL2SWL (positive when SWL is above MSL). - InputFileData%Current%WtrDpth = InputFileData%Morison%WtrDpth ! already adjusted for the MSL2SWL. - - - ! Waves - InputFileData%Waves%Gravity = InitInp%Gravity - InputFileData%Waves%UnSum = InputFileData%UnSum - ! For wave kinematic calculations, the effective water depth is the user input water depth (positive valued) + MSL2SWL (positive when SWL is above MSL). - InputFileData%Waves%WtrDpth = InputFileData%Morison%WtrDpth ! already adjusted for the MSL2SWL. - - ! Waves2 - IF (InputFileData%Waves2%WvDiffQTFF .OR. InputFileData%Waves2%WvSumQTFF ) THEN - InputFileData%Waves2%WtrDens = InputFileData%Waves%WtrDens - InputFileData%Waves2%Gravity = InitInp%Gravity - InputFileData%Waves2%UnSum = InputFileData%UnSum - InputFileData%Waves2%WtrDpth = InputFileData%Waves%WtrDpth - InputFileData%Waves2%WaveStMod = InputFileData%Waves%WaveStMod - InputFileData%Waves2%NWaveElev = InputFileData%Waves%NWaveElev - CALL AllocAry( InputFileData%Waves2%WaveElevxi, InputFileData%Waves2%NWaveElev, 'WaveElevxi' , ErrStat2, ErrMsg2) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDynInput_GetInput' ) - CALL AllocAry( InputFileData%Waves2%WaveElevyi, InputFileData%Waves2%NWaveElev, 'WaveElevyi' , ErrStat2, ErrMsg2) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDynInput_GetInput' ) - IF ( ErrStat >= AbortErrLev ) RETURN - InputFileData%Waves2%WaveElevxi = InputFileData%Waves%WaveElevxi - InputFileData%Waves2%WaveElevyi = InputFileData%Waves%WaveElevyi - ENDIF - ! WAMIT - InputFileData%WAMIT%WtrDens = InputFileData%Waves%WtrDens - InputFileData%WAMIT%WaveMod = InputFileData%Waves%WaveMod - InputFileData%WAMIT%OutAll = InputFileData%OutAll + InputFileData%WAMIT%WtrDens = InputFileData%Morison%WtrDens + InputFileData%WAMIT%WaveMod = InitInp%WaveMod InputFileData%WAMIT%HasWAMIT = InputFileData%PotMod == 1 ! WAMIT2 - InputFileData%WAMIT2%WtrDens = InputFileData%Waves%WtrDens - InputFileData%WAMIT2%WaveMod = InputFileData%Waves%WaveMod + InputFileData%WAMIT2%WtrDens = InputFileData%Morison%WtrDens + InputFileData%WAMIT2%WaveMod = InitInp%WaveMod InputFileData%WAMIT2%HasWAMIT = InputFileData%PotMod == 1 ! Morison InputFileData%Morison%UnSum = InputFileData%UnSum InputFileData%Morison%Gravity = InitInp%Gravity - InputFileData%Morison%WtrDens = InputFileData%Waves%WtrDens - InputFileData%Morison%OutAll = InputFileData%OutAll ! Process the input geometry and generate the simulation mesh representation call Morison_GenerateSimulationNodes( InputFileData%Morison%MSL2SWL, InputFileData%Morison%NJoints, InputFileData%Morison%InpJoints, InputFileData%Morison%NMembers, InputFileData%Morison%InpMembers, InputFileData%Morison%NNodes, InputFileData%Morison%Nodes, errStat2, errMsg2 ) @@ -3187,67 +2397,6 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDynInput_GetInput' ) IF ( ErrStat >= AbortErrLev ) RETURN - ! Set the number and global Z locations for the X and Y components of the current velocities - InputFileData%Current%NMorisonNodes = InputFileData%Morison%NNodes - - ALLOCATE ( InputFileData%Current%MorisonNodezi(InputFileData%Morison%NNodes), STAT = ErrStat2 ) - IF ( ErrStat2 /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for MorisonNodezi array.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - - - ! Establish the number and locations where the wave kinematics will be computed - InputFileData%Waves%NWaveKin = InputFileData%Morison%NNodes ! Number of points where the incident wave kinematics will be computed (-) - ALLOCATE ( InputFileData%Waves%WaveKinxi(InputFileData%Waves%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinxi array.',ErrStat,ErrMsg,RoutineName) - - RETURN - END IF - ALLOCATE ( InputFileData%Waves%WaveKinyi(InputFileData%Waves%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinyi array.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - ALLOCATE ( InputFileData%Waves%WaveKinzi(InputFileData%Waves%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinzi array.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - DO I=1,InputFileData%Morison%NNodes - InputFileData%Waves%WaveKinxi(I) = InputFileData%Morison%Nodes(I)%Position(1) ! xi-coordinates for points where the incident wave kinematics will be computed; - InputFileData%Waves%WaveKinyi(I) = InputFileData%Morison%Nodes(I)%Position(2) ! yi-coordinates for points where the incident wave kinematics will be computed; - InputFileData%Waves%WaveKinzi(I) = InputFileData%Morison%Nodes(I)%Position(3) ! zi-coordinates for points where the incident wave kinematics will be computed; - InputFileData%Current%MorisonNodezi(I) = InputFileData%Waves%WaveKinzi(I) - END DO - - ! If we are using the Waves module, the node information must be copied over. - InputFileData%Waves2%NWaveKin = InputFileData%Waves%NWaveKin ! Number of points where the incident wave kinematics will be computed (-) - IF ( InputFileData%Waves2%WvDiffQTFF .OR. InputFileData%Waves2%WvSumQTFF ) THEN - ALLOCATE ( InputFileData%Waves2%WaveKinxi(InputFileData%Waves2%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinxi array for Waves2 module.',ErrStat,ErrMsg,RoutineName) - - RETURN - END IF - ALLOCATE ( InputFileData%Waves2%WaveKinyi(InputFileData%Waves2%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinyi array for Waves2 module.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - ALLOCATE ( InputFileData%Waves2%WaveKinzi(InputFileData%Waves2%NWaveKin), STAT = ErrStat2 ) - IF ( ErrStat2 /= ErrID_None ) THEN - CALL SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinzi array for Waves2 module.',ErrStat,ErrMsg,RoutineName) - RETURN - END IF - - InputFileData%Waves2%WaveKinxi = InputFileData%Waves%WaveKinxi - InputFileData%Waves2%WaveKinyi = InputFileData%Waves%WaveKinyi - InputFileData%Waves2%WaveKinzi = InputFileData%Waves%WaveKinzi - - ENDIF END SUBROUTINE HydroDynInput_ProcessInitData diff --git a/modules/hydrodyn/src/HydroDyn_Output.f90 b/modules/hydrodyn/src/HydroDyn_Output.f90 index 44668a17c7..95f1693bc7 100644 --- a/modules/hydrodyn/src/HydroDyn_Output.f90 +++ b/modules/hydrodyn/src/HydroDyn_Output.f90 @@ -572,46 +572,12 @@ MODULE HydroDyn_Output INTEGER(IntKi), PARAMETER :: B9WvsM2zi = 510 - ! Wave Elevations: - - INTEGER(IntKi), PARAMETER :: Wave1Elev = 511 - INTEGER(IntKi), PARAMETER :: Wave2Elev = 512 - INTEGER(IntKi), PARAMETER :: Wave3Elev = 513 - INTEGER(IntKi), PARAMETER :: Wave4Elev = 514 - INTEGER(IntKi), PARAMETER :: Wave5Elev = 515 - INTEGER(IntKi), PARAMETER :: Wave6Elev = 516 - INTEGER(IntKi), PARAMETER :: Wave7Elev = 517 - INTEGER(IntKi), PARAMETER :: Wave8Elev = 518 - INTEGER(IntKi), PARAMETER :: Wave9Elev = 519 - INTEGER(IntKi), PARAMETER :: Wave1Elv1 = 520 - INTEGER(IntKi), PARAMETER :: Wave2Elv1 = 521 - INTEGER(IntKi), PARAMETER :: Wave3Elv1 = 522 - INTEGER(IntKi), PARAMETER :: Wave4Elv1 = 523 - INTEGER(IntKi), PARAMETER :: Wave5Elv1 = 524 - INTEGER(IntKi), PARAMETER :: Wave6Elv1 = 525 - INTEGER(IntKi), PARAMETER :: Wave7Elv1 = 526 - INTEGER(IntKi), PARAMETER :: Wave8Elv1 = 527 - INTEGER(IntKi), PARAMETER :: Wave9Elv1 = 528 - INTEGER(IntKi), PARAMETER :: Wave1Elv2 = 529 - INTEGER(IntKi), PARAMETER :: Wave2Elv2 = 530 - INTEGER(IntKi), PARAMETER :: Wave3Elv2 = 531 - INTEGER(IntKi), PARAMETER :: Wave4Elv2 = 532 - INTEGER(IntKi), PARAMETER :: Wave5Elv2 = 533 - INTEGER(IntKi), PARAMETER :: Wave6Elv2 = 534 - INTEGER(IntKi), PARAMETER :: Wave7Elv2 = 535 - INTEGER(IntKi), PARAMETER :: Wave8Elv2 = 536 - INTEGER(IntKi), PARAMETER :: Wave9Elv2 = 537 - - ! The maximum number of output channels which can be output by the code. - INTEGER(IntKi), PARAMETER :: MaxOutPts = 537 + INTEGER(IntKi), PARAMETER, PUBLIC :: MaxOutPts = 510 !End of code generated by Matlab script Write_ChckOutLst ! =================================================================================================== - REAL(ReKi) :: AllOuts(MaxHDOutputs) ! Array of all possible outputs - - INTEGER, PARAMETER :: FHydro(6) = (/HydroFxi,HydroFyi,HydroFzi,HydroMxi,HydroMyi,HydroMzi/) @@ -682,17 +648,13 @@ MODULE HydroDyn_Output B1RAzi,B2RAzi,B3RAzi,B4RAzi,B5RAzi,B6RAzi,B7RAzi,B8RAzi,B9RAzi/), & (/9,6/))) - INTEGER, PARAMETER :: WaveElevi(9) = (/Wave1Elev,Wave2Elev,Wave3Elev,Wave4Elev,Wave5Elev,Wave6Elev,Wave7Elev,Wave8Elev,Wave9Elev/) - INTEGER, PARAMETER :: WaveElevi1(9) = (/Wave1Elv1,Wave2Elv1,Wave3Elv1,Wave4Elv1,Wave5Elv1,Wave6Elv1,Wave7Elv1,Wave8Elv1,Wave9Elv1/) - INTEGER, PARAMETER :: WaveElevi2(9) = (/Wave1Elv2,Wave2Elv2,Wave3Elv2,Wave4Elv2,Wave5Elv2,Wave6Elv2,Wave7Elv2,Wave8Elv2,Wave9Elv2/) - INTEGER, PARAMETER :: PRPMotions(6) = (/PRPSurge,PRPSway,PRPHeave,PRPRoll,PRPPitch,PRPYaw/) INTEGER, PARAMETER :: PRPVel(6) = (/PRPTVxi, PRPTVyi,PRPTVzi, PRPRVxi,PRPRVyi, PRPRVzi/) INTEGER, PARAMETER :: PRPAcc(6) = (/PRPTAxi, PRPTAyi,PRPTAzi, PRPRAxi,PRPRAyi, PRPRAzi/) - CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(537) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(510) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically "B1ADDFXI ","B1ADDFYI ","B1ADDFZI ","B1ADDMXI ","B1ADDMYI ","B1ADDMZI ","B1HDSFXI ","B1HDSFYI ", & "B1HDSFZI ","B1HDSMXI ","B1HDSMYI ","B1HDSMZI ","B1HEAVE ","B1PITCH ","B1RAXI ","B1RAYI ", & "B1RAZI ","B1RDTFXI ","B1RDTFYI ","B1RDTFZI ","B1RDTMXI ","B1RDTMYI ","B1RDTMZI ","B1ROLL ", & @@ -756,150 +718,7 @@ MODULE HydroDyn_Output "B9WVSM2YI","B9WVSM2ZI","B9WVSMXI ","B9WVSMYI ","B9WVSMZI ","B9YAW ","HYDROFXI ","HYDROFYI ", & "HYDROFZI ","HYDROMXI ","HYDROMYI ","HYDROMZI ","PRPHEAVE ","PRPPITCH ","PRPRAXI ","PRPRAYI ", & "PRPRAZI ","PRPROLL ","PRPRVXI ","PRPRVYI ","PRPRVZI ","PRPSURGE ","PRPSWAY ","PRPTAXI ", & - "PRPTAYI ","PRPTAZI ","PRPTVXI ","PRPTVYI ","PRPTVZI ","PRPYAW ","WAVE1ELEV","WAVE1ELV1", & - "WAVE1ELV2","WAVE2ELEV","WAVE2ELV1","WAVE2ELV2","WAVE3ELEV","WAVE3ELV1","WAVE3ELV2","WAVE4ELEV", & - "WAVE4ELV1","WAVE4ELV2","WAVE5ELEV","WAVE5ELV1","WAVE5ELV2","WAVE6ELEV","WAVE6ELV1","WAVE6ELV2", & - "WAVE7ELEV","WAVE7ELV1","WAVE7ELV2","WAVE8ELEV","WAVE8ELV1","WAVE8ELV2","WAVE9ELEV","WAVE9ELV1", & - "WAVE9ELV2"/) - INTEGER(IntKi), PARAMETER :: ParamIndxAry(537) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) - B1AddFxi , B1AddFyi , B1AddFzi , B1AddMxi , B1AddMyi , B1AddMzi , B1HdSFxi , B1HdSFyi , & - B1HdSFzi , B1HdSMxi , B1HdSMyi , B1HdSMzi , B1Heave , B1Pitch , B1RAxi , B1RAyi , & - B1RAzi , B1RdtFxi , B1RdtFyi , B1RdtFzi , B1RdtMxi , B1RdtMyi , B1RdtMzi , B1Roll , & - B1RVxi , B1RVyi , B1RVzi , B1Surge , B1Sway , B1TAxi , B1TAyi , B1TAzi , & - B1TVxi , B1TVyi , B1TVzi , B1WvsF1xi , B1WvsF1yi , B1WvsF1zi , B1WvsF2xi , B1WvsF2yi , & - B1WvsF2zi , B1WvsFxi , B1WvsFyi , B1WvsFzi , B1WvsM1xi , B1WvsM1yi , B1WvsM1zi , B1WvsM2xi , & - B1WvsM2yi , B1WvsM2zi , B1WvsMxi , B1WvsMyi , B1WvsMzi , B1Yaw , B2AddFxi , B2AddFyi , & - B2AddFzi , B2AddMxi , B2AddMyi , B2AddMzi , B2HdSFxi , B2HdSFyi , B2HdSFzi , B2HdSMxi , & - B2HdSMyi , B2HdSMzi , B2Heave , B2Pitch , B2RAxi , B2RAyi , B2RAzi , B2RdtFxi , & - B2RdtFyi , B2RdtFzi , B2RdtMxi , B2RdtMyi , B2RdtMzi , B2Roll , B2RVxi , B2RVyi , & - B2RVzi , B2Surge , B2Sway , B2TAxi , B2TAyi , B2TAzi , B2TVxi , B2TVyi , & - B2TVzi , B2WvsF1xi , B2WvsF1yi , B2WvsF1zi , B2WvsF2xi , B2WvsF2yi , B2WvsF2zi , B2WvsFxi , & - B2WvsFyi , B2WvsFzi , B2WvsM1xi , B2WvsM1yi , B2WvsM1zi , B2WvsM2xi , B2WvsM2yi , B2WvsM2zi , & - B2WvsMxi , B2WvsMyi , B2WvsMzi , B2Yaw , B3AddFxi , B3AddFyi , B3AddFzi , B3AddMxi , & - B3AddMyi , B3AddMzi , B3HdSFxi , B3HdSFyi , B3HdSFzi , B3HdSMxi , B3HdSMyi , B3HdSMzi , & - B3Heave , B3Pitch , B3RAxi , B3RAyi , B3RAzi , B3RdtFxi , B3RdtFyi , B3RdtFzi , & - B3RdtMxi , B3RdtMyi , B3RdtMzi , B3Roll , B3RVxi , B3RVyi , B3RVzi , B3Surge , & - B3Sway , B3TAxi , B3TAyi , B3TAzi , B3TVxi , B3TVyi , B3TVzi , B3WvsF1xi , & - B3WvsF1yi , B3WvsF1zi , B3WvsF2xi , B3WvsF2yi , B3WvsF2zi , B3WvsFxi , B3WvsFyi , B3WvsFzi , & - B3WvsM1xi , B3WvsM1yi , B3WvsM1zi , B3WvsM2xi , B3WvsM2yi , B3WvsM2zi , B3WvsMxi , B3WvsMyi , & - B3WvsMzi , B3Yaw , B4AddFxi , B4AddFyi , B4AddFzi , B4AddMxi , B4AddMyi , B4AddMzi , & - B4HdSFxi , B4HdSFyi , B4HdSFzi , B4HdSMxi , B4HdSMyi , B4HdSMzi , B4Heave , B4Pitch , & - B4RAxi , B4RAyi , B4RAzi , B4RdtFxi , B4RdtFyi , B4RdtFzi , B4RdtMxi , B4RdtMyi , & - B4RdtMzi , B4Roll , B4RVxi , B4RVyi , B4RVzi , B4Surge , B4Sway , B4TAxi , & - B4TAyi , B4TAzi , B4TVxi , B4TVyi , B4TVzi , B4WvsF1xi , B4WvsF1yi , B4WvsF1zi , & - B4WvsF2xi , B4WvsF2yi , B4WvsF2zi , B4WvsFxi , B4WvsFyi , B4WvsFzi , B4WvsM1xi , B4WvsM1yi , & - B4WvsM1zi , B4WvsM2xi , B4WvsM2yi , B4WvsM2zi , B4WvsMxi , B4WvsMyi , B4WvsMzi , B4Yaw , & - B5AddFxi , B5AddFyi , B5AddFzi , B5AddMxi , B5AddMyi , B5AddMzi , B5HdSFxi , B5HdSFyi , & - B5HdSFzi , B5HdSMxi , B5HdSMyi , B5HdSMzi , B5Heave , B5Pitch , B5RAxi , B5RAyi , & - B5RAzi , B5RdtFxi , B5RdtFyi , B5RdtFzi , B5RdtMxi , B5RdtMyi , B5RdtMzi , B5Roll , & - B5RVxi , B5RVyi , B5RVzi , B5Surge , B5Sway , B5TAxi , B5TAyi , B5TAzi , & - B5TVxi , B5TVyi , B5TVzi , B5WvsF1xi , B5WvsF1yi , B5WvsF1zi , B5WvsF2xi , B5WvsF2yi , & - B5WvsF2zi , B5WvsFxi , B5WvsFyi , B5WvsFzi , B5WvsM1xi , B5WvsM1yi , B5WvsM1zi , B5WvsM2xi , & - B5WvsM2yi , B5WvsM2zi , B5WvsMxi , B5WvsMyi , B5WvsMzi , B5Yaw , B6AddFxi , B6AddFyi , & - B6AddFzi , B6AddMxi , B6AddMyi , B6AddMzi , B6HdSFxi , B6HdSFyi , B6HdSFzi , B6HdSMxi , & - B6HdSMyi , B6HdSMzi , B6Heave , B6Pitch , B6RAxi , B6RAyi , B6RAzi , B6RdtFxi , & - B6RdtFyi , B6RdtFzi , B6RdtMxi , B6RdtMyi , B6RdtMzi , B6Roll , B6RVxi , B6RVyi , & - B6RVzi , B6Surge , B6Sway , B6TAxi , B6TAyi , B6TAzi , B6TVxi , B6TVyi , & - B6TVzi , B6WvsF1xi , B6WvsF1yi , B6WvsF1zi , B6WvsF2xi , B6WvsF2yi , B6WvsF2zi , B6WvsFxi , & - B6WvsFyi , B6WvsFzi , B6WvsM1xi , B6WvsM1yi , B6WvsM1zi , B6WvsM2xi , B6WvsM2yi , B6WvsM2zi , & - B6WvsMxi , B6WvsMyi , B6WvsMzi , B6Yaw , B7AddFxi , B7AddFyi , B7AddFzi , B7AddMxi , & - B7AddMyi , B7AddMzi , B7HdSFxi , B7HdSFyi , B7HdSFzi , B7HdSMxi , B7HdSMyi , B7HdSMzi , & - B7Heave , B7Pitch , B7RAxi , B7RAyi , B7RAzi , B7RdtFxi , B7RdtFyi , B7RdtFzi , & - B7RdtMxi , B7RdtMyi , B7RdtMzi , B7Roll , B7RVxi , B7RVyi , B7RVzi , B7Surge , & - B7Sway , B7TAxi , B7TAyi , B7TAzi , B7TVxi , B7TVyi , B7TVzi , B7WvsF1xi , & - B7WvsF1yi , B7WvsF1zi , B7WvsF2xi , B7WvsF2yi , B7WvsF2zi , B7WvsFxi , B7WvsFyi , B7WvsFzi , & - B7WvsM1xi , B7WvsM1yi , B7WvsM1zi , B7WvsM2xi , B7WvsM2yi , B7WvsM2zi , B7WvsMxi , B7WvsMyi , & - B7WvsMzi , B7Yaw , B8AddFxi , B8AddFyi , B8AddFzi , B8AddMxi , B8AddMyi , B8AddMzi , & - B8HdSFxi , B8HdSFyi , B8HdSFzi , B8HdSMxi , B8HdSMyi , B8HdSMzi , B8Heave , B8Pitch , & - B8RAxi , B8RAyi , B8RAzi , B8RdtFxi , B8RdtFyi , B8RdtFzi , B8RdtMxi , B8RdtMyi , & - B8RdtMzi , B8Roll , B8RVxi , B8RVyi , B8RVzi , B8Surge , B8Sway , B8TAxi , & - B8TAyi , B8TAzi , B8TVxi , B8TVyi , B8TVzi , B8WvsF1xi , B8WvsF1yi , B8WvsF1zi , & - B8WvsF2xi , B8WvsF2yi , B8WvsF2zi , B8WvsFxi , B8WvsFyi , B8WvsFzi , B8WvsM1xi , B8WvsM1yi , & - B8WvsM1zi , B8WvsM2xi , B8WvsM2yi , B8WvsM2zi , B8WvsMxi , B8WvsMyi , B8WvsMzi , B8Yaw , & - B9AddFxi , B9AddFyi , B9AddFzi , B9AddMxi , B9AddMyi , B9AddMzi , B9HdSFxi , B9HdSFyi , & - B9HdSFzi , B9HdSMxi , B9HdSMyi , B9HdSMzi , B9Heave , B9Pitch , B9RAxi , B9RAyi , & - B9RAzi , B9RdtFxi , B9RdtFyi , B9RdtFzi , B9RdtMxi , B9RdtMyi , B9RdtMzi , B9Roll , & - B9RVxi , B9RVyi , B9RVzi , B9Surge , B9Sway , B9TAxi , B9TAyi , B9TAzi , & - B9TVxi , B9TVyi , B9TVzi , B9WvsF1xi , B9WvsF1yi , B9WvsF1zi , B9WvsF2xi , B9WvsF2yi , & - B9WvsF2zi , B9WvsFxi , B9WvsFyi , B9WvsFzi , B9WvsM1xi , B9WvsM1yi , B9WvsM1zi , B9WvsM2xi , & - B9WvsM2yi , B9WvsM2zi , B9WvsMxi , B9WvsMyi , B9WvsMzi , B9Yaw , HydroFxi , HydroFyi , & - HydroFzi , HydroMxi , HydroMyi , HydroMzi , PRPHeave , PRPPitch , PRPRAxi , PRPRAyi , & - PRPRAzi , PRPRoll , PRPRVxi , PRPRVyi , PRPRVzi , PRPSurge , PRPSway , PRPTAxi , & - PRPTAyi , PRPTAzi , PRPTVxi , PRPTVyi , PRPTVzi , PRPYaw , Wave1Elev , Wave1Elv1 , & - Wave1Elv2 , Wave2Elev , Wave2Elv1 , Wave2Elv2 , Wave3Elev , Wave3Elv1 , Wave3Elv2 , Wave4Elev , & - Wave4Elv1 , Wave4Elv2 , Wave5Elev , Wave5Elv1 , Wave5Elv2 , Wave6Elev , Wave6Elv1 , Wave6Elv2 , & - Wave7Elev , Wave7Elv1 , Wave7Elv2 , Wave8Elev , Wave8Elv1 , Wave8Elv2 , Wave9Elev , Wave9Elv1 , & - Wave9Elv2 /) - CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(537) = (/ & ! This lists the units corresponding to the allowed parameters - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)", & - "(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & - "(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ", & - "(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(rad/s) ","(rad/s) ", & - "(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ","(N) ","(N-m) ", & - "(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & - "(m) ","(rad) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ","(N) ","(N) ", & - "(N-m) ","(N-m) ","(N-m) ","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ", & - "(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(rad) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ", & - "(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & - "(N-m) ","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)", & - "(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & - "(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ", & - "(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(rad/s) ","(rad/s) ", & - "(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ","(N) ","(N-m) ", & - "(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & - "(m) ","(rad) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ","(N) ","(N) ", & - "(N-m) ","(N-m) ","(N-m) ","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ", & - "(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(rad) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ", & - "(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & - "(N-m) ","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)", & - "(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & - "(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)", & - "(rad/s^2)","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(rad) ","(m) ","(m) ", & - "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & - "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & - "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & - "(m) "/) - + "PRPTAYI ","PRPTAZI ","PRPTVXI ","PRPTVYI ","PRPTVZI ","PRPYAW "/) ! ..... Public Subroutines ................................................................................................... PUBLIC :: HDOut_CloseSum @@ -910,7 +729,6 @@ MODULE HydroDyn_Output PUBLIC :: HDOut_CloseOutput PUBLIC :: HDOut_GetChannels PUBLIC :: HDOUT_Init - PUBLIC :: HDOut_WriteWvKinFiles CONTAINS @@ -992,144 +810,17 @@ SUBROUTINE HDOut_OpenSum( UnSum, SummaryName, HD_Prog, ErrStat, ErrMsg ) END SUBROUTINE HDOut_OpenSum -!==================================================================================================== -SUBROUTINE HDOut_WriteWvKinFiles( Rootname, HD_Prog, NStepWave, NNodes, NWaveElev, nodeInWater, WaveElev, WaveKinzi, & - WaveTime, WaveVel, WaveAcc, WaveDynP, ErrStat, ErrMsg ) - ! Passed variables - CHARACTER(*), INTENT( IN ) :: Rootname ! filename including full path, minus any file extension. - TYPE(ProgDesc), INTENT( IN ) :: HD_Prog ! the name/version/date of the hydrodynamics program - INTEGER, INTENT( IN ) :: NStepWave ! Number of time steps for the wave kinematics arrays - INTEGER, INTENT( IN ) :: NNodes ! Number of simulation nodes for the wave kinematics arrays - INTEGER, INTENT( IN ) :: NWaveElev ! Number of locations where wave elevations were requested - INTEGER, INTENT( IN ) :: nodeInWater(0:,: ) ! - REAL(SiKi), INTENT( IN ) :: WaveElev (0:,: ) ! Instantaneous wave elevations at requested locations - REAL(SiKi), INTENT( IN ) :: WaveKinzi(: ) ! The z-location of all the nodes - REAL(SiKi), INTENT( IN ) :: WaveTime (0: ) ! The time values for the wave kinematics (time) - REAL(SiKi), INTENT( IN ) :: WaveVel (0:,:,:) ! The wave velocities (time,node,component) - REAL(SiKi), INTENT( IN ) :: WaveAcc (0:,:,:) ! The wave accelerations (time,node,component) - REAL(SiKi), INTENT( IN ) :: WaveDynP(0:,:) ! The wave dynamic pressure (time,node) - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables - INTEGER :: UnWv ! file unit for writing the various wave kinematics files - CHARACTER(1024) :: WvName ! complete filename for one of the output files - CHARACTER(5) :: extension(7) - INTEGER :: i, j, iFile - CHARACTER(64) :: Frmt, Sfrmt - CHARACTER(ChanLen) :: Delim - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - - extension = (/'.Vxi ','.Vyi ','.Vzi ','.Axi ','.Ayi ','.Azi ','.DynP'/) - Delim = '' - !Frmt = '('//TRIM(Int2LStr(NNodes))//'(:,A,ES11.4e2))' - Frmt = '(:,A,ES11.4e2)' - Sfrmt = '(:,A,A11)' - - - - DO iFile = 1,7 - - CALL GetNewUnit( UnWv ) - - WvName = Rootname // TRIM(extension(iFile)) - CALL OpenFOutFile ( UnWv, WvName, ErrStat, ErrMsg ) - IF (ErrStat >=AbortErrLev) RETURN - - - - ! Write the summary file header - ! WRITE (UnWv,'(/,A/)', IOSTAT=ErrStat) 'This wave kinematics file was generated by '//TRIM( HD_Prog%Name )//& - WRITE (UnWv,'(A)', IOSTAT=ErrStat) 'This wave kinematics file was generated by '//TRIM( HD_Prog%Name )//& - ' '//TRIM( HD_Prog%Ver )//' on '//CurDate()//' at '//CurTime()//'.' - - - DO i= 0,NStepWave-1 - DO j = 1, NNodes - IF ( nodeInWater(i,j) == 0 ) THEN - WRITE(UnWv,Sfrmt,ADVANCE='no') Delim, '##########' - ELSE - - SELECT CASE (iFile) - CASE (1) - WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveVel (i,j,1) - CASE (2) - WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveVel (i,j,2) - CASE (3) - WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveVel (i,j,3) - CASE (4) - WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveAcc (i,j,1) - CASE (5) - WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveAcc (i,j,2) - CASE (6) - WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveAcc (i,j,3) - CASE (7) - WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveDynP(i,j ) - END SELECT - END IF - END DO - WRITE (UnWv,'()', IOSTAT=ErrStat) ! write the line return - END DO - - CLOSE( UnWv, IOSTAT=ErrStat ) - IF (ErrStat /= 0) THEN - ErrStat = ErrID_Fatal - ErrMsg = 'Problem closing wave kinematics file' - RETURN - END IF - END DO - - IF ( NWaveElev > 0 ) THEN - - CALL GetNewUnit( UnWv ) - - WvName = Rootname // '.Elev' - CALL OpenFOutFile ( UnWv, WvName, ErrStat, ErrMsg ) - IF (ErrStat >=AbortErrLev) RETURN - - - - ! Write the summary file header - WRITE (UnWv,'(A)', IOSTAT=ErrStat) 'This wave kinematics file was generated by '//TRIM( HD_Prog%Name )//& - ' '//TRIM( HD_Prog%Ver )//' on '//CurDate()//' at '//CurTime()//'.' - - - DO i= 0,NStepWave-1 - - Frmt = '('//TRIM(Int2LStr(NWaveElev))//'(:,A,ES11.4e2))' - WRITE(UnWv,Frmt) ( Delim, WaveElev(i,j) , j=1,NWaveElev ) - - END DO - - CLOSE( UnWv, IOSTAT=ErrStat ) - IF (ErrStat /= 0) THEN - ErrStat = ErrID_Fatal - ErrMsg = 'Problem closing wave elevations file' - RETURN - END IF - - END IF - - -END SUBROUTINE HDOut_WriteWvKinFiles !==================================================================================================== -SUBROUTINE HDOut_MapOutputs( CurrentTime, p, y, m_WAMIT, m_WAMIT2, NWaveElev, WaveElev, WaveElev1, WaveElev2, F_Add, F_Waves, F_Hydro, PRPmesh, q, qdot, qdotdot, AllOuts, ErrStat, ErrMsg ) +SUBROUTINE HDOut_MapOutputs( p, y, m_WAMIT, m_WAMIT2, F_Add, F_Waves, F_Hydro, PRPmesh, q, qdot, qdotdot, ErrStat, ErrMsg ) ! This subroutine writes the data stored in the y variable to the correct indexed postions in WriteOutput ! This is called by HydroDyn_CalcOutput() at each time step. !---------------------------------------------------------------------------------------------------- - REAL(DbKi), INTENT( IN ) :: CurrentTime ! Current simulation time in seconds TYPE(HydroDyn_ParameterType), INTENT( IN ) :: p ! HydroDyn's parameter data TYPE(HydroDyn_OutputType), INTENT( INOUT ) :: y ! HydroDyn's output data type(WAMIT_MiscVarType), ALLOCATABLE, intent( in ) :: m_WAMIT(:) ! WAMIT object's MiscVar data type(WAMIT2_MiscVarType), ALLOCATABLE, intent( in ) :: m_WAMIT2(:) ! WAMIT2 object's MiscVar data - INTEGER, INTENT( IN ) :: NWaveElev ! Number of wave elevation locations to output - REAL(ReKi), INTENT( IN ) :: WaveElev(:) ! Instantaneous total elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) - REAL(ReKi), INTENT( IN ) :: WaveElev1(:) ! Instantaneous first order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) - REAL(ReKi), INTENT( IN ) :: WaveElev2(:) ! Instantaneous second order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) REAL(ReKi), ALLOCATABLE, INTENT( IN ) :: F_Add(:) REAL(ReKi), ALLOCATABLE, INTENT( IN ) :: F_Waves(:) REAL(ReKi), INTENT( IN ) :: F_Hydro(:) ! All hydrodynamic loads integrated at (0,0,0) in the global coordinate system @@ -1137,14 +828,14 @@ SUBROUTINE HDOut_MapOutputs( CurrentTime, p, y, m_WAMIT, m_WAMIT2, NWaveElev, Wa REAL(ReKi), INTENT( IN ) :: q(:) ! WAMIT body translations and rotations REAL(ReKi), INTENT( IN ) :: qdot(:) ! WAMIT body translational and rotational velocities REAL(ReKi), INTENT( IN ) :: qdotdot(:) ! WAMIT body translational and rotational accelerations - REAL(ReKi), INTENT( OUT ) :: AllOuts(MaxHDOutputs) INTEGER(IntKi), INTENT( OUT ) :: ErrStat ! Error status of the operation CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - INTEGER :: I, iBody, startIndx, endIndx - integer(IntKi) :: ErrStat2 - character(ErrMsgLen) :: ErrMsg2 - real(ReKi) :: rotdisp(3) + INTEGER :: i, iBody, startIndx, endIndx + integer(IntKi) :: ErrStat2 + character(ErrMsgLen) :: ErrMsg2 + real(ReKi) :: rotdisp(3) + REAL(ReKi) :: AllOuts(MaxOutPts) ErrStat = ErrID_None ErrMsg = "" @@ -1198,14 +889,12 @@ SUBROUTINE HDOut_MapOutputs( CurrentTime, p, y, m_WAMIT, m_WAMIT2, NWaveElev, Wa AllOuts(FHydro ) = F_Hydro - DO I=1,NWaveElev - AllOuts(WaveElevi(I)) = WaveElev(I) - AllOuts(WaveElevi1(I))= WaveElev1(I) - AllOuts(WaveElevi2(I))= WaveElev2(I) + + DO I = 1,p%NumOuts + y%WriteOutput(I) = p%OutParam(I)%SignM * AllOuts( p%OutParam(I)%Indx ) END DO - END SUBROUTINE HDOut_MapOutputs !==================================================================================================== @@ -1228,19 +917,19 @@ SUBROUTINE HDOut_WriteOutputs( Time, y, p, Decimate, ErrStat, ErrMsg ) integer(IntKi) :: ErrStat2 ! character(ErrMsgLen) :: ErrMsg2 + ErrStat = ErrID_None + ErrMsg = '' + IF (p%UnOutFile < 0 ) RETURN ! Initialize ErrStat and determine if it makes any sense to write output !TODO: We should not have this check here, once per timestep! This should be resolved during initialization. GJH 7/7/2014 IF ( ( (.NOT. ALLOCATED( p%OutParam )) .AND. (.NOT. ALLOCATED( p%WAMIT ) ) .AND. (.NOT. ALLOCATED( p%WAMIT2 ) )& - .AND. (.NOT. ALLOCATED( p%Waves2%OutParam ) ) .AND. ( .NOT. ALLOCATED( p%Morison%OutParam ) ) ) ) THEN + .AND. ( .NOT. ALLOCATED( p%Morison%OutParam ) ) ) ) THEN ErrStat = ErrID_Warn ErrMsg = ' Cannot write output to file because there are not a valid output list.' RETURN - ELSE - ErrStat = ErrID_None - ErrMsg = '' END IF @@ -1286,7 +975,7 @@ SUBROUTINE HDOUT_Init( HydroDyn_ProgDesc, OutRootName, InputFileData, y, p, m, ! Passed variables TYPE(ProgDesc), INTENT( IN ) :: HydroDyn_ProgDesc ! - CHARACTER(1024), INTENT( IN ) :: OutRootName ! The name of the output file + CHARACTER(*), INTENT( IN ) :: OutRootName ! The name of the output file TYPE(HydroDyn_InputFile ), INTENT( IN ) :: InputFileData ! data needed to initialize the output module TYPE(HydroDyn_OutputType), INTENT( INOUT ) :: y ! This module's internal data TYPE(HydroDyn_ParameterType), INTENT( INOUT ) :: p @@ -1298,13 +987,7 @@ SUBROUTINE HDOUT_Init( HydroDyn_ProgDesc, OutRootName, InputFileData, y, p, m, ! Local variables INTEGER :: I ! Generic loop counter INTEGER :: J ! Generic loop counter - INTEGER :: iWAMIT ! loop counter over WAMIT objects -! INTEGER :: Indx ! Counts the current index into the WaveKinNd array -! CHARACTER(1024) :: OutFileName ! The name of the output file including the full path. -! CHARACTER(200) :: Frmt ! a string to hold a format statement - LOGICAL :: hasWAMITOuts ! Are there any WAMIT-related outputs LOGICAL :: hasWAMIT2Outs ! Are there any WAMIT-related outputs - LOGICAL :: hasWaves2Outs ! Are there any WAMIT-related outputs LOGICAL :: hasMorisonOuts ! Are there any Morison-related outputs @@ -1318,41 +1001,25 @@ SUBROUTINE HDOUT_Init( HydroDyn_ProgDesc, OutRootName, InputFileData, y, p, m, ErrStat = ErrID_None ErrMsg = "" - - ! Sanity check that we didn't have an issue during the programing of this module. The auto - ! generated outlist at the top of this file sets the MaxOutPts value, but HD does not use - ! that value, but rather has the maximum outputs hard coded in the HD registry file. This - ! next test will hopefully help the developer catch any issues. - if ( MaxOutPts /= MaxHDOutputs ) then - call SetErrStat(ErrID_Fatal, ' HD outputs: the number of outputs given by the Write_ChckOutList.m '// & - 'script using the xlsx file does not match the number of outputs given by the HydroDyn.txt registry '// & - 'file.', ErrStat, ErrMsg, 'HDOUT_Init') - return - endif - !------------------------------------------------------------------------------------------------- ! Check that the variables in OutList are valid !------------------------------------------------------------------------------------------------- - CALL HDOUT_ChkOutLst( InputFileData%OutList(1:p%NumOuts), y, p, ErrStat, ErrMsg ) + CALL SetOutParam(InputFileData%OutList, p, ErrStat, ErrMsg ) IF ( ErrStat >= AbortErrLev ) RETURN ! Aggregate the sub-module initialization outputs for the glue code hasWAMIT2Outs = .FALSE. - hasWaves2Outs = .FALSE. hasMorisonOuts = .FALSE. p%NumTotalOuts = p%NumOuts m%LastOutTime = 0.0_DbKi m%Decimate = 0 p%OutDec = 1 !TODO: Remove this once the parameter has been added to the HD input file GJH 7/8/2014 - IF (ALLOCATED( p%Waves2%OutParam ) .AND. p%Waves2%NumOuts > 0) THEN - hasWaves2Outs = .TRUE. - p%NumTotalOuts = p%NumTotalOuts + p%Waves2%NumOuts - END IF + IF (ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0) THEN hasMorisonOuts = .TRUE. p%NumTotalOuts = p%NumTotalOuts + p%Morison%NumOuts @@ -1393,15 +1060,7 @@ SUBROUTINE HDOUT_Init( HydroDyn_ProgDesc, OutRootName, InputFileData, y, p, m, J = p%NumOuts + 1 - - IF ( hasWaves2Outs ) THEN - DO I=1, p%Waves2%NumOuts - InitOut%WriteOutputHdr(J) = InitOut%Waves2%WriteOutputHdr(I) - InitOut%WriteOutputUnt(J) = InitOut%Waves2%WriteOutputUnt(I) - J = J + 1 - END DO - END IF - + IF ( hasMorisonOuts ) THEN DO I=1, p%Morison%NumOuts InitOut%WriteOutputHdr(J) = InitOut%Morison%WriteOutputHdr(I) @@ -1432,7 +1091,7 @@ SUBROUTINE HDOut_OpenOutput( HydroDyn_ProgDesc, OutRootName, p, InitOut, ErrSta ! Passed variables TYPE(ProgDesc) , INTENT( IN ) :: HydroDyn_ProgDesc - CHARACTER(1024), INTENT( IN ) :: OutRootName ! Root name for the output file + CHARACTER(*), INTENT( IN ) :: OutRootName ! Root name for the output file TYPE(HydroDyn_ParameterType), INTENT( INOUT ) :: p TYPE(HydroDyn_InitOutPutType ),INTENT( IN ) :: InitOut ! INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred @@ -1440,8 +1099,6 @@ SUBROUTINE HDOut_OpenOutput( HydroDyn_ProgDesc, OutRootName, p, InitOut, ErrSta ! Local variables INTEGER :: I ! Generic loop counter - INTEGER :: iWAMIT ! loop counter for WAMIT Objects -! INTEGER :: Indx ! Counts the current index into the WaveKinNd array CHARACTER(1024) :: OutFileName ! The name of the output file including the full path. CHARACTER(200) :: Frmt ! a string to hold a format statement @@ -1458,11 +1115,10 @@ SUBROUTINE HDOut_OpenOutput( HydroDyn_ProgDesc, OutRootName, p, InitOut, ErrSta !------------------------------------------------------------------------------------------------- p%UnOutFile = -1 IF ( (ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0 ) .OR. & - (ALLOCATED( p%Waves2%OutParam ) .AND. p%Waves2%NumOuts > 0 ) .OR. & (ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0 ) ) THEN ! Output has been requested so let's open an output file ! Open the file for output - OutFileName = TRIM(OutRootName)//'.HD.out' + OutFileName = TRIM(OutRootName)//'.out' CALL GetNewUnit( p%UnOutFile ) CALL OpenFOutFile ( p%UnOutFile, OutFileName, ErrStat, ErrMsg ) @@ -1488,11 +1144,6 @@ SUBROUTINE HDOut_OpenOutput( HydroDyn_ProgDesc, OutRootName, p, InitOut, ErrSta WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%WriteOutputHdr(I) ), I=1,p%NumOuts ) END IF - IF (ALLOCATED( p%Waves2%OutParam ) .AND. p%Waves2%NumOuts > 0) THEN - Frmt = '('//TRIM(Int2LStr(p%Waves2%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' - WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%Waves2%WriteOutputHdr(I) ), I=1,p%Waves2%NumOuts ) - END IF - IF (ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0) THEN Frmt = '('//TRIM(Int2LStr(p%Morison%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%Morison%WriteOutputHdr(I) ), I=1,p%Morison%NumOuts ) @@ -1512,11 +1163,6 @@ SUBROUTINE HDOut_OpenOutput( HydroDyn_ProgDesc, OutRootName, p, InitOut, ErrSta Frmt = '('//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%WriteOutputUnt(I) ), I=1,p%NumOuts ) END IF - - IF (ALLOCATED( p%Waves2%OutParam ) .AND. p%Waves2%NumOuts > 0) THEN - Frmt = '('//TRIM(Int2LStr(p%Waves2%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' - WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%Waves2%WriteOutputUnt(I) ), I=1,p%Waves2%NumOuts ) - END IF IF (ALLOCATED( p%Morison%OutParam ) .AND. p%Morison%NumOuts > 0) THEN Frmt = '('//TRIM(Int2LStr(p%Morison%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' @@ -1544,208 +1190,287 @@ FUNCTION HDOut_GetChannels ( NUserOutputs, UserOutputs, OutList, foundMask, !---------------------------------------------------------------------------------------------------- INTEGER, INTENT( IN ) :: NUserOutputs ! Number of user-specified output channels CHARACTER(ChanLen), INTENT( IN ) :: UserOutputs (:) ! An array holding the names of the requested output channels. - CHARACTER(ChanLen), INTENT( OUT ) :: OutList (:) ! An array holding the names of the matched WAMIT output channels. + CHARACTER(ChanLen),ALLOCATABLE,INTENT( OUT ) :: OutList (:) ! An array holding the names of the matched HD output channels. LOGICAL, INTENT( INOUT ) :: foundMask (:) ! A mask indicating whether a user requested channel belongs to a module's output channels. INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - INTEGER HDOut_GetChannels ! The number of channels found in this module + INTEGER :: HDOut_GetChannels ! The number of channels found in this module ! Local variables. - INTEGER :: I ! Generic loop-counting index. + INTEGER :: I, J ! Generic loop-counting index. INTEGER :: count ! Generic loop-counting index. INTEGER :: INDX ! Index for valid arrays + INTEGER :: newFoundMask (NUserOutputs) ! A mask indicating whether a user requested channel belongs to a module's output channels - CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I). - CHARACTER(28), PARAMETER :: OutPFmt = "( I4, 3X,A 10,1 X, A10 )" ! Output format parameter output list. - LOGICAL :: CheckOutListAgain - LOGICAL :: newFoundMask (NUserOutputs) ! A mask indicating whether a user requested channel belongs to a module's output channels. ! Initialize ErrStat - - ErrStat = ErrID_None + ErrStat = ErrID_None ErrMsg = "" - HDOut_GetChannels = 0 - newFoundMask = .FALSE. + HDOut_GetChannels = 0 + newFoundMask = 0 - DO I = 1,NUserOutputs + DO I = 1,NUserOutputs IF (.NOT. foundMask(I) ) THEN - OutListTmp = UserOutputs(I) - - CheckOutListAgain = .FALSE. - - ! Reverse the sign (+/-) of the output channel if the user prefixed the - ! channel name with a '-', '_', 'm', or 'M' character indicating "minus". - - - IF ( INDEX( '-_', OutListTmp(1:1) ) > 0 ) THEN - - OutListTmp = OutListTmp(2:) - ELSE IF ( INDEX( 'mM', OutListTmp(1:1) ) > 0 ) THEN ! We'll assume this is a variable name for now, (if not, we will check later if OutListTmp(2:) is also a variable name) - CheckOutListAgain = .TRUE. - - END IF - - CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - - - Indx = IndexCharAry( OutListTmp(1:OutStrLenM1), ValidParamAry ) - - IF ( CheckOutListAgain .AND. Indx < 1 ) THEN ! Let's assume that "M" really meant "minus" and then test again - ! ex, 'MTipDxc1' causes the sign of TipDxc1 to be switched. - OutListTmp = OutListTmp(2:) - - Indx = IndexCharAry( OutListTmp(1:OutStrLenM1), ValidParamAry ) - END IF - - IF ( Indx > 0 ) THEN - newFoundMask(I) = .TRUE. - foundMask(I) = .TRUE. - HDOut_GetChannels = HDOut_GetChannels + 1 - - !ELSE - ! foundMask(I) = .FALSE. + Indx = FindValidChannelIndx(UserOutputs(I), ValidParamAry) + + IF ( Indx > 0 ) THEN + foundMask(I) = .TRUE. + newFoundMask(I) = newFoundMask(I) + 1 + HDOut_GetChannels = HDOut_GetChannels + 1 + END IF END IF - END IF -END DO + END DO + + CALL AllocAry(OutList, HDOut_GetChannels, 'HydroDyn OutList', ErrStat, ErrMsg) -IF ( HDOut_GetChannels > 0 ) THEN + IF ( HDOut_GetChannels > 0 .and. ErrStat < AbortErrLev) THEN + count = 1 - count = 1 + DO I = 1,NUserOutputs + DO J = 1,newFoundMask(I) ! in case an output is listed more than once + OutList(count) = UserOutputs(I) + count = count + 1 + END DO + END DO - IF ( ErrStat /= 0 ) THEN - ErrMsg = ' Error allocating memory for the OutList array in the GetHydroDynChannels function.' - ErrStat = ErrID_Fatal - RETURN END IF - DO I = 1,NUserOutputs - IF ( newFoundMask(I) ) THEN - - OutList(count) = UserOutputs(I) - count = count + 1 - END IF - - END DO - -END IF - END FUNCTION HDOut_GetChannels -!==================================================================================================== -SUBROUTINE HDOut_ChkOutLst( OutList, y, p, ErrStat, ErrMsg ) -! This routine checks the names of inputted output channels, checks to see if any of them are ill- -! conditioned (returning an error if so), and assigns the OutputDataType settings (i.e, the index, -! name, and units of the output channels). -! Note that the HydroDyn module must be initialized prior to calling this function (if it -! is being used) so that it can correctly determine if the Lines outputs are valid. -!---------------------------------------------------------------------------------------------------- - - - +!********************************************************************************************************************************** +! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m" +! 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 routine checks to see if any requested output channel names (stored in the OutList(:)) are invalid. It returns a +!! warning if any of the channels are not available outputs from the module. +!! It assigns the settings for OutParam(:) (i.e, the index, name, and units of the output channels, WriteOutput(:)). +!! 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 07-Sep-2022 16:14:57. +SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) +!SUBROUTINE HDOut_ChkOutLst( OutList, p, ErrStat, ErrMsg ) +!.................................................................................................................................. + + IMPLICIT NONE + ! Passed variables - - TYPE(HydroDyn_OutputType), INTENT( INOUT ) :: y ! This module's internal data - TYPE(HydroDyn_ParameterType), INTENT( INOUT ) :: p ! parameter data for this instance of the HD module -! INTEGER, INTENT(IN ) :: NumMemberNodes(*) ! the number of nodes on each of the first 9 members - CHARACTER(ChanLen), INTENT( IN ) :: OutList (:) ! An array holding the names of the requested output channels. - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables. - - INTEGER :: I ! Generic loop-counting index. -! INTEGER :: J ! Generic loop-counting index. - INTEGER :: INDX ! Index for valid arrays - - CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I). - CHARACTER(28), PARAMETER :: OutPFmt = "( I4, 3X,A 10,1 X, A10 )" ! Output format parameter output list. - LOGICAL :: InvalidOutput(MaxHDOutputs) ! This array determines if the output channel is valid for this configuration - LOGICAL :: CheckOutListAgain - - !------------------------------------------------------------------------------------------------- - ! Allocate and set index, name, and units for the output channels - ! If a selected output channel is not available in this module, set error flag. - !------------------------------------------------------------------------------------------------- - ALLOCATE ( p%OutParam(0:p%NumOuts) , STAT=ErrStat ) - IF ( ErrStat /= 0_IntKi ) THEN - ErrStat = ErrID_Fatal - ErrMsg = "Error allocating memory for the HydroDyn OutParam array." - RETURN - ELSE - ErrStat = ErrID_None - ErrMsg = "" - ENDIF + CHARACTER(ChanLen), INTENT(IN) :: OutList(:) !< The list out user-requested outputs + TYPE(HydroDyn_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 - InvalidOutput = .FALSE. + ! 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 + + LOGICAL :: InvalidOutput(0:MaxOutPts) ! This array determines if the output channel is valid for this configuration + CHARACTER(*), PARAMETER :: RoutineName = "SetOutParam" + INTEGER(IntKi), PARAMETER :: ParamIndxAry(510) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + B1AddFxi , B1AddFyi , B1AddFzi , B1AddMxi , B1AddMyi , B1AddMzi , B1HdSFxi , B1HdSFyi , & + B1HdSFzi , B1HdSMxi , B1HdSMyi , B1HdSMzi , B1Heave , B1Pitch , B1RAxi , B1RAyi , & + B1RAzi , B1RdtFxi , B1RdtFyi , B1RdtFzi , B1RdtMxi , B1RdtMyi , B1RdtMzi , B1Roll , & + B1RVxi , B1RVyi , B1RVzi , B1Surge , B1Sway , B1TAxi , B1TAyi , B1TAzi , & + B1TVxi , B1TVyi , B1TVzi , B1WvsF1xi , B1WvsF1yi , B1WvsF1zi , B1WvsF2xi , B1WvsF2yi , & + B1WvsF2zi , B1WvsFxi , B1WvsFyi , B1WvsFzi , B1WvsM1xi , B1WvsM1yi , B1WvsM1zi , B1WvsM2xi , & + B1WvsM2yi , B1WvsM2zi , B1WvsMxi , B1WvsMyi , B1WvsMzi , B1Yaw , B2AddFxi , B2AddFyi , & + B2AddFzi , B2AddMxi , B2AddMyi , B2AddMzi , B2HdSFxi , B2HdSFyi , B2HdSFzi , B2HdSMxi , & + B2HdSMyi , B2HdSMzi , B2Heave , B2Pitch , B2RAxi , B2RAyi , B2RAzi , B2RdtFxi , & + B2RdtFyi , B2RdtFzi , B2RdtMxi , B2RdtMyi , B2RdtMzi , B2Roll , B2RVxi , B2RVyi , & + B2RVzi , B2Surge , B2Sway , B2TAxi , B2TAyi , B2TAzi , B2TVxi , B2TVyi , & + B2TVzi , B2WvsF1xi , B2WvsF1yi , B2WvsF1zi , B2WvsF2xi , B2WvsF2yi , B2WvsF2zi , B2WvsFxi , & + B2WvsFyi , B2WvsFzi , B2WvsM1xi , B2WvsM1yi , B2WvsM1zi , B2WvsM2xi , B2WvsM2yi , B2WvsM2zi , & + B2WvsMxi , B2WvsMyi , B2WvsMzi , B2Yaw , B3AddFxi , B3AddFyi , B3AddFzi , B3AddMxi , & + B3AddMyi , B3AddMzi , B3HdSFxi , B3HdSFyi , B3HdSFzi , B3HdSMxi , B3HdSMyi , B3HdSMzi , & + B3Heave , B3Pitch , B3RAxi , B3RAyi , B3RAzi , B3RdtFxi , B3RdtFyi , B3RdtFzi , & + B3RdtMxi , B3RdtMyi , B3RdtMzi , B3Roll , B3RVxi , B3RVyi , B3RVzi , B3Surge , & + B3Sway , B3TAxi , B3TAyi , B3TAzi , B3TVxi , B3TVyi , B3TVzi , B3WvsF1xi , & + B3WvsF1yi , B3WvsF1zi , B3WvsF2xi , B3WvsF2yi , B3WvsF2zi , B3WvsFxi , B3WvsFyi , B3WvsFzi , & + B3WvsM1xi , B3WvsM1yi , B3WvsM1zi , B3WvsM2xi , B3WvsM2yi , B3WvsM2zi , B3WvsMxi , B3WvsMyi , & + B3WvsMzi , B3Yaw , B4AddFxi , B4AddFyi , B4AddFzi , B4AddMxi , B4AddMyi , B4AddMzi , & + B4HdSFxi , B4HdSFyi , B4HdSFzi , B4HdSMxi , B4HdSMyi , B4HdSMzi , B4Heave , B4Pitch , & + B4RAxi , B4RAyi , B4RAzi , B4RdtFxi , B4RdtFyi , B4RdtFzi , B4RdtMxi , B4RdtMyi , & + B4RdtMzi , B4Roll , B4RVxi , B4RVyi , B4RVzi , B4Surge , B4Sway , B4TAxi , & + B4TAyi , B4TAzi , B4TVxi , B4TVyi , B4TVzi , B4WvsF1xi , B4WvsF1yi , B4WvsF1zi , & + B4WvsF2xi , B4WvsF2yi , B4WvsF2zi , B4WvsFxi , B4WvsFyi , B4WvsFzi , B4WvsM1xi , B4WvsM1yi , & + B4WvsM1zi , B4WvsM2xi , B4WvsM2yi , B4WvsM2zi , B4WvsMxi , B4WvsMyi , B4WvsMzi , B4Yaw , & + B5AddFxi , B5AddFyi , B5AddFzi , B5AddMxi , B5AddMyi , B5AddMzi , B5HdSFxi , B5HdSFyi , & + B5HdSFzi , B5HdSMxi , B5HdSMyi , B5HdSMzi , B5Heave , B5Pitch , B5RAxi , B5RAyi , & + B5RAzi , B5RdtFxi , B5RdtFyi , B5RdtFzi , B5RdtMxi , B5RdtMyi , B5RdtMzi , B5Roll , & + B5RVxi , B5RVyi , B5RVzi , B5Surge , B5Sway , B5TAxi , B5TAyi , B5TAzi , & + B5TVxi , B5TVyi , B5TVzi , B5WvsF1xi , B5WvsF1yi , B5WvsF1zi , B5WvsF2xi , B5WvsF2yi , & + B5WvsF2zi , B5WvsFxi , B5WvsFyi , B5WvsFzi , B5WvsM1xi , B5WvsM1yi , B5WvsM1zi , B5WvsM2xi , & + B5WvsM2yi , B5WvsM2zi , B5WvsMxi , B5WvsMyi , B5WvsMzi , B5Yaw , B6AddFxi , B6AddFyi , & + B6AddFzi , B6AddMxi , B6AddMyi , B6AddMzi , B6HdSFxi , B6HdSFyi , B6HdSFzi , B6HdSMxi , & + B6HdSMyi , B6HdSMzi , B6Heave , B6Pitch , B6RAxi , B6RAyi , B6RAzi , B6RdtFxi , & + B6RdtFyi , B6RdtFzi , B6RdtMxi , B6RdtMyi , B6RdtMzi , B6Roll , B6RVxi , B6RVyi , & + B6RVzi , B6Surge , B6Sway , B6TAxi , B6TAyi , B6TAzi , B6TVxi , B6TVyi , & + B6TVzi , B6WvsF1xi , B6WvsF1yi , B6WvsF1zi , B6WvsF2xi , B6WvsF2yi , B6WvsF2zi , B6WvsFxi , & + B6WvsFyi , B6WvsFzi , B6WvsM1xi , B6WvsM1yi , B6WvsM1zi , B6WvsM2xi , B6WvsM2yi , B6WvsM2zi , & + B6WvsMxi , B6WvsMyi , B6WvsMzi , B6Yaw , B7AddFxi , B7AddFyi , B7AddFzi , B7AddMxi , & + B7AddMyi , B7AddMzi , B7HdSFxi , B7HdSFyi , B7HdSFzi , B7HdSMxi , B7HdSMyi , B7HdSMzi , & + B7Heave , B7Pitch , B7RAxi , B7RAyi , B7RAzi , B7RdtFxi , B7RdtFyi , B7RdtFzi , & + B7RdtMxi , B7RdtMyi , B7RdtMzi , B7Roll , B7RVxi , B7RVyi , B7RVzi , B7Surge , & + B7Sway , B7TAxi , B7TAyi , B7TAzi , B7TVxi , B7TVyi , B7TVzi , B7WvsF1xi , & + B7WvsF1yi , B7WvsF1zi , B7WvsF2xi , B7WvsF2yi , B7WvsF2zi , B7WvsFxi , B7WvsFyi , B7WvsFzi , & + B7WvsM1xi , B7WvsM1yi , B7WvsM1zi , B7WvsM2xi , B7WvsM2yi , B7WvsM2zi , B7WvsMxi , B7WvsMyi , & + B7WvsMzi , B7Yaw , B8AddFxi , B8AddFyi , B8AddFzi , B8AddMxi , B8AddMyi , B8AddMzi , & + B8HdSFxi , B8HdSFyi , B8HdSFzi , B8HdSMxi , B8HdSMyi , B8HdSMzi , B8Heave , B8Pitch , & + B8RAxi , B8RAyi , B8RAzi , B8RdtFxi , B8RdtFyi , B8RdtFzi , B8RdtMxi , B8RdtMyi , & + B8RdtMzi , B8Roll , B8RVxi , B8RVyi , B8RVzi , B8Surge , B8Sway , B8TAxi , & + B8TAyi , B8TAzi , B8TVxi , B8TVyi , B8TVzi , B8WvsF1xi , B8WvsF1yi , B8WvsF1zi , & + B8WvsF2xi , B8WvsF2yi , B8WvsF2zi , B8WvsFxi , B8WvsFyi , B8WvsFzi , B8WvsM1xi , B8WvsM1yi , & + B8WvsM1zi , B8WvsM2xi , B8WvsM2yi , B8WvsM2zi , B8WvsMxi , B8WvsMyi , B8WvsMzi , B8Yaw , & + B9AddFxi , B9AddFyi , B9AddFzi , B9AddMxi , B9AddMyi , B9AddMzi , B9HdSFxi , B9HdSFyi , & + B9HdSFzi , B9HdSMxi , B9HdSMyi , B9HdSMzi , B9Heave , B9Pitch , B9RAxi , B9RAyi , & + B9RAzi , B9RdtFxi , B9RdtFyi , B9RdtFzi , B9RdtMxi , B9RdtMyi , B9RdtMzi , B9Roll , & + B9RVxi , B9RVyi , B9RVzi , B9Surge , B9Sway , B9TAxi , B9TAyi , B9TAzi , & + B9TVxi , B9TVyi , B9TVzi , B9WvsF1xi , B9WvsF1yi , B9WvsF1zi , B9WvsF2xi , B9WvsF2yi , & + B9WvsF2zi , B9WvsFxi , B9WvsFyi , B9WvsFzi , B9WvsM1xi , B9WvsM1yi , B9WvsM1zi , B9WvsM2xi , & + B9WvsM2yi , B9WvsM2zi , B9WvsMxi , B9WvsMyi , B9WvsMzi , B9Yaw , HydroFxi , HydroFyi , & + HydroFzi , HydroMxi , HydroMyi , HydroMzi , PRPHeave , PRPPitch , PRPRAxi , PRPRAyi , & + PRPRAzi , PRPRoll , PRPRVxi , PRPRVyi , PRPRVzi , PRPSurge , PRPSway , PRPTAxi , & + PRPTAyi , PRPTAzi , PRPTVxi , PRPTVyi , PRPTVzi , PRPYaw /) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(510) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & + "(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(rad/s) ","(rad/s) ", & + "(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & + "(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(m) ","(rad) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ", & + "(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(rad) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & + "(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(rad/s) ","(rad/s) ", & + "(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & + "(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(m) ","(rad) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ", & + "(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(rad) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(rad) ", & + "(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m/s) ","(m/s) ","(m/s) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(rad) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(m) ","(rad) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad/s) ","(rad/s) ","(rad/s) ","(m) ","(m) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(rad) "/) - ! Set index, name, and units for all of the output channels. - ! If a selected output channel is not available by this module set ErrStat = ErrID_Warn. - DO I = 1,p%NumOuts + ! Initialize values + ErrStat = ErrID_None + ErrMsg = "" + InvalidOutput = .FALSE. - p%OutParam(I)%Name = OutList(I) - OutListTmp = OutList(I) - ! Reverse the sign (+/-) of the output channel if the user prefixed the - ! channel name with a "-", "_", "m", or "M" character indicating "minus". +! ..... Developer must add checking for invalid inputs here: ..... +! ................. End of validity checking ................. - CheckOutListAgain = .FALSE. - IF ( INDEX( "-_", OutListTmp(1:1) ) > 0 ) THEN - p%OutParam(I)%SignM = -1 ! ex, "-TipDxc1" causes the sign of TipDxc1 to be switched. - OutListTmp = OutListTmp(2:) - ELSE IF ( INDEX( "mM", OutListTmp(1:1) ) > 0 ) THEN ! We'll assume this is a variable name for now, (if not, we will check later if OutListTmp(2:) is also a variable name) - CheckOutListAgain = .TRUE. - p%OutParam(I)%SignM = 1 - ELSE - p%OutParam(I)%SignM = 1 - END IF + !------------------------------------------------------------------------------------------------- + ! Allocate and set index, name, and units for the output channels + ! If a selected output channel is not available in this module, set error flag. + !------------------------------------------------------------------------------------------------- - CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case + ALLOCATE ( p%OutParam(0:p%NumOuts) , STAT=ErrStat2 ) + IF ( ErrStat2 /= 0_IntKi ) THEN + CALL SetErrStat( ErrID_Fatal,"Error allocating memory for the HydroDyn OutParam array.", ErrStat, ErrMsg, RoutineName ) + RETURN + ENDIF + ! Set index, name, and units for the time output channel: - Indx = IndexCharAry( OutListTmp(1:OutStrLenM1), ValidParamAry ) + p%OutParam(0)%Indx = Time + p%OutParam(0)%Name = "Time" ! OutParam(0) is the time channel by default. + p%OutParam(0)%Units = "(s)" + p%OutParam(0)%SignM = 1 - ! If it started with an "M" (CheckOutListAgain) we didn't find the value in our list (Indx < 1) + ! Set index, name, and units for all of the output channels. + ! If a selected output channel is not available by this module set ErrStat = ErrID_Warn. - IF ( CheckOutListAgain .AND. Indx < 1 ) THEN ! Let's assume that "M" really meant "minus" and then test again - p%OutParam(I)%SignM = -1 ! ex, "MTipDxc1" causes the sign of TipDxc1 to be switched. - OutListTmp = OutListTmp(2:) + DO I = 1,p%NumOuts - Indx = IndexCharAry( OutListTmp(1:OutStrLenM1), ValidParamAry ) - END IF + p%OutParam(I)%Name = OutList(I) + Indx = FindValidChannelIndx(OutList(I), ValidParamAry, p%OutParam(I)%SignM) IF ( Indx > 0 ) THEN ! we found the channel name - p%OutParam(I)%Indx = ParamIndxAry(Indx) IF ( InvalidOutput( ParamIndxAry(Indx) ) ) THEN ! but, it isn't valid for these settings + p%OutParam(I)%Indx = 1 ! pick any valid channel (I just picked "Time=0" here because it's universal) p%OutParam(I)%Units = "INVALID" p%OutParam(I)%SignM = 0 ELSE + p%OutParam(I)%Indx = ParamIndxAry(Indx) p%OutParam(I)%Units = ParamUnitsAry(Indx) ! it's a valid output END IF ELSE ! this channel isn't valid - p%OutParam(I)%Indx = 1 ! pick any valid channel + p%OutParam(I)%Indx = 1 ! 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 - ErrStat = ErrID_Warn - ErrMsg = p%OutParam(I)%Name//" is not an available output channel. "//TRIM(ErrMsg) + CALL SetErrStat(ErrID_Warn, TRIM(p%OutParam(I)%Name)//" is not an available output channel.",ErrStat,ErrMsg,RoutineName) END IF END DO RETURN -END SUBROUTINE HDOut_ChkOutLst - +END SUBROUTINE SetOutParam +!---------------------------------------------------------------------------------------------------------------------------------- +!End of code generated by Matlab script +!********************************************************************************************************************************** !==================================================================================================== SUBROUTINE HDOut_CloseOutput ( p, ErrStat, ErrMsg ) diff --git a/modules/hydrodyn/src/HydroDyn_Types.f90 b/modules/hydrodyn/src/HydroDyn_Types.f90 index 4777387fd3..af79c5895d 100644 --- a/modules/hydrodyn/src/HydroDyn_Types.f90 +++ b/modules/hydrodyn/src/HydroDyn_Types.f90 @@ -31,15 +31,14 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE HydroDyn_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE Current_Types -USE Waves2_Types USE WAMIT_Types USE WAMIT2_Types USE Morison_Types +USE SeaState_Types USE NWTC_Library IMPLICIT NONE - INTEGER(IntKi), PUBLIC, PARAMETER :: MaxHDOutputs = 537 ! The maximum number of output channels supported by this module [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: MaxUserOutputs = 4583 ! Total possible number of output channels: Waves2 = 18 + SS_Excitation = 7 + SS_Radiation = 7 + Morison= 4032 + HydroDyn=519 = 4583 [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: MaxHDOutputs = 510 ! The maximum number of output channels supported by this module [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: MaxUserOutputs = 5150 ! Total possible number of output channels: SS_Excitation = 7 + SS_Radiation = 7 + Morison= 4626 + HydroDyn=510 = 5150 [-] ! ========= HydroDyn_InputFile ======= TYPE, PUBLIC :: HydroDyn_InputFile LOGICAL :: EchoFlag !< Echo the input file [-] @@ -47,9 +46,7 @@ MODULE HydroDyn_Types REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: AddCLin !< Additional stiffness matrix [-] REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: AddBLin !< Additional linear damping matrix [-] REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: AddBQuad !< Additional quadratic damping (drag) matrix [-] - TYPE(Waves_InitInputType) :: Waves !< Initialization data for Waves module [-] - TYPE(Waves2_InitInputType) :: Waves2 !< Initialization data for Waves module [-] - TYPE(Current_InitInputType) :: Current !< Initialization data for Current module [-] + TYPE(SeaSt_InitInputType) :: SeaState !< Initialization data for SeaState module [-] CHARACTER(1024) , DIMENSION(:), ALLOCATABLE :: PotFile !< The name of the root potential flow file (without extension for WAMIT, complete name for FIT) [-] INTEGER(IntKi) :: nWAMITObj !< number of WAMIT input files. If NBodyMod = 1 then nPotFiles will be 1 even if NBody > 1 [-] INTEGER(IntKi) :: vecMultiplier !< multiplier for the WAMIT vectors and matrices. If NBodyMod=1 then this = NBody, else 1 [-] @@ -89,40 +86,60 @@ MODULE HydroDyn_Types CHARACTER(1024) :: OutRootName !< Supplied by Driver: The name of the root file (without extension) including the full path [-] LOGICAL :: Linearize = .FALSE. !< Flag that tells this module if the glue code wants to linearize. [-] REAL(ReKi) :: Gravity !< Supplied by Driver: Gravitational acceleration [(m/s^2)] - REAL(ReKi) :: defWtrDens !< Default water density from the driver; may be overwritten [(kg/m^3)] - REAL(ReKi) :: defWtrDpth !< Default water depth from the driver; may be overwritten [m] - REAL(ReKi) :: defMSL2SWL !< Default mean sea level to still water level from the driver; may be overwritten [m] + REAL(ReKi) :: WtrDens !< Water density from the driver; may be overwritten [(kg/m^3)] + REAL(ReKi) :: WtrDpth !< Water depth from the driver; may be overwritten [m] + REAL(ReKi) :: MSL2SWL !< Mean sea level to still water level from the driver; may be overwritten [m] REAL(DbKi) :: TMax !< Supplied by Driver: The total simulation time [(sec)] - LOGICAL :: HasIce !< Supplied by Driver: Whether this simulation has ice loading (flag) [-] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevXY !< Supplied by Driver: X-Y locations for WaveElevation output (for visualization). First dimension is the X (1) and Y (2) coordinate. Second dimension is the point number. [m,-] - INTEGER(IntKi) :: WaveFieldMod !< Wave field handling (-) (switch) 0: use individual HydroDyn inputs without adjustment, 1: adjust wave phases based on turbine offsets from farm origin [-] REAL(ReKi) :: PtfmLocationX !< Supplied by Driver: X coordinate of platform location in the wave field [m] REAL(ReKi) :: PtfmLocationY !< Supplied by Driver: Y coordinate of platform location in the wave field [m] + INTEGER(IntKi) :: NStepWave = 0 !< Total number of frequency components = total number of time steps in the incident wave [-] + INTEGER(IntKi) :: NStepWave2 = 0 !< NStepWave / 2 [-] + REAL(SiKi) :: RhoXg !< = WtrDens*Gravity [-] + INTEGER(IntKi) :: WaveMod !< Incident wave kinematics model {0: none=still water, 1: plane progressive (regular), 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: white-noise spectrum, 4: user-defind spectrum from routine UserWaveSpctrm (irregular), 5: GH BLADED } [-] + INTEGER(IntKi) :: WaveStMod !< Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} [-] + INTEGER(IntKi) :: WaveDirMod !< Directional wave spreading function {0: none, 1: COS2S} [only used if WaveMod=6] [-] + REAL(SiKi) :: WvLowCOff !< Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4] [(rad/s)] + REAL(SiKi) :: WvHiCOff !< High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4] [(rad/s)] + REAL(SiKi) :: WvLowCOffD !< Minimum frequency used in the difference methods [Ignored if all difference methods = 0] [(rad/s)] + REAL(SiKi) :: WvHiCOffD !< Maximum frequency used in the difference methods [Ignored if all difference methods = 0] [(rad/s)] + REAL(SiKi) :: WvLowCOffS !< Minimum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] + REAL(SiKi) :: WvHiCOffS !< Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] + LOGICAL :: InvalidWithSSExctn !< Whether SeaState configuration is invalid with HydroDyn's state-space excitation (ExctnMod=2) [(-)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev0 !< Instantaneous elevation time-series of incident waves at the platform reference point [(meters)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined (points to SeaState module data) [(sec)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data) [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data) [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAccMCF => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data) [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) (points to SeaState module data) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data) [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data) [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAccMCF0 => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (points to SeaState module data) [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) (points to SeaState module data) [(m/s)] + REAL(SiKi) , DIMENSION(:,:), POINTER :: WaveElevC0 => NULL() !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part (points to SeaState module data) [(meters)] + REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveElevC !< Discrete Fourier transform of the instantaneous elevation of incident waves at all grid points. First column is real part, second column is imaginary part [(meters)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveDirArr => NULL() !< Wave direction array. Each frequency has a unique direction of WaveNDir > 1 (points to SeaState module data) [(degrees)] + REAL(SiKi) :: WaveDirMin !< Minimum wave direction. [(degrees)] + REAL(SiKi) :: WaveDirMax !< Maximum wave direction. [(degrees)] + REAL(SiKi) :: WaveDir !< Incident wave propagation heading direction [(degrees)] + LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] + REAL(SiKi) :: WaveDOmega !< Frequency step for incident wave calculations [(rad/s)] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + REAL(SiKi) :: MCFD !< Diameter of MacCamy-Fuchs members [(meters)] END TYPE HydroDyn_InitInputType ! ======================= ! ========= HydroDyn_InitOutputType ======= TYPE, PUBLIC :: HydroDyn_InitOutputType - TYPE(WAMIT_InitOutputType) , DIMENSION(:), ALLOCATABLE :: WAMIT !< Initialization output from the WAMIT module [-] - TYPE(WAMIT2_InitOutputType) , DIMENSION(:), ALLOCATABLE :: WAMIT2 !< Initialization output from the WAMIT2 module [-] - TYPE(Waves2_InitOutputType) :: Waves2 !< Initialization output from the Waves2 module [-] TYPE(Morison_InitOutputType) :: Morison !< Initialization output from the Morison module [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: WriteOutputHdr !< The is the list of all HD-related output channel header strings (includes all sub-module channels) [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: WriteOutputUnt !< The is the list of all HD-related output channel unit strings (includes all sub-module channels) [-] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevSeries !< Wave elevation time-series at each of the points given by WaveElevXY. First dimension is the timestep. Second dimension is XY point number corresponding to second dimension of WaveElevXY. [(m)] TYPE(ProgDesc) :: Ver !< Version of HydroDyn [-] - REAL(ReKi) :: WtrDens !< Water density [(kg/m^3)] - REAL(ReKi) :: WtrDpth !< Water depth [(m)] - REAL(ReKi) :: MSL2SWL !< Offset between still-water level and mean sea level [(m)] CHARACTER(LinChanLen) , DIMENSION(:), ALLOCATABLE :: LinNames_y !< Names of the outputs used in linearization [-] CHARACTER(LinChanLen) , DIMENSION(:), ALLOCATABLE :: LinNames_x !< Names of the continuous states used in linearization [-] CHARACTER(LinChanLen) , DIMENSION(:), ALLOCATABLE :: LinNames_u !< Names of the inputs used in linearization [-] INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: DerivOrder_x !< Integer that tells FAST/MBC3 the maximum derivative order of continuous states used in linearization [-] LOGICAL , DIMENSION(:), ALLOCATABLE :: IsLoad_u !< Flag that tells FAST if the inputs used in linearization are loads (for preconditioning matrix) [-] - REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel !< output for now just to pass to MoorDyn [-] - REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc !< output for now just to pass to MoorDyn [-] - REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: WaveDynP !< output for now just to pass to MoorDyn [-] - REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElev !< output for now just to pass to MoorDyn [-] - REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< output for now just to pass to MoorDyn [-] END TYPE HydroDyn_InitOutputType ! ======================= ! ========= HD_ModuleMapType ======= @@ -135,39 +152,30 @@ MODULE HydroDyn_Types ! ========= HydroDyn_ContinuousStateType ======= TYPE, PUBLIC :: HydroDyn_ContinuousStateType TYPE(WAMIT_ContinuousStateType) , DIMENSION(:), ALLOCATABLE :: WAMIT !< continuous states from the wamit module [-] - TYPE(WAMIT2_ContinuousStateType) , DIMENSION(:), ALLOCATABLE :: WAMIT2 !< continuous states from the wamit2 module [-] - TYPE(Waves2_ContinuousStateType) :: Waves2 !< continuous states from the waves2 module [-] TYPE(Morison_ContinuousStateType) :: Morison !< continuous states from the Morison module [-] END TYPE HydroDyn_ContinuousStateType ! ======================= ! ========= HydroDyn_DiscreteStateType ======= TYPE, PUBLIC :: HydroDyn_DiscreteStateType TYPE(WAMIT_DiscreteStateType) , DIMENSION(:), ALLOCATABLE :: WAMIT !< discrete states from the wamit module [-] - TYPE(WAMIT2_DiscreteStateType) , DIMENSION(:), ALLOCATABLE :: WAMIT2 !< discrete states from the wamit2 module [-] - TYPE(Waves2_DiscreteStateType) :: Waves2 !< discrete states from the waves2 module [-] TYPE(Morison_DiscreteStateType) :: Morison !< discrete states from the Morison module [-] END TYPE HydroDyn_DiscreteStateType ! ======================= ! ========= HydroDyn_ConstraintStateType ======= TYPE, PUBLIC :: HydroDyn_ConstraintStateType TYPE(WAMIT_ConstraintStateType) :: WAMIT !< constraint states from WAMIT (may be empty) [-] - TYPE(WAMIT2_ConstraintStateType) :: WAMIT2 !< constraint states from WAMIT2 (may be empty) [-] - TYPE(Waves2_ConstraintStateType) :: Waves2 !< constraint states from the waves2 module [-] TYPE(Morison_ConstraintStateType) :: Morison !< constraint states from the Morison module [-] END TYPE HydroDyn_ConstraintStateType ! ======================= ! ========= HydroDyn_OtherStateType ======= TYPE, PUBLIC :: HydroDyn_OtherStateType TYPE(WAMIT_OtherStateType) , DIMENSION(:), ALLOCATABLE :: WAMIT !< OtherState information from the WAMIT module [-] - TYPE(WAMIT2_OtherStateType) , DIMENSION(:), ALLOCATABLE :: WAMIT2 !< OtherState information from the WAMIT2 module [-] - TYPE(Waves2_OtherStateType) :: Waves2 !< OtherState information from the Waves2 module [-] TYPE(Morison_OtherStateType) :: Morison !< OtherState information from the Morison module [-] END TYPE HydroDyn_OtherStateType ! ======================= ! ========= HydroDyn_MiscVarType ======= TYPE, PUBLIC :: HydroDyn_MiscVarType TYPE(MeshType) :: AllHdroOrigin !< An intermediate mesh used to transfer hydrodynamic loads from the various HD-related meshes to the AllHdroOrigin mesh [-] - TYPE(MeshType) :: MrsnMesh_position !< A motions mesh which has all translational displacements set to zero. Used in the transfer of hydrodynamic loads from the various HD-related meshes to the AllHdroOrigin mesh [-] TYPE(HD_ModuleMapType) :: HD_MeshMap INTEGER(IntKi) :: Decimate !< The output decimation counter [-] REAL(DbKi) :: LastOutTime !< Last time step which was written to the output file (sec) [-] @@ -177,11 +185,8 @@ MODULE HydroDyn_Types REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: F_Waves !< The total waves forces on a WAMIT body calculated by first and second order methods (WAMIT and WAMIT2 modules) [-] TYPE(WAMIT_MiscVarType) , DIMENSION(:), ALLOCATABLE :: WAMIT !< misc var information from the WAMIT module [-] TYPE(WAMIT2_MiscVarType) , DIMENSION(:), ALLOCATABLE :: WAMIT2 !< misc var information from the WAMIT2 module [-] - TYPE(Waves2_MiscVarType) :: Waves2 !< misc var information from the Waves2 module [-] TYPE(Morison_MiscVarType) :: Morison !< misc var information from the Morison module [-] TYPE(WAMIT_InputType) , DIMENSION(:), ALLOCATABLE :: u_WAMIT !< WAMIT module inputs [-] - TYPE(WAMIT2_InputType) , DIMENSION(:), ALLOCATABLE :: u_WAMIT2 !< WAMIT2 module inputs [-] - TYPE(Waves2_InputType) :: u_Waves2 !< Waves2 module inputs [-] END TYPE HydroDyn_MiscVarType ! ======================= ! ========= HydroDyn_ParameterType ======= @@ -191,7 +196,6 @@ MODULE HydroDyn_Types TYPE(WAMIT_ParameterType) , DIMENSION(:), ALLOCATABLE :: WAMIT !< Parameter data for the WAMIT module [-] TYPE(WAMIT2_ParameterType) , DIMENSION(:), ALLOCATABLE :: WAMIT2 !< Parameter data for the WAMIT2 module [-] LOGICAL :: WAMIT2used = .FALSE. !< Indicates when WAMIT2 is used. Shortcuts some calculations [-] - TYPE(Waves2_ParameterType) :: Waves2 !< Parameter data for the Waves2 module [-] TYPE(Morison_ParameterType) :: Morison !< Parameter data for the Morison module [-] INTEGER(IntKi) :: PotMod !< 1 if using WAMIT model, 0 if no potential flow model, or 2 if FIT model [-] INTEGER(IntKi) :: NBody !< [>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6] [-] @@ -199,12 +203,8 @@ MODULE HydroDyn_Types INTEGER(IntKi) :: totalStates !< Number of excitation and radiation states for all WAMIT bodies [-] INTEGER(IntKi) :: totalExctnStates !< Number of excitation states for all WAMIT bodies [-] INTEGER(IntKi) :: totalRdtnStates !< Number of radiation states for all WAMIT bodies [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Array of time samples, (sec) [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Array of time samples, (sec) [-] INTEGER(IntKi) :: NStepWave !< Number of data points in the wave kinematics arrays [-] - INTEGER(IntKi) :: NWaveElev !< Number of wave elevation outputs [-] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElev !< Total wave elevation [-] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElev1 !< First order wave elevation [-] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElev2 !< Second order wave elevation [-] REAL(ReKi) :: WtrDpth !< Water depth [(m)] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: AddF0 !< Additional pre-load forces and moments (N,N,N,N-m,N-m,N-m) [-] REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: AddCLin !< Additional stiffness matrix [-] @@ -224,6 +224,7 @@ MODULE HydroDyn_Types REAL(R8Ki) , DIMENSION(:), ALLOCATABLE :: du !< vector that determines size of perturbation for u (inputs) [-] REAL(R8Ki) , DIMENSION(:), ALLOCATABLE :: dx !< vector that determines size of perturbation for x (continuous states) [-] INTEGER(IntKi) :: Jac_ny !< number of outputs in jacobian matrix [-] + LOGICAL :: PointsToSeaState = .TRUE. !< Flag that determines if the data contains pointers to SeaState module or if new copies (from restart) [-] END TYPE HydroDyn_ParameterType ! ======================= ! ========= HydroDyn_InputType ======= @@ -237,7 +238,6 @@ MODULE HydroDyn_Types TYPE, PUBLIC :: HydroDyn_OutputType TYPE(WAMIT_OutputType) , DIMENSION(:), ALLOCATABLE :: WAMIT !< WAMIT module outputs [-] TYPE(WAMIT2_OutputType) , DIMENSION(:), ALLOCATABLE :: WAMIT2 !< WAMIT2 module outputs [-] - TYPE(Waves2_OutputType) :: Waves2 !< Waves2 module outputs [-] TYPE(Morison_OutputType) :: Morison !< Morison module outputs [-] TYPE(MeshType) :: WAMITMesh !< Point Loads at the WAMIT reference point(s) in the inertial frame [-] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WriteOutput !< Outputs to be written to the output file(s) [-] @@ -255,6 +255,8 @@ SUBROUTINE HydroDyn_CopyInputFile( SrcInputFileData, DstInputFileData, CtrlCode, INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_CopyInputFile' @@ -324,13 +326,7 @@ SUBROUTINE HydroDyn_CopyInputFile( SrcInputFileData, DstInputFileData, CtrlCode, END IF DstInputFileData%AddBQuad = SrcInputFileData%AddBQuad ENDIF - CALL Waves_CopyInitInput( SrcInputFileData%Waves, DstInputFileData%Waves, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL Waves2_CopyInitInput( SrcInputFileData%Waves2, DstInputFileData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL Current_CopyInitInput( SrcInputFileData%Current, DstInputFileData%Current, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SeaSt_CopyInitInput( SrcInputFileData%SeaState, DstInputFileData%SeaState, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN IF (ALLOCATED(SrcInputFileData%PotFile)) THEN @@ -524,11 +520,7 @@ SUBROUTINE HydroDyn_DestroyInputFile( InputFileData, ErrStat, ErrMsg, DEALLOCATE IF (ALLOCATED(InputFileData%AddBQuad)) THEN DEALLOCATE(InputFileData%AddBQuad) ENDIF - CALL Waves_DestroyInitInput( InputFileData%Waves, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL Waves2_DestroyInitInput( InputFileData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL Current_DestroyInitInput( InputFileData%Current, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SeaSt_DestroyInitInput( InputFileData%SeaState, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ALLOCATED(InputFileData%PotFile)) THEN DEALLOCATE(InputFileData%PotFile) @@ -628,54 +620,20 @@ SUBROUTINE HydroDyn_PackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Re_BufSz = Re_BufSz + SIZE(InData%AddBQuad) ! AddBQuad END IF ! Allocate buffers for subtypes, if any (we'll get sizes from these) - Int_BufSz = Int_BufSz + 3 ! Waves: size of buffers for each call to pack subtype - CALL Waves_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Waves, ErrStat2, ErrMsg2, .TRUE. ) ! Waves - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! Current: size of buffers for each call to pack subtype - CALL Current_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Current, ErrStat2, ErrMsg2, .TRUE. ) ! Current + Int_BufSz = Int_BufSz + 3 ! SeaState: size of buffers for each call to pack subtype + CALL SeaSt_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%SeaState, ErrStat2, ErrMsg2, .TRUE. ) ! SeaState CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! Current + IF(ALLOCATED(Re_Buf)) THEN ! SeaState Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! Current + IF(ALLOCATED(Db_Buf)) THEN ! SeaState Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! Current + IF(ALLOCATED(Int_Buf)) THEN ! SeaState Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF @@ -924,63 +882,7 @@ SUBROUTINE HydroDyn_PackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO END DO END IF - CALL Waves_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Waves, ErrStat2, ErrMsg2, OnlySize ) ! Waves - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL Waves2_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL Current_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Current, ErrStat2, ErrMsg2, OnlySize ) ! Current + CALL SeaSt_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%SeaState, ErrStat2, ErrMsg2, OnlySize ) ! SeaState CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -1315,6 +1217,8 @@ SUBROUTINE HydroDyn_UnPackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_UnPackInputFile' @@ -1470,87 +1374,7 @@ SUBROUTINE HydroDyn_UnPackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL Waves_UnpackInitInput( Re_Buf, Db_Buf, Int_Buf, OutData%Waves, ErrStat2, ErrMsg2 ) ! Waves - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackInitInput( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Current_UnpackInitInput( Re_Buf, Db_Buf, Int_Buf, OutData%Current, ErrStat2, ErrMsg2 ) ! Current + CALL SeaSt_UnpackInitInput( Re_Buf, Db_Buf, Int_Buf, OutData%SeaState, ErrStat2, ErrMsg2 ) ! SeaState CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -1927,6 +1751,9 @@ SUBROUTINE HydroDyn_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_CopyInitInput' @@ -1941,28 +1768,280 @@ SUBROUTINE HydroDyn_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, DstInitInputData%OutRootName = SrcInitInputData%OutRootName DstInitInputData%Linearize = SrcInitInputData%Linearize DstInitInputData%Gravity = SrcInitInputData%Gravity - DstInitInputData%defWtrDens = SrcInitInputData%defWtrDens - DstInitInputData%defWtrDpth = SrcInitInputData%defWtrDpth - DstInitInputData%defMSL2SWL = SrcInitInputData%defMSL2SWL + DstInitInputData%WtrDens = SrcInitInputData%WtrDens + DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth + DstInitInputData%MSL2SWL = SrcInitInputData%MSL2SWL DstInitInputData%TMax = SrcInitInputData%TMax - DstInitInputData%HasIce = SrcInitInputData%HasIce -IF (ALLOCATED(SrcInitInputData%WaveElevXY)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElevXY,1) - i1_u = UBOUND(SrcInitInputData%WaveElevXY,1) - i2_l = LBOUND(SrcInitInputData%WaveElevXY,2) - i2_u = UBOUND(SrcInitInputData%WaveElevXY,2) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevXY)) THEN - ALLOCATE(DstInitInputData%WaveElevXY(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + DstInitInputData%PtfmLocationX = SrcInitInputData%PtfmLocationX + DstInitInputData%PtfmLocationY = SrcInitInputData%PtfmLocationY + DstInitInputData%NStepWave = SrcInitInputData%NStepWave + DstInitInputData%NStepWave2 = SrcInitInputData%NStepWave2 + DstInitInputData%RhoXg = SrcInitInputData%RhoXg + DstInitInputData%WaveMod = SrcInitInputData%WaveMod + DstInitInputData%WaveStMod = SrcInitInputData%WaveStMod + DstInitInputData%WaveDirMod = SrcInitInputData%WaveDirMod + DstInitInputData%WvLowCOff = SrcInitInputData%WvLowCOff + DstInitInputData%WvHiCOff = SrcInitInputData%WvHiCOff + DstInitInputData%WvLowCOffD = SrcInitInputData%WvLowCOffD + DstInitInputData%WvHiCOffD = SrcInitInputData%WvHiCOffD + DstInitInputData%WvLowCOffS = SrcInitInputData%WvLowCOffS + DstInitInputData%WvHiCOffS = SrcInitInputData%WvHiCOffS + DstInitInputData%InvalidWithSSExctn = SrcInitInputData%InvalidWithSSExctn +IF (ASSOCIATED(SrcInitInputData%WaveElev1)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElev1,1) + i1_u = UBOUND(SrcInitInputData%WaveElev1,1) + i2_l = LBOUND(SrcInitInputData%WaveElev1,2) + i2_u = UBOUND(SrcInitInputData%WaveElev1,2) + i3_l = LBOUND(SrcInitInputData%WaveElev1,3) + i3_u = UBOUND(SrcInitInputData%WaveElev1,3) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev1)) THEN + ALLOCATE(DstInitInputData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevXY.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElev1.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstInitInputData%WaveElevXY = SrcInitInputData%WaveElevXY + DstInitInputData%WaveElev1 = SrcInitInputData%WaveElev1 ENDIF - DstInitInputData%WaveFieldMod = SrcInitInputData%WaveFieldMod - DstInitInputData%PtfmLocationX = SrcInitInputData%PtfmLocationX - DstInitInputData%PtfmLocationY = SrcInitInputData%PtfmLocationY +IF (ASSOCIATED(SrcInitInputData%WaveElev2)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElev2,1) + i1_u = UBOUND(SrcInitInputData%WaveElev2,1) + i2_l = LBOUND(SrcInitInputData%WaveElev2,2) + i2_u = UBOUND(SrcInitInputData%WaveElev2,2) + i3_l = LBOUND(SrcInitInputData%WaveElev2,3) + i3_u = UBOUND(SrcInitInputData%WaveElev2,3) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev2)) THEN + ALLOCATE(DstInitInputData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElev2 = SrcInitInputData%WaveElev2 +ENDIF +IF (ALLOCATED(SrcInitInputData%WaveElev0)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElev0,1) + i1_u = UBOUND(SrcInitInputData%WaveElev0,1) + IF (.NOT. ALLOCATED(DstInitInputData%WaveElev0)) THEN + ALLOCATE(DstInitInputData%WaveElev0(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElev0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElev0 = SrcInitInputData%WaveElev0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveTime)) THEN + i1_l = LBOUND(SrcInitInputData%WaveTime,1) + i1_u = UBOUND(SrcInitInputData%WaveTime,1) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveTime)) THEN + ALLOCATE(DstInitInputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveTime = SrcInitInputData%WaveTime +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveDynP)) THEN + i1_l = LBOUND(SrcInitInputData%WaveDynP,1) + i1_u = UBOUND(SrcInitInputData%WaveDynP,1) + i2_l = LBOUND(SrcInitInputData%WaveDynP,2) + i2_u = UBOUND(SrcInitInputData%WaveDynP,2) + i3_l = LBOUND(SrcInitInputData%WaveDynP,3) + i3_u = UBOUND(SrcInitInputData%WaveDynP,3) + i4_l = LBOUND(SrcInitInputData%WaveDynP,4) + i4_u = UBOUND(SrcInitInputData%WaveDynP,4) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveDynP)) THEN + ALLOCATE(DstInitInputData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveDynP.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveDynP = SrcInitInputData%WaveDynP +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveAcc)) THEN + i1_l = LBOUND(SrcInitInputData%WaveAcc,1) + i1_u = UBOUND(SrcInitInputData%WaveAcc,1) + i2_l = LBOUND(SrcInitInputData%WaveAcc,2) + i2_u = UBOUND(SrcInitInputData%WaveAcc,2) + i3_l = LBOUND(SrcInitInputData%WaveAcc,3) + i3_u = UBOUND(SrcInitInputData%WaveAcc,3) + i4_l = LBOUND(SrcInitInputData%WaveAcc,4) + i4_u = UBOUND(SrcInitInputData%WaveAcc,4) + i5_l = LBOUND(SrcInitInputData%WaveAcc,5) + i5_u = UBOUND(SrcInitInputData%WaveAcc,5) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveAcc)) THEN + ALLOCATE(DstInitInputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveAcc = SrcInitInputData%WaveAcc +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveAccMCF)) THEN + i1_l = LBOUND(SrcInitInputData%WaveAccMCF,1) + i1_u = UBOUND(SrcInitInputData%WaveAccMCF,1) + i2_l = LBOUND(SrcInitInputData%WaveAccMCF,2) + i2_u = UBOUND(SrcInitInputData%WaveAccMCF,2) + i3_l = LBOUND(SrcInitInputData%WaveAccMCF,3) + i3_u = UBOUND(SrcInitInputData%WaveAccMCF,3) + i4_l = LBOUND(SrcInitInputData%WaveAccMCF,4) + i4_u = UBOUND(SrcInitInputData%WaveAccMCF,4) + i5_l = LBOUND(SrcInitInputData%WaveAccMCF,5) + i5_u = UBOUND(SrcInitInputData%WaveAccMCF,5) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveAccMCF)) THEN + ALLOCATE(DstInitInputData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveAccMCF = SrcInitInputData%WaveAccMCF +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveVel)) THEN + i1_l = LBOUND(SrcInitInputData%WaveVel,1) + i1_u = UBOUND(SrcInitInputData%WaveVel,1) + i2_l = LBOUND(SrcInitInputData%WaveVel,2) + i2_u = UBOUND(SrcInitInputData%WaveVel,2) + i3_l = LBOUND(SrcInitInputData%WaveVel,3) + i3_u = UBOUND(SrcInitInputData%WaveVel,3) + i4_l = LBOUND(SrcInitInputData%WaveVel,4) + i4_u = UBOUND(SrcInitInputData%WaveVel,4) + i5_l = LBOUND(SrcInitInputData%WaveVel,5) + i5_u = UBOUND(SrcInitInputData%WaveVel,5) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveVel)) THEN + ALLOCATE(DstInitInputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveVel.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveVel = SrcInitInputData%WaveVel +ENDIF +IF (ASSOCIATED(SrcInitInputData%PWaveDynP0)) THEN + i1_l = LBOUND(SrcInitInputData%PWaveDynP0,1) + i1_u = UBOUND(SrcInitInputData%PWaveDynP0,1) + i2_l = LBOUND(SrcInitInputData%PWaveDynP0,2) + i2_u = UBOUND(SrcInitInputData%PWaveDynP0,2) + i3_l = LBOUND(SrcInitInputData%PWaveDynP0,3) + i3_u = UBOUND(SrcInitInputData%PWaveDynP0,3) + IF (.NOT. ASSOCIATED(DstInitInputData%PWaveDynP0)) THEN + ALLOCATE(DstInitInputData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%PWaveDynP0 = SrcInitInputData%PWaveDynP0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%PWaveAcc0)) THEN + i1_l = LBOUND(SrcInitInputData%PWaveAcc0,1) + i1_u = UBOUND(SrcInitInputData%PWaveAcc0,1) + i2_l = LBOUND(SrcInitInputData%PWaveAcc0,2) + i2_u = UBOUND(SrcInitInputData%PWaveAcc0,2) + i3_l = LBOUND(SrcInitInputData%PWaveAcc0,3) + i3_u = UBOUND(SrcInitInputData%PWaveAcc0,3) + i4_l = LBOUND(SrcInitInputData%PWaveAcc0,4) + i4_u = UBOUND(SrcInitInputData%PWaveAcc0,4) + IF (.NOT. ASSOCIATED(DstInitInputData%PWaveAcc0)) THEN + ALLOCATE(DstInitInputData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%PWaveAcc0 = SrcInitInputData%PWaveAcc0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%PWaveAccMCF0)) THEN + i1_l = LBOUND(SrcInitInputData%PWaveAccMCF0,1) + i1_u = UBOUND(SrcInitInputData%PWaveAccMCF0,1) + i2_l = LBOUND(SrcInitInputData%PWaveAccMCF0,2) + i2_u = UBOUND(SrcInitInputData%PWaveAccMCF0,2) + i3_l = LBOUND(SrcInitInputData%PWaveAccMCF0,3) + i3_u = UBOUND(SrcInitInputData%PWaveAccMCF0,3) + i4_l = LBOUND(SrcInitInputData%PWaveAccMCF0,4) + i4_u = UBOUND(SrcInitInputData%PWaveAccMCF0,4) + IF (.NOT. ASSOCIATED(DstInitInputData%PWaveAccMCF0)) THEN + ALLOCATE(DstInitInputData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%PWaveAccMCF0 = SrcInitInputData%PWaveAccMCF0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%PWaveVel0)) THEN + i1_l = LBOUND(SrcInitInputData%PWaveVel0,1) + i1_u = UBOUND(SrcInitInputData%PWaveVel0,1) + i2_l = LBOUND(SrcInitInputData%PWaveVel0,2) + i2_u = UBOUND(SrcInitInputData%PWaveVel0,2) + i3_l = LBOUND(SrcInitInputData%PWaveVel0,3) + i3_u = UBOUND(SrcInitInputData%PWaveVel0,3) + i4_l = LBOUND(SrcInitInputData%PWaveVel0,4) + i4_u = UBOUND(SrcInitInputData%PWaveVel0,4) + IF (.NOT. ASSOCIATED(DstInitInputData%PWaveVel0)) THEN + ALLOCATE(DstInitInputData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%PWaveVel0 = SrcInitInputData%PWaveVel0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveElevC0)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElevC0,1) + i1_u = UBOUND(SrcInitInputData%WaveElevC0,1) + i2_l = LBOUND(SrcInitInputData%WaveElevC0,2) + i2_u = UBOUND(SrcInitInputData%WaveElevC0,2) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElevC0)) THEN + ALLOCATE(DstInitInputData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElevC0 = SrcInitInputData%WaveElevC0 +ENDIF +IF (ALLOCATED(SrcInitInputData%WaveElevC)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElevC,1) + i1_u = UBOUND(SrcInitInputData%WaveElevC,1) + i2_l = LBOUND(SrcInitInputData%WaveElevC,2) + i2_u = UBOUND(SrcInitInputData%WaveElevC,2) + i3_l = LBOUND(SrcInitInputData%WaveElevC,3) + i3_u = UBOUND(SrcInitInputData%WaveElevC,3) + IF (.NOT. ALLOCATED(DstInitInputData%WaveElevC)) THEN + ALLOCATE(DstInitInputData%WaveElevC(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevC.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElevC = SrcInitInputData%WaveElevC +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveDirArr)) THEN + i1_l = LBOUND(SrcInitInputData%WaveDirArr,1) + i1_u = UBOUND(SrcInitInputData%WaveDirArr,1) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveDirArr)) THEN + ALLOCATE(DstInitInputData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveDirArr = SrcInitInputData%WaveDirArr +ENDIF + DstInitInputData%WaveDirMin = SrcInitInputData%WaveDirMin + DstInitInputData%WaveDirMax = SrcInitInputData%WaveDirMax + DstInitInputData%WaveDir = SrcInitInputData%WaveDir + DstInitInputData%WaveMultiDir = SrcInitInputData%WaveMultiDir + DstInitInputData%WaveDOmega = SrcInitInputData%WaveDOmega + CALL SeaSt_Interp_CopyParam( SrcInitInputData%SeaSt_Interp_p, DstInitInputData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + DstInitInputData%MCFD = SrcInitInputData%MCFD END SUBROUTINE HydroDyn_CopyInitInput SUBROUTINE HydroDyn_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -1988,9 +2067,79 @@ SUBROUTINE HydroDyn_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATE CALL NWTC_Library_Destroyfileinfotype( InitInputData%PassedFileData, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(InitInputData%WaveElevXY)) THEN - DEALLOCATE(InitInputData%WaveElevXY) +IF (ASSOCIATED(InitInputData%WaveElev1)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveElev1) + InitInputData%WaveElev1 => NULL() ENDIF +IF (ASSOCIATED(InitInputData%WaveElev2)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveElev2) + InitInputData%WaveElev2 => NULL() +ENDIF +IF (ALLOCATED(InitInputData%WaveElev0)) THEN + DEALLOCATE(InitInputData%WaveElev0) +ENDIF +IF (ASSOCIATED(InitInputData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveDynP)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveDynP) + InitInputData%WaveDynP => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveAcc)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveAcc) + InitInputData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveAccMCF)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveAccMCF) + InitInputData%WaveAccMCF => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveVel)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveVel) + InitInputData%WaveVel => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveDynP0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%PWaveDynP0) + InitInputData%PWaveDynP0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveAcc0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%PWaveAcc0) + InitInputData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveAccMCF0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%PWaveAccMCF0) + InitInputData%PWaveAccMCF0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveVel0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%PWaveVel0) + InitInputData%PWaveVel0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveElevC0) + InitInputData%WaveElevC0 => NULL() +ENDIF +IF (ALLOCATED(InitInputData%WaveElevC)) THEN + DEALLOCATE(InitInputData%WaveElevC) +ENDIF +IF (ASSOCIATED(InitInputData%WaveDirArr)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveDirArr) + InitInputData%WaveDirArr => NULL() +ENDIF + CALL SeaSt_Interp_DestroyParam( InitInputData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE HydroDyn_DestroyInitInput SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -2051,19 +2200,123 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + 1*LEN(InData%OutRootName) ! OutRootName Int_BufSz = Int_BufSz + 1 ! Linearize Re_BufSz = Re_BufSz + 1 ! Gravity - Re_BufSz = Re_BufSz + 1 ! defWtrDens - Re_BufSz = Re_BufSz + 1 ! defWtrDpth - Re_BufSz = Re_BufSz + 1 ! defMSL2SWL - Db_BufSz = Db_BufSz + 1 ! TMax - Int_BufSz = Int_BufSz + 1 ! HasIce - Int_BufSz = Int_BufSz + 1 ! WaveElevXY allocated yes/no - IF ( ALLOCATED(InData%WaveElevXY) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevXY upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevXY) ! WaveElevXY - END IF - Int_BufSz = Int_BufSz + 1 ! WaveFieldMod + Re_BufSz = Re_BufSz + 1 ! WtrDens + Re_BufSz = Re_BufSz + 1 ! WtrDpth + Re_BufSz = Re_BufSz + 1 ! MSL2SWL + Db_BufSz = Db_BufSz + 1 ! TMax Re_BufSz = Re_BufSz + 1 ! PtfmLocationX Re_BufSz = Re_BufSz + 1 ! PtfmLocationY + Int_BufSz = Int_BufSz + 1 ! NStepWave + Int_BufSz = Int_BufSz + 1 ! NStepWave2 + Re_BufSz = Re_BufSz + 1 ! RhoXg + Int_BufSz = Int_BufSz + 1 ! WaveMod + Int_BufSz = Int_BufSz + 1 ! WaveStMod + Int_BufSz = Int_BufSz + 1 ! WaveDirMod + Re_BufSz = Re_BufSz + 1 ! WvLowCOff + Re_BufSz = Re_BufSz + 1 ! WvHiCOff + Re_BufSz = Re_BufSz + 1 ! WvLowCOffD + Re_BufSz = Re_BufSz + 1 ! WvHiCOffD + Re_BufSz = Re_BufSz + 1 ! WvLowCOffS + Re_BufSz = Re_BufSz + 1 ! WvHiCOffS + Int_BufSz = Int_BufSz + 1 ! InvalidWithSSExctn + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev2) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev0 allocated yes/no + IF ( ALLOCATED(InData%WaveElev0) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElev0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev0) ! WaveElev0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no + IF ( ASSOCIATED(InData%WaveTime) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDynP allocated yes/no + IF ( ASSOCIATED(InData%WaveDynP) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveDynP upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP) ! WaveDynP + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no + IF ( ASSOCIATED(InData%WaveAcc) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAcc upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAccMCF allocated yes/no + IF ( ASSOCIATED(InData%WaveAccMCF) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAccMCF upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAccMCF) ! WaveAccMCF + END IF + Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no + IF ( ASSOCIATED(InData%WaveVel) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveVel upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveDynP0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveDynP0) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! PWaveDynP0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveDynP0) ! PWaveDynP0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAcc0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAcc0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAcc0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAcc0) ! PWaveAcc0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAccMCF0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAccMCF0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAccMCF0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAccMCF0) ! PWaveAccMCF0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveVel0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveVel0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveVel0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveVel0) ! PWaveVel0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no + IF ( ASSOCIATED(InData%WaveElevC0) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevC allocated yes/no + IF ( ALLOCATED(InData%WaveElevC) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElevC upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC) ! WaveElevC + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no + IF ( ASSOCIATED(InData%WaveDirArr) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr + END IF + Re_BufSz = Re_BufSz + 1 ! WaveDirMin + Re_BufSz = Re_BufSz + 1 ! WaveDirMax + Re_BufSz = Re_BufSz + 1 ! WaveDir + Int_BufSz = Int_BufSz + 1 ! WaveMultiDir + Re_BufSz = Re_BufSz + 1 ! WaveDOmega + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Re_BufSz = Re_BufSz + 1 ! MCFD IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -2133,164 +2386,1085 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_Xferred = Int_Xferred + 1 ReKiBuf(Re_Xferred) = InData%Gravity Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%defWtrDens + ReKiBuf(Re_Xferred) = InData%WtrDens Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%defWtrDpth + ReKiBuf(Re_Xferred) = InData%WtrDpth Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%defMSL2SWL + ReKiBuf(Re_Xferred) = InData%MSL2SWL Re_Xferred = Re_Xferred + 1 DbKiBuf(Db_Xferred) = InData%TMax Db_Xferred = Db_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%HasIce, IntKiBuf(1)) + ReKiBuf(Re_Xferred) = InData%PtfmLocationX + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%PtfmLocationY + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave2 + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%RhoXg + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveMod + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveStMod + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveDirMod + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvLowCOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvLowCOffD + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOffD + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvLowCOffS + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOffS + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%InvalidWithSSExctn, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveElevXY) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElev1) ) 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%WaveElevXY,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevXY,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,2) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,3) Int_Xferred = Int_Xferred + 2 - DO i2 = LBOUND(InData%WaveElevXY,2), UBOUND(InData%WaveElevXY,2) - DO i1 = LBOUND(InData%WaveElevXY,1), UBOUND(InData%WaveElevXY,1) - ReKiBuf(Re_Xferred) = InData%WaveElevXY(i1,i2) - Re_Xferred = Re_Xferred + 1 + DO i3 = LBOUND(InData%WaveElev1,3), UBOUND(InData%WaveElev1,3) + DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO END DO END DO END IF - IntKiBuf(Int_Xferred) = InData%WaveFieldMod + IF ( .NOT. ASSOCIATED(InData%WaveElev2) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%PtfmLocationX - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%PtfmLocationY - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE HydroDyn_PackInitInput + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,3) + Int_Xferred = Int_Xferred + 2 - SUBROUTINE HydroDyn_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(HydroDyn_InitInputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_UnPackInitInput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - DO I = 1, LEN(OutData%InputFile) - OutData%InputFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%UseInputFile = TRANSFER(IntKiBuf(Int_Xferred), OutData%UseInputFile) + DO i3 = LBOUND(InData%WaveElev2,3), UBOUND(InData%WaveElev2,3) + DO i2 = LBOUND(InData%WaveElev2,2), UBOUND(InData%WaveElev2,2) + DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) + ReKiBuf(Re_Xferred) = InData%WaveElev2(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElev0) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackfileinfotype( Re_Buf, Db_Buf, Int_Buf, OutData%PassedFileData, ErrStat2, ErrMsg2 ) ! PassedFileData - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev0,1) + Int_Xferred = Int_Xferred + 2 - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - DO I = 1, LEN(OutData%OutRootName) - OutData%OutRootName(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%Linearize = TRANSFER(IntKiBuf(Int_Xferred), OutData%Linearize) + DO i1 = LBOUND(InData%WaveElev0,1), UBOUND(InData%WaveElev0,1) + ReKiBuf(Re_Xferred) = InData%WaveElev0(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 - OutData%Gravity = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%defWtrDens = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%defWtrDpth = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%defMSL2SWL = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%TMax = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - OutData%HasIce = TRANSFER(IntKiBuf(Int_Xferred), OutData%HasIce) + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveTime,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) + ReKiBuf(Re_Xferred) = InData%WaveTime(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveDynP) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevXY not allocated + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%WaveDynP,4), UBOUND(InData%WaveDynP,4) + DO i3 = LBOUND(InData%WaveDynP,3), UBOUND(InData%WaveDynP,3) + DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) + DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAcc) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE + IntKiBuf( Int_Xferred ) = 1 Int_Xferred = Int_Xferred + 1 - i1_l = IntKiBuf( Int_Xferred ) - i1_u = IntKiBuf( Int_Xferred + 1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,1) Int_Xferred = Int_Xferred + 2 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,2) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevXY)) DEALLOCATE(OutData%WaveElevXY) - ALLOCATE(OutData%WaveElevXY(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevXY.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevXY,2), UBOUND(OutData%WaveElevXY,2) - DO i1 = LBOUND(OutData%WaveElevXY,1), UBOUND(OutData%WaveElevXY,1) - OutData%WaveElevXY(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAcc,5), UBOUND(InData%WaveAcc,5) + DO i4 = LBOUND(InData%WaveAcc,4), UBOUND(InData%WaveAcc,4) + DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) + DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) + DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO END DO END DO END IF - OutData%WaveFieldMod = IntKiBuf(Int_Xferred) + IF ( .NOT. ASSOCIATED(InData%WaveAccMCF) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 - OutData%PtfmLocationX = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%PtfmLocationY = ReKiBuf(Re_Xferred) + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAccMCF,5), UBOUND(InData%WaveAccMCF,5) + DO i4 = LBOUND(InData%WaveAccMCF,4), UBOUND(InData%WaveAccMCF,4) + DO i3 = LBOUND(InData%WaveAccMCF,3), UBOUND(InData%WaveAccMCF,3) + DO i2 = LBOUND(InData%WaveAccMCF,2), UBOUND(InData%WaveAccMCF,2) + DO i1 = LBOUND(InData%WaveAccMCF,1), UBOUND(InData%WaveAccMCF,1) + ReKiBuf(Re_Xferred) = InData%WaveAccMCF(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveVel) ) 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%WaveVel,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveVel,5), UBOUND(InData%WaveVel,5) + DO i4 = LBOUND(InData%WaveVel,4), UBOUND(InData%WaveVel,4) + DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) + DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) + DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) + ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveDynP0) ) 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%PWaveDynP0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%PWaveDynP0,3), UBOUND(InData%PWaveDynP0,3) + DO i2 = LBOUND(InData%PWaveDynP0,2), UBOUND(InData%PWaveDynP0,2) + DO i1 = LBOUND(InData%PWaveDynP0,1), UBOUND(InData%PWaveDynP0,1) + ReKiBuf(Re_Xferred) = InData%PWaveDynP0(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAcc0) ) 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%PWaveAcc0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAcc0,4), UBOUND(InData%PWaveAcc0,4) + DO i3 = LBOUND(InData%PWaveAcc0,3), UBOUND(InData%PWaveAcc0,3) + DO i2 = LBOUND(InData%PWaveAcc0,2), UBOUND(InData%PWaveAcc0,2) + DO i1 = LBOUND(InData%PWaveAcc0,1), UBOUND(InData%PWaveAcc0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAcc0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAccMCF0) ) 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%PWaveAccMCF0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAccMCF0,4), UBOUND(InData%PWaveAccMCF0,4) + DO i3 = LBOUND(InData%PWaveAccMCF0,3), UBOUND(InData%PWaveAccMCF0,3) + DO i2 = LBOUND(InData%PWaveAccMCF0,2), UBOUND(InData%PWaveAccMCF0,2) + DO i1 = LBOUND(InData%PWaveAccMCF0,1), UBOUND(InData%PWaveAccMCF0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAccMCF0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveVel0) ) 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%PWaveVel0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveVel0,4), UBOUND(InData%PWaveVel0,4) + DO i3 = LBOUND(InData%PWaveVel0,3), UBOUND(InData%PWaveVel0,3) + DO i2 = LBOUND(InData%PWaveVel0,2), UBOUND(InData%PWaveVel0,2) + DO i1 = LBOUND(InData%PWaveVel0,1), UBOUND(InData%PWaveVel0,1) + ReKiBuf(Re_Xferred) = InData%PWaveVel0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) 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%WaveElevC0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%WaveElevC0,2), UBOUND(InData%WaveElevC0,2) + DO i1 = LBOUND(InData%WaveElevC0,1), UBOUND(InData%WaveElevC0,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC0(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElevC) ) 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%WaveElevC,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElevC,3), UBOUND(InData%WaveElevC,3) + DO i2 = LBOUND(InData%WaveElevC,2), UBOUND(InData%WaveElevC,2) + DO i1 = LBOUND(InData%WaveElevC,1), UBOUND(InData%WaveElevC,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveDirArr) ) 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%WaveDirArr,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDirArr,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveDirArr,1), UBOUND(InData%WaveDirArr,1) + ReKiBuf(Re_Xferred) = InData%WaveDirArr(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + ReKiBuf(Re_Xferred) = InData%WaveDirMin + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDirMax + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDir + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDOmega + Re_Xferred = Re_Xferred + 1 + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + ReKiBuf(Re_Xferred) = InData%MCFD + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE HydroDyn_PackInitInput + + SUBROUTINE HydroDyn_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(HydroDyn_InitInputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_UnPackInitInput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + DO I = 1, LEN(OutData%InputFile) + OutData%InputFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%UseInputFile = TRANSFER(IntKiBuf(Int_Xferred), OutData%UseInputFile) + Int_Xferred = Int_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL NWTC_Library_Unpackfileinfotype( Re_Buf, Db_Buf, Int_Buf, OutData%PassedFileData, ErrStat2, ErrMsg2 ) ! PassedFileData + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + DO I = 1, LEN(OutData%OutRootName) + OutData%OutRootName(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%Linearize = TRANSFER(IntKiBuf(Int_Xferred), OutData%Linearize) + Int_Xferred = Int_Xferred + 1 + OutData%Gravity = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%WtrDens = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%WtrDpth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%MSL2SWL = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%TMax = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + OutData%PtfmLocationX = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%PtfmLocationY = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%NStepWave = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NStepWave2 = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%RhoXg = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveStMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveDirMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WvLowCOff = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOff = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvLowCOffD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOffD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvLowCOffS = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOffS = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%InvalidWithSSExctn = TRANSFER(IntKiBuf(Int_Xferred), OutData%InvalidWithSSExctn) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev1,3), UBOUND(OutData%WaveElev1,3) + DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) + ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev2,3), UBOUND(OutData%WaveElev2,3) + DO i2 = LBOUND(OutData%WaveElev2,2), UBOUND(OutData%WaveElev2,2) + DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) + OutData%WaveElev2(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev0 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%WaveElev0)) DEALLOCATE(OutData%WaveElev0) + ALLOCATE(OutData%WaveElev0(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElev0,1), UBOUND(OutData%WaveElev0,1) + OutData%WaveElev0(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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 (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) + OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) + ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveDynP,4), UBOUND(OutData%WaveDynP,4) + DO i3 = LBOUND(OutData%WaveDynP,3), UBOUND(OutData%WaveDynP,3) + DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) + DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) + OutData%WaveDynP(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) + ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAcc,5), UBOUND(OutData%WaveAcc,5) + DO i4 = LBOUND(OutData%WaveAcc,4), UBOUND(OutData%WaveAcc,4) + DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) + DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) + DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) + OutData%WaveAcc(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAccMCF 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAccMCF)) DEALLOCATE(OutData%WaveAccMCF) + ALLOCATE(OutData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAccMCF,5), UBOUND(OutData%WaveAccMCF,5) + DO i4 = LBOUND(OutData%WaveAccMCF,4), UBOUND(OutData%WaveAccMCF,4) + DO i3 = LBOUND(OutData%WaveAccMCF,3), UBOUND(OutData%WaveAccMCF,3) + DO i2 = LBOUND(OutData%WaveAccMCF,2), UBOUND(OutData%WaveAccMCF,2) + DO i1 = LBOUND(OutData%WaveAccMCF,1), UBOUND(OutData%WaveAccMCF,1) + OutData%WaveAccMCF(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) + ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveVel,5), UBOUND(OutData%WaveVel,5) + DO i4 = LBOUND(OutData%WaveVel,4), UBOUND(OutData%WaveVel,4) + DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) + DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) + DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) + OutData%WaveVel(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveDynP0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveDynP0)) DEALLOCATE(OutData%PWaveDynP0) + ALLOCATE(OutData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%PWaveDynP0,3), UBOUND(OutData%PWaveDynP0,3) + DO i2 = LBOUND(OutData%PWaveDynP0,2), UBOUND(OutData%PWaveDynP0,2) + DO i1 = LBOUND(OutData%PWaveDynP0,1), UBOUND(OutData%PWaveDynP0,1) + OutData%PWaveDynP0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAcc0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAcc0)) DEALLOCATE(OutData%PWaveAcc0) + ALLOCATE(OutData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAcc0,4), UBOUND(OutData%PWaveAcc0,4) + DO i3 = LBOUND(OutData%PWaveAcc0,3), UBOUND(OutData%PWaveAcc0,3) + DO i2 = LBOUND(OutData%PWaveAcc0,2), UBOUND(OutData%PWaveAcc0,2) + DO i1 = LBOUND(OutData%PWaveAcc0,1), UBOUND(OutData%PWaveAcc0,1) + OutData%PWaveAcc0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAccMCF0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAccMCF0)) DEALLOCATE(OutData%PWaveAccMCF0) + ALLOCATE(OutData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAccMCF0,4), UBOUND(OutData%PWaveAccMCF0,4) + DO i3 = LBOUND(OutData%PWaveAccMCF0,3), UBOUND(OutData%PWaveAccMCF0,3) + DO i2 = LBOUND(OutData%PWaveAccMCF0,2), UBOUND(OutData%PWaveAccMCF0,2) + DO i1 = LBOUND(OutData%PWaveAccMCF0,1), UBOUND(OutData%PWaveAccMCF0,1) + OutData%PWaveAccMCF0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveVel0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveVel0)) DEALLOCATE(OutData%PWaveVel0) + ALLOCATE(OutData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveVel0,4), UBOUND(OutData%PWaveVel0,4) + DO i3 = LBOUND(OutData%PWaveVel0,3), UBOUND(OutData%PWaveVel0,3) + DO i2 = LBOUND(OutData%PWaveVel0,2), UBOUND(OutData%PWaveVel0,2) + DO i1 = LBOUND(OutData%PWaveVel0,1), UBOUND(OutData%PWaveVel0,1) + OutData%PWaveVel0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) + ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%WaveElevC0,2), UBOUND(OutData%WaveElevC0,2) + DO i1 = LBOUND(OutData%WaveElevC0,1), UBOUND(OutData%WaveElevC0,1) + OutData%WaveElevC0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveElevC)) DEALLOCATE(OutData%WaveElevC) + ALLOCATE(OutData%WaveElevC(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElevC,3), UBOUND(OutData%WaveElevC,3) + DO i2 = LBOUND(OutData%WaveElevC,2), UBOUND(OutData%WaveElevC,2) + DO i1 = LBOUND(OutData%WaveElevC,1), UBOUND(OutData%WaveElevC,1) + OutData%WaveElevC(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDirArr 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 (ASSOCIATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) + ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveDirArr,1), UBOUND(OutData%WaveDirArr,1) + OutData%WaveDirArr(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%WaveDirMin = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveDirMax = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveDir = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveMultiDir = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveMultiDir) + Int_Xferred = Int_Xferred + 1 + OutData%WaveDOmega = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + OutData%MCFD = REAL(ReKiBuf(Re_Xferred), SiKi) Re_Xferred = Re_Xferred + 1 END SUBROUTINE HydroDyn_UnPackInitInput @@ -2303,49 +3477,12 @@ SUBROUTINE HydroDyn_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCo ! Local INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_CopyInitOutput' ! ErrStat = ErrID_None ErrMsg = "" -IF (ALLOCATED(SrcInitOutputData%WAMIT)) THEN - i1_l = LBOUND(SrcInitOutputData%WAMIT,1) - i1_u = UBOUND(SrcInitOutputData%WAMIT,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WAMIT)) THEN - ALLOCATE(DstInitOutputData%WAMIT(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WAMIT.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcInitOutputData%WAMIT,1), UBOUND(SrcInitOutputData%WAMIT,1) - CALL WAMIT_CopyInitOutput( SrcInitOutputData%WAMIT(i1), DstInitOutputData%WAMIT(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF -IF (ALLOCATED(SrcInitOutputData%WAMIT2)) THEN - i1_l = LBOUND(SrcInitOutputData%WAMIT2,1) - i1_u = UBOUND(SrcInitOutputData%WAMIT2,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WAMIT2)) THEN - ALLOCATE(DstInitOutputData%WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcInitOutputData%WAMIT2,1), UBOUND(SrcInitOutputData%WAMIT2,1) - CALL WAMIT2_CopyInitOutput( SrcInitOutputData%WAMIT2(i1), DstInitOutputData%WAMIT2(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - CALL Waves2_CopyInitOutput( SrcInitOutputData%Waves2, DstInitOutputData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL Morison_CopyInitOutput( SrcInitOutputData%Morison, DstInitOutputData%Morison, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -2372,27 +3509,10 @@ SUBROUTINE HydroDyn_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCo END IF END IF DstInitOutputData%WriteOutputUnt = SrcInitOutputData%WriteOutputUnt -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveElevSeries)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveElevSeries,1) - i1_u = UBOUND(SrcInitOutputData%WaveElevSeries,1) - i2_l = LBOUND(SrcInitOutputData%WaveElevSeries,2) - i2_u = UBOUND(SrcInitOutputData%WaveElevSeries,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElevSeries)) THEN - ALLOCATE(DstInitOutputData%WaveElevSeries(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevSeries.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveElevSeries = SrcInitOutputData%WaveElevSeries ENDIF CALL NWTC_Library_Copyprogdesc( SrcInitOutputData%Ver, DstInitOutputData%Ver, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - DstInitOutputData%WtrDens = SrcInitOutputData%WtrDens - DstInitOutputData%WtrDpth = SrcInitOutputData%WtrDpth - DstInitOutputData%MSL2SWL = SrcInitOutputData%MSL2SWL IF (ALLOCATED(SrcInitOutputData%LinNames_y)) THEN i1_l = LBOUND(SrcInitOutputData%LinNames_y,1) i1_u = UBOUND(SrcInitOutputData%LinNames_y,1) @@ -2452,78 +3572,6 @@ SUBROUTINE HydroDyn_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCo END IF END IF DstInitOutputData%IsLoad_u = SrcInitOutputData%IsLoad_u -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveVel)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveVel,1) - i1_u = UBOUND(SrcInitOutputData%WaveVel,1) - i2_l = LBOUND(SrcInitOutputData%WaveVel,2) - i2_u = UBOUND(SrcInitOutputData%WaveVel,2) - i3_l = LBOUND(SrcInitOutputData%WaveVel,3) - i3_u = UBOUND(SrcInitOutputData%WaveVel,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel)) THEN - ALLOCATE(DstInitOutputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveVel = SrcInitOutputData%WaveVel -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveAcc)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveAcc,1) - i1_u = UBOUND(SrcInitOutputData%WaveAcc,1) - i2_l = LBOUND(SrcInitOutputData%WaveAcc,2) - i2_u = UBOUND(SrcInitOutputData%WaveAcc,2) - i3_l = LBOUND(SrcInitOutputData%WaveAcc,3) - i3_u = UBOUND(SrcInitOutputData%WaveAcc,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc)) THEN - ALLOCATE(DstInitOutputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveAcc = SrcInitOutputData%WaveAcc -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveDynP)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveDynP,1) - i1_u = UBOUND(SrcInitOutputData%WaveDynP,1) - i2_l = LBOUND(SrcInitOutputData%WaveDynP,2) - i2_u = UBOUND(SrcInitOutputData%WaveDynP,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP)) THEN - ALLOCATE(DstInitOutputData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveDynP = SrcInitOutputData%WaveDynP -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveElev)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveElev,1) - i1_u = UBOUND(SrcInitOutputData%WaveElev,1) - i2_l = LBOUND(SrcInitOutputData%WaveElev,2) - i2_u = UBOUND(SrcInitOutputData%WaveElev,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElev)) THEN - ALLOCATE(DstInitOutputData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveElev = SrcInitOutputData%WaveElev -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveTime)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveTime,1) - i1_u = UBOUND(SrcInitOutputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveTime)) THEN - ALLOCATE(DstInitOutputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveTime = SrcInitOutputData%WaveTime ENDIF END SUBROUTINE HydroDyn_CopyInitOutput @@ -2548,22 +3596,6 @@ SUBROUTINE HydroDyn_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCA DEALLOCATEpointers_local = .true. END IF -IF (ALLOCATED(InitOutputData%WAMIT)) THEN -DO i1 = LBOUND(InitOutputData%WAMIT,1), UBOUND(InitOutputData%WAMIT,1) - CALL WAMIT_DestroyInitOutput( InitOutputData%WAMIT(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(InitOutputData%WAMIT) -ENDIF -IF (ALLOCATED(InitOutputData%WAMIT2)) THEN -DO i1 = LBOUND(InitOutputData%WAMIT2,1), UBOUND(InitOutputData%WAMIT2,1) - CALL WAMIT2_DestroyInitOutput( InitOutputData%WAMIT2(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(InitOutputData%WAMIT2) -ENDIF - CALL Waves2_DestroyInitOutput( InitOutputData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Morison_DestroyInitOutput( InitOutputData%Morison, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ALLOCATED(InitOutputData%WriteOutputHdr)) THEN @@ -2571,9 +3603,6 @@ SUBROUTINE HydroDyn_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCA ENDIF IF (ALLOCATED(InitOutputData%WriteOutputUnt)) THEN DEALLOCATE(InitOutputData%WriteOutputUnt) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElevSeries)) THEN - DEALLOCATE(InitOutputData%WaveElevSeries) ENDIF CALL NWTC_Library_Destroyprogdesc( InitOutputData%Ver, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -2591,21 +3620,6 @@ SUBROUTINE HydroDyn_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCA ENDIF IF (ALLOCATED(InitOutputData%IsLoad_u)) THEN DEALLOCATE(InitOutputData%IsLoad_u) -ENDIF -IF (ALLOCATED(InitOutputData%WaveVel)) THEN - DEALLOCATE(InitOutputData%WaveVel) -ENDIF -IF (ALLOCATED(InitOutputData%WaveAcc)) THEN - DEALLOCATE(InitOutputData%WaveAcc) -ENDIF -IF (ALLOCATED(InitOutputData%WaveDynP)) THEN - DEALLOCATE(InitOutputData%WaveDynP) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElev)) THEN - DEALLOCATE(InitOutputData%WaveElev) -ENDIF -IF (ALLOCATED(InitOutputData%WaveTime)) THEN - DEALLOCATE(InitOutputData%WaveTime) ENDIF END SUBROUTINE HydroDyn_DestroyInitOutput @@ -2644,70 +3658,7 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Re_BufSz = 0 Db_BufSz = 0 Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! WAMIT allocated yes/no - IF ( ALLOCATED(InData%WAMIT) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WAMIT upper/lower bounds for each dimension ! Allocate buffers for subtypes, if any (we'll get sizes from these) - DO i1 = LBOUND(InData%WAMIT,1), UBOUND(InData%WAMIT,1) - Int_BufSz = Int_BufSz + 3 ! WAMIT: size of buffers for each call to pack subtype - CALL WAMIT_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT(i1), ErrStat2, ErrMsg2, .TRUE. ) ! WAMIT - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! WAMIT - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! WAMIT - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! WAMIT - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 1 ! WAMIT2 allocated yes/no - IF ( ALLOCATED(InData%WAMIT2) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WAMIT2 upper/lower bounds for each dimension - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - Int_BufSz = Int_BufSz + 3 ! WAMIT2: size of buffers for each call to pack subtype - CALL WAMIT2_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, .TRUE. ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! WAMIT2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! WAMIT2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! WAMIT2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! Morison: size of buffers for each call to pack subtype CALL Morison_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, .TRUE. ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -2734,11 +3685,6 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, IF ( ALLOCATED(InData%WriteOutputUnt) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WriteOutputUnt upper/lower bounds for each dimension Int_BufSz = Int_BufSz + SIZE(InData%WriteOutputUnt)*LEN(InData%WriteOutputUnt) ! WriteOutputUnt - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevSeries allocated yes/no - IF ( ALLOCATED(InData%WaveElevSeries) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevSeries upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevSeries) ! WaveElevSeries END IF Int_BufSz = Int_BufSz + 3 ! Ver: size of buffers for each call to pack subtype CALL NWTC_Library_Packprogdesc( Re_Buf, Db_Buf, Int_Buf, InData%Ver, ErrStat2, ErrMsg2, .TRUE. ) ! Ver @@ -2757,9 +3703,6 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Re_BufSz = Re_BufSz + 1 ! WtrDens - Re_BufSz = Re_BufSz + 1 ! WtrDpth - Re_BufSz = Re_BufSz + 1 ! MSL2SWL Int_BufSz = Int_BufSz + 1 ! LinNames_y allocated yes/no IF ( ALLOCATED(InData%LinNames_y) ) THEN Int_BufSz = Int_BufSz + 2*1 ! LinNames_y upper/lower bounds for each dimension @@ -2783,170 +3726,35 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + 1 ! IsLoad_u allocated yes/no IF ( ALLOCATED(InData%IsLoad_u) ) THEN Int_BufSz = Int_BufSz + 2*1 ! IsLoad_u upper/lower bounds for each dimension - Int_BufSz = Int_BufSz + SIZE(InData%IsLoad_u) ! IsLoad_u - END IF - Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no - IF ( ALLOCATED(InData%WaveVel) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel - END IF - Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no - IF ( ALLOCATED(InData%WaveAcc) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc - END IF - Int_BufSz = Int_BufSz + 1 ! WaveDynP allocated yes/no - IF ( ALLOCATED(InData%WaveDynP) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveDynP upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP) ! WaveDynP - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElev allocated yes/no - IF ( ALLOCATED(InData%WaveElev) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElev upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElev) ! WaveElev - END IF - Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime - END IF - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IF ( .NOT. ALLOCATED(InData%WAMIT) ) 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%WAMIT,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WAMIT,1), UBOUND(InData%WAMIT,1) - CALL WAMIT_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WAMIT2) ) 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%WAMIT2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT2,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - CALL WAMIT2_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO + Int_BufSz = Int_BufSz + SIZE(InData%IsLoad_u) ! IsLoad_u END IF - CALL Waves2_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF CALL Morison_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, OnlySize ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -3008,26 +3816,6 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_Xferred = Int_Xferred + 1 END DO ! I END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevSeries) ) 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%WaveElevSeries,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevSeries,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevSeries,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevSeries,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElevSeries,2), UBOUND(InData%WaveElevSeries,2) - DO i1 = LBOUND(InData%WaveElevSeries,1), UBOUND(InData%WaveElevSeries,1) - ReKiBuf(Re_Xferred) = InData%WaveElevSeries(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO END IF CALL NWTC_Library_Packprogdesc( Re_Buf, Db_Buf, Int_Buf, InData%Ver, ErrStat2, ErrMsg2, OnlySize ) ! Ver CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -3057,12 +3845,6 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - ReKiBuf(Re_Xferred) = InData%WtrDens - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WtrDpth - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%MSL2SWL - Re_Xferred = Re_Xferred + 1 IF ( .NOT. ALLOCATED(InData%LinNames_y) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -3126,312 +3908,53 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DO i1 = LBOUND(InData%DerivOrder_x,1), UBOUND(InData%DerivOrder_x,1) IntKiBuf(Int_Xferred) = InData%DerivOrder_x(i1) - Int_Xferred = Int_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%IsLoad_u) ) 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%IsLoad_u,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%IsLoad_u,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%IsLoad_u,1), UBOUND(InData%IsLoad_u,1) - IntKiBuf(Int_Xferred) = TRANSFER(InData%IsLoad_u(i1), IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveVel) ) 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%WaveVel,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) - DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) - DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) - ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveAcc) ) 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%WaveAcc,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) - DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) - DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveDynP) ) 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%WaveDynP,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) - DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) - ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElev) ) 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%WaveElev,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElev,2), UBOUND(InData%WaveElev,2) - DO i1 = LBOUND(InData%WaveElev,1), UBOUND(InData%WaveElev,1) - ReKiBuf(Re_Xferred) = InData%WaveElev(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) 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%WaveTime,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) - ReKiBuf(Re_Xferred) = InData%WaveTime(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - END SUBROUTINE HydroDyn_PackInitOutput - - SUBROUTINE HydroDyn_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(HydroDyn_InitOutputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_UnPackInitOutput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WAMIT 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%WAMIT)) DEALLOCATE(OutData%WAMIT) - ALLOCATE(OutData%WAMIT(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WAMIT.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WAMIT,1), UBOUND(OutData%WAMIT,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL WAMIT_UnpackInitOutput( Re_Buf, Db_Buf, Int_Buf, OutData%WAMIT(i1), ErrStat2, ErrMsg2 ) ! WAMIT - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO + Int_Xferred = Int_Xferred + 1 + END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WAMIT2 not allocated + IF ( .NOT. ALLOCATED(InData%IsLoad_u) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE + IntKiBuf( Int_Xferred ) = 1 Int_Xferred = Int_Xferred + 1 - i1_l = IntKiBuf( Int_Xferred ) - i1_u = IntKiBuf( Int_Xferred + 1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%IsLoad_u,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%IsLoad_u,1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WAMIT2)) DEALLOCATE(OutData%WAMIT2) - ALLOCATE(OutData%WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WAMIT2,1), UBOUND(OutData%WAMIT2,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL WAMIT2_UnpackInitOutput( Re_Buf, Db_Buf, Int_Buf, OutData%WAMIT2(i1), ErrStat2, ErrMsg2 ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO + DO i1 = LBOUND(InData%IsLoad_u,1), UBOUND(InData%IsLoad_u,1) + IntKiBuf(Int_Xferred) = TRANSFER(InData%IsLoad_u(i1), IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END DO END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackInitOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN + END SUBROUTINE HydroDyn_PackInitOutput - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + SUBROUTINE HydroDyn_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(HydroDyn_InitOutputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_UnPackInitOutput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -3511,29 +4034,6 @@ SUBROUTINE HydroDyn_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt Int_Xferred = Int_Xferred + 1 END DO ! I END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevSeries 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevSeries)) DEALLOCATE(OutData%WaveElevSeries) - ALLOCATE(OutData%WaveElevSeries(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevSeries.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevSeries,2), UBOUND(OutData%WaveElevSeries,2) - DO i1 = LBOUND(OutData%WaveElevSeries,1), UBOUND(OutData%WaveElevSeries,1) - OutData%WaveElevSeries(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO END IF Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 @@ -3575,12 +4075,6 @@ SUBROUTINE HydroDyn_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - OutData%WtrDens = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%WtrDpth = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%MSL2SWL = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! LinNames_y not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -3677,126 +4171,6 @@ SUBROUTINE HydroDyn_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt Int_Xferred = Int_Xferred + 1 END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) - ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) - DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) - DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) - OutData%WaveVel(i1,i2,i3) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) - ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) - DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) - DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) - OutData%WaveAcc(i1,i2,i3) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) - ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) - DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) - OutData%WaveDynP(i1,i2) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElev)) DEALLOCATE(OutData%WaveElev) - ALLOCATE(OutData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElev,2), UBOUND(OutData%WaveElev,2) - DO i1 = LBOUND(OutData%WaveElev,1), UBOUND(OutData%WaveElev,1) - OutData%WaveElev(i1,i2) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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%WaveTime)) DEALLOCATE(OutData%WaveTime) - ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) - OutData%WaveTime(i1) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END IF END SUBROUTINE HydroDyn_UnPackInitOutput SUBROUTINE HydroDyn_CopyHD_ModuleMapType( SrcHD_ModuleMapTypeData, DstHD_ModuleMapTypeData, CtrlCode, ErrStat, ErrMsg ) @@ -4218,39 +4592,20 @@ SUBROUTINE HydroDyn_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrMsg = "" IF (ALLOCATED(SrcContStateData%WAMIT)) THEN i1_l = LBOUND(SrcContStateData%WAMIT,1) - i1_u = UBOUND(SrcContStateData%WAMIT,1) - IF (.NOT. ALLOCATED(DstContStateData%WAMIT)) THEN - ALLOCATE(DstContStateData%WAMIT(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstContStateData%WAMIT.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcContStateData%WAMIT,1), UBOUND(SrcContStateData%WAMIT,1) - CALL WAMIT_CopyContState( SrcContStateData%WAMIT(i1), DstContStateData%WAMIT(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF -IF (ALLOCATED(SrcContStateData%WAMIT2)) THEN - i1_l = LBOUND(SrcContStateData%WAMIT2,1) - i1_u = UBOUND(SrcContStateData%WAMIT2,1) - IF (.NOT. ALLOCATED(DstContStateData%WAMIT2)) THEN - ALLOCATE(DstContStateData%WAMIT2(i1_l:i1_u),STAT=ErrStat2) + i1_u = UBOUND(SrcContStateData%WAMIT,1) + IF (.NOT. ALLOCATED(DstContStateData%WAMIT)) THEN + ALLOCATE(DstContStateData%WAMIT(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstContStateData%WAMIT2.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstContStateData%WAMIT.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcContStateData%WAMIT2,1), UBOUND(SrcContStateData%WAMIT2,1) - CALL WAMIT2_CopyContState( SrcContStateData%WAMIT2(i1), DstContStateData%WAMIT2(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcContStateData%WAMIT,1), UBOUND(SrcContStateData%WAMIT,1) + CALL WAMIT_CopyContState( SrcContStateData%WAMIT(i1), DstContStateData%WAMIT(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF - CALL Waves2_CopyContState( SrcContStateData%Waves2, DstContStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL Morison_CopyContState( SrcContStateData%Morison, DstContStateData%Morison, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -4284,15 +4639,6 @@ SUBROUTINE HydroDyn_DestroyContState( ContStateData, ErrStat, ErrMsg, DEALLOCATE ENDDO DEALLOCATE(ContStateData%WAMIT) ENDIF -IF (ALLOCATED(ContStateData%WAMIT2)) THEN -DO i1 = LBOUND(ContStateData%WAMIT2,1), UBOUND(ContStateData%WAMIT2,1) - CALL WAMIT2_DestroyContState( ContStateData%WAMIT2(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(ContStateData%WAMIT2) -ENDIF - CALL Waves2_DestroyContState( ContStateData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Morison_DestroyContState( ContStateData%Morison, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE HydroDyn_DestroyContState @@ -4356,46 +4702,6 @@ SUBROUTINE HydroDyn_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END IF END DO END IF - Int_BufSz = Int_BufSz + 1 ! WAMIT2 allocated yes/no - IF ( ALLOCATED(InData%WAMIT2) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WAMIT2 upper/lower bounds for each dimension - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - Int_BufSz = Int_BufSz + 3 ! WAMIT2: size of buffers for each call to pack subtype - CALL WAMIT2_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, .TRUE. ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! WAMIT2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! WAMIT2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! WAMIT2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! Morison: size of buffers for each call to pack subtype CALL Morison_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, .TRUE. ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -4481,75 +4787,6 @@ SUBROUTINE HydroDyn_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO END IF - IF ( .NOT. ALLOCATED(InData%WAMIT2) ) 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%WAMIT2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT2,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - CALL WAMIT2_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - CALL Waves2_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF CALL Morison_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, OnlySize ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -4663,102 +4900,6 @@ SUBROUTINE HydroDyn_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WAMIT2 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%WAMIT2)) DEALLOCATE(OutData%WAMIT2) - ALLOCATE(OutData%WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WAMIT2,1), UBOUND(OutData%WAMIT2,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL WAMIT2_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%WAMIT2(i1), ErrStat2, ErrMsg2 ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -4832,25 +4973,6 @@ SUBROUTINE HydroDyn_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcDiscStateData%WAMIT2)) THEN - i1_l = LBOUND(SrcDiscStateData%WAMIT2,1) - i1_u = UBOUND(SrcDiscStateData%WAMIT2,1) - IF (.NOT. ALLOCATED(DstDiscStateData%WAMIT2)) THEN - ALLOCATE(DstDiscStateData%WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstDiscStateData%WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcDiscStateData%WAMIT2,1), UBOUND(SrcDiscStateData%WAMIT2,1) - CALL WAMIT2_CopyDiscState( SrcDiscStateData%WAMIT2(i1), DstDiscStateData%WAMIT2(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - CALL Waves2_CopyDiscState( SrcDiscStateData%Waves2, DstDiscStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL Morison_CopyDiscState( SrcDiscStateData%Morison, DstDiscStateData%Morison, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -4884,15 +5006,6 @@ SUBROUTINE HydroDyn_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATE ENDDO DEALLOCATE(DiscStateData%WAMIT) ENDIF -IF (ALLOCATED(DiscStateData%WAMIT2)) THEN -DO i1 = LBOUND(DiscStateData%WAMIT2,1), UBOUND(DiscStateData%WAMIT2,1) - CALL WAMIT2_DestroyDiscState( DiscStateData%WAMIT2(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(DiscStateData%WAMIT2) -ENDIF - CALL Waves2_DestroyDiscState( DiscStateData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Morison_DestroyDiscState( DiscStateData%Morison, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE HydroDyn_DestroyDiscState @@ -4955,47 +5068,7 @@ SUBROUTINE HydroDyn_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DEALLOCATE(Int_Buf) END IF END DO - END IF - Int_BufSz = Int_BufSz + 1 ! WAMIT2 allocated yes/no - IF ( ALLOCATED(InData%WAMIT2) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WAMIT2 upper/lower bounds for each dimension - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - Int_BufSz = Int_BufSz + 3 ! WAMIT2: size of buffers for each call to pack subtype - CALL WAMIT2_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, .TRUE. ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! WAMIT2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! WAMIT2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! WAMIT2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF + END IF Int_BufSz = Int_BufSz + 3 ! Morison: size of buffers for each call to pack subtype CALL Morison_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, .TRUE. ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -5081,75 +5154,6 @@ SUBROUTINE HydroDyn_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO END IF - IF ( .NOT. ALLOCATED(InData%WAMIT2) ) 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%WAMIT2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT2,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - CALL WAMIT2_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - CALL Waves2_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF CALL Morison_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, OnlySize ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -5263,102 +5267,6 @@ SUBROUTINE HydroDyn_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WAMIT2 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%WAMIT2)) DEALLOCATE(OutData%WAMIT2) - ALLOCATE(OutData%WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WAMIT2,1), UBOUND(OutData%WAMIT2,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL WAMIT2_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%WAMIT2(i1), ErrStat2, ErrMsg2 ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -5418,12 +5326,6 @@ SUBROUTINE HydroDyn_CopyConstrState( SrcConstrStateData, DstConstrStateData, Ctr CALL WAMIT_CopyConstrState( SrcConstrStateData%WAMIT, DstConstrStateData%WAMIT, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL WAMIT2_CopyConstrState( SrcConstrStateData%WAMIT2, DstConstrStateData%WAMIT2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL Waves2_CopyConstrState( SrcConstrStateData%Waves2, DstConstrStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL Morison_CopyConstrState( SrcConstrStateData%Morison, DstConstrStateData%Morison, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -5452,10 +5354,6 @@ SUBROUTINE HydroDyn_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg, DEALLO CALL WAMIT_DestroyConstrState( ConstrStateData%WAMIT, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL WAMIT2_DestroyConstrState( ConstrStateData%WAMIT2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL Waves2_DestroyConstrState( ConstrStateData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Morison_DestroyConstrState( ConstrStateData%Morison, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE HydroDyn_DestroyConstrState @@ -5513,40 +5411,6 @@ SUBROUTINE HydroDyn_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! WAMIT2: size of buffers for each call to pack subtype - CALL WAMIT2_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2, ErrStat2, ErrMsg2, .TRUE. ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! WAMIT2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! WAMIT2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! WAMIT2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! Morison: size of buffers for each call to pack subtype CALL Morison_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, .TRUE. ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -5586,68 +5450,12 @@ SUBROUTINE HydroDyn_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat END IF END IF IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - CALL WAMIT_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT, ErrStat2, ErrMsg2, OnlySize ) ! WAMIT - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL WAMIT2_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2, ErrStat2, ErrMsg2, OnlySize ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL Waves2_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + CALL WAMIT_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT, ErrStat2, ErrMsg2, OnlySize ) ! WAMIT CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -5768,86 +5576,6 @@ SUBROUTINE HydroDyn_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL WAMIT2_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%WAMIT2, ErrStat2, ErrMsg2 ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) @@ -5924,25 +5652,6 @@ SUBROUTINE HydroDyn_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCo IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcOtherStateData%WAMIT2)) THEN - i1_l = LBOUND(SrcOtherStateData%WAMIT2,1) - i1_u = UBOUND(SrcOtherStateData%WAMIT2,1) - IF (.NOT. ALLOCATED(DstOtherStateData%WAMIT2)) THEN - ALLOCATE(DstOtherStateData%WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstOtherStateData%WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcOtherStateData%WAMIT2,1), UBOUND(SrcOtherStateData%WAMIT2,1) - CALL WAMIT2_CopyOtherState( SrcOtherStateData%WAMIT2(i1), DstOtherStateData%WAMIT2(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - CALL Waves2_CopyOtherState( SrcOtherStateData%Waves2, DstOtherStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL Morison_CopyOtherState( SrcOtherStateData%Morison, DstOtherStateData%Morison, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -5976,15 +5685,6 @@ SUBROUTINE HydroDyn_DestroyOtherState( OtherStateData, ErrStat, ErrMsg, DEALLOCA ENDDO DEALLOCATE(OtherStateData%WAMIT) ENDIF -IF (ALLOCATED(OtherStateData%WAMIT2)) THEN -DO i1 = LBOUND(OtherStateData%WAMIT2,1), UBOUND(OtherStateData%WAMIT2,1) - CALL WAMIT2_DestroyOtherState( OtherStateData%WAMIT2(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(OtherStateData%WAMIT2) -ENDIF - CALL Waves2_DestroyOtherState( OtherStateData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Morison_DestroyOtherState( OtherStateData%Morison, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE HydroDyn_DestroyOtherState @@ -6048,46 +5748,6 @@ SUBROUTINE HydroDyn_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END IF END DO END IF - Int_BufSz = Int_BufSz + 1 ! WAMIT2 allocated yes/no - IF ( ALLOCATED(InData%WAMIT2) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WAMIT2 upper/lower bounds for each dimension - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - Int_BufSz = Int_BufSz + 3 ! WAMIT2: size of buffers for each call to pack subtype - CALL WAMIT2_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, .TRUE. ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! WAMIT2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! WAMIT2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! WAMIT2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! Morison: size of buffers for each call to pack subtype CALL Morison_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, .TRUE. ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -6173,75 +5833,6 @@ SUBROUTINE HydroDyn_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO END IF - IF ( .NOT. ALLOCATED(InData%WAMIT2) ) 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%WAMIT2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT2,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - CALL WAMIT2_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - CALL Waves2_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF CALL Morison_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, OnlySize ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -6312,63 +5903,7 @@ SUBROUTINE HydroDyn_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WAMIT.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i1 = LBOUND(OutData%WAMIT,1), UBOUND(OutData%WAMIT,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL WAMIT_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%WAMIT(i1), ErrStat2, ErrMsg2 ) ! WAMIT - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WAMIT2 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%WAMIT2)) DEALLOCATE(OutData%WAMIT2) - ALLOCATE(OutData%WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WAMIT2,1), UBOUND(OutData%WAMIT2,1) + DO i1 = LBOUND(OutData%WAMIT,1), UBOUND(OutData%WAMIT,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -6402,7 +5937,7 @@ SUBROUTINE HydroDyn_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL WAMIT2_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%WAMIT2(i1), ErrStat2, ErrMsg2 ) ! WAMIT2 + CALL WAMIT_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%WAMIT(i1), ErrStat2, ErrMsg2 ) ! WAMIT CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -6411,46 +5946,6 @@ SUBROUTINE HydroDyn_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -6511,9 +6006,6 @@ SUBROUTINE HydroDyn_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMs CALL MeshCopy( SrcMiscData%AllHdroOrigin, DstMiscData%AllHdroOrigin, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MeshCopy( SrcMiscData%MrsnMesh_position, DstMiscData%MrsnMesh_position, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL HydroDyn_Copyhd_modulemaptype( SrcMiscData%HD_MeshMap, DstMiscData%HD_MeshMap, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -6577,9 +6069,6 @@ SUBROUTINE HydroDyn_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMs IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF - CALL Waves2_CopyMisc( SrcMiscData%Waves2, DstMiscData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL Morison_CopyMisc( SrcMiscData%Morison, DstMiscData%Morison, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -6599,25 +6088,6 @@ SUBROUTINE HydroDyn_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMs IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcMiscData%u_WAMIT2)) THEN - i1_l = LBOUND(SrcMiscData%u_WAMIT2,1) - i1_u = UBOUND(SrcMiscData%u_WAMIT2,1) - IF (.NOT. ALLOCATED(DstMiscData%u_WAMIT2)) THEN - ALLOCATE(DstMiscData%u_WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%u_WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcMiscData%u_WAMIT2,1), UBOUND(SrcMiscData%u_WAMIT2,1) - CALL WAMIT2_CopyInput( SrcMiscData%u_WAMIT2(i1), DstMiscData%u_WAMIT2(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - CALL Waves2_CopyInput( SrcMiscData%u_Waves2, DstMiscData%u_Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN END SUBROUTINE HydroDyn_CopyMisc SUBROUTINE HydroDyn_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -6643,8 +6113,6 @@ SUBROUTINE HydroDyn_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) CALL MeshDestroy( MiscData%AllHdroOrigin, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MeshDestroy( MiscData%MrsnMesh_position, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL HydroDyn_Destroyhd_modulemaptype( MiscData%HD_MeshMap, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ALLOCATED(MiscData%F_PtfmAdd)) THEN @@ -6667,8 +6135,6 @@ SUBROUTINE HydroDyn_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) ENDDO DEALLOCATE(MiscData%WAMIT2) ENDIF - CALL Waves2_DestroyMisc( MiscData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Morison_DestroyMisc( MiscData%Morison, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ALLOCATED(MiscData%u_WAMIT)) THEN @@ -6678,15 +6144,6 @@ SUBROUTINE HydroDyn_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) ENDDO DEALLOCATE(MiscData%u_WAMIT) ENDIF -IF (ALLOCATED(MiscData%u_WAMIT2)) THEN -DO i1 = LBOUND(MiscData%u_WAMIT2,1), UBOUND(MiscData%u_WAMIT2,1) - CALL WAMIT2_DestroyInput( MiscData%u_WAMIT2(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(MiscData%u_WAMIT2) -ENDIF - CALL Waves2_DestroyInput( MiscData%u_Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE HydroDyn_DestroyMisc SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -6742,23 +6199,6 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! MrsnMesh_position: size of buffers for each call to pack subtype - CALL MeshPack( InData%MrsnMesh_position, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! MrsnMesh_position - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! MrsnMesh_position - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! MrsnMesh_position - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! MrsnMesh_position - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! HD_MeshMap: size of buffers for each call to pack subtype CALL HydroDyn_Packhd_modulemaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_MeshMap, ErrStat2, ErrMsg2, .TRUE. ) ! HD_MeshMap CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -6836,23 +6276,6 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END IF END DO END IF - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! Morison: size of buffers for each call to pack subtype CALL Morison_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, .TRUE. ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -6893,46 +6316,6 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END IF END DO END IF - Int_BufSz = Int_BufSz + 1 ! u_WAMIT2 allocated yes/no - IF ( ALLOCATED(InData%u_WAMIT2) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! u_WAMIT2 upper/lower bounds for each dimension - DO i1 = LBOUND(InData%u_WAMIT2,1), UBOUND(InData%u_WAMIT2,1) - Int_BufSz = Int_BufSz + 3 ! u_WAMIT2: size of buffers for each call to pack subtype - CALL WAMIT2_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u_WAMIT2(i1), ErrStat2, ErrMsg2, .TRUE. ) ! u_WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! u_WAMIT2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! u_WAMIT2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! u_WAMIT2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 3 ! u_Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u_Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! u_Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! u_Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! u_Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! u_Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -6964,34 +6347,6 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL MeshPack( InData%MrsnMesh_position, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! MrsnMesh_position - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf @@ -7076,125 +6431,26 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs IntKiBuf( Int_Xferred ) = 1 Int_Xferred = Int_Xferred + 1 IntKiBuf( Int_Xferred ) = LBOUND(InData%F_Waves,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%F_Waves,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%F_Waves,1), UBOUND(InData%F_Waves,1) - ReKiBuf(Re_Xferred) = InData%F_Waves(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WAMIT) ) 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%WAMIT,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WAMIT,1), UBOUND(InData%WAMIT,1) - CALL WAMIT_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WAMIT2) ) 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%WAMIT2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT2,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) - CALL WAMIT2_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - CALL Waves2_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL Morison_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, OnlySize ) ! Morison + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%F_Waves,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%F_Waves,1), UBOUND(InData%F_Waves,1) + ReKiBuf(Re_Xferred) = InData%F_Waves(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WAMIT) ) 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%WAMIT,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WAMIT,1), UBOUND(InData%WAMIT,1) + CALL WAMIT_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -7222,18 +6478,20 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - IF ( .NOT. ALLOCATED(InData%u_WAMIT) ) THEN + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WAMIT2) ) 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%u_WAMIT,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%u_WAMIT,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WAMIT2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WAMIT2,1) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%u_WAMIT,1), UBOUND(InData%u_WAMIT,1) - CALL WAMIT_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u_WAMIT(i1), ErrStat2, ErrMsg2, OnlySize ) ! u_WAMIT + DO i1 = LBOUND(InData%WAMIT2,1), UBOUND(InData%WAMIT2,1) + CALL WAMIT2_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%WAMIT2(i1), ErrStat2, ErrMsg2, OnlySize ) ! WAMIT2 CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -7263,18 +6521,7 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ENDIF END DO END IF - IF ( .NOT. ALLOCATED(InData%u_WAMIT2) ) 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%u_WAMIT2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%u_WAMIT2,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%u_WAMIT2,1), UBOUND(InData%u_WAMIT2,1) - CALL WAMIT2_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u_WAMIT2(i1), ErrStat2, ErrMsg2, OnlySize ) ! u_WAMIT2 + CALL Morison_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, OnlySize ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -7302,9 +6549,18 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END DO - END IF - CALL Waves2_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u_Waves2, ErrStat2, ErrMsg2, OnlySize ) ! u_Waves2 + IF ( .NOT. ALLOCATED(InData%u_WAMIT) ) 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%u_WAMIT,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%u_WAMIT,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%u_WAMIT,1), UBOUND(InData%u_WAMIT,1) + CALL WAMIT_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u_WAMIT(i1), ErrStat2, ErrMsg2, OnlySize ) ! u_WAMIT CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -7332,6 +6588,8 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF + END DO + END IF END SUBROUTINE HydroDyn_PackMisc SUBROUTINE HydroDyn_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -7398,46 +6656,6 @@ SUBROUTINE HydroDyn_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL MeshUnpack( OutData%MrsnMesh_position, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! MrsnMesh_position - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) @@ -7641,46 +6859,6 @@ SUBROUTINE HydroDyn_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -7777,102 +6955,6 @@ SUBROUTINE HydroDyn_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! u_WAMIT2 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%u_WAMIT2)) DEALLOCATE(OutData%u_WAMIT2) - ALLOCATE(OutData%u_WAMIT2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%u_WAMIT2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%u_WAMIT2,1), UBOUND(OutData%u_WAMIT2,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL WAMIT2_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u_WAMIT2(i1), ErrStat2, ErrMsg2 ) ! u_WAMIT2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u_Waves2, ErrStat2, ErrMsg2 ) ! u_Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE HydroDyn_UnPackMisc SUBROUTINE HydroDyn_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) @@ -7927,9 +7009,6 @@ SUBROUTINE HydroDyn_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Er ENDDO ENDIF DstParamData%WAMIT2used = SrcParamData%WAMIT2used - CALL Waves2_CopyParam( SrcParamData%Waves2, DstParamData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL Morison_CopyParam( SrcParamData%Morison, DstParamData%Morison, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -7939,10 +7018,10 @@ SUBROUTINE HydroDyn_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Er DstParamData%totalStates = SrcParamData%totalStates DstParamData%totalExctnStates = SrcParamData%totalExctnStates DstParamData%totalRdtnStates = SrcParamData%totalRdtnStates -IF (ALLOCATED(SrcParamData%WaveTime)) THEN +IF (ASSOCIATED(SrcParamData%WaveTime)) THEN i1_l = LBOUND(SrcParamData%WaveTime,1) i1_u = UBOUND(SrcParamData%WaveTime,1) - IF (.NOT. ALLOCATED(DstParamData%WaveTime)) THEN + IF (.NOT. ASSOCIATED(DstParamData%WaveTime)) THEN ALLOCATE(DstParamData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -7952,49 +7031,6 @@ SUBROUTINE HydroDyn_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Er DstParamData%WaveTime = SrcParamData%WaveTime ENDIF DstParamData%NStepWave = SrcParamData%NStepWave - DstParamData%NWaveElev = SrcParamData%NWaveElev -IF (ALLOCATED(SrcParamData%WaveElev)) THEN - i1_l = LBOUND(SrcParamData%WaveElev,1) - i1_u = UBOUND(SrcParamData%WaveElev,1) - i2_l = LBOUND(SrcParamData%WaveElev,2) - i2_u = UBOUND(SrcParamData%WaveElev,2) - IF (.NOT. ALLOCATED(DstParamData%WaveElev)) THEN - ALLOCATE(DstParamData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstParamData%WaveElev = SrcParamData%WaveElev -ENDIF -IF (ALLOCATED(SrcParamData%WaveElev1)) THEN - i1_l = LBOUND(SrcParamData%WaveElev1,1) - i1_u = UBOUND(SrcParamData%WaveElev1,1) - i2_l = LBOUND(SrcParamData%WaveElev1,2) - i2_u = UBOUND(SrcParamData%WaveElev1,2) - IF (.NOT. ALLOCATED(DstParamData%WaveElev1)) THEN - ALLOCATE(DstParamData%WaveElev1(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev1.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstParamData%WaveElev1 = SrcParamData%WaveElev1 -ENDIF -IF (ALLOCATED(SrcParamData%WaveElev2)) THEN - i1_l = LBOUND(SrcParamData%WaveElev2,1) - i1_u = UBOUND(SrcParamData%WaveElev2,1) - i2_l = LBOUND(SrcParamData%WaveElev2,2) - i2_u = UBOUND(SrcParamData%WaveElev2,2) - IF (.NOT. ALLOCATED(DstParamData%WaveElev2)) THEN - ALLOCATE(DstParamData%WaveElev2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstParamData%WaveElev2 = SrcParamData%WaveElev2 -ENDIF DstParamData%WtrDpth = SrcParamData%WtrDpth IF (ALLOCATED(SrcParamData%AddF0)) THEN i1_l = LBOUND(SrcParamData%AddF0,1) @@ -8122,6 +7158,7 @@ SUBROUTINE HydroDyn_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Er DstParamData%dx = SrcParamData%dx ENDIF DstParamData%Jac_ny = SrcParamData%Jac_ny + DstParamData%PointsToSeaState = SrcParamData%PointsToSeaState END SUBROUTINE HydroDyn_CopyParam SUBROUTINE HydroDyn_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -8159,21 +7196,12 @@ SUBROUTINE HydroDyn_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ENDDO DEALLOCATE(ParamData%WAMIT2) ENDIF - CALL Waves2_DestroyParam( ParamData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Morison_DestroyParam( ParamData%Morison, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(ParamData%WaveTime)) THEN +IF (ASSOCIATED(ParamData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(ParamData%WaveTime) -ENDIF -IF (ALLOCATED(ParamData%WaveElev)) THEN - DEALLOCATE(ParamData%WaveElev) -ENDIF -IF (ALLOCATED(ParamData%WaveElev1)) THEN - DEALLOCATE(ParamData%WaveElev1) -ENDIF -IF (ALLOCATED(ParamData%WaveElev2)) THEN - DEALLOCATE(ParamData%WaveElev2) + ParamData%WaveTime => NULL() ENDIF IF (ALLOCATED(ParamData%AddF0)) THEN DEALLOCATE(ParamData%AddF0) @@ -8290,23 +7318,6 @@ SUBROUTINE HydroDyn_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM END DO END IF Int_BufSz = Int_BufSz + 1 ! WAMIT2used - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! Morison: size of buffers for each call to pack subtype CALL Morison_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, .TRUE. ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -8331,27 +7342,11 @@ SUBROUTINE HydroDyn_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM Int_BufSz = Int_BufSz + 1 ! totalExctnStates Int_BufSz = Int_BufSz + 1 ! totalRdtnStates Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN + IF ( ASSOCIATED(InData%WaveTime) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime END IF Int_BufSz = Int_BufSz + 1 ! NStepWave - Int_BufSz = Int_BufSz + 1 ! NWaveElev - Int_BufSz = Int_BufSz + 1 ! WaveElev allocated yes/no - IF ( ALLOCATED(InData%WaveElev) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElev upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElev) ! WaveElev - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no - IF ( ALLOCATED(InData%WaveElev1) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElev1 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no - IF ( ALLOCATED(InData%WaveElev2) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElev2 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 - END IF Re_BufSz = Re_BufSz + 1 ! WtrDpth Int_BufSz = Int_BufSz + 1 ! AddF0 allocated yes/no IF ( ALLOCATED(InData%AddF0) ) THEN @@ -8421,6 +7416,7 @@ SUBROUTINE HydroDyn_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM Db_BufSz = Db_BufSz + SIZE(InData%dx) ! dx END IF Int_BufSz = Int_BufSz + 1 ! Jac_ny + Int_BufSz = Int_BufSz + 1 ! PointsToSeaState IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -8536,34 +7532,6 @@ SUBROUTINE HydroDyn_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM END IF IntKiBuf(Int_Xferred) = TRANSFER(InData%WAMIT2used, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 - CALL Waves2_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF CALL Morison_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, OnlySize ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -8604,7 +7572,7 @@ SUBROUTINE HydroDyn_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%totalRdtnStates Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveTime) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -8621,68 +7589,6 @@ SUBROUTINE HydroDyn_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM END IF IntKiBuf(Int_Xferred) = InData%NStepWave Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NWaveElev - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveElev) ) 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%WaveElev,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElev,2), UBOUND(InData%WaveElev,2) - DO i1 = LBOUND(InData%WaveElev,1), UBOUND(InData%WaveElev,1) - ReKiBuf(Re_Xferred) = InData%WaveElev(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElev1) ) 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%WaveElev1,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) - DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) - ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElev2) ) 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%WaveElev2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElev2,2), UBOUND(InData%WaveElev2,2) - DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) - ReKiBuf(Re_Xferred) = InData%WaveElev2(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF ReKiBuf(Re_Xferred) = InData%WtrDpth Re_Xferred = Re_Xferred + 1 IF ( .NOT. ALLOCATED(InData%AddF0) ) THEN @@ -8897,6 +7803,8 @@ SUBROUTINE HydroDyn_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM END IF IntKiBuf(Int_Xferred) = InData%Jac_ny Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%PointsToSeaState, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE HydroDyn_PackParam SUBROUTINE HydroDyn_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -9046,46 +7954,6 @@ SUBROUTINE HydroDyn_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%WAMIT2used = TRANSFER(IntKiBuf(Int_Xferred), OutData%WAMIT2used) Int_Xferred = Int_Xferred + 1 - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -9145,7 +8013,7 @@ SUBROUTINE HydroDyn_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E i1_l = IntKiBuf( Int_Xferred ) i1_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + IF (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -9158,77 +8026,6 @@ SUBROUTINE HydroDyn_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%NStepWave = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 - OutData%NWaveElev = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElev)) DEALLOCATE(OutData%WaveElev) - ALLOCATE(OutData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElev,2), UBOUND(OutData%WaveElev,2) - DO i1 = LBOUND(OutData%WaveElev,1), UBOUND(OutData%WaveElev,1) - OutData%WaveElev(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) - ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) - DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) - OutData%WaveElev1(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) - ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElev2,2), UBOUND(OutData%WaveElev2,2) - DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) - OutData%WaveElev2(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF OutData%WtrDpth = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! AddF0 not allocated @@ -9479,6 +8276,8 @@ SUBROUTINE HydroDyn_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%Jac_ny = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%PointsToSeaState = TRANSFER(IntKiBuf(Int_Xferred), OutData%PointsToSeaState) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE HydroDyn_UnPackParam SUBROUTINE HydroDyn_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) @@ -9930,9 +8729,6 @@ SUBROUTINE HydroDyn_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF - CALL Waves2_CopyOutput( SrcOutputData%Waves2, DstOutputData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL Morison_CopyOutput( SrcOutputData%Morison, DstOutputData%Morison, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -9988,8 +8784,6 @@ SUBROUTINE HydroDyn_DestroyOutput( OutputData, ErrStat, ErrMsg, DEALLOCATEpointe ENDDO DEALLOCATE(OutputData%WAMIT2) ENDIF - CALL Waves2_DestroyOutput( OutputData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Morison_DestroyOutput( OutputData%Morison, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL MeshDestroy( OutputData%WAMITMesh, ErrStat2, ErrMsg2 ) @@ -10081,23 +8875,6 @@ SUBROUTINE HydroDyn_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err END IF END DO END IF - Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype - CALL Waves2_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Waves2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Waves2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Waves2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! Morison: size of buffers for each call to pack subtype CALL Morison_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, .TRUE. ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -10246,34 +9023,6 @@ SUBROUTINE HydroDyn_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err ENDIF END DO END IF - CALL Waves2_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF CALL Morison_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Morison, ErrStat2, ErrMsg2, OnlySize ) ! Morison CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -10486,46 +9235,6 @@ SUBROUTINE HydroDyn_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL Waves2_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -10895,8 +9604,6 @@ SUBROUTINE HydroDyn_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, E CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) ENDDO END IF ! check if allocated - CALL Waves2_Output_ExtrapInterp1( y1%Waves2, y2%Waves2, tin, y_out%Waves2, tin_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) CALL Morison_Output_ExtrapInterp1( y1%Morison, y2%Morison, tin, y_out%Morison, tin_out, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) CALL MeshExtrapInterp1(y1%WAMITMesh, y2%WAMITMesh, tin, y_out%WAMITMesh, tin_out, ErrStat2, ErrMsg2 ) @@ -10976,8 +9683,6 @@ SUBROUTINE HydroDyn_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrSta CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) ENDDO END IF ! check if allocated - CALL Waves2_Output_ExtrapInterp2( y1%Waves2, y2%Waves2, y3%Waves2, tin, y_out%Waves2, tin_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) CALL Morison_Output_ExtrapInterp2( y1%Morison, y2%Morison, y3%Morison, tin, y_out%Morison, tin_out, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) CALL MeshExtrapInterp2(y1%WAMITMesh, y2%WAMITMesh, y3%WAMITMesh, tin, y_out%WAMITMesh, tin_out, ErrStat2, ErrMsg2 ) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 0d834adfa5..ac2eb4c5e2 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -23,6 +23,7 @@ MODULE Morison USE Waves USE Morison_Types USE Morison_Output + use SeaState_Interp ! USE HydroDyn_Output_Types USE NWTC_Library @@ -38,20 +39,11 @@ MODULE Morison PUBLIC:: Morison_GenerateSimulationNodes PUBLIC :: Morison_Init ! Initialization routine - PUBLIC :: Morison_End ! Ending routine (includes clean up) - - PUBLIC :: Morison_UpdateStates ! Loose coupling routine for solving for constraint states, integrating - ! continuous states, and updating discrete states PUBLIC :: Morison_CalcOutput ! Routine for computing outputs - - PUBLIC :: Morison_CalcConstrStateResidual ! Tight coupling routine for returning the constraint state residual - PUBLIC :: Morison_CalcContStateDeriv ! Tight coupling routine for computing derivatives of continuous states - PUBLIC :: Morison_UpdateDiscState ! Tight coupling routine for updating discrete states - - + PUBLIC :: Morison_UpdateDiscState ! Routine for updating discrete states CONTAINS - +!---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE Morison_DirCosMtrx( pos0, pos1, DirCos ) ! Compute the direction cosine matrix given two points along the axis of a cylinder @@ -345,7 +337,7 @@ FUNCTION InterpWrappedStpLogical( XValIn, XAry, YAry, Ind, AryLen ) RETURN END FUNCTION InterpWrappedStpLogical ! ( XVal, XAry, YAry, Ind, AryLen ) - +!---------------------------------------------------------------------------------------------------------------------------------- subroutine GetOrientationAngles(p1, p2, phi, sinPhi, cosPhi, tanPhi, sinBeta, cosBeta, k_hat, errStat, errMsg) real(ReKi), intent(in ) :: p1(3),p2(3) real(ReKi), intent( out) :: phi, sinPhi, cosPhi, tanPhi, sinBeta, cosBeta, k_hat(3) @@ -367,6 +359,7 @@ subroutine GetOrientationAngles(p1, p2, phi, sinPhi, cosPhi, tanPhi, sinBeta, co vecLen2D = SQRT(vec(1)**2+vec(2)**2) if ( vecLen < 0.000001 ) then call SeterrStat(ErrID_Fatal, 'An element of the Morison structure has co-located endpoints! This should never occur. Please review your model.', errStat, errMsg, 'Morison_CalcOutput' ) + return else k_hat = vec / vecLen phi = atan2(vecLen2D, vec(3)) ! incline angle @@ -383,8 +376,7 @@ subroutine GetOrientationAngles(p1, p2, phi, sinPhi, cosPhi, tanPhi, sinBeta, co cosBeta = cos(beta) end subroutine GetOrientationAngles - - +!---------------------------------------------------------------------------------------------------------------------------------- !function to return conical taper geometry calculations (volume and center of volume) SUBROUTINE TaperCalc(R1, R2, H, taperV, h_c) REAL(ReKi), INTENT ( IN ) :: R1 @@ -409,8 +401,7 @@ SUBROUTINE TaperCalc(R1, R2, H, taperV, h_c) end if END SUBROUTINE TaperCalc - - +!---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE CylInertia(R1, R2, H, rho, Il, Ir) REAL(ReKi), INTENT ( IN ) :: R1 REAL(ReKi), INTENT ( IN ) :: R2 @@ -438,9 +429,7 @@ SUBROUTINE CylInertia(R1, R2, H, rho, Il, Ir) END IF END SUBROUTINE CylInertia - - - +!---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE MarineGrowthPartSegment(R1, R2, Rmg1, Rmg2, L, rho, Vinner, Vouter, m_mg, h_c, Ilmg, Irmg) REAL(ReKi), INTENT ( IN ) :: R1 @@ -490,8 +479,7 @@ SUBROUTINE MarineGrowthPartSegment(R1, R2, Rmg1, Rmg2, L, rho, Vinner, Vouter, Irmg = Irouter - Irinner END SUBROUTINE MarineGrowthPartSegment - - +!---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE FloodedBallastPartSegment(R1, R2, L, rho, V, m, h_c, Il, Ir) REAL(ReKi), INTENT ( IN ) :: R1 ! interior radius of element at node point @@ -513,16 +501,12 @@ SUBROUTINE FloodedBallastPartSegment(R1, R2, L, rho, V, m, h_c, Il, Ir) call CylInertia(R1, R2, L, rho, Il, Ir) ! inertias for filled section END SUBROUTINE FloodedBallastPartSegment - - -SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, nodes, numMembers, members, & - NOutputs, OutParam, NMOutputs, MOutLst, NJOutputs, JOutLst, uMesh, yMesh, & - p, m, errStat, errMsg ) +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE WriteSummaryFile( UnSum, MSL2SWL, numJoints, numNodes, nodes, numMembers, members, & + NOutputs, OutParam, MOutLst, JOutLst, uMesh, yMesh, p, m, errStat, errMsg ) INTEGER, INTENT ( IN ) :: UnSum - REAL(ReKi), INTENT ( IN ) :: g ! gravity REAL(ReKi), INTENT ( IN ) :: MSL2SWL - REAL(ReKi), INTENT ( IN ) :: WtrDpth INTEGER, INTENT ( IN ) :: numJoints INTEGER, INTENT ( IN ) :: numNodes TYPE(Morison_NodeType), ALLOCATABLE, INTENT ( IN ) :: nodes(:) @@ -530,9 +514,7 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no TYPE(Morison_MemberType), ALLOCATABLE, INTENT ( IN ) :: members(:) INTEGER, INTENT ( IN ) :: NOutputs TYPE(OutParmType), ALLOCATABLE, INTENT ( IN ) :: OutParam(:) - INTEGER, INTENT ( IN ) :: NMOutputs TYPE(Morison_MOutput), ALLOCATABLE, INTENT ( IN ) :: MOutLst(:) - INTEGER, INTENT ( IN ) :: NJOutputs TYPE(Morison_JOutput), ALLOCATABLE, INTENT ( IN ) :: JOutLst(:) TYPE(MeshType), INTENT ( INOUT ) :: uMesh TYPE(MeshType), INTENT ( INOUT ) :: yMesh @@ -542,43 +524,46 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no CHARACTER(*), INTENT ( OUT ) :: errMsg ! Error message if errStat /= ErrID_None INTEGER :: I, J, II - REAL(ReKi) :: l ! length of an element LOGICAL :: filledFlag ! flag indicating if element is filled/flooded - CHARACTER(2) :: strFmt - CHARACTER(ChanLen) :: strNodeType ! string indicating type of node: End, Interior, Super REAL(ReKi) :: ident(3,3) ! identity matrix REAL(ReKi) :: ExtBuoyancy(6) ! sum of all external buoyancy forces lumped at (0,0,0) REAL(ReKi) :: IntBuoyancy(6) ! sum of all internal buoyancy forces lumped at (0,0,0) REAL(ReKi) :: MG_Wt(6) ! weight of the marine growth as applied to (0,0,0) TYPE(MeshType) :: WRP_Mesh ! mesh representing the WAMIT reference point (0,0,0) TYPE(MeshType) :: WRP_Mesh_position ! mesh representing the WAMIT reference point (0,0,0) (with no displaced position) - TYPE(MeshMapType) :: M_L_2_P ! Map Morison Line2 to WRP_Mesh point TYPE(MeshMapType) :: M_P_2_P ! Map Morison Point to WRP_Mesh point - REAL(ReKi) :: elementVol ! displaced volume of an element REAL(ReKi) :: totalDisplVol ! total displaced volume of the structure REAL(ReKi) :: totalVol ! total volume of structure REAL(ReKi) :: MGvolume ! volume of the marine growth material REAL(ReKi) :: totalMGVol ! REAL(ReKi) :: totalFillVol ! - REAL(ReKi) :: elemCentroid(3) ! location of the element centroid REAL(ReKi) :: COB(3) ! center of buoyancy location in global coordinates - INTEGER :: m1, m2 ! Indices of the markers which surround the requested output location + INTEGER :: m1 ! Indices of the markers which surround the requested output location REAL(ReKi) :: s ! The linear interpolation factor for the requested location REAL(ReKi) :: outloc(3) ! Position of the requested member output real(ReKi) :: pos(3), pos2(3) ! Position of a node or joint in the MSL inertial system INTEGER :: mbrIndx, nodeIndx, c, N CHARACTER(ChanLen) :: tmpName - REAL(ReKi) :: totalFillMass, mass_fill, fillVol, memberVol - REAL(ReKi) :: totalMGMass, mass_MG + REAL(ReKi) :: totalFillMass, mass_fill, memberVol + REAL(ReKi) :: totalMGMass TYPE(Morison_NodeType) :: node1, node2 real(ReKi) :: ptLoad(6) logical :: fillFlag type(Morison_MemberType) :: mem REAL(ReKi) :: Cd1, Cd2, Ca1, Ca2, Cp1, Cp2, AxCd1, AxCd2, AxCa1, AxCa2, AxCp1, AxCp2, JAxCd1, JAxCd2, JAxCa1, JAxCa2, JAxCp1, JAxCp2 ! tmp coefs real(ReKi) :: F_B(6, numNodes), F_BF(6, numNodes), F_WMG(6, numNodes) + + INTEGER :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'WriteSummaryFile' + ! Initialize data errStat = ErrID_None errMsg = "" + + IF ( UnSum <= 0 ) RETURN ! can't write to the file (no summary file requested) + + ExtBuoyancy = 0.0 totalFillMass = 0.0 totalDisplVol = 0.0 @@ -594,28 +579,26 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no ! Create identity matrix CALL EYE(ident,errStat,errMsg) - IF ( UnSum > 0 ) THEN - do j = 1, numMembers - - mem = members(j) - totalVol = totalVol + mem%Vouter - totalMGVol = totalMGVol + mem%Vouter - mem%Vinner - totalDisplVol = totalDisplVol + mem%Vsubmerged - totalFillVol = totalFillVol + mem%Vballast + do j = 1, numMembers + mem = members(j) + totalVol = totalVol + mem%Vouter + totalMGVol = totalMGVol + mem%Vouter - mem%Vinner + totalDisplVol = totalDisplVol + mem%Vsubmerged + totalFillVol = totalFillVol + mem%Vballast - ! IF ( node2%Position(3) <= MSL2SWL .AND. node1%Position(3) >= -WtrDpth) totalDisplVol = totalDisplVol + elementVol + ! IF ( node2%Position(3) <= MSL2SWL .AND. node1%Position(3) >= -WtrDpth) totalDisplVol = totalDisplVol + elementVol - do i = 1, mem%NElements - totalMGMass = totalMGMass + mem%m_mg_l(i) - totalMGMass = totalMGMass + mem%m_mg_u(i) - end do - do i = 1, mem%NElements+1 - F_B (:,mem%NodeIndx(i)) = F_B (:,mem%NodeIndx(i)) + m%memberLoads(j)%F_B (:,i) - F_BF (:,mem%NodeIndx(i)) = F_BF (:,mem%NodeIndx(i)) + m%memberLoads(j)%F_BF (:,i) - F_WMG(:,mem%NodeIndx(i)) = F_WMG(:,mem%NodeIndx(i)) + m%memberLoads(j)%F_WMG(:,i) - end do + do i = 1, mem%NElements + totalMGMass = totalMGMass + mem%m_mg_l(i) + totalMGMass = totalMGMass + mem%m_mg_u(i) end do + do i = 1, mem%NElements+1 + F_B (:,mem%NodeIndx(i)) = F_B (:,mem%NodeIndx(i)) + m%memberLoads(j)%F_B (:,i) + F_BF (:,mem%NodeIndx(i)) = F_BF (:,mem%NodeIndx(i)) + m%memberLoads(j)%F_BF (:,i) + F_WMG(:,mem%NodeIndx(i)) = F_WMG(:,mem%NodeIndx(i)) + m%memberLoads(j)%F_WMG(:,i) + end do + end do WRITE( UnSum, '(//)' ) @@ -634,35 +617,42 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no CALL MeshCreate( BlankMesh = WRP_Mesh & ,IOS = COMPONENT_INPUT & ,Nnodes = 1 & - ,errStat = errStat & - ,ErrMess = errMsg & + ,errStat = errStat2 & + ,ErrMess = errMsg2 & ,Force = .TRUE. & ,Moment = .TRUE. & ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ! Create the node on the mesh CALL MeshPositionNode (WRP_Mesh & , 1 & , (/0.0_ReKi, 0.0_ReKi, 0.0_ReKi/) & - , errStat & - , errMsg & + , errStat2 & + , errMsg2 & ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF ( errStat /= 0 ) RETURN + IF ( errStat >= AbortErrLev ) then + call cleanup() + RETURN + end if ! Create the mesh element CALL MeshConstructElement ( WRP_Mesh & , ELEMENT_POINT & - , errStat & - , errMsg & + , errStat2 & + , errMsg2 & , 1 & ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL MeshCommit ( WRP_Mesh & - , errStat & - , errMsg ) + , errStat2 & + , errMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF ( errStat /= ErrID_None ) RETURN ! we need the translation displacement mesh for loads transfer: CALL MeshCopy ( SrcMesh = WRP_Mesh & @@ -670,10 +660,15 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no , CtrlCode = MESH_SIBLING & , IOS = COMPONENT_INPUT & , TranslationDisp = .TRUE. & - , errStat = errStat & - , ErrMess = errMsg ) ! automatically sets DestMesh%RemapFlag = .TRUE. - - IF ( errStat /= ErrID_None ) RETURN + , errStat = errStat2 & + , ErrMess = errMsg2 ) ! automatically sets DestMesh%RemapFlag = .TRUE. + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + IF ( errStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + WRP_Mesh_position%TranslationDisp = 0.0 ! bjj: this is actually initialized in the ModMesh module, but I'll do it here anyway. WRP_Mesh%RemapFlag = .TRUE. @@ -706,10 +701,14 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no ! Transfer the loads from the distributed mesh to the (0,0,0) point mesh - CALL MeshMapCreate ( yMesh, WRP_Mesh, M_P_2_P, errStat, errMsg ) - !CALL CheckError( errStat, 'Message from MeshMapCreate HD_M_L_2_ED_P: '//NewLine//errMsg ) - CALL Transfer_Point_to_Point( yMesh, WRP_Mesh, M_P_2_P, errStat, errMsg, uMesh, WRP_Mesh_position ) + CALL MeshMapCreate ( yMesh, WRP_Mesh, M_P_2_P, errStat2, errMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF ( errStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + CALL Transfer_Point_to_Point( yMesh, WRP_Mesh, M_P_2_P, errStat2, errMsg2, uMesh, WRP_Mesh_position ); call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ExtBuoyancy(1:3) = WRP_Mesh%Force (:,1) ExtBuoyancy(4:6) = WRP_Mesh%Moment(:,1) @@ -739,7 +738,7 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no END DO ! DO J IntBuoyancy = 0.0 - CALL Transfer_Point_to_Point( yMesh, WRP_Mesh, M_P_2_P, errStat, errMsg, uMesh, WRP_Mesh_position ) + CALL Transfer_Point_to_Point( yMesh, WRP_Mesh, M_P_2_P, errStat2, errMsg2, uMesh, WRP_Mesh_position ); call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IntBuoyancy(1:3) = WRP_Mesh%Force(:,1) IntBuoyancy(4:6) = WRP_Mesh%Moment(:,1) @@ -767,12 +766,10 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no END DO ! DO J MG_Wt = 0.0 - CALL Transfer_Point_to_Point( yMesh, WRP_Mesh, M_P_2_P, errStat, errMsg, uMesh, WRP_Mesh_position ) + CALL Transfer_Point_to_Point( yMesh, WRP_Mesh, M_P_2_P, errStat2, errMsg2, uMesh, WRP_Mesh_position ); call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) MG_Wt(1:3) = WRP_Mesh%Force(:,1) MG_Wt(4:6) = WRP_Mesh%Moment(:,1) ! - CALL MeshMapDestroy( M_P_2_P, errStat, errMsg ); IF ( errStat /= ErrID_None ) CALL WrScr(TRIM(errMsg)) - WRITE( UnSum, '(//)' ) WRITE( UnSum, '(A36)' ) 'Weight loads about ( 0.0, 0.0, 0.0 )' @@ -782,8 +779,6 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no WRITE( UnSum, '(A18,6(2X,ES20.6))') 'Marine Growth: ', MG_Wt(1), MG_Wt(2), MG_Wt(3), MG_Wt(4), MG_Wt(5), MG_Wt(6) - CALL MeshDestroy(WRP_Mesh, errStat, errMsg ); IF ( errStat /= ErrID_None ) CALL WrScr(TRIM(errMsg)) - CALL MeshDestroy(WRP_Mesh_position, errStat, errMsg ); IF ( errStat /= ErrID_None ) CALL WrScr(TRIM(errMsg)) ! ! ! Write the header for this section WRITE( UnSum, '(//)' ) @@ -945,13 +940,22 @@ SUBROUTINE WriteSummaryFile( UnSum, g, MSL2SWL, WtrDpth, numJoints, numNodes, no END DO - END IF - + call cleanup() + +contains +!................................... + subroutine cleanup() + call MeshDestroy(WRP_Mesh, ErrStat2, ErrMsg2) + call MeshDestroy(WRP_Mesh_position, ErrStat2, ErrMsg2) + call MeshMapDestroy(M_P_2_P, ErrStat2, ErrMsg2) + + call Morison_DestroyNodeType(node1, ErrStat2, ErrMsg2) + call Morison_DestroyNodeType(node2, ErrStat2, ErrMsg2) + call Morison_DestroyMemberType(mem, ErrStat2, ErrMsg2) + end subroutine cleanup END SUBROUTINE WriteSummaryFile - - - +!---------------------------------------------------------------------------------------------------------------------------------- subroutine Morison_GenerateSimulationNodes( MSL2SWL, numJoints, inpJoints, numMembers, inpMembers, numNodes, nodes, errStat, errMsg ) ! This subdivides a Morison member according to its maximum desired ! element length (MDivSize), allocating the member's arrays, and @@ -989,7 +993,7 @@ subroutine Morison_GenerateSimulationNodes( MSL2SWL, numJoints, inpJoints, numMe j1 = inpMembers(I)%MJointID1Indx j2 = inpMembers(I)%MJointID2Indx call GetDistance(inpJoints(j1)%Position, inpJoints(j2)%Position, memLength) - if ( EqualRealNos(memLength, 0.0_ReKi) )then + if ( EqualRealNos(memLength, 0.0_ReKi) ) then errMsg = ' Input file member with ID: '//trim(num2lstr(inpMembers(i)%MemberID))//' must have length greater than zero.' errStat = ErrID_Fatal return @@ -1004,8 +1008,8 @@ subroutine Morison_GenerateSimulationNodes( MSL2SWL, numJoints, inpJoints, numMe end do ! Allocate nodes array - allocate ( nodes(maxNodes), STAT = errStat ) - if ( errStat /= 0 ) then + allocate ( nodes(maxNodes), STAT = errStat2 ) + if ( errStat2 /= 0 ) then errMsg = ' Error allocating space for Nodes array for Morison Module.' errStat = ErrID_Fatal return @@ -1117,10 +1121,9 @@ END SUBROUTINE SetDepthBasedCoefs !==================================================================================================== -!SUBROUTINE SetExternalHydroCoefs SUBROUTINE SetExternalHydroCoefs( MSL2SWL, MCoefMod, MmbrCoefIDIndx, SimplCd, SimplCdMG, SimplCa, SimplCaMG, SimplCp, & - SimplCpMG, SimplAxCd, SimplAxCdMG, SimplAxCa, SimplAxCaMG, SimplAxCp, SimplAxCpMG, CoefMembers, & - NCoefDpth, CoefDpths, numNodes, nodes, member ) + SimplCpMG, SimplAxCd, SimplAxCdMG, SimplAxCa, SimplAxCaMG, SimplAxCp, SimplAxCpMG, SimplMCF, CoefMembers, & + NCoefDpth, CoefDpths, nodes, member ) ! This private subroutine generates the Cd, Ca, Cp, CdMG, CaMG and CpMG coefs for the member based on ! the input data. !---------------------------------------------------------------------------------------------------- @@ -1139,16 +1142,15 @@ SUBROUTINE SetExternalHydroCoefs( MSL2SWL, MCoefMod, MmbrCoefIDIndx, SimplCd, S real(ReKi), intent(in ) :: SimplAxCaMG real(ReKi), intent(in ) :: SimplAxCp real(ReKi), intent(in ) :: SimplAxCpMG + logical, intent(in ) :: SimplMCF type(Morison_CoefMembers), allocatable, intent(in ) :: CoefMembers(:) integer(IntKi), intent(in ) :: NCoefDpth type(Morison_CoefDpths), allocatable, intent(in ) :: CoefDpths(:) - integer(IntKi), intent(in ) :: numNodes type(Morison_NodeType), allocatable, intent(in ) :: nodes(:) type(Morison_MemberType), intent(inout) :: member - type(Morison_NodeType) :: node, node1, node2 - integer(IntKi) :: i, j - real(ReKi) :: s, Cd, CdMG, Ca, CaMG, Cp, CpMG, AxCa, AxCp, AxCaMG, AxCpMG + integer(IntKi) :: i + real(ReKi) :: s select case ( MCoefMod ) @@ -1170,13 +1172,13 @@ SUBROUTINE SetExternalHydroCoefs( MSL2SWL, MCoefMod, MmbrCoefIDIndx, SimplCd, S member%AxCp (i) = SimplAxCp end if end do - + member%PropMCF = SimplMCF CASE (2) ! Depth-based model: coefficients are set using depth-based table data do i = 1, member%NElements + 1 CALL SetDepthBasedCoefs( nodes(member%NodeIndx(i))%Position(3)+MSL2SWL, member%tMG(i), NCoefDpth, CoefDpths, member%Cd(i), member%Ca(i), & member%Cp(i), member%AxCd(i), member%AxCa(i), member%AxCp(i) ) end do - + member%PropMCF = CoefDpths(1)%DpthMCF CASE (3) ! Member-based model: coefficients set using member-specific coefficient tables do i = 1, member%NElements + 1 ! Pull member end-node data from the tables and then linearly interpolate it onto the interior member nodes @@ -1197,11 +1199,12 @@ SUBROUTINE SetExternalHydroCoefs( MSL2SWL, MCoefMod, MmbrCoefIDIndx, SimplCd, S member%AxCp (i) = CoefMembers(MmbrCoefIDIndx)%MemberAxCp1 *(1-s) + CoefMembers(MmbrCoefIDIndx)%MemberAxCp2 *s end if end do + member%propMCF = CoefMembers(MmbrCoefIDIndx)%MemberMCF end select end subroutine SetExternalHydroCoefs - +!---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE SetNodeMG( numMGDepths, MGDepths, node, MSL2SWL, tMG, MGdensity ) ! sets the margine growth thickness of a single node (previously all nodes) INTEGER, INTENT( IN ) :: numMGDepths @@ -1211,7 +1214,7 @@ SUBROUTINE SetNodeMG( numMGDepths, MGDepths, node, MSL2SWL, tMG, MGdensity ) real(ReKi), intent( inout ) :: tMG real(ReKi), intent( inout ) :: MGdensity - INTEGER :: I, J + INTEGER :: J REAL(ReKi) :: z INTEGER :: indx1, indx2 REAL(ReKi) :: dd, s @@ -1258,8 +1261,7 @@ SUBROUTINE SetNodeMG( numMGDepths, MGDepths, node, MSL2SWL, tMG, MGdensity ) END SUBROUTINE SetNodeMG - - +!---------------------------------------------------------------------------------------------------------------------------------- subroutine AllocateMemberDataArrays( member, memberLoads, errStat, errMsg ) type(Morison_MemberType), intent (inout) :: member type(Morison_MemberLoads), intent (inout) :: memberLoads @@ -1317,6 +1319,8 @@ subroutine AllocateMemberDataArrays( member, memberLoads, errStat, errMsg ) call AllocAry( memberLoads%F_If , 6, member%NElements+1, 'memberLoads%F_If' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( memberLoads%F_WMG , 6, member%NElements+1, 'memberLoads%F_WMG' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( memberLoads%F_IMG , 6, member%NElements+1, 'memberLoads%F_IMG' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + + if (ErrStat >= AbortErrLev) return ! Initialize everything to zero member%NodeIndx = 0.0_ReKi @@ -1366,18 +1370,14 @@ subroutine AllocateMemberDataArrays( member, memberLoads, errStat, errMsg ) memberLoads%F_IMG = 0.0_ReKi end subroutine AllocateMemberDataArrays - -subroutine FlipMemberNodeData( member, nodes, doSwap, errStat, errMsg ) +!---------------------------------------------------------------------------------------------------------------------------------- +subroutine FlipMemberNodeData( member, nodes, doSwap) type(Morison_MemberType), intent (inout) :: member type(Morison_NodeType), intent (in ) :: nodes(:) logical, intent ( out) :: doSwap - integer(IntKi), intent ( out) :: errStat ! returns a non-zero value when an error occurs - character(*), intent ( out) :: errMsg ! Error message if errStat /= ErrID_None integer(IntKi) :: i, j1, j2, numMemNodes, indx - errStat = ErrID_None - errMSg = '' doSwap = .FALSE. numMemNodes = member%NElements + 1 @@ -1411,7 +1411,7 @@ subroutine FlipMemberNodeData( member, nodes, doSwap, errStat, errMsg ) end if end subroutine FlipMemberNodeData - +!---------------------------------------------------------------------------------------------------------------------------------- subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIndx, MmbrFilledIDIndx, propSet1, propSet2, InitInp, errStat, errMsg ) real(ReKi), intent (in ) :: MSL2SWL real(ReKi), intent (in ) :: gravity @@ -1427,8 +1427,7 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn integer(IntKi) :: N, i real(ReKi) :: WtrDepth,s, dl - type(Morison_NodeType) :: node1, node2 - real(ReKi) :: vec(3), vecLen + real(ReKi) :: vec(3) real(ReKi) :: memLength real(ReKi) :: Za real(ReKi) :: Zb @@ -1462,7 +1461,7 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn member%kkt = matmul(transpose(tk),tk) call Eye(Imat,errStat,errMsg) member%Ak = Imat - member%kkt - phi = acos(vec(3)/memLength) ! incline angle + phi = acos( max(-1.0_ReKi, min(1.0_ReKi, vec(3)/memLength) ) ) ! incline angle sinPhi = sin(phi) cosPhi = cos(phi) member%cosPhi_ref = cosPhi @@ -1487,13 +1486,40 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn end do call SetExternalHydroCoefs( MSL2SWL, MCoefMod, MmbrCoefIDIndx, InitInp%SimplCd, InitInp%SimplCdMG, InitInp%SimplCa, InitInp%SimplCaMG, InitInp%SimplCp, & - InitInp%SimplCpMG, InitInp%SimplAxCd, InitInp%SimplAxCdMG, InitInp%SimplAxCa, InitInp%SimplAxCaMG, InitInp%SimplAxCp, InitInp%SimplAxCpMG, InitInp%CoefMembers, & - InitInp%NCoefDpth, InitInp%CoefDpths, InitInp%NNodes, InitInp%Nodes, member ) + InitInp%SimplCpMG, InitInp%SimplAxCd, InitInp%SimplAxCdMG, InitInp%SimplAxCa, InitInp%SimplAxCaMG, InitInp%SimplAxCp, InitInp%SimplAxCpMG, InitInp%SimplMCF, & + InitInp%CoefMembers, InitInp%NCoefDpth, InitInp%CoefDpths, InitInp%Nodes, member ) ! calculate reference incline angle and heading, and related trig values. Note: members are straight to start Za = InitInp%Nodes(member%NodeIndx(1 ))%Position(3) Zb = InitInp%Nodes(member%NodeIndx(N+1))%Position(3) + ! Check if members with the MacCamy-Fuchs diffraction model and not modeled by potential flow satisfy the necessary criteria. + IF ( member%PropMCF .AND. ( .NOT. member%PropPot )) THEN + ! Check if surface piercing + IF ( Za*Zb > 0 ) THEN ! Two end joints of the member on the same side of the SWL + CALL SetErrStat(ErrID_Fatal, 'MacCamy-Fuchs members must be surface piercing. This is not true for Member ID '//trim(num2lstr(member%MemberID)), errStat, errMsg, 'SetMemberProperties' ) + RETURN + END IF + ! Check inclination + If ( ABS(phi) .GE. 0.174533 ) THEN ! If inclination from vertical is greater than 10 deg + CALL SetErrStat(ErrID_Fatal, 'MacCamy-Fuchs members must be within 10 degrees from vertical. This is not true for Member ID '//trim(num2lstr(member%MemberID)), errStat, errMsg, 'SetMemberProperties' ) + RETURN + END IF + ! Check radius + DO i = 1, member%NElements+1 + IF ( (member%RMG(i) .GT. 1.1_ReKi*REAL(0.5_SiKi*InitInp%MCFD)) .OR. (member%RMG(i) .LT. 0.9_ReKi*REAL(0.5_SiKi*InitInp%MCFD)) ) THEN + ! Error because MacCamy-Fuchs members must have a diameter within +/-10% of MCFD specified in seastate. + CALL SetErrStat(ErrID_Fatal, 'MacCamy-Fuchs members must have a diameter within +/-10% of MCFD specified in the SeaState input file. This is not true for Member ID '//trim(num2lstr(member%MemberID)), errStat, errMsg, 'SetMemberProperties' ) + RETURN + END IF + END DO + ! Check draft-to-radius ratio + IF ( (-InitInp%Nodes(member%NodeIndx(1))%Position(3)) < 0.5_SiKi*InitInp%MCFD ) THEN + CALL SetErrStat(ErrID_Fatal, 'Initial draft of MacCamy-Fuchs members should be at least as large as their radius. This is not true for Member ID '//trim(num2lstr(member%MemberID)), errStat, errMsg, 'SetMemberProperties' ) + RETURN + END IF + END IF + ! find fill location of member (previously in SetElementFillProps) member%MmbrFilledIDIndx = MmbrFilledIDIndx ! Set this to the parameter version of this member data if ( MmbrFilledIDIndx > 0 ) then @@ -1537,7 +1563,7 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn call SetErrStat(ErrID_Fatal, 'The lower end-plate of a member must not cross the water plane. This is not true for Member ID '//trim(num2lstr(member%MemberID)), errStat, errMsg, 'SetMemberProperties' ) end if - if ( ( Za < -WtrDepth .and. Zb >= -WtrDepth ) .and. ( phi > 10.0*d2r .or. abs((member%RMG(N+1) - member%RMG(i))/member%RefLength)>0.1 ) ) then + if ( ( Za < -WtrDepth .and. Zb >= -WtrDepth ) .and. ( phi > 10.0*d2r .or. abs((member%RMG(N+1) - member%RMG(1))/member%RefLength)>0.1 ) ) then call SetErrStat(ErrID_Fatal, 'A member which crosses the seabed must not be inclined more than 10 degrees from vertical or have a taper larger than 0.1. This is not true for Member ID '//trim(num2lstr(member%MemberID)), errStat, errMsg, 'SetMemberProperties' ) end if @@ -1639,7 +1665,7 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn Lmid = member%FillFSLoc - Za Rmidin = member%Rin(i)+(Lmid/(Zb-Za))*(member%Rin(i+1)-member%Rin(i)) ! radius of member interior at middle of segment, where division occurs CALL FloodedBallastPartSegment(member%Rin(i ), Rmidin, Lmid, member%FillDens, Vballast_l, member%m_fb_l(i), member%h_cfb_l(i), member%I_lfb_l(i), member%I_rfb_l(i)) ! get precomputed quantities for lower half-segment - CALL FloodedBallastPartSegment(member%Rin(i+1), Rmidin, -Lmid, 0.0, Vballast_u, member%m_fb_u(i), member%h_cfb_u(i), member%I_lfb_u(i), member%I_rfb_u(i)) ! get precomputed quantities for upper half-segment + CALL FloodedBallastPartSegment(member%Rin(i+1), Rmidin, -Lmid, 0.0_ReKi, Vballast_u, member%m_fb_u(i), member%h_cfb_u(i), member%I_lfb_u(i), member%I_rfb_u(i)) ! get precomputed quantities for upper half-segment else if (i == member%i_floor) then ! Hopefully we don't have a partially filled element crossing the seabed. @@ -1667,16 +1693,16 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn if (Zb < -WtrDepth) then ! fully buried element, do not add these volume contributions to totals - else if (0.0 > Zb) then + else if (0.0 >= Zb) then ! Bug fix per OpenFAST issue #844 GJH 2/3/2022 ! fully submerged elements. ! NOTE: For an element which is fractionaly in the seabed, the entire element volume is added to totals member%Vinner = member%Vinner + Vinner_l + Vinner_u member%Vouter = member%Vouter + Vouter_l + Vouter_u member%Vsubmerged = member%Vsubmerged + Vouter_l + Vouter_u - else if ((0.0 > Za) .AND. (0.0 <= Zb)) then - if (i == 1) then - call SetErrStat(ErrID_Fatal, 'The lowest element of a member must not cross the free surface. This is true for MemberID '//trim(num2lstr(member%MemberID)), errStat, errMsg, 'SetMemberProperties') - end if + else if ((0.0 > Za) .AND. (0.0 < Zb)) then ! Bug fix per OpenFAST issue #844 GJH 2/3/2022 + ! if (i == 1) then + ! call SetErrStat(ErrID_Fatal, 'The lowest element of a member must not cross the free surface. This is true for MemberID '//trim(num2lstr(member%MemberID)), errStat, errMsg, 'SetMemberProperties') + ! end if ! partially submerged element member%Vinner = member%Vinner + Vinner_l + Vinner_u @@ -1762,7 +1788,7 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn end subroutine SetMemberProperties - +!---------------------------------------------------------------------------------------------------------------------------------- subroutine SetupMembers( InitInp, p, m, errStat, errMsg ) type(Morison_InitInputType), intent (inout) :: InitInp type(Morison_ParameterType), intent (inout) :: p @@ -1781,15 +1807,15 @@ subroutine SetupMembers( InitInp, p, m, errStat, errMsg ) ! allocate and copy in the InpMembers array p%NMembers = InitInp%NMembers - ALLOCATE ( p%Members(p%NMembers), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN + ALLOCATE ( p%Members(p%NMembers), STAT = errStat2 ) + IF ( errStat2 /= 0 ) THEN errMsg = ' Error allocating space for the members array.' errStat = ErrID_Fatal RETURN END IF - ALLOCATE ( m%MemberLoads(p%NMembers), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN + ALLOCATE ( m%MemberLoads(p%NMembers), STAT = errStat2 ) + IF ( errStat2 /= 0 ) THEN errMsg = ' Error allocating space for the memberLoads array.' errStat = ErrID_Fatal RETURN @@ -1801,13 +1827,16 @@ subroutine SetupMembers( InitInp, p, m, errStat, errMsg ) p%Members(i)%dl = InitInp%InpMembers(i)%dl p%Members(i)%NElements = InitInp%InpMembers(i)%NElements p%Members(i)%PropPot = InitInp%InpMembers(i)%PropPot + ! p%Members(i)%MCF = InitInp%InpMembers(i)%MCF - call AllocateMemberDataArrays(p%Members(i), m%MemberLoads(i), errStat2, errMsg2) ; call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'SetupMembers') + call AllocateMemberDataArrays(p%Members(i), m%MemberLoads(i), errStat2, errMsg2) + call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'SetupMembers') + if (ErrStat >= AbortErrLev) return p%Members(i)%NodeIndx = InitInp%InpMembers(i)%NodeIndx ! now that the parameter version is allocated, copy the data from the InitInp version ! only reorder the nodes if the end nodes do not follow the necessary coordinate ordering rules - call FlipMemberNodeData(p%Members(i), InitInp%nodes, doSwap, errStat2, errMsg2) ; call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'SetupMembers') + call FlipMemberNodeData(p%Members(i), InitInp%nodes, doSwap) if (doSwap) then prop2Indx = InitInp%InpMembers(I)%MPropSetID1Indx prop1Indx = InitInp%InpMembers(I)%MPropSetID2Indx @@ -1816,7 +1845,9 @@ subroutine SetupMembers( InitInp, p, m, errStat, errMsg ) prop2Indx = InitInp%InpMembers(I)%MPropSetID2Indx end if ! Now populate the various member data arrays using the HydroDyn input file data - call SetMemberProperties( InitInp%MSL2SWL, InitInp%Gravity, p%Members(i), InitInp%InpMembers(i)%MCoefMod, InitInp%InpMembers(i)%MmbrCoefIDIndx, InitInp%InpMembers(i)%MmbrFilledIDIndx, InitInp%MPropSets(prop1Indx), InitInp%MPropSets(prop2Indx), InitInp, errStat2, errMsg2 ) ; call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'SetupMembers') + call SetMemberProperties( InitInp%MSL2SWL, InitInp%Gravity, p%Members(i), InitInp%InpMembers(i)%MCoefMod, InitInp%InpMembers(i)%MmbrCoefIDIndx, InitInp%InpMembers(i)%MmbrFilledIDIndx, InitInp%MPropSets(prop1Indx), InitInp%MPropSets(prop2Indx), InitInp, errStat2, errMsg2 ) + call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'SetupMembers') + if (ErrStat >= AbortErrLev) return end do end subroutine SetupMembers @@ -1838,7 +1869,7 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In TYPE(Morison_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; !! only the output mesh is initialized) TYPE(Morison_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables - REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: the rate that + REAL(DbKi), INTENT(IN ) :: Interval !< Coupling interval in seconds: the rate that !! (1) Morison_UpdateStates() is called in loose coupling & !! (2) Morison_UpdateDiscState() is called in tight coupling. !! Input is the suggested time from the glue code; @@ -1847,24 +1878,14 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In TYPE(Morison_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine INTEGER(IntKi), INTENT( OUT) :: errStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: errMsg !< Error message if errStat /= ErrID_None + + character(*), parameter :: RoutineName = 'Morison_Init' TYPE(Morison_MemberType) :: member ! the current member - type(Morison_MemberInputType) :: inpMember ! current input file-based member - INTEGER :: N, i, j, count - REAL(ReKi) :: dl - REAL(ReKi) :: vec(3),v2D(3,1), pos(3) - REAL(ReKi) :: phi ! member tilt angle - REAL(ReKi) :: beta ! member tilt heading - REAL(ReKi) :: cosPhi - REAL(ReKi) :: sinPhi - REAL(ReKi) :: tanPhi - REAL(ReKi) :: sinBeta - REAL(ReKi) :: cosBeta - REAL(ReKi) :: Za - REAL(ReKi) :: Zb - real(ReKi) :: memLength ! reference member length - real(ReKi) :: An(3), An_drag(3), Vn(3), I_n(3), Z0, sgn, Amag, Amag_drag, Vmag, Imag, Ir_MG_end, Il_MG_end, R_I(3,3), IRl_mat(3,3), tMG, MGdens, F_I(3), F_DP(3), af(3), VnDotAf - integer(IntKi) :: MemberEndIndx, ncommon + INTEGER :: i, j, k + REAL(ReKi) :: v2D(3,1), pos(3) + real(ReKi) :: An(3), An_drag(3), Vn(3), I_n(3), sgn, Amag, Amag_drag, Vmag, Imag, Ir_MG_end, Il_MG_end, R_I(3,3), IRl_mat(3,3), tMG, MGdens + integer(IntKi) :: MemberEndIndx INTEGER, ALLOCATABLE :: commonNodeLst(:) LOGICAL, ALLOCATABLE :: usedJointList(:) integer(IntKi) :: errStat2 ! returns a non-zero value when an error occurs @@ -1876,9 +1897,6 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In errMsg = "" - - ! Initialize the NWTC Subroutine Library - CALL NWTC_Init( ) ! Define parameters here: p%DT = Interval @@ -1890,31 +1908,47 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In p%NStepWave = InitInp%NStepWave p%NumOuts = InitInp%NumOuts p%NMOutputs = InitInp%NMOutputs ! Number of members to output [ >=0 and <10] - p%OutSwtch = InitInp%OutSwtch p%MSL2SWL = InitInp%MSL2SWL - - ALLOCATE ( p%MOutLst(p%NMOutputs), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN - errMsg = ' Error allocating space for MOutLst array.' - errStat = ErrID_Fatal + p%WaveDisp = InitInp%WaveDisp + p%AMMod = InitInp%AMMod + p%WaveStMod = InitInp%WaveStMod + + ! Only compute added-mass force up to the free surface if wave stretching is enabled + IF ( p%WaveStMod .EQ. 0_IntKi ) THEN + ! Setting AMMod to zero just in case. Probably redundant. + p%AMMod = 0_IntKi + END IF + + p%WaveElev1 => InitInp%WaveElev1 + IF (associated(InitInp%WaveElev2)) THEN + p%WaveElev2 => InitInp%WaveElev2 + END IF + + ALLOCATE ( p%MOutLst(p%NMOutputs), STAT = errStat2 ) + IF ( errStat2 /= 0 ) THEN + call SetErrStat(ErrID_Fatal,'Error allocating space for MOutLst array.', ErrStat, ErrMsg, RoutineName) RETURN END IF - IF (ALLOCATED(InitInp%MOutLst) ) & - p%MOutLst = InitInp%MOutLst ! Member output data + IF (ALLOCATED(InitInp%MOutLst) ) then + do i=1,size(InitInp%MOutLst) + call Morison_CopyMOutput( InitInp%MOutLst(i), p%MOutLst(i), MESH_NEWCOPY, ErrStat2, ErrMsg2 ) ! Member output data + call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'Morison_Init' ) + end do + end if p%NJOutputs = InitInp%NJOutputs ! Number of joints to output [ >=0 and <10] - ALLOCATE ( p%JOutLst(p%NJOutputs), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN - errMsg = ' Error allocating space for JOutLst array.' - errStat = ErrID_Fatal + ALLOCATE ( p%JOutLst(p%NJOutputs), STAT = errStat2 ) + IF ( errStat2 /= 0 ) THEN + call SetErrStat(ErrID_Fatal,'Error allocating space for JOutLst array.', ErrStat, ErrMsg, RoutineName) RETURN END IF IF (ALLOCATED(InitInp%JOutLst) ) & p%JOutLst = InitInp%JOutLst ! Joint output data ! ----------------------- set up the members ----------------------- - call SetupMembers( InitInp, p, m, errStat2, errMsg2 ) ; call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'Morison_Init' ) + call SetupMembers( InitInp, p, m, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) if ( errStat >= AbortErrLev ) return !------------------------ set up joint (or joint-node) properties -- @@ -1922,27 +1956,31 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In InitInp%Nodes(i)%JAxCd = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCd InitInp%Nodes(i)%JAxCa = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCa InitInp%Nodes(i)%JAxCp = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCp - InitInp%Nodes(i)%JAxCd = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCd - InitInp%Nodes(i)%JAxCa = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCa - InitInp%Nodes(i)%JAxCp = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCp + + !InitInp%Nodes(i)%JAxCd = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCd + !InitInp%Nodes(i)%JAxCa = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCa + !InitInp%Nodes(i)%JAxCp = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxCp + + InitInp%Nodes(i)%JAxFDMod = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxFDMod + InitInp%Nodes(i)%JAxVnCOff = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxVnCOff + InitInp%Nodes(i)%JAxFDLoFSc = InitInp%AxialCoefs(InitInp%InpJoints(i)%JointAxIDIndx)%AxFDLoFSc + ! Redundant work (these are already assigned to the member data arrays, ! but is needed on the joint data because we report the tMG, and MGDensity at each Joint node in the Summary File call SetNodeMG( InitInp%NMGDepths, InitInp%MGDepths, InitInp%Nodes(i), InitInp%MSL2SWL, InitInp%Nodes(i)%tMG, InitInp%Nodes(i)%MGDensity ) end do - ! allocate and copy in node-based load and hydrodynamic arrays - call AllocateNodeLoadVariables(InitInp, p, m, p%NNodes, errStat, errMsg ) - call MOVE_ALLOC( InitInp%nodeInWater, p%nodeInWater ) - - + ! allocate and copy in node-based load and hydrodynamic arrays + call AllocateNodeLoadVariables(InitInp, p, m, p%NNodes, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return - ! Create the input and output meshes associated with loads at the nodes - + ! Create the input and output meshes associated with loads at the nodes CALL MeshCreate( BlankMesh = u%Mesh & ,IOS = COMPONENT_INPUT & ,Nnodes = p%NNodes & ,errStat = errStat & - ,ErrMess = errMsg & + ,ErrMess = errMsg2 & ,TranslationDisp = .TRUE. & ,Orientation = .TRUE. & ,TranslationVel = .TRUE. & @@ -1950,7 +1988,8 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ,TranslationAcc = .TRUE. & ,RotationAcc = .TRUE. ) - IF ( errStat >= AbortErrLev ) RETURN + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return !TODO: Do we still need this for visualization? How is it used? GJH 3/26/2020 Actually need a line mesh to properly visualize the members !CALL AllocAry( Morison_Rad, numDistribMarkers, 'Morison_Rad', errStat, errMsg) @@ -1965,10 +2004,11 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In CALL MeshPositionNode (u%Mesh & , i & , pos & ! this info comes from HydroDyn input file and the subroutine: Morison_GenerateSimulationNodes - , errStat & - , errMsg & + , errStat2 & + , errMsg2 & ) !, transpose(p%Nodes(I)%R_LToG) ) - IF ( errStat /= 0 ) RETURN + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return !TODO: Do we still need this for visualization? How is it used? GJH 3/26/2020 Actually need a line mesh to properly visualize the members ! Morison_Rad(count) = p%Nodes(I)%R ! set this for FAST visualization @@ -1979,20 +2019,23 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In CALL MeshConstructElement (u%Mesh & , ELEMENT_POINT & - , errStat & - , errMsg & + , errStat2 & + , errMsg2 & , i & ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return + END DO CALL MeshCommit ( u%Mesh & - , errStat & - , errMsg ) + , errStat2 & + , errMsg2 ) - IF ( errStat /= 0 ) THEN - RETURN - END IF + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return + ! Initialize the inputs DO I=1,u%Mesh%Nnodes @@ -2010,39 +2053,44 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ,DestMesh = y%Mesh & ,CtrlCode = MESH_SIBLING & ,IOS = COMPONENT_OUTPUT & - ,errStat = errStat & - ,ErrMess = errMsg & + ,errStat = errStat2 & + ,ErrMess = errMsg2 & ,Force = .TRUE. & ,Moment = .TRUE. ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return u%Mesh%RemapFlag = .TRUE. y%Mesh%RemapFlag = .TRUE. ! Define initial system states here: x%DummyContState = 0 - xd%DummyDiscState = 0 + !xd%DummyDiscState = 0 + ALLOCATE ( xd%V_rel_n_FiltStat(p%NJoints), STAT = ErrStat ) + IF ( ErrStat /= ErrID_None ) THEN + ErrMsg = ' Error allocating space for V_rel_n_FiltStat array.' + ErrStat = ErrID_Fatal + RETURN + END IF + xd%V_rel_n_FiltStat = 0.0_ReKi + z%DummyConstrState = 0 OtherState%DummyOtherState = 0 m%LastIndWave = 1 - ! IF ( p%OutSwtch > 0 ) THEN @mhall: I think the below need to be allocated in all cases - - ! allocate and initialize joint-specific arrays - ALLOCATE ( commonNodeLst(10), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN - errMsg = ' Error allocating space for the commonNodeLst array.' - errStat = ErrID_Fatal + ALLOCATE ( commonNodeLst(10), STAT = errStat2 ) + IF ( errStat2 /= 0 ) THEN + call SetErrStat(ErrID_Fatal,'Error allocating space for commonNodeLst array.', ErrStat, ErrMsg, RoutineName) RETURN END IF commonNodeLst = -1 - ALLOCATE ( usedJointList(p%NJoints), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN - errMsg = ' Error allocating space for the UsedJointList array.' - errStat = ErrID_Fatal + ALLOCATE ( usedJointList(p%NJoints), STAT = errStat2 ) + IF ( errStat2 /= 0 ) THEN + call SetErrStat(ErrID_Fatal,'Error allocating space for UsedJointList array.', ErrStat, ErrMsg, RoutineName) RETURN END IF usedJointList = .FALSE. @@ -2158,6 +2206,15 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In END IF ! InitInp%InpJoints(i)%Position(3) >= -p%WtrDpth + p%DragMod_End (i) = InitInp%Nodes(i)%JAxFDMod + IF ( InitInp%Nodes(i)%JAxVnCOff .LE. 0.0_ReKi) THEN + p%VRelNFiltConst(i) = 1.0_ReKi + p%DragLoFSc_End (i) = 1.0_ReKi + ELSE + p%VRelNFiltConst(i) = exp(-2.0*Pi*InitInp%Nodes(i)%JAxVnCOff * p%DT) + p%DragLoFSc_End (i) = InitInp%Nodes(i)%JAxFDLoFSc + END IF + END DO ! looping through nodes that are joints, i ! Define initial guess for the system inputs here: @@ -2165,32 +2222,68 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ! Define system output initializations (set up mesh) here: ! Define initialization-routine output here: - ! Initialize the outputs - IF ( p%OutSwtch > 0) then !@mhall: moved this "if" to after allocations - CALL MrsnOUT_Init( InitInp, y, p, InitOut, errStat, errMsg ) - IF ( errStat > AbortErrLev ) RETURN - - ! Determine if we need to perform output file handling + ! Setup the 4D grid information for the Interpolatin Module + p%seast_interp_p = InitInp%seast_interp_p + + ! Setup 3D SWL grids needed for wave stretching + + IF (p%WaveStMod > 0_IntKi) THEN ! Wave stretching enabled - IF ( p%OutSwtch == 1 .OR. p%OutSwtch == 3 ) THEN - CALL MrsnOUT_OpenOutput( Morison_ProgDesc%Name, TRIM(InitInp%OutRootName)//'.HD', p, InitOut, errStat, errMsg ) - IF ( errStat > AbortErrLev ) RETURN + ! Allocate variables for the wave dynamics at the SWL - Needed for wave stretching + ALLOCATE ( p%WaveDynP0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3)), STAT=errStat2 ) + IF ( errStat2 /= 0 ) call SetErrStat(ErrID_Fatal,'Error allocating space for p%WaveDynP0.', ErrStat, ErrMsg, RoutineName) + ALLOCATE ( p%WaveVel0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat2 ) + IF ( errStat2 /= 0 ) call SetErrStat(ErrID_Fatal,'Error allocating space for p%WaveVel0.', ErrStat, ErrMsg, RoutineName) + ALLOCATE ( p%WaveAcc0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat2 ) + IF ( errStat2 /= 0 ) call SetErrStat(ErrID_Fatal,'Error allocating space for p%WaveAcc0.', ErrStat, ErrMsg, RoutineName) + ALLOCATE ( p%WaveAccMCF0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errstat2 ) + IF ( errStat2 /= 0 ) call SetErrStat(ErrID_Fatal,'Error allocating space for p%WaveAccMCF0.', ErrStat, ErrMsg, RoutineName) + + if (ErrStat >= AbortErrLev) RETURN + + ! Copy the wave data at the SWL + DO i = 1,p%seast_interp_p%n(2) + DO j = 1,p%seast_interp_p%n(3) + p%WaveDynP0(:,i,j) = p%WaveDynP(:,i,j,p%seast_interp_p%n(4)) + DO k = 1,3 + p%WaveVel0(:,i,j,k) = p%WaveVel(:,i,j,p%seast_interp_p%n(4),k) + p%WaveAcc0(:,i,j,k) = p%WaveAcc(:,i,j,p%seast_interp_p%n(4),k) + END DO + END DO + END DO + + ! Also copy the MacCamy-Fuchs scaled wave acceleration at the SWL if available + IF (ASSOCIATED(p%WaveAccMCF)) THEN + DO i = 1,p%seast_interp_p%n(2) + DO j = 1,p%seast_interp_p%n(3) + DO k = 1,3 + p%WaveAccMCF0(:,i,j,k) = p%WaveAccMCF(:,i,j,p%seast_interp_p%n(4),k) + END DO + END DO + END DO END IF - - END IF + + END IF + + ! Initialize the outputs + CALL MrsnOUT_Init( InitInp, y, p, InitOut, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return ! We will call CalcOutput to compute the loads for the initial reference position ! Then we can use the computed load components in the Summary File ! NOTE: Morison module has no states, otherwise we could no do this. GJH - call Morison_CalcOutput(0.0_DbKi, u, p, x, xd, z, OtherState, y, m, errStat, errMsg ) + call Morison_CalcOutput(0.0_DbKi, u, p, x, xd, z, OtherState, y, m, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return - ! Write Summary information now that everything has been initialized. - CALL WriteSummaryFile( InitInp%UnSum, InitInp%Gravity, InitInp%MSL2SWL, InitInp%WtrDpth, InitInp%NJoints, InitInp%NNodes, InitInp%Nodes, p%NMembers, p%Members, & - p%NumOuts, p%OutParam, p%NMOutputs, p%MOutLst, p%NJOutputs, p%JOutLst, u%Mesh, y%Mesh, & - p, m, errStat, errMsg ) - IF ( errStat > AbortErrLev ) RETURN + ! Write Summary information to *HydroDyn* summary file now that everything has been initialized. + CALL WriteSummaryFile( InitInp%UnSum, InitInp%MSL2SWL, InitInp%NJoints, InitInp%NNodes, InitInp%Nodes, p%NMembers, p%Members, & + p%NumOuts, p%OutParam, p%MOutLst, p%JOutLst, u%Mesh, y%Mesh, p, m, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, RoutineName ) + if ( errStat >= AbortErrLev ) return !Contains: ! SUBROUTINE CleanUpInitOnErr @@ -2198,8 +2291,7 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ! END SUBROUTINE END SUBROUTINE Morison_Init - - +!---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE RodrigMat(a, R, errStat, errMsg) ! calculates rotation matrix R to rotate unit vertical vector to direction of input vector a @@ -2240,7 +2332,7 @@ SUBROUTINE RodrigMat(a, R, errStat, errMsg) END SUBROUTINE RodrigMat - +!---------------------------------------------------------------------------------------------------------------------------------- FUNCTION GetAlpha(R1,R2) ! calculates relative center of volume location for a (tapered) cylindrical element real(ReKi) :: GetAlpha @@ -2255,7 +2347,7 @@ FUNCTION GetAlpha(R1,R2) END FUNCTION GetAlpha - +!---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE AllocateNodeLoadVariables(InitInp, p, m, NNodes, errStat, errMsg ) TYPE(Morison_InitInputType), INTENT(IN ) :: InitInp ! Initialization inputs TYPE(Morison_ParameterType), INTENT(INOUT) :: p ! parameter variables @@ -2284,7 +2376,11 @@ SUBROUTINE AllocateNodeLoadVariables(InitInp, p, m, NNodes, errStat, errMsg ) !call AllocAry( m%F_IMG , 6, NNodes , 'm%F_IMG' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( m%FV , 3, NNodes , 'm%FV' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( m%FA , 3, NNodes , 'm%FA' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + call AllocAry( m%FAMCF , 3, NNodes , 'm%FAMCF' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( m%FDynP , NNodes , 'm%FDynP' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + call AllocAry( m%WaveElev , NNodes , 'm%WaveElev' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + call AllocAry( m%WaveElev1 , NNodes , 'm%WaveElev1' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + call AllocAry( m%WaveElev2 , NNodes , 'm%WaveElev2' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( p%An_End , 3, p%NJoints, 'p%An_End' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( p%DragConst_End, p%NJoints, 'p%DragConst_End', errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( m%F_I_End , 3, p%NJoints, 'm%F_I_End' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) @@ -2298,7 +2394,15 @@ SUBROUTINE AllocateNodeLoadVariables(InitInp, p, m, NNodes, errStat, errMsg ) call AllocAry( p%Mass_MG_End , p%NJoints, 'p%Mass_MG_End' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( p%AM_End , 3, 3, p%NJoints, 'p%AM_End' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) call AllocAry( p%DP_Const_End , 3, p%NJoints, 'p%DP_Const_End' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) - if (errStat == ErrID_Fatal) return + + call AllocAry( m%V_rel_n , p%NJoints, 'm%V_rel_n' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + call AllocAry( m%V_rel_n_HiPass , p%NJoints, 'm%V_rel_n_HiPass' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + + call AllocAry( p%DragMod_End , p%NJoints, 'p%DragMod_End' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + call AllocAry( p%DragLoFSc_End , p%NJoints, 'p%DragLoFSc_End' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + call AllocAry( p%VRelNFiltConst , p%NJoints, 'p%VRelNFiltConst' , errStat2, errMsg2); call SetErrStat(errStat2, errMsg2, errStat, errMsg, routineName) + + if (errStat >= AbortErrLev) return m%nodeInWater = 0 m%vrel = 0.0_ReKi @@ -2327,144 +2431,27 @@ SUBROUTINE AllocateNodeLoadVariables(InitInp, p, m, NNodes, errStat, errMsg ) p%F_WMG_End = 0.0 p%AM_End = 0.0 - allocate( p%WaveVel(0:p%NStepWave, p%NNodes, 3), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN - errMsg = ' Error allocating space for wave velocities array.' - errStat = ErrID_Fatal - RETURN - END IF - p%WaveVel = InitInp%WaveVel - - allocate( p%WaveAcc(0:p%NStepWave, p%NNodes, 3), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN - errMsg = ' Error allocating space for wave accelerations array.' - errStat = ErrID_Fatal - RETURN - END IF - p%WaveAcc = InitInp%WaveAcc - - allocate( p%WaveDynP(0:p%NStepWave, p%NNodes), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN - errMsg = ' Error allocating space for wave dynamic pressure array.' - errStat = ErrID_Fatal - RETURN - END IF - p%WaveDynP = InitInp%WaveDynP - - allocate( p%WaveTime(0:p%NStepWave), STAT = errStat ) - IF ( errStat /= ErrID_None ) THEN - errMsg = ' Error allocating space for wave time array.' - errStat = ErrID_Fatal - RETURN - END IF - p%WaveTime = InitInp%WaveTime + m%V_rel_n = 0.0_ReKi + m%V_rel_n_HiPass = 0.0_ReKi + + p%WaveVel => InitInp%WaveVel + p%WaveAcc => InitInp%WaveAcc + p%WaveDynP => InitInp%WaveDynP + p%WaveTime => InitInp%WaveTime + p%PWaveVel0 => InitInp%PWaveVel0 + p%PWaveAcc0 => InitInp%PWaveAcc0 + p%PWaveDynP0 => InitInp%PWaveDynP0 + p%WaveAccMCF => InitInp%WaveAccMCF + p%PWaveAccMCF0 => InitInp%PWaveAccMCF0 -END SUBROUTINE AllocateNodeLoadVariables - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is called at the end of the simulation. -SUBROUTINE Morison_End( u, p, x, xd, z, OtherState, y, m, errStat, errMsg ) -!.................................................................................................................................. - - TYPE(Morison_InputType), INTENT(INOUT) :: u !< System inputs - TYPE(Morison_ParameterType), INTENT(INOUT) :: p !< Parameters - TYPE(Morison_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states - TYPE(Morison_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states - TYPE(Morison_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states - TYPE(Morison_OtherStateType), INTENT(INOUT) :: OtherState !< Other states - TYPE(Morison_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(Morison_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: errStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: errMsg !< Error message if errStat /= ErrID_None - - - - ! Initialize errStat - - errStat = ErrID_None - errMsg = "" - - - ! Place any last minute operations or calculations here: - - - ! Close files here: - - - - ! Destroy the input data: - - CALL Morison_DestroyInput( u, errStat, errMsg ) - - ! Determine if we need to close the output file - - IF ( p%OutSwtch == 1 .OR. p%OutSwtch == 3 ) THEN - CALL MrsnOut_CloseOutput( p, errStat, errMsg ) - END IF - - ! Destroy the parameter data: - - - CALL Morison_DestroyParam( p, errStat, errMsg ) - - - ! Destroy the state data: - - CALL Morison_DestroyContState( x, errStat, errMsg ) - CALL Morison_DestroyDiscState( xd, errStat, errMsg ) - CALL Morison_DestroyConstrState( z, errStat, errMsg ) - CALL Morison_DestroyOtherState( OtherState, errStat, errMsg ) - - CALL Morison_DestroyMisc( m, errStat, errMsg ) - - ! Destroy the output data: - - CALL Morison_DestroyOutput( y, errStat, errMsg ) + - +END SUBROUTINE AllocateNodeLoadVariables -END SUBROUTINE Morison_End !---------------------------------------------------------------------------------------------------------------------------------- -!> This is a loose coupling routine for solving constraint states, integrating continuous states, and updating discrete and other -!! states. Continuous, constraint, discrete, and other states are updated to values at t + Interval. -SUBROUTINE Morison_UpdateStates( Time, u, p, x, xd, z, OtherState, m, errStat, errMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(Morison_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Morison_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Morison_ContinuousStateType), INTENT(INOUT) :: x !< Input: Continuous states at Time; - !! Output: Continuous states at Time + Interval - TYPE(Morison_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at Time; - !! Output: Discrete states at Time + Interval - TYPE(Morison_ConstraintStateType), INTENT(INOUT) :: z !< Input: Constraint states at Time; - !! Output: Constraint states at Time + Interval - TYPE(Morison_OtherStateType), INTENT(INOUT) :: OtherState !< Input: Other states at Time; - !! Output: Other states at Time + Interval - TYPE(Morison_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: errStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: errMsg !< Error message if errStat /= ErrID_None - - ! Local variables - - INTEGER(IntKi) :: errStat2 ! Error status of the operation (occurs after initial error) - CHARACTER(errMsgLen) :: errMsg2 ! Error message if errStat2 /= ErrID_None - - ! Initialize errStat - - errStat = ErrID_None - errMsg = "" - - - - - -END SUBROUTINE Morison_UpdateStates !> This routine is similar to InterpWrappedStpReal, except it returns only the slope for the interpolation. !! By returning the slope based on Time, we don't have to calculate this for every variable (Yary) we want to interpolate. !! NOTE: p%WaveTime (and most arrays here) start with index of 0 instead of 1, so we will subtract 1 from "normal" interpolation @@ -2518,6 +2505,7 @@ FUNCTION GetInterpolationSlope(Time, p, m, IntWrapIndx) RESULT( InterpSlope ) END IF END FUNCTION GetInterpolationSlope +!---------------------------------------------------------------------------------------------------------------------------------- !> Use in conjunction with GetInterpolationSlope, to replace InterpWrappedStpReal here. FUNCTION InterpolateWithSlope(InterpSlope, Ind, YAry) REAL(ReKi), INTENT(IN) :: InterpSlope @@ -2528,6 +2516,7 @@ FUNCTION InterpolateWithSlope(InterpSlope, Ind, YAry) InterpolateWithSlope = ( YAry(Ind+1) - YAry(Ind) )*InterpSlope + YAry(Ind) END FUNCTION InterpolateWithSlope +!---------------------------------------------------------------------------------------------------------------------------------- !> Use in conjunction with GetInterpolationSlope, to replace InterpWrappedStpReal here. FUNCTION InterpolateWithSlopeR(InterpSlope, Ind, YAry) REAL(ReKi), INTENT(IN) :: InterpSlope @@ -2560,20 +2549,12 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, INTEGER(IntKi) :: errStat2 ! Error status of the operation (occurs after initial error) CHARACTER(errMsgLen) :: errMsg2 ! Error message if errStat2 /= ErrID_None + character(*), parameter :: RoutineName = 'Morison_CalcOutput' - REAL(ReKi) :: F_DP(6), kvec(3), v(3), vf(3), vrel(3), vmag - INTEGER :: I, J, K, nodeIndx, IntWrapIndx - REAL(ReKi) :: AllOuts(MaxMrsnOutputs) - REAL(ReKi) :: qdotdot(6) ,qdotdot2(3) ! The structural acceleration of a mesh node - !REAL(ReKi) :: accel_fluid(6) ! Acceleration of fluid at the mesh node - REAL(ReKi) :: dragFactor ! The lumped drag factor - REAL(ReKi) :: AnProd ! Dot product of the directional area of the joint - REAL(ReKi) :: C(3,3) - REAL(ReKi) :: sgn - REAL(ReKi) :: D_AM_M(6,6) - REAL(ReKi) :: nodeInWater - REAL(ReKi) :: D_dragConst ! The distributed drag factor - REAL(ReKi) :: InterpolationSlope +! REAL(ReKi) :: F_DP(6) + REAL(ReKi) :: vmag, vmagf + INTEGER :: I, J, K + REAL(ReKi) :: qdotdot(6) ! The structural acceleration of a mesh node @@ -2582,8 +2563,6 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, REAL(ReKi) :: dl ! Element length within a given member, m REAL(ReKi) :: vec(3) ! Vector pointing from a member's 1st node to its last node REAL(ReKi) :: phi, phi1, phi2 ! member tilt angle - REAL(ReKi) :: beta ! member tilt heading - real(ReKi) :: vecLen ! distance between member end nodes (joints) [this should never be zero but we test for it just in case] REAL(ReKi) :: cosPhi, cosPhi1, cosPhi2 REAL(ReKi) :: sinPhi, sinPhi1, sinPhi2 REAL(ReKi) :: tanPhi @@ -2594,32 +2573,30 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, REAL(ReKi) :: z2 REAL(ReKi) :: r1 REAL(ReKi) :: r2 - real(ReKi) :: p1(3), p2(3) REAL(ReKi) :: dRdl_mg ! shorthand for taper including marine growth of element i - REAL(ReKi) :: Rmid - REAL(ReKi) :: RmidMG - REAL(ReKi) :: Rmidin - REAL(ReKi) :: Lmid + REAL(ReKi) :: RMGFSInt ! Member radius with marine growth at the intersection with the instantaneous free surface real(ReKi) :: g ! gravity constant REAL(ReKi) :: h0 ! distances along cylinder centerline from point 1 to the waterplane real(ReKi) :: k_hat(3), k_hat1(3), k_hat2(3) ! Elemental unit vector pointing from 1st node to 2nd node of the element REAL(ReKi) :: rh ! radius of cylinder at point where its centerline crosses the waterplane - REAL(ReKi) :: l1 ! distance from cone end to bottom node REAL(ReKi) :: Vs ! segment submerged volume REAL(ReKi) :: a0 ! waterplane ellipse shape REAL(ReKi) :: b0 - REAL(ReKi) :: cr ! centroid of segment submerged volume relative to its lower node - REAL(ReKi) :: cl - REAL(ReKi) :: cx - REAL(ReKi) :: cz + !REAL(ReKi) :: cr ! centroid of segment submerged volume relative to its lower node + !REAL(ReKi) :: cl + !REAL(ReKi) :: cx + !REAL(ReKi) :: cz + REAL(ReKi) :: ZetaP, ZetaM, dZetadx, dZetady + REAL(ReKi) :: n_hat(3), t_hat(3), s_hat(3), r_hat(3) + REAL(ReKi) :: sinGamma, cosGamma, tanGamma + REAL(ReKi) :: s0, Vrc, Vhc, Z0 + REAL(ReKi) :: FbVec(3), MbVec(3) REAL(ReKi) :: pwr ! exponent for buoyancy node distribution smoothing REAL(ReKi) :: alpha ! final load distribution factor for element - REAL(ReKi) :: Fb !buoyant force +! REAL(ReKi) :: Fb !buoyant force REAL(ReKi) :: Fr !radial component of buoyant force REAL(ReKi) :: Fl !axial component of buoyant force REAL(ReKi) :: Moment !moment induced about the center of the cylinder's bottom face - REAL(ReKi) :: BuoyF(3) ! buoyancy force vector aligned with an element - REAL(ReKi) :: BuoyM(3) ! buoyancy moment vector aligned with an element integer(IntKi) :: im ! counter real(ReKi) :: a_s1(3) real(ReKi) :: alpha_s1(3) @@ -2627,38 +2604,272 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, real(ReKi) :: a_s2(3) real(ReKi) :: alpha_s2(3) real(ReKi) :: omega_s2(3) - real(ReKi) :: pos1(3), pos2(3) + real(ReKi) :: pos1(3), pos2(3), positionXY(2) real(ReKi) :: Imat(3,3) - real(ReKi) :: iArm(3), iTerm(3), Ioffset, h_c, dRdl_p, dRdl_pp, f_hydro(3), Am(3,3), lstar, deltal - real(ReKi) :: C_1, C_2, a0b0, z1d, z2d, h - real(ReKi) :: F_WMG(6), F_IMG(6), F_If(6), F_A(6), F_I(6), F_D(6), F_B1(6), F_B2(6) - - ! Initialize errStat - + real(ReKi) :: iArm(3), iTerm(3), Ioffset, h_c, dRdl_p, dRdl_pp, f_hydro(3), Am(3,3), lstar, deltal, deltalLeft, deltalRight + real(ReKi) :: C_1, C_2, a0b0, h, h_c_AM, deltal_AM + real(ReKi) :: F_WMG(6), F_IMG(6), F_If(6), F_B1(6), F_B2(6) + + ! Local variables needed for wave stretching and load smoothing/redistribution + INTEGER(IntKi) :: FSElem + REAL(ReKi) :: SubRatio + REAL(ReKi) :: Zeta1 + REAL(ReKi) :: Zeta2 + REAL(ReKi) :: FSInt(3) + REAL(ReKi) :: F_D0(3) + REAL(ReKi) :: F_A0(3) + REAL(ReKi) :: F_I0(3) + REAL(ReKi) :: F_0(3) + REAL(ReKi) :: F_DS(3) + REAL(ReKi) :: F_AS(3) + REAL(ReKi) :: F_IS(3) + REAL(ReKi) :: F_S(3) + REAL(ReKi) :: f_redist + REAL(ReKi) :: Df_hydro(3) + REAL(ReKi) :: DM_hydro(3) + REAL(ReKi) :: Df_hydro_lumped(6) + REAL(ReKi) :: FVFSInt(3) + REAL(ReKi) :: FAFSInt(3) + REAL(ReKi) :: FDynPFSInt + REAL(ReKi) :: vrelFSInt(3) + REAL(ReKi) :: pos1Prime(3) + REAL(ReKi) :: WtrDpth + REAL(ReKi) :: FAMCFFSInt(3) + + ! Initialize errStat errStat = ErrID_None errMsg = "" Imat = 0.0_ReKi g = p%Gravity + WtrDpth = p%WtrDpth + p%MSL2SWL ! Water depth measured from the free surface - InterpolationSlope = GetInterpolationSlope(Time, p, m, IntWrapIndx) + !InterpolationSlope = GetInterpolationSlope(Time, p, m, IntWrapIndx) !=============================================================================================== ! Calculate the fluid kinematics at all mesh nodes and store for use in the equations below - - do j = 1, p%NNodes - m%nodeInWater(j) = REAL( p%nodeInWater(IntWrapIndx,j), ReKi ) + + DO j = 1, p%NNodes + !m%nodeInWater(j) = REAL( p%nodeInWater(IntWrapIndx,j), ReKi ) + !TODO: Update for Wave Kinematics grid + IF (p%WaveDisp == 0 ) THEN + ! use the initial X,Y location + pos1(1) = u%Mesh%Position(1,j) + pos1(2) = u%Mesh%Position(2,j) + ELSE + ! Use current X,Y location + pos1(1) = u%Mesh%TranslationDisp(1,j) + u%Mesh%Position(1,j) + pos1(2) = u%Mesh%TranslationDisp(2,j) + u%Mesh%Position(2,j) + END IF - ! Determine the dynamic pressure at the node - m%FDynP(j) = InterpolateWithSlope(InterpolationSlope, m%LastIndWave, p%WaveDynP(:,j)) - do i=1,3 - ! Determine the fluid acceleration and velocity and relative structural velocity at the node - m%FA(i,j) = InterpolateWithSlope(InterpolationSlope, m%LastIndWave, p%WaveAcc(:,j,i)) - - m%FV(i,j) = InterpolateWithSlope(InterpolationSlope, m%LastIndWave, p%WaveVel(:,j,i)) - m%vrel(i,j) = m%FV(i,j) - u%Mesh%TranslationVel(i,j) - end do - end do + IF (p%WaveStMod > 0 .AND. p%WaveDisp /= 0) THEN ! Wave stretching enabled + pos1(3) = u%Mesh%Position(3,j) + u%Mesh%TranslationDisp(3,j) - p%MSL2SWL ! Use the current Z location. + ELSE ! Wave stretching disabled + pos1(3) = u%Mesh%Position(3,j) - p%MSL2SWL ! We are intentionally using the undisplaced Z position of the node. + END IF + + ! Compute the free surface elevation at the x/y position of all nodes + positionXY = (/pos1(1),pos1(2)/) + m%WaveElev1(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (associated(p%WaveElev2)) THEN + m%WaveElev2(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%WaveElev(j) = m%WaveElev1(j) + m%WaveElev2(j) + ELSE + m%WaveElev(j) = m%WaveElev1(j) + END IF + + + IF (p%WaveStMod == 0) THEN ! No wave stretching + + IF ( pos1(3) <= 0.0_ReKi) THEN ! Node is at or below the SWL + ! Use location to obtain interpolated values of kinematics + call SeaSt_Interp_Setup( Time, pos1, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) + m%nodeInWater(j) = 1_IntKi + ELSE ! Node is above the SWL + m%FV(:,j) = 0.0 + m%FA(:,j) = 0.0 + m%FDynP(j) = 0.0 + m%vrel(:,j) = 0.0 + m%nodeInWater(j) = 0_IntKi + END IF + + ELSE ! Wave stretching enabled + + IF ( pos1(3) <= m%WaveElev(j)) THEN ! Node is submerged + + m%nodeInWater(j) = 1_IntKi + + IF (p%WaveStMod <3) THEN ! Vertical or extrapolated wave stretching + + IF ( pos1(3) <= 0.0_SiKi) THEN ! Node is below the SWL - evaluate wave dynamics as usual + + ! Use location to obtain interpolated values of kinematics + call SeaSt_Interp_Setup( Time, pos1, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ELSE ! Node is above SWL - need wave stretching + + ! Vertical wave stretching + m%FV(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveVel0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAcc0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FDynP(j) = SeaSt_Interp_3D ( Time, positionXY, p%WaveDynP0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ! Extrapoled wave stretching + IF (p%WaveStMod == 2) THEN + m%FV(:,j) = m%FV(:,j) + SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveVel0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * pos1(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FA(:,j) = m%FA(:,j) + SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveAcc0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * pos1(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FDynP(j) = m%FDynP(j) + SeaSt_Interp_3D ( Time, positionXY, p%PWaveDynP0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * pos1(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + + END IF ! Node is submerged + + ELSE ! Wheeler stretching - no need to check whether the node is above or below SWL + + ! Map the node z-position linearly from [-WtrDpth,m%WaveElev(j)] to [-WtrDpth,0] + pos1Prime = pos1 + pos1Prime(3) = WtrDpth*(WtrDpth+pos1(3))/(WtrDpth+m%WaveElev(j))-WtrDpth + + ! Obtain the wave-field variables by interpolation with the mapped position. + call SeaSt_Interp_Setup( Time, pos1Prime, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + END IF + + m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) + + ELSE ! Node is out of water - zero-out all wave dynamics + + m%nodeInWater(j) = 0_IntKi + m%FV(:,j) = 0.0 + m%FA(:,j) = 0.0 + m%FDynP(j) = 0.0 + m%vrel(:,j) = 0.0 + + END IF ! If node is in or out of water + + END IF ! If wave stretching is on or off + + END DO ! j = 1, p%NNodes + ! Scaled fluid acceleration for the MacCamy-Fuchs model + IF ( ASSOCIATED(p%WaveAccMCF) ) THEN + DO im = 1,p%NMembers + IF ( p%Members(im)%PropMCF .AND. ( .NOT. p%Members(im)%PropPot ) ) THEN + DO i = 1,p%Members(im)%NElements+1 + j = p%Members(im)%NodeIndx(i) + + IF (p%WaveDisp == 0 ) THEN + ! use the initial X,Y location + pos1(1) = u%Mesh%Position(1,j) + pos1(2) = u%Mesh%Position(2,j) + ELSE + ! Use current X,Y location + pos1(1) = u%Mesh%TranslationDisp(1,j) + u%Mesh%Position(1,j) + pos1(2) = u%Mesh%TranslationDisp(2,j) + u%Mesh%Position(2,j) + END IF + + IF (p%WaveStMod > 0 .AND. p%WaveDisp /= 0) THEN ! Wave stretching enabled + pos1(3) = u%Mesh%Position(3,j) + u%Mesh%TranslationDisp(3,j) - p%MSL2SWL ! Use the current Z location. + ELSE ! Wave stretching disabled + pos1(3) = u%Mesh%Position(3,j) - p%MSL2SWL ! We are intentionally using the undisplaced Z position of the node. + END IF + + ! Compute the free surface elevation at the x/y position of all nodes + positionXY = (/pos1(1),pos1(2)/) + + IF (p%WaveStMod == 0) THEN ! No wave stretching + + IF ( pos1(3) <= 0.0_ReKi) THEN ! Node is at or below the SWL + ! Use location to obtain interpolated values of kinematics + call SeaSt_Interp_Setup( Time, pos1, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FAMCF(:,j) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ELSE ! Node is above the SWL + m%FAMCF(:,j) = 0.0 + END IF + + ELSE ! Wave stretching enabled + + IF ( pos1(3) <= m%WaveElev(j)) THEN ! Node is submerged + + IF (p%WaveStMod <3) THEN ! Vertical or extrapolated wave stretching + + IF ( pos1(3) <= 0.0_SiKi) THEN ! Node is below the SWL - evaluate wave dynamics as usual + ! Use location to obtain interpolated values of kinematics + call SeaSt_Interp_Setup( Time, pos1, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FAMCF(:,j) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ELSE ! Node is above SWL - need wave stretching + + + ! Vertical wave stretching + m%FAMCF(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAccMCF0, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ! Extrapoled wave stretching + IF (p%WaveStMod == 2) THEN + m%FAMCF(:,j) = m%FAMCF(:,j) + SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveAccMCF0, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * pos1(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + + END IF ! Node is submerged + + ELSE ! Wheeler stretching - no need to check whether the node is above or below SWL + + ! Map the node z-position linearly from [-WtrDpth,m%WaveElev(j)] to [-WtrDpth,0] + pos1Prime = pos1 + pos1Prime(3) = WtrDpth*(WtrDpth+pos1(3))/(WtrDpth+m%WaveElev(j))-WtrDpth + + ! Obtain the wave-field variables by interpolation with the mapped position. + call SeaSt_Interp_Setup( Time, pos1Prime, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + m%FAMCF(:,j) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + END IF + + ELSE ! Node is out of water - zero-out all wave dynamics + + m%FAMCF(:,j) = 0.0 + + END IF ! If node is in or out of water + + END IF ! If wave stretching is on or off + + END DO + END IF + END DO + END IF + ! ============================================================================================== ! Calculate instantaneous loads on each member except for the hydrodynamic loads on member ends. ! This covers aspects of the load calculations previously in CreateDistributedMesh. @@ -2693,9 +2904,9 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, m%memberLoads(im)%F_IMG = 0.0_ReKi m%memberLoads(im)%F_If = 0.0_ReKi - DO i =1,N ! loop through member elements - - ! calculate isntantaneous incline angle and heading, and related trig values + DO i = max(mem%i_floor,1), N ! loop through member elements that are not completely buried in the seabed + + ! calculate instantaneous incline angle and heading, and related trig values ! the first and last NodeIndx values point to the corresponding Joint nodes idices which are at the start of the Mesh pos1 = u%Mesh%TranslationDisp(:, mem%NodeIndx(i)) + u%Mesh%Position(:, mem%NodeIndx(i)) @@ -2719,9 +2930,8 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, a_s2 = u%Mesh%TranslationAcc(:, mem%NodeIndx(i+1)) alpha_s2= u%Mesh%RotationAcc (:, mem%NodeIndx(i+1)) omega_s2= u%Mesh%RotationVel (:, mem%NodeIndx(i+1)) - - if ( .not. mem%PropPot ) then ! Member is NOT modeled with Potential Flow Theory + IF ( .NOT. mem%PropPot ) THEN ! Member is NOT modeled with Potential Flow Theory ! should i_floor theshold be applied to below calculations to avoid wasting time on computing zero-valued things? <<<<< ! should lumped half-element coefficients get combined at initialization? <<< @@ -2792,137 +3002,187 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, y%Mesh%Moment(:,mem%NodeIndx(i+1)) = y%Mesh%Moment(:,mem%NodeIndx(i+1)) + F_IMG(4:6) ! ------------------- buoyancy loads: sides: Sections 3.1 and 3.2 ------------------------ + IF ( p%WaveStMod > 0_IntKi ) THEN ! If wave stretching is enabled, compute buoyancy up to free surface + CALL GetTotalWaveElev( Time, (/pos1(1),pos1(2)/), Zeta1, ErrStat2, ErrMsg2 ) + CALL GetTotalWaveElev( Time, (/pos2(1),pos2(2)/), Zeta2, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Morison_CalcOutput' ) + ELSE ! Without wave stretching, compute buoyancy based on SWL + Zeta1 = 0.0_ReKi + Zeta2 = 0.0_ReKi + END IF + + IF ( z1 < Zeta1 ) THEN ! If element is at least partially submerged + + IF (z2 >= Zeta2) THEN ! Partially submerged element -!TODO: What about elements which are buried in the seabed? This doesn't seem to be tested for - if (z1 < 0) then ! if segment is at least partially submerged ... - - - if (z1*z2 <= 0) then ! special calculation if the slice is partially submerged - ! Check that this is not the 1st element of the member - if ( i == 1 ) then - call SeterrStat(ErrID_Fatal, 'The lowest element of a Morison member has become partially submerged! This is not allowed. Please review your model and create a discretization such that even with displacements, the lowest element of a member does not become partially submerged.', errStat, errMsg, 'Morison_CalcOutput' ) - return - end if - - h0 = -z1/cosPhi ! distances along element centerline from point 1 to the waterplane - - - if (abs(dRdl_mg) < 0.0001) then ! untapered cylinder case - - Vs = Pi*r1*r1*h0 ! volume of total submerged portion - if ( EqualRealNos(Vs, 0.0_ReKi) ) then - cx = 0.0_ReKi ! Avoid singularity, but continue to provide the correct solution - else - cr = 0.25*r1*r1*tanPhi/h0 - cl = 0.5*h0 + 0.125*r1*r1*tanPhi*tanPhi/h0 - cx = cr*cosPhi + cl*sinPhi - end if - - !alpha0 = 0.5*h0/dl ! force distribution between end nodes - - else ! inclined tapered cylinder case (note I've renamed r0 to rh here!!) - !=================== - !Per plan equations - ! NOTE: Variable changes of Plan vs Code - !--------------------------------------------------- - ! V Vs - ! a_h a0 - ! b_h b0 - ! x_c cx - ! h h0 - ! r1 r_MG,i - ! r_c cr - ! h_c cl - ! NOTE: a0 and b0 always appear as a0b0, never separately. - rh = r1 + h0*dRdl_mg ! radius of element at point where its centerline crosses the waterplane - C_1 = 1.0_ReKi - dRdl_mg**2 * tanPhi**2 - ! waterplane ellipse shape - b0 = rh/sqrt(C_1) - a0 = rh/((C_1)*cosPhi) ! simplified from what's in ConicalCalcs.ipynb + ! IF (( i == 1 ) .AND. (z2 > Zeta2)) THEN + ! CALL SeterrStat(ErrID_Fatal, 'The lowest element of a Morison member has become partially submerged! This is not allowed. Please review your model and create a discretization such that even with displacements, the lowest element of a member does not become partially submerged.', errStat, errMsg, 'Morison_CalcOutput' ) + ! RETURN + ! END IF + + ! Submergence ratio + SubRatio = ( Zeta1-pos1(3) ) / ( (Zeta1-pos1(3)) - (Zeta2-pos2(3)) ) + ! The position of the intersection between the free surface and the element + FSInt = SubRatio * (pos2-pos1) + pos1 + ! Distances along element centerline from point 1 to the waterplane + h0 = SubRatio * dl + + ! radius of element at point where its centerline crosses the waterplane + rh = r1 + h0*dRdl_mg + + ! Estimate the free-surface normal at the free-surface intersection, n_hat + IF ( p%WaveStMod > 0_IntKi ) THEN ! If wave stretching is enabled, compute free surface normal + CALL GetTotalWaveElev( Time, (/FSInt(1)+rh,FSInt(2)/), ZetaP, ErrStat2, ErrMsg2 ) + CALL GetTotalWaveElev( Time, (/FSInt(1)-rh,FSInt(2)/), ZetaM, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Morison_CalcOutput' ) + dZetadx = (ZetaP-ZetaM)/(2.0_ReKi*rh) + CALL GetTotalWaveElev( Time, (/FSInt(1),FSInt(2)+rh/), ZetaP, ErrStat2, ErrMsg2 ) + CALL GetTotalWaveElev( Time, (/FSInt(1),FSInt(2)-rh/), ZetaM, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Morison_CalcOutput' ) + dZetady = (ZetaP-ZetaM)/(2.0_ReKi*rh) + n_hat = (/-dZetadx,-dZetady,1.0_ReKi/) + n_hat = n_hat / SQRT(Dot_Product(n_hat,n_hat)) + ELSE ! Without wave stretching, use the normal of the SWL + n_hat = (/0.0_ReKi,0.0_ReKi,1.0_ReKi/) + END IF + + ! Get other relevant unit vectors, t_hat, r_hat, and s_hat + t_hat = Cross_Product(k_hat,n_hat) + sinGamma = SQRT(Dot_Product(t_hat,t_hat)) + cosGamma = Dot_Product(k_hat,n_hat) + tanGamma = sinGamma/cosGamma + IF (sinGamma < 0.0001) THEN ! Free surface normal is aligned with the element + ! Arbitrary choice for t_hat as long as it is perpendicular to k_hat + IF ( k_hat(3) < 0.999999_ReKi ) THEN + t_hat = (/-k_hat(2),k_hat(1),0.0_ReKi/) + t_hat = t_hat / SQRT(Dot_Product(t_hat,t_hat)) + ELSE ! k_hat is close to vertical (0,0,1) + t_hat = (/1.0_ReKi,0.0_ReKi,0.0_ReKi/); + END IF + ELSE + t_hat = t_hat / sinGamma + END IF + s_hat = Cross_Product(t_hat,n_hat) + r_hat = Cross_Product(t_hat,k_hat) + + ! Compute the waterplane shape, the submerged volume, and it's geometric center + IF (abs(dRdl_mg) < 0.0001) THEN ! non-tapered member + + IF (cosGamma < 0.0001) THEN + CALL SetErrStat(ErrID_Fatal, 'Element cannot be parallel to the free surface. This has happened for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + END IF + + a0 = r1/cosGamma ! Semi major axis of waterplane + b0 = r1 ! Semi minor axis of waterplane a0b0 = a0*b0 - C_2 = a0b0*rh*cosPhi - r1**3 - cl = -(-0.75*a0b0*rh**2*cosPhi + 0.75*r1**4*C_1 + r1*C_1*C_2) / (dRdl_mg*C_1*C_2) - cr = (0.75*a0b0*dRdl_mg*rh**2*sinPhi)/(C_1*C_2) - cx = cr*cosPhi + cl*sinPhi - Vs = pi*(a0b0*rh*cosPhi - r1**3)/(3.0*dRdl_mg) - - ! End per plan equations - !=================== - - !rh = r1 + h0*dRdl_mg ! radius of element at point where its centerline crosses the waterplane - !l1 = r1/dRdl_mg ! distance from cone end to bottom node - ! - !! waterplane ellipse shape - !b0 = rh/sqrt(1 - dRdl_mg**2 * tanPhi**2) - !a0 = rh/((1 - dRdl_mg**2*tanPhi**2)*cosPhi) ! simplified from what's in ConicalCalcs.ipynb - ! - !! segment submerged volume - !!Vs = pi*(a0*b0*rh*cosPhi - l1**3*dRdl_mg**3)/(3*dRdl_mg) !Original code - !Vs = pi*(a0*b0*rh*cosPhi - r1**3)/(3*dRdl_mg) !Plan doc - ! - !! centroid of segment submerged volume (relative to bottom node) - !cx = -0.25*(3*a0*b0*rh*rh*(dRdl_mg**2 + 1)*cosPhi + 3.0*l1**4*dRdl_mg**4*(dRdl_mg**2*tanPhi**2 - 1) + 4*l1*dRdl_mg*(dRdl_mg**2*tanPhi**2 - 1)*(a0*b0*rh*cosPhi - 1.0*l1**3*dRdl_mg**3))*sin(phi)/(dRdl_mg*(dRdl_mg**2*tanPhi**2 - 1)*(a0*b0*rh*cosPhi - l1**3*dRdl_mg**3)) - - !alpha0 = (r1*r1 + 2*r1*r2 + 3*r2**2)/4/(r1*r1 + r1*r2 + r2**2) ! this can be precomputed - - end if + s0 = 0.0_ReKi ! Distance from the center of the waterplane to the element centerline + Vs = Pi*r1**2*h0 ! volume of total submerged portion + Vrc = -0.25*Pi*r1**4*tanGamma ! Submerged Volume * r_c + Vhc = 0.125*Pi*r1**2* (4.0*h0**2 + r1**2 * tanGamma**2) ! Submerged Volume * h_c + ELSE ! tapered member + + C_1 = 1.0_ReKi - dRdl_mg**2 * tanGamma**2 + IF (C_1 < 0.0001) THEN ! The free surface is nearly tangent to the element wall + CALL SetErrStat(ErrID_Fatal, 'Element cannot be parallel to the free surface. This has happened for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + END IF + + a0 = rh/(C_1*cosGamma) ! Semi major axis of waterplane + b0 = rh/sqrt(C_1) ! Semi minor axis of waterplane + a0b0 = a0*b0 + C_2 = a0b0*rh*cosGamma - r1**3 + s0 = -rh*dRdl_mg*tanGamma/C_1/cosGamma ! Distance from the center of the waterplane to the element centerline + Vs = Pi*C_2/(3.0*dRdl_mg) ! volume of total submerged portion + Vrc = -0.25*Pi * a0b0*rh**2*sinGamma/C_1 ! Submerged Volume * r_c + Vhc = 0.25*Pi * (a0b0*rh**2*cosGamma/C_1 - r1**4 - 4.0_ReKi/3.0_ReKi*r1*C_2 ) /dRdl_mg**2 ! Submerged Volume * h_c + + END IF + + ! z-coordinate of the center of the waterplane in the global earth-fixed system + Z0 = z1+h0*k_hat(3)+s0*s_hat(3) + + ! Hydrostatic force on element + FbVec = (/0.0_ReKi,0.0_ReKi,Vs/) - Pi*a0b0*Z0*n_hat + Pi*r1**2*z1*k_hat + FbVec = p%WtrDens * g * FbVec + + ! Hydrostatic moment on element about the lower node + MbVec = Cross_Product( Vrc*r_hat+Vhc*k_hat, (/0.0_ReKi,0.0_ReKi,1.0_ReKi/) ) & + + 0.25*Pi*a0b0* ( ( s_hat(3)*a0*a0 + 4.0*(s0-h0*sinGamma)*Z0 )*t_hat - t_hat(3)*b0*b0*s_hat ) & + - 0.25*Pi*r1**4* ( r_hat(3) *t_hat - t_hat(3) * r_hat ) + MbVec = p%WtrDens * g * MbVec + + IF ( i == 1 ) THEN ! This is the 1st element of the member + ! Assign the element load to the lower (1st) node of the member + F_B1(1:3) = FbVec + F_B1(4:6) = MbVec + m%memberLoads(im)%F_B(:,i) = m%memberLoads(im)%F_B(:,i) + F_B1 + y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + F_B1(1:3) + y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + F_B1(4:6) + ELSE ! This is not the 1st element of the member + ! Distribute element load to nodes + pwr = 3 + alpha = (1.0-mem%alpha(i))*(z1-Zeta1)**pwr / ( -mem%alpha(i)*(z2-Zeta2)**pwr + (1.0-mem%alpha(i))*(z1-Zeta1)**pwr ) + + ! Hydrostatic force + F_B1(1:3) = alpha * FbVec + F_B2(1:3) = (1-alpha) * FbVec + + ! Hydrostatic moment correction followed by redistribution + MbVec = MbVec - Cross_Product( -k_hat*dl, F_B2(1:3)) + F_B1(4:6) = alpha * MbVec + F_B2(4:6) = (1-alpha) * MbVec + + ! Add nodal loads to mesh + m%memberLoads(im)%F_B(:, i) = m%memberLoads(im)%F_B(:, i ) + F_B1 ! alpha + m%memberLoads(im)%F_B(:, i-1) = m%memberLoads(im)%F_B(:, i-1) + F_B2 ! 1-alpha + y%Mesh%Force (:,mem%NodeIndx(i )) = y%Mesh%Force (:,mem%NodeIndx(i )) + F_B1(1:3) + y%Mesh%Moment(:,mem%NodeIndx(i )) = y%Mesh%Moment(:,mem%NodeIndx(i )) + F_B1(4:6) + y%Mesh%Force (:,mem%NodeIndx(i-1)) = y%Mesh%Force (:,mem%NodeIndx(i-1)) + F_B2(1:3) + y%Mesh%Moment(:,mem%NodeIndx(i-1)) = y%Mesh%Moment(:,mem%NodeIndx(i-1)) + F_B2(4:6) + END IF + + ELSE ! fully submerged element + + ! Compute the waterplane shape, the submerged volume, and it's geometric center + ! No need to consider tapered and non-tapered elements separately + Vs = Pi*dl *(r1**2 + r1*r2 + r2**2 ) / 3.0_ReKi ! volume of total submerged portion + Vhc = Pi*dl**2*(r1**2 + 2.0*r1*r2 + 3.0*r2**2 ) / 12.0_ReKi ! Submerged Volume * h_c + + ! Hydrostatic force on element + FbVec = (/0.0_ReKi,0.0_ReKi,Vs/) - Pi*( r2*r2*z2 - r1*r1*z1) *k_hat + FbVec = p%WtrDens * g * FbVec + + ! Hydrostatic moment on element about the lower node + MbVec = (Vhc+0.25*Pi*(r2**4-r1**4)) * Cross_Product(k_hat,(/0.0_ReKi,0.0_ReKi,1.0_ReKi/)) + MbVec = p%WtrDens * g * MbVec + + ! Distribute element load to nodes pwr = 3 - alpha = (1.0-mem%alpha(i))*z1**pwr/(-mem%alpha(i)*z2**pwr + (1.0-mem%alpha(i))*z1**pwr) - - Fb = Vs*p%WtrDens*g !buoyant force - Fr = -Fb*sinPhi !radial component of buoyant force - Fl = Fb*cosPhi !axial component of buoyant force - Moment = -Fb*cx !This was matt's code !moment induced about the center of the cylinder's bottom face - - ! calculate (imaginary) bottom plate forces/moment to subtract from displacement-based values - Fl = Fl + p%WtrDens*g*z1* Pi *r1*r1 - Moment = Moment + p%WtrDens*g* sinPhi * Pi/4.0*r1**4 - - - ! reduce taper-based moment to remove (not double count) radial force distribution to each node - Moment = Moment + Fr*(1.0_ReKi-alpha)*dl - !call DistributeElementLoads(Fl, Fr, Moment, sinPhi, cosPhi, sinBeta, cosBeta, alpha, m%F_B(:, mem%NodeIndx(i)), m%F_B(:, mem%NodeIndx(i-1))) - call DistributeElementLoads(Fl, Fr, Moment, sinPhi, cosPhi, sinBeta, cosBeta, alpha, F_B1, F_B2) - m%memberLoads(im)%F_B(:, i) = m%memberLoads(im)%F_B(:, i) + F_B1 ! alpha - m%memberLoads(im)%F_B(:, i-1) = m%memberLoads(im)%F_B(:, i-1) + F_B2 ! 1-alpha - y%Mesh%Force (:,mem%NodeIndx(i )) = y%Mesh%Force (:,mem%NodeIndx(i )) + F_B1(1:3) - y%Mesh%Moment(:,mem%NodeIndx(i )) = y%Mesh%Moment(:,mem%NodeIndx(i )) + F_B1(4:6) - y%Mesh%Force (:,mem%NodeIndx(i-1)) = y%Mesh%Force (:,mem%NodeIndx(i-1)) + F_B2(1:3) - y%Mesh%Moment(:,mem%NodeIndx(i-1)) = y%Mesh%Moment(:,mem%NodeIndx(i-1)) + F_B2(4:6) - else ! normal, fully submerged case - - Fl = -2.0*Pi*dRdl_mg*p%WtrDens*g*dl*( z1*r1 + 0.5*(z1*dRdl_mg + r1*cosPhi)*dl + 1.0/3.0*(dRdl_mg*cosPhi*dl*dl) ) ! from CylinderCalculationsR1.ipynb - - Fr = -Pi*p%WtrDens*g*dl*(r1*r1 + dRdl_mg*r1*dl + (dRdl_mg**2*dl**2)/3.0)*sinPhi ! from CylinderCalculationsR1.ipynb - Moment = -Pi*dl*g*p%WtrDens*(3.0*dl**3*dRdl_mg**4 + 3.0*dl**3*dRdl_mg**2 + 12.0*dl**2*dRdl_mg**3*r1 + 8.0*dl**2*dRdl_mg*r1 + 18.0*dl*dRdl_mg**2*r1*r1 + 6.0*dl*r1*r1 + 12.0*dRdl_mg*r1**3)*sinPhi/12.0 ! latest from CylinderCalculationsR1.ipynb - - ! precomputed as mem%alpha(i) ... alpha0 = (r1*r1 + 2*r1*r2 + 3*r2**2)/4/(r1*r1 + r1*r2 + r2**2) - !TODO: Review the below alpha eqn, GJH - z1d = -min(0.0_ReKi,z1) - z2d = -min(0.0_ReKi,z2) - - pwr = 3 - alpha = mem%alpha(i)*z2d**pwr/(mem%alpha(i)*z2d**pwr+(1-mem%alpha(i))*z1d**pwr) - - - ! reduce moment to remove (not double count) radial force distribution to each node - Moment = Moment - Fr*alpha*dl - ! TODO: Should the order be, i, i+1 GJH - !call DistributeElementLoads(Fl, Fr, Moment, sinPhi, cosPhi, sinBeta, cosBeta, alpha, m%F_B(:, mem%NodeIndx(i+1)), m%F_B(:, mem%NodeIndx(i))) - call DistributeElementLoads(Fl, Fr, Moment, sinPhi, cosPhi, sinBeta, cosBeta, alpha, F_B1, F_B2) + alpha = mem%alpha(i)*(z2-Zeta2)**pwr/(mem%alpha(i)*(z2-Zeta2)**pwr+(1.0_ReKi-mem%alpha(i))*(z1-Zeta1)**pwr) + + ! Hydrostatic force + F_B1(1:3) = alpha * FbVec + F_B2(1:3) = (1-alpha) * FbVec + + ! Hydrostatic moment correction followed by redistribution + MbVec = MbVec - Cross_Product( k_hat*dl, F_B1(1:3)) + F_B1(4:6) = alpha * MbVec + F_B2(4:6) = (1-alpha) * MbVec + + ! Add nodal loads to mesh m%memberLoads(im)%F_B(:,i+1) = m%memberLoads(im)%F_B(:,i+1) + F_B1 ! alpha - m%memberLoads(im)%F_B(:, i) = m%memberLoads(im)%F_B(:, i) + F_B2 ! 1-alpha - y%Mesh%Force (:,mem%NodeIndx(i )) = y%Mesh%Force (:,mem%NodeIndx(i )) + F_B2(1:3) - y%Mesh%Moment(:,mem%NodeIndx(i )) = y%Mesh%Moment(:,mem%NodeIndx(i )) + F_B2(4:6) + m%memberLoads(im)%F_B(:,i ) = m%memberLoads(im)%F_B(:,i ) + F_B2 ! 1-alpha y%Mesh%Force (:,mem%NodeIndx(i+1)) = y%Mesh%Force (:,mem%NodeIndx(i+1)) + F_B1(1:3) y%Mesh%Moment(:,mem%NodeIndx(i+1)) = y%Mesh%Moment(:,mem%NodeIndx(i+1)) + F_B1(4:6) - end if ! submergence cases - - end if ! element at least partially submerged - - end if ! NOT Modeled with Potential flow theory + y%Mesh%Force (:,mem%NodeIndx(i )) = y%Mesh%Force (:,mem%NodeIndx(i )) + F_B2(1:3) + y%Mesh%Moment(:,mem%NodeIndx(i )) = y%Mesh%Moment(:,mem%NodeIndx(i )) + F_B2(4:6) + + END IF ! submergence cases + + END IF ! element at least partially submerged + + END IF ! NOT Modeled with Potential flow theory ! ------------------ flooded ballast inertia: sides: Section 6.1.1 : Always compute regardless of PropPot setting --------------------- @@ -3019,99 +3279,472 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, ! no load for unflooded element or element fully below seabed end if - - - - END DO ! i =1,N ! loop through member elements + END DO ! i = max(mem%i_floor,1), N ! loop through member elements that are not fully buried in the seabed + + !-----------------------------------------------------------------------------------------------------! + ! External Hydrodynamic Side Loads - Start ! + !-----------------------------------------------------------------------------------------------------! + ! Get the z-positions of the two end nodes of the member to determine whether the member is surface piercing + z1 = u%Mesh%Position(3, mem%NodeIndx(1)) - p%MSL2SWL + z2 = u%Mesh%Position(3, mem%NodeIndx(N+1)) - p%MSL2SWL + ! Include displacement if wave stretching enabled and WaveDisp /= 0 + IF ( p%WaveStMod > 0 .AND. p%WaveDisp /= 0 ) THEN + z1 = z1 + u%Mesh%TranslationDisp(3, mem%NodeIndx(1)) + z2 = z2 + u%Mesh%TranslationDisp(3, mem%NodeIndx(N+1)) + END IF + IF ( p%WaveStMod > 0 .AND. z1 <= m%WaveElev(mem%NodeIndx(1)) .AND. z2 > m%WaveElev(mem%NodeIndx(N+1)) ) THEN + + !----------------------------Surface Piercing Member with Wave Stretching-----------------------------! + + FSElem = -1 ! Initialize the No. of the partially wetted element as -1 + + DO i = mem%i_floor+1,N ! loop through member nodes starting from the first node above seabed, but skip the last node which should not be submerged anyways + + ! Get positions of node i and i+1 + IF (p%WaveDisp /= 0) THEN ! Use current position + pos1 = u%Mesh%TranslationDisp(:, mem%NodeIndx(i)) + u%Mesh%Position(:, mem%NodeIndx(i)) + pos2 = u%Mesh%TranslationDisp(:, mem%NodeIndx(i+1)) + u%Mesh%Position(:, mem%NodeIndx(i+1)) + ELSE ! Use initial position + pos1 = u%Mesh%Position(:, mem%NodeIndx(i)) + pos2 = u%Mesh%Position(:, mem%NodeIndx(i+1)) + END if + ! We need to subtract the MSL2SWL offset to place this in the SWL reference system + pos1(3) = pos1(3) - p%MSL2SWL + pos2(3) = pos2(3) - p%MSL2SWL + + ! Free surface elevation above or below node i and i+1 + Zeta1 = m%WaveElev(mem%NodeIndx(i)) + Zeta2 = m%WaveElev(mem%NodeIndx(i+1)) + + ! Compute deltal and h_c + IF ( i == 1 ) THEN ! First node + deltal = mem%dl/2.0_ReKi + h_c = mem%dl/4.0_ReKi + ELSE IF ( i == mem%i_floor + 1 ) THEN ! This node is the upper node of an element which crosses the seabed + ! Superceded by i==1 above if mem%i_floor = 0 + deltal = mem%dl/2.0_ReKi - mem%h_floor + h_c = 0.5_ReKi*(mem%dl/2.0_ReKi + mem%h_floor) + ELSE + ! This node is an interior node. Note: Element crossing the free surface will be handled at the end in conjunction with wave stretching + deltal = mem%dl + h_c = 0.0_ReKi + END IF ! Note: No need to consider i==N+1 because we do not allow the top node to become submerged. The loop also does not reach N+1. + + IF ( pos1(3) <= Zeta1 .AND. pos2(3) > Zeta2 ) THEN ! element is partially wetted + ! Record the number of the partially wetted element + FSElem = i + ! Calculate submergence ratio + SubRatio = ( Zeta1-pos1(3) ) / ( (Zeta1-pos1(3)) - (Zeta2-pos2(3)) ) + ! Calculate the position of the intersection between the free surface and the element + FSInt = SubRatio * (pos2-pos1) + pos1 + END IF + + ! Compute the slope of member radius + IF (i == 1) THEN + dRdl_p = abs(mem%dRdl_mg(i)) + dRdl_pp = mem%dRdl_mg(i) + ELSE IF ( i > 1 .AND. i < (N+1)) THEN + dRdl_p = 0.5*( abs(mem%dRdl_mg(i-1)) + abs(mem%dRdl_mg(i)) ) + dRdl_pp = 0.5*( mem%dRdl_mg(i-1) + mem%dRdl_mg(i) ) + ELSE + dRdl_p = abs(mem%dRdl_mg(N)) + dRdl_pp = mem%dRdl_mg(N) + END IF - ! External Hydrodynamic Side Loads - ! NOTE: All geometry-related calculations are based on the undisplaced configuration of the structure - - DO i =1,N+1 ! loop through member nodes - ! We need to subtract the MSL2SWL offset to place this in the SWL reference system - z1 = u%Mesh%Position(3, mem%NodeIndx(i)) - p%MSL2SWL - if ( i > mem%i_floor .and. z1 <= 0.0 ) then ! node is above (or at? TODO: check) seabed and below or at free-surface) - ! TODO: Note that for computational efficiency, we could precompute h_c and deltal for each element when we are NOT using wave stretching - ! We would still need to test at time marching for nodes just below the free surface because that uses the current locations not the reference locations - ! see table in Section 7.1.1 - if ( i == 1 ) then - deltal = mem%dl/2.0_ReKi - h_c = mem%dl/4.0_ReKi - elseif (i == N+1) then - deltal = mem%dl/2.0_ReKi - h_c = -mem%dl/4.0_ReKi - elseif ( mem%i_floor == i+1 ) then ! This node is the upper node of an element which crosses the seabed - deltal = mem%dl/2.0_ReKi - mem%h_floor ! TODO: h_floor is negative valued, should we be subrtracting it from dl/2? GJH - h_c = 0.5_ReKi*(mem%dl/2.0_ReKi + mem%h_floor) - else - ! We need to subtract the MSL2SWL offset to place this in the SWL reference system - pos1 = u%Mesh%Position(:, mem%NodeIndx(i)) - pos1(3) = pos1(3) - p%MSL2SWL - pos2 = u%Mesh%Position(:, mem%NodeIndx(i+1)) - pos2(3) = pos2(3) - p%MSL2SWL - if (pos1(3) <= 0.0 .and. 0.0 < pos2(3) ) then ! This node is just below the free surface !TODO: Needs to be augmented for wave stretching - ! We need to subtract the MSL2SWL offset to place this in the SWL reference system - !TODO: Fix this one - pos1 = u%Mesh%Position(:, mem%NodeIndx(i)) ! use reference position for following equation - pos1(3) = pos1(3) - p%MSL2SWL - h = ( pos1(3) ) / mem%cosPhi_ref !TODO: Needs to be augmented for wave stretching - deltal = mem%dl/2.0 + h - h_c = 0.5*(h-mem%dl/2.0) - else - ! This node is a fully submerged interior node - deltal = mem%dl - h_c = 0.0_ReKi - end if - - end if + !-------------------- hydrodynamic drag loads: sides: Section 7.1.2 ------------------------! + vec = matmul( mem%Ak,m%vrel(:,mem%NodeIndx(i)) ) + f_hydro = mem%Cd(i)*p%WtrDens*mem%RMG(i)*TwoNorm(vec)*vec + & + 0.5*mem%AxCd(i)*p%WtrDens*pi*mem%RMG(i)*dRdl_p * abs(dot_product( mem%k, m%vrel(:,mem%NodeIndx(i)) )) * matmul( mem%kkt, m%vrel(:,mem%NodeIndx(i)) ) + CALL LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_D(:, i) ) + y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_D(1:3, i) + y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_D(4:6, i) + IF (i == FSElem) THEN ! Save the distributed load at the first node below the free surface + F_D0 = f_hydro + END IF + + IF ( .NOT. mem%PropPot ) THEN + !-------------------- hydrodynamic added mass loads: sides: Section 7.1.3 ------------------------! + Am = mem%Ca(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*mem%Ak + 2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p*mem%kkt + f_hydro = -matmul( Am, u%Mesh%TranslationAcc(:,mem%NodeIndx(i)) ) + + IF ( p%AMMod .EQ. 0_IntKi ) THEN ! Compute added-mass force up to the SWL + z1 = u%Mesh%Position(3, mem%NodeIndx(i)) - p%MSL2SWL ! Undisplaced z-position of the current node + IF ( z1 > 0.0_ReKi ) THEN ! Node is above SWL undisplaced; zero added-mass force + f_hydro = 0.0_ReKi + ELSE + ! Need to compute deltal_AM and h_c_AM based on the formulation without wave stretching. + z2 = u%Mesh%Position(3, mem%NodeIndx(i+1)) - p%MSL2SWL ! Undisplaced z-position of the next node + IF ( z2 > 0.0_ReKi ) THEN ! Element i crosses the SWL + h = -z1 / mem%cosPhi_ref ! Length of Element i between SWL and node i, h>=0 + deltal_AM = mem%dl/2.0 + h + h_c_AM = 0.5*(h-mem%dl/2.0) + ELSE + deltal_AM = deltal; + h_c_AM = h_c + END IF + ! Note: Do not overwrite deltal and h_c here. Still need them for the fluid inertia and drag forces. + CALL LumpDistrHydroLoads( f_hydro, mem%k, deltal_AM, h_c_AM, m%memberLoads(im)%F_A(:, i) ) + END IF + ELSE ! Compute added-mass force up to the instantaneous free surface + f_hydro = f_hydro * m%nodeInWater(mem%NodeIndx(i)) ! Zero the force if node above free surface + CALL LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_A(:, i) ) + IF (i == FSElem) THEN ! Save the distributed load at the first node below the free surface + F_A0 = f_hydro + END IF + END IF ! AMMod 0 or 1 + y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_A(1:3, i) + y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_A(4:6, i) + + + !--------------------- hydrodynamic inertia loads: sides: Section 7.1.4 --------------------------! + IF (mem%PropMCF) THEN + f_hydro= p%WtrDens*pi*mem%RMG(i)*mem%RMG(i) * matmul( mem%Ak, m%FAMCF(:,mem%NodeIndx(i)) ) + & + 2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p * matmul( mem%kkt, m%FA(:,mem%NodeIndx(i)) ) + & + 2.0*m%FDynP(mem%NodeIndx(i))*mem%AxCp(i)*pi*mem%RMG(i)*dRdl_pp*mem%k + ELSE + f_hydro=(mem%Ca(i)+mem%Cp(i))*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i) * matmul( mem%Ak, m%FA(:,mem%NodeIndx(i)) ) + & + 2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p * matmul( mem%kkt, m%FA(:,mem%NodeIndx(i)) ) + & + 2.0*m%FDynP(mem%NodeIndx(i))*mem%AxCp(i)*pi*mem%RMG(i)*dRdl_pp*mem%k + END IF + + CALL LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_I(:, i) ) + y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_I(1:3, i) + y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_I(4:6, i) + IF (i == FSElem) THEN ! Save the distributed load at the first node below the free surface + F_I0 = f_hydro + END IF + END IF + + END DO ! i =1,N+1 ! loop through member nodes - if (i == 1) then - dRdl_p = abs(mem%dRdl_mg(i)) - dRdl_pp = mem%dRdl_mg(i) - elseif ( i > 1 .and. i < (N+1)) then - dRdl_p = 0.5*( abs(mem%dRdl_mg(i-1)) + abs(mem%dRdl_mg(i)) ) - dRdl_pp = 0.5*( mem%dRdl_mg(i-1) + mem%dRdl_mg(i) ) - else - dRdl_p = abs(mem%dRdl_mg(N)) - dRdl_pp = mem%dRdl_mg(N) - end if - - ! ------------------- hydrodynamic drag loads: sides: Section 7.1.2 ------------------------ - vec = matmul( mem%Ak,m%vrel(:,mem%NodeIndx(i)) ) - f_hydro = mem%Cd(i)*p%WtrDens*mem%RMG(i)*TwoNorm(vec)*vec + & - 0.5*mem%AxCd(i)*p%WtrDens*pi*mem%RMG(i)*dRdl_p * matmul( dot_product( mem%k, m%vrel(:,mem%NodeIndx(i)) )*mem%kkt, m%vrel(:,mem%NodeIndx(i)) ) -! call LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%F_D(:, mem%NodeIndx(i)) ) - call LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_D(:, i) ) - y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_D(1:3, i) - y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_D(4:6, i) - - if ( .not. mem%PropPot ) then - ! ------------------- hydrodynamic added mass loads: sides: Section 7.1.3 ------------------------ - Am = mem%Ca(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*mem%Ak + 2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p*mem%kkt - f_hydro = -matmul( Am, u%Mesh%TranslationAcc(:,mem%NodeIndx(i)) ) - !call LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%F_A(:, mem%NodeIndx(i)) ) - call LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_A(:, i) ) - y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_A(1:3, i) - y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_A(4:6, i) + !----------------------------------------------------------------------------------------------------! + ! Compute the distributed loads at the point of intersection between the member and the free surface ! + !----------------------------------------------------------------------------------------------------! + ! Get wave dynamics at the free surface intersection + IF (p%WaveStMod <3) THEN ! Vertical or extrapolated stretching + + IF ( FSInt(3) <= 0.0_ReKi) THEN ! Intersection is below SWL - evaluate wave dynamics as usual + + ! Use location to obtain interpolated values of kinematics + CALL SeaSt_Interp_Setup( Time, FSInt, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FVFSInt = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FAFSInt = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FDynPFSInt = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ELSE ! Intersection is above SWL - need wave stretching + + ! Vertical wave stretching + FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveVel0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FDynPFSInt = SeaSt_Interp_3D ( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ! Extrapolated wave stretching + IF (p%WaveStMod == 2) THEN + FVFSInt = FVFSInt + SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveVel0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * FSInt(3) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FAFSInt = FAFSInt + SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveAcc0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * FSInt(3) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FDynPFSInt = FDynPFSInt + SeaSt_Interp_3D ( Time, FSInt(1:2), p%PWaveDynP0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * FSInt(3) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + + END IF + + ELSE ! Wheeler stretching + + ! Points on the free surface is always mapped back to z=0 of the unstretched wave field + ! Can evaluate the wave-field variables in the same way as vertical stretching + FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveVel0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + END IF + + + IF ( mem%PropMCF .AND. ( .NOT. mem%PropPot ) ) THEN + IF (p%WaveStMod <3) THEN ! Vertical or extrapolated stretching + + IF ( FSInt(3) <= 0.0_ReKi) THEN ! Intersection is below SWL - evaluate wave dynamics as usual + + ! Use location to obtain interpolated values of kinematics + CALL SeaSt_Interp_Setup( Time, FSInt, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FAMCFFSInt = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ELSE ! Intersection is above SWL - need wave stretching + + ! Vertical wave stretching + FAMCFFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAccMCF0, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ! Extrapolated wave stretching + IF (p%WaveStMod == 2) THEN + FAMCFFSInt = FAMCFFSInt + SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveAccMCF0, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * FSInt(3) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + + END IF + + ELSE ! Wheeler stretching + + ! Points on the free surface is always mapped back to z=0 of the unstretched wave field + ! Can evaluate the wave-field variables in the same way as vertical stretching + FAMCFFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAccMCF0, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + END IF + + ! Viscous drag: + ! Compute relative velocity at the free surface intersection. + ! Linear interpolation between the two nodes of the element is used to estimate velocity of the structure + vrelFSInt = FVFSInt - ( & + SubRatio * u%Mesh%TranslationVel(:,mem%NodeIndx(FSElem+1)) + & + (1.0-SubRatio) * u%Mesh%TranslationVel(:,mem%NodeIndx(FSElem )) & + ) + dRdl_p = abs(mem%dRdl_mg(FSElem)) + RMGFSInt = SubRatio * mem%RMG(FSElem+1) + (1.0-SubRatio) * mem%RMG(FSElem) + + vec = matmul( mem%Ak,vrelFSInt ) + F_DS = mem%Cd(FSElem)*p%WtrDens*RMGFSInt*TwoNorm(vec)*vec + & + 0.5*mem%AxCd(FSElem)*p%WtrDens*pi*RMGFSInt*dRdl_p * & + abs(dot_product( mem%k, vrelFSInt )) * matmul( mem%kkt, vrelFSInt ) + + ! Hydrodynamic added mass and inertia loads + IF ( .NOT. mem%PropPot ) THEN + + ! ------------------- hydrodynamic added mass loads: sides: Section 7.1.3 ------------------------ + IF (p%AMMod > 0_IntKi) THEN + Am = mem%Ca(FSElem)*p%WtrDens*pi*RMGFSInt*RMGFSInt*mem%Ak + & + 2.0*mem%AxCa(FSElem)*p%WtrDens*pi*RMGFSInt*RMGFSInt*dRdl_p*mem%kkt + F_AS = -matmul( Am, & + SubRatio * u%Mesh%TranslationAcc(:,mem%NodeIndx(FSElem+1)) + & + (1.0-SubRatio) * u%Mesh%TranslationAcc(:,mem%NodeIndx(FSElem )) ) + END IF - ! ------------------- hydrodynamic inertia loads: sides: Section 7.1.4 ------------------------ - f_hydro=(mem%Ca(i)+mem%Cp(i))*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i) * matmul( mem%Ak, m%FA(:,mem%NodeIndx(i)) ) + & - 2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p * matmul( mem%kkt, m%FA(:,mem%NodeIndx(i)) ) + & - 2.0*m%FDynP(mem%NodeIndx(i))*mem%AxCp(i)*pi*mem%RMG(i)*dRdl_pp*mem%k - !call LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%F_I(:, mem%NodeIndx(i)) ) - call LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_I(:, i) ) - y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_I(1:3, i) - y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_I(4:6, i) - end if - end if ! ( i > mem%i_floor .and. Zi <= 0.0 ) + ! ------------------- hydrodynamic inertia loads: sides: Section 7.1.4 ------------------------ + IF ( mem%PropMCF) THEN + F_IS= p%WtrDens*pi*RMGFSInt*RMGFSInt * matmul( mem%Ak, FAMCFFSInt ) + & + 2.0*mem%AxCa(FSElem)*p%WtrDens*pi*RMGFSInt*RMGFSInt*dRdl_p * matmul( mem%kkt, FAFSInt ) + & + 2.0*mem%AxCp(FSElem) *pi*RMGFSInt *dRdl_pp * FDynPFSInt*mem%k + ELSE + F_IS=(mem%Ca(FSElem)+mem%Cp(FSElem))*p%WtrDens*pi*RMGFSInt*RMGFSInt * matmul( mem%Ak, FAFSInt ) + & + 2.0*mem%AxCa(FSElem)*p%WtrDens*pi*RMGFSInt*RMGFSInt*dRdl_p * matmul( mem%kkt, FAFSInt ) + & + 2.0*mem%AxCp(FSElem) *pi*RMGFSInt *dRdl_pp * FDynPFSInt*mem%k + END IF + END IF + + !----------------------------------------------------------------------------------------------------! + ! Perform the load redistribution for smooth time series ! + !----------------------------------------------------------------------------------------------------! + ! Evaluate the load redistribution function + f_redist = 0.0_ReKi + IF (FSElem > 1_IntKi) THEN ! At least one fully submerged element + f_redist = 2.0_ReKi * SubRatio**3 - 3.5_ReKi * SubRatio**2 + SubRatio + 0.5_ReKi + END IF + + ! deltal = mem%dl and h_c = 0 should always be used here by design. Moment correction will be applied separately + deltal = mem%dl + h_c = 0.0_ReKi + + ! Viscous drag + ! Apply load redistribution to the first node below the free surface + Df_hydro = ((SubRatio-1.0_ReKi)/(2.0_ReKi)-f_redist)*F_D0 + SubRatio/2.0_ReKi*F_DS + CALL LumpDistrHydroLoads( Df_hydro, mem%k, deltal, h_c, Df_hydro_lumped) + m%memberLoads(im)%F_D(:, FSElem) = m%memberLoads(im)%F_D(:, FSElem) + Df_hydro_lumped + y%Mesh%Force (:,mem%NodeIndx(FSElem)) = y%Mesh%Force (:,mem%NodeIndx(FSElem)) + Df_hydro_lumped(1:3) + y%Mesh%Moment(:,mem%NodeIndx(FSElem)) = y%Mesh%Moment(:,mem%NodeIndx(FSElem)) + Df_hydro_lumped(4:6) + + ! Apply load redistribution to the second node below the free surface + IF (FSElem > 1_IntKi) THEN ! Note: Only need to modify the loads on the second node below the free surface when there is at least one fully submerged element. + Df_hydro = f_redist * F_D0 + CALL LumpDistrHydroLoads( Df_hydro, mem%k, deltal, h_c, Df_hydro_lumped) + m%memberLoads(im)%F_D(:, FSElem-1) = m%memberLoads(im)%F_D(:, FSElem-1) + Df_hydro_lumped + y%Mesh%Force (:,mem%NodeIndx(FSElem-1)) = y%Mesh%Force (:,mem%NodeIndx(FSElem-1)) + Df_hydro_lumped(1:3) + y%Mesh%Moment(:,mem%NodeIndx(FSElem-1)) = y%Mesh%Moment(:,mem%NodeIndx(FSElem-1)) + Df_hydro_lumped(4:6) + END IF + + ! Hydrodynamic added mass and inertia loads + IF ( .NOT. mem%PropPot ) THEN + + IF ( p%AMMod > 0_IntKi ) THEN + !-------------------- hydrodynamic added mass loads: sides: Section 7.1.3 ------------------------! + ! Apply load redistribution to the first node below the free surface + Df_hydro = ((SubRatio-1.0_ReKi)/(2.0_ReKi)-f_redist)*F_A0 + SubRatio/2.0_ReKi*F_AS + CALL LumpDistrHydroLoads( Df_hydro, mem%k, deltal, h_c, Df_hydro_lumped) + m%memberLoads(im)%F_A(:, FSElem) = m%memberLoads(im)%F_A(:, FSElem) + Df_hydro_lumped + y%Mesh%Force (:,mem%NodeIndx(FSElem)) = y%Mesh%Force (:,mem%NodeIndx(FSElem)) + Df_hydro_lumped(1:3) + y%Mesh%Moment(:,mem%NodeIndx(FSElem)) = y%Mesh%Moment(:,mem%NodeIndx(FSElem)) + Df_hydro_lumped(4:6) + + ! Apply load redistribution to the second node below the free surface + IF (FSElem > 1_IntKi) THEN + Df_hydro = f_redist * F_A0 + CALL LumpDistrHydroLoads( Df_hydro, mem%k, deltal, h_c, Df_hydro_lumped) + m%memberLoads(im)%F_A(:, FSElem-1) = m%memberLoads(im)%F_A(:, FSElem-1) + Df_hydro_lumped + y%Mesh%Force (:,mem%NodeIndx(FSElem-1)) = y%Mesh%Force (:,mem%NodeIndx(FSElem-1)) + Df_hydro_lumped(1:3) + y%Mesh%Moment(:,mem%NodeIndx(FSElem-1)) = y%Mesh%Moment(:,mem%NodeIndx(FSElem-1)) + Df_hydro_lumped(4:6) + END IF + END IF + + !-------------------- hydrodynamic inertia loads: sides: Section 7.1.4 --------------------------! + ! Apply load redistribution to the first node below the free surface + Df_hydro = ((SubRatio-1.0_ReKi)/(2.0_ReKi)-f_redist)*F_I0 + SubRatio/2.0_ReKi*F_IS + CALL LumpDistrHydroLoads( Df_hydro, mem%k, deltal, h_c, Df_hydro_lumped) + m%memberLoads(im)%F_I(:, FSElem) = m%memberLoads(im)%F_I(:, FSElem) + Df_hydro_lumped + y%Mesh%Force (:,mem%NodeIndx(FSElem)) = y%Mesh%Force (:,mem%NodeIndx(FSElem)) + Df_hydro_lumped(1:3) + y%Mesh%Moment(:,mem%NodeIndx(FSElem)) = y%Mesh%Moment(:,mem%NodeIndx(FSElem)) + Df_hydro_lumped(4:6) + + ! Apply load redistribution to the second node below the free surface + IF (FSElem > 1_IntKi) THEN + Df_hydro = f_redist * F_I0 + CALL LumpDistrHydroLoads( Df_hydro, mem%k, deltal, h_c, Df_hydro_lumped) + m%memberLoads(im)%F_I(:, FSElem-1) = m%memberLoads(im)%F_I(:, FSElem-1) + Df_hydro_lumped + y%Mesh%Force (:,mem%NodeIndx(FSElem-1)) = y%Mesh%Force (:,mem%NodeIndx(FSElem-1)) + Df_hydro_lumped(1:3) + y%Mesh%Moment(:,mem%NodeIndx(FSElem-1)) = y%Mesh%Moment(:,mem%NodeIndx(FSElem-1)) + Df_hydro_lumped(4:6) + END IF + END IF + + !----------------------------------------------------------------------------------------------------! + ! Perform moment correction to compensate for load redistribution ! + !----------------------------------------------------------------------------------------------------! + ! Moment correction to the first and second nodes below the free surface + F_S = F_DS + F_0 = F_D0 + IF ( .NOT. mem%PropPot) THEN + F_S = F_S + F_IS + F_0 = F_0 + F_I0 + IF ( p%AMMod > 0_IntKi) THEN + F_S = F_S + F_AS + F_0 = F_0 + F_A0 + END IF + END IF + ! First node below the free surface + DM_hydro = 0.5_ReKi * SubRatio**2 * deltal * cross_product(mem%k, F_S) + y%Mesh%Moment(:,mem%NodeIndx(FSElem)) = y%Mesh%Moment(:,mem%NodeIndx(FSElem)) + DM_hydro * deltal + ! Second node below the free surface + IF (FSElem > 1_IntKi) THEN + DM_hydro = f_redist * deltal * cross_product(mem%k, F_0) + y%Mesh%Moment(:,mem%NodeIndx(FSElem-1)) = y%Mesh%Moment(:,mem%NodeIndx(FSElem-1)) + DM_hydro * deltal + END IF + + ELSE !----------------------------Non-surface Piercing Member or No Wave Stretching----------------------------! + + DO i = mem%i_floor+1,N+1 ! loop through member nodes starting from the first node above seabed + ! We need to subtract the MSL2SWL offset to place this in the SWL reference system + ! Using the initial z-position to be consistent with the evaluation of wave kinematics + IF (p%WaveStMod > 0 .AND. p%WaveDisp /= 0) THEN + ! Use current z-position + z1 = u%Mesh%Position(3, mem%NodeIndx(i)) + u%Mesh%TranslationDisp(3, mem%NodeIndx(i)) - p%MSL2SWL + ELSE + ! Use initial z-position + z1 = u%Mesh%Position(3, mem%NodeIndx(i)) - p%MSL2SWL + END IF + + !---------------------------------------------Compute deltal and h_c------------------------------------------! + ! Default value for fully submerged interior node + deltal = mem%dl + h_c = 0.0_ReKi + + ! Look to the "left" toward node 1 + IF ( i == 1 ) THEN ! First node. Note: Having i == 1 also implies mem%i_floor = 0. + deltalLeft = 0.0_ReKi + ELSE IF ( i == mem%i_floor+1 ) THEN ! First node above seabed. + ! Note: This part is superceded by i==1 above when mem%i_floor = 0. + ! This is the correct behavior. + deltalLeft = -mem%h_floor + ELSE ! Regular internal node + deltalLeft = 0.5_ReKi * mem%dl + END IF + + ! Look to the "right" toward node N+1 + IF ( i == N+1 ) THEN ! Last node + deltalRight = 0.0_ReKi + ELSE + deltalRight = 0.5_ReKi * mem%dl + ! Need to check if element i crosses the SWL, but only if WaveStMod == 0 + ! With wave stretching, surface-piercing members are already handled by the IF branch + IF (p%WaveStMod==0) THEN ! No wave stretching + ! Initial z position will always be used + z2 = u%Mesh%Position(3, mem%NodeIndx(i+1)) - p%MSL2SWL + IF (z1 <= 0.0_ReKi .AND. z2 > 0.0_ReKi) THEN ! Element i crosses the SWL + h = -z1 / mem%cosPhi_ref ! Length of Element i between SWL and node i, h>=0 + deltalRight = h + END IF + END IF + END IF + + ! Combine left and right contributions + deltal = deltalRight + deltalLeft + h_c = 0.5_ReKi * ( deltalRight - deltalLeft ) + + ! Compute the slope of the member radius + IF (i == 1) THEN + dRdl_p = abs(mem%dRdl_mg(i)) + dRdl_pp = mem%dRdl_mg(i) + ELSE IF ( i > 1 .AND. i < (N+1)) THEN + dRdl_p = 0.5*( abs(mem%dRdl_mg(i-1)) + abs(mem%dRdl_mg(i)) ) + dRdl_pp = 0.5*( mem%dRdl_mg(i-1) + mem%dRdl_mg(i) ) + ELSE + dRdl_p = abs(mem%dRdl_mg(N)) + dRdl_pp = mem%dRdl_mg(N) + END IF - END DO ! i =1,N+1 ! loop through member nodes - - - ! Any end plate loads that are modeled on a per-member basis - + !--------------------- hydrodynamic drag loads: sides: Section 7.1.2 --------------------------------! + vec = matmul( mem%Ak,m%vrel(:,mem%NodeIndx(i)) ) + f_hydro = mem%Cd(i)*p%WtrDens*mem%RMG(i)*TwoNorm(vec)*vec + & + 0.5*mem%AxCd(i)*p%WtrDens*pi*mem%RMG(i)*dRdl_p * abs(dot_product( mem%k, m%vrel(:,mem%NodeIndx(i)) )) * matmul( mem%kkt, m%vrel(:,mem%NodeIndx(i)) ) + CALL LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_D(:, i) ) + y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_D(1:3, i) + y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_D(4:6, i) + + IF ( .NOT. mem%PropPot ) THEN + !-------------------- hydrodynamic added mass loads: sides: Section 7.1.3 ------------------------! + Am = mem%Ca(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*mem%Ak + 2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p*mem%kkt + f_hydro = -matmul( Am, u%Mesh%TranslationAcc(:,mem%NodeIndx(i)) ) * m%nodeInWater(mem%NodeIndx(i)) + CALL LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_A(:, i) ) + y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_A(1:3, i) + y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_A(4:6, i) + + !-------------------- hydrodynamic inertia loads: sides: Section 7.1.4 ---------------------------! + + IF ( mem%PropMCF ) THEN + f_hydro= p%WtrDens*pi*mem%RMG(i)*mem%RMG(i) * matmul( mem%Ak, m%FAMCF(:,mem%NodeIndx(i)) ) + & + 2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p * matmul( mem%kkt, m%FA(:,mem%NodeIndx(i)) ) + & + 2.0*m%FDynP(mem%NodeIndx(i))*mem%AxCp(i)*pi*mem%RMG(i)*dRdl_pp*mem%k + ELSE + f_hydro=(mem%Ca(i)+mem%Cp(i))*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i) * matmul( mem%Ak, m%FA(:,mem%NodeIndx(i)) ) + & + 2.0*mem%AxCa(i)*p%WtrDens*pi*mem%RMG(i)*mem%RMG(i)*dRdl_p * matmul( mem%kkt, m%FA(:,mem%NodeIndx(i)) ) + & + 2.0*m%FDynP(mem%NodeIndx(i))*mem%AxCp(i)*pi*mem%RMG(i)*dRdl_pp*mem%k + END IF + + + CALL LumpDistrHydroLoads( f_hydro, mem%k, deltal, h_c, m%memberLoads(im)%F_I(:, i) ) + y%Mesh%Force (:,mem%NodeIndx(i)) = y%Mesh%Force (:,mem%NodeIndx(i)) + m%memberLoads(im)%F_I(1:3, i) + y%Mesh%Moment(:,mem%NodeIndx(i)) = y%Mesh%Moment(:,mem%NodeIndx(i)) + m%memberLoads(im)%F_I(4:6, i) + END IF + + END DO ! i = 1,N+1 ! loop through member nodes + + END IF ! Check if the member is surface piercing + !-----------------------------------------------------------------------------------------------------! + ! External Hydrodynamic Side Loads - End ! + !-----------------------------------------------------------------------------------------------------! + + !-----------------------------------------------------------------------------------------------------! + ! Any end plate loads that are modeled on a per-member basis: F_B and F_BF ! + !-----------------------------------------------------------------------------------------------------! ! reassign convenience variables to correspond to member ends ! We need to subtract the MSL2SWL offset to place this in the SWL reference system pos1 = u%Mesh%TranslationDisp(:, mem%NodeIndx(1)) + u%Mesh%Position(:, mem%NodeIndx(1)) @@ -3122,10 +3755,11 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, call GetOrientationAngles( pos1, pos2, phi1, sinPhi1, cosPhi1, tanPhi, sinBeta1, cosBeta1, k_hat1, errStat2, errMsg2 ) if ( N == 1 ) then ! Only one element in member - sinPhi2 = sinPhi1 - cosPhi2 = cosPhi1 - sinBeta2 = sinBeta1 - cosBeta2 = cosBeta1 + sinPhi2 = sinPhi1 + cosPhi2 = cosPhi1 + sinBeta2 = sinBeta1 + cosBeta2 = cosBeta1 + k_hat2 = k_hat1 else ! We need to subtract the MSL2SWL offset to place this in the SWL reference system pos1 = u%Mesh%TranslationDisp(:, mem%NodeIndx(N)) + u%Mesh%Position(:, mem%NodeIndx(N)) @@ -3134,25 +3768,15 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, pos2(3) = pos2(3) - p%MSL2SWL call GetOrientationAngles( pos1, pos2, phi2, sinPhi2, cosPhi2, tanPhi, sinBeta2, cosBeta2, k_hat2, errStat2, errMsg2 ) end if + ! We need to subtract the MSL2SWL offset to place this in the SWL reference system pos2 = u%Mesh%TranslationDisp(:, mem%NodeIndx(N+1)) + u%Mesh%Position(:, mem%NodeIndx(N+1)) pos2(3) = pos2(3) - p%MSL2SWL z2 = pos2(3) - ! Check the member does not exhibit any of the following conditions - if (.not. mem%PropPot) then - if ( abs(z2) < abs(mem%Rmg(N+1)*sinPhi2) ) then - call SetErrStat(ErrID_Fatal, 'The upper end-plate of a member must not cross the water plane. This is not true for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) - end if - if ( abs(z1) < abs(mem%Rmg(1)*sinPhi1) ) then - call SetErrStat(ErrID_Fatal, 'The lower end-plate of a member must not cross the water plane. This is not true for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) - end if - end if - -! TODO: Do the equations below still work if z1 > z2 ? - !TODO, should not have to test seabed crossing in time-marching loop - - + !----------------------------------- filled buoyancy loads: starts -----------------------------------! + !TODO: Do the equations below still work if z1 > z2 ? + !TODO: Should not have to test seabed crossing in time-marching loop if ( mem%i_floor == 0 ) then ! both ends are above seabed !--- Water ballast buoyancy --- ! if member is fully flooded @@ -3187,48 +3811,132 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, ! no loads because both end nodes are below seabed end if - ! --- no inertia loads from water ballast modeled on ends + !------------------------------------ filled buoyancy loads: ends ------------------------------------! - ! --- external buoyancy loads: ends --- + ! --- no inertia loads from water ballast modeled on ends + !---------------------------------- external buoyancy loads: starts ----------------------------------! if ( .not. mem%PropPot ) then - ! We need to subtract the MSL2SWL offset to place this in the SWL reference system - pos1 = u%Mesh%TranslationDisp(:, mem%NodeIndx(1)) + u%Mesh%Position(:, mem%NodeIndx(1)) + + ! Get positions of member end nodes + pos1 = u%Mesh%TranslationDisp(:, mem%NodeIndx(1 )) + u%Mesh%Position(:, mem%NodeIndx(1 )) pos1(3) = pos1(3) - p%MSL2SWL + z1 = pos1(3) + r1 = mem%RMG(1 ) pos2 = u%Mesh%TranslationDisp(:, mem%NodeIndx(N+1)) + u%Mesh%Position(:, mem%NodeIndx(N+1)) pos2(3) = pos2(3) - p%MSL2SWL - z1 = pos1(3) - z2 = pos2(3) + z2 = pos2(3) + r2 = mem%RMG(N+1) + + ! Get free surface elevation vertically above or below the end nodes + IF ( p%WaveStMod > 0_IntKi ) THEN ! If wave stretching is enabled, compute buoyancy up to the instantaneous free surface + CALL GetTotalWaveElev( Time, (/pos1(1),pos1(2)/), Zeta1, ErrStat2, ErrMsg2 ) + CALL GetTotalWaveElev( Time, (/pos2(1),pos2(2)/), Zeta2, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Morison_CalcOutput' ) + ELSE ! Without wave stretching, compute buoyancy up to the SWL + Zeta1 = 0.0_ReKi + Zeta2 = 0.0_ReKi + END IF + + !----------------------- Check if the end plates are partially wetted: Start -----------------------! + !-------- End plate of node 1 -------- + IF ( p%WaveStMod > 0_IntKi ) THEN ! If wave stretching is enabled, compute the normal of the free surface + ! Estimate the free-surface normal vertically above or below node 1, n_hat + CALL GetTotalWaveElev( Time, (/pos1(1)+r1,pos1(2)/), ZetaP, ErrStat2, ErrMsg2 ) + CALL GetTotalWaveElev( Time, (/pos1(1)-r1,pos1(2)/), ZetaM, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Morison_CalcOutput' ) + dZetadx = (ZetaP-ZetaM)/(2.0_ReKi*r1) + CALL GetTotalWaveElev( Time, (/pos1(1),pos1(2)+r1/), ZetaP, ErrStat2, ErrMsg2 ) + CALL GetTotalWaveElev( Time, (/pos1(1),pos1(2)-r1/), ZetaM, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Morison_CalcOutput' ) + dZetady = (ZetaP-ZetaM)/(2.0_ReKi*r1) + n_hat = (/-dZetadx,-dZetady,1.0_ReKi/) + n_hat = n_hat / SQRT(Dot_Product(n_hat,n_hat)) + ELSE ! Without wave stretching, use normal of SWL + n_hat = (/0.0_ReKi,0.0_ReKi,1.0_ReKi/) + END IF + + ! Get t_hat and r_hat + t_hat = Cross_Product(k_hat1,n_hat) + sinGamma = SQRT(Dot_Product(t_hat,t_hat)) + IF (sinGamma < 0.0001) THEN ! Free surface normal is aligned with the element + ! Arbitrary choice for t_hat as long as it is perpendicular to k_hat + IF ( k_hat1(3) < 0.999999_ReKi ) THEN + t_hat = (/-k_hat1(2),k_hat1(1),0.0_ReKi/) + t_hat = t_hat / SQRT(Dot_Product(t_hat,t_hat)) + ELSE ! k_hat is close to vertical (0,0,1) + t_hat = (/1.0_ReKi,0.0_ReKi,0.0_ReKi/); + END IF + ELSE + t_hat = t_hat / sinGamma + END IF + r_hat = Cross_Product(t_hat,k_hat1) + IF ( ABS((Zeta1-z1)*n_hat(3)) < r1*Dot_Product(r_hat,n_hat) ) THEN ! End plate is only partially wetted + CALL SetErrStat(ErrID_Warn, 'End plate is partially wetted. The buoyancy load and distribution potentially have large error. This has happened to the first node of Member ID ' //trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + END IF + + !-------- End plate of node N+1 -------- + IF ( p%WaveStMod > 0_IntKi ) THEN ! If wave stretching is enabled, compute the normal of the free surface + ! Estimate the free-surface normal vertically above or below node N+1, n_hat + CALL GetTotalWaveElev( Time, (/pos2(1)+r2,pos2(2)/), ZetaP, ErrStat2, ErrMsg2 ) + CALL GetTotalWaveElev( Time, (/pos2(1)-r2,pos2(2)/), ZetaM, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Morison_CalcOutput' ) + dZetadx = (ZetaP-ZetaM)/(2.0_ReKi*r2) + CALL GetTotalWaveElev( Time, (/pos2(1),pos2(2)+r2/), ZetaP, ErrStat2, ErrMsg2 ) + CALL GetTotalWaveElev( Time, (/pos2(1),pos2(2)-r2/), ZetaM, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'Morison_CalcOutput' ) + dZetady = (ZetaP-ZetaM)/(2.0_ReKi*r2) + n_hat = (/-dZetadx,-dZetady,1.0_ReKi/) + n_hat = n_hat / SQRT(Dot_Product(n_hat,n_hat)) + ELSE ! Without wave stretching, use normal of SWL + n_hat = (/0.0_ReKi,0.0_ReKi,1.0_ReKi/) + END IF + + ! Get t_hat and r_hat + t_hat = Cross_Product(k_hat2,n_hat) + sinGamma = SQRT(Dot_Product(t_hat,t_hat)) + IF (sinGamma < 0.0001) THEN ! Free surface normal is aligned with the element + ! Arbitrary choice for t_hat as long as it is perpendicular to k_hat + IF ( k_hat2(3) < 0.999999_ReKi ) THEN + t_hat = (/-k_hat2(2),k_hat2(1),0.0_ReKi/) + t_hat = t_hat / SQRT(Dot_Product(t_hat,t_hat)) + ELSE ! k_hat is close to vertical (0,0,1) + t_hat = (/1.0_ReKi,0.0_ReKi,0.0_ReKi/); + END IF + ELSE + t_hat = t_hat / sinGamma + END IF + r_hat = Cross_Product(t_hat,k_hat2) + IF ( ABS((Zeta2-z2)*n_hat(3)) < r2*Dot_Product(r_hat,n_hat) ) THEN ! End plate is only partially wetted + CALL SetErrStat(ErrID_Warn, 'End plate is partially wetted. The buoyancy load and distribution potentially have large error. This has happened to the last node of Member ID ' //trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + END IF + !------------------------ Check if the end plates are partially wetted: End ------------------------! + if (mem%i_floor == 0) then ! both ends above or at seabed - if (z2<= 0.0_ReKi) then - ! Compute loads on both ends - Fl = -p%WtrDens * g * pi *mem%RMG(1)**2*z1 - Moment = -p%WtrDens * g * pi *0.25*mem%RMG(1)**4*sinPhi - call AddEndLoad(Fl, Moment, sinPhi1, cosPhi1, sinBeta1, cosBeta1, m%F_B_End(:, mem%NodeIndx(1))) - Fl = p%WtrDens * g * pi *mem%RMG(N+1)**2*z2 - Moment = p%WtrDens * g * pi *0.25*mem%RMG(N+1)**4*sinPhi + if ( z2 < Zeta2 ) then + ! Compute loads on the end plate of node N+1 + Fl = p%WtrDens * g * pi *mem%RMG(N+1)**2*z2 + Moment = p%WtrDens * g * pi *0.25*mem%RMG(N+1)**4*sinPhi call AddEndLoad(Fl, Moment, sinPhi2, cosPhi2, sinBeta2, cosBeta2, m%F_B_End(:, mem%NodeIndx(N+1))) - elseif ( z1< 0.0_ReKi ) then - ! Compute loads only on lower end + end if + if ( z1 < Zeta1 ) then + ! Compute loads on the end plate of node 1 Fl = -p%WtrDens * g * pi *mem%RMG(1)**2*z1 Moment = -p%WtrDens * g * pi *0.25*mem%RMG(1)**4*sinPhi call AddEndLoad(Fl, Moment, sinPhi1, cosPhi1, sinBeta1, cosBeta1, m%F_B_End(:, mem%NodeIndx(1))) - else - ! Entire member is above the still water line end if - - ! elseif ( (mem%i_floor < mem%NElements) .and. (z2<= 0.0_ReKi) ) then ! The member crosses the seabed line so only the upper end could have bouyancy effects, if at or below free surface - elseif ( (mem%doEndBuoyancy) .and. (z2<= 0.0_ReKi) ) then ! The member crosses the seabed line so only the upper end could have bouyancy effects, if at or below free surface + elseif ( (mem%doEndBuoyancy) .and. (z2 < Zeta2) ) then ! The member crosses the seabed line so only the upper end could have bouyancy effects, if below free surface ! Only compute the buoyancy contribution from the upper end Fl = p%WtrDens * g * pi *mem%RMG(N+1)**2*z2 Moment = p%WtrDens * g * pi *0.25*mem%RMG(N+1)**4*sinPhi call AddEndLoad(Fl, Moment, sinPhi2, cosPhi2, sinBeta2, cosBeta2, m%F_B_End(:, mem%NodeIndx(N+1))) else - ! entire member is buried below the seabed + ! entire member is buried below the seabed end if end if ! PropPot - + !----------------------------------- external buoyancy loads: ends -----------------------------------! + end do ! im - looping through members !do j = 1, p%NNodes @@ -3242,81 +3950,100 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, ! END DO ! !end do - - ! --- Hydrodynamic drag loads: joints - - ! NOTE: All wave kinematics have already been zeroed out above the SWL or instantaneous wave height (for WaveStMod > 0), so loads derived from the kinematics will be correct - ! without the use of a nodeInWater value, but other loads need to be multiplied by nodeInWater to zero them out above the SWL or instantaneous wave height. + !---------------------------------------------------------------------------------------------------------------! + ! External Hydrodynamic Joint Loads - Start ! + ! F_D_End, F_I_End, F_A_End, F_IMG_End ! + !---------------------------------------------------------------------------------------------------------------! + ! NOTE: All wave kinematics have already been zeroed out above the SWL or instantaneous wave height (for WaveStMod > 0), + ! so loads derived from the kinematics will be correct without the use of a nodeInWater value, but other loads need to be + ! multiplied by nodeInWater to zero them out above the SWL or instantaneous wave height. + !TODO: Where's F_WMF_End computed? + + DO J = 1, p%NJoints + + ! Obtain the node index because WaveVel, WaveAcc, and WaveDynP are defined in the node indexing scheme, not the markers (No longer relevant?) + ! The first NJoints nodes are all the joints with the rest being the internal nodes. See Morison_GenerateSimulationNodes. + + ! NOTE: + ! The PropPot values are only for members, and when the p%AM_End, p%DP_Const_End, p%Mass_MG_End, and p%I_MG_End are computed at init, + ! contributions to these values are added only if the member connecting to the joint is NOT modeled with potential flow theory + ! However, the p%An_End term used data from ALL members attached to a node, regardless of the PropPot setting, because the drag force is alway on. + ! Therefore, no need to check PropPot here. - DO J = 1, p%NJoints - - ! Obtain the node index because WaveVel, WaveAcc, and WaveDynP are defined in the node indexing scheme, not the markers - - - ! Compute the dot product of the relative velocity vector with the directional Area of the Joint - vmag = m%nodeInWater(j) * ( m%vrel(1,j)*p%An_End(1,J) + m%vrel(2,j)*p%An_End(2,J) + m%vrel(3,j)*p%An_End(3,J) ) + ! Effect of wave stretching already baked into m%FDynP, m%FA, and m%vrel. No additional modification needed. - !NOTE: The PropPot values are only for members, and when the p%AM_End, p%DP_Const_End, p%Mass_MG_End, and p%I_MG_End are computed at init, - ! contributions to these values are added only if the member connecting to the joint is NOT modeled with potential flow theory - ! However, the p%An_End term used data from ALL members attached to a node, regardless of the PropPot setting. + ! Lumped added mass loads + qdotdot = reshape((/u%Mesh%TranslationAcc(:,J),u%Mesh%RotationAcc(:,J)/),(/6/)) + m%F_A_End(:,J) = m%nodeInWater(j) * matmul( p%AM_End(:,:,J) , ( - qdotdot(1:3)) ) - ! Lumped added mass loads - qdotdot = reshape((/u%Mesh%TranslationAcc(:,J),u%Mesh%RotationAcc(:,J)/),(/6/)) - m%F_A_End(:,J) = m%nodeInWater(j) * matmul( p%AM_End(:,:,J) , ( - qdotdot(1:3)) ) + ! TODO: The original code did not multiply by nodeInWater, but should we? GJH + ! Should be ok because m%FDynP and m%FA are both zeroed above the SWL (when WaveStMod=0) or the instantaneous free surface (when WaveStMod>0) + m%F_I_End(:,J) = (p%DP_Const_End(:,j) * m%FDynP(j) + matmul(p%AM_End(:,:,j),m%FA(:,j))) - ! TODO: The original code did not multiply by nodeInWater, but should we? GJH - m%F_I_End(:,J) = (p%DP_Const_End(:,j) * m%FDynP(j) + matmul(p%AM_End(:,:,j),m%FA(:,j))) + ! Marine growth inertia: ends: Section 4.2.2 + ! With wave stretching, m%nodeInWater is based on the instantaneous free surface and the current body position if (WaveDisp/=0). + ! This should still be ok because with wave stretching, we do not allow joints to come out of water if initially submerged or + ! enter water if initially out of water. This is enforced when computing the side loads above. + m%F_IMG_End(1:3,j) = -m%nodeInWater(j) * p%Mass_MG_End(j)*qdotdot(1:3) + m%F_IMG_End(4:6,j) = -m%nodeInWater(j) * (matmul(p%I_MG_End(:,:,j),qdotdot(4:6)) - cross_product(u%Mesh%RotationVel(:,J),matmul(p%I_MG_End(:,:,j),u%Mesh%RotationVel(:,J)))) + + ! Compute the dot product of the relative velocity vector with the directional Area of the Joint + ! m%nodeInWater(j) is probably not necessary because m%vrel is zeroed when the node is out of water + vmag = m%nodeInWater(j) * ( m%vrel(1,j)*p%An_End(1,J) + m%vrel(2,j)*p%An_End(2,J) + m%vrel(3,j)*p%An_End(3,J) ) + ! High-pass filtering + vmagf = p%VRelNFiltConst(J) * (vmag + xd%v_rel_n_FiltStat(J)) + + ! Record most up-to-date vmagf and vmag at join J + m%v_rel_n(j) = vmag + m%v_rel_n_HiPass(j) = vmagf - ! Marine growth inertia: ends: Section 4.2.2 - m%F_IMG_End(1:3,j) = -m%nodeInWater(j) * p%Mass_MG_End(j)*qdotdot(1:3) - m%F_IMG_End(4:6,j) = -m%nodeInWater(j) * (matmul(p%I_MG_End(:,:,j),qdotdot(4:6)) - cross_product(u%Mesh%RotationVel(:,J),matmul(p%I_MG_End(:,:,j),u%Mesh%RotationVel(:,J)))) - - DO I=1,6 - - ! We are now combining the dynamic pressure term into the inertia term - - - IF (I < 4 ) THEN - - - m%F_D_End(i,j) = p%An_End(i,j)*p%DragConst_End(j)*abs(vmag)*vmag ! Note: vmag is zero if node is not in the water - y%Mesh%Force(i,j) = y%Mesh%Force(i,j) + m%F_D_End(i,j) + m%F_I_End(i,j) + p%F_WMG_End(i,j) + m%F_B_End(i,j) + m%F_BF_End(i,j) + m%F_A_End(i,j) + m%F_IMG_End(i,j) - ELSE - y%Mesh%Moment(i-3,j) = y%Mesh%Moment(i-3,j) + m%F_B_End(i,j) + m%F_BF_End(i,j) + m%F_IMG_End(i,j) + ! Evaluate drag force and combine all per-joint loads + DO I=1,6 + IF (I < 4 ) THEN ! Three force components + IF ( p%DragMod_End(J) .EQ. 0_IntKi ) THEN + ! Note: vmag is zero if node is not in the water + m%F_D_End(i,j) = (1.0_ReKi - p%DragLoFSc_End(j)) * p%An_End(i,j) * p%DragConst_End(j) * abs(vmagf)*vmagf & + + p%DragLoFSc_End(j) * p%An_End(i,j) * p%DragConst_End(j) * abs(vmag )*vmag + ELSE IF (p%DragMod_End(J) .EQ. 1_IntKi) THEN + ! Note: vmag is zero if node is not in the water + m%F_D_End(i,j) = (1.0_ReKi - p%DragLoFSc_End(j)) * p%An_End(i,j) * p%DragConst_End(j) * abs(vmagf)*max(vmagf,0.0_ReKi) & + + p%DragLoFSc_End(j) * p%An_End(i,j) * p%DragConst_End(j) * abs(vmag) *max(vmag, 0.0_ReKi) + m%F_D_End(i,j) = 2.0_ReKi * m%F_D_End(i,j) END IF - END DO ! I=1,6 - ENDDO ! J = 1, p%NJoints - - ! OutSwtch determines whether or not to actually output results via the WriteOutput array - ! 1 = Morison will generate an output file of its own. 2 = the caller will handle the outputs, but - ! Morison needs to provide them. 3 = Both 1 and 2, 0 = No one needs the Morison outputs provided - ! via the WriteOutput array. + + y%Mesh%Force(i,j) = y%Mesh%Force(i,j) + m%F_D_End(i,j) + m%F_I_End(i,j) + p%F_WMG_End(i,j) + m%F_B_End(i,j) + m%F_BF_End(i,j) + m%F_A_End(i,j) + m%F_IMG_End(i,j) + ELSE ! Three moment components + y%Mesh%Moment(i-3,j) = y%Mesh%Moment(i-3,j) + m%F_B_End(i,j) + m%F_BF_End(i,j) + m%F_IMG_End(i,j) + END IF + END DO ! I=1,6 - IF ( p%OutSwtch > 0 ) THEN - - ! Map calculated results into the AllOuts Array - CALL MrsnOut_MapOutputs(Time, y, p, u, m, AllOuts, errStat, errMsg) - - - ! Put the output data in the WriteOutput array + END DO ! J = 1, p%NJoints - DO I = 1,p%NumOuts + !---------------------------------------------------------------------------------------------------------------! + ! External Hydrodynamic Joint Loads - End ! + !---------------------------------------------------------------------------------------------------------------! + ! Map calculated results into the y%WriteOutput Array + CALL MrsnOut_MapOutputs(y, p, u, m) + - y%WriteOutput(I) = p%OutParam(I)%SignM * AllOuts( p%OutParam(I)%Indx ) - - END DO - - - ! Generate output into the output file - - IF ( p%OutSwtch == 1 .OR. p%OutSwtch == 3 ) THEN - CALL MrsnOut_WriteOutputs( p%UnOutFile, Time, y, p, errStat, errMsg ) - END IF + + CONTAINS + SUBROUTINE GetTotalWaveElev( Time, positionXY, Zeta, ErrStat, ErrMsg ) + REAL(DbKi), INTENT( IN ) :: Time + REAL(ReKi), INTENT( IN ) :: positionXY(2) + REAL(ReKi), INTENT( OUT ) :: Zeta + INTEGER(IntKi), INTENT( OUT ) :: ErrStat ! Error status of the operation + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if errStat /= ErrID_None + ErrStat = ErrID_None + ErrMsg = "" + Zeta = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat, ErrMsg ) + IF (associated(p%WaveElev2)) THEN + Zeta = Zeta + SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat, ErrMsg ) END IF - - -END SUBROUTINE Morison_CalcOutput + END SUBROUTINE GetTotalWaveElev +END SUBROUTINE Morison_CalcOutput +!---------------------------------------------------------------------------------------------------------------------------------- subroutine LumpDistrHydroLoads( f_hydro, k_hat, dl, h_c, lumpedLoad ) real(ReKi), intent(in ) :: f_hydro(3) real(ReKi), intent(in ) :: k_hat(3) @@ -3328,7 +4055,7 @@ subroutine LumpDistrHydroLoads( f_hydro, k_hat, dl, h_c, lumpedLoad ) lumpedLoad(1:3) = f_hydro*dl lumpedLoad(4:6) = cross_product(k_hat*h_c, f_hydro)*dl end subroutine LumpDistrHydroLoads - +!---------------------------------------------------------------------------------------------------------------------------------- ! Takes loads on node i in element tilted frame and converts to 6DOF loads at node i and adjacent node SUBROUTINE DistributeElementLoads(Fl, Fr, M, sinPhi, cosPhi, SinBeta, cosBeta, alpha, F1, F2) @@ -3388,8 +4115,7 @@ SUBROUTINE DistributeElementLoads(Fl, Fr, M, sinPhi, cosPhi, SinBeta, cosBeta, a !F2(6) = 0.0 END SUBROUTINE DistributeElementLoads - - +!---------------------------------------------------------------------------------------------------------------------------------- ! Takes loads on end node i and converts to 6DOF loads, adding to the nodes existing loads SUBROUTINE AddEndLoad(Fl, M, sinPhi, cosPhi, SinBeta, cosBeta, Fi) @@ -3410,96 +4136,120 @@ SUBROUTINE AddEndLoad(Fl, M, sinPhi, cosPhi, SinBeta, cosBeta, Fi) END SUBROUTINE AddEndLoad -!---------------------------------------------------------------------------------------------------------------------------------- -!> Tight coupling routine for computing derivatives of continuous states -SUBROUTINE Morison_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, errStat, errMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(Morison_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Morison_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Morison_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(Morison_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(Morison_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(Morison_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(Morison_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - TYPE(Morison_ContinuousStateType), INTENT( OUT) :: dxdt !< Continuous state derivatives at Time - INTEGER(IntKi), INTENT( OUT) :: errStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: errMsg !< Error message if errStat /= ErrID_None - - - ! Initialize errStat - - errStat = ErrID_None - errMsg = "" - - - ! Compute the first time derivatives of the continuous states here: - - dxdt%DummyContState = 0.0 - - -END SUBROUTINE Morison_CalcContStateDeriv !---------------------------------------------------------------------------------------------------------------------------------- !> Tight coupling routine for updating discrete states SUBROUTINE Morison_UpdateDiscState( Time, u, p, x, xd, z, OtherState, m, errStat, errMsg ) !.................................................................................................................................. - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(Morison_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Morison_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Morison_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(Morison_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at Time; - !! Output: Discrete states at Time + Interval - TYPE(Morison_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(Morison_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(Morison_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: errStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: errMsg !< Error message if errStat /= ErrID_None - - - ! Initialize errStat - - errStat = ErrID_None - errMsg = "" - - - ! Update discrete states here: - - ! StateData%DiscState = - -END SUBROUTINE Morison_UpdateDiscState -!---------------------------------------------------------------------------------------------------------------------------------- -!> Tight coupling routine for solving for the residual of the constraint state equations -SUBROUTINE Morison_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m, z_residual, errStat, errMsg ) -!.................................................................................................................................. + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + TYPE(Morison_InputType), INTENT(IN ) :: u !< Inputs at Time + TYPE(Morison_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(Morison_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(Morison_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at Time; + !< Output: Discrete states at Time + Interval + TYPE(Morison_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time + TYPE(Morison_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time + TYPE(Morison_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables + INTEGER(IntKi), INTENT( OUT) :: errStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: errMsg !< Error message if errStat /= ErrID_None + INTEGER(IntKi) :: J + REAL(ReKi) :: WtrDpth + REAL(ReKi) :: pos(3), posPrime(3), positionXY(2) + REAL(SiKi) :: WaveElev, WaveElev1, WaveElev2 + REAL(ReKi) :: vrel(3), FV(3), vmag, vmagf + INTEGER(IntKi) :: errStat2 + CHARACTER(ErrMsgLen) :: errMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Morison_UpdateDiscState' + + ! Initialize errStat + errStat = ErrID_None + errMsg = "" - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(Morison_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Morison_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Morison_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(Morison_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(Morison_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(Morison_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(Morison_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - TYPE(Morison_ConstraintStateType), INTENT( OUT) :: z_residual !< Residual of the constraint state equations using - !! the input values described above - INTEGER(IntKi), INTENT( OUT) :: errStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: errMsg !< Error message if errStat /= ErrID_None - - - ! Initialize errStat - - errStat = ErrID_None - errMsg = "" - - - ! Solve for the constraint states here: - - z_residual%DummyConstrState = 0.0_ReKi + ! Water depth measured from the free surface + WtrDpth = p%WtrDpth + p%MSL2SWL -END SUBROUTINE Morison_CalcConstrStateResidual + ! Update state of the relative normal velocity high-pass filter at each joint + DO j = 1, p%NJoints + ! Get joint position + IF (p%WaveDisp == 0 ) THEN + ! use the initial X,Y location + pos(1) = u%Mesh%Position(1,j) + pos(2) = u%Mesh%Position(2,j) + ELSE + ! Use current X,Y location + pos(1) = u%Mesh%TranslationDisp(1,j) + u%Mesh%Position(1,j) + pos(2) = u%Mesh%TranslationDisp(2,j) + u%Mesh%Position(2,j) + END IF + IF (p%WaveStMod > 0 .AND. p%WaveDisp /= 0) THEN ! Wave stretching enabled + pos(3) = u%Mesh%Position(3,j) + u%Mesh%TranslationDisp(3,j) - p%MSL2SWL ! Use the current Z location. + ELSE ! Wave stretching disabled + pos(3) = u%Mesh%Position(3,j) - p%MSL2SWL ! We are intentionally using the undisplaced Z position of the node. + END IF + ! Compute the free surface elevation at the x/y position of the joint + positionXY = (/pos(1),pos(2)/) + WaveElev1 = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (associated(p%WaveElev2)) THEN + WaveElev2 = SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveElev = WaveElev1 + WaveElev2 + ELSE + WaveElev = WaveElev1 + END IF + ! Compute fluid and relative velocity at the joint + IF (p%WaveStMod == 0) THEN ! No wave stretching + IF ( pos(3) <= 0.0_ReKi) THEN ! Node is at or below the SWL + ! Use location to obtain interpolated values of kinematics + call SeaSt_Interp_Setup( Time, pos, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FV = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + vrel = FV - u%Mesh%TranslationVel(:,j) + ELSE ! Node is above the SWL + vrel = 0.0_ReKi + END IF + ELSE ! Wave stretching enabled + IF ( pos(3) <= WaveElev ) THEN ! Node is submerged + IF ( p%WaveStMod < 3 ) THEN ! Vertical or extrapolated wave stretching + IF ( pos(3) <= 0.0_ReKi) THEN ! Node is below the SWL - evaluate wave dynamics as usual + ! Use location to obtain interpolated values of kinematics + call SeaSt_Interp_Setup( Time, pos, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FV = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ELSE ! Node is above SWL - need wave stretching + ! Vertical wave stretching + FV = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveVel0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ! Extrapoled wave stretching + IF (p%WaveStMod == 2) THEN + FV = FV + SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveVel0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * pos(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + END IF ! Node is submerged + ELSE ! Wheeler stretching - no need to check whether the node is above or below SWL + ! Map the node z-position linearly from [-WtrDpth,WaveElev] to [-WtrDpth,0] + posPrime = pos + posPrime(3) = WtrDpth*(WtrDpth+pos(3))/(WtrDpth+WaveElev)-WtrDpth + ! Obtain the wave-field variables by interpolation with the mapped position. + call SeaSt_Interp_Setup( Time, posPrime, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + FV = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + vrel = FV - u%Mesh%TranslationVel(:,j) + ELSE ! Node is out of water - zero-out all wave dynamics + vrel = 0.0_ReKi + END IF ! If node is in or out of water + END IF ! If wave stretching is on or off + ! Compute the dot product of the relative velocity vector with the directional Area of the Joint + vmag = vrel(1)*p%An_End(1,J) + vrel(2)*p%An_End(2,J) + vrel(3)*p%An_End(3,J) + ! High-pass filtering + vmagf = p%VRelNFiltConst(J) * (vmag + xd%V_rel_n_FiltStat(J)) + ! Update relative normal velocity filter state for joint J + xd%V_rel_n_FiltStat(J) = vmagf-vmag + END DO ! j = 1, p%NJoints +END SUBROUTINE Morison_UpdateDiscState !---------------------------------------------------------------------------------------------------------------------------------- - END MODULE Morison !********************************************************************************************************************************** diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index 2943d32c35..48babf0425 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -13,16 +13,16 @@ # ...... Include files (definitions from NWTC Library) ............................................................................ # make sure that the file name does not have any trailing white spaces! include Registry_NWTC_Library.txt +usefrom SeaState_Interp.txt # # -param Morison/Morison unused INTEGER MaxMrsnOutputs - 4599 - "Total number of possible Morison module output channels" - -typedef ^ Morison_JointType INTEGER JointID - - - "User-specified integer ID for the given joint" - +typedef Morison/Morison Morison_JointType INTEGER JointID - - - "User-specified integer ID for the given joint" - typedef ^ ^ ReKi Position {3} - - "Undisplaced location of the joint in the platform coordinate system" m typedef ^ ^ INTEGER JointAxID - - - "Axial ID (found in the user-supplied Axial Coefficients Table) for this joint: used to determine axial coefs" - typedef ^ ^ INTEGER JointAxIDIndx - - - "The index into the Axial Coefs arrays corresponding to the above Axial ID" - typedef ^ ^ INTEGER JointOvrlp - - - "Joint overlap code [Unused" - typedef ^ ^ INTEGER NConnections - - - "Number of members connecting to this joint" - -typedef ^ ^ INTEGER ConnectionList {10} - - "List of Members connected to this joint. The member index is what is stored, not the Member ID" - +typedef ^ ^ INTEGER ConnectionList {50} - - "List of Members connected to this joint. The member index is what is stored, not the Member ID" - typedef ^ Morison_MemberPropType INTEGER PropSetID - - - "User-specified integer ID for this group of properties" - typedef ^ ^ ReKi PropD - - - "Diameter" m typedef ^ ^ ReKi PropThck - - - "Wall thickness" m @@ -44,10 +44,14 @@ typedef ^ ^ ReKi typedef ^ ^ ReKi DpthAxCaMG - - - "Depth-based Axial Ca for marine growth" - typedef ^ ^ ReKi DpthAxCp - - - "Depth-based Axial Cp" - typedef ^ ^ ReKi DpthAxCpMG - - - "Depth-based Axial Cp for marine growth" - +typedef ^ ^ LOGICAL DpthMCF - - - "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model" - typedef ^ Morison_AxialCoefType INTEGER AxCoefID - - - "User-supplied integer ID for this set of Axial coefs" - typedef ^ ^ ReKi AxCd - - - "Axial Cd" - typedef ^ ^ ReKi AxCa - - - "Axial Ca" - typedef ^ ^ ReKi AxCp - - - "Axial Cp" - +typedef ^ ^ ReKi AxVnCOff - - - "High-pass cut-off frequency for normal velocity when computing axial drag force" - +typedef ^ ^ ReKi AxFDLoFSc - - - "Scaling factor for low frequency axial drag force" - +typedef ^ ^ IntKi AxFDMod - - - "Switch for the axial drag formulation {0: original formulation, 1: Away from member only}" - # typedef ^ Morison_MemberInputType INTEGER MemberID - - - "User-supplied integer ID for this member" - typedef ^ ^ INTEGER NodeIndx {:} - - "Index of each of the member's nodes in the master node list" - @@ -64,6 +68,7 @@ typedef ^ ^ INTEGER typedef ^ ^ INTEGER MmbrCoefIDIndx - - - "Index into the appropriate coefs table for this member's properties" - typedef ^ ^ INTEGER MmbrFilledIDIndx - - - "Index into the filled group table if this is a filled member" - typedef ^ ^ LOGICAL PropPot - - - "Flag T/F for whether the member is modeled with potential flow theory" - +typedef ^ ^ LOGICAL PropMCF - - - "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model" - typedef ^ ^ INTEGER NElements - - - "number of elements in this member" - typedef ^ ^ ReKi RefLength - - - "the reference total length for this member" m typedef ^ ^ ReKi dl - - - "the reference element length for this member (may be less than MDivSize to achieve uniform element lengths)" m @@ -73,10 +78,13 @@ typedef ^ ^ ReKi typedef ^ ^ INTEGER JointOvrlp - - - "" - typedef ^ ^ INTEGER JointAxIDIndx - - - "" - typedef ^ ^ INTEGER NConnections - - - "Number of elements connecting to this node" - -typedef ^ ^ INTEGER ConnectionList {10} - - "Indices of all the members connected to this node (positive if end 1, negative if end 2)" - +typedef ^ ^ INTEGER ConnectionList {50} - - "Indices of all the members connected to this node (positive if end 1, negative if end 2)" - typedef ^ ^ ReKi JAxCd - - - "Nodal lumped (joint) axial Cd" - typedef ^ ^ ReKi JAxCa - - - "Nodal lumped (joint) axial Cp" - typedef ^ ^ ReKi JAxCp - - - "Nodal lumped (joint) axial Ca" - +typedef ^ ^ ReKi JAxVnCOff - - - "High-pass cut-off frequency for normal velocity when computing axial drag force" - +typedef ^ ^ ReKi JAxFDLoFSc - - - "Scaling factor for low frequency axial drag force" - +typedef ^ ^ IntKi JAxFDMod - - - "Switch for the axial drag formulation {0: original formulation, 1: Away from member only}" - typedef ^ ^ ReKi FillDensity - - - "Fill fluid density" kg/m^3 typedef ^ ^ ReKi tMG - - - "Nodal thickness with marine growth " m typedef ^ ^ ReKi MGdensity - - - "Nodal density of marine growth" kg/m^3 @@ -145,6 +153,7 @@ typedef ^ ^ INTEGER typedef ^ ^ ReKi FillFSLoc - - - "Z-location of the filled free-surface" m typedef ^ ^ ReKi FillDens - - - "Filled fluid density" kg/m^3 typedef ^ ^ LOGICAL PropPot - - - "Is this element/member modeled with potential flow theory T/F" - +typedef ^ ^ LOGICAL PropMCF - - - "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model" - typedef ^ ^ LOGICAL Flipped - - - "Was the member flipped in a reordering event? Need to know this to get the correct normal vector to the ends" - # typedef ^ Morison_MemberLoads ReKi F_D {:}{:} - - "Member-based (side-effects) Nodal viscous drag loads at time t" - @@ -184,18 +193,19 @@ typedef ^ ^ ReKi typedef ^ ^ ReKi MemberAxCp2 - - - "Member-based coefs, see above descriptions for meanings (1 = start, 2=end)" - typedef ^ ^ ReKi MemberAxCpMG1 - - - "Member-based coefs, see above descriptions for meanings (1 = start, 2=end)" - typedef ^ ^ ReKi MemberAxCpMG2 - - - "Member-based coefs, see above descriptions for meanings (1 = start, 2=end)" - +typedef ^ ^ LOGICAL MemberMCF - - - "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model" - typedef ^ Morison_MGDepthsType ReKi MGDpth - - - "Marine growth depth location for these properties" m typedef ^ ^ ReKi MGThck - - - "Marine growth thickness" m typedef ^ ^ ReKi MGDens - - - "Marine growth density" kg/m^3 typedef ^ Morison_MOutput INTEGER MemberID - - - "Member ID for requested output" - -typedef ^ ^ INTEGER NOutLoc - - - "The number of requested output locations" - -typedef ^ ^ ReKi NodeLocs {:} - - "Normalized locations along user-specified member for the outputs" - -typedef ^ ^ INTEGER MemberIDIndx - - - "Index for member in the master list" - -typedef ^ ^ INTEGER MeshIndx1 {:} - - "Index of node in Mesh for the start of the member element" - -typedef ^ ^ INTEGER MeshIndx2 {:} - - "Index of node in Mesh for the end of the member element" - -typedef ^ ^ INTEGER MemberIndx1 {:} - - "Index of Member nodes for the start of the member element" - -typedef ^ ^ INTEGER MemberIndx2 {:} - - "Index of Member nodes for the end of the member element" - -typedef ^ ^ ReKi s {:} - - "Linear interpolation factor between node1 and node2 for the output location" - +typedef ^ Morison_MOutput INTEGER NOutLoc - - - "The number of requested output locations" - +typedef ^ Morison_MOutput ReKi NodeLocs {:} - - "Normalized locations along user-specified member for the outputs" - +typedef ^ Morison_MOutput INTEGER MemberIDIndx - - - "Index for member in the master list" - +typedef ^ Morison_MOutput INTEGER MeshIndx1 {:} - - "Index of node in Mesh for the start of the member element" - +typedef ^ Morison_MOutput INTEGER MeshIndx2 {:} - - "Index of node in Mesh for the end of the member element" - +typedef ^ Morison_MOutput INTEGER MemberIndx1 {:} - - "Index of Member nodes for the start of the member element" - +typedef ^ Morison_MOutput INTEGER MemberIndx2 {:} - - "Index of Member nodes for the end of the member element" - +typedef ^ Morison_MOutput ReKi s {:} - - "Linear interpolation factor between node1 and node2 for the output location" - typedef ^ Morison_JOutput INTEGER JointID - - - "Joint ID for the requested output" - typedef ^ ^ INTEGER JointIDIndx - - - "Joint index in the master list" - # ..... Initialization data ....................................................................................................... @@ -206,6 +216,8 @@ typedef ^ InitInputType ReKi typedef ^ ^ ReKi WtrDens - - - "Water density" kg/m^3 typedef ^ ^ ReKi WtrDpth - - - "Water depth (positive-valued)" m typedef ^ ^ ReKi MSL2SWL - - - "Mean Sea Level to Still Water Level offset" m +typedef ^ ^ INTEGER WaveDisp - - - "Method of computing Wave Kinematics. (0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) " - +typedef ^ ^ INTEGER AMMod - - - "Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 1: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState]" - typedef ^ ^ INTEGER NJoints - - - "Number of user-specified joints" - typedef ^ ^ INTEGER NNodes - - - "Total number of nodes in the final software model" - typedef ^ ^ Morison_JointType InpJoints {:} - - "Array of user-specified joints" - @@ -226,11 +238,12 @@ typedef ^ ^ ReKi typedef ^ ^ ReKi SimplAxCaMG - - - "Simple model Axial Ca for marine growth" - typedef ^ ^ ReKi SimplAxCp - - - "Simple model Axial Cp" - typedef ^ ^ ReKi SimplAxCpMG - - - "Simple model Axial Cp for marine growth" - -typedef ^ ^ INTEGER NCoefDpth - - - "" - +typedef ^ ^ LOGICAL SimplMCF - - - "Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model" - +typedef ^ ^ INTEGER NCoefDpth - - - "" - typedef ^ ^ Morison_CoefDpths CoefDpths {:} - - "" - typedef ^ ^ INTEGER NCoefMembers - - - "" - typedef ^ ^ Morison_CoefMembers CoefMembers {:} - - "" - -typedef ^ ^ INTEGER NMembers - - - "Number of user-specified members in the input file" - +typedef ^ ^ INTEGER NMembers - - - "Number of user-specified members in the input file" - typedef ^ ^ Morison_MemberInputType InpMembers {:} - - "Array of user-specified members" - typedef ^ ^ INTEGER NFillGroups - - - "" - typedef ^ ^ Morison_FilledGroupType FilledGroups {:} - - "" - @@ -242,26 +255,28 @@ typedef ^ ^ INTEGER typedef ^ ^ Morison_MOutput MOutLst {:} - - "" - typedef ^ ^ INTEGER NJOutputs - - - "" - typedef ^ ^ Morison_JOutput JOutLst {:} - - "" - -typedef ^ ^ CHARACTER(ChanLen) OutList {4032} - - "This list size needs to be the maximum # of possible outputs because of the use of ReadAry()" - -typedef ^ ^ LOGICAL ValidOutList {:} - - "" - +typedef ^ ^ CHARACTER(ChanLen) OutList {:} - - "This list size needs to be the maximum # of possible outputs because of the use of ReadAry(). Use MaxMrsnOutputs" - typedef ^ ^ INTEGER NumOuts - - - "" - -typedef ^ ^ INTEGER OutSwtch - - - "" - -typedef ^ ^ LOGICAL OutAll - - - "" - -typedef ^ ^ CHARACTER(1024) OutRootName - - - "" - -typedef ^ ^ INTEGER UnOutFile - - - "" - typedef ^ ^ INTEGER UnSum - - - "" - typedef ^ ^ INTEGER NStepWave - - - "" - -typedef ^ ^ SiKi WaveAcc {:}{:}{:} - - "" - -typedef ^ ^ SiKi WaveTime {:} - - "" - -typedef ^ ^ SiKi WaveDynP {:}{:} - - "" - -typedef ^ ^ SiKi WaveVel {:}{:}{:} - - "" - -typedef ^ ^ INTEGER nodeInWater {:}{:} - - "Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated" - +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation (points to SeaState module data)" - +typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation (points to SeaState module data)" - +typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi WaveAccMCF {*}{*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi WaveTime {*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi PWaveAccMCF0 {*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +typedef ^ ^ INTEGER WaveStMod - - - "" - +typedef ^ ^ SiKi MCFD - - - "Diameter of the MacCamy-Fuchs member." - # # # Define outputs from the initialization routine here: # -#typedef ^ InitOutputType MeshType Mesh - - - "Unused?" - -#typedef ^ ^ SiKi Morison_Rad {:} - - "radius of node (for FAST visualization)" (m) typedef ^ InitOutputType CHARACTER(ChanLen) WriteOutputHdr {:} - - "User-requested Output channel names" - typedef ^ ^ CHARACTER(ChanLen) WriteOutputUnt {:} - - "" - # @@ -274,7 +289,7 @@ typedef ^ ContinuousStateType SiKi # # Define discrete (nondifferentiable) states here: # -typedef ^ DiscreteStateType SiKi DummyDiscState - - - "Remove this variable if you have discrete states" - +typedef ^ DiscreteStateType ReKi V_rel_n_FiltStat {:} - - "State of the high-pass filter for the joint relative normal velocity" m/s # # # Define constraint states here: @@ -299,7 +314,11 @@ typedef ^ OtherStateType IntKi #typedef ^ ^ ReKi F_DP {:}{:} - - "Lumped dynamic pressure loads at time t, which may not correspond to the WaveTime array of times" - typedef ^ MiscVarType ReKi FV {:}{:} - - "Fluid velocity at line element node at time t, which may not correspond to the WaveTime array of times" - typedef ^ ^ ReKi FA {:}{:} - - "Fluid acceleration at line element node at time t, which may not correspond to the WaveTime array of times" - +typedef ^ ^ ReKi FAMCF {:}{:} - - "Fluid acceleration at line element node at time t, which may not correspond to the WaveTime array of times" - typedef ^ ^ ReKi FDynP {:} - - "Fluid dynamic pressure at line element node at time t, which may not correspond to the WaveTime array of times" - +typedef ^ ^ SiKi WaveElev {:} - - "Total wave elevation" m +typedef ^ ^ SiKi WaveElev1 {:} - - "First order wave elevation" m +typedef ^ ^ SiKi WaveElev2 {:} - - "Second order wave elevation" m typedef ^ ^ ReKi vrel {:}{:} - - "velocity of structural node relative to the water" m/s^2 typedef ^ ^ INTEGER nodeInWater {:} - - "Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated" - typedef ^ ^ Morison_MemberLoads memberLoads {:} - - "Array (NMembers long) of member-based side-effects load contributions" - @@ -309,7 +328,10 @@ typedef ^ ^ ReKi typedef ^ ^ ReKi F_IMG_End {:}{:} - - "Joint marine growth intertia loads at time t, which may not correspond to the WaveTime array of times" - typedef ^ ^ ReKi F_A_End {:}{:} - - "Lumped added mass loads at time t, which may not correspond to the WaveTime array of times" - typedef ^ ^ ReKi F_BF_End {:}{:} - - "" - +typedef ^ ^ ReKi V_rel_n {:} - - "Normal relative flow velocity at joints" m/s +typedef ^ ^ ReKi V_rel_n_HiPass {:} - - "High-pass filtered normal relative flow velocity at joints" m/s typedef ^ ^ INTEGER LastIndWave - - - "Last time index used in the wave kinematics arrays" - +typedef ^ ^ SeaSt_Interp_MiscVarType SeaSt_Interp_m - - - "misc var information from the SeaState Interpolation module" - # ..... Parameters ................................................................................................................ # Define parameters here: @@ -320,6 +342,8 @@ typedef ^ ^ ReKi typedef ^ ^ ReKi WtrDens - - - "Water density" kg/m^3 typedef ^ ^ ReKi WtrDpth - - - "Water depth (positive-valued)" m typedef ^ ^ ReKi MSL2SWL - - - "Mean Sea Level to Still Water Level offset" m +typedef ^ ^ INTEGER WaveDisp - - - "Method of computing Wave Kinematics. (0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) " - +typedef ^ ^ INTEGER AMMod - - - "Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 1: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState]" - typedef ^ ^ INTEGER NMembers - - - "number of members" - typedef ^ ^ Morison_MemberType Members {:} - - "Array of Morison members used during simulation" - typedef ^ ^ INTEGER NNodes - - - "" - @@ -327,15 +351,28 @@ typedef ^ ^ INTEGER typedef ^ ^ ReKi I_MG_End {:}{:}{:} - - "Inertial matrix associated with marine growth mass at joint" - typedef ^ ^ ReKi An_End {:}{:} - - "directional area vector of each joint" m^2 typedef ^ ^ ReKi DragConst_End {:} - - "" - +typedef ^ ^ ReKi VRelNFiltConst {:} - - "" - +typedef ^ ^ IntKi DragMod_End {:} - - "" - +typedef ^ ^ ReKi DragLoFSc_End {:} - - "" - typedef ^ ^ ReKi F_WMG_End {:}{:} - - "Joint marine growth weight loads, constant for all t" N typedef ^ ^ ReKi DP_Const_End {:}{:} - - "Constant part of Joint dynamic pressure term" N typedef ^ ^ ReKi Mass_MG_End {:} - - "Joint marine growth mass" kg typedef ^ ^ ReKi AM_End {:}{:}{:} - - "3x3 Joint added mass matrix, constant for all t" N -typedef ^ ^ SiKi WaveVel {:}{:}{:} - - "" - -typedef ^ ^ SiKi WaveAcc {:}{:}{:} - - "" - -typedef ^ ^ SiKi WaveDynP {:}{:} - - "" - -typedef ^ ^ SiKi WaveTime {:} - - "Times for which the wave kinematics are pre-computed" s -typedef ^ ^ INTEGER nodeInWater {:}{:} - - "Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated" - +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation (points to SeaState module data)" m +typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation (points to SeaState module data)" m +typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi WaveAccMCF {*}{*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi WaveVel0 {:}{:}{:}{:} - - "" - +typedef ^ ^ SiKi WaveAcc0 {:}{:}{:}{:} - - "" - +typedef ^ ^ SiKi WaveAccMCF0 {:}{:}{:}{:} - - "" - +typedef ^ ^ SiKi WaveDynP0 {:}{:}{:} - - "" - +typedef ^ ^ SiKi WaveTime {*} - - "Times for which the wave kinematics are pre-computed (points to SeaState module data)" s +typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi PWaveAccMCF0 {*}{*}{*}{*} - - "(points to SeaState module data)" - +typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "(points to SeaState module data)" - typedef ^ ^ INTEGER NStepWave - - - "" - typedef ^ ^ INTEGER NMOutputs - - - "" - typedef ^ ^ Morison_MOutput MOutLst {:} - - "" - @@ -343,12 +380,8 @@ typedef ^ ^ INTEGER typedef ^ ^ Morison_JOutput JOutLst {:} - - "" - typedef ^ ^ OutParmType OutParam {:} - - "" - typedef ^ ^ INTEGER NumOuts - - - "" - -typedef ^ ^ INTEGER NumOutAll - - - "" - -typedef ^ ^ INTEGER OutSwtch - - - "" - -typedef ^ ^ INTEGER UnOutFile - - - "" - -typedef ^ ^ CHARACTER(20) OutFmt - - - "" - -typedef ^ ^ CHARACTER(20) OutSFmt - - - "" - -typedef ^ ^ CHARACTER(ChanLen) Delim - - - "" - +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +typedef ^ ^ INTEGER WaveStMod - - - "" - # # # ..... Inputs .................................................................................................................... diff --git a/modules/hydrodyn/src/Morison_Output.f90 b/modules/hydrodyn/src/Morison_Output.f90 index 4ec1db451a..16ccff3178 100644 --- a/modules/hydrodyn/src/Morison_Output.f90 +++ b/modules/hydrodyn/src/Morison_Output.f90 @@ -30,4636 +30,4670 @@ MODULE Morison_Output PRIVATE - ! Indices for computing output channels: - ! NOTES: - ! (1) These parameters are in the order stored in "OutListParameters.xlsx" - ! (2) Array AllOuts() must be dimensioned to the value of the largest output parameter -! This code was generated by Write_ChckOutLst.m at 04-Jan-2014 12:13:30. +! =================================================================================================== +! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m" +! 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 06-Sep-2022 13:57:52. ! Indices for computing output channels: - ! NOTES: + ! NOTES: ! (1) These parameters are in the order stored in "OutListParameters.xlsx" - ! (2) Array y%AllOuts() must be dimensioned to the value of the largest output parameter + ! (2) Array AllOuts() must be dimensioned to the value of the largest output parameter + + ! Time: - ! Time: - INTEGER(IntKi), PARAMETER :: Time = 0 + INTEGER(IntKi), PARAMETER :: Time = 0 - ! Member-level Wave Kinematics : + ! Member-level Wave Kinematics: - INTEGER(IntKi), PARAMETER :: M1N1Axi = 1 - INTEGER(IntKi), PARAMETER :: M1N2Axi = 2 - INTEGER(IntKi), PARAMETER :: M1N3Axi = 3 - INTEGER(IntKi), PARAMETER :: M1N4Axi = 4 - INTEGER(IntKi), PARAMETER :: M1N5Axi = 5 - INTEGER(IntKi), PARAMETER :: M1N6Axi = 6 - INTEGER(IntKi), PARAMETER :: M1N7Axi = 7 - INTEGER(IntKi), PARAMETER :: M1N8Axi = 8 - INTEGER(IntKi), PARAMETER :: M1N9Axi = 9 - INTEGER(IntKi), PARAMETER :: M2N1Axi = 10 - INTEGER(IntKi), PARAMETER :: M2N2Axi = 11 - INTEGER(IntKi), PARAMETER :: M2N3Axi = 12 - INTEGER(IntKi), PARAMETER :: M2N4Axi = 13 - INTEGER(IntKi), PARAMETER :: M2N5Axi = 14 - INTEGER(IntKi), PARAMETER :: M2N6Axi = 15 - INTEGER(IntKi), PARAMETER :: M2N7Axi = 16 - INTEGER(IntKi), PARAMETER :: M2N8Axi = 17 - INTEGER(IntKi), PARAMETER :: M2N9Axi = 18 - INTEGER(IntKi), PARAMETER :: M3N1Axi = 19 - INTEGER(IntKi), PARAMETER :: M3N2Axi = 20 - INTEGER(IntKi), PARAMETER :: M3N3Axi = 21 - INTEGER(IntKi), PARAMETER :: M3N4Axi = 22 - INTEGER(IntKi), PARAMETER :: M3N5Axi = 23 - INTEGER(IntKi), PARAMETER :: M3N6Axi = 24 - INTEGER(IntKi), PARAMETER :: M3N7Axi = 25 - INTEGER(IntKi), PARAMETER :: M3N8Axi = 26 - INTEGER(IntKi), PARAMETER :: M3N9Axi = 27 - INTEGER(IntKi), PARAMETER :: M4N1Axi = 28 - INTEGER(IntKi), PARAMETER :: M4N2Axi = 29 - INTEGER(IntKi), PARAMETER :: M4N3Axi = 30 - INTEGER(IntKi), PARAMETER :: M4N4Axi = 31 - INTEGER(IntKi), PARAMETER :: M4N5Axi = 32 - INTEGER(IntKi), PARAMETER :: M4N6Axi = 33 - INTEGER(IntKi), PARAMETER :: M4N7Axi = 34 - INTEGER(IntKi), PARAMETER :: M4N8Axi = 35 - INTEGER(IntKi), PARAMETER :: M4N9Axi = 36 - INTEGER(IntKi), PARAMETER :: M5N1Axi = 37 - INTEGER(IntKi), PARAMETER :: M5N2Axi = 38 - INTEGER(IntKi), PARAMETER :: M5N3Axi = 39 - INTEGER(IntKi), PARAMETER :: M5N4Axi = 40 - INTEGER(IntKi), PARAMETER :: M5N5Axi = 41 - INTEGER(IntKi), PARAMETER :: M5N6Axi = 42 - INTEGER(IntKi), PARAMETER :: M5N7Axi = 43 - INTEGER(IntKi), PARAMETER :: M5N8Axi = 44 - INTEGER(IntKi), PARAMETER :: M5N9Axi = 45 - INTEGER(IntKi), PARAMETER :: M6N1Axi = 46 - INTEGER(IntKi), PARAMETER :: M6N2Axi = 47 - INTEGER(IntKi), PARAMETER :: M6N3Axi = 48 - INTEGER(IntKi), PARAMETER :: M6N4Axi = 49 - INTEGER(IntKi), PARAMETER :: M6N5Axi = 50 - INTEGER(IntKi), PARAMETER :: M6N6Axi = 51 - INTEGER(IntKi), PARAMETER :: M6N7Axi = 52 - INTEGER(IntKi), PARAMETER :: M6N8Axi = 53 - INTEGER(IntKi), PARAMETER :: M6N9Axi = 54 - INTEGER(IntKi), PARAMETER :: M7N1Axi = 55 - INTEGER(IntKi), PARAMETER :: M7N2Axi = 56 - INTEGER(IntKi), PARAMETER :: M7N3Axi = 57 - INTEGER(IntKi), PARAMETER :: M7N4Axi = 58 - INTEGER(IntKi), PARAMETER :: M7N5Axi = 59 - INTEGER(IntKi), PARAMETER :: M7N6Axi = 60 - INTEGER(IntKi), PARAMETER :: M7N7Axi = 61 - INTEGER(IntKi), PARAMETER :: M7N8Axi = 62 - INTEGER(IntKi), PARAMETER :: M7N9Axi = 63 - INTEGER(IntKi), PARAMETER :: M8N1Axi = 64 - INTEGER(IntKi), PARAMETER :: M8N2Axi = 65 - INTEGER(IntKi), PARAMETER :: M8N3Axi = 66 - INTEGER(IntKi), PARAMETER :: M8N4Axi = 67 - INTEGER(IntKi), PARAMETER :: M8N5Axi = 68 - INTEGER(IntKi), PARAMETER :: M8N6Axi = 69 - INTEGER(IntKi), PARAMETER :: M8N7Axi = 70 - INTEGER(IntKi), PARAMETER :: M8N8Axi = 71 - INTEGER(IntKi), PARAMETER :: M8N9Axi = 72 - INTEGER(IntKi), PARAMETER :: M9N1Axi = 73 - INTEGER(IntKi), PARAMETER :: M9N2Axi = 74 - INTEGER(IntKi), PARAMETER :: M9N3Axi = 75 - INTEGER(IntKi), PARAMETER :: M9N4Axi = 76 - INTEGER(IntKi), PARAMETER :: M9N5Axi = 77 - INTEGER(IntKi), PARAMETER :: M9N6Axi = 78 - INTEGER(IntKi), PARAMETER :: M9N7Axi = 79 - INTEGER(IntKi), PARAMETER :: M9N8Axi = 80 - INTEGER(IntKi), PARAMETER :: M9N9Axi = 81 - INTEGER(IntKi), PARAMETER :: M1N1Ayi = 82 - INTEGER(IntKi), PARAMETER :: M1N2Ayi = 83 - INTEGER(IntKi), PARAMETER :: M1N3Ayi = 84 - INTEGER(IntKi), PARAMETER :: M1N4Ayi = 85 - INTEGER(IntKi), PARAMETER :: M1N5Ayi = 86 - INTEGER(IntKi), PARAMETER :: M1N6Ayi = 87 - INTEGER(IntKi), PARAMETER :: M1N7Ayi = 88 - INTEGER(IntKi), PARAMETER :: M1N8Ayi = 89 - INTEGER(IntKi), PARAMETER :: M1N9Ayi = 90 - INTEGER(IntKi), PARAMETER :: M2N1Ayi = 91 - INTEGER(IntKi), PARAMETER :: M2N2Ayi = 92 - INTEGER(IntKi), PARAMETER :: M2N3Ayi = 93 - INTEGER(IntKi), PARAMETER :: M2N4Ayi = 94 - INTEGER(IntKi), PARAMETER :: M2N5Ayi = 95 - INTEGER(IntKi), PARAMETER :: M2N6Ayi = 96 - INTEGER(IntKi), PARAMETER :: M2N7Ayi = 97 - INTEGER(IntKi), PARAMETER :: M2N8Ayi = 98 - INTEGER(IntKi), PARAMETER :: M2N9Ayi = 99 - INTEGER(IntKi), PARAMETER :: M3N1Ayi = 100 - INTEGER(IntKi), PARAMETER :: M3N2Ayi = 101 - INTEGER(IntKi), PARAMETER :: M3N3Ayi = 102 - INTEGER(IntKi), PARAMETER :: M3N4Ayi = 103 - INTEGER(IntKi), PARAMETER :: M3N5Ayi = 104 - INTEGER(IntKi), PARAMETER :: M3N6Ayi = 105 - INTEGER(IntKi), PARAMETER :: M3N7Ayi = 106 - INTEGER(IntKi), PARAMETER :: M3N8Ayi = 107 - INTEGER(IntKi), PARAMETER :: M3N9Ayi = 108 - INTEGER(IntKi), PARAMETER :: M4N1Ayi = 109 - INTEGER(IntKi), PARAMETER :: M4N2Ayi = 110 - INTEGER(IntKi), PARAMETER :: M4N3Ayi = 111 - INTEGER(IntKi), PARAMETER :: M4N4Ayi = 112 - INTEGER(IntKi), PARAMETER :: M4N5Ayi = 113 - INTEGER(IntKi), PARAMETER :: M4N6Ayi = 114 - INTEGER(IntKi), PARAMETER :: M4N7Ayi = 115 - INTEGER(IntKi), PARAMETER :: M4N8Ayi = 116 - INTEGER(IntKi), PARAMETER :: M4N9Ayi = 117 - INTEGER(IntKi), PARAMETER :: M5N1Ayi = 118 - INTEGER(IntKi), PARAMETER :: M5N2Ayi = 119 - INTEGER(IntKi), PARAMETER :: M5N3Ayi = 120 - INTEGER(IntKi), PARAMETER :: M5N4Ayi = 121 - INTEGER(IntKi), PARAMETER :: M5N5Ayi = 122 - INTEGER(IntKi), PARAMETER :: M5N6Ayi = 123 - INTEGER(IntKi), PARAMETER :: M5N7Ayi = 124 - INTEGER(IntKi), PARAMETER :: M5N8Ayi = 125 - INTEGER(IntKi), PARAMETER :: M5N9Ayi = 126 - INTEGER(IntKi), PARAMETER :: M6N1Ayi = 127 - INTEGER(IntKi), PARAMETER :: M6N2Ayi = 128 - INTEGER(IntKi), PARAMETER :: M6N3Ayi = 129 - INTEGER(IntKi), PARAMETER :: M6N4Ayi = 130 - INTEGER(IntKi), PARAMETER :: M6N5Ayi = 131 - INTEGER(IntKi), PARAMETER :: M6N6Ayi = 132 - INTEGER(IntKi), PARAMETER :: M6N7Ayi = 133 - INTEGER(IntKi), PARAMETER :: M6N8Ayi = 134 - INTEGER(IntKi), PARAMETER :: M6N9Ayi = 135 - INTEGER(IntKi), PARAMETER :: M7N1Ayi = 136 - INTEGER(IntKi), PARAMETER :: M7N2Ayi = 137 - INTEGER(IntKi), PARAMETER :: M7N3Ayi = 138 - INTEGER(IntKi), PARAMETER :: M7N4Ayi = 139 - INTEGER(IntKi), PARAMETER :: M7N5Ayi = 140 - INTEGER(IntKi), PARAMETER :: M7N6Ayi = 141 - INTEGER(IntKi), PARAMETER :: M7N7Ayi = 142 - INTEGER(IntKi), PARAMETER :: M7N8Ayi = 143 - INTEGER(IntKi), PARAMETER :: M7N9Ayi = 144 - INTEGER(IntKi), PARAMETER :: M8N1Ayi = 145 - INTEGER(IntKi), PARAMETER :: M8N2Ayi = 146 - INTEGER(IntKi), PARAMETER :: M8N3Ayi = 147 - INTEGER(IntKi), PARAMETER :: M8N4Ayi = 148 - INTEGER(IntKi), PARAMETER :: M8N5Ayi = 149 - INTEGER(IntKi), PARAMETER :: M8N6Ayi = 150 - INTEGER(IntKi), PARAMETER :: M8N7Ayi = 151 - INTEGER(IntKi), PARAMETER :: M8N8Ayi = 152 - INTEGER(IntKi), PARAMETER :: M8N9Ayi = 153 - INTEGER(IntKi), PARAMETER :: M9N1Ayi = 154 - INTEGER(IntKi), PARAMETER :: M9N2Ayi = 155 - INTEGER(IntKi), PARAMETER :: M9N3Ayi = 156 - INTEGER(IntKi), PARAMETER :: M9N4Ayi = 157 - INTEGER(IntKi), PARAMETER :: M9N5Ayi = 158 - INTEGER(IntKi), PARAMETER :: M9N6Ayi = 159 - INTEGER(IntKi), PARAMETER :: M9N7Ayi = 160 - INTEGER(IntKi), PARAMETER :: M9N8Ayi = 161 - INTEGER(IntKi), PARAMETER :: M9N9Ayi = 162 - INTEGER(IntKi), PARAMETER :: M1N1Azi = 163 - INTEGER(IntKi), PARAMETER :: M1N2Azi = 164 - INTEGER(IntKi), PARAMETER :: M1N3Azi = 165 - INTEGER(IntKi), PARAMETER :: M1N4Azi = 166 - INTEGER(IntKi), PARAMETER :: M1N5Azi = 167 - INTEGER(IntKi), PARAMETER :: M1N6Azi = 168 - INTEGER(IntKi), PARAMETER :: M1N7Azi = 169 - INTEGER(IntKi), PARAMETER :: M1N8Azi = 170 - INTEGER(IntKi), PARAMETER :: M1N9Azi = 171 - INTEGER(IntKi), PARAMETER :: M2N1Azi = 172 - INTEGER(IntKi), PARAMETER :: M2N2Azi = 173 - INTEGER(IntKi), PARAMETER :: M2N3Azi = 174 - INTEGER(IntKi), PARAMETER :: M2N4Azi = 175 - INTEGER(IntKi), PARAMETER :: M2N5Azi = 176 - INTEGER(IntKi), PARAMETER :: M2N6Azi = 177 - INTEGER(IntKi), PARAMETER :: M2N7Azi = 178 - INTEGER(IntKi), PARAMETER :: M2N8Azi = 179 - INTEGER(IntKi), PARAMETER :: M2N9Azi = 180 - INTEGER(IntKi), PARAMETER :: M3N1Azi = 181 - INTEGER(IntKi), PARAMETER :: M3N2Azi = 182 - INTEGER(IntKi), PARAMETER :: M3N3Azi = 183 - INTEGER(IntKi), PARAMETER :: M3N4Azi = 184 - INTEGER(IntKi), PARAMETER :: M3N5Azi = 185 - INTEGER(IntKi), PARAMETER :: M3N6Azi = 186 - INTEGER(IntKi), PARAMETER :: M3N7Azi = 187 - INTEGER(IntKi), PARAMETER :: M3N8Azi = 188 - INTEGER(IntKi), PARAMETER :: M3N9Azi = 189 - INTEGER(IntKi), PARAMETER :: M4N1Azi = 190 - INTEGER(IntKi), PARAMETER :: M4N2Azi = 191 - INTEGER(IntKi), PARAMETER :: M4N3Azi = 192 - INTEGER(IntKi), PARAMETER :: M4N4Azi = 193 - INTEGER(IntKi), PARAMETER :: M4N5Azi = 194 - INTEGER(IntKi), PARAMETER :: M4N6Azi = 195 - INTEGER(IntKi), PARAMETER :: M4N7Azi = 196 - INTEGER(IntKi), PARAMETER :: M4N8Azi = 197 - INTEGER(IntKi), PARAMETER :: M4N9Azi = 198 - INTEGER(IntKi), PARAMETER :: M5N1Azi = 199 - INTEGER(IntKi), PARAMETER :: M5N2Azi = 200 - INTEGER(IntKi), PARAMETER :: M5N3Azi = 201 - INTEGER(IntKi), PARAMETER :: M5N4Azi = 202 - INTEGER(IntKi), PARAMETER :: M5N5Azi = 203 - INTEGER(IntKi), PARAMETER :: M5N6Azi = 204 - INTEGER(IntKi), PARAMETER :: M5N7Azi = 205 - INTEGER(IntKi), PARAMETER :: M5N8Azi = 206 - INTEGER(IntKi), PARAMETER :: M5N9Azi = 207 - INTEGER(IntKi), PARAMETER :: M6N1Azi = 208 - INTEGER(IntKi), PARAMETER :: M6N2Azi = 209 - INTEGER(IntKi), PARAMETER :: M6N3Azi = 210 - INTEGER(IntKi), PARAMETER :: M6N4Azi = 211 - INTEGER(IntKi), PARAMETER :: M6N5Azi = 212 - INTEGER(IntKi), PARAMETER :: M6N6Azi = 213 - INTEGER(IntKi), PARAMETER :: M6N7Azi = 214 - INTEGER(IntKi), PARAMETER :: M6N8Azi = 215 - INTEGER(IntKi), PARAMETER :: M6N9Azi = 216 - INTEGER(IntKi), PARAMETER :: M7N1Azi = 217 - INTEGER(IntKi), PARAMETER :: M7N2Azi = 218 - INTEGER(IntKi), PARAMETER :: M7N3Azi = 219 - INTEGER(IntKi), PARAMETER :: M7N4Azi = 220 - INTEGER(IntKi), PARAMETER :: M7N5Azi = 221 - INTEGER(IntKi), PARAMETER :: M7N6Azi = 222 - INTEGER(IntKi), PARAMETER :: M7N7Azi = 223 - INTEGER(IntKi), PARAMETER :: M7N8Azi = 224 - INTEGER(IntKi), PARAMETER :: M7N9Azi = 225 - INTEGER(IntKi), PARAMETER :: M8N1Azi = 226 - INTEGER(IntKi), PARAMETER :: M8N2Azi = 227 - INTEGER(IntKi), PARAMETER :: M8N3Azi = 228 - INTEGER(IntKi), PARAMETER :: M8N4Azi = 229 - INTEGER(IntKi), PARAMETER :: M8N5Azi = 230 - INTEGER(IntKi), PARAMETER :: M8N6Azi = 231 - INTEGER(IntKi), PARAMETER :: M8N7Azi = 232 - INTEGER(IntKi), PARAMETER :: M8N8Azi = 233 - INTEGER(IntKi), PARAMETER :: M8N9Azi = 234 - INTEGER(IntKi), PARAMETER :: M9N1Azi = 235 - INTEGER(IntKi), PARAMETER :: M9N2Azi = 236 - INTEGER(IntKi), PARAMETER :: M9N3Azi = 237 - INTEGER(IntKi), PARAMETER :: M9N4Azi = 238 - INTEGER(IntKi), PARAMETER :: M9N5Azi = 239 - INTEGER(IntKi), PARAMETER :: M9N6Azi = 240 - INTEGER(IntKi), PARAMETER :: M9N7Azi = 241 - INTEGER(IntKi), PARAMETER :: M9N8Azi = 242 - INTEGER(IntKi), PARAMETER :: M9N9Azi = 243 - INTEGER(IntKi), PARAMETER :: M1N1Vxi = 244 - INTEGER(IntKi), PARAMETER :: M1N2Vxi = 245 - INTEGER(IntKi), PARAMETER :: M1N3Vxi = 246 - INTEGER(IntKi), PARAMETER :: M1N4Vxi = 247 - INTEGER(IntKi), PARAMETER :: M1N5Vxi = 248 - INTEGER(IntKi), PARAMETER :: M1N6Vxi = 249 - INTEGER(IntKi), PARAMETER :: M1N7Vxi = 250 - INTEGER(IntKi), PARAMETER :: M1N8Vxi = 251 - INTEGER(IntKi), PARAMETER :: M1N9Vxi = 252 - INTEGER(IntKi), PARAMETER :: M2N1Vxi = 253 - INTEGER(IntKi), PARAMETER :: M2N2Vxi = 254 - INTEGER(IntKi), PARAMETER :: M2N3Vxi = 255 - INTEGER(IntKi), PARAMETER :: M2N4Vxi = 256 - INTEGER(IntKi), PARAMETER :: M2N5Vxi = 257 - INTEGER(IntKi), PARAMETER :: M2N6Vxi = 258 - INTEGER(IntKi), PARAMETER :: M2N7Vxi = 259 - INTEGER(IntKi), PARAMETER :: M2N8Vxi = 260 - INTEGER(IntKi), PARAMETER :: M2N9Vxi = 261 - INTEGER(IntKi), PARAMETER :: M3N1Vxi = 262 - INTEGER(IntKi), PARAMETER :: M3N2Vxi = 263 - INTEGER(IntKi), PARAMETER :: M3N3Vxi = 264 - INTEGER(IntKi), PARAMETER :: M3N4Vxi = 265 - INTEGER(IntKi), PARAMETER :: M3N5Vxi = 266 - INTEGER(IntKi), PARAMETER :: M3N6Vxi = 267 - INTEGER(IntKi), PARAMETER :: M3N7Vxi = 268 - INTEGER(IntKi), PARAMETER :: M3N8Vxi = 269 - INTEGER(IntKi), PARAMETER :: M3N9Vxi = 270 - INTEGER(IntKi), PARAMETER :: M4N1Vxi = 271 - INTEGER(IntKi), PARAMETER :: M4N2Vxi = 272 - INTEGER(IntKi), PARAMETER :: M4N3Vxi = 273 - INTEGER(IntKi), PARAMETER :: M4N4Vxi = 274 - INTEGER(IntKi), PARAMETER :: M4N5Vxi = 275 - INTEGER(IntKi), PARAMETER :: M4N6Vxi = 276 - INTEGER(IntKi), PARAMETER :: M4N7Vxi = 277 - INTEGER(IntKi), PARAMETER :: M4N8Vxi = 278 - INTEGER(IntKi), PARAMETER :: M4N9Vxi = 279 - INTEGER(IntKi), PARAMETER :: M5N1Vxi = 280 - INTEGER(IntKi), PARAMETER :: M5N2Vxi = 281 - INTEGER(IntKi), PARAMETER :: M5N3Vxi = 282 - INTEGER(IntKi), PARAMETER :: M5N4Vxi = 283 - INTEGER(IntKi), PARAMETER :: M5N5Vxi = 284 - INTEGER(IntKi), PARAMETER :: M5N6Vxi = 285 - INTEGER(IntKi), PARAMETER :: M5N7Vxi = 286 - INTEGER(IntKi), PARAMETER :: M5N8Vxi = 287 - INTEGER(IntKi), PARAMETER :: M5N9Vxi = 288 - INTEGER(IntKi), PARAMETER :: M6N1Vxi = 289 - INTEGER(IntKi), PARAMETER :: M6N2Vxi = 290 - INTEGER(IntKi), PARAMETER :: M6N3Vxi = 291 - INTEGER(IntKi), PARAMETER :: M6N4Vxi = 292 - INTEGER(IntKi), PARAMETER :: M6N5Vxi = 293 - INTEGER(IntKi), PARAMETER :: M6N6Vxi = 294 - INTEGER(IntKi), PARAMETER :: M6N7Vxi = 295 - INTEGER(IntKi), PARAMETER :: M6N8Vxi = 296 - INTEGER(IntKi), PARAMETER :: M6N9Vxi = 297 - INTEGER(IntKi), PARAMETER :: M7N1Vxi = 298 - INTEGER(IntKi), PARAMETER :: M7N2Vxi = 299 - INTEGER(IntKi), PARAMETER :: M7N3Vxi = 300 - INTEGER(IntKi), PARAMETER :: M7N4Vxi = 301 - INTEGER(IntKi), PARAMETER :: M7N5Vxi = 302 - INTEGER(IntKi), PARAMETER :: M7N6Vxi = 303 - INTEGER(IntKi), PARAMETER :: M7N7Vxi = 304 - INTEGER(IntKi), PARAMETER :: M7N8Vxi = 305 - INTEGER(IntKi), PARAMETER :: M7N9Vxi = 306 - INTEGER(IntKi), PARAMETER :: M8N1Vxi = 307 - INTEGER(IntKi), PARAMETER :: M8N2Vxi = 308 - INTEGER(IntKi), PARAMETER :: M8N3Vxi = 309 - INTEGER(IntKi), PARAMETER :: M8N4Vxi = 310 - INTEGER(IntKi), PARAMETER :: M8N5Vxi = 311 - INTEGER(IntKi), PARAMETER :: M8N6Vxi = 312 - INTEGER(IntKi), PARAMETER :: M8N7Vxi = 313 - INTEGER(IntKi), PARAMETER :: M8N8Vxi = 314 - INTEGER(IntKi), PARAMETER :: M8N9Vxi = 315 - INTEGER(IntKi), PARAMETER :: M9N1Vxi = 316 - INTEGER(IntKi), PARAMETER :: M9N2Vxi = 317 - INTEGER(IntKi), PARAMETER :: M9N3Vxi = 318 - INTEGER(IntKi), PARAMETER :: M9N4Vxi = 319 - INTEGER(IntKi), PARAMETER :: M9N5Vxi = 320 - INTEGER(IntKi), PARAMETER :: M9N6Vxi = 321 - INTEGER(IntKi), PARAMETER :: M9N7Vxi = 322 - INTEGER(IntKi), PARAMETER :: M9N8Vxi = 323 - INTEGER(IntKi), PARAMETER :: M9N9Vxi = 324 - INTEGER(IntKi), PARAMETER :: M1N1Vyi = 325 - INTEGER(IntKi), PARAMETER :: M1N2Vyi = 326 - INTEGER(IntKi), PARAMETER :: M1N3Vyi = 327 - INTEGER(IntKi), PARAMETER :: M1N4Vyi = 328 - INTEGER(IntKi), PARAMETER :: M1N5Vyi = 329 - INTEGER(IntKi), PARAMETER :: M1N6Vyi = 330 - INTEGER(IntKi), PARAMETER :: M1N7Vyi = 331 - INTEGER(IntKi), PARAMETER :: M1N8Vyi = 332 - INTEGER(IntKi), PARAMETER :: M1N9Vyi = 333 - INTEGER(IntKi), PARAMETER :: M2N1Vyi = 334 - INTEGER(IntKi), PARAMETER :: M2N2Vyi = 335 - INTEGER(IntKi), PARAMETER :: M2N3Vyi = 336 - INTEGER(IntKi), PARAMETER :: M2N4Vyi = 337 - INTEGER(IntKi), PARAMETER :: M2N5Vyi = 338 - INTEGER(IntKi), PARAMETER :: M2N6Vyi = 339 - INTEGER(IntKi), PARAMETER :: M2N7Vyi = 340 - INTEGER(IntKi), PARAMETER :: M2N8Vyi = 341 - INTEGER(IntKi), PARAMETER :: M2N9Vyi = 342 - INTEGER(IntKi), PARAMETER :: M3N1Vyi = 343 - INTEGER(IntKi), PARAMETER :: M3N2Vyi = 344 - INTEGER(IntKi), PARAMETER :: M3N3Vyi = 345 - INTEGER(IntKi), PARAMETER :: M3N4Vyi = 346 - INTEGER(IntKi), PARAMETER :: M3N5Vyi = 347 - INTEGER(IntKi), PARAMETER :: M3N6Vyi = 348 - INTEGER(IntKi), PARAMETER :: M3N7Vyi = 349 - INTEGER(IntKi), PARAMETER :: M3N8Vyi = 350 - INTEGER(IntKi), PARAMETER :: M3N9Vyi = 351 - INTEGER(IntKi), PARAMETER :: M4N1Vyi = 352 - INTEGER(IntKi), PARAMETER :: M4N2Vyi = 353 - INTEGER(IntKi), PARAMETER :: M4N3Vyi = 354 - INTEGER(IntKi), PARAMETER :: M4N4Vyi = 355 - INTEGER(IntKi), PARAMETER :: M4N5Vyi = 356 - INTEGER(IntKi), PARAMETER :: M4N6Vyi = 357 - INTEGER(IntKi), PARAMETER :: M4N7Vyi = 358 - INTEGER(IntKi), PARAMETER :: M4N8Vyi = 359 - INTEGER(IntKi), PARAMETER :: M4N9Vyi = 360 - INTEGER(IntKi), PARAMETER :: M5N1Vyi = 361 - INTEGER(IntKi), PARAMETER :: M5N2Vyi = 362 - INTEGER(IntKi), PARAMETER :: M5N3Vyi = 363 - INTEGER(IntKi), PARAMETER :: M5N4Vyi = 364 - INTEGER(IntKi), PARAMETER :: M5N5Vyi = 365 - INTEGER(IntKi), PARAMETER :: M5N6Vyi = 366 - INTEGER(IntKi), PARAMETER :: M5N7Vyi = 367 - INTEGER(IntKi), PARAMETER :: M5N8Vyi = 368 - INTEGER(IntKi), PARAMETER :: M5N9Vyi = 369 - INTEGER(IntKi), PARAMETER :: M6N1Vyi = 370 - INTEGER(IntKi), PARAMETER :: M6N2Vyi = 371 - INTEGER(IntKi), PARAMETER :: M6N3Vyi = 372 - INTEGER(IntKi), PARAMETER :: M6N4Vyi = 373 - INTEGER(IntKi), PARAMETER :: M6N5Vyi = 374 - INTEGER(IntKi), PARAMETER :: M6N6Vyi = 375 - INTEGER(IntKi), PARAMETER :: M6N7Vyi = 376 - INTEGER(IntKi), PARAMETER :: M6N8Vyi = 377 - INTEGER(IntKi), PARAMETER :: M6N9Vyi = 378 - INTEGER(IntKi), PARAMETER :: M7N1Vyi = 379 - INTEGER(IntKi), PARAMETER :: M7N2Vyi = 380 - INTEGER(IntKi), PARAMETER :: M7N3Vyi = 381 - INTEGER(IntKi), PARAMETER :: M7N4Vyi = 382 - INTEGER(IntKi), PARAMETER :: M7N5Vyi = 383 - INTEGER(IntKi), PARAMETER :: M7N6Vyi = 384 - INTEGER(IntKi), PARAMETER :: M7N7Vyi = 385 - INTEGER(IntKi), PARAMETER :: M7N8Vyi = 386 - INTEGER(IntKi), PARAMETER :: M7N9Vyi = 387 - INTEGER(IntKi), PARAMETER :: M8N1Vyi = 388 - INTEGER(IntKi), PARAMETER :: M8N2Vyi = 389 - INTEGER(IntKi), PARAMETER :: M8N3Vyi = 390 - INTEGER(IntKi), PARAMETER :: M8N4Vyi = 391 - INTEGER(IntKi), PARAMETER :: M8N5Vyi = 392 - INTEGER(IntKi), PARAMETER :: M8N6Vyi = 393 - INTEGER(IntKi), PARAMETER :: M8N7Vyi = 394 - INTEGER(IntKi), PARAMETER :: M8N8Vyi = 395 - INTEGER(IntKi), PARAMETER :: M8N9Vyi = 396 - INTEGER(IntKi), PARAMETER :: M9N1Vyi = 397 - INTEGER(IntKi), PARAMETER :: M9N2Vyi = 398 - INTEGER(IntKi), PARAMETER :: M9N3Vyi = 399 - INTEGER(IntKi), PARAMETER :: M9N4Vyi = 400 - INTEGER(IntKi), PARAMETER :: M9N5Vyi = 401 - INTEGER(IntKi), PARAMETER :: M9N6Vyi = 402 - INTEGER(IntKi), PARAMETER :: M9N7Vyi = 403 - INTEGER(IntKi), PARAMETER :: M9N8Vyi = 404 - INTEGER(IntKi), PARAMETER :: M9N9Vyi = 405 - INTEGER(IntKi), PARAMETER :: M1N1Vzi = 406 - INTEGER(IntKi), PARAMETER :: M1N2Vzi = 407 - INTEGER(IntKi), PARAMETER :: M1N3Vzi = 408 - INTEGER(IntKi), PARAMETER :: M1N4Vzi = 409 - INTEGER(IntKi), PARAMETER :: M1N5Vzi = 410 - INTEGER(IntKi), PARAMETER :: M1N6Vzi = 411 - INTEGER(IntKi), PARAMETER :: M1N7Vzi = 412 - INTEGER(IntKi), PARAMETER :: M1N8Vzi = 413 - INTEGER(IntKi), PARAMETER :: M1N9Vzi = 414 - INTEGER(IntKi), PARAMETER :: M2N1Vzi = 415 - INTEGER(IntKi), PARAMETER :: M2N2Vzi = 416 - INTEGER(IntKi), PARAMETER :: M2N3Vzi = 417 - INTEGER(IntKi), PARAMETER :: M2N4Vzi = 418 - INTEGER(IntKi), PARAMETER :: M2N5Vzi = 419 - INTEGER(IntKi), PARAMETER :: M2N6Vzi = 420 - INTEGER(IntKi), PARAMETER :: M2N7Vzi = 421 - INTEGER(IntKi), PARAMETER :: M2N8Vzi = 422 - INTEGER(IntKi), PARAMETER :: M2N9Vzi = 423 - INTEGER(IntKi), PARAMETER :: M3N1Vzi = 424 - INTEGER(IntKi), PARAMETER :: M3N2Vzi = 425 - INTEGER(IntKi), PARAMETER :: M3N3Vzi = 426 - INTEGER(IntKi), PARAMETER :: M3N4Vzi = 427 - INTEGER(IntKi), PARAMETER :: M3N5Vzi = 428 - INTEGER(IntKi), PARAMETER :: M3N6Vzi = 429 - INTEGER(IntKi), PARAMETER :: M3N7Vzi = 430 - INTEGER(IntKi), PARAMETER :: M3N8Vzi = 431 - INTEGER(IntKi), PARAMETER :: M3N9Vzi = 432 - INTEGER(IntKi), PARAMETER :: M4N1Vzi = 433 - INTEGER(IntKi), PARAMETER :: M4N2Vzi = 434 - INTEGER(IntKi), PARAMETER :: M4N3Vzi = 435 - INTEGER(IntKi), PARAMETER :: M4N4Vzi = 436 - INTEGER(IntKi), PARAMETER :: M4N5Vzi = 437 - INTEGER(IntKi), PARAMETER :: M4N6Vzi = 438 - INTEGER(IntKi), PARAMETER :: M4N7Vzi = 439 - INTEGER(IntKi), PARAMETER :: M4N8Vzi = 440 - INTEGER(IntKi), PARAMETER :: M4N9Vzi = 441 - INTEGER(IntKi), PARAMETER :: M5N1Vzi = 442 - INTEGER(IntKi), PARAMETER :: M5N2Vzi = 443 - INTEGER(IntKi), PARAMETER :: M5N3Vzi = 444 - INTEGER(IntKi), PARAMETER :: M5N4Vzi = 445 - INTEGER(IntKi), PARAMETER :: M5N5Vzi = 446 - INTEGER(IntKi), PARAMETER :: M5N6Vzi = 447 - INTEGER(IntKi), PARAMETER :: M5N7Vzi = 448 - INTEGER(IntKi), PARAMETER :: M5N8Vzi = 449 - INTEGER(IntKi), PARAMETER :: M5N9Vzi = 450 - INTEGER(IntKi), PARAMETER :: M6N1Vzi = 451 - INTEGER(IntKi), PARAMETER :: M6N2Vzi = 452 - INTEGER(IntKi), PARAMETER :: M6N3Vzi = 453 - INTEGER(IntKi), PARAMETER :: M6N4Vzi = 454 - INTEGER(IntKi), PARAMETER :: M6N5Vzi = 455 - INTEGER(IntKi), PARAMETER :: M6N6Vzi = 456 - INTEGER(IntKi), PARAMETER :: M6N7Vzi = 457 - INTEGER(IntKi), PARAMETER :: M6N8Vzi = 458 - INTEGER(IntKi), PARAMETER :: M6N9Vzi = 459 - INTEGER(IntKi), PARAMETER :: M7N1Vzi = 460 - INTEGER(IntKi), PARAMETER :: M7N2Vzi = 461 - INTEGER(IntKi), PARAMETER :: M7N3Vzi = 462 - INTEGER(IntKi), PARAMETER :: M7N4Vzi = 463 - INTEGER(IntKi), PARAMETER :: M7N5Vzi = 464 - INTEGER(IntKi), PARAMETER :: M7N6Vzi = 465 - INTEGER(IntKi), PARAMETER :: M7N7Vzi = 466 - INTEGER(IntKi), PARAMETER :: M7N8Vzi = 467 - INTEGER(IntKi), PARAMETER :: M7N9Vzi = 468 - INTEGER(IntKi), PARAMETER :: M8N1Vzi = 469 - INTEGER(IntKi), PARAMETER :: M8N2Vzi = 470 - INTEGER(IntKi), PARAMETER :: M8N3Vzi = 471 - INTEGER(IntKi), PARAMETER :: M8N4Vzi = 472 - INTEGER(IntKi), PARAMETER :: M8N5Vzi = 473 - INTEGER(IntKi), PARAMETER :: M8N6Vzi = 474 - INTEGER(IntKi), PARAMETER :: M8N7Vzi = 475 - INTEGER(IntKi), PARAMETER :: M8N8Vzi = 476 - INTEGER(IntKi), PARAMETER :: M8N9Vzi = 477 - INTEGER(IntKi), PARAMETER :: M9N1Vzi = 478 - INTEGER(IntKi), PARAMETER :: M9N2Vzi = 479 - INTEGER(IntKi), PARAMETER :: M9N3Vzi = 480 - INTEGER(IntKi), PARAMETER :: M9N4Vzi = 481 - INTEGER(IntKi), PARAMETER :: M9N5Vzi = 482 - INTEGER(IntKi), PARAMETER :: M9N6Vzi = 483 - INTEGER(IntKi), PARAMETER :: M9N7Vzi = 484 - INTEGER(IntKi), PARAMETER :: M9N8Vzi = 485 - INTEGER(IntKi), PARAMETER :: M9N9Vzi = 486 - INTEGER(IntKi), PARAMETER :: M1N1DynP = 487 - INTEGER(IntKi), PARAMETER :: M1N2DynP = 488 - INTEGER(IntKi), PARAMETER :: M1N3DynP = 489 - INTEGER(IntKi), PARAMETER :: M1N4DynP = 490 - INTEGER(IntKi), PARAMETER :: M1N5DynP = 491 - INTEGER(IntKi), PARAMETER :: M1N6DynP = 492 - INTEGER(IntKi), PARAMETER :: M1N7DynP = 493 - INTEGER(IntKi), PARAMETER :: M1N8DynP = 494 - INTEGER(IntKi), PARAMETER :: M1N9DynP = 495 - INTEGER(IntKi), PARAMETER :: M2N1DynP = 496 - INTEGER(IntKi), PARAMETER :: M2N2DynP = 497 - INTEGER(IntKi), PARAMETER :: M2N3DynP = 498 - INTEGER(IntKi), PARAMETER :: M2N4DynP = 499 - INTEGER(IntKi), PARAMETER :: M2N5DynP = 500 - INTEGER(IntKi), PARAMETER :: M2N6DynP = 501 - INTEGER(IntKi), PARAMETER :: M2N7DynP = 502 - INTEGER(IntKi), PARAMETER :: M2N8DynP = 503 - INTEGER(IntKi), PARAMETER :: M2N9DynP = 504 - INTEGER(IntKi), PARAMETER :: M3N1DynP = 505 - INTEGER(IntKi), PARAMETER :: M3N2DynP = 506 - INTEGER(IntKi), PARAMETER :: M3N3DynP = 507 - INTEGER(IntKi), PARAMETER :: M3N4DynP = 508 - INTEGER(IntKi), PARAMETER :: M3N5DynP = 509 - INTEGER(IntKi), PARAMETER :: M3N6DynP = 510 - INTEGER(IntKi), PARAMETER :: M3N7DynP = 511 - INTEGER(IntKi), PARAMETER :: M3N8DynP = 512 - INTEGER(IntKi), PARAMETER :: M3N9DynP = 513 - INTEGER(IntKi), PARAMETER :: M4N1DynP = 514 - INTEGER(IntKi), PARAMETER :: M4N2DynP = 515 - INTEGER(IntKi), PARAMETER :: M4N3DynP = 516 - INTEGER(IntKi), PARAMETER :: M4N4DynP = 517 - INTEGER(IntKi), PARAMETER :: M4N5DynP = 518 - INTEGER(IntKi), PARAMETER :: M4N6DynP = 519 - INTEGER(IntKi), PARAMETER :: M4N7DynP = 520 - INTEGER(IntKi), PARAMETER :: M4N8DynP = 521 - INTEGER(IntKi), PARAMETER :: M4N9DynP = 522 - INTEGER(IntKi), PARAMETER :: M5N1DynP = 523 - INTEGER(IntKi), PARAMETER :: M5N2DynP = 524 - INTEGER(IntKi), PARAMETER :: M5N3DynP = 525 - INTEGER(IntKi), PARAMETER :: M5N4DynP = 526 - INTEGER(IntKi), PARAMETER :: M5N5DynP = 527 - INTEGER(IntKi), PARAMETER :: M5N6DynP = 528 - INTEGER(IntKi), PARAMETER :: M5N7DynP = 529 - INTEGER(IntKi), PARAMETER :: M5N8DynP = 530 - INTEGER(IntKi), PARAMETER :: M5N9DynP = 531 - INTEGER(IntKi), PARAMETER :: M6N1DynP = 532 - INTEGER(IntKi), PARAMETER :: M6N2DynP = 533 - INTEGER(IntKi), PARAMETER :: M6N3DynP = 534 - INTEGER(IntKi), PARAMETER :: M6N4DynP = 535 - INTEGER(IntKi), PARAMETER :: M6N5DynP = 536 - INTEGER(IntKi), PARAMETER :: M6N6DynP = 537 - INTEGER(IntKi), PARAMETER :: M6N7DynP = 538 - INTEGER(IntKi), PARAMETER :: M6N8DynP = 539 - INTEGER(IntKi), PARAMETER :: M6N9DynP = 540 - INTEGER(IntKi), PARAMETER :: M7N1DynP = 541 - INTEGER(IntKi), PARAMETER :: M7N2DynP = 542 - INTEGER(IntKi), PARAMETER :: M7N3DynP = 543 - INTEGER(IntKi), PARAMETER :: M7N4DynP = 544 - INTEGER(IntKi), PARAMETER :: M7N5DynP = 545 - INTEGER(IntKi), PARAMETER :: M7N6DynP = 546 - INTEGER(IntKi), PARAMETER :: M7N7DynP = 547 - INTEGER(IntKi), PARAMETER :: M7N8DynP = 548 - INTEGER(IntKi), PARAMETER :: M7N9DynP = 549 - INTEGER(IntKi), PARAMETER :: M8N1DynP = 550 - INTEGER(IntKi), PARAMETER :: M8N2DynP = 551 - INTEGER(IntKi), PARAMETER :: M8N3DynP = 552 - INTEGER(IntKi), PARAMETER :: M8N4DynP = 553 - INTEGER(IntKi), PARAMETER :: M8N5DynP = 554 - INTEGER(IntKi), PARAMETER :: M8N6DynP = 555 - INTEGER(IntKi), PARAMETER :: M8N7DynP = 556 - INTEGER(IntKi), PARAMETER :: M8N8DynP = 557 - INTEGER(IntKi), PARAMETER :: M8N9DynP = 558 - INTEGER(IntKi), PARAMETER :: M9N1DynP = 559 - INTEGER(IntKi), PARAMETER :: M9N2DynP = 560 - INTEGER(IntKi), PARAMETER :: M9N3DynP = 561 - INTEGER(IntKi), PARAMETER :: M9N4DynP = 562 - INTEGER(IntKi), PARAMETER :: M9N5DynP = 563 - INTEGER(IntKi), PARAMETER :: M9N6DynP = 564 - INTEGER(IntKi), PARAMETER :: M9N7DynP = 565 - INTEGER(IntKi), PARAMETER :: M9N8DynP = 566 - INTEGER(IntKi), PARAMETER :: M9N9DynP = 567 - INTEGER(IntKi), PARAMETER :: M1N1STVxi = 568 - INTEGER(IntKi), PARAMETER :: M1N2STVxi = 569 - INTEGER(IntKi), PARAMETER :: M1N3STVxi = 570 - INTEGER(IntKi), PARAMETER :: M1N4STVxi = 571 - INTEGER(IntKi), PARAMETER :: M1N5STVxi = 572 - INTEGER(IntKi), PARAMETER :: M1N6STVxi = 573 - INTEGER(IntKi), PARAMETER :: M1N7STVxi = 574 - INTEGER(IntKi), PARAMETER :: M1N8STVxi = 575 - INTEGER(IntKi), PARAMETER :: M1N9STVxi = 576 - INTEGER(IntKi), PARAMETER :: M2N1STVxi = 577 - INTEGER(IntKi), PARAMETER :: M2N2STVxi = 578 - INTEGER(IntKi), PARAMETER :: M2N3STVxi = 579 - INTEGER(IntKi), PARAMETER :: M2N4STVxi = 580 - INTEGER(IntKi), PARAMETER :: M2N5STVxi = 581 - INTEGER(IntKi), PARAMETER :: M2N6STVxi = 582 - INTEGER(IntKi), PARAMETER :: M2N7STVxi = 583 - INTEGER(IntKi), PARAMETER :: M2N8STVxi = 584 - INTEGER(IntKi), PARAMETER :: M2N9STVxi = 585 - INTEGER(IntKi), PARAMETER :: M3N1STVxi = 586 - INTEGER(IntKi), PARAMETER :: M3N2STVxi = 587 - INTEGER(IntKi), PARAMETER :: M3N3STVxi = 588 - INTEGER(IntKi), PARAMETER :: M3N4STVxi = 589 - INTEGER(IntKi), PARAMETER :: M3N5STVxi = 590 - INTEGER(IntKi), PARAMETER :: M3N6STVxi = 591 - INTEGER(IntKi), PARAMETER :: M3N7STVxi = 592 - INTEGER(IntKi), PARAMETER :: M3N8STVxi = 593 - INTEGER(IntKi), PARAMETER :: M3N9STVxi = 594 - INTEGER(IntKi), PARAMETER :: M4N1STVxi = 595 - INTEGER(IntKi), PARAMETER :: M4N2STVxi = 596 - INTEGER(IntKi), PARAMETER :: M4N3STVxi = 597 - INTEGER(IntKi), PARAMETER :: M4N4STVxi = 598 - INTEGER(IntKi), PARAMETER :: M4N5STVxi = 599 - INTEGER(IntKi), PARAMETER :: M4N6STVxi = 600 - INTEGER(IntKi), PARAMETER :: M4N7STVxi = 601 - INTEGER(IntKi), PARAMETER :: M4N8STVxi = 602 - INTEGER(IntKi), PARAMETER :: M4N9STVxi = 603 - INTEGER(IntKi), PARAMETER :: M5N1STVxi = 604 - INTEGER(IntKi), PARAMETER :: M5N2STVxi = 605 - INTEGER(IntKi), PARAMETER :: M5N3STVxi = 606 - INTEGER(IntKi), PARAMETER :: M5N4STVxi = 607 - INTEGER(IntKi), PARAMETER :: M5N5STVxi = 608 - INTEGER(IntKi), PARAMETER :: M5N6STVxi = 609 - INTEGER(IntKi), PARAMETER :: M5N7STVxi = 610 - INTEGER(IntKi), PARAMETER :: M5N8STVxi = 611 - INTEGER(IntKi), PARAMETER :: M5N9STVxi = 612 - INTEGER(IntKi), PARAMETER :: M6N1STVxi = 613 - INTEGER(IntKi), PARAMETER :: M6N2STVxi = 614 - INTEGER(IntKi), PARAMETER :: M6N3STVxi = 615 - INTEGER(IntKi), PARAMETER :: M6N4STVxi = 616 - INTEGER(IntKi), PARAMETER :: M6N5STVxi = 617 - INTEGER(IntKi), PARAMETER :: M6N6STVxi = 618 - INTEGER(IntKi), PARAMETER :: M6N7STVxi = 619 - INTEGER(IntKi), PARAMETER :: M6N8STVxi = 620 - INTEGER(IntKi), PARAMETER :: M6N9STVxi = 621 - INTEGER(IntKi), PARAMETER :: M7N1STVxi = 622 - INTEGER(IntKi), PARAMETER :: M7N2STVxi = 623 - INTEGER(IntKi), PARAMETER :: M7N3STVxi = 624 - INTEGER(IntKi), PARAMETER :: M7N4STVxi = 625 - INTEGER(IntKi), PARAMETER :: M7N5STVxi = 626 - INTEGER(IntKi), PARAMETER :: M7N6STVxi = 627 - INTEGER(IntKi), PARAMETER :: M7N7STVxi = 628 - INTEGER(IntKi), PARAMETER :: M7N8STVxi = 629 - INTEGER(IntKi), PARAMETER :: M7N9STVxi = 630 - INTEGER(IntKi), PARAMETER :: M8N1STVxi = 631 - INTEGER(IntKi), PARAMETER :: M8N2STVxi = 632 - INTEGER(IntKi), PARAMETER :: M8N3STVxi = 633 - INTEGER(IntKi), PARAMETER :: M8N4STVxi = 634 - INTEGER(IntKi), PARAMETER :: M8N5STVxi = 635 - INTEGER(IntKi), PARAMETER :: M8N6STVxi = 636 - INTEGER(IntKi), PARAMETER :: M8N7STVxi = 637 - INTEGER(IntKi), PARAMETER :: M8N8STVxi = 638 - INTEGER(IntKi), PARAMETER :: M8N9STVxi = 639 - INTEGER(IntKi), PARAMETER :: M9N1STVxi = 640 - INTEGER(IntKi), PARAMETER :: M9N2STVxi = 641 - INTEGER(IntKi), PARAMETER :: M9N3STVxi = 642 - INTEGER(IntKi), PARAMETER :: M9N4STVxi = 643 - INTEGER(IntKi), PARAMETER :: M9N5STVxi = 644 - INTEGER(IntKi), PARAMETER :: M9N6STVxi = 645 - INTEGER(IntKi), PARAMETER :: M9N7STVxi = 646 - INTEGER(IntKi), PARAMETER :: M9N8STVxi = 647 - INTEGER(IntKi), PARAMETER :: M9N9STVxi = 648 - INTEGER(IntKi), PARAMETER :: M1N1STVyi = 649 - INTEGER(IntKi), PARAMETER :: M1N2STVyi = 650 - INTEGER(IntKi), PARAMETER :: M1N3STVyi = 651 - INTEGER(IntKi), PARAMETER :: M1N4STVyi = 652 - INTEGER(IntKi), PARAMETER :: M1N5STVyi = 653 - INTEGER(IntKi), PARAMETER :: M1N6STVyi = 654 - INTEGER(IntKi), PARAMETER :: M1N7STVyi = 655 - INTEGER(IntKi), PARAMETER :: M1N8STVyi = 656 - INTEGER(IntKi), PARAMETER :: M1N9STVyi = 657 - INTEGER(IntKi), PARAMETER :: M2N1STVyi = 658 - INTEGER(IntKi), PARAMETER :: M2N2STVyi = 659 - INTEGER(IntKi), PARAMETER :: M2N3STVyi = 660 - INTEGER(IntKi), PARAMETER :: M2N4STVyi = 661 - INTEGER(IntKi), PARAMETER :: M2N5STVyi = 662 - INTEGER(IntKi), PARAMETER :: M2N6STVyi = 663 - INTEGER(IntKi), PARAMETER :: M2N7STVyi = 664 - INTEGER(IntKi), PARAMETER :: M2N8STVyi = 665 - INTEGER(IntKi), PARAMETER :: M2N9STVyi = 666 - INTEGER(IntKi), PARAMETER :: M3N1STVyi = 667 - INTEGER(IntKi), PARAMETER :: M3N2STVyi = 668 - INTEGER(IntKi), PARAMETER :: M3N3STVyi = 669 - INTEGER(IntKi), PARAMETER :: M3N4STVyi = 670 - INTEGER(IntKi), PARAMETER :: M3N5STVyi = 671 - INTEGER(IntKi), PARAMETER :: M3N6STVyi = 672 - INTEGER(IntKi), PARAMETER :: M3N7STVyi = 673 - INTEGER(IntKi), PARAMETER :: M3N8STVyi = 674 - INTEGER(IntKi), PARAMETER :: M3N9STVyi = 675 - INTEGER(IntKi), PARAMETER :: M4N1STVyi = 676 - INTEGER(IntKi), PARAMETER :: M4N2STVyi = 677 - INTEGER(IntKi), PARAMETER :: M4N3STVyi = 678 - INTEGER(IntKi), PARAMETER :: M4N4STVyi = 679 - INTEGER(IntKi), PARAMETER :: M4N5STVyi = 680 - INTEGER(IntKi), PARAMETER :: M4N6STVyi = 681 - INTEGER(IntKi), PARAMETER :: M4N7STVyi = 682 - INTEGER(IntKi), PARAMETER :: M4N8STVyi = 683 - INTEGER(IntKi), PARAMETER :: M4N9STVyi = 684 - INTEGER(IntKi), PARAMETER :: M5N1STVyi = 685 - INTEGER(IntKi), PARAMETER :: M5N2STVyi = 686 - INTEGER(IntKi), PARAMETER :: M5N3STVyi = 687 - INTEGER(IntKi), PARAMETER :: M5N4STVyi = 688 - INTEGER(IntKi), PARAMETER :: M5N5STVyi = 689 - INTEGER(IntKi), PARAMETER :: M5N6STVyi = 690 - INTEGER(IntKi), PARAMETER :: M5N7STVyi = 691 - INTEGER(IntKi), PARAMETER :: M5N8STVyi = 692 - INTEGER(IntKi), PARAMETER :: M5N9STVyi = 693 - INTEGER(IntKi), PARAMETER :: M6N1STVyi = 694 - INTEGER(IntKi), PARAMETER :: M6N2STVyi = 695 - INTEGER(IntKi), PARAMETER :: M6N3STVyi = 696 - INTEGER(IntKi), PARAMETER :: M6N4STVyi = 697 - INTEGER(IntKi), PARAMETER :: M6N5STVyi = 698 - INTEGER(IntKi), PARAMETER :: M6N6STVyi = 699 - INTEGER(IntKi), PARAMETER :: M6N7STVyi = 700 - INTEGER(IntKi), PARAMETER :: M6N8STVyi = 701 - INTEGER(IntKi), PARAMETER :: M6N9STVyi = 702 - INTEGER(IntKi), PARAMETER :: M7N1STVyi = 703 - INTEGER(IntKi), PARAMETER :: M7N2STVyi = 704 - INTEGER(IntKi), PARAMETER :: M7N3STVyi = 705 - INTEGER(IntKi), PARAMETER :: M7N4STVyi = 706 - INTEGER(IntKi), PARAMETER :: M7N5STVyi = 707 - INTEGER(IntKi), PARAMETER :: M7N6STVyi = 708 - INTEGER(IntKi), PARAMETER :: M7N7STVyi = 709 - INTEGER(IntKi), PARAMETER :: M7N8STVyi = 710 - INTEGER(IntKi), PARAMETER :: M7N9STVyi = 711 - INTEGER(IntKi), PARAMETER :: M8N1STVyi = 712 - INTEGER(IntKi), PARAMETER :: M8N2STVyi = 713 - INTEGER(IntKi), PARAMETER :: M8N3STVyi = 714 - INTEGER(IntKi), PARAMETER :: M8N4STVyi = 715 - INTEGER(IntKi), PARAMETER :: M8N5STVyi = 716 - INTEGER(IntKi), PARAMETER :: M8N6STVyi = 717 - INTEGER(IntKi), PARAMETER :: M8N7STVyi = 718 - INTEGER(IntKi), PARAMETER :: M8N8STVyi = 719 - INTEGER(IntKi), PARAMETER :: M8N9STVyi = 720 - INTEGER(IntKi), PARAMETER :: M9N1STVyi = 721 - INTEGER(IntKi), PARAMETER :: M9N2STVyi = 722 - INTEGER(IntKi), PARAMETER :: M9N3STVyi = 723 - INTEGER(IntKi), PARAMETER :: M9N4STVyi = 724 - INTEGER(IntKi), PARAMETER :: M9N5STVyi = 725 - INTEGER(IntKi), PARAMETER :: M9N6STVyi = 726 - INTEGER(IntKi), PARAMETER :: M9N7STVyi = 727 - INTEGER(IntKi), PARAMETER :: M9N8STVyi = 728 - INTEGER(IntKi), PARAMETER :: M9N9STVyi = 729 - INTEGER(IntKi), PARAMETER :: M1N1STVzi = 730 - INTEGER(IntKi), PARAMETER :: M1N2STVzi = 731 - INTEGER(IntKi), PARAMETER :: M1N3STVzi = 732 - INTEGER(IntKi), PARAMETER :: M1N4STVzi = 733 - INTEGER(IntKi), PARAMETER :: M1N5STVzi = 734 - INTEGER(IntKi), PARAMETER :: M1N6STVzi = 735 - INTEGER(IntKi), PARAMETER :: M1N7STVzi = 736 - INTEGER(IntKi), PARAMETER :: M1N8STVzi = 737 - INTEGER(IntKi), PARAMETER :: M1N9STVzi = 738 - INTEGER(IntKi), PARAMETER :: M2N1STVzi = 739 - INTEGER(IntKi), PARAMETER :: M2N2STVzi = 740 - INTEGER(IntKi), PARAMETER :: M2N3STVzi = 741 - INTEGER(IntKi), PARAMETER :: M2N4STVzi = 742 - INTEGER(IntKi), PARAMETER :: M2N5STVzi = 743 - INTEGER(IntKi), PARAMETER :: M2N6STVzi = 744 - INTEGER(IntKi), PARAMETER :: M2N7STVzi = 745 - INTEGER(IntKi), PARAMETER :: M2N8STVzi = 746 - INTEGER(IntKi), PARAMETER :: M2N9STVzi = 747 - INTEGER(IntKi), PARAMETER :: M3N1STVzi = 748 - INTEGER(IntKi), PARAMETER :: M3N2STVzi = 749 - INTEGER(IntKi), PARAMETER :: M3N3STVzi = 750 - INTEGER(IntKi), PARAMETER :: M3N4STVzi = 751 - INTEGER(IntKi), PARAMETER :: M3N5STVzi = 752 - INTEGER(IntKi), PARAMETER :: M3N6STVzi = 753 - INTEGER(IntKi), PARAMETER :: M3N7STVzi = 754 - INTEGER(IntKi), PARAMETER :: M3N8STVzi = 755 - INTEGER(IntKi), PARAMETER :: M3N9STVzi = 756 - INTEGER(IntKi), PARAMETER :: M4N1STVzi = 757 - INTEGER(IntKi), PARAMETER :: M4N2STVzi = 758 - INTEGER(IntKi), PARAMETER :: M4N3STVzi = 759 - INTEGER(IntKi), PARAMETER :: M4N4STVzi = 760 - INTEGER(IntKi), PARAMETER :: M4N5STVzi = 761 - INTEGER(IntKi), PARAMETER :: M4N6STVzi = 762 - INTEGER(IntKi), PARAMETER :: M4N7STVzi = 763 - INTEGER(IntKi), PARAMETER :: M4N8STVzi = 764 - INTEGER(IntKi), PARAMETER :: M4N9STVzi = 765 - INTEGER(IntKi), PARAMETER :: M5N1STVzi = 766 - INTEGER(IntKi), PARAMETER :: M5N2STVzi = 767 - INTEGER(IntKi), PARAMETER :: M5N3STVzi = 768 - INTEGER(IntKi), PARAMETER :: M5N4STVzi = 769 - INTEGER(IntKi), PARAMETER :: M5N5STVzi = 770 - INTEGER(IntKi), PARAMETER :: M5N6STVzi = 771 - INTEGER(IntKi), PARAMETER :: M5N7STVzi = 772 - INTEGER(IntKi), PARAMETER :: M5N8STVzi = 773 - INTEGER(IntKi), PARAMETER :: M5N9STVzi = 774 - INTEGER(IntKi), PARAMETER :: M6N1STVzi = 775 - INTEGER(IntKi), PARAMETER :: M6N2STVzi = 776 - INTEGER(IntKi), PARAMETER :: M6N3STVzi = 777 - INTEGER(IntKi), PARAMETER :: M6N4STVzi = 778 - INTEGER(IntKi), PARAMETER :: M6N5STVzi = 779 - INTEGER(IntKi), PARAMETER :: M6N6STVzi = 780 - INTEGER(IntKi), PARAMETER :: M6N7STVzi = 781 - INTEGER(IntKi), PARAMETER :: M6N8STVzi = 782 - INTEGER(IntKi), PARAMETER :: M6N9STVzi = 783 - INTEGER(IntKi), PARAMETER :: M7N1STVzi = 784 - INTEGER(IntKi), PARAMETER :: M7N2STVzi = 785 - INTEGER(IntKi), PARAMETER :: M7N3STVzi = 786 - INTEGER(IntKi), PARAMETER :: M7N4STVzi = 787 - INTEGER(IntKi), PARAMETER :: M7N5STVzi = 788 - INTEGER(IntKi), PARAMETER :: M7N6STVzi = 789 - INTEGER(IntKi), PARAMETER :: M7N7STVzi = 790 - INTEGER(IntKi), PARAMETER :: M7N8STVzi = 791 - INTEGER(IntKi), PARAMETER :: M7N9STVzi = 792 - INTEGER(IntKi), PARAMETER :: M8N1STVzi = 793 - INTEGER(IntKi), PARAMETER :: M8N2STVzi = 794 - INTEGER(IntKi), PARAMETER :: M8N3STVzi = 795 - INTEGER(IntKi), PARAMETER :: M8N4STVzi = 796 - INTEGER(IntKi), PARAMETER :: M8N5STVzi = 797 - INTEGER(IntKi), PARAMETER :: M8N6STVzi = 798 - INTEGER(IntKi), PARAMETER :: M8N7STVzi = 799 - INTEGER(IntKi), PARAMETER :: M8N8STVzi = 800 - INTEGER(IntKi), PARAMETER :: M8N9STVzi = 801 - INTEGER(IntKi), PARAMETER :: M9N1STVzi = 802 - INTEGER(IntKi), PARAMETER :: M9N2STVzi = 803 - INTEGER(IntKi), PARAMETER :: M9N3STVzi = 804 - INTEGER(IntKi), PARAMETER :: M9N4STVzi = 805 - INTEGER(IntKi), PARAMETER :: M9N5STVzi = 806 - INTEGER(IntKi), PARAMETER :: M9N6STVzi = 807 - INTEGER(IntKi), PARAMETER :: M9N7STVzi = 808 - INTEGER(IntKi), PARAMETER :: M9N8STVzi = 809 - INTEGER(IntKi), PARAMETER :: M9N9STVzi = 810 - INTEGER(IntKi), PARAMETER :: M1N1STAxi = 811 - INTEGER(IntKi), PARAMETER :: M1N2STAxi = 812 - INTEGER(IntKi), PARAMETER :: M1N3STAxi = 813 - INTEGER(IntKi), PARAMETER :: M1N4STAxi = 814 - INTEGER(IntKi), PARAMETER :: M1N5STAxi = 815 - INTEGER(IntKi), PARAMETER :: M1N6STAxi = 816 - INTEGER(IntKi), PARAMETER :: M1N7STAxi = 817 - INTEGER(IntKi), PARAMETER :: M1N8STAxi = 818 - INTEGER(IntKi), PARAMETER :: M1N9STAxi = 819 - INTEGER(IntKi), PARAMETER :: M2N1STAxi = 820 - INTEGER(IntKi), PARAMETER :: M2N2STAxi = 821 - INTEGER(IntKi), PARAMETER :: M2N3STAxi = 822 - INTEGER(IntKi), PARAMETER :: M2N4STAxi = 823 - INTEGER(IntKi), PARAMETER :: M2N5STAxi = 824 - INTEGER(IntKi), PARAMETER :: M2N6STAxi = 825 - INTEGER(IntKi), PARAMETER :: M2N7STAxi = 826 - INTEGER(IntKi), PARAMETER :: M2N8STAxi = 827 - INTEGER(IntKi), PARAMETER :: M2N9STAxi = 828 - INTEGER(IntKi), PARAMETER :: M3N1STAxi = 829 - INTEGER(IntKi), PARAMETER :: M3N2STAxi = 830 - INTEGER(IntKi), PARAMETER :: M3N3STAxi = 831 - INTEGER(IntKi), PARAMETER :: M3N4STAxi = 832 - INTEGER(IntKi), PARAMETER :: M3N5STAxi = 833 - INTEGER(IntKi), PARAMETER :: M3N6STAxi = 834 - INTEGER(IntKi), PARAMETER :: M3N7STAxi = 835 - INTEGER(IntKi), PARAMETER :: M3N8STAxi = 836 - INTEGER(IntKi), PARAMETER :: M3N9STAxi = 837 - INTEGER(IntKi), PARAMETER :: M4N1STAxi = 838 - INTEGER(IntKi), PARAMETER :: M4N2STAxi = 839 - INTEGER(IntKi), PARAMETER :: M4N3STAxi = 840 - INTEGER(IntKi), PARAMETER :: M4N4STAxi = 841 - INTEGER(IntKi), PARAMETER :: M4N5STAxi = 842 - INTEGER(IntKi), PARAMETER :: M4N6STAxi = 843 - INTEGER(IntKi), PARAMETER :: M4N7STAxi = 844 - INTEGER(IntKi), PARAMETER :: M4N8STAxi = 845 - INTEGER(IntKi), PARAMETER :: M4N9STAxi = 846 - INTEGER(IntKi), PARAMETER :: M5N1STAxi = 847 - INTEGER(IntKi), PARAMETER :: M5N2STAxi = 848 - INTEGER(IntKi), PARAMETER :: M5N3STAxi = 849 - INTEGER(IntKi), PARAMETER :: M5N4STAxi = 850 - INTEGER(IntKi), PARAMETER :: M5N5STAxi = 851 - INTEGER(IntKi), PARAMETER :: M5N6STAxi = 852 - INTEGER(IntKi), PARAMETER :: M5N7STAxi = 853 - INTEGER(IntKi), PARAMETER :: M5N8STAxi = 854 - INTEGER(IntKi), PARAMETER :: M5N9STAxi = 855 - INTEGER(IntKi), PARAMETER :: M6N1STAxi = 856 - INTEGER(IntKi), PARAMETER :: M6N2STAxi = 857 - INTEGER(IntKi), PARAMETER :: M6N3STAxi = 858 - INTEGER(IntKi), PARAMETER :: M6N4STAxi = 859 - INTEGER(IntKi), PARAMETER :: M6N5STAxi = 860 - INTEGER(IntKi), PARAMETER :: M6N6STAxi = 861 - INTEGER(IntKi), PARAMETER :: M6N7STAxi = 862 - INTEGER(IntKi), PARAMETER :: M6N8STAxi = 863 - INTEGER(IntKi), PARAMETER :: M6N9STAxi = 864 - INTEGER(IntKi), PARAMETER :: M7N1STAxi = 865 - INTEGER(IntKi), PARAMETER :: M7N2STAxi = 866 - INTEGER(IntKi), PARAMETER :: M7N3STAxi = 867 - INTEGER(IntKi), PARAMETER :: M7N4STAxi = 868 - INTEGER(IntKi), PARAMETER :: M7N5STAxi = 869 - INTEGER(IntKi), PARAMETER :: M7N6STAxi = 870 - INTEGER(IntKi), PARAMETER :: M7N7STAxi = 871 - INTEGER(IntKi), PARAMETER :: M7N8STAxi = 872 - INTEGER(IntKi), PARAMETER :: M7N9STAxi = 873 - INTEGER(IntKi), PARAMETER :: M8N1STAxi = 874 - INTEGER(IntKi), PARAMETER :: M8N2STAxi = 875 - INTEGER(IntKi), PARAMETER :: M8N3STAxi = 876 - INTEGER(IntKi), PARAMETER :: M8N4STAxi = 877 - INTEGER(IntKi), PARAMETER :: M8N5STAxi = 878 - INTEGER(IntKi), PARAMETER :: M8N6STAxi = 879 - INTEGER(IntKi), PARAMETER :: M8N7STAxi = 880 - INTEGER(IntKi), PARAMETER :: M8N8STAxi = 881 - INTEGER(IntKi), PARAMETER :: M8N9STAxi = 882 - INTEGER(IntKi), PARAMETER :: M9N1STAxi = 883 - INTEGER(IntKi), PARAMETER :: M9N2STAxi = 884 - INTEGER(IntKi), PARAMETER :: M9N3STAxi = 885 - INTEGER(IntKi), PARAMETER :: M9N4STAxi = 886 - INTEGER(IntKi), PARAMETER :: M9N5STAxi = 887 - INTEGER(IntKi), PARAMETER :: M9N6STAxi = 888 - INTEGER(IntKi), PARAMETER :: M9N7STAxi = 889 - INTEGER(IntKi), PARAMETER :: M9N8STAxi = 890 - INTEGER(IntKi), PARAMETER :: M9N9STAxi = 891 - INTEGER(IntKi), PARAMETER :: M1N1STAyi = 892 - INTEGER(IntKi), PARAMETER :: M1N2STAyi = 893 - INTEGER(IntKi), PARAMETER :: M1N3STAyi = 894 - INTEGER(IntKi), PARAMETER :: M1N4STAyi = 895 - INTEGER(IntKi), PARAMETER :: M1N5STAyi = 896 - INTEGER(IntKi), PARAMETER :: M1N6STAyi = 897 - INTEGER(IntKi), PARAMETER :: M1N7STAyi = 898 - INTEGER(IntKi), PARAMETER :: M1N8STAyi = 899 - INTEGER(IntKi), PARAMETER :: M1N9STAyi = 900 - INTEGER(IntKi), PARAMETER :: M2N1STAyi = 901 - INTEGER(IntKi), PARAMETER :: M2N2STAyi = 902 - INTEGER(IntKi), PARAMETER :: M2N3STAyi = 903 - INTEGER(IntKi), PARAMETER :: M2N4STAyi = 904 - INTEGER(IntKi), PARAMETER :: M2N5STAyi = 905 - INTEGER(IntKi), PARAMETER :: M2N6STAyi = 906 - INTEGER(IntKi), PARAMETER :: M2N7STAyi = 907 - INTEGER(IntKi), PARAMETER :: M2N8STAyi = 908 - INTEGER(IntKi), PARAMETER :: M2N9STAyi = 909 - INTEGER(IntKi), PARAMETER :: M3N1STAyi = 910 - INTEGER(IntKi), PARAMETER :: M3N2STAyi = 911 - INTEGER(IntKi), PARAMETER :: M3N3STAyi = 912 - INTEGER(IntKi), PARAMETER :: M3N4STAyi = 913 - INTEGER(IntKi), PARAMETER :: M3N5STAyi = 914 - INTEGER(IntKi), PARAMETER :: M3N6STAyi = 915 - INTEGER(IntKi), PARAMETER :: M3N7STAyi = 916 - INTEGER(IntKi), PARAMETER :: M3N8STAyi = 917 - INTEGER(IntKi), PARAMETER :: M3N9STAyi = 918 - INTEGER(IntKi), PARAMETER :: M4N1STAyi = 919 - INTEGER(IntKi), PARAMETER :: M4N2STAyi = 920 - INTEGER(IntKi), PARAMETER :: M4N3STAyi = 921 - INTEGER(IntKi), PARAMETER :: M4N4STAyi = 922 - INTEGER(IntKi), PARAMETER :: M4N5STAyi = 923 - INTEGER(IntKi), PARAMETER :: M4N6STAyi = 924 - INTEGER(IntKi), PARAMETER :: M4N7STAyi = 925 - INTEGER(IntKi), PARAMETER :: M4N8STAyi = 926 - INTEGER(IntKi), PARAMETER :: M4N9STAyi = 927 - INTEGER(IntKi), PARAMETER :: M5N1STAyi = 928 - INTEGER(IntKi), PARAMETER :: M5N2STAyi = 929 - INTEGER(IntKi), PARAMETER :: M5N3STAyi = 930 - INTEGER(IntKi), PARAMETER :: M5N4STAyi = 931 - INTEGER(IntKi), PARAMETER :: M5N5STAyi = 932 - INTEGER(IntKi), PARAMETER :: M5N6STAyi = 933 - INTEGER(IntKi), PARAMETER :: M5N7STAyi = 934 - INTEGER(IntKi), PARAMETER :: M5N8STAyi = 935 - INTEGER(IntKi), PARAMETER :: M5N9STAyi = 936 - INTEGER(IntKi), PARAMETER :: M6N1STAyi = 937 - INTEGER(IntKi), PARAMETER :: M6N2STAyi = 938 - INTEGER(IntKi), PARAMETER :: M6N3STAyi = 939 - INTEGER(IntKi), PARAMETER :: M6N4STAyi = 940 - INTEGER(IntKi), PARAMETER :: M6N5STAyi = 941 - INTEGER(IntKi), PARAMETER :: M6N6STAyi = 942 - INTEGER(IntKi), PARAMETER :: M6N7STAyi = 943 - INTEGER(IntKi), PARAMETER :: M6N8STAyi = 944 - INTEGER(IntKi), PARAMETER :: M6N9STAyi = 945 - INTEGER(IntKi), PARAMETER :: M7N1STAyi = 946 - INTEGER(IntKi), PARAMETER :: M7N2STAyi = 947 - INTEGER(IntKi), PARAMETER :: M7N3STAyi = 948 - INTEGER(IntKi), PARAMETER :: M7N4STAyi = 949 - INTEGER(IntKi), PARAMETER :: M7N5STAyi = 950 - INTEGER(IntKi), PARAMETER :: M7N6STAyi = 951 - INTEGER(IntKi), PARAMETER :: M7N7STAyi = 952 - INTEGER(IntKi), PARAMETER :: M7N8STAyi = 953 - INTEGER(IntKi), PARAMETER :: M7N9STAyi = 954 - INTEGER(IntKi), PARAMETER :: M8N1STAyi = 955 - INTEGER(IntKi), PARAMETER :: M8N2STAyi = 956 - INTEGER(IntKi), PARAMETER :: M8N3STAyi = 957 - INTEGER(IntKi), PARAMETER :: M8N4STAyi = 958 - INTEGER(IntKi), PARAMETER :: M8N5STAyi = 959 - INTEGER(IntKi), PARAMETER :: M8N6STAyi = 960 - INTEGER(IntKi), PARAMETER :: M8N7STAyi = 961 - INTEGER(IntKi), PARAMETER :: M8N8STAyi = 962 - INTEGER(IntKi), PARAMETER :: M8N9STAyi = 963 - INTEGER(IntKi), PARAMETER :: M9N1STAyi = 964 - INTEGER(IntKi), PARAMETER :: M9N2STAyi = 965 - INTEGER(IntKi), PARAMETER :: M9N3STAyi = 966 - INTEGER(IntKi), PARAMETER :: M9N4STAyi = 967 - INTEGER(IntKi), PARAMETER :: M9N5STAyi = 968 - INTEGER(IntKi), PARAMETER :: M9N6STAyi = 969 - INTEGER(IntKi), PARAMETER :: M9N7STAyi = 970 - INTEGER(IntKi), PARAMETER :: M9N8STAyi = 971 - INTEGER(IntKi), PARAMETER :: M9N9STAyi = 972 - INTEGER(IntKi), PARAMETER :: M1N1STAzi = 973 - INTEGER(IntKi), PARAMETER :: M1N2STAzi = 974 - INTEGER(IntKi), PARAMETER :: M1N3STAzi = 975 - INTEGER(IntKi), PARAMETER :: M1N4STAzi = 976 - INTEGER(IntKi), PARAMETER :: M1N5STAzi = 977 - INTEGER(IntKi), PARAMETER :: M1N6STAzi = 978 - INTEGER(IntKi), PARAMETER :: M1N7STAzi = 979 - INTEGER(IntKi), PARAMETER :: M1N8STAzi = 980 - INTEGER(IntKi), PARAMETER :: M1N9STAzi = 981 - INTEGER(IntKi), PARAMETER :: M2N1STAzi = 982 - INTEGER(IntKi), PARAMETER :: M2N2STAzi = 983 - INTEGER(IntKi), PARAMETER :: M2N3STAzi = 984 - INTEGER(IntKi), PARAMETER :: M2N4STAzi = 985 - INTEGER(IntKi), PARAMETER :: M2N5STAzi = 986 - INTEGER(IntKi), PARAMETER :: M2N6STAzi = 987 - INTEGER(IntKi), PARAMETER :: M2N7STAzi = 988 - INTEGER(IntKi), PARAMETER :: M2N8STAzi = 989 - INTEGER(IntKi), PARAMETER :: M2N9STAzi = 990 - INTEGER(IntKi), PARAMETER :: M3N1STAzi = 991 - INTEGER(IntKi), PARAMETER :: M3N2STAzi = 992 - INTEGER(IntKi), PARAMETER :: M3N3STAzi = 993 - INTEGER(IntKi), PARAMETER :: M3N4STAzi = 994 - INTEGER(IntKi), PARAMETER :: M3N5STAzi = 995 - INTEGER(IntKi), PARAMETER :: M3N6STAzi = 996 - INTEGER(IntKi), PARAMETER :: M3N7STAzi = 997 - INTEGER(IntKi), PARAMETER :: M3N8STAzi = 998 - INTEGER(IntKi), PARAMETER :: M3N9STAzi = 999 - INTEGER(IntKi), PARAMETER :: M4N1STAzi = 1000 - INTEGER(IntKi), PARAMETER :: M4N2STAzi = 1001 - INTEGER(IntKi), PARAMETER :: M4N3STAzi = 1002 - INTEGER(IntKi), PARAMETER :: M4N4STAzi = 1003 - INTEGER(IntKi), PARAMETER :: M4N5STAzi = 1004 - INTEGER(IntKi), PARAMETER :: M4N6STAzi = 1005 - INTEGER(IntKi), PARAMETER :: M4N7STAzi = 1006 - INTEGER(IntKi), PARAMETER :: M4N8STAzi = 1007 - INTEGER(IntKi), PARAMETER :: M4N9STAzi = 1008 - INTEGER(IntKi), PARAMETER :: M5N1STAzi = 1009 - INTEGER(IntKi), PARAMETER :: M5N2STAzi = 1010 - INTEGER(IntKi), PARAMETER :: M5N3STAzi = 1011 - INTEGER(IntKi), PARAMETER :: M5N4STAzi = 1012 - INTEGER(IntKi), PARAMETER :: M5N5STAzi = 1013 - INTEGER(IntKi), PARAMETER :: M5N6STAzi = 1014 - INTEGER(IntKi), PARAMETER :: M5N7STAzi = 1015 - INTEGER(IntKi), PARAMETER :: M5N8STAzi = 1016 - INTEGER(IntKi), PARAMETER :: M5N9STAzi = 1017 - INTEGER(IntKi), PARAMETER :: M6N1STAzi = 1018 - INTEGER(IntKi), PARAMETER :: M6N2STAzi = 1019 - INTEGER(IntKi), PARAMETER :: M6N3STAzi = 1020 - INTEGER(IntKi), PARAMETER :: M6N4STAzi = 1021 - INTEGER(IntKi), PARAMETER :: M6N5STAzi = 1022 - INTEGER(IntKi), PARAMETER :: M6N6STAzi = 1023 - INTEGER(IntKi), PARAMETER :: M6N7STAzi = 1024 - INTEGER(IntKi), PARAMETER :: M6N8STAzi = 1025 - INTEGER(IntKi), PARAMETER :: M6N9STAzi = 1026 - INTEGER(IntKi), PARAMETER :: M7N1STAzi = 1027 - INTEGER(IntKi), PARAMETER :: M7N2STAzi = 1028 - INTEGER(IntKi), PARAMETER :: M7N3STAzi = 1029 - INTEGER(IntKi), PARAMETER :: M7N4STAzi = 1030 - INTEGER(IntKi), PARAMETER :: M7N5STAzi = 1031 - INTEGER(IntKi), PARAMETER :: M7N6STAzi = 1032 - INTEGER(IntKi), PARAMETER :: M7N7STAzi = 1033 - INTEGER(IntKi), PARAMETER :: M7N8STAzi = 1034 - INTEGER(IntKi), PARAMETER :: M7N9STAzi = 1035 - INTEGER(IntKi), PARAMETER :: M8N1STAzi = 1036 - INTEGER(IntKi), PARAMETER :: M8N2STAzi = 1037 - INTEGER(IntKi), PARAMETER :: M8N3STAzi = 1038 - INTEGER(IntKi), PARAMETER :: M8N4STAzi = 1039 - INTEGER(IntKi), PARAMETER :: M8N5STAzi = 1040 - INTEGER(IntKi), PARAMETER :: M8N6STAzi = 1041 - INTEGER(IntKi), PARAMETER :: M8N7STAzi = 1042 - INTEGER(IntKi), PARAMETER :: M8N8STAzi = 1043 - INTEGER(IntKi), PARAMETER :: M8N9STAzi = 1044 - INTEGER(IntKi), PARAMETER :: M9N1STAzi = 1045 - INTEGER(IntKi), PARAMETER :: M9N2STAzi = 1046 - INTEGER(IntKi), PARAMETER :: M9N3STAzi = 1047 - INTEGER(IntKi), PARAMETER :: M9N4STAzi = 1048 - INTEGER(IntKi), PARAMETER :: M9N5STAzi = 1049 - INTEGER(IntKi), PARAMETER :: M9N6STAzi = 1050 - INTEGER(IntKi), PARAMETER :: M9N7STAzi = 1051 - INTEGER(IntKi), PARAMETER :: M9N8STAzi = 1052 - INTEGER(IntKi), PARAMETER :: M9N9STAzi = 1053 + INTEGER(IntKi), PARAMETER :: M1N1Axi = 1 + INTEGER(IntKi), PARAMETER :: M1N2Axi = 2 + INTEGER(IntKi), PARAMETER :: M1N3Axi = 3 + INTEGER(IntKi), PARAMETER :: M1N4Axi = 4 + INTEGER(IntKi), PARAMETER :: M1N5Axi = 5 + INTEGER(IntKi), PARAMETER :: M1N6Axi = 6 + INTEGER(IntKi), PARAMETER :: M1N7Axi = 7 + INTEGER(IntKi), PARAMETER :: M1N8Axi = 8 + INTEGER(IntKi), PARAMETER :: M1N9Axi = 9 + INTEGER(IntKi), PARAMETER :: M2N1Axi = 10 + INTEGER(IntKi), PARAMETER :: M2N2Axi = 11 + INTEGER(IntKi), PARAMETER :: M2N3Axi = 12 + INTEGER(IntKi), PARAMETER :: M2N4Axi = 13 + INTEGER(IntKi), PARAMETER :: M2N5Axi = 14 + INTEGER(IntKi), PARAMETER :: M2N6Axi = 15 + INTEGER(IntKi), PARAMETER :: M2N7Axi = 16 + INTEGER(IntKi), PARAMETER :: M2N8Axi = 17 + INTEGER(IntKi), PARAMETER :: M2N9Axi = 18 + INTEGER(IntKi), PARAMETER :: M3N1Axi = 19 + INTEGER(IntKi), PARAMETER :: M3N2Axi = 20 + INTEGER(IntKi), PARAMETER :: M3N3Axi = 21 + INTEGER(IntKi), PARAMETER :: M3N4Axi = 22 + INTEGER(IntKi), PARAMETER :: M3N5Axi = 23 + INTEGER(IntKi), PARAMETER :: M3N6Axi = 24 + INTEGER(IntKi), PARAMETER :: M3N7Axi = 25 + INTEGER(IntKi), PARAMETER :: M3N8Axi = 26 + INTEGER(IntKi), PARAMETER :: M3N9Axi = 27 + INTEGER(IntKi), PARAMETER :: M4N1Axi = 28 + INTEGER(IntKi), PARAMETER :: M4N2Axi = 29 + INTEGER(IntKi), PARAMETER :: M4N3Axi = 30 + INTEGER(IntKi), PARAMETER :: M4N4Axi = 31 + INTEGER(IntKi), PARAMETER :: M4N5Axi = 32 + INTEGER(IntKi), PARAMETER :: M4N6Axi = 33 + INTEGER(IntKi), PARAMETER :: M4N7Axi = 34 + INTEGER(IntKi), PARAMETER :: M4N8Axi = 35 + INTEGER(IntKi), PARAMETER :: M4N9Axi = 36 + INTEGER(IntKi), PARAMETER :: M5N1Axi = 37 + INTEGER(IntKi), PARAMETER :: M5N2Axi = 38 + INTEGER(IntKi), PARAMETER :: M5N3Axi = 39 + INTEGER(IntKi), PARAMETER :: M5N4Axi = 40 + INTEGER(IntKi), PARAMETER :: M5N5Axi = 41 + INTEGER(IntKi), PARAMETER :: M5N6Axi = 42 + INTEGER(IntKi), PARAMETER :: M5N7Axi = 43 + INTEGER(IntKi), PARAMETER :: M5N8Axi = 44 + INTEGER(IntKi), PARAMETER :: M5N9Axi = 45 + INTEGER(IntKi), PARAMETER :: M6N1Axi = 46 + INTEGER(IntKi), PARAMETER :: M6N2Axi = 47 + INTEGER(IntKi), PARAMETER :: M6N3Axi = 48 + INTEGER(IntKi), PARAMETER :: M6N4Axi = 49 + INTEGER(IntKi), PARAMETER :: M6N5Axi = 50 + INTEGER(IntKi), PARAMETER :: M6N6Axi = 51 + INTEGER(IntKi), PARAMETER :: M6N7Axi = 52 + INTEGER(IntKi), PARAMETER :: M6N8Axi = 53 + INTEGER(IntKi), PARAMETER :: M6N9Axi = 54 + INTEGER(IntKi), PARAMETER :: M7N1Axi = 55 + INTEGER(IntKi), PARAMETER :: M7N2Axi = 56 + INTEGER(IntKi), PARAMETER :: M7N3Axi = 57 + INTEGER(IntKi), PARAMETER :: M7N4Axi = 58 + INTEGER(IntKi), PARAMETER :: M7N5Axi = 59 + INTEGER(IntKi), PARAMETER :: M7N6Axi = 60 + INTEGER(IntKi), PARAMETER :: M7N7Axi = 61 + INTEGER(IntKi), PARAMETER :: M7N8Axi = 62 + INTEGER(IntKi), PARAMETER :: M7N9Axi = 63 + INTEGER(IntKi), PARAMETER :: M8N1Axi = 64 + INTEGER(IntKi), PARAMETER :: M8N2Axi = 65 + INTEGER(IntKi), PARAMETER :: M8N3Axi = 66 + INTEGER(IntKi), PARAMETER :: M8N4Axi = 67 + INTEGER(IntKi), PARAMETER :: M8N5Axi = 68 + INTEGER(IntKi), PARAMETER :: M8N6Axi = 69 + INTEGER(IntKi), PARAMETER :: M8N7Axi = 70 + INTEGER(IntKi), PARAMETER :: M8N8Axi = 71 + INTEGER(IntKi), PARAMETER :: M8N9Axi = 72 + INTEGER(IntKi), PARAMETER :: M9N1Axi = 73 + INTEGER(IntKi), PARAMETER :: M9N2Axi = 74 + INTEGER(IntKi), PARAMETER :: M9N3Axi = 75 + INTEGER(IntKi), PARAMETER :: M9N4Axi = 76 + INTEGER(IntKi), PARAMETER :: M9N5Axi = 77 + INTEGER(IntKi), PARAMETER :: M9N6Axi = 78 + INTEGER(IntKi), PARAMETER :: M9N7Axi = 79 + INTEGER(IntKi), PARAMETER :: M9N8Axi = 80 + INTEGER(IntKi), PARAMETER :: M9N9Axi = 81 + INTEGER(IntKi), PARAMETER :: M1N1Ayi = 82 + INTEGER(IntKi), PARAMETER :: M1N2Ayi = 83 + INTEGER(IntKi), PARAMETER :: M1N3Ayi = 84 + INTEGER(IntKi), PARAMETER :: M1N4Ayi = 85 + INTEGER(IntKi), PARAMETER :: M1N5Ayi = 86 + INTEGER(IntKi), PARAMETER :: M1N6Ayi = 87 + INTEGER(IntKi), PARAMETER :: M1N7Ayi = 88 + INTEGER(IntKi), PARAMETER :: M1N8Ayi = 89 + INTEGER(IntKi), PARAMETER :: M1N9Ayi = 90 + INTEGER(IntKi), PARAMETER :: M2N1Ayi = 91 + INTEGER(IntKi), PARAMETER :: M2N2Ayi = 92 + INTEGER(IntKi), PARAMETER :: M2N3Ayi = 93 + INTEGER(IntKi), PARAMETER :: M2N4Ayi = 94 + INTEGER(IntKi), PARAMETER :: M2N5Ayi = 95 + INTEGER(IntKi), PARAMETER :: M2N6Ayi = 96 + INTEGER(IntKi), PARAMETER :: M2N7Ayi = 97 + INTEGER(IntKi), PARAMETER :: M2N8Ayi = 98 + INTEGER(IntKi), PARAMETER :: M2N9Ayi = 99 + INTEGER(IntKi), PARAMETER :: M3N1Ayi = 100 + INTEGER(IntKi), PARAMETER :: M3N2Ayi = 101 + INTEGER(IntKi), PARAMETER :: M3N3Ayi = 102 + INTEGER(IntKi), PARAMETER :: M3N4Ayi = 103 + INTEGER(IntKi), PARAMETER :: M3N5Ayi = 104 + INTEGER(IntKi), PARAMETER :: M3N6Ayi = 105 + INTEGER(IntKi), PARAMETER :: M3N7Ayi = 106 + INTEGER(IntKi), PARAMETER :: M3N8Ayi = 107 + INTEGER(IntKi), PARAMETER :: M3N9Ayi = 108 + INTEGER(IntKi), PARAMETER :: M4N1Ayi = 109 + INTEGER(IntKi), PARAMETER :: M4N2Ayi = 110 + INTEGER(IntKi), PARAMETER :: M4N3Ayi = 111 + INTEGER(IntKi), PARAMETER :: M4N4Ayi = 112 + INTEGER(IntKi), PARAMETER :: M4N5Ayi = 113 + INTEGER(IntKi), PARAMETER :: M4N6Ayi = 114 + INTEGER(IntKi), PARAMETER :: M4N7Ayi = 115 + INTEGER(IntKi), PARAMETER :: M4N8Ayi = 116 + INTEGER(IntKi), PARAMETER :: M4N9Ayi = 117 + INTEGER(IntKi), PARAMETER :: M5N1Ayi = 118 + INTEGER(IntKi), PARAMETER :: M5N2Ayi = 119 + INTEGER(IntKi), PARAMETER :: M5N3Ayi = 120 + INTEGER(IntKi), PARAMETER :: M5N4Ayi = 121 + INTEGER(IntKi), PARAMETER :: M5N5Ayi = 122 + INTEGER(IntKi), PARAMETER :: M5N6Ayi = 123 + INTEGER(IntKi), PARAMETER :: M5N7Ayi = 124 + INTEGER(IntKi), PARAMETER :: M5N8Ayi = 125 + INTEGER(IntKi), PARAMETER :: M5N9Ayi = 126 + INTEGER(IntKi), PARAMETER :: M6N1Ayi = 127 + INTEGER(IntKi), PARAMETER :: M6N2Ayi = 128 + INTEGER(IntKi), PARAMETER :: M6N3Ayi = 129 + INTEGER(IntKi), PARAMETER :: M6N4Ayi = 130 + INTEGER(IntKi), PARAMETER :: M6N5Ayi = 131 + INTEGER(IntKi), PARAMETER :: M6N6Ayi = 132 + INTEGER(IntKi), PARAMETER :: M6N7Ayi = 133 + INTEGER(IntKi), PARAMETER :: M6N8Ayi = 134 + INTEGER(IntKi), PARAMETER :: M6N9Ayi = 135 + INTEGER(IntKi), PARAMETER :: M7N1Ayi = 136 + INTEGER(IntKi), PARAMETER :: M7N2Ayi = 137 + INTEGER(IntKi), PARAMETER :: M7N3Ayi = 138 + INTEGER(IntKi), PARAMETER :: M7N4Ayi = 139 + INTEGER(IntKi), PARAMETER :: M7N5Ayi = 140 + INTEGER(IntKi), PARAMETER :: M7N6Ayi = 141 + INTEGER(IntKi), PARAMETER :: M7N7Ayi = 142 + INTEGER(IntKi), PARAMETER :: M7N8Ayi = 143 + INTEGER(IntKi), PARAMETER :: M7N9Ayi = 144 + INTEGER(IntKi), PARAMETER :: M8N1Ayi = 145 + INTEGER(IntKi), PARAMETER :: M8N2Ayi = 146 + INTEGER(IntKi), PARAMETER :: M8N3Ayi = 147 + INTEGER(IntKi), PARAMETER :: M8N4Ayi = 148 + INTEGER(IntKi), PARAMETER :: M8N5Ayi = 149 + INTEGER(IntKi), PARAMETER :: M8N6Ayi = 150 + INTEGER(IntKi), PARAMETER :: M8N7Ayi = 151 + INTEGER(IntKi), PARAMETER :: M8N8Ayi = 152 + INTEGER(IntKi), PARAMETER :: M8N9Ayi = 153 + INTEGER(IntKi), PARAMETER :: M9N1Ayi = 154 + INTEGER(IntKi), PARAMETER :: M9N2Ayi = 155 + INTEGER(IntKi), PARAMETER :: M9N3Ayi = 156 + INTEGER(IntKi), PARAMETER :: M9N4Ayi = 157 + INTEGER(IntKi), PARAMETER :: M9N5Ayi = 158 + INTEGER(IntKi), PARAMETER :: M9N6Ayi = 159 + INTEGER(IntKi), PARAMETER :: M9N7Ayi = 160 + INTEGER(IntKi), PARAMETER :: M9N8Ayi = 161 + INTEGER(IntKi), PARAMETER :: M9N9Ayi = 162 + INTEGER(IntKi), PARAMETER :: M1N1Azi = 163 + INTEGER(IntKi), PARAMETER :: M1N2Azi = 164 + INTEGER(IntKi), PARAMETER :: M1N3Azi = 165 + INTEGER(IntKi), PARAMETER :: M1N4Azi = 166 + INTEGER(IntKi), PARAMETER :: M1N5Azi = 167 + INTEGER(IntKi), PARAMETER :: M1N6Azi = 168 + INTEGER(IntKi), PARAMETER :: M1N7Azi = 169 + INTEGER(IntKi), PARAMETER :: M1N8Azi = 170 + INTEGER(IntKi), PARAMETER :: M1N9Azi = 171 + INTEGER(IntKi), PARAMETER :: M2N1Azi = 172 + INTEGER(IntKi), PARAMETER :: M2N2Azi = 173 + INTEGER(IntKi), PARAMETER :: M2N3Azi = 174 + INTEGER(IntKi), PARAMETER :: M2N4Azi = 175 + INTEGER(IntKi), PARAMETER :: M2N5Azi = 176 + INTEGER(IntKi), PARAMETER :: M2N6Azi = 177 + INTEGER(IntKi), PARAMETER :: M2N7Azi = 178 + INTEGER(IntKi), PARAMETER :: M2N8Azi = 179 + INTEGER(IntKi), PARAMETER :: M2N9Azi = 180 + INTEGER(IntKi), PARAMETER :: M3N1Azi = 181 + INTEGER(IntKi), PARAMETER :: M3N2Azi = 182 + INTEGER(IntKi), PARAMETER :: M3N3Azi = 183 + INTEGER(IntKi), PARAMETER :: M3N4Azi = 184 + INTEGER(IntKi), PARAMETER :: M3N5Azi = 185 + INTEGER(IntKi), PARAMETER :: M3N6Azi = 186 + INTEGER(IntKi), PARAMETER :: M3N7Azi = 187 + INTEGER(IntKi), PARAMETER :: M3N8Azi = 188 + INTEGER(IntKi), PARAMETER :: M3N9Azi = 189 + INTEGER(IntKi), PARAMETER :: M4N1Azi = 190 + INTEGER(IntKi), PARAMETER :: M4N2Azi = 191 + INTEGER(IntKi), PARAMETER :: M4N3Azi = 192 + INTEGER(IntKi), PARAMETER :: M4N4Azi = 193 + INTEGER(IntKi), PARAMETER :: M4N5Azi = 194 + INTEGER(IntKi), PARAMETER :: M4N6Azi = 195 + INTEGER(IntKi), PARAMETER :: M4N7Azi = 196 + INTEGER(IntKi), PARAMETER :: M4N8Azi = 197 + INTEGER(IntKi), PARAMETER :: M4N9Azi = 198 + INTEGER(IntKi), PARAMETER :: M5N1Azi = 199 + INTEGER(IntKi), PARAMETER :: M5N2Azi = 200 + INTEGER(IntKi), PARAMETER :: M5N3Azi = 201 + INTEGER(IntKi), PARAMETER :: M5N4Azi = 202 + INTEGER(IntKi), PARAMETER :: M5N5Azi = 203 + INTEGER(IntKi), PARAMETER :: M5N6Azi = 204 + INTEGER(IntKi), PARAMETER :: M5N7Azi = 205 + INTEGER(IntKi), PARAMETER :: M5N8Azi = 206 + INTEGER(IntKi), PARAMETER :: M5N9Azi = 207 + INTEGER(IntKi), PARAMETER :: M6N1Azi = 208 + INTEGER(IntKi), PARAMETER :: M6N2Azi = 209 + INTEGER(IntKi), PARAMETER :: M6N3Azi = 210 + INTEGER(IntKi), PARAMETER :: M6N4Azi = 211 + INTEGER(IntKi), PARAMETER :: M6N5Azi = 212 + INTEGER(IntKi), PARAMETER :: M6N6Azi = 213 + INTEGER(IntKi), PARAMETER :: M6N7Azi = 214 + INTEGER(IntKi), PARAMETER :: M6N8Azi = 215 + INTEGER(IntKi), PARAMETER :: M6N9Azi = 216 + INTEGER(IntKi), PARAMETER :: M7N1Azi = 217 + INTEGER(IntKi), PARAMETER :: M7N2Azi = 218 + INTEGER(IntKi), PARAMETER :: M7N3Azi = 219 + INTEGER(IntKi), PARAMETER :: M7N4Azi = 220 + INTEGER(IntKi), PARAMETER :: M7N5Azi = 221 + INTEGER(IntKi), PARAMETER :: M7N6Azi = 222 + INTEGER(IntKi), PARAMETER :: M7N7Azi = 223 + INTEGER(IntKi), PARAMETER :: M7N8Azi = 224 + INTEGER(IntKi), PARAMETER :: M7N9Azi = 225 + INTEGER(IntKi), PARAMETER :: M8N1Azi = 226 + INTEGER(IntKi), PARAMETER :: M8N2Azi = 227 + INTEGER(IntKi), PARAMETER :: M8N3Azi = 228 + INTEGER(IntKi), PARAMETER :: M8N4Azi = 229 + INTEGER(IntKi), PARAMETER :: M8N5Azi = 230 + INTEGER(IntKi), PARAMETER :: M8N6Azi = 231 + INTEGER(IntKi), PARAMETER :: M8N7Azi = 232 + INTEGER(IntKi), PARAMETER :: M8N8Azi = 233 + INTEGER(IntKi), PARAMETER :: M8N9Azi = 234 + INTEGER(IntKi), PARAMETER :: M9N1Azi = 235 + INTEGER(IntKi), PARAMETER :: M9N2Azi = 236 + INTEGER(IntKi), PARAMETER :: M9N3Azi = 237 + INTEGER(IntKi), PARAMETER :: M9N4Azi = 238 + INTEGER(IntKi), PARAMETER :: M9N5Azi = 239 + INTEGER(IntKi), PARAMETER :: M9N6Azi = 240 + INTEGER(IntKi), PARAMETER :: M9N7Azi = 241 + INTEGER(IntKi), PARAMETER :: M9N8Azi = 242 + INTEGER(IntKi), PARAMETER :: M9N9Azi = 243 + INTEGER(IntKi), PARAMETER :: M1N1Vxi = 244 + INTEGER(IntKi), PARAMETER :: M1N2Vxi = 245 + INTEGER(IntKi), PARAMETER :: M1N3Vxi = 246 + INTEGER(IntKi), PARAMETER :: M1N4Vxi = 247 + INTEGER(IntKi), PARAMETER :: M1N5Vxi = 248 + INTEGER(IntKi), PARAMETER :: M1N6Vxi = 249 + INTEGER(IntKi), PARAMETER :: M1N7Vxi = 250 + INTEGER(IntKi), PARAMETER :: M1N8Vxi = 251 + INTEGER(IntKi), PARAMETER :: M1N9Vxi = 252 + INTEGER(IntKi), PARAMETER :: M2N1Vxi = 253 + INTEGER(IntKi), PARAMETER :: M2N2Vxi = 254 + INTEGER(IntKi), PARAMETER :: M2N3Vxi = 255 + INTEGER(IntKi), PARAMETER :: M2N4Vxi = 256 + INTEGER(IntKi), PARAMETER :: M2N5Vxi = 257 + INTEGER(IntKi), PARAMETER :: M2N6Vxi = 258 + INTEGER(IntKi), PARAMETER :: M2N7Vxi = 259 + INTEGER(IntKi), PARAMETER :: M2N8Vxi = 260 + INTEGER(IntKi), PARAMETER :: M2N9Vxi = 261 + INTEGER(IntKi), PARAMETER :: M3N1Vxi = 262 + INTEGER(IntKi), PARAMETER :: M3N2Vxi = 263 + INTEGER(IntKi), PARAMETER :: M3N3Vxi = 264 + INTEGER(IntKi), PARAMETER :: M3N4Vxi = 265 + INTEGER(IntKi), PARAMETER :: M3N5Vxi = 266 + INTEGER(IntKi), PARAMETER :: M3N6Vxi = 267 + INTEGER(IntKi), PARAMETER :: M3N7Vxi = 268 + INTEGER(IntKi), PARAMETER :: M3N8Vxi = 269 + INTEGER(IntKi), PARAMETER :: M3N9Vxi = 270 + INTEGER(IntKi), PARAMETER :: M4N1Vxi = 271 + INTEGER(IntKi), PARAMETER :: M4N2Vxi = 272 + INTEGER(IntKi), PARAMETER :: M4N3Vxi = 273 + INTEGER(IntKi), PARAMETER :: M4N4Vxi = 274 + INTEGER(IntKi), PARAMETER :: M4N5Vxi = 275 + INTEGER(IntKi), PARAMETER :: M4N6Vxi = 276 + INTEGER(IntKi), PARAMETER :: M4N7Vxi = 277 + INTEGER(IntKi), PARAMETER :: M4N8Vxi = 278 + INTEGER(IntKi), PARAMETER :: M4N9Vxi = 279 + INTEGER(IntKi), PARAMETER :: M5N1Vxi = 280 + INTEGER(IntKi), PARAMETER :: M5N2Vxi = 281 + INTEGER(IntKi), PARAMETER :: M5N3Vxi = 282 + INTEGER(IntKi), PARAMETER :: M5N4Vxi = 283 + INTEGER(IntKi), PARAMETER :: M5N5Vxi = 284 + INTEGER(IntKi), PARAMETER :: M5N6Vxi = 285 + INTEGER(IntKi), PARAMETER :: M5N7Vxi = 286 + INTEGER(IntKi), PARAMETER :: M5N8Vxi = 287 + INTEGER(IntKi), PARAMETER :: M5N9Vxi = 288 + INTEGER(IntKi), PARAMETER :: M6N1Vxi = 289 + INTEGER(IntKi), PARAMETER :: M6N2Vxi = 290 + INTEGER(IntKi), PARAMETER :: M6N3Vxi = 291 + INTEGER(IntKi), PARAMETER :: M6N4Vxi = 292 + INTEGER(IntKi), PARAMETER :: M6N5Vxi = 293 + INTEGER(IntKi), PARAMETER :: M6N6Vxi = 294 + INTEGER(IntKi), PARAMETER :: M6N7Vxi = 295 + INTEGER(IntKi), PARAMETER :: M6N8Vxi = 296 + INTEGER(IntKi), PARAMETER :: M6N9Vxi = 297 + INTEGER(IntKi), PARAMETER :: M7N1Vxi = 298 + INTEGER(IntKi), PARAMETER :: M7N2Vxi = 299 + INTEGER(IntKi), PARAMETER :: M7N3Vxi = 300 + INTEGER(IntKi), PARAMETER :: M7N4Vxi = 301 + INTEGER(IntKi), PARAMETER :: M7N5Vxi = 302 + INTEGER(IntKi), PARAMETER :: M7N6Vxi = 303 + INTEGER(IntKi), PARAMETER :: M7N7Vxi = 304 + INTEGER(IntKi), PARAMETER :: M7N8Vxi = 305 + INTEGER(IntKi), PARAMETER :: M7N9Vxi = 306 + INTEGER(IntKi), PARAMETER :: M8N1Vxi = 307 + INTEGER(IntKi), PARAMETER :: M8N2Vxi = 308 + INTEGER(IntKi), PARAMETER :: M8N3Vxi = 309 + INTEGER(IntKi), PARAMETER :: M8N4Vxi = 310 + INTEGER(IntKi), PARAMETER :: M8N5Vxi = 311 + INTEGER(IntKi), PARAMETER :: M8N6Vxi = 312 + INTEGER(IntKi), PARAMETER :: M8N7Vxi = 313 + INTEGER(IntKi), PARAMETER :: M8N8Vxi = 314 + INTEGER(IntKi), PARAMETER :: M8N9Vxi = 315 + INTEGER(IntKi), PARAMETER :: M9N1Vxi = 316 + INTEGER(IntKi), PARAMETER :: M9N2Vxi = 317 + INTEGER(IntKi), PARAMETER :: M9N3Vxi = 318 + INTEGER(IntKi), PARAMETER :: M9N4Vxi = 319 + INTEGER(IntKi), PARAMETER :: M9N5Vxi = 320 + INTEGER(IntKi), PARAMETER :: M9N6Vxi = 321 + INTEGER(IntKi), PARAMETER :: M9N7Vxi = 322 + INTEGER(IntKi), PARAMETER :: M9N8Vxi = 323 + INTEGER(IntKi), PARAMETER :: M9N9Vxi = 324 + INTEGER(IntKi), PARAMETER :: M1N1Vyi = 325 + INTEGER(IntKi), PARAMETER :: M1N2Vyi = 326 + INTEGER(IntKi), PARAMETER :: M1N3Vyi = 327 + INTEGER(IntKi), PARAMETER :: M1N4Vyi = 328 + INTEGER(IntKi), PARAMETER :: M1N5Vyi = 329 + INTEGER(IntKi), PARAMETER :: M1N6Vyi = 330 + INTEGER(IntKi), PARAMETER :: M1N7Vyi = 331 + INTEGER(IntKi), PARAMETER :: M1N8Vyi = 332 + INTEGER(IntKi), PARAMETER :: M1N9Vyi = 333 + INTEGER(IntKi), PARAMETER :: M2N1Vyi = 334 + INTEGER(IntKi), PARAMETER :: M2N2Vyi = 335 + INTEGER(IntKi), PARAMETER :: M2N3Vyi = 336 + INTEGER(IntKi), PARAMETER :: M2N4Vyi = 337 + INTEGER(IntKi), PARAMETER :: M2N5Vyi = 338 + INTEGER(IntKi), PARAMETER :: M2N6Vyi = 339 + INTEGER(IntKi), PARAMETER :: M2N7Vyi = 340 + INTEGER(IntKi), PARAMETER :: M2N8Vyi = 341 + INTEGER(IntKi), PARAMETER :: M2N9Vyi = 342 + INTEGER(IntKi), PARAMETER :: M3N1Vyi = 343 + INTEGER(IntKi), PARAMETER :: M3N2Vyi = 344 + INTEGER(IntKi), PARAMETER :: M3N3Vyi = 345 + INTEGER(IntKi), PARAMETER :: M3N4Vyi = 346 + INTEGER(IntKi), PARAMETER :: M3N5Vyi = 347 + INTEGER(IntKi), PARAMETER :: M3N6Vyi = 348 + INTEGER(IntKi), PARAMETER :: M3N7Vyi = 349 + INTEGER(IntKi), PARAMETER :: M3N8Vyi = 350 + INTEGER(IntKi), PARAMETER :: M3N9Vyi = 351 + INTEGER(IntKi), PARAMETER :: M4N1Vyi = 352 + INTEGER(IntKi), PARAMETER :: M4N2Vyi = 353 + INTEGER(IntKi), PARAMETER :: M4N3Vyi = 354 + INTEGER(IntKi), PARAMETER :: M4N4Vyi = 355 + INTEGER(IntKi), PARAMETER :: M4N5Vyi = 356 + INTEGER(IntKi), PARAMETER :: M4N6Vyi = 357 + INTEGER(IntKi), PARAMETER :: M4N7Vyi = 358 + INTEGER(IntKi), PARAMETER :: M4N8Vyi = 359 + INTEGER(IntKi), PARAMETER :: M4N9Vyi = 360 + INTEGER(IntKi), PARAMETER :: M5N1Vyi = 361 + INTEGER(IntKi), PARAMETER :: M5N2Vyi = 362 + INTEGER(IntKi), PARAMETER :: M5N3Vyi = 363 + INTEGER(IntKi), PARAMETER :: M5N4Vyi = 364 + INTEGER(IntKi), PARAMETER :: M5N5Vyi = 365 + INTEGER(IntKi), PARAMETER :: M5N6Vyi = 366 + INTEGER(IntKi), PARAMETER :: M5N7Vyi = 367 + INTEGER(IntKi), PARAMETER :: M5N8Vyi = 368 + INTEGER(IntKi), PARAMETER :: M5N9Vyi = 369 + INTEGER(IntKi), PARAMETER :: M6N1Vyi = 370 + INTEGER(IntKi), PARAMETER :: M6N2Vyi = 371 + INTEGER(IntKi), PARAMETER :: M6N3Vyi = 372 + INTEGER(IntKi), PARAMETER :: M6N4Vyi = 373 + INTEGER(IntKi), PARAMETER :: M6N5Vyi = 374 + INTEGER(IntKi), PARAMETER :: M6N6Vyi = 375 + INTEGER(IntKi), PARAMETER :: M6N7Vyi = 376 + INTEGER(IntKi), PARAMETER :: M6N8Vyi = 377 + INTEGER(IntKi), PARAMETER :: M6N9Vyi = 378 + INTEGER(IntKi), PARAMETER :: M7N1Vyi = 379 + INTEGER(IntKi), PARAMETER :: M7N2Vyi = 380 + INTEGER(IntKi), PARAMETER :: M7N3Vyi = 381 + INTEGER(IntKi), PARAMETER :: M7N4Vyi = 382 + INTEGER(IntKi), PARAMETER :: M7N5Vyi = 383 + INTEGER(IntKi), PARAMETER :: M7N6Vyi = 384 + INTEGER(IntKi), PARAMETER :: M7N7Vyi = 385 + INTEGER(IntKi), PARAMETER :: M7N8Vyi = 386 + INTEGER(IntKi), PARAMETER :: M7N9Vyi = 387 + INTEGER(IntKi), PARAMETER :: M8N1Vyi = 388 + INTEGER(IntKi), PARAMETER :: M8N2Vyi = 389 + INTEGER(IntKi), PARAMETER :: M8N3Vyi = 390 + INTEGER(IntKi), PARAMETER :: M8N4Vyi = 391 + INTEGER(IntKi), PARAMETER :: M8N5Vyi = 392 + INTEGER(IntKi), PARAMETER :: M8N6Vyi = 393 + INTEGER(IntKi), PARAMETER :: M8N7Vyi = 394 + INTEGER(IntKi), PARAMETER :: M8N8Vyi = 395 + INTEGER(IntKi), PARAMETER :: M8N9Vyi = 396 + INTEGER(IntKi), PARAMETER :: M9N1Vyi = 397 + INTEGER(IntKi), PARAMETER :: M9N2Vyi = 398 + INTEGER(IntKi), PARAMETER :: M9N3Vyi = 399 + INTEGER(IntKi), PARAMETER :: M9N4Vyi = 400 + INTEGER(IntKi), PARAMETER :: M9N5Vyi = 401 + INTEGER(IntKi), PARAMETER :: M9N6Vyi = 402 + INTEGER(IntKi), PARAMETER :: M9N7Vyi = 403 + INTEGER(IntKi), PARAMETER :: M9N8Vyi = 404 + INTEGER(IntKi), PARAMETER :: M9N9Vyi = 405 + INTEGER(IntKi), PARAMETER :: M1N1Vzi = 406 + INTEGER(IntKi), PARAMETER :: M1N2Vzi = 407 + INTEGER(IntKi), PARAMETER :: M1N3Vzi = 408 + INTEGER(IntKi), PARAMETER :: M1N4Vzi = 409 + INTEGER(IntKi), PARAMETER :: M1N5Vzi = 410 + INTEGER(IntKi), PARAMETER :: M1N6Vzi = 411 + INTEGER(IntKi), PARAMETER :: M1N7Vzi = 412 + INTEGER(IntKi), PARAMETER :: M1N8Vzi = 413 + INTEGER(IntKi), PARAMETER :: M1N9Vzi = 414 + INTEGER(IntKi), PARAMETER :: M2N1Vzi = 415 + INTEGER(IntKi), PARAMETER :: M2N2Vzi = 416 + INTEGER(IntKi), PARAMETER :: M2N3Vzi = 417 + INTEGER(IntKi), PARAMETER :: M2N4Vzi = 418 + INTEGER(IntKi), PARAMETER :: M2N5Vzi = 419 + INTEGER(IntKi), PARAMETER :: M2N6Vzi = 420 + INTEGER(IntKi), PARAMETER :: M2N7Vzi = 421 + INTEGER(IntKi), PARAMETER :: M2N8Vzi = 422 + INTEGER(IntKi), PARAMETER :: M2N9Vzi = 423 + INTEGER(IntKi), PARAMETER :: M3N1Vzi = 424 + INTEGER(IntKi), PARAMETER :: M3N2Vzi = 425 + INTEGER(IntKi), PARAMETER :: M3N3Vzi = 426 + INTEGER(IntKi), PARAMETER :: M3N4Vzi = 427 + INTEGER(IntKi), PARAMETER :: M3N5Vzi = 428 + INTEGER(IntKi), PARAMETER :: M3N6Vzi = 429 + INTEGER(IntKi), PARAMETER :: M3N7Vzi = 430 + INTEGER(IntKi), PARAMETER :: M3N8Vzi = 431 + INTEGER(IntKi), PARAMETER :: M3N9Vzi = 432 + INTEGER(IntKi), PARAMETER :: M4N1Vzi = 433 + INTEGER(IntKi), PARAMETER :: M4N2Vzi = 434 + INTEGER(IntKi), PARAMETER :: M4N3Vzi = 435 + INTEGER(IntKi), PARAMETER :: M4N4Vzi = 436 + INTEGER(IntKi), PARAMETER :: M4N5Vzi = 437 + INTEGER(IntKi), PARAMETER :: M4N6Vzi = 438 + INTEGER(IntKi), PARAMETER :: M4N7Vzi = 439 + INTEGER(IntKi), PARAMETER :: M4N8Vzi = 440 + INTEGER(IntKi), PARAMETER :: M4N9Vzi = 441 + INTEGER(IntKi), PARAMETER :: M5N1Vzi = 442 + INTEGER(IntKi), PARAMETER :: M5N2Vzi = 443 + INTEGER(IntKi), PARAMETER :: M5N3Vzi = 444 + INTEGER(IntKi), PARAMETER :: M5N4Vzi = 445 + INTEGER(IntKi), PARAMETER :: M5N5Vzi = 446 + INTEGER(IntKi), PARAMETER :: M5N6Vzi = 447 + INTEGER(IntKi), PARAMETER :: M5N7Vzi = 448 + INTEGER(IntKi), PARAMETER :: M5N8Vzi = 449 + INTEGER(IntKi), PARAMETER :: M5N9Vzi = 450 + INTEGER(IntKi), PARAMETER :: M6N1Vzi = 451 + INTEGER(IntKi), PARAMETER :: M6N2Vzi = 452 + INTEGER(IntKi), PARAMETER :: M6N3Vzi = 453 + INTEGER(IntKi), PARAMETER :: M6N4Vzi = 454 + INTEGER(IntKi), PARAMETER :: M6N5Vzi = 455 + INTEGER(IntKi), PARAMETER :: M6N6Vzi = 456 + INTEGER(IntKi), PARAMETER :: M6N7Vzi = 457 + INTEGER(IntKi), PARAMETER :: M6N8Vzi = 458 + INTEGER(IntKi), PARAMETER :: M6N9Vzi = 459 + INTEGER(IntKi), PARAMETER :: M7N1Vzi = 460 + INTEGER(IntKi), PARAMETER :: M7N2Vzi = 461 + INTEGER(IntKi), PARAMETER :: M7N3Vzi = 462 + INTEGER(IntKi), PARAMETER :: M7N4Vzi = 463 + INTEGER(IntKi), PARAMETER :: M7N5Vzi = 464 + INTEGER(IntKi), PARAMETER :: M7N6Vzi = 465 + INTEGER(IntKi), PARAMETER :: M7N7Vzi = 466 + INTEGER(IntKi), PARAMETER :: M7N8Vzi = 467 + INTEGER(IntKi), PARAMETER :: M7N9Vzi = 468 + INTEGER(IntKi), PARAMETER :: M8N1Vzi = 469 + INTEGER(IntKi), PARAMETER :: M8N2Vzi = 470 + INTEGER(IntKi), PARAMETER :: M8N3Vzi = 471 + INTEGER(IntKi), PARAMETER :: M8N4Vzi = 472 + INTEGER(IntKi), PARAMETER :: M8N5Vzi = 473 + INTEGER(IntKi), PARAMETER :: M8N6Vzi = 474 + INTEGER(IntKi), PARAMETER :: M8N7Vzi = 475 + INTEGER(IntKi), PARAMETER :: M8N8Vzi = 476 + INTEGER(IntKi), PARAMETER :: M8N9Vzi = 477 + INTEGER(IntKi), PARAMETER :: M9N1Vzi = 478 + INTEGER(IntKi), PARAMETER :: M9N2Vzi = 479 + INTEGER(IntKi), PARAMETER :: M9N3Vzi = 480 + INTEGER(IntKi), PARAMETER :: M9N4Vzi = 481 + INTEGER(IntKi), PARAMETER :: M9N5Vzi = 482 + INTEGER(IntKi), PARAMETER :: M9N6Vzi = 483 + INTEGER(IntKi), PARAMETER :: M9N7Vzi = 484 + INTEGER(IntKi), PARAMETER :: M9N8Vzi = 485 + INTEGER(IntKi), PARAMETER :: M9N9Vzi = 486 + INTEGER(IntKi), PARAMETER :: M1N1DynP = 487 + INTEGER(IntKi), PARAMETER :: M1N2DynP = 488 + INTEGER(IntKi), PARAMETER :: M1N3DynP = 489 + INTEGER(IntKi), PARAMETER :: M1N4DynP = 490 + INTEGER(IntKi), PARAMETER :: M1N5DynP = 491 + INTEGER(IntKi), PARAMETER :: M1N6DynP = 492 + INTEGER(IntKi), PARAMETER :: M1N7DynP = 493 + INTEGER(IntKi), PARAMETER :: M1N8DynP = 494 + INTEGER(IntKi), PARAMETER :: M1N9DynP = 495 + INTEGER(IntKi), PARAMETER :: M2N1DynP = 496 + INTEGER(IntKi), PARAMETER :: M2N2DynP = 497 + INTEGER(IntKi), PARAMETER :: M2N3DynP = 498 + INTEGER(IntKi), PARAMETER :: M2N4DynP = 499 + INTEGER(IntKi), PARAMETER :: M2N5DynP = 500 + INTEGER(IntKi), PARAMETER :: M2N6DynP = 501 + INTEGER(IntKi), PARAMETER :: M2N7DynP = 502 + INTEGER(IntKi), PARAMETER :: M2N8DynP = 503 + INTEGER(IntKi), PARAMETER :: M2N9DynP = 504 + INTEGER(IntKi), PARAMETER :: M3N1DynP = 505 + INTEGER(IntKi), PARAMETER :: M3N2DynP = 506 + INTEGER(IntKi), PARAMETER :: M3N3DynP = 507 + INTEGER(IntKi), PARAMETER :: M3N4DynP = 508 + INTEGER(IntKi), PARAMETER :: M3N5DynP = 509 + INTEGER(IntKi), PARAMETER :: M3N6DynP = 510 + INTEGER(IntKi), PARAMETER :: M3N7DynP = 511 + INTEGER(IntKi), PARAMETER :: M3N8DynP = 512 + INTEGER(IntKi), PARAMETER :: M3N9DynP = 513 + INTEGER(IntKi), PARAMETER :: M4N1DynP = 514 + INTEGER(IntKi), PARAMETER :: M4N2DynP = 515 + INTEGER(IntKi), PARAMETER :: M4N3DynP = 516 + INTEGER(IntKi), PARAMETER :: M4N4DynP = 517 + INTEGER(IntKi), PARAMETER :: M4N5DynP = 518 + INTEGER(IntKi), PARAMETER :: M4N6DynP = 519 + INTEGER(IntKi), PARAMETER :: M4N7DynP = 520 + INTEGER(IntKi), PARAMETER :: M4N8DynP = 521 + INTEGER(IntKi), PARAMETER :: M4N9DynP = 522 + INTEGER(IntKi), PARAMETER :: M5N1DynP = 523 + INTEGER(IntKi), PARAMETER :: M5N2DynP = 524 + INTEGER(IntKi), PARAMETER :: M5N3DynP = 525 + INTEGER(IntKi), PARAMETER :: M5N4DynP = 526 + INTEGER(IntKi), PARAMETER :: M5N5DynP = 527 + INTEGER(IntKi), PARAMETER :: M5N6DynP = 528 + INTEGER(IntKi), PARAMETER :: M5N7DynP = 529 + INTEGER(IntKi), PARAMETER :: M5N8DynP = 530 + INTEGER(IntKi), PARAMETER :: M5N9DynP = 531 + INTEGER(IntKi), PARAMETER :: M6N1DynP = 532 + INTEGER(IntKi), PARAMETER :: M6N2DynP = 533 + INTEGER(IntKi), PARAMETER :: M6N3DynP = 534 + INTEGER(IntKi), PARAMETER :: M6N4DynP = 535 + INTEGER(IntKi), PARAMETER :: M6N5DynP = 536 + INTEGER(IntKi), PARAMETER :: M6N6DynP = 537 + INTEGER(IntKi), PARAMETER :: M6N7DynP = 538 + INTEGER(IntKi), PARAMETER :: M6N8DynP = 539 + INTEGER(IntKi), PARAMETER :: M6N9DynP = 540 + INTEGER(IntKi), PARAMETER :: M7N1DynP = 541 + INTEGER(IntKi), PARAMETER :: M7N2DynP = 542 + INTEGER(IntKi), PARAMETER :: M7N3DynP = 543 + INTEGER(IntKi), PARAMETER :: M7N4DynP = 544 + INTEGER(IntKi), PARAMETER :: M7N5DynP = 545 + INTEGER(IntKi), PARAMETER :: M7N6DynP = 546 + INTEGER(IntKi), PARAMETER :: M7N7DynP = 547 + INTEGER(IntKi), PARAMETER :: M7N8DynP = 548 + INTEGER(IntKi), PARAMETER :: M7N9DynP = 549 + INTEGER(IntKi), PARAMETER :: M8N1DynP = 550 + INTEGER(IntKi), PARAMETER :: M8N2DynP = 551 + INTEGER(IntKi), PARAMETER :: M8N3DynP = 552 + INTEGER(IntKi), PARAMETER :: M8N4DynP = 553 + INTEGER(IntKi), PARAMETER :: M8N5DynP = 554 + INTEGER(IntKi), PARAMETER :: M8N6DynP = 555 + INTEGER(IntKi), PARAMETER :: M8N7DynP = 556 + INTEGER(IntKi), PARAMETER :: M8N8DynP = 557 + INTEGER(IntKi), PARAMETER :: M8N9DynP = 558 + INTEGER(IntKi), PARAMETER :: M9N1DynP = 559 + INTEGER(IntKi), PARAMETER :: M9N2DynP = 560 + INTEGER(IntKi), PARAMETER :: M9N3DynP = 561 + INTEGER(IntKi), PARAMETER :: M9N4DynP = 562 + INTEGER(IntKi), PARAMETER :: M9N5DynP = 563 + INTEGER(IntKi), PARAMETER :: M9N6DynP = 564 + INTEGER(IntKi), PARAMETER :: M9N7DynP = 565 + INTEGER(IntKi), PARAMETER :: M9N8DynP = 566 + INTEGER(IntKi), PARAMETER :: M9N9DynP = 567 + INTEGER(IntKi), PARAMETER :: M1N1STVxi = 568 + INTEGER(IntKi), PARAMETER :: M1N2STVxi = 569 + INTEGER(IntKi), PARAMETER :: M1N3STVxi = 570 + INTEGER(IntKi), PARAMETER :: M1N4STVxi = 571 + INTEGER(IntKi), PARAMETER :: M1N5STVxi = 572 + INTEGER(IntKi), PARAMETER :: M1N6STVxi = 573 + INTEGER(IntKi), PARAMETER :: M1N7STVxi = 574 + INTEGER(IntKi), PARAMETER :: M1N8STVxi = 575 + INTEGER(IntKi), PARAMETER :: M1N9STVxi = 576 + INTEGER(IntKi), PARAMETER :: M2N1STVxi = 577 + INTEGER(IntKi), PARAMETER :: M2N2STVxi = 578 + INTEGER(IntKi), PARAMETER :: M2N3STVxi = 579 + INTEGER(IntKi), PARAMETER :: M2N4STVxi = 580 + INTEGER(IntKi), PARAMETER :: M2N5STVxi = 581 + INTEGER(IntKi), PARAMETER :: M2N6STVxi = 582 + INTEGER(IntKi), PARAMETER :: M2N7STVxi = 583 + INTEGER(IntKi), PARAMETER :: M2N8STVxi = 584 + INTEGER(IntKi), PARAMETER :: M2N9STVxi = 585 + INTEGER(IntKi), PARAMETER :: M3N1STVxi = 586 + INTEGER(IntKi), PARAMETER :: M3N2STVxi = 587 + INTEGER(IntKi), PARAMETER :: M3N3STVxi = 588 + INTEGER(IntKi), PARAMETER :: M3N4STVxi = 589 + INTEGER(IntKi), PARAMETER :: M3N5STVxi = 590 + INTEGER(IntKi), PARAMETER :: M3N6STVxi = 591 + INTEGER(IntKi), PARAMETER :: M3N7STVxi = 592 + INTEGER(IntKi), PARAMETER :: M3N8STVxi = 593 + INTEGER(IntKi), PARAMETER :: M3N9STVxi = 594 + INTEGER(IntKi), PARAMETER :: M4N1STVxi = 595 + INTEGER(IntKi), PARAMETER :: M4N2STVxi = 596 + INTEGER(IntKi), PARAMETER :: M4N3STVxi = 597 + INTEGER(IntKi), PARAMETER :: M4N4STVxi = 598 + INTEGER(IntKi), PARAMETER :: M4N5STVxi = 599 + INTEGER(IntKi), PARAMETER :: M4N6STVxi = 600 + INTEGER(IntKi), PARAMETER :: M4N7STVxi = 601 + INTEGER(IntKi), PARAMETER :: M4N8STVxi = 602 + INTEGER(IntKi), PARAMETER :: M4N9STVxi = 603 + INTEGER(IntKi), PARAMETER :: M5N1STVxi = 604 + INTEGER(IntKi), PARAMETER :: M5N2STVxi = 605 + INTEGER(IntKi), PARAMETER :: M5N3STVxi = 606 + INTEGER(IntKi), PARAMETER :: M5N4STVxi = 607 + INTEGER(IntKi), PARAMETER :: M5N5STVxi = 608 + INTEGER(IntKi), PARAMETER :: M5N6STVxi = 609 + INTEGER(IntKi), PARAMETER :: M5N7STVxi = 610 + INTEGER(IntKi), PARAMETER :: M5N8STVxi = 611 + INTEGER(IntKi), PARAMETER :: M5N9STVxi = 612 + INTEGER(IntKi), PARAMETER :: M6N1STVxi = 613 + INTEGER(IntKi), PARAMETER :: M6N2STVxi = 614 + INTEGER(IntKi), PARAMETER :: M6N3STVxi = 615 + INTEGER(IntKi), PARAMETER :: M6N4STVxi = 616 + INTEGER(IntKi), PARAMETER :: M6N5STVxi = 617 + INTEGER(IntKi), PARAMETER :: M6N6STVxi = 618 + INTEGER(IntKi), PARAMETER :: M6N7STVxi = 619 + INTEGER(IntKi), PARAMETER :: M6N8STVxi = 620 + INTEGER(IntKi), PARAMETER :: M6N9STVxi = 621 + INTEGER(IntKi), PARAMETER :: M7N1STVxi = 622 + INTEGER(IntKi), PARAMETER :: M7N2STVxi = 623 + INTEGER(IntKi), PARAMETER :: M7N3STVxi = 624 + INTEGER(IntKi), PARAMETER :: M7N4STVxi = 625 + INTEGER(IntKi), PARAMETER :: M7N5STVxi = 626 + INTEGER(IntKi), PARAMETER :: M7N6STVxi = 627 + INTEGER(IntKi), PARAMETER :: M7N7STVxi = 628 + INTEGER(IntKi), PARAMETER :: M7N8STVxi = 629 + INTEGER(IntKi), PARAMETER :: M7N9STVxi = 630 + INTEGER(IntKi), PARAMETER :: M8N1STVxi = 631 + INTEGER(IntKi), PARAMETER :: M8N2STVxi = 632 + INTEGER(IntKi), PARAMETER :: M8N3STVxi = 633 + INTEGER(IntKi), PARAMETER :: M8N4STVxi = 634 + INTEGER(IntKi), PARAMETER :: M8N5STVxi = 635 + INTEGER(IntKi), PARAMETER :: M8N6STVxi = 636 + INTEGER(IntKi), PARAMETER :: M8N7STVxi = 637 + INTEGER(IntKi), PARAMETER :: M8N8STVxi = 638 + INTEGER(IntKi), PARAMETER :: M8N9STVxi = 639 + INTEGER(IntKi), PARAMETER :: M9N1STVxi = 640 + INTEGER(IntKi), PARAMETER :: M9N2STVxi = 641 + INTEGER(IntKi), PARAMETER :: M9N3STVxi = 642 + INTEGER(IntKi), PARAMETER :: M9N4STVxi = 643 + INTEGER(IntKi), PARAMETER :: M9N5STVxi = 644 + INTEGER(IntKi), PARAMETER :: M9N6STVxi = 645 + INTEGER(IntKi), PARAMETER :: M9N7STVxi = 646 + INTEGER(IntKi), PARAMETER :: M9N8STVxi = 647 + INTEGER(IntKi), PARAMETER :: M9N9STVxi = 648 + INTEGER(IntKi), PARAMETER :: M1N1STVyi = 649 + INTEGER(IntKi), PARAMETER :: M1N2STVyi = 650 + INTEGER(IntKi), PARAMETER :: M1N3STVyi = 651 + INTEGER(IntKi), PARAMETER :: M1N4STVyi = 652 + INTEGER(IntKi), PARAMETER :: M1N5STVyi = 653 + INTEGER(IntKi), PARAMETER :: M1N6STVyi = 654 + INTEGER(IntKi), PARAMETER :: M1N7STVyi = 655 + INTEGER(IntKi), PARAMETER :: M1N8STVyi = 656 + INTEGER(IntKi), PARAMETER :: M1N9STVyi = 657 + INTEGER(IntKi), PARAMETER :: M2N1STVyi = 658 + INTEGER(IntKi), PARAMETER :: M2N2STVyi = 659 + INTEGER(IntKi), PARAMETER :: M2N3STVyi = 660 + INTEGER(IntKi), PARAMETER :: M2N4STVyi = 661 + INTEGER(IntKi), PARAMETER :: M2N5STVyi = 662 + INTEGER(IntKi), PARAMETER :: M2N6STVyi = 663 + INTEGER(IntKi), PARAMETER :: M2N7STVyi = 664 + INTEGER(IntKi), PARAMETER :: M2N8STVyi = 665 + INTEGER(IntKi), PARAMETER :: M2N9STVyi = 666 + INTEGER(IntKi), PARAMETER :: M3N1STVyi = 667 + INTEGER(IntKi), PARAMETER :: M3N2STVyi = 668 + INTEGER(IntKi), PARAMETER :: M3N3STVyi = 669 + INTEGER(IntKi), PARAMETER :: M3N4STVyi = 670 + INTEGER(IntKi), PARAMETER :: M3N5STVyi = 671 + INTEGER(IntKi), PARAMETER :: M3N6STVyi = 672 + INTEGER(IntKi), PARAMETER :: M3N7STVyi = 673 + INTEGER(IntKi), PARAMETER :: M3N8STVyi = 674 + INTEGER(IntKi), PARAMETER :: M3N9STVyi = 675 + INTEGER(IntKi), PARAMETER :: M4N1STVyi = 676 + INTEGER(IntKi), PARAMETER :: M4N2STVyi = 677 + INTEGER(IntKi), PARAMETER :: M4N3STVyi = 678 + INTEGER(IntKi), PARAMETER :: M4N4STVyi = 679 + INTEGER(IntKi), PARAMETER :: M4N5STVyi = 680 + INTEGER(IntKi), PARAMETER :: M4N6STVyi = 681 + INTEGER(IntKi), PARAMETER :: M4N7STVyi = 682 + INTEGER(IntKi), PARAMETER :: M4N8STVyi = 683 + INTEGER(IntKi), PARAMETER :: M4N9STVyi = 684 + INTEGER(IntKi), PARAMETER :: M5N1STVyi = 685 + INTEGER(IntKi), PARAMETER :: M5N2STVyi = 686 + INTEGER(IntKi), PARAMETER :: M5N3STVyi = 687 + INTEGER(IntKi), PARAMETER :: M5N4STVyi = 688 + INTEGER(IntKi), PARAMETER :: M5N5STVyi = 689 + INTEGER(IntKi), PARAMETER :: M5N6STVyi = 690 + INTEGER(IntKi), PARAMETER :: M5N7STVyi = 691 + INTEGER(IntKi), PARAMETER :: M5N8STVyi = 692 + INTEGER(IntKi), PARAMETER :: M5N9STVyi = 693 + INTEGER(IntKi), PARAMETER :: M6N1STVyi = 694 + INTEGER(IntKi), PARAMETER :: M6N2STVyi = 695 + INTEGER(IntKi), PARAMETER :: M6N3STVyi = 696 + INTEGER(IntKi), PARAMETER :: M6N4STVyi = 697 + INTEGER(IntKi), PARAMETER :: M6N5STVyi = 698 + INTEGER(IntKi), PARAMETER :: M6N6STVyi = 699 + INTEGER(IntKi), PARAMETER :: M6N7STVyi = 700 + INTEGER(IntKi), PARAMETER :: M6N8STVyi = 701 + INTEGER(IntKi), PARAMETER :: M6N9STVyi = 702 + INTEGER(IntKi), PARAMETER :: M7N1STVyi = 703 + INTEGER(IntKi), PARAMETER :: M7N2STVyi = 704 + INTEGER(IntKi), PARAMETER :: M7N3STVyi = 705 + INTEGER(IntKi), PARAMETER :: M7N4STVyi = 706 + INTEGER(IntKi), PARAMETER :: M7N5STVyi = 707 + INTEGER(IntKi), PARAMETER :: M7N6STVyi = 708 + INTEGER(IntKi), PARAMETER :: M7N7STVyi = 709 + INTEGER(IntKi), PARAMETER :: M7N8STVyi = 710 + INTEGER(IntKi), PARAMETER :: M7N9STVyi = 711 + INTEGER(IntKi), PARAMETER :: M8N1STVyi = 712 + INTEGER(IntKi), PARAMETER :: M8N2STVyi = 713 + INTEGER(IntKi), PARAMETER :: M8N3STVyi = 714 + INTEGER(IntKi), PARAMETER :: M8N4STVyi = 715 + INTEGER(IntKi), PARAMETER :: M8N5STVyi = 716 + INTEGER(IntKi), PARAMETER :: M8N6STVyi = 717 + INTEGER(IntKi), PARAMETER :: M8N7STVyi = 718 + INTEGER(IntKi), PARAMETER :: M8N8STVyi = 719 + INTEGER(IntKi), PARAMETER :: M8N9STVyi = 720 + INTEGER(IntKi), PARAMETER :: M9N1STVyi = 721 + INTEGER(IntKi), PARAMETER :: M9N2STVyi = 722 + INTEGER(IntKi), PARAMETER :: M9N3STVyi = 723 + INTEGER(IntKi), PARAMETER :: M9N4STVyi = 724 + INTEGER(IntKi), PARAMETER :: M9N5STVyi = 725 + INTEGER(IntKi), PARAMETER :: M9N6STVyi = 726 + INTEGER(IntKi), PARAMETER :: M9N7STVyi = 727 + INTEGER(IntKi), PARAMETER :: M9N8STVyi = 728 + INTEGER(IntKi), PARAMETER :: M9N9STVyi = 729 + INTEGER(IntKi), PARAMETER :: M1N1STVzi = 730 + INTEGER(IntKi), PARAMETER :: M1N2STVzi = 731 + INTEGER(IntKi), PARAMETER :: M1N3STVzi = 732 + INTEGER(IntKi), PARAMETER :: M1N4STVzi = 733 + INTEGER(IntKi), PARAMETER :: M1N5STVzi = 734 + INTEGER(IntKi), PARAMETER :: M1N6STVzi = 735 + INTEGER(IntKi), PARAMETER :: M1N7STVzi = 736 + INTEGER(IntKi), PARAMETER :: M1N8STVzi = 737 + INTEGER(IntKi), PARAMETER :: M1N9STVzi = 738 + INTEGER(IntKi), PARAMETER :: M2N1STVzi = 739 + INTEGER(IntKi), PARAMETER :: M2N2STVzi = 740 + INTEGER(IntKi), PARAMETER :: M2N3STVzi = 741 + INTEGER(IntKi), PARAMETER :: M2N4STVzi = 742 + INTEGER(IntKi), PARAMETER :: M2N5STVzi = 743 + INTEGER(IntKi), PARAMETER :: M2N6STVzi = 744 + INTEGER(IntKi), PARAMETER :: M2N7STVzi = 745 + INTEGER(IntKi), PARAMETER :: M2N8STVzi = 746 + INTEGER(IntKi), PARAMETER :: M2N9STVzi = 747 + INTEGER(IntKi), PARAMETER :: M3N1STVzi = 748 + INTEGER(IntKi), PARAMETER :: M3N2STVzi = 749 + INTEGER(IntKi), PARAMETER :: M3N3STVzi = 750 + INTEGER(IntKi), PARAMETER :: M3N4STVzi = 751 + INTEGER(IntKi), PARAMETER :: M3N5STVzi = 752 + INTEGER(IntKi), PARAMETER :: M3N6STVzi = 753 + INTEGER(IntKi), PARAMETER :: M3N7STVzi = 754 + INTEGER(IntKi), PARAMETER :: M3N8STVzi = 755 + INTEGER(IntKi), PARAMETER :: M3N9STVzi = 756 + INTEGER(IntKi), PARAMETER :: M4N1STVzi = 757 + INTEGER(IntKi), PARAMETER :: M4N2STVzi = 758 + INTEGER(IntKi), PARAMETER :: M4N3STVzi = 759 + INTEGER(IntKi), PARAMETER :: M4N4STVzi = 760 + INTEGER(IntKi), PARAMETER :: M4N5STVzi = 761 + INTEGER(IntKi), PARAMETER :: M4N6STVzi = 762 + INTEGER(IntKi), PARAMETER :: M4N7STVzi = 763 + INTEGER(IntKi), PARAMETER :: M4N8STVzi = 764 + INTEGER(IntKi), PARAMETER :: M4N9STVzi = 765 + INTEGER(IntKi), PARAMETER :: M5N1STVzi = 766 + INTEGER(IntKi), PARAMETER :: M5N2STVzi = 767 + INTEGER(IntKi), PARAMETER :: M5N3STVzi = 768 + INTEGER(IntKi), PARAMETER :: M5N4STVzi = 769 + INTEGER(IntKi), PARAMETER :: M5N5STVzi = 770 + INTEGER(IntKi), PARAMETER :: M5N6STVzi = 771 + INTEGER(IntKi), PARAMETER :: M5N7STVzi = 772 + INTEGER(IntKi), PARAMETER :: M5N8STVzi = 773 + INTEGER(IntKi), PARAMETER :: M5N9STVzi = 774 + INTEGER(IntKi), PARAMETER :: M6N1STVzi = 775 + INTEGER(IntKi), PARAMETER :: M6N2STVzi = 776 + INTEGER(IntKi), PARAMETER :: M6N3STVzi = 777 + INTEGER(IntKi), PARAMETER :: M6N4STVzi = 778 + INTEGER(IntKi), PARAMETER :: M6N5STVzi = 779 + INTEGER(IntKi), PARAMETER :: M6N6STVzi = 780 + INTEGER(IntKi), PARAMETER :: M6N7STVzi = 781 + INTEGER(IntKi), PARAMETER :: M6N8STVzi = 782 + INTEGER(IntKi), PARAMETER :: M6N9STVzi = 783 + INTEGER(IntKi), PARAMETER :: M7N1STVzi = 784 + INTEGER(IntKi), PARAMETER :: M7N2STVzi = 785 + INTEGER(IntKi), PARAMETER :: M7N3STVzi = 786 + INTEGER(IntKi), PARAMETER :: M7N4STVzi = 787 + INTEGER(IntKi), PARAMETER :: M7N5STVzi = 788 + INTEGER(IntKi), PARAMETER :: M7N6STVzi = 789 + INTEGER(IntKi), PARAMETER :: M7N7STVzi = 790 + INTEGER(IntKi), PARAMETER :: M7N8STVzi = 791 + INTEGER(IntKi), PARAMETER :: M7N9STVzi = 792 + INTEGER(IntKi), PARAMETER :: M8N1STVzi = 793 + INTEGER(IntKi), PARAMETER :: M8N2STVzi = 794 + INTEGER(IntKi), PARAMETER :: M8N3STVzi = 795 + INTEGER(IntKi), PARAMETER :: M8N4STVzi = 796 + INTEGER(IntKi), PARAMETER :: M8N5STVzi = 797 + INTEGER(IntKi), PARAMETER :: M8N6STVzi = 798 + INTEGER(IntKi), PARAMETER :: M8N7STVzi = 799 + INTEGER(IntKi), PARAMETER :: M8N8STVzi = 800 + INTEGER(IntKi), PARAMETER :: M8N9STVzi = 801 + INTEGER(IntKi), PARAMETER :: M9N1STVzi = 802 + INTEGER(IntKi), PARAMETER :: M9N2STVzi = 803 + INTEGER(IntKi), PARAMETER :: M9N3STVzi = 804 + INTEGER(IntKi), PARAMETER :: M9N4STVzi = 805 + INTEGER(IntKi), PARAMETER :: M9N5STVzi = 806 + INTEGER(IntKi), PARAMETER :: M9N6STVzi = 807 + INTEGER(IntKi), PARAMETER :: M9N7STVzi = 808 + INTEGER(IntKi), PARAMETER :: M9N8STVzi = 809 + INTEGER(IntKi), PARAMETER :: M9N9STVzi = 810 + INTEGER(IntKi), PARAMETER :: M1N1STAxi = 811 + INTEGER(IntKi), PARAMETER :: M1N2STAxi = 812 + INTEGER(IntKi), PARAMETER :: M1N3STAxi = 813 + INTEGER(IntKi), PARAMETER :: M1N4STAxi = 814 + INTEGER(IntKi), PARAMETER :: M1N5STAxi = 815 + INTEGER(IntKi), PARAMETER :: M1N6STAxi = 816 + INTEGER(IntKi), PARAMETER :: M1N7STAxi = 817 + INTEGER(IntKi), PARAMETER :: M1N8STAxi = 818 + INTEGER(IntKi), PARAMETER :: M1N9STAxi = 819 + INTEGER(IntKi), PARAMETER :: M2N1STAxi = 820 + INTEGER(IntKi), PARAMETER :: M2N2STAxi = 821 + INTEGER(IntKi), PARAMETER :: M2N3STAxi = 822 + INTEGER(IntKi), PARAMETER :: M2N4STAxi = 823 + INTEGER(IntKi), PARAMETER :: M2N5STAxi = 824 + INTEGER(IntKi), PARAMETER :: M2N6STAxi = 825 + INTEGER(IntKi), PARAMETER :: M2N7STAxi = 826 + INTEGER(IntKi), PARAMETER :: M2N8STAxi = 827 + INTEGER(IntKi), PARAMETER :: M2N9STAxi = 828 + INTEGER(IntKi), PARAMETER :: M3N1STAxi = 829 + INTEGER(IntKi), PARAMETER :: M3N2STAxi = 830 + INTEGER(IntKi), PARAMETER :: M3N3STAxi = 831 + INTEGER(IntKi), PARAMETER :: M3N4STAxi = 832 + INTEGER(IntKi), PARAMETER :: M3N5STAxi = 833 + INTEGER(IntKi), PARAMETER :: M3N6STAxi = 834 + INTEGER(IntKi), PARAMETER :: M3N7STAxi = 835 + INTEGER(IntKi), PARAMETER :: M3N8STAxi = 836 + INTEGER(IntKi), PARAMETER :: M3N9STAxi = 837 + INTEGER(IntKi), PARAMETER :: M4N1STAxi = 838 + INTEGER(IntKi), PARAMETER :: M4N2STAxi = 839 + INTEGER(IntKi), PARAMETER :: M4N3STAxi = 840 + INTEGER(IntKi), PARAMETER :: M4N4STAxi = 841 + INTEGER(IntKi), PARAMETER :: M4N5STAxi = 842 + INTEGER(IntKi), PARAMETER :: M4N6STAxi = 843 + INTEGER(IntKi), PARAMETER :: M4N7STAxi = 844 + INTEGER(IntKi), PARAMETER :: M4N8STAxi = 845 + INTEGER(IntKi), PARAMETER :: M4N9STAxi = 846 + INTEGER(IntKi), PARAMETER :: M5N1STAxi = 847 + INTEGER(IntKi), PARAMETER :: M5N2STAxi = 848 + INTEGER(IntKi), PARAMETER :: M5N3STAxi = 849 + INTEGER(IntKi), PARAMETER :: M5N4STAxi = 850 + INTEGER(IntKi), PARAMETER :: M5N5STAxi = 851 + INTEGER(IntKi), PARAMETER :: M5N6STAxi = 852 + INTEGER(IntKi), PARAMETER :: M5N7STAxi = 853 + INTEGER(IntKi), PARAMETER :: M5N8STAxi = 854 + INTEGER(IntKi), PARAMETER :: M5N9STAxi = 855 + INTEGER(IntKi), PARAMETER :: M6N1STAxi = 856 + INTEGER(IntKi), PARAMETER :: M6N2STAxi = 857 + INTEGER(IntKi), PARAMETER :: M6N3STAxi = 858 + INTEGER(IntKi), PARAMETER :: M6N4STAxi = 859 + INTEGER(IntKi), PARAMETER :: M6N5STAxi = 860 + INTEGER(IntKi), PARAMETER :: M6N6STAxi = 861 + INTEGER(IntKi), PARAMETER :: M6N7STAxi = 862 + INTEGER(IntKi), PARAMETER :: M6N8STAxi = 863 + INTEGER(IntKi), PARAMETER :: M6N9STAxi = 864 + INTEGER(IntKi), PARAMETER :: M7N1STAxi = 865 + INTEGER(IntKi), PARAMETER :: M7N2STAxi = 866 + INTEGER(IntKi), PARAMETER :: M7N3STAxi = 867 + INTEGER(IntKi), PARAMETER :: M7N4STAxi = 868 + INTEGER(IntKi), PARAMETER :: M7N5STAxi = 869 + INTEGER(IntKi), PARAMETER :: M7N6STAxi = 870 + INTEGER(IntKi), PARAMETER :: M7N7STAxi = 871 + INTEGER(IntKi), PARAMETER :: M7N8STAxi = 872 + INTEGER(IntKi), PARAMETER :: M7N9STAxi = 873 + INTEGER(IntKi), PARAMETER :: M8N1STAxi = 874 + INTEGER(IntKi), PARAMETER :: M8N2STAxi = 875 + INTEGER(IntKi), PARAMETER :: M8N3STAxi = 876 + INTEGER(IntKi), PARAMETER :: M8N4STAxi = 877 + INTEGER(IntKi), PARAMETER :: M8N5STAxi = 878 + INTEGER(IntKi), PARAMETER :: M8N6STAxi = 879 + INTEGER(IntKi), PARAMETER :: M8N7STAxi = 880 + INTEGER(IntKi), PARAMETER :: M8N8STAxi = 881 + INTEGER(IntKi), PARAMETER :: M8N9STAxi = 882 + INTEGER(IntKi), PARAMETER :: M9N1STAxi = 883 + INTEGER(IntKi), PARAMETER :: M9N2STAxi = 884 + INTEGER(IntKi), PARAMETER :: M9N3STAxi = 885 + INTEGER(IntKi), PARAMETER :: M9N4STAxi = 886 + INTEGER(IntKi), PARAMETER :: M9N5STAxi = 887 + INTEGER(IntKi), PARAMETER :: M9N6STAxi = 888 + INTEGER(IntKi), PARAMETER :: M9N7STAxi = 889 + INTEGER(IntKi), PARAMETER :: M9N8STAxi = 890 + INTEGER(IntKi), PARAMETER :: M9N9STAxi = 891 + INTEGER(IntKi), PARAMETER :: M1N1STAyi = 892 + INTEGER(IntKi), PARAMETER :: M1N2STAyi = 893 + INTEGER(IntKi), PARAMETER :: M1N3STAyi = 894 + INTEGER(IntKi), PARAMETER :: M1N4STAyi = 895 + INTEGER(IntKi), PARAMETER :: M1N5STAyi = 896 + INTEGER(IntKi), PARAMETER :: M1N6STAyi = 897 + INTEGER(IntKi), PARAMETER :: M1N7STAyi = 898 + INTEGER(IntKi), PARAMETER :: M1N8STAyi = 899 + INTEGER(IntKi), PARAMETER :: M1N9STAyi = 900 + INTEGER(IntKi), PARAMETER :: M2N1STAyi = 901 + INTEGER(IntKi), PARAMETER :: M2N2STAyi = 902 + INTEGER(IntKi), PARAMETER :: M2N3STAyi = 903 + INTEGER(IntKi), PARAMETER :: M2N4STAyi = 904 + INTEGER(IntKi), PARAMETER :: M2N5STAyi = 905 + INTEGER(IntKi), PARAMETER :: M2N6STAyi = 906 + INTEGER(IntKi), PARAMETER :: M2N7STAyi = 907 + INTEGER(IntKi), PARAMETER :: M2N8STAyi = 908 + INTEGER(IntKi), PARAMETER :: M2N9STAyi = 909 + INTEGER(IntKi), PARAMETER :: M3N1STAyi = 910 + INTEGER(IntKi), PARAMETER :: M3N2STAyi = 911 + INTEGER(IntKi), PARAMETER :: M3N3STAyi = 912 + INTEGER(IntKi), PARAMETER :: M3N4STAyi = 913 + INTEGER(IntKi), PARAMETER :: M3N5STAyi = 914 + INTEGER(IntKi), PARAMETER :: M3N6STAyi = 915 + INTEGER(IntKi), PARAMETER :: M3N7STAyi = 916 + INTEGER(IntKi), PARAMETER :: M3N8STAyi = 917 + INTEGER(IntKi), PARAMETER :: M3N9STAyi = 918 + INTEGER(IntKi), PARAMETER :: M4N1STAyi = 919 + INTEGER(IntKi), PARAMETER :: M4N2STAyi = 920 + INTEGER(IntKi), PARAMETER :: M4N3STAyi = 921 + INTEGER(IntKi), PARAMETER :: M4N4STAyi = 922 + INTEGER(IntKi), PARAMETER :: M4N5STAyi = 923 + INTEGER(IntKi), PARAMETER :: M4N6STAyi = 924 + INTEGER(IntKi), PARAMETER :: M4N7STAyi = 925 + INTEGER(IntKi), PARAMETER :: M4N8STAyi = 926 + INTEGER(IntKi), PARAMETER :: M4N9STAyi = 927 + INTEGER(IntKi), PARAMETER :: M5N1STAyi = 928 + INTEGER(IntKi), PARAMETER :: M5N2STAyi = 929 + INTEGER(IntKi), PARAMETER :: M5N3STAyi = 930 + INTEGER(IntKi), PARAMETER :: M5N4STAyi = 931 + INTEGER(IntKi), PARAMETER :: M5N5STAyi = 932 + INTEGER(IntKi), PARAMETER :: M5N6STAyi = 933 + INTEGER(IntKi), PARAMETER :: M5N7STAyi = 934 + INTEGER(IntKi), PARAMETER :: M5N8STAyi = 935 + INTEGER(IntKi), PARAMETER :: M5N9STAyi = 936 + INTEGER(IntKi), PARAMETER :: M6N1STAyi = 937 + INTEGER(IntKi), PARAMETER :: M6N2STAyi = 938 + INTEGER(IntKi), PARAMETER :: M6N3STAyi = 939 + INTEGER(IntKi), PARAMETER :: M6N4STAyi = 940 + INTEGER(IntKi), PARAMETER :: M6N5STAyi = 941 + INTEGER(IntKi), PARAMETER :: M6N6STAyi = 942 + INTEGER(IntKi), PARAMETER :: M6N7STAyi = 943 + INTEGER(IntKi), PARAMETER :: M6N8STAyi = 944 + INTEGER(IntKi), PARAMETER :: M6N9STAyi = 945 + INTEGER(IntKi), PARAMETER :: M7N1STAyi = 946 + INTEGER(IntKi), PARAMETER :: M7N2STAyi = 947 + INTEGER(IntKi), PARAMETER :: M7N3STAyi = 948 + INTEGER(IntKi), PARAMETER :: M7N4STAyi = 949 + INTEGER(IntKi), PARAMETER :: M7N5STAyi = 950 + INTEGER(IntKi), PARAMETER :: M7N6STAyi = 951 + INTEGER(IntKi), PARAMETER :: M7N7STAyi = 952 + INTEGER(IntKi), PARAMETER :: M7N8STAyi = 953 + INTEGER(IntKi), PARAMETER :: M7N9STAyi = 954 + INTEGER(IntKi), PARAMETER :: M8N1STAyi = 955 + INTEGER(IntKi), PARAMETER :: M8N2STAyi = 956 + INTEGER(IntKi), PARAMETER :: M8N3STAyi = 957 + INTEGER(IntKi), PARAMETER :: M8N4STAyi = 958 + INTEGER(IntKi), PARAMETER :: M8N5STAyi = 959 + INTEGER(IntKi), PARAMETER :: M8N6STAyi = 960 + INTEGER(IntKi), PARAMETER :: M8N7STAyi = 961 + INTEGER(IntKi), PARAMETER :: M8N8STAyi = 962 + INTEGER(IntKi), PARAMETER :: M8N9STAyi = 963 + INTEGER(IntKi), PARAMETER :: M9N1STAyi = 964 + INTEGER(IntKi), PARAMETER :: M9N2STAyi = 965 + INTEGER(IntKi), PARAMETER :: M9N3STAyi = 966 + INTEGER(IntKi), PARAMETER :: M9N4STAyi = 967 + INTEGER(IntKi), PARAMETER :: M9N5STAyi = 968 + INTEGER(IntKi), PARAMETER :: M9N6STAyi = 969 + INTEGER(IntKi), PARAMETER :: M9N7STAyi = 970 + INTEGER(IntKi), PARAMETER :: M9N8STAyi = 971 + INTEGER(IntKi), PARAMETER :: M9N9STAyi = 972 + INTEGER(IntKi), PARAMETER :: M1N1STAzi = 973 + INTEGER(IntKi), PARAMETER :: M1N2STAzi = 974 + INTEGER(IntKi), PARAMETER :: M1N3STAzi = 975 + INTEGER(IntKi), PARAMETER :: M1N4STAzi = 976 + INTEGER(IntKi), PARAMETER :: M1N5STAzi = 977 + INTEGER(IntKi), PARAMETER :: M1N6STAzi = 978 + INTEGER(IntKi), PARAMETER :: M1N7STAzi = 979 + INTEGER(IntKi), PARAMETER :: M1N8STAzi = 980 + INTEGER(IntKi), PARAMETER :: M1N9STAzi = 981 + INTEGER(IntKi), PARAMETER :: M2N1STAzi = 982 + INTEGER(IntKi), PARAMETER :: M2N2STAzi = 983 + INTEGER(IntKi), PARAMETER :: M2N3STAzi = 984 + INTEGER(IntKi), PARAMETER :: M2N4STAzi = 985 + INTEGER(IntKi), PARAMETER :: M2N5STAzi = 986 + INTEGER(IntKi), PARAMETER :: M2N6STAzi = 987 + INTEGER(IntKi), PARAMETER :: M2N7STAzi = 988 + INTEGER(IntKi), PARAMETER :: M2N8STAzi = 989 + INTEGER(IntKi), PARAMETER :: M2N9STAzi = 990 + INTEGER(IntKi), PARAMETER :: M3N1STAzi = 991 + INTEGER(IntKi), PARAMETER :: M3N2STAzi = 992 + INTEGER(IntKi), PARAMETER :: M3N3STAzi = 993 + INTEGER(IntKi), PARAMETER :: M3N4STAzi = 994 + INTEGER(IntKi), PARAMETER :: M3N5STAzi = 995 + INTEGER(IntKi), PARAMETER :: M3N6STAzi = 996 + INTEGER(IntKi), PARAMETER :: M3N7STAzi = 997 + INTEGER(IntKi), PARAMETER :: M3N8STAzi = 998 + INTEGER(IntKi), PARAMETER :: M3N9STAzi = 999 + INTEGER(IntKi), PARAMETER :: M4N1STAzi = 1000 + INTEGER(IntKi), PARAMETER :: M4N2STAzi = 1001 + INTEGER(IntKi), PARAMETER :: M4N3STAzi = 1002 + INTEGER(IntKi), PARAMETER :: M4N4STAzi = 1003 + INTEGER(IntKi), PARAMETER :: M4N5STAzi = 1004 + INTEGER(IntKi), PARAMETER :: M4N6STAzi = 1005 + INTEGER(IntKi), PARAMETER :: M4N7STAzi = 1006 + INTEGER(IntKi), PARAMETER :: M4N8STAzi = 1007 + INTEGER(IntKi), PARAMETER :: M4N9STAzi = 1008 + INTEGER(IntKi), PARAMETER :: M5N1STAzi = 1009 + INTEGER(IntKi), PARAMETER :: M5N2STAzi = 1010 + INTEGER(IntKi), PARAMETER :: M5N3STAzi = 1011 + INTEGER(IntKi), PARAMETER :: M5N4STAzi = 1012 + INTEGER(IntKi), PARAMETER :: M5N5STAzi = 1013 + INTEGER(IntKi), PARAMETER :: M5N6STAzi = 1014 + INTEGER(IntKi), PARAMETER :: M5N7STAzi = 1015 + INTEGER(IntKi), PARAMETER :: M5N8STAzi = 1016 + INTEGER(IntKi), PARAMETER :: M5N9STAzi = 1017 + INTEGER(IntKi), PARAMETER :: M6N1STAzi = 1018 + INTEGER(IntKi), PARAMETER :: M6N2STAzi = 1019 + INTEGER(IntKi), PARAMETER :: M6N3STAzi = 1020 + INTEGER(IntKi), PARAMETER :: M6N4STAzi = 1021 + INTEGER(IntKi), PARAMETER :: M6N5STAzi = 1022 + INTEGER(IntKi), PARAMETER :: M6N6STAzi = 1023 + INTEGER(IntKi), PARAMETER :: M6N7STAzi = 1024 + INTEGER(IntKi), PARAMETER :: M6N8STAzi = 1025 + INTEGER(IntKi), PARAMETER :: M6N9STAzi = 1026 + INTEGER(IntKi), PARAMETER :: M7N1STAzi = 1027 + INTEGER(IntKi), PARAMETER :: M7N2STAzi = 1028 + INTEGER(IntKi), PARAMETER :: M7N3STAzi = 1029 + INTEGER(IntKi), PARAMETER :: M7N4STAzi = 1030 + INTEGER(IntKi), PARAMETER :: M7N5STAzi = 1031 + INTEGER(IntKi), PARAMETER :: M7N6STAzi = 1032 + INTEGER(IntKi), PARAMETER :: M7N7STAzi = 1033 + INTEGER(IntKi), PARAMETER :: M7N8STAzi = 1034 + INTEGER(IntKi), PARAMETER :: M7N9STAzi = 1035 + INTEGER(IntKi), PARAMETER :: M8N1STAzi = 1036 + INTEGER(IntKi), PARAMETER :: M8N2STAzi = 1037 + INTEGER(IntKi), PARAMETER :: M8N3STAzi = 1038 + INTEGER(IntKi), PARAMETER :: M8N4STAzi = 1039 + INTEGER(IntKi), PARAMETER :: M8N5STAzi = 1040 + INTEGER(IntKi), PARAMETER :: M8N6STAzi = 1041 + INTEGER(IntKi), PARAMETER :: M8N7STAzi = 1042 + INTEGER(IntKi), PARAMETER :: M8N8STAzi = 1043 + INTEGER(IntKi), PARAMETER :: M8N9STAzi = 1044 + INTEGER(IntKi), PARAMETER :: M9N1STAzi = 1045 + INTEGER(IntKi), PARAMETER :: M9N2STAzi = 1046 + INTEGER(IntKi), PARAMETER :: M9N3STAzi = 1047 + INTEGER(IntKi), PARAMETER :: M9N4STAzi = 1048 + INTEGER(IntKi), PARAMETER :: M9N5STAzi = 1049 + INTEGER(IntKi), PARAMETER :: M9N6STAzi = 1050 + INTEGER(IntKi), PARAMETER :: M9N7STAzi = 1051 + INTEGER(IntKi), PARAMETER :: M9N8STAzi = 1052 + INTEGER(IntKi), PARAMETER :: M9N9STAzi = 1053 ! Morison Element Loads: - INTEGER(IntKi), PARAMETER :: M1N1FDxi = 1054 - INTEGER(IntKi), PARAMETER :: M1N2FDxi = 1055 - INTEGER(IntKi), PARAMETER :: M1N3FDxi = 1056 - INTEGER(IntKi), PARAMETER :: M1N4FDxi = 1057 - INTEGER(IntKi), PARAMETER :: M1N5FDxi = 1058 - INTEGER(IntKi), PARAMETER :: M1N6FDxi = 1059 - INTEGER(IntKi), PARAMETER :: M1N7FDxi = 1060 - INTEGER(IntKi), PARAMETER :: M1N8FDxi = 1061 - INTEGER(IntKi), PARAMETER :: M1N9FDxi = 1062 - INTEGER(IntKi), PARAMETER :: M2N1FDxi = 1063 - INTEGER(IntKi), PARAMETER :: M2N2FDxi = 1064 - INTEGER(IntKi), PARAMETER :: M2N3FDxi = 1065 - INTEGER(IntKi), PARAMETER :: M2N4FDxi = 1066 - INTEGER(IntKi), PARAMETER :: M2N5FDxi = 1067 - INTEGER(IntKi), PARAMETER :: M2N6FDxi = 1068 - INTEGER(IntKi), PARAMETER :: M2N7FDxi = 1069 - INTEGER(IntKi), PARAMETER :: M2N8FDxi = 1070 - INTEGER(IntKi), PARAMETER :: M2N9FDxi = 1071 - INTEGER(IntKi), PARAMETER :: M3N1FDxi = 1072 - INTEGER(IntKi), PARAMETER :: M3N2FDxi = 1073 - INTEGER(IntKi), PARAMETER :: M3N3FDxi = 1074 - INTEGER(IntKi), PARAMETER :: M3N4FDxi = 1075 - INTEGER(IntKi), PARAMETER :: M3N5FDxi = 1076 - INTEGER(IntKi), PARAMETER :: M3N6FDxi = 1077 - INTEGER(IntKi), PARAMETER :: M3N7FDxi = 1078 - INTEGER(IntKi), PARAMETER :: M3N8FDxi = 1079 - INTEGER(IntKi), PARAMETER :: M3N9FDxi = 1080 - INTEGER(IntKi), PARAMETER :: M4N1FDxi = 1081 - INTEGER(IntKi), PARAMETER :: M4N2FDxi = 1082 - INTEGER(IntKi), PARAMETER :: M4N3FDxi = 1083 - INTEGER(IntKi), PARAMETER :: M4N4FDxi = 1084 - INTEGER(IntKi), PARAMETER :: M4N5FDxi = 1085 - INTEGER(IntKi), PARAMETER :: M4N6FDxi = 1086 - INTEGER(IntKi), PARAMETER :: M4N7FDxi = 1087 - INTEGER(IntKi), PARAMETER :: M4N8FDxi = 1088 - INTEGER(IntKi), PARAMETER :: M4N9FDxi = 1089 - INTEGER(IntKi), PARAMETER :: M5N1FDxi = 1090 - INTEGER(IntKi), PARAMETER :: M5N2FDxi = 1091 - INTEGER(IntKi), PARAMETER :: M5N3FDxi = 1092 - INTEGER(IntKi), PARAMETER :: M5N4FDxi = 1093 - INTEGER(IntKi), PARAMETER :: M5N5FDxi = 1094 - INTEGER(IntKi), PARAMETER :: M5N6FDxi = 1095 - INTEGER(IntKi), PARAMETER :: M5N7FDxi = 1096 - INTEGER(IntKi), PARAMETER :: M5N8FDxi = 1097 - INTEGER(IntKi), PARAMETER :: M5N9FDxi = 1098 - INTEGER(IntKi), PARAMETER :: M6N1FDxi = 1099 - INTEGER(IntKi), PARAMETER :: M6N2FDxi = 1100 - INTEGER(IntKi), PARAMETER :: M6N3FDxi = 1101 - INTEGER(IntKi), PARAMETER :: M6N4FDxi = 1102 - INTEGER(IntKi), PARAMETER :: M6N5FDxi = 1103 - INTEGER(IntKi), PARAMETER :: M6N6FDxi = 1104 - INTEGER(IntKi), PARAMETER :: M6N7FDxi = 1105 - INTEGER(IntKi), PARAMETER :: M6N8FDxi = 1106 - INTEGER(IntKi), PARAMETER :: M6N9FDxi = 1107 - INTEGER(IntKi), PARAMETER :: M7N1FDxi = 1108 - INTEGER(IntKi), PARAMETER :: M7N2FDxi = 1109 - INTEGER(IntKi), PARAMETER :: M7N3FDxi = 1110 - INTEGER(IntKi), PARAMETER :: M7N4FDxi = 1111 - INTEGER(IntKi), PARAMETER :: M7N5FDxi = 1112 - INTEGER(IntKi), PARAMETER :: M7N6FDxi = 1113 - INTEGER(IntKi), PARAMETER :: M7N7FDxi = 1114 - INTEGER(IntKi), PARAMETER :: M7N8FDxi = 1115 - INTEGER(IntKi), PARAMETER :: M7N9FDxi = 1116 - INTEGER(IntKi), PARAMETER :: M8N1FDxi = 1117 - INTEGER(IntKi), PARAMETER :: M8N2FDxi = 1118 - INTEGER(IntKi), PARAMETER :: M8N3FDxi = 1119 - INTEGER(IntKi), PARAMETER :: M8N4FDxi = 1120 - INTEGER(IntKi), PARAMETER :: M8N5FDxi = 1121 - INTEGER(IntKi), PARAMETER :: M8N6FDxi = 1122 - INTEGER(IntKi), PARAMETER :: M8N7FDxi = 1123 - INTEGER(IntKi), PARAMETER :: M8N8FDxi = 1124 - INTEGER(IntKi), PARAMETER :: M8N9FDxi = 1125 - INTEGER(IntKi), PARAMETER :: M9N1FDxi = 1126 - INTEGER(IntKi), PARAMETER :: M9N2FDxi = 1127 - INTEGER(IntKi), PARAMETER :: M9N3FDxi = 1128 - INTEGER(IntKi), PARAMETER :: M9N4FDxi = 1129 - INTEGER(IntKi), PARAMETER :: M9N5FDxi = 1130 - INTEGER(IntKi), PARAMETER :: M9N6FDxi = 1131 - INTEGER(IntKi), PARAMETER :: M9N7FDxi = 1132 - INTEGER(IntKi), PARAMETER :: M9N8FDxi = 1133 - INTEGER(IntKi), PARAMETER :: M9N9FDxi = 1134 - INTEGER(IntKi), PARAMETER :: M1N1FDyi = 1135 - INTEGER(IntKi), PARAMETER :: M1N2FDyi = 1136 - INTEGER(IntKi), PARAMETER :: M1N3FDyi = 1137 - INTEGER(IntKi), PARAMETER :: M1N4FDyi = 1138 - INTEGER(IntKi), PARAMETER :: M1N5FDyi = 1139 - INTEGER(IntKi), PARAMETER :: M1N6FDyi = 1140 - INTEGER(IntKi), PARAMETER :: M1N7FDyi = 1141 - INTEGER(IntKi), PARAMETER :: M1N8FDyi = 1142 - INTEGER(IntKi), PARAMETER :: M1N9FDyi = 1143 - INTEGER(IntKi), PARAMETER :: M2N1FDyi = 1144 - INTEGER(IntKi), PARAMETER :: M2N2FDyi = 1145 - INTEGER(IntKi), PARAMETER :: M2N3FDyi = 1146 - INTEGER(IntKi), PARAMETER :: M2N4FDyi = 1147 - INTEGER(IntKi), PARAMETER :: M2N5FDyi = 1148 - INTEGER(IntKi), PARAMETER :: M2N6FDyi = 1149 - INTEGER(IntKi), PARAMETER :: M2N7FDyi = 1150 - INTEGER(IntKi), PARAMETER :: M2N8FDyi = 1151 - INTEGER(IntKi), PARAMETER :: M2N9FDyi = 1152 - INTEGER(IntKi), PARAMETER :: M3N1FDyi = 1153 - INTEGER(IntKi), PARAMETER :: M3N2FDyi = 1154 - INTEGER(IntKi), PARAMETER :: M3N3FDyi = 1155 - INTEGER(IntKi), PARAMETER :: M3N4FDyi = 1156 - INTEGER(IntKi), PARAMETER :: M3N5FDyi = 1157 - INTEGER(IntKi), PARAMETER :: M3N6FDyi = 1158 - INTEGER(IntKi), PARAMETER :: M3N7FDyi = 1159 - INTEGER(IntKi), PARAMETER :: M3N8FDyi = 1160 - INTEGER(IntKi), PARAMETER :: M3N9FDyi = 1161 - INTEGER(IntKi), PARAMETER :: M4N1FDyi = 1162 - INTEGER(IntKi), PARAMETER :: M4N2FDyi = 1163 - INTEGER(IntKi), PARAMETER :: M4N3FDyi = 1164 - INTEGER(IntKi), PARAMETER :: M4N4FDyi = 1165 - INTEGER(IntKi), PARAMETER :: M4N5FDyi = 1166 - INTEGER(IntKi), PARAMETER :: M4N6FDyi = 1167 - INTEGER(IntKi), PARAMETER :: M4N7FDyi = 1168 - INTEGER(IntKi), PARAMETER :: M4N8FDyi = 1169 - INTEGER(IntKi), PARAMETER :: M4N9FDyi = 1170 - INTEGER(IntKi), PARAMETER :: M5N1FDyi = 1171 - INTEGER(IntKi), PARAMETER :: M5N2FDyi = 1172 - INTEGER(IntKi), PARAMETER :: M5N3FDyi = 1173 - INTEGER(IntKi), PARAMETER :: M5N4FDyi = 1174 - INTEGER(IntKi), PARAMETER :: M5N5FDyi = 1175 - INTEGER(IntKi), PARAMETER :: M5N6FDyi = 1176 - INTEGER(IntKi), PARAMETER :: M5N7FDyi = 1177 - INTEGER(IntKi), PARAMETER :: M5N8FDyi = 1178 - INTEGER(IntKi), PARAMETER :: M5N9FDyi = 1179 - INTEGER(IntKi), PARAMETER :: M6N1FDyi = 1180 - INTEGER(IntKi), PARAMETER :: M6N2FDyi = 1181 - INTEGER(IntKi), PARAMETER :: M6N3FDyi = 1182 - INTEGER(IntKi), PARAMETER :: M6N4FDyi = 1183 - INTEGER(IntKi), PARAMETER :: M6N5FDyi = 1184 - INTEGER(IntKi), PARAMETER :: M6N6FDyi = 1185 - INTEGER(IntKi), PARAMETER :: M6N7FDyi = 1186 - INTEGER(IntKi), PARAMETER :: M6N8FDyi = 1187 - INTEGER(IntKi), PARAMETER :: M6N9FDyi = 1188 - INTEGER(IntKi), PARAMETER :: M7N1FDyi = 1189 - INTEGER(IntKi), PARAMETER :: M7N2FDyi = 1190 - INTEGER(IntKi), PARAMETER :: M7N3FDyi = 1191 - INTEGER(IntKi), PARAMETER :: M7N4FDyi = 1192 - INTEGER(IntKi), PARAMETER :: M7N5FDyi = 1193 - INTEGER(IntKi), PARAMETER :: M7N6FDyi = 1194 - INTEGER(IntKi), PARAMETER :: M7N7FDyi = 1195 - INTEGER(IntKi), PARAMETER :: M7N8FDyi = 1196 - INTEGER(IntKi), PARAMETER :: M7N9FDyi = 1197 - INTEGER(IntKi), PARAMETER :: M8N1FDyi = 1198 - INTEGER(IntKi), PARAMETER :: M8N2FDyi = 1199 - INTEGER(IntKi), PARAMETER :: M8N3FDyi = 1200 - INTEGER(IntKi), PARAMETER :: M8N4FDyi = 1201 - INTEGER(IntKi), PARAMETER :: M8N5FDyi = 1202 - INTEGER(IntKi), PARAMETER :: M8N6FDyi = 1203 - INTEGER(IntKi), PARAMETER :: M8N7FDyi = 1204 - INTEGER(IntKi), PARAMETER :: M8N8FDyi = 1205 - INTEGER(IntKi), PARAMETER :: M8N9FDyi = 1206 - INTEGER(IntKi), PARAMETER :: M9N1FDyi = 1207 - INTEGER(IntKi), PARAMETER :: M9N2FDyi = 1208 - INTEGER(IntKi), PARAMETER :: M9N3FDyi = 1209 - INTEGER(IntKi), PARAMETER :: M9N4FDyi = 1210 - INTEGER(IntKi), PARAMETER :: M9N5FDyi = 1211 - INTEGER(IntKi), PARAMETER :: M9N6FDyi = 1212 - INTEGER(IntKi), PARAMETER :: M9N7FDyi = 1213 - INTEGER(IntKi), PARAMETER :: M9N8FDyi = 1214 - INTEGER(IntKi), PARAMETER :: M9N9FDyi = 1215 - INTEGER(IntKi), PARAMETER :: M1N1FDzi = 1216 - INTEGER(IntKi), PARAMETER :: M1N2FDzi = 1217 - INTEGER(IntKi), PARAMETER :: M1N3FDzi = 1218 - INTEGER(IntKi), PARAMETER :: M1N4FDzi = 1219 - INTEGER(IntKi), PARAMETER :: M1N5FDzi = 1220 - INTEGER(IntKi), PARAMETER :: M1N6FDzi = 1221 - INTEGER(IntKi), PARAMETER :: M1N7FDzi = 1222 - INTEGER(IntKi), PARAMETER :: M1N8FDzi = 1223 - INTEGER(IntKi), PARAMETER :: M1N9FDzi = 1224 - INTEGER(IntKi), PARAMETER :: M2N1FDzi = 1225 - INTEGER(IntKi), PARAMETER :: M2N2FDzi = 1226 - INTEGER(IntKi), PARAMETER :: M2N3FDzi = 1227 - INTEGER(IntKi), PARAMETER :: M2N4FDzi = 1228 - INTEGER(IntKi), PARAMETER :: M2N5FDzi = 1229 - INTEGER(IntKi), PARAMETER :: M2N6FDzi = 1230 - INTEGER(IntKi), PARAMETER :: M2N7FDzi = 1231 - INTEGER(IntKi), PARAMETER :: M2N8FDzi = 1232 - INTEGER(IntKi), PARAMETER :: M2N9FDzi = 1233 - INTEGER(IntKi), PARAMETER :: M3N1FDzi = 1234 - INTEGER(IntKi), PARAMETER :: M3N2FDzi = 1235 - INTEGER(IntKi), PARAMETER :: M3N3FDzi = 1236 - INTEGER(IntKi), PARAMETER :: M3N4FDzi = 1237 - INTEGER(IntKi), PARAMETER :: M3N5FDzi = 1238 - INTEGER(IntKi), PARAMETER :: M3N6FDzi = 1239 - INTEGER(IntKi), PARAMETER :: M3N7FDzi = 1240 - INTEGER(IntKi), PARAMETER :: M3N8FDzi = 1241 - INTEGER(IntKi), PARAMETER :: M3N9FDzi = 1242 - INTEGER(IntKi), PARAMETER :: M4N1FDzi = 1243 - INTEGER(IntKi), PARAMETER :: M4N2FDzi = 1244 - INTEGER(IntKi), PARAMETER :: M4N3FDzi = 1245 - INTEGER(IntKi), PARAMETER :: M4N4FDzi = 1246 - INTEGER(IntKi), PARAMETER :: M4N5FDzi = 1247 - INTEGER(IntKi), PARAMETER :: M4N6FDzi = 1248 - INTEGER(IntKi), PARAMETER :: M4N7FDzi = 1249 - INTEGER(IntKi), PARAMETER :: M4N8FDzi = 1250 - INTEGER(IntKi), PARAMETER :: M4N9FDzi = 1251 - INTEGER(IntKi), PARAMETER :: M5N1FDzi = 1252 - INTEGER(IntKi), PARAMETER :: M5N2FDzi = 1253 - INTEGER(IntKi), PARAMETER :: M5N3FDzi = 1254 - INTEGER(IntKi), PARAMETER :: M5N4FDzi = 1255 - INTEGER(IntKi), PARAMETER :: M5N5FDzi = 1256 - INTEGER(IntKi), PARAMETER :: M5N6FDzi = 1257 - INTEGER(IntKi), PARAMETER :: M5N7FDzi = 1258 - INTEGER(IntKi), PARAMETER :: M5N8FDzi = 1259 - INTEGER(IntKi), PARAMETER :: M5N9FDzi = 1260 - INTEGER(IntKi), PARAMETER :: M6N1FDzi = 1261 - INTEGER(IntKi), PARAMETER :: M6N2FDzi = 1262 - INTEGER(IntKi), PARAMETER :: M6N3FDzi = 1263 - INTEGER(IntKi), PARAMETER :: M6N4FDzi = 1264 - INTEGER(IntKi), PARAMETER :: M6N5FDzi = 1265 - INTEGER(IntKi), PARAMETER :: M6N6FDzi = 1266 - INTEGER(IntKi), PARAMETER :: M6N7FDzi = 1267 - INTEGER(IntKi), PARAMETER :: M6N8FDzi = 1268 - INTEGER(IntKi), PARAMETER :: M6N9FDzi = 1269 - INTEGER(IntKi), PARAMETER :: M7N1FDzi = 1270 - INTEGER(IntKi), PARAMETER :: M7N2FDzi = 1271 - INTEGER(IntKi), PARAMETER :: M7N3FDzi = 1272 - INTEGER(IntKi), PARAMETER :: M7N4FDzi = 1273 - INTEGER(IntKi), PARAMETER :: M7N5FDzi = 1274 - INTEGER(IntKi), PARAMETER :: M7N6FDzi = 1275 - INTEGER(IntKi), PARAMETER :: M7N7FDzi = 1276 - INTEGER(IntKi), PARAMETER :: M7N8FDzi = 1277 - INTEGER(IntKi), PARAMETER :: M7N9FDzi = 1278 - INTEGER(IntKi), PARAMETER :: M8N1FDzi = 1279 - INTEGER(IntKi), PARAMETER :: M8N2FDzi = 1280 - INTEGER(IntKi), PARAMETER :: M8N3FDzi = 1281 - INTEGER(IntKi), PARAMETER :: M8N4FDzi = 1282 - INTEGER(IntKi), PARAMETER :: M8N5FDzi = 1283 - INTEGER(IntKi), PARAMETER :: M8N6FDzi = 1284 - INTEGER(IntKi), PARAMETER :: M8N7FDzi = 1285 - INTEGER(IntKi), PARAMETER :: M8N8FDzi = 1286 - INTEGER(IntKi), PARAMETER :: M8N9FDzi = 1287 - INTEGER(IntKi), PARAMETER :: M9N1FDzi = 1288 - INTEGER(IntKi), PARAMETER :: M9N2FDzi = 1289 - INTEGER(IntKi), PARAMETER :: M9N3FDzi = 1290 - INTEGER(IntKi), PARAMETER :: M9N4FDzi = 1291 - INTEGER(IntKi), PARAMETER :: M9N5FDzi = 1292 - INTEGER(IntKi), PARAMETER :: M9N6FDzi = 1293 - INTEGER(IntKi), PARAMETER :: M9N7FDzi = 1294 - INTEGER(IntKi), PARAMETER :: M9N8FDzi = 1295 - INTEGER(IntKi), PARAMETER :: M9N9FDzi = 1296 - INTEGER(IntKi), PARAMETER :: M1N1FIxi = 1297 - INTEGER(IntKi), PARAMETER :: M1N2FIxi = 1298 - INTEGER(IntKi), PARAMETER :: M1N3FIxi = 1299 - INTEGER(IntKi), PARAMETER :: M1N4FIxi = 1300 - INTEGER(IntKi), PARAMETER :: M1N5FIxi = 1301 - INTEGER(IntKi), PARAMETER :: M1N6FIxi = 1302 - INTEGER(IntKi), PARAMETER :: M1N7FIxi = 1303 - INTEGER(IntKi), PARAMETER :: M1N8FIxi = 1304 - INTEGER(IntKi), PARAMETER :: M1N9FIxi = 1305 - INTEGER(IntKi), PARAMETER :: M2N1FIxi = 1306 - INTEGER(IntKi), PARAMETER :: M2N2FIxi = 1307 - INTEGER(IntKi), PARAMETER :: M2N3FIxi = 1308 - INTEGER(IntKi), PARAMETER :: M2N4FIxi = 1309 - INTEGER(IntKi), PARAMETER :: M2N5FIxi = 1310 - INTEGER(IntKi), PARAMETER :: M2N6FIxi = 1311 - INTEGER(IntKi), PARAMETER :: M2N7FIxi = 1312 - INTEGER(IntKi), PARAMETER :: M2N8FIxi = 1313 - INTEGER(IntKi), PARAMETER :: M2N9FIxi = 1314 - INTEGER(IntKi), PARAMETER :: M3N1FIxi = 1315 - INTEGER(IntKi), PARAMETER :: M3N2FIxi = 1316 - INTEGER(IntKi), PARAMETER :: M3N3FIxi = 1317 - INTEGER(IntKi), PARAMETER :: M3N4FIxi = 1318 - INTEGER(IntKi), PARAMETER :: M3N5FIxi = 1319 - INTEGER(IntKi), PARAMETER :: M3N6FIxi = 1320 - INTEGER(IntKi), PARAMETER :: M3N7FIxi = 1321 - INTEGER(IntKi), PARAMETER :: M3N8FIxi = 1322 - INTEGER(IntKi), PARAMETER :: M3N9FIxi = 1323 - INTEGER(IntKi), PARAMETER :: M4N1FIxi = 1324 - INTEGER(IntKi), PARAMETER :: M4N2FIxi = 1325 - INTEGER(IntKi), PARAMETER :: M4N3FIxi = 1326 - INTEGER(IntKi), PARAMETER :: M4N4FIxi = 1327 - INTEGER(IntKi), PARAMETER :: M4N5FIxi = 1328 - INTEGER(IntKi), PARAMETER :: M4N6FIxi = 1329 - INTEGER(IntKi), PARAMETER :: M4N7FIxi = 1330 - INTEGER(IntKi), PARAMETER :: M4N8FIxi = 1331 - INTEGER(IntKi), PARAMETER :: M4N9FIxi = 1332 - INTEGER(IntKi), PARAMETER :: M5N1FIxi = 1333 - INTEGER(IntKi), PARAMETER :: M5N2FIxi = 1334 - INTEGER(IntKi), PARAMETER :: M5N3FIxi = 1335 - INTEGER(IntKi), PARAMETER :: M5N4FIxi = 1336 - INTEGER(IntKi), PARAMETER :: M5N5FIxi = 1337 - INTEGER(IntKi), PARAMETER :: M5N6FIxi = 1338 - INTEGER(IntKi), PARAMETER :: M5N7FIxi = 1339 - INTEGER(IntKi), PARAMETER :: M5N8FIxi = 1340 - INTEGER(IntKi), PARAMETER :: M5N9FIxi = 1341 - INTEGER(IntKi), PARAMETER :: M6N1FIxi = 1342 - INTEGER(IntKi), PARAMETER :: M6N2FIxi = 1343 - INTEGER(IntKi), PARAMETER :: M6N3FIxi = 1344 - INTEGER(IntKi), PARAMETER :: M6N4FIxi = 1345 - INTEGER(IntKi), PARAMETER :: M6N5FIxi = 1346 - INTEGER(IntKi), PARAMETER :: M6N6FIxi = 1347 - INTEGER(IntKi), PARAMETER :: M6N7FIxi = 1348 - INTEGER(IntKi), PARAMETER :: M6N8FIxi = 1349 - INTEGER(IntKi), PARAMETER :: M6N9FIxi = 1350 - INTEGER(IntKi), PARAMETER :: M7N1FIxi = 1351 - INTEGER(IntKi), PARAMETER :: M7N2FIxi = 1352 - INTEGER(IntKi), PARAMETER :: M7N3FIxi = 1353 - INTEGER(IntKi), PARAMETER :: M7N4FIxi = 1354 - INTEGER(IntKi), PARAMETER :: M7N5FIxi = 1355 - INTEGER(IntKi), PARAMETER :: M7N6FIxi = 1356 - INTEGER(IntKi), PARAMETER :: M7N7FIxi = 1357 - INTEGER(IntKi), PARAMETER :: M7N8FIxi = 1358 - INTEGER(IntKi), PARAMETER :: M7N9FIxi = 1359 - INTEGER(IntKi), PARAMETER :: M8N1FIxi = 1360 - INTEGER(IntKi), PARAMETER :: M8N2FIxi = 1361 - INTEGER(IntKi), PARAMETER :: M8N3FIxi = 1362 - INTEGER(IntKi), PARAMETER :: M8N4FIxi = 1363 - INTEGER(IntKi), PARAMETER :: M8N5FIxi = 1364 - INTEGER(IntKi), PARAMETER :: M8N6FIxi = 1365 - INTEGER(IntKi), PARAMETER :: M8N7FIxi = 1366 - INTEGER(IntKi), PARAMETER :: M8N8FIxi = 1367 - INTEGER(IntKi), PARAMETER :: M8N9FIxi = 1368 - INTEGER(IntKi), PARAMETER :: M9N1FIxi = 1369 - INTEGER(IntKi), PARAMETER :: M9N2FIxi = 1370 - INTEGER(IntKi), PARAMETER :: M9N3FIxi = 1371 - INTEGER(IntKi), PARAMETER :: M9N4FIxi = 1372 - INTEGER(IntKi), PARAMETER :: M9N5FIxi = 1373 - INTEGER(IntKi), PARAMETER :: M9N6FIxi = 1374 - INTEGER(IntKi), PARAMETER :: M9N7FIxi = 1375 - INTEGER(IntKi), PARAMETER :: M9N8FIxi = 1376 - INTEGER(IntKi), PARAMETER :: M9N9FIxi = 1377 - INTEGER(IntKi), PARAMETER :: M1N1FIyi = 1378 - INTEGER(IntKi), PARAMETER :: M1N2FIyi = 1379 - INTEGER(IntKi), PARAMETER :: M1N3FIyi = 1380 - INTEGER(IntKi), PARAMETER :: M1N4FIyi = 1381 - INTEGER(IntKi), PARAMETER :: M1N5FIyi = 1382 - INTEGER(IntKi), PARAMETER :: M1N6FIyi = 1383 - INTEGER(IntKi), PARAMETER :: M1N7FIyi = 1384 - INTEGER(IntKi), PARAMETER :: M1N8FIyi = 1385 - INTEGER(IntKi), PARAMETER :: M1N9FIyi = 1386 - INTEGER(IntKi), PARAMETER :: M2N1FIyi = 1387 - INTEGER(IntKi), PARAMETER :: M2N2FIyi = 1388 - INTEGER(IntKi), PARAMETER :: M2N3FIyi = 1389 - INTEGER(IntKi), PARAMETER :: M2N4FIyi = 1390 - INTEGER(IntKi), PARAMETER :: M2N5FIyi = 1391 - INTEGER(IntKi), PARAMETER :: M2N6FIyi = 1392 - INTEGER(IntKi), PARAMETER :: M2N7FIyi = 1393 - INTEGER(IntKi), PARAMETER :: M2N8FIyi = 1394 - INTEGER(IntKi), PARAMETER :: M2N9FIyi = 1395 - INTEGER(IntKi), PARAMETER :: M3N1FIyi = 1396 - INTEGER(IntKi), PARAMETER :: M3N2FIyi = 1397 - INTEGER(IntKi), PARAMETER :: M3N3FIyi = 1398 - INTEGER(IntKi), PARAMETER :: M3N4FIyi = 1399 - INTEGER(IntKi), PARAMETER :: M3N5FIyi = 1400 - INTEGER(IntKi), PARAMETER :: M3N6FIyi = 1401 - INTEGER(IntKi), PARAMETER :: M3N7FIyi = 1402 - INTEGER(IntKi), PARAMETER :: M3N8FIyi = 1403 - INTEGER(IntKi), PARAMETER :: M3N9FIyi = 1404 - INTEGER(IntKi), PARAMETER :: M4N1FIyi = 1405 - INTEGER(IntKi), PARAMETER :: M4N2FIyi = 1406 - INTEGER(IntKi), PARAMETER :: M4N3FIyi = 1407 - INTEGER(IntKi), PARAMETER :: M4N4FIyi = 1408 - INTEGER(IntKi), PARAMETER :: M4N5FIyi = 1409 - INTEGER(IntKi), PARAMETER :: M4N6FIyi = 1410 - INTEGER(IntKi), PARAMETER :: M4N7FIyi = 1411 - INTEGER(IntKi), PARAMETER :: M4N8FIyi = 1412 - INTEGER(IntKi), PARAMETER :: M4N9FIyi = 1413 - INTEGER(IntKi), PARAMETER :: M5N1FIyi = 1414 - INTEGER(IntKi), PARAMETER :: M5N2FIyi = 1415 - INTEGER(IntKi), PARAMETER :: M5N3FIyi = 1416 - INTEGER(IntKi), PARAMETER :: M5N4FIyi = 1417 - INTEGER(IntKi), PARAMETER :: M5N5FIyi = 1418 - INTEGER(IntKi), PARAMETER :: M5N6FIyi = 1419 - INTEGER(IntKi), PARAMETER :: M5N7FIyi = 1420 - INTEGER(IntKi), PARAMETER :: M5N8FIyi = 1421 - INTEGER(IntKi), PARAMETER :: M5N9FIyi = 1422 - INTEGER(IntKi), PARAMETER :: M6N1FIyi = 1423 - INTEGER(IntKi), PARAMETER :: M6N2FIyi = 1424 - INTEGER(IntKi), PARAMETER :: M6N3FIyi = 1425 - INTEGER(IntKi), PARAMETER :: M6N4FIyi = 1426 - INTEGER(IntKi), PARAMETER :: M6N5FIyi = 1427 - INTEGER(IntKi), PARAMETER :: M6N6FIyi = 1428 - INTEGER(IntKi), PARAMETER :: M6N7FIyi = 1429 - INTEGER(IntKi), PARAMETER :: M6N8FIyi = 1430 - INTEGER(IntKi), PARAMETER :: M6N9FIyi = 1431 - INTEGER(IntKi), PARAMETER :: M7N1FIyi = 1432 - INTEGER(IntKi), PARAMETER :: M7N2FIyi = 1433 - INTEGER(IntKi), PARAMETER :: M7N3FIyi = 1434 - INTEGER(IntKi), PARAMETER :: M7N4FIyi = 1435 - INTEGER(IntKi), PARAMETER :: M7N5FIyi = 1436 - INTEGER(IntKi), PARAMETER :: M7N6FIyi = 1437 - INTEGER(IntKi), PARAMETER :: M7N7FIyi = 1438 - INTEGER(IntKi), PARAMETER :: M7N8FIyi = 1439 - INTEGER(IntKi), PARAMETER :: M7N9FIyi = 1440 - INTEGER(IntKi), PARAMETER :: M8N1FIyi = 1441 - INTEGER(IntKi), PARAMETER :: M8N2FIyi = 1442 - INTEGER(IntKi), PARAMETER :: M8N3FIyi = 1443 - INTEGER(IntKi), PARAMETER :: M8N4FIyi = 1444 - INTEGER(IntKi), PARAMETER :: M8N5FIyi = 1445 - INTEGER(IntKi), PARAMETER :: M8N6FIyi = 1446 - INTEGER(IntKi), PARAMETER :: M8N7FIyi = 1447 - INTEGER(IntKi), PARAMETER :: M8N8FIyi = 1448 - INTEGER(IntKi), PARAMETER :: M8N9FIyi = 1449 - INTEGER(IntKi), PARAMETER :: M9N1FIyi = 1450 - INTEGER(IntKi), PARAMETER :: M9N2FIyi = 1451 - INTEGER(IntKi), PARAMETER :: M9N3FIyi = 1452 - INTEGER(IntKi), PARAMETER :: M9N4FIyi = 1453 - INTEGER(IntKi), PARAMETER :: M9N5FIyi = 1454 - INTEGER(IntKi), PARAMETER :: M9N6FIyi = 1455 - INTEGER(IntKi), PARAMETER :: M9N7FIyi = 1456 - INTEGER(IntKi), PARAMETER :: M9N8FIyi = 1457 - INTEGER(IntKi), PARAMETER :: M9N9FIyi = 1458 - INTEGER(IntKi), PARAMETER :: M1N1FIzi = 1459 - INTEGER(IntKi), PARAMETER :: M1N2FIzi = 1460 - INTEGER(IntKi), PARAMETER :: M1N3FIzi = 1461 - INTEGER(IntKi), PARAMETER :: M1N4FIzi = 1462 - INTEGER(IntKi), PARAMETER :: M1N5FIzi = 1463 - INTEGER(IntKi), PARAMETER :: M1N6FIzi = 1464 - INTEGER(IntKi), PARAMETER :: M1N7FIzi = 1465 - INTEGER(IntKi), PARAMETER :: M1N8FIzi = 1466 - INTEGER(IntKi), PARAMETER :: M1N9FIzi = 1467 - INTEGER(IntKi), PARAMETER :: M2N1FIzi = 1468 - INTEGER(IntKi), PARAMETER :: M2N2FIzi = 1469 - INTEGER(IntKi), PARAMETER :: M2N3FIzi = 1470 - INTEGER(IntKi), PARAMETER :: M2N4FIzi = 1471 - INTEGER(IntKi), PARAMETER :: M2N5FIzi = 1472 - INTEGER(IntKi), PARAMETER :: M2N6FIzi = 1473 - INTEGER(IntKi), PARAMETER :: M2N7FIzi = 1474 - INTEGER(IntKi), PARAMETER :: M2N8FIzi = 1475 - INTEGER(IntKi), PARAMETER :: M2N9FIzi = 1476 - INTEGER(IntKi), PARAMETER :: M3N1FIzi = 1477 - INTEGER(IntKi), PARAMETER :: M3N2FIzi = 1478 - INTEGER(IntKi), PARAMETER :: M3N3FIzi = 1479 - INTEGER(IntKi), PARAMETER :: M3N4FIzi = 1480 - INTEGER(IntKi), PARAMETER :: M3N5FIzi = 1481 - INTEGER(IntKi), PARAMETER :: M3N6FIzi = 1482 - INTEGER(IntKi), PARAMETER :: M3N7FIzi = 1483 - INTEGER(IntKi), PARAMETER :: M3N8FIzi = 1484 - INTEGER(IntKi), PARAMETER :: M3N9FIzi = 1485 - INTEGER(IntKi), PARAMETER :: M4N1FIzi = 1486 - INTEGER(IntKi), PARAMETER :: M4N2FIzi = 1487 - INTEGER(IntKi), PARAMETER :: M4N3FIzi = 1488 - INTEGER(IntKi), PARAMETER :: M4N4FIzi = 1489 - INTEGER(IntKi), PARAMETER :: M4N5FIzi = 1490 - INTEGER(IntKi), PARAMETER :: M4N6FIzi = 1491 - INTEGER(IntKi), PARAMETER :: M4N7FIzi = 1492 - INTEGER(IntKi), PARAMETER :: M4N8FIzi = 1493 - INTEGER(IntKi), PARAMETER :: M4N9FIzi = 1494 - INTEGER(IntKi), PARAMETER :: M5N1FIzi = 1495 - INTEGER(IntKi), PARAMETER :: M5N2FIzi = 1496 - INTEGER(IntKi), PARAMETER :: M5N3FIzi = 1497 - INTEGER(IntKi), PARAMETER :: M5N4FIzi = 1498 - INTEGER(IntKi), PARAMETER :: M5N5FIzi = 1499 - INTEGER(IntKi), PARAMETER :: M5N6FIzi = 1500 - INTEGER(IntKi), PARAMETER :: M5N7FIzi = 1501 - INTEGER(IntKi), PARAMETER :: M5N8FIzi = 1502 - INTEGER(IntKi), PARAMETER :: M5N9FIzi = 1503 - INTEGER(IntKi), PARAMETER :: M6N1FIzi = 1504 - INTEGER(IntKi), PARAMETER :: M6N2FIzi = 1505 - INTEGER(IntKi), PARAMETER :: M6N3FIzi = 1506 - INTEGER(IntKi), PARAMETER :: M6N4FIzi = 1507 - INTEGER(IntKi), PARAMETER :: M6N5FIzi = 1508 - INTEGER(IntKi), PARAMETER :: M6N6FIzi = 1509 - INTEGER(IntKi), PARAMETER :: M6N7FIzi = 1510 - INTEGER(IntKi), PARAMETER :: M6N8FIzi = 1511 - INTEGER(IntKi), PARAMETER :: M6N9FIzi = 1512 - INTEGER(IntKi), PARAMETER :: M7N1FIzi = 1513 - INTEGER(IntKi), PARAMETER :: M7N2FIzi = 1514 - INTEGER(IntKi), PARAMETER :: M7N3FIzi = 1515 - INTEGER(IntKi), PARAMETER :: M7N4FIzi = 1516 - INTEGER(IntKi), PARAMETER :: M7N5FIzi = 1517 - INTEGER(IntKi), PARAMETER :: M7N6FIzi = 1518 - INTEGER(IntKi), PARAMETER :: M7N7FIzi = 1519 - INTEGER(IntKi), PARAMETER :: M7N8FIzi = 1520 - INTEGER(IntKi), PARAMETER :: M7N9FIzi = 1521 - INTEGER(IntKi), PARAMETER :: M8N1FIzi = 1522 - INTEGER(IntKi), PARAMETER :: M8N2FIzi = 1523 - INTEGER(IntKi), PARAMETER :: M8N3FIzi = 1524 - INTEGER(IntKi), PARAMETER :: M8N4FIzi = 1525 - INTEGER(IntKi), PARAMETER :: M8N5FIzi = 1526 - INTEGER(IntKi), PARAMETER :: M8N6FIzi = 1527 - INTEGER(IntKi), PARAMETER :: M8N7FIzi = 1528 - INTEGER(IntKi), PARAMETER :: M8N8FIzi = 1529 - INTEGER(IntKi), PARAMETER :: M8N9FIzi = 1530 - INTEGER(IntKi), PARAMETER :: M9N1FIzi = 1531 - INTEGER(IntKi), PARAMETER :: M9N2FIzi = 1532 - INTEGER(IntKi), PARAMETER :: M9N3FIzi = 1533 - INTEGER(IntKi), PARAMETER :: M9N4FIzi = 1534 - INTEGER(IntKi), PARAMETER :: M9N5FIzi = 1535 - INTEGER(IntKi), PARAMETER :: M9N6FIzi = 1536 - INTEGER(IntKi), PARAMETER :: M9N7FIzi = 1537 - INTEGER(IntKi), PARAMETER :: M9N8FIzi = 1538 - INTEGER(IntKi), PARAMETER :: M9N9FIzi = 1539 - INTEGER(IntKi), PARAMETER :: M1N1FBxi = 1540 - INTEGER(IntKi), PARAMETER :: M1N2FBxi = 1541 - INTEGER(IntKi), PARAMETER :: M1N3FBxi = 1542 - INTEGER(IntKi), PARAMETER :: M1N4FBxi = 1543 - INTEGER(IntKi), PARAMETER :: M1N5FBxi = 1544 - INTEGER(IntKi), PARAMETER :: M1N6FBxi = 1545 - INTEGER(IntKi), PARAMETER :: M1N7FBxi = 1546 - INTEGER(IntKi), PARAMETER :: M1N8FBxi = 1547 - INTEGER(IntKi), PARAMETER :: M1N9FBxi = 1548 - INTEGER(IntKi), PARAMETER :: M2N1FBxi = 1549 - INTEGER(IntKi), PARAMETER :: M2N2FBxi = 1550 - INTEGER(IntKi), PARAMETER :: M2N3FBxi = 1551 - INTEGER(IntKi), PARAMETER :: M2N4FBxi = 1552 - INTEGER(IntKi), PARAMETER :: M2N5FBxi = 1553 - INTEGER(IntKi), PARAMETER :: M2N6FBxi = 1554 - INTEGER(IntKi), PARAMETER :: M2N7FBxi = 1555 - INTEGER(IntKi), PARAMETER :: M2N8FBxi = 1556 - INTEGER(IntKi), PARAMETER :: M2N9FBxi = 1557 - INTEGER(IntKi), PARAMETER :: M3N1FBxi = 1558 - INTEGER(IntKi), PARAMETER :: M3N2FBxi = 1559 - INTEGER(IntKi), PARAMETER :: M3N3FBxi = 1560 - INTEGER(IntKi), PARAMETER :: M3N4FBxi = 1561 - INTEGER(IntKi), PARAMETER :: M3N5FBxi = 1562 - INTEGER(IntKi), PARAMETER :: M3N6FBxi = 1563 - INTEGER(IntKi), PARAMETER :: M3N7FBxi = 1564 - INTEGER(IntKi), PARAMETER :: M3N8FBxi = 1565 - INTEGER(IntKi), PARAMETER :: M3N9FBxi = 1566 - INTEGER(IntKi), PARAMETER :: M4N1FBxi = 1567 - INTEGER(IntKi), PARAMETER :: M4N2FBxi = 1568 - INTEGER(IntKi), PARAMETER :: M4N3FBxi = 1569 - INTEGER(IntKi), PARAMETER :: M4N4FBxi = 1570 - INTEGER(IntKi), PARAMETER :: M4N5FBxi = 1571 - INTEGER(IntKi), PARAMETER :: M4N6FBxi = 1572 - INTEGER(IntKi), PARAMETER :: M4N7FBxi = 1573 - INTEGER(IntKi), PARAMETER :: M4N8FBxi = 1574 - INTEGER(IntKi), PARAMETER :: M4N9FBxi = 1575 - INTEGER(IntKi), PARAMETER :: M5N1FBxi = 1576 - INTEGER(IntKi), PARAMETER :: M5N2FBxi = 1577 - INTEGER(IntKi), PARAMETER :: M5N3FBxi = 1578 - INTEGER(IntKi), PARAMETER :: M5N4FBxi = 1579 - INTEGER(IntKi), PARAMETER :: M5N5FBxi = 1580 - INTEGER(IntKi), PARAMETER :: M5N6FBxi = 1581 - INTEGER(IntKi), PARAMETER :: M5N7FBxi = 1582 - INTEGER(IntKi), PARAMETER :: M5N8FBxi = 1583 - INTEGER(IntKi), PARAMETER :: M5N9FBxi = 1584 - INTEGER(IntKi), PARAMETER :: M6N1FBxi = 1585 - INTEGER(IntKi), PARAMETER :: M6N2FBxi = 1586 - INTEGER(IntKi), PARAMETER :: M6N3FBxi = 1587 - INTEGER(IntKi), PARAMETER :: M6N4FBxi = 1588 - INTEGER(IntKi), PARAMETER :: M6N5FBxi = 1589 - INTEGER(IntKi), PARAMETER :: M6N6FBxi = 1590 - INTEGER(IntKi), PARAMETER :: M6N7FBxi = 1591 - INTEGER(IntKi), PARAMETER :: M6N8FBxi = 1592 - INTEGER(IntKi), PARAMETER :: M6N9FBxi = 1593 - INTEGER(IntKi), PARAMETER :: M7N1FBxi = 1594 - INTEGER(IntKi), PARAMETER :: M7N2FBxi = 1595 - INTEGER(IntKi), PARAMETER :: M7N3FBxi = 1596 - INTEGER(IntKi), PARAMETER :: M7N4FBxi = 1597 - INTEGER(IntKi), PARAMETER :: M7N5FBxi = 1598 - INTEGER(IntKi), PARAMETER :: M7N6FBxi = 1599 - INTEGER(IntKi), PARAMETER :: M7N7FBxi = 1600 - INTEGER(IntKi), PARAMETER :: M7N8FBxi = 1601 - INTEGER(IntKi), PARAMETER :: M7N9FBxi = 1602 - INTEGER(IntKi), PARAMETER :: M8N1FBxi = 1603 - INTEGER(IntKi), PARAMETER :: M8N2FBxi = 1604 - INTEGER(IntKi), PARAMETER :: M8N3FBxi = 1605 - INTEGER(IntKi), PARAMETER :: M8N4FBxi = 1606 - INTEGER(IntKi), PARAMETER :: M8N5FBxi = 1607 - INTEGER(IntKi), PARAMETER :: M8N6FBxi = 1608 - INTEGER(IntKi), PARAMETER :: M8N7FBxi = 1609 - INTEGER(IntKi), PARAMETER :: M8N8FBxi = 1610 - INTEGER(IntKi), PARAMETER :: M8N9FBxi = 1611 - INTEGER(IntKi), PARAMETER :: M9N1FBxi = 1612 - INTEGER(IntKi), PARAMETER :: M9N2FBxi = 1613 - INTEGER(IntKi), PARAMETER :: M9N3FBxi = 1614 - INTEGER(IntKi), PARAMETER :: M9N4FBxi = 1615 - INTEGER(IntKi), PARAMETER :: M9N5FBxi = 1616 - INTEGER(IntKi), PARAMETER :: M9N6FBxi = 1617 - INTEGER(IntKi), PARAMETER :: M9N7FBxi = 1618 - INTEGER(IntKi), PARAMETER :: M9N8FBxi = 1619 - INTEGER(IntKi), PARAMETER :: M9N9FBxi = 1620 - INTEGER(IntKi), PARAMETER :: M1N1FByi = 1621 - INTEGER(IntKi), PARAMETER :: M1N2FByi = 1622 - INTEGER(IntKi), PARAMETER :: M1N3FByi = 1623 - INTEGER(IntKi), PARAMETER :: M1N4FByi = 1624 - INTEGER(IntKi), PARAMETER :: M1N5FByi = 1625 - INTEGER(IntKi), PARAMETER :: M1N6FByi = 1626 - INTEGER(IntKi), PARAMETER :: M1N7FByi = 1627 - INTEGER(IntKi), PARAMETER :: M1N8FByi = 1628 - INTEGER(IntKi), PARAMETER :: M1N9FByi = 1629 - INTEGER(IntKi), PARAMETER :: M2N1FByi = 1630 - INTEGER(IntKi), PARAMETER :: M2N2FByi = 1631 - INTEGER(IntKi), PARAMETER :: M2N3FByi = 1632 - INTEGER(IntKi), PARAMETER :: M2N4FByi = 1633 - INTEGER(IntKi), PARAMETER :: M2N5FByi = 1634 - INTEGER(IntKi), PARAMETER :: M2N6FByi = 1635 - INTEGER(IntKi), PARAMETER :: M2N7FByi = 1636 - INTEGER(IntKi), PARAMETER :: M2N8FByi = 1637 - INTEGER(IntKi), PARAMETER :: M2N9FByi = 1638 - INTEGER(IntKi), PARAMETER :: M3N1FByi = 1639 - INTEGER(IntKi), PARAMETER :: M3N2FByi = 1640 - INTEGER(IntKi), PARAMETER :: M3N3FByi = 1641 - INTEGER(IntKi), PARAMETER :: M3N4FByi = 1642 - INTEGER(IntKi), PARAMETER :: M3N5FByi = 1643 - INTEGER(IntKi), PARAMETER :: M3N6FByi = 1644 - INTEGER(IntKi), PARAMETER :: M3N7FByi = 1645 - INTEGER(IntKi), PARAMETER :: M3N8FByi = 1646 - INTEGER(IntKi), PARAMETER :: M3N9FByi = 1647 - INTEGER(IntKi), PARAMETER :: M4N1FByi = 1648 - INTEGER(IntKi), PARAMETER :: M4N2FByi = 1649 - INTEGER(IntKi), PARAMETER :: M4N3FByi = 1650 - INTEGER(IntKi), PARAMETER :: M4N4FByi = 1651 - INTEGER(IntKi), PARAMETER :: M4N5FByi = 1652 - INTEGER(IntKi), PARAMETER :: M4N6FByi = 1653 - INTEGER(IntKi), PARAMETER :: M4N7FByi = 1654 - INTEGER(IntKi), PARAMETER :: M4N8FByi = 1655 - INTEGER(IntKi), PARAMETER :: M4N9FByi = 1656 - INTEGER(IntKi), PARAMETER :: M5N1FByi = 1657 - INTEGER(IntKi), PARAMETER :: M5N2FByi = 1658 - INTEGER(IntKi), PARAMETER :: M5N3FByi = 1659 - INTEGER(IntKi), PARAMETER :: M5N4FByi = 1660 - INTEGER(IntKi), PARAMETER :: M5N5FByi = 1661 - INTEGER(IntKi), PARAMETER :: M5N6FByi = 1662 - INTEGER(IntKi), PARAMETER :: M5N7FByi = 1663 - INTEGER(IntKi), PARAMETER :: M5N8FByi = 1664 - INTEGER(IntKi), PARAMETER :: M5N9FByi = 1665 - INTEGER(IntKi), PARAMETER :: M6N1FByi = 1666 - INTEGER(IntKi), PARAMETER :: M6N2FByi = 1667 - INTEGER(IntKi), PARAMETER :: M6N3FByi = 1668 - INTEGER(IntKi), PARAMETER :: M6N4FByi = 1669 - INTEGER(IntKi), PARAMETER :: M6N5FByi = 1670 - INTEGER(IntKi), PARAMETER :: M6N6FByi = 1671 - INTEGER(IntKi), PARAMETER :: M6N7FByi = 1672 - INTEGER(IntKi), PARAMETER :: M6N8FByi = 1673 - INTEGER(IntKi), PARAMETER :: M6N9FByi = 1674 - INTEGER(IntKi), PARAMETER :: M7N1FByi = 1675 - INTEGER(IntKi), PARAMETER :: M7N2FByi = 1676 - INTEGER(IntKi), PARAMETER :: M7N3FByi = 1677 - INTEGER(IntKi), PARAMETER :: M7N4FByi = 1678 - INTEGER(IntKi), PARAMETER :: M7N5FByi = 1679 - INTEGER(IntKi), PARAMETER :: M7N6FByi = 1680 - INTEGER(IntKi), PARAMETER :: M7N7FByi = 1681 - INTEGER(IntKi), PARAMETER :: M7N8FByi = 1682 - INTEGER(IntKi), PARAMETER :: M7N9FByi = 1683 - INTEGER(IntKi), PARAMETER :: M8N1FByi = 1684 - INTEGER(IntKi), PARAMETER :: M8N2FByi = 1685 - INTEGER(IntKi), PARAMETER :: M8N3FByi = 1686 - INTEGER(IntKi), PARAMETER :: M8N4FByi = 1687 - INTEGER(IntKi), PARAMETER :: M8N5FByi = 1688 - INTEGER(IntKi), PARAMETER :: M8N6FByi = 1689 - INTEGER(IntKi), PARAMETER :: M8N7FByi = 1690 - INTEGER(IntKi), PARAMETER :: M8N8FByi = 1691 - INTEGER(IntKi), PARAMETER :: M8N9FByi = 1692 - INTEGER(IntKi), PARAMETER :: M9N1FByi = 1693 - INTEGER(IntKi), PARAMETER :: M9N2FByi = 1694 - INTEGER(IntKi), PARAMETER :: M9N3FByi = 1695 - INTEGER(IntKi), PARAMETER :: M9N4FByi = 1696 - INTEGER(IntKi), PARAMETER :: M9N5FByi = 1697 - INTEGER(IntKi), PARAMETER :: M9N6FByi = 1698 - INTEGER(IntKi), PARAMETER :: M9N7FByi = 1699 - INTEGER(IntKi), PARAMETER :: M9N8FByi = 1700 - INTEGER(IntKi), PARAMETER :: M9N9FByi = 1701 - INTEGER(IntKi), PARAMETER :: M1N1FBzi = 1702 - INTEGER(IntKi), PARAMETER :: M1N2FBzi = 1703 - INTEGER(IntKi), PARAMETER :: M1N3FBzi = 1704 - INTEGER(IntKi), PARAMETER :: M1N4FBzi = 1705 - INTEGER(IntKi), PARAMETER :: M1N5FBzi = 1706 - INTEGER(IntKi), PARAMETER :: M1N6FBzi = 1707 - INTEGER(IntKi), PARAMETER :: M1N7FBzi = 1708 - INTEGER(IntKi), PARAMETER :: M1N8FBzi = 1709 - INTEGER(IntKi), PARAMETER :: M1N9FBzi = 1710 - INTEGER(IntKi), PARAMETER :: M2N1FBzi = 1711 - INTEGER(IntKi), PARAMETER :: M2N2FBzi = 1712 - INTEGER(IntKi), PARAMETER :: M2N3FBzi = 1713 - INTEGER(IntKi), PARAMETER :: M2N4FBzi = 1714 - INTEGER(IntKi), PARAMETER :: M2N5FBzi = 1715 - INTEGER(IntKi), PARAMETER :: M2N6FBzi = 1716 - INTEGER(IntKi), PARAMETER :: M2N7FBzi = 1717 - INTEGER(IntKi), PARAMETER :: M2N8FBzi = 1718 - INTEGER(IntKi), PARAMETER :: M2N9FBzi = 1719 - INTEGER(IntKi), PARAMETER :: M3N1FBzi = 1720 - INTEGER(IntKi), PARAMETER :: M3N2FBzi = 1721 - INTEGER(IntKi), PARAMETER :: M3N3FBzi = 1722 - INTEGER(IntKi), PARAMETER :: M3N4FBzi = 1723 - INTEGER(IntKi), PARAMETER :: M3N5FBzi = 1724 - INTEGER(IntKi), PARAMETER :: M3N6FBzi = 1725 - INTEGER(IntKi), PARAMETER :: M3N7FBzi = 1726 - INTEGER(IntKi), PARAMETER :: M3N8FBzi = 1727 - INTEGER(IntKi), PARAMETER :: M3N9FBzi = 1728 - INTEGER(IntKi), PARAMETER :: M4N1FBzi = 1729 - INTEGER(IntKi), PARAMETER :: M4N2FBzi = 1730 - INTEGER(IntKi), PARAMETER :: M4N3FBzi = 1731 - INTEGER(IntKi), PARAMETER :: M4N4FBzi = 1732 - INTEGER(IntKi), PARAMETER :: M4N5FBzi = 1733 - INTEGER(IntKi), PARAMETER :: M4N6FBzi = 1734 - INTEGER(IntKi), PARAMETER :: M4N7FBzi = 1735 - INTEGER(IntKi), PARAMETER :: M4N8FBzi = 1736 - INTEGER(IntKi), PARAMETER :: M4N9FBzi = 1737 - INTEGER(IntKi), PARAMETER :: M5N1FBzi = 1738 - INTEGER(IntKi), PARAMETER :: M5N2FBzi = 1739 - INTEGER(IntKi), PARAMETER :: M5N3FBzi = 1740 - INTEGER(IntKi), PARAMETER :: M5N4FBzi = 1741 - INTEGER(IntKi), PARAMETER :: M5N5FBzi = 1742 - INTEGER(IntKi), PARAMETER :: M5N6FBzi = 1743 - INTEGER(IntKi), PARAMETER :: M5N7FBzi = 1744 - INTEGER(IntKi), PARAMETER :: M5N8FBzi = 1745 - INTEGER(IntKi), PARAMETER :: M5N9FBzi = 1746 - INTEGER(IntKi), PARAMETER :: M6N1FBzi = 1747 - INTEGER(IntKi), PARAMETER :: M6N2FBzi = 1748 - INTEGER(IntKi), PARAMETER :: M6N3FBzi = 1749 - INTEGER(IntKi), PARAMETER :: M6N4FBzi = 1750 - INTEGER(IntKi), PARAMETER :: M6N5FBzi = 1751 - INTEGER(IntKi), PARAMETER :: M6N6FBzi = 1752 - INTEGER(IntKi), PARAMETER :: M6N7FBzi = 1753 - INTEGER(IntKi), PARAMETER :: M6N8FBzi = 1754 - INTEGER(IntKi), PARAMETER :: M6N9FBzi = 1755 - INTEGER(IntKi), PARAMETER :: M7N1FBzi = 1756 - INTEGER(IntKi), PARAMETER :: M7N2FBzi = 1757 - INTEGER(IntKi), PARAMETER :: M7N3FBzi = 1758 - INTEGER(IntKi), PARAMETER :: M7N4FBzi = 1759 - INTEGER(IntKi), PARAMETER :: M7N5FBzi = 1760 - INTEGER(IntKi), PARAMETER :: M7N6FBzi = 1761 - INTEGER(IntKi), PARAMETER :: M7N7FBzi = 1762 - INTEGER(IntKi), PARAMETER :: M7N8FBzi = 1763 - INTEGER(IntKi), PARAMETER :: M7N9FBzi = 1764 - INTEGER(IntKi), PARAMETER :: M8N1FBzi = 1765 - INTEGER(IntKi), PARAMETER :: M8N2FBzi = 1766 - INTEGER(IntKi), PARAMETER :: M8N3FBzi = 1767 - INTEGER(IntKi), PARAMETER :: M8N4FBzi = 1768 - INTEGER(IntKi), PARAMETER :: M8N5FBzi = 1769 - INTEGER(IntKi), PARAMETER :: M8N6FBzi = 1770 - INTEGER(IntKi), PARAMETER :: M8N7FBzi = 1771 - INTEGER(IntKi), PARAMETER :: M8N8FBzi = 1772 - INTEGER(IntKi), PARAMETER :: M8N9FBzi = 1773 - INTEGER(IntKi), PARAMETER :: M9N1FBzi = 1774 - INTEGER(IntKi), PARAMETER :: M9N2FBzi = 1775 - INTEGER(IntKi), PARAMETER :: M9N3FBzi = 1776 - INTEGER(IntKi), PARAMETER :: M9N4FBzi = 1777 - INTEGER(IntKi), PARAMETER :: M9N5FBzi = 1778 - INTEGER(IntKi), PARAMETER :: M9N6FBzi = 1779 - INTEGER(IntKi), PARAMETER :: M9N7FBzi = 1780 - INTEGER(IntKi), PARAMETER :: M9N8FBzi = 1781 - INTEGER(IntKi), PARAMETER :: M9N9FBzi = 1782 - INTEGER(IntKi), PARAMETER :: M1N1MBxi = 1783 - INTEGER(IntKi), PARAMETER :: M1N2MBxi = 1784 - INTEGER(IntKi), PARAMETER :: M1N3MBxi = 1785 - INTEGER(IntKi), PARAMETER :: M1N4MBxi = 1786 - INTEGER(IntKi), PARAMETER :: M1N5MBxi = 1787 - INTEGER(IntKi), PARAMETER :: M1N6MBxi = 1788 - INTEGER(IntKi), PARAMETER :: M1N7MBxi = 1789 - INTEGER(IntKi), PARAMETER :: M1N8MBxi = 1790 - INTEGER(IntKi), PARAMETER :: M1N9MBxi = 1791 - INTEGER(IntKi), PARAMETER :: M2N1MBxi = 1792 - INTEGER(IntKi), PARAMETER :: M2N2MBxi = 1793 - INTEGER(IntKi), PARAMETER :: M2N3MBxi = 1794 - INTEGER(IntKi), PARAMETER :: M2N4MBxi = 1795 - INTEGER(IntKi), PARAMETER :: M2N5MBxi = 1796 - INTEGER(IntKi), PARAMETER :: M2N6MBxi = 1797 - INTEGER(IntKi), PARAMETER :: M2N7MBxi = 1798 - INTEGER(IntKi), PARAMETER :: M2N8MBxi = 1799 - INTEGER(IntKi), PARAMETER :: M2N9MBxi = 1800 - INTEGER(IntKi), PARAMETER :: M3N1MBxi = 1801 - INTEGER(IntKi), PARAMETER :: M3N2MBxi = 1802 - INTEGER(IntKi), PARAMETER :: M3N3MBxi = 1803 - INTEGER(IntKi), PARAMETER :: M3N4MBxi = 1804 - INTEGER(IntKi), PARAMETER :: M3N5MBxi = 1805 - INTEGER(IntKi), PARAMETER :: M3N6MBxi = 1806 - INTEGER(IntKi), PARAMETER :: M3N7MBxi = 1807 - INTEGER(IntKi), PARAMETER :: M3N8MBxi = 1808 - INTEGER(IntKi), PARAMETER :: M3N9MBxi = 1809 - INTEGER(IntKi), PARAMETER :: M4N1MBxi = 1810 - INTEGER(IntKi), PARAMETER :: M4N2MBxi = 1811 - INTEGER(IntKi), PARAMETER :: M4N3MBxi = 1812 - INTEGER(IntKi), PARAMETER :: M4N4MBxi = 1813 - INTEGER(IntKi), PARAMETER :: M4N5MBxi = 1814 - INTEGER(IntKi), PARAMETER :: M4N6MBxi = 1815 - INTEGER(IntKi), PARAMETER :: M4N7MBxi = 1816 - INTEGER(IntKi), PARAMETER :: M4N8MBxi = 1817 - INTEGER(IntKi), PARAMETER :: M4N9MBxi = 1818 - INTEGER(IntKi), PARAMETER :: M5N1MBxi = 1819 - INTEGER(IntKi), PARAMETER :: M5N2MBxi = 1820 - INTEGER(IntKi), PARAMETER :: M5N3MBxi = 1821 - INTEGER(IntKi), PARAMETER :: M5N4MBxi = 1822 - INTEGER(IntKi), PARAMETER :: M5N5MBxi = 1823 - INTEGER(IntKi), PARAMETER :: M5N6MBxi = 1824 - INTEGER(IntKi), PARAMETER :: M5N7MBxi = 1825 - INTEGER(IntKi), PARAMETER :: M5N8MBxi = 1826 - INTEGER(IntKi), PARAMETER :: M5N9MBxi = 1827 - INTEGER(IntKi), PARAMETER :: M6N1MBxi = 1828 - INTEGER(IntKi), PARAMETER :: M6N2MBxi = 1829 - INTEGER(IntKi), PARAMETER :: M6N3MBxi = 1830 - INTEGER(IntKi), PARAMETER :: M6N4MBxi = 1831 - INTEGER(IntKi), PARAMETER :: M6N5MBxi = 1832 - INTEGER(IntKi), PARAMETER :: M6N6MBxi = 1833 - INTEGER(IntKi), PARAMETER :: M6N7MBxi = 1834 - INTEGER(IntKi), PARAMETER :: M6N8MBxi = 1835 - INTEGER(IntKi), PARAMETER :: M6N9MBxi = 1836 - INTEGER(IntKi), PARAMETER :: M7N1MBxi = 1837 - INTEGER(IntKi), PARAMETER :: M7N2MBxi = 1838 - INTEGER(IntKi), PARAMETER :: M7N3MBxi = 1839 - INTEGER(IntKi), PARAMETER :: M7N4MBxi = 1840 - INTEGER(IntKi), PARAMETER :: M7N5MBxi = 1841 - INTEGER(IntKi), PARAMETER :: M7N6MBxi = 1842 - INTEGER(IntKi), PARAMETER :: M7N7MBxi = 1843 - INTEGER(IntKi), PARAMETER :: M7N8MBxi = 1844 - INTEGER(IntKi), PARAMETER :: M7N9MBxi = 1845 - INTEGER(IntKi), PARAMETER :: M8N1MBxi = 1846 - INTEGER(IntKi), PARAMETER :: M8N2MBxi = 1847 - INTEGER(IntKi), PARAMETER :: M8N3MBxi = 1848 - INTEGER(IntKi), PARAMETER :: M8N4MBxi = 1849 - INTEGER(IntKi), PARAMETER :: M8N5MBxi = 1850 - INTEGER(IntKi), PARAMETER :: M8N6MBxi = 1851 - INTEGER(IntKi), PARAMETER :: M8N7MBxi = 1852 - INTEGER(IntKi), PARAMETER :: M8N8MBxi = 1853 - INTEGER(IntKi), PARAMETER :: M8N9MBxi = 1854 - INTEGER(IntKi), PARAMETER :: M9N1MBxi = 1855 - INTEGER(IntKi), PARAMETER :: M9N2MBxi = 1856 - INTEGER(IntKi), PARAMETER :: M9N3MBxi = 1857 - INTEGER(IntKi), PARAMETER :: M9N4MBxi = 1858 - INTEGER(IntKi), PARAMETER :: M9N5MBxi = 1859 - INTEGER(IntKi), PARAMETER :: M9N6MBxi = 1860 - INTEGER(IntKi), PARAMETER :: M9N7MBxi = 1861 - INTEGER(IntKi), PARAMETER :: M9N8MBxi = 1862 - INTEGER(IntKi), PARAMETER :: M9N9MBxi = 1863 - INTEGER(IntKi), PARAMETER :: M1N1MByi = 1864 - INTEGER(IntKi), PARAMETER :: M1N2MByi = 1865 - INTEGER(IntKi), PARAMETER :: M1N3MByi = 1866 - INTEGER(IntKi), PARAMETER :: M1N4MByi = 1867 - INTEGER(IntKi), PARAMETER :: M1N5MByi = 1868 - INTEGER(IntKi), PARAMETER :: M1N6MByi = 1869 - INTEGER(IntKi), PARAMETER :: M1N7MByi = 1870 - INTEGER(IntKi), PARAMETER :: M1N8MByi = 1871 - INTEGER(IntKi), PARAMETER :: M1N9MByi = 1872 - INTEGER(IntKi), PARAMETER :: M2N1MByi = 1873 - INTEGER(IntKi), PARAMETER :: M2N2MByi = 1874 - INTEGER(IntKi), PARAMETER :: M2N3MByi = 1875 - INTEGER(IntKi), PARAMETER :: M2N4MByi = 1876 - INTEGER(IntKi), PARAMETER :: M2N5MByi = 1877 - INTEGER(IntKi), PARAMETER :: M2N6MByi = 1878 - INTEGER(IntKi), PARAMETER :: M2N7MByi = 1879 - INTEGER(IntKi), PARAMETER :: M2N8MByi = 1880 - INTEGER(IntKi), PARAMETER :: M2N9MByi = 1881 - INTEGER(IntKi), PARAMETER :: M3N1MByi = 1882 - INTEGER(IntKi), PARAMETER :: M3N2MByi = 1883 - INTEGER(IntKi), PARAMETER :: M3N3MByi = 1884 - INTEGER(IntKi), PARAMETER :: M3N4MByi = 1885 - INTEGER(IntKi), PARAMETER :: M3N5MByi = 1886 - INTEGER(IntKi), PARAMETER :: M3N6MByi = 1887 - INTEGER(IntKi), PARAMETER :: M3N7MByi = 1888 - INTEGER(IntKi), PARAMETER :: M3N8MByi = 1889 - INTEGER(IntKi), PARAMETER :: M3N9MByi = 1890 - INTEGER(IntKi), PARAMETER :: M4N1MByi = 1891 - INTEGER(IntKi), PARAMETER :: M4N2MByi = 1892 - INTEGER(IntKi), PARAMETER :: M4N3MByi = 1893 - INTEGER(IntKi), PARAMETER :: M4N4MByi = 1894 - INTEGER(IntKi), PARAMETER :: M4N5MByi = 1895 - INTEGER(IntKi), PARAMETER :: M4N6MByi = 1896 - INTEGER(IntKi), PARAMETER :: M4N7MByi = 1897 - INTEGER(IntKi), PARAMETER :: M4N8MByi = 1898 - INTEGER(IntKi), PARAMETER :: M4N9MByi = 1899 - INTEGER(IntKi), PARAMETER :: M5N1MByi = 1900 - INTEGER(IntKi), PARAMETER :: M5N2MByi = 1901 - INTEGER(IntKi), PARAMETER :: M5N3MByi = 1902 - INTEGER(IntKi), PARAMETER :: M5N4MByi = 1903 - INTEGER(IntKi), PARAMETER :: M5N5MByi = 1904 - INTEGER(IntKi), PARAMETER :: M5N6MByi = 1905 - INTEGER(IntKi), PARAMETER :: M5N7MByi = 1906 - INTEGER(IntKi), PARAMETER :: M5N8MByi = 1907 - INTEGER(IntKi), PARAMETER :: M5N9MByi = 1908 - INTEGER(IntKi), PARAMETER :: M6N1MByi = 1909 - INTEGER(IntKi), PARAMETER :: M6N2MByi = 1910 - INTEGER(IntKi), PARAMETER :: M6N3MByi = 1911 - INTEGER(IntKi), PARAMETER :: M6N4MByi = 1912 - INTEGER(IntKi), PARAMETER :: M6N5MByi = 1913 - INTEGER(IntKi), PARAMETER :: M6N6MByi = 1914 - INTEGER(IntKi), PARAMETER :: M6N7MByi = 1915 - INTEGER(IntKi), PARAMETER :: M6N8MByi = 1916 - INTEGER(IntKi), PARAMETER :: M6N9MByi = 1917 - INTEGER(IntKi), PARAMETER :: M7N1MByi = 1918 - INTEGER(IntKi), PARAMETER :: M7N2MByi = 1919 - INTEGER(IntKi), PARAMETER :: M7N3MByi = 1920 - INTEGER(IntKi), PARAMETER :: M7N4MByi = 1921 - INTEGER(IntKi), PARAMETER :: M7N5MByi = 1922 - INTEGER(IntKi), PARAMETER :: M7N6MByi = 1923 - INTEGER(IntKi), PARAMETER :: M7N7MByi = 1924 - INTEGER(IntKi), PARAMETER :: M7N8MByi = 1925 - INTEGER(IntKi), PARAMETER :: M7N9MByi = 1926 - INTEGER(IntKi), PARAMETER :: M8N1MByi = 1927 - INTEGER(IntKi), PARAMETER :: M8N2MByi = 1928 - INTEGER(IntKi), PARAMETER :: M8N3MByi = 1929 - INTEGER(IntKi), PARAMETER :: M8N4MByi = 1930 - INTEGER(IntKi), PARAMETER :: M8N5MByi = 1931 - INTEGER(IntKi), PARAMETER :: M8N6MByi = 1932 - INTEGER(IntKi), PARAMETER :: M8N7MByi = 1933 - INTEGER(IntKi), PARAMETER :: M8N8MByi = 1934 - INTEGER(IntKi), PARAMETER :: M8N9MByi = 1935 - INTEGER(IntKi), PARAMETER :: M9N1MByi = 1936 - INTEGER(IntKi), PARAMETER :: M9N2MByi = 1937 - INTEGER(IntKi), PARAMETER :: M9N3MByi = 1938 - INTEGER(IntKi), PARAMETER :: M9N4MByi = 1939 - INTEGER(IntKi), PARAMETER :: M9N5MByi = 1940 - INTEGER(IntKi), PARAMETER :: M9N6MByi = 1941 - INTEGER(IntKi), PARAMETER :: M9N7MByi = 1942 - INTEGER(IntKi), PARAMETER :: M9N8MByi = 1943 - INTEGER(IntKi), PARAMETER :: M9N9MByi = 1944 - INTEGER(IntKi), PARAMETER :: M1N1MBzi = 1945 - INTEGER(IntKi), PARAMETER :: M1N2MBzi = 1946 - INTEGER(IntKi), PARAMETER :: M1N3MBzi = 1947 - INTEGER(IntKi), PARAMETER :: M1N4MBzi = 1948 - INTEGER(IntKi), PARAMETER :: M1N5MBzi = 1949 - INTEGER(IntKi), PARAMETER :: M1N6MBzi = 1950 - INTEGER(IntKi), PARAMETER :: M1N7MBzi = 1951 - INTEGER(IntKi), PARAMETER :: M1N8MBzi = 1952 - INTEGER(IntKi), PARAMETER :: M1N9MBzi = 1953 - INTEGER(IntKi), PARAMETER :: M2N1MBzi = 1954 - INTEGER(IntKi), PARAMETER :: M2N2MBzi = 1955 - INTEGER(IntKi), PARAMETER :: M2N3MBzi = 1956 - INTEGER(IntKi), PARAMETER :: M2N4MBzi = 1957 - INTEGER(IntKi), PARAMETER :: M2N5MBzi = 1958 - INTEGER(IntKi), PARAMETER :: M2N6MBzi = 1959 - INTEGER(IntKi), PARAMETER :: M2N7MBzi = 1960 - INTEGER(IntKi), PARAMETER :: M2N8MBzi = 1961 - INTEGER(IntKi), PARAMETER :: M2N9MBzi = 1962 - INTEGER(IntKi), PARAMETER :: M3N1MBzi = 1963 - INTEGER(IntKi), PARAMETER :: M3N2MBzi = 1964 - INTEGER(IntKi), PARAMETER :: M3N3MBzi = 1965 - INTEGER(IntKi), PARAMETER :: M3N4MBzi = 1966 - INTEGER(IntKi), PARAMETER :: M3N5MBzi = 1967 - INTEGER(IntKi), PARAMETER :: M3N6MBzi = 1968 - INTEGER(IntKi), PARAMETER :: M3N7MBzi = 1969 - INTEGER(IntKi), PARAMETER :: M3N8MBzi = 1970 - INTEGER(IntKi), PARAMETER :: M3N9MBzi = 1971 - INTEGER(IntKi), PARAMETER :: M4N1MBzi = 1972 - INTEGER(IntKi), PARAMETER :: M4N2MBzi = 1973 - INTEGER(IntKi), PARAMETER :: M4N3MBzi = 1974 - INTEGER(IntKi), PARAMETER :: M4N4MBzi = 1975 - INTEGER(IntKi), PARAMETER :: M4N5MBzi = 1976 - INTEGER(IntKi), PARAMETER :: M4N6MBzi = 1977 - INTEGER(IntKi), PARAMETER :: M4N7MBzi = 1978 - INTEGER(IntKi), PARAMETER :: M4N8MBzi = 1979 - INTEGER(IntKi), PARAMETER :: M4N9MBzi = 1980 - INTEGER(IntKi), PARAMETER :: M5N1MBzi = 1981 - INTEGER(IntKi), PARAMETER :: M5N2MBzi = 1982 - INTEGER(IntKi), PARAMETER :: M5N3MBzi = 1983 - INTEGER(IntKi), PARAMETER :: M5N4MBzi = 1984 - INTEGER(IntKi), PARAMETER :: M5N5MBzi = 1985 - INTEGER(IntKi), PARAMETER :: M5N6MBzi = 1986 - INTEGER(IntKi), PARAMETER :: M5N7MBzi = 1987 - INTEGER(IntKi), PARAMETER :: M5N8MBzi = 1988 - INTEGER(IntKi), PARAMETER :: M5N9MBzi = 1989 - INTEGER(IntKi), PARAMETER :: M6N1MBzi = 1990 - INTEGER(IntKi), PARAMETER :: M6N2MBzi = 1991 - INTEGER(IntKi), PARAMETER :: M6N3MBzi = 1992 - INTEGER(IntKi), PARAMETER :: M6N4MBzi = 1993 - INTEGER(IntKi), PARAMETER :: M6N5MBzi = 1994 - INTEGER(IntKi), PARAMETER :: M6N6MBzi = 1995 - INTEGER(IntKi), PARAMETER :: M6N7MBzi = 1996 - INTEGER(IntKi), PARAMETER :: M6N8MBzi = 1997 - INTEGER(IntKi), PARAMETER :: M6N9MBzi = 1998 - INTEGER(IntKi), PARAMETER :: M7N1MBzi = 1999 - INTEGER(IntKi), PARAMETER :: M7N2MBzi = 2000 - INTEGER(IntKi), PARAMETER :: M7N3MBzi = 2001 - INTEGER(IntKi), PARAMETER :: M7N4MBzi = 2002 - INTEGER(IntKi), PARAMETER :: M7N5MBzi = 2003 - INTEGER(IntKi), PARAMETER :: M7N6MBzi = 2004 - INTEGER(IntKi), PARAMETER :: M7N7MBzi = 2005 - INTEGER(IntKi), PARAMETER :: M7N8MBzi = 2006 - INTEGER(IntKi), PARAMETER :: M7N9MBzi = 2007 - INTEGER(IntKi), PARAMETER :: M8N1MBzi = 2008 - INTEGER(IntKi), PARAMETER :: M8N2MBzi = 2009 - INTEGER(IntKi), PARAMETER :: M8N3MBzi = 2010 - INTEGER(IntKi), PARAMETER :: M8N4MBzi = 2011 - INTEGER(IntKi), PARAMETER :: M8N5MBzi = 2012 - INTEGER(IntKi), PARAMETER :: M8N6MBzi = 2013 - INTEGER(IntKi), PARAMETER :: M8N7MBzi = 2014 - INTEGER(IntKi), PARAMETER :: M8N8MBzi = 2015 - INTEGER(IntKi), PARAMETER :: M8N9MBzi = 2016 - INTEGER(IntKi), PARAMETER :: M9N1MBzi = 2017 - INTEGER(IntKi), PARAMETER :: M9N2MBzi = 2018 - INTEGER(IntKi), PARAMETER :: M9N3MBzi = 2019 - INTEGER(IntKi), PARAMETER :: M9N4MBzi = 2020 - INTEGER(IntKi), PARAMETER :: M9N5MBzi = 2021 - INTEGER(IntKi), PARAMETER :: M9N6MBzi = 2022 - INTEGER(IntKi), PARAMETER :: M9N7MBzi = 2023 - INTEGER(IntKi), PARAMETER :: M9N8MBzi = 2024 - INTEGER(IntKi), PARAMETER :: M9N9MBzi = 2025 - INTEGER(IntKi), PARAMETER :: M1N1FBFxi = 2026 - INTEGER(IntKi), PARAMETER :: M1N2FBFxi = 2027 - INTEGER(IntKi), PARAMETER :: M1N3FBFxi = 2028 - INTEGER(IntKi), PARAMETER :: M1N4FBFxi = 2029 - INTEGER(IntKi), PARAMETER :: M1N5FBFxi = 2030 - INTEGER(IntKi), PARAMETER :: M1N6FBFxi = 2031 - INTEGER(IntKi), PARAMETER :: M1N7FBFxi = 2032 - INTEGER(IntKi), PARAMETER :: M1N8FBFxi = 2033 - INTEGER(IntKi), PARAMETER :: M1N9FBFxi = 2034 - INTEGER(IntKi), PARAMETER :: M2N1FBFxi = 2035 - INTEGER(IntKi), PARAMETER :: M2N2FBFxi = 2036 - INTEGER(IntKi), PARAMETER :: M2N3FBFxi = 2037 - INTEGER(IntKi), PARAMETER :: M2N4FBFxi = 2038 - INTEGER(IntKi), PARAMETER :: M2N5FBFxi = 2039 - INTEGER(IntKi), PARAMETER :: M2N6FBFxi = 2040 - INTEGER(IntKi), PARAMETER :: M2N7FBFxi = 2041 - INTEGER(IntKi), PARAMETER :: M2N8FBFxi = 2042 - INTEGER(IntKi), PARAMETER :: M2N9FBFxi = 2043 - INTEGER(IntKi), PARAMETER :: M3N1FBFxi = 2044 - INTEGER(IntKi), PARAMETER :: M3N2FBFxi = 2045 - INTEGER(IntKi), PARAMETER :: M3N3FBFxi = 2046 - INTEGER(IntKi), PARAMETER :: M3N4FBFxi = 2047 - INTEGER(IntKi), PARAMETER :: M3N5FBFxi = 2048 - INTEGER(IntKi), PARAMETER :: M3N6FBFxi = 2049 - INTEGER(IntKi), PARAMETER :: M3N7FBFxi = 2050 - INTEGER(IntKi), PARAMETER :: M3N8FBFxi = 2051 - INTEGER(IntKi), PARAMETER :: M3N9FBFxi = 2052 - INTEGER(IntKi), PARAMETER :: M4N1FBFxi = 2053 - INTEGER(IntKi), PARAMETER :: M4N2FBFxi = 2054 - INTEGER(IntKi), PARAMETER :: M4N3FBFxi = 2055 - INTEGER(IntKi), PARAMETER :: M4N4FBFxi = 2056 - INTEGER(IntKi), PARAMETER :: M4N5FBFxi = 2057 - INTEGER(IntKi), PARAMETER :: M4N6FBFxi = 2058 - INTEGER(IntKi), PARAMETER :: M4N7FBFxi = 2059 - INTEGER(IntKi), PARAMETER :: M4N8FBFxi = 2060 - INTEGER(IntKi), PARAMETER :: M4N9FBFxi = 2061 - INTEGER(IntKi), PARAMETER :: M5N1FBFxi = 2062 - INTEGER(IntKi), PARAMETER :: M5N2FBFxi = 2063 - INTEGER(IntKi), PARAMETER :: M5N3FBFxi = 2064 - INTEGER(IntKi), PARAMETER :: M5N4FBFxi = 2065 - INTEGER(IntKi), PARAMETER :: M5N5FBFxi = 2066 - INTEGER(IntKi), PARAMETER :: M5N6FBFxi = 2067 - INTEGER(IntKi), PARAMETER :: M5N7FBFxi = 2068 - INTEGER(IntKi), PARAMETER :: M5N8FBFxi = 2069 - INTEGER(IntKi), PARAMETER :: M5N9FBFxi = 2070 - INTEGER(IntKi), PARAMETER :: M6N1FBFxi = 2071 - INTEGER(IntKi), PARAMETER :: M6N2FBFxi = 2072 - INTEGER(IntKi), PARAMETER :: M6N3FBFxi = 2073 - INTEGER(IntKi), PARAMETER :: M6N4FBFxi = 2074 - INTEGER(IntKi), PARAMETER :: M6N5FBFxi = 2075 - INTEGER(IntKi), PARAMETER :: M6N6FBFxi = 2076 - INTEGER(IntKi), PARAMETER :: M6N7FBFxi = 2077 - INTEGER(IntKi), PARAMETER :: M6N8FBFxi = 2078 - INTEGER(IntKi), PARAMETER :: M6N9FBFxi = 2079 - INTEGER(IntKi), PARAMETER :: M7N1FBFxi = 2080 - INTEGER(IntKi), PARAMETER :: M7N2FBFxi = 2081 - INTEGER(IntKi), PARAMETER :: M7N3FBFxi = 2082 - INTEGER(IntKi), PARAMETER :: M7N4FBFxi = 2083 - INTEGER(IntKi), PARAMETER :: M7N5FBFxi = 2084 - INTEGER(IntKi), PARAMETER :: M7N6FBFxi = 2085 - INTEGER(IntKi), PARAMETER :: M7N7FBFxi = 2086 - INTEGER(IntKi), PARAMETER :: M7N8FBFxi = 2087 - INTEGER(IntKi), PARAMETER :: M7N9FBFxi = 2088 - INTEGER(IntKi), PARAMETER :: M8N1FBFxi = 2089 - INTEGER(IntKi), PARAMETER :: M8N2FBFxi = 2090 - INTEGER(IntKi), PARAMETER :: M8N3FBFxi = 2091 - INTEGER(IntKi), PARAMETER :: M8N4FBFxi = 2092 - INTEGER(IntKi), PARAMETER :: M8N5FBFxi = 2093 - INTEGER(IntKi), PARAMETER :: M8N6FBFxi = 2094 - INTEGER(IntKi), PARAMETER :: M8N7FBFxi = 2095 - INTEGER(IntKi), PARAMETER :: M8N8FBFxi = 2096 - INTEGER(IntKi), PARAMETER :: M8N9FBFxi = 2097 - INTEGER(IntKi), PARAMETER :: M9N1FBFxi = 2098 - INTEGER(IntKi), PARAMETER :: M9N2FBFxi = 2099 - INTEGER(IntKi), PARAMETER :: M9N3FBFxi = 2100 - INTEGER(IntKi), PARAMETER :: M9N4FBFxi = 2101 - INTEGER(IntKi), PARAMETER :: M9N5FBFxi = 2102 - INTEGER(IntKi), PARAMETER :: M9N6FBFxi = 2103 - INTEGER(IntKi), PARAMETER :: M9N7FBFxi = 2104 - INTEGER(IntKi), PARAMETER :: M9N8FBFxi = 2105 - INTEGER(IntKi), PARAMETER :: M9N9FBFxi = 2106 - INTEGER(IntKi), PARAMETER :: M1N1FBFyi = 2107 - INTEGER(IntKi), PARAMETER :: M1N2FBFyi = 2108 - INTEGER(IntKi), PARAMETER :: M1N3FBFyi = 2109 - INTEGER(IntKi), PARAMETER :: M1N4FBFyi = 2110 - INTEGER(IntKi), PARAMETER :: M1N5FBFyi = 2111 - INTEGER(IntKi), PARAMETER :: M1N6FBFyi = 2112 - INTEGER(IntKi), PARAMETER :: M1N7FBFyi = 2113 - INTEGER(IntKi), PARAMETER :: M1N8FBFyi = 2114 - INTEGER(IntKi), PARAMETER :: M1N9FBFyi = 2115 - INTEGER(IntKi), PARAMETER :: M2N1FBFyi = 2116 - INTEGER(IntKi), PARAMETER :: M2N2FBFyi = 2117 - INTEGER(IntKi), PARAMETER :: M2N3FBFyi = 2118 - INTEGER(IntKi), PARAMETER :: M2N4FBFyi = 2119 - INTEGER(IntKi), PARAMETER :: M2N5FBFyi = 2120 - INTEGER(IntKi), PARAMETER :: M2N6FBFyi = 2121 - INTEGER(IntKi), PARAMETER :: M2N7FBFyi = 2122 - INTEGER(IntKi), PARAMETER :: M2N8FBFyi = 2123 - INTEGER(IntKi), PARAMETER :: M2N9FBFyi = 2124 - INTEGER(IntKi), PARAMETER :: M3N1FBFyi = 2125 - INTEGER(IntKi), PARAMETER :: M3N2FBFyi = 2126 - INTEGER(IntKi), PARAMETER :: M3N3FBFyi = 2127 - INTEGER(IntKi), PARAMETER :: M3N4FBFyi = 2128 - INTEGER(IntKi), PARAMETER :: M3N5FBFyi = 2129 - INTEGER(IntKi), PARAMETER :: M3N6FBFyi = 2130 - INTEGER(IntKi), PARAMETER :: M3N7FBFyi = 2131 - INTEGER(IntKi), PARAMETER :: M3N8FBFyi = 2132 - INTEGER(IntKi), PARAMETER :: M3N9FBFyi = 2133 - INTEGER(IntKi), PARAMETER :: M4N1FBFyi = 2134 - INTEGER(IntKi), PARAMETER :: M4N2FBFyi = 2135 - INTEGER(IntKi), PARAMETER :: M4N3FBFyi = 2136 - INTEGER(IntKi), PARAMETER :: M4N4FBFyi = 2137 - INTEGER(IntKi), PARAMETER :: M4N5FBFyi = 2138 - INTEGER(IntKi), PARAMETER :: M4N6FBFyi = 2139 - INTEGER(IntKi), PARAMETER :: M4N7FBFyi = 2140 - INTEGER(IntKi), PARAMETER :: M4N8FBFyi = 2141 - INTEGER(IntKi), PARAMETER :: M4N9FBFyi = 2142 - INTEGER(IntKi), PARAMETER :: M5N1FBFyi = 2143 - INTEGER(IntKi), PARAMETER :: M5N2FBFyi = 2144 - INTEGER(IntKi), PARAMETER :: M5N3FBFyi = 2145 - INTEGER(IntKi), PARAMETER :: M5N4FBFyi = 2146 - INTEGER(IntKi), PARAMETER :: M5N5FBFyi = 2147 - INTEGER(IntKi), PARAMETER :: M5N6FBFyi = 2148 - INTEGER(IntKi), PARAMETER :: M5N7FBFyi = 2149 - INTEGER(IntKi), PARAMETER :: M5N8FBFyi = 2150 - INTEGER(IntKi), PARAMETER :: M5N9FBFyi = 2151 - INTEGER(IntKi), PARAMETER :: M6N1FBFyi = 2152 - INTEGER(IntKi), PARAMETER :: M6N2FBFyi = 2153 - INTEGER(IntKi), PARAMETER :: M6N3FBFyi = 2154 - INTEGER(IntKi), PARAMETER :: M6N4FBFyi = 2155 - INTEGER(IntKi), PARAMETER :: M6N5FBFyi = 2156 - INTEGER(IntKi), PARAMETER :: M6N6FBFyi = 2157 - INTEGER(IntKi), PARAMETER :: M6N7FBFyi = 2158 - INTEGER(IntKi), PARAMETER :: M6N8FBFyi = 2159 - INTEGER(IntKi), PARAMETER :: M6N9FBFyi = 2160 - INTEGER(IntKi), PARAMETER :: M7N1FBFyi = 2161 - INTEGER(IntKi), PARAMETER :: M7N2FBFyi = 2162 - INTEGER(IntKi), PARAMETER :: M7N3FBFyi = 2163 - INTEGER(IntKi), PARAMETER :: M7N4FBFyi = 2164 - INTEGER(IntKi), PARAMETER :: M7N5FBFyi = 2165 - INTEGER(IntKi), PARAMETER :: M7N6FBFyi = 2166 - INTEGER(IntKi), PARAMETER :: M7N7FBFyi = 2167 - INTEGER(IntKi), PARAMETER :: M7N8FBFyi = 2168 - INTEGER(IntKi), PARAMETER :: M7N9FBFyi = 2169 - INTEGER(IntKi), PARAMETER :: M8N1FBFyi = 2170 - INTEGER(IntKi), PARAMETER :: M8N2FBFyi = 2171 - INTEGER(IntKi), PARAMETER :: M8N3FBFyi = 2172 - INTEGER(IntKi), PARAMETER :: M8N4FBFyi = 2173 - INTEGER(IntKi), PARAMETER :: M8N5FBFyi = 2174 - INTEGER(IntKi), PARAMETER :: M8N6FBFyi = 2175 - INTEGER(IntKi), PARAMETER :: M8N7FBFyi = 2176 - INTEGER(IntKi), PARAMETER :: M8N8FBFyi = 2177 - INTEGER(IntKi), PARAMETER :: M8N9FBFyi = 2178 - INTEGER(IntKi), PARAMETER :: M9N1FBFyi = 2179 - INTEGER(IntKi), PARAMETER :: M9N2FBFyi = 2180 - INTEGER(IntKi), PARAMETER :: M9N3FBFyi = 2181 - INTEGER(IntKi), PARAMETER :: M9N4FBFyi = 2182 - INTEGER(IntKi), PARAMETER :: M9N5FBFyi = 2183 - INTEGER(IntKi), PARAMETER :: M9N6FBFyi = 2184 - INTEGER(IntKi), PARAMETER :: M9N7FBFyi = 2185 - INTEGER(IntKi), PARAMETER :: M9N8FBFyi = 2186 - INTEGER(IntKi), PARAMETER :: M9N9FBFyi = 2187 - INTEGER(IntKi), PARAMETER :: M1N1FBFzi = 2188 - INTEGER(IntKi), PARAMETER :: M1N2FBFzi = 2189 - INTEGER(IntKi), PARAMETER :: M1N3FBFzi = 2190 - INTEGER(IntKi), PARAMETER :: M1N4FBFzi = 2191 - INTEGER(IntKi), PARAMETER :: M1N5FBFzi = 2192 - INTEGER(IntKi), PARAMETER :: M1N6FBFzi = 2193 - INTEGER(IntKi), PARAMETER :: M1N7FBFzi = 2194 - INTEGER(IntKi), PARAMETER :: M1N8FBFzi = 2195 - INTEGER(IntKi), PARAMETER :: M1N9FBFzi = 2196 - INTEGER(IntKi), PARAMETER :: M2N1FBFzi = 2197 - INTEGER(IntKi), PARAMETER :: M2N2FBFzi = 2198 - INTEGER(IntKi), PARAMETER :: M2N3FBFzi = 2199 - INTEGER(IntKi), PARAMETER :: M2N4FBFzi = 2200 - INTEGER(IntKi), PARAMETER :: M2N5FBFzi = 2201 - INTEGER(IntKi), PARAMETER :: M2N6FBFzi = 2202 - INTEGER(IntKi), PARAMETER :: M2N7FBFzi = 2203 - INTEGER(IntKi), PARAMETER :: M2N8FBFzi = 2204 - INTEGER(IntKi), PARAMETER :: M2N9FBFzi = 2205 - INTEGER(IntKi), PARAMETER :: M3N1FBFzi = 2206 - INTEGER(IntKi), PARAMETER :: M3N2FBFzi = 2207 - INTEGER(IntKi), PARAMETER :: M3N3FBFzi = 2208 - INTEGER(IntKi), PARAMETER :: M3N4FBFzi = 2209 - INTEGER(IntKi), PARAMETER :: M3N5FBFzi = 2210 - INTEGER(IntKi), PARAMETER :: M3N6FBFzi = 2211 - INTEGER(IntKi), PARAMETER :: M3N7FBFzi = 2212 - INTEGER(IntKi), PARAMETER :: M3N8FBFzi = 2213 - INTEGER(IntKi), PARAMETER :: M3N9FBFzi = 2214 - INTEGER(IntKi), PARAMETER :: M4N1FBFzi = 2215 - INTEGER(IntKi), PARAMETER :: M4N2FBFzi = 2216 - INTEGER(IntKi), PARAMETER :: M4N3FBFzi = 2217 - INTEGER(IntKi), PARAMETER :: M4N4FBFzi = 2218 - INTEGER(IntKi), PARAMETER :: M4N5FBFzi = 2219 - INTEGER(IntKi), PARAMETER :: M4N6FBFzi = 2220 - INTEGER(IntKi), PARAMETER :: M4N7FBFzi = 2221 - INTEGER(IntKi), PARAMETER :: M4N8FBFzi = 2222 - INTEGER(IntKi), PARAMETER :: M4N9FBFzi = 2223 - INTEGER(IntKi), PARAMETER :: M5N1FBFzi = 2224 - INTEGER(IntKi), PARAMETER :: M5N2FBFzi = 2225 - INTEGER(IntKi), PARAMETER :: M5N3FBFzi = 2226 - INTEGER(IntKi), PARAMETER :: M5N4FBFzi = 2227 - INTEGER(IntKi), PARAMETER :: M5N5FBFzi = 2228 - INTEGER(IntKi), PARAMETER :: M5N6FBFzi = 2229 - INTEGER(IntKi), PARAMETER :: M5N7FBFzi = 2230 - INTEGER(IntKi), PARAMETER :: M5N8FBFzi = 2231 - INTEGER(IntKi), PARAMETER :: M5N9FBFzi = 2232 - INTEGER(IntKi), PARAMETER :: M6N1FBFzi = 2233 - INTEGER(IntKi), PARAMETER :: M6N2FBFzi = 2234 - INTEGER(IntKi), PARAMETER :: M6N3FBFzi = 2235 - INTEGER(IntKi), PARAMETER :: M6N4FBFzi = 2236 - INTEGER(IntKi), PARAMETER :: M6N5FBFzi = 2237 - INTEGER(IntKi), PARAMETER :: M6N6FBFzi = 2238 - INTEGER(IntKi), PARAMETER :: M6N7FBFzi = 2239 - INTEGER(IntKi), PARAMETER :: M6N8FBFzi = 2240 - INTEGER(IntKi), PARAMETER :: M6N9FBFzi = 2241 - INTEGER(IntKi), PARAMETER :: M7N1FBFzi = 2242 - INTEGER(IntKi), PARAMETER :: M7N2FBFzi = 2243 - INTEGER(IntKi), PARAMETER :: M7N3FBFzi = 2244 - INTEGER(IntKi), PARAMETER :: M7N4FBFzi = 2245 - INTEGER(IntKi), PARAMETER :: M7N5FBFzi = 2246 - INTEGER(IntKi), PARAMETER :: M7N6FBFzi = 2247 - INTEGER(IntKi), PARAMETER :: M7N7FBFzi = 2248 - INTEGER(IntKi), PARAMETER :: M7N8FBFzi = 2249 - INTEGER(IntKi), PARAMETER :: M7N9FBFzi = 2250 - INTEGER(IntKi), PARAMETER :: M8N1FBFzi = 2251 - INTEGER(IntKi), PARAMETER :: M8N2FBFzi = 2252 - INTEGER(IntKi), PARAMETER :: M8N3FBFzi = 2253 - INTEGER(IntKi), PARAMETER :: M8N4FBFzi = 2254 - INTEGER(IntKi), PARAMETER :: M8N5FBFzi = 2255 - INTEGER(IntKi), PARAMETER :: M8N6FBFzi = 2256 - INTEGER(IntKi), PARAMETER :: M8N7FBFzi = 2257 - INTEGER(IntKi), PARAMETER :: M8N8FBFzi = 2258 - INTEGER(IntKi), PARAMETER :: M8N9FBFzi = 2259 - INTEGER(IntKi), PARAMETER :: M9N1FBFzi = 2260 - INTEGER(IntKi), PARAMETER :: M9N2FBFzi = 2261 - INTEGER(IntKi), PARAMETER :: M9N3FBFzi = 2262 - INTEGER(IntKi), PARAMETER :: M9N4FBFzi = 2263 - INTEGER(IntKi), PARAMETER :: M9N5FBFzi = 2264 - INTEGER(IntKi), PARAMETER :: M9N6FBFzi = 2265 - INTEGER(IntKi), PARAMETER :: M9N7FBFzi = 2266 - INTEGER(IntKi), PARAMETER :: M9N8FBFzi = 2267 - INTEGER(IntKi), PARAMETER :: M9N9FBFzi = 2268 - INTEGER(IntKi), PARAMETER :: M1N1MBFxi = 2269 - INTEGER(IntKi), PARAMETER :: M1N2MBFxi = 2270 - INTEGER(IntKi), PARAMETER :: M1N3MBFxi = 2271 - INTEGER(IntKi), PARAMETER :: M1N4MBFxi = 2272 - INTEGER(IntKi), PARAMETER :: M1N5MBFxi = 2273 - INTEGER(IntKi), PARAMETER :: M1N6MBFxi = 2274 - INTEGER(IntKi), PARAMETER :: M1N7MBFxi = 2275 - INTEGER(IntKi), PARAMETER :: M1N8MBFxi = 2276 - INTEGER(IntKi), PARAMETER :: M1N9MBFxi = 2277 - INTEGER(IntKi), PARAMETER :: M2N1MBFxi = 2278 - INTEGER(IntKi), PARAMETER :: M2N2MBFxi = 2279 - INTEGER(IntKi), PARAMETER :: M2N3MBFxi = 2280 - INTEGER(IntKi), PARAMETER :: M2N4MBFxi = 2281 - INTEGER(IntKi), PARAMETER :: M2N5MBFxi = 2282 - INTEGER(IntKi), PARAMETER :: M2N6MBFxi = 2283 - INTEGER(IntKi), PARAMETER :: M2N7MBFxi = 2284 - INTEGER(IntKi), PARAMETER :: M2N8MBFxi = 2285 - INTEGER(IntKi), PARAMETER :: M2N9MBFxi = 2286 - INTEGER(IntKi), PARAMETER :: M3N1MBFxi = 2287 - INTEGER(IntKi), PARAMETER :: M3N2MBFxi = 2288 - INTEGER(IntKi), PARAMETER :: M3N3MBFxi = 2289 - INTEGER(IntKi), PARAMETER :: M3N4MBFxi = 2290 - INTEGER(IntKi), PARAMETER :: M3N5MBFxi = 2291 - INTEGER(IntKi), PARAMETER :: M3N6MBFxi = 2292 - INTEGER(IntKi), PARAMETER :: M3N7MBFxi = 2293 - INTEGER(IntKi), PARAMETER :: M3N8MBFxi = 2294 - INTEGER(IntKi), PARAMETER :: M3N9MBFxi = 2295 - INTEGER(IntKi), PARAMETER :: M4N1MBFxi = 2296 - INTEGER(IntKi), PARAMETER :: M4N2MBFxi = 2297 - INTEGER(IntKi), PARAMETER :: M4N3MBFxi = 2298 - INTEGER(IntKi), PARAMETER :: M4N4MBFxi = 2299 - INTEGER(IntKi), PARAMETER :: M4N5MBFxi = 2300 - INTEGER(IntKi), PARAMETER :: M4N6MBFxi = 2301 - INTEGER(IntKi), PARAMETER :: M4N7MBFxi = 2302 - INTEGER(IntKi), PARAMETER :: M4N8MBFxi = 2303 - INTEGER(IntKi), PARAMETER :: M4N9MBFxi = 2304 - INTEGER(IntKi), PARAMETER :: M5N1MBFxi = 2305 - INTEGER(IntKi), PARAMETER :: M5N2MBFxi = 2306 - INTEGER(IntKi), PARAMETER :: M5N3MBFxi = 2307 - INTEGER(IntKi), PARAMETER :: M5N4MBFxi = 2308 - INTEGER(IntKi), PARAMETER :: M5N5MBFxi = 2309 - INTEGER(IntKi), PARAMETER :: M5N6MBFxi = 2310 - INTEGER(IntKi), PARAMETER :: M5N7MBFxi = 2311 - INTEGER(IntKi), PARAMETER :: M5N8MBFxi = 2312 - INTEGER(IntKi), PARAMETER :: M5N9MBFxi = 2313 - INTEGER(IntKi), PARAMETER :: M6N1MBFxi = 2314 - INTEGER(IntKi), PARAMETER :: M6N2MBFxi = 2315 - INTEGER(IntKi), PARAMETER :: M6N3MBFxi = 2316 - INTEGER(IntKi), PARAMETER :: M6N4MBFxi = 2317 - INTEGER(IntKi), PARAMETER :: M6N5MBFxi = 2318 - INTEGER(IntKi), PARAMETER :: M6N6MBFxi = 2319 - INTEGER(IntKi), PARAMETER :: M6N7MBFxi = 2320 - INTEGER(IntKi), PARAMETER :: M6N8MBFxi = 2321 - INTEGER(IntKi), PARAMETER :: M6N9MBFxi = 2322 - INTEGER(IntKi), PARAMETER :: M7N1MBFxi = 2323 - INTEGER(IntKi), PARAMETER :: M7N2MBFxi = 2324 - INTEGER(IntKi), PARAMETER :: M7N3MBFxi = 2325 - INTEGER(IntKi), PARAMETER :: M7N4MBFxi = 2326 - INTEGER(IntKi), PARAMETER :: M7N5MBFxi = 2327 - INTEGER(IntKi), PARAMETER :: M7N6MBFxi = 2328 - INTEGER(IntKi), PARAMETER :: M7N7MBFxi = 2329 - INTEGER(IntKi), PARAMETER :: M7N8MBFxi = 2330 - INTEGER(IntKi), PARAMETER :: M7N9MBFxi = 2331 - INTEGER(IntKi), PARAMETER :: M8N1MBFxi = 2332 - INTEGER(IntKi), PARAMETER :: M8N2MBFxi = 2333 - INTEGER(IntKi), PARAMETER :: M8N3MBFxi = 2334 - INTEGER(IntKi), PARAMETER :: M8N4MBFxi = 2335 - INTEGER(IntKi), PARAMETER :: M8N5MBFxi = 2336 - INTEGER(IntKi), PARAMETER :: M8N6MBFxi = 2337 - INTEGER(IntKi), PARAMETER :: M8N7MBFxi = 2338 - INTEGER(IntKi), PARAMETER :: M8N8MBFxi = 2339 - INTEGER(IntKi), PARAMETER :: M8N9MBFxi = 2340 - INTEGER(IntKi), PARAMETER :: M9N1MBFxi = 2341 - INTEGER(IntKi), PARAMETER :: M9N2MBFxi = 2342 - INTEGER(IntKi), PARAMETER :: M9N3MBFxi = 2343 - INTEGER(IntKi), PARAMETER :: M9N4MBFxi = 2344 - INTEGER(IntKi), PARAMETER :: M9N5MBFxi = 2345 - INTEGER(IntKi), PARAMETER :: M9N6MBFxi = 2346 - INTEGER(IntKi), PARAMETER :: M9N7MBFxi = 2347 - INTEGER(IntKi), PARAMETER :: M9N8MBFxi = 2348 - INTEGER(IntKi), PARAMETER :: M9N9MBFxi = 2349 - INTEGER(IntKi), PARAMETER :: M1N1MBFyi = 2350 - INTEGER(IntKi), PARAMETER :: M1N2MBFyi = 2351 - INTEGER(IntKi), PARAMETER :: M1N3MBFyi = 2352 - INTEGER(IntKi), PARAMETER :: M1N4MBFyi = 2353 - INTEGER(IntKi), PARAMETER :: M1N5MBFyi = 2354 - INTEGER(IntKi), PARAMETER :: M1N6MBFyi = 2355 - INTEGER(IntKi), PARAMETER :: M1N7MBFyi = 2356 - INTEGER(IntKi), PARAMETER :: M1N8MBFyi = 2357 - INTEGER(IntKi), PARAMETER :: M1N9MBFyi = 2358 - INTEGER(IntKi), PARAMETER :: M2N1MBFyi = 2359 - INTEGER(IntKi), PARAMETER :: M2N2MBFyi = 2360 - INTEGER(IntKi), PARAMETER :: M2N3MBFyi = 2361 - INTEGER(IntKi), PARAMETER :: M2N4MBFyi = 2362 - INTEGER(IntKi), PARAMETER :: M2N5MBFyi = 2363 - INTEGER(IntKi), PARAMETER :: M2N6MBFyi = 2364 - INTEGER(IntKi), PARAMETER :: M2N7MBFyi = 2365 - INTEGER(IntKi), PARAMETER :: M2N8MBFyi = 2366 - INTEGER(IntKi), PARAMETER :: M2N9MBFyi = 2367 - INTEGER(IntKi), PARAMETER :: M3N1MBFyi = 2368 - INTEGER(IntKi), PARAMETER :: M3N2MBFyi = 2369 - INTEGER(IntKi), PARAMETER :: M3N3MBFyi = 2370 - INTEGER(IntKi), PARAMETER :: M3N4MBFyi = 2371 - INTEGER(IntKi), PARAMETER :: M3N5MBFyi = 2372 - INTEGER(IntKi), PARAMETER :: M3N6MBFyi = 2373 - INTEGER(IntKi), PARAMETER :: M3N7MBFyi = 2374 - INTEGER(IntKi), PARAMETER :: M3N8MBFyi = 2375 - INTEGER(IntKi), PARAMETER :: M3N9MBFyi = 2376 - INTEGER(IntKi), PARAMETER :: M4N1MBFyi = 2377 - INTEGER(IntKi), PARAMETER :: M4N2MBFyi = 2378 - INTEGER(IntKi), PARAMETER :: M4N3MBFyi = 2379 - INTEGER(IntKi), PARAMETER :: M4N4MBFyi = 2380 - INTEGER(IntKi), PARAMETER :: M4N5MBFyi = 2381 - INTEGER(IntKi), PARAMETER :: M4N6MBFyi = 2382 - INTEGER(IntKi), PARAMETER :: M4N7MBFyi = 2383 - INTEGER(IntKi), PARAMETER :: M4N8MBFyi = 2384 - INTEGER(IntKi), PARAMETER :: M4N9MBFyi = 2385 - INTEGER(IntKi), PARAMETER :: M5N1MBFyi = 2386 - INTEGER(IntKi), PARAMETER :: M5N2MBFyi = 2387 - INTEGER(IntKi), PARAMETER :: M5N3MBFyi = 2388 - INTEGER(IntKi), PARAMETER :: M5N4MBFyi = 2389 - INTEGER(IntKi), PARAMETER :: M5N5MBFyi = 2390 - INTEGER(IntKi), PARAMETER :: M5N6MBFyi = 2391 - INTEGER(IntKi), PARAMETER :: M5N7MBFyi = 2392 - INTEGER(IntKi), PARAMETER :: M5N8MBFyi = 2393 - INTEGER(IntKi), PARAMETER :: M5N9MBFyi = 2394 - INTEGER(IntKi), PARAMETER :: M6N1MBFyi = 2395 - INTEGER(IntKi), PARAMETER :: M6N2MBFyi = 2396 - INTEGER(IntKi), PARAMETER :: M6N3MBFyi = 2397 - INTEGER(IntKi), PARAMETER :: M6N4MBFyi = 2398 - INTEGER(IntKi), PARAMETER :: M6N5MBFyi = 2399 - INTEGER(IntKi), PARAMETER :: M6N6MBFyi = 2400 - INTEGER(IntKi), PARAMETER :: M6N7MBFyi = 2401 - INTEGER(IntKi), PARAMETER :: M6N8MBFyi = 2402 - INTEGER(IntKi), PARAMETER :: M6N9MBFyi = 2403 - INTEGER(IntKi), PARAMETER :: M7N1MBFyi = 2404 - INTEGER(IntKi), PARAMETER :: M7N2MBFyi = 2405 - INTEGER(IntKi), PARAMETER :: M7N3MBFyi = 2406 - INTEGER(IntKi), PARAMETER :: M7N4MBFyi = 2407 - INTEGER(IntKi), PARAMETER :: M7N5MBFyi = 2408 - INTEGER(IntKi), PARAMETER :: M7N6MBFyi = 2409 - INTEGER(IntKi), PARAMETER :: M7N7MBFyi = 2410 - INTEGER(IntKi), PARAMETER :: M7N8MBFyi = 2411 - INTEGER(IntKi), PARAMETER :: M7N9MBFyi = 2412 - INTEGER(IntKi), PARAMETER :: M8N1MBFyi = 2413 - INTEGER(IntKi), PARAMETER :: M8N2MBFyi = 2414 - INTEGER(IntKi), PARAMETER :: M8N3MBFyi = 2415 - INTEGER(IntKi), PARAMETER :: M8N4MBFyi = 2416 - INTEGER(IntKi), PARAMETER :: M8N5MBFyi = 2417 - INTEGER(IntKi), PARAMETER :: M8N6MBFyi = 2418 - INTEGER(IntKi), PARAMETER :: M8N7MBFyi = 2419 - INTEGER(IntKi), PARAMETER :: M8N8MBFyi = 2420 - INTEGER(IntKi), PARAMETER :: M8N9MBFyi = 2421 - INTEGER(IntKi), PARAMETER :: M9N1MBFyi = 2422 - INTEGER(IntKi), PARAMETER :: M9N2MBFyi = 2423 - INTEGER(IntKi), PARAMETER :: M9N3MBFyi = 2424 - INTEGER(IntKi), PARAMETER :: M9N4MBFyi = 2425 - INTEGER(IntKi), PARAMETER :: M9N5MBFyi = 2426 - INTEGER(IntKi), PARAMETER :: M9N6MBFyi = 2427 - INTEGER(IntKi), PARAMETER :: M9N7MBFyi = 2428 - INTEGER(IntKi), PARAMETER :: M9N8MBFyi = 2429 - INTEGER(IntKi), PARAMETER :: M9N9MBFyi = 2430 - INTEGER(IntKi), PARAMETER :: M1N1MBFzi = 2431 - INTEGER(IntKi), PARAMETER :: M1N2MBFzi = 2432 - INTEGER(IntKi), PARAMETER :: M1N3MBFzi = 2433 - INTEGER(IntKi), PARAMETER :: M1N4MBFzi = 2434 - INTEGER(IntKi), PARAMETER :: M1N5MBFzi = 2435 - INTEGER(IntKi), PARAMETER :: M1N6MBFzi = 2436 - INTEGER(IntKi), PARAMETER :: M1N7MBFzi = 2437 - INTEGER(IntKi), PARAMETER :: M1N8MBFzi = 2438 - INTEGER(IntKi), PARAMETER :: M1N9MBFzi = 2439 - INTEGER(IntKi), PARAMETER :: M2N1MBFzi = 2440 - INTEGER(IntKi), PARAMETER :: M2N2MBFzi = 2441 - INTEGER(IntKi), PARAMETER :: M2N3MBFzi = 2442 - INTEGER(IntKi), PARAMETER :: M2N4MBFzi = 2443 - INTEGER(IntKi), PARAMETER :: M2N5MBFzi = 2444 - INTEGER(IntKi), PARAMETER :: M2N6MBFzi = 2445 - INTEGER(IntKi), PARAMETER :: M2N7MBFzi = 2446 - INTEGER(IntKi), PARAMETER :: M2N8MBFzi = 2447 - INTEGER(IntKi), PARAMETER :: M2N9MBFzi = 2448 - INTEGER(IntKi), PARAMETER :: M3N1MBFzi = 2449 - INTEGER(IntKi), PARAMETER :: M3N2MBFzi = 2450 - INTEGER(IntKi), PARAMETER :: M3N3MBFzi = 2451 - INTEGER(IntKi), PARAMETER :: M3N4MBFzi = 2452 - INTEGER(IntKi), PARAMETER :: M3N5MBFzi = 2453 - INTEGER(IntKi), PARAMETER :: M3N6MBFzi = 2454 - INTEGER(IntKi), PARAMETER :: M3N7MBFzi = 2455 - INTEGER(IntKi), PARAMETER :: M3N8MBFzi = 2456 - INTEGER(IntKi), PARAMETER :: M3N9MBFzi = 2457 - INTEGER(IntKi), PARAMETER :: M4N1MBFzi = 2458 - INTEGER(IntKi), PARAMETER :: M4N2MBFzi = 2459 - INTEGER(IntKi), PARAMETER :: M4N3MBFzi = 2460 - INTEGER(IntKi), PARAMETER :: M4N4MBFzi = 2461 - INTEGER(IntKi), PARAMETER :: M4N5MBFzi = 2462 - INTEGER(IntKi), PARAMETER :: M4N6MBFzi = 2463 - INTEGER(IntKi), PARAMETER :: M4N7MBFzi = 2464 - INTEGER(IntKi), PARAMETER :: M4N8MBFzi = 2465 - INTEGER(IntKi), PARAMETER :: M4N9MBFzi = 2466 - INTEGER(IntKi), PARAMETER :: M5N1MBFzi = 2467 - INTEGER(IntKi), PARAMETER :: M5N2MBFzi = 2468 - INTEGER(IntKi), PARAMETER :: M5N3MBFzi = 2469 - INTEGER(IntKi), PARAMETER :: M5N4MBFzi = 2470 - INTEGER(IntKi), PARAMETER :: M5N5MBFzi = 2471 - INTEGER(IntKi), PARAMETER :: M5N6MBFzi = 2472 - INTEGER(IntKi), PARAMETER :: M5N7MBFzi = 2473 - INTEGER(IntKi), PARAMETER :: M5N8MBFzi = 2474 - INTEGER(IntKi), PARAMETER :: M5N9MBFzi = 2475 - INTEGER(IntKi), PARAMETER :: M6N1MBFzi = 2476 - INTEGER(IntKi), PARAMETER :: M6N2MBFzi = 2477 - INTEGER(IntKi), PARAMETER :: M6N3MBFzi = 2478 - INTEGER(IntKi), PARAMETER :: M6N4MBFzi = 2479 - INTEGER(IntKi), PARAMETER :: M6N5MBFzi = 2480 - INTEGER(IntKi), PARAMETER :: M6N6MBFzi = 2481 - INTEGER(IntKi), PARAMETER :: M6N7MBFzi = 2482 - INTEGER(IntKi), PARAMETER :: M6N8MBFzi = 2483 - INTEGER(IntKi), PARAMETER :: M6N9MBFzi = 2484 - INTEGER(IntKi), PARAMETER :: M7N1MBFzi = 2485 - INTEGER(IntKi), PARAMETER :: M7N2MBFzi = 2486 - INTEGER(IntKi), PARAMETER :: M7N3MBFzi = 2487 - INTEGER(IntKi), PARAMETER :: M7N4MBFzi = 2488 - INTEGER(IntKi), PARAMETER :: M7N5MBFzi = 2489 - INTEGER(IntKi), PARAMETER :: M7N6MBFzi = 2490 - INTEGER(IntKi), PARAMETER :: M7N7MBFzi = 2491 - INTEGER(IntKi), PARAMETER :: M7N8MBFzi = 2492 - INTEGER(IntKi), PARAMETER :: M7N9MBFzi = 2493 - INTEGER(IntKi), PARAMETER :: M8N1MBFzi = 2494 - INTEGER(IntKi), PARAMETER :: M8N2MBFzi = 2495 - INTEGER(IntKi), PARAMETER :: M8N3MBFzi = 2496 - INTEGER(IntKi), PARAMETER :: M8N4MBFzi = 2497 - INTEGER(IntKi), PARAMETER :: M8N5MBFzi = 2498 - INTEGER(IntKi), PARAMETER :: M8N6MBFzi = 2499 - INTEGER(IntKi), PARAMETER :: M8N7MBFzi = 2500 - INTEGER(IntKi), PARAMETER :: M8N8MBFzi = 2501 - INTEGER(IntKi), PARAMETER :: M8N9MBFzi = 2502 - INTEGER(IntKi), PARAMETER :: M9N1MBFzi = 2503 - INTEGER(IntKi), PARAMETER :: M9N2MBFzi = 2504 - INTEGER(IntKi), PARAMETER :: M9N3MBFzi = 2505 - INTEGER(IntKi), PARAMETER :: M9N4MBFzi = 2506 - INTEGER(IntKi), PARAMETER :: M9N5MBFzi = 2507 - INTEGER(IntKi), PARAMETER :: M9N6MBFzi = 2508 - INTEGER(IntKi), PARAMETER :: M9N7MBFzi = 2509 - INTEGER(IntKi), PARAMETER :: M9N8MBFzi = 2510 - INTEGER(IntKi), PARAMETER :: M9N9MBFzi = 2511 - INTEGER(IntKi), PARAMETER :: M1N1FMGxi = 2512 - INTEGER(IntKi), PARAMETER :: M1N2FMGxi = 2513 - INTEGER(IntKi), PARAMETER :: M1N3FMGxi = 2514 - INTEGER(IntKi), PARAMETER :: M1N4FMGxi = 2515 - INTEGER(IntKi), PARAMETER :: M1N5FMGxi = 2516 - INTEGER(IntKi), PARAMETER :: M1N6FMGxi = 2517 - INTEGER(IntKi), PARAMETER :: M1N7FMGxi = 2518 - INTEGER(IntKi), PARAMETER :: M1N8FMGxi = 2519 - INTEGER(IntKi), PARAMETER :: M1N9FMGxi = 2520 - INTEGER(IntKi), PARAMETER :: M2N1FMGxi = 2521 - INTEGER(IntKi), PARAMETER :: M2N2FMGxi = 2522 - INTEGER(IntKi), PARAMETER :: M2N3FMGxi = 2523 - INTEGER(IntKi), PARAMETER :: M2N4FMGxi = 2524 - INTEGER(IntKi), PARAMETER :: M2N5FMGxi = 2525 - INTEGER(IntKi), PARAMETER :: M2N6FMGxi = 2526 - INTEGER(IntKi), PARAMETER :: M2N7FMGxi = 2527 - INTEGER(IntKi), PARAMETER :: M2N8FMGxi = 2528 - INTEGER(IntKi), PARAMETER :: M2N9FMGxi = 2529 - INTEGER(IntKi), PARAMETER :: M3N1FMGxi = 2530 - INTEGER(IntKi), PARAMETER :: M3N2FMGxi = 2531 - INTEGER(IntKi), PARAMETER :: M3N3FMGxi = 2532 - INTEGER(IntKi), PARAMETER :: M3N4FMGxi = 2533 - INTEGER(IntKi), PARAMETER :: M3N5FMGxi = 2534 - INTEGER(IntKi), PARAMETER :: M3N6FMGxi = 2535 - INTEGER(IntKi), PARAMETER :: M3N7FMGxi = 2536 - INTEGER(IntKi), PARAMETER :: M3N8FMGxi = 2537 - INTEGER(IntKi), PARAMETER :: M3N9FMGxi = 2538 - INTEGER(IntKi), PARAMETER :: M4N1FMGxi = 2539 - INTEGER(IntKi), PARAMETER :: M4N2FMGxi = 2540 - INTEGER(IntKi), PARAMETER :: M4N3FMGxi = 2541 - INTEGER(IntKi), PARAMETER :: M4N4FMGxi = 2542 - INTEGER(IntKi), PARAMETER :: M4N5FMGxi = 2543 - INTEGER(IntKi), PARAMETER :: M4N6FMGxi = 2544 - INTEGER(IntKi), PARAMETER :: M4N7FMGxi = 2545 - INTEGER(IntKi), PARAMETER :: M4N8FMGxi = 2546 - INTEGER(IntKi), PARAMETER :: M4N9FMGxi = 2547 - INTEGER(IntKi), PARAMETER :: M5N1FMGxi = 2548 - INTEGER(IntKi), PARAMETER :: M5N2FMGxi = 2549 - INTEGER(IntKi), PARAMETER :: M5N3FMGxi = 2550 - INTEGER(IntKi), PARAMETER :: M5N4FMGxi = 2551 - INTEGER(IntKi), PARAMETER :: M5N5FMGxi = 2552 - INTEGER(IntKi), PARAMETER :: M5N6FMGxi = 2553 - INTEGER(IntKi), PARAMETER :: M5N7FMGxi = 2554 - INTEGER(IntKi), PARAMETER :: M5N8FMGxi = 2555 - INTEGER(IntKi), PARAMETER :: M5N9FMGxi = 2556 - INTEGER(IntKi), PARAMETER :: M6N1FMGxi = 2557 - INTEGER(IntKi), PARAMETER :: M6N2FMGxi = 2558 - INTEGER(IntKi), PARAMETER :: M6N3FMGxi = 2559 - INTEGER(IntKi), PARAMETER :: M6N4FMGxi = 2560 - INTEGER(IntKi), PARAMETER :: M6N5FMGxi = 2561 - INTEGER(IntKi), PARAMETER :: M6N6FMGxi = 2562 - INTEGER(IntKi), PARAMETER :: M6N7FMGxi = 2563 - INTEGER(IntKi), PARAMETER :: M6N8FMGxi = 2564 - INTEGER(IntKi), PARAMETER :: M6N9FMGxi = 2565 - INTEGER(IntKi), PARAMETER :: M7N1FMGxi = 2566 - INTEGER(IntKi), PARAMETER :: M7N2FMGxi = 2567 - INTEGER(IntKi), PARAMETER :: M7N3FMGxi = 2568 - INTEGER(IntKi), PARAMETER :: M7N4FMGxi = 2569 - INTEGER(IntKi), PARAMETER :: M7N5FMGxi = 2570 - INTEGER(IntKi), PARAMETER :: M7N6FMGxi = 2571 - INTEGER(IntKi), PARAMETER :: M7N7FMGxi = 2572 - INTEGER(IntKi), PARAMETER :: M7N8FMGxi = 2573 - INTEGER(IntKi), PARAMETER :: M7N9FMGxi = 2574 - INTEGER(IntKi), PARAMETER :: M8N1FMGxi = 2575 - INTEGER(IntKi), PARAMETER :: M8N2FMGxi = 2576 - INTEGER(IntKi), PARAMETER :: M8N3FMGxi = 2577 - INTEGER(IntKi), PARAMETER :: M8N4FMGxi = 2578 - INTEGER(IntKi), PARAMETER :: M8N5FMGxi = 2579 - INTEGER(IntKi), PARAMETER :: M8N6FMGxi = 2580 - INTEGER(IntKi), PARAMETER :: M8N7FMGxi = 2581 - INTEGER(IntKi), PARAMETER :: M8N8FMGxi = 2582 - INTEGER(IntKi), PARAMETER :: M8N9FMGxi = 2583 - INTEGER(IntKi), PARAMETER :: M9N1FMGxi = 2584 - INTEGER(IntKi), PARAMETER :: M9N2FMGxi = 2585 - INTEGER(IntKi), PARAMETER :: M9N3FMGxi = 2586 - INTEGER(IntKi), PARAMETER :: M9N4FMGxi = 2587 - INTEGER(IntKi), PARAMETER :: M9N5FMGxi = 2588 - INTEGER(IntKi), PARAMETER :: M9N6FMGxi = 2589 - INTEGER(IntKi), PARAMETER :: M9N7FMGxi = 2590 - INTEGER(IntKi), PARAMETER :: M9N8FMGxi = 2591 - INTEGER(IntKi), PARAMETER :: M9N9FMGxi = 2592 - INTEGER(IntKi), PARAMETER :: M1N1FMGyi = 2593 - INTEGER(IntKi), PARAMETER :: M1N2FMGyi = 2594 - INTEGER(IntKi), PARAMETER :: M1N3FMGyi = 2595 - INTEGER(IntKi), PARAMETER :: M1N4FMGyi = 2596 - INTEGER(IntKi), PARAMETER :: M1N5FMGyi = 2597 - INTEGER(IntKi), PARAMETER :: M1N6FMGyi = 2598 - INTEGER(IntKi), PARAMETER :: M1N7FMGyi = 2599 - INTEGER(IntKi), PARAMETER :: M1N8FMGyi = 2600 - INTEGER(IntKi), PARAMETER :: M1N9FMGyi = 2601 - INTEGER(IntKi), PARAMETER :: M2N1FMGyi = 2602 - INTEGER(IntKi), PARAMETER :: M2N2FMGyi = 2603 - INTEGER(IntKi), PARAMETER :: M2N3FMGyi = 2604 - INTEGER(IntKi), PARAMETER :: M2N4FMGyi = 2605 - INTEGER(IntKi), PARAMETER :: M2N5FMGyi = 2606 - INTEGER(IntKi), PARAMETER :: M2N6FMGyi = 2607 - INTEGER(IntKi), PARAMETER :: M2N7FMGyi = 2608 - INTEGER(IntKi), PARAMETER :: M2N8FMGyi = 2609 - INTEGER(IntKi), PARAMETER :: M2N9FMGyi = 2610 - INTEGER(IntKi), PARAMETER :: M3N1FMGyi = 2611 - INTEGER(IntKi), PARAMETER :: M3N2FMGyi = 2612 - INTEGER(IntKi), PARAMETER :: M3N3FMGyi = 2613 - INTEGER(IntKi), PARAMETER :: M3N4FMGyi = 2614 - INTEGER(IntKi), PARAMETER :: M3N5FMGyi = 2615 - INTEGER(IntKi), PARAMETER :: M3N6FMGyi = 2616 - INTEGER(IntKi), PARAMETER :: M3N7FMGyi = 2617 - INTEGER(IntKi), PARAMETER :: M3N8FMGyi = 2618 - INTEGER(IntKi), PARAMETER :: M3N9FMGyi = 2619 - INTEGER(IntKi), PARAMETER :: M4N1FMGyi = 2620 - INTEGER(IntKi), PARAMETER :: M4N2FMGyi = 2621 - INTEGER(IntKi), PARAMETER :: M4N3FMGyi = 2622 - INTEGER(IntKi), PARAMETER :: M4N4FMGyi = 2623 - INTEGER(IntKi), PARAMETER :: M4N5FMGyi = 2624 - INTEGER(IntKi), PARAMETER :: M4N6FMGyi = 2625 - INTEGER(IntKi), PARAMETER :: M4N7FMGyi = 2626 - INTEGER(IntKi), PARAMETER :: M4N8FMGyi = 2627 - INTEGER(IntKi), PARAMETER :: M4N9FMGyi = 2628 - INTEGER(IntKi), PARAMETER :: M5N1FMGyi = 2629 - INTEGER(IntKi), PARAMETER :: M5N2FMGyi = 2630 - INTEGER(IntKi), PARAMETER :: M5N3FMGyi = 2631 - INTEGER(IntKi), PARAMETER :: M5N4FMGyi = 2632 - INTEGER(IntKi), PARAMETER :: M5N5FMGyi = 2633 - INTEGER(IntKi), PARAMETER :: M5N6FMGyi = 2634 - INTEGER(IntKi), PARAMETER :: M5N7FMGyi = 2635 - INTEGER(IntKi), PARAMETER :: M5N8FMGyi = 2636 - INTEGER(IntKi), PARAMETER :: M5N9FMGyi = 2637 - INTEGER(IntKi), PARAMETER :: M6N1FMGyi = 2638 - INTEGER(IntKi), PARAMETER :: M6N2FMGyi = 2639 - INTEGER(IntKi), PARAMETER :: M6N3FMGyi = 2640 - INTEGER(IntKi), PARAMETER :: M6N4FMGyi = 2641 - INTEGER(IntKi), PARAMETER :: M6N5FMGyi = 2642 - INTEGER(IntKi), PARAMETER :: M6N6FMGyi = 2643 - INTEGER(IntKi), PARAMETER :: M6N7FMGyi = 2644 - INTEGER(IntKi), PARAMETER :: M6N8FMGyi = 2645 - INTEGER(IntKi), PARAMETER :: M6N9FMGyi = 2646 - INTEGER(IntKi), PARAMETER :: M7N1FMGyi = 2647 - INTEGER(IntKi), PARAMETER :: M7N2FMGyi = 2648 - INTEGER(IntKi), PARAMETER :: M7N3FMGyi = 2649 - INTEGER(IntKi), PARAMETER :: M7N4FMGyi = 2650 - INTEGER(IntKi), PARAMETER :: M7N5FMGyi = 2651 - INTEGER(IntKi), PARAMETER :: M7N6FMGyi = 2652 - INTEGER(IntKi), PARAMETER :: M7N7FMGyi = 2653 - INTEGER(IntKi), PARAMETER :: M7N8FMGyi = 2654 - INTEGER(IntKi), PARAMETER :: M7N9FMGyi = 2655 - INTEGER(IntKi), PARAMETER :: M8N1FMGyi = 2656 - INTEGER(IntKi), PARAMETER :: M8N2FMGyi = 2657 - INTEGER(IntKi), PARAMETER :: M8N3FMGyi = 2658 - INTEGER(IntKi), PARAMETER :: M8N4FMGyi = 2659 - INTEGER(IntKi), PARAMETER :: M8N5FMGyi = 2660 - INTEGER(IntKi), PARAMETER :: M8N6FMGyi = 2661 - INTEGER(IntKi), PARAMETER :: M8N7FMGyi = 2662 - INTEGER(IntKi), PARAMETER :: M8N8FMGyi = 2663 - INTEGER(IntKi), PARAMETER :: M8N9FMGyi = 2664 - INTEGER(IntKi), PARAMETER :: M9N1FMGyi = 2665 - INTEGER(IntKi), PARAMETER :: M9N2FMGyi = 2666 - INTEGER(IntKi), PARAMETER :: M9N3FMGyi = 2667 - INTEGER(IntKi), PARAMETER :: M9N4FMGyi = 2668 - INTEGER(IntKi), PARAMETER :: M9N5FMGyi = 2669 - INTEGER(IntKi), PARAMETER :: M9N6FMGyi = 2670 - INTEGER(IntKi), PARAMETER :: M9N7FMGyi = 2671 - INTEGER(IntKi), PARAMETER :: M9N8FMGyi = 2672 - INTEGER(IntKi), PARAMETER :: M9N9FMGyi = 2673 - INTEGER(IntKi), PARAMETER :: M1N1FMGzi = 2674 - INTEGER(IntKi), PARAMETER :: M1N2FMGzi = 2675 - INTEGER(IntKi), PARAMETER :: M1N3FMGzi = 2676 - INTEGER(IntKi), PARAMETER :: M1N4FMGzi = 2677 - INTEGER(IntKi), PARAMETER :: M1N5FMGzi = 2678 - INTEGER(IntKi), PARAMETER :: M1N6FMGzi = 2679 - INTEGER(IntKi), PARAMETER :: M1N7FMGzi = 2680 - INTEGER(IntKi), PARAMETER :: M1N8FMGzi = 2681 - INTEGER(IntKi), PARAMETER :: M1N9FMGzi = 2682 - INTEGER(IntKi), PARAMETER :: M2N1FMGzi = 2683 - INTEGER(IntKi), PARAMETER :: M2N2FMGzi = 2684 - INTEGER(IntKi), PARAMETER :: M2N3FMGzi = 2685 - INTEGER(IntKi), PARAMETER :: M2N4FMGzi = 2686 - INTEGER(IntKi), PARAMETER :: M2N5FMGzi = 2687 - INTEGER(IntKi), PARAMETER :: M2N6FMGzi = 2688 - INTEGER(IntKi), PARAMETER :: M2N7FMGzi = 2689 - INTEGER(IntKi), PARAMETER :: M2N8FMGzi = 2690 - INTEGER(IntKi), PARAMETER :: M2N9FMGzi = 2691 - INTEGER(IntKi), PARAMETER :: M3N1FMGzi = 2692 - INTEGER(IntKi), PARAMETER :: M3N2FMGzi = 2693 - INTEGER(IntKi), PARAMETER :: M3N3FMGzi = 2694 - INTEGER(IntKi), PARAMETER :: M3N4FMGzi = 2695 - INTEGER(IntKi), PARAMETER :: M3N5FMGzi = 2696 - INTEGER(IntKi), PARAMETER :: M3N6FMGzi = 2697 - INTEGER(IntKi), PARAMETER :: M3N7FMGzi = 2698 - INTEGER(IntKi), PARAMETER :: M3N8FMGzi = 2699 - INTEGER(IntKi), PARAMETER :: M3N9FMGzi = 2700 - INTEGER(IntKi), PARAMETER :: M4N1FMGzi = 2701 - INTEGER(IntKi), PARAMETER :: M4N2FMGzi = 2702 - INTEGER(IntKi), PARAMETER :: M4N3FMGzi = 2703 - INTEGER(IntKi), PARAMETER :: M4N4FMGzi = 2704 - INTEGER(IntKi), PARAMETER :: M4N5FMGzi = 2705 - INTEGER(IntKi), PARAMETER :: M4N6FMGzi = 2706 - INTEGER(IntKi), PARAMETER :: M4N7FMGzi = 2707 - INTEGER(IntKi), PARAMETER :: M4N8FMGzi = 2708 - INTEGER(IntKi), PARAMETER :: M4N9FMGzi = 2709 - INTEGER(IntKi), PARAMETER :: M5N1FMGzi = 2710 - INTEGER(IntKi), PARAMETER :: M5N2FMGzi = 2711 - INTEGER(IntKi), PARAMETER :: M5N3FMGzi = 2712 - INTEGER(IntKi), PARAMETER :: M5N4FMGzi = 2713 - INTEGER(IntKi), PARAMETER :: M5N5FMGzi = 2714 - INTEGER(IntKi), PARAMETER :: M5N6FMGzi = 2715 - INTEGER(IntKi), PARAMETER :: M5N7FMGzi = 2716 - INTEGER(IntKi), PARAMETER :: M5N8FMGzi = 2717 - INTEGER(IntKi), PARAMETER :: M5N9FMGzi = 2718 - INTEGER(IntKi), PARAMETER :: M6N1FMGzi = 2719 - INTEGER(IntKi), PARAMETER :: M6N2FMGzi = 2720 - INTEGER(IntKi), PARAMETER :: M6N3FMGzi = 2721 - INTEGER(IntKi), PARAMETER :: M6N4FMGzi = 2722 - INTEGER(IntKi), PARAMETER :: M6N5FMGzi = 2723 - INTEGER(IntKi), PARAMETER :: M6N6FMGzi = 2724 - INTEGER(IntKi), PARAMETER :: M6N7FMGzi = 2725 - INTEGER(IntKi), PARAMETER :: M6N8FMGzi = 2726 - INTEGER(IntKi), PARAMETER :: M6N9FMGzi = 2727 - INTEGER(IntKi), PARAMETER :: M7N1FMGzi = 2728 - INTEGER(IntKi), PARAMETER :: M7N2FMGzi = 2729 - INTEGER(IntKi), PARAMETER :: M7N3FMGzi = 2730 - INTEGER(IntKi), PARAMETER :: M7N4FMGzi = 2731 - INTEGER(IntKi), PARAMETER :: M7N5FMGzi = 2732 - INTEGER(IntKi), PARAMETER :: M7N6FMGzi = 2733 - INTEGER(IntKi), PARAMETER :: M7N7FMGzi = 2734 - INTEGER(IntKi), PARAMETER :: M7N8FMGzi = 2735 - INTEGER(IntKi), PARAMETER :: M7N9FMGzi = 2736 - INTEGER(IntKi), PARAMETER :: M8N1FMGzi = 2737 - INTEGER(IntKi), PARAMETER :: M8N2FMGzi = 2738 - INTEGER(IntKi), PARAMETER :: M8N3FMGzi = 2739 - INTEGER(IntKi), PARAMETER :: M8N4FMGzi = 2740 - INTEGER(IntKi), PARAMETER :: M8N5FMGzi = 2741 - INTEGER(IntKi), PARAMETER :: M8N6FMGzi = 2742 - INTEGER(IntKi), PARAMETER :: M8N7FMGzi = 2743 - INTEGER(IntKi), PARAMETER :: M8N8FMGzi = 2744 - INTEGER(IntKi), PARAMETER :: M8N9FMGzi = 2745 - INTEGER(IntKi), PARAMETER :: M9N1FMGzi = 2746 - INTEGER(IntKi), PARAMETER :: M9N2FMGzi = 2747 - INTEGER(IntKi), PARAMETER :: M9N3FMGzi = 2748 - INTEGER(IntKi), PARAMETER :: M9N4FMGzi = 2749 - INTEGER(IntKi), PARAMETER :: M9N5FMGzi = 2750 - INTEGER(IntKi), PARAMETER :: M9N6FMGzi = 2751 - INTEGER(IntKi), PARAMETER :: M9N7FMGzi = 2752 - INTEGER(IntKi), PARAMETER :: M9N8FMGzi = 2753 - INTEGER(IntKi), PARAMETER :: M9N9FMGzi = 2754 - INTEGER(IntKi), PARAMETER :: M1N1MMGxi = 2755 - INTEGER(IntKi), PARAMETER :: M1N2MMGxi = 2756 - INTEGER(IntKi), PARAMETER :: M1N3MMGxi = 2757 - INTEGER(IntKi), PARAMETER :: M1N4MMGxi = 2758 - INTEGER(IntKi), PARAMETER :: M1N5MMGxi = 2759 - INTEGER(IntKi), PARAMETER :: M1N6MMGxi = 2760 - INTEGER(IntKi), PARAMETER :: M1N7MMGxi = 2761 - INTEGER(IntKi), PARAMETER :: M1N8MMGxi = 2762 - INTEGER(IntKi), PARAMETER :: M1N9MMGxi = 2763 - INTEGER(IntKi), PARAMETER :: M2N1MMGxi = 2764 - INTEGER(IntKi), PARAMETER :: M2N2MMGxi = 2765 - INTEGER(IntKi), PARAMETER :: M2N3MMGxi = 2766 - INTEGER(IntKi), PARAMETER :: M2N4MMGxi = 2767 - INTEGER(IntKi), PARAMETER :: M2N5MMGxi = 2768 - INTEGER(IntKi), PARAMETER :: M2N6MMGxi = 2769 - INTEGER(IntKi), PARAMETER :: M2N7MMGxi = 2770 - INTEGER(IntKi), PARAMETER :: M2N8MMGxi = 2771 - INTEGER(IntKi), PARAMETER :: M2N9MMGxi = 2772 - INTEGER(IntKi), PARAMETER :: M3N1MMGxi = 2773 - INTEGER(IntKi), PARAMETER :: M3N2MMGxi = 2774 - INTEGER(IntKi), PARAMETER :: M3N3MMGxi = 2775 - INTEGER(IntKi), PARAMETER :: M3N4MMGxi = 2776 - INTEGER(IntKi), PARAMETER :: M3N5MMGxi = 2777 - INTEGER(IntKi), PARAMETER :: M3N6MMGxi = 2778 - INTEGER(IntKi), PARAMETER :: M3N7MMGxi = 2779 - INTEGER(IntKi), PARAMETER :: M3N8MMGxi = 2780 - INTEGER(IntKi), PARAMETER :: M3N9MMGxi = 2781 - INTEGER(IntKi), PARAMETER :: M4N1MMGxi = 2782 - INTEGER(IntKi), PARAMETER :: M4N2MMGxi = 2783 - INTEGER(IntKi), PARAMETER :: M4N3MMGxi = 2784 - INTEGER(IntKi), PARAMETER :: M4N4MMGxi = 2785 - INTEGER(IntKi), PARAMETER :: M4N5MMGxi = 2786 - INTEGER(IntKi), PARAMETER :: M4N6MMGxi = 2787 - INTEGER(IntKi), PARAMETER :: M4N7MMGxi = 2788 - INTEGER(IntKi), PARAMETER :: M4N8MMGxi = 2789 - INTEGER(IntKi), PARAMETER :: M4N9MMGxi = 2790 - INTEGER(IntKi), PARAMETER :: M5N1MMGxi = 2791 - INTEGER(IntKi), PARAMETER :: M5N2MMGxi = 2792 - INTEGER(IntKi), PARAMETER :: M5N3MMGxi = 2793 - INTEGER(IntKi), PARAMETER :: M5N4MMGxi = 2794 - INTEGER(IntKi), PARAMETER :: M5N5MMGxi = 2795 - INTEGER(IntKi), PARAMETER :: M5N6MMGxi = 2796 - INTEGER(IntKi), PARAMETER :: M5N7MMGxi = 2797 - INTEGER(IntKi), PARAMETER :: M5N8MMGxi = 2798 - INTEGER(IntKi), PARAMETER :: M5N9MMGxi = 2799 - INTEGER(IntKi), PARAMETER :: M6N1MMGxi = 2800 - INTEGER(IntKi), PARAMETER :: M6N2MMGxi = 2801 - INTEGER(IntKi), PARAMETER :: M6N3MMGxi = 2802 - INTEGER(IntKi), PARAMETER :: M6N4MMGxi = 2803 - INTEGER(IntKi), PARAMETER :: M6N5MMGxi = 2804 - INTEGER(IntKi), PARAMETER :: M6N6MMGxi = 2805 - INTEGER(IntKi), PARAMETER :: M6N7MMGxi = 2806 - INTEGER(IntKi), PARAMETER :: M6N8MMGxi = 2807 - INTEGER(IntKi), PARAMETER :: M6N9MMGxi = 2808 - INTEGER(IntKi), PARAMETER :: M7N1MMGxi = 2809 - INTEGER(IntKi), PARAMETER :: M7N2MMGxi = 2810 - INTEGER(IntKi), PARAMETER :: M7N3MMGxi = 2811 - INTEGER(IntKi), PARAMETER :: M7N4MMGxi = 2812 - INTEGER(IntKi), PARAMETER :: M7N5MMGxi = 2813 - INTEGER(IntKi), PARAMETER :: M7N6MMGxi = 2814 - INTEGER(IntKi), PARAMETER :: M7N7MMGxi = 2815 - INTEGER(IntKi), PARAMETER :: M7N8MMGxi = 2816 - INTEGER(IntKi), PARAMETER :: M7N9MMGxi = 2817 - INTEGER(IntKi), PARAMETER :: M8N1MMGxi = 2818 - INTEGER(IntKi), PARAMETER :: M8N2MMGxi = 2819 - INTEGER(IntKi), PARAMETER :: M8N3MMGxi = 2820 - INTEGER(IntKi), PARAMETER :: M8N4MMGxi = 2821 - INTEGER(IntKi), PARAMETER :: M8N5MMGxi = 2822 - INTEGER(IntKi), PARAMETER :: M8N6MMGxi = 2823 - INTEGER(IntKi), PARAMETER :: M8N7MMGxi = 2824 - INTEGER(IntKi), PARAMETER :: M8N8MMGxi = 2825 - INTEGER(IntKi), PARAMETER :: M8N9MMGxi = 2826 - INTEGER(IntKi), PARAMETER :: M9N1MMGxi = 2827 - INTEGER(IntKi), PARAMETER :: M9N2MMGxi = 2828 - INTEGER(IntKi), PARAMETER :: M9N3MMGxi = 2829 - INTEGER(IntKi), PARAMETER :: M9N4MMGxi = 2830 - INTEGER(IntKi), PARAMETER :: M9N5MMGxi = 2831 - INTEGER(IntKi), PARAMETER :: M9N6MMGxi = 2832 - INTEGER(IntKi), PARAMETER :: M9N7MMGxi = 2833 - INTEGER(IntKi), PARAMETER :: M9N8MMGxi = 2834 - INTEGER(IntKi), PARAMETER :: M9N9MMGxi = 2835 - INTEGER(IntKi), PARAMETER :: M1N1MMGyi = 2836 - INTEGER(IntKi), PARAMETER :: M1N2MMGyi = 2837 - INTEGER(IntKi), PARAMETER :: M1N3MMGyi = 2838 - INTEGER(IntKi), PARAMETER :: M1N4MMGyi = 2839 - INTEGER(IntKi), PARAMETER :: M1N5MMGyi = 2840 - INTEGER(IntKi), PARAMETER :: M1N6MMGyi = 2841 - INTEGER(IntKi), PARAMETER :: M1N7MMGyi = 2842 - INTEGER(IntKi), PARAMETER :: M1N8MMGyi = 2843 - INTEGER(IntKi), PARAMETER :: M1N9MMGyi = 2844 - INTEGER(IntKi), PARAMETER :: M2N1MMGyi = 2845 - INTEGER(IntKi), PARAMETER :: M2N2MMGyi = 2846 - INTEGER(IntKi), PARAMETER :: M2N3MMGyi = 2847 - INTEGER(IntKi), PARAMETER :: M2N4MMGyi = 2848 - INTEGER(IntKi), PARAMETER :: M2N5MMGyi = 2849 - INTEGER(IntKi), PARAMETER :: M2N6MMGyi = 2850 - INTEGER(IntKi), PARAMETER :: M2N7MMGyi = 2851 - INTEGER(IntKi), PARAMETER :: M2N8MMGyi = 2852 - INTEGER(IntKi), PARAMETER :: M2N9MMGyi = 2853 - INTEGER(IntKi), PARAMETER :: M3N1MMGyi = 2854 - INTEGER(IntKi), PARAMETER :: M3N2MMGyi = 2855 - INTEGER(IntKi), PARAMETER :: M3N3MMGyi = 2856 - INTEGER(IntKi), PARAMETER :: M3N4MMGyi = 2857 - INTEGER(IntKi), PARAMETER :: M3N5MMGyi = 2858 - INTEGER(IntKi), PARAMETER :: M3N6MMGyi = 2859 - INTEGER(IntKi), PARAMETER :: M3N7MMGyi = 2860 - INTEGER(IntKi), PARAMETER :: M3N8MMGyi = 2861 - INTEGER(IntKi), PARAMETER :: M3N9MMGyi = 2862 - INTEGER(IntKi), PARAMETER :: M4N1MMGyi = 2863 - INTEGER(IntKi), PARAMETER :: M4N2MMGyi = 2864 - INTEGER(IntKi), PARAMETER :: M4N3MMGyi = 2865 - INTEGER(IntKi), PARAMETER :: M4N4MMGyi = 2866 - INTEGER(IntKi), PARAMETER :: M4N5MMGyi = 2867 - INTEGER(IntKi), PARAMETER :: M4N6MMGyi = 2868 - INTEGER(IntKi), PARAMETER :: M4N7MMGyi = 2869 - INTEGER(IntKi), PARAMETER :: M4N8MMGyi = 2870 - INTEGER(IntKi), PARAMETER :: M4N9MMGyi = 2871 - INTEGER(IntKi), PARAMETER :: M5N1MMGyi = 2872 - INTEGER(IntKi), PARAMETER :: M5N2MMGyi = 2873 - INTEGER(IntKi), PARAMETER :: M5N3MMGyi = 2874 - INTEGER(IntKi), PARAMETER :: M5N4MMGyi = 2875 - INTEGER(IntKi), PARAMETER :: M5N5MMGyi = 2876 - INTEGER(IntKi), PARAMETER :: M5N6MMGyi = 2877 - INTEGER(IntKi), PARAMETER :: M5N7MMGyi = 2878 - INTEGER(IntKi), PARAMETER :: M5N8MMGyi = 2879 - INTEGER(IntKi), PARAMETER :: M5N9MMGyi = 2880 - INTEGER(IntKi), PARAMETER :: M6N1MMGyi = 2881 - INTEGER(IntKi), PARAMETER :: M6N2MMGyi = 2882 - INTEGER(IntKi), PARAMETER :: M6N3MMGyi = 2883 - INTEGER(IntKi), PARAMETER :: M6N4MMGyi = 2884 - INTEGER(IntKi), PARAMETER :: M6N5MMGyi = 2885 - INTEGER(IntKi), PARAMETER :: M6N6MMGyi = 2886 - INTEGER(IntKi), PARAMETER :: M6N7MMGyi = 2887 - INTEGER(IntKi), PARAMETER :: M6N8MMGyi = 2888 - INTEGER(IntKi), PARAMETER :: M6N9MMGyi = 2889 - INTEGER(IntKi), PARAMETER :: M7N1MMGyi = 2890 - INTEGER(IntKi), PARAMETER :: M7N2MMGyi = 2891 - INTEGER(IntKi), PARAMETER :: M7N3MMGyi = 2892 - INTEGER(IntKi), PARAMETER :: M7N4MMGyi = 2893 - INTEGER(IntKi), PARAMETER :: M7N5MMGyi = 2894 - INTEGER(IntKi), PARAMETER :: M7N6MMGyi = 2895 - INTEGER(IntKi), PARAMETER :: M7N7MMGyi = 2896 - INTEGER(IntKi), PARAMETER :: M7N8MMGyi = 2897 - INTEGER(IntKi), PARAMETER :: M7N9MMGyi = 2898 - INTEGER(IntKi), PARAMETER :: M8N1MMGyi = 2899 - INTEGER(IntKi), PARAMETER :: M8N2MMGyi = 2900 - INTEGER(IntKi), PARAMETER :: M8N3MMGyi = 2901 - INTEGER(IntKi), PARAMETER :: M8N4MMGyi = 2902 - INTEGER(IntKi), PARAMETER :: M8N5MMGyi = 2903 - INTEGER(IntKi), PARAMETER :: M8N6MMGyi = 2904 - INTEGER(IntKi), PARAMETER :: M8N7MMGyi = 2905 - INTEGER(IntKi), PARAMETER :: M8N8MMGyi = 2906 - INTEGER(IntKi), PARAMETER :: M8N9MMGyi = 2907 - INTEGER(IntKi), PARAMETER :: M9N1MMGyi = 2908 - INTEGER(IntKi), PARAMETER :: M9N2MMGyi = 2909 - INTEGER(IntKi), PARAMETER :: M9N3MMGyi = 2910 - INTEGER(IntKi), PARAMETER :: M9N4MMGyi = 2911 - INTEGER(IntKi), PARAMETER :: M9N5MMGyi = 2912 - INTEGER(IntKi), PARAMETER :: M9N6MMGyi = 2913 - INTEGER(IntKi), PARAMETER :: M9N7MMGyi = 2914 - INTEGER(IntKi), PARAMETER :: M9N8MMGyi = 2915 - INTEGER(IntKi), PARAMETER :: M9N9MMGyi = 2916 - INTEGER(IntKi), PARAMETER :: M1N1MMGzi = 2917 - INTEGER(IntKi), PARAMETER :: M1N2MMGzi = 2918 - INTEGER(IntKi), PARAMETER :: M1N3MMGzi = 2919 - INTEGER(IntKi), PARAMETER :: M1N4MMGzi = 2920 - INTEGER(IntKi), PARAMETER :: M1N5MMGzi = 2921 - INTEGER(IntKi), PARAMETER :: M1N6MMGzi = 2922 - INTEGER(IntKi), PARAMETER :: M1N7MMGzi = 2923 - INTEGER(IntKi), PARAMETER :: M1N8MMGzi = 2924 - INTEGER(IntKi), PARAMETER :: M1N9MMGzi = 2925 - INTEGER(IntKi), PARAMETER :: M2N1MMGzi = 2926 - INTEGER(IntKi), PARAMETER :: M2N2MMGzi = 2927 - INTEGER(IntKi), PARAMETER :: M2N3MMGzi = 2928 - INTEGER(IntKi), PARAMETER :: M2N4MMGzi = 2929 - INTEGER(IntKi), PARAMETER :: M2N5MMGzi = 2930 - INTEGER(IntKi), PARAMETER :: M2N6MMGzi = 2931 - INTEGER(IntKi), PARAMETER :: M2N7MMGzi = 2932 - INTEGER(IntKi), PARAMETER :: M2N8MMGzi = 2933 - INTEGER(IntKi), PARAMETER :: M2N9MMGzi = 2934 - INTEGER(IntKi), PARAMETER :: M3N1MMGzi = 2935 - INTEGER(IntKi), PARAMETER :: M3N2MMGzi = 2936 - INTEGER(IntKi), PARAMETER :: M3N3MMGzi = 2937 - INTEGER(IntKi), PARAMETER :: M3N4MMGzi = 2938 - INTEGER(IntKi), PARAMETER :: M3N5MMGzi = 2939 - INTEGER(IntKi), PARAMETER :: M3N6MMGzi = 2940 - INTEGER(IntKi), PARAMETER :: M3N7MMGzi = 2941 - INTEGER(IntKi), PARAMETER :: M3N8MMGzi = 2942 - INTEGER(IntKi), PARAMETER :: M3N9MMGzi = 2943 - INTEGER(IntKi), PARAMETER :: M4N1MMGzi = 2944 - INTEGER(IntKi), PARAMETER :: M4N2MMGzi = 2945 - INTEGER(IntKi), PARAMETER :: M4N3MMGzi = 2946 - INTEGER(IntKi), PARAMETER :: M4N4MMGzi = 2947 - INTEGER(IntKi), PARAMETER :: M4N5MMGzi = 2948 - INTEGER(IntKi), PARAMETER :: M4N6MMGzi = 2949 - INTEGER(IntKi), PARAMETER :: M4N7MMGzi = 2950 - INTEGER(IntKi), PARAMETER :: M4N8MMGzi = 2951 - INTEGER(IntKi), PARAMETER :: M4N9MMGzi = 2952 - INTEGER(IntKi), PARAMETER :: M5N1MMGzi = 2953 - INTEGER(IntKi), PARAMETER :: M5N2MMGzi = 2954 - INTEGER(IntKi), PARAMETER :: M5N3MMGzi = 2955 - INTEGER(IntKi), PARAMETER :: M5N4MMGzi = 2956 - INTEGER(IntKi), PARAMETER :: M5N5MMGzi = 2957 - INTEGER(IntKi), PARAMETER :: M5N6MMGzi = 2958 - INTEGER(IntKi), PARAMETER :: M5N7MMGzi = 2959 - INTEGER(IntKi), PARAMETER :: M5N8MMGzi = 2960 - INTEGER(IntKi), PARAMETER :: M5N9MMGzi = 2961 - INTEGER(IntKi), PARAMETER :: M6N1MMGzi = 2962 - INTEGER(IntKi), PARAMETER :: M6N2MMGzi = 2963 - INTEGER(IntKi), PARAMETER :: M6N3MMGzi = 2964 - INTEGER(IntKi), PARAMETER :: M6N4MMGzi = 2965 - INTEGER(IntKi), PARAMETER :: M6N5MMGzi = 2966 - INTEGER(IntKi), PARAMETER :: M6N6MMGzi = 2967 - INTEGER(IntKi), PARAMETER :: M6N7MMGzi = 2968 - INTEGER(IntKi), PARAMETER :: M6N8MMGzi = 2969 - INTEGER(IntKi), PARAMETER :: M6N9MMGzi = 2970 - INTEGER(IntKi), PARAMETER :: M7N1MMGzi = 2971 - INTEGER(IntKi), PARAMETER :: M7N2MMGzi = 2972 - INTEGER(IntKi), PARAMETER :: M7N3MMGzi = 2973 - INTEGER(IntKi), PARAMETER :: M7N4MMGzi = 2974 - INTEGER(IntKi), PARAMETER :: M7N5MMGzi = 2975 - INTEGER(IntKi), PARAMETER :: M7N6MMGzi = 2976 - INTEGER(IntKi), PARAMETER :: M7N7MMGzi = 2977 - INTEGER(IntKi), PARAMETER :: M7N8MMGzi = 2978 - INTEGER(IntKi), PARAMETER :: M7N9MMGzi = 2979 - INTEGER(IntKi), PARAMETER :: M8N1MMGzi = 2980 - INTEGER(IntKi), PARAMETER :: M8N2MMGzi = 2981 - INTEGER(IntKi), PARAMETER :: M8N3MMGzi = 2982 - INTEGER(IntKi), PARAMETER :: M8N4MMGzi = 2983 - INTEGER(IntKi), PARAMETER :: M8N5MMGzi = 2984 - INTEGER(IntKi), PARAMETER :: M8N6MMGzi = 2985 - INTEGER(IntKi), PARAMETER :: M8N7MMGzi = 2986 - INTEGER(IntKi), PARAMETER :: M8N8MMGzi = 2987 - INTEGER(IntKi), PARAMETER :: M8N9MMGzi = 2988 - INTEGER(IntKi), PARAMETER :: M9N1MMGzi = 2989 - INTEGER(IntKi), PARAMETER :: M9N2MMGzi = 2990 - INTEGER(IntKi), PARAMETER :: M9N3MMGzi = 2991 - INTEGER(IntKi), PARAMETER :: M9N4MMGzi = 2992 - INTEGER(IntKi), PARAMETER :: M9N5MMGzi = 2993 - INTEGER(IntKi), PARAMETER :: M9N6MMGzi = 2994 - INTEGER(IntKi), PARAMETER :: M9N7MMGzi = 2995 - INTEGER(IntKi), PARAMETER :: M9N8MMGzi = 2996 - INTEGER(IntKi), PARAMETER :: M9N9MMGzi = 2997 - INTEGER(IntKi), PARAMETER :: M1N1FAMxi = 2998 - INTEGER(IntKi), PARAMETER :: M1N2FAMxi = 2999 - INTEGER(IntKi), PARAMETER :: M1N3FAMxi = 3000 - INTEGER(IntKi), PARAMETER :: M1N4FAMxi = 3001 - INTEGER(IntKi), PARAMETER :: M1N5FAMxi = 3002 - INTEGER(IntKi), PARAMETER :: M1N6FAMxi = 3003 - INTEGER(IntKi), PARAMETER :: M1N7FAMxi = 3004 - INTEGER(IntKi), PARAMETER :: M1N8FAMxi = 3005 - INTEGER(IntKi), PARAMETER :: M1N9FAMxi = 3006 - INTEGER(IntKi), PARAMETER :: M2N1FAMxi = 3007 - INTEGER(IntKi), PARAMETER :: M2N2FAMxi = 3008 - INTEGER(IntKi), PARAMETER :: M2N3FAMxi = 3009 - INTEGER(IntKi), PARAMETER :: M2N4FAMxi = 3010 - INTEGER(IntKi), PARAMETER :: M2N5FAMxi = 3011 - INTEGER(IntKi), PARAMETER :: M2N6FAMxi = 3012 - INTEGER(IntKi), PARAMETER :: M2N7FAMxi = 3013 - INTEGER(IntKi), PARAMETER :: M2N8FAMxi = 3014 - INTEGER(IntKi), PARAMETER :: M2N9FAMxi = 3015 - INTEGER(IntKi), PARAMETER :: M3N1FAMxi = 3016 - INTEGER(IntKi), PARAMETER :: M3N2FAMxi = 3017 - INTEGER(IntKi), PARAMETER :: M3N3FAMxi = 3018 - INTEGER(IntKi), PARAMETER :: M3N4FAMxi = 3019 - INTEGER(IntKi), PARAMETER :: M3N5FAMxi = 3020 - INTEGER(IntKi), PARAMETER :: M3N6FAMxi = 3021 - INTEGER(IntKi), PARAMETER :: M3N7FAMxi = 3022 - INTEGER(IntKi), PARAMETER :: M3N8FAMxi = 3023 - INTEGER(IntKi), PARAMETER :: M3N9FAMxi = 3024 - INTEGER(IntKi), PARAMETER :: M4N1FAMxi = 3025 - INTEGER(IntKi), PARAMETER :: M4N2FAMxi = 3026 - INTEGER(IntKi), PARAMETER :: M4N3FAMxi = 3027 - INTEGER(IntKi), PARAMETER :: M4N4FAMxi = 3028 - INTEGER(IntKi), PARAMETER :: M4N5FAMxi = 3029 - INTEGER(IntKi), PARAMETER :: M4N6FAMxi = 3030 - INTEGER(IntKi), PARAMETER :: M4N7FAMxi = 3031 - INTEGER(IntKi), PARAMETER :: M4N8FAMxi = 3032 - INTEGER(IntKi), PARAMETER :: M4N9FAMxi = 3033 - INTEGER(IntKi), PARAMETER :: M5N1FAMxi = 3034 - INTEGER(IntKi), PARAMETER :: M5N2FAMxi = 3035 - INTEGER(IntKi), PARAMETER :: M5N3FAMxi = 3036 - INTEGER(IntKi), PARAMETER :: M5N4FAMxi = 3037 - INTEGER(IntKi), PARAMETER :: M5N5FAMxi = 3038 - INTEGER(IntKi), PARAMETER :: M5N6FAMxi = 3039 - INTEGER(IntKi), PARAMETER :: M5N7FAMxi = 3040 - INTEGER(IntKi), PARAMETER :: M5N8FAMxi = 3041 - INTEGER(IntKi), PARAMETER :: M5N9FAMxi = 3042 - INTEGER(IntKi), PARAMETER :: M6N1FAMxi = 3043 - INTEGER(IntKi), PARAMETER :: M6N2FAMxi = 3044 - INTEGER(IntKi), PARAMETER :: M6N3FAMxi = 3045 - INTEGER(IntKi), PARAMETER :: M6N4FAMxi = 3046 - INTEGER(IntKi), PARAMETER :: M6N5FAMxi = 3047 - INTEGER(IntKi), PARAMETER :: M6N6FAMxi = 3048 - INTEGER(IntKi), PARAMETER :: M6N7FAMxi = 3049 - INTEGER(IntKi), PARAMETER :: M6N8FAMxi = 3050 - INTEGER(IntKi), PARAMETER :: M6N9FAMxi = 3051 - INTEGER(IntKi), PARAMETER :: M7N1FAMxi = 3052 - INTEGER(IntKi), PARAMETER :: M7N2FAMxi = 3053 - INTEGER(IntKi), PARAMETER :: M7N3FAMxi = 3054 - INTEGER(IntKi), PARAMETER :: M7N4FAMxi = 3055 - INTEGER(IntKi), PARAMETER :: M7N5FAMxi = 3056 - INTEGER(IntKi), PARAMETER :: M7N6FAMxi = 3057 - INTEGER(IntKi), PARAMETER :: M7N7FAMxi = 3058 - INTEGER(IntKi), PARAMETER :: M7N8FAMxi = 3059 - INTEGER(IntKi), PARAMETER :: M7N9FAMxi = 3060 - INTEGER(IntKi), PARAMETER :: M8N1FAMxi = 3061 - INTEGER(IntKi), PARAMETER :: M8N2FAMxi = 3062 - INTEGER(IntKi), PARAMETER :: M8N3FAMxi = 3063 - INTEGER(IntKi), PARAMETER :: M8N4FAMxi = 3064 - INTEGER(IntKi), PARAMETER :: M8N5FAMxi = 3065 - INTEGER(IntKi), PARAMETER :: M8N6FAMxi = 3066 - INTEGER(IntKi), PARAMETER :: M8N7FAMxi = 3067 - INTEGER(IntKi), PARAMETER :: M8N8FAMxi = 3068 - INTEGER(IntKi), PARAMETER :: M8N9FAMxi = 3069 - INTEGER(IntKi), PARAMETER :: M9N1FAMxi = 3070 - INTEGER(IntKi), PARAMETER :: M9N2FAMxi = 3071 - INTEGER(IntKi), PARAMETER :: M9N3FAMxi = 3072 - INTEGER(IntKi), PARAMETER :: M9N4FAMxi = 3073 - INTEGER(IntKi), PARAMETER :: M9N5FAMxi = 3074 - INTEGER(IntKi), PARAMETER :: M9N6FAMxi = 3075 - INTEGER(IntKi), PARAMETER :: M9N7FAMxi = 3076 - INTEGER(IntKi), PARAMETER :: M9N8FAMxi = 3077 - INTEGER(IntKi), PARAMETER :: M9N9FAMxi = 3078 - INTEGER(IntKi), PARAMETER :: M1N1FAMyi = 3079 - INTEGER(IntKi), PARAMETER :: M1N2FAMyi = 3080 - INTEGER(IntKi), PARAMETER :: M1N3FAMyi = 3081 - INTEGER(IntKi), PARAMETER :: M1N4FAMyi = 3082 - INTEGER(IntKi), PARAMETER :: M1N5FAMyi = 3083 - INTEGER(IntKi), PARAMETER :: M1N6FAMyi = 3084 - INTEGER(IntKi), PARAMETER :: M1N7FAMyi = 3085 - INTEGER(IntKi), PARAMETER :: M1N8FAMyi = 3086 - INTEGER(IntKi), PARAMETER :: M1N9FAMyi = 3087 - INTEGER(IntKi), PARAMETER :: M2N1FAMyi = 3088 - INTEGER(IntKi), PARAMETER :: M2N2FAMyi = 3089 - INTEGER(IntKi), PARAMETER :: M2N3FAMyi = 3090 - INTEGER(IntKi), PARAMETER :: M2N4FAMyi = 3091 - INTEGER(IntKi), PARAMETER :: M2N5FAMyi = 3092 - INTEGER(IntKi), PARAMETER :: M2N6FAMyi = 3093 - INTEGER(IntKi), PARAMETER :: M2N7FAMyi = 3094 - INTEGER(IntKi), PARAMETER :: M2N8FAMyi = 3095 - INTEGER(IntKi), PARAMETER :: M2N9FAMyi = 3096 - INTEGER(IntKi), PARAMETER :: M3N1FAMyi = 3097 - INTEGER(IntKi), PARAMETER :: M3N2FAMyi = 3098 - INTEGER(IntKi), PARAMETER :: M3N3FAMyi = 3099 - INTEGER(IntKi), PARAMETER :: M3N4FAMyi = 3100 - INTEGER(IntKi), PARAMETER :: M3N5FAMyi = 3101 - INTEGER(IntKi), PARAMETER :: M3N6FAMyi = 3102 - INTEGER(IntKi), PARAMETER :: M3N7FAMyi = 3103 - INTEGER(IntKi), PARAMETER :: M3N8FAMyi = 3104 - INTEGER(IntKi), PARAMETER :: M3N9FAMyi = 3105 - INTEGER(IntKi), PARAMETER :: M4N1FAMyi = 3106 - INTEGER(IntKi), PARAMETER :: M4N2FAMyi = 3107 - INTEGER(IntKi), PARAMETER :: M4N3FAMyi = 3108 - INTEGER(IntKi), PARAMETER :: M4N4FAMyi = 3109 - INTEGER(IntKi), PARAMETER :: M4N5FAMyi = 3110 - INTEGER(IntKi), PARAMETER :: M4N6FAMyi = 3111 - INTEGER(IntKi), PARAMETER :: M4N7FAMyi = 3112 - INTEGER(IntKi), PARAMETER :: M4N8FAMyi = 3113 - INTEGER(IntKi), PARAMETER :: M4N9FAMyi = 3114 - INTEGER(IntKi), PARAMETER :: M5N1FAMyi = 3115 - INTEGER(IntKi), PARAMETER :: M5N2FAMyi = 3116 - INTEGER(IntKi), PARAMETER :: M5N3FAMyi = 3117 - INTEGER(IntKi), PARAMETER :: M5N4FAMyi = 3118 - INTEGER(IntKi), PARAMETER :: M5N5FAMyi = 3119 - INTEGER(IntKi), PARAMETER :: M5N6FAMyi = 3120 - INTEGER(IntKi), PARAMETER :: M5N7FAMyi = 3121 - INTEGER(IntKi), PARAMETER :: M5N8FAMyi = 3122 - INTEGER(IntKi), PARAMETER :: M5N9FAMyi = 3123 - INTEGER(IntKi), PARAMETER :: M6N1FAMyi = 3124 - INTEGER(IntKi), PARAMETER :: M6N2FAMyi = 3125 - INTEGER(IntKi), PARAMETER :: M6N3FAMyi = 3126 - INTEGER(IntKi), PARAMETER :: M6N4FAMyi = 3127 - INTEGER(IntKi), PARAMETER :: M6N5FAMyi = 3128 - INTEGER(IntKi), PARAMETER :: M6N6FAMyi = 3129 - INTEGER(IntKi), PARAMETER :: M6N7FAMyi = 3130 - INTEGER(IntKi), PARAMETER :: M6N8FAMyi = 3131 - INTEGER(IntKi), PARAMETER :: M6N9FAMyi = 3132 - INTEGER(IntKi), PARAMETER :: M7N1FAMyi = 3133 - INTEGER(IntKi), PARAMETER :: M7N2FAMyi = 3134 - INTEGER(IntKi), PARAMETER :: M7N3FAMyi = 3135 - INTEGER(IntKi), PARAMETER :: M7N4FAMyi = 3136 - INTEGER(IntKi), PARAMETER :: M7N5FAMyi = 3137 - INTEGER(IntKi), PARAMETER :: M7N6FAMyi = 3138 - INTEGER(IntKi), PARAMETER :: M7N7FAMyi = 3139 - INTEGER(IntKi), PARAMETER :: M7N8FAMyi = 3140 - INTEGER(IntKi), PARAMETER :: M7N9FAMyi = 3141 - INTEGER(IntKi), PARAMETER :: M8N1FAMyi = 3142 - INTEGER(IntKi), PARAMETER :: M8N2FAMyi = 3143 - INTEGER(IntKi), PARAMETER :: M8N3FAMyi = 3144 - INTEGER(IntKi), PARAMETER :: M8N4FAMyi = 3145 - INTEGER(IntKi), PARAMETER :: M8N5FAMyi = 3146 - INTEGER(IntKi), PARAMETER :: M8N6FAMyi = 3147 - INTEGER(IntKi), PARAMETER :: M8N7FAMyi = 3148 - INTEGER(IntKi), PARAMETER :: M8N8FAMyi = 3149 - INTEGER(IntKi), PARAMETER :: M8N9FAMyi = 3150 - INTEGER(IntKi), PARAMETER :: M9N1FAMyi = 3151 - INTEGER(IntKi), PARAMETER :: M9N2FAMyi = 3152 - INTEGER(IntKi), PARAMETER :: M9N3FAMyi = 3153 - INTEGER(IntKi), PARAMETER :: M9N4FAMyi = 3154 - INTEGER(IntKi), PARAMETER :: M9N5FAMyi = 3155 - INTEGER(IntKi), PARAMETER :: M9N6FAMyi = 3156 - INTEGER(IntKi), PARAMETER :: M9N7FAMyi = 3157 - INTEGER(IntKi), PARAMETER :: M9N8FAMyi = 3158 - INTEGER(IntKi), PARAMETER :: M9N9FAMyi = 3159 - INTEGER(IntKi), PARAMETER :: M1N1FAMzi = 3160 - INTEGER(IntKi), PARAMETER :: M1N2FAMzi = 3161 - INTEGER(IntKi), PARAMETER :: M1N3FAMzi = 3162 - INTEGER(IntKi), PARAMETER :: M1N4FAMzi = 3163 - INTEGER(IntKi), PARAMETER :: M1N5FAMzi = 3164 - INTEGER(IntKi), PARAMETER :: M1N6FAMzi = 3165 - INTEGER(IntKi), PARAMETER :: M1N7FAMzi = 3166 - INTEGER(IntKi), PARAMETER :: M1N8FAMzi = 3167 - INTEGER(IntKi), PARAMETER :: M1N9FAMzi = 3168 - INTEGER(IntKi), PARAMETER :: M2N1FAMzi = 3169 - INTEGER(IntKi), PARAMETER :: M2N2FAMzi = 3170 - INTEGER(IntKi), PARAMETER :: M2N3FAMzi = 3171 - INTEGER(IntKi), PARAMETER :: M2N4FAMzi = 3172 - INTEGER(IntKi), PARAMETER :: M2N5FAMzi = 3173 - INTEGER(IntKi), PARAMETER :: M2N6FAMzi = 3174 - INTEGER(IntKi), PARAMETER :: M2N7FAMzi = 3175 - INTEGER(IntKi), PARAMETER :: M2N8FAMzi = 3176 - INTEGER(IntKi), PARAMETER :: M2N9FAMzi = 3177 - INTEGER(IntKi), PARAMETER :: M3N1FAMzi = 3178 - INTEGER(IntKi), PARAMETER :: M3N2FAMzi = 3179 - INTEGER(IntKi), PARAMETER :: M3N3FAMzi = 3180 - INTEGER(IntKi), PARAMETER :: M3N4FAMzi = 3181 - INTEGER(IntKi), PARAMETER :: M3N5FAMzi = 3182 - INTEGER(IntKi), PARAMETER :: M3N6FAMzi = 3183 - INTEGER(IntKi), PARAMETER :: M3N7FAMzi = 3184 - INTEGER(IntKi), PARAMETER :: M3N8FAMzi = 3185 - INTEGER(IntKi), PARAMETER :: M3N9FAMzi = 3186 - INTEGER(IntKi), PARAMETER :: M4N1FAMzi = 3187 - INTEGER(IntKi), PARAMETER :: M4N2FAMzi = 3188 - INTEGER(IntKi), PARAMETER :: M4N3FAMzi = 3189 - INTEGER(IntKi), PARAMETER :: M4N4FAMzi = 3190 - INTEGER(IntKi), PARAMETER :: M4N5FAMzi = 3191 - INTEGER(IntKi), PARAMETER :: M4N6FAMzi = 3192 - INTEGER(IntKi), PARAMETER :: M4N7FAMzi = 3193 - INTEGER(IntKi), PARAMETER :: M4N8FAMzi = 3194 - INTEGER(IntKi), PARAMETER :: M4N9FAMzi = 3195 - INTEGER(IntKi), PARAMETER :: M5N1FAMzi = 3196 - INTEGER(IntKi), PARAMETER :: M5N2FAMzi = 3197 - INTEGER(IntKi), PARAMETER :: M5N3FAMzi = 3198 - INTEGER(IntKi), PARAMETER :: M5N4FAMzi = 3199 - INTEGER(IntKi), PARAMETER :: M5N5FAMzi = 3200 - INTEGER(IntKi), PARAMETER :: M5N6FAMzi = 3201 - INTEGER(IntKi), PARAMETER :: M5N7FAMzi = 3202 - INTEGER(IntKi), PARAMETER :: M5N8FAMzi = 3203 - INTEGER(IntKi), PARAMETER :: M5N9FAMzi = 3204 - INTEGER(IntKi), PARAMETER :: M6N1FAMzi = 3205 - INTEGER(IntKi), PARAMETER :: M6N2FAMzi = 3206 - INTEGER(IntKi), PARAMETER :: M6N3FAMzi = 3207 - INTEGER(IntKi), PARAMETER :: M6N4FAMzi = 3208 - INTEGER(IntKi), PARAMETER :: M6N5FAMzi = 3209 - INTEGER(IntKi), PARAMETER :: M6N6FAMzi = 3210 - INTEGER(IntKi), PARAMETER :: M6N7FAMzi = 3211 - INTEGER(IntKi), PARAMETER :: M6N8FAMzi = 3212 - INTEGER(IntKi), PARAMETER :: M6N9FAMzi = 3213 - INTEGER(IntKi), PARAMETER :: M7N1FAMzi = 3214 - INTEGER(IntKi), PARAMETER :: M7N2FAMzi = 3215 - INTEGER(IntKi), PARAMETER :: M7N3FAMzi = 3216 - INTEGER(IntKi), PARAMETER :: M7N4FAMzi = 3217 - INTEGER(IntKi), PARAMETER :: M7N5FAMzi = 3218 - INTEGER(IntKi), PARAMETER :: M7N6FAMzi = 3219 - INTEGER(IntKi), PARAMETER :: M7N7FAMzi = 3220 - INTEGER(IntKi), PARAMETER :: M7N8FAMzi = 3221 - INTEGER(IntKi), PARAMETER :: M7N9FAMzi = 3222 - INTEGER(IntKi), PARAMETER :: M8N1FAMzi = 3223 - INTEGER(IntKi), PARAMETER :: M8N2FAMzi = 3224 - INTEGER(IntKi), PARAMETER :: M8N3FAMzi = 3225 - INTEGER(IntKi), PARAMETER :: M8N4FAMzi = 3226 - INTEGER(IntKi), PARAMETER :: M8N5FAMzi = 3227 - INTEGER(IntKi), PARAMETER :: M8N6FAMzi = 3228 - INTEGER(IntKi), PARAMETER :: M8N7FAMzi = 3229 - INTEGER(IntKi), PARAMETER :: M8N8FAMzi = 3230 - INTEGER(IntKi), PARAMETER :: M8N9FAMzi = 3231 - INTEGER(IntKi), PARAMETER :: M9N1FAMzi = 3232 - INTEGER(IntKi), PARAMETER :: M9N2FAMzi = 3233 - INTEGER(IntKi), PARAMETER :: M9N3FAMzi = 3234 - INTEGER(IntKi), PARAMETER :: M9N4FAMzi = 3235 - INTEGER(IntKi), PARAMETER :: M9N5FAMzi = 3236 - INTEGER(IntKi), PARAMETER :: M9N6FAMzi = 3237 - INTEGER(IntKi), PARAMETER :: M9N7FAMzi = 3238 - INTEGER(IntKi), PARAMETER :: M9N8FAMzi = 3239 - INTEGER(IntKi), PARAMETER :: M9N9FAMzi = 3240 - INTEGER(IntKi), PARAMETER :: M1N1FAGxi = 3241 - INTEGER(IntKi), PARAMETER :: M1N2FAGxi = 3242 - INTEGER(IntKi), PARAMETER :: M1N3FAGxi = 3243 - INTEGER(IntKi), PARAMETER :: M1N4FAGxi = 3244 - INTEGER(IntKi), PARAMETER :: M1N5FAGxi = 3245 - INTEGER(IntKi), PARAMETER :: M1N6FAGxi = 3246 - INTEGER(IntKi), PARAMETER :: M1N7FAGxi = 3247 - INTEGER(IntKi), PARAMETER :: M1N8FAGxi = 3248 - INTEGER(IntKi), PARAMETER :: M1N9FAGxi = 3249 - INTEGER(IntKi), PARAMETER :: M2N1FAGxi = 3250 - INTEGER(IntKi), PARAMETER :: M2N2FAGxi = 3251 - INTEGER(IntKi), PARAMETER :: M2N3FAGxi = 3252 - INTEGER(IntKi), PARAMETER :: M2N4FAGxi = 3253 - INTEGER(IntKi), PARAMETER :: M2N5FAGxi = 3254 - INTEGER(IntKi), PARAMETER :: M2N6FAGxi = 3255 - INTEGER(IntKi), PARAMETER :: M2N7FAGxi = 3256 - INTEGER(IntKi), PARAMETER :: M2N8FAGxi = 3257 - INTEGER(IntKi), PARAMETER :: M2N9FAGxi = 3258 - INTEGER(IntKi), PARAMETER :: M3N1FAGxi = 3259 - INTEGER(IntKi), PARAMETER :: M3N2FAGxi = 3260 - INTEGER(IntKi), PARAMETER :: M3N3FAGxi = 3261 - INTEGER(IntKi), PARAMETER :: M3N4FAGxi = 3262 - INTEGER(IntKi), PARAMETER :: M3N5FAGxi = 3263 - INTEGER(IntKi), PARAMETER :: M3N6FAGxi = 3264 - INTEGER(IntKi), PARAMETER :: M3N7FAGxi = 3265 - INTEGER(IntKi), PARAMETER :: M3N8FAGxi = 3266 - INTEGER(IntKi), PARAMETER :: M3N9FAGxi = 3267 - INTEGER(IntKi), PARAMETER :: M4N1FAGxi = 3268 - INTEGER(IntKi), PARAMETER :: M4N2FAGxi = 3269 - INTEGER(IntKi), PARAMETER :: M4N3FAGxi = 3270 - INTEGER(IntKi), PARAMETER :: M4N4FAGxi = 3271 - INTEGER(IntKi), PARAMETER :: M4N5FAGxi = 3272 - INTEGER(IntKi), PARAMETER :: M4N6FAGxi = 3273 - INTEGER(IntKi), PARAMETER :: M4N7FAGxi = 3274 - INTEGER(IntKi), PARAMETER :: M4N8FAGxi = 3275 - INTEGER(IntKi), PARAMETER :: M4N9FAGxi = 3276 - INTEGER(IntKi), PARAMETER :: M5N1FAGxi = 3277 - INTEGER(IntKi), PARAMETER :: M5N2FAGxi = 3278 - INTEGER(IntKi), PARAMETER :: M5N3FAGxi = 3279 - INTEGER(IntKi), PARAMETER :: M5N4FAGxi = 3280 - INTEGER(IntKi), PARAMETER :: M5N5FAGxi = 3281 - INTEGER(IntKi), PARAMETER :: M5N6FAGxi = 3282 - INTEGER(IntKi), PARAMETER :: M5N7FAGxi = 3283 - INTEGER(IntKi), PARAMETER :: M5N8FAGxi = 3284 - INTEGER(IntKi), PARAMETER :: M5N9FAGxi = 3285 - INTEGER(IntKi), PARAMETER :: M6N1FAGxi = 3286 - INTEGER(IntKi), PARAMETER :: M6N2FAGxi = 3287 - INTEGER(IntKi), PARAMETER :: M6N3FAGxi = 3288 - INTEGER(IntKi), PARAMETER :: M6N4FAGxi = 3289 - INTEGER(IntKi), PARAMETER :: M6N5FAGxi = 3290 - INTEGER(IntKi), PARAMETER :: M6N6FAGxi = 3291 - INTEGER(IntKi), PARAMETER :: M6N7FAGxi = 3292 - INTEGER(IntKi), PARAMETER :: M6N8FAGxi = 3293 - INTEGER(IntKi), PARAMETER :: M6N9FAGxi = 3294 - INTEGER(IntKi), PARAMETER :: M7N1FAGxi = 3295 - INTEGER(IntKi), PARAMETER :: M7N2FAGxi = 3296 - INTEGER(IntKi), PARAMETER :: M7N3FAGxi = 3297 - INTEGER(IntKi), PARAMETER :: M7N4FAGxi = 3298 - INTEGER(IntKi), PARAMETER :: M7N5FAGxi = 3299 - INTEGER(IntKi), PARAMETER :: M7N6FAGxi = 3300 - INTEGER(IntKi), PARAMETER :: M7N7FAGxi = 3301 - INTEGER(IntKi), PARAMETER :: M7N8FAGxi = 3302 - INTEGER(IntKi), PARAMETER :: M7N9FAGxi = 3303 - INTEGER(IntKi), PARAMETER :: M8N1FAGxi = 3304 - INTEGER(IntKi), PARAMETER :: M8N2FAGxi = 3305 - INTEGER(IntKi), PARAMETER :: M8N3FAGxi = 3306 - INTEGER(IntKi), PARAMETER :: M8N4FAGxi = 3307 - INTEGER(IntKi), PARAMETER :: M8N5FAGxi = 3308 - INTEGER(IntKi), PARAMETER :: M8N6FAGxi = 3309 - INTEGER(IntKi), PARAMETER :: M8N7FAGxi = 3310 - INTEGER(IntKi), PARAMETER :: M8N8FAGxi = 3311 - INTEGER(IntKi), PARAMETER :: M8N9FAGxi = 3312 - INTEGER(IntKi), PARAMETER :: M9N1FAGxi = 3313 - INTEGER(IntKi), PARAMETER :: M9N2FAGxi = 3314 - INTEGER(IntKi), PARAMETER :: M9N3FAGxi = 3315 - INTEGER(IntKi), PARAMETER :: M9N4FAGxi = 3316 - INTEGER(IntKi), PARAMETER :: M9N5FAGxi = 3317 - INTEGER(IntKi), PARAMETER :: M9N6FAGxi = 3318 - INTEGER(IntKi), PARAMETER :: M9N7FAGxi = 3319 - INTEGER(IntKi), PARAMETER :: M9N8FAGxi = 3320 - INTEGER(IntKi), PARAMETER :: M9N9FAGxi = 3321 - INTEGER(IntKi), PARAMETER :: M1N1FAGyi = 3322 - INTEGER(IntKi), PARAMETER :: M1N2FAGyi = 3323 - INTEGER(IntKi), PARAMETER :: M1N3FAGyi = 3324 - INTEGER(IntKi), PARAMETER :: M1N4FAGyi = 3325 - INTEGER(IntKi), PARAMETER :: M1N5FAGyi = 3326 - INTEGER(IntKi), PARAMETER :: M1N6FAGyi = 3327 - INTEGER(IntKi), PARAMETER :: M1N7FAGyi = 3328 - INTEGER(IntKi), PARAMETER :: M1N8FAGyi = 3329 - INTEGER(IntKi), PARAMETER :: M1N9FAGyi = 3330 - INTEGER(IntKi), PARAMETER :: M2N1FAGyi = 3331 - INTEGER(IntKi), PARAMETER :: M2N2FAGyi = 3332 - INTEGER(IntKi), PARAMETER :: M2N3FAGyi = 3333 - INTEGER(IntKi), PARAMETER :: M2N4FAGyi = 3334 - INTEGER(IntKi), PARAMETER :: M2N5FAGyi = 3335 - INTEGER(IntKi), PARAMETER :: M2N6FAGyi = 3336 - INTEGER(IntKi), PARAMETER :: M2N7FAGyi = 3337 - INTEGER(IntKi), PARAMETER :: M2N8FAGyi = 3338 - INTEGER(IntKi), PARAMETER :: M2N9FAGyi = 3339 - INTEGER(IntKi), PARAMETER :: M3N1FAGyi = 3340 - INTEGER(IntKi), PARAMETER :: M3N2FAGyi = 3341 - INTEGER(IntKi), PARAMETER :: M3N3FAGyi = 3342 - INTEGER(IntKi), PARAMETER :: M3N4FAGyi = 3343 - INTEGER(IntKi), PARAMETER :: M3N5FAGyi = 3344 - INTEGER(IntKi), PARAMETER :: M3N6FAGyi = 3345 - INTEGER(IntKi), PARAMETER :: M3N7FAGyi = 3346 - INTEGER(IntKi), PARAMETER :: M3N8FAGyi = 3347 - INTEGER(IntKi), PARAMETER :: M3N9FAGyi = 3348 - INTEGER(IntKi), PARAMETER :: M4N1FAGyi = 3349 - INTEGER(IntKi), PARAMETER :: M4N2FAGyi = 3350 - INTEGER(IntKi), PARAMETER :: M4N3FAGyi = 3351 - INTEGER(IntKi), PARAMETER :: M4N4FAGyi = 3352 - INTEGER(IntKi), PARAMETER :: M4N5FAGyi = 3353 - INTEGER(IntKi), PARAMETER :: M4N6FAGyi = 3354 - INTEGER(IntKi), PARAMETER :: M4N7FAGyi = 3355 - INTEGER(IntKi), PARAMETER :: M4N8FAGyi = 3356 - INTEGER(IntKi), PARAMETER :: M4N9FAGyi = 3357 - INTEGER(IntKi), PARAMETER :: M5N1FAGyi = 3358 - INTEGER(IntKi), PARAMETER :: M5N2FAGyi = 3359 - INTEGER(IntKi), PARAMETER :: M5N3FAGyi = 3360 - INTEGER(IntKi), PARAMETER :: M5N4FAGyi = 3361 - INTEGER(IntKi), PARAMETER :: M5N5FAGyi = 3362 - INTEGER(IntKi), PARAMETER :: M5N6FAGyi = 3363 - INTEGER(IntKi), PARAMETER :: M5N7FAGyi = 3364 - INTEGER(IntKi), PARAMETER :: M5N8FAGyi = 3365 - INTEGER(IntKi), PARAMETER :: M5N9FAGyi = 3366 - INTEGER(IntKi), PARAMETER :: M6N1FAGyi = 3367 - INTEGER(IntKi), PARAMETER :: M6N2FAGyi = 3368 - INTEGER(IntKi), PARAMETER :: M6N3FAGyi = 3369 - INTEGER(IntKi), PARAMETER :: M6N4FAGyi = 3370 - INTEGER(IntKi), PARAMETER :: M6N5FAGyi = 3371 - INTEGER(IntKi), PARAMETER :: M6N6FAGyi = 3372 - INTEGER(IntKi), PARAMETER :: M6N7FAGyi = 3373 - INTEGER(IntKi), PARAMETER :: M6N8FAGyi = 3374 - INTEGER(IntKi), PARAMETER :: M6N9FAGyi = 3375 - INTEGER(IntKi), PARAMETER :: M7N1FAGyi = 3376 - INTEGER(IntKi), PARAMETER :: M7N2FAGyi = 3377 - INTEGER(IntKi), PARAMETER :: M7N3FAGyi = 3378 - INTEGER(IntKi), PARAMETER :: M7N4FAGyi = 3379 - INTEGER(IntKi), PARAMETER :: M7N5FAGyi = 3380 - INTEGER(IntKi), PARAMETER :: M7N6FAGyi = 3381 - INTEGER(IntKi), PARAMETER :: M7N7FAGyi = 3382 - INTEGER(IntKi), PARAMETER :: M7N8FAGyi = 3383 - INTEGER(IntKi), PARAMETER :: M7N9FAGyi = 3384 - INTEGER(IntKi), PARAMETER :: M8N1FAGyi = 3385 - INTEGER(IntKi), PARAMETER :: M8N2FAGyi = 3386 - INTEGER(IntKi), PARAMETER :: M8N3FAGyi = 3387 - INTEGER(IntKi), PARAMETER :: M8N4FAGyi = 3388 - INTEGER(IntKi), PARAMETER :: M8N5FAGyi = 3389 - INTEGER(IntKi), PARAMETER :: M8N6FAGyi = 3390 - INTEGER(IntKi), PARAMETER :: M8N7FAGyi = 3391 - INTEGER(IntKi), PARAMETER :: M8N8FAGyi = 3392 - INTEGER(IntKi), PARAMETER :: M8N9FAGyi = 3393 - INTEGER(IntKi), PARAMETER :: M9N1FAGyi = 3394 - INTEGER(IntKi), PARAMETER :: M9N2FAGyi = 3395 - INTEGER(IntKi), PARAMETER :: M9N3FAGyi = 3396 - INTEGER(IntKi), PARAMETER :: M9N4FAGyi = 3397 - INTEGER(IntKi), PARAMETER :: M9N5FAGyi = 3398 - INTEGER(IntKi), PARAMETER :: M9N6FAGyi = 3399 - INTEGER(IntKi), PARAMETER :: M9N7FAGyi = 3400 - INTEGER(IntKi), PARAMETER :: M9N8FAGyi = 3401 - INTEGER(IntKi), PARAMETER :: M9N9FAGyi = 3402 - INTEGER(IntKi), PARAMETER :: M1N1FAGzi = 3403 - INTEGER(IntKi), PARAMETER :: M1N2FAGzi = 3404 - INTEGER(IntKi), PARAMETER :: M1N3FAGzi = 3405 - INTEGER(IntKi), PARAMETER :: M1N4FAGzi = 3406 - INTEGER(IntKi), PARAMETER :: M1N5FAGzi = 3407 - INTEGER(IntKi), PARAMETER :: M1N6FAGzi = 3408 - INTEGER(IntKi), PARAMETER :: M1N7FAGzi = 3409 - INTEGER(IntKi), PARAMETER :: M1N8FAGzi = 3410 - INTEGER(IntKi), PARAMETER :: M1N9FAGzi = 3411 - INTEGER(IntKi), PARAMETER :: M2N1FAGzi = 3412 - INTEGER(IntKi), PARAMETER :: M2N2FAGzi = 3413 - INTEGER(IntKi), PARAMETER :: M2N3FAGzi = 3414 - INTEGER(IntKi), PARAMETER :: M2N4FAGzi = 3415 - INTEGER(IntKi), PARAMETER :: M2N5FAGzi = 3416 - INTEGER(IntKi), PARAMETER :: M2N6FAGzi = 3417 - INTEGER(IntKi), PARAMETER :: M2N7FAGzi = 3418 - INTEGER(IntKi), PARAMETER :: M2N8FAGzi = 3419 - INTEGER(IntKi), PARAMETER :: M2N9FAGzi = 3420 - INTEGER(IntKi), PARAMETER :: M3N1FAGzi = 3421 - INTEGER(IntKi), PARAMETER :: M3N2FAGzi = 3422 - INTEGER(IntKi), PARAMETER :: M3N3FAGzi = 3423 - INTEGER(IntKi), PARAMETER :: M3N4FAGzi = 3424 - INTEGER(IntKi), PARAMETER :: M3N5FAGzi = 3425 - INTEGER(IntKi), PARAMETER :: M3N6FAGzi = 3426 - INTEGER(IntKi), PARAMETER :: M3N7FAGzi = 3427 - INTEGER(IntKi), PARAMETER :: M3N8FAGzi = 3428 - INTEGER(IntKi), PARAMETER :: M3N9FAGzi = 3429 - INTEGER(IntKi), PARAMETER :: M4N1FAGzi = 3430 - INTEGER(IntKi), PARAMETER :: M4N2FAGzi = 3431 - INTEGER(IntKi), PARAMETER :: M4N3FAGzi = 3432 - INTEGER(IntKi), PARAMETER :: M4N4FAGzi = 3433 - INTEGER(IntKi), PARAMETER :: M4N5FAGzi = 3434 - INTEGER(IntKi), PARAMETER :: M4N6FAGzi = 3435 - INTEGER(IntKi), PARAMETER :: M4N7FAGzi = 3436 - INTEGER(IntKi), PARAMETER :: M4N8FAGzi = 3437 - INTEGER(IntKi), PARAMETER :: M4N9FAGzi = 3438 - INTEGER(IntKi), PARAMETER :: M5N1FAGzi = 3439 - INTEGER(IntKi), PARAMETER :: M5N2FAGzi = 3440 - INTEGER(IntKi), PARAMETER :: M5N3FAGzi = 3441 - INTEGER(IntKi), PARAMETER :: M5N4FAGzi = 3442 - INTEGER(IntKi), PARAMETER :: M5N5FAGzi = 3443 - INTEGER(IntKi), PARAMETER :: M5N6FAGzi = 3444 - INTEGER(IntKi), PARAMETER :: M5N7FAGzi = 3445 - INTEGER(IntKi), PARAMETER :: M5N8FAGzi = 3446 - INTEGER(IntKi), PARAMETER :: M5N9FAGzi = 3447 - INTEGER(IntKi), PARAMETER :: M6N1FAGzi = 3448 - INTEGER(IntKi), PARAMETER :: M6N2FAGzi = 3449 - INTEGER(IntKi), PARAMETER :: M6N3FAGzi = 3450 - INTEGER(IntKi), PARAMETER :: M6N4FAGzi = 3451 - INTEGER(IntKi), PARAMETER :: M6N5FAGzi = 3452 - INTEGER(IntKi), PARAMETER :: M6N6FAGzi = 3453 - INTEGER(IntKi), PARAMETER :: M6N7FAGzi = 3454 - INTEGER(IntKi), PARAMETER :: M6N8FAGzi = 3455 - INTEGER(IntKi), PARAMETER :: M6N9FAGzi = 3456 - INTEGER(IntKi), PARAMETER :: M7N1FAGzi = 3457 - INTEGER(IntKi), PARAMETER :: M7N2FAGzi = 3458 - INTEGER(IntKi), PARAMETER :: M7N3FAGzi = 3459 - INTEGER(IntKi), PARAMETER :: M7N4FAGzi = 3460 - INTEGER(IntKi), PARAMETER :: M7N5FAGzi = 3461 - INTEGER(IntKi), PARAMETER :: M7N6FAGzi = 3462 - INTEGER(IntKi), PARAMETER :: M7N7FAGzi = 3463 - INTEGER(IntKi), PARAMETER :: M7N8FAGzi = 3464 - INTEGER(IntKi), PARAMETER :: M7N9FAGzi = 3465 - INTEGER(IntKi), PARAMETER :: M8N1FAGzi = 3466 - INTEGER(IntKi), PARAMETER :: M8N2FAGzi = 3467 - INTEGER(IntKi), PARAMETER :: M8N3FAGzi = 3468 - INTEGER(IntKi), PARAMETER :: M8N4FAGzi = 3469 - INTEGER(IntKi), PARAMETER :: M8N5FAGzi = 3470 - INTEGER(IntKi), PARAMETER :: M8N6FAGzi = 3471 - INTEGER(IntKi), PARAMETER :: M8N7FAGzi = 3472 - INTEGER(IntKi), PARAMETER :: M8N8FAGzi = 3473 - INTEGER(IntKi), PARAMETER :: M8N9FAGzi = 3474 - INTEGER(IntKi), PARAMETER :: M9N1FAGzi = 3475 - INTEGER(IntKi), PARAMETER :: M9N2FAGzi = 3476 - INTEGER(IntKi), PARAMETER :: M9N3FAGzi = 3477 - INTEGER(IntKi), PARAMETER :: M9N4FAGzi = 3478 - INTEGER(IntKi), PARAMETER :: M9N5FAGzi = 3479 - INTEGER(IntKi), PARAMETER :: M9N6FAGzi = 3480 - INTEGER(IntKi), PARAMETER :: M9N7FAGzi = 3481 - INTEGER(IntKi), PARAMETER :: M9N8FAGzi = 3482 - INTEGER(IntKi), PARAMETER :: M9N9FAGzi = 3483 - INTEGER(IntKi), PARAMETER :: M1N1MAGxi = 3484 - INTEGER(IntKi), PARAMETER :: M1N2MAGxi = 3485 - INTEGER(IntKi), PARAMETER :: M1N3MAGxi = 3486 - INTEGER(IntKi), PARAMETER :: M1N4MAGxi = 3487 - INTEGER(IntKi), PARAMETER :: M1N5MAGxi = 3488 - INTEGER(IntKi), PARAMETER :: M1N6MAGxi = 3489 - INTEGER(IntKi), PARAMETER :: M1N7MAGxi = 3490 - INTEGER(IntKi), PARAMETER :: M1N8MAGxi = 3491 - INTEGER(IntKi), PARAMETER :: M1N9MAGxi = 3492 - INTEGER(IntKi), PARAMETER :: M2N1MAGxi = 3493 - INTEGER(IntKi), PARAMETER :: M2N2MAGxi = 3494 - INTEGER(IntKi), PARAMETER :: M2N3MAGxi = 3495 - INTEGER(IntKi), PARAMETER :: M2N4MAGxi = 3496 - INTEGER(IntKi), PARAMETER :: M2N5MAGxi = 3497 - INTEGER(IntKi), PARAMETER :: M2N6MAGxi = 3498 - INTEGER(IntKi), PARAMETER :: M2N7MAGxi = 3499 - INTEGER(IntKi), PARAMETER :: M2N8MAGxi = 3500 - INTEGER(IntKi), PARAMETER :: M2N9MAGxi = 3501 - INTEGER(IntKi), PARAMETER :: M3N1MAGxi = 3502 - INTEGER(IntKi), PARAMETER :: M3N2MAGxi = 3503 - INTEGER(IntKi), PARAMETER :: M3N3MAGxi = 3504 - INTEGER(IntKi), PARAMETER :: M3N4MAGxi = 3505 - INTEGER(IntKi), PARAMETER :: M3N5MAGxi = 3506 - INTEGER(IntKi), PARAMETER :: M3N6MAGxi = 3507 - INTEGER(IntKi), PARAMETER :: M3N7MAGxi = 3508 - INTEGER(IntKi), PARAMETER :: M3N8MAGxi = 3509 - INTEGER(IntKi), PARAMETER :: M3N9MAGxi = 3510 - INTEGER(IntKi), PARAMETER :: M4N1MAGxi = 3511 - INTEGER(IntKi), PARAMETER :: M4N2MAGxi = 3512 - INTEGER(IntKi), PARAMETER :: M4N3MAGxi = 3513 - INTEGER(IntKi), PARAMETER :: M4N4MAGxi = 3514 - INTEGER(IntKi), PARAMETER :: M4N5MAGxi = 3515 - INTEGER(IntKi), PARAMETER :: M4N6MAGxi = 3516 - INTEGER(IntKi), PARAMETER :: M4N7MAGxi = 3517 - INTEGER(IntKi), PARAMETER :: M4N8MAGxi = 3518 - INTEGER(IntKi), PARAMETER :: M4N9MAGxi = 3519 - INTEGER(IntKi), PARAMETER :: M5N1MAGxi = 3520 - INTEGER(IntKi), PARAMETER :: M5N2MAGxi = 3521 - INTEGER(IntKi), PARAMETER :: M5N3MAGxi = 3522 - INTEGER(IntKi), PARAMETER :: M5N4MAGxi = 3523 - INTEGER(IntKi), PARAMETER :: M5N5MAGxi = 3524 - INTEGER(IntKi), PARAMETER :: M5N6MAGxi = 3525 - INTEGER(IntKi), PARAMETER :: M5N7MAGxi = 3526 - INTEGER(IntKi), PARAMETER :: M5N8MAGxi = 3527 - INTEGER(IntKi), PARAMETER :: M5N9MAGxi = 3528 - INTEGER(IntKi), PARAMETER :: M6N1MAGxi = 3529 - INTEGER(IntKi), PARAMETER :: M6N2MAGxi = 3530 - INTEGER(IntKi), PARAMETER :: M6N3MAGxi = 3531 - INTEGER(IntKi), PARAMETER :: M6N4MAGxi = 3532 - INTEGER(IntKi), PARAMETER :: M6N5MAGxi = 3533 - INTEGER(IntKi), PARAMETER :: M6N6MAGxi = 3534 - INTEGER(IntKi), PARAMETER :: M6N7MAGxi = 3535 - INTEGER(IntKi), PARAMETER :: M6N8MAGxi = 3536 - INTEGER(IntKi), PARAMETER :: M6N9MAGxi = 3537 - INTEGER(IntKi), PARAMETER :: M7N1MAGxi = 3538 - INTEGER(IntKi), PARAMETER :: M7N2MAGxi = 3539 - INTEGER(IntKi), PARAMETER :: M7N3MAGxi = 3540 - INTEGER(IntKi), PARAMETER :: M7N4MAGxi = 3541 - INTEGER(IntKi), PARAMETER :: M7N5MAGxi = 3542 - INTEGER(IntKi), PARAMETER :: M7N6MAGxi = 3543 - INTEGER(IntKi), PARAMETER :: M7N7MAGxi = 3544 - INTEGER(IntKi), PARAMETER :: M7N8MAGxi = 3545 - INTEGER(IntKi), PARAMETER :: M7N9MAGxi = 3546 - INTEGER(IntKi), PARAMETER :: M8N1MAGxi = 3547 - INTEGER(IntKi), PARAMETER :: M8N2MAGxi = 3548 - INTEGER(IntKi), PARAMETER :: M8N3MAGxi = 3549 - INTEGER(IntKi), PARAMETER :: M8N4MAGxi = 3550 - INTEGER(IntKi), PARAMETER :: M8N5MAGxi = 3551 - INTEGER(IntKi), PARAMETER :: M8N6MAGxi = 3552 - INTEGER(IntKi), PARAMETER :: M8N7MAGxi = 3553 - INTEGER(IntKi), PARAMETER :: M8N8MAGxi = 3554 - INTEGER(IntKi), PARAMETER :: M8N9MAGxi = 3555 - INTEGER(IntKi), PARAMETER :: M9N1MAGxi = 3556 - INTEGER(IntKi), PARAMETER :: M9N2MAGxi = 3557 - INTEGER(IntKi), PARAMETER :: M9N3MAGxi = 3558 - INTEGER(IntKi), PARAMETER :: M9N4MAGxi = 3559 - INTEGER(IntKi), PARAMETER :: M9N5MAGxi = 3560 - INTEGER(IntKi), PARAMETER :: M9N6MAGxi = 3561 - INTEGER(IntKi), PARAMETER :: M9N7MAGxi = 3562 - INTEGER(IntKi), PARAMETER :: M9N8MAGxi = 3563 - INTEGER(IntKi), PARAMETER :: M9N9MAGxi = 3564 - INTEGER(IntKi), PARAMETER :: M1N1MAGyi = 3565 - INTEGER(IntKi), PARAMETER :: M1N2MAGyi = 3566 - INTEGER(IntKi), PARAMETER :: M1N3MAGyi = 3567 - INTEGER(IntKi), PARAMETER :: M1N4MAGyi = 3568 - INTEGER(IntKi), PARAMETER :: M1N5MAGyi = 3569 - INTEGER(IntKi), PARAMETER :: M1N6MAGyi = 3570 - INTEGER(IntKi), PARAMETER :: M1N7MAGyi = 3571 - INTEGER(IntKi), PARAMETER :: M1N8MAGyi = 3572 - INTEGER(IntKi), PARAMETER :: M1N9MAGyi = 3573 - INTEGER(IntKi), PARAMETER :: M2N1MAGyi = 3574 - INTEGER(IntKi), PARAMETER :: M2N2MAGyi = 3575 - INTEGER(IntKi), PARAMETER :: M2N3MAGyi = 3576 - INTEGER(IntKi), PARAMETER :: M2N4MAGyi = 3577 - INTEGER(IntKi), PARAMETER :: M2N5MAGyi = 3578 - INTEGER(IntKi), PARAMETER :: M2N6MAGyi = 3579 - INTEGER(IntKi), PARAMETER :: M2N7MAGyi = 3580 - INTEGER(IntKi), PARAMETER :: M2N8MAGyi = 3581 - INTEGER(IntKi), PARAMETER :: M2N9MAGyi = 3582 - INTEGER(IntKi), PARAMETER :: M3N1MAGyi = 3583 - INTEGER(IntKi), PARAMETER :: M3N2MAGyi = 3584 - INTEGER(IntKi), PARAMETER :: M3N3MAGyi = 3585 - INTEGER(IntKi), PARAMETER :: M3N4MAGyi = 3586 - INTEGER(IntKi), PARAMETER :: M3N5MAGyi = 3587 - INTEGER(IntKi), PARAMETER :: M3N6MAGyi = 3588 - INTEGER(IntKi), PARAMETER :: M3N7MAGyi = 3589 - INTEGER(IntKi), PARAMETER :: M3N8MAGyi = 3590 - INTEGER(IntKi), PARAMETER :: M3N9MAGyi = 3591 - INTEGER(IntKi), PARAMETER :: M4N1MAGyi = 3592 - INTEGER(IntKi), PARAMETER :: M4N2MAGyi = 3593 - INTEGER(IntKi), PARAMETER :: M4N3MAGyi = 3594 - INTEGER(IntKi), PARAMETER :: M4N4MAGyi = 3595 - INTEGER(IntKi), PARAMETER :: M4N5MAGyi = 3596 - INTEGER(IntKi), PARAMETER :: M4N6MAGyi = 3597 - INTEGER(IntKi), PARAMETER :: M4N7MAGyi = 3598 - INTEGER(IntKi), PARAMETER :: M4N8MAGyi = 3599 - INTEGER(IntKi), PARAMETER :: M4N9MAGyi = 3600 - INTEGER(IntKi), PARAMETER :: M5N1MAGyi = 3601 - INTEGER(IntKi), PARAMETER :: M5N2MAGyi = 3602 - INTEGER(IntKi), PARAMETER :: M5N3MAGyi = 3603 - INTEGER(IntKi), PARAMETER :: M5N4MAGyi = 3604 - INTEGER(IntKi), PARAMETER :: M5N5MAGyi = 3605 - INTEGER(IntKi), PARAMETER :: M5N6MAGyi = 3606 - INTEGER(IntKi), PARAMETER :: M5N7MAGyi = 3607 - INTEGER(IntKi), PARAMETER :: M5N8MAGyi = 3608 - INTEGER(IntKi), PARAMETER :: M5N9MAGyi = 3609 - INTEGER(IntKi), PARAMETER :: M6N1MAGyi = 3610 - INTEGER(IntKi), PARAMETER :: M6N2MAGyi = 3611 - INTEGER(IntKi), PARAMETER :: M6N3MAGyi = 3612 - INTEGER(IntKi), PARAMETER :: M6N4MAGyi = 3613 - INTEGER(IntKi), PARAMETER :: M6N5MAGyi = 3614 - INTEGER(IntKi), PARAMETER :: M6N6MAGyi = 3615 - INTEGER(IntKi), PARAMETER :: M6N7MAGyi = 3616 - INTEGER(IntKi), PARAMETER :: M6N8MAGyi = 3617 - INTEGER(IntKi), PARAMETER :: M6N9MAGyi = 3618 - INTEGER(IntKi), PARAMETER :: M7N1MAGyi = 3619 - INTEGER(IntKi), PARAMETER :: M7N2MAGyi = 3620 - INTEGER(IntKi), PARAMETER :: M7N3MAGyi = 3621 - INTEGER(IntKi), PARAMETER :: M7N4MAGyi = 3622 - INTEGER(IntKi), PARAMETER :: M7N5MAGyi = 3623 - INTEGER(IntKi), PARAMETER :: M7N6MAGyi = 3624 - INTEGER(IntKi), PARAMETER :: M7N7MAGyi = 3625 - INTEGER(IntKi), PARAMETER :: M7N8MAGyi = 3626 - INTEGER(IntKi), PARAMETER :: M7N9MAGyi = 3627 - INTEGER(IntKi), PARAMETER :: M8N1MAGyi = 3628 - INTEGER(IntKi), PARAMETER :: M8N2MAGyi = 3629 - INTEGER(IntKi), PARAMETER :: M8N3MAGyi = 3630 - INTEGER(IntKi), PARAMETER :: M8N4MAGyi = 3631 - INTEGER(IntKi), PARAMETER :: M8N5MAGyi = 3632 - INTEGER(IntKi), PARAMETER :: M8N6MAGyi = 3633 - INTEGER(IntKi), PARAMETER :: M8N7MAGyi = 3634 - INTEGER(IntKi), PARAMETER :: M8N8MAGyi = 3635 - INTEGER(IntKi), PARAMETER :: M8N9MAGyi = 3636 - INTEGER(IntKi), PARAMETER :: M9N1MAGyi = 3637 - INTEGER(IntKi), PARAMETER :: M9N2MAGyi = 3638 - INTEGER(IntKi), PARAMETER :: M9N3MAGyi = 3639 - INTEGER(IntKi), PARAMETER :: M9N4MAGyi = 3640 - INTEGER(IntKi), PARAMETER :: M9N5MAGyi = 3641 - INTEGER(IntKi), PARAMETER :: M9N6MAGyi = 3642 - INTEGER(IntKi), PARAMETER :: M9N7MAGyi = 3643 - INTEGER(IntKi), PARAMETER :: M9N8MAGyi = 3644 - INTEGER(IntKi), PARAMETER :: M9N9MAGyi = 3645 - INTEGER(IntKi), PARAMETER :: M1N1MAGzi = 3646 - INTEGER(IntKi), PARAMETER :: M1N2MAGzi = 3647 - INTEGER(IntKi), PARAMETER :: M1N3MAGzi = 3648 - INTEGER(IntKi), PARAMETER :: M1N4MAGzi = 3649 - INTEGER(IntKi), PARAMETER :: M1N5MAGzi = 3650 - INTEGER(IntKi), PARAMETER :: M1N6MAGzi = 3651 - INTEGER(IntKi), PARAMETER :: M1N7MAGzi = 3652 - INTEGER(IntKi), PARAMETER :: M1N8MAGzi = 3653 - INTEGER(IntKi), PARAMETER :: M1N9MAGzi = 3654 - INTEGER(IntKi), PARAMETER :: M2N1MAGzi = 3655 - INTEGER(IntKi), PARAMETER :: M2N2MAGzi = 3656 - INTEGER(IntKi), PARAMETER :: M2N3MAGzi = 3657 - INTEGER(IntKi), PARAMETER :: M2N4MAGzi = 3658 - INTEGER(IntKi), PARAMETER :: M2N5MAGzi = 3659 - INTEGER(IntKi), PARAMETER :: M2N6MAGzi = 3660 - INTEGER(IntKi), PARAMETER :: M2N7MAGzi = 3661 - INTEGER(IntKi), PARAMETER :: M2N8MAGzi = 3662 - INTEGER(IntKi), PARAMETER :: M2N9MAGzi = 3663 - INTEGER(IntKi), PARAMETER :: M3N1MAGzi = 3664 - INTEGER(IntKi), PARAMETER :: M3N2MAGzi = 3665 - INTEGER(IntKi), PARAMETER :: M3N3MAGzi = 3666 - INTEGER(IntKi), PARAMETER :: M3N4MAGzi = 3667 - INTEGER(IntKi), PARAMETER :: M3N5MAGzi = 3668 - INTEGER(IntKi), PARAMETER :: M3N6MAGzi = 3669 - INTEGER(IntKi), PARAMETER :: M3N7MAGzi = 3670 - INTEGER(IntKi), PARAMETER :: M3N8MAGzi = 3671 - INTEGER(IntKi), PARAMETER :: M3N9MAGzi = 3672 - INTEGER(IntKi), PARAMETER :: M4N1MAGzi = 3673 - INTEGER(IntKi), PARAMETER :: M4N2MAGzi = 3674 - INTEGER(IntKi), PARAMETER :: M4N3MAGzi = 3675 - INTEGER(IntKi), PARAMETER :: M4N4MAGzi = 3676 - INTEGER(IntKi), PARAMETER :: M4N5MAGzi = 3677 - INTEGER(IntKi), PARAMETER :: M4N6MAGzi = 3678 - INTEGER(IntKi), PARAMETER :: M4N7MAGzi = 3679 - INTEGER(IntKi), PARAMETER :: M4N8MAGzi = 3680 - INTEGER(IntKi), PARAMETER :: M4N9MAGzi = 3681 - INTEGER(IntKi), PARAMETER :: M5N1MAGzi = 3682 - INTEGER(IntKi), PARAMETER :: M5N2MAGzi = 3683 - INTEGER(IntKi), PARAMETER :: M5N3MAGzi = 3684 - INTEGER(IntKi), PARAMETER :: M5N4MAGzi = 3685 - INTEGER(IntKi), PARAMETER :: M5N5MAGzi = 3686 - INTEGER(IntKi), PARAMETER :: M5N6MAGzi = 3687 - INTEGER(IntKi), PARAMETER :: M5N7MAGzi = 3688 - INTEGER(IntKi), PARAMETER :: M5N8MAGzi = 3689 - INTEGER(IntKi), PARAMETER :: M5N9MAGzi = 3690 - INTEGER(IntKi), PARAMETER :: M6N1MAGzi = 3691 - INTEGER(IntKi), PARAMETER :: M6N2MAGzi = 3692 - INTEGER(IntKi), PARAMETER :: M6N3MAGzi = 3693 - INTEGER(IntKi), PARAMETER :: M6N4MAGzi = 3694 - INTEGER(IntKi), PARAMETER :: M6N5MAGzi = 3695 - INTEGER(IntKi), PARAMETER :: M6N6MAGzi = 3696 - INTEGER(IntKi), PARAMETER :: M6N7MAGzi = 3697 - INTEGER(IntKi), PARAMETER :: M6N8MAGzi = 3698 - INTEGER(IntKi), PARAMETER :: M6N9MAGzi = 3699 - INTEGER(IntKi), PARAMETER :: M7N1MAGzi = 3700 - INTEGER(IntKi), PARAMETER :: M7N2MAGzi = 3701 - INTEGER(IntKi), PARAMETER :: M7N3MAGzi = 3702 - INTEGER(IntKi), PARAMETER :: M7N4MAGzi = 3703 - INTEGER(IntKi), PARAMETER :: M7N5MAGzi = 3704 - INTEGER(IntKi), PARAMETER :: M7N6MAGzi = 3705 - INTEGER(IntKi), PARAMETER :: M7N7MAGzi = 3706 - INTEGER(IntKi), PARAMETER :: M7N8MAGzi = 3707 - INTEGER(IntKi), PARAMETER :: M7N9MAGzi = 3708 - INTEGER(IntKi), PARAMETER :: M8N1MAGzi = 3709 - INTEGER(IntKi), PARAMETER :: M8N2MAGzi = 3710 - INTEGER(IntKi), PARAMETER :: M8N3MAGzi = 3711 - INTEGER(IntKi), PARAMETER :: M8N4MAGzi = 3712 - INTEGER(IntKi), PARAMETER :: M8N5MAGzi = 3713 - INTEGER(IntKi), PARAMETER :: M8N6MAGzi = 3714 - INTEGER(IntKi), PARAMETER :: M8N7MAGzi = 3715 - INTEGER(IntKi), PARAMETER :: M8N8MAGzi = 3716 - INTEGER(IntKi), PARAMETER :: M8N9MAGzi = 3717 - INTEGER(IntKi), PARAMETER :: M9N1MAGzi = 3718 - INTEGER(IntKi), PARAMETER :: M9N2MAGzi = 3719 - INTEGER(IntKi), PARAMETER :: M9N3MAGzi = 3720 - INTEGER(IntKi), PARAMETER :: M9N4MAGzi = 3721 - INTEGER(IntKi), PARAMETER :: M9N5MAGzi = 3722 - INTEGER(IntKi), PARAMETER :: M9N6MAGzi = 3723 - INTEGER(IntKi), PARAMETER :: M9N7MAGzi = 3724 - INTEGER(IntKi), PARAMETER :: M9N8MAGzi = 3725 - INTEGER(IntKi), PARAMETER :: M9N9MAGzi = 3726 - INTEGER(IntKi), PARAMETER :: M1N1FAFxi = 3727 - INTEGER(IntKi), PARAMETER :: M1N2FAFxi = 3728 - INTEGER(IntKi), PARAMETER :: M1N3FAFxi = 3729 - INTEGER(IntKi), PARAMETER :: M1N4FAFxi = 3730 - INTEGER(IntKi), PARAMETER :: M1N5FAFxi = 3731 - INTEGER(IntKi), PARAMETER :: M1N6FAFxi = 3732 - INTEGER(IntKi), PARAMETER :: M1N7FAFxi = 3733 - INTEGER(IntKi), PARAMETER :: M1N8FAFxi = 3734 - INTEGER(IntKi), PARAMETER :: M1N9FAFxi = 3735 - INTEGER(IntKi), PARAMETER :: M2N1FAFxi = 3736 - INTEGER(IntKi), PARAMETER :: M2N2FAFxi = 3737 - INTEGER(IntKi), PARAMETER :: M2N3FAFxi = 3738 - INTEGER(IntKi), PARAMETER :: M2N4FAFxi = 3739 - INTEGER(IntKi), PARAMETER :: M2N5FAFxi = 3740 - INTEGER(IntKi), PARAMETER :: M2N6FAFxi = 3741 - INTEGER(IntKi), PARAMETER :: M2N7FAFxi = 3742 - INTEGER(IntKi), PARAMETER :: M2N8FAFxi = 3743 - INTEGER(IntKi), PARAMETER :: M2N9FAFxi = 3744 - INTEGER(IntKi), PARAMETER :: M3N1FAFxi = 3745 - INTEGER(IntKi), PARAMETER :: M3N2FAFxi = 3746 - INTEGER(IntKi), PARAMETER :: M3N3FAFxi = 3747 - INTEGER(IntKi), PARAMETER :: M3N4FAFxi = 3748 - INTEGER(IntKi), PARAMETER :: M3N5FAFxi = 3749 - INTEGER(IntKi), PARAMETER :: M3N6FAFxi = 3750 - INTEGER(IntKi), PARAMETER :: M3N7FAFxi = 3751 - INTEGER(IntKi), PARAMETER :: M3N8FAFxi = 3752 - INTEGER(IntKi), PARAMETER :: M3N9FAFxi = 3753 - INTEGER(IntKi), PARAMETER :: M4N1FAFxi = 3754 - INTEGER(IntKi), PARAMETER :: M4N2FAFxi = 3755 - INTEGER(IntKi), PARAMETER :: M4N3FAFxi = 3756 - INTEGER(IntKi), PARAMETER :: M4N4FAFxi = 3757 - INTEGER(IntKi), PARAMETER :: M4N5FAFxi = 3758 - INTEGER(IntKi), PARAMETER :: M4N6FAFxi = 3759 - INTEGER(IntKi), PARAMETER :: M4N7FAFxi = 3760 - INTEGER(IntKi), PARAMETER :: M4N8FAFxi = 3761 - INTEGER(IntKi), PARAMETER :: M4N9FAFxi = 3762 - INTEGER(IntKi), PARAMETER :: M5N1FAFxi = 3763 - INTEGER(IntKi), PARAMETER :: M5N2FAFxi = 3764 - INTEGER(IntKi), PARAMETER :: M5N3FAFxi = 3765 - INTEGER(IntKi), PARAMETER :: M5N4FAFxi = 3766 - INTEGER(IntKi), PARAMETER :: M5N5FAFxi = 3767 - INTEGER(IntKi), PARAMETER :: M5N6FAFxi = 3768 - INTEGER(IntKi), PARAMETER :: M5N7FAFxi = 3769 - INTEGER(IntKi), PARAMETER :: M5N8FAFxi = 3770 - INTEGER(IntKi), PARAMETER :: M5N9FAFxi = 3771 - INTEGER(IntKi), PARAMETER :: M6N1FAFxi = 3772 - INTEGER(IntKi), PARAMETER :: M6N2FAFxi = 3773 - INTEGER(IntKi), PARAMETER :: M6N3FAFxi = 3774 - INTEGER(IntKi), PARAMETER :: M6N4FAFxi = 3775 - INTEGER(IntKi), PARAMETER :: M6N5FAFxi = 3776 - INTEGER(IntKi), PARAMETER :: M6N6FAFxi = 3777 - INTEGER(IntKi), PARAMETER :: M6N7FAFxi = 3778 - INTEGER(IntKi), PARAMETER :: M6N8FAFxi = 3779 - INTEGER(IntKi), PARAMETER :: M6N9FAFxi = 3780 - INTEGER(IntKi), PARAMETER :: M7N1FAFxi = 3781 - INTEGER(IntKi), PARAMETER :: M7N2FAFxi = 3782 - INTEGER(IntKi), PARAMETER :: M7N3FAFxi = 3783 - INTEGER(IntKi), PARAMETER :: M7N4FAFxi = 3784 - INTEGER(IntKi), PARAMETER :: M7N5FAFxi = 3785 - INTEGER(IntKi), PARAMETER :: M7N6FAFxi = 3786 - INTEGER(IntKi), PARAMETER :: M7N7FAFxi = 3787 - INTEGER(IntKi), PARAMETER :: M7N8FAFxi = 3788 - INTEGER(IntKi), PARAMETER :: M7N9FAFxi = 3789 - INTEGER(IntKi), PARAMETER :: M8N1FAFxi = 3790 - INTEGER(IntKi), PARAMETER :: M8N2FAFxi = 3791 - INTEGER(IntKi), PARAMETER :: M8N3FAFxi = 3792 - INTEGER(IntKi), PARAMETER :: M8N4FAFxi = 3793 - INTEGER(IntKi), PARAMETER :: M8N5FAFxi = 3794 - INTEGER(IntKi), PARAMETER :: M8N6FAFxi = 3795 - INTEGER(IntKi), PARAMETER :: M8N7FAFxi = 3796 - INTEGER(IntKi), PARAMETER :: M8N8FAFxi = 3797 - INTEGER(IntKi), PARAMETER :: M8N9FAFxi = 3798 - INTEGER(IntKi), PARAMETER :: M9N1FAFxi = 3799 - INTEGER(IntKi), PARAMETER :: M9N2FAFxi = 3800 - INTEGER(IntKi), PARAMETER :: M9N3FAFxi = 3801 - INTEGER(IntKi), PARAMETER :: M9N4FAFxi = 3802 - INTEGER(IntKi), PARAMETER :: M9N5FAFxi = 3803 - INTEGER(IntKi), PARAMETER :: M9N6FAFxi = 3804 - INTEGER(IntKi), PARAMETER :: M9N7FAFxi = 3805 - INTEGER(IntKi), PARAMETER :: M9N8FAFxi = 3806 - INTEGER(IntKi), PARAMETER :: M9N9FAFxi = 3807 - INTEGER(IntKi), PARAMETER :: M1N1FAFyi = 3808 - INTEGER(IntKi), PARAMETER :: M1N2FAFyi = 3809 - INTEGER(IntKi), PARAMETER :: M1N3FAFyi = 3810 - INTEGER(IntKi), PARAMETER :: M1N4FAFyi = 3811 - INTEGER(IntKi), PARAMETER :: M1N5FAFyi = 3812 - INTEGER(IntKi), PARAMETER :: M1N6FAFyi = 3813 - INTEGER(IntKi), PARAMETER :: M1N7FAFyi = 3814 - INTEGER(IntKi), PARAMETER :: M1N8FAFyi = 3815 - INTEGER(IntKi), PARAMETER :: M1N9FAFyi = 3816 - INTEGER(IntKi), PARAMETER :: M2N1FAFyi = 3817 - INTEGER(IntKi), PARAMETER :: M2N2FAFyi = 3818 - INTEGER(IntKi), PARAMETER :: M2N3FAFyi = 3819 - INTEGER(IntKi), PARAMETER :: M2N4FAFyi = 3820 - INTEGER(IntKi), PARAMETER :: M2N5FAFyi = 3821 - INTEGER(IntKi), PARAMETER :: M2N6FAFyi = 3822 - INTEGER(IntKi), PARAMETER :: M2N7FAFyi = 3823 - INTEGER(IntKi), PARAMETER :: M2N8FAFyi = 3824 - INTEGER(IntKi), PARAMETER :: M2N9FAFyi = 3825 - INTEGER(IntKi), PARAMETER :: M3N1FAFyi = 3826 - INTEGER(IntKi), PARAMETER :: M3N2FAFyi = 3827 - INTEGER(IntKi), PARAMETER :: M3N3FAFyi = 3828 - INTEGER(IntKi), PARAMETER :: M3N4FAFyi = 3829 - INTEGER(IntKi), PARAMETER :: M3N5FAFyi = 3830 - INTEGER(IntKi), PARAMETER :: M3N6FAFyi = 3831 - INTEGER(IntKi), PARAMETER :: M3N7FAFyi = 3832 - INTEGER(IntKi), PARAMETER :: M3N8FAFyi = 3833 - INTEGER(IntKi), PARAMETER :: M3N9FAFyi = 3834 - INTEGER(IntKi), PARAMETER :: M4N1FAFyi = 3835 - INTEGER(IntKi), PARAMETER :: M4N2FAFyi = 3836 - INTEGER(IntKi), PARAMETER :: M4N3FAFyi = 3837 - INTEGER(IntKi), PARAMETER :: M4N4FAFyi = 3838 - INTEGER(IntKi), PARAMETER :: M4N5FAFyi = 3839 - INTEGER(IntKi), PARAMETER :: M4N6FAFyi = 3840 - INTEGER(IntKi), PARAMETER :: M4N7FAFyi = 3841 - INTEGER(IntKi), PARAMETER :: M4N8FAFyi = 3842 - INTEGER(IntKi), PARAMETER :: M4N9FAFyi = 3843 - INTEGER(IntKi), PARAMETER :: M5N1FAFyi = 3844 - INTEGER(IntKi), PARAMETER :: M5N2FAFyi = 3845 - INTEGER(IntKi), PARAMETER :: M5N3FAFyi = 3846 - INTEGER(IntKi), PARAMETER :: M5N4FAFyi = 3847 - INTEGER(IntKi), PARAMETER :: M5N5FAFyi = 3848 - INTEGER(IntKi), PARAMETER :: M5N6FAFyi = 3849 - INTEGER(IntKi), PARAMETER :: M5N7FAFyi = 3850 - INTEGER(IntKi), PARAMETER :: M5N8FAFyi = 3851 - INTEGER(IntKi), PARAMETER :: M5N9FAFyi = 3852 - INTEGER(IntKi), PARAMETER :: M6N1FAFyi = 3853 - INTEGER(IntKi), PARAMETER :: M6N2FAFyi = 3854 - INTEGER(IntKi), PARAMETER :: M6N3FAFyi = 3855 - INTEGER(IntKi), PARAMETER :: M6N4FAFyi = 3856 - INTEGER(IntKi), PARAMETER :: M6N5FAFyi = 3857 - INTEGER(IntKi), PARAMETER :: M6N6FAFyi = 3858 - INTEGER(IntKi), PARAMETER :: M6N7FAFyi = 3859 - INTEGER(IntKi), PARAMETER :: M6N8FAFyi = 3860 - INTEGER(IntKi), PARAMETER :: M6N9FAFyi = 3861 - INTEGER(IntKi), PARAMETER :: M7N1FAFyi = 3862 - INTEGER(IntKi), PARAMETER :: M7N2FAFyi = 3863 - INTEGER(IntKi), PARAMETER :: M7N3FAFyi = 3864 - INTEGER(IntKi), PARAMETER :: M7N4FAFyi = 3865 - INTEGER(IntKi), PARAMETER :: M7N5FAFyi = 3866 - INTEGER(IntKi), PARAMETER :: M7N6FAFyi = 3867 - INTEGER(IntKi), PARAMETER :: M7N7FAFyi = 3868 - INTEGER(IntKi), PARAMETER :: M7N8FAFyi = 3869 - INTEGER(IntKi), PARAMETER :: M7N9FAFyi = 3870 - INTEGER(IntKi), PARAMETER :: M8N1FAFyi = 3871 - INTEGER(IntKi), PARAMETER :: M8N2FAFyi = 3872 - INTEGER(IntKi), PARAMETER :: M8N3FAFyi = 3873 - INTEGER(IntKi), PARAMETER :: M8N4FAFyi = 3874 - INTEGER(IntKi), PARAMETER :: M8N5FAFyi = 3875 - INTEGER(IntKi), PARAMETER :: M8N6FAFyi = 3876 - INTEGER(IntKi), PARAMETER :: M8N7FAFyi = 3877 - INTEGER(IntKi), PARAMETER :: M8N8FAFyi = 3878 - INTEGER(IntKi), PARAMETER :: M8N9FAFyi = 3879 - INTEGER(IntKi), PARAMETER :: M9N1FAFyi = 3880 - INTEGER(IntKi), PARAMETER :: M9N2FAFyi = 3881 - INTEGER(IntKi), PARAMETER :: M9N3FAFyi = 3882 - INTEGER(IntKi), PARAMETER :: M9N4FAFyi = 3883 - INTEGER(IntKi), PARAMETER :: M9N5FAFyi = 3884 - INTEGER(IntKi), PARAMETER :: M9N6FAFyi = 3885 - INTEGER(IntKi), PARAMETER :: M9N7FAFyi = 3886 - INTEGER(IntKi), PARAMETER :: M9N8FAFyi = 3887 - INTEGER(IntKi), PARAMETER :: M9N9FAFyi = 3888 - INTEGER(IntKi), PARAMETER :: M1N1FAFzi = 3889 - INTEGER(IntKi), PARAMETER :: M1N2FAFzi = 3890 - INTEGER(IntKi), PARAMETER :: M1N3FAFzi = 3891 - INTEGER(IntKi), PARAMETER :: M1N4FAFzi = 3892 - INTEGER(IntKi), PARAMETER :: M1N5FAFzi = 3893 - INTEGER(IntKi), PARAMETER :: M1N6FAFzi = 3894 - INTEGER(IntKi), PARAMETER :: M1N7FAFzi = 3895 - INTEGER(IntKi), PARAMETER :: M1N8FAFzi = 3896 - INTEGER(IntKi), PARAMETER :: M1N9FAFzi = 3897 - INTEGER(IntKi), PARAMETER :: M2N1FAFzi = 3898 - INTEGER(IntKi), PARAMETER :: M2N2FAFzi = 3899 - INTEGER(IntKi), PARAMETER :: M2N3FAFzi = 3900 - INTEGER(IntKi), PARAMETER :: M2N4FAFzi = 3901 - INTEGER(IntKi), PARAMETER :: M2N5FAFzi = 3902 - INTEGER(IntKi), PARAMETER :: M2N6FAFzi = 3903 - INTEGER(IntKi), PARAMETER :: M2N7FAFzi = 3904 - INTEGER(IntKi), PARAMETER :: M2N8FAFzi = 3905 - INTEGER(IntKi), PARAMETER :: M2N9FAFzi = 3906 - INTEGER(IntKi), PARAMETER :: M3N1FAFzi = 3907 - INTEGER(IntKi), PARAMETER :: M3N2FAFzi = 3908 - INTEGER(IntKi), PARAMETER :: M3N3FAFzi = 3909 - INTEGER(IntKi), PARAMETER :: M3N4FAFzi = 3910 - INTEGER(IntKi), PARAMETER :: M3N5FAFzi = 3911 - INTEGER(IntKi), PARAMETER :: M3N6FAFzi = 3912 - INTEGER(IntKi), PARAMETER :: M3N7FAFzi = 3913 - INTEGER(IntKi), PARAMETER :: M3N8FAFzi = 3914 - INTEGER(IntKi), PARAMETER :: M3N9FAFzi = 3915 - INTEGER(IntKi), PARAMETER :: M4N1FAFzi = 3916 - INTEGER(IntKi), PARAMETER :: M4N2FAFzi = 3917 - INTEGER(IntKi), PARAMETER :: M4N3FAFzi = 3918 - INTEGER(IntKi), PARAMETER :: M4N4FAFzi = 3919 - INTEGER(IntKi), PARAMETER :: M4N5FAFzi = 3920 - INTEGER(IntKi), PARAMETER :: M4N6FAFzi = 3921 - INTEGER(IntKi), PARAMETER :: M4N7FAFzi = 3922 - INTEGER(IntKi), PARAMETER :: M4N8FAFzi = 3923 - INTEGER(IntKi), PARAMETER :: M4N9FAFzi = 3924 - INTEGER(IntKi), PARAMETER :: M5N1FAFzi = 3925 - INTEGER(IntKi), PARAMETER :: M5N2FAFzi = 3926 - INTEGER(IntKi), PARAMETER :: M5N3FAFzi = 3927 - INTEGER(IntKi), PARAMETER :: M5N4FAFzi = 3928 - INTEGER(IntKi), PARAMETER :: M5N5FAFzi = 3929 - INTEGER(IntKi), PARAMETER :: M5N6FAFzi = 3930 - INTEGER(IntKi), PARAMETER :: M5N7FAFzi = 3931 - INTEGER(IntKi), PARAMETER :: M5N8FAFzi = 3932 - INTEGER(IntKi), PARAMETER :: M5N9FAFzi = 3933 - INTEGER(IntKi), PARAMETER :: M6N1FAFzi = 3934 - INTEGER(IntKi), PARAMETER :: M6N2FAFzi = 3935 - INTEGER(IntKi), PARAMETER :: M6N3FAFzi = 3936 - INTEGER(IntKi), PARAMETER :: M6N4FAFzi = 3937 - INTEGER(IntKi), PARAMETER :: M6N5FAFzi = 3938 - INTEGER(IntKi), PARAMETER :: M6N6FAFzi = 3939 - INTEGER(IntKi), PARAMETER :: M6N7FAFzi = 3940 - INTEGER(IntKi), PARAMETER :: M6N8FAFzi = 3941 - INTEGER(IntKi), PARAMETER :: M6N9FAFzi = 3942 - INTEGER(IntKi), PARAMETER :: M7N1FAFzi = 3943 - INTEGER(IntKi), PARAMETER :: M7N2FAFzi = 3944 - INTEGER(IntKi), PARAMETER :: M7N3FAFzi = 3945 - INTEGER(IntKi), PARAMETER :: M7N4FAFzi = 3946 - INTEGER(IntKi), PARAMETER :: M7N5FAFzi = 3947 - INTEGER(IntKi), PARAMETER :: M7N6FAFzi = 3948 - INTEGER(IntKi), PARAMETER :: M7N7FAFzi = 3949 - INTEGER(IntKi), PARAMETER :: M7N8FAFzi = 3950 - INTEGER(IntKi), PARAMETER :: M7N9FAFzi = 3951 - INTEGER(IntKi), PARAMETER :: M8N1FAFzi = 3952 - INTEGER(IntKi), PARAMETER :: M8N2FAFzi = 3953 - INTEGER(IntKi), PARAMETER :: M8N3FAFzi = 3954 - INTEGER(IntKi), PARAMETER :: M8N4FAFzi = 3955 - INTEGER(IntKi), PARAMETER :: M8N5FAFzi = 3956 - INTEGER(IntKi), PARAMETER :: M8N6FAFzi = 3957 - INTEGER(IntKi), PARAMETER :: M8N7FAFzi = 3958 - INTEGER(IntKi), PARAMETER :: M8N8FAFzi = 3959 - INTEGER(IntKi), PARAMETER :: M8N9FAFzi = 3960 - INTEGER(IntKi), PARAMETER :: M9N1FAFzi = 3961 - INTEGER(IntKi), PARAMETER :: M9N2FAFzi = 3962 - INTEGER(IntKi), PARAMETER :: M9N3FAFzi = 3963 - INTEGER(IntKi), PARAMETER :: M9N4FAFzi = 3964 - INTEGER(IntKi), PARAMETER :: M9N5FAFzi = 3965 - INTEGER(IntKi), PARAMETER :: M9N6FAFzi = 3966 - INTEGER(IntKi), PARAMETER :: M9N7FAFzi = 3967 - INTEGER(IntKi), PARAMETER :: M9N8FAFzi = 3968 - INTEGER(IntKi), PARAMETER :: M9N9FAFzi = 3969 - INTEGER(IntKi), PARAMETER :: M1N1MAFxi = 3970 - INTEGER(IntKi), PARAMETER :: M1N2MAFxi = 3971 - INTEGER(IntKi), PARAMETER :: M1N3MAFxi = 3972 - INTEGER(IntKi), PARAMETER :: M1N4MAFxi = 3973 - INTEGER(IntKi), PARAMETER :: M1N5MAFxi = 3974 - INTEGER(IntKi), PARAMETER :: M1N6MAFxi = 3975 - INTEGER(IntKi), PARAMETER :: M1N7MAFxi = 3976 - INTEGER(IntKi), PARAMETER :: M1N8MAFxi = 3977 - INTEGER(IntKi), PARAMETER :: M1N9MAFxi = 3978 - INTEGER(IntKi), PARAMETER :: M2N1MAFxi = 3979 - INTEGER(IntKi), PARAMETER :: M2N2MAFxi = 3980 - INTEGER(IntKi), PARAMETER :: M2N3MAFxi = 3981 - INTEGER(IntKi), PARAMETER :: M2N4MAFxi = 3982 - INTEGER(IntKi), PARAMETER :: M2N5MAFxi = 3983 - INTEGER(IntKi), PARAMETER :: M2N6MAFxi = 3984 - INTEGER(IntKi), PARAMETER :: M2N7MAFxi = 3985 - INTEGER(IntKi), PARAMETER :: M2N8MAFxi = 3986 - INTEGER(IntKi), PARAMETER :: M2N9MAFxi = 3987 - INTEGER(IntKi), PARAMETER :: M3N1MAFxi = 3988 - INTEGER(IntKi), PARAMETER :: M3N2MAFxi = 3989 - INTEGER(IntKi), PARAMETER :: M3N3MAFxi = 3990 - INTEGER(IntKi), PARAMETER :: M3N4MAFxi = 3991 - INTEGER(IntKi), PARAMETER :: M3N5MAFxi = 3992 - INTEGER(IntKi), PARAMETER :: M3N6MAFxi = 3993 - INTEGER(IntKi), PARAMETER :: M3N7MAFxi = 3994 - INTEGER(IntKi), PARAMETER :: M3N8MAFxi = 3995 - INTEGER(IntKi), PARAMETER :: M3N9MAFxi = 3996 - INTEGER(IntKi), PARAMETER :: M4N1MAFxi = 3997 - INTEGER(IntKi), PARAMETER :: M4N2MAFxi = 3998 - INTEGER(IntKi), PARAMETER :: M4N3MAFxi = 3999 - INTEGER(IntKi), PARAMETER :: M4N4MAFxi = 4000 - INTEGER(IntKi), PARAMETER :: M4N5MAFxi = 4001 - INTEGER(IntKi), PARAMETER :: M4N6MAFxi = 4002 - INTEGER(IntKi), PARAMETER :: M4N7MAFxi = 4003 - INTEGER(IntKi), PARAMETER :: M4N8MAFxi = 4004 - INTEGER(IntKi), PARAMETER :: M4N9MAFxi = 4005 - INTEGER(IntKi), PARAMETER :: M5N1MAFxi = 4006 - INTEGER(IntKi), PARAMETER :: M5N2MAFxi = 4007 - INTEGER(IntKi), PARAMETER :: M5N3MAFxi = 4008 - INTEGER(IntKi), PARAMETER :: M5N4MAFxi = 4009 - INTEGER(IntKi), PARAMETER :: M5N5MAFxi = 4010 - INTEGER(IntKi), PARAMETER :: M5N6MAFxi = 4011 - INTEGER(IntKi), PARAMETER :: M5N7MAFxi = 4012 - INTEGER(IntKi), PARAMETER :: M5N8MAFxi = 4013 - INTEGER(IntKi), PARAMETER :: M5N9MAFxi = 4014 - INTEGER(IntKi), PARAMETER :: M6N1MAFxi = 4015 - INTEGER(IntKi), PARAMETER :: M6N2MAFxi = 4016 - INTEGER(IntKi), PARAMETER :: M6N3MAFxi = 4017 - INTEGER(IntKi), PARAMETER :: M6N4MAFxi = 4018 - INTEGER(IntKi), PARAMETER :: M6N5MAFxi = 4019 - INTEGER(IntKi), PARAMETER :: M6N6MAFxi = 4020 - INTEGER(IntKi), PARAMETER :: M6N7MAFxi = 4021 - INTEGER(IntKi), PARAMETER :: M6N8MAFxi = 4022 - INTEGER(IntKi), PARAMETER :: M6N9MAFxi = 4023 - INTEGER(IntKi), PARAMETER :: M7N1MAFxi = 4024 - INTEGER(IntKi), PARAMETER :: M7N2MAFxi = 4025 - INTEGER(IntKi), PARAMETER :: M7N3MAFxi = 4026 - INTEGER(IntKi), PARAMETER :: M7N4MAFxi = 4027 - INTEGER(IntKi), PARAMETER :: M7N5MAFxi = 4028 - INTEGER(IntKi), PARAMETER :: M7N6MAFxi = 4029 - INTEGER(IntKi), PARAMETER :: M7N7MAFxi = 4030 - INTEGER(IntKi), PARAMETER :: M7N8MAFxi = 4031 - INTEGER(IntKi), PARAMETER :: M7N9MAFxi = 4032 - INTEGER(IntKi), PARAMETER :: M8N1MAFxi = 4033 - INTEGER(IntKi), PARAMETER :: M8N2MAFxi = 4034 - INTEGER(IntKi), PARAMETER :: M8N3MAFxi = 4035 - INTEGER(IntKi), PARAMETER :: M8N4MAFxi = 4036 - INTEGER(IntKi), PARAMETER :: M8N5MAFxi = 4037 - INTEGER(IntKi), PARAMETER :: M8N6MAFxi = 4038 - INTEGER(IntKi), PARAMETER :: M8N7MAFxi = 4039 - INTEGER(IntKi), PARAMETER :: M8N8MAFxi = 4040 - INTEGER(IntKi), PARAMETER :: M8N9MAFxi = 4041 - INTEGER(IntKi), PARAMETER :: M9N1MAFxi = 4042 - INTEGER(IntKi), PARAMETER :: M9N2MAFxi = 4043 - INTEGER(IntKi), PARAMETER :: M9N3MAFxi = 4044 - INTEGER(IntKi), PARAMETER :: M9N4MAFxi = 4045 - INTEGER(IntKi), PARAMETER :: M9N5MAFxi = 4046 - INTEGER(IntKi), PARAMETER :: M9N6MAFxi = 4047 - INTEGER(IntKi), PARAMETER :: M9N7MAFxi = 4048 - INTEGER(IntKi), PARAMETER :: M9N8MAFxi = 4049 - INTEGER(IntKi), PARAMETER :: M9N9MAFxi = 4050 - INTEGER(IntKi), PARAMETER :: M1N1MAFyi = 4051 - INTEGER(IntKi), PARAMETER :: M1N2MAFyi = 4052 - INTEGER(IntKi), PARAMETER :: M1N3MAFyi = 4053 - INTEGER(IntKi), PARAMETER :: M1N4MAFyi = 4054 - INTEGER(IntKi), PARAMETER :: M1N5MAFyi = 4055 - INTEGER(IntKi), PARAMETER :: M1N6MAFyi = 4056 - INTEGER(IntKi), PARAMETER :: M1N7MAFyi = 4057 - INTEGER(IntKi), PARAMETER :: M1N8MAFyi = 4058 - INTEGER(IntKi), PARAMETER :: M1N9MAFyi = 4059 - INTEGER(IntKi), PARAMETER :: M2N1MAFyi = 4060 - INTEGER(IntKi), PARAMETER :: M2N2MAFyi = 4061 - INTEGER(IntKi), PARAMETER :: M2N3MAFyi = 4062 - INTEGER(IntKi), PARAMETER :: M2N4MAFyi = 4063 - INTEGER(IntKi), PARAMETER :: M2N5MAFyi = 4064 - INTEGER(IntKi), PARAMETER :: M2N6MAFyi = 4065 - INTEGER(IntKi), PARAMETER :: M2N7MAFyi = 4066 - INTEGER(IntKi), PARAMETER :: M2N8MAFyi = 4067 - INTEGER(IntKi), PARAMETER :: M2N9MAFyi = 4068 - INTEGER(IntKi), PARAMETER :: M3N1MAFyi = 4069 - INTEGER(IntKi), PARAMETER :: M3N2MAFyi = 4070 - INTEGER(IntKi), PARAMETER :: M3N3MAFyi = 4071 - INTEGER(IntKi), PARAMETER :: M3N4MAFyi = 4072 - INTEGER(IntKi), PARAMETER :: M3N5MAFyi = 4073 - INTEGER(IntKi), PARAMETER :: M3N6MAFyi = 4074 - INTEGER(IntKi), PARAMETER :: M3N7MAFyi = 4075 - INTEGER(IntKi), PARAMETER :: M3N8MAFyi = 4076 - INTEGER(IntKi), PARAMETER :: M3N9MAFyi = 4077 - INTEGER(IntKi), PARAMETER :: M4N1MAFyi = 4078 - INTEGER(IntKi), PARAMETER :: M4N2MAFyi = 4079 - INTEGER(IntKi), PARAMETER :: M4N3MAFyi = 4080 - INTEGER(IntKi), PARAMETER :: M4N4MAFyi = 4081 - INTEGER(IntKi), PARAMETER :: M4N5MAFyi = 4082 - INTEGER(IntKi), PARAMETER :: M4N6MAFyi = 4083 - INTEGER(IntKi), PARAMETER :: M4N7MAFyi = 4084 - INTEGER(IntKi), PARAMETER :: M4N8MAFyi = 4085 - INTEGER(IntKi), PARAMETER :: M4N9MAFyi = 4086 - INTEGER(IntKi), PARAMETER :: M5N1MAFyi = 4087 - INTEGER(IntKi), PARAMETER :: M5N2MAFyi = 4088 - INTEGER(IntKi), PARAMETER :: M5N3MAFyi = 4089 - INTEGER(IntKi), PARAMETER :: M5N4MAFyi = 4090 - INTEGER(IntKi), PARAMETER :: M5N5MAFyi = 4091 - INTEGER(IntKi), PARAMETER :: M5N6MAFyi = 4092 - INTEGER(IntKi), PARAMETER :: M5N7MAFyi = 4093 - INTEGER(IntKi), PARAMETER :: M5N8MAFyi = 4094 - INTEGER(IntKi), PARAMETER :: M5N9MAFyi = 4095 - INTEGER(IntKi), PARAMETER :: M6N1MAFyi = 4096 - INTEGER(IntKi), PARAMETER :: M6N2MAFyi = 4097 - INTEGER(IntKi), PARAMETER :: M6N3MAFyi = 4098 - INTEGER(IntKi), PARAMETER :: M6N4MAFyi = 4099 - INTEGER(IntKi), PARAMETER :: M6N5MAFyi = 4100 - INTEGER(IntKi), PARAMETER :: M6N6MAFyi = 4101 - INTEGER(IntKi), PARAMETER :: M6N7MAFyi = 4102 - INTEGER(IntKi), PARAMETER :: M6N8MAFyi = 4103 - INTEGER(IntKi), PARAMETER :: M6N9MAFyi = 4104 - INTEGER(IntKi), PARAMETER :: M7N1MAFyi = 4105 - INTEGER(IntKi), PARAMETER :: M7N2MAFyi = 4106 - INTEGER(IntKi), PARAMETER :: M7N3MAFyi = 4107 - INTEGER(IntKi), PARAMETER :: M7N4MAFyi = 4108 - INTEGER(IntKi), PARAMETER :: M7N5MAFyi = 4109 - INTEGER(IntKi), PARAMETER :: M7N6MAFyi = 4110 - INTEGER(IntKi), PARAMETER :: M7N7MAFyi = 4111 - INTEGER(IntKi), PARAMETER :: M7N8MAFyi = 4112 - INTEGER(IntKi), PARAMETER :: M7N9MAFyi = 4113 - INTEGER(IntKi), PARAMETER :: M8N1MAFyi = 4114 - INTEGER(IntKi), PARAMETER :: M8N2MAFyi = 4115 - INTEGER(IntKi), PARAMETER :: M8N3MAFyi = 4116 - INTEGER(IntKi), PARAMETER :: M8N4MAFyi = 4117 - INTEGER(IntKi), PARAMETER :: M8N5MAFyi = 4118 - INTEGER(IntKi), PARAMETER :: M8N6MAFyi = 4119 - INTEGER(IntKi), PARAMETER :: M8N7MAFyi = 4120 - INTEGER(IntKi), PARAMETER :: M8N8MAFyi = 4121 - INTEGER(IntKi), PARAMETER :: M8N9MAFyi = 4122 - INTEGER(IntKi), PARAMETER :: M9N1MAFyi = 4123 - INTEGER(IntKi), PARAMETER :: M9N2MAFyi = 4124 - INTEGER(IntKi), PARAMETER :: M9N3MAFyi = 4125 - INTEGER(IntKi), PARAMETER :: M9N4MAFyi = 4126 - INTEGER(IntKi), PARAMETER :: M9N5MAFyi = 4127 - INTEGER(IntKi), PARAMETER :: M9N6MAFyi = 4128 - INTEGER(IntKi), PARAMETER :: M9N7MAFyi = 4129 - INTEGER(IntKi), PARAMETER :: M9N8MAFyi = 4130 - INTEGER(IntKi), PARAMETER :: M9N9MAFyi = 4131 - INTEGER(IntKi), PARAMETER :: M1N1MAFzi = 4132 - INTEGER(IntKi), PARAMETER :: M1N2MAFzi = 4133 - INTEGER(IntKi), PARAMETER :: M1N3MAFzi = 4134 - INTEGER(IntKi), PARAMETER :: M1N4MAFzi = 4135 - INTEGER(IntKi), PARAMETER :: M1N5MAFzi = 4136 - INTEGER(IntKi), PARAMETER :: M1N6MAFzi = 4137 - INTEGER(IntKi), PARAMETER :: M1N7MAFzi = 4138 - INTEGER(IntKi), PARAMETER :: M1N8MAFzi = 4139 - INTEGER(IntKi), PARAMETER :: M1N9MAFzi = 4140 - INTEGER(IntKi), PARAMETER :: M2N1MAFzi = 4141 - INTEGER(IntKi), PARAMETER :: M2N2MAFzi = 4142 - INTEGER(IntKi), PARAMETER :: M2N3MAFzi = 4143 - INTEGER(IntKi), PARAMETER :: M2N4MAFzi = 4144 - INTEGER(IntKi), PARAMETER :: M2N5MAFzi = 4145 - INTEGER(IntKi), PARAMETER :: M2N6MAFzi = 4146 - INTEGER(IntKi), PARAMETER :: M2N7MAFzi = 4147 - INTEGER(IntKi), PARAMETER :: M2N8MAFzi = 4148 - INTEGER(IntKi), PARAMETER :: M2N9MAFzi = 4149 - INTEGER(IntKi), PARAMETER :: M3N1MAFzi = 4150 - INTEGER(IntKi), PARAMETER :: M3N2MAFzi = 4151 - INTEGER(IntKi), PARAMETER :: M3N3MAFzi = 4152 - INTEGER(IntKi), PARAMETER :: M3N4MAFzi = 4153 - INTEGER(IntKi), PARAMETER :: M3N5MAFzi = 4154 - INTEGER(IntKi), PARAMETER :: M3N6MAFzi = 4155 - INTEGER(IntKi), PARAMETER :: M3N7MAFzi = 4156 - INTEGER(IntKi), PARAMETER :: M3N8MAFzi = 4157 - INTEGER(IntKi), PARAMETER :: M3N9MAFzi = 4158 - INTEGER(IntKi), PARAMETER :: M4N1MAFzi = 4159 - INTEGER(IntKi), PARAMETER :: M4N2MAFzi = 4160 - INTEGER(IntKi), PARAMETER :: M4N3MAFzi = 4161 - INTEGER(IntKi), PARAMETER :: M4N4MAFzi = 4162 - INTEGER(IntKi), PARAMETER :: M4N5MAFzi = 4163 - INTEGER(IntKi), PARAMETER :: M4N6MAFzi = 4164 - INTEGER(IntKi), PARAMETER :: M4N7MAFzi = 4165 - INTEGER(IntKi), PARAMETER :: M4N8MAFzi = 4166 - INTEGER(IntKi), PARAMETER :: M4N9MAFzi = 4167 - INTEGER(IntKi), PARAMETER :: M5N1MAFzi = 4168 - INTEGER(IntKi), PARAMETER :: M5N2MAFzi = 4169 - INTEGER(IntKi), PARAMETER :: M5N3MAFzi = 4170 - INTEGER(IntKi), PARAMETER :: M5N4MAFzi = 4171 - INTEGER(IntKi), PARAMETER :: M5N5MAFzi = 4172 - INTEGER(IntKi), PARAMETER :: M5N6MAFzi = 4173 - INTEGER(IntKi), PARAMETER :: M5N7MAFzi = 4174 - INTEGER(IntKi), PARAMETER :: M5N8MAFzi = 4175 - INTEGER(IntKi), PARAMETER :: M5N9MAFzi = 4176 - INTEGER(IntKi), PARAMETER :: M6N1MAFzi = 4177 - INTEGER(IntKi), PARAMETER :: M6N2MAFzi = 4178 - INTEGER(IntKi), PARAMETER :: M6N3MAFzi = 4179 - INTEGER(IntKi), PARAMETER :: M6N4MAFzi = 4180 - INTEGER(IntKi), PARAMETER :: M6N5MAFzi = 4181 - INTEGER(IntKi), PARAMETER :: M6N6MAFzi = 4182 - INTEGER(IntKi), PARAMETER :: M6N7MAFzi = 4183 - INTEGER(IntKi), PARAMETER :: M6N8MAFzi = 4184 - INTEGER(IntKi), PARAMETER :: M6N9MAFzi = 4185 - INTEGER(IntKi), PARAMETER :: M7N1MAFzi = 4186 - INTEGER(IntKi), PARAMETER :: M7N2MAFzi = 4187 - INTEGER(IntKi), PARAMETER :: M7N3MAFzi = 4188 - INTEGER(IntKi), PARAMETER :: M7N4MAFzi = 4189 - INTEGER(IntKi), PARAMETER :: M7N5MAFzi = 4190 - INTEGER(IntKi), PARAMETER :: M7N6MAFzi = 4191 - INTEGER(IntKi), PARAMETER :: M7N7MAFzi = 4192 - INTEGER(IntKi), PARAMETER :: M7N8MAFzi = 4193 - INTEGER(IntKi), PARAMETER :: M7N9MAFzi = 4194 - INTEGER(IntKi), PARAMETER :: M8N1MAFzi = 4195 - INTEGER(IntKi), PARAMETER :: M8N2MAFzi = 4196 - INTEGER(IntKi), PARAMETER :: M8N3MAFzi = 4197 - INTEGER(IntKi), PARAMETER :: M8N4MAFzi = 4198 - INTEGER(IntKi), PARAMETER :: M8N5MAFzi = 4199 - INTEGER(IntKi), PARAMETER :: M8N6MAFzi = 4200 - INTEGER(IntKi), PARAMETER :: M8N7MAFzi = 4201 - INTEGER(IntKi), PARAMETER :: M8N8MAFzi = 4202 - INTEGER(IntKi), PARAMETER :: M8N9MAFzi = 4203 - INTEGER(IntKi), PARAMETER :: M9N1MAFzi = 4204 - INTEGER(IntKi), PARAMETER :: M9N2MAFzi = 4205 - INTEGER(IntKi), PARAMETER :: M9N3MAFzi = 4206 - INTEGER(IntKi), PARAMETER :: M9N4MAFzi = 4207 - INTEGER(IntKi), PARAMETER :: M9N5MAFzi = 4208 - INTEGER(IntKi), PARAMETER :: M9N6MAFzi = 4209 - INTEGER(IntKi), PARAMETER :: M9N7MAFzi = 4210 - INTEGER(IntKi), PARAMETER :: M9N8MAFzi = 4211 - INTEGER(IntKi), PARAMETER :: M9N9MAFzi = 4212 + INTEGER(IntKi), PARAMETER :: M1N1FDxi = 1054 + INTEGER(IntKi), PARAMETER :: M1N2FDxi = 1055 + INTEGER(IntKi), PARAMETER :: M1N3FDxi = 1056 + INTEGER(IntKi), PARAMETER :: M1N4FDxi = 1057 + INTEGER(IntKi), PARAMETER :: M1N5FDxi = 1058 + INTEGER(IntKi), PARAMETER :: M1N6FDxi = 1059 + INTEGER(IntKi), PARAMETER :: M1N7FDxi = 1060 + INTEGER(IntKi), PARAMETER :: M1N8FDxi = 1061 + INTEGER(IntKi), PARAMETER :: M1N9FDxi = 1062 + INTEGER(IntKi), PARAMETER :: M2N1FDxi = 1063 + INTEGER(IntKi), PARAMETER :: M2N2FDxi = 1064 + INTEGER(IntKi), PARAMETER :: M2N3FDxi = 1065 + INTEGER(IntKi), PARAMETER :: M2N4FDxi = 1066 + INTEGER(IntKi), PARAMETER :: M2N5FDxi = 1067 + INTEGER(IntKi), PARAMETER :: M2N6FDxi = 1068 + INTEGER(IntKi), PARAMETER :: M2N7FDxi = 1069 + INTEGER(IntKi), PARAMETER :: M2N8FDxi = 1070 + INTEGER(IntKi), PARAMETER :: M2N9FDxi = 1071 + INTEGER(IntKi), PARAMETER :: M3N1FDxi = 1072 + INTEGER(IntKi), PARAMETER :: M3N2FDxi = 1073 + INTEGER(IntKi), PARAMETER :: M3N3FDxi = 1074 + INTEGER(IntKi), PARAMETER :: M3N4FDxi = 1075 + INTEGER(IntKi), PARAMETER :: M3N5FDxi = 1076 + INTEGER(IntKi), PARAMETER :: M3N6FDxi = 1077 + INTEGER(IntKi), PARAMETER :: M3N7FDxi = 1078 + INTEGER(IntKi), PARAMETER :: M3N8FDxi = 1079 + INTEGER(IntKi), PARAMETER :: M3N9FDxi = 1080 + INTEGER(IntKi), PARAMETER :: M4N1FDxi = 1081 + INTEGER(IntKi), PARAMETER :: M4N2FDxi = 1082 + INTEGER(IntKi), PARAMETER :: M4N3FDxi = 1083 + INTEGER(IntKi), PARAMETER :: M4N4FDxi = 1084 + INTEGER(IntKi), PARAMETER :: M4N5FDxi = 1085 + INTEGER(IntKi), PARAMETER :: M4N6FDxi = 1086 + INTEGER(IntKi), PARAMETER :: M4N7FDxi = 1087 + INTEGER(IntKi), PARAMETER :: M4N8FDxi = 1088 + INTEGER(IntKi), PARAMETER :: M4N9FDxi = 1089 + INTEGER(IntKi), PARAMETER :: M5N1FDxi = 1090 + INTEGER(IntKi), PARAMETER :: M5N2FDxi = 1091 + INTEGER(IntKi), PARAMETER :: M5N3FDxi = 1092 + INTEGER(IntKi), PARAMETER :: M5N4FDxi = 1093 + INTEGER(IntKi), PARAMETER :: M5N5FDxi = 1094 + INTEGER(IntKi), PARAMETER :: M5N6FDxi = 1095 + INTEGER(IntKi), PARAMETER :: M5N7FDxi = 1096 + INTEGER(IntKi), PARAMETER :: M5N8FDxi = 1097 + INTEGER(IntKi), PARAMETER :: M5N9FDxi = 1098 + INTEGER(IntKi), PARAMETER :: M6N1FDxi = 1099 + INTEGER(IntKi), PARAMETER :: M6N2FDxi = 1100 + INTEGER(IntKi), PARAMETER :: M6N3FDxi = 1101 + INTEGER(IntKi), PARAMETER :: M6N4FDxi = 1102 + INTEGER(IntKi), PARAMETER :: M6N5FDxi = 1103 + INTEGER(IntKi), PARAMETER :: M6N6FDxi = 1104 + INTEGER(IntKi), PARAMETER :: M6N7FDxi = 1105 + INTEGER(IntKi), PARAMETER :: M6N8FDxi = 1106 + INTEGER(IntKi), PARAMETER :: M6N9FDxi = 1107 + INTEGER(IntKi), PARAMETER :: M7N1FDxi = 1108 + INTEGER(IntKi), PARAMETER :: M7N2FDxi = 1109 + INTEGER(IntKi), PARAMETER :: M7N3FDxi = 1110 + INTEGER(IntKi), PARAMETER :: M7N4FDxi = 1111 + INTEGER(IntKi), PARAMETER :: M7N5FDxi = 1112 + INTEGER(IntKi), PARAMETER :: M7N6FDxi = 1113 + INTEGER(IntKi), PARAMETER :: M7N7FDxi = 1114 + INTEGER(IntKi), PARAMETER :: M7N8FDxi = 1115 + INTEGER(IntKi), PARAMETER :: M7N9FDxi = 1116 + INTEGER(IntKi), PARAMETER :: M8N1FDxi = 1117 + INTEGER(IntKi), PARAMETER :: M8N2FDxi = 1118 + INTEGER(IntKi), PARAMETER :: M8N3FDxi = 1119 + INTEGER(IntKi), PARAMETER :: M8N4FDxi = 1120 + INTEGER(IntKi), PARAMETER :: M8N5FDxi = 1121 + INTEGER(IntKi), PARAMETER :: M8N6FDxi = 1122 + INTEGER(IntKi), PARAMETER :: M8N7FDxi = 1123 + INTEGER(IntKi), PARAMETER :: M8N8FDxi = 1124 + INTEGER(IntKi), PARAMETER :: M8N9FDxi = 1125 + INTEGER(IntKi), PARAMETER :: M9N1FDxi = 1126 + INTEGER(IntKi), PARAMETER :: M9N2FDxi = 1127 + INTEGER(IntKi), PARAMETER :: M9N3FDxi = 1128 + INTEGER(IntKi), PARAMETER :: M9N4FDxi = 1129 + INTEGER(IntKi), PARAMETER :: M9N5FDxi = 1130 + INTEGER(IntKi), PARAMETER :: M9N6FDxi = 1131 + INTEGER(IntKi), PARAMETER :: M9N7FDxi = 1132 + INTEGER(IntKi), PARAMETER :: M9N8FDxi = 1133 + INTEGER(IntKi), PARAMETER :: M9N9FDxi = 1134 + INTEGER(IntKi), PARAMETER :: M1N1FDyi = 1135 + INTEGER(IntKi), PARAMETER :: M1N2FDyi = 1136 + INTEGER(IntKi), PARAMETER :: M1N3FDyi = 1137 + INTEGER(IntKi), PARAMETER :: M1N4FDyi = 1138 + INTEGER(IntKi), PARAMETER :: M1N5FDyi = 1139 + INTEGER(IntKi), PARAMETER :: M1N6FDyi = 1140 + INTEGER(IntKi), PARAMETER :: M1N7FDyi = 1141 + INTEGER(IntKi), PARAMETER :: M1N8FDyi = 1142 + INTEGER(IntKi), PARAMETER :: M1N9FDyi = 1143 + INTEGER(IntKi), PARAMETER :: M2N1FDyi = 1144 + INTEGER(IntKi), PARAMETER :: M2N2FDyi = 1145 + INTEGER(IntKi), PARAMETER :: M2N3FDyi = 1146 + INTEGER(IntKi), PARAMETER :: M2N4FDyi = 1147 + INTEGER(IntKi), PARAMETER :: M2N5FDyi = 1148 + INTEGER(IntKi), PARAMETER :: M2N6FDyi = 1149 + INTEGER(IntKi), PARAMETER :: M2N7FDyi = 1150 + INTEGER(IntKi), PARAMETER :: M2N8FDyi = 1151 + INTEGER(IntKi), PARAMETER :: M2N9FDyi = 1152 + INTEGER(IntKi), PARAMETER :: M3N1FDyi = 1153 + INTEGER(IntKi), PARAMETER :: M3N2FDyi = 1154 + INTEGER(IntKi), PARAMETER :: M3N3FDyi = 1155 + INTEGER(IntKi), PARAMETER :: M3N4FDyi = 1156 + INTEGER(IntKi), PARAMETER :: M3N5FDyi = 1157 + INTEGER(IntKi), PARAMETER :: M3N6FDyi = 1158 + INTEGER(IntKi), PARAMETER :: M3N7FDyi = 1159 + INTEGER(IntKi), PARAMETER :: M3N8FDyi = 1160 + INTEGER(IntKi), PARAMETER :: M3N9FDyi = 1161 + INTEGER(IntKi), PARAMETER :: M4N1FDyi = 1162 + INTEGER(IntKi), PARAMETER :: M4N2FDyi = 1163 + INTEGER(IntKi), PARAMETER :: M4N3FDyi = 1164 + INTEGER(IntKi), PARAMETER :: M4N4FDyi = 1165 + INTEGER(IntKi), PARAMETER :: M4N5FDyi = 1166 + INTEGER(IntKi), PARAMETER :: M4N6FDyi = 1167 + INTEGER(IntKi), PARAMETER :: M4N7FDyi = 1168 + INTEGER(IntKi), PARAMETER :: M4N8FDyi = 1169 + INTEGER(IntKi), PARAMETER :: M4N9FDyi = 1170 + INTEGER(IntKi), PARAMETER :: M5N1FDyi = 1171 + INTEGER(IntKi), PARAMETER :: M5N2FDyi = 1172 + INTEGER(IntKi), PARAMETER :: M5N3FDyi = 1173 + INTEGER(IntKi), PARAMETER :: M5N4FDyi = 1174 + INTEGER(IntKi), PARAMETER :: M5N5FDyi = 1175 + INTEGER(IntKi), PARAMETER :: M5N6FDyi = 1176 + INTEGER(IntKi), PARAMETER :: M5N7FDyi = 1177 + INTEGER(IntKi), PARAMETER :: M5N8FDyi = 1178 + INTEGER(IntKi), PARAMETER :: M5N9FDyi = 1179 + INTEGER(IntKi), PARAMETER :: M6N1FDyi = 1180 + INTEGER(IntKi), PARAMETER :: M6N2FDyi = 1181 + INTEGER(IntKi), PARAMETER :: M6N3FDyi = 1182 + INTEGER(IntKi), PARAMETER :: M6N4FDyi = 1183 + INTEGER(IntKi), PARAMETER :: M6N5FDyi = 1184 + INTEGER(IntKi), PARAMETER :: M6N6FDyi = 1185 + INTEGER(IntKi), PARAMETER :: M6N7FDyi = 1186 + INTEGER(IntKi), PARAMETER :: M6N8FDyi = 1187 + INTEGER(IntKi), PARAMETER :: M6N9FDyi = 1188 + INTEGER(IntKi), PARAMETER :: M7N1FDyi = 1189 + INTEGER(IntKi), PARAMETER :: M7N2FDyi = 1190 + INTEGER(IntKi), PARAMETER :: M7N3FDyi = 1191 + INTEGER(IntKi), PARAMETER :: M7N4FDyi = 1192 + INTEGER(IntKi), PARAMETER :: M7N5FDyi = 1193 + INTEGER(IntKi), PARAMETER :: M7N6FDyi = 1194 + INTEGER(IntKi), PARAMETER :: M7N7FDyi = 1195 + INTEGER(IntKi), PARAMETER :: M7N8FDyi = 1196 + INTEGER(IntKi), PARAMETER :: M7N9FDyi = 1197 + INTEGER(IntKi), PARAMETER :: M8N1FDyi = 1198 + INTEGER(IntKi), PARAMETER :: M8N2FDyi = 1199 + INTEGER(IntKi), PARAMETER :: M8N3FDyi = 1200 + INTEGER(IntKi), PARAMETER :: M8N4FDyi = 1201 + INTEGER(IntKi), PARAMETER :: M8N5FDyi = 1202 + INTEGER(IntKi), PARAMETER :: M8N6FDyi = 1203 + INTEGER(IntKi), PARAMETER :: M8N7FDyi = 1204 + INTEGER(IntKi), PARAMETER :: M8N8FDyi = 1205 + INTEGER(IntKi), PARAMETER :: M8N9FDyi = 1206 + INTEGER(IntKi), PARAMETER :: M9N1FDyi = 1207 + INTEGER(IntKi), PARAMETER :: M9N2FDyi = 1208 + INTEGER(IntKi), PARAMETER :: M9N3FDyi = 1209 + INTEGER(IntKi), PARAMETER :: M9N4FDyi = 1210 + INTEGER(IntKi), PARAMETER :: M9N5FDyi = 1211 + INTEGER(IntKi), PARAMETER :: M9N6FDyi = 1212 + INTEGER(IntKi), PARAMETER :: M9N7FDyi = 1213 + INTEGER(IntKi), PARAMETER :: M9N8FDyi = 1214 + INTEGER(IntKi), PARAMETER :: M9N9FDyi = 1215 + INTEGER(IntKi), PARAMETER :: M1N1FDzi = 1216 + INTEGER(IntKi), PARAMETER :: M1N2FDzi = 1217 + INTEGER(IntKi), PARAMETER :: M1N3FDzi = 1218 + INTEGER(IntKi), PARAMETER :: M1N4FDzi = 1219 + INTEGER(IntKi), PARAMETER :: M1N5FDzi = 1220 + INTEGER(IntKi), PARAMETER :: M1N6FDzi = 1221 + INTEGER(IntKi), PARAMETER :: M1N7FDzi = 1222 + INTEGER(IntKi), PARAMETER :: M1N8FDzi = 1223 + INTEGER(IntKi), PARAMETER :: M1N9FDzi = 1224 + INTEGER(IntKi), PARAMETER :: M2N1FDzi = 1225 + INTEGER(IntKi), PARAMETER :: M2N2FDzi = 1226 + INTEGER(IntKi), PARAMETER :: M2N3FDzi = 1227 + INTEGER(IntKi), PARAMETER :: M2N4FDzi = 1228 + INTEGER(IntKi), PARAMETER :: M2N5FDzi = 1229 + INTEGER(IntKi), PARAMETER :: M2N6FDzi = 1230 + INTEGER(IntKi), PARAMETER :: M2N7FDzi = 1231 + INTEGER(IntKi), PARAMETER :: M2N8FDzi = 1232 + INTEGER(IntKi), PARAMETER :: M2N9FDzi = 1233 + INTEGER(IntKi), PARAMETER :: M3N1FDzi = 1234 + INTEGER(IntKi), PARAMETER :: M3N2FDzi = 1235 + INTEGER(IntKi), PARAMETER :: M3N3FDzi = 1236 + INTEGER(IntKi), PARAMETER :: M3N4FDzi = 1237 + INTEGER(IntKi), PARAMETER :: M3N5FDzi = 1238 + INTEGER(IntKi), PARAMETER :: M3N6FDzi = 1239 + INTEGER(IntKi), PARAMETER :: M3N7FDzi = 1240 + INTEGER(IntKi), PARAMETER :: M3N8FDzi = 1241 + INTEGER(IntKi), PARAMETER :: M3N9FDzi = 1242 + INTEGER(IntKi), PARAMETER :: M4N1FDzi = 1243 + INTEGER(IntKi), PARAMETER :: M4N2FDzi = 1244 + INTEGER(IntKi), PARAMETER :: M4N3FDzi = 1245 + INTEGER(IntKi), PARAMETER :: M4N4FDzi = 1246 + INTEGER(IntKi), PARAMETER :: M4N5FDzi = 1247 + INTEGER(IntKi), PARAMETER :: M4N6FDzi = 1248 + INTEGER(IntKi), PARAMETER :: M4N7FDzi = 1249 + INTEGER(IntKi), PARAMETER :: M4N8FDzi = 1250 + INTEGER(IntKi), PARAMETER :: M4N9FDzi = 1251 + INTEGER(IntKi), PARAMETER :: M5N1FDzi = 1252 + INTEGER(IntKi), PARAMETER :: M5N2FDzi = 1253 + INTEGER(IntKi), PARAMETER :: M5N3FDzi = 1254 + INTEGER(IntKi), PARAMETER :: M5N4FDzi = 1255 + INTEGER(IntKi), PARAMETER :: M5N5FDzi = 1256 + INTEGER(IntKi), PARAMETER :: M5N6FDzi = 1257 + INTEGER(IntKi), PARAMETER :: M5N7FDzi = 1258 + INTEGER(IntKi), PARAMETER :: M5N8FDzi = 1259 + INTEGER(IntKi), PARAMETER :: M5N9FDzi = 1260 + INTEGER(IntKi), PARAMETER :: M6N1FDzi = 1261 + INTEGER(IntKi), PARAMETER :: M6N2FDzi = 1262 + INTEGER(IntKi), PARAMETER :: M6N3FDzi = 1263 + INTEGER(IntKi), PARAMETER :: M6N4FDzi = 1264 + INTEGER(IntKi), PARAMETER :: M6N5FDzi = 1265 + INTEGER(IntKi), PARAMETER :: M6N6FDzi = 1266 + INTEGER(IntKi), PARAMETER :: M6N7FDzi = 1267 + INTEGER(IntKi), PARAMETER :: M6N8FDzi = 1268 + INTEGER(IntKi), PARAMETER :: M6N9FDzi = 1269 + INTEGER(IntKi), PARAMETER :: M7N1FDzi = 1270 + INTEGER(IntKi), PARAMETER :: M7N2FDzi = 1271 + INTEGER(IntKi), PARAMETER :: M7N3FDzi = 1272 + INTEGER(IntKi), PARAMETER :: M7N4FDzi = 1273 + INTEGER(IntKi), PARAMETER :: M7N5FDzi = 1274 + INTEGER(IntKi), PARAMETER :: M7N6FDzi = 1275 + INTEGER(IntKi), PARAMETER :: M7N7FDzi = 1276 + INTEGER(IntKi), PARAMETER :: M7N8FDzi = 1277 + INTEGER(IntKi), PARAMETER :: M7N9FDzi = 1278 + INTEGER(IntKi), PARAMETER :: M8N1FDzi = 1279 + INTEGER(IntKi), PARAMETER :: M8N2FDzi = 1280 + INTEGER(IntKi), PARAMETER :: M8N3FDzi = 1281 + INTEGER(IntKi), PARAMETER :: M8N4FDzi = 1282 + INTEGER(IntKi), PARAMETER :: M8N5FDzi = 1283 + INTEGER(IntKi), PARAMETER :: M8N6FDzi = 1284 + INTEGER(IntKi), PARAMETER :: M8N7FDzi = 1285 + INTEGER(IntKi), PARAMETER :: M8N8FDzi = 1286 + INTEGER(IntKi), PARAMETER :: M8N9FDzi = 1287 + INTEGER(IntKi), PARAMETER :: M9N1FDzi = 1288 + INTEGER(IntKi), PARAMETER :: M9N2FDzi = 1289 + INTEGER(IntKi), PARAMETER :: M9N3FDzi = 1290 + INTEGER(IntKi), PARAMETER :: M9N4FDzi = 1291 + INTEGER(IntKi), PARAMETER :: M9N5FDzi = 1292 + INTEGER(IntKi), PARAMETER :: M9N6FDzi = 1293 + INTEGER(IntKi), PARAMETER :: M9N7FDzi = 1294 + INTEGER(IntKi), PARAMETER :: M9N8FDzi = 1295 + INTEGER(IntKi), PARAMETER :: M9N9FDzi = 1296 + INTEGER(IntKi), PARAMETER :: M1N1FIxi = 1297 + INTEGER(IntKi), PARAMETER :: M1N2FIxi = 1298 + INTEGER(IntKi), PARAMETER :: M1N3FIxi = 1299 + INTEGER(IntKi), PARAMETER :: M1N4FIxi = 1300 + INTEGER(IntKi), PARAMETER :: M1N5FIxi = 1301 + INTEGER(IntKi), PARAMETER :: M1N6FIxi = 1302 + INTEGER(IntKi), PARAMETER :: M1N7FIxi = 1303 + INTEGER(IntKi), PARAMETER :: M1N8FIxi = 1304 + INTEGER(IntKi), PARAMETER :: M1N9FIxi = 1305 + INTEGER(IntKi), PARAMETER :: M2N1FIxi = 1306 + INTEGER(IntKi), PARAMETER :: M2N2FIxi = 1307 + INTEGER(IntKi), PARAMETER :: M2N3FIxi = 1308 + INTEGER(IntKi), PARAMETER :: M2N4FIxi = 1309 + INTEGER(IntKi), PARAMETER :: M2N5FIxi = 1310 + INTEGER(IntKi), PARAMETER :: M2N6FIxi = 1311 + INTEGER(IntKi), PARAMETER :: M2N7FIxi = 1312 + INTEGER(IntKi), PARAMETER :: M2N8FIxi = 1313 + INTEGER(IntKi), PARAMETER :: M2N9FIxi = 1314 + INTEGER(IntKi), PARAMETER :: M3N1FIxi = 1315 + INTEGER(IntKi), PARAMETER :: M3N2FIxi = 1316 + INTEGER(IntKi), PARAMETER :: M3N3FIxi = 1317 + INTEGER(IntKi), PARAMETER :: M3N4FIxi = 1318 + INTEGER(IntKi), PARAMETER :: M3N5FIxi = 1319 + INTEGER(IntKi), PARAMETER :: M3N6FIxi = 1320 + INTEGER(IntKi), PARAMETER :: M3N7FIxi = 1321 + INTEGER(IntKi), PARAMETER :: M3N8FIxi = 1322 + INTEGER(IntKi), PARAMETER :: M3N9FIxi = 1323 + INTEGER(IntKi), PARAMETER :: M4N1FIxi = 1324 + INTEGER(IntKi), PARAMETER :: M4N2FIxi = 1325 + INTEGER(IntKi), PARAMETER :: M4N3FIxi = 1326 + INTEGER(IntKi), PARAMETER :: M4N4FIxi = 1327 + INTEGER(IntKi), PARAMETER :: M4N5FIxi = 1328 + INTEGER(IntKi), PARAMETER :: M4N6FIxi = 1329 + INTEGER(IntKi), PARAMETER :: M4N7FIxi = 1330 + INTEGER(IntKi), PARAMETER :: M4N8FIxi = 1331 + INTEGER(IntKi), PARAMETER :: M4N9FIxi = 1332 + INTEGER(IntKi), PARAMETER :: M5N1FIxi = 1333 + INTEGER(IntKi), PARAMETER :: M5N2FIxi = 1334 + INTEGER(IntKi), PARAMETER :: M5N3FIxi = 1335 + INTEGER(IntKi), PARAMETER :: M5N4FIxi = 1336 + INTEGER(IntKi), PARAMETER :: M5N5FIxi = 1337 + INTEGER(IntKi), PARAMETER :: M5N6FIxi = 1338 + INTEGER(IntKi), PARAMETER :: M5N7FIxi = 1339 + INTEGER(IntKi), PARAMETER :: M5N8FIxi = 1340 + INTEGER(IntKi), PARAMETER :: M5N9FIxi = 1341 + INTEGER(IntKi), PARAMETER :: M6N1FIxi = 1342 + INTEGER(IntKi), PARAMETER :: M6N2FIxi = 1343 + INTEGER(IntKi), PARAMETER :: M6N3FIxi = 1344 + INTEGER(IntKi), PARAMETER :: M6N4FIxi = 1345 + INTEGER(IntKi), PARAMETER :: M6N5FIxi = 1346 + INTEGER(IntKi), PARAMETER :: M6N6FIxi = 1347 + INTEGER(IntKi), PARAMETER :: M6N7FIxi = 1348 + INTEGER(IntKi), PARAMETER :: M6N8FIxi = 1349 + INTEGER(IntKi), PARAMETER :: M6N9FIxi = 1350 + INTEGER(IntKi), PARAMETER :: M7N1FIxi = 1351 + INTEGER(IntKi), PARAMETER :: M7N2FIxi = 1352 + INTEGER(IntKi), PARAMETER :: M7N3FIxi = 1353 + INTEGER(IntKi), PARAMETER :: M7N4FIxi = 1354 + INTEGER(IntKi), PARAMETER :: M7N5FIxi = 1355 + INTEGER(IntKi), PARAMETER :: M7N6FIxi = 1356 + INTEGER(IntKi), PARAMETER :: M7N7FIxi = 1357 + INTEGER(IntKi), PARAMETER :: M7N8FIxi = 1358 + INTEGER(IntKi), PARAMETER :: M7N9FIxi = 1359 + INTEGER(IntKi), PARAMETER :: M8N1FIxi = 1360 + INTEGER(IntKi), PARAMETER :: M8N2FIxi = 1361 + INTEGER(IntKi), PARAMETER :: M8N3FIxi = 1362 + INTEGER(IntKi), PARAMETER :: M8N4FIxi = 1363 + INTEGER(IntKi), PARAMETER :: M8N5FIxi = 1364 + INTEGER(IntKi), PARAMETER :: M8N6FIxi = 1365 + INTEGER(IntKi), PARAMETER :: M8N7FIxi = 1366 + INTEGER(IntKi), PARAMETER :: M8N8FIxi = 1367 + INTEGER(IntKi), PARAMETER :: M8N9FIxi = 1368 + INTEGER(IntKi), PARAMETER :: M9N1FIxi = 1369 + INTEGER(IntKi), PARAMETER :: M9N2FIxi = 1370 + INTEGER(IntKi), PARAMETER :: M9N3FIxi = 1371 + INTEGER(IntKi), PARAMETER :: M9N4FIxi = 1372 + INTEGER(IntKi), PARAMETER :: M9N5FIxi = 1373 + INTEGER(IntKi), PARAMETER :: M9N6FIxi = 1374 + INTEGER(IntKi), PARAMETER :: M9N7FIxi = 1375 + INTEGER(IntKi), PARAMETER :: M9N8FIxi = 1376 + INTEGER(IntKi), PARAMETER :: M9N9FIxi = 1377 + INTEGER(IntKi), PARAMETER :: M1N1FIyi = 1378 + INTEGER(IntKi), PARAMETER :: M1N2FIyi = 1379 + INTEGER(IntKi), PARAMETER :: M1N3FIyi = 1380 + INTEGER(IntKi), PARAMETER :: M1N4FIyi = 1381 + INTEGER(IntKi), PARAMETER :: M1N5FIyi = 1382 + INTEGER(IntKi), PARAMETER :: M1N6FIyi = 1383 + INTEGER(IntKi), PARAMETER :: M1N7FIyi = 1384 + INTEGER(IntKi), PARAMETER :: M1N8FIyi = 1385 + INTEGER(IntKi), PARAMETER :: M1N9FIyi = 1386 + INTEGER(IntKi), PARAMETER :: M2N1FIyi = 1387 + INTEGER(IntKi), PARAMETER :: M2N2FIyi = 1388 + INTEGER(IntKi), PARAMETER :: M2N3FIyi = 1389 + INTEGER(IntKi), PARAMETER :: M2N4FIyi = 1390 + INTEGER(IntKi), PARAMETER :: M2N5FIyi = 1391 + INTEGER(IntKi), PARAMETER :: M2N6FIyi = 1392 + INTEGER(IntKi), PARAMETER :: M2N7FIyi = 1393 + INTEGER(IntKi), PARAMETER :: M2N8FIyi = 1394 + INTEGER(IntKi), PARAMETER :: M2N9FIyi = 1395 + INTEGER(IntKi), PARAMETER :: M3N1FIyi = 1396 + INTEGER(IntKi), PARAMETER :: M3N2FIyi = 1397 + INTEGER(IntKi), PARAMETER :: M3N3FIyi = 1398 + INTEGER(IntKi), PARAMETER :: M3N4FIyi = 1399 + INTEGER(IntKi), PARAMETER :: M3N5FIyi = 1400 + INTEGER(IntKi), PARAMETER :: M3N6FIyi = 1401 + INTEGER(IntKi), PARAMETER :: M3N7FIyi = 1402 + INTEGER(IntKi), PARAMETER :: M3N8FIyi = 1403 + INTEGER(IntKi), PARAMETER :: M3N9FIyi = 1404 + INTEGER(IntKi), PARAMETER :: M4N1FIyi = 1405 + INTEGER(IntKi), PARAMETER :: M4N2FIyi = 1406 + INTEGER(IntKi), PARAMETER :: M4N3FIyi = 1407 + INTEGER(IntKi), PARAMETER :: M4N4FIyi = 1408 + INTEGER(IntKi), PARAMETER :: M4N5FIyi = 1409 + INTEGER(IntKi), PARAMETER :: M4N6FIyi = 1410 + INTEGER(IntKi), PARAMETER :: M4N7FIyi = 1411 + INTEGER(IntKi), PARAMETER :: M4N8FIyi = 1412 + INTEGER(IntKi), PARAMETER :: M4N9FIyi = 1413 + INTEGER(IntKi), PARAMETER :: M5N1FIyi = 1414 + INTEGER(IntKi), PARAMETER :: M5N2FIyi = 1415 + INTEGER(IntKi), PARAMETER :: M5N3FIyi = 1416 + INTEGER(IntKi), PARAMETER :: M5N4FIyi = 1417 + INTEGER(IntKi), PARAMETER :: M5N5FIyi = 1418 + INTEGER(IntKi), PARAMETER :: M5N6FIyi = 1419 + INTEGER(IntKi), PARAMETER :: M5N7FIyi = 1420 + INTEGER(IntKi), PARAMETER :: M5N8FIyi = 1421 + INTEGER(IntKi), PARAMETER :: M5N9FIyi = 1422 + INTEGER(IntKi), PARAMETER :: M6N1FIyi = 1423 + INTEGER(IntKi), PARAMETER :: M6N2FIyi = 1424 + INTEGER(IntKi), PARAMETER :: M6N3FIyi = 1425 + INTEGER(IntKi), PARAMETER :: M6N4FIyi = 1426 + INTEGER(IntKi), PARAMETER :: M6N5FIyi = 1427 + INTEGER(IntKi), PARAMETER :: M6N6FIyi = 1428 + INTEGER(IntKi), PARAMETER :: M6N7FIyi = 1429 + INTEGER(IntKi), PARAMETER :: M6N8FIyi = 1430 + INTEGER(IntKi), PARAMETER :: M6N9FIyi = 1431 + INTEGER(IntKi), PARAMETER :: M7N1FIyi = 1432 + INTEGER(IntKi), PARAMETER :: M7N2FIyi = 1433 + INTEGER(IntKi), PARAMETER :: M7N3FIyi = 1434 + INTEGER(IntKi), PARAMETER :: M7N4FIyi = 1435 + INTEGER(IntKi), PARAMETER :: M7N5FIyi = 1436 + INTEGER(IntKi), PARAMETER :: M7N6FIyi = 1437 + INTEGER(IntKi), PARAMETER :: M7N7FIyi = 1438 + INTEGER(IntKi), PARAMETER :: M7N8FIyi = 1439 + INTEGER(IntKi), PARAMETER :: M7N9FIyi = 1440 + INTEGER(IntKi), PARAMETER :: M8N1FIyi = 1441 + INTEGER(IntKi), PARAMETER :: M8N2FIyi = 1442 + INTEGER(IntKi), PARAMETER :: M8N3FIyi = 1443 + INTEGER(IntKi), PARAMETER :: M8N4FIyi = 1444 + INTEGER(IntKi), PARAMETER :: M8N5FIyi = 1445 + INTEGER(IntKi), PARAMETER :: M8N6FIyi = 1446 + INTEGER(IntKi), PARAMETER :: M8N7FIyi = 1447 + INTEGER(IntKi), PARAMETER :: M8N8FIyi = 1448 + INTEGER(IntKi), PARAMETER :: M8N9FIyi = 1449 + INTEGER(IntKi), PARAMETER :: M9N1FIyi = 1450 + INTEGER(IntKi), PARAMETER :: M9N2FIyi = 1451 + INTEGER(IntKi), PARAMETER :: M9N3FIyi = 1452 + INTEGER(IntKi), PARAMETER :: M9N4FIyi = 1453 + INTEGER(IntKi), PARAMETER :: M9N5FIyi = 1454 + INTEGER(IntKi), PARAMETER :: M9N6FIyi = 1455 + INTEGER(IntKi), PARAMETER :: M9N7FIyi = 1456 + INTEGER(IntKi), PARAMETER :: M9N8FIyi = 1457 + INTEGER(IntKi), PARAMETER :: M9N9FIyi = 1458 + INTEGER(IntKi), PARAMETER :: M1N1FIzi = 1459 + INTEGER(IntKi), PARAMETER :: M1N2FIzi = 1460 + INTEGER(IntKi), PARAMETER :: M1N3FIzi = 1461 + INTEGER(IntKi), PARAMETER :: M1N4FIzi = 1462 + INTEGER(IntKi), PARAMETER :: M1N5FIzi = 1463 + INTEGER(IntKi), PARAMETER :: M1N6FIzi = 1464 + INTEGER(IntKi), PARAMETER :: M1N7FIzi = 1465 + INTEGER(IntKi), PARAMETER :: M1N8FIzi = 1466 + INTEGER(IntKi), PARAMETER :: M1N9FIzi = 1467 + INTEGER(IntKi), PARAMETER :: M2N1FIzi = 1468 + INTEGER(IntKi), PARAMETER :: M2N2FIzi = 1469 + INTEGER(IntKi), PARAMETER :: M2N3FIzi = 1470 + INTEGER(IntKi), PARAMETER :: M2N4FIzi = 1471 + INTEGER(IntKi), PARAMETER :: M2N5FIzi = 1472 + INTEGER(IntKi), PARAMETER :: M2N6FIzi = 1473 + INTEGER(IntKi), PARAMETER :: M2N7FIzi = 1474 + INTEGER(IntKi), PARAMETER :: M2N8FIzi = 1475 + INTEGER(IntKi), PARAMETER :: M2N9FIzi = 1476 + INTEGER(IntKi), PARAMETER :: M3N1FIzi = 1477 + INTEGER(IntKi), PARAMETER :: M3N2FIzi = 1478 + INTEGER(IntKi), PARAMETER :: M3N3FIzi = 1479 + INTEGER(IntKi), PARAMETER :: M3N4FIzi = 1480 + INTEGER(IntKi), PARAMETER :: M3N5FIzi = 1481 + INTEGER(IntKi), PARAMETER :: M3N6FIzi = 1482 + INTEGER(IntKi), PARAMETER :: M3N7FIzi = 1483 + INTEGER(IntKi), PARAMETER :: M3N8FIzi = 1484 + INTEGER(IntKi), PARAMETER :: M3N9FIzi = 1485 + INTEGER(IntKi), PARAMETER :: M4N1FIzi = 1486 + INTEGER(IntKi), PARAMETER :: M4N2FIzi = 1487 + INTEGER(IntKi), PARAMETER :: M4N3FIzi = 1488 + INTEGER(IntKi), PARAMETER :: M4N4FIzi = 1489 + INTEGER(IntKi), PARAMETER :: M4N5FIzi = 1490 + INTEGER(IntKi), PARAMETER :: M4N6FIzi = 1491 + INTEGER(IntKi), PARAMETER :: M4N7FIzi = 1492 + INTEGER(IntKi), PARAMETER :: M4N8FIzi = 1493 + INTEGER(IntKi), PARAMETER :: M4N9FIzi = 1494 + INTEGER(IntKi), PARAMETER :: M5N1FIzi = 1495 + INTEGER(IntKi), PARAMETER :: M5N2FIzi = 1496 + INTEGER(IntKi), PARAMETER :: M5N3FIzi = 1497 + INTEGER(IntKi), PARAMETER :: M5N4FIzi = 1498 + INTEGER(IntKi), PARAMETER :: M5N5FIzi = 1499 + INTEGER(IntKi), PARAMETER :: M5N6FIzi = 1500 + INTEGER(IntKi), PARAMETER :: M5N7FIzi = 1501 + INTEGER(IntKi), PARAMETER :: M5N8FIzi = 1502 + INTEGER(IntKi), PARAMETER :: M5N9FIzi = 1503 + INTEGER(IntKi), PARAMETER :: M6N1FIzi = 1504 + INTEGER(IntKi), PARAMETER :: M6N2FIzi = 1505 + INTEGER(IntKi), PARAMETER :: M6N3FIzi = 1506 + INTEGER(IntKi), PARAMETER :: M6N4FIzi = 1507 + INTEGER(IntKi), PARAMETER :: M6N5FIzi = 1508 + INTEGER(IntKi), PARAMETER :: M6N6FIzi = 1509 + INTEGER(IntKi), PARAMETER :: M6N7FIzi = 1510 + INTEGER(IntKi), PARAMETER :: M6N8FIzi = 1511 + INTEGER(IntKi), PARAMETER :: M6N9FIzi = 1512 + INTEGER(IntKi), PARAMETER :: M7N1FIzi = 1513 + INTEGER(IntKi), PARAMETER :: M7N2FIzi = 1514 + INTEGER(IntKi), PARAMETER :: M7N3FIzi = 1515 + INTEGER(IntKi), PARAMETER :: M7N4FIzi = 1516 + INTEGER(IntKi), PARAMETER :: M7N5FIzi = 1517 + INTEGER(IntKi), PARAMETER :: M7N6FIzi = 1518 + INTEGER(IntKi), PARAMETER :: M7N7FIzi = 1519 + INTEGER(IntKi), PARAMETER :: M7N8FIzi = 1520 + INTEGER(IntKi), PARAMETER :: M7N9FIzi = 1521 + INTEGER(IntKi), PARAMETER :: M8N1FIzi = 1522 + INTEGER(IntKi), PARAMETER :: M8N2FIzi = 1523 + INTEGER(IntKi), PARAMETER :: M8N3FIzi = 1524 + INTEGER(IntKi), PARAMETER :: M8N4FIzi = 1525 + INTEGER(IntKi), PARAMETER :: M8N5FIzi = 1526 + INTEGER(IntKi), PARAMETER :: M8N6FIzi = 1527 + INTEGER(IntKi), PARAMETER :: M8N7FIzi = 1528 + INTEGER(IntKi), PARAMETER :: M8N8FIzi = 1529 + INTEGER(IntKi), PARAMETER :: M8N9FIzi = 1530 + INTEGER(IntKi), PARAMETER :: M9N1FIzi = 1531 + INTEGER(IntKi), PARAMETER :: M9N2FIzi = 1532 + INTEGER(IntKi), PARAMETER :: M9N3FIzi = 1533 + INTEGER(IntKi), PARAMETER :: M9N4FIzi = 1534 + INTEGER(IntKi), PARAMETER :: M9N5FIzi = 1535 + INTEGER(IntKi), PARAMETER :: M9N6FIzi = 1536 + INTEGER(IntKi), PARAMETER :: M9N7FIzi = 1537 + INTEGER(IntKi), PARAMETER :: M9N8FIzi = 1538 + INTEGER(IntKi), PARAMETER :: M9N9FIzi = 1539 + INTEGER(IntKi), PARAMETER :: M1N1FBxi = 1540 + INTEGER(IntKi), PARAMETER :: M1N2FBxi = 1541 + INTEGER(IntKi), PARAMETER :: M1N3FBxi = 1542 + INTEGER(IntKi), PARAMETER :: M1N4FBxi = 1543 + INTEGER(IntKi), PARAMETER :: M1N5FBxi = 1544 + INTEGER(IntKi), PARAMETER :: M1N6FBxi = 1545 + INTEGER(IntKi), PARAMETER :: M1N7FBxi = 1546 + INTEGER(IntKi), PARAMETER :: M1N8FBxi = 1547 + INTEGER(IntKi), PARAMETER :: M1N9FBxi = 1548 + INTEGER(IntKi), PARAMETER :: M2N1FBxi = 1549 + INTEGER(IntKi), PARAMETER :: M2N2FBxi = 1550 + INTEGER(IntKi), PARAMETER :: M2N3FBxi = 1551 + INTEGER(IntKi), PARAMETER :: M2N4FBxi = 1552 + INTEGER(IntKi), PARAMETER :: M2N5FBxi = 1553 + INTEGER(IntKi), PARAMETER :: M2N6FBxi = 1554 + INTEGER(IntKi), PARAMETER :: M2N7FBxi = 1555 + INTEGER(IntKi), PARAMETER :: M2N8FBxi = 1556 + INTEGER(IntKi), PARAMETER :: M2N9FBxi = 1557 + INTEGER(IntKi), PARAMETER :: M3N1FBxi = 1558 + INTEGER(IntKi), PARAMETER :: M3N2FBxi = 1559 + INTEGER(IntKi), PARAMETER :: M3N3FBxi = 1560 + INTEGER(IntKi), PARAMETER :: M3N4FBxi = 1561 + INTEGER(IntKi), PARAMETER :: M3N5FBxi = 1562 + INTEGER(IntKi), PARAMETER :: M3N6FBxi = 1563 + INTEGER(IntKi), PARAMETER :: M3N7FBxi = 1564 + INTEGER(IntKi), PARAMETER :: M3N8FBxi = 1565 + INTEGER(IntKi), PARAMETER :: M3N9FBxi = 1566 + INTEGER(IntKi), PARAMETER :: M4N1FBxi = 1567 + INTEGER(IntKi), PARAMETER :: M4N2FBxi = 1568 + INTEGER(IntKi), PARAMETER :: M4N3FBxi = 1569 + INTEGER(IntKi), PARAMETER :: M4N4FBxi = 1570 + INTEGER(IntKi), PARAMETER :: M4N5FBxi = 1571 + INTEGER(IntKi), PARAMETER :: M4N6FBxi = 1572 + INTEGER(IntKi), PARAMETER :: M4N7FBxi = 1573 + INTEGER(IntKi), PARAMETER :: M4N8FBxi = 1574 + INTEGER(IntKi), PARAMETER :: M4N9FBxi = 1575 + INTEGER(IntKi), PARAMETER :: M5N1FBxi = 1576 + INTEGER(IntKi), PARAMETER :: M5N2FBxi = 1577 + INTEGER(IntKi), PARAMETER :: M5N3FBxi = 1578 + INTEGER(IntKi), PARAMETER :: M5N4FBxi = 1579 + INTEGER(IntKi), PARAMETER :: M5N5FBxi = 1580 + INTEGER(IntKi), PARAMETER :: M5N6FBxi = 1581 + INTEGER(IntKi), PARAMETER :: M5N7FBxi = 1582 + INTEGER(IntKi), PARAMETER :: M5N8FBxi = 1583 + INTEGER(IntKi), PARAMETER :: M5N9FBxi = 1584 + INTEGER(IntKi), PARAMETER :: M6N1FBxi = 1585 + INTEGER(IntKi), PARAMETER :: M6N2FBxi = 1586 + INTEGER(IntKi), PARAMETER :: M6N3FBxi = 1587 + INTEGER(IntKi), PARAMETER :: M6N4FBxi = 1588 + INTEGER(IntKi), PARAMETER :: M6N5FBxi = 1589 + INTEGER(IntKi), PARAMETER :: M6N6FBxi = 1590 + INTEGER(IntKi), PARAMETER :: M6N7FBxi = 1591 + INTEGER(IntKi), PARAMETER :: M6N8FBxi = 1592 + INTEGER(IntKi), PARAMETER :: M6N9FBxi = 1593 + INTEGER(IntKi), PARAMETER :: M7N1FBxi = 1594 + INTEGER(IntKi), PARAMETER :: M7N2FBxi = 1595 + INTEGER(IntKi), PARAMETER :: M7N3FBxi = 1596 + INTEGER(IntKi), PARAMETER :: M7N4FBxi = 1597 + INTEGER(IntKi), PARAMETER :: M7N5FBxi = 1598 + INTEGER(IntKi), PARAMETER :: M7N6FBxi = 1599 + INTEGER(IntKi), PARAMETER :: M7N7FBxi = 1600 + INTEGER(IntKi), PARAMETER :: M7N8FBxi = 1601 + INTEGER(IntKi), PARAMETER :: M7N9FBxi = 1602 + INTEGER(IntKi), PARAMETER :: M8N1FBxi = 1603 + INTEGER(IntKi), PARAMETER :: M8N2FBxi = 1604 + INTEGER(IntKi), PARAMETER :: M8N3FBxi = 1605 + INTEGER(IntKi), PARAMETER :: M8N4FBxi = 1606 + INTEGER(IntKi), PARAMETER :: M8N5FBxi = 1607 + INTEGER(IntKi), PARAMETER :: M8N6FBxi = 1608 + INTEGER(IntKi), PARAMETER :: M8N7FBxi = 1609 + INTEGER(IntKi), PARAMETER :: M8N8FBxi = 1610 + INTEGER(IntKi), PARAMETER :: M8N9FBxi = 1611 + INTEGER(IntKi), PARAMETER :: M9N1FBxi = 1612 + INTEGER(IntKi), PARAMETER :: M9N2FBxi = 1613 + INTEGER(IntKi), PARAMETER :: M9N3FBxi = 1614 + INTEGER(IntKi), PARAMETER :: M9N4FBxi = 1615 + INTEGER(IntKi), PARAMETER :: M9N5FBxi = 1616 + INTEGER(IntKi), PARAMETER :: M9N6FBxi = 1617 + INTEGER(IntKi), PARAMETER :: M9N7FBxi = 1618 + INTEGER(IntKi), PARAMETER :: M9N8FBxi = 1619 + INTEGER(IntKi), PARAMETER :: M9N9FBxi = 1620 + INTEGER(IntKi), PARAMETER :: M1N1FByi = 1621 + INTEGER(IntKi), PARAMETER :: M1N2FByi = 1622 + INTEGER(IntKi), PARAMETER :: M1N3FByi = 1623 + INTEGER(IntKi), PARAMETER :: M1N4FByi = 1624 + INTEGER(IntKi), PARAMETER :: M1N5FByi = 1625 + INTEGER(IntKi), PARAMETER :: M1N6FByi = 1626 + INTEGER(IntKi), PARAMETER :: M1N7FByi = 1627 + INTEGER(IntKi), PARAMETER :: M1N8FByi = 1628 + INTEGER(IntKi), PARAMETER :: M1N9FByi = 1629 + INTEGER(IntKi), PARAMETER :: M2N1FByi = 1630 + INTEGER(IntKi), PARAMETER :: M2N2FByi = 1631 + INTEGER(IntKi), PARAMETER :: M2N3FByi = 1632 + INTEGER(IntKi), PARAMETER :: M2N4FByi = 1633 + INTEGER(IntKi), PARAMETER :: M2N5FByi = 1634 + INTEGER(IntKi), PARAMETER :: M2N6FByi = 1635 + INTEGER(IntKi), PARAMETER :: M2N7FByi = 1636 + INTEGER(IntKi), PARAMETER :: M2N8FByi = 1637 + INTEGER(IntKi), PARAMETER :: M2N9FByi = 1638 + INTEGER(IntKi), PARAMETER :: M3N1FByi = 1639 + INTEGER(IntKi), PARAMETER :: M3N2FByi = 1640 + INTEGER(IntKi), PARAMETER :: M3N3FByi = 1641 + INTEGER(IntKi), PARAMETER :: M3N4FByi = 1642 + INTEGER(IntKi), PARAMETER :: M3N5FByi = 1643 + INTEGER(IntKi), PARAMETER :: M3N6FByi = 1644 + INTEGER(IntKi), PARAMETER :: M3N7FByi = 1645 + INTEGER(IntKi), PARAMETER :: M3N8FByi = 1646 + INTEGER(IntKi), PARAMETER :: M3N9FByi = 1647 + INTEGER(IntKi), PARAMETER :: M4N1FByi = 1648 + INTEGER(IntKi), PARAMETER :: M4N2FByi = 1649 + INTEGER(IntKi), PARAMETER :: M4N3FByi = 1650 + INTEGER(IntKi), PARAMETER :: M4N4FByi = 1651 + INTEGER(IntKi), PARAMETER :: M4N5FByi = 1652 + INTEGER(IntKi), PARAMETER :: M4N6FByi = 1653 + INTEGER(IntKi), PARAMETER :: M4N7FByi = 1654 + INTEGER(IntKi), PARAMETER :: M4N8FByi = 1655 + INTEGER(IntKi), PARAMETER :: M4N9FByi = 1656 + INTEGER(IntKi), PARAMETER :: M5N1FByi = 1657 + INTEGER(IntKi), PARAMETER :: M5N2FByi = 1658 + INTEGER(IntKi), PARAMETER :: M5N3FByi = 1659 + INTEGER(IntKi), PARAMETER :: M5N4FByi = 1660 + INTEGER(IntKi), PARAMETER :: M5N5FByi = 1661 + INTEGER(IntKi), PARAMETER :: M5N6FByi = 1662 + INTEGER(IntKi), PARAMETER :: M5N7FByi = 1663 + INTEGER(IntKi), PARAMETER :: M5N8FByi = 1664 + INTEGER(IntKi), PARAMETER :: M5N9FByi = 1665 + INTEGER(IntKi), PARAMETER :: M6N1FByi = 1666 + INTEGER(IntKi), PARAMETER :: M6N2FByi = 1667 + INTEGER(IntKi), PARAMETER :: M6N3FByi = 1668 + INTEGER(IntKi), PARAMETER :: M6N4FByi = 1669 + INTEGER(IntKi), PARAMETER :: M6N5FByi = 1670 + INTEGER(IntKi), PARAMETER :: M6N6FByi = 1671 + INTEGER(IntKi), PARAMETER :: M6N7FByi = 1672 + INTEGER(IntKi), PARAMETER :: M6N8FByi = 1673 + INTEGER(IntKi), PARAMETER :: M6N9FByi = 1674 + INTEGER(IntKi), PARAMETER :: M7N1FByi = 1675 + INTEGER(IntKi), PARAMETER :: M7N2FByi = 1676 + INTEGER(IntKi), PARAMETER :: M7N3FByi = 1677 + INTEGER(IntKi), PARAMETER :: M7N4FByi = 1678 + INTEGER(IntKi), PARAMETER :: M7N5FByi = 1679 + INTEGER(IntKi), PARAMETER :: M7N6FByi = 1680 + INTEGER(IntKi), PARAMETER :: M7N7FByi = 1681 + INTEGER(IntKi), PARAMETER :: M7N8FByi = 1682 + INTEGER(IntKi), PARAMETER :: M7N9FByi = 1683 + INTEGER(IntKi), PARAMETER :: M8N1FByi = 1684 + INTEGER(IntKi), PARAMETER :: M8N2FByi = 1685 + INTEGER(IntKi), PARAMETER :: M8N3FByi = 1686 + INTEGER(IntKi), PARAMETER :: M8N4FByi = 1687 + INTEGER(IntKi), PARAMETER :: M8N5FByi = 1688 + INTEGER(IntKi), PARAMETER :: M8N6FByi = 1689 + INTEGER(IntKi), PARAMETER :: M8N7FByi = 1690 + INTEGER(IntKi), PARAMETER :: M8N8FByi = 1691 + INTEGER(IntKi), PARAMETER :: M8N9FByi = 1692 + INTEGER(IntKi), PARAMETER :: M9N1FByi = 1693 + INTEGER(IntKi), PARAMETER :: M9N2FByi = 1694 + INTEGER(IntKi), PARAMETER :: M9N3FByi = 1695 + INTEGER(IntKi), PARAMETER :: M9N4FByi = 1696 + INTEGER(IntKi), PARAMETER :: M9N5FByi = 1697 + INTEGER(IntKi), PARAMETER :: M9N6FByi = 1698 + INTEGER(IntKi), PARAMETER :: M9N7FByi = 1699 + INTEGER(IntKi), PARAMETER :: M9N8FByi = 1700 + INTEGER(IntKi), PARAMETER :: M9N9FByi = 1701 + INTEGER(IntKi), PARAMETER :: M1N1FBzi = 1702 + INTEGER(IntKi), PARAMETER :: M1N2FBzi = 1703 + INTEGER(IntKi), PARAMETER :: M1N3FBzi = 1704 + INTEGER(IntKi), PARAMETER :: M1N4FBzi = 1705 + INTEGER(IntKi), PARAMETER :: M1N5FBzi = 1706 + INTEGER(IntKi), PARAMETER :: M1N6FBzi = 1707 + INTEGER(IntKi), PARAMETER :: M1N7FBzi = 1708 + INTEGER(IntKi), PARAMETER :: M1N8FBzi = 1709 + INTEGER(IntKi), PARAMETER :: M1N9FBzi = 1710 + INTEGER(IntKi), PARAMETER :: M2N1FBzi = 1711 + INTEGER(IntKi), PARAMETER :: M2N2FBzi = 1712 + INTEGER(IntKi), PARAMETER :: M2N3FBzi = 1713 + INTEGER(IntKi), PARAMETER :: M2N4FBzi = 1714 + INTEGER(IntKi), PARAMETER :: M2N5FBzi = 1715 + INTEGER(IntKi), PARAMETER :: M2N6FBzi = 1716 + INTEGER(IntKi), PARAMETER :: M2N7FBzi = 1717 + INTEGER(IntKi), PARAMETER :: M2N8FBzi = 1718 + INTEGER(IntKi), PARAMETER :: M2N9FBzi = 1719 + INTEGER(IntKi), PARAMETER :: M3N1FBzi = 1720 + INTEGER(IntKi), PARAMETER :: M3N2FBzi = 1721 + INTEGER(IntKi), PARAMETER :: M3N3FBzi = 1722 + INTEGER(IntKi), PARAMETER :: M3N4FBzi = 1723 + INTEGER(IntKi), PARAMETER :: M3N5FBzi = 1724 + INTEGER(IntKi), PARAMETER :: M3N6FBzi = 1725 + INTEGER(IntKi), PARAMETER :: M3N7FBzi = 1726 + INTEGER(IntKi), PARAMETER :: M3N8FBzi = 1727 + INTEGER(IntKi), PARAMETER :: M3N9FBzi = 1728 + INTEGER(IntKi), PARAMETER :: M4N1FBzi = 1729 + INTEGER(IntKi), PARAMETER :: M4N2FBzi = 1730 + INTEGER(IntKi), PARAMETER :: M4N3FBzi = 1731 + INTEGER(IntKi), PARAMETER :: M4N4FBzi = 1732 + INTEGER(IntKi), PARAMETER :: M4N5FBzi = 1733 + INTEGER(IntKi), PARAMETER :: M4N6FBzi = 1734 + INTEGER(IntKi), PARAMETER :: M4N7FBzi = 1735 + INTEGER(IntKi), PARAMETER :: M4N8FBzi = 1736 + INTEGER(IntKi), PARAMETER :: M4N9FBzi = 1737 + INTEGER(IntKi), PARAMETER :: M5N1FBzi = 1738 + INTEGER(IntKi), PARAMETER :: M5N2FBzi = 1739 + INTEGER(IntKi), PARAMETER :: M5N3FBzi = 1740 + INTEGER(IntKi), PARAMETER :: M5N4FBzi = 1741 + INTEGER(IntKi), PARAMETER :: M5N5FBzi = 1742 + INTEGER(IntKi), PARAMETER :: M5N6FBzi = 1743 + INTEGER(IntKi), PARAMETER :: M5N7FBzi = 1744 + INTEGER(IntKi), PARAMETER :: M5N8FBzi = 1745 + INTEGER(IntKi), PARAMETER :: M5N9FBzi = 1746 + INTEGER(IntKi), PARAMETER :: M6N1FBzi = 1747 + INTEGER(IntKi), PARAMETER :: M6N2FBzi = 1748 + INTEGER(IntKi), PARAMETER :: M6N3FBzi = 1749 + INTEGER(IntKi), PARAMETER :: M6N4FBzi = 1750 + INTEGER(IntKi), PARAMETER :: M6N5FBzi = 1751 + INTEGER(IntKi), PARAMETER :: M6N6FBzi = 1752 + INTEGER(IntKi), PARAMETER :: M6N7FBzi = 1753 + INTEGER(IntKi), PARAMETER :: M6N8FBzi = 1754 + INTEGER(IntKi), PARAMETER :: M6N9FBzi = 1755 + INTEGER(IntKi), PARAMETER :: M7N1FBzi = 1756 + INTEGER(IntKi), PARAMETER :: M7N2FBzi = 1757 + INTEGER(IntKi), PARAMETER :: M7N3FBzi = 1758 + INTEGER(IntKi), PARAMETER :: M7N4FBzi = 1759 + INTEGER(IntKi), PARAMETER :: M7N5FBzi = 1760 + INTEGER(IntKi), PARAMETER :: M7N6FBzi = 1761 + INTEGER(IntKi), PARAMETER :: M7N7FBzi = 1762 + INTEGER(IntKi), PARAMETER :: M7N8FBzi = 1763 + INTEGER(IntKi), PARAMETER :: M7N9FBzi = 1764 + INTEGER(IntKi), PARAMETER :: M8N1FBzi = 1765 + INTEGER(IntKi), PARAMETER :: M8N2FBzi = 1766 + INTEGER(IntKi), PARAMETER :: M8N3FBzi = 1767 + INTEGER(IntKi), PARAMETER :: M8N4FBzi = 1768 + INTEGER(IntKi), PARAMETER :: M8N5FBzi = 1769 + INTEGER(IntKi), PARAMETER :: M8N6FBzi = 1770 + INTEGER(IntKi), PARAMETER :: M8N7FBzi = 1771 + INTEGER(IntKi), PARAMETER :: M8N8FBzi = 1772 + INTEGER(IntKi), PARAMETER :: M8N9FBzi = 1773 + INTEGER(IntKi), PARAMETER :: M9N1FBzi = 1774 + INTEGER(IntKi), PARAMETER :: M9N2FBzi = 1775 + INTEGER(IntKi), PARAMETER :: M9N3FBzi = 1776 + INTEGER(IntKi), PARAMETER :: M9N4FBzi = 1777 + INTEGER(IntKi), PARAMETER :: M9N5FBzi = 1778 + INTEGER(IntKi), PARAMETER :: M9N6FBzi = 1779 + INTEGER(IntKi), PARAMETER :: M9N7FBzi = 1780 + INTEGER(IntKi), PARAMETER :: M9N8FBzi = 1781 + INTEGER(IntKi), PARAMETER :: M9N9FBzi = 1782 + INTEGER(IntKi), PARAMETER :: M1N1MBxi = 1783 + INTEGER(IntKi), PARAMETER :: M1N2MBxi = 1784 + INTEGER(IntKi), PARAMETER :: M1N3MBxi = 1785 + INTEGER(IntKi), PARAMETER :: M1N4MBxi = 1786 + INTEGER(IntKi), PARAMETER :: M1N5MBxi = 1787 + INTEGER(IntKi), PARAMETER :: M1N6MBxi = 1788 + INTEGER(IntKi), PARAMETER :: M1N7MBxi = 1789 + INTEGER(IntKi), PARAMETER :: M1N8MBxi = 1790 + INTEGER(IntKi), PARAMETER :: M1N9MBxi = 1791 + INTEGER(IntKi), PARAMETER :: M2N1MBxi = 1792 + INTEGER(IntKi), PARAMETER :: M2N2MBxi = 1793 + INTEGER(IntKi), PARAMETER :: M2N3MBxi = 1794 + INTEGER(IntKi), PARAMETER :: M2N4MBxi = 1795 + INTEGER(IntKi), PARAMETER :: M2N5MBxi = 1796 + INTEGER(IntKi), PARAMETER :: M2N6MBxi = 1797 + INTEGER(IntKi), PARAMETER :: M2N7MBxi = 1798 + INTEGER(IntKi), PARAMETER :: M2N8MBxi = 1799 + INTEGER(IntKi), PARAMETER :: M2N9MBxi = 1800 + INTEGER(IntKi), PARAMETER :: M3N1MBxi = 1801 + INTEGER(IntKi), PARAMETER :: M3N2MBxi = 1802 + INTEGER(IntKi), PARAMETER :: M3N3MBxi = 1803 + INTEGER(IntKi), PARAMETER :: M3N4MBxi = 1804 + INTEGER(IntKi), PARAMETER :: M3N5MBxi = 1805 + INTEGER(IntKi), PARAMETER :: M3N6MBxi = 1806 + INTEGER(IntKi), PARAMETER :: M3N7MBxi = 1807 + INTEGER(IntKi), PARAMETER :: M3N8MBxi = 1808 + INTEGER(IntKi), PARAMETER :: M3N9MBxi = 1809 + INTEGER(IntKi), PARAMETER :: M4N1MBxi = 1810 + INTEGER(IntKi), PARAMETER :: M4N2MBxi = 1811 + INTEGER(IntKi), PARAMETER :: M4N3MBxi = 1812 + INTEGER(IntKi), PARAMETER :: M4N4MBxi = 1813 + INTEGER(IntKi), PARAMETER :: M4N5MBxi = 1814 + INTEGER(IntKi), PARAMETER :: M4N6MBxi = 1815 + INTEGER(IntKi), PARAMETER :: M4N7MBxi = 1816 + INTEGER(IntKi), PARAMETER :: M4N8MBxi = 1817 + INTEGER(IntKi), PARAMETER :: M4N9MBxi = 1818 + INTEGER(IntKi), PARAMETER :: M5N1MBxi = 1819 + INTEGER(IntKi), PARAMETER :: M5N2MBxi = 1820 + INTEGER(IntKi), PARAMETER :: M5N3MBxi = 1821 + INTEGER(IntKi), PARAMETER :: M5N4MBxi = 1822 + INTEGER(IntKi), PARAMETER :: M5N5MBxi = 1823 + INTEGER(IntKi), PARAMETER :: M5N6MBxi = 1824 + INTEGER(IntKi), PARAMETER :: M5N7MBxi = 1825 + INTEGER(IntKi), PARAMETER :: M5N8MBxi = 1826 + INTEGER(IntKi), PARAMETER :: M5N9MBxi = 1827 + INTEGER(IntKi), PARAMETER :: M6N1MBxi = 1828 + INTEGER(IntKi), PARAMETER :: M6N2MBxi = 1829 + INTEGER(IntKi), PARAMETER :: M6N3MBxi = 1830 + INTEGER(IntKi), PARAMETER :: M6N4MBxi = 1831 + INTEGER(IntKi), PARAMETER :: M6N5MBxi = 1832 + INTEGER(IntKi), PARAMETER :: M6N6MBxi = 1833 + INTEGER(IntKi), PARAMETER :: M6N7MBxi = 1834 + INTEGER(IntKi), PARAMETER :: M6N8MBxi = 1835 + INTEGER(IntKi), PARAMETER :: M6N9MBxi = 1836 + INTEGER(IntKi), PARAMETER :: M7N1MBxi = 1837 + INTEGER(IntKi), PARAMETER :: M7N2MBxi = 1838 + INTEGER(IntKi), PARAMETER :: M7N3MBxi = 1839 + INTEGER(IntKi), PARAMETER :: M7N4MBxi = 1840 + INTEGER(IntKi), PARAMETER :: M7N5MBxi = 1841 + INTEGER(IntKi), PARAMETER :: M7N6MBxi = 1842 + INTEGER(IntKi), PARAMETER :: M7N7MBxi = 1843 + INTEGER(IntKi), PARAMETER :: M7N8MBxi = 1844 + INTEGER(IntKi), PARAMETER :: M7N9MBxi = 1845 + INTEGER(IntKi), PARAMETER :: M8N1MBxi = 1846 + INTEGER(IntKi), PARAMETER :: M8N2MBxi = 1847 + INTEGER(IntKi), PARAMETER :: M8N3MBxi = 1848 + INTEGER(IntKi), PARAMETER :: M8N4MBxi = 1849 + INTEGER(IntKi), PARAMETER :: M8N5MBxi = 1850 + INTEGER(IntKi), PARAMETER :: M8N6MBxi = 1851 + INTEGER(IntKi), PARAMETER :: M8N7MBxi = 1852 + INTEGER(IntKi), PARAMETER :: M8N8MBxi = 1853 + INTEGER(IntKi), PARAMETER :: M8N9MBxi = 1854 + INTEGER(IntKi), PARAMETER :: M9N1MBxi = 1855 + INTEGER(IntKi), PARAMETER :: M9N2MBxi = 1856 + INTEGER(IntKi), PARAMETER :: M9N3MBxi = 1857 + INTEGER(IntKi), PARAMETER :: M9N4MBxi = 1858 + INTEGER(IntKi), PARAMETER :: M9N5MBxi = 1859 + INTEGER(IntKi), PARAMETER :: M9N6MBxi = 1860 + INTEGER(IntKi), PARAMETER :: M9N7MBxi = 1861 + INTEGER(IntKi), PARAMETER :: M9N8MBxi = 1862 + INTEGER(IntKi), PARAMETER :: M9N9MBxi = 1863 + INTEGER(IntKi), PARAMETER :: M1N1MByi = 1864 + INTEGER(IntKi), PARAMETER :: M1N2MByi = 1865 + INTEGER(IntKi), PARAMETER :: M1N3MByi = 1866 + INTEGER(IntKi), PARAMETER :: M1N4MByi = 1867 + INTEGER(IntKi), PARAMETER :: M1N5MByi = 1868 + INTEGER(IntKi), PARAMETER :: M1N6MByi = 1869 + INTEGER(IntKi), PARAMETER :: M1N7MByi = 1870 + INTEGER(IntKi), PARAMETER :: M1N8MByi = 1871 + INTEGER(IntKi), PARAMETER :: M1N9MByi = 1872 + INTEGER(IntKi), PARAMETER :: M2N1MByi = 1873 + INTEGER(IntKi), PARAMETER :: M2N2MByi = 1874 + INTEGER(IntKi), PARAMETER :: M2N3MByi = 1875 + INTEGER(IntKi), PARAMETER :: M2N4MByi = 1876 + INTEGER(IntKi), PARAMETER :: M2N5MByi = 1877 + INTEGER(IntKi), PARAMETER :: M2N6MByi = 1878 + INTEGER(IntKi), PARAMETER :: M2N7MByi = 1879 + INTEGER(IntKi), PARAMETER :: M2N8MByi = 1880 + INTEGER(IntKi), PARAMETER :: M2N9MByi = 1881 + INTEGER(IntKi), PARAMETER :: M3N1MByi = 1882 + INTEGER(IntKi), PARAMETER :: M3N2MByi = 1883 + INTEGER(IntKi), PARAMETER :: M3N3MByi = 1884 + INTEGER(IntKi), PARAMETER :: M3N4MByi = 1885 + INTEGER(IntKi), PARAMETER :: M3N5MByi = 1886 + INTEGER(IntKi), PARAMETER :: M3N6MByi = 1887 + INTEGER(IntKi), PARAMETER :: M3N7MByi = 1888 + INTEGER(IntKi), PARAMETER :: M3N8MByi = 1889 + INTEGER(IntKi), PARAMETER :: M3N9MByi = 1890 + INTEGER(IntKi), PARAMETER :: M4N1MByi = 1891 + INTEGER(IntKi), PARAMETER :: M4N2MByi = 1892 + INTEGER(IntKi), PARAMETER :: M4N3MByi = 1893 + INTEGER(IntKi), PARAMETER :: M4N4MByi = 1894 + INTEGER(IntKi), PARAMETER :: M4N5MByi = 1895 + INTEGER(IntKi), PARAMETER :: M4N6MByi = 1896 + INTEGER(IntKi), PARAMETER :: M4N7MByi = 1897 + INTEGER(IntKi), PARAMETER :: M4N8MByi = 1898 + INTEGER(IntKi), PARAMETER :: M4N9MByi = 1899 + INTEGER(IntKi), PARAMETER :: M5N1MByi = 1900 + INTEGER(IntKi), PARAMETER :: M5N2MByi = 1901 + INTEGER(IntKi), PARAMETER :: M5N3MByi = 1902 + INTEGER(IntKi), PARAMETER :: M5N4MByi = 1903 + INTEGER(IntKi), PARAMETER :: M5N5MByi = 1904 + INTEGER(IntKi), PARAMETER :: M5N6MByi = 1905 + INTEGER(IntKi), PARAMETER :: M5N7MByi = 1906 + INTEGER(IntKi), PARAMETER :: M5N8MByi = 1907 + INTEGER(IntKi), PARAMETER :: M5N9MByi = 1908 + INTEGER(IntKi), PARAMETER :: M6N1MByi = 1909 + INTEGER(IntKi), PARAMETER :: M6N2MByi = 1910 + INTEGER(IntKi), PARAMETER :: M6N3MByi = 1911 + INTEGER(IntKi), PARAMETER :: M6N4MByi = 1912 + INTEGER(IntKi), PARAMETER :: M6N5MByi = 1913 + INTEGER(IntKi), PARAMETER :: M6N6MByi = 1914 + INTEGER(IntKi), PARAMETER :: M6N7MByi = 1915 + INTEGER(IntKi), PARAMETER :: M6N8MByi = 1916 + INTEGER(IntKi), PARAMETER :: M6N9MByi = 1917 + INTEGER(IntKi), PARAMETER :: M7N1MByi = 1918 + INTEGER(IntKi), PARAMETER :: M7N2MByi = 1919 + INTEGER(IntKi), PARAMETER :: M7N3MByi = 1920 + INTEGER(IntKi), PARAMETER :: M7N4MByi = 1921 + INTEGER(IntKi), PARAMETER :: M7N5MByi = 1922 + INTEGER(IntKi), PARAMETER :: M7N6MByi = 1923 + INTEGER(IntKi), PARAMETER :: M7N7MByi = 1924 + INTEGER(IntKi), PARAMETER :: M7N8MByi = 1925 + INTEGER(IntKi), PARAMETER :: M7N9MByi = 1926 + INTEGER(IntKi), PARAMETER :: M8N1MByi = 1927 + INTEGER(IntKi), PARAMETER :: M8N2MByi = 1928 + INTEGER(IntKi), PARAMETER :: M8N3MByi = 1929 + INTEGER(IntKi), PARAMETER :: M8N4MByi = 1930 + INTEGER(IntKi), PARAMETER :: M8N5MByi = 1931 + INTEGER(IntKi), PARAMETER :: M8N6MByi = 1932 + INTEGER(IntKi), PARAMETER :: M8N7MByi = 1933 + INTEGER(IntKi), PARAMETER :: M8N8MByi = 1934 + INTEGER(IntKi), PARAMETER :: M8N9MByi = 1935 + INTEGER(IntKi), PARAMETER :: M9N1MByi = 1936 + INTEGER(IntKi), PARAMETER :: M9N2MByi = 1937 + INTEGER(IntKi), PARAMETER :: M9N3MByi = 1938 + INTEGER(IntKi), PARAMETER :: M9N4MByi = 1939 + INTEGER(IntKi), PARAMETER :: M9N5MByi = 1940 + INTEGER(IntKi), PARAMETER :: M9N6MByi = 1941 + INTEGER(IntKi), PARAMETER :: M9N7MByi = 1942 + INTEGER(IntKi), PARAMETER :: M9N8MByi = 1943 + INTEGER(IntKi), PARAMETER :: M9N9MByi = 1944 + INTEGER(IntKi), PARAMETER :: M1N1MBzi = 1945 + INTEGER(IntKi), PARAMETER :: M1N2MBzi = 1946 + INTEGER(IntKi), PARAMETER :: M1N3MBzi = 1947 + INTEGER(IntKi), PARAMETER :: M1N4MBzi = 1948 + INTEGER(IntKi), PARAMETER :: M1N5MBzi = 1949 + INTEGER(IntKi), PARAMETER :: M1N6MBzi = 1950 + INTEGER(IntKi), PARAMETER :: M1N7MBzi = 1951 + INTEGER(IntKi), PARAMETER :: M1N8MBzi = 1952 + INTEGER(IntKi), PARAMETER :: M1N9MBzi = 1953 + INTEGER(IntKi), PARAMETER :: M2N1MBzi = 1954 + INTEGER(IntKi), PARAMETER :: M2N2MBzi = 1955 + INTEGER(IntKi), PARAMETER :: M2N3MBzi = 1956 + INTEGER(IntKi), PARAMETER :: M2N4MBzi = 1957 + INTEGER(IntKi), PARAMETER :: M2N5MBzi = 1958 + INTEGER(IntKi), PARAMETER :: M2N6MBzi = 1959 + INTEGER(IntKi), PARAMETER :: M2N7MBzi = 1960 + INTEGER(IntKi), PARAMETER :: M2N8MBzi = 1961 + INTEGER(IntKi), PARAMETER :: M2N9MBzi = 1962 + INTEGER(IntKi), PARAMETER :: M3N1MBzi = 1963 + INTEGER(IntKi), PARAMETER :: M3N2MBzi = 1964 + INTEGER(IntKi), PARAMETER :: M3N3MBzi = 1965 + INTEGER(IntKi), PARAMETER :: M3N4MBzi = 1966 + INTEGER(IntKi), PARAMETER :: M3N5MBzi = 1967 + INTEGER(IntKi), PARAMETER :: M3N6MBzi = 1968 + INTEGER(IntKi), PARAMETER :: M3N7MBzi = 1969 + INTEGER(IntKi), PARAMETER :: M3N8MBzi = 1970 + INTEGER(IntKi), PARAMETER :: M3N9MBzi = 1971 + INTEGER(IntKi), PARAMETER :: M4N1MBzi = 1972 + INTEGER(IntKi), PARAMETER :: M4N2MBzi = 1973 + INTEGER(IntKi), PARAMETER :: M4N3MBzi = 1974 + INTEGER(IntKi), PARAMETER :: M4N4MBzi = 1975 + INTEGER(IntKi), PARAMETER :: M4N5MBzi = 1976 + INTEGER(IntKi), PARAMETER :: M4N6MBzi = 1977 + INTEGER(IntKi), PARAMETER :: M4N7MBzi = 1978 + INTEGER(IntKi), PARAMETER :: M4N8MBzi = 1979 + INTEGER(IntKi), PARAMETER :: M4N9MBzi = 1980 + INTEGER(IntKi), PARAMETER :: M5N1MBzi = 1981 + INTEGER(IntKi), PARAMETER :: M5N2MBzi = 1982 + INTEGER(IntKi), PARAMETER :: M5N3MBzi = 1983 + INTEGER(IntKi), PARAMETER :: M5N4MBzi = 1984 + INTEGER(IntKi), PARAMETER :: M5N5MBzi = 1985 + INTEGER(IntKi), PARAMETER :: M5N6MBzi = 1986 + INTEGER(IntKi), PARAMETER :: M5N7MBzi = 1987 + INTEGER(IntKi), PARAMETER :: M5N8MBzi = 1988 + INTEGER(IntKi), PARAMETER :: M5N9MBzi = 1989 + INTEGER(IntKi), PARAMETER :: M6N1MBzi = 1990 + INTEGER(IntKi), PARAMETER :: M6N2MBzi = 1991 + INTEGER(IntKi), PARAMETER :: M6N3MBzi = 1992 + INTEGER(IntKi), PARAMETER :: M6N4MBzi = 1993 + INTEGER(IntKi), PARAMETER :: M6N5MBzi = 1994 + INTEGER(IntKi), PARAMETER :: M6N6MBzi = 1995 + INTEGER(IntKi), PARAMETER :: M6N7MBzi = 1996 + INTEGER(IntKi), PARAMETER :: M6N8MBzi = 1997 + INTEGER(IntKi), PARAMETER :: M6N9MBzi = 1998 + INTEGER(IntKi), PARAMETER :: M7N1MBzi = 1999 + INTEGER(IntKi), PARAMETER :: M7N2MBzi = 2000 + INTEGER(IntKi), PARAMETER :: M7N3MBzi = 2001 + INTEGER(IntKi), PARAMETER :: M7N4MBzi = 2002 + INTEGER(IntKi), PARAMETER :: M7N5MBzi = 2003 + INTEGER(IntKi), PARAMETER :: M7N6MBzi = 2004 + INTEGER(IntKi), PARAMETER :: M7N7MBzi = 2005 + INTEGER(IntKi), PARAMETER :: M7N8MBzi = 2006 + INTEGER(IntKi), PARAMETER :: M7N9MBzi = 2007 + INTEGER(IntKi), PARAMETER :: M8N1MBzi = 2008 + INTEGER(IntKi), PARAMETER :: M8N2MBzi = 2009 + INTEGER(IntKi), PARAMETER :: M8N3MBzi = 2010 + INTEGER(IntKi), PARAMETER :: M8N4MBzi = 2011 + INTEGER(IntKi), PARAMETER :: M8N5MBzi = 2012 + INTEGER(IntKi), PARAMETER :: M8N6MBzi = 2013 + INTEGER(IntKi), PARAMETER :: M8N7MBzi = 2014 + INTEGER(IntKi), PARAMETER :: M8N8MBzi = 2015 + INTEGER(IntKi), PARAMETER :: M8N9MBzi = 2016 + INTEGER(IntKi), PARAMETER :: M9N1MBzi = 2017 + INTEGER(IntKi), PARAMETER :: M9N2MBzi = 2018 + INTEGER(IntKi), PARAMETER :: M9N3MBzi = 2019 + INTEGER(IntKi), PARAMETER :: M9N4MBzi = 2020 + INTEGER(IntKi), PARAMETER :: M9N5MBzi = 2021 + INTEGER(IntKi), PARAMETER :: M9N6MBzi = 2022 + INTEGER(IntKi), PARAMETER :: M9N7MBzi = 2023 + INTEGER(IntKi), PARAMETER :: M9N8MBzi = 2024 + INTEGER(IntKi), PARAMETER :: M9N9MBzi = 2025 + INTEGER(IntKi), PARAMETER :: M1N1FBFxi = 2026 + INTEGER(IntKi), PARAMETER :: M1N2FBFxi = 2027 + INTEGER(IntKi), PARAMETER :: M1N3FBFxi = 2028 + INTEGER(IntKi), PARAMETER :: M1N4FBFxi = 2029 + INTEGER(IntKi), PARAMETER :: M1N5FBFxi = 2030 + INTEGER(IntKi), PARAMETER :: M1N6FBFxi = 2031 + INTEGER(IntKi), PARAMETER :: M1N7FBFxi = 2032 + INTEGER(IntKi), PARAMETER :: M1N8FBFxi = 2033 + INTEGER(IntKi), PARAMETER :: M1N9FBFxi = 2034 + INTEGER(IntKi), PARAMETER :: M2N1FBFxi = 2035 + INTEGER(IntKi), PARAMETER :: M2N2FBFxi = 2036 + INTEGER(IntKi), PARAMETER :: M2N3FBFxi = 2037 + INTEGER(IntKi), PARAMETER :: M2N4FBFxi = 2038 + INTEGER(IntKi), PARAMETER :: M2N5FBFxi = 2039 + INTEGER(IntKi), PARAMETER :: M2N6FBFxi = 2040 + INTEGER(IntKi), PARAMETER :: M2N7FBFxi = 2041 + INTEGER(IntKi), PARAMETER :: M2N8FBFxi = 2042 + INTEGER(IntKi), PARAMETER :: M2N9FBFxi = 2043 + INTEGER(IntKi), PARAMETER :: M3N1FBFxi = 2044 + INTEGER(IntKi), PARAMETER :: M3N2FBFxi = 2045 + INTEGER(IntKi), PARAMETER :: M3N3FBFxi = 2046 + INTEGER(IntKi), PARAMETER :: M3N4FBFxi = 2047 + INTEGER(IntKi), PARAMETER :: M3N5FBFxi = 2048 + INTEGER(IntKi), PARAMETER :: M3N6FBFxi = 2049 + INTEGER(IntKi), PARAMETER :: M3N7FBFxi = 2050 + INTEGER(IntKi), PARAMETER :: M3N8FBFxi = 2051 + INTEGER(IntKi), PARAMETER :: M3N9FBFxi = 2052 + INTEGER(IntKi), PARAMETER :: M4N1FBFxi = 2053 + INTEGER(IntKi), PARAMETER :: M4N2FBFxi = 2054 + INTEGER(IntKi), PARAMETER :: M4N3FBFxi = 2055 + INTEGER(IntKi), PARAMETER :: M4N4FBFxi = 2056 + INTEGER(IntKi), PARAMETER :: M4N5FBFxi = 2057 + INTEGER(IntKi), PARAMETER :: M4N6FBFxi = 2058 + INTEGER(IntKi), PARAMETER :: M4N7FBFxi = 2059 + INTEGER(IntKi), PARAMETER :: M4N8FBFxi = 2060 + INTEGER(IntKi), PARAMETER :: M4N9FBFxi = 2061 + INTEGER(IntKi), PARAMETER :: M5N1FBFxi = 2062 + INTEGER(IntKi), PARAMETER :: M5N2FBFxi = 2063 + INTEGER(IntKi), PARAMETER :: M5N3FBFxi = 2064 + INTEGER(IntKi), PARAMETER :: M5N4FBFxi = 2065 + INTEGER(IntKi), PARAMETER :: M5N5FBFxi = 2066 + INTEGER(IntKi), PARAMETER :: M5N6FBFxi = 2067 + INTEGER(IntKi), PARAMETER :: M5N7FBFxi = 2068 + INTEGER(IntKi), PARAMETER :: M5N8FBFxi = 2069 + INTEGER(IntKi), PARAMETER :: M5N9FBFxi = 2070 + INTEGER(IntKi), PARAMETER :: M6N1FBFxi = 2071 + INTEGER(IntKi), PARAMETER :: M6N2FBFxi = 2072 + INTEGER(IntKi), PARAMETER :: M6N3FBFxi = 2073 + INTEGER(IntKi), PARAMETER :: M6N4FBFxi = 2074 + INTEGER(IntKi), PARAMETER :: M6N5FBFxi = 2075 + INTEGER(IntKi), PARAMETER :: M6N6FBFxi = 2076 + INTEGER(IntKi), PARAMETER :: M6N7FBFxi = 2077 + INTEGER(IntKi), PARAMETER :: M6N8FBFxi = 2078 + INTEGER(IntKi), PARAMETER :: M6N9FBFxi = 2079 + INTEGER(IntKi), PARAMETER :: M7N1FBFxi = 2080 + INTEGER(IntKi), PARAMETER :: M7N2FBFxi = 2081 + INTEGER(IntKi), PARAMETER :: M7N3FBFxi = 2082 + INTEGER(IntKi), PARAMETER :: M7N4FBFxi = 2083 + INTEGER(IntKi), PARAMETER :: M7N5FBFxi = 2084 + INTEGER(IntKi), PARAMETER :: M7N6FBFxi = 2085 + INTEGER(IntKi), PARAMETER :: M7N7FBFxi = 2086 + INTEGER(IntKi), PARAMETER :: M7N8FBFxi = 2087 + INTEGER(IntKi), PARAMETER :: M7N9FBFxi = 2088 + INTEGER(IntKi), PARAMETER :: M8N1FBFxi = 2089 + INTEGER(IntKi), PARAMETER :: M8N2FBFxi = 2090 + INTEGER(IntKi), PARAMETER :: M8N3FBFxi = 2091 + INTEGER(IntKi), PARAMETER :: M8N4FBFxi = 2092 + INTEGER(IntKi), PARAMETER :: M8N5FBFxi = 2093 + INTEGER(IntKi), PARAMETER :: M8N6FBFxi = 2094 + INTEGER(IntKi), PARAMETER :: M8N7FBFxi = 2095 + INTEGER(IntKi), PARAMETER :: M8N8FBFxi = 2096 + INTEGER(IntKi), PARAMETER :: M8N9FBFxi = 2097 + INTEGER(IntKi), PARAMETER :: M9N1FBFxi = 2098 + INTEGER(IntKi), PARAMETER :: M9N2FBFxi = 2099 + INTEGER(IntKi), PARAMETER :: M9N3FBFxi = 2100 + INTEGER(IntKi), PARAMETER :: M9N4FBFxi = 2101 + INTEGER(IntKi), PARAMETER :: M9N5FBFxi = 2102 + INTEGER(IntKi), PARAMETER :: M9N6FBFxi = 2103 + INTEGER(IntKi), PARAMETER :: M9N7FBFxi = 2104 + INTEGER(IntKi), PARAMETER :: M9N8FBFxi = 2105 + INTEGER(IntKi), PARAMETER :: M9N9FBFxi = 2106 + INTEGER(IntKi), PARAMETER :: M1N1FBFyi = 2107 + INTEGER(IntKi), PARAMETER :: M1N2FBFyi = 2108 + INTEGER(IntKi), PARAMETER :: M1N3FBFyi = 2109 + INTEGER(IntKi), PARAMETER :: M1N4FBFyi = 2110 + INTEGER(IntKi), PARAMETER :: M1N5FBFyi = 2111 + INTEGER(IntKi), PARAMETER :: M1N6FBFyi = 2112 + INTEGER(IntKi), PARAMETER :: M1N7FBFyi = 2113 + INTEGER(IntKi), PARAMETER :: M1N8FBFyi = 2114 + INTEGER(IntKi), PARAMETER :: M1N9FBFyi = 2115 + INTEGER(IntKi), PARAMETER :: M2N1FBFyi = 2116 + INTEGER(IntKi), PARAMETER :: M2N2FBFyi = 2117 + INTEGER(IntKi), PARAMETER :: M2N3FBFyi = 2118 + INTEGER(IntKi), PARAMETER :: M2N4FBFyi = 2119 + INTEGER(IntKi), PARAMETER :: M2N5FBFyi = 2120 + INTEGER(IntKi), PARAMETER :: M2N6FBFyi = 2121 + INTEGER(IntKi), PARAMETER :: M2N7FBFyi = 2122 + INTEGER(IntKi), PARAMETER :: M2N8FBFyi = 2123 + INTEGER(IntKi), PARAMETER :: M2N9FBFyi = 2124 + INTEGER(IntKi), PARAMETER :: M3N1FBFyi = 2125 + INTEGER(IntKi), PARAMETER :: M3N2FBFyi = 2126 + INTEGER(IntKi), PARAMETER :: M3N3FBFyi = 2127 + INTEGER(IntKi), PARAMETER :: M3N4FBFyi = 2128 + INTEGER(IntKi), PARAMETER :: M3N5FBFyi = 2129 + INTEGER(IntKi), PARAMETER :: M3N6FBFyi = 2130 + INTEGER(IntKi), PARAMETER :: M3N7FBFyi = 2131 + INTEGER(IntKi), PARAMETER :: M3N8FBFyi = 2132 + INTEGER(IntKi), PARAMETER :: M3N9FBFyi = 2133 + INTEGER(IntKi), PARAMETER :: M4N1FBFyi = 2134 + INTEGER(IntKi), PARAMETER :: M4N2FBFyi = 2135 + INTEGER(IntKi), PARAMETER :: M4N3FBFyi = 2136 + INTEGER(IntKi), PARAMETER :: M4N4FBFyi = 2137 + INTEGER(IntKi), PARAMETER :: M4N5FBFyi = 2138 + INTEGER(IntKi), PARAMETER :: M4N6FBFyi = 2139 + INTEGER(IntKi), PARAMETER :: M4N7FBFyi = 2140 + INTEGER(IntKi), PARAMETER :: M4N8FBFyi = 2141 + INTEGER(IntKi), PARAMETER :: M4N9FBFyi = 2142 + INTEGER(IntKi), PARAMETER :: M5N1FBFyi = 2143 + INTEGER(IntKi), PARAMETER :: M5N2FBFyi = 2144 + INTEGER(IntKi), PARAMETER :: M5N3FBFyi = 2145 + INTEGER(IntKi), PARAMETER :: M5N4FBFyi = 2146 + INTEGER(IntKi), PARAMETER :: M5N5FBFyi = 2147 + INTEGER(IntKi), PARAMETER :: M5N6FBFyi = 2148 + INTEGER(IntKi), PARAMETER :: M5N7FBFyi = 2149 + INTEGER(IntKi), PARAMETER :: M5N8FBFyi = 2150 + INTEGER(IntKi), PARAMETER :: M5N9FBFyi = 2151 + INTEGER(IntKi), PARAMETER :: M6N1FBFyi = 2152 + INTEGER(IntKi), PARAMETER :: M6N2FBFyi = 2153 + INTEGER(IntKi), PARAMETER :: M6N3FBFyi = 2154 + INTEGER(IntKi), PARAMETER :: M6N4FBFyi = 2155 + INTEGER(IntKi), PARAMETER :: M6N5FBFyi = 2156 + INTEGER(IntKi), PARAMETER :: M6N6FBFyi = 2157 + INTEGER(IntKi), PARAMETER :: M6N7FBFyi = 2158 + INTEGER(IntKi), PARAMETER :: M6N8FBFyi = 2159 + INTEGER(IntKi), PARAMETER :: M6N9FBFyi = 2160 + INTEGER(IntKi), PARAMETER :: M7N1FBFyi = 2161 + INTEGER(IntKi), PARAMETER :: M7N2FBFyi = 2162 + INTEGER(IntKi), PARAMETER :: M7N3FBFyi = 2163 + INTEGER(IntKi), PARAMETER :: M7N4FBFyi = 2164 + INTEGER(IntKi), PARAMETER :: M7N5FBFyi = 2165 + INTEGER(IntKi), PARAMETER :: M7N6FBFyi = 2166 + INTEGER(IntKi), PARAMETER :: M7N7FBFyi = 2167 + INTEGER(IntKi), PARAMETER :: M7N8FBFyi = 2168 + INTEGER(IntKi), PARAMETER :: M7N9FBFyi = 2169 + INTEGER(IntKi), PARAMETER :: M8N1FBFyi = 2170 + INTEGER(IntKi), PARAMETER :: M8N2FBFyi = 2171 + INTEGER(IntKi), PARAMETER :: M8N3FBFyi = 2172 + INTEGER(IntKi), PARAMETER :: M8N4FBFyi = 2173 + INTEGER(IntKi), PARAMETER :: M8N5FBFyi = 2174 + INTEGER(IntKi), PARAMETER :: M8N6FBFyi = 2175 + INTEGER(IntKi), PARAMETER :: M8N7FBFyi = 2176 + INTEGER(IntKi), PARAMETER :: M8N8FBFyi = 2177 + INTEGER(IntKi), PARAMETER :: M8N9FBFyi = 2178 + INTEGER(IntKi), PARAMETER :: M9N1FBFyi = 2179 + INTEGER(IntKi), PARAMETER :: M9N2FBFyi = 2180 + INTEGER(IntKi), PARAMETER :: M9N3FBFyi = 2181 + INTEGER(IntKi), PARAMETER :: M9N4FBFyi = 2182 + INTEGER(IntKi), PARAMETER :: M9N5FBFyi = 2183 + INTEGER(IntKi), PARAMETER :: M9N6FBFyi = 2184 + INTEGER(IntKi), PARAMETER :: M9N7FBFyi = 2185 + INTEGER(IntKi), PARAMETER :: M9N8FBFyi = 2186 + INTEGER(IntKi), PARAMETER :: M9N9FBFyi = 2187 + INTEGER(IntKi), PARAMETER :: M1N1FBFzi = 2188 + INTEGER(IntKi), PARAMETER :: M1N2FBFzi = 2189 + INTEGER(IntKi), PARAMETER :: M1N3FBFzi = 2190 + INTEGER(IntKi), PARAMETER :: M1N4FBFzi = 2191 + INTEGER(IntKi), PARAMETER :: M1N5FBFzi = 2192 + INTEGER(IntKi), PARAMETER :: M1N6FBFzi = 2193 + INTEGER(IntKi), PARAMETER :: M1N7FBFzi = 2194 + INTEGER(IntKi), PARAMETER :: M1N8FBFzi = 2195 + INTEGER(IntKi), PARAMETER :: M1N9FBFzi = 2196 + INTEGER(IntKi), PARAMETER :: M2N1FBFzi = 2197 + INTEGER(IntKi), PARAMETER :: M2N2FBFzi = 2198 + INTEGER(IntKi), PARAMETER :: M2N3FBFzi = 2199 + INTEGER(IntKi), PARAMETER :: M2N4FBFzi = 2200 + INTEGER(IntKi), PARAMETER :: M2N5FBFzi = 2201 + INTEGER(IntKi), PARAMETER :: M2N6FBFzi = 2202 + INTEGER(IntKi), PARAMETER :: M2N7FBFzi = 2203 + INTEGER(IntKi), PARAMETER :: M2N8FBFzi = 2204 + INTEGER(IntKi), PARAMETER :: M2N9FBFzi = 2205 + INTEGER(IntKi), PARAMETER :: M3N1FBFzi = 2206 + INTEGER(IntKi), PARAMETER :: M3N2FBFzi = 2207 + INTEGER(IntKi), PARAMETER :: M3N3FBFzi = 2208 + INTEGER(IntKi), PARAMETER :: M3N4FBFzi = 2209 + INTEGER(IntKi), PARAMETER :: M3N5FBFzi = 2210 + INTEGER(IntKi), PARAMETER :: M3N6FBFzi = 2211 + INTEGER(IntKi), PARAMETER :: M3N7FBFzi = 2212 + INTEGER(IntKi), PARAMETER :: M3N8FBFzi = 2213 + INTEGER(IntKi), PARAMETER :: M3N9FBFzi = 2214 + INTEGER(IntKi), PARAMETER :: M4N1FBFzi = 2215 + INTEGER(IntKi), PARAMETER :: M4N2FBFzi = 2216 + INTEGER(IntKi), PARAMETER :: M4N3FBFzi = 2217 + INTEGER(IntKi), PARAMETER :: M4N4FBFzi = 2218 + INTEGER(IntKi), PARAMETER :: M4N5FBFzi = 2219 + INTEGER(IntKi), PARAMETER :: M4N6FBFzi = 2220 + INTEGER(IntKi), PARAMETER :: M4N7FBFzi = 2221 + INTEGER(IntKi), PARAMETER :: M4N8FBFzi = 2222 + INTEGER(IntKi), PARAMETER :: M4N9FBFzi = 2223 + INTEGER(IntKi), PARAMETER :: M5N1FBFzi = 2224 + INTEGER(IntKi), PARAMETER :: M5N2FBFzi = 2225 + INTEGER(IntKi), PARAMETER :: M5N3FBFzi = 2226 + INTEGER(IntKi), PARAMETER :: M5N4FBFzi = 2227 + INTEGER(IntKi), PARAMETER :: M5N5FBFzi = 2228 + INTEGER(IntKi), PARAMETER :: M5N6FBFzi = 2229 + INTEGER(IntKi), PARAMETER :: M5N7FBFzi = 2230 + INTEGER(IntKi), PARAMETER :: M5N8FBFzi = 2231 + INTEGER(IntKi), PARAMETER :: M5N9FBFzi = 2232 + INTEGER(IntKi), PARAMETER :: M6N1FBFzi = 2233 + INTEGER(IntKi), PARAMETER :: M6N2FBFzi = 2234 + INTEGER(IntKi), PARAMETER :: M6N3FBFzi = 2235 + INTEGER(IntKi), PARAMETER :: M6N4FBFzi = 2236 + INTEGER(IntKi), PARAMETER :: M6N5FBFzi = 2237 + INTEGER(IntKi), PARAMETER :: M6N6FBFzi = 2238 + INTEGER(IntKi), PARAMETER :: M6N7FBFzi = 2239 + INTEGER(IntKi), PARAMETER :: M6N8FBFzi = 2240 + INTEGER(IntKi), PARAMETER :: M6N9FBFzi = 2241 + INTEGER(IntKi), PARAMETER :: M7N1FBFzi = 2242 + INTEGER(IntKi), PARAMETER :: M7N2FBFzi = 2243 + INTEGER(IntKi), PARAMETER :: M7N3FBFzi = 2244 + INTEGER(IntKi), PARAMETER :: M7N4FBFzi = 2245 + INTEGER(IntKi), PARAMETER :: M7N5FBFzi = 2246 + INTEGER(IntKi), PARAMETER :: M7N6FBFzi = 2247 + INTEGER(IntKi), PARAMETER :: M7N7FBFzi = 2248 + INTEGER(IntKi), PARAMETER :: M7N8FBFzi = 2249 + INTEGER(IntKi), PARAMETER :: M7N9FBFzi = 2250 + INTEGER(IntKi), PARAMETER :: M8N1FBFzi = 2251 + INTEGER(IntKi), PARAMETER :: M8N2FBFzi = 2252 + INTEGER(IntKi), PARAMETER :: M8N3FBFzi = 2253 + INTEGER(IntKi), PARAMETER :: M8N4FBFzi = 2254 + INTEGER(IntKi), PARAMETER :: M8N5FBFzi = 2255 + INTEGER(IntKi), PARAMETER :: M8N6FBFzi = 2256 + INTEGER(IntKi), PARAMETER :: M8N7FBFzi = 2257 + INTEGER(IntKi), PARAMETER :: M8N8FBFzi = 2258 + INTEGER(IntKi), PARAMETER :: M8N9FBFzi = 2259 + INTEGER(IntKi), PARAMETER :: M9N1FBFzi = 2260 + INTEGER(IntKi), PARAMETER :: M9N2FBFzi = 2261 + INTEGER(IntKi), PARAMETER :: M9N3FBFzi = 2262 + INTEGER(IntKi), PARAMETER :: M9N4FBFzi = 2263 + INTEGER(IntKi), PARAMETER :: M9N5FBFzi = 2264 + INTEGER(IntKi), PARAMETER :: M9N6FBFzi = 2265 + INTEGER(IntKi), PARAMETER :: M9N7FBFzi = 2266 + INTEGER(IntKi), PARAMETER :: M9N8FBFzi = 2267 + INTEGER(IntKi), PARAMETER :: M9N9FBFzi = 2268 + INTEGER(IntKi), PARAMETER :: M1N1MBFxi = 2269 + INTEGER(IntKi), PARAMETER :: M1N2MBFxi = 2270 + INTEGER(IntKi), PARAMETER :: M1N3MBFxi = 2271 + INTEGER(IntKi), PARAMETER :: M1N4MBFxi = 2272 + INTEGER(IntKi), PARAMETER :: M1N5MBFxi = 2273 + INTEGER(IntKi), PARAMETER :: M1N6MBFxi = 2274 + INTEGER(IntKi), PARAMETER :: M1N7MBFxi = 2275 + INTEGER(IntKi), PARAMETER :: M1N8MBFxi = 2276 + INTEGER(IntKi), PARAMETER :: M1N9MBFxi = 2277 + INTEGER(IntKi), PARAMETER :: M2N1MBFxi = 2278 + INTEGER(IntKi), PARAMETER :: M2N2MBFxi = 2279 + INTEGER(IntKi), PARAMETER :: M2N3MBFxi = 2280 + INTEGER(IntKi), PARAMETER :: M2N4MBFxi = 2281 + INTEGER(IntKi), PARAMETER :: M2N5MBFxi = 2282 + INTEGER(IntKi), PARAMETER :: M2N6MBFxi = 2283 + INTEGER(IntKi), PARAMETER :: M2N7MBFxi = 2284 + INTEGER(IntKi), PARAMETER :: M2N8MBFxi = 2285 + INTEGER(IntKi), PARAMETER :: M2N9MBFxi = 2286 + INTEGER(IntKi), PARAMETER :: M3N1MBFxi = 2287 + INTEGER(IntKi), PARAMETER :: M3N2MBFxi = 2288 + INTEGER(IntKi), PARAMETER :: M3N3MBFxi = 2289 + INTEGER(IntKi), PARAMETER :: M3N4MBFxi = 2290 + INTEGER(IntKi), PARAMETER :: M3N5MBFxi = 2291 + INTEGER(IntKi), PARAMETER :: M3N6MBFxi = 2292 + INTEGER(IntKi), PARAMETER :: M3N7MBFxi = 2293 + INTEGER(IntKi), PARAMETER :: M3N8MBFxi = 2294 + INTEGER(IntKi), PARAMETER :: M3N9MBFxi = 2295 + INTEGER(IntKi), PARAMETER :: M4N1MBFxi = 2296 + INTEGER(IntKi), PARAMETER :: M4N2MBFxi = 2297 + INTEGER(IntKi), PARAMETER :: M4N3MBFxi = 2298 + INTEGER(IntKi), PARAMETER :: M4N4MBFxi = 2299 + INTEGER(IntKi), PARAMETER :: M4N5MBFxi = 2300 + INTEGER(IntKi), PARAMETER :: M4N6MBFxi = 2301 + INTEGER(IntKi), PARAMETER :: M4N7MBFxi = 2302 + INTEGER(IntKi), PARAMETER :: M4N8MBFxi = 2303 + INTEGER(IntKi), PARAMETER :: M4N9MBFxi = 2304 + INTEGER(IntKi), PARAMETER :: M5N1MBFxi = 2305 + INTEGER(IntKi), PARAMETER :: M5N2MBFxi = 2306 + INTEGER(IntKi), PARAMETER :: M5N3MBFxi = 2307 + INTEGER(IntKi), PARAMETER :: M5N4MBFxi = 2308 + INTEGER(IntKi), PARAMETER :: M5N5MBFxi = 2309 + INTEGER(IntKi), PARAMETER :: M5N6MBFxi = 2310 + INTEGER(IntKi), PARAMETER :: M5N7MBFxi = 2311 + INTEGER(IntKi), PARAMETER :: M5N8MBFxi = 2312 + INTEGER(IntKi), PARAMETER :: M5N9MBFxi = 2313 + INTEGER(IntKi), PARAMETER :: M6N1MBFxi = 2314 + INTEGER(IntKi), PARAMETER :: M6N2MBFxi = 2315 + INTEGER(IntKi), PARAMETER :: M6N3MBFxi = 2316 + INTEGER(IntKi), PARAMETER :: M6N4MBFxi = 2317 + INTEGER(IntKi), PARAMETER :: M6N5MBFxi = 2318 + INTEGER(IntKi), PARAMETER :: M6N6MBFxi = 2319 + INTEGER(IntKi), PARAMETER :: M6N7MBFxi = 2320 + INTEGER(IntKi), PARAMETER :: M6N8MBFxi = 2321 + INTEGER(IntKi), PARAMETER :: M6N9MBFxi = 2322 + INTEGER(IntKi), PARAMETER :: M7N1MBFxi = 2323 + INTEGER(IntKi), PARAMETER :: M7N2MBFxi = 2324 + INTEGER(IntKi), PARAMETER :: M7N3MBFxi = 2325 + INTEGER(IntKi), PARAMETER :: M7N4MBFxi = 2326 + INTEGER(IntKi), PARAMETER :: M7N5MBFxi = 2327 + INTEGER(IntKi), PARAMETER :: M7N6MBFxi = 2328 + INTEGER(IntKi), PARAMETER :: M7N7MBFxi = 2329 + INTEGER(IntKi), PARAMETER :: M7N8MBFxi = 2330 + INTEGER(IntKi), PARAMETER :: M7N9MBFxi = 2331 + INTEGER(IntKi), PARAMETER :: M8N1MBFxi = 2332 + INTEGER(IntKi), PARAMETER :: M8N2MBFxi = 2333 + INTEGER(IntKi), PARAMETER :: M8N3MBFxi = 2334 + INTEGER(IntKi), PARAMETER :: M8N4MBFxi = 2335 + INTEGER(IntKi), PARAMETER :: M8N5MBFxi = 2336 + INTEGER(IntKi), PARAMETER :: M8N6MBFxi = 2337 + INTEGER(IntKi), PARAMETER :: M8N7MBFxi = 2338 + INTEGER(IntKi), PARAMETER :: M8N8MBFxi = 2339 + INTEGER(IntKi), PARAMETER :: M8N9MBFxi = 2340 + INTEGER(IntKi), PARAMETER :: M9N1MBFxi = 2341 + INTEGER(IntKi), PARAMETER :: M9N2MBFxi = 2342 + INTEGER(IntKi), PARAMETER :: M9N3MBFxi = 2343 + INTEGER(IntKi), PARAMETER :: M9N4MBFxi = 2344 + INTEGER(IntKi), PARAMETER :: M9N5MBFxi = 2345 + INTEGER(IntKi), PARAMETER :: M9N6MBFxi = 2346 + INTEGER(IntKi), PARAMETER :: M9N7MBFxi = 2347 + INTEGER(IntKi), PARAMETER :: M9N8MBFxi = 2348 + INTEGER(IntKi), PARAMETER :: M9N9MBFxi = 2349 + INTEGER(IntKi), PARAMETER :: M1N1MBFyi = 2350 + INTEGER(IntKi), PARAMETER :: M1N2MBFyi = 2351 + INTEGER(IntKi), PARAMETER :: M1N3MBFyi = 2352 + INTEGER(IntKi), PARAMETER :: M1N4MBFyi = 2353 + INTEGER(IntKi), PARAMETER :: M1N5MBFyi = 2354 + INTEGER(IntKi), PARAMETER :: M1N6MBFyi = 2355 + INTEGER(IntKi), PARAMETER :: M1N7MBFyi = 2356 + INTEGER(IntKi), PARAMETER :: M1N8MBFyi = 2357 + INTEGER(IntKi), PARAMETER :: M1N9MBFyi = 2358 + INTEGER(IntKi), PARAMETER :: M2N1MBFyi = 2359 + INTEGER(IntKi), PARAMETER :: M2N2MBFyi = 2360 + INTEGER(IntKi), PARAMETER :: M2N3MBFyi = 2361 + INTEGER(IntKi), PARAMETER :: M2N4MBFyi = 2362 + INTEGER(IntKi), PARAMETER :: M2N5MBFyi = 2363 + INTEGER(IntKi), PARAMETER :: M2N6MBFyi = 2364 + INTEGER(IntKi), PARAMETER :: M2N7MBFyi = 2365 + INTEGER(IntKi), PARAMETER :: M2N8MBFyi = 2366 + INTEGER(IntKi), PARAMETER :: M2N9MBFyi = 2367 + INTEGER(IntKi), PARAMETER :: M3N1MBFyi = 2368 + INTEGER(IntKi), PARAMETER :: M3N2MBFyi = 2369 + INTEGER(IntKi), PARAMETER :: M3N3MBFyi = 2370 + INTEGER(IntKi), PARAMETER :: M3N4MBFyi = 2371 + INTEGER(IntKi), PARAMETER :: M3N5MBFyi = 2372 + INTEGER(IntKi), PARAMETER :: M3N6MBFyi = 2373 + INTEGER(IntKi), PARAMETER :: M3N7MBFyi = 2374 + INTEGER(IntKi), PARAMETER :: M3N8MBFyi = 2375 + INTEGER(IntKi), PARAMETER :: M3N9MBFyi = 2376 + INTEGER(IntKi), PARAMETER :: M4N1MBFyi = 2377 + INTEGER(IntKi), PARAMETER :: M4N2MBFyi = 2378 + INTEGER(IntKi), PARAMETER :: M4N3MBFyi = 2379 + INTEGER(IntKi), PARAMETER :: M4N4MBFyi = 2380 + INTEGER(IntKi), PARAMETER :: M4N5MBFyi = 2381 + INTEGER(IntKi), PARAMETER :: M4N6MBFyi = 2382 + INTEGER(IntKi), PARAMETER :: M4N7MBFyi = 2383 + INTEGER(IntKi), PARAMETER :: M4N8MBFyi = 2384 + INTEGER(IntKi), PARAMETER :: M4N9MBFyi = 2385 + INTEGER(IntKi), PARAMETER :: M5N1MBFyi = 2386 + INTEGER(IntKi), PARAMETER :: M5N2MBFyi = 2387 + INTEGER(IntKi), PARAMETER :: M5N3MBFyi = 2388 + INTEGER(IntKi), PARAMETER :: M5N4MBFyi = 2389 + INTEGER(IntKi), PARAMETER :: M5N5MBFyi = 2390 + INTEGER(IntKi), PARAMETER :: M5N6MBFyi = 2391 + INTEGER(IntKi), PARAMETER :: M5N7MBFyi = 2392 + INTEGER(IntKi), PARAMETER :: M5N8MBFyi = 2393 + INTEGER(IntKi), PARAMETER :: M5N9MBFyi = 2394 + INTEGER(IntKi), PARAMETER :: M6N1MBFyi = 2395 + INTEGER(IntKi), PARAMETER :: M6N2MBFyi = 2396 + INTEGER(IntKi), PARAMETER :: M6N3MBFyi = 2397 + INTEGER(IntKi), PARAMETER :: M6N4MBFyi = 2398 + INTEGER(IntKi), PARAMETER :: M6N5MBFyi = 2399 + INTEGER(IntKi), PARAMETER :: M6N6MBFyi = 2400 + INTEGER(IntKi), PARAMETER :: M6N7MBFyi = 2401 + INTEGER(IntKi), PARAMETER :: M6N8MBFyi = 2402 + INTEGER(IntKi), PARAMETER :: M6N9MBFyi = 2403 + INTEGER(IntKi), PARAMETER :: M7N1MBFyi = 2404 + INTEGER(IntKi), PARAMETER :: M7N2MBFyi = 2405 + INTEGER(IntKi), PARAMETER :: M7N3MBFyi = 2406 + INTEGER(IntKi), PARAMETER :: M7N4MBFyi = 2407 + INTEGER(IntKi), PARAMETER :: M7N5MBFyi = 2408 + INTEGER(IntKi), PARAMETER :: M7N6MBFyi = 2409 + INTEGER(IntKi), PARAMETER :: M7N7MBFyi = 2410 + INTEGER(IntKi), PARAMETER :: M7N8MBFyi = 2411 + INTEGER(IntKi), PARAMETER :: M7N9MBFyi = 2412 + INTEGER(IntKi), PARAMETER :: M8N1MBFyi = 2413 + INTEGER(IntKi), PARAMETER :: M8N2MBFyi = 2414 + INTEGER(IntKi), PARAMETER :: M8N3MBFyi = 2415 + INTEGER(IntKi), PARAMETER :: M8N4MBFyi = 2416 + INTEGER(IntKi), PARAMETER :: M8N5MBFyi = 2417 + INTEGER(IntKi), PARAMETER :: M8N6MBFyi = 2418 + INTEGER(IntKi), PARAMETER :: M8N7MBFyi = 2419 + INTEGER(IntKi), PARAMETER :: M8N8MBFyi = 2420 + INTEGER(IntKi), PARAMETER :: M8N9MBFyi = 2421 + INTEGER(IntKi), PARAMETER :: M9N1MBFyi = 2422 + INTEGER(IntKi), PARAMETER :: M9N2MBFyi = 2423 + INTEGER(IntKi), PARAMETER :: M9N3MBFyi = 2424 + INTEGER(IntKi), PARAMETER :: M9N4MBFyi = 2425 + INTEGER(IntKi), PARAMETER :: M9N5MBFyi = 2426 + INTEGER(IntKi), PARAMETER :: M9N6MBFyi = 2427 + INTEGER(IntKi), PARAMETER :: M9N7MBFyi = 2428 + INTEGER(IntKi), PARAMETER :: M9N8MBFyi = 2429 + INTEGER(IntKi), PARAMETER :: M9N9MBFyi = 2430 + INTEGER(IntKi), PARAMETER :: M1N1MBFzi = 2431 + INTEGER(IntKi), PARAMETER :: M1N2MBFzi = 2432 + INTEGER(IntKi), PARAMETER :: M1N3MBFzi = 2433 + INTEGER(IntKi), PARAMETER :: M1N4MBFzi = 2434 + INTEGER(IntKi), PARAMETER :: M1N5MBFzi = 2435 + INTEGER(IntKi), PARAMETER :: M1N6MBFzi = 2436 + INTEGER(IntKi), PARAMETER :: M1N7MBFzi = 2437 + INTEGER(IntKi), PARAMETER :: M1N8MBFzi = 2438 + INTEGER(IntKi), PARAMETER :: M1N9MBFzi = 2439 + INTEGER(IntKi), PARAMETER :: M2N1MBFzi = 2440 + INTEGER(IntKi), PARAMETER :: M2N2MBFzi = 2441 + INTEGER(IntKi), PARAMETER :: M2N3MBFzi = 2442 + INTEGER(IntKi), PARAMETER :: M2N4MBFzi = 2443 + INTEGER(IntKi), PARAMETER :: M2N5MBFzi = 2444 + INTEGER(IntKi), PARAMETER :: M2N6MBFzi = 2445 + INTEGER(IntKi), PARAMETER :: M2N7MBFzi = 2446 + INTEGER(IntKi), PARAMETER :: M2N8MBFzi = 2447 + INTEGER(IntKi), PARAMETER :: M2N9MBFzi = 2448 + INTEGER(IntKi), PARAMETER :: M3N1MBFzi = 2449 + INTEGER(IntKi), PARAMETER :: M3N2MBFzi = 2450 + INTEGER(IntKi), PARAMETER :: M3N3MBFzi = 2451 + INTEGER(IntKi), PARAMETER :: M3N4MBFzi = 2452 + INTEGER(IntKi), PARAMETER :: M3N5MBFzi = 2453 + INTEGER(IntKi), PARAMETER :: M3N6MBFzi = 2454 + INTEGER(IntKi), PARAMETER :: M3N7MBFzi = 2455 + INTEGER(IntKi), PARAMETER :: M3N8MBFzi = 2456 + INTEGER(IntKi), PARAMETER :: M3N9MBFzi = 2457 + INTEGER(IntKi), PARAMETER :: M4N1MBFzi = 2458 + INTEGER(IntKi), PARAMETER :: M4N2MBFzi = 2459 + INTEGER(IntKi), PARAMETER :: M4N3MBFzi = 2460 + INTEGER(IntKi), PARAMETER :: M4N4MBFzi = 2461 + INTEGER(IntKi), PARAMETER :: M4N5MBFzi = 2462 + INTEGER(IntKi), PARAMETER :: M4N6MBFzi = 2463 + INTEGER(IntKi), PARAMETER :: M4N7MBFzi = 2464 + INTEGER(IntKi), PARAMETER :: M4N8MBFzi = 2465 + INTEGER(IntKi), PARAMETER :: M4N9MBFzi = 2466 + INTEGER(IntKi), PARAMETER :: M5N1MBFzi = 2467 + INTEGER(IntKi), PARAMETER :: M5N2MBFzi = 2468 + INTEGER(IntKi), PARAMETER :: M5N3MBFzi = 2469 + INTEGER(IntKi), PARAMETER :: M5N4MBFzi = 2470 + INTEGER(IntKi), PARAMETER :: M5N5MBFzi = 2471 + INTEGER(IntKi), PARAMETER :: M5N6MBFzi = 2472 + INTEGER(IntKi), PARAMETER :: M5N7MBFzi = 2473 + INTEGER(IntKi), PARAMETER :: M5N8MBFzi = 2474 + INTEGER(IntKi), PARAMETER :: M5N9MBFzi = 2475 + INTEGER(IntKi), PARAMETER :: M6N1MBFzi = 2476 + INTEGER(IntKi), PARAMETER :: M6N2MBFzi = 2477 + INTEGER(IntKi), PARAMETER :: M6N3MBFzi = 2478 + INTEGER(IntKi), PARAMETER :: M6N4MBFzi = 2479 + INTEGER(IntKi), PARAMETER :: M6N5MBFzi = 2480 + INTEGER(IntKi), PARAMETER :: M6N6MBFzi = 2481 + INTEGER(IntKi), PARAMETER :: M6N7MBFzi = 2482 + INTEGER(IntKi), PARAMETER :: M6N8MBFzi = 2483 + INTEGER(IntKi), PARAMETER :: M6N9MBFzi = 2484 + INTEGER(IntKi), PARAMETER :: M7N1MBFzi = 2485 + INTEGER(IntKi), PARAMETER :: M7N2MBFzi = 2486 + INTEGER(IntKi), PARAMETER :: M7N3MBFzi = 2487 + INTEGER(IntKi), PARAMETER :: M7N4MBFzi = 2488 + INTEGER(IntKi), PARAMETER :: M7N5MBFzi = 2489 + INTEGER(IntKi), PARAMETER :: M7N6MBFzi = 2490 + INTEGER(IntKi), PARAMETER :: M7N7MBFzi = 2491 + INTEGER(IntKi), PARAMETER :: M7N8MBFzi = 2492 + INTEGER(IntKi), PARAMETER :: M7N9MBFzi = 2493 + INTEGER(IntKi), PARAMETER :: M8N1MBFzi = 2494 + INTEGER(IntKi), PARAMETER :: M8N2MBFzi = 2495 + INTEGER(IntKi), PARAMETER :: M8N3MBFzi = 2496 + INTEGER(IntKi), PARAMETER :: M8N4MBFzi = 2497 + INTEGER(IntKi), PARAMETER :: M8N5MBFzi = 2498 + INTEGER(IntKi), PARAMETER :: M8N6MBFzi = 2499 + INTEGER(IntKi), PARAMETER :: M8N7MBFzi = 2500 + INTEGER(IntKi), PARAMETER :: M8N8MBFzi = 2501 + INTEGER(IntKi), PARAMETER :: M8N9MBFzi = 2502 + INTEGER(IntKi), PARAMETER :: M9N1MBFzi = 2503 + INTEGER(IntKi), PARAMETER :: M9N2MBFzi = 2504 + INTEGER(IntKi), PARAMETER :: M9N3MBFzi = 2505 + INTEGER(IntKi), PARAMETER :: M9N4MBFzi = 2506 + INTEGER(IntKi), PARAMETER :: M9N5MBFzi = 2507 + INTEGER(IntKi), PARAMETER :: M9N6MBFzi = 2508 + INTEGER(IntKi), PARAMETER :: M9N7MBFzi = 2509 + INTEGER(IntKi), PARAMETER :: M9N8MBFzi = 2510 + INTEGER(IntKi), PARAMETER :: M9N9MBFzi = 2511 + INTEGER(IntKi), PARAMETER :: M1N1FMGxi = 2512 + INTEGER(IntKi), PARAMETER :: M1N2FMGxi = 2513 + INTEGER(IntKi), PARAMETER :: M1N3FMGxi = 2514 + INTEGER(IntKi), PARAMETER :: M1N4FMGxi = 2515 + INTEGER(IntKi), PARAMETER :: M1N5FMGxi = 2516 + INTEGER(IntKi), PARAMETER :: M1N6FMGxi = 2517 + INTEGER(IntKi), PARAMETER :: M1N7FMGxi = 2518 + INTEGER(IntKi), PARAMETER :: M1N8FMGxi = 2519 + INTEGER(IntKi), PARAMETER :: M1N9FMGxi = 2520 + INTEGER(IntKi), PARAMETER :: M2N1FMGxi = 2521 + INTEGER(IntKi), PARAMETER :: M2N2FMGxi = 2522 + INTEGER(IntKi), PARAMETER :: M2N3FMGxi = 2523 + INTEGER(IntKi), PARAMETER :: M2N4FMGxi = 2524 + INTEGER(IntKi), PARAMETER :: M2N5FMGxi = 2525 + INTEGER(IntKi), PARAMETER :: M2N6FMGxi = 2526 + INTEGER(IntKi), PARAMETER :: M2N7FMGxi = 2527 + INTEGER(IntKi), PARAMETER :: M2N8FMGxi = 2528 + INTEGER(IntKi), PARAMETER :: M2N9FMGxi = 2529 + INTEGER(IntKi), PARAMETER :: M3N1FMGxi = 2530 + INTEGER(IntKi), PARAMETER :: M3N2FMGxi = 2531 + INTEGER(IntKi), PARAMETER :: M3N3FMGxi = 2532 + INTEGER(IntKi), PARAMETER :: M3N4FMGxi = 2533 + INTEGER(IntKi), PARAMETER :: M3N5FMGxi = 2534 + INTEGER(IntKi), PARAMETER :: M3N6FMGxi = 2535 + INTEGER(IntKi), PARAMETER :: M3N7FMGxi = 2536 + INTEGER(IntKi), PARAMETER :: M3N8FMGxi = 2537 + INTEGER(IntKi), PARAMETER :: M3N9FMGxi = 2538 + INTEGER(IntKi), PARAMETER :: M4N1FMGxi = 2539 + INTEGER(IntKi), PARAMETER :: M4N2FMGxi = 2540 + INTEGER(IntKi), PARAMETER :: M4N3FMGxi = 2541 + INTEGER(IntKi), PARAMETER :: M4N4FMGxi = 2542 + INTEGER(IntKi), PARAMETER :: M4N5FMGxi = 2543 + INTEGER(IntKi), PARAMETER :: M4N6FMGxi = 2544 + INTEGER(IntKi), PARAMETER :: M4N7FMGxi = 2545 + INTEGER(IntKi), PARAMETER :: M4N8FMGxi = 2546 + INTEGER(IntKi), PARAMETER :: M4N9FMGxi = 2547 + INTEGER(IntKi), PARAMETER :: M5N1FMGxi = 2548 + INTEGER(IntKi), PARAMETER :: M5N2FMGxi = 2549 + INTEGER(IntKi), PARAMETER :: M5N3FMGxi = 2550 + INTEGER(IntKi), PARAMETER :: M5N4FMGxi = 2551 + INTEGER(IntKi), PARAMETER :: M5N5FMGxi = 2552 + INTEGER(IntKi), PARAMETER :: M5N6FMGxi = 2553 + INTEGER(IntKi), PARAMETER :: M5N7FMGxi = 2554 + INTEGER(IntKi), PARAMETER :: M5N8FMGxi = 2555 + INTEGER(IntKi), PARAMETER :: M5N9FMGxi = 2556 + INTEGER(IntKi), PARAMETER :: M6N1FMGxi = 2557 + INTEGER(IntKi), PARAMETER :: M6N2FMGxi = 2558 + INTEGER(IntKi), PARAMETER :: M6N3FMGxi = 2559 + INTEGER(IntKi), PARAMETER :: M6N4FMGxi = 2560 + INTEGER(IntKi), PARAMETER :: M6N5FMGxi = 2561 + INTEGER(IntKi), PARAMETER :: M6N6FMGxi = 2562 + INTEGER(IntKi), PARAMETER :: M6N7FMGxi = 2563 + INTEGER(IntKi), PARAMETER :: M6N8FMGxi = 2564 + INTEGER(IntKi), PARAMETER :: M6N9FMGxi = 2565 + INTEGER(IntKi), PARAMETER :: M7N1FMGxi = 2566 + INTEGER(IntKi), PARAMETER :: M7N2FMGxi = 2567 + INTEGER(IntKi), PARAMETER :: M7N3FMGxi = 2568 + INTEGER(IntKi), PARAMETER :: M7N4FMGxi = 2569 + INTEGER(IntKi), PARAMETER :: M7N5FMGxi = 2570 + INTEGER(IntKi), PARAMETER :: M7N6FMGxi = 2571 + INTEGER(IntKi), PARAMETER :: M7N7FMGxi = 2572 + INTEGER(IntKi), PARAMETER :: M7N8FMGxi = 2573 + INTEGER(IntKi), PARAMETER :: M7N9FMGxi = 2574 + INTEGER(IntKi), PARAMETER :: M8N1FMGxi = 2575 + INTEGER(IntKi), PARAMETER :: M8N2FMGxi = 2576 + INTEGER(IntKi), PARAMETER :: M8N3FMGxi = 2577 + INTEGER(IntKi), PARAMETER :: M8N4FMGxi = 2578 + INTEGER(IntKi), PARAMETER :: M8N5FMGxi = 2579 + INTEGER(IntKi), PARAMETER :: M8N6FMGxi = 2580 + INTEGER(IntKi), PARAMETER :: M8N7FMGxi = 2581 + INTEGER(IntKi), PARAMETER :: M8N8FMGxi = 2582 + INTEGER(IntKi), PARAMETER :: M8N9FMGxi = 2583 + INTEGER(IntKi), PARAMETER :: M9N1FMGxi = 2584 + INTEGER(IntKi), PARAMETER :: M9N2FMGxi = 2585 + INTEGER(IntKi), PARAMETER :: M9N3FMGxi = 2586 + INTEGER(IntKi), PARAMETER :: M9N4FMGxi = 2587 + INTEGER(IntKi), PARAMETER :: M9N5FMGxi = 2588 + INTEGER(IntKi), PARAMETER :: M9N6FMGxi = 2589 + INTEGER(IntKi), PARAMETER :: M9N7FMGxi = 2590 + INTEGER(IntKi), PARAMETER :: M9N8FMGxi = 2591 + INTEGER(IntKi), PARAMETER :: M9N9FMGxi = 2592 + INTEGER(IntKi), PARAMETER :: M1N1FMGyi = 2593 + INTEGER(IntKi), PARAMETER :: M1N2FMGyi = 2594 + INTEGER(IntKi), PARAMETER :: M1N3FMGyi = 2595 + INTEGER(IntKi), PARAMETER :: M1N4FMGyi = 2596 + INTEGER(IntKi), PARAMETER :: M1N5FMGyi = 2597 + INTEGER(IntKi), PARAMETER :: M1N6FMGyi = 2598 + INTEGER(IntKi), PARAMETER :: M1N7FMGyi = 2599 + INTEGER(IntKi), PARAMETER :: M1N8FMGyi = 2600 + INTEGER(IntKi), PARAMETER :: M1N9FMGyi = 2601 + INTEGER(IntKi), PARAMETER :: M2N1FMGyi = 2602 + INTEGER(IntKi), PARAMETER :: M2N2FMGyi = 2603 + INTEGER(IntKi), PARAMETER :: M2N3FMGyi = 2604 + INTEGER(IntKi), PARAMETER :: M2N4FMGyi = 2605 + INTEGER(IntKi), PARAMETER :: M2N5FMGyi = 2606 + INTEGER(IntKi), PARAMETER :: M2N6FMGyi = 2607 + INTEGER(IntKi), PARAMETER :: M2N7FMGyi = 2608 + INTEGER(IntKi), PARAMETER :: M2N8FMGyi = 2609 + INTEGER(IntKi), PARAMETER :: M2N9FMGyi = 2610 + INTEGER(IntKi), PARAMETER :: M3N1FMGyi = 2611 + INTEGER(IntKi), PARAMETER :: M3N2FMGyi = 2612 + INTEGER(IntKi), PARAMETER :: M3N3FMGyi = 2613 + INTEGER(IntKi), PARAMETER :: M3N4FMGyi = 2614 + INTEGER(IntKi), PARAMETER :: M3N5FMGyi = 2615 + INTEGER(IntKi), PARAMETER :: M3N6FMGyi = 2616 + INTEGER(IntKi), PARAMETER :: M3N7FMGyi = 2617 + INTEGER(IntKi), PARAMETER :: M3N8FMGyi = 2618 + INTEGER(IntKi), PARAMETER :: M3N9FMGyi = 2619 + INTEGER(IntKi), PARAMETER :: M4N1FMGyi = 2620 + INTEGER(IntKi), PARAMETER :: M4N2FMGyi = 2621 + INTEGER(IntKi), PARAMETER :: M4N3FMGyi = 2622 + INTEGER(IntKi), PARAMETER :: M4N4FMGyi = 2623 + INTEGER(IntKi), PARAMETER :: M4N5FMGyi = 2624 + INTEGER(IntKi), PARAMETER :: M4N6FMGyi = 2625 + INTEGER(IntKi), PARAMETER :: M4N7FMGyi = 2626 + INTEGER(IntKi), PARAMETER :: M4N8FMGyi = 2627 + INTEGER(IntKi), PARAMETER :: M4N9FMGyi = 2628 + INTEGER(IntKi), PARAMETER :: M5N1FMGyi = 2629 + INTEGER(IntKi), PARAMETER :: M5N2FMGyi = 2630 + INTEGER(IntKi), PARAMETER :: M5N3FMGyi = 2631 + INTEGER(IntKi), PARAMETER :: M5N4FMGyi = 2632 + INTEGER(IntKi), PARAMETER :: M5N5FMGyi = 2633 + INTEGER(IntKi), PARAMETER :: M5N6FMGyi = 2634 + INTEGER(IntKi), PARAMETER :: M5N7FMGyi = 2635 + INTEGER(IntKi), PARAMETER :: M5N8FMGyi = 2636 + INTEGER(IntKi), PARAMETER :: M5N9FMGyi = 2637 + INTEGER(IntKi), PARAMETER :: M6N1FMGyi = 2638 + INTEGER(IntKi), PARAMETER :: M6N2FMGyi = 2639 + INTEGER(IntKi), PARAMETER :: M6N3FMGyi = 2640 + INTEGER(IntKi), PARAMETER :: M6N4FMGyi = 2641 + INTEGER(IntKi), PARAMETER :: M6N5FMGyi = 2642 + INTEGER(IntKi), PARAMETER :: M6N6FMGyi = 2643 + INTEGER(IntKi), PARAMETER :: M6N7FMGyi = 2644 + INTEGER(IntKi), PARAMETER :: M6N8FMGyi = 2645 + INTEGER(IntKi), PARAMETER :: M6N9FMGyi = 2646 + INTEGER(IntKi), PARAMETER :: M7N1FMGyi = 2647 + INTEGER(IntKi), PARAMETER :: M7N2FMGyi = 2648 + INTEGER(IntKi), PARAMETER :: M7N3FMGyi = 2649 + INTEGER(IntKi), PARAMETER :: M7N4FMGyi = 2650 + INTEGER(IntKi), PARAMETER :: M7N5FMGyi = 2651 + INTEGER(IntKi), PARAMETER :: M7N6FMGyi = 2652 + INTEGER(IntKi), PARAMETER :: M7N7FMGyi = 2653 + INTEGER(IntKi), PARAMETER :: M7N8FMGyi = 2654 + INTEGER(IntKi), PARAMETER :: M7N9FMGyi = 2655 + INTEGER(IntKi), PARAMETER :: M8N1FMGyi = 2656 + INTEGER(IntKi), PARAMETER :: M8N2FMGyi = 2657 + INTEGER(IntKi), PARAMETER :: M8N3FMGyi = 2658 + INTEGER(IntKi), PARAMETER :: M8N4FMGyi = 2659 + INTEGER(IntKi), PARAMETER :: M8N5FMGyi = 2660 + INTEGER(IntKi), PARAMETER :: M8N6FMGyi = 2661 + INTEGER(IntKi), PARAMETER :: M8N7FMGyi = 2662 + INTEGER(IntKi), PARAMETER :: M8N8FMGyi = 2663 + INTEGER(IntKi), PARAMETER :: M8N9FMGyi = 2664 + INTEGER(IntKi), PARAMETER :: M9N1FMGyi = 2665 + INTEGER(IntKi), PARAMETER :: M9N2FMGyi = 2666 + INTEGER(IntKi), PARAMETER :: M9N3FMGyi = 2667 + INTEGER(IntKi), PARAMETER :: M9N4FMGyi = 2668 + INTEGER(IntKi), PARAMETER :: M9N5FMGyi = 2669 + INTEGER(IntKi), PARAMETER :: M9N6FMGyi = 2670 + INTEGER(IntKi), PARAMETER :: M9N7FMGyi = 2671 + INTEGER(IntKi), PARAMETER :: M9N8FMGyi = 2672 + INTEGER(IntKi), PARAMETER :: M9N9FMGyi = 2673 + INTEGER(IntKi), PARAMETER :: M1N1FMGzi = 2674 + INTEGER(IntKi), PARAMETER :: M1N2FMGzi = 2675 + INTEGER(IntKi), PARAMETER :: M1N3FMGzi = 2676 + INTEGER(IntKi), PARAMETER :: M1N4FMGzi = 2677 + INTEGER(IntKi), PARAMETER :: M1N5FMGzi = 2678 + INTEGER(IntKi), PARAMETER :: M1N6FMGzi = 2679 + INTEGER(IntKi), PARAMETER :: M1N7FMGzi = 2680 + INTEGER(IntKi), PARAMETER :: M1N8FMGzi = 2681 + INTEGER(IntKi), PARAMETER :: M1N9FMGzi = 2682 + INTEGER(IntKi), PARAMETER :: M2N1FMGzi = 2683 + INTEGER(IntKi), PARAMETER :: M2N2FMGzi = 2684 + INTEGER(IntKi), PARAMETER :: M2N3FMGzi = 2685 + INTEGER(IntKi), PARAMETER :: M2N4FMGzi = 2686 + INTEGER(IntKi), PARAMETER :: M2N5FMGzi = 2687 + INTEGER(IntKi), PARAMETER :: M2N6FMGzi = 2688 + INTEGER(IntKi), PARAMETER :: M2N7FMGzi = 2689 + INTEGER(IntKi), PARAMETER :: M2N8FMGzi = 2690 + INTEGER(IntKi), PARAMETER :: M2N9FMGzi = 2691 + INTEGER(IntKi), PARAMETER :: M3N1FMGzi = 2692 + INTEGER(IntKi), PARAMETER :: M3N2FMGzi = 2693 + INTEGER(IntKi), PARAMETER :: M3N3FMGzi = 2694 + INTEGER(IntKi), PARAMETER :: M3N4FMGzi = 2695 + INTEGER(IntKi), PARAMETER :: M3N5FMGzi = 2696 + INTEGER(IntKi), PARAMETER :: M3N6FMGzi = 2697 + INTEGER(IntKi), PARAMETER :: M3N7FMGzi = 2698 + INTEGER(IntKi), PARAMETER :: M3N8FMGzi = 2699 + INTEGER(IntKi), PARAMETER :: M3N9FMGzi = 2700 + INTEGER(IntKi), PARAMETER :: M4N1FMGzi = 2701 + INTEGER(IntKi), PARAMETER :: M4N2FMGzi = 2702 + INTEGER(IntKi), PARAMETER :: M4N3FMGzi = 2703 + INTEGER(IntKi), PARAMETER :: M4N4FMGzi = 2704 + INTEGER(IntKi), PARAMETER :: M4N5FMGzi = 2705 + INTEGER(IntKi), PARAMETER :: M4N6FMGzi = 2706 + INTEGER(IntKi), PARAMETER :: M4N7FMGzi = 2707 + INTEGER(IntKi), PARAMETER :: M4N8FMGzi = 2708 + INTEGER(IntKi), PARAMETER :: M4N9FMGzi = 2709 + INTEGER(IntKi), PARAMETER :: M5N1FMGzi = 2710 + INTEGER(IntKi), PARAMETER :: M5N2FMGzi = 2711 + INTEGER(IntKi), PARAMETER :: M5N3FMGzi = 2712 + INTEGER(IntKi), PARAMETER :: M5N4FMGzi = 2713 + INTEGER(IntKi), PARAMETER :: M5N5FMGzi = 2714 + INTEGER(IntKi), PARAMETER :: M5N6FMGzi = 2715 + INTEGER(IntKi), PARAMETER :: M5N7FMGzi = 2716 + INTEGER(IntKi), PARAMETER :: M5N8FMGzi = 2717 + INTEGER(IntKi), PARAMETER :: M5N9FMGzi = 2718 + INTEGER(IntKi), PARAMETER :: M6N1FMGzi = 2719 + INTEGER(IntKi), PARAMETER :: M6N2FMGzi = 2720 + INTEGER(IntKi), PARAMETER :: M6N3FMGzi = 2721 + INTEGER(IntKi), PARAMETER :: M6N4FMGzi = 2722 + INTEGER(IntKi), PARAMETER :: M6N5FMGzi = 2723 + INTEGER(IntKi), PARAMETER :: M6N6FMGzi = 2724 + INTEGER(IntKi), PARAMETER :: M6N7FMGzi = 2725 + INTEGER(IntKi), PARAMETER :: M6N8FMGzi = 2726 + INTEGER(IntKi), PARAMETER :: M6N9FMGzi = 2727 + INTEGER(IntKi), PARAMETER :: M7N1FMGzi = 2728 + INTEGER(IntKi), PARAMETER :: M7N2FMGzi = 2729 + INTEGER(IntKi), PARAMETER :: M7N3FMGzi = 2730 + INTEGER(IntKi), PARAMETER :: M7N4FMGzi = 2731 + INTEGER(IntKi), PARAMETER :: M7N5FMGzi = 2732 + INTEGER(IntKi), PARAMETER :: M7N6FMGzi = 2733 + INTEGER(IntKi), PARAMETER :: M7N7FMGzi = 2734 + INTEGER(IntKi), PARAMETER :: M7N8FMGzi = 2735 + INTEGER(IntKi), PARAMETER :: M7N9FMGzi = 2736 + INTEGER(IntKi), PARAMETER :: M8N1FMGzi = 2737 + INTEGER(IntKi), PARAMETER :: M8N2FMGzi = 2738 + INTEGER(IntKi), PARAMETER :: M8N3FMGzi = 2739 + INTEGER(IntKi), PARAMETER :: M8N4FMGzi = 2740 + INTEGER(IntKi), PARAMETER :: M8N5FMGzi = 2741 + INTEGER(IntKi), PARAMETER :: M8N6FMGzi = 2742 + INTEGER(IntKi), PARAMETER :: M8N7FMGzi = 2743 + INTEGER(IntKi), PARAMETER :: M8N8FMGzi = 2744 + INTEGER(IntKi), PARAMETER :: M8N9FMGzi = 2745 + INTEGER(IntKi), PARAMETER :: M9N1FMGzi = 2746 + INTEGER(IntKi), PARAMETER :: M9N2FMGzi = 2747 + INTEGER(IntKi), PARAMETER :: M9N3FMGzi = 2748 + INTEGER(IntKi), PARAMETER :: M9N4FMGzi = 2749 + INTEGER(IntKi), PARAMETER :: M9N5FMGzi = 2750 + INTEGER(IntKi), PARAMETER :: M9N6FMGzi = 2751 + INTEGER(IntKi), PARAMETER :: M9N7FMGzi = 2752 + INTEGER(IntKi), PARAMETER :: M9N8FMGzi = 2753 + INTEGER(IntKi), PARAMETER :: M9N9FMGzi = 2754 + INTEGER(IntKi), PARAMETER :: M1N1MMGxi = 2755 + INTEGER(IntKi), PARAMETER :: M1N2MMGxi = 2756 + INTEGER(IntKi), PARAMETER :: M1N3MMGxi = 2757 + INTEGER(IntKi), PARAMETER :: M1N4MMGxi = 2758 + INTEGER(IntKi), PARAMETER :: M1N5MMGxi = 2759 + INTEGER(IntKi), PARAMETER :: M1N6MMGxi = 2760 + INTEGER(IntKi), PARAMETER :: M1N7MMGxi = 2761 + INTEGER(IntKi), PARAMETER :: M1N8MMGxi = 2762 + INTEGER(IntKi), PARAMETER :: M1N9MMGxi = 2763 + INTEGER(IntKi), PARAMETER :: M2N1MMGxi = 2764 + INTEGER(IntKi), PARAMETER :: M2N2MMGxi = 2765 + INTEGER(IntKi), PARAMETER :: M2N3MMGxi = 2766 + INTEGER(IntKi), PARAMETER :: M2N4MMGxi = 2767 + INTEGER(IntKi), PARAMETER :: M2N5MMGxi = 2768 + INTEGER(IntKi), PARAMETER :: M2N6MMGxi = 2769 + INTEGER(IntKi), PARAMETER :: M2N7MMGxi = 2770 + INTEGER(IntKi), PARAMETER :: M2N8MMGxi = 2771 + INTEGER(IntKi), PARAMETER :: M2N9MMGxi = 2772 + INTEGER(IntKi), PARAMETER :: M3N1MMGxi = 2773 + INTEGER(IntKi), PARAMETER :: M3N2MMGxi = 2774 + INTEGER(IntKi), PARAMETER :: M3N3MMGxi = 2775 + INTEGER(IntKi), PARAMETER :: M3N4MMGxi = 2776 + INTEGER(IntKi), PARAMETER :: M3N5MMGxi = 2777 + INTEGER(IntKi), PARAMETER :: M3N6MMGxi = 2778 + INTEGER(IntKi), PARAMETER :: M3N7MMGxi = 2779 + INTEGER(IntKi), PARAMETER :: M3N8MMGxi = 2780 + INTEGER(IntKi), PARAMETER :: M3N9MMGxi = 2781 + INTEGER(IntKi), PARAMETER :: M4N1MMGxi = 2782 + INTEGER(IntKi), PARAMETER :: M4N2MMGxi = 2783 + INTEGER(IntKi), PARAMETER :: M4N3MMGxi = 2784 + INTEGER(IntKi), PARAMETER :: M4N4MMGxi = 2785 + INTEGER(IntKi), PARAMETER :: M4N5MMGxi = 2786 + INTEGER(IntKi), PARAMETER :: M4N6MMGxi = 2787 + INTEGER(IntKi), PARAMETER :: M4N7MMGxi = 2788 + INTEGER(IntKi), PARAMETER :: M4N8MMGxi = 2789 + INTEGER(IntKi), PARAMETER :: M4N9MMGxi = 2790 + INTEGER(IntKi), PARAMETER :: M5N1MMGxi = 2791 + INTEGER(IntKi), PARAMETER :: M5N2MMGxi = 2792 + INTEGER(IntKi), PARAMETER :: M5N3MMGxi = 2793 + INTEGER(IntKi), PARAMETER :: M5N4MMGxi = 2794 + INTEGER(IntKi), PARAMETER :: M5N5MMGxi = 2795 + INTEGER(IntKi), PARAMETER :: M5N6MMGxi = 2796 + INTEGER(IntKi), PARAMETER :: M5N7MMGxi = 2797 + INTEGER(IntKi), PARAMETER :: M5N8MMGxi = 2798 + INTEGER(IntKi), PARAMETER :: M5N9MMGxi = 2799 + INTEGER(IntKi), PARAMETER :: M6N1MMGxi = 2800 + INTEGER(IntKi), PARAMETER :: M6N2MMGxi = 2801 + INTEGER(IntKi), PARAMETER :: M6N3MMGxi = 2802 + INTEGER(IntKi), PARAMETER :: M6N4MMGxi = 2803 + INTEGER(IntKi), PARAMETER :: M6N5MMGxi = 2804 + INTEGER(IntKi), PARAMETER :: M6N6MMGxi = 2805 + INTEGER(IntKi), PARAMETER :: M6N7MMGxi = 2806 + INTEGER(IntKi), PARAMETER :: M6N8MMGxi = 2807 + INTEGER(IntKi), PARAMETER :: M6N9MMGxi = 2808 + INTEGER(IntKi), PARAMETER :: M7N1MMGxi = 2809 + INTEGER(IntKi), PARAMETER :: M7N2MMGxi = 2810 + INTEGER(IntKi), PARAMETER :: M7N3MMGxi = 2811 + INTEGER(IntKi), PARAMETER :: M7N4MMGxi = 2812 + INTEGER(IntKi), PARAMETER :: M7N5MMGxi = 2813 + INTEGER(IntKi), PARAMETER :: M7N6MMGxi = 2814 + INTEGER(IntKi), PARAMETER :: M7N7MMGxi = 2815 + INTEGER(IntKi), PARAMETER :: M7N8MMGxi = 2816 + INTEGER(IntKi), PARAMETER :: M7N9MMGxi = 2817 + INTEGER(IntKi), PARAMETER :: M8N1MMGxi = 2818 + INTEGER(IntKi), PARAMETER :: M8N2MMGxi = 2819 + INTEGER(IntKi), PARAMETER :: M8N3MMGxi = 2820 + INTEGER(IntKi), PARAMETER :: M8N4MMGxi = 2821 + INTEGER(IntKi), PARAMETER :: M8N5MMGxi = 2822 + INTEGER(IntKi), PARAMETER :: M8N6MMGxi = 2823 + INTEGER(IntKi), PARAMETER :: M8N7MMGxi = 2824 + INTEGER(IntKi), PARAMETER :: M8N8MMGxi = 2825 + INTEGER(IntKi), PARAMETER :: M8N9MMGxi = 2826 + INTEGER(IntKi), PARAMETER :: M9N1MMGxi = 2827 + INTEGER(IntKi), PARAMETER :: M9N2MMGxi = 2828 + INTEGER(IntKi), PARAMETER :: M9N3MMGxi = 2829 + INTEGER(IntKi), PARAMETER :: M9N4MMGxi = 2830 + INTEGER(IntKi), PARAMETER :: M9N5MMGxi = 2831 + INTEGER(IntKi), PARAMETER :: M9N6MMGxi = 2832 + INTEGER(IntKi), PARAMETER :: M9N7MMGxi = 2833 + INTEGER(IntKi), PARAMETER :: M9N8MMGxi = 2834 + INTEGER(IntKi), PARAMETER :: M9N9MMGxi = 2835 + INTEGER(IntKi), PARAMETER :: M1N1MMGyi = 2836 + INTEGER(IntKi), PARAMETER :: M1N2MMGyi = 2837 + INTEGER(IntKi), PARAMETER :: M1N3MMGyi = 2838 + INTEGER(IntKi), PARAMETER :: M1N4MMGyi = 2839 + INTEGER(IntKi), PARAMETER :: M1N5MMGyi = 2840 + INTEGER(IntKi), PARAMETER :: M1N6MMGyi = 2841 + INTEGER(IntKi), PARAMETER :: M1N7MMGyi = 2842 + INTEGER(IntKi), PARAMETER :: M1N8MMGyi = 2843 + INTEGER(IntKi), PARAMETER :: M1N9MMGyi = 2844 + INTEGER(IntKi), PARAMETER :: M2N1MMGyi = 2845 + INTEGER(IntKi), PARAMETER :: M2N2MMGyi = 2846 + INTEGER(IntKi), PARAMETER :: M2N3MMGyi = 2847 + INTEGER(IntKi), PARAMETER :: M2N4MMGyi = 2848 + INTEGER(IntKi), PARAMETER :: M2N5MMGyi = 2849 + INTEGER(IntKi), PARAMETER :: M2N6MMGyi = 2850 + INTEGER(IntKi), PARAMETER :: M2N7MMGyi = 2851 + INTEGER(IntKi), PARAMETER :: M2N8MMGyi = 2852 + INTEGER(IntKi), PARAMETER :: M2N9MMGyi = 2853 + INTEGER(IntKi), PARAMETER :: M3N1MMGyi = 2854 + INTEGER(IntKi), PARAMETER :: M3N2MMGyi = 2855 + INTEGER(IntKi), PARAMETER :: M3N3MMGyi = 2856 + INTEGER(IntKi), PARAMETER :: M3N4MMGyi = 2857 + INTEGER(IntKi), PARAMETER :: M3N5MMGyi = 2858 + INTEGER(IntKi), PARAMETER :: M3N6MMGyi = 2859 + INTEGER(IntKi), PARAMETER :: M3N7MMGyi = 2860 + INTEGER(IntKi), PARAMETER :: M3N8MMGyi = 2861 + INTEGER(IntKi), PARAMETER :: M3N9MMGyi = 2862 + INTEGER(IntKi), PARAMETER :: M4N1MMGyi = 2863 + INTEGER(IntKi), PARAMETER :: M4N2MMGyi = 2864 + INTEGER(IntKi), PARAMETER :: M4N3MMGyi = 2865 + INTEGER(IntKi), PARAMETER :: M4N4MMGyi = 2866 + INTEGER(IntKi), PARAMETER :: M4N5MMGyi = 2867 + INTEGER(IntKi), PARAMETER :: M4N6MMGyi = 2868 + INTEGER(IntKi), PARAMETER :: M4N7MMGyi = 2869 + INTEGER(IntKi), PARAMETER :: M4N8MMGyi = 2870 + INTEGER(IntKi), PARAMETER :: M4N9MMGyi = 2871 + INTEGER(IntKi), PARAMETER :: M5N1MMGyi = 2872 + INTEGER(IntKi), PARAMETER :: M5N2MMGyi = 2873 + INTEGER(IntKi), PARAMETER :: M5N3MMGyi = 2874 + INTEGER(IntKi), PARAMETER :: M5N4MMGyi = 2875 + INTEGER(IntKi), PARAMETER :: M5N5MMGyi = 2876 + INTEGER(IntKi), PARAMETER :: M5N6MMGyi = 2877 + INTEGER(IntKi), PARAMETER :: M5N7MMGyi = 2878 + INTEGER(IntKi), PARAMETER :: M5N8MMGyi = 2879 + INTEGER(IntKi), PARAMETER :: M5N9MMGyi = 2880 + INTEGER(IntKi), PARAMETER :: M6N1MMGyi = 2881 + INTEGER(IntKi), PARAMETER :: M6N2MMGyi = 2882 + INTEGER(IntKi), PARAMETER :: M6N3MMGyi = 2883 + INTEGER(IntKi), PARAMETER :: M6N4MMGyi = 2884 + INTEGER(IntKi), PARAMETER :: M6N5MMGyi = 2885 + INTEGER(IntKi), PARAMETER :: M6N6MMGyi = 2886 + INTEGER(IntKi), PARAMETER :: M6N7MMGyi = 2887 + INTEGER(IntKi), PARAMETER :: M6N8MMGyi = 2888 + INTEGER(IntKi), PARAMETER :: M6N9MMGyi = 2889 + INTEGER(IntKi), PARAMETER :: M7N1MMGyi = 2890 + INTEGER(IntKi), PARAMETER :: M7N2MMGyi = 2891 + INTEGER(IntKi), PARAMETER :: M7N3MMGyi = 2892 + INTEGER(IntKi), PARAMETER :: M7N4MMGyi = 2893 + INTEGER(IntKi), PARAMETER :: M7N5MMGyi = 2894 + INTEGER(IntKi), PARAMETER :: M7N6MMGyi = 2895 + INTEGER(IntKi), PARAMETER :: M7N7MMGyi = 2896 + INTEGER(IntKi), PARAMETER :: M7N8MMGyi = 2897 + INTEGER(IntKi), PARAMETER :: M7N9MMGyi = 2898 + INTEGER(IntKi), PARAMETER :: M8N1MMGyi = 2899 + INTEGER(IntKi), PARAMETER :: M8N2MMGyi = 2900 + INTEGER(IntKi), PARAMETER :: M8N3MMGyi = 2901 + INTEGER(IntKi), PARAMETER :: M8N4MMGyi = 2902 + INTEGER(IntKi), PARAMETER :: M8N5MMGyi = 2903 + INTEGER(IntKi), PARAMETER :: M8N6MMGyi = 2904 + INTEGER(IntKi), PARAMETER :: M8N7MMGyi = 2905 + INTEGER(IntKi), PARAMETER :: M8N8MMGyi = 2906 + INTEGER(IntKi), PARAMETER :: M8N9MMGyi = 2907 + INTEGER(IntKi), PARAMETER :: M9N1MMGyi = 2908 + INTEGER(IntKi), PARAMETER :: M9N2MMGyi = 2909 + INTEGER(IntKi), PARAMETER :: M9N3MMGyi = 2910 + INTEGER(IntKi), PARAMETER :: M9N4MMGyi = 2911 + INTEGER(IntKi), PARAMETER :: M9N5MMGyi = 2912 + INTEGER(IntKi), PARAMETER :: M9N6MMGyi = 2913 + INTEGER(IntKi), PARAMETER :: M9N7MMGyi = 2914 + INTEGER(IntKi), PARAMETER :: M9N8MMGyi = 2915 + INTEGER(IntKi), PARAMETER :: M9N9MMGyi = 2916 + INTEGER(IntKi), PARAMETER :: M1N1MMGzi = 2917 + INTEGER(IntKi), PARAMETER :: M1N2MMGzi = 2918 + INTEGER(IntKi), PARAMETER :: M1N3MMGzi = 2919 + INTEGER(IntKi), PARAMETER :: M1N4MMGzi = 2920 + INTEGER(IntKi), PARAMETER :: M1N5MMGzi = 2921 + INTEGER(IntKi), PARAMETER :: M1N6MMGzi = 2922 + INTEGER(IntKi), PARAMETER :: M1N7MMGzi = 2923 + INTEGER(IntKi), PARAMETER :: M1N8MMGzi = 2924 + INTEGER(IntKi), PARAMETER :: M1N9MMGzi = 2925 + INTEGER(IntKi), PARAMETER :: M2N1MMGzi = 2926 + INTEGER(IntKi), PARAMETER :: M2N2MMGzi = 2927 + INTEGER(IntKi), PARAMETER :: M2N3MMGzi = 2928 + INTEGER(IntKi), PARAMETER :: M2N4MMGzi = 2929 + INTEGER(IntKi), PARAMETER :: M2N5MMGzi = 2930 + INTEGER(IntKi), PARAMETER :: M2N6MMGzi = 2931 + INTEGER(IntKi), PARAMETER :: M2N7MMGzi = 2932 + INTEGER(IntKi), PARAMETER :: M2N8MMGzi = 2933 + INTEGER(IntKi), PARAMETER :: M2N9MMGzi = 2934 + INTEGER(IntKi), PARAMETER :: M3N1MMGzi = 2935 + INTEGER(IntKi), PARAMETER :: M3N2MMGzi = 2936 + INTEGER(IntKi), PARAMETER :: M3N3MMGzi = 2937 + INTEGER(IntKi), PARAMETER :: M3N4MMGzi = 2938 + INTEGER(IntKi), PARAMETER :: M3N5MMGzi = 2939 + INTEGER(IntKi), PARAMETER :: M3N6MMGzi = 2940 + INTEGER(IntKi), PARAMETER :: M3N7MMGzi = 2941 + INTEGER(IntKi), PARAMETER :: M3N8MMGzi = 2942 + INTEGER(IntKi), PARAMETER :: M3N9MMGzi = 2943 + INTEGER(IntKi), PARAMETER :: M4N1MMGzi = 2944 + INTEGER(IntKi), PARAMETER :: M4N2MMGzi = 2945 + INTEGER(IntKi), PARAMETER :: M4N3MMGzi = 2946 + INTEGER(IntKi), PARAMETER :: M4N4MMGzi = 2947 + INTEGER(IntKi), PARAMETER :: M4N5MMGzi = 2948 + INTEGER(IntKi), PARAMETER :: M4N6MMGzi = 2949 + INTEGER(IntKi), PARAMETER :: M4N7MMGzi = 2950 + INTEGER(IntKi), PARAMETER :: M4N8MMGzi = 2951 + INTEGER(IntKi), PARAMETER :: M4N9MMGzi = 2952 + INTEGER(IntKi), PARAMETER :: M5N1MMGzi = 2953 + INTEGER(IntKi), PARAMETER :: M5N2MMGzi = 2954 + INTEGER(IntKi), PARAMETER :: M5N3MMGzi = 2955 + INTEGER(IntKi), PARAMETER :: M5N4MMGzi = 2956 + INTEGER(IntKi), PARAMETER :: M5N5MMGzi = 2957 + INTEGER(IntKi), PARAMETER :: M5N6MMGzi = 2958 + INTEGER(IntKi), PARAMETER :: M5N7MMGzi = 2959 + INTEGER(IntKi), PARAMETER :: M5N8MMGzi = 2960 + INTEGER(IntKi), PARAMETER :: M5N9MMGzi = 2961 + INTEGER(IntKi), PARAMETER :: M6N1MMGzi = 2962 + INTEGER(IntKi), PARAMETER :: M6N2MMGzi = 2963 + INTEGER(IntKi), PARAMETER :: M6N3MMGzi = 2964 + INTEGER(IntKi), PARAMETER :: M6N4MMGzi = 2965 + INTEGER(IntKi), PARAMETER :: M6N5MMGzi = 2966 + INTEGER(IntKi), PARAMETER :: M6N6MMGzi = 2967 + INTEGER(IntKi), PARAMETER :: M6N7MMGzi = 2968 + INTEGER(IntKi), PARAMETER :: M6N8MMGzi = 2969 + INTEGER(IntKi), PARAMETER :: M6N9MMGzi = 2970 + INTEGER(IntKi), PARAMETER :: M7N1MMGzi = 2971 + INTEGER(IntKi), PARAMETER :: M7N2MMGzi = 2972 + INTEGER(IntKi), PARAMETER :: M7N3MMGzi = 2973 + INTEGER(IntKi), PARAMETER :: M7N4MMGzi = 2974 + INTEGER(IntKi), PARAMETER :: M7N5MMGzi = 2975 + INTEGER(IntKi), PARAMETER :: M7N6MMGzi = 2976 + INTEGER(IntKi), PARAMETER :: M7N7MMGzi = 2977 + INTEGER(IntKi), PARAMETER :: M7N8MMGzi = 2978 + INTEGER(IntKi), PARAMETER :: M7N9MMGzi = 2979 + INTEGER(IntKi), PARAMETER :: M8N1MMGzi = 2980 + INTEGER(IntKi), PARAMETER :: M8N2MMGzi = 2981 + INTEGER(IntKi), PARAMETER :: M8N3MMGzi = 2982 + INTEGER(IntKi), PARAMETER :: M8N4MMGzi = 2983 + INTEGER(IntKi), PARAMETER :: M8N5MMGzi = 2984 + INTEGER(IntKi), PARAMETER :: M8N6MMGzi = 2985 + INTEGER(IntKi), PARAMETER :: M8N7MMGzi = 2986 + INTEGER(IntKi), PARAMETER :: M8N8MMGzi = 2987 + INTEGER(IntKi), PARAMETER :: M8N9MMGzi = 2988 + INTEGER(IntKi), PARAMETER :: M9N1MMGzi = 2989 + INTEGER(IntKi), PARAMETER :: M9N2MMGzi = 2990 + INTEGER(IntKi), PARAMETER :: M9N3MMGzi = 2991 + INTEGER(IntKi), PARAMETER :: M9N4MMGzi = 2992 + INTEGER(IntKi), PARAMETER :: M9N5MMGzi = 2993 + INTEGER(IntKi), PARAMETER :: M9N6MMGzi = 2994 + INTEGER(IntKi), PARAMETER :: M9N7MMGzi = 2995 + INTEGER(IntKi), PARAMETER :: M9N8MMGzi = 2996 + INTEGER(IntKi), PARAMETER :: M9N9MMGzi = 2997 + INTEGER(IntKi), PARAMETER :: M1N1FAMxi = 2998 + INTEGER(IntKi), PARAMETER :: M1N2FAMxi = 2999 + INTEGER(IntKi), PARAMETER :: M1N3FAMxi = 3000 + INTEGER(IntKi), PARAMETER :: M1N4FAMxi = 3001 + INTEGER(IntKi), PARAMETER :: M1N5FAMxi = 3002 + INTEGER(IntKi), PARAMETER :: M1N6FAMxi = 3003 + INTEGER(IntKi), PARAMETER :: M1N7FAMxi = 3004 + INTEGER(IntKi), PARAMETER :: M1N8FAMxi = 3005 + INTEGER(IntKi), PARAMETER :: M1N9FAMxi = 3006 + INTEGER(IntKi), PARAMETER :: M2N1FAMxi = 3007 + INTEGER(IntKi), PARAMETER :: M2N2FAMxi = 3008 + INTEGER(IntKi), PARAMETER :: M2N3FAMxi = 3009 + INTEGER(IntKi), PARAMETER :: M2N4FAMxi = 3010 + INTEGER(IntKi), PARAMETER :: M2N5FAMxi = 3011 + INTEGER(IntKi), PARAMETER :: M2N6FAMxi = 3012 + INTEGER(IntKi), PARAMETER :: M2N7FAMxi = 3013 + INTEGER(IntKi), PARAMETER :: M2N8FAMxi = 3014 + INTEGER(IntKi), PARAMETER :: M2N9FAMxi = 3015 + INTEGER(IntKi), PARAMETER :: M3N1FAMxi = 3016 + INTEGER(IntKi), PARAMETER :: M3N2FAMxi = 3017 + INTEGER(IntKi), PARAMETER :: M3N3FAMxi = 3018 + INTEGER(IntKi), PARAMETER :: M3N4FAMxi = 3019 + INTEGER(IntKi), PARAMETER :: M3N5FAMxi = 3020 + INTEGER(IntKi), PARAMETER :: M3N6FAMxi = 3021 + INTEGER(IntKi), PARAMETER :: M3N7FAMxi = 3022 + INTEGER(IntKi), PARAMETER :: M3N8FAMxi = 3023 + INTEGER(IntKi), PARAMETER :: M3N9FAMxi = 3024 + INTEGER(IntKi), PARAMETER :: M4N1FAMxi = 3025 + INTEGER(IntKi), PARAMETER :: M4N2FAMxi = 3026 + INTEGER(IntKi), PARAMETER :: M4N3FAMxi = 3027 + INTEGER(IntKi), PARAMETER :: M4N4FAMxi = 3028 + INTEGER(IntKi), PARAMETER :: M4N5FAMxi = 3029 + INTEGER(IntKi), PARAMETER :: M4N6FAMxi = 3030 + INTEGER(IntKi), PARAMETER :: M4N7FAMxi = 3031 + INTEGER(IntKi), PARAMETER :: M4N8FAMxi = 3032 + INTEGER(IntKi), PARAMETER :: M4N9FAMxi = 3033 + INTEGER(IntKi), PARAMETER :: M5N1FAMxi = 3034 + INTEGER(IntKi), PARAMETER :: M5N2FAMxi = 3035 + INTEGER(IntKi), PARAMETER :: M5N3FAMxi = 3036 + INTEGER(IntKi), PARAMETER :: M5N4FAMxi = 3037 + INTEGER(IntKi), PARAMETER :: M5N5FAMxi = 3038 + INTEGER(IntKi), PARAMETER :: M5N6FAMxi = 3039 + INTEGER(IntKi), PARAMETER :: M5N7FAMxi = 3040 + INTEGER(IntKi), PARAMETER :: M5N8FAMxi = 3041 + INTEGER(IntKi), PARAMETER :: M5N9FAMxi = 3042 + INTEGER(IntKi), PARAMETER :: M6N1FAMxi = 3043 + INTEGER(IntKi), PARAMETER :: M6N2FAMxi = 3044 + INTEGER(IntKi), PARAMETER :: M6N3FAMxi = 3045 + INTEGER(IntKi), PARAMETER :: M6N4FAMxi = 3046 + INTEGER(IntKi), PARAMETER :: M6N5FAMxi = 3047 + INTEGER(IntKi), PARAMETER :: M6N6FAMxi = 3048 + INTEGER(IntKi), PARAMETER :: M6N7FAMxi = 3049 + INTEGER(IntKi), PARAMETER :: M6N8FAMxi = 3050 + INTEGER(IntKi), PARAMETER :: M6N9FAMxi = 3051 + INTEGER(IntKi), PARAMETER :: M7N1FAMxi = 3052 + INTEGER(IntKi), PARAMETER :: M7N2FAMxi = 3053 + INTEGER(IntKi), PARAMETER :: M7N3FAMxi = 3054 + INTEGER(IntKi), PARAMETER :: M7N4FAMxi = 3055 + INTEGER(IntKi), PARAMETER :: M7N5FAMxi = 3056 + INTEGER(IntKi), PARAMETER :: M7N6FAMxi = 3057 + INTEGER(IntKi), PARAMETER :: M7N7FAMxi = 3058 + INTEGER(IntKi), PARAMETER :: M7N8FAMxi = 3059 + INTEGER(IntKi), PARAMETER :: M7N9FAMxi = 3060 + INTEGER(IntKi), PARAMETER :: M8N1FAMxi = 3061 + INTEGER(IntKi), PARAMETER :: M8N2FAMxi = 3062 + INTEGER(IntKi), PARAMETER :: M8N3FAMxi = 3063 + INTEGER(IntKi), PARAMETER :: M8N4FAMxi = 3064 + INTEGER(IntKi), PARAMETER :: M8N5FAMxi = 3065 + INTEGER(IntKi), PARAMETER :: M8N6FAMxi = 3066 + INTEGER(IntKi), PARAMETER :: M8N7FAMxi = 3067 + INTEGER(IntKi), PARAMETER :: M8N8FAMxi = 3068 + INTEGER(IntKi), PARAMETER :: M8N9FAMxi = 3069 + INTEGER(IntKi), PARAMETER :: M9N1FAMxi = 3070 + INTEGER(IntKi), PARAMETER :: M9N2FAMxi = 3071 + INTEGER(IntKi), PARAMETER :: M9N3FAMxi = 3072 + INTEGER(IntKi), PARAMETER :: M9N4FAMxi = 3073 + INTEGER(IntKi), PARAMETER :: M9N5FAMxi = 3074 + INTEGER(IntKi), PARAMETER :: M9N6FAMxi = 3075 + INTEGER(IntKi), PARAMETER :: M9N7FAMxi = 3076 + INTEGER(IntKi), PARAMETER :: M9N8FAMxi = 3077 + INTEGER(IntKi), PARAMETER :: M9N9FAMxi = 3078 + INTEGER(IntKi), PARAMETER :: M1N1FAMyi = 3079 + INTEGER(IntKi), PARAMETER :: M1N2FAMyi = 3080 + INTEGER(IntKi), PARAMETER :: M1N3FAMyi = 3081 + INTEGER(IntKi), PARAMETER :: M1N4FAMyi = 3082 + INTEGER(IntKi), PARAMETER :: M1N5FAMyi = 3083 + INTEGER(IntKi), PARAMETER :: M1N6FAMyi = 3084 + INTEGER(IntKi), PARAMETER :: M1N7FAMyi = 3085 + INTEGER(IntKi), PARAMETER :: M1N8FAMyi = 3086 + INTEGER(IntKi), PARAMETER :: M1N9FAMyi = 3087 + INTEGER(IntKi), PARAMETER :: M2N1FAMyi = 3088 + INTEGER(IntKi), PARAMETER :: M2N2FAMyi = 3089 + INTEGER(IntKi), PARAMETER :: M2N3FAMyi = 3090 + INTEGER(IntKi), PARAMETER :: M2N4FAMyi = 3091 + INTEGER(IntKi), PARAMETER :: M2N5FAMyi = 3092 + INTEGER(IntKi), PARAMETER :: M2N6FAMyi = 3093 + INTEGER(IntKi), PARAMETER :: M2N7FAMyi = 3094 + INTEGER(IntKi), PARAMETER :: M2N8FAMyi = 3095 + INTEGER(IntKi), PARAMETER :: M2N9FAMyi = 3096 + INTEGER(IntKi), PARAMETER :: M3N1FAMyi = 3097 + INTEGER(IntKi), PARAMETER :: M3N2FAMyi = 3098 + INTEGER(IntKi), PARAMETER :: M3N3FAMyi = 3099 + INTEGER(IntKi), PARAMETER :: M3N4FAMyi = 3100 + INTEGER(IntKi), PARAMETER :: M3N5FAMyi = 3101 + INTEGER(IntKi), PARAMETER :: M3N6FAMyi = 3102 + INTEGER(IntKi), PARAMETER :: M3N7FAMyi = 3103 + INTEGER(IntKi), PARAMETER :: M3N8FAMyi = 3104 + INTEGER(IntKi), PARAMETER :: M3N9FAMyi = 3105 + INTEGER(IntKi), PARAMETER :: M4N1FAMyi = 3106 + INTEGER(IntKi), PARAMETER :: M4N2FAMyi = 3107 + INTEGER(IntKi), PARAMETER :: M4N3FAMyi = 3108 + INTEGER(IntKi), PARAMETER :: M4N4FAMyi = 3109 + INTEGER(IntKi), PARAMETER :: M4N5FAMyi = 3110 + INTEGER(IntKi), PARAMETER :: M4N6FAMyi = 3111 + INTEGER(IntKi), PARAMETER :: M4N7FAMyi = 3112 + INTEGER(IntKi), PARAMETER :: M4N8FAMyi = 3113 + INTEGER(IntKi), PARAMETER :: M4N9FAMyi = 3114 + INTEGER(IntKi), PARAMETER :: M5N1FAMyi = 3115 + INTEGER(IntKi), PARAMETER :: M5N2FAMyi = 3116 + INTEGER(IntKi), PARAMETER :: M5N3FAMyi = 3117 + INTEGER(IntKi), PARAMETER :: M5N4FAMyi = 3118 + INTEGER(IntKi), PARAMETER :: M5N5FAMyi = 3119 + INTEGER(IntKi), PARAMETER :: M5N6FAMyi = 3120 + INTEGER(IntKi), PARAMETER :: M5N7FAMyi = 3121 + INTEGER(IntKi), PARAMETER :: M5N8FAMyi = 3122 + INTEGER(IntKi), PARAMETER :: M5N9FAMyi = 3123 + INTEGER(IntKi), PARAMETER :: M6N1FAMyi = 3124 + INTEGER(IntKi), PARAMETER :: M6N2FAMyi = 3125 + INTEGER(IntKi), PARAMETER :: M6N3FAMyi = 3126 + INTEGER(IntKi), PARAMETER :: M6N4FAMyi = 3127 + INTEGER(IntKi), PARAMETER :: M6N5FAMyi = 3128 + INTEGER(IntKi), PARAMETER :: M6N6FAMyi = 3129 + INTEGER(IntKi), PARAMETER :: M6N7FAMyi = 3130 + INTEGER(IntKi), PARAMETER :: M6N8FAMyi = 3131 + INTEGER(IntKi), PARAMETER :: M6N9FAMyi = 3132 + INTEGER(IntKi), PARAMETER :: M7N1FAMyi = 3133 + INTEGER(IntKi), PARAMETER :: M7N2FAMyi = 3134 + INTEGER(IntKi), PARAMETER :: M7N3FAMyi = 3135 + INTEGER(IntKi), PARAMETER :: M7N4FAMyi = 3136 + INTEGER(IntKi), PARAMETER :: M7N5FAMyi = 3137 + INTEGER(IntKi), PARAMETER :: M7N6FAMyi = 3138 + INTEGER(IntKi), PARAMETER :: M7N7FAMyi = 3139 + INTEGER(IntKi), PARAMETER :: M7N8FAMyi = 3140 + INTEGER(IntKi), PARAMETER :: M7N9FAMyi = 3141 + INTEGER(IntKi), PARAMETER :: M8N1FAMyi = 3142 + INTEGER(IntKi), PARAMETER :: M8N2FAMyi = 3143 + INTEGER(IntKi), PARAMETER :: M8N3FAMyi = 3144 + INTEGER(IntKi), PARAMETER :: M8N4FAMyi = 3145 + INTEGER(IntKi), PARAMETER :: M8N5FAMyi = 3146 + INTEGER(IntKi), PARAMETER :: M8N6FAMyi = 3147 + INTEGER(IntKi), PARAMETER :: M8N7FAMyi = 3148 + INTEGER(IntKi), PARAMETER :: M8N8FAMyi = 3149 + INTEGER(IntKi), PARAMETER :: M8N9FAMyi = 3150 + INTEGER(IntKi), PARAMETER :: M9N1FAMyi = 3151 + INTEGER(IntKi), PARAMETER :: M9N2FAMyi = 3152 + INTEGER(IntKi), PARAMETER :: M9N3FAMyi = 3153 + INTEGER(IntKi), PARAMETER :: M9N4FAMyi = 3154 + INTEGER(IntKi), PARAMETER :: M9N5FAMyi = 3155 + INTEGER(IntKi), PARAMETER :: M9N6FAMyi = 3156 + INTEGER(IntKi), PARAMETER :: M9N7FAMyi = 3157 + INTEGER(IntKi), PARAMETER :: M9N8FAMyi = 3158 + INTEGER(IntKi), PARAMETER :: M9N9FAMyi = 3159 + INTEGER(IntKi), PARAMETER :: M1N1FAMzi = 3160 + INTEGER(IntKi), PARAMETER :: M1N2FAMzi = 3161 + INTEGER(IntKi), PARAMETER :: M1N3FAMzi = 3162 + INTEGER(IntKi), PARAMETER :: M1N4FAMzi = 3163 + INTEGER(IntKi), PARAMETER :: M1N5FAMzi = 3164 + INTEGER(IntKi), PARAMETER :: M1N6FAMzi = 3165 + INTEGER(IntKi), PARAMETER :: M1N7FAMzi = 3166 + INTEGER(IntKi), PARAMETER :: M1N8FAMzi = 3167 + INTEGER(IntKi), PARAMETER :: M1N9FAMzi = 3168 + INTEGER(IntKi), PARAMETER :: M2N1FAMzi = 3169 + INTEGER(IntKi), PARAMETER :: M2N2FAMzi = 3170 + INTEGER(IntKi), PARAMETER :: M2N3FAMzi = 3171 + INTEGER(IntKi), PARAMETER :: M2N4FAMzi = 3172 + INTEGER(IntKi), PARAMETER :: M2N5FAMzi = 3173 + INTEGER(IntKi), PARAMETER :: M2N6FAMzi = 3174 + INTEGER(IntKi), PARAMETER :: M2N7FAMzi = 3175 + INTEGER(IntKi), PARAMETER :: M2N8FAMzi = 3176 + INTEGER(IntKi), PARAMETER :: M2N9FAMzi = 3177 + INTEGER(IntKi), PARAMETER :: M3N1FAMzi = 3178 + INTEGER(IntKi), PARAMETER :: M3N2FAMzi = 3179 + INTEGER(IntKi), PARAMETER :: M3N3FAMzi = 3180 + INTEGER(IntKi), PARAMETER :: M3N4FAMzi = 3181 + INTEGER(IntKi), PARAMETER :: M3N5FAMzi = 3182 + INTEGER(IntKi), PARAMETER :: M3N6FAMzi = 3183 + INTEGER(IntKi), PARAMETER :: M3N7FAMzi = 3184 + INTEGER(IntKi), PARAMETER :: M3N8FAMzi = 3185 + INTEGER(IntKi), PARAMETER :: M3N9FAMzi = 3186 + INTEGER(IntKi), PARAMETER :: M4N1FAMzi = 3187 + INTEGER(IntKi), PARAMETER :: M4N2FAMzi = 3188 + INTEGER(IntKi), PARAMETER :: M4N3FAMzi = 3189 + INTEGER(IntKi), PARAMETER :: M4N4FAMzi = 3190 + INTEGER(IntKi), PARAMETER :: M4N5FAMzi = 3191 + INTEGER(IntKi), PARAMETER :: M4N6FAMzi = 3192 + INTEGER(IntKi), PARAMETER :: M4N7FAMzi = 3193 + INTEGER(IntKi), PARAMETER :: M4N8FAMzi = 3194 + INTEGER(IntKi), PARAMETER :: M4N9FAMzi = 3195 + INTEGER(IntKi), PARAMETER :: M5N1FAMzi = 3196 + INTEGER(IntKi), PARAMETER :: M5N2FAMzi = 3197 + INTEGER(IntKi), PARAMETER :: M5N3FAMzi = 3198 + INTEGER(IntKi), PARAMETER :: M5N4FAMzi = 3199 + INTEGER(IntKi), PARAMETER :: M5N5FAMzi = 3200 + INTEGER(IntKi), PARAMETER :: M5N6FAMzi = 3201 + INTEGER(IntKi), PARAMETER :: M5N7FAMzi = 3202 + INTEGER(IntKi), PARAMETER :: M5N8FAMzi = 3203 + INTEGER(IntKi), PARAMETER :: M5N9FAMzi = 3204 + INTEGER(IntKi), PARAMETER :: M6N1FAMzi = 3205 + INTEGER(IntKi), PARAMETER :: M6N2FAMzi = 3206 + INTEGER(IntKi), PARAMETER :: M6N3FAMzi = 3207 + INTEGER(IntKi), PARAMETER :: M6N4FAMzi = 3208 + INTEGER(IntKi), PARAMETER :: M6N5FAMzi = 3209 + INTEGER(IntKi), PARAMETER :: M6N6FAMzi = 3210 + INTEGER(IntKi), PARAMETER :: M6N7FAMzi = 3211 + INTEGER(IntKi), PARAMETER :: M6N8FAMzi = 3212 + INTEGER(IntKi), PARAMETER :: M6N9FAMzi = 3213 + INTEGER(IntKi), PARAMETER :: M7N1FAMzi = 3214 + INTEGER(IntKi), PARAMETER :: M7N2FAMzi = 3215 + INTEGER(IntKi), PARAMETER :: M7N3FAMzi = 3216 + INTEGER(IntKi), PARAMETER :: M7N4FAMzi = 3217 + INTEGER(IntKi), PARAMETER :: M7N5FAMzi = 3218 + INTEGER(IntKi), PARAMETER :: M7N6FAMzi = 3219 + INTEGER(IntKi), PARAMETER :: M7N7FAMzi = 3220 + INTEGER(IntKi), PARAMETER :: M7N8FAMzi = 3221 + INTEGER(IntKi), PARAMETER :: M7N9FAMzi = 3222 + INTEGER(IntKi), PARAMETER :: M8N1FAMzi = 3223 + INTEGER(IntKi), PARAMETER :: M8N2FAMzi = 3224 + INTEGER(IntKi), PARAMETER :: M8N3FAMzi = 3225 + INTEGER(IntKi), PARAMETER :: M8N4FAMzi = 3226 + INTEGER(IntKi), PARAMETER :: M8N5FAMzi = 3227 + INTEGER(IntKi), PARAMETER :: M8N6FAMzi = 3228 + INTEGER(IntKi), PARAMETER :: M8N7FAMzi = 3229 + INTEGER(IntKi), PARAMETER :: M8N8FAMzi = 3230 + INTEGER(IntKi), PARAMETER :: M8N9FAMzi = 3231 + INTEGER(IntKi), PARAMETER :: M9N1FAMzi = 3232 + INTEGER(IntKi), PARAMETER :: M9N2FAMzi = 3233 + INTEGER(IntKi), PARAMETER :: M9N3FAMzi = 3234 + INTEGER(IntKi), PARAMETER :: M9N4FAMzi = 3235 + INTEGER(IntKi), PARAMETER :: M9N5FAMzi = 3236 + INTEGER(IntKi), PARAMETER :: M9N6FAMzi = 3237 + INTEGER(IntKi), PARAMETER :: M9N7FAMzi = 3238 + INTEGER(IntKi), PARAMETER :: M9N8FAMzi = 3239 + INTEGER(IntKi), PARAMETER :: M9N9FAMzi = 3240 + INTEGER(IntKi), PARAMETER :: M1N1FAGxi = 3241 + INTEGER(IntKi), PARAMETER :: M1N2FAGxi = 3242 + INTEGER(IntKi), PARAMETER :: M1N3FAGxi = 3243 + INTEGER(IntKi), PARAMETER :: M1N4FAGxi = 3244 + INTEGER(IntKi), PARAMETER :: M1N5FAGxi = 3245 + INTEGER(IntKi), PARAMETER :: M1N6FAGxi = 3246 + INTEGER(IntKi), PARAMETER :: M1N7FAGxi = 3247 + INTEGER(IntKi), PARAMETER :: M1N8FAGxi = 3248 + INTEGER(IntKi), PARAMETER :: M1N9FAGxi = 3249 + INTEGER(IntKi), PARAMETER :: M2N1FAGxi = 3250 + INTEGER(IntKi), PARAMETER :: M2N2FAGxi = 3251 + INTEGER(IntKi), PARAMETER :: M2N3FAGxi = 3252 + INTEGER(IntKi), PARAMETER :: M2N4FAGxi = 3253 + INTEGER(IntKi), PARAMETER :: M2N5FAGxi = 3254 + INTEGER(IntKi), PARAMETER :: M2N6FAGxi = 3255 + INTEGER(IntKi), PARAMETER :: M2N7FAGxi = 3256 + INTEGER(IntKi), PARAMETER :: M2N8FAGxi = 3257 + INTEGER(IntKi), PARAMETER :: M2N9FAGxi = 3258 + INTEGER(IntKi), PARAMETER :: M3N1FAGxi = 3259 + INTEGER(IntKi), PARAMETER :: M3N2FAGxi = 3260 + INTEGER(IntKi), PARAMETER :: M3N3FAGxi = 3261 + INTEGER(IntKi), PARAMETER :: M3N4FAGxi = 3262 + INTEGER(IntKi), PARAMETER :: M3N5FAGxi = 3263 + INTEGER(IntKi), PARAMETER :: M3N6FAGxi = 3264 + INTEGER(IntKi), PARAMETER :: M3N7FAGxi = 3265 + INTEGER(IntKi), PARAMETER :: M3N8FAGxi = 3266 + INTEGER(IntKi), PARAMETER :: M3N9FAGxi = 3267 + INTEGER(IntKi), PARAMETER :: M4N1FAGxi = 3268 + INTEGER(IntKi), PARAMETER :: M4N2FAGxi = 3269 + INTEGER(IntKi), PARAMETER :: M4N3FAGxi = 3270 + INTEGER(IntKi), PARAMETER :: M4N4FAGxi = 3271 + INTEGER(IntKi), PARAMETER :: M4N5FAGxi = 3272 + INTEGER(IntKi), PARAMETER :: M4N6FAGxi = 3273 + INTEGER(IntKi), PARAMETER :: M4N7FAGxi = 3274 + INTEGER(IntKi), PARAMETER :: M4N8FAGxi = 3275 + INTEGER(IntKi), PARAMETER :: M4N9FAGxi = 3276 + INTEGER(IntKi), PARAMETER :: M5N1FAGxi = 3277 + INTEGER(IntKi), PARAMETER :: M5N2FAGxi = 3278 + INTEGER(IntKi), PARAMETER :: M5N3FAGxi = 3279 + INTEGER(IntKi), PARAMETER :: M5N4FAGxi = 3280 + INTEGER(IntKi), PARAMETER :: M5N5FAGxi = 3281 + INTEGER(IntKi), PARAMETER :: M5N6FAGxi = 3282 + INTEGER(IntKi), PARAMETER :: M5N7FAGxi = 3283 + INTEGER(IntKi), PARAMETER :: M5N8FAGxi = 3284 + INTEGER(IntKi), PARAMETER :: M5N9FAGxi = 3285 + INTEGER(IntKi), PARAMETER :: M6N1FAGxi = 3286 + INTEGER(IntKi), PARAMETER :: M6N2FAGxi = 3287 + INTEGER(IntKi), PARAMETER :: M6N3FAGxi = 3288 + INTEGER(IntKi), PARAMETER :: M6N4FAGxi = 3289 + INTEGER(IntKi), PARAMETER :: M6N5FAGxi = 3290 + INTEGER(IntKi), PARAMETER :: M6N6FAGxi = 3291 + INTEGER(IntKi), PARAMETER :: M6N7FAGxi = 3292 + INTEGER(IntKi), PARAMETER :: M6N8FAGxi = 3293 + INTEGER(IntKi), PARAMETER :: M6N9FAGxi = 3294 + INTEGER(IntKi), PARAMETER :: M7N1FAGxi = 3295 + INTEGER(IntKi), PARAMETER :: M7N2FAGxi = 3296 + INTEGER(IntKi), PARAMETER :: M7N3FAGxi = 3297 + INTEGER(IntKi), PARAMETER :: M7N4FAGxi = 3298 + INTEGER(IntKi), PARAMETER :: M7N5FAGxi = 3299 + INTEGER(IntKi), PARAMETER :: M7N6FAGxi = 3300 + INTEGER(IntKi), PARAMETER :: M7N7FAGxi = 3301 + INTEGER(IntKi), PARAMETER :: M7N8FAGxi = 3302 + INTEGER(IntKi), PARAMETER :: M7N9FAGxi = 3303 + INTEGER(IntKi), PARAMETER :: M8N1FAGxi = 3304 + INTEGER(IntKi), PARAMETER :: M8N2FAGxi = 3305 + INTEGER(IntKi), PARAMETER :: M8N3FAGxi = 3306 + INTEGER(IntKi), PARAMETER :: M8N4FAGxi = 3307 + INTEGER(IntKi), PARAMETER :: M8N5FAGxi = 3308 + INTEGER(IntKi), PARAMETER :: M8N6FAGxi = 3309 + INTEGER(IntKi), PARAMETER :: M8N7FAGxi = 3310 + INTEGER(IntKi), PARAMETER :: M8N8FAGxi = 3311 + INTEGER(IntKi), PARAMETER :: M8N9FAGxi = 3312 + INTEGER(IntKi), PARAMETER :: M9N1FAGxi = 3313 + INTEGER(IntKi), PARAMETER :: M9N2FAGxi = 3314 + INTEGER(IntKi), PARAMETER :: M9N3FAGxi = 3315 + INTEGER(IntKi), PARAMETER :: M9N4FAGxi = 3316 + INTEGER(IntKi), PARAMETER :: M9N5FAGxi = 3317 + INTEGER(IntKi), PARAMETER :: M9N6FAGxi = 3318 + INTEGER(IntKi), PARAMETER :: M9N7FAGxi = 3319 + INTEGER(IntKi), PARAMETER :: M9N8FAGxi = 3320 + INTEGER(IntKi), PARAMETER :: M9N9FAGxi = 3321 + INTEGER(IntKi), PARAMETER :: M1N1FAGyi = 3322 + INTEGER(IntKi), PARAMETER :: M1N2FAGyi = 3323 + INTEGER(IntKi), PARAMETER :: M1N3FAGyi = 3324 + INTEGER(IntKi), PARAMETER :: M1N4FAGyi = 3325 + INTEGER(IntKi), PARAMETER :: M1N5FAGyi = 3326 + INTEGER(IntKi), PARAMETER :: M1N6FAGyi = 3327 + INTEGER(IntKi), PARAMETER :: M1N7FAGyi = 3328 + INTEGER(IntKi), PARAMETER :: M1N8FAGyi = 3329 + INTEGER(IntKi), PARAMETER :: M1N9FAGyi = 3330 + INTEGER(IntKi), PARAMETER :: M2N1FAGyi = 3331 + INTEGER(IntKi), PARAMETER :: M2N2FAGyi = 3332 + INTEGER(IntKi), PARAMETER :: M2N3FAGyi = 3333 + INTEGER(IntKi), PARAMETER :: M2N4FAGyi = 3334 + INTEGER(IntKi), PARAMETER :: M2N5FAGyi = 3335 + INTEGER(IntKi), PARAMETER :: M2N6FAGyi = 3336 + INTEGER(IntKi), PARAMETER :: M2N7FAGyi = 3337 + INTEGER(IntKi), PARAMETER :: M2N8FAGyi = 3338 + INTEGER(IntKi), PARAMETER :: M2N9FAGyi = 3339 + INTEGER(IntKi), PARAMETER :: M3N1FAGyi = 3340 + INTEGER(IntKi), PARAMETER :: M3N2FAGyi = 3341 + INTEGER(IntKi), PARAMETER :: M3N3FAGyi = 3342 + INTEGER(IntKi), PARAMETER :: M3N4FAGyi = 3343 + INTEGER(IntKi), PARAMETER :: M3N5FAGyi = 3344 + INTEGER(IntKi), PARAMETER :: M3N6FAGyi = 3345 + INTEGER(IntKi), PARAMETER :: M3N7FAGyi = 3346 + INTEGER(IntKi), PARAMETER :: M3N8FAGyi = 3347 + INTEGER(IntKi), PARAMETER :: M3N9FAGyi = 3348 + INTEGER(IntKi), PARAMETER :: M4N1FAGyi = 3349 + INTEGER(IntKi), PARAMETER :: M4N2FAGyi = 3350 + INTEGER(IntKi), PARAMETER :: M4N3FAGyi = 3351 + INTEGER(IntKi), PARAMETER :: M4N4FAGyi = 3352 + INTEGER(IntKi), PARAMETER :: M4N5FAGyi = 3353 + INTEGER(IntKi), PARAMETER :: M4N6FAGyi = 3354 + INTEGER(IntKi), PARAMETER :: M4N7FAGyi = 3355 + INTEGER(IntKi), PARAMETER :: M4N8FAGyi = 3356 + INTEGER(IntKi), PARAMETER :: M4N9FAGyi = 3357 + INTEGER(IntKi), PARAMETER :: M5N1FAGyi = 3358 + INTEGER(IntKi), PARAMETER :: M5N2FAGyi = 3359 + INTEGER(IntKi), PARAMETER :: M5N3FAGyi = 3360 + INTEGER(IntKi), PARAMETER :: M5N4FAGyi = 3361 + INTEGER(IntKi), PARAMETER :: M5N5FAGyi = 3362 + INTEGER(IntKi), PARAMETER :: M5N6FAGyi = 3363 + INTEGER(IntKi), PARAMETER :: M5N7FAGyi = 3364 + INTEGER(IntKi), PARAMETER :: M5N8FAGyi = 3365 + INTEGER(IntKi), PARAMETER :: M5N9FAGyi = 3366 + INTEGER(IntKi), PARAMETER :: M6N1FAGyi = 3367 + INTEGER(IntKi), PARAMETER :: M6N2FAGyi = 3368 + INTEGER(IntKi), PARAMETER :: M6N3FAGyi = 3369 + INTEGER(IntKi), PARAMETER :: M6N4FAGyi = 3370 + INTEGER(IntKi), PARAMETER :: M6N5FAGyi = 3371 + INTEGER(IntKi), PARAMETER :: M6N6FAGyi = 3372 + INTEGER(IntKi), PARAMETER :: M6N7FAGyi = 3373 + INTEGER(IntKi), PARAMETER :: M6N8FAGyi = 3374 + INTEGER(IntKi), PARAMETER :: M6N9FAGyi = 3375 + INTEGER(IntKi), PARAMETER :: M7N1FAGyi = 3376 + INTEGER(IntKi), PARAMETER :: M7N2FAGyi = 3377 + INTEGER(IntKi), PARAMETER :: M7N3FAGyi = 3378 + INTEGER(IntKi), PARAMETER :: M7N4FAGyi = 3379 + INTEGER(IntKi), PARAMETER :: M7N5FAGyi = 3380 + INTEGER(IntKi), PARAMETER :: M7N6FAGyi = 3381 + INTEGER(IntKi), PARAMETER :: M7N7FAGyi = 3382 + INTEGER(IntKi), PARAMETER :: M7N8FAGyi = 3383 + INTEGER(IntKi), PARAMETER :: M7N9FAGyi = 3384 + INTEGER(IntKi), PARAMETER :: M8N1FAGyi = 3385 + INTEGER(IntKi), PARAMETER :: M8N2FAGyi = 3386 + INTEGER(IntKi), PARAMETER :: M8N3FAGyi = 3387 + INTEGER(IntKi), PARAMETER :: M8N4FAGyi = 3388 + INTEGER(IntKi), PARAMETER :: M8N5FAGyi = 3389 + INTEGER(IntKi), PARAMETER :: M8N6FAGyi = 3390 + INTEGER(IntKi), PARAMETER :: M8N7FAGyi = 3391 + INTEGER(IntKi), PARAMETER :: M8N8FAGyi = 3392 + INTEGER(IntKi), PARAMETER :: M8N9FAGyi = 3393 + INTEGER(IntKi), PARAMETER :: M9N1FAGyi = 3394 + INTEGER(IntKi), PARAMETER :: M9N2FAGyi = 3395 + INTEGER(IntKi), PARAMETER :: M9N3FAGyi = 3396 + INTEGER(IntKi), PARAMETER :: M9N4FAGyi = 3397 + INTEGER(IntKi), PARAMETER :: M9N5FAGyi = 3398 + INTEGER(IntKi), PARAMETER :: M9N6FAGyi = 3399 + INTEGER(IntKi), PARAMETER :: M9N7FAGyi = 3400 + INTEGER(IntKi), PARAMETER :: M9N8FAGyi = 3401 + INTEGER(IntKi), PARAMETER :: M9N9FAGyi = 3402 + INTEGER(IntKi), PARAMETER :: M1N1FAGzi = 3403 + INTEGER(IntKi), PARAMETER :: M1N2FAGzi = 3404 + INTEGER(IntKi), PARAMETER :: M1N3FAGzi = 3405 + INTEGER(IntKi), PARAMETER :: M1N4FAGzi = 3406 + INTEGER(IntKi), PARAMETER :: M1N5FAGzi = 3407 + INTEGER(IntKi), PARAMETER :: M1N6FAGzi = 3408 + INTEGER(IntKi), PARAMETER :: M1N7FAGzi = 3409 + INTEGER(IntKi), PARAMETER :: M1N8FAGzi = 3410 + INTEGER(IntKi), PARAMETER :: M1N9FAGzi = 3411 + INTEGER(IntKi), PARAMETER :: M2N1FAGzi = 3412 + INTEGER(IntKi), PARAMETER :: M2N2FAGzi = 3413 + INTEGER(IntKi), PARAMETER :: M2N3FAGzi = 3414 + INTEGER(IntKi), PARAMETER :: M2N4FAGzi = 3415 + INTEGER(IntKi), PARAMETER :: M2N5FAGzi = 3416 + INTEGER(IntKi), PARAMETER :: M2N6FAGzi = 3417 + INTEGER(IntKi), PARAMETER :: M2N7FAGzi = 3418 + INTEGER(IntKi), PARAMETER :: M2N8FAGzi = 3419 + INTEGER(IntKi), PARAMETER :: M2N9FAGzi = 3420 + INTEGER(IntKi), PARAMETER :: M3N1FAGzi = 3421 + INTEGER(IntKi), PARAMETER :: M3N2FAGzi = 3422 + INTEGER(IntKi), PARAMETER :: M3N3FAGzi = 3423 + INTEGER(IntKi), PARAMETER :: M3N4FAGzi = 3424 + INTEGER(IntKi), PARAMETER :: M3N5FAGzi = 3425 + INTEGER(IntKi), PARAMETER :: M3N6FAGzi = 3426 + INTEGER(IntKi), PARAMETER :: M3N7FAGzi = 3427 + INTEGER(IntKi), PARAMETER :: M3N8FAGzi = 3428 + INTEGER(IntKi), PARAMETER :: M3N9FAGzi = 3429 + INTEGER(IntKi), PARAMETER :: M4N1FAGzi = 3430 + INTEGER(IntKi), PARAMETER :: M4N2FAGzi = 3431 + INTEGER(IntKi), PARAMETER :: M4N3FAGzi = 3432 + INTEGER(IntKi), PARAMETER :: M4N4FAGzi = 3433 + INTEGER(IntKi), PARAMETER :: M4N5FAGzi = 3434 + INTEGER(IntKi), PARAMETER :: M4N6FAGzi = 3435 + INTEGER(IntKi), PARAMETER :: M4N7FAGzi = 3436 + INTEGER(IntKi), PARAMETER :: M4N8FAGzi = 3437 + INTEGER(IntKi), PARAMETER :: M4N9FAGzi = 3438 + INTEGER(IntKi), PARAMETER :: M5N1FAGzi = 3439 + INTEGER(IntKi), PARAMETER :: M5N2FAGzi = 3440 + INTEGER(IntKi), PARAMETER :: M5N3FAGzi = 3441 + INTEGER(IntKi), PARAMETER :: M5N4FAGzi = 3442 + INTEGER(IntKi), PARAMETER :: M5N5FAGzi = 3443 + INTEGER(IntKi), PARAMETER :: M5N6FAGzi = 3444 + INTEGER(IntKi), PARAMETER :: M5N7FAGzi = 3445 + INTEGER(IntKi), PARAMETER :: M5N8FAGzi = 3446 + INTEGER(IntKi), PARAMETER :: M5N9FAGzi = 3447 + INTEGER(IntKi), PARAMETER :: M6N1FAGzi = 3448 + INTEGER(IntKi), PARAMETER :: M6N2FAGzi = 3449 + INTEGER(IntKi), PARAMETER :: M6N3FAGzi = 3450 + INTEGER(IntKi), PARAMETER :: M6N4FAGzi = 3451 + INTEGER(IntKi), PARAMETER :: M6N5FAGzi = 3452 + INTEGER(IntKi), PARAMETER :: M6N6FAGzi = 3453 + INTEGER(IntKi), PARAMETER :: M6N7FAGzi = 3454 + INTEGER(IntKi), PARAMETER :: M6N8FAGzi = 3455 + INTEGER(IntKi), PARAMETER :: M6N9FAGzi = 3456 + INTEGER(IntKi), PARAMETER :: M7N1FAGzi = 3457 + INTEGER(IntKi), PARAMETER :: M7N2FAGzi = 3458 + INTEGER(IntKi), PARAMETER :: M7N3FAGzi = 3459 + INTEGER(IntKi), PARAMETER :: M7N4FAGzi = 3460 + INTEGER(IntKi), PARAMETER :: M7N5FAGzi = 3461 + INTEGER(IntKi), PARAMETER :: M7N6FAGzi = 3462 + INTEGER(IntKi), PARAMETER :: M7N7FAGzi = 3463 + INTEGER(IntKi), PARAMETER :: M7N8FAGzi = 3464 + INTEGER(IntKi), PARAMETER :: M7N9FAGzi = 3465 + INTEGER(IntKi), PARAMETER :: M8N1FAGzi = 3466 + INTEGER(IntKi), PARAMETER :: M8N2FAGzi = 3467 + INTEGER(IntKi), PARAMETER :: M8N3FAGzi = 3468 + INTEGER(IntKi), PARAMETER :: M8N4FAGzi = 3469 + INTEGER(IntKi), PARAMETER :: M8N5FAGzi = 3470 + INTEGER(IntKi), PARAMETER :: M8N6FAGzi = 3471 + INTEGER(IntKi), PARAMETER :: M8N7FAGzi = 3472 + INTEGER(IntKi), PARAMETER :: M8N8FAGzi = 3473 + INTEGER(IntKi), PARAMETER :: M8N9FAGzi = 3474 + INTEGER(IntKi), PARAMETER :: M9N1FAGzi = 3475 + INTEGER(IntKi), PARAMETER :: M9N2FAGzi = 3476 + INTEGER(IntKi), PARAMETER :: M9N3FAGzi = 3477 + INTEGER(IntKi), PARAMETER :: M9N4FAGzi = 3478 + INTEGER(IntKi), PARAMETER :: M9N5FAGzi = 3479 + INTEGER(IntKi), PARAMETER :: M9N6FAGzi = 3480 + INTEGER(IntKi), PARAMETER :: M9N7FAGzi = 3481 + INTEGER(IntKi), PARAMETER :: M9N8FAGzi = 3482 + INTEGER(IntKi), PARAMETER :: M9N9FAGzi = 3483 + INTEGER(IntKi), PARAMETER :: M1N1MAGxi = 3484 + INTEGER(IntKi), PARAMETER :: M1N2MAGxi = 3485 + INTEGER(IntKi), PARAMETER :: M1N3MAGxi = 3486 + INTEGER(IntKi), PARAMETER :: M1N4MAGxi = 3487 + INTEGER(IntKi), PARAMETER :: M1N5MAGxi = 3488 + INTEGER(IntKi), PARAMETER :: M1N6MAGxi = 3489 + INTEGER(IntKi), PARAMETER :: M1N7MAGxi = 3490 + INTEGER(IntKi), PARAMETER :: M1N8MAGxi = 3491 + INTEGER(IntKi), PARAMETER :: M1N9MAGxi = 3492 + INTEGER(IntKi), PARAMETER :: M2N1MAGxi = 3493 + INTEGER(IntKi), PARAMETER :: M2N2MAGxi = 3494 + INTEGER(IntKi), PARAMETER :: M2N3MAGxi = 3495 + INTEGER(IntKi), PARAMETER :: M2N4MAGxi = 3496 + INTEGER(IntKi), PARAMETER :: M2N5MAGxi = 3497 + INTEGER(IntKi), PARAMETER :: M2N6MAGxi = 3498 + INTEGER(IntKi), PARAMETER :: M2N7MAGxi = 3499 + INTEGER(IntKi), PARAMETER :: M2N8MAGxi = 3500 + INTEGER(IntKi), PARAMETER :: M2N9MAGxi = 3501 + INTEGER(IntKi), PARAMETER :: M3N1MAGxi = 3502 + INTEGER(IntKi), PARAMETER :: M3N2MAGxi = 3503 + INTEGER(IntKi), PARAMETER :: M3N3MAGxi = 3504 + INTEGER(IntKi), PARAMETER :: M3N4MAGxi = 3505 + INTEGER(IntKi), PARAMETER :: M3N5MAGxi = 3506 + INTEGER(IntKi), PARAMETER :: M3N6MAGxi = 3507 + INTEGER(IntKi), PARAMETER :: M3N7MAGxi = 3508 + INTEGER(IntKi), PARAMETER :: M3N8MAGxi = 3509 + INTEGER(IntKi), PARAMETER :: M3N9MAGxi = 3510 + INTEGER(IntKi), PARAMETER :: M4N1MAGxi = 3511 + INTEGER(IntKi), PARAMETER :: M4N2MAGxi = 3512 + INTEGER(IntKi), PARAMETER :: M4N3MAGxi = 3513 + INTEGER(IntKi), PARAMETER :: M4N4MAGxi = 3514 + INTEGER(IntKi), PARAMETER :: M4N5MAGxi = 3515 + INTEGER(IntKi), PARAMETER :: M4N6MAGxi = 3516 + INTEGER(IntKi), PARAMETER :: M4N7MAGxi = 3517 + INTEGER(IntKi), PARAMETER :: M4N8MAGxi = 3518 + INTEGER(IntKi), PARAMETER :: M4N9MAGxi = 3519 + INTEGER(IntKi), PARAMETER :: M5N1MAGxi = 3520 + INTEGER(IntKi), PARAMETER :: M5N2MAGxi = 3521 + INTEGER(IntKi), PARAMETER :: M5N3MAGxi = 3522 + INTEGER(IntKi), PARAMETER :: M5N4MAGxi = 3523 + INTEGER(IntKi), PARAMETER :: M5N5MAGxi = 3524 + INTEGER(IntKi), PARAMETER :: M5N6MAGxi = 3525 + INTEGER(IntKi), PARAMETER :: M5N7MAGxi = 3526 + INTEGER(IntKi), PARAMETER :: M5N8MAGxi = 3527 + INTEGER(IntKi), PARAMETER :: M5N9MAGxi = 3528 + INTEGER(IntKi), PARAMETER :: M6N1MAGxi = 3529 + INTEGER(IntKi), PARAMETER :: M6N2MAGxi = 3530 + INTEGER(IntKi), PARAMETER :: M6N3MAGxi = 3531 + INTEGER(IntKi), PARAMETER :: M6N4MAGxi = 3532 + INTEGER(IntKi), PARAMETER :: M6N5MAGxi = 3533 + INTEGER(IntKi), PARAMETER :: M6N6MAGxi = 3534 + INTEGER(IntKi), PARAMETER :: M6N7MAGxi = 3535 + INTEGER(IntKi), PARAMETER :: M6N8MAGxi = 3536 + INTEGER(IntKi), PARAMETER :: M6N9MAGxi = 3537 + INTEGER(IntKi), PARAMETER :: M7N1MAGxi = 3538 + INTEGER(IntKi), PARAMETER :: M7N2MAGxi = 3539 + INTEGER(IntKi), PARAMETER :: M7N3MAGxi = 3540 + INTEGER(IntKi), PARAMETER :: M7N4MAGxi = 3541 + INTEGER(IntKi), PARAMETER :: M7N5MAGxi = 3542 + INTEGER(IntKi), PARAMETER :: M7N6MAGxi = 3543 + INTEGER(IntKi), PARAMETER :: M7N7MAGxi = 3544 + INTEGER(IntKi), PARAMETER :: M7N8MAGxi = 3545 + INTEGER(IntKi), PARAMETER :: M7N9MAGxi = 3546 + INTEGER(IntKi), PARAMETER :: M8N1MAGxi = 3547 + INTEGER(IntKi), PARAMETER :: M8N2MAGxi = 3548 + INTEGER(IntKi), PARAMETER :: M8N3MAGxi = 3549 + INTEGER(IntKi), PARAMETER :: M8N4MAGxi = 3550 + INTEGER(IntKi), PARAMETER :: M8N5MAGxi = 3551 + INTEGER(IntKi), PARAMETER :: M8N6MAGxi = 3552 + INTEGER(IntKi), PARAMETER :: M8N7MAGxi = 3553 + INTEGER(IntKi), PARAMETER :: M8N8MAGxi = 3554 + INTEGER(IntKi), PARAMETER :: M8N9MAGxi = 3555 + INTEGER(IntKi), PARAMETER :: M9N1MAGxi = 3556 + INTEGER(IntKi), PARAMETER :: M9N2MAGxi = 3557 + INTEGER(IntKi), PARAMETER :: M9N3MAGxi = 3558 + INTEGER(IntKi), PARAMETER :: M9N4MAGxi = 3559 + INTEGER(IntKi), PARAMETER :: M9N5MAGxi = 3560 + INTEGER(IntKi), PARAMETER :: M9N6MAGxi = 3561 + INTEGER(IntKi), PARAMETER :: M9N7MAGxi = 3562 + INTEGER(IntKi), PARAMETER :: M9N8MAGxi = 3563 + INTEGER(IntKi), PARAMETER :: M9N9MAGxi = 3564 + INTEGER(IntKi), PARAMETER :: M1N1MAGyi = 3565 + INTEGER(IntKi), PARAMETER :: M1N2MAGyi = 3566 + INTEGER(IntKi), PARAMETER :: M1N3MAGyi = 3567 + INTEGER(IntKi), PARAMETER :: M1N4MAGyi = 3568 + INTEGER(IntKi), PARAMETER :: M1N5MAGyi = 3569 + INTEGER(IntKi), PARAMETER :: M1N6MAGyi = 3570 + INTEGER(IntKi), PARAMETER :: M1N7MAGyi = 3571 + INTEGER(IntKi), PARAMETER :: M1N8MAGyi = 3572 + INTEGER(IntKi), PARAMETER :: M1N9MAGyi = 3573 + INTEGER(IntKi), PARAMETER :: M2N1MAGyi = 3574 + INTEGER(IntKi), PARAMETER :: M2N2MAGyi = 3575 + INTEGER(IntKi), PARAMETER :: M2N3MAGyi = 3576 + INTEGER(IntKi), PARAMETER :: M2N4MAGyi = 3577 + INTEGER(IntKi), PARAMETER :: M2N5MAGyi = 3578 + INTEGER(IntKi), PARAMETER :: M2N6MAGyi = 3579 + INTEGER(IntKi), PARAMETER :: M2N7MAGyi = 3580 + INTEGER(IntKi), PARAMETER :: M2N8MAGyi = 3581 + INTEGER(IntKi), PARAMETER :: M2N9MAGyi = 3582 + INTEGER(IntKi), PARAMETER :: M3N1MAGyi = 3583 + INTEGER(IntKi), PARAMETER :: M3N2MAGyi = 3584 + INTEGER(IntKi), PARAMETER :: M3N3MAGyi = 3585 + INTEGER(IntKi), PARAMETER :: M3N4MAGyi = 3586 + INTEGER(IntKi), PARAMETER :: M3N5MAGyi = 3587 + INTEGER(IntKi), PARAMETER :: M3N6MAGyi = 3588 + INTEGER(IntKi), PARAMETER :: M3N7MAGyi = 3589 + INTEGER(IntKi), PARAMETER :: M3N8MAGyi = 3590 + INTEGER(IntKi), PARAMETER :: M3N9MAGyi = 3591 + INTEGER(IntKi), PARAMETER :: M4N1MAGyi = 3592 + INTEGER(IntKi), PARAMETER :: M4N2MAGyi = 3593 + INTEGER(IntKi), PARAMETER :: M4N3MAGyi = 3594 + INTEGER(IntKi), PARAMETER :: M4N4MAGyi = 3595 + INTEGER(IntKi), PARAMETER :: M4N5MAGyi = 3596 + INTEGER(IntKi), PARAMETER :: M4N6MAGyi = 3597 + INTEGER(IntKi), PARAMETER :: M4N7MAGyi = 3598 + INTEGER(IntKi), PARAMETER :: M4N8MAGyi = 3599 + INTEGER(IntKi), PARAMETER :: M4N9MAGyi = 3600 + INTEGER(IntKi), PARAMETER :: M5N1MAGyi = 3601 + INTEGER(IntKi), PARAMETER :: M5N2MAGyi = 3602 + INTEGER(IntKi), PARAMETER :: M5N3MAGyi = 3603 + INTEGER(IntKi), PARAMETER :: M5N4MAGyi = 3604 + INTEGER(IntKi), PARAMETER :: M5N5MAGyi = 3605 + INTEGER(IntKi), PARAMETER :: M5N6MAGyi = 3606 + INTEGER(IntKi), PARAMETER :: M5N7MAGyi = 3607 + INTEGER(IntKi), PARAMETER :: M5N8MAGyi = 3608 + INTEGER(IntKi), PARAMETER :: M5N9MAGyi = 3609 + INTEGER(IntKi), PARAMETER :: M6N1MAGyi = 3610 + INTEGER(IntKi), PARAMETER :: M6N2MAGyi = 3611 + INTEGER(IntKi), PARAMETER :: M6N3MAGyi = 3612 + INTEGER(IntKi), PARAMETER :: M6N4MAGyi = 3613 + INTEGER(IntKi), PARAMETER :: M6N5MAGyi = 3614 + INTEGER(IntKi), PARAMETER :: M6N6MAGyi = 3615 + INTEGER(IntKi), PARAMETER :: M6N7MAGyi = 3616 + INTEGER(IntKi), PARAMETER :: M6N8MAGyi = 3617 + INTEGER(IntKi), PARAMETER :: M6N9MAGyi = 3618 + INTEGER(IntKi), PARAMETER :: M7N1MAGyi = 3619 + INTEGER(IntKi), PARAMETER :: M7N2MAGyi = 3620 + INTEGER(IntKi), PARAMETER :: M7N3MAGyi = 3621 + INTEGER(IntKi), PARAMETER :: M7N4MAGyi = 3622 + INTEGER(IntKi), PARAMETER :: M7N5MAGyi = 3623 + INTEGER(IntKi), PARAMETER :: M7N6MAGyi = 3624 + INTEGER(IntKi), PARAMETER :: M7N7MAGyi = 3625 + INTEGER(IntKi), PARAMETER :: M7N8MAGyi = 3626 + INTEGER(IntKi), PARAMETER :: M7N9MAGyi = 3627 + INTEGER(IntKi), PARAMETER :: M8N1MAGyi = 3628 + INTEGER(IntKi), PARAMETER :: M8N2MAGyi = 3629 + INTEGER(IntKi), PARAMETER :: M8N3MAGyi = 3630 + INTEGER(IntKi), PARAMETER :: M8N4MAGyi = 3631 + INTEGER(IntKi), PARAMETER :: M8N5MAGyi = 3632 + INTEGER(IntKi), PARAMETER :: M8N6MAGyi = 3633 + INTEGER(IntKi), PARAMETER :: M8N7MAGyi = 3634 + INTEGER(IntKi), PARAMETER :: M8N8MAGyi = 3635 + INTEGER(IntKi), PARAMETER :: M8N9MAGyi = 3636 + INTEGER(IntKi), PARAMETER :: M9N1MAGyi = 3637 + INTEGER(IntKi), PARAMETER :: M9N2MAGyi = 3638 + INTEGER(IntKi), PARAMETER :: M9N3MAGyi = 3639 + INTEGER(IntKi), PARAMETER :: M9N4MAGyi = 3640 + INTEGER(IntKi), PARAMETER :: M9N5MAGyi = 3641 + INTEGER(IntKi), PARAMETER :: M9N6MAGyi = 3642 + INTEGER(IntKi), PARAMETER :: M9N7MAGyi = 3643 + INTEGER(IntKi), PARAMETER :: M9N8MAGyi = 3644 + INTEGER(IntKi), PARAMETER :: M9N9MAGyi = 3645 + INTEGER(IntKi), PARAMETER :: M1N1MAGzi = 3646 + INTEGER(IntKi), PARAMETER :: M1N2MAGzi = 3647 + INTEGER(IntKi), PARAMETER :: M1N3MAGzi = 3648 + INTEGER(IntKi), PARAMETER :: M1N4MAGzi = 3649 + INTEGER(IntKi), PARAMETER :: M1N5MAGzi = 3650 + INTEGER(IntKi), PARAMETER :: M1N6MAGzi = 3651 + INTEGER(IntKi), PARAMETER :: M1N7MAGzi = 3652 + INTEGER(IntKi), PARAMETER :: M1N8MAGzi = 3653 + INTEGER(IntKi), PARAMETER :: M1N9MAGzi = 3654 + INTEGER(IntKi), PARAMETER :: M2N1MAGzi = 3655 + INTEGER(IntKi), PARAMETER :: M2N2MAGzi = 3656 + INTEGER(IntKi), PARAMETER :: M2N3MAGzi = 3657 + INTEGER(IntKi), PARAMETER :: M2N4MAGzi = 3658 + INTEGER(IntKi), PARAMETER :: M2N5MAGzi = 3659 + INTEGER(IntKi), PARAMETER :: M2N6MAGzi = 3660 + INTEGER(IntKi), PARAMETER :: M2N7MAGzi = 3661 + INTEGER(IntKi), PARAMETER :: M2N8MAGzi = 3662 + INTEGER(IntKi), PARAMETER :: M2N9MAGzi = 3663 + INTEGER(IntKi), PARAMETER :: M3N1MAGzi = 3664 + INTEGER(IntKi), PARAMETER :: M3N2MAGzi = 3665 + INTEGER(IntKi), PARAMETER :: M3N3MAGzi = 3666 + INTEGER(IntKi), PARAMETER :: M3N4MAGzi = 3667 + INTEGER(IntKi), PARAMETER :: M3N5MAGzi = 3668 + INTEGER(IntKi), PARAMETER :: M3N6MAGzi = 3669 + INTEGER(IntKi), PARAMETER :: M3N7MAGzi = 3670 + INTEGER(IntKi), PARAMETER :: M3N8MAGzi = 3671 + INTEGER(IntKi), PARAMETER :: M3N9MAGzi = 3672 + INTEGER(IntKi), PARAMETER :: M4N1MAGzi = 3673 + INTEGER(IntKi), PARAMETER :: M4N2MAGzi = 3674 + INTEGER(IntKi), PARAMETER :: M4N3MAGzi = 3675 + INTEGER(IntKi), PARAMETER :: M4N4MAGzi = 3676 + INTEGER(IntKi), PARAMETER :: M4N5MAGzi = 3677 + INTEGER(IntKi), PARAMETER :: M4N6MAGzi = 3678 + INTEGER(IntKi), PARAMETER :: M4N7MAGzi = 3679 + INTEGER(IntKi), PARAMETER :: M4N8MAGzi = 3680 + INTEGER(IntKi), PARAMETER :: M4N9MAGzi = 3681 + INTEGER(IntKi), PARAMETER :: M5N1MAGzi = 3682 + INTEGER(IntKi), PARAMETER :: M5N2MAGzi = 3683 + INTEGER(IntKi), PARAMETER :: M5N3MAGzi = 3684 + INTEGER(IntKi), PARAMETER :: M5N4MAGzi = 3685 + INTEGER(IntKi), PARAMETER :: M5N5MAGzi = 3686 + INTEGER(IntKi), PARAMETER :: M5N6MAGzi = 3687 + INTEGER(IntKi), PARAMETER :: M5N7MAGzi = 3688 + INTEGER(IntKi), PARAMETER :: M5N8MAGzi = 3689 + INTEGER(IntKi), PARAMETER :: M5N9MAGzi = 3690 + INTEGER(IntKi), PARAMETER :: M6N1MAGzi = 3691 + INTEGER(IntKi), PARAMETER :: M6N2MAGzi = 3692 + INTEGER(IntKi), PARAMETER :: M6N3MAGzi = 3693 + INTEGER(IntKi), PARAMETER :: M6N4MAGzi = 3694 + INTEGER(IntKi), PARAMETER :: M6N5MAGzi = 3695 + INTEGER(IntKi), PARAMETER :: M6N6MAGzi = 3696 + INTEGER(IntKi), PARAMETER :: M6N7MAGzi = 3697 + INTEGER(IntKi), PARAMETER :: M6N8MAGzi = 3698 + INTEGER(IntKi), PARAMETER :: M6N9MAGzi = 3699 + INTEGER(IntKi), PARAMETER :: M7N1MAGzi = 3700 + INTEGER(IntKi), PARAMETER :: M7N2MAGzi = 3701 + INTEGER(IntKi), PARAMETER :: M7N3MAGzi = 3702 + INTEGER(IntKi), PARAMETER :: M7N4MAGzi = 3703 + INTEGER(IntKi), PARAMETER :: M7N5MAGzi = 3704 + INTEGER(IntKi), PARAMETER :: M7N6MAGzi = 3705 + INTEGER(IntKi), PARAMETER :: M7N7MAGzi = 3706 + INTEGER(IntKi), PARAMETER :: M7N8MAGzi = 3707 + INTEGER(IntKi), PARAMETER :: M7N9MAGzi = 3708 + INTEGER(IntKi), PARAMETER :: M8N1MAGzi = 3709 + INTEGER(IntKi), PARAMETER :: M8N2MAGzi = 3710 + INTEGER(IntKi), PARAMETER :: M8N3MAGzi = 3711 + INTEGER(IntKi), PARAMETER :: M8N4MAGzi = 3712 + INTEGER(IntKi), PARAMETER :: M8N5MAGzi = 3713 + INTEGER(IntKi), PARAMETER :: M8N6MAGzi = 3714 + INTEGER(IntKi), PARAMETER :: M8N7MAGzi = 3715 + INTEGER(IntKi), PARAMETER :: M8N8MAGzi = 3716 + INTEGER(IntKi), PARAMETER :: M8N9MAGzi = 3717 + INTEGER(IntKi), PARAMETER :: M9N1MAGzi = 3718 + INTEGER(IntKi), PARAMETER :: M9N2MAGzi = 3719 + INTEGER(IntKi), PARAMETER :: M9N3MAGzi = 3720 + INTEGER(IntKi), PARAMETER :: M9N4MAGzi = 3721 + INTEGER(IntKi), PARAMETER :: M9N5MAGzi = 3722 + INTEGER(IntKi), PARAMETER :: M9N6MAGzi = 3723 + INTEGER(IntKi), PARAMETER :: M9N7MAGzi = 3724 + INTEGER(IntKi), PARAMETER :: M9N8MAGzi = 3725 + INTEGER(IntKi), PARAMETER :: M9N9MAGzi = 3726 + INTEGER(IntKi), PARAMETER :: M1N1FAFxi = 3727 + INTEGER(IntKi), PARAMETER :: M1N2FAFxi = 3728 + INTEGER(IntKi), PARAMETER :: M1N3FAFxi = 3729 + INTEGER(IntKi), PARAMETER :: M1N4FAFxi = 3730 + INTEGER(IntKi), PARAMETER :: M1N5FAFxi = 3731 + INTEGER(IntKi), PARAMETER :: M1N6FAFxi = 3732 + INTEGER(IntKi), PARAMETER :: M1N7FAFxi = 3733 + INTEGER(IntKi), PARAMETER :: M1N8FAFxi = 3734 + INTEGER(IntKi), PARAMETER :: M1N9FAFxi = 3735 + INTEGER(IntKi), PARAMETER :: M2N1FAFxi = 3736 + INTEGER(IntKi), PARAMETER :: M2N2FAFxi = 3737 + INTEGER(IntKi), PARAMETER :: M2N3FAFxi = 3738 + INTEGER(IntKi), PARAMETER :: M2N4FAFxi = 3739 + INTEGER(IntKi), PARAMETER :: M2N5FAFxi = 3740 + INTEGER(IntKi), PARAMETER :: M2N6FAFxi = 3741 + INTEGER(IntKi), PARAMETER :: M2N7FAFxi = 3742 + INTEGER(IntKi), PARAMETER :: M2N8FAFxi = 3743 + INTEGER(IntKi), PARAMETER :: M2N9FAFxi = 3744 + INTEGER(IntKi), PARAMETER :: M3N1FAFxi = 3745 + INTEGER(IntKi), PARAMETER :: M3N2FAFxi = 3746 + INTEGER(IntKi), PARAMETER :: M3N3FAFxi = 3747 + INTEGER(IntKi), PARAMETER :: M3N4FAFxi = 3748 + INTEGER(IntKi), PARAMETER :: M3N5FAFxi = 3749 + INTEGER(IntKi), PARAMETER :: M3N6FAFxi = 3750 + INTEGER(IntKi), PARAMETER :: M3N7FAFxi = 3751 + INTEGER(IntKi), PARAMETER :: M3N8FAFxi = 3752 + INTEGER(IntKi), PARAMETER :: M3N9FAFxi = 3753 + INTEGER(IntKi), PARAMETER :: M4N1FAFxi = 3754 + INTEGER(IntKi), PARAMETER :: M4N2FAFxi = 3755 + INTEGER(IntKi), PARAMETER :: M4N3FAFxi = 3756 + INTEGER(IntKi), PARAMETER :: M4N4FAFxi = 3757 + INTEGER(IntKi), PARAMETER :: M4N5FAFxi = 3758 + INTEGER(IntKi), PARAMETER :: M4N6FAFxi = 3759 + INTEGER(IntKi), PARAMETER :: M4N7FAFxi = 3760 + INTEGER(IntKi), PARAMETER :: M4N8FAFxi = 3761 + INTEGER(IntKi), PARAMETER :: M4N9FAFxi = 3762 + INTEGER(IntKi), PARAMETER :: M5N1FAFxi = 3763 + INTEGER(IntKi), PARAMETER :: M5N2FAFxi = 3764 + INTEGER(IntKi), PARAMETER :: M5N3FAFxi = 3765 + INTEGER(IntKi), PARAMETER :: M5N4FAFxi = 3766 + INTEGER(IntKi), PARAMETER :: M5N5FAFxi = 3767 + INTEGER(IntKi), PARAMETER :: M5N6FAFxi = 3768 + INTEGER(IntKi), PARAMETER :: M5N7FAFxi = 3769 + INTEGER(IntKi), PARAMETER :: M5N8FAFxi = 3770 + INTEGER(IntKi), PARAMETER :: M5N9FAFxi = 3771 + INTEGER(IntKi), PARAMETER :: M6N1FAFxi = 3772 + INTEGER(IntKi), PARAMETER :: M6N2FAFxi = 3773 + INTEGER(IntKi), PARAMETER :: M6N3FAFxi = 3774 + INTEGER(IntKi), PARAMETER :: M6N4FAFxi = 3775 + INTEGER(IntKi), PARAMETER :: M6N5FAFxi = 3776 + INTEGER(IntKi), PARAMETER :: M6N6FAFxi = 3777 + INTEGER(IntKi), PARAMETER :: M6N7FAFxi = 3778 + INTEGER(IntKi), PARAMETER :: M6N8FAFxi = 3779 + INTEGER(IntKi), PARAMETER :: M6N9FAFxi = 3780 + INTEGER(IntKi), PARAMETER :: M7N1FAFxi = 3781 + INTEGER(IntKi), PARAMETER :: M7N2FAFxi = 3782 + INTEGER(IntKi), PARAMETER :: M7N3FAFxi = 3783 + INTEGER(IntKi), PARAMETER :: M7N4FAFxi = 3784 + INTEGER(IntKi), PARAMETER :: M7N5FAFxi = 3785 + INTEGER(IntKi), PARAMETER :: M7N6FAFxi = 3786 + INTEGER(IntKi), PARAMETER :: M7N7FAFxi = 3787 + INTEGER(IntKi), PARAMETER :: M7N8FAFxi = 3788 + INTEGER(IntKi), PARAMETER :: M7N9FAFxi = 3789 + INTEGER(IntKi), PARAMETER :: M8N1FAFxi = 3790 + INTEGER(IntKi), PARAMETER :: M8N2FAFxi = 3791 + INTEGER(IntKi), PARAMETER :: M8N3FAFxi = 3792 + INTEGER(IntKi), PARAMETER :: M8N4FAFxi = 3793 + INTEGER(IntKi), PARAMETER :: M8N5FAFxi = 3794 + INTEGER(IntKi), PARAMETER :: M8N6FAFxi = 3795 + INTEGER(IntKi), PARAMETER :: M8N7FAFxi = 3796 + INTEGER(IntKi), PARAMETER :: M8N8FAFxi = 3797 + INTEGER(IntKi), PARAMETER :: M8N9FAFxi = 3798 + INTEGER(IntKi), PARAMETER :: M9N1FAFxi = 3799 + INTEGER(IntKi), PARAMETER :: M9N2FAFxi = 3800 + INTEGER(IntKi), PARAMETER :: M9N3FAFxi = 3801 + INTEGER(IntKi), PARAMETER :: M9N4FAFxi = 3802 + INTEGER(IntKi), PARAMETER :: M9N5FAFxi = 3803 + INTEGER(IntKi), PARAMETER :: M9N6FAFxi = 3804 + INTEGER(IntKi), PARAMETER :: M9N7FAFxi = 3805 + INTEGER(IntKi), PARAMETER :: M9N8FAFxi = 3806 + INTEGER(IntKi), PARAMETER :: M9N9FAFxi = 3807 + INTEGER(IntKi), PARAMETER :: M1N1FAFyi = 3808 + INTEGER(IntKi), PARAMETER :: M1N2FAFyi = 3809 + INTEGER(IntKi), PARAMETER :: M1N3FAFyi = 3810 + INTEGER(IntKi), PARAMETER :: M1N4FAFyi = 3811 + INTEGER(IntKi), PARAMETER :: M1N5FAFyi = 3812 + INTEGER(IntKi), PARAMETER :: M1N6FAFyi = 3813 + INTEGER(IntKi), PARAMETER :: M1N7FAFyi = 3814 + INTEGER(IntKi), PARAMETER :: M1N8FAFyi = 3815 + INTEGER(IntKi), PARAMETER :: M1N9FAFyi = 3816 + INTEGER(IntKi), PARAMETER :: M2N1FAFyi = 3817 + INTEGER(IntKi), PARAMETER :: M2N2FAFyi = 3818 + INTEGER(IntKi), PARAMETER :: M2N3FAFyi = 3819 + INTEGER(IntKi), PARAMETER :: M2N4FAFyi = 3820 + INTEGER(IntKi), PARAMETER :: M2N5FAFyi = 3821 + INTEGER(IntKi), PARAMETER :: M2N6FAFyi = 3822 + INTEGER(IntKi), PARAMETER :: M2N7FAFyi = 3823 + INTEGER(IntKi), PARAMETER :: M2N8FAFyi = 3824 + INTEGER(IntKi), PARAMETER :: M2N9FAFyi = 3825 + INTEGER(IntKi), PARAMETER :: M3N1FAFyi = 3826 + INTEGER(IntKi), PARAMETER :: M3N2FAFyi = 3827 + INTEGER(IntKi), PARAMETER :: M3N3FAFyi = 3828 + INTEGER(IntKi), PARAMETER :: M3N4FAFyi = 3829 + INTEGER(IntKi), PARAMETER :: M3N5FAFyi = 3830 + INTEGER(IntKi), PARAMETER :: M3N6FAFyi = 3831 + INTEGER(IntKi), PARAMETER :: M3N7FAFyi = 3832 + INTEGER(IntKi), PARAMETER :: M3N8FAFyi = 3833 + INTEGER(IntKi), PARAMETER :: M3N9FAFyi = 3834 + INTEGER(IntKi), PARAMETER :: M4N1FAFyi = 3835 + INTEGER(IntKi), PARAMETER :: M4N2FAFyi = 3836 + INTEGER(IntKi), PARAMETER :: M4N3FAFyi = 3837 + INTEGER(IntKi), PARAMETER :: M4N4FAFyi = 3838 + INTEGER(IntKi), PARAMETER :: M4N5FAFyi = 3839 + INTEGER(IntKi), PARAMETER :: M4N6FAFyi = 3840 + INTEGER(IntKi), PARAMETER :: M4N7FAFyi = 3841 + INTEGER(IntKi), PARAMETER :: M4N8FAFyi = 3842 + INTEGER(IntKi), PARAMETER :: M4N9FAFyi = 3843 + INTEGER(IntKi), PARAMETER :: M5N1FAFyi = 3844 + INTEGER(IntKi), PARAMETER :: M5N2FAFyi = 3845 + INTEGER(IntKi), PARAMETER :: M5N3FAFyi = 3846 + INTEGER(IntKi), PARAMETER :: M5N4FAFyi = 3847 + INTEGER(IntKi), PARAMETER :: M5N5FAFyi = 3848 + INTEGER(IntKi), PARAMETER :: M5N6FAFyi = 3849 + INTEGER(IntKi), PARAMETER :: M5N7FAFyi = 3850 + INTEGER(IntKi), PARAMETER :: M5N8FAFyi = 3851 + INTEGER(IntKi), PARAMETER :: M5N9FAFyi = 3852 + INTEGER(IntKi), PARAMETER :: M6N1FAFyi = 3853 + INTEGER(IntKi), PARAMETER :: M6N2FAFyi = 3854 + INTEGER(IntKi), PARAMETER :: M6N3FAFyi = 3855 + INTEGER(IntKi), PARAMETER :: M6N4FAFyi = 3856 + INTEGER(IntKi), PARAMETER :: M6N5FAFyi = 3857 + INTEGER(IntKi), PARAMETER :: M6N6FAFyi = 3858 + INTEGER(IntKi), PARAMETER :: M6N7FAFyi = 3859 + INTEGER(IntKi), PARAMETER :: M6N8FAFyi = 3860 + INTEGER(IntKi), PARAMETER :: M6N9FAFyi = 3861 + INTEGER(IntKi), PARAMETER :: M7N1FAFyi = 3862 + INTEGER(IntKi), PARAMETER :: M7N2FAFyi = 3863 + INTEGER(IntKi), PARAMETER :: M7N3FAFyi = 3864 + INTEGER(IntKi), PARAMETER :: M7N4FAFyi = 3865 + INTEGER(IntKi), PARAMETER :: M7N5FAFyi = 3866 + INTEGER(IntKi), PARAMETER :: M7N6FAFyi = 3867 + INTEGER(IntKi), PARAMETER :: M7N7FAFyi = 3868 + INTEGER(IntKi), PARAMETER :: M7N8FAFyi = 3869 + INTEGER(IntKi), PARAMETER :: M7N9FAFyi = 3870 + INTEGER(IntKi), PARAMETER :: M8N1FAFyi = 3871 + INTEGER(IntKi), PARAMETER :: M8N2FAFyi = 3872 + INTEGER(IntKi), PARAMETER :: M8N3FAFyi = 3873 + INTEGER(IntKi), PARAMETER :: M8N4FAFyi = 3874 + INTEGER(IntKi), PARAMETER :: M8N5FAFyi = 3875 + INTEGER(IntKi), PARAMETER :: M8N6FAFyi = 3876 + INTEGER(IntKi), PARAMETER :: M8N7FAFyi = 3877 + INTEGER(IntKi), PARAMETER :: M8N8FAFyi = 3878 + INTEGER(IntKi), PARAMETER :: M8N9FAFyi = 3879 + INTEGER(IntKi), PARAMETER :: M9N1FAFyi = 3880 + INTEGER(IntKi), PARAMETER :: M9N2FAFyi = 3881 + INTEGER(IntKi), PARAMETER :: M9N3FAFyi = 3882 + INTEGER(IntKi), PARAMETER :: M9N4FAFyi = 3883 + INTEGER(IntKi), PARAMETER :: M9N5FAFyi = 3884 + INTEGER(IntKi), PARAMETER :: M9N6FAFyi = 3885 + INTEGER(IntKi), PARAMETER :: M9N7FAFyi = 3886 + INTEGER(IntKi), PARAMETER :: M9N8FAFyi = 3887 + INTEGER(IntKi), PARAMETER :: M9N9FAFyi = 3888 + INTEGER(IntKi), PARAMETER :: M1N1FAFzi = 3889 + INTEGER(IntKi), PARAMETER :: M1N2FAFzi = 3890 + INTEGER(IntKi), PARAMETER :: M1N3FAFzi = 3891 + INTEGER(IntKi), PARAMETER :: M1N4FAFzi = 3892 + INTEGER(IntKi), PARAMETER :: M1N5FAFzi = 3893 + INTEGER(IntKi), PARAMETER :: M1N6FAFzi = 3894 + INTEGER(IntKi), PARAMETER :: M1N7FAFzi = 3895 + INTEGER(IntKi), PARAMETER :: M1N8FAFzi = 3896 + INTEGER(IntKi), PARAMETER :: M1N9FAFzi = 3897 + INTEGER(IntKi), PARAMETER :: M2N1FAFzi = 3898 + INTEGER(IntKi), PARAMETER :: M2N2FAFzi = 3899 + INTEGER(IntKi), PARAMETER :: M2N3FAFzi = 3900 + INTEGER(IntKi), PARAMETER :: M2N4FAFzi = 3901 + INTEGER(IntKi), PARAMETER :: M2N5FAFzi = 3902 + INTEGER(IntKi), PARAMETER :: M2N6FAFzi = 3903 + INTEGER(IntKi), PARAMETER :: M2N7FAFzi = 3904 + INTEGER(IntKi), PARAMETER :: M2N8FAFzi = 3905 + INTEGER(IntKi), PARAMETER :: M2N9FAFzi = 3906 + INTEGER(IntKi), PARAMETER :: M3N1FAFzi = 3907 + INTEGER(IntKi), PARAMETER :: M3N2FAFzi = 3908 + INTEGER(IntKi), PARAMETER :: M3N3FAFzi = 3909 + INTEGER(IntKi), PARAMETER :: M3N4FAFzi = 3910 + INTEGER(IntKi), PARAMETER :: M3N5FAFzi = 3911 + INTEGER(IntKi), PARAMETER :: M3N6FAFzi = 3912 + INTEGER(IntKi), PARAMETER :: M3N7FAFzi = 3913 + INTEGER(IntKi), PARAMETER :: M3N8FAFzi = 3914 + INTEGER(IntKi), PARAMETER :: M3N9FAFzi = 3915 + INTEGER(IntKi), PARAMETER :: M4N1FAFzi = 3916 + INTEGER(IntKi), PARAMETER :: M4N2FAFzi = 3917 + INTEGER(IntKi), PARAMETER :: M4N3FAFzi = 3918 + INTEGER(IntKi), PARAMETER :: M4N4FAFzi = 3919 + INTEGER(IntKi), PARAMETER :: M4N5FAFzi = 3920 + INTEGER(IntKi), PARAMETER :: M4N6FAFzi = 3921 + INTEGER(IntKi), PARAMETER :: M4N7FAFzi = 3922 + INTEGER(IntKi), PARAMETER :: M4N8FAFzi = 3923 + INTEGER(IntKi), PARAMETER :: M4N9FAFzi = 3924 + INTEGER(IntKi), PARAMETER :: M5N1FAFzi = 3925 + INTEGER(IntKi), PARAMETER :: M5N2FAFzi = 3926 + INTEGER(IntKi), PARAMETER :: M5N3FAFzi = 3927 + INTEGER(IntKi), PARAMETER :: M5N4FAFzi = 3928 + INTEGER(IntKi), PARAMETER :: M5N5FAFzi = 3929 + INTEGER(IntKi), PARAMETER :: M5N6FAFzi = 3930 + INTEGER(IntKi), PARAMETER :: M5N7FAFzi = 3931 + INTEGER(IntKi), PARAMETER :: M5N8FAFzi = 3932 + INTEGER(IntKi), PARAMETER :: M5N9FAFzi = 3933 + INTEGER(IntKi), PARAMETER :: M6N1FAFzi = 3934 + INTEGER(IntKi), PARAMETER :: M6N2FAFzi = 3935 + INTEGER(IntKi), PARAMETER :: M6N3FAFzi = 3936 + INTEGER(IntKi), PARAMETER :: M6N4FAFzi = 3937 + INTEGER(IntKi), PARAMETER :: M6N5FAFzi = 3938 + INTEGER(IntKi), PARAMETER :: M6N6FAFzi = 3939 + INTEGER(IntKi), PARAMETER :: M6N7FAFzi = 3940 + INTEGER(IntKi), PARAMETER :: M6N8FAFzi = 3941 + INTEGER(IntKi), PARAMETER :: M6N9FAFzi = 3942 + INTEGER(IntKi), PARAMETER :: M7N1FAFzi = 3943 + INTEGER(IntKi), PARAMETER :: M7N2FAFzi = 3944 + INTEGER(IntKi), PARAMETER :: M7N3FAFzi = 3945 + INTEGER(IntKi), PARAMETER :: M7N4FAFzi = 3946 + INTEGER(IntKi), PARAMETER :: M7N5FAFzi = 3947 + INTEGER(IntKi), PARAMETER :: M7N6FAFzi = 3948 + INTEGER(IntKi), PARAMETER :: M7N7FAFzi = 3949 + INTEGER(IntKi), PARAMETER :: M7N8FAFzi = 3950 + INTEGER(IntKi), PARAMETER :: M7N9FAFzi = 3951 + INTEGER(IntKi), PARAMETER :: M8N1FAFzi = 3952 + INTEGER(IntKi), PARAMETER :: M8N2FAFzi = 3953 + INTEGER(IntKi), PARAMETER :: M8N3FAFzi = 3954 + INTEGER(IntKi), PARAMETER :: M8N4FAFzi = 3955 + INTEGER(IntKi), PARAMETER :: M8N5FAFzi = 3956 + INTEGER(IntKi), PARAMETER :: M8N6FAFzi = 3957 + INTEGER(IntKi), PARAMETER :: M8N7FAFzi = 3958 + INTEGER(IntKi), PARAMETER :: M8N8FAFzi = 3959 + INTEGER(IntKi), PARAMETER :: M8N9FAFzi = 3960 + INTEGER(IntKi), PARAMETER :: M9N1FAFzi = 3961 + INTEGER(IntKi), PARAMETER :: M9N2FAFzi = 3962 + INTEGER(IntKi), PARAMETER :: M9N3FAFzi = 3963 + INTEGER(IntKi), PARAMETER :: M9N4FAFzi = 3964 + INTEGER(IntKi), PARAMETER :: M9N5FAFzi = 3965 + INTEGER(IntKi), PARAMETER :: M9N6FAFzi = 3966 + INTEGER(IntKi), PARAMETER :: M9N7FAFzi = 3967 + INTEGER(IntKi), PARAMETER :: M9N8FAFzi = 3968 + INTEGER(IntKi), PARAMETER :: M9N9FAFzi = 3969 + INTEGER(IntKi), PARAMETER :: M1N1MAFxi = 3970 + INTEGER(IntKi), PARAMETER :: M1N2MAFxi = 3971 + INTEGER(IntKi), PARAMETER :: M1N3MAFxi = 3972 + INTEGER(IntKi), PARAMETER :: M1N4MAFxi = 3973 + INTEGER(IntKi), PARAMETER :: M1N5MAFxi = 3974 + INTEGER(IntKi), PARAMETER :: M1N6MAFxi = 3975 + INTEGER(IntKi), PARAMETER :: M1N7MAFxi = 3976 + INTEGER(IntKi), PARAMETER :: M1N8MAFxi = 3977 + INTEGER(IntKi), PARAMETER :: M1N9MAFxi = 3978 + INTEGER(IntKi), PARAMETER :: M2N1MAFxi = 3979 + INTEGER(IntKi), PARAMETER :: M2N2MAFxi = 3980 + INTEGER(IntKi), PARAMETER :: M2N3MAFxi = 3981 + INTEGER(IntKi), PARAMETER :: M2N4MAFxi = 3982 + INTEGER(IntKi), PARAMETER :: M2N5MAFxi = 3983 + INTEGER(IntKi), PARAMETER :: M2N6MAFxi = 3984 + INTEGER(IntKi), PARAMETER :: M2N7MAFxi = 3985 + INTEGER(IntKi), PARAMETER :: M2N8MAFxi = 3986 + INTEGER(IntKi), PARAMETER :: M2N9MAFxi = 3987 + INTEGER(IntKi), PARAMETER :: M3N1MAFxi = 3988 + INTEGER(IntKi), PARAMETER :: M3N2MAFxi = 3989 + INTEGER(IntKi), PARAMETER :: M3N3MAFxi = 3990 + INTEGER(IntKi), PARAMETER :: M3N4MAFxi = 3991 + INTEGER(IntKi), PARAMETER :: M3N5MAFxi = 3992 + INTEGER(IntKi), PARAMETER :: M3N6MAFxi = 3993 + INTEGER(IntKi), PARAMETER :: M3N7MAFxi = 3994 + INTEGER(IntKi), PARAMETER :: M3N8MAFxi = 3995 + INTEGER(IntKi), PARAMETER :: M3N9MAFxi = 3996 + INTEGER(IntKi), PARAMETER :: M4N1MAFxi = 3997 + INTEGER(IntKi), PARAMETER :: M4N2MAFxi = 3998 + INTEGER(IntKi), PARAMETER :: M4N3MAFxi = 3999 + INTEGER(IntKi), PARAMETER :: M4N4MAFxi = 4000 + INTEGER(IntKi), PARAMETER :: M4N5MAFxi = 4001 + INTEGER(IntKi), PARAMETER :: M4N6MAFxi = 4002 + INTEGER(IntKi), PARAMETER :: M4N7MAFxi = 4003 + INTEGER(IntKi), PARAMETER :: M4N8MAFxi = 4004 + INTEGER(IntKi), PARAMETER :: M4N9MAFxi = 4005 + INTEGER(IntKi), PARAMETER :: M5N1MAFxi = 4006 + INTEGER(IntKi), PARAMETER :: M5N2MAFxi = 4007 + INTEGER(IntKi), PARAMETER :: M5N3MAFxi = 4008 + INTEGER(IntKi), PARAMETER :: M5N4MAFxi = 4009 + INTEGER(IntKi), PARAMETER :: M5N5MAFxi = 4010 + INTEGER(IntKi), PARAMETER :: M5N6MAFxi = 4011 + INTEGER(IntKi), PARAMETER :: M5N7MAFxi = 4012 + INTEGER(IntKi), PARAMETER :: M5N8MAFxi = 4013 + INTEGER(IntKi), PARAMETER :: M5N9MAFxi = 4014 + INTEGER(IntKi), PARAMETER :: M6N1MAFxi = 4015 + INTEGER(IntKi), PARAMETER :: M6N2MAFxi = 4016 + INTEGER(IntKi), PARAMETER :: M6N3MAFxi = 4017 + INTEGER(IntKi), PARAMETER :: M6N4MAFxi = 4018 + INTEGER(IntKi), PARAMETER :: M6N5MAFxi = 4019 + INTEGER(IntKi), PARAMETER :: M6N6MAFxi = 4020 + INTEGER(IntKi), PARAMETER :: M6N7MAFxi = 4021 + INTEGER(IntKi), PARAMETER :: M6N8MAFxi = 4022 + INTEGER(IntKi), PARAMETER :: M6N9MAFxi = 4023 + INTEGER(IntKi), PARAMETER :: M7N1MAFxi = 4024 + INTEGER(IntKi), PARAMETER :: M7N2MAFxi = 4025 + INTEGER(IntKi), PARAMETER :: M7N3MAFxi = 4026 + INTEGER(IntKi), PARAMETER :: M7N4MAFxi = 4027 + INTEGER(IntKi), PARAMETER :: M7N5MAFxi = 4028 + INTEGER(IntKi), PARAMETER :: M7N6MAFxi = 4029 + INTEGER(IntKi), PARAMETER :: M7N7MAFxi = 4030 + INTEGER(IntKi), PARAMETER :: M7N8MAFxi = 4031 + INTEGER(IntKi), PARAMETER :: M7N9MAFxi = 4032 + INTEGER(IntKi), PARAMETER :: M8N1MAFxi = 4033 + INTEGER(IntKi), PARAMETER :: M8N2MAFxi = 4034 + INTEGER(IntKi), PARAMETER :: M8N3MAFxi = 4035 + INTEGER(IntKi), PARAMETER :: M8N4MAFxi = 4036 + INTEGER(IntKi), PARAMETER :: M8N5MAFxi = 4037 + INTEGER(IntKi), PARAMETER :: M8N6MAFxi = 4038 + INTEGER(IntKi), PARAMETER :: M8N7MAFxi = 4039 + INTEGER(IntKi), PARAMETER :: M8N8MAFxi = 4040 + INTEGER(IntKi), PARAMETER :: M8N9MAFxi = 4041 + INTEGER(IntKi), PARAMETER :: M9N1MAFxi = 4042 + INTEGER(IntKi), PARAMETER :: M9N2MAFxi = 4043 + INTEGER(IntKi), PARAMETER :: M9N3MAFxi = 4044 + INTEGER(IntKi), PARAMETER :: M9N4MAFxi = 4045 + INTEGER(IntKi), PARAMETER :: M9N5MAFxi = 4046 + INTEGER(IntKi), PARAMETER :: M9N6MAFxi = 4047 + INTEGER(IntKi), PARAMETER :: M9N7MAFxi = 4048 + INTEGER(IntKi), PARAMETER :: M9N8MAFxi = 4049 + INTEGER(IntKi), PARAMETER :: M9N9MAFxi = 4050 + INTEGER(IntKi), PARAMETER :: M1N1MAFyi = 4051 + INTEGER(IntKi), PARAMETER :: M1N2MAFyi = 4052 + INTEGER(IntKi), PARAMETER :: M1N3MAFyi = 4053 + INTEGER(IntKi), PARAMETER :: M1N4MAFyi = 4054 + INTEGER(IntKi), PARAMETER :: M1N5MAFyi = 4055 + INTEGER(IntKi), PARAMETER :: M1N6MAFyi = 4056 + INTEGER(IntKi), PARAMETER :: M1N7MAFyi = 4057 + INTEGER(IntKi), PARAMETER :: M1N8MAFyi = 4058 + INTEGER(IntKi), PARAMETER :: M1N9MAFyi = 4059 + INTEGER(IntKi), PARAMETER :: M2N1MAFyi = 4060 + INTEGER(IntKi), PARAMETER :: M2N2MAFyi = 4061 + INTEGER(IntKi), PARAMETER :: M2N3MAFyi = 4062 + INTEGER(IntKi), PARAMETER :: M2N4MAFyi = 4063 + INTEGER(IntKi), PARAMETER :: M2N5MAFyi = 4064 + INTEGER(IntKi), PARAMETER :: M2N6MAFyi = 4065 + INTEGER(IntKi), PARAMETER :: M2N7MAFyi = 4066 + INTEGER(IntKi), PARAMETER :: M2N8MAFyi = 4067 + INTEGER(IntKi), PARAMETER :: M2N9MAFyi = 4068 + INTEGER(IntKi), PARAMETER :: M3N1MAFyi = 4069 + INTEGER(IntKi), PARAMETER :: M3N2MAFyi = 4070 + INTEGER(IntKi), PARAMETER :: M3N3MAFyi = 4071 + INTEGER(IntKi), PARAMETER :: M3N4MAFyi = 4072 + INTEGER(IntKi), PARAMETER :: M3N5MAFyi = 4073 + INTEGER(IntKi), PARAMETER :: M3N6MAFyi = 4074 + INTEGER(IntKi), PARAMETER :: M3N7MAFyi = 4075 + INTEGER(IntKi), PARAMETER :: M3N8MAFyi = 4076 + INTEGER(IntKi), PARAMETER :: M3N9MAFyi = 4077 + INTEGER(IntKi), PARAMETER :: M4N1MAFyi = 4078 + INTEGER(IntKi), PARAMETER :: M4N2MAFyi = 4079 + INTEGER(IntKi), PARAMETER :: M4N3MAFyi = 4080 + INTEGER(IntKi), PARAMETER :: M4N4MAFyi = 4081 + INTEGER(IntKi), PARAMETER :: M4N5MAFyi = 4082 + INTEGER(IntKi), PARAMETER :: M4N6MAFyi = 4083 + INTEGER(IntKi), PARAMETER :: M4N7MAFyi = 4084 + INTEGER(IntKi), PARAMETER :: M4N8MAFyi = 4085 + INTEGER(IntKi), PARAMETER :: M4N9MAFyi = 4086 + INTEGER(IntKi), PARAMETER :: M5N1MAFyi = 4087 + INTEGER(IntKi), PARAMETER :: M5N2MAFyi = 4088 + INTEGER(IntKi), PARAMETER :: M5N3MAFyi = 4089 + INTEGER(IntKi), PARAMETER :: M5N4MAFyi = 4090 + INTEGER(IntKi), PARAMETER :: M5N5MAFyi = 4091 + INTEGER(IntKi), PARAMETER :: M5N6MAFyi = 4092 + INTEGER(IntKi), PARAMETER :: M5N7MAFyi = 4093 + INTEGER(IntKi), PARAMETER :: M5N8MAFyi = 4094 + INTEGER(IntKi), PARAMETER :: M5N9MAFyi = 4095 + INTEGER(IntKi), PARAMETER :: M6N1MAFyi = 4096 + INTEGER(IntKi), PARAMETER :: M6N2MAFyi = 4097 + INTEGER(IntKi), PARAMETER :: M6N3MAFyi = 4098 + INTEGER(IntKi), PARAMETER :: M6N4MAFyi = 4099 + INTEGER(IntKi), PARAMETER :: M6N5MAFyi = 4100 + INTEGER(IntKi), PARAMETER :: M6N6MAFyi = 4101 + INTEGER(IntKi), PARAMETER :: M6N7MAFyi = 4102 + INTEGER(IntKi), PARAMETER :: M6N8MAFyi = 4103 + INTEGER(IntKi), PARAMETER :: M6N9MAFyi = 4104 + INTEGER(IntKi), PARAMETER :: M7N1MAFyi = 4105 + INTEGER(IntKi), PARAMETER :: M7N2MAFyi = 4106 + INTEGER(IntKi), PARAMETER :: M7N3MAFyi = 4107 + INTEGER(IntKi), PARAMETER :: M7N4MAFyi = 4108 + INTEGER(IntKi), PARAMETER :: M7N5MAFyi = 4109 + INTEGER(IntKi), PARAMETER :: M7N6MAFyi = 4110 + INTEGER(IntKi), PARAMETER :: M7N7MAFyi = 4111 + INTEGER(IntKi), PARAMETER :: M7N8MAFyi = 4112 + INTEGER(IntKi), PARAMETER :: M7N9MAFyi = 4113 + INTEGER(IntKi), PARAMETER :: M8N1MAFyi = 4114 + INTEGER(IntKi), PARAMETER :: M8N2MAFyi = 4115 + INTEGER(IntKi), PARAMETER :: M8N3MAFyi = 4116 + INTEGER(IntKi), PARAMETER :: M8N4MAFyi = 4117 + INTEGER(IntKi), PARAMETER :: M8N5MAFyi = 4118 + INTEGER(IntKi), PARAMETER :: M8N6MAFyi = 4119 + INTEGER(IntKi), PARAMETER :: M8N7MAFyi = 4120 + INTEGER(IntKi), PARAMETER :: M8N8MAFyi = 4121 + INTEGER(IntKi), PARAMETER :: M8N9MAFyi = 4122 + INTEGER(IntKi), PARAMETER :: M9N1MAFyi = 4123 + INTEGER(IntKi), PARAMETER :: M9N2MAFyi = 4124 + INTEGER(IntKi), PARAMETER :: M9N3MAFyi = 4125 + INTEGER(IntKi), PARAMETER :: M9N4MAFyi = 4126 + INTEGER(IntKi), PARAMETER :: M9N5MAFyi = 4127 + INTEGER(IntKi), PARAMETER :: M9N6MAFyi = 4128 + INTEGER(IntKi), PARAMETER :: M9N7MAFyi = 4129 + INTEGER(IntKi), PARAMETER :: M9N8MAFyi = 4130 + INTEGER(IntKi), PARAMETER :: M9N9MAFyi = 4131 + INTEGER(IntKi), PARAMETER :: M1N1MAFzi = 4132 + INTEGER(IntKi), PARAMETER :: M1N2MAFzi = 4133 + INTEGER(IntKi), PARAMETER :: M1N3MAFzi = 4134 + INTEGER(IntKi), PARAMETER :: M1N4MAFzi = 4135 + INTEGER(IntKi), PARAMETER :: M1N5MAFzi = 4136 + INTEGER(IntKi), PARAMETER :: M1N6MAFzi = 4137 + INTEGER(IntKi), PARAMETER :: M1N7MAFzi = 4138 + INTEGER(IntKi), PARAMETER :: M1N8MAFzi = 4139 + INTEGER(IntKi), PARAMETER :: M1N9MAFzi = 4140 + INTEGER(IntKi), PARAMETER :: M2N1MAFzi = 4141 + INTEGER(IntKi), PARAMETER :: M2N2MAFzi = 4142 + INTEGER(IntKi), PARAMETER :: M2N3MAFzi = 4143 + INTEGER(IntKi), PARAMETER :: M2N4MAFzi = 4144 + INTEGER(IntKi), PARAMETER :: M2N5MAFzi = 4145 + INTEGER(IntKi), PARAMETER :: M2N6MAFzi = 4146 + INTEGER(IntKi), PARAMETER :: M2N7MAFzi = 4147 + INTEGER(IntKi), PARAMETER :: M2N8MAFzi = 4148 + INTEGER(IntKi), PARAMETER :: M2N9MAFzi = 4149 + INTEGER(IntKi), PARAMETER :: M3N1MAFzi = 4150 + INTEGER(IntKi), PARAMETER :: M3N2MAFzi = 4151 + INTEGER(IntKi), PARAMETER :: M3N3MAFzi = 4152 + INTEGER(IntKi), PARAMETER :: M3N4MAFzi = 4153 + INTEGER(IntKi), PARAMETER :: M3N5MAFzi = 4154 + INTEGER(IntKi), PARAMETER :: M3N6MAFzi = 4155 + INTEGER(IntKi), PARAMETER :: M3N7MAFzi = 4156 + INTEGER(IntKi), PARAMETER :: M3N8MAFzi = 4157 + INTEGER(IntKi), PARAMETER :: M3N9MAFzi = 4158 + INTEGER(IntKi), PARAMETER :: M4N1MAFzi = 4159 + INTEGER(IntKi), PARAMETER :: M4N2MAFzi = 4160 + INTEGER(IntKi), PARAMETER :: M4N3MAFzi = 4161 + INTEGER(IntKi), PARAMETER :: M4N4MAFzi = 4162 + INTEGER(IntKi), PARAMETER :: M4N5MAFzi = 4163 + INTEGER(IntKi), PARAMETER :: M4N6MAFzi = 4164 + INTEGER(IntKi), PARAMETER :: M4N7MAFzi = 4165 + INTEGER(IntKi), PARAMETER :: M4N8MAFzi = 4166 + INTEGER(IntKi), PARAMETER :: M4N9MAFzi = 4167 + INTEGER(IntKi), PARAMETER :: M5N1MAFzi = 4168 + INTEGER(IntKi), PARAMETER :: M5N2MAFzi = 4169 + INTEGER(IntKi), PARAMETER :: M5N3MAFzi = 4170 + INTEGER(IntKi), PARAMETER :: M5N4MAFzi = 4171 + INTEGER(IntKi), PARAMETER :: M5N5MAFzi = 4172 + INTEGER(IntKi), PARAMETER :: M5N6MAFzi = 4173 + INTEGER(IntKi), PARAMETER :: M5N7MAFzi = 4174 + INTEGER(IntKi), PARAMETER :: M5N8MAFzi = 4175 + INTEGER(IntKi), PARAMETER :: M5N9MAFzi = 4176 + INTEGER(IntKi), PARAMETER :: M6N1MAFzi = 4177 + INTEGER(IntKi), PARAMETER :: M6N2MAFzi = 4178 + INTEGER(IntKi), PARAMETER :: M6N3MAFzi = 4179 + INTEGER(IntKi), PARAMETER :: M6N4MAFzi = 4180 + INTEGER(IntKi), PARAMETER :: M6N5MAFzi = 4181 + INTEGER(IntKi), PARAMETER :: M6N6MAFzi = 4182 + INTEGER(IntKi), PARAMETER :: M6N7MAFzi = 4183 + INTEGER(IntKi), PARAMETER :: M6N8MAFzi = 4184 + INTEGER(IntKi), PARAMETER :: M6N9MAFzi = 4185 + INTEGER(IntKi), PARAMETER :: M7N1MAFzi = 4186 + INTEGER(IntKi), PARAMETER :: M7N2MAFzi = 4187 + INTEGER(IntKi), PARAMETER :: M7N3MAFzi = 4188 + INTEGER(IntKi), PARAMETER :: M7N4MAFzi = 4189 + INTEGER(IntKi), PARAMETER :: M7N5MAFzi = 4190 + INTEGER(IntKi), PARAMETER :: M7N6MAFzi = 4191 + INTEGER(IntKi), PARAMETER :: M7N7MAFzi = 4192 + INTEGER(IntKi), PARAMETER :: M7N8MAFzi = 4193 + INTEGER(IntKi), PARAMETER :: M7N9MAFzi = 4194 + INTEGER(IntKi), PARAMETER :: M8N1MAFzi = 4195 + INTEGER(IntKi), PARAMETER :: M8N2MAFzi = 4196 + INTEGER(IntKi), PARAMETER :: M8N3MAFzi = 4197 + INTEGER(IntKi), PARAMETER :: M8N4MAFzi = 4198 + INTEGER(IntKi), PARAMETER :: M8N5MAFzi = 4199 + INTEGER(IntKi), PARAMETER :: M8N6MAFzi = 4200 + INTEGER(IntKi), PARAMETER :: M8N7MAFzi = 4201 + INTEGER(IntKi), PARAMETER :: M8N8MAFzi = 4202 + INTEGER(IntKi), PARAMETER :: M8N9MAFzi = 4203 + INTEGER(IntKi), PARAMETER :: M9N1MAFzi = 4204 + INTEGER(IntKi), PARAMETER :: M9N2MAFzi = 4205 + INTEGER(IntKi), PARAMETER :: M9N3MAFzi = 4206 + INTEGER(IntKi), PARAMETER :: M9N4MAFzi = 4207 + INTEGER(IntKi), PARAMETER :: M9N5MAFzi = 4208 + INTEGER(IntKi), PARAMETER :: M9N6MAFzi = 4209 + INTEGER(IntKi), PARAMETER :: M9N7MAFzi = 4210 + INTEGER(IntKi), PARAMETER :: M9N8MAFzi = 4211 + INTEGER(IntKi), PARAMETER :: M9N9MAFzi = 4212 - ! Joint-level Wave Kinematics : + ! Joint-level Wave Kinematics: - INTEGER(IntKi), PARAMETER :: J1Vxi = 4213 - INTEGER(IntKi), PARAMETER :: J2Vxi = 4214 - INTEGER(IntKi), PARAMETER :: J3Vxi = 4215 - INTEGER(IntKi), PARAMETER :: J4Vxi = 4216 - INTEGER(IntKi), PARAMETER :: J5Vxi = 4217 - INTEGER(IntKi), PARAMETER :: J6Vxi = 4218 - INTEGER(IntKi), PARAMETER :: J7Vxi = 4219 - INTEGER(IntKi), PARAMETER :: J8Vxi = 4220 - INTEGER(IntKi), PARAMETER :: J9Vxi = 4221 - INTEGER(IntKi), PARAMETER :: J1Vyi = 4222 - INTEGER(IntKi), PARAMETER :: J2Vyi = 4223 - INTEGER(IntKi), PARAMETER :: J3Vyi = 4224 - INTEGER(IntKi), PARAMETER :: J4Vyi = 4225 - INTEGER(IntKi), PARAMETER :: J5Vyi = 4226 - INTEGER(IntKi), PARAMETER :: J6Vyi = 4227 - INTEGER(IntKi), PARAMETER :: J7Vyi = 4228 - INTEGER(IntKi), PARAMETER :: J8Vyi = 4229 - INTEGER(IntKi), PARAMETER :: J9Vyi = 4230 - INTEGER(IntKi), PARAMETER :: J1Vzi = 4231 - INTEGER(IntKi), PARAMETER :: J2Vzi = 4232 - INTEGER(IntKi), PARAMETER :: J3Vzi = 4233 - INTEGER(IntKi), PARAMETER :: J4Vzi = 4234 - INTEGER(IntKi), PARAMETER :: J5Vzi = 4235 - INTEGER(IntKi), PARAMETER :: J6Vzi = 4236 - INTEGER(IntKi), PARAMETER :: J7Vzi = 4237 - INTEGER(IntKi), PARAMETER :: J8Vzi = 4238 - INTEGER(IntKi), PARAMETER :: J9Vzi = 4239 - INTEGER(IntKi), PARAMETER :: J1Axi = 4240 - INTEGER(IntKi), PARAMETER :: J2Axi = 4241 - INTEGER(IntKi), PARAMETER :: J3Axi = 4242 - INTEGER(IntKi), PARAMETER :: J4Axi = 4243 - INTEGER(IntKi), PARAMETER :: J5Axi = 4244 - INTEGER(IntKi), PARAMETER :: J6Axi = 4245 - INTEGER(IntKi), PARAMETER :: J7Axi = 4246 - INTEGER(IntKi), PARAMETER :: J8Axi = 4247 - INTEGER(IntKi), PARAMETER :: J9Axi = 4248 - INTEGER(IntKi), PARAMETER :: J1Ayi = 4249 - INTEGER(IntKi), PARAMETER :: J2Ayi = 4250 - INTEGER(IntKi), PARAMETER :: J3Ayi = 4251 - INTEGER(IntKi), PARAMETER :: J4Ayi = 4252 - INTEGER(IntKi), PARAMETER :: J5Ayi = 4253 - INTEGER(IntKi), PARAMETER :: J6Ayi = 4254 - INTEGER(IntKi), PARAMETER :: J7Ayi = 4255 - INTEGER(IntKi), PARAMETER :: J8Ayi = 4256 - INTEGER(IntKi), PARAMETER :: J9Ayi = 4257 - INTEGER(IntKi), PARAMETER :: J1Azi = 4258 - INTEGER(IntKi), PARAMETER :: J2Azi = 4259 - INTEGER(IntKi), PARAMETER :: J3Azi = 4260 - INTEGER(IntKi), PARAMETER :: J4Azi = 4261 - INTEGER(IntKi), PARAMETER :: J5Azi = 4262 - INTEGER(IntKi), PARAMETER :: J6Azi = 4263 - INTEGER(IntKi), PARAMETER :: J7Azi = 4264 - INTEGER(IntKi), PARAMETER :: J8Azi = 4265 - INTEGER(IntKi), PARAMETER :: J9Azi = 4266 - INTEGER(IntKi), PARAMETER :: J1DynP = 4267 - INTEGER(IntKi), PARAMETER :: J2DynP = 4268 - INTEGER(IntKi), PARAMETER :: J3DynP = 4269 - INTEGER(IntKi), PARAMETER :: J4DynP = 4270 - INTEGER(IntKi), PARAMETER :: J5DynP = 4271 - INTEGER(IntKi), PARAMETER :: J6DynP = 4272 - INTEGER(IntKi), PARAMETER :: J7DynP = 4273 - INTEGER(IntKi), PARAMETER :: J8DynP = 4274 - INTEGER(IntKi), PARAMETER :: J9DynP = 4275 - INTEGER(IntKi), PARAMETER :: J1STVxi = 4276 - INTEGER(IntKi), PARAMETER :: J2STVxi = 4277 - INTEGER(IntKi), PARAMETER :: J3STVxi = 4278 - INTEGER(IntKi), PARAMETER :: J4STVxi = 4279 - INTEGER(IntKi), PARAMETER :: J5STVxi = 4280 - INTEGER(IntKi), PARAMETER :: J6STVxi = 4281 - INTEGER(IntKi), PARAMETER :: J7STVxi = 4282 - INTEGER(IntKi), PARAMETER :: J8STVxi = 4283 - INTEGER(IntKi), PARAMETER :: J9STVxi = 4284 - INTEGER(IntKi), PARAMETER :: J1STVyi = 4285 - INTEGER(IntKi), PARAMETER :: J2STVyi = 4286 - INTEGER(IntKi), PARAMETER :: J3STVyi = 4287 - INTEGER(IntKi), PARAMETER :: J4STVyi = 4288 - INTEGER(IntKi), PARAMETER :: J5STVyi = 4289 - INTEGER(IntKi), PARAMETER :: J6STVyi = 4290 - INTEGER(IntKi), PARAMETER :: J7STVyi = 4291 - INTEGER(IntKi), PARAMETER :: J8STVyi = 4292 - INTEGER(IntKi), PARAMETER :: J9STVyi = 4293 - INTEGER(IntKi), PARAMETER :: J1STVzi = 4294 - INTEGER(IntKi), PARAMETER :: J2STVzi = 4295 - INTEGER(IntKi), PARAMETER :: J3STVzi = 4296 - INTEGER(IntKi), PARAMETER :: J4STVzi = 4297 - INTEGER(IntKi), PARAMETER :: J5STVzi = 4298 - INTEGER(IntKi), PARAMETER :: J6STVzi = 4299 - INTEGER(IntKi), PARAMETER :: J7STVzi = 4300 - INTEGER(IntKi), PARAMETER :: J8STVzi = 4301 - INTEGER(IntKi), PARAMETER :: J9STVzi = 4302 - INTEGER(IntKi), PARAMETER :: J1STAxi = 4303 - INTEGER(IntKi), PARAMETER :: J2STAxi = 4304 - INTEGER(IntKi), PARAMETER :: J3STAxi = 4305 - INTEGER(IntKi), PARAMETER :: J4STAxi = 4306 - INTEGER(IntKi), PARAMETER :: J5STAxi = 4307 - INTEGER(IntKi), PARAMETER :: J6STAxi = 4308 - INTEGER(IntKi), PARAMETER :: J7STAxi = 4309 - INTEGER(IntKi), PARAMETER :: J8STAxi = 4310 - INTEGER(IntKi), PARAMETER :: J9STAxi = 4311 - INTEGER(IntKi), PARAMETER :: J1STAyi = 4312 - INTEGER(IntKi), PARAMETER :: J2STAyi = 4313 - INTEGER(IntKi), PARAMETER :: J3STAyi = 4314 - INTEGER(IntKi), PARAMETER :: J4STAyi = 4315 - INTEGER(IntKi), PARAMETER :: J5STAyi = 4316 - INTEGER(IntKi), PARAMETER :: J6STAyi = 4317 - INTEGER(IntKi), PARAMETER :: J7STAyi = 4318 - INTEGER(IntKi), PARAMETER :: J8STAyi = 4319 - INTEGER(IntKi), PARAMETER :: J9STAyi = 4320 - INTEGER(IntKi), PARAMETER :: J1STAzi = 4321 - INTEGER(IntKi), PARAMETER :: J2STAzi = 4322 - INTEGER(IntKi), PARAMETER :: J3STAzi = 4323 - INTEGER(IntKi), PARAMETER :: J4STAzi = 4324 - INTEGER(IntKi), PARAMETER :: J5STAzi = 4325 - INTEGER(IntKi), PARAMETER :: J6STAzi = 4326 - INTEGER(IntKi), PARAMETER :: J7STAzi = 4327 - INTEGER(IntKi), PARAMETER :: J8STAzi = 4328 - INTEGER(IntKi), PARAMETER :: J9STAzi = 4329 + INTEGER(IntKi), PARAMETER :: J1Vxi = 4213 + INTEGER(IntKi), PARAMETER :: J2Vxi = 4214 + INTEGER(IntKi), PARAMETER :: J3Vxi = 4215 + INTEGER(IntKi), PARAMETER :: J4Vxi = 4216 + INTEGER(IntKi), PARAMETER :: J5Vxi = 4217 + INTEGER(IntKi), PARAMETER :: J6Vxi = 4218 + INTEGER(IntKi), PARAMETER :: J7Vxi = 4219 + INTEGER(IntKi), PARAMETER :: J8Vxi = 4220 + INTEGER(IntKi), PARAMETER :: J9Vxi = 4221 + INTEGER(IntKi), PARAMETER :: J1Vyi = 4222 + INTEGER(IntKi), PARAMETER :: J2Vyi = 4223 + INTEGER(IntKi), PARAMETER :: J3Vyi = 4224 + INTEGER(IntKi), PARAMETER :: J4Vyi = 4225 + INTEGER(IntKi), PARAMETER :: J5Vyi = 4226 + INTEGER(IntKi), PARAMETER :: J6Vyi = 4227 + INTEGER(IntKi), PARAMETER :: J7Vyi = 4228 + INTEGER(IntKi), PARAMETER :: J8Vyi = 4229 + INTEGER(IntKi), PARAMETER :: J9Vyi = 4230 + INTEGER(IntKi), PARAMETER :: J1Vzi = 4231 + INTEGER(IntKi), PARAMETER :: J2Vzi = 4232 + INTEGER(IntKi), PARAMETER :: J3Vzi = 4233 + INTEGER(IntKi), PARAMETER :: J4Vzi = 4234 + INTEGER(IntKi), PARAMETER :: J5Vzi = 4235 + INTEGER(IntKi), PARAMETER :: J6Vzi = 4236 + INTEGER(IntKi), PARAMETER :: J7Vzi = 4237 + INTEGER(IntKi), PARAMETER :: J8Vzi = 4238 + INTEGER(IntKi), PARAMETER :: J9Vzi = 4239 + INTEGER(IntKi), PARAMETER :: J1Axi = 4240 + INTEGER(IntKi), PARAMETER :: J2Axi = 4241 + INTEGER(IntKi), PARAMETER :: J3Axi = 4242 + INTEGER(IntKi), PARAMETER :: J4Axi = 4243 + INTEGER(IntKi), PARAMETER :: J5Axi = 4244 + INTEGER(IntKi), PARAMETER :: J6Axi = 4245 + INTEGER(IntKi), PARAMETER :: J7Axi = 4246 + INTEGER(IntKi), PARAMETER :: J8Axi = 4247 + INTEGER(IntKi), PARAMETER :: J9Axi = 4248 + INTEGER(IntKi), PARAMETER :: J1Ayi = 4249 + INTEGER(IntKi), PARAMETER :: J2Ayi = 4250 + INTEGER(IntKi), PARAMETER :: J3Ayi = 4251 + INTEGER(IntKi), PARAMETER :: J4Ayi = 4252 + INTEGER(IntKi), PARAMETER :: J5Ayi = 4253 + INTEGER(IntKi), PARAMETER :: J6Ayi = 4254 + INTEGER(IntKi), PARAMETER :: J7Ayi = 4255 + INTEGER(IntKi), PARAMETER :: J8Ayi = 4256 + INTEGER(IntKi), PARAMETER :: J9Ayi = 4257 + INTEGER(IntKi), PARAMETER :: J1Azi = 4258 + INTEGER(IntKi), PARAMETER :: J2Azi = 4259 + INTEGER(IntKi), PARAMETER :: J3Azi = 4260 + INTEGER(IntKi), PARAMETER :: J4Azi = 4261 + INTEGER(IntKi), PARAMETER :: J5Azi = 4262 + INTEGER(IntKi), PARAMETER :: J6Azi = 4263 + INTEGER(IntKi), PARAMETER :: J7Azi = 4264 + INTEGER(IntKi), PARAMETER :: J8Azi = 4265 + INTEGER(IntKi), PARAMETER :: J9Azi = 4266 + INTEGER(IntKi), PARAMETER :: J1DynP = 4267 + INTEGER(IntKi), PARAMETER :: J2DynP = 4268 + INTEGER(IntKi), PARAMETER :: J3DynP = 4269 + INTEGER(IntKi), PARAMETER :: J4DynP = 4270 + INTEGER(IntKi), PARAMETER :: J5DynP = 4271 + INTEGER(IntKi), PARAMETER :: J6DynP = 4272 + INTEGER(IntKi), PARAMETER :: J7DynP = 4273 + INTEGER(IntKi), PARAMETER :: J8DynP = 4274 + INTEGER(IntKi), PARAMETER :: J9DynP = 4275 + INTEGER(IntKi), PARAMETER :: J1WaveElev = 4276 + INTEGER(IntKi), PARAMETER :: J2WaveElev = 4277 + INTEGER(IntKi), PARAMETER :: J3WaveElev = 4278 + INTEGER(IntKi), PARAMETER :: J4WaveElev = 4279 + INTEGER(IntKi), PARAMETER :: J5WaveElev = 4280 + INTEGER(IntKi), PARAMETER :: J6WaveElev = 4281 + INTEGER(IntKi), PARAMETER :: J7WaveElev = 4282 + INTEGER(IntKi), PARAMETER :: J8WaveElev = 4283 + INTEGER(IntKi), PARAMETER :: J9WaveElev = 4284 + INTEGER(IntKi), PARAMETER :: J1WaveElv1 = 4285 + INTEGER(IntKi), PARAMETER :: J2WaveElv1 = 4286 + INTEGER(IntKi), PARAMETER :: J3WaveElv1 = 4287 + INTEGER(IntKi), PARAMETER :: J4WaveElv1 = 4288 + INTEGER(IntKi), PARAMETER :: J5WaveElv1 = 4289 + INTEGER(IntKi), PARAMETER :: J6WaveElv1 = 4290 + INTEGER(IntKi), PARAMETER :: J7WaveElv1 = 4291 + INTEGER(IntKi), PARAMETER :: J8WaveElv1 = 4292 + INTEGER(IntKi), PARAMETER :: J9WaveElv1 = 4293 + INTEGER(IntKi), PARAMETER :: J1WaveElv2 = 4294 + INTEGER(IntKi), PARAMETER :: J2WaveElv2 = 4295 + INTEGER(IntKi), PARAMETER :: J3WaveElv2 = 4296 + INTEGER(IntKi), PARAMETER :: J4WaveElv2 = 4297 + INTEGER(IntKi), PARAMETER :: J5WaveElv2 = 4298 + INTEGER(IntKi), PARAMETER :: J6WaveElv2 = 4299 + INTEGER(IntKi), PARAMETER :: J7WaveElv2 = 4300 + INTEGER(IntKi), PARAMETER :: J8WaveElv2 = 4301 + INTEGER(IntKi), PARAMETER :: J9WaveElv2 = 4302 + INTEGER(IntKi), PARAMETER :: J1STVxi = 4303 + INTEGER(IntKi), PARAMETER :: J2STVxi = 4304 + INTEGER(IntKi), PARAMETER :: J3STVxi = 4305 + INTEGER(IntKi), PARAMETER :: J4STVxi = 4306 + INTEGER(IntKi), PARAMETER :: J5STVxi = 4307 + INTEGER(IntKi), PARAMETER :: J6STVxi = 4308 + INTEGER(IntKi), PARAMETER :: J7STVxi = 4309 + INTEGER(IntKi), PARAMETER :: J8STVxi = 4310 + INTEGER(IntKi), PARAMETER :: J9STVxi = 4311 + INTEGER(IntKi), PARAMETER :: J1STVyi = 4312 + INTEGER(IntKi), PARAMETER :: J2STVyi = 4313 + INTEGER(IntKi), PARAMETER :: J3STVyi = 4314 + INTEGER(IntKi), PARAMETER :: J4STVyi = 4315 + INTEGER(IntKi), PARAMETER :: J5STVyi = 4316 + INTEGER(IntKi), PARAMETER :: J6STVyi = 4317 + INTEGER(IntKi), PARAMETER :: J7STVyi = 4318 + INTEGER(IntKi), PARAMETER :: J8STVyi = 4319 + INTEGER(IntKi), PARAMETER :: J9STVyi = 4320 + INTEGER(IntKi), PARAMETER :: J1STVzi = 4321 + INTEGER(IntKi), PARAMETER :: J2STVzi = 4322 + INTEGER(IntKi), PARAMETER :: J3STVzi = 4323 + INTEGER(IntKi), PARAMETER :: J4STVzi = 4324 + INTEGER(IntKi), PARAMETER :: J5STVzi = 4325 + INTEGER(IntKi), PARAMETER :: J6STVzi = 4326 + INTEGER(IntKi), PARAMETER :: J7STVzi = 4327 + INTEGER(IntKi), PARAMETER :: J8STVzi = 4328 + INTEGER(IntKi), PARAMETER :: J9STVzi = 4329 + INTEGER(IntKi), PARAMETER :: J1STAxi = 4330 + INTEGER(IntKi), PARAMETER :: J2STAxi = 4331 + INTEGER(IntKi), PARAMETER :: J3STAxi = 4332 + INTEGER(IntKi), PARAMETER :: J4STAxi = 4333 + INTEGER(IntKi), PARAMETER :: J5STAxi = 4334 + INTEGER(IntKi), PARAMETER :: J6STAxi = 4335 + INTEGER(IntKi), PARAMETER :: J7STAxi = 4336 + INTEGER(IntKi), PARAMETER :: J8STAxi = 4337 + INTEGER(IntKi), PARAMETER :: J9STAxi = 4338 + INTEGER(IntKi), PARAMETER :: J1STAyi = 4339 + INTEGER(IntKi), PARAMETER :: J2STAyi = 4340 + INTEGER(IntKi), PARAMETER :: J3STAyi = 4341 + INTEGER(IntKi), PARAMETER :: J4STAyi = 4342 + INTEGER(IntKi), PARAMETER :: J5STAyi = 4343 + INTEGER(IntKi), PARAMETER :: J6STAyi = 4344 + INTEGER(IntKi), PARAMETER :: J7STAyi = 4345 + INTEGER(IntKi), PARAMETER :: J8STAyi = 4346 + INTEGER(IntKi), PARAMETER :: J9STAyi = 4347 + INTEGER(IntKi), PARAMETER :: J1STAzi = 4348 + INTEGER(IntKi), PARAMETER :: J2STAzi = 4349 + INTEGER(IntKi), PARAMETER :: J3STAzi = 4350 + INTEGER(IntKi), PARAMETER :: J4STAzi = 4351 + INTEGER(IntKi), PARAMETER :: J5STAzi = 4352 + INTEGER(IntKi), PARAMETER :: J6STAzi = 4353 + INTEGER(IntKi), PARAMETER :: J7STAzi = 4354 + INTEGER(IntKi), PARAMETER :: J8STAzi = 4355 + INTEGER(IntKi), PARAMETER :: J9STAzi = 4356 ! Joint Loads: - INTEGER(IntKi), PARAMETER :: J1FDxi = 4330 - INTEGER(IntKi), PARAMETER :: J2FDxi = 4331 - INTEGER(IntKi), PARAMETER :: J3FDxi = 4332 - INTEGER(IntKi), PARAMETER :: J4FDxi = 4333 - INTEGER(IntKi), PARAMETER :: J5FDxi = 4334 - INTEGER(IntKi), PARAMETER :: J6FDxi = 4335 - INTEGER(IntKi), PARAMETER :: J7FDxi = 4336 - INTEGER(IntKi), PARAMETER :: J8FDxi = 4337 - INTEGER(IntKi), PARAMETER :: J9FDxi = 4338 - INTEGER(IntKi), PARAMETER :: J1FDyi = 4339 - INTEGER(IntKi), PARAMETER :: J2FDyi = 4340 - INTEGER(IntKi), PARAMETER :: J3FDyi = 4341 - INTEGER(IntKi), PARAMETER :: J4FDyi = 4342 - INTEGER(IntKi), PARAMETER :: J5FDyi = 4343 - INTEGER(IntKi), PARAMETER :: J6FDyi = 4344 - INTEGER(IntKi), PARAMETER :: J7FDyi = 4345 - INTEGER(IntKi), PARAMETER :: J8FDyi = 4346 - INTEGER(IntKi), PARAMETER :: J9FDyi = 4347 - INTEGER(IntKi), PARAMETER :: J1FDzi = 4348 - INTEGER(IntKi), PARAMETER :: J2FDzi = 4349 - INTEGER(IntKi), PARAMETER :: J3FDzi = 4350 - INTEGER(IntKi), PARAMETER :: J4FDzi = 4351 - INTEGER(IntKi), PARAMETER :: J5FDzi = 4352 - INTEGER(IntKi), PARAMETER :: J6FDzi = 4353 - INTEGER(IntKi), PARAMETER :: J7FDzi = 4354 - INTEGER(IntKi), PARAMETER :: J8FDzi = 4355 - INTEGER(IntKi), PARAMETER :: J9FDzi = 4356 - INTEGER(IntKi), PARAMETER :: J1FBxi = 4357 - INTEGER(IntKi), PARAMETER :: J2FBxi = 4358 - INTEGER(IntKi), PARAMETER :: J3FBxi = 4359 - INTEGER(IntKi), PARAMETER :: J4FBxi = 4360 - INTEGER(IntKi), PARAMETER :: J5FBxi = 4361 - INTEGER(IntKi), PARAMETER :: J6FBxi = 4362 - INTEGER(IntKi), PARAMETER :: J7FBxi = 4363 - INTEGER(IntKi), PARAMETER :: J8FBxi = 4364 - INTEGER(IntKi), PARAMETER :: J9FBxi = 4365 - INTEGER(IntKi), PARAMETER :: J1FByi = 4366 - INTEGER(IntKi), PARAMETER :: J2FByi = 4367 - INTEGER(IntKi), PARAMETER :: J3FByi = 4368 - INTEGER(IntKi), PARAMETER :: J4FByi = 4369 - INTEGER(IntKi), PARAMETER :: J5FByi = 4370 - INTEGER(IntKi), PARAMETER :: J6FByi = 4371 - INTEGER(IntKi), PARAMETER :: J7FByi = 4372 - INTEGER(IntKi), PARAMETER :: J8FByi = 4373 - INTEGER(IntKi), PARAMETER :: J9FByi = 4374 - INTEGER(IntKi), PARAMETER :: J1FBzi = 4375 - INTEGER(IntKi), PARAMETER :: J2FBzi = 4376 - INTEGER(IntKi), PARAMETER :: J3FBzi = 4377 - INTEGER(IntKi), PARAMETER :: J4FBzi = 4378 - INTEGER(IntKi), PARAMETER :: J5FBzi = 4379 - INTEGER(IntKi), PARAMETER :: J6FBzi = 4380 - INTEGER(IntKi), PARAMETER :: J7FBzi = 4381 - INTEGER(IntKi), PARAMETER :: J8FBzi = 4382 - INTEGER(IntKi), PARAMETER :: J9FBzi = 4383 - INTEGER(IntKi), PARAMETER :: J1MBxi = 4384 - INTEGER(IntKi), PARAMETER :: J2MBxi = 4385 - INTEGER(IntKi), PARAMETER :: J3MBxi = 4386 - INTEGER(IntKi), PARAMETER :: J4MBxi = 4387 - INTEGER(IntKi), PARAMETER :: J5MBxi = 4388 - INTEGER(IntKi), PARAMETER :: J6MBxi = 4389 - INTEGER(IntKi), PARAMETER :: J7MBxi = 4390 - INTEGER(IntKi), PARAMETER :: J8MBxi = 4391 - INTEGER(IntKi), PARAMETER :: J9MBxi = 4392 - INTEGER(IntKi), PARAMETER :: J1MByi = 4393 - INTEGER(IntKi), PARAMETER :: J2MByi = 4394 - INTEGER(IntKi), PARAMETER :: J3MByi = 4395 - INTEGER(IntKi), PARAMETER :: J4MByi = 4396 - INTEGER(IntKi), PARAMETER :: J5MByi = 4397 - INTEGER(IntKi), PARAMETER :: J6MByi = 4398 - INTEGER(IntKi), PARAMETER :: J7MByi = 4399 - INTEGER(IntKi), PARAMETER :: J8MByi = 4400 - INTEGER(IntKi), PARAMETER :: J9MByi = 4401 - INTEGER(IntKi), PARAMETER :: J1MBzi = 4402 - INTEGER(IntKi), PARAMETER :: J2MBzi = 4403 - INTEGER(IntKi), PARAMETER :: J3MBzi = 4404 - INTEGER(IntKi), PARAMETER :: J4MBzi = 4405 - INTEGER(IntKi), PARAMETER :: J5MBzi = 4406 - INTEGER(IntKi), PARAMETER :: J6MBzi = 4407 - INTEGER(IntKi), PARAMETER :: J7MBzi = 4408 - INTEGER(IntKi), PARAMETER :: J8MBzi = 4409 - INTEGER(IntKi), PARAMETER :: J9MBzi = 4410 - INTEGER(IntKi), PARAMETER :: J1FBFxi = 4411 - INTEGER(IntKi), PARAMETER :: J2FBFxi = 4412 - INTEGER(IntKi), PARAMETER :: J3FBFxi = 4413 - INTEGER(IntKi), PARAMETER :: J4FBFxi = 4414 - INTEGER(IntKi), PARAMETER :: J5FBFxi = 4415 - INTEGER(IntKi), PARAMETER :: J6FBFxi = 4416 - INTEGER(IntKi), PARAMETER :: J7FBFxi = 4417 - INTEGER(IntKi), PARAMETER :: J8FBFxi = 4418 - INTEGER(IntKi), PARAMETER :: J9FBFxi = 4419 - INTEGER(IntKi), PARAMETER :: J1FBFyi = 4420 - INTEGER(IntKi), PARAMETER :: J2FBFyi = 4421 - INTEGER(IntKi), PARAMETER :: J3FBFyi = 4422 - INTEGER(IntKi), PARAMETER :: J4FBFyi = 4423 - INTEGER(IntKi), PARAMETER :: J5FBFyi = 4424 - INTEGER(IntKi), PARAMETER :: J6FBFyi = 4425 - INTEGER(IntKi), PARAMETER :: J7FBFyi = 4426 - INTEGER(IntKi), PARAMETER :: J8FBFyi = 4427 - INTEGER(IntKi), PARAMETER :: J9FBFyi = 4428 - INTEGER(IntKi), PARAMETER :: J1FBFzi = 4429 - INTEGER(IntKi), PARAMETER :: J2FBFzi = 4430 - INTEGER(IntKi), PARAMETER :: J3FBFzi = 4431 - INTEGER(IntKi), PARAMETER :: J4FBFzi = 4432 - INTEGER(IntKi), PARAMETER :: J5FBFzi = 4433 - INTEGER(IntKi), PARAMETER :: J6FBFzi = 4434 - INTEGER(IntKi), PARAMETER :: J7FBFzi = 4435 - INTEGER(IntKi), PARAMETER :: J8FBFzi = 4436 - INTEGER(IntKi), PARAMETER :: J9FBFzi = 4437 - INTEGER(IntKi), PARAMETER :: J1MBFxi = 4438 - INTEGER(IntKi), PARAMETER :: J2MBFxi = 4439 - INTEGER(IntKi), PARAMETER :: J3MBFxi = 4440 - INTEGER(IntKi), PARAMETER :: J4MBFxi = 4441 - INTEGER(IntKi), PARAMETER :: J5MBFxi = 4442 - INTEGER(IntKi), PARAMETER :: J6MBFxi = 4443 - INTEGER(IntKi), PARAMETER :: J7MBFxi = 4444 - INTEGER(IntKi), PARAMETER :: J8MBFxi = 4445 - INTEGER(IntKi), PARAMETER :: J9MBFxi = 4446 - INTEGER(IntKi), PARAMETER :: J1MBFyi = 4447 - INTEGER(IntKi), PARAMETER :: J2MBFyi = 4448 - INTEGER(IntKi), PARAMETER :: J3MBFyi = 4449 - INTEGER(IntKi), PARAMETER :: J4MBFyi = 4450 - INTEGER(IntKi), PARAMETER :: J5MBFyi = 4451 - INTEGER(IntKi), PARAMETER :: J6MBFyi = 4452 - INTEGER(IntKi), PARAMETER :: J7MBFyi = 4453 - INTEGER(IntKi), PARAMETER :: J8MBFyi = 4454 - INTEGER(IntKi), PARAMETER :: J9MBFyi = 4455 - INTEGER(IntKi), PARAMETER :: J1MBFzi = 4456 - INTEGER(IntKi), PARAMETER :: J2MBFzi = 4457 - INTEGER(IntKi), PARAMETER :: J3MBFzi = 4458 - INTEGER(IntKi), PARAMETER :: J4MBFzi = 4459 - INTEGER(IntKi), PARAMETER :: J5MBFzi = 4460 - INTEGER(IntKi), PARAMETER :: J6MBFzi = 4461 - INTEGER(IntKi), PARAMETER :: J7MBFzi = 4462 - INTEGER(IntKi), PARAMETER :: J8MBFzi = 4463 - INTEGER(IntKi), PARAMETER :: J9MBFzi = 4464 - INTEGER(IntKi), PARAMETER :: J1FIxi = 4465 - INTEGER(IntKi), PARAMETER :: J2FIxi = 4466 - INTEGER(IntKi), PARAMETER :: J3FIxi = 4467 - INTEGER(IntKi), PARAMETER :: J4FIxi = 4468 - INTEGER(IntKi), PARAMETER :: J5FIxi = 4469 - INTEGER(IntKi), PARAMETER :: J6FIxi = 4470 - INTEGER(IntKi), PARAMETER :: J7FIxi = 4471 - INTEGER(IntKi), PARAMETER :: J8FIxi = 4472 - INTEGER(IntKi), PARAMETER :: J9FIxi = 4473 - INTEGER(IntKi), PARAMETER :: J1FIyi = 4474 - INTEGER(IntKi), PARAMETER :: J2FIyi = 4475 - INTEGER(IntKi), PARAMETER :: J3FIyi = 4476 - INTEGER(IntKi), PARAMETER :: J4FIyi = 4477 - INTEGER(IntKi), PARAMETER :: J5FIyi = 4478 - INTEGER(IntKi), PARAMETER :: J6FIyi = 4479 - INTEGER(IntKi), PARAMETER :: J7FIyi = 4480 - INTEGER(IntKi), PARAMETER :: J8FIyi = 4481 - INTEGER(IntKi), PARAMETER :: J9FIyi = 4482 - INTEGER(IntKi), PARAMETER :: J1FIzi = 4483 - INTEGER(IntKi), PARAMETER :: J2FIzi = 4484 - INTEGER(IntKi), PARAMETER :: J3FIzi = 4485 - INTEGER(IntKi), PARAMETER :: J4FIzi = 4486 - INTEGER(IntKi), PARAMETER :: J5FIzi = 4487 - INTEGER(IntKi), PARAMETER :: J6FIzi = 4488 - INTEGER(IntKi), PARAMETER :: J7FIzi = 4489 - INTEGER(IntKi), PARAMETER :: J8FIzi = 4490 - INTEGER(IntKi), PARAMETER :: J9FIzi = 4491 - INTEGER(IntKi), PARAMETER :: J1FAMxi = 4492 - INTEGER(IntKi), PARAMETER :: J2FAMxi = 4493 - INTEGER(IntKi), PARAMETER :: J3FAMxi = 4494 - INTEGER(IntKi), PARAMETER :: J4FAMxi = 4495 - INTEGER(IntKi), PARAMETER :: J5FAMxi = 4496 - INTEGER(IntKi), PARAMETER :: J6FAMxi = 4497 - INTEGER(IntKi), PARAMETER :: J7FAMxi = 4498 - INTEGER(IntKi), PARAMETER :: J8FAMxi = 4499 - INTEGER(IntKi), PARAMETER :: J9FAMxi = 4500 - INTEGER(IntKi), PARAMETER :: J1FAMyi = 4501 - INTEGER(IntKi), PARAMETER :: J2FAMyi = 4502 - INTEGER(IntKi), PARAMETER :: J3FAMyi = 4503 - INTEGER(IntKi), PARAMETER :: J4FAMyi = 4504 - INTEGER(IntKi), PARAMETER :: J5FAMyi = 4505 - INTEGER(IntKi), PARAMETER :: J6FAMyi = 4506 - INTEGER(IntKi), PARAMETER :: J7FAMyi = 4507 - INTEGER(IntKi), PARAMETER :: J8FAMyi = 4508 - INTEGER(IntKi), PARAMETER :: J9FAMyi = 4509 - INTEGER(IntKi), PARAMETER :: J1FAMzi = 4510 - INTEGER(IntKi), PARAMETER :: J2FAMzi = 4511 - INTEGER(IntKi), PARAMETER :: J3FAMzi = 4512 - INTEGER(IntKi), PARAMETER :: J4FAMzi = 4513 - INTEGER(IntKi), PARAMETER :: J5FAMzi = 4514 - INTEGER(IntKi), PARAMETER :: J6FAMzi = 4515 - INTEGER(IntKi), PARAMETER :: J7FAMzi = 4516 - INTEGER(IntKi), PARAMETER :: J8FAMzi = 4517 - INTEGER(IntKi), PARAMETER :: J9FAMzi = 4518 - INTEGER(IntKi), PARAMETER :: J1FAGxi = 4519 - INTEGER(IntKi), PARAMETER :: J2FAGxi = 4520 - INTEGER(IntKi), PARAMETER :: J3FAGxi = 4521 - INTEGER(IntKi), PARAMETER :: J4FAGxi = 4522 - INTEGER(IntKi), PARAMETER :: J5FAGxi = 4523 - INTEGER(IntKi), PARAMETER :: J6FAGxi = 4524 - INTEGER(IntKi), PARAMETER :: J7FAGxi = 4525 - INTEGER(IntKi), PARAMETER :: J8FAGxi = 4526 - INTEGER(IntKi), PARAMETER :: J9FAGxi = 4527 - INTEGER(IntKi), PARAMETER :: J1FAGyi = 4528 - INTEGER(IntKi), PARAMETER :: J2FAGyi = 4529 - INTEGER(IntKi), PARAMETER :: J3FAGyi = 4530 - INTEGER(IntKi), PARAMETER :: J4FAGyi = 4531 - INTEGER(IntKi), PARAMETER :: J5FAGyi = 4532 - INTEGER(IntKi), PARAMETER :: J6FAGyi = 4533 - INTEGER(IntKi), PARAMETER :: J7FAGyi = 4534 - INTEGER(IntKi), PARAMETER :: J8FAGyi = 4535 - INTEGER(IntKi), PARAMETER :: J9FAGyi = 4536 - INTEGER(IntKi), PARAMETER :: J1FAGzi = 4537 - INTEGER(IntKi), PARAMETER :: J2FAGzi = 4538 - INTEGER(IntKi), PARAMETER :: J3FAGzi = 4539 - INTEGER(IntKi), PARAMETER :: J4FAGzi = 4540 - INTEGER(IntKi), PARAMETER :: J5FAGzi = 4541 - INTEGER(IntKi), PARAMETER :: J6FAGzi = 4542 - INTEGER(IntKi), PARAMETER :: J7FAGzi = 4543 - INTEGER(IntKi), PARAMETER :: J8FAGzi = 4544 - INTEGER(IntKi), PARAMETER :: J9FAGzi = 4545 - INTEGER(IntKi), PARAMETER :: J1MAGxi = 4546 - INTEGER(IntKi), PARAMETER :: J2MAGxi = 4547 - INTEGER(IntKi), PARAMETER :: J3MAGxi = 4548 - INTEGER(IntKi), PARAMETER :: J4MAGxi = 4549 - INTEGER(IntKi), PARAMETER :: J5MAGxi = 4550 - INTEGER(IntKi), PARAMETER :: J6MAGxi = 4551 - INTEGER(IntKi), PARAMETER :: J7MAGxi = 4552 - INTEGER(IntKi), PARAMETER :: J8MAGxi = 4553 - INTEGER(IntKi), PARAMETER :: J9MAGxi = 4554 - INTEGER(IntKi), PARAMETER :: J1MAGyi = 4555 - INTEGER(IntKi), PARAMETER :: J2MAGyi = 4556 - INTEGER(IntKi), PARAMETER :: J3MAGyi = 4557 - INTEGER(IntKi), PARAMETER :: J4MAGyi = 4558 - INTEGER(IntKi), PARAMETER :: J5MAGyi = 4559 - INTEGER(IntKi), PARAMETER :: J6MAGyi = 4560 - INTEGER(IntKi), PARAMETER :: J7MAGyi = 4561 - INTEGER(IntKi), PARAMETER :: J8MAGyi = 4562 - INTEGER(IntKi), PARAMETER :: J9MAGyi = 4563 - INTEGER(IntKi), PARAMETER :: J1MAGzi = 4564 - INTEGER(IntKi), PARAMETER :: J2MAGzi = 4565 - INTEGER(IntKi), PARAMETER :: J3MAGzi = 4566 - INTEGER(IntKi), PARAMETER :: J4MAGzi = 4567 - INTEGER(IntKi), PARAMETER :: J5MAGzi = 4568 - INTEGER(IntKi), PARAMETER :: J6MAGzi = 4569 - INTEGER(IntKi), PARAMETER :: J7MAGzi = 4570 - INTEGER(IntKi), PARAMETER :: J8MAGzi = 4571 - INTEGER(IntKi), PARAMETER :: J9MAGzi = 4572 - INTEGER(IntKi), PARAMETER :: J1FMGxi = 4573 - INTEGER(IntKi), PARAMETER :: J2FMGxi = 4574 - INTEGER(IntKi), PARAMETER :: J3FMGxi = 4575 - INTEGER(IntKi), PARAMETER :: J4FMGxi = 4576 - INTEGER(IntKi), PARAMETER :: J5FMGxi = 4577 - INTEGER(IntKi), PARAMETER :: J6FMGxi = 4578 - INTEGER(IntKi), PARAMETER :: J7FMGxi = 4579 - INTEGER(IntKi), PARAMETER :: J8FMGxi = 4580 - INTEGER(IntKi), PARAMETER :: J9FMGxi = 4581 - INTEGER(IntKi), PARAMETER :: J1FMGyi = 4582 - INTEGER(IntKi), PARAMETER :: J2FMGyi = 4583 - INTEGER(IntKi), PARAMETER :: J3FMGyi = 4584 - INTEGER(IntKi), PARAMETER :: J4FMGyi = 4585 - INTEGER(IntKi), PARAMETER :: J5FMGyi = 4586 - INTEGER(IntKi), PARAMETER :: J6FMGyi = 4587 - INTEGER(IntKi), PARAMETER :: J7FMGyi = 4588 - INTEGER(IntKi), PARAMETER :: J8FMGyi = 4589 - INTEGER(IntKi), PARAMETER :: J9FMGyi = 4590 - INTEGER(IntKi), PARAMETER :: J1FMGzi = 4591 - INTEGER(IntKi), PARAMETER :: J2FMGzi = 4592 - INTEGER(IntKi), PARAMETER :: J3FMGzi = 4593 - INTEGER(IntKi), PARAMETER :: J4FMGzi = 4594 - INTEGER(IntKi), PARAMETER :: J5FMGzi = 4595 - INTEGER(IntKi), PARAMETER :: J6FMGzi = 4596 - INTEGER(IntKi), PARAMETER :: J7FMGzi = 4597 - INTEGER(IntKi), PARAMETER :: J8FMGzi = 4598 - INTEGER(IntKi), PARAMETER :: J9FMGzi = 4599 + INTEGER(IntKi), PARAMETER :: J1FDxi = 4357 + INTEGER(IntKi), PARAMETER :: J2FDxi = 4358 + INTEGER(IntKi), PARAMETER :: J3FDxi = 4359 + INTEGER(IntKi), PARAMETER :: J4FDxi = 4360 + INTEGER(IntKi), PARAMETER :: J5FDxi = 4361 + INTEGER(IntKi), PARAMETER :: J6FDxi = 4362 + INTEGER(IntKi), PARAMETER :: J7FDxi = 4363 + INTEGER(IntKi), PARAMETER :: J8FDxi = 4364 + INTEGER(IntKi), PARAMETER :: J9FDxi = 4365 + INTEGER(IntKi), PARAMETER :: J1FDyi = 4366 + INTEGER(IntKi), PARAMETER :: J2FDyi = 4367 + INTEGER(IntKi), PARAMETER :: J3FDyi = 4368 + INTEGER(IntKi), PARAMETER :: J4FDyi = 4369 + INTEGER(IntKi), PARAMETER :: J5FDyi = 4370 + INTEGER(IntKi), PARAMETER :: J6FDyi = 4371 + INTEGER(IntKi), PARAMETER :: J7FDyi = 4372 + INTEGER(IntKi), PARAMETER :: J8FDyi = 4373 + INTEGER(IntKi), PARAMETER :: J9FDyi = 4374 + INTEGER(IntKi), PARAMETER :: J1FDzi = 4375 + INTEGER(IntKi), PARAMETER :: J2FDzi = 4376 + INTEGER(IntKi), PARAMETER :: J3FDzi = 4377 + INTEGER(IntKi), PARAMETER :: J4FDzi = 4378 + INTEGER(IntKi), PARAMETER :: J5FDzi = 4379 + INTEGER(IntKi), PARAMETER :: J6FDzi = 4380 + INTEGER(IntKi), PARAMETER :: J7FDzi = 4381 + INTEGER(IntKi), PARAMETER :: J8FDzi = 4382 + INTEGER(IntKi), PARAMETER :: J9FDzi = 4383 + INTEGER(IntKi), PARAMETER :: J1FBxi = 4384 + INTEGER(IntKi), PARAMETER :: J2FBxi = 4385 + INTEGER(IntKi), PARAMETER :: J3FBxi = 4386 + INTEGER(IntKi), PARAMETER :: J4FBxi = 4387 + INTEGER(IntKi), PARAMETER :: J5FBxi = 4388 + INTEGER(IntKi), PARAMETER :: J6FBxi = 4389 + INTEGER(IntKi), PARAMETER :: J7FBxi = 4390 + INTEGER(IntKi), PARAMETER :: J8FBxi = 4391 + INTEGER(IntKi), PARAMETER :: J9FBxi = 4392 + INTEGER(IntKi), PARAMETER :: J1FByi = 4393 + INTEGER(IntKi), PARAMETER :: J2FByi = 4394 + INTEGER(IntKi), PARAMETER :: J3FByi = 4395 + INTEGER(IntKi), PARAMETER :: J4FByi = 4396 + INTEGER(IntKi), PARAMETER :: J5FByi = 4397 + INTEGER(IntKi), PARAMETER :: J6FByi = 4398 + INTEGER(IntKi), PARAMETER :: J7FByi = 4399 + INTEGER(IntKi), PARAMETER :: J8FByi = 4400 + INTEGER(IntKi), PARAMETER :: J9FByi = 4401 + INTEGER(IntKi), PARAMETER :: J1FBzi = 4402 + INTEGER(IntKi), PARAMETER :: J2FBzi = 4403 + INTEGER(IntKi), PARAMETER :: J3FBzi = 4404 + INTEGER(IntKi), PARAMETER :: J4FBzi = 4405 + INTEGER(IntKi), PARAMETER :: J5FBzi = 4406 + INTEGER(IntKi), PARAMETER :: J6FBzi = 4407 + INTEGER(IntKi), PARAMETER :: J7FBzi = 4408 + INTEGER(IntKi), PARAMETER :: J8FBzi = 4409 + INTEGER(IntKi), PARAMETER :: J9FBzi = 4410 + INTEGER(IntKi), PARAMETER :: J1MBxi = 4411 + INTEGER(IntKi), PARAMETER :: J2MBxi = 4412 + INTEGER(IntKi), PARAMETER :: J3MBxi = 4413 + INTEGER(IntKi), PARAMETER :: J4MBxi = 4414 + INTEGER(IntKi), PARAMETER :: J5MBxi = 4415 + INTEGER(IntKi), PARAMETER :: J6MBxi = 4416 + INTEGER(IntKi), PARAMETER :: J7MBxi = 4417 + INTEGER(IntKi), PARAMETER :: J8MBxi = 4418 + INTEGER(IntKi), PARAMETER :: J9MBxi = 4419 + INTEGER(IntKi), PARAMETER :: J1MByi = 4420 + INTEGER(IntKi), PARAMETER :: J2MByi = 4421 + INTEGER(IntKi), PARAMETER :: J3MByi = 4422 + INTEGER(IntKi), PARAMETER :: J4MByi = 4423 + INTEGER(IntKi), PARAMETER :: J5MByi = 4424 + INTEGER(IntKi), PARAMETER :: J6MByi = 4425 + INTEGER(IntKi), PARAMETER :: J7MByi = 4426 + INTEGER(IntKi), PARAMETER :: J8MByi = 4427 + INTEGER(IntKi), PARAMETER :: J9MByi = 4428 + INTEGER(IntKi), PARAMETER :: J1MBzi = 4429 + INTEGER(IntKi), PARAMETER :: J2MBzi = 4430 + INTEGER(IntKi), PARAMETER :: J3MBzi = 4431 + INTEGER(IntKi), PARAMETER :: J4MBzi = 4432 + INTEGER(IntKi), PARAMETER :: J5MBzi = 4433 + INTEGER(IntKi), PARAMETER :: J6MBzi = 4434 + INTEGER(IntKi), PARAMETER :: J7MBzi = 4435 + INTEGER(IntKi), PARAMETER :: J8MBzi = 4436 + INTEGER(IntKi), PARAMETER :: J9MBzi = 4437 + INTEGER(IntKi), PARAMETER :: J1FBFxi = 4438 + INTEGER(IntKi), PARAMETER :: J2FBFxi = 4439 + INTEGER(IntKi), PARAMETER :: J3FBFxi = 4440 + INTEGER(IntKi), PARAMETER :: J4FBFxi = 4441 + INTEGER(IntKi), PARAMETER :: J5FBFxi = 4442 + INTEGER(IntKi), PARAMETER :: J6FBFxi = 4443 + INTEGER(IntKi), PARAMETER :: J7FBFxi = 4444 + INTEGER(IntKi), PARAMETER :: J8FBFxi = 4445 + INTEGER(IntKi), PARAMETER :: J9FBFxi = 4446 + INTEGER(IntKi), PARAMETER :: J1FBFyi = 4447 + INTEGER(IntKi), PARAMETER :: J2FBFyi = 4448 + INTEGER(IntKi), PARAMETER :: J3FBFyi = 4449 + INTEGER(IntKi), PARAMETER :: J4FBFyi = 4450 + INTEGER(IntKi), PARAMETER :: J5FBFyi = 4451 + INTEGER(IntKi), PARAMETER :: J6FBFyi = 4452 + INTEGER(IntKi), PARAMETER :: J7FBFyi = 4453 + INTEGER(IntKi), PARAMETER :: J8FBFyi = 4454 + INTEGER(IntKi), PARAMETER :: J9FBFyi = 4455 + INTEGER(IntKi), PARAMETER :: J1FBFzi = 4456 + INTEGER(IntKi), PARAMETER :: J2FBFzi = 4457 + INTEGER(IntKi), PARAMETER :: J3FBFzi = 4458 + INTEGER(IntKi), PARAMETER :: J4FBFzi = 4459 + INTEGER(IntKi), PARAMETER :: J5FBFzi = 4460 + INTEGER(IntKi), PARAMETER :: J6FBFzi = 4461 + INTEGER(IntKi), PARAMETER :: J7FBFzi = 4462 + INTEGER(IntKi), PARAMETER :: J8FBFzi = 4463 + INTEGER(IntKi), PARAMETER :: J9FBFzi = 4464 + INTEGER(IntKi), PARAMETER :: J1MBFxi = 4465 + INTEGER(IntKi), PARAMETER :: J2MBFxi = 4466 + INTEGER(IntKi), PARAMETER :: J3MBFxi = 4467 + INTEGER(IntKi), PARAMETER :: J4MBFxi = 4468 + INTEGER(IntKi), PARAMETER :: J5MBFxi = 4469 + INTEGER(IntKi), PARAMETER :: J6MBFxi = 4470 + INTEGER(IntKi), PARAMETER :: J7MBFxi = 4471 + INTEGER(IntKi), PARAMETER :: J8MBFxi = 4472 + INTEGER(IntKi), PARAMETER :: J9MBFxi = 4473 + INTEGER(IntKi), PARAMETER :: J1MBFyi = 4474 + INTEGER(IntKi), PARAMETER :: J2MBFyi = 4475 + INTEGER(IntKi), PARAMETER :: J3MBFyi = 4476 + INTEGER(IntKi), PARAMETER :: J4MBFyi = 4477 + INTEGER(IntKi), PARAMETER :: J5MBFyi = 4478 + INTEGER(IntKi), PARAMETER :: J6MBFyi = 4479 + INTEGER(IntKi), PARAMETER :: J7MBFyi = 4480 + INTEGER(IntKi), PARAMETER :: J8MBFyi = 4481 + INTEGER(IntKi), PARAMETER :: J9MBFyi = 4482 + INTEGER(IntKi), PARAMETER :: J1MBFzi = 4483 + INTEGER(IntKi), PARAMETER :: J2MBFzi = 4484 + INTEGER(IntKi), PARAMETER :: J3MBFzi = 4485 + INTEGER(IntKi), PARAMETER :: J4MBFzi = 4486 + INTEGER(IntKi), PARAMETER :: J5MBFzi = 4487 + INTEGER(IntKi), PARAMETER :: J6MBFzi = 4488 + INTEGER(IntKi), PARAMETER :: J7MBFzi = 4489 + INTEGER(IntKi), PARAMETER :: J8MBFzi = 4490 + INTEGER(IntKi), PARAMETER :: J9MBFzi = 4491 + INTEGER(IntKi), PARAMETER :: J1FIxi = 4492 + INTEGER(IntKi), PARAMETER :: J2FIxi = 4493 + INTEGER(IntKi), PARAMETER :: J3FIxi = 4494 + INTEGER(IntKi), PARAMETER :: J4FIxi = 4495 + INTEGER(IntKi), PARAMETER :: J5FIxi = 4496 + INTEGER(IntKi), PARAMETER :: J6FIxi = 4497 + INTEGER(IntKi), PARAMETER :: J7FIxi = 4498 + INTEGER(IntKi), PARAMETER :: J8FIxi = 4499 + INTEGER(IntKi), PARAMETER :: J9FIxi = 4500 + INTEGER(IntKi), PARAMETER :: J1FIyi = 4501 + INTEGER(IntKi), PARAMETER :: J2FIyi = 4502 + INTEGER(IntKi), PARAMETER :: J3FIyi = 4503 + INTEGER(IntKi), PARAMETER :: J4FIyi = 4504 + INTEGER(IntKi), PARAMETER :: J5FIyi = 4505 + INTEGER(IntKi), PARAMETER :: J6FIyi = 4506 + INTEGER(IntKi), PARAMETER :: J7FIyi = 4507 + INTEGER(IntKi), PARAMETER :: J8FIyi = 4508 + INTEGER(IntKi), PARAMETER :: J9FIyi = 4509 + INTEGER(IntKi), PARAMETER :: J1FIzi = 4510 + INTEGER(IntKi), PARAMETER :: J2FIzi = 4511 + INTEGER(IntKi), PARAMETER :: J3FIzi = 4512 + INTEGER(IntKi), PARAMETER :: J4FIzi = 4513 + INTEGER(IntKi), PARAMETER :: J5FIzi = 4514 + INTEGER(IntKi), PARAMETER :: J6FIzi = 4515 + INTEGER(IntKi), PARAMETER :: J7FIzi = 4516 + INTEGER(IntKi), PARAMETER :: J8FIzi = 4517 + INTEGER(IntKi), PARAMETER :: J9FIzi = 4518 + INTEGER(IntKi), PARAMETER :: J1FAMxi = 4519 + INTEGER(IntKi), PARAMETER :: J2FAMxi = 4520 + INTEGER(IntKi), PARAMETER :: J3FAMxi = 4521 + INTEGER(IntKi), PARAMETER :: J4FAMxi = 4522 + INTEGER(IntKi), PARAMETER :: J5FAMxi = 4523 + INTEGER(IntKi), PARAMETER :: J6FAMxi = 4524 + INTEGER(IntKi), PARAMETER :: J7FAMxi = 4525 + INTEGER(IntKi), PARAMETER :: J8FAMxi = 4526 + INTEGER(IntKi), PARAMETER :: J9FAMxi = 4527 + INTEGER(IntKi), PARAMETER :: J1FAMyi = 4528 + INTEGER(IntKi), PARAMETER :: J2FAMyi = 4529 + INTEGER(IntKi), PARAMETER :: J3FAMyi = 4530 + INTEGER(IntKi), PARAMETER :: J4FAMyi = 4531 + INTEGER(IntKi), PARAMETER :: J5FAMyi = 4532 + INTEGER(IntKi), PARAMETER :: J6FAMyi = 4533 + INTEGER(IntKi), PARAMETER :: J7FAMyi = 4534 + INTEGER(IntKi), PARAMETER :: J8FAMyi = 4535 + INTEGER(IntKi), PARAMETER :: J9FAMyi = 4536 + INTEGER(IntKi), PARAMETER :: J1FAMzi = 4537 + INTEGER(IntKi), PARAMETER :: J2FAMzi = 4538 + INTEGER(IntKi), PARAMETER :: J3FAMzi = 4539 + INTEGER(IntKi), PARAMETER :: J4FAMzi = 4540 + INTEGER(IntKi), PARAMETER :: J5FAMzi = 4541 + INTEGER(IntKi), PARAMETER :: J6FAMzi = 4542 + INTEGER(IntKi), PARAMETER :: J7FAMzi = 4543 + INTEGER(IntKi), PARAMETER :: J8FAMzi = 4544 + INTEGER(IntKi), PARAMETER :: J9FAMzi = 4545 + INTEGER(IntKi), PARAMETER :: J1FAGxi = 4546 + INTEGER(IntKi), PARAMETER :: J2FAGxi = 4547 + INTEGER(IntKi), PARAMETER :: J3FAGxi = 4548 + INTEGER(IntKi), PARAMETER :: J4FAGxi = 4549 + INTEGER(IntKi), PARAMETER :: J5FAGxi = 4550 + INTEGER(IntKi), PARAMETER :: J6FAGxi = 4551 + INTEGER(IntKi), PARAMETER :: J7FAGxi = 4552 + INTEGER(IntKi), PARAMETER :: J8FAGxi = 4553 + INTEGER(IntKi), PARAMETER :: J9FAGxi = 4554 + INTEGER(IntKi), PARAMETER :: J1FAGyi = 4555 + INTEGER(IntKi), PARAMETER :: J2FAGyi = 4556 + INTEGER(IntKi), PARAMETER :: J3FAGyi = 4557 + INTEGER(IntKi), PARAMETER :: J4FAGyi = 4558 + INTEGER(IntKi), PARAMETER :: J5FAGyi = 4559 + INTEGER(IntKi), PARAMETER :: J6FAGyi = 4560 + INTEGER(IntKi), PARAMETER :: J7FAGyi = 4561 + INTEGER(IntKi), PARAMETER :: J8FAGyi = 4562 + INTEGER(IntKi), PARAMETER :: J9FAGyi = 4563 + INTEGER(IntKi), PARAMETER :: J1FAGzi = 4564 + INTEGER(IntKi), PARAMETER :: J2FAGzi = 4565 + INTEGER(IntKi), PARAMETER :: J3FAGzi = 4566 + INTEGER(IntKi), PARAMETER :: J4FAGzi = 4567 + INTEGER(IntKi), PARAMETER :: J5FAGzi = 4568 + INTEGER(IntKi), PARAMETER :: J6FAGzi = 4569 + INTEGER(IntKi), PARAMETER :: J7FAGzi = 4570 + INTEGER(IntKi), PARAMETER :: J8FAGzi = 4571 + INTEGER(IntKi), PARAMETER :: J9FAGzi = 4572 + INTEGER(IntKi), PARAMETER :: J1MAGxi = 4573 + INTEGER(IntKi), PARAMETER :: J2MAGxi = 4574 + INTEGER(IntKi), PARAMETER :: J3MAGxi = 4575 + INTEGER(IntKi), PARAMETER :: J4MAGxi = 4576 + INTEGER(IntKi), PARAMETER :: J5MAGxi = 4577 + INTEGER(IntKi), PARAMETER :: J6MAGxi = 4578 + INTEGER(IntKi), PARAMETER :: J7MAGxi = 4579 + INTEGER(IntKi), PARAMETER :: J8MAGxi = 4580 + INTEGER(IntKi), PARAMETER :: J9MAGxi = 4581 + INTEGER(IntKi), PARAMETER :: J1MAGyi = 4582 + INTEGER(IntKi), PARAMETER :: J2MAGyi = 4583 + INTEGER(IntKi), PARAMETER :: J3MAGyi = 4584 + INTEGER(IntKi), PARAMETER :: J4MAGyi = 4585 + INTEGER(IntKi), PARAMETER :: J5MAGyi = 4586 + INTEGER(IntKi), PARAMETER :: J6MAGyi = 4587 + INTEGER(IntKi), PARAMETER :: J7MAGyi = 4588 + INTEGER(IntKi), PARAMETER :: J8MAGyi = 4589 + INTEGER(IntKi), PARAMETER :: J9MAGyi = 4590 + INTEGER(IntKi), PARAMETER :: J1MAGzi = 4591 + INTEGER(IntKi), PARAMETER :: J2MAGzi = 4592 + INTEGER(IntKi), PARAMETER :: J3MAGzi = 4593 + INTEGER(IntKi), PARAMETER :: J4MAGzi = 4594 + INTEGER(IntKi), PARAMETER :: J5MAGzi = 4595 + INTEGER(IntKi), PARAMETER :: J6MAGzi = 4596 + INTEGER(IntKi), PARAMETER :: J7MAGzi = 4597 + INTEGER(IntKi), PARAMETER :: J8MAGzi = 4598 + INTEGER(IntKi), PARAMETER :: J9MAGzi = 4599 + INTEGER(IntKi), PARAMETER :: J1FMGxi = 4600 + INTEGER(IntKi), PARAMETER :: J2FMGxi = 4601 + INTEGER(IntKi), PARAMETER :: J3FMGxi = 4602 + INTEGER(IntKi), PARAMETER :: J4FMGxi = 4603 + INTEGER(IntKi), PARAMETER :: J5FMGxi = 4604 + INTEGER(IntKi), PARAMETER :: J6FMGxi = 4605 + INTEGER(IntKi), PARAMETER :: J7FMGxi = 4606 + INTEGER(IntKi), PARAMETER :: J8FMGxi = 4607 + INTEGER(IntKi), PARAMETER :: J9FMGxi = 4608 + INTEGER(IntKi), PARAMETER :: J1FMGyi = 4609 + INTEGER(IntKi), PARAMETER :: J2FMGyi = 4610 + INTEGER(IntKi), PARAMETER :: J3FMGyi = 4611 + INTEGER(IntKi), PARAMETER :: J4FMGyi = 4612 + INTEGER(IntKi), PARAMETER :: J5FMGyi = 4613 + INTEGER(IntKi), PARAMETER :: J6FMGyi = 4614 + INTEGER(IntKi), PARAMETER :: J7FMGyi = 4615 + INTEGER(IntKi), PARAMETER :: J8FMGyi = 4616 + INTEGER(IntKi), PARAMETER :: J9FMGyi = 4617 + INTEGER(IntKi), PARAMETER :: J1FMGzi = 4618 + INTEGER(IntKi), PARAMETER :: J2FMGzi = 4619 + INTEGER(IntKi), PARAMETER :: J3FMGzi = 4620 + INTEGER(IntKi), PARAMETER :: J4FMGzi = 4621 + INTEGER(IntKi), PARAMETER :: J5FMGzi = 4622 + INTEGER(IntKi), PARAMETER :: J6FMGzi = 4623 + INTEGER(IntKi), PARAMETER :: J7FMGzi = 4624 + INTEGER(IntKi), PARAMETER :: J8FMGzi = 4625 + INTEGER(IntKi), PARAMETER :: J9FMGzi = 4626 -!End of code generated by Matlab script + + ! The maximum number of output channels which can be output by the code. + INTEGER(IntKi), PARAMETER, PUBLIC :: MaxOutPts = 4626 + +!End of code generated by Matlab script Write_ChckOutLst +! =================================================================================================== !INTEGER, PARAMETER :: WaveElevi(9) = (/Wave1Elev,Wave2Elev,Wave3Elev,Wave4Elev,Wave5Elev,Wave6Elev,Wave7Elev,Wave8Elev,Wave9Elev/) @@ -6258,6 +6292,18 @@ MODULE Morison_Output INTEGER, PARAMETER :: JDynP(9) = reshape((/J1DynP, J2DynP, J3DynP , & J4DynP, J5DynP, J6DynP , & J7DynP, J8DynP, J9DynP/), (/9/)) + INTEGER, PARAMETER :: JWaveElev(9) = reshape((/J1WaveElev, J2WaveElev, J3WaveElev , & + J4WaveElev, J5WaveElev, J6WaveElev , & + J7WaveElev, J8WaveElev, J9WaveElev/), (/9/)) + + INTEGER, PARAMETER :: JWaveElev1(9) = reshape((/J1WaveElv1, J2WaveElv1, J3WaveElv1 , & + J4WaveElv1, J5WaveElv1, J6WaveElv1 , & + J7WaveElv1, J8WaveElv1, J9WaveElv1/), (/9/)) + + INTEGER, PARAMETER :: JWaveElev2(9) = reshape((/J1WaveElv2, J2WaveElv2, J3WaveElv2 , & + J4WaveElv2, J5WaveElv2, J6WaveElv2 , & + J7WaveElv2, J8WaveElv2, J9WaveElv2/), (/9/)) + INTEGER, PARAMETER :: JSTVi(3,9) = reshape((/J1STVxi, J1STVyi, J1STVzi , & J2STVxi, J2STVyi, J2STVzi , & @@ -6381,57 +6427,1362 @@ MODULE Morison_Output J9FMGxi, J9FMGyi, J9FMGzi/), (/3,9/)) !********************************************************************************************************************************** -! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m" -! 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 04-Jan-2014 12:13:30. - CHARACTER(OutStrLenM1) :: ValidParamAry(4599) ! This lists the names of the allowed parameters, which must be sorted alphabetically - INTEGER(IntKi) :: ParamIndxAry(4599) ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) - CHARACTER(OutStrLenM1) :: ParamUnitsAry(4599) ! This lists the names of the allowed parameters, which must be sorted alphabetically - - + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry1(1542) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "J1AXI ","J1AYI ","J1AZI ","J1DYNP ","J1FAGXI ","J1FAGYI ","J1FAGZI ", & + "J1FAMXI ","J1FAMYI ","J1FAMZI ","J1FBFXI ","J1FBFYI ","J1FBFZI ","J1FBXI ", & + "J1FBYI ","J1FBZI ","J1FDXI ","J1FDYI ","J1FDZI ","J1FIXI ","J1FIYI ", & + "J1FIZI ","J1FMGXI ","J1FMGYI ","J1FMGZI ","J1MAGXI ","J1MAGYI ","J1MAGZI ", & + "J1MBFXI ","J1MBFYI ","J1MBFZI ","J1MBXI ","J1MBYI ","J1MBZI ","J1STAXI ", & + "J1STAYI ","J1STAZI ","J1STVXI ","J1STVYI ","J1STVZI ","J1VXI ","J1VYI ", & + "J1VZI ","J1WAVEELEV","J1WAVEELV1","J1WAVEELV2","J2AXI ","J2AYI ","J2AZI ", & + "J2DYNP ","J2FAGXI ","J2FAGYI ","J2FAGZI ","J2FAMXI ","J2FAMYI ","J2FAMZI ", & + "J2FBFXI ","J2FBFYI ","J2FBFZI ","J2FBXI ","J2FBYI ","J2FBZI ","J2FDXI ", & + "J2FDYI ","J2FDZI ","J2FIXI ","J2FIYI ","J2FIZI ","J2FMGXI ","J2FMGYI ", & + "J2FMGZI ","J2MAGXI ","J2MAGYI ","J2MAGZI ","J2MBFXI ","J2MBFYI ","J2MBFZI ", & + "J2MBXI ","J2MBYI ","J2MBZI ","J2STAXI ","J2STAYI ","J2STAZI ","J2STVXI ", & + "J2STVYI ","J2STVZI ","J2VXI ","J2VYI ","J2VZI ","J2WAVEELEV","J2WAVEELV1", & + "J2WAVEELV2","J3AXI ","J3AYI ","J3AZI ","J3DYNP ","J3FAGXI ","J3FAGYI ", & + "J3FAGZI ","J3FAMXI ","J3FAMYI ","J3FAMZI ","J3FBFXI ","J3FBFYI ","J3FBFZI ", & + "J3FBXI ","J3FBYI ","J3FBZI ","J3FDXI ","J3FDYI ","J3FDZI ","J3FIXI ", & + "J3FIYI ","J3FIZI ","J3FMGXI ","J3FMGYI ","J3FMGZI ","J3MAGXI ","J3MAGYI ", & + "J3MAGZI ","J3MBFXI ","J3MBFYI ","J3MBFZI ","J3MBXI ","J3MBYI ","J3MBZI ", & + "J3STAXI ","J3STAYI ","J3STAZI ","J3STVXI ","J3STVYI ","J3STVZI ","J3VXI ", & + "J3VYI ","J3VZI ","J3WAVEELEV","J3WAVEELV1","J3WAVEELV2","J4AXI ","J4AYI ", & + "J4AZI ","J4DYNP ","J4FAGXI ","J4FAGYI ","J4FAGZI ","J4FAMXI ","J4FAMYI ", & + "J4FAMZI ","J4FBFXI ","J4FBFYI ","J4FBFZI ","J4FBXI ","J4FBYI ","J4FBZI ", & + "J4FDXI ","J4FDYI ","J4FDZI ","J4FIXI ","J4FIYI ","J4FIZI ","J4FMGXI ", & + "J4FMGYI ","J4FMGZI ","J4MAGXI ","J4MAGYI ","J4MAGZI ","J4MBFXI ","J4MBFYI ", & + "J4MBFZI ","J4MBXI ","J4MBYI ","J4MBZI ","J4STAXI ","J4STAYI ","J4STAZI ", & + "J4STVXI ","J4STVYI ","J4STVZI ","J4VXI ","J4VYI ","J4VZI ","J4WAVEELEV", & + "J4WAVEELV1","J4WAVEELV2","J5AXI ","J5AYI ","J5AZI ","J5DYNP ","J5FAGXI ", & + "J5FAGYI ","J5FAGZI ","J5FAMXI ","J5FAMYI ","J5FAMZI ","J5FBFXI ","J5FBFYI ", & + "J5FBFZI ","J5FBXI ","J5FBYI ","J5FBZI ","J5FDXI ","J5FDYI ","J5FDZI ", & + "J5FIXI ","J5FIYI ","J5FIZI ","J5FMGXI ","J5FMGYI ","J5FMGZI ","J5MAGXI ", & + "J5MAGYI ","J5MAGZI ","J5MBFXI ","J5MBFYI ","J5MBFZI ","J5MBXI ","J5MBYI ", & + "J5MBZI ","J5STAXI ","J5STAYI ","J5STAZI ","J5STVXI ","J5STVYI ","J5STVZI ", & + "J5VXI ","J5VYI ","J5VZI ","J5WAVEELEV","J5WAVEELV1","J5WAVEELV2","J6AXI ", & + "J6AYI ","J6AZI ","J6DYNP ","J6FAGXI ","J6FAGYI ","J6FAGZI ","J6FAMXI ", & + "J6FAMYI ","J6FAMZI ","J6FBFXI ","J6FBFYI ","J6FBFZI ","J6FBXI ","J6FBYI ", & + "J6FBZI ","J6FDXI ","J6FDYI ","J6FDZI ","J6FIXI ","J6FIYI ","J6FIZI ", & + "J6FMGXI ","J6FMGYI ","J6FMGZI ","J6MAGXI ","J6MAGYI ","J6MAGZI ","J6MBFXI ", & + "J6MBFYI ","J6MBFZI ","J6MBXI ","J6MBYI ","J6MBZI ","J6STAXI ","J6STAYI ", & + "J6STAZI ","J6STVXI ","J6STVYI ","J6STVZI ","J6VXI ","J6VYI ","J6VZI ", & + "J6WAVEELEV","J6WAVEELV1","J6WAVEELV2","J7AXI ","J7AYI ","J7AZI ","J7DYNP ", & + "J7FAGXI ","J7FAGYI ","J7FAGZI ","J7FAMXI ","J7FAMYI ","J7FAMZI ","J7FBFXI ", & + "J7FBFYI ","J7FBFZI ","J7FBXI ","J7FBYI ","J7FBZI ","J7FDXI ","J7FDYI ", & + "J7FDZI ","J7FIXI ","J7FIYI ","J7FIZI ","J7FMGXI ","J7FMGYI ","J7FMGZI ", & + "J7MAGXI ","J7MAGYI ","J7MAGZI ","J7MBFXI ","J7MBFYI ","J7MBFZI ","J7MBXI ", & + "J7MBYI ","J7MBZI ","J7STAXI ","J7STAYI ","J7STAZI ","J7STVXI ","J7STVYI ", & + "J7STVZI ","J7VXI ","J7VYI ","J7VZI ","J7WAVEELEV","J7WAVEELV1","J7WAVEELV2", & + "J8AXI ","J8AYI ","J8AZI ","J8DYNP ","J8FAGXI ","J8FAGYI ","J8FAGZI ", & + "J8FAMXI ","J8FAMYI ","J8FAMZI ","J8FBFXI ","J8FBFYI ","J8FBFZI ","J8FBXI ", & + "J8FBYI ","J8FBZI ","J8FDXI ","J8FDYI ","J8FDZI ","J8FIXI ","J8FIYI ", & + "J8FIZI ","J8FMGXI ","J8FMGYI ","J8FMGZI ","J8MAGXI ","J8MAGYI ","J8MAGZI ", & + "J8MBFXI ","J8MBFYI ","J8MBFZI ","J8MBXI ","J8MBYI ","J8MBZI ","J8STAXI ", & + "J8STAYI ","J8STAZI ","J8STVXI ","J8STVYI ","J8STVZI ","J8VXI ","J8VYI ", & + "J8VZI ","J8WAVEELEV","J8WAVEELV1","J8WAVEELV2","J9AXI ","J9AYI ","J9AZI ", & + "J9DYNP ","J9FAGXI ","J9FAGYI ","J9FAGZI ","J9FAMXI ","J9FAMYI ","J9FAMZI ", & + "J9FBFXI ","J9FBFYI ","J9FBFZI ","J9FBXI ","J9FBYI ","J9FBZI ","J9FDXI ", & + "J9FDYI ","J9FDZI ","J9FIXI ","J9FIYI ","J9FIZI ","J9FMGXI ","J9FMGYI ", & + "J9FMGZI ","J9MAGXI ","J9MAGYI ","J9MAGZI ","J9MBFXI ","J9MBFYI ","J9MBFZI ", & + "J9MBXI ","J9MBYI ","J9MBZI ","J9STAXI ","J9STAYI ","J9STAZI ","J9STVXI ", & + "J9STVYI ","J9STVZI ","J9VXI ","J9VYI ","J9VZI ","J9WAVEELEV","J9WAVEELV1", & + "J9WAVEELV2","M1N1AXI ","M1N1AYI ","M1N1AZI ","M1N1DYNP ","M1N1FAFXI ","M1N1FAFYI ", & + "M1N1FAFZI ","M1N1FAGXI ","M1N1FAGYI ","M1N1FAGZI ","M1N1FAMXI ","M1N1FAMYI ","M1N1FAMZI ", & + "M1N1FBFXI ","M1N1FBFYI ","M1N1FBFZI ","M1N1FBXI ","M1N1FBYI ","M1N1FBZI ","M1N1FDXI ", & + "M1N1FDYI ","M1N1FDZI ","M1N1FIXI ","M1N1FIYI ","M1N1FIZI ","M1N1FMGXI ","M1N1FMGYI ", & + "M1N1FMGZI ","M1N1MAFXI ","M1N1MAFYI ","M1N1MAFZI ","M1N1MAGXI ","M1N1MAGYI ","M1N1MAGZI ", & + "M1N1MBFXI ","M1N1MBFYI ","M1N1MBFZI ","M1N1MBXI ","M1N1MBYI ","M1N1MBZI ","M1N1MMGXI ", & + "M1N1MMGYI ","M1N1MMGZI ","M1N1STAXI ","M1N1STAYI ","M1N1STAZI ","M1N1STVXI ","M1N1STVYI ", & + "M1N1STVZI ","M1N1VXI ","M1N1VYI ","M1N1VZI ","M1N2AXI ","M1N2AYI ","M1N2AZI ", & + "M1N2DYNP ","M1N2FAFXI ","M1N2FAFYI ","M1N2FAFZI ","M1N2FAGXI ","M1N2FAGYI ","M1N2FAGZI ", & + "M1N2FAMXI ","M1N2FAMYI ","M1N2FAMZI ","M1N2FBFXI ","M1N2FBFYI ","M1N2FBFZI ","M1N2FBXI ", & + "M1N2FBYI ","M1N2FBZI ","M1N2FDXI ","M1N2FDYI ","M1N2FDZI ","M1N2FIXI ","M1N2FIYI ", & + "M1N2FIZI ","M1N2FMGXI ","M1N2FMGYI ","M1N2FMGZI ","M1N2MAFXI ","M1N2MAFYI ","M1N2MAFZI ", & + "M1N2MAGXI ","M1N2MAGYI ","M1N2MAGZI ","M1N2MBFXI ","M1N2MBFYI ","M1N2MBFZI ","M1N2MBXI ", & + "M1N2MBYI ","M1N2MBZI ","M1N2MMGXI ","M1N2MMGYI ","M1N2MMGZI ","M1N2STAXI ","M1N2STAYI ", & + "M1N2STAZI ","M1N2STVXI ","M1N2STVYI ","M1N2STVZI ","M1N2VXI ","M1N2VYI ","M1N2VZI ", & + "M1N3AXI ","M1N3AYI ","M1N3AZI ","M1N3DYNP ","M1N3FAFXI ","M1N3FAFYI ","M1N3FAFZI ", & + "M1N3FAGXI ","M1N3FAGYI ","M1N3FAGZI ","M1N3FAMXI ","M1N3FAMYI ","M1N3FAMZI ","M1N3FBFXI ", & + "M1N3FBFYI ","M1N3FBFZI ","M1N3FBXI ","M1N3FBYI ","M1N3FBZI ","M1N3FDXI ","M1N3FDYI ", & + "M1N3FDZI ","M1N3FIXI ","M1N3FIYI ","M1N3FIZI ","M1N3FMGXI ","M1N3FMGYI ","M1N3FMGZI ", & + "M1N3MAFXI ","M1N3MAFYI ","M1N3MAFZI ","M1N3MAGXI ","M1N3MAGYI ","M1N3MAGZI ","M1N3MBFXI ", & + "M1N3MBFYI ","M1N3MBFZI ","M1N3MBXI ","M1N3MBYI ","M1N3MBZI ","M1N3MMGXI ","M1N3MMGYI ", & + "M1N3MMGZI ","M1N3STAXI ","M1N3STAYI ","M1N3STAZI ","M1N3STVXI ","M1N3STVYI ","M1N3STVZI ", & + "M1N3VXI ","M1N3VYI ","M1N3VZI ","M1N4AXI ","M1N4AYI ","M1N4AZI ","M1N4DYNP ", & + "M1N4FAFXI ","M1N4FAFYI ","M1N4FAFZI ","M1N4FAGXI ","M1N4FAGYI ","M1N4FAGZI ","M1N4FAMXI ", & + "M1N4FAMYI ","M1N4FAMZI ","M1N4FBFXI ","M1N4FBFYI ","M1N4FBFZI ","M1N4FBXI ","M1N4FBYI ", & + "M1N4FBZI ","M1N4FDXI ","M1N4FDYI ","M1N4FDZI ","M1N4FIXI ","M1N4FIYI ","M1N4FIZI ", & + "M1N4FMGXI ","M1N4FMGYI ","M1N4FMGZI ","M1N4MAFXI ","M1N4MAFYI ","M1N4MAFZI ","M1N4MAGXI ", & + "M1N4MAGYI ","M1N4MAGZI ","M1N4MBFXI ","M1N4MBFYI ","M1N4MBFZI ","M1N4MBXI ","M1N4MBYI ", & + "M1N4MBZI ","M1N4MMGXI ","M1N4MMGYI ","M1N4MMGZI ","M1N4STAXI ","M1N4STAYI ","M1N4STAZI ", & + "M1N4STVXI ","M1N4STVYI ","M1N4STVZI ","M1N4VXI ","M1N4VYI ","M1N4VZI ","M1N5AXI ", & + "M1N5AYI ","M1N5AZI ","M1N5DYNP ","M1N5FAFXI ","M1N5FAFYI ","M1N5FAFZI ","M1N5FAGXI ", & + "M1N5FAGYI ","M1N5FAGZI ","M1N5FAMXI ","M1N5FAMYI ","M1N5FAMZI ","M1N5FBFXI ","M1N5FBFYI ", & + "M1N5FBFZI ","M1N5FBXI ","M1N5FBYI ","M1N5FBZI ","M1N5FDXI ","M1N5FDYI ","M1N5FDZI ", & + "M1N5FIXI ","M1N5FIYI ","M1N5FIZI ","M1N5FMGXI ","M1N5FMGYI ","M1N5FMGZI ","M1N5MAFXI ", & + "M1N5MAFYI ","M1N5MAFZI ","M1N5MAGXI ","M1N5MAGYI ","M1N5MAGZI ","M1N5MBFXI ","M1N5MBFYI ", & + "M1N5MBFZI ","M1N5MBXI ","M1N5MBYI ","M1N5MBZI ","M1N5MMGXI ","M1N5MMGYI ","M1N5MMGZI ", & + "M1N5STAXI ","M1N5STAYI ","M1N5STAZI ","M1N5STVXI ","M1N5STVYI ","M1N5STVZI ","M1N5VXI ", & + "M1N5VYI ","M1N5VZI ","M1N6AXI ","M1N6AYI ","M1N6AZI ","M1N6DYNP ","M1N6FAFXI ", & + "M1N6FAFYI ","M1N6FAFZI ","M1N6FAGXI ","M1N6FAGYI ","M1N6FAGZI ","M1N6FAMXI ","M1N6FAMYI ", & + "M1N6FAMZI ","M1N6FBFXI ","M1N6FBFYI ","M1N6FBFZI ","M1N6FBXI ","M1N6FBYI ","M1N6FBZI ", & + "M1N6FDXI ","M1N6FDYI ","M1N6FDZI ","M1N6FIXI ","M1N6FIYI ","M1N6FIZI ","M1N6FMGXI ", & + "M1N6FMGYI ","M1N6FMGZI ","M1N6MAFXI ","M1N6MAFYI ","M1N6MAFZI ","M1N6MAGXI ","M1N6MAGYI ", & + "M1N6MAGZI ","M1N6MBFXI ","M1N6MBFYI ","M1N6MBFZI ","M1N6MBXI ","M1N6MBYI ","M1N6MBZI ", & + "M1N6MMGXI ","M1N6MMGYI ","M1N6MMGZI ","M1N6STAXI ","M1N6STAYI ","M1N6STAZI ","M1N6STVXI ", & + "M1N6STVYI ","M1N6STVZI ","M1N6VXI ","M1N6VYI ","M1N6VZI ","M1N7AXI ","M1N7AYI ", & + "M1N7AZI ","M1N7DYNP ","M1N7FAFXI ","M1N7FAFYI ","M1N7FAFZI ","M1N7FAGXI ","M1N7FAGYI ", & + "M1N7FAGZI ","M1N7FAMXI ","M1N7FAMYI ","M1N7FAMZI ","M1N7FBFXI ","M1N7FBFYI ","M1N7FBFZI ", & + "M1N7FBXI ","M1N7FBYI ","M1N7FBZI ","M1N7FDXI ","M1N7FDYI ","M1N7FDZI ","M1N7FIXI ", & + "M1N7FIYI ","M1N7FIZI ","M1N7FMGXI ","M1N7FMGYI ","M1N7FMGZI ","M1N7MAFXI ","M1N7MAFYI ", & + "M1N7MAFZI ","M1N7MAGXI ","M1N7MAGYI ","M1N7MAGZI ","M1N7MBFXI ","M1N7MBFYI ","M1N7MBFZI ", & + "M1N7MBXI ","M1N7MBYI ","M1N7MBZI ","M1N7MMGXI ","M1N7MMGYI ","M1N7MMGZI ","M1N7STAXI ", & + "M1N7STAYI ","M1N7STAZI ","M1N7STVXI ","M1N7STVYI ","M1N7STVZI ","M1N7VXI ","M1N7VYI ", & + "M1N7VZI ","M1N8AXI ","M1N8AYI ","M1N8AZI ","M1N8DYNP ","M1N8FAFXI ","M1N8FAFYI ", & + "M1N8FAFZI ","M1N8FAGXI ","M1N8FAGYI ","M1N8FAGZI ","M1N8FAMXI ","M1N8FAMYI ","M1N8FAMZI ", & + "M1N8FBFXI ","M1N8FBFYI ","M1N8FBFZI ","M1N8FBXI ","M1N8FBYI ","M1N8FBZI ","M1N8FDXI ", & + "M1N8FDYI ","M1N8FDZI ","M1N8FIXI ","M1N8FIYI ","M1N8FIZI ","M1N8FMGXI ","M1N8FMGYI ", & + "M1N8FMGZI ","M1N8MAFXI ","M1N8MAFYI ","M1N8MAFZI ","M1N8MAGXI ","M1N8MAGYI ","M1N8MAGZI ", & + "M1N8MBFXI ","M1N8MBFYI ","M1N8MBFZI ","M1N8MBXI ","M1N8MBYI ","M1N8MBZI ","M1N8MMGXI ", & + "M1N8MMGYI ","M1N8MMGZI ","M1N8STAXI ","M1N8STAYI ","M1N8STAZI ","M1N8STVXI ","M1N8STVYI ", & + "M1N8STVZI ","M1N8VXI ","M1N8VYI ","M1N8VZI ","M1N9AXI ","M1N9AYI ","M1N9AZI ", & + "M1N9DYNP ","M1N9FAFXI ","M1N9FAFYI ","M1N9FAFZI ","M1N9FAGXI ","M1N9FAGYI ","M1N9FAGZI ", & + "M1N9FAMXI ","M1N9FAMYI ","M1N9FAMZI ","M1N9FBFXI ","M1N9FBFYI ","M1N9FBFZI ","M1N9FBXI ", & + "M1N9FBYI ","M1N9FBZI ","M1N9FDXI ","M1N9FDYI ","M1N9FDZI ","M1N9FIXI ","M1N9FIYI ", & + "M1N9FIZI ","M1N9FMGXI ","M1N9FMGYI ","M1N9FMGZI ","M1N9MAFXI ","M1N9MAFYI ","M1N9MAFZI ", & + "M1N9MAGXI ","M1N9MAGYI ","M1N9MAGZI ","M1N9MBFXI ","M1N9MBFYI ","M1N9MBFZI ","M1N9MBXI ", & + "M1N9MBYI ","M1N9MBZI ","M1N9MMGXI ","M1N9MMGYI ","M1N9MMGZI ","M1N9STAXI ","M1N9STAYI ", & + "M1N9STAZI ","M1N9STVXI ","M1N9STVYI ","M1N9STVZI ","M1N9VXI ","M1N9VYI ","M1N9VZI ", & + "M2N1AXI ","M2N1AYI ","M2N1AZI ","M2N1DYNP ","M2N1FAFXI ","M2N1FAFYI ","M2N1FAFZI ", & + "M2N1FAGXI ","M2N1FAGYI ","M2N1FAGZI ","M2N1FAMXI ","M2N1FAMYI ","M2N1FAMZI ","M2N1FBFXI ", & + "M2N1FBFYI ","M2N1FBFZI ","M2N1FBXI ","M2N1FBYI ","M2N1FBZI ","M2N1FDXI ","M2N1FDYI ", & + "M2N1FDZI ","M2N1FIXI ","M2N1FIYI ","M2N1FIZI ","M2N1FMGXI ","M2N1FMGYI ","M2N1FMGZI ", & + "M2N1MAFXI ","M2N1MAFYI ","M2N1MAFZI ","M2N1MAGXI ","M2N1MAGYI ","M2N1MAGZI ","M2N1MBFXI ", & + "M2N1MBFYI ","M2N1MBFZI ","M2N1MBXI ","M2N1MBYI ","M2N1MBZI ","M2N1MMGXI ","M2N1MMGYI ", & + "M2N1MMGZI ","M2N1STAXI ","M2N1STAYI ","M2N1STAZI ","M2N1STVXI ","M2N1STVYI ","M2N1STVZI ", & + "M2N1VXI ","M2N1VYI ","M2N1VZI ","M2N2AXI ","M2N2AYI ","M2N2AZI ","M2N2DYNP ", & + "M2N2FAFXI ","M2N2FAFYI ","M2N2FAFZI ","M2N2FAGXI ","M2N2FAGYI ","M2N2FAGZI ","M2N2FAMXI ", & + "M2N2FAMYI ","M2N2FAMZI ","M2N2FBFXI ","M2N2FBFYI ","M2N2FBFZI ","M2N2FBXI ","M2N2FBYI ", & + "M2N2FBZI ","M2N2FDXI ","M2N2FDYI ","M2N2FDZI ","M2N2FIXI ","M2N2FIYI ","M2N2FIZI ", & + "M2N2FMGXI ","M2N2FMGYI ","M2N2FMGZI ","M2N2MAFXI ","M2N2MAFYI ","M2N2MAFZI ","M2N2MAGXI ", & + "M2N2MAGYI ","M2N2MAGZI ","M2N2MBFXI ","M2N2MBFYI ","M2N2MBFZI ","M2N2MBXI ","M2N2MBYI ", & + "M2N2MBZI ","M2N2MMGXI ","M2N2MMGYI ","M2N2MMGZI ","M2N2STAXI ","M2N2STAYI ","M2N2STAZI ", & + "M2N2STVXI ","M2N2STVYI ","M2N2STVZI ","M2N2VXI ","M2N2VYI ","M2N2VZI ","M2N3AXI ", & + "M2N3AYI ","M2N3AZI ","M2N3DYNP ","M2N3FAFXI ","M2N3FAFYI ","M2N3FAFZI ","M2N3FAGXI ", & + "M2N3FAGYI ","M2N3FAGZI ","M2N3FAMXI ","M2N3FAMYI ","M2N3FAMZI ","M2N3FBFXI ","M2N3FBFYI ", & + "M2N3FBFZI ","M2N3FBXI ","M2N3FBYI ","M2N3FBZI ","M2N3FDXI ","M2N3FDYI ","M2N3FDZI ", & + "M2N3FIXI ","M2N3FIYI ","M2N3FIZI ","M2N3FMGXI ","M2N3FMGYI ","M2N3FMGZI ","M2N3MAFXI ", & + "M2N3MAFYI ","M2N3MAFZI ","M2N3MAGXI ","M2N3MAGYI ","M2N3MAGZI ","M2N3MBFXI ","M2N3MBFYI ", & + "M2N3MBFZI ","M2N3MBXI ","M2N3MBYI ","M2N3MBZI ","M2N3MMGXI ","M2N3MMGYI ","M2N3MMGZI ", & + "M2N3STAXI ","M2N3STAYI ","M2N3STAZI ","M2N3STVXI ","M2N3STVYI ","M2N3STVZI ","M2N3VXI ", & + "M2N3VYI ","M2N3VZI ","M2N4AXI ","M2N4AYI ","M2N4AZI ","M2N4DYNP ","M2N4FAFXI ", & + "M2N4FAFYI ","M2N4FAFZI ","M2N4FAGXI ","M2N4FAGYI ","M2N4FAGZI ","M2N4FAMXI ","M2N4FAMYI ", & + "M2N4FAMZI ","M2N4FBFXI ","M2N4FBFYI ","M2N4FBFZI ","M2N4FBXI ","M2N4FBYI ","M2N4FBZI ", & + "M2N4FDXI ","M2N4FDYI ","M2N4FDZI ","M2N4FIXI ","M2N4FIYI ","M2N4FIZI ","M2N4FMGXI ", & + "M2N4FMGYI ","M2N4FMGZI ","M2N4MAFXI ","M2N4MAFYI ","M2N4MAFZI ","M2N4MAGXI ","M2N4MAGYI ", & + "M2N4MAGZI ","M2N4MBFXI ","M2N4MBFYI ","M2N4MBFZI ","M2N4MBXI ","M2N4MBYI ","M2N4MBZI ", & + "M2N4MMGXI ","M2N4MMGYI ","M2N4MMGZI ","M2N4STAXI ","M2N4STAYI ","M2N4STAZI ","M2N4STVXI ", & + "M2N4STVYI ","M2N4STVZI ","M2N4VXI ","M2N4VYI ","M2N4VZI ","M2N5AXI ","M2N5AYI ", & + "M2N5AZI ","M2N5DYNP ","M2N5FAFXI ","M2N5FAFYI ","M2N5FAFZI ","M2N5FAGXI ","M2N5FAGYI ", & + "M2N5FAGZI ","M2N5FAMXI ","M2N5FAMYI ","M2N5FAMZI ","M2N5FBFXI ","M2N5FBFYI ","M2N5FBFZI ", & + "M2N5FBXI ","M2N5FBYI ","M2N5FBZI ","M2N5FDXI ","M2N5FDYI ","M2N5FDZI ","M2N5FIXI ", & + "M2N5FIYI ","M2N5FIZI ","M2N5FMGXI ","M2N5FMGYI ","M2N5FMGZI ","M2N5MAFXI ","M2N5MAFYI ", & + "M2N5MAFZI ","M2N5MAGXI ","M2N5MAGYI ","M2N5MAGZI ","M2N5MBFXI ","M2N5MBFYI ","M2N5MBFZI ", & + "M2N5MBXI ","M2N5MBYI ","M2N5MBZI ","M2N5MMGXI ","M2N5MMGYI ","M2N5MMGZI ","M2N5STAXI ", & + "M2N5STAYI ","M2N5STAZI ","M2N5STVXI ","M2N5STVYI ","M2N5STVZI ","M2N5VXI ","M2N5VYI ", & + "M2N5VZI ","M2N6AXI ","M2N6AYI ","M2N6AZI ","M2N6DYNP ","M2N6FAFXI ","M2N6FAFYI ", & + "M2N6FAFZI ","M2N6FAGXI ","M2N6FAGYI ","M2N6FAGZI ","M2N6FAMXI ","M2N6FAMYI ","M2N6FAMZI ", & + "M2N6FBFXI ","M2N6FBFYI ","M2N6FBFZI ","M2N6FBXI ","M2N6FBYI ","M2N6FBZI ","M2N6FDXI ", & + "M2N6FDYI ","M2N6FDZI ","M2N6FIXI ","M2N6FIYI ","M2N6FIZI ","M2N6FMGXI ","M2N6FMGYI ", & + "M2N6FMGZI ","M2N6MAFXI ","M2N6MAFYI ","M2N6MAFZI ","M2N6MAGXI ","M2N6MAGYI ","M2N6MAGZI ", & + "M2N6MBFXI ","M2N6MBFYI ","M2N6MBFZI ","M2N6MBXI ","M2N6MBYI ","M2N6MBZI ","M2N6MMGXI ", & + "M2N6MMGYI ","M2N6MMGZI ","M2N6STAXI ","M2N6STAYI ","M2N6STAZI ","M2N6STVXI ","M2N6STVYI ", & + "M2N6STVZI ","M2N6VXI ","M2N6VYI ","M2N6VZI ","M2N7AXI ","M2N7AYI ","M2N7AZI ", & + "M2N7DYNP ","M2N7FAFXI ","M2N7FAFYI ","M2N7FAFZI ","M2N7FAGXI ","M2N7FAGYI ","M2N7FAGZI ", & + "M2N7FAMXI ","M2N7FAMYI ","M2N7FAMZI ","M2N7FBFXI ","M2N7FBFYI ","M2N7FBFZI ","M2N7FBXI ", & + "M2N7FBYI ","M2N7FBZI ","M2N7FDXI ","M2N7FDYI ","M2N7FDZI ","M2N7FIXI ","M2N7FIYI ", & + "M2N7FIZI ","M2N7FMGXI ","M2N7FMGYI ","M2N7FMGZI ","M2N7MAFXI ","M2N7MAFYI ","M2N7MAFZI ", & + "M2N7MAGXI ","M2N7MAGYI ","M2N7MAGZI ","M2N7MBFXI ","M2N7MBFYI ","M2N7MBFZI ","M2N7MBXI ", & + "M2N7MBYI ","M2N7MBZI ","M2N7MMGXI ","M2N7MMGYI ","M2N7MMGZI ","M2N7STAXI ","M2N7STAYI ", & + "M2N7STAZI ","M2N7STVXI ","M2N7STVYI ","M2N7STVZI ","M2N7VXI ","M2N7VYI ","M2N7VZI ", & + "M2N8AXI ","M2N8AYI ","M2N8AZI ","M2N8DYNP ","M2N8FAFXI ","M2N8FAFYI ","M2N8FAFZI ", & + "M2N8FAGXI ","M2N8FAGYI ","M2N8FAGZI ","M2N8FAMXI ","M2N8FAMYI ","M2N8FAMZI ","M2N8FBFXI ", & + "M2N8FBFYI ","M2N8FBFZI ","M2N8FBXI ","M2N8FBYI ","M2N8FBZI ","M2N8FDXI ","M2N8FDYI ", & + "M2N8FDZI ","M2N8FIXI ","M2N8FIYI ","M2N8FIZI ","M2N8FMGXI ","M2N8FMGYI ","M2N8FMGZI ", & + "M2N8MAFXI ","M2N8MAFYI ","M2N8MAFZI ","M2N8MAGXI ","M2N8MAGYI ","M2N8MAGZI ","M2N8MBFXI ", & + "M2N8MBFYI ","M2N8MBFZI ","M2N8MBXI ","M2N8MBYI ","M2N8MBZI ","M2N8MMGXI ","M2N8MMGYI ", & + "M2N8MMGZI ","M2N8STAXI ","M2N8STAYI ","M2N8STAZI ","M2N8STVXI ","M2N8STVYI ","M2N8STVZI ", & + "M2N8VXI ","M2N8VYI ","M2N8VZI ","M2N9AXI ","M2N9AYI ","M2N9AZI ","M2N9DYNP ", & + "M2N9FAFXI ","M2N9FAFYI ","M2N9FAFZI ","M2N9FAGXI ","M2N9FAGYI ","M2N9FAGZI ","M2N9FAMXI ", & + "M2N9FAMYI ","M2N9FAMZI ","M2N9FBFXI ","M2N9FBFYI ","M2N9FBFZI ","M2N9FBXI ","M2N9FBYI ", & + "M2N9FBZI ","M2N9FDXI ","M2N9FDYI ","M2N9FDZI ","M2N9FIXI ","M2N9FIYI ","M2N9FIZI ", & + "M2N9FMGXI ","M2N9FMGYI ","M2N9FMGZI ","M2N9MAFXI ","M2N9MAFYI ","M2N9MAFZI ","M2N9MAGXI ", & + "M2N9MAGYI ","M2N9MAGZI ","M2N9MBFXI ","M2N9MBFYI ","M2N9MBFZI ","M2N9MBXI ","M2N9MBYI ", & + "M2N9MBZI ","M2N9MMGXI ","M2N9MMGYI ","M2N9MMGZI ","M2N9STAXI ","M2N9STAYI ","M2N9STAZI ", & + "M2N9STVXI ","M2N9STVYI ","M2N9STVZI ","M2N9VXI ","M2N9VYI ","M2N9VZI ","M3N1AXI ", & + "M3N1AYI ","M3N1AZI ","M3N1DYNP ","M3N1FAFXI ","M3N1FAFYI ","M3N1FAFZI ","M3N1FAGXI ", & + "M3N1FAGYI ","M3N1FAGZI ","M3N1FAMXI ","M3N1FAMYI ","M3N1FAMZI ","M3N1FBFXI ","M3N1FBFYI ", & + "M3N1FBFZI ","M3N1FBXI ","M3N1FBYI ","M3N1FBZI ","M3N1FDXI ","M3N1FDYI ","M3N1FDZI ", & + "M3N1FIXI ","M3N1FIYI ","M3N1FIZI ","M3N1FMGXI ","M3N1FMGYI ","M3N1FMGZI ","M3N1MAFXI ", & + "M3N1MAFYI ","M3N1MAFZI ","M3N1MAGXI ","M3N1MAGYI ","M3N1MAGZI ","M3N1MBFXI ","M3N1MBFYI ", & + "M3N1MBFZI ","M3N1MBXI ","M3N1MBYI ","M3N1MBZI ","M3N1MMGXI ","M3N1MMGYI ","M3N1MMGZI ", & + "M3N1STAXI ","M3N1STAYI ","M3N1STAZI ","M3N1STVXI ","M3N1STVYI ","M3N1STVZI ","M3N1VXI ", & + "M3N1VYI ","M3N1VZI ","M3N2AXI ","M3N2AYI ","M3N2AZI ","M3N2DYNP ","M3N2FAFXI ", & + "M3N2FAFYI ","M3N2FAFZI ","M3N2FAGXI ","M3N2FAGYI ","M3N2FAGZI ","M3N2FAMXI ","M3N2FAMYI ", & + "M3N2FAMZI ","M3N2FBFXI ","M3N2FBFYI ","M3N2FBFZI ","M3N2FBXI ","M3N2FBYI ","M3N2FBZI ", & + "M3N2FDXI ","M3N2FDYI ","M3N2FDZI ","M3N2FIXI ","M3N2FIYI ","M3N2FIZI ","M3N2FMGXI ", & + "M3N2FMGYI ","M3N2FMGZI ","M3N2MAFXI ","M3N2MAFYI ","M3N2MAFZI ","M3N2MAGXI ","M3N2MAGYI ", & + "M3N2MAGZI ","M3N2MBFXI ","M3N2MBFYI ","M3N2MBFZI ","M3N2MBXI ","M3N2MBYI ","M3N2MBZI ", & + "M3N2MMGXI ","M3N2MMGYI ","M3N2MMGZI ","M3N2STAXI ","M3N2STAYI ","M3N2STAZI ","M3N2STVXI ", & + "M3N2STVYI ","M3N2STVZI ","M3N2VXI ","M3N2VYI ","M3N2VZI ","M3N3AXI ","M3N3AYI ", & + "M3N3AZI ","M3N3DYNP ","M3N3FAFXI ","M3N3FAFYI ","M3N3FAFZI ","M3N3FAGXI ","M3N3FAGYI ", & + "M3N3FAGZI ","M3N3FAMXI ","M3N3FAMYI ","M3N3FAMZI ","M3N3FBFXI ","M3N3FBFYI ","M3N3FBFZI ", & + "M3N3FBXI ","M3N3FBYI ","M3N3FBZI ","M3N3FDXI ","M3N3FDYI ","M3N3FDZI ","M3N3FIXI ", & + "M3N3FIYI ","M3N3FIZI ","M3N3FMGXI ","M3N3FMGYI ","M3N3FMGZI ","M3N3MAFXI ","M3N3MAFYI ", & + "M3N3MAFZI ","M3N3MAGXI ","M3N3MAGYI ","M3N3MAGZI ","M3N3MBFXI ","M3N3MBFYI ","M3N3MBFZI ", & + "M3N3MBXI ","M3N3MBYI ","M3N3MBZI ","M3N3MMGXI ","M3N3MMGYI ","M3N3MMGZI ","M3N3STAXI ", & + "M3N3STAYI ","M3N3STAZI ","M3N3STVXI ","M3N3STVYI ","M3N3STVZI ","M3N3VXI ","M3N3VYI ", & + "M3N3VZI ","M3N4AXI ","M3N4AYI ","M3N4AZI ","M3N4DYNP ","M3N4FAFXI ","M3N4FAFYI ", & + "M3N4FAFZI ","M3N4FAGXI ","M3N4FAGYI ","M3N4FAGZI ","M3N4FAMXI ","M3N4FAMYI ","M3N4FAMZI ", & + "M3N4FBFXI ","M3N4FBFYI ","M3N4FBFZI ","M3N4FBXI ","M3N4FBYI ","M3N4FBZI ","M3N4FDXI ", & + "M3N4FDYI ","M3N4FDZI ","M3N4FIXI ","M3N4FIYI ","M3N4FIZI ","M3N4FMGXI ","M3N4FMGYI ", & + "M3N4FMGZI ","M3N4MAFXI ","M3N4MAFYI ","M3N4MAFZI ","M3N4MAGXI ","M3N4MAGYI ","M3N4MAGZI ", & + "M3N4MBFXI ","M3N4MBFYI "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry2(1542) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M3N4MBFZI ","M3N4MBXI ","M3N4MBYI ","M3N4MBZI ","M3N4MMGXI ","M3N4MMGYI ","M3N4MMGZI ", & + "M3N4STAXI ","M3N4STAYI ","M3N4STAZI ","M3N4STVXI ","M3N4STVYI ","M3N4STVZI ","M3N4VXI ", & + "M3N4VYI ","M3N4VZI ","M3N5AXI ","M3N5AYI ","M3N5AZI ","M3N5DYNP ","M3N5FAFXI ", & + "M3N5FAFYI ","M3N5FAFZI ","M3N5FAGXI ","M3N5FAGYI ","M3N5FAGZI ","M3N5FAMXI ","M3N5FAMYI ", & + "M3N5FAMZI ","M3N5FBFXI ","M3N5FBFYI ","M3N5FBFZI ","M3N5FBXI ","M3N5FBYI ","M3N5FBZI ", & + "M3N5FDXI ","M3N5FDYI ","M3N5FDZI ","M3N5FIXI ","M3N5FIYI ","M3N5FIZI ","M3N5FMGXI ", & + "M3N5FMGYI ","M3N5FMGZI ","M3N5MAFXI ","M3N5MAFYI ","M3N5MAFZI ","M3N5MAGXI ","M3N5MAGYI ", & + "M3N5MAGZI ","M3N5MBFXI ","M3N5MBFYI ","M3N5MBFZI ","M3N5MBXI ","M3N5MBYI ","M3N5MBZI ", & + "M3N5MMGXI ","M3N5MMGYI ","M3N5MMGZI ","M3N5STAXI ","M3N5STAYI ","M3N5STAZI ","M3N5STVXI ", & + "M3N5STVYI ","M3N5STVZI ","M3N5VXI ","M3N5VYI ","M3N5VZI ","M3N6AXI ","M3N6AYI ", & + "M3N6AZI ","M3N6DYNP ","M3N6FAFXI ","M3N6FAFYI ","M3N6FAFZI ","M3N6FAGXI ","M3N6FAGYI ", & + "M3N6FAGZI ","M3N6FAMXI ","M3N6FAMYI ","M3N6FAMZI ","M3N6FBFXI ","M3N6FBFYI ","M3N6FBFZI ", & + "M3N6FBXI ","M3N6FBYI ","M3N6FBZI ","M3N6FDXI ","M3N6FDYI ","M3N6FDZI ","M3N6FIXI ", & + "M3N6FIYI ","M3N6FIZI ","M3N6FMGXI ","M3N6FMGYI ","M3N6FMGZI ","M3N6MAFXI ","M3N6MAFYI ", & + "M3N6MAFZI ","M3N6MAGXI ","M3N6MAGYI ","M3N6MAGZI ","M3N6MBFXI ","M3N6MBFYI ","M3N6MBFZI ", & + "M3N6MBXI ","M3N6MBYI ","M3N6MBZI ","M3N6MMGXI ","M3N6MMGYI ","M3N6MMGZI ","M3N6STAXI ", & + "M3N6STAYI ","M3N6STAZI ","M3N6STVXI ","M3N6STVYI ","M3N6STVZI ","M3N6VXI ","M3N6VYI ", & + "M3N6VZI ","M3N7AXI ","M3N7AYI ","M3N7AZI ","M3N7DYNP ","M3N7FAFXI ","M3N7FAFYI ", & + "M3N7FAFZI ","M3N7FAGXI ","M3N7FAGYI ","M3N7FAGZI ","M3N7FAMXI ","M3N7FAMYI ","M3N7FAMZI ", & + "M3N7FBFXI ","M3N7FBFYI ","M3N7FBFZI ","M3N7FBXI ","M3N7FBYI ","M3N7FBZI ","M3N7FDXI ", & + "M3N7FDYI ","M3N7FDZI ","M3N7FIXI ","M3N7FIYI ","M3N7FIZI ","M3N7FMGXI ","M3N7FMGYI ", & + "M3N7FMGZI ","M3N7MAFXI ","M3N7MAFYI ","M3N7MAFZI ","M3N7MAGXI ","M3N7MAGYI ","M3N7MAGZI ", & + "M3N7MBFXI ","M3N7MBFYI ","M3N7MBFZI ","M3N7MBXI ","M3N7MBYI ","M3N7MBZI ","M3N7MMGXI ", & + "M3N7MMGYI ","M3N7MMGZI ","M3N7STAXI ","M3N7STAYI ","M3N7STAZI ","M3N7STVXI ","M3N7STVYI ", & + "M3N7STVZI ","M3N7VXI ","M3N7VYI ","M3N7VZI ","M3N8AXI ","M3N8AYI ","M3N8AZI ", & + "M3N8DYNP ","M3N8FAFXI ","M3N8FAFYI ","M3N8FAFZI ","M3N8FAGXI ","M3N8FAGYI ","M3N8FAGZI ", & + "M3N8FAMXI ","M3N8FAMYI ","M3N8FAMZI ","M3N8FBFXI ","M3N8FBFYI ","M3N8FBFZI ","M3N8FBXI ", & + "M3N8FBYI ","M3N8FBZI ","M3N8FDXI ","M3N8FDYI ","M3N8FDZI ","M3N8FIXI ","M3N8FIYI ", & + "M3N8FIZI ","M3N8FMGXI ","M3N8FMGYI ","M3N8FMGZI ","M3N8MAFXI ","M3N8MAFYI ","M3N8MAFZI ", & + "M3N8MAGXI ","M3N8MAGYI ","M3N8MAGZI ","M3N8MBFXI ","M3N8MBFYI ","M3N8MBFZI ","M3N8MBXI ", & + "M3N8MBYI ","M3N8MBZI ","M3N8MMGXI ","M3N8MMGYI ","M3N8MMGZI ","M3N8STAXI ","M3N8STAYI ", & + "M3N8STAZI ","M3N8STVXI ","M3N8STVYI ","M3N8STVZI ","M3N8VXI ","M3N8VYI ","M3N8VZI ", & + "M3N9AXI ","M3N9AYI ","M3N9AZI ","M3N9DYNP ","M3N9FAFXI ","M3N9FAFYI ","M3N9FAFZI ", & + "M3N9FAGXI ","M3N9FAGYI ","M3N9FAGZI ","M3N9FAMXI ","M3N9FAMYI ","M3N9FAMZI ","M3N9FBFXI ", & + "M3N9FBFYI ","M3N9FBFZI ","M3N9FBXI ","M3N9FBYI ","M3N9FBZI ","M3N9FDXI ","M3N9FDYI ", & + "M3N9FDZI ","M3N9FIXI ","M3N9FIYI ","M3N9FIZI ","M3N9FMGXI ","M3N9FMGYI ","M3N9FMGZI ", & + "M3N9MAFXI ","M3N9MAFYI ","M3N9MAFZI ","M3N9MAGXI ","M3N9MAGYI ","M3N9MAGZI ","M3N9MBFXI ", & + "M3N9MBFYI ","M3N9MBFZI ","M3N9MBXI ","M3N9MBYI ","M3N9MBZI ","M3N9MMGXI ","M3N9MMGYI ", & + "M3N9MMGZI ","M3N9STAXI ","M3N9STAYI ","M3N9STAZI ","M3N9STVXI ","M3N9STVYI ","M3N9STVZI ", & + "M3N9VXI ","M3N9VYI ","M3N9VZI ","M4N1AXI ","M4N1AYI ","M4N1AZI ","M4N1DYNP ", & + "M4N1FAFXI ","M4N1FAFYI ","M4N1FAFZI ","M4N1FAGXI ","M4N1FAGYI ","M4N1FAGZI ","M4N1FAMXI ", & + "M4N1FAMYI ","M4N1FAMZI ","M4N1FBFXI ","M4N1FBFYI ","M4N1FBFZI ","M4N1FBXI ","M4N1FBYI ", & + "M4N1FBZI ","M4N1FDXI ","M4N1FDYI ","M4N1FDZI ","M4N1FIXI ","M4N1FIYI ","M4N1FIZI ", & + "M4N1FMGXI ","M4N1FMGYI ","M4N1FMGZI ","M4N1MAFXI ","M4N1MAFYI ","M4N1MAFZI ","M4N1MAGXI ", & + "M4N1MAGYI ","M4N1MAGZI ","M4N1MBFXI ","M4N1MBFYI ","M4N1MBFZI ","M4N1MBXI ","M4N1MBYI ", & + "M4N1MBZI ","M4N1MMGXI ","M4N1MMGYI ","M4N1MMGZI ","M4N1STAXI ","M4N1STAYI ","M4N1STAZI ", & + "M4N1STVXI ","M4N1STVYI ","M4N1STVZI ","M4N1VXI ","M4N1VYI ","M4N1VZI ","M4N2AXI ", & + "M4N2AYI ","M4N2AZI ","M4N2DYNP ","M4N2FAFXI ","M4N2FAFYI ","M4N2FAFZI ","M4N2FAGXI ", & + "M4N2FAGYI ","M4N2FAGZI ","M4N2FAMXI ","M4N2FAMYI ","M4N2FAMZI ","M4N2FBFXI ","M4N2FBFYI ", & + "M4N2FBFZI ","M4N2FBXI ","M4N2FBYI ","M4N2FBZI ","M4N2FDXI ","M4N2FDYI ","M4N2FDZI ", & + "M4N2FIXI ","M4N2FIYI ","M4N2FIZI ","M4N2FMGXI ","M4N2FMGYI ","M4N2FMGZI ","M4N2MAFXI ", & + "M4N2MAFYI ","M4N2MAFZI ","M4N2MAGXI ","M4N2MAGYI ","M4N2MAGZI ","M4N2MBFXI ","M4N2MBFYI ", & + "M4N2MBFZI ","M4N2MBXI ","M4N2MBYI ","M4N2MBZI ","M4N2MMGXI ","M4N2MMGYI ","M4N2MMGZI ", & + "M4N2STAXI ","M4N2STAYI ","M4N2STAZI ","M4N2STVXI ","M4N2STVYI ","M4N2STVZI ","M4N2VXI ", & + "M4N2VYI ","M4N2VZI ","M4N3AXI ","M4N3AYI ","M4N3AZI ","M4N3DYNP ","M4N3FAFXI ", & + "M4N3FAFYI ","M4N3FAFZI ","M4N3FAGXI ","M4N3FAGYI ","M4N3FAGZI ","M4N3FAMXI ","M4N3FAMYI ", & + "M4N3FAMZI ","M4N3FBFXI ","M4N3FBFYI ","M4N3FBFZI ","M4N3FBXI ","M4N3FBYI ","M4N3FBZI ", & + "M4N3FDXI ","M4N3FDYI ","M4N3FDZI ","M4N3FIXI ","M4N3FIYI ","M4N3FIZI ","M4N3FMGXI ", & + "M4N3FMGYI ","M4N3FMGZI ","M4N3MAFXI ","M4N3MAFYI ","M4N3MAFZI ","M4N3MAGXI ","M4N3MAGYI ", & + "M4N3MAGZI ","M4N3MBFXI ","M4N3MBFYI ","M4N3MBFZI ","M4N3MBXI ","M4N3MBYI ","M4N3MBZI ", & + "M4N3MMGXI ","M4N3MMGYI ","M4N3MMGZI ","M4N3STAXI ","M4N3STAYI ","M4N3STAZI ","M4N3STVXI ", & + "M4N3STVYI ","M4N3STVZI ","M4N3VXI ","M4N3VYI ","M4N3VZI ","M4N4AXI ","M4N4AYI ", & + "M4N4AZI ","M4N4DYNP ","M4N4FAFXI ","M4N4FAFYI ","M4N4FAFZI ","M4N4FAGXI ","M4N4FAGYI ", & + "M4N4FAGZI ","M4N4FAMXI ","M4N4FAMYI ","M4N4FAMZI ","M4N4FBFXI ","M4N4FBFYI ","M4N4FBFZI ", & + "M4N4FBXI ","M4N4FBYI ","M4N4FBZI ","M4N4FDXI ","M4N4FDYI ","M4N4FDZI ","M4N4FIXI ", & + "M4N4FIYI ","M4N4FIZI ","M4N4FMGXI ","M4N4FMGYI ","M4N4FMGZI ","M4N4MAFXI ","M4N4MAFYI ", & + "M4N4MAFZI ","M4N4MAGXI ","M4N4MAGYI ","M4N4MAGZI ","M4N4MBFXI ","M4N4MBFYI ","M4N4MBFZI ", & + "M4N4MBXI ","M4N4MBYI ","M4N4MBZI ","M4N4MMGXI ","M4N4MMGYI ","M4N4MMGZI ","M4N4STAXI ", & + "M4N4STAYI ","M4N4STAZI ","M4N4STVXI ","M4N4STVYI ","M4N4STVZI ","M4N4VXI ","M4N4VYI ", & + "M4N4VZI ","M4N5AXI ","M4N5AYI ","M4N5AZI ","M4N5DYNP ","M4N5FAFXI ","M4N5FAFYI ", & + "M4N5FAFZI ","M4N5FAGXI ","M4N5FAGYI ","M4N5FAGZI ","M4N5FAMXI ","M4N5FAMYI ","M4N5FAMZI ", & + "M4N5FBFXI ","M4N5FBFYI ","M4N5FBFZI ","M4N5FBXI ","M4N5FBYI ","M4N5FBZI ","M4N5FDXI ", & + "M4N5FDYI ","M4N5FDZI ","M4N5FIXI ","M4N5FIYI ","M4N5FIZI ","M4N5FMGXI ","M4N5FMGYI ", & + "M4N5FMGZI ","M4N5MAFXI ","M4N5MAFYI ","M4N5MAFZI ","M4N5MAGXI ","M4N5MAGYI ","M4N5MAGZI ", & + "M4N5MBFXI ","M4N5MBFYI ","M4N5MBFZI ","M4N5MBXI ","M4N5MBYI ","M4N5MBZI ","M4N5MMGXI ", & + "M4N5MMGYI ","M4N5MMGZI ","M4N5STAXI ","M4N5STAYI ","M4N5STAZI ","M4N5STVXI ","M4N5STVYI ", & + "M4N5STVZI ","M4N5VXI ","M4N5VYI ","M4N5VZI ","M4N6AXI ","M4N6AYI ","M4N6AZI ", & + "M4N6DYNP ","M4N6FAFXI ","M4N6FAFYI ","M4N6FAFZI ","M4N6FAGXI ","M4N6FAGYI ","M4N6FAGZI ", & + "M4N6FAMXI ","M4N6FAMYI ","M4N6FAMZI ","M4N6FBFXI ","M4N6FBFYI ","M4N6FBFZI ","M4N6FBXI ", & + "M4N6FBYI ","M4N6FBZI ","M4N6FDXI ","M4N6FDYI ","M4N6FDZI ","M4N6FIXI ","M4N6FIYI ", & + "M4N6FIZI ","M4N6FMGXI ","M4N6FMGYI ","M4N6FMGZI ","M4N6MAFXI ","M4N6MAFYI ","M4N6MAFZI ", & + "M4N6MAGXI ","M4N6MAGYI ","M4N6MAGZI ","M4N6MBFXI ","M4N6MBFYI ","M4N6MBFZI ","M4N6MBXI ", & + "M4N6MBYI ","M4N6MBZI ","M4N6MMGXI ","M4N6MMGYI ","M4N6MMGZI ","M4N6STAXI ","M4N6STAYI ", & + "M4N6STAZI ","M4N6STVXI ","M4N6STVYI ","M4N6STVZI ","M4N6VXI ","M4N6VYI ","M4N6VZI ", & + "M4N7AXI ","M4N7AYI ","M4N7AZI ","M4N7DYNP ","M4N7FAFXI ","M4N7FAFYI ","M4N7FAFZI ", & + "M4N7FAGXI ","M4N7FAGYI ","M4N7FAGZI ","M4N7FAMXI ","M4N7FAMYI ","M4N7FAMZI ","M4N7FBFXI ", & + "M4N7FBFYI ","M4N7FBFZI ","M4N7FBXI ","M4N7FBYI ","M4N7FBZI ","M4N7FDXI ","M4N7FDYI ", & + "M4N7FDZI ","M4N7FIXI ","M4N7FIYI ","M4N7FIZI ","M4N7FMGXI ","M4N7FMGYI ","M4N7FMGZI ", & + "M4N7MAFXI ","M4N7MAFYI ","M4N7MAFZI ","M4N7MAGXI ","M4N7MAGYI ","M4N7MAGZI ","M4N7MBFXI ", & + "M4N7MBFYI ","M4N7MBFZI ","M4N7MBXI ","M4N7MBYI ","M4N7MBZI ","M4N7MMGXI ","M4N7MMGYI ", & + "M4N7MMGZI ","M4N7STAXI ","M4N7STAYI ","M4N7STAZI ","M4N7STVXI ","M4N7STVYI ","M4N7STVZI ", & + "M4N7VXI ","M4N7VYI ","M4N7VZI ","M4N8AXI ","M4N8AYI ","M4N8AZI ","M4N8DYNP ", & + "M4N8FAFXI ","M4N8FAFYI ","M4N8FAFZI ","M4N8FAGXI ","M4N8FAGYI ","M4N8FAGZI ","M4N8FAMXI ", & + "M4N8FAMYI ","M4N8FAMZI ","M4N8FBFXI ","M4N8FBFYI ","M4N8FBFZI ","M4N8FBXI ","M4N8FBYI ", & + "M4N8FBZI ","M4N8FDXI ","M4N8FDYI ","M4N8FDZI ","M4N8FIXI ","M4N8FIYI ","M4N8FIZI ", & + "M4N8FMGXI ","M4N8FMGYI ","M4N8FMGZI ","M4N8MAFXI ","M4N8MAFYI ","M4N8MAFZI ","M4N8MAGXI ", & + "M4N8MAGYI ","M4N8MAGZI ","M4N8MBFXI ","M4N8MBFYI ","M4N8MBFZI ","M4N8MBXI ","M4N8MBYI ", & + "M4N8MBZI ","M4N8MMGXI ","M4N8MMGYI ","M4N8MMGZI ","M4N8STAXI ","M4N8STAYI ","M4N8STAZI ", & + "M4N8STVXI ","M4N8STVYI ","M4N8STVZI ","M4N8VXI ","M4N8VYI ","M4N8VZI ","M4N9AXI ", & + "M4N9AYI ","M4N9AZI ","M4N9DYNP ","M4N9FAFXI ","M4N9FAFYI ","M4N9FAFZI ","M4N9FAGXI ", & + "M4N9FAGYI ","M4N9FAGZI ","M4N9FAMXI ","M4N9FAMYI ","M4N9FAMZI ","M4N9FBFXI ","M4N9FBFYI ", & + "M4N9FBFZI ","M4N9FBXI ","M4N9FBYI ","M4N9FBZI ","M4N9FDXI ","M4N9FDYI ","M4N9FDZI ", & + "M4N9FIXI ","M4N9FIYI ","M4N9FIZI ","M4N9FMGXI ","M4N9FMGYI ","M4N9FMGZI ","M4N9MAFXI ", & + "M4N9MAFYI ","M4N9MAFZI ","M4N9MAGXI ","M4N9MAGYI ","M4N9MAGZI ","M4N9MBFXI ","M4N9MBFYI ", & + "M4N9MBFZI ","M4N9MBXI ","M4N9MBYI ","M4N9MBZI ","M4N9MMGXI ","M4N9MMGYI ","M4N9MMGZI ", & + "M4N9STAXI ","M4N9STAYI ","M4N9STAZI ","M4N9STVXI ","M4N9STVYI ","M4N9STVZI ","M4N9VXI ", & + "M4N9VYI ","M4N9VZI ","M5N1AXI ","M5N1AYI ","M5N1AZI ","M5N1DYNP ","M5N1FAFXI ", & + "M5N1FAFYI ","M5N1FAFZI ","M5N1FAGXI ","M5N1FAGYI ","M5N1FAGZI ","M5N1FAMXI ","M5N1FAMYI ", & + "M5N1FAMZI ","M5N1FBFXI ","M5N1FBFYI ","M5N1FBFZI ","M5N1FBXI ","M5N1FBYI ","M5N1FBZI ", & + "M5N1FDXI ","M5N1FDYI ","M5N1FDZI ","M5N1FIXI ","M5N1FIYI ","M5N1FIZI ","M5N1FMGXI ", & + "M5N1FMGYI ","M5N1FMGZI ","M5N1MAFXI ","M5N1MAFYI ","M5N1MAFZI ","M5N1MAGXI ","M5N1MAGYI ", & + "M5N1MAGZI ","M5N1MBFXI ","M5N1MBFYI ","M5N1MBFZI ","M5N1MBXI ","M5N1MBYI ","M5N1MBZI ", & + "M5N1MMGXI ","M5N1MMGYI ","M5N1MMGZI ","M5N1STAXI ","M5N1STAYI ","M5N1STAZI ","M5N1STVXI ", & + "M5N1STVYI ","M5N1STVZI ","M5N1VXI ","M5N1VYI ","M5N1VZI ","M5N2AXI ","M5N2AYI ", & + "M5N2AZI ","M5N2DYNP ","M5N2FAFXI ","M5N2FAFYI ","M5N2FAFZI ","M5N2FAGXI ","M5N2FAGYI ", & + "M5N2FAGZI ","M5N2FAMXI ","M5N2FAMYI ","M5N2FAMZI ","M5N2FBFXI ","M5N2FBFYI ","M5N2FBFZI ", & + "M5N2FBXI ","M5N2FBYI ","M5N2FBZI ","M5N2FDXI ","M5N2FDYI ","M5N2FDZI ","M5N2FIXI ", & + "M5N2FIYI ","M5N2FIZI ","M5N2FMGXI ","M5N2FMGYI ","M5N2FMGZI ","M5N2MAFXI ","M5N2MAFYI ", & + "M5N2MAFZI ","M5N2MAGXI ","M5N2MAGYI ","M5N2MAGZI ","M5N2MBFXI ","M5N2MBFYI ","M5N2MBFZI ", & + "M5N2MBXI ","M5N2MBYI ","M5N2MBZI ","M5N2MMGXI ","M5N2MMGYI ","M5N2MMGZI ","M5N2STAXI ", & + "M5N2STAYI ","M5N2STAZI ","M5N2STVXI ","M5N2STVYI ","M5N2STVZI ","M5N2VXI ","M5N2VYI ", & + "M5N2VZI ","M5N3AXI ","M5N3AYI ","M5N3AZI ","M5N3DYNP ","M5N3FAFXI ","M5N3FAFYI ", & + "M5N3FAFZI ","M5N3FAGXI ","M5N3FAGYI ","M5N3FAGZI ","M5N3FAMXI ","M5N3FAMYI ","M5N3FAMZI ", & + "M5N3FBFXI ","M5N3FBFYI ","M5N3FBFZI ","M5N3FBXI ","M5N3FBYI ","M5N3FBZI ","M5N3FDXI ", & + "M5N3FDYI ","M5N3FDZI ","M5N3FIXI ","M5N3FIYI ","M5N3FIZI ","M5N3FMGXI ","M5N3FMGYI ", & + "M5N3FMGZI ","M5N3MAFXI ","M5N3MAFYI ","M5N3MAFZI ","M5N3MAGXI ","M5N3MAGYI ","M5N3MAGZI ", & + "M5N3MBFXI ","M5N3MBFYI ","M5N3MBFZI ","M5N3MBXI ","M5N3MBYI ","M5N3MBZI ","M5N3MMGXI ", & + "M5N3MMGYI ","M5N3MMGZI ","M5N3STAXI ","M5N3STAYI ","M5N3STAZI ","M5N3STVXI ","M5N3STVYI ", & + "M5N3STVZI ","M5N3VXI ","M5N3VYI ","M5N3VZI ","M5N4AXI ","M5N4AYI ","M5N4AZI ", & + "M5N4DYNP ","M5N4FAFXI ","M5N4FAFYI ","M5N4FAFZI ","M5N4FAGXI ","M5N4FAGYI ","M5N4FAGZI ", & + "M5N4FAMXI ","M5N4FAMYI ","M5N4FAMZI ","M5N4FBFXI ","M5N4FBFYI ","M5N4FBFZI ","M5N4FBXI ", & + "M5N4FBYI ","M5N4FBZI ","M5N4FDXI ","M5N4FDYI ","M5N4FDZI ","M5N4FIXI ","M5N4FIYI ", & + "M5N4FIZI ","M5N4FMGXI ","M5N4FMGYI ","M5N4FMGZI ","M5N4MAFXI ","M5N4MAFYI ","M5N4MAFZI ", & + "M5N4MAGXI ","M5N4MAGYI ","M5N4MAGZI ","M5N4MBFXI ","M5N4MBFYI ","M5N4MBFZI ","M5N4MBXI ", & + "M5N4MBYI ","M5N4MBZI ","M5N4MMGXI ","M5N4MMGYI ","M5N4MMGZI ","M5N4STAXI ","M5N4STAYI ", & + "M5N4STAZI ","M5N4STVXI ","M5N4STVYI ","M5N4STVZI ","M5N4VXI ","M5N4VYI ","M5N4VZI ", & + "M5N5AXI ","M5N5AYI ","M5N5AZI ","M5N5DYNP ","M5N5FAFXI ","M5N5FAFYI ","M5N5FAFZI ", & + "M5N5FAGXI ","M5N5FAGYI ","M5N5FAGZI ","M5N5FAMXI ","M5N5FAMYI ","M5N5FAMZI ","M5N5FBFXI ", & + "M5N5FBFYI ","M5N5FBFZI ","M5N5FBXI ","M5N5FBYI ","M5N5FBZI ","M5N5FDXI ","M5N5FDYI ", & + "M5N5FDZI ","M5N5FIXI ","M5N5FIYI ","M5N5FIZI ","M5N5FMGXI ","M5N5FMGYI ","M5N5FMGZI ", & + "M5N5MAFXI ","M5N5MAFYI ","M5N5MAFZI ","M5N5MAGXI ","M5N5MAGYI ","M5N5MAGZI ","M5N5MBFXI ", & + "M5N5MBFYI ","M5N5MBFZI ","M5N5MBXI ","M5N5MBYI ","M5N5MBZI ","M5N5MMGXI ","M5N5MMGYI ", & + "M5N5MMGZI ","M5N5STAXI ","M5N5STAYI ","M5N5STAZI ","M5N5STVXI ","M5N5STVYI ","M5N5STVZI ", & + "M5N5VXI ","M5N5VYI ","M5N5VZI ","M5N6AXI ","M5N6AYI ","M5N6AZI ","M5N6DYNP ", & + "M5N6FAFXI ","M5N6FAFYI ","M5N6FAFZI ","M5N6FAGXI ","M5N6FAGYI ","M5N6FAGZI ","M5N6FAMXI ", & + "M5N6FAMYI ","M5N6FAMZI ","M5N6FBFXI ","M5N6FBFYI ","M5N6FBFZI ","M5N6FBXI ","M5N6FBYI ", & + "M5N6FBZI ","M5N6FDXI ","M5N6FDYI ","M5N6FDZI ","M5N6FIXI ","M5N6FIYI ","M5N6FIZI ", & + "M5N6FMGXI ","M5N6FMGYI ","M5N6FMGZI ","M5N6MAFXI ","M5N6MAFYI ","M5N6MAFZI ","M5N6MAGXI ", & + "M5N6MAGYI ","M5N6MAGZI ","M5N6MBFXI ","M5N6MBFYI ","M5N6MBFZI ","M5N6MBXI ","M5N6MBYI ", & + "M5N6MBZI ","M5N6MMGXI ","M5N6MMGYI ","M5N6MMGZI ","M5N6STAXI ","M5N6STAYI ","M5N6STAZI ", & + "M5N6STVXI ","M5N6STVYI ","M5N6STVZI ","M5N6VXI ","M5N6VYI ","M5N6VZI ","M5N7AXI ", & + "M5N7AYI ","M5N7AZI ","M5N7DYNP ","M5N7FAFXI ","M5N7FAFYI ","M5N7FAFZI ","M5N7FAGXI ", & + "M5N7FAGYI ","M5N7FAGZI ","M5N7FAMXI ","M5N7FAMYI ","M5N7FAMZI ","M5N7FBFXI ","M5N7FBFYI ", & + "M5N7FBFZI ","M5N7FBXI ","M5N7FBYI ","M5N7FBZI ","M5N7FDXI ","M5N7FDYI ","M5N7FDZI ", & + "M5N7FIXI ","M5N7FIYI ","M5N7FIZI ","M5N7FMGXI ","M5N7FMGYI ","M5N7FMGZI ","M5N7MAFXI ", & + "M5N7MAFYI ","M5N7MAFZI ","M5N7MAGXI ","M5N7MAGYI ","M5N7MAGZI ","M5N7MBFXI ","M5N7MBFYI ", & + "M5N7MBFZI ","M5N7MBXI ","M5N7MBYI ","M5N7MBZI ","M5N7MMGXI ","M5N7MMGYI ","M5N7MMGZI ", & + "M5N7STAXI ","M5N7STAYI ","M5N7STAZI ","M5N7STVXI ","M5N7STVYI ","M5N7STVZI ","M5N7VXI ", & + "M5N7VYI ","M5N7VZI ","M5N8AXI ","M5N8AYI ","M5N8AZI ","M5N8DYNP ","M5N8FAFXI ", & + "M5N8FAFYI ","M5N8FAFZI ","M5N8FAGXI ","M5N8FAGYI ","M5N8FAGZI ","M5N8FAMXI ","M5N8FAMYI ", & + "M5N8FAMZI ","M5N8FBFXI ","M5N8FBFYI ","M5N8FBFZI ","M5N8FBXI ","M5N8FBYI ","M5N8FBZI ", & + "M5N8FDXI ","M5N8FDYI ","M5N8FDZI ","M5N8FIXI ","M5N8FIYI ","M5N8FIZI ","M5N8FMGXI ", & + "M5N8FMGYI ","M5N8FMGZI ","M5N8MAFXI ","M5N8MAFYI ","M5N8MAFZI ","M5N8MAGXI ","M5N8MAGYI ", & + "M5N8MAGZI ","M5N8MBFXI ","M5N8MBFYI ","M5N8MBFZI ","M5N8MBXI ","M5N8MBYI ","M5N8MBZI ", & + "M5N8MMGXI ","M5N8MMGYI ","M5N8MMGZI ","M5N8STAXI ","M5N8STAYI ","M5N8STAZI ","M5N8STVXI ", & + "M5N8STVYI ","M5N8STVZI ","M5N8VXI ","M5N8VYI ","M5N8VZI ","M5N9AXI ","M5N9AYI ", & + "M5N9AZI ","M5N9DYNP ","M5N9FAFXI ","M5N9FAFYI ","M5N9FAFZI ","M5N9FAGXI ","M5N9FAGYI ", & + "M5N9FAGZI ","M5N9FAMXI ","M5N9FAMYI ","M5N9FAMZI ","M5N9FBFXI ","M5N9FBFYI ","M5N9FBFZI ", & + "M5N9FBXI ","M5N9FBYI ","M5N9FBZI ","M5N9FDXI ","M5N9FDYI ","M5N9FDZI ","M5N9FIXI ", & + "M5N9FIYI ","M5N9FIZI ","M5N9FMGXI ","M5N9FMGYI ","M5N9FMGZI ","M5N9MAFXI ","M5N9MAFYI ", & + "M5N9MAFZI ","M5N9MAGXI ","M5N9MAGYI ","M5N9MAGZI ","M5N9MBFXI ","M5N9MBFYI ","M5N9MBFZI ", & + "M5N9MBXI ","M5N9MBYI ","M5N9MBZI ","M5N9MMGXI ","M5N9MMGYI ","M5N9MMGZI ","M5N9STAXI ", & + "M5N9STAYI ","M5N9STAZI ","M5N9STVXI ","M5N9STVYI ","M5N9STVZI ","M5N9VXI ","M5N9VYI ", & + "M5N9VZI ","M6N1AXI ","M6N1AYI ","M6N1AZI ","M6N1DYNP ","M6N1FAFXI ","M6N1FAFYI ", & + "M6N1FAFZI ","M6N1FAGXI ","M6N1FAGYI ","M6N1FAGZI ","M6N1FAMXI ","M6N1FAMYI ","M6N1FAMZI ", & + "M6N1FBFXI ","M6N1FBFYI ","M6N1FBFZI ","M6N1FBXI ","M6N1FBYI ","M6N1FBZI ","M6N1FDXI ", & + "M6N1FDYI ","M6N1FDZI ","M6N1FIXI ","M6N1FIYI ","M6N1FIZI ","M6N1FMGXI ","M6N1FMGYI ", & + "M6N1FMGZI ","M6N1MAFXI ","M6N1MAFYI ","M6N1MAFZI ","M6N1MAGXI ","M6N1MAGYI ","M6N1MAGZI ", & + "M6N1MBFXI ","M6N1MBFYI ","M6N1MBFZI ","M6N1MBXI ","M6N1MBYI ","M6N1MBZI ","M6N1MMGXI ", & + "M6N1MMGYI ","M6N1MMGZI ","M6N1STAXI ","M6N1STAYI ","M6N1STAZI ","M6N1STVXI ","M6N1STVYI ", & + "M6N1STVZI ","M6N1VXI ","M6N1VYI ","M6N1VZI ","M6N2AXI ","M6N2AYI ","M6N2AZI ", & + "M6N2DYNP ","M6N2FAFXI ","M6N2FAFYI ","M6N2FAFZI ","M6N2FAGXI ","M6N2FAGYI ","M6N2FAGZI ", & + "M6N2FAMXI ","M6N2FAMYI ","M6N2FAMZI ","M6N2FBFXI ","M6N2FBFYI ","M6N2FBFZI ","M6N2FBXI ", & + "M6N2FBYI ","M6N2FBZI ","M6N2FDXI ","M6N2FDYI ","M6N2FDZI ","M6N2FIXI ","M6N2FIYI ", & + "M6N2FIZI ","M6N2FMGXI ","M6N2FMGYI ","M6N2FMGZI ","M6N2MAFXI ","M6N2MAFYI ","M6N2MAFZI ", & + "M6N2MAGXI ","M6N2MAGYI ","M6N2MAGZI ","M6N2MBFXI ","M6N2MBFYI ","M6N2MBFZI ","M6N2MBXI ", & + "M6N2MBYI ","M6N2MBZI ","M6N2MMGXI ","M6N2MMGYI ","M6N2MMGZI ","M6N2STAXI ","M6N2STAYI ", & + "M6N2STAZI ","M6N2STVXI ","M6N2STVYI ","M6N2STVZI ","M6N2VXI ","M6N2VYI ","M6N2VZI ", & + "M6N3AXI ","M6N3AYI ","M6N3AZI ","M6N3DYNP ","M6N3FAFXI ","M6N3FAFYI ","M6N3FAFZI ", & + "M6N3FAGXI ","M6N3FAGYI ","M6N3FAGZI ","M6N3FAMXI ","M6N3FAMYI ","M6N3FAMZI ","M6N3FBFXI ", & + "M6N3FBFYI ","M6N3FBFZI ","M6N3FBXI ","M6N3FBYI ","M6N3FBZI ","M6N3FDXI ","M6N3FDYI ", & + "M6N3FDZI ","M6N3FIXI ","M6N3FIYI ","M6N3FIZI ","M6N3FMGXI ","M6N3FMGYI ","M6N3FMGZI ", & + "M6N3MAFXI ","M6N3MAFYI ","M6N3MAFZI ","M6N3MAGXI ","M6N3MAGYI ","M6N3MAGZI ","M6N3MBFXI ", & + "M6N3MBFYI ","M6N3MBFZI ","M6N3MBXI ","M6N3MBYI ","M6N3MBZI ","M6N3MMGXI ","M6N3MMGYI ", & + "M6N3MMGZI ","M6N3STAXI ","M6N3STAYI ","M6N3STAZI ","M6N3STVXI ","M6N3STVYI ","M6N3STVZI ", & + "M6N3VXI ","M6N3VYI ","M6N3VZI ","M6N4AXI ","M6N4AYI ","M6N4AZI ","M6N4DYNP ", & + "M6N4FAFXI ","M6N4FAFYI ","M6N4FAFZI ","M6N4FAGXI ","M6N4FAGYI ","M6N4FAGZI ","M6N4FAMXI ", & + "M6N4FAMYI ","M6N4FAMZI ","M6N4FBFXI ","M6N4FBFYI ","M6N4FBFZI ","M6N4FBXI ","M6N4FBYI ", & + "M6N4FBZI ","M6N4FDXI ","M6N4FDYI ","M6N4FDZI ","M6N4FIXI ","M6N4FIYI ","M6N4FIZI ", & + "M6N4FMGXI ","M6N4FMGYI ","M6N4FMGZI ","M6N4MAFXI ","M6N4MAFYI ","M6N4MAFZI ","M6N4MAGXI ", & + "M6N4MAGYI ","M6N4MAGZI ","M6N4MBFXI ","M6N4MBFYI ","M6N4MBFZI ","M6N4MBXI ","M6N4MBYI ", & + "M6N4MBZI ","M6N4MMGXI ","M6N4MMGYI ","M6N4MMGZI ","M6N4STAXI ","M6N4STAYI ","M6N4STAZI ", & + "M6N4STVXI ","M6N4STVYI ","M6N4STVZI ","M6N4VXI ","M6N4VYI ","M6N4VZI ","M6N5AXI ", & + "M6N5AYI ","M6N5AZI ","M6N5DYNP ","M6N5FAFXI ","M6N5FAFYI ","M6N5FAFZI ","M6N5FAGXI ", & + "M6N5FAGYI ","M6N5FAGZI ","M6N5FAMXI ","M6N5FAMYI ","M6N5FAMZI ","M6N5FBFXI ","M6N5FBFYI ", & + "M6N5FBFZI ","M6N5FBXI ","M6N5FBYI ","M6N5FBZI ","M6N5FDXI ","M6N5FDYI ","M6N5FDZI ", & + "M6N5FIXI ","M6N5FIYI ","M6N5FIZI ","M6N5FMGXI ","M6N5FMGYI ","M6N5FMGZI ","M6N5MAFXI ", & + "M6N5MAFYI ","M6N5MAFZI ","M6N5MAGXI ","M6N5MAGYI ","M6N5MAGZI ","M6N5MBFXI ","M6N5MBFYI ", & + "M6N5MBFZI ","M6N5MBXI ","M6N5MBYI ","M6N5MBZI ","M6N5MMGXI ","M6N5MMGYI ","M6N5MMGZI ", & + "M6N5STAXI ","M6N5STAYI ","M6N5STAZI ","M6N5STVXI ","M6N5STVYI ","M6N5STVZI ","M6N5VXI ", & + "M6N5VYI ","M6N5VZI ","M6N6AXI ","M6N6AYI ","M6N6AZI ","M6N6DYNP ","M6N6FAFXI ", & + "M6N6FAFYI ","M6N6FAFZI ","M6N6FAGXI ","M6N6FAGYI ","M6N6FAGZI ","M6N6FAMXI ","M6N6FAMYI ", & + "M6N6FAMZI ","M6N6FBFXI ","M6N6FBFYI ","M6N6FBFZI ","M6N6FBXI ","M6N6FBYI ","M6N6FBZI ", & + "M6N6FDXI ","M6N6FDYI ","M6N6FDZI ","M6N6FIXI ","M6N6FIYI ","M6N6FIZI ","M6N6FMGXI ", & + "M6N6FMGYI ","M6N6FMGZI ","M6N6MAFXI ","M6N6MAFYI ","M6N6MAFZI ","M6N6MAGXI ","M6N6MAGYI ", & + "M6N6MAGZI ","M6N6MBFXI ","M6N6MBFYI ","M6N6MBFZI ","M6N6MBXI ","M6N6MBYI ","M6N6MBZI ", & + "M6N6MMGXI ","M6N6MMGYI ","M6N6MMGZI ","M6N6STAXI ","M6N6STAYI ","M6N6STAZI ","M6N6STVXI ", & + "M6N6STVYI ","M6N6STVZI ","M6N6VXI ","M6N6VYI ","M6N6VZI ","M6N7AXI ","M6N7AYI ", & + "M6N7AZI ","M6N7DYNP ","M6N7FAFXI ","M6N7FAFYI ","M6N7FAFZI ","M6N7FAGXI ","M6N7FAGYI ", & + "M6N7FAGZI ","M6N7FAMXI ","M6N7FAMYI ","M6N7FAMZI ","M6N7FBFXI ","M6N7FBFYI ","M6N7FBFZI ", & + "M6N7FBXI ","M6N7FBYI "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry3(1542) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M6N7FBZI ","M6N7FDXI ","M6N7FDYI ","M6N7FDZI ","M6N7FIXI ","M6N7FIYI ","M6N7FIZI ", & + "M6N7FMGXI ","M6N7FMGYI ","M6N7FMGZI ","M6N7MAFXI ","M6N7MAFYI ","M6N7MAFZI ","M6N7MAGXI ", & + "M6N7MAGYI ","M6N7MAGZI ","M6N7MBFXI ","M6N7MBFYI ","M6N7MBFZI ","M6N7MBXI ","M6N7MBYI ", & + "M6N7MBZI ","M6N7MMGXI ","M6N7MMGYI ","M6N7MMGZI ","M6N7STAXI ","M6N7STAYI ","M6N7STAZI ", & + "M6N7STVXI ","M6N7STVYI ","M6N7STVZI ","M6N7VXI ","M6N7VYI ","M6N7VZI ","M6N8AXI ", & + "M6N8AYI ","M6N8AZI ","M6N8DYNP ","M6N8FAFXI ","M6N8FAFYI ","M6N8FAFZI ","M6N8FAGXI ", & + "M6N8FAGYI ","M6N8FAGZI ","M6N8FAMXI ","M6N8FAMYI ","M6N8FAMZI ","M6N8FBFXI ","M6N8FBFYI ", & + "M6N8FBFZI ","M6N8FBXI ","M6N8FBYI ","M6N8FBZI ","M6N8FDXI ","M6N8FDYI ","M6N8FDZI ", & + "M6N8FIXI ","M6N8FIYI ","M6N8FIZI ","M6N8FMGXI ","M6N8FMGYI ","M6N8FMGZI ","M6N8MAFXI ", & + "M6N8MAFYI ","M6N8MAFZI ","M6N8MAGXI ","M6N8MAGYI ","M6N8MAGZI ","M6N8MBFXI ","M6N8MBFYI ", & + "M6N8MBFZI ","M6N8MBXI ","M6N8MBYI ","M6N8MBZI ","M6N8MMGXI ","M6N8MMGYI ","M6N8MMGZI ", & + "M6N8STAXI ","M6N8STAYI ","M6N8STAZI ","M6N8STVXI ","M6N8STVYI ","M6N8STVZI ","M6N8VXI ", & + "M6N8VYI ","M6N8VZI ","M6N9AXI ","M6N9AYI ","M6N9AZI ","M6N9DYNP ","M6N9FAFXI ", & + "M6N9FAFYI ","M6N9FAFZI ","M6N9FAGXI ","M6N9FAGYI ","M6N9FAGZI ","M6N9FAMXI ","M6N9FAMYI ", & + "M6N9FAMZI ","M6N9FBFXI ","M6N9FBFYI ","M6N9FBFZI ","M6N9FBXI ","M6N9FBYI ","M6N9FBZI ", & + "M6N9FDXI ","M6N9FDYI ","M6N9FDZI ","M6N9FIXI ","M6N9FIYI ","M6N9FIZI ","M6N9FMGXI ", & + "M6N9FMGYI ","M6N9FMGZI ","M6N9MAFXI ","M6N9MAFYI ","M6N9MAFZI ","M6N9MAGXI ","M6N9MAGYI ", & + "M6N9MAGZI ","M6N9MBFXI ","M6N9MBFYI ","M6N9MBFZI ","M6N9MBXI ","M6N9MBYI ","M6N9MBZI ", & + "M6N9MMGXI ","M6N9MMGYI ","M6N9MMGZI ","M6N9STAXI ","M6N9STAYI ","M6N9STAZI ","M6N9STVXI ", & + "M6N9STVYI ","M6N9STVZI ","M6N9VXI ","M6N9VYI ","M6N9VZI ","M7N1AXI ","M7N1AYI ", & + "M7N1AZI ","M7N1DYNP ","M7N1FAFXI ","M7N1FAFYI ","M7N1FAFZI ","M7N1FAGXI ","M7N1FAGYI ", & + "M7N1FAGZI ","M7N1FAMXI ","M7N1FAMYI ","M7N1FAMZI ","M7N1FBFXI ","M7N1FBFYI ","M7N1FBFZI ", & + "M7N1FBXI ","M7N1FBYI ","M7N1FBZI ","M7N1FDXI ","M7N1FDYI ","M7N1FDZI ","M7N1FIXI ", & + "M7N1FIYI ","M7N1FIZI ","M7N1FMGXI ","M7N1FMGYI ","M7N1FMGZI ","M7N1MAFXI ","M7N1MAFYI ", & + "M7N1MAFZI ","M7N1MAGXI ","M7N1MAGYI ","M7N1MAGZI ","M7N1MBFXI ","M7N1MBFYI ","M7N1MBFZI ", & + "M7N1MBXI ","M7N1MBYI ","M7N1MBZI ","M7N1MMGXI ","M7N1MMGYI ","M7N1MMGZI ","M7N1STAXI ", & + "M7N1STAYI ","M7N1STAZI ","M7N1STVXI ","M7N1STVYI ","M7N1STVZI ","M7N1VXI ","M7N1VYI ", & + "M7N1VZI ","M7N2AXI ","M7N2AYI ","M7N2AZI ","M7N2DYNP ","M7N2FAFXI ","M7N2FAFYI ", & + "M7N2FAFZI ","M7N2FAGXI ","M7N2FAGYI ","M7N2FAGZI ","M7N2FAMXI ","M7N2FAMYI ","M7N2FAMZI ", & + "M7N2FBFXI ","M7N2FBFYI ","M7N2FBFZI ","M7N2FBXI ","M7N2FBYI ","M7N2FBZI ","M7N2FDXI ", & + "M7N2FDYI ","M7N2FDZI ","M7N2FIXI ","M7N2FIYI ","M7N2FIZI ","M7N2FMGXI ","M7N2FMGYI ", & + "M7N2FMGZI ","M7N2MAFXI ","M7N2MAFYI ","M7N2MAFZI ","M7N2MAGXI ","M7N2MAGYI ","M7N2MAGZI ", & + "M7N2MBFXI ","M7N2MBFYI ","M7N2MBFZI ","M7N2MBXI ","M7N2MBYI ","M7N2MBZI ","M7N2MMGXI ", & + "M7N2MMGYI ","M7N2MMGZI ","M7N2STAXI ","M7N2STAYI ","M7N2STAZI ","M7N2STVXI ","M7N2STVYI ", & + "M7N2STVZI ","M7N2VXI ","M7N2VYI ","M7N2VZI ","M7N3AXI ","M7N3AYI ","M7N3AZI ", & + "M7N3DYNP ","M7N3FAFXI ","M7N3FAFYI ","M7N3FAFZI ","M7N3FAGXI ","M7N3FAGYI ","M7N3FAGZI ", & + "M7N3FAMXI ","M7N3FAMYI ","M7N3FAMZI ","M7N3FBFXI ","M7N3FBFYI ","M7N3FBFZI ","M7N3FBXI ", & + "M7N3FBYI ","M7N3FBZI ","M7N3FDXI ","M7N3FDYI ","M7N3FDZI ","M7N3FIXI ","M7N3FIYI ", & + "M7N3FIZI ","M7N3FMGXI ","M7N3FMGYI ","M7N3FMGZI ","M7N3MAFXI ","M7N3MAFYI ","M7N3MAFZI ", & + "M7N3MAGXI ","M7N3MAGYI ","M7N3MAGZI ","M7N3MBFXI ","M7N3MBFYI ","M7N3MBFZI ","M7N3MBXI ", & + "M7N3MBYI ","M7N3MBZI ","M7N3MMGXI ","M7N3MMGYI ","M7N3MMGZI ","M7N3STAXI ","M7N3STAYI ", & + "M7N3STAZI ","M7N3STVXI ","M7N3STVYI ","M7N3STVZI ","M7N3VXI ","M7N3VYI ","M7N3VZI ", & + "M7N4AXI ","M7N4AYI ","M7N4AZI ","M7N4DYNP ","M7N4FAFXI ","M7N4FAFYI ","M7N4FAFZI ", & + "M7N4FAGXI ","M7N4FAGYI ","M7N4FAGZI ","M7N4FAMXI ","M7N4FAMYI ","M7N4FAMZI ","M7N4FBFXI ", & + "M7N4FBFYI ","M7N4FBFZI ","M7N4FBXI ","M7N4FBYI ","M7N4FBZI ","M7N4FDXI ","M7N4FDYI ", & + "M7N4FDZI ","M7N4FIXI ","M7N4FIYI ","M7N4FIZI ","M7N4FMGXI ","M7N4FMGYI ","M7N4FMGZI ", & + "M7N4MAFXI ","M7N4MAFYI ","M7N4MAFZI ","M7N4MAGXI ","M7N4MAGYI ","M7N4MAGZI ","M7N4MBFXI ", & + "M7N4MBFYI ","M7N4MBFZI ","M7N4MBXI ","M7N4MBYI ","M7N4MBZI ","M7N4MMGXI ","M7N4MMGYI ", & + "M7N4MMGZI ","M7N4STAXI ","M7N4STAYI ","M7N4STAZI ","M7N4STVXI ","M7N4STVYI ","M7N4STVZI ", & + "M7N4VXI ","M7N4VYI ","M7N4VZI ","M7N5AXI ","M7N5AYI ","M7N5AZI ","M7N5DYNP ", & + "M7N5FAFXI ","M7N5FAFYI ","M7N5FAFZI ","M7N5FAGXI ","M7N5FAGYI ","M7N5FAGZI ","M7N5FAMXI ", & + "M7N5FAMYI ","M7N5FAMZI ","M7N5FBFXI ","M7N5FBFYI ","M7N5FBFZI ","M7N5FBXI ","M7N5FBYI ", & + "M7N5FBZI ","M7N5FDXI ","M7N5FDYI ","M7N5FDZI ","M7N5FIXI ","M7N5FIYI ","M7N5FIZI ", & + "M7N5FMGXI ","M7N5FMGYI ","M7N5FMGZI ","M7N5MAFXI ","M7N5MAFYI ","M7N5MAFZI ","M7N5MAGXI ", & + "M7N5MAGYI ","M7N5MAGZI ","M7N5MBFXI ","M7N5MBFYI ","M7N5MBFZI ","M7N5MBXI ","M7N5MBYI ", & + "M7N5MBZI ","M7N5MMGXI ","M7N5MMGYI ","M7N5MMGZI ","M7N5STAXI ","M7N5STAYI ","M7N5STAZI ", & + "M7N5STVXI ","M7N5STVYI ","M7N5STVZI ","M7N5VXI ","M7N5VYI ","M7N5VZI ","M7N6AXI ", & + "M7N6AYI ","M7N6AZI ","M7N6DYNP ","M7N6FAFXI ","M7N6FAFYI ","M7N6FAFZI ","M7N6FAGXI ", & + "M7N6FAGYI ","M7N6FAGZI ","M7N6FAMXI ","M7N6FAMYI ","M7N6FAMZI ","M7N6FBFXI ","M7N6FBFYI ", & + "M7N6FBFZI ","M7N6FBXI ","M7N6FBYI ","M7N6FBZI ","M7N6FDXI ","M7N6FDYI ","M7N6FDZI ", & + "M7N6FIXI ","M7N6FIYI ","M7N6FIZI ","M7N6FMGXI ","M7N6FMGYI ","M7N6FMGZI ","M7N6MAFXI ", & + "M7N6MAFYI ","M7N6MAFZI ","M7N6MAGXI ","M7N6MAGYI ","M7N6MAGZI ","M7N6MBFXI ","M7N6MBFYI ", & + "M7N6MBFZI ","M7N6MBXI ","M7N6MBYI ","M7N6MBZI ","M7N6MMGXI ","M7N6MMGYI ","M7N6MMGZI ", & + "M7N6STAXI ","M7N6STAYI ","M7N6STAZI ","M7N6STVXI ","M7N6STVYI ","M7N6STVZI ","M7N6VXI ", & + "M7N6VYI ","M7N6VZI ","M7N7AXI ","M7N7AYI ","M7N7AZI ","M7N7DYNP ","M7N7FAFXI ", & + "M7N7FAFYI ","M7N7FAFZI ","M7N7FAGXI ","M7N7FAGYI ","M7N7FAGZI ","M7N7FAMXI ","M7N7FAMYI ", & + "M7N7FAMZI ","M7N7FBFXI ","M7N7FBFYI ","M7N7FBFZI ","M7N7FBXI ","M7N7FBYI ","M7N7FBZI ", & + "M7N7FDXI ","M7N7FDYI ","M7N7FDZI ","M7N7FIXI ","M7N7FIYI ","M7N7FIZI ","M7N7FMGXI ", & + "M7N7FMGYI ","M7N7FMGZI ","M7N7MAFXI ","M7N7MAFYI ","M7N7MAFZI ","M7N7MAGXI ","M7N7MAGYI ", & + "M7N7MAGZI ","M7N7MBFXI ","M7N7MBFYI ","M7N7MBFZI ","M7N7MBXI ","M7N7MBYI ","M7N7MBZI ", & + "M7N7MMGXI ","M7N7MMGYI ","M7N7MMGZI ","M7N7STAXI ","M7N7STAYI ","M7N7STAZI ","M7N7STVXI ", & + "M7N7STVYI ","M7N7STVZI ","M7N7VXI ","M7N7VYI ","M7N7VZI ","M7N8AXI ","M7N8AYI ", & + "M7N8AZI ","M7N8DYNP ","M7N8FAFXI ","M7N8FAFYI ","M7N8FAFZI ","M7N8FAGXI ","M7N8FAGYI ", & + "M7N8FAGZI ","M7N8FAMXI ","M7N8FAMYI ","M7N8FAMZI ","M7N8FBFXI ","M7N8FBFYI ","M7N8FBFZI ", & + "M7N8FBXI ","M7N8FBYI ","M7N8FBZI ","M7N8FDXI ","M7N8FDYI ","M7N8FDZI ","M7N8FIXI ", & + "M7N8FIYI ","M7N8FIZI ","M7N8FMGXI ","M7N8FMGYI ","M7N8FMGZI ","M7N8MAFXI ","M7N8MAFYI ", & + "M7N8MAFZI ","M7N8MAGXI ","M7N8MAGYI ","M7N8MAGZI ","M7N8MBFXI ","M7N8MBFYI ","M7N8MBFZI ", & + "M7N8MBXI ","M7N8MBYI ","M7N8MBZI ","M7N8MMGXI ","M7N8MMGYI ","M7N8MMGZI ","M7N8STAXI ", & + "M7N8STAYI ","M7N8STAZI ","M7N8STVXI ","M7N8STVYI ","M7N8STVZI ","M7N8VXI ","M7N8VYI ", & + "M7N8VZI ","M7N9AXI ","M7N9AYI ","M7N9AZI ","M7N9DYNP ","M7N9FAFXI ","M7N9FAFYI ", & + "M7N9FAFZI ","M7N9FAGXI ","M7N9FAGYI ","M7N9FAGZI ","M7N9FAMXI ","M7N9FAMYI ","M7N9FAMZI ", & + "M7N9FBFXI ","M7N9FBFYI ","M7N9FBFZI ","M7N9FBXI ","M7N9FBYI ","M7N9FBZI ","M7N9FDXI ", & + "M7N9FDYI ","M7N9FDZI ","M7N9FIXI ","M7N9FIYI ","M7N9FIZI ","M7N9FMGXI ","M7N9FMGYI ", & + "M7N9FMGZI ","M7N9MAFXI ","M7N9MAFYI ","M7N9MAFZI ","M7N9MAGXI ","M7N9MAGYI ","M7N9MAGZI ", & + "M7N9MBFXI ","M7N9MBFYI ","M7N9MBFZI ","M7N9MBXI ","M7N9MBYI ","M7N9MBZI ","M7N9MMGXI ", & + "M7N9MMGYI ","M7N9MMGZI ","M7N9STAXI ","M7N9STAYI ","M7N9STAZI ","M7N9STVXI ","M7N9STVYI ", & + "M7N9STVZI ","M7N9VXI ","M7N9VYI ","M7N9VZI ","M8N1AXI ","M8N1AYI ","M8N1AZI ", & + "M8N1DYNP ","M8N1FAFXI ","M8N1FAFYI ","M8N1FAFZI ","M8N1FAGXI ","M8N1FAGYI ","M8N1FAGZI ", & + "M8N1FAMXI ","M8N1FAMYI ","M8N1FAMZI ","M8N1FBFXI ","M8N1FBFYI ","M8N1FBFZI ","M8N1FBXI ", & + "M8N1FBYI ","M8N1FBZI ","M8N1FDXI ","M8N1FDYI ","M8N1FDZI ","M8N1FIXI ","M8N1FIYI ", & + "M8N1FIZI ","M8N1FMGXI ","M8N1FMGYI ","M8N1FMGZI ","M8N1MAFXI ","M8N1MAFYI ","M8N1MAFZI ", & + "M8N1MAGXI ","M8N1MAGYI ","M8N1MAGZI ","M8N1MBFXI ","M8N1MBFYI ","M8N1MBFZI ","M8N1MBXI ", & + "M8N1MBYI ","M8N1MBZI ","M8N1MMGXI ","M8N1MMGYI ","M8N1MMGZI ","M8N1STAXI ","M8N1STAYI ", & + "M8N1STAZI ","M8N1STVXI ","M8N1STVYI ","M8N1STVZI ","M8N1VXI ","M8N1VYI ","M8N1VZI ", & + "M8N2AXI ","M8N2AYI ","M8N2AZI ","M8N2DYNP ","M8N2FAFXI ","M8N2FAFYI ","M8N2FAFZI ", & + "M8N2FAGXI ","M8N2FAGYI ","M8N2FAGZI ","M8N2FAMXI ","M8N2FAMYI ","M8N2FAMZI ","M8N2FBFXI ", & + "M8N2FBFYI ","M8N2FBFZI ","M8N2FBXI ","M8N2FBYI ","M8N2FBZI ","M8N2FDXI ","M8N2FDYI ", & + "M8N2FDZI ","M8N2FIXI ","M8N2FIYI ","M8N2FIZI ","M8N2FMGXI ","M8N2FMGYI ","M8N2FMGZI ", & + "M8N2MAFXI ","M8N2MAFYI ","M8N2MAFZI ","M8N2MAGXI ","M8N2MAGYI ","M8N2MAGZI ","M8N2MBFXI ", & + "M8N2MBFYI ","M8N2MBFZI ","M8N2MBXI ","M8N2MBYI ","M8N2MBZI ","M8N2MMGXI ","M8N2MMGYI ", & + "M8N2MMGZI ","M8N2STAXI ","M8N2STAYI ","M8N2STAZI ","M8N2STVXI ","M8N2STVYI ","M8N2STVZI ", & + "M8N2VXI ","M8N2VYI ","M8N2VZI ","M8N3AXI ","M8N3AYI ","M8N3AZI ","M8N3DYNP ", & + "M8N3FAFXI ","M8N3FAFYI ","M8N3FAFZI ","M8N3FAGXI ","M8N3FAGYI ","M8N3FAGZI ","M8N3FAMXI ", & + "M8N3FAMYI ","M8N3FAMZI ","M8N3FBFXI ","M8N3FBFYI ","M8N3FBFZI ","M8N3FBXI ","M8N3FBYI ", & + "M8N3FBZI ","M8N3FDXI ","M8N3FDYI ","M8N3FDZI ","M8N3FIXI ","M8N3FIYI ","M8N3FIZI ", & + "M8N3FMGXI ","M8N3FMGYI ","M8N3FMGZI ","M8N3MAFXI ","M8N3MAFYI ","M8N3MAFZI ","M8N3MAGXI ", & + "M8N3MAGYI ","M8N3MAGZI ","M8N3MBFXI ","M8N3MBFYI ","M8N3MBFZI ","M8N3MBXI ","M8N3MBYI ", & + "M8N3MBZI ","M8N3MMGXI ","M8N3MMGYI ","M8N3MMGZI ","M8N3STAXI ","M8N3STAYI ","M8N3STAZI ", & + "M8N3STVXI ","M8N3STVYI ","M8N3STVZI ","M8N3VXI ","M8N3VYI ","M8N3VZI ","M8N4AXI ", & + "M8N4AYI ","M8N4AZI ","M8N4DYNP ","M8N4FAFXI ","M8N4FAFYI ","M8N4FAFZI ","M8N4FAGXI ", & + "M8N4FAGYI ","M8N4FAGZI ","M8N4FAMXI ","M8N4FAMYI ","M8N4FAMZI ","M8N4FBFXI ","M8N4FBFYI ", & + "M8N4FBFZI ","M8N4FBXI ","M8N4FBYI ","M8N4FBZI ","M8N4FDXI ","M8N4FDYI ","M8N4FDZI ", & + "M8N4FIXI ","M8N4FIYI ","M8N4FIZI ","M8N4FMGXI ","M8N4FMGYI ","M8N4FMGZI ","M8N4MAFXI ", & + "M8N4MAFYI ","M8N4MAFZI ","M8N4MAGXI ","M8N4MAGYI ","M8N4MAGZI ","M8N4MBFXI ","M8N4MBFYI ", & + "M8N4MBFZI ","M8N4MBXI ","M8N4MBYI ","M8N4MBZI ","M8N4MMGXI ","M8N4MMGYI ","M8N4MMGZI ", & + "M8N4STAXI ","M8N4STAYI ","M8N4STAZI ","M8N4STVXI ","M8N4STVYI ","M8N4STVZI ","M8N4VXI ", & + "M8N4VYI ","M8N4VZI ","M8N5AXI ","M8N5AYI ","M8N5AZI ","M8N5DYNP ","M8N5FAFXI ", & + "M8N5FAFYI ","M8N5FAFZI ","M8N5FAGXI ","M8N5FAGYI ","M8N5FAGZI ","M8N5FAMXI ","M8N5FAMYI ", & + "M8N5FAMZI ","M8N5FBFXI ","M8N5FBFYI ","M8N5FBFZI ","M8N5FBXI ","M8N5FBYI ","M8N5FBZI ", & + "M8N5FDXI ","M8N5FDYI ","M8N5FDZI ","M8N5FIXI ","M8N5FIYI ","M8N5FIZI ","M8N5FMGXI ", & + "M8N5FMGYI ","M8N5FMGZI ","M8N5MAFXI ","M8N5MAFYI ","M8N5MAFZI ","M8N5MAGXI ","M8N5MAGYI ", & + "M8N5MAGZI ","M8N5MBFXI ","M8N5MBFYI ","M8N5MBFZI ","M8N5MBXI ","M8N5MBYI ","M8N5MBZI ", & + "M8N5MMGXI ","M8N5MMGYI ","M8N5MMGZI ","M8N5STAXI ","M8N5STAYI ","M8N5STAZI ","M8N5STVXI ", & + "M8N5STVYI ","M8N5STVZI ","M8N5VXI ","M8N5VYI ","M8N5VZI ","M8N6AXI ","M8N6AYI ", & + "M8N6AZI ","M8N6DYNP ","M8N6FAFXI ","M8N6FAFYI ","M8N6FAFZI ","M8N6FAGXI ","M8N6FAGYI ", & + "M8N6FAGZI ","M8N6FAMXI ","M8N6FAMYI ","M8N6FAMZI ","M8N6FBFXI ","M8N6FBFYI ","M8N6FBFZI ", & + "M8N6FBXI ","M8N6FBYI ","M8N6FBZI ","M8N6FDXI ","M8N6FDYI ","M8N6FDZI ","M8N6FIXI ", & + "M8N6FIYI ","M8N6FIZI ","M8N6FMGXI ","M8N6FMGYI ","M8N6FMGZI ","M8N6MAFXI ","M8N6MAFYI ", & + "M8N6MAFZI ","M8N6MAGXI ","M8N6MAGYI ","M8N6MAGZI ","M8N6MBFXI ","M8N6MBFYI ","M8N6MBFZI ", & + "M8N6MBXI ","M8N6MBYI ","M8N6MBZI ","M8N6MMGXI ","M8N6MMGYI ","M8N6MMGZI ","M8N6STAXI ", & + "M8N6STAYI ","M8N6STAZI ","M8N6STVXI ","M8N6STVYI ","M8N6STVZI ","M8N6VXI ","M8N6VYI ", & + "M8N6VZI ","M8N7AXI ","M8N7AYI ","M8N7AZI ","M8N7DYNP ","M8N7FAFXI ","M8N7FAFYI ", & + "M8N7FAFZI ","M8N7FAGXI ","M8N7FAGYI ","M8N7FAGZI ","M8N7FAMXI ","M8N7FAMYI ","M8N7FAMZI ", & + "M8N7FBFXI ","M8N7FBFYI ","M8N7FBFZI ","M8N7FBXI ","M8N7FBYI ","M8N7FBZI ","M8N7FDXI ", & + "M8N7FDYI ","M8N7FDZI ","M8N7FIXI ","M8N7FIYI ","M8N7FIZI ","M8N7FMGXI ","M8N7FMGYI ", & + "M8N7FMGZI ","M8N7MAFXI ","M8N7MAFYI ","M8N7MAFZI ","M8N7MAGXI ","M8N7MAGYI ","M8N7MAGZI ", & + "M8N7MBFXI ","M8N7MBFYI ","M8N7MBFZI ","M8N7MBXI ","M8N7MBYI ","M8N7MBZI ","M8N7MMGXI ", & + "M8N7MMGYI ","M8N7MMGZI ","M8N7STAXI ","M8N7STAYI ","M8N7STAZI ","M8N7STVXI ","M8N7STVYI ", & + "M8N7STVZI ","M8N7VXI ","M8N7VYI ","M8N7VZI ","M8N8AXI ","M8N8AYI ","M8N8AZI ", & + "M8N8DYNP ","M8N8FAFXI ","M8N8FAFYI ","M8N8FAFZI ","M8N8FAGXI ","M8N8FAGYI ","M8N8FAGZI ", & + "M8N8FAMXI ","M8N8FAMYI ","M8N8FAMZI ","M8N8FBFXI ","M8N8FBFYI ","M8N8FBFZI ","M8N8FBXI ", & + "M8N8FBYI ","M8N8FBZI ","M8N8FDXI ","M8N8FDYI ","M8N8FDZI ","M8N8FIXI ","M8N8FIYI ", & + "M8N8FIZI ","M8N8FMGXI ","M8N8FMGYI ","M8N8FMGZI ","M8N8MAFXI ","M8N8MAFYI ","M8N8MAFZI ", & + "M8N8MAGXI ","M8N8MAGYI ","M8N8MAGZI ","M8N8MBFXI ","M8N8MBFYI ","M8N8MBFZI ","M8N8MBXI ", & + "M8N8MBYI ","M8N8MBZI ","M8N8MMGXI ","M8N8MMGYI ","M8N8MMGZI ","M8N8STAXI ","M8N8STAYI ", & + "M8N8STAZI ","M8N8STVXI ","M8N8STVYI ","M8N8STVZI ","M8N8VXI ","M8N8VYI ","M8N8VZI ", & + "M8N9AXI ","M8N9AYI ","M8N9AZI ","M8N9DYNP ","M8N9FAFXI ","M8N9FAFYI ","M8N9FAFZI ", & + "M8N9FAGXI ","M8N9FAGYI ","M8N9FAGZI ","M8N9FAMXI ","M8N9FAMYI ","M8N9FAMZI ","M8N9FBFXI ", & + "M8N9FBFYI ","M8N9FBFZI ","M8N9FBXI ","M8N9FBYI ","M8N9FBZI ","M8N9FDXI ","M8N9FDYI ", & + "M8N9FDZI ","M8N9FIXI ","M8N9FIYI ","M8N9FIZI ","M8N9FMGXI ","M8N9FMGYI ","M8N9FMGZI ", & + "M8N9MAFXI ","M8N9MAFYI ","M8N9MAFZI ","M8N9MAGXI ","M8N9MAGYI ","M8N9MAGZI ","M8N9MBFXI ", & + "M8N9MBFYI ","M8N9MBFZI ","M8N9MBXI ","M8N9MBYI ","M8N9MBZI ","M8N9MMGXI ","M8N9MMGYI ", & + "M8N9MMGZI ","M8N9STAXI ","M8N9STAYI ","M8N9STAZI ","M8N9STVXI ","M8N9STVYI ","M8N9STVZI ", & + "M8N9VXI ","M8N9VYI ","M8N9VZI ","M9N1AXI ","M9N1AYI ","M9N1AZI ","M9N1DYNP ", & + "M9N1FAFXI ","M9N1FAFYI ","M9N1FAFZI ","M9N1FAGXI ","M9N1FAGYI ","M9N1FAGZI ","M9N1FAMXI ", & + "M9N1FAMYI ","M9N1FAMZI ","M9N1FBFXI ","M9N1FBFYI ","M9N1FBFZI ","M9N1FBXI ","M9N1FBYI ", & + "M9N1FBZI ","M9N1FDXI ","M9N1FDYI ","M9N1FDZI ","M9N1FIXI ","M9N1FIYI ","M9N1FIZI ", & + "M9N1FMGXI ","M9N1FMGYI ","M9N1FMGZI ","M9N1MAFXI ","M9N1MAFYI ","M9N1MAFZI ","M9N1MAGXI ", & + "M9N1MAGYI ","M9N1MAGZI ","M9N1MBFXI ","M9N1MBFYI ","M9N1MBFZI ","M9N1MBXI ","M9N1MBYI ", & + "M9N1MBZI ","M9N1MMGXI ","M9N1MMGYI ","M9N1MMGZI ","M9N1STAXI ","M9N1STAYI ","M9N1STAZI ", & + "M9N1STVXI ","M9N1STVYI ","M9N1STVZI ","M9N1VXI ","M9N1VYI ","M9N1VZI ","M9N2AXI ", & + "M9N2AYI ","M9N2AZI ","M9N2DYNP ","M9N2FAFXI ","M9N2FAFYI ","M9N2FAFZI ","M9N2FAGXI ", & + "M9N2FAGYI ","M9N2FAGZI ","M9N2FAMXI ","M9N2FAMYI ","M9N2FAMZI ","M9N2FBFXI ","M9N2FBFYI ", & + "M9N2FBFZI ","M9N2FBXI ","M9N2FBYI ","M9N2FBZI ","M9N2FDXI ","M9N2FDYI ","M9N2FDZI ", & + "M9N2FIXI ","M9N2FIYI ","M9N2FIZI ","M9N2FMGXI ","M9N2FMGYI ","M9N2FMGZI ","M9N2MAFXI ", & + "M9N2MAFYI ","M9N2MAFZI ","M9N2MAGXI ","M9N2MAGYI ","M9N2MAGZI ","M9N2MBFXI ","M9N2MBFYI ", & + "M9N2MBFZI ","M9N2MBXI ","M9N2MBYI ","M9N2MBZI ","M9N2MMGXI ","M9N2MMGYI ","M9N2MMGZI ", & + "M9N2STAXI ","M9N2STAYI ","M9N2STAZI ","M9N2STVXI ","M9N2STVYI ","M9N2STVZI ","M9N2VXI ", & + "M9N2VYI ","M9N2VZI ","M9N3AXI ","M9N3AYI ","M9N3AZI ","M9N3DYNP ","M9N3FAFXI ", & + "M9N3FAFYI ","M9N3FAFZI ","M9N3FAGXI ","M9N3FAGYI ","M9N3FAGZI ","M9N3FAMXI ","M9N3FAMYI ", & + "M9N3FAMZI ","M9N3FBFXI ","M9N3FBFYI ","M9N3FBFZI ","M9N3FBXI ","M9N3FBYI ","M9N3FBZI ", & + "M9N3FDXI ","M9N3FDYI ","M9N3FDZI ","M9N3FIXI ","M9N3FIYI ","M9N3FIZI ","M9N3FMGXI ", & + "M9N3FMGYI ","M9N3FMGZI ","M9N3MAFXI ","M9N3MAFYI ","M9N3MAFZI ","M9N3MAGXI ","M9N3MAGYI ", & + "M9N3MAGZI ","M9N3MBFXI ","M9N3MBFYI ","M9N3MBFZI ","M9N3MBXI ","M9N3MBYI ","M9N3MBZI ", & + "M9N3MMGXI ","M9N3MMGYI ","M9N3MMGZI ","M9N3STAXI ","M9N3STAYI ","M9N3STAZI ","M9N3STVXI ", & + "M9N3STVYI ","M9N3STVZI ","M9N3VXI ","M9N3VYI ","M9N3VZI ","M9N4AXI ","M9N4AYI ", & + "M9N4AZI ","M9N4DYNP ","M9N4FAFXI ","M9N4FAFYI ","M9N4FAFZI ","M9N4FAGXI ","M9N4FAGYI ", & + "M9N4FAGZI ","M9N4FAMXI ","M9N4FAMYI ","M9N4FAMZI ","M9N4FBFXI ","M9N4FBFYI ","M9N4FBFZI ", & + "M9N4FBXI ","M9N4FBYI ","M9N4FBZI ","M9N4FDXI ","M9N4FDYI ","M9N4FDZI ","M9N4FIXI ", & + "M9N4FIYI ","M9N4FIZI ","M9N4FMGXI ","M9N4FMGYI ","M9N4FMGZI ","M9N4MAFXI ","M9N4MAFYI ", & + "M9N4MAFZI ","M9N4MAGXI ","M9N4MAGYI ","M9N4MAGZI ","M9N4MBFXI ","M9N4MBFYI ","M9N4MBFZI ", & + "M9N4MBXI ","M9N4MBYI ","M9N4MBZI ","M9N4MMGXI ","M9N4MMGYI ","M9N4MMGZI ","M9N4STAXI ", & + "M9N4STAYI ","M9N4STAZI ","M9N4STVXI ","M9N4STVYI ","M9N4STVZI ","M9N4VXI ","M9N4VYI ", & + "M9N4VZI ","M9N5AXI ","M9N5AYI ","M9N5AZI ","M9N5DYNP ","M9N5FAFXI ","M9N5FAFYI ", & + "M9N5FAFZI ","M9N5FAGXI ","M9N5FAGYI ","M9N5FAGZI ","M9N5FAMXI ","M9N5FAMYI ","M9N5FAMZI ", & + "M9N5FBFXI ","M9N5FBFYI ","M9N5FBFZI ","M9N5FBXI ","M9N5FBYI ","M9N5FBZI ","M9N5FDXI ", & + "M9N5FDYI ","M9N5FDZI ","M9N5FIXI ","M9N5FIYI ","M9N5FIZI ","M9N5FMGXI ","M9N5FMGYI ", & + "M9N5FMGZI ","M9N5MAFXI ","M9N5MAFYI ","M9N5MAFZI ","M9N5MAGXI ","M9N5MAGYI ","M9N5MAGZI ", & + "M9N5MBFXI ","M9N5MBFYI ","M9N5MBFZI ","M9N5MBXI ","M9N5MBYI ","M9N5MBZI ","M9N5MMGXI ", & + "M9N5MMGYI ","M9N5MMGZI ","M9N5STAXI ","M9N5STAYI ","M9N5STAZI ","M9N5STVXI ","M9N5STVYI ", & + "M9N5STVZI ","M9N5VXI ","M9N5VYI ","M9N5VZI ","M9N6AXI ","M9N6AYI ","M9N6AZI ", & + "M9N6DYNP ","M9N6FAFXI ","M9N6FAFYI ","M9N6FAFZI ","M9N6FAGXI ","M9N6FAGYI ","M9N6FAGZI ", & + "M9N6FAMXI ","M9N6FAMYI ","M9N6FAMZI ","M9N6FBFXI ","M9N6FBFYI ","M9N6FBFZI ","M9N6FBXI ", & + "M9N6FBYI ","M9N6FBZI ","M9N6FDXI ","M9N6FDYI ","M9N6FDZI ","M9N6FIXI ","M9N6FIYI ", & + "M9N6FIZI ","M9N6FMGXI ","M9N6FMGYI ","M9N6FMGZI ","M9N6MAFXI ","M9N6MAFYI ","M9N6MAFZI ", & + "M9N6MAGXI ","M9N6MAGYI ","M9N6MAGZI ","M9N6MBFXI ","M9N6MBFYI ","M9N6MBFZI ","M9N6MBXI ", & + "M9N6MBYI ","M9N6MBZI ","M9N6MMGXI ","M9N6MMGYI ","M9N6MMGZI ","M9N6STAXI ","M9N6STAYI ", & + "M9N6STAZI ","M9N6STVXI ","M9N6STVYI ","M9N6STVZI ","M9N6VXI ","M9N6VYI ","M9N6VZI ", & + "M9N7AXI ","M9N7AYI ","M9N7AZI ","M9N7DYNP ","M9N7FAFXI ","M9N7FAFYI ","M9N7FAFZI ", & + "M9N7FAGXI ","M9N7FAGYI ","M9N7FAGZI ","M9N7FAMXI ","M9N7FAMYI ","M9N7FAMZI ","M9N7FBFXI ", & + "M9N7FBFYI ","M9N7FBFZI ","M9N7FBXI ","M9N7FBYI ","M9N7FBZI ","M9N7FDXI ","M9N7FDYI ", & + "M9N7FDZI ","M9N7FIXI ","M9N7FIYI ","M9N7FIZI ","M9N7FMGXI ","M9N7FMGYI ","M9N7FMGZI ", & + "M9N7MAFXI ","M9N7MAFYI ","M9N7MAFZI ","M9N7MAGXI ","M9N7MAGYI ","M9N7MAGZI ","M9N7MBFXI ", & + "M9N7MBFYI ","M9N7MBFZI ","M9N7MBXI ","M9N7MBYI ","M9N7MBZI ","M9N7MMGXI ","M9N7MMGYI ", & + "M9N7MMGZI ","M9N7STAXI ","M9N7STAYI ","M9N7STAZI ","M9N7STVXI ","M9N7STVYI ","M9N7STVZI ", & + "M9N7VXI ","M9N7VYI ","M9N7VZI ","M9N8AXI ","M9N8AYI ","M9N8AZI ","M9N8DYNP ", & + "M9N8FAFXI ","M9N8FAFYI ","M9N8FAFZI ","M9N8FAGXI ","M9N8FAGYI ","M9N8FAGZI ","M9N8FAMXI ", & + "M9N8FAMYI ","M9N8FAMZI ","M9N8FBFXI ","M9N8FBFYI ","M9N8FBFZI ","M9N8FBXI ","M9N8FBYI ", & + "M9N8FBZI ","M9N8FDXI ","M9N8FDYI ","M9N8FDZI ","M9N8FIXI ","M9N8FIYI ","M9N8FIZI ", & + "M9N8FMGXI ","M9N8FMGYI ","M9N8FMGZI ","M9N8MAFXI ","M9N8MAFYI ","M9N8MAFZI ","M9N8MAGXI ", & + "M9N8MAGYI ","M9N8MAGZI ","M9N8MBFXI ","M9N8MBFYI ","M9N8MBFZI ","M9N8MBXI ","M9N8MBYI ", & + "M9N8MBZI ","M9N8MMGXI ","M9N8MMGYI ","M9N8MMGZI ","M9N8STAXI ","M9N8STAYI ","M9N8STAZI ", & + "M9N8STVXI ","M9N8STVYI ","M9N8STVZI ","M9N8VXI ","M9N8VYI ","M9N8VZI ","M9N9AXI ", & + "M9N9AYI ","M9N9AZI ","M9N9DYNP ","M9N9FAFXI ","M9N9FAFYI ","M9N9FAFZI ","M9N9FAGXI ", & + "M9N9FAGYI ","M9N9FAGZI ","M9N9FAMXI ","M9N9FAMYI ","M9N9FAMZI ","M9N9FBFXI ","M9N9FBFYI ", & + "M9N9FBFZI ","M9N9FBXI ","M9N9FBYI ","M9N9FBZI ","M9N9FDXI ","M9N9FDYI ","M9N9FDZI ", & + "M9N9FIXI ","M9N9FIYI ","M9N9FIZI ","M9N9FMGXI ","M9N9FMGYI ","M9N9FMGZI ","M9N9MAFXI ", & + "M9N9MAFYI ","M9N9MAFZI ","M9N9MAGXI ","M9N9MAGYI ","M9N9MAGZI ","M9N9MBFXI ","M9N9MBFYI ", & + "M9N9MBFZI ","M9N9MBXI ","M9N9MBYI ","M9N9MBZI ","M9N9MMGXI ","M9N9MMGYI ","M9N9MMGZI ", & + "M9N9STAXI ","M9N9STAYI ","M9N9STAZI ","M9N9STVXI ","M9N9STVYI ","M9N9STVZI ","M9N9VXI ", & + "M9N9VYI ","M9N9VZI "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(4626) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + ValidParamAry1, ValidParamAry2, ValidParamAry3/) + + INTEGER(IntKi), PARAMETER :: ParamIndxAry1(1542) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + J1Axi , J1Ayi , J1Azi , J1DynP , J1FAGxi , J1FAGyi , J1FAGzi , & + J1FAMxi , J1FAMyi , J1FAMzi , J1FBFxi , J1FBFyi , J1FBFzi , J1FBxi , & + J1FByi , J1FBzi , J1FDxi , J1FDyi , J1FDzi , J1FIxi , J1FIyi , & + J1FIzi , J1FMGxi , J1FMGyi , J1FMGzi , J1MAGxi , J1MAGyi , J1MAGzi , & + J1MBFxi , J1MBFyi , J1MBFzi , J1MBxi , J1MByi , J1MBzi , J1STAxi , & + J1STAyi , J1STAzi , J1STVxi , J1STVyi , J1STVzi , J1Vxi , J1Vyi , & + J1Vzi , J1WaveElev , J1WaveElv1 , J1WaveElv2 , J2Axi , J2Ayi , J2Azi , & + J2DynP , J2FAGxi , J2FAGyi , J2FAGzi , J2FAMxi , J2FAMyi , J2FAMzi , & + J2FBFxi , J2FBFyi , J2FBFzi , J2FBxi , J2FByi , J2FBzi , J2FDxi , & + J2FDyi , J2FDzi , J2FIxi , J2FIyi , J2FIzi , J2FMGxi , J2FMGyi , & + J2FMGzi , J2MAGxi , J2MAGyi , J2MAGzi , J2MBFxi , J2MBFyi , J2MBFzi , & + J2MBxi , J2MByi , J2MBzi , J2STAxi , J2STAyi , J2STAzi , J2STVxi , & + J2STVyi , J2STVzi , J2Vxi , J2Vyi , J2Vzi , J2WaveElev , J2WaveElv1 , & + J2WaveElv2 , J3Axi , J3Ayi , J3Azi , J3DynP , J3FAGxi , J3FAGyi , & + J3FAGzi , J3FAMxi , J3FAMyi , J3FAMzi , J3FBFxi , J3FBFyi , J3FBFzi , & + J3FBxi , J3FByi , J3FBzi , J3FDxi , J3FDyi , J3FDzi , J3FIxi , & + J3FIyi , J3FIzi , J3FMGxi , J3FMGyi , J3FMGzi , J3MAGxi , J3MAGyi , & + J3MAGzi , J3MBFxi , J3MBFyi , J3MBFzi , J3MBxi , J3MByi , J3MBzi , & + J3STAxi , J3STAyi , J3STAzi , J3STVxi , J3STVyi , J3STVzi , J3Vxi , & + J3Vyi , J3Vzi , J3WaveElev , J3WaveElv1 , J3WaveElv2 , J4Axi , J4Ayi , & + J4Azi , J4DynP , J4FAGxi , J4FAGyi , J4FAGzi , J4FAMxi , J4FAMyi , & + J4FAMzi , J4FBFxi , J4FBFyi , J4FBFzi , J4FBxi , J4FByi , J4FBzi , & + J4FDxi , J4FDyi , J4FDzi , J4FIxi , J4FIyi , J4FIzi , J4FMGxi , & + J4FMGyi , J4FMGzi , J4MAGxi , J4MAGyi , J4MAGzi , J4MBFxi , J4MBFyi , & + J4MBFzi , J4MBxi , J4MByi , J4MBzi , J4STAxi , J4STAyi , J4STAzi , & + J4STVxi , J4STVyi , J4STVzi , J4Vxi , J4Vyi , J4Vzi , J4WaveElev , & + J4WaveElv1 , J4WaveElv2 , J5Axi , J5Ayi , J5Azi , J5DynP , J5FAGxi , & + J5FAGyi , J5FAGzi , J5FAMxi , J5FAMyi , J5FAMzi , J5FBFxi , J5FBFyi , & + J5FBFzi , J5FBxi , J5FByi , J5FBzi , J5FDxi , J5FDyi , J5FDzi , & + J5FIxi , J5FIyi , J5FIzi , J5FMGxi , J5FMGyi , J5FMGzi , J5MAGxi , & + J5MAGyi , J5MAGzi , J5MBFxi , J5MBFyi , J5MBFzi , J5MBxi , J5MByi , & + J5MBzi , J5STAxi , J5STAyi , J5STAzi , J5STVxi , J5STVyi , J5STVzi , & + J5Vxi , J5Vyi , J5Vzi , J5WaveElev , J5WaveElv1 , J5WaveElv2 , J6Axi , & + J6Ayi , J6Azi , J6DynP , J6FAGxi , J6FAGyi , J6FAGzi , J6FAMxi , & + J6FAMyi , J6FAMzi , J6FBFxi , J6FBFyi , J6FBFzi , J6FBxi , J6FByi , & + J6FBzi , J6FDxi , J6FDyi , J6FDzi , J6FIxi , J6FIyi , J6FIzi , & + J6FMGxi , J6FMGyi , J6FMGzi , J6MAGxi , J6MAGyi , J6MAGzi , J6MBFxi , & + J6MBFyi , J6MBFzi , J6MBxi , J6MByi , J6MBzi , J6STAxi , J6STAyi , & + J6STAzi , J6STVxi , J6STVyi , J6STVzi , J6Vxi , J6Vyi , J6Vzi , & + J6WaveElev , J6WaveElv1 , J6WaveElv2 , J7Axi , J7Ayi , J7Azi , J7DynP , & + J7FAGxi , J7FAGyi , J7FAGzi , J7FAMxi , J7FAMyi , J7FAMzi , J7FBFxi , & + J7FBFyi , J7FBFzi , J7FBxi , J7FByi , J7FBzi , J7FDxi , J7FDyi , & + J7FDzi , J7FIxi , J7FIyi , J7FIzi , J7FMGxi , J7FMGyi , J7FMGzi , & + J7MAGxi , J7MAGyi , J7MAGzi , J7MBFxi , J7MBFyi , J7MBFzi , J7MBxi , & + J7MByi , J7MBzi , J7STAxi , J7STAyi , J7STAzi , J7STVxi , J7STVyi , & + J7STVzi , J7Vxi , J7Vyi , J7Vzi , J7WaveElev , J7WaveElv1 , J7WaveElv2 , & + J8Axi , J8Ayi , J8Azi , J8DynP , J8FAGxi , J8FAGyi , J8FAGzi , & + J8FAMxi , J8FAMyi , J8FAMzi , J8FBFxi , J8FBFyi , J8FBFzi , J8FBxi , & + J8FByi , J8FBzi , J8FDxi , J8FDyi , J8FDzi , J8FIxi , J8FIyi , & + J8FIzi , J8FMGxi , J8FMGyi , J8FMGzi , J8MAGxi , J8MAGyi , J8MAGzi , & + J8MBFxi , J8MBFyi , J8MBFzi , J8MBxi , J8MByi , J8MBzi , J8STAxi , & + J8STAyi , J8STAzi , J8STVxi , J8STVyi , J8STVzi , J8Vxi , J8Vyi , & + J8Vzi , J8WaveElev , J8WaveElv1 , J8WaveElv2 , J9Axi , J9Ayi , J9Azi , & + J9DynP , J9FAGxi , J9FAGyi , J9FAGzi , J9FAMxi , J9FAMyi , J9FAMzi , & + J9FBFxi , J9FBFyi , J9FBFzi , J9FBxi , J9FByi , J9FBzi , J9FDxi , & + J9FDyi , J9FDzi , J9FIxi , J9FIyi , J9FIzi , J9FMGxi , J9FMGyi , & + J9FMGzi , J9MAGxi , J9MAGyi , J9MAGzi , J9MBFxi , J9MBFyi , J9MBFzi , & + J9MBxi , J9MByi , J9MBzi , J9STAxi , J9STAyi , J9STAzi , J9STVxi , & + J9STVyi , J9STVzi , J9Vxi , J9Vyi , J9Vzi , J9WaveElev , J9WaveElv1 , & + J9WaveElv2 , M1N1Axi , M1N1Ayi , M1N1Azi , M1N1DynP , M1N1FAFxi , M1N1FAFyi , & + M1N1FAFzi , M1N1FAGxi , M1N1FAGyi , M1N1FAGzi , M1N1FAMxi , M1N1FAMyi , M1N1FAMzi , & + M1N1FBFxi , M1N1FBFyi , M1N1FBFzi , M1N1FBxi , M1N1FByi , M1N1FBzi , M1N1FDxi , & + M1N1FDyi , M1N1FDzi , M1N1FIxi , M1N1FIyi , M1N1FIzi , M1N1FMGxi , M1N1FMGyi , & + M1N1FMGzi , M1N1MAFxi , M1N1MAFyi , M1N1MAFzi , M1N1MAGxi , M1N1MAGyi , M1N1MAGzi , & + M1N1MBFxi , M1N1MBFyi , M1N1MBFzi , M1N1MBxi , M1N1MByi , M1N1MBzi , M1N1MMGxi , & + M1N1MMGyi , M1N1MMGzi , M1N1STAxi , M1N1STAyi , M1N1STAzi , M1N1STVxi , M1N1STVyi , & + M1N1STVzi , M1N1Vxi , M1N1Vyi , M1N1Vzi , M1N2Axi , M1N2Ayi , M1N2Azi , & + M1N2DynP , M1N2FAFxi , M1N2FAFyi , M1N2FAFzi , M1N2FAGxi , M1N2FAGyi , M1N2FAGzi , & + M1N2FAMxi , M1N2FAMyi , M1N2FAMzi , M1N2FBFxi , M1N2FBFyi , M1N2FBFzi , M1N2FBxi , & + M1N2FByi , M1N2FBzi , M1N2FDxi , M1N2FDyi , M1N2FDzi , M1N2FIxi , M1N2FIyi , & + M1N2FIzi , M1N2FMGxi , M1N2FMGyi , M1N2FMGzi , M1N2MAFxi , M1N2MAFyi , M1N2MAFzi , & + M1N2MAGxi , M1N2MAGyi , M1N2MAGzi , M1N2MBFxi , M1N2MBFyi , M1N2MBFzi , M1N2MBxi , & + M1N2MByi , M1N2MBzi , M1N2MMGxi , M1N2MMGyi , M1N2MMGzi , M1N2STAxi , M1N2STAyi , & + M1N2STAzi , M1N2STVxi , M1N2STVyi , M1N2STVzi , M1N2Vxi , M1N2Vyi , M1N2Vzi , & + M1N3Axi , M1N3Ayi , M1N3Azi , M1N3DynP , M1N3FAFxi , M1N3FAFyi , M1N3FAFzi , & + M1N3FAGxi , M1N3FAGyi , M1N3FAGzi , M1N3FAMxi , M1N3FAMyi , M1N3FAMzi , M1N3FBFxi , & + M1N3FBFyi , M1N3FBFzi , M1N3FBxi , M1N3FByi , M1N3FBzi , M1N3FDxi , M1N3FDyi , & + M1N3FDzi , M1N3FIxi , M1N3FIyi , M1N3FIzi , M1N3FMGxi , M1N3FMGyi , M1N3FMGzi , & + M1N3MAFxi , M1N3MAFyi , M1N3MAFzi , M1N3MAGxi , M1N3MAGyi , M1N3MAGzi , M1N3MBFxi , & + M1N3MBFyi , M1N3MBFzi , M1N3MBxi , M1N3MByi , M1N3MBzi , M1N3MMGxi , M1N3MMGyi , & + M1N3MMGzi , M1N3STAxi , M1N3STAyi , M1N3STAzi , M1N3STVxi , M1N3STVyi , M1N3STVzi , & + M1N3Vxi , M1N3Vyi , M1N3Vzi , M1N4Axi , M1N4Ayi , M1N4Azi , M1N4DynP , & + M1N4FAFxi , M1N4FAFyi , M1N4FAFzi , M1N4FAGxi , M1N4FAGyi , M1N4FAGzi , M1N4FAMxi , & + M1N4FAMyi , M1N4FAMzi , M1N4FBFxi , M1N4FBFyi , M1N4FBFzi , M1N4FBxi , M1N4FByi , & + M1N4FBzi , M1N4FDxi , M1N4FDyi , M1N4FDzi , M1N4FIxi , M1N4FIyi , M1N4FIzi , & + M1N4FMGxi , M1N4FMGyi , M1N4FMGzi , M1N4MAFxi , M1N4MAFyi , M1N4MAFzi , M1N4MAGxi , & + M1N4MAGyi , M1N4MAGzi , M1N4MBFxi , M1N4MBFyi , M1N4MBFzi , M1N4MBxi , M1N4MByi , & + M1N4MBzi , M1N4MMGxi , M1N4MMGyi , M1N4MMGzi , M1N4STAxi , M1N4STAyi , M1N4STAzi , & + M1N4STVxi , M1N4STVyi , M1N4STVzi , M1N4Vxi , M1N4Vyi , M1N4Vzi , M1N5Axi , & + M1N5Ayi , M1N5Azi , M1N5DynP , M1N5FAFxi , M1N5FAFyi , M1N5FAFzi , M1N5FAGxi , & + M1N5FAGyi , M1N5FAGzi , M1N5FAMxi , M1N5FAMyi , M1N5FAMzi , M1N5FBFxi , M1N5FBFyi , & + M1N5FBFzi , M1N5FBxi , M1N5FByi , M1N5FBzi , M1N5FDxi , M1N5FDyi , M1N5FDzi , & + M1N5FIxi , M1N5FIyi , M1N5FIzi , M1N5FMGxi , M1N5FMGyi , M1N5FMGzi , M1N5MAFxi , & + M1N5MAFyi , M1N5MAFzi , M1N5MAGxi , M1N5MAGyi , M1N5MAGzi , M1N5MBFxi , M1N5MBFyi , & + M1N5MBFzi , M1N5MBxi , M1N5MByi , M1N5MBzi , M1N5MMGxi , M1N5MMGyi , M1N5MMGzi , & + M1N5STAxi , M1N5STAyi , M1N5STAzi , M1N5STVxi , M1N5STVyi , M1N5STVzi , M1N5Vxi , & + M1N5Vyi , M1N5Vzi , M1N6Axi , M1N6Ayi , M1N6Azi , M1N6DynP , M1N6FAFxi , & + M1N6FAFyi , M1N6FAFzi , M1N6FAGxi , M1N6FAGyi , M1N6FAGzi , M1N6FAMxi , M1N6FAMyi , & + M1N6FAMzi , M1N6FBFxi , M1N6FBFyi , M1N6FBFzi , M1N6FBxi , M1N6FByi , M1N6FBzi , & + M1N6FDxi , M1N6FDyi , M1N6FDzi , M1N6FIxi , M1N6FIyi , M1N6FIzi , M1N6FMGxi , & + M1N6FMGyi , M1N6FMGzi , M1N6MAFxi , M1N6MAFyi , M1N6MAFzi , M1N6MAGxi , M1N6MAGyi , & + M1N6MAGzi , M1N6MBFxi , M1N6MBFyi , M1N6MBFzi , M1N6MBxi , M1N6MByi , M1N6MBzi , & + M1N6MMGxi , M1N6MMGyi , M1N6MMGzi , M1N6STAxi , M1N6STAyi , M1N6STAzi , M1N6STVxi , & + M1N6STVyi , M1N6STVzi , M1N6Vxi , M1N6Vyi , M1N6Vzi , M1N7Axi , M1N7Ayi , & + M1N7Azi , M1N7DynP , M1N7FAFxi , M1N7FAFyi , M1N7FAFzi , M1N7FAGxi , M1N7FAGyi , & + M1N7FAGzi , M1N7FAMxi , M1N7FAMyi , M1N7FAMzi , M1N7FBFxi , M1N7FBFyi , M1N7FBFzi , & + M1N7FBxi , M1N7FByi , M1N7FBzi , M1N7FDxi , M1N7FDyi , M1N7FDzi , M1N7FIxi , & + M1N7FIyi , M1N7FIzi , M1N7FMGxi , M1N7FMGyi , M1N7FMGzi , M1N7MAFxi , M1N7MAFyi , & + M1N7MAFzi , M1N7MAGxi , M1N7MAGyi , M1N7MAGzi , M1N7MBFxi , M1N7MBFyi , M1N7MBFzi , & + M1N7MBxi , M1N7MByi , M1N7MBzi , M1N7MMGxi , M1N7MMGyi , M1N7MMGzi , M1N7STAxi , & + M1N7STAyi , M1N7STAzi , M1N7STVxi , M1N7STVyi , M1N7STVzi , M1N7Vxi , M1N7Vyi , & + M1N7Vzi , M1N8Axi , M1N8Ayi , M1N8Azi , M1N8DynP , M1N8FAFxi , M1N8FAFyi , & + M1N8FAFzi , M1N8FAGxi , M1N8FAGyi , M1N8FAGzi , M1N8FAMxi , M1N8FAMyi , M1N8FAMzi , & + M1N8FBFxi , M1N8FBFyi , M1N8FBFzi , M1N8FBxi , M1N8FByi , M1N8FBzi , M1N8FDxi , & + M1N8FDyi , M1N8FDzi , M1N8FIxi , M1N8FIyi , M1N8FIzi , M1N8FMGxi , M1N8FMGyi , & + M1N8FMGzi , M1N8MAFxi , M1N8MAFyi , M1N8MAFzi , M1N8MAGxi , M1N8MAGyi , M1N8MAGzi , & + M1N8MBFxi , M1N8MBFyi , M1N8MBFzi , M1N8MBxi , M1N8MByi , M1N8MBzi , M1N8MMGxi , & + M1N8MMGyi , M1N8MMGzi , M1N8STAxi , M1N8STAyi , M1N8STAzi , M1N8STVxi , M1N8STVyi , & + M1N8STVzi , M1N8Vxi , M1N8Vyi , M1N8Vzi , M1N9Axi , M1N9Ayi , M1N9Azi , & + M1N9DynP , M1N9FAFxi , M1N9FAFyi , M1N9FAFzi , M1N9FAGxi , M1N9FAGyi , M1N9FAGzi , & + M1N9FAMxi , M1N9FAMyi , M1N9FAMzi , M1N9FBFxi , M1N9FBFyi , M1N9FBFzi , M1N9FBxi , & + M1N9FByi , M1N9FBzi , M1N9FDxi , M1N9FDyi , M1N9FDzi , M1N9FIxi , M1N9FIyi , & + M1N9FIzi , M1N9FMGxi , M1N9FMGyi , M1N9FMGzi , M1N9MAFxi , M1N9MAFyi , M1N9MAFzi , & + M1N9MAGxi , M1N9MAGyi , M1N9MAGzi , M1N9MBFxi , M1N9MBFyi , M1N9MBFzi , M1N9MBxi , & + M1N9MByi , M1N9MBzi , M1N9MMGxi , M1N9MMGyi , M1N9MMGzi , M1N9STAxi , M1N9STAyi , & + M1N9STAzi , M1N9STVxi , M1N9STVyi , M1N9STVzi , M1N9Vxi , M1N9Vyi , M1N9Vzi , & + M2N1Axi , M2N1Ayi , M2N1Azi , M2N1DynP , M2N1FAFxi , M2N1FAFyi , M2N1FAFzi , & + M2N1FAGxi , M2N1FAGyi , M2N1FAGzi , M2N1FAMxi , M2N1FAMyi , M2N1FAMzi , M2N1FBFxi , & + M2N1FBFyi , M2N1FBFzi , M2N1FBxi , M2N1FByi , M2N1FBzi , M2N1FDxi , M2N1FDyi , & + M2N1FDzi , M2N1FIxi , M2N1FIyi , M2N1FIzi , M2N1FMGxi , M2N1FMGyi , M2N1FMGzi , & + M2N1MAFxi , M2N1MAFyi , M2N1MAFzi , M2N1MAGxi , M2N1MAGyi , M2N1MAGzi , M2N1MBFxi , & + M2N1MBFyi , M2N1MBFzi , M2N1MBxi , M2N1MByi , M2N1MBzi , M2N1MMGxi , M2N1MMGyi , & + M2N1MMGzi , M2N1STAxi , M2N1STAyi , M2N1STAzi , M2N1STVxi , M2N1STVyi , M2N1STVzi , & + M2N1Vxi , M2N1Vyi , M2N1Vzi , M2N2Axi , M2N2Ayi , M2N2Azi , M2N2DynP , & + M2N2FAFxi , M2N2FAFyi , M2N2FAFzi , M2N2FAGxi , M2N2FAGyi , M2N2FAGzi , M2N2FAMxi , & + M2N2FAMyi , M2N2FAMzi , M2N2FBFxi , M2N2FBFyi , M2N2FBFzi , M2N2FBxi , M2N2FByi , & + M2N2FBzi , M2N2FDxi , M2N2FDyi , M2N2FDzi , M2N2FIxi , M2N2FIyi , M2N2FIzi , & + M2N2FMGxi , M2N2FMGyi , M2N2FMGzi , M2N2MAFxi , M2N2MAFyi , M2N2MAFzi , M2N2MAGxi , & + M2N2MAGyi , M2N2MAGzi , M2N2MBFxi , M2N2MBFyi , M2N2MBFzi , M2N2MBxi , M2N2MByi , & + M2N2MBzi , M2N2MMGxi , M2N2MMGyi , M2N2MMGzi , M2N2STAxi , M2N2STAyi , M2N2STAzi , & + M2N2STVxi , M2N2STVyi , M2N2STVzi , M2N2Vxi , M2N2Vyi , M2N2Vzi , M2N3Axi , & + M2N3Ayi , M2N3Azi , M2N3DynP , M2N3FAFxi , M2N3FAFyi , M2N3FAFzi , M2N3FAGxi , & + M2N3FAGyi , M2N3FAGzi , M2N3FAMxi , M2N3FAMyi , M2N3FAMzi , M2N3FBFxi , M2N3FBFyi , & + M2N3FBFzi , M2N3FBxi , M2N3FByi , M2N3FBzi , M2N3FDxi , M2N3FDyi , M2N3FDzi , & + M2N3FIxi , M2N3FIyi , M2N3FIzi , M2N3FMGxi , M2N3FMGyi , M2N3FMGzi , M2N3MAFxi , & + M2N3MAFyi , M2N3MAFzi , M2N3MAGxi , M2N3MAGyi , M2N3MAGzi , M2N3MBFxi , M2N3MBFyi , & + M2N3MBFzi , M2N3MBxi , M2N3MByi , M2N3MBzi , M2N3MMGxi , M2N3MMGyi , M2N3MMGzi , & + M2N3STAxi , M2N3STAyi , M2N3STAzi , M2N3STVxi , M2N3STVyi , M2N3STVzi , M2N3Vxi , & + M2N3Vyi , M2N3Vzi , M2N4Axi , M2N4Ayi , M2N4Azi , M2N4DynP , M2N4FAFxi , & + M2N4FAFyi , M2N4FAFzi , M2N4FAGxi , M2N4FAGyi , M2N4FAGzi , M2N4FAMxi , M2N4FAMyi , & + M2N4FAMzi , M2N4FBFxi , M2N4FBFyi , M2N4FBFzi , M2N4FBxi , M2N4FByi , M2N4FBzi , & + M2N4FDxi , M2N4FDyi , M2N4FDzi , M2N4FIxi , M2N4FIyi , M2N4FIzi , M2N4FMGxi , & + M2N4FMGyi , M2N4FMGzi , M2N4MAFxi , M2N4MAFyi , M2N4MAFzi , M2N4MAGxi , M2N4MAGyi , & + M2N4MAGzi , M2N4MBFxi , M2N4MBFyi , M2N4MBFzi , M2N4MBxi , M2N4MByi , M2N4MBzi , & + M2N4MMGxi , M2N4MMGyi , M2N4MMGzi , M2N4STAxi , M2N4STAyi , M2N4STAzi , M2N4STVxi , & + M2N4STVyi , M2N4STVzi , M2N4Vxi , M2N4Vyi , M2N4Vzi , M2N5Axi , M2N5Ayi , & + M2N5Azi , M2N5DynP , M2N5FAFxi , M2N5FAFyi , M2N5FAFzi , M2N5FAGxi , M2N5FAGyi , & + M2N5FAGzi , M2N5FAMxi , M2N5FAMyi , M2N5FAMzi , M2N5FBFxi , M2N5FBFyi , M2N5FBFzi , & + M2N5FBxi , M2N5FByi , M2N5FBzi , M2N5FDxi , M2N5FDyi , M2N5FDzi , M2N5FIxi , & + M2N5FIyi , M2N5FIzi , M2N5FMGxi , M2N5FMGyi , M2N5FMGzi , M2N5MAFxi , M2N5MAFyi , & + M2N5MAFzi , M2N5MAGxi , M2N5MAGyi , M2N5MAGzi , M2N5MBFxi , M2N5MBFyi , M2N5MBFzi , & + M2N5MBxi , M2N5MByi , M2N5MBzi , M2N5MMGxi , M2N5MMGyi , M2N5MMGzi , M2N5STAxi , & + M2N5STAyi , M2N5STAzi , M2N5STVxi , M2N5STVyi , M2N5STVzi , M2N5Vxi , M2N5Vyi , & + M2N5Vzi , M2N6Axi , M2N6Ayi , M2N6Azi , M2N6DynP , M2N6FAFxi , M2N6FAFyi , & + M2N6FAFzi , M2N6FAGxi , M2N6FAGyi , M2N6FAGzi , M2N6FAMxi , M2N6FAMyi , M2N6FAMzi , & + M2N6FBFxi , M2N6FBFyi , M2N6FBFzi , M2N6FBxi , M2N6FByi , M2N6FBzi , M2N6FDxi , & + M2N6FDyi , M2N6FDzi , M2N6FIxi , M2N6FIyi , M2N6FIzi , M2N6FMGxi , M2N6FMGyi , & + M2N6FMGzi , M2N6MAFxi , M2N6MAFyi , M2N6MAFzi , M2N6MAGxi , M2N6MAGyi , M2N6MAGzi , & + M2N6MBFxi , M2N6MBFyi , M2N6MBFzi , M2N6MBxi , M2N6MByi , M2N6MBzi , M2N6MMGxi , & + M2N6MMGyi , M2N6MMGzi , M2N6STAxi , M2N6STAyi , M2N6STAzi , M2N6STVxi , M2N6STVyi , & + M2N6STVzi , M2N6Vxi , M2N6Vyi , M2N6Vzi , M2N7Axi , M2N7Ayi , M2N7Azi , & + M2N7DynP , M2N7FAFxi , M2N7FAFyi , M2N7FAFzi , M2N7FAGxi , M2N7FAGyi , M2N7FAGzi , & + M2N7FAMxi , M2N7FAMyi , M2N7FAMzi , M2N7FBFxi , M2N7FBFyi , M2N7FBFzi , M2N7FBxi , & + M2N7FByi , M2N7FBzi , M2N7FDxi , M2N7FDyi , M2N7FDzi , M2N7FIxi , M2N7FIyi , & + M2N7FIzi , M2N7FMGxi , M2N7FMGyi , M2N7FMGzi , M2N7MAFxi , M2N7MAFyi , M2N7MAFzi , & + M2N7MAGxi , M2N7MAGyi , M2N7MAGzi , M2N7MBFxi , M2N7MBFyi , M2N7MBFzi , M2N7MBxi , & + M2N7MByi , M2N7MBzi , M2N7MMGxi , M2N7MMGyi , M2N7MMGzi , M2N7STAxi , M2N7STAyi , & + M2N7STAzi , M2N7STVxi , M2N7STVyi , M2N7STVzi , M2N7Vxi , M2N7Vyi , M2N7Vzi , & + M2N8Axi , M2N8Ayi , M2N8Azi , M2N8DynP , M2N8FAFxi , M2N8FAFyi , M2N8FAFzi , & + M2N8FAGxi , M2N8FAGyi , M2N8FAGzi , M2N8FAMxi , M2N8FAMyi , M2N8FAMzi , M2N8FBFxi , & + M2N8FBFyi , M2N8FBFzi , M2N8FBxi , M2N8FByi , M2N8FBzi , M2N8FDxi , M2N8FDyi , & + M2N8FDzi , M2N8FIxi , M2N8FIyi , M2N8FIzi , M2N8FMGxi , M2N8FMGyi , M2N8FMGzi , & + M2N8MAFxi , M2N8MAFyi , M2N8MAFzi , M2N8MAGxi , M2N8MAGyi , M2N8MAGzi , M2N8MBFxi , & + M2N8MBFyi , M2N8MBFzi , M2N8MBxi , M2N8MByi , M2N8MBzi , M2N8MMGxi , M2N8MMGyi , & + M2N8MMGzi , M2N8STAxi , M2N8STAyi , M2N8STAzi , M2N8STVxi , M2N8STVyi , M2N8STVzi , & + M2N8Vxi , M2N8Vyi , M2N8Vzi , M2N9Axi , M2N9Ayi , M2N9Azi , M2N9DynP , & + M2N9FAFxi , M2N9FAFyi , M2N9FAFzi , M2N9FAGxi , M2N9FAGyi , M2N9FAGzi , M2N9FAMxi , & + M2N9FAMyi , M2N9FAMzi , M2N9FBFxi , M2N9FBFyi , M2N9FBFzi , M2N9FBxi , M2N9FByi , & + M2N9FBzi , M2N9FDxi , M2N9FDyi , M2N9FDzi , M2N9FIxi , M2N9FIyi , M2N9FIzi , & + M2N9FMGxi , M2N9FMGyi , M2N9FMGzi , M2N9MAFxi , M2N9MAFyi , M2N9MAFzi , M2N9MAGxi , & + M2N9MAGyi , M2N9MAGzi , M2N9MBFxi , M2N9MBFyi , M2N9MBFzi , M2N9MBxi , M2N9MByi , & + M2N9MBzi , M2N9MMGxi , M2N9MMGyi , M2N9MMGzi , M2N9STAxi , M2N9STAyi , M2N9STAzi , & + M2N9STVxi , M2N9STVyi , M2N9STVzi , M2N9Vxi , M2N9Vyi , M2N9Vzi , M3N1Axi , & + M3N1Ayi , M3N1Azi , M3N1DynP , M3N1FAFxi , M3N1FAFyi , M3N1FAFzi , M3N1FAGxi , & + M3N1FAGyi , M3N1FAGzi , M3N1FAMxi , M3N1FAMyi , M3N1FAMzi , M3N1FBFxi , M3N1FBFyi , & + M3N1FBFzi , M3N1FBxi , M3N1FByi , M3N1FBzi , M3N1FDxi , M3N1FDyi , M3N1FDzi , & + M3N1FIxi , M3N1FIyi , M3N1FIzi , M3N1FMGxi , M3N1FMGyi , M3N1FMGzi , M3N1MAFxi , & + M3N1MAFyi , M3N1MAFzi , M3N1MAGxi , M3N1MAGyi , M3N1MAGzi , M3N1MBFxi , M3N1MBFyi , & + M3N1MBFzi , M3N1MBxi , M3N1MByi , M3N1MBzi , M3N1MMGxi , M3N1MMGyi , M3N1MMGzi , & + M3N1STAxi , M3N1STAyi , M3N1STAzi , M3N1STVxi , M3N1STVyi , M3N1STVzi , M3N1Vxi , & + M3N1Vyi , M3N1Vzi , M3N2Axi , M3N2Ayi , M3N2Azi , M3N2DynP , M3N2FAFxi , & + M3N2FAFyi , M3N2FAFzi , M3N2FAGxi , M3N2FAGyi , M3N2FAGzi , M3N2FAMxi , M3N2FAMyi , & + M3N2FAMzi , M3N2FBFxi , M3N2FBFyi , M3N2FBFzi , M3N2FBxi , M3N2FByi , M3N2FBzi , & + M3N2FDxi , M3N2FDyi , M3N2FDzi , M3N2FIxi , M3N2FIyi , M3N2FIzi , M3N2FMGxi , & + M3N2FMGyi , M3N2FMGzi , M3N2MAFxi , M3N2MAFyi , M3N2MAFzi , M3N2MAGxi , M3N2MAGyi , & + M3N2MAGzi , M3N2MBFxi , M3N2MBFyi , M3N2MBFzi , M3N2MBxi , M3N2MByi , M3N2MBzi , & + M3N2MMGxi , M3N2MMGyi , M3N2MMGzi , M3N2STAxi , M3N2STAyi , M3N2STAzi , M3N2STVxi , & + M3N2STVyi , M3N2STVzi , M3N2Vxi , M3N2Vyi , M3N2Vzi , M3N3Axi , M3N3Ayi , & + M3N3Azi , M3N3DynP , M3N3FAFxi , M3N3FAFyi , M3N3FAFzi , M3N3FAGxi , M3N3FAGyi , & + M3N3FAGzi , M3N3FAMxi , M3N3FAMyi , M3N3FAMzi , M3N3FBFxi , M3N3FBFyi , M3N3FBFzi , & + M3N3FBxi , M3N3FByi , M3N3FBzi , M3N3FDxi , M3N3FDyi , M3N3FDzi , M3N3FIxi , & + M3N3FIyi , M3N3FIzi , M3N3FMGxi , M3N3FMGyi , M3N3FMGzi , M3N3MAFxi , M3N3MAFyi , & + M3N3MAFzi , M3N3MAGxi , M3N3MAGyi , M3N3MAGzi , M3N3MBFxi , M3N3MBFyi , M3N3MBFzi , & + M3N3MBxi , M3N3MByi , M3N3MBzi , M3N3MMGxi , M3N3MMGyi , M3N3MMGzi , M3N3STAxi , & + M3N3STAyi , M3N3STAzi , M3N3STVxi , M3N3STVyi , M3N3STVzi , M3N3Vxi , M3N3Vyi , & + M3N3Vzi , M3N4Axi , M3N4Ayi , M3N4Azi , M3N4DynP , M3N4FAFxi , M3N4FAFyi , & + M3N4FAFzi , M3N4FAGxi , M3N4FAGyi , M3N4FAGzi , M3N4FAMxi , M3N4FAMyi , M3N4FAMzi , & + M3N4FBFxi , M3N4FBFyi , M3N4FBFzi , M3N4FBxi , M3N4FByi , M3N4FBzi , M3N4FDxi , & + M3N4FDyi , M3N4FDzi , M3N4FIxi , M3N4FIyi , M3N4FIzi , M3N4FMGxi , M3N4FMGyi , & + M3N4FMGzi , M3N4MAFxi , M3N4MAFyi , M3N4MAFzi , M3N4MAGxi , M3N4MAGyi , M3N4MAGzi , & + M3N4MBFxi , M3N4MBFyi /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry2(1542) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M3N4MBFzi , M3N4MBxi , M3N4MByi , M3N4MBzi , M3N4MMGxi , M3N4MMGyi , M3N4MMGzi , & + M3N4STAxi , M3N4STAyi , M3N4STAzi , M3N4STVxi , M3N4STVyi , M3N4STVzi , M3N4Vxi , & + M3N4Vyi , M3N4Vzi , M3N5Axi , M3N5Ayi , M3N5Azi , M3N5DynP , M3N5FAFxi , & + M3N5FAFyi , M3N5FAFzi , M3N5FAGxi , M3N5FAGyi , M3N5FAGzi , M3N5FAMxi , M3N5FAMyi , & + M3N5FAMzi , M3N5FBFxi , M3N5FBFyi , M3N5FBFzi , M3N5FBxi , M3N5FByi , M3N5FBzi , & + M3N5FDxi , M3N5FDyi , M3N5FDzi , M3N5FIxi , M3N5FIyi , M3N5FIzi , M3N5FMGxi , & + M3N5FMGyi , M3N5FMGzi , M3N5MAFxi , M3N5MAFyi , M3N5MAFzi , M3N5MAGxi , M3N5MAGyi , & + M3N5MAGzi , M3N5MBFxi , M3N5MBFyi , M3N5MBFzi , M3N5MBxi , M3N5MByi , M3N5MBzi , & + M3N5MMGxi , M3N5MMGyi , M3N5MMGzi , M3N5STAxi , M3N5STAyi , M3N5STAzi , M3N5STVxi , & + M3N5STVyi , M3N5STVzi , M3N5Vxi , M3N5Vyi , M3N5Vzi , M3N6Axi , M3N6Ayi , & + M3N6Azi , M3N6DynP , M3N6FAFxi , M3N6FAFyi , M3N6FAFzi , M3N6FAGxi , M3N6FAGyi , & + M3N6FAGzi , M3N6FAMxi , M3N6FAMyi , M3N6FAMzi , M3N6FBFxi , M3N6FBFyi , M3N6FBFzi , & + M3N6FBxi , M3N6FByi , M3N6FBzi , M3N6FDxi , M3N6FDyi , M3N6FDzi , M3N6FIxi , & + M3N6FIyi , M3N6FIzi , M3N6FMGxi , M3N6FMGyi , M3N6FMGzi , M3N6MAFxi , M3N6MAFyi , & + M3N6MAFzi , M3N6MAGxi , M3N6MAGyi , M3N6MAGzi , M3N6MBFxi , M3N6MBFyi , M3N6MBFzi , & + M3N6MBxi , M3N6MByi , M3N6MBzi , M3N6MMGxi , M3N6MMGyi , M3N6MMGzi , M3N6STAxi , & + M3N6STAyi , M3N6STAzi , M3N6STVxi , M3N6STVyi , M3N6STVzi , M3N6Vxi , M3N6Vyi , & + M3N6Vzi , M3N7Axi , M3N7Ayi , M3N7Azi , M3N7DynP , M3N7FAFxi , M3N7FAFyi , & + M3N7FAFzi , M3N7FAGxi , M3N7FAGyi , M3N7FAGzi , M3N7FAMxi , M3N7FAMyi , M3N7FAMzi , & + M3N7FBFxi , M3N7FBFyi , M3N7FBFzi , M3N7FBxi , M3N7FByi , M3N7FBzi , M3N7FDxi , & + M3N7FDyi , M3N7FDzi , M3N7FIxi , M3N7FIyi , M3N7FIzi , M3N7FMGxi , M3N7FMGyi , & + M3N7FMGzi , M3N7MAFxi , M3N7MAFyi , M3N7MAFzi , M3N7MAGxi , M3N7MAGyi , M3N7MAGzi , & + M3N7MBFxi , M3N7MBFyi , M3N7MBFzi , M3N7MBxi , M3N7MByi , M3N7MBzi , M3N7MMGxi , & + M3N7MMGyi , M3N7MMGzi , M3N7STAxi , M3N7STAyi , M3N7STAzi , M3N7STVxi , M3N7STVyi , & + M3N7STVzi , M3N7Vxi , M3N7Vyi , M3N7Vzi , M3N8Axi , M3N8Ayi , M3N8Azi , & + M3N8DynP , M3N8FAFxi , M3N8FAFyi , M3N8FAFzi , M3N8FAGxi , M3N8FAGyi , M3N8FAGzi , & + M3N8FAMxi , M3N8FAMyi , M3N8FAMzi , M3N8FBFxi , M3N8FBFyi , M3N8FBFzi , M3N8FBxi , & + M3N8FByi , M3N8FBzi , M3N8FDxi , M3N8FDyi , M3N8FDzi , M3N8FIxi , M3N8FIyi , & + M3N8FIzi , M3N8FMGxi , M3N8FMGyi , M3N8FMGzi , M3N8MAFxi , M3N8MAFyi , M3N8MAFzi , & + M3N8MAGxi , M3N8MAGyi , M3N8MAGzi , M3N8MBFxi , M3N8MBFyi , M3N8MBFzi , M3N8MBxi , & + M3N8MByi , M3N8MBzi , M3N8MMGxi , M3N8MMGyi , M3N8MMGzi , M3N8STAxi , M3N8STAyi , & + M3N8STAzi , M3N8STVxi , M3N8STVyi , M3N8STVzi , M3N8Vxi , M3N8Vyi , M3N8Vzi , & + M3N9Axi , M3N9Ayi , M3N9Azi , M3N9DynP , M3N9FAFxi , M3N9FAFyi , M3N9FAFzi , & + M3N9FAGxi , M3N9FAGyi , M3N9FAGzi , M3N9FAMxi , M3N9FAMyi , M3N9FAMzi , M3N9FBFxi , & + M3N9FBFyi , M3N9FBFzi , M3N9FBxi , M3N9FByi , M3N9FBzi , M3N9FDxi , M3N9FDyi , & + M3N9FDzi , M3N9FIxi , M3N9FIyi , M3N9FIzi , M3N9FMGxi , M3N9FMGyi , M3N9FMGzi , & + M3N9MAFxi , M3N9MAFyi , M3N9MAFzi , M3N9MAGxi , M3N9MAGyi , M3N9MAGzi , M3N9MBFxi , & + M3N9MBFyi , M3N9MBFzi , M3N9MBxi , M3N9MByi , M3N9MBzi , M3N9MMGxi , M3N9MMGyi , & + M3N9MMGzi , M3N9STAxi , M3N9STAyi , M3N9STAzi , M3N9STVxi , M3N9STVyi , M3N9STVzi , & + M3N9Vxi , M3N9Vyi , M3N9Vzi , M4N1Axi , M4N1Ayi , M4N1Azi , M4N1DynP , & + M4N1FAFxi , M4N1FAFyi , M4N1FAFzi , M4N1FAGxi , M4N1FAGyi , M4N1FAGzi , M4N1FAMxi , & + M4N1FAMyi , M4N1FAMzi , M4N1FBFxi , M4N1FBFyi , M4N1FBFzi , M4N1FBxi , M4N1FByi , & + M4N1FBzi , M4N1FDxi , M4N1FDyi , M4N1FDzi , M4N1FIxi , M4N1FIyi , M4N1FIzi , & + M4N1FMGxi , M4N1FMGyi , M4N1FMGzi , M4N1MAFxi , M4N1MAFyi , M4N1MAFzi , M4N1MAGxi , & + M4N1MAGyi , M4N1MAGzi , M4N1MBFxi , M4N1MBFyi , M4N1MBFzi , M4N1MBxi , M4N1MByi , & + M4N1MBzi , M4N1MMGxi , M4N1MMGyi , M4N1MMGzi , M4N1STAxi , M4N1STAyi , M4N1STAzi , & + M4N1STVxi , M4N1STVyi , M4N1STVzi , M4N1Vxi , M4N1Vyi , M4N1Vzi , M4N2Axi , & + M4N2Ayi , M4N2Azi , M4N2DynP , M4N2FAFxi , M4N2FAFyi , M4N2FAFzi , M4N2FAGxi , & + M4N2FAGyi , M4N2FAGzi , M4N2FAMxi , M4N2FAMyi , M4N2FAMzi , M4N2FBFxi , M4N2FBFyi , & + M4N2FBFzi , M4N2FBxi , M4N2FByi , M4N2FBzi , M4N2FDxi , M4N2FDyi , M4N2FDzi , & + M4N2FIxi , M4N2FIyi , M4N2FIzi , M4N2FMGxi , M4N2FMGyi , M4N2FMGzi , M4N2MAFxi , & + M4N2MAFyi , M4N2MAFzi , M4N2MAGxi , M4N2MAGyi , M4N2MAGzi , M4N2MBFxi , M4N2MBFyi , & + M4N2MBFzi , M4N2MBxi , M4N2MByi , M4N2MBzi , M4N2MMGxi , M4N2MMGyi , M4N2MMGzi , & + M4N2STAxi , M4N2STAyi , M4N2STAzi , M4N2STVxi , M4N2STVyi , M4N2STVzi , M4N2Vxi , & + M4N2Vyi , M4N2Vzi , M4N3Axi , M4N3Ayi , M4N3Azi , M4N3DynP , M4N3FAFxi , & + M4N3FAFyi , M4N3FAFzi , M4N3FAGxi , M4N3FAGyi , M4N3FAGzi , M4N3FAMxi , M4N3FAMyi , & + M4N3FAMzi , M4N3FBFxi , M4N3FBFyi , M4N3FBFzi , M4N3FBxi , M4N3FByi , M4N3FBzi , & + M4N3FDxi , M4N3FDyi , M4N3FDzi , M4N3FIxi , M4N3FIyi , M4N3FIzi , M4N3FMGxi , & + M4N3FMGyi , M4N3FMGzi , M4N3MAFxi , M4N3MAFyi , M4N3MAFzi , M4N3MAGxi , M4N3MAGyi , & + M4N3MAGzi , M4N3MBFxi , M4N3MBFyi , M4N3MBFzi , M4N3MBxi , M4N3MByi , M4N3MBzi , & + M4N3MMGxi , M4N3MMGyi , M4N3MMGzi , M4N3STAxi , M4N3STAyi , M4N3STAzi , M4N3STVxi , & + M4N3STVyi , M4N3STVzi , M4N3Vxi , M4N3Vyi , M4N3Vzi , M4N4Axi , M4N4Ayi , & + M4N4Azi , M4N4DynP , M4N4FAFxi , M4N4FAFyi , M4N4FAFzi , M4N4FAGxi , M4N4FAGyi , & + M4N4FAGzi , M4N4FAMxi , M4N4FAMyi , M4N4FAMzi , M4N4FBFxi , M4N4FBFyi , M4N4FBFzi , & + M4N4FBxi , M4N4FByi , M4N4FBzi , M4N4FDxi , M4N4FDyi , M4N4FDzi , M4N4FIxi , & + M4N4FIyi , M4N4FIzi , M4N4FMGxi , M4N4FMGyi , M4N4FMGzi , M4N4MAFxi , M4N4MAFyi , & + M4N4MAFzi , M4N4MAGxi , M4N4MAGyi , M4N4MAGzi , M4N4MBFxi , M4N4MBFyi , M4N4MBFzi , & + M4N4MBxi , M4N4MByi , M4N4MBzi , M4N4MMGxi , M4N4MMGyi , M4N4MMGzi , M4N4STAxi , & + M4N4STAyi , M4N4STAzi , M4N4STVxi , M4N4STVyi , M4N4STVzi , M4N4Vxi , M4N4Vyi , & + M4N4Vzi , M4N5Axi , M4N5Ayi , M4N5Azi , M4N5DynP , M4N5FAFxi , M4N5FAFyi , & + M4N5FAFzi , M4N5FAGxi , M4N5FAGyi , M4N5FAGzi , M4N5FAMxi , M4N5FAMyi , M4N5FAMzi , & + M4N5FBFxi , M4N5FBFyi , M4N5FBFzi , M4N5FBxi , M4N5FByi , M4N5FBzi , M4N5FDxi , & + M4N5FDyi , M4N5FDzi , M4N5FIxi , M4N5FIyi , M4N5FIzi , M4N5FMGxi , M4N5FMGyi , & + M4N5FMGzi , M4N5MAFxi , M4N5MAFyi , M4N5MAFzi , M4N5MAGxi , M4N5MAGyi , M4N5MAGzi , & + M4N5MBFxi , M4N5MBFyi , M4N5MBFzi , M4N5MBxi , M4N5MByi , M4N5MBzi , M4N5MMGxi , & + M4N5MMGyi , M4N5MMGzi , M4N5STAxi , M4N5STAyi , M4N5STAzi , M4N5STVxi , M4N5STVyi , & + M4N5STVzi , M4N5Vxi , M4N5Vyi , M4N5Vzi , M4N6Axi , M4N6Ayi , M4N6Azi , & + M4N6DynP , M4N6FAFxi , M4N6FAFyi , M4N6FAFzi , M4N6FAGxi , M4N6FAGyi , M4N6FAGzi , & + M4N6FAMxi , M4N6FAMyi , M4N6FAMzi , M4N6FBFxi , M4N6FBFyi , M4N6FBFzi , M4N6FBxi , & + M4N6FByi , M4N6FBzi , M4N6FDxi , M4N6FDyi , M4N6FDzi , M4N6FIxi , M4N6FIyi , & + M4N6FIzi , M4N6FMGxi , M4N6FMGyi , M4N6FMGzi , M4N6MAFxi , M4N6MAFyi , M4N6MAFzi , & + M4N6MAGxi , M4N6MAGyi , M4N6MAGzi , M4N6MBFxi , M4N6MBFyi , M4N6MBFzi , M4N6MBxi , & + M4N6MByi , M4N6MBzi , M4N6MMGxi , M4N6MMGyi , M4N6MMGzi , M4N6STAxi , M4N6STAyi , & + M4N6STAzi , M4N6STVxi , M4N6STVyi , M4N6STVzi , M4N6Vxi , M4N6Vyi , M4N6Vzi , & + M4N7Axi , M4N7Ayi , M4N7Azi , M4N7DynP , M4N7FAFxi , M4N7FAFyi , M4N7FAFzi , & + M4N7FAGxi , M4N7FAGyi , M4N7FAGzi , M4N7FAMxi , M4N7FAMyi , M4N7FAMzi , M4N7FBFxi , & + M4N7FBFyi , M4N7FBFzi , M4N7FBxi , M4N7FByi , M4N7FBzi , M4N7FDxi , M4N7FDyi , & + M4N7FDzi , M4N7FIxi , M4N7FIyi , M4N7FIzi , M4N7FMGxi , M4N7FMGyi , M4N7FMGzi , & + M4N7MAFxi , M4N7MAFyi , M4N7MAFzi , M4N7MAGxi , M4N7MAGyi , M4N7MAGzi , M4N7MBFxi , & + M4N7MBFyi , M4N7MBFzi , M4N7MBxi , M4N7MByi , M4N7MBzi , M4N7MMGxi , M4N7MMGyi , & + M4N7MMGzi , M4N7STAxi , M4N7STAyi , M4N7STAzi , M4N7STVxi , M4N7STVyi , M4N7STVzi , & + M4N7Vxi , M4N7Vyi , M4N7Vzi , M4N8Axi , M4N8Ayi , M4N8Azi , M4N8DynP , & + M4N8FAFxi , M4N8FAFyi , M4N8FAFzi , M4N8FAGxi , M4N8FAGyi , M4N8FAGzi , M4N8FAMxi , & + M4N8FAMyi , M4N8FAMzi , M4N8FBFxi , M4N8FBFyi , M4N8FBFzi , M4N8FBxi , M4N8FByi , & + M4N8FBzi , M4N8FDxi , M4N8FDyi , M4N8FDzi , M4N8FIxi , M4N8FIyi , M4N8FIzi , & + M4N8FMGxi , M4N8FMGyi , M4N8FMGzi , M4N8MAFxi , M4N8MAFyi , M4N8MAFzi , M4N8MAGxi , & + M4N8MAGyi , M4N8MAGzi , M4N8MBFxi , M4N8MBFyi , M4N8MBFzi , M4N8MBxi , M4N8MByi , & + M4N8MBzi , M4N8MMGxi , M4N8MMGyi , M4N8MMGzi , M4N8STAxi , M4N8STAyi , M4N8STAzi , & + M4N8STVxi , M4N8STVyi , M4N8STVzi , M4N8Vxi , M4N8Vyi , M4N8Vzi , M4N9Axi , & + M4N9Ayi , M4N9Azi , M4N9DynP , M4N9FAFxi , M4N9FAFyi , M4N9FAFzi , M4N9FAGxi , & + M4N9FAGyi , M4N9FAGzi , M4N9FAMxi , M4N9FAMyi , M4N9FAMzi , M4N9FBFxi , M4N9FBFyi , & + M4N9FBFzi , M4N9FBxi , M4N9FByi , M4N9FBzi , M4N9FDxi , M4N9FDyi , M4N9FDzi , & + M4N9FIxi , M4N9FIyi , M4N9FIzi , M4N9FMGxi , M4N9FMGyi , M4N9FMGzi , M4N9MAFxi , & + M4N9MAFyi , M4N9MAFzi , M4N9MAGxi , M4N9MAGyi , M4N9MAGzi , M4N9MBFxi , M4N9MBFyi , & + M4N9MBFzi , M4N9MBxi , M4N9MByi , M4N9MBzi , M4N9MMGxi , M4N9MMGyi , M4N9MMGzi , & + M4N9STAxi , M4N9STAyi , M4N9STAzi , M4N9STVxi , M4N9STVyi , M4N9STVzi , M4N9Vxi , & + M4N9Vyi , M4N9Vzi , M5N1Axi , M5N1Ayi , M5N1Azi , M5N1DynP , M5N1FAFxi , & + M5N1FAFyi , M5N1FAFzi , M5N1FAGxi , M5N1FAGyi , M5N1FAGzi , M5N1FAMxi , M5N1FAMyi , & + M5N1FAMzi , M5N1FBFxi , M5N1FBFyi , M5N1FBFzi , M5N1FBxi , M5N1FByi , M5N1FBzi , & + M5N1FDxi , M5N1FDyi , M5N1FDzi , M5N1FIxi , M5N1FIyi , M5N1FIzi , M5N1FMGxi , & + M5N1FMGyi , M5N1FMGzi , M5N1MAFxi , M5N1MAFyi , M5N1MAFzi , M5N1MAGxi , M5N1MAGyi , & + M5N1MAGzi , M5N1MBFxi , M5N1MBFyi , M5N1MBFzi , M5N1MBxi , M5N1MByi , M5N1MBzi , & + M5N1MMGxi , M5N1MMGyi , M5N1MMGzi , M5N1STAxi , M5N1STAyi , M5N1STAzi , M5N1STVxi , & + M5N1STVyi , M5N1STVzi , M5N1Vxi , M5N1Vyi , M5N1Vzi , M5N2Axi , M5N2Ayi , & + M5N2Azi , M5N2DynP , M5N2FAFxi , M5N2FAFyi , M5N2FAFzi , M5N2FAGxi , M5N2FAGyi , & + M5N2FAGzi , M5N2FAMxi , M5N2FAMyi , M5N2FAMzi , M5N2FBFxi , M5N2FBFyi , M5N2FBFzi , & + M5N2FBxi , M5N2FByi , M5N2FBzi , M5N2FDxi , M5N2FDyi , M5N2FDzi , M5N2FIxi , & + M5N2FIyi , M5N2FIzi , M5N2FMGxi , M5N2FMGyi , M5N2FMGzi , M5N2MAFxi , M5N2MAFyi , & + M5N2MAFzi , M5N2MAGxi , M5N2MAGyi , M5N2MAGzi , M5N2MBFxi , M5N2MBFyi , M5N2MBFzi , & + M5N2MBxi , M5N2MByi , M5N2MBzi , M5N2MMGxi , M5N2MMGyi , M5N2MMGzi , M5N2STAxi , & + M5N2STAyi , M5N2STAzi , M5N2STVxi , M5N2STVyi , M5N2STVzi , M5N2Vxi , M5N2Vyi , & + M5N2Vzi , M5N3Axi , M5N3Ayi , M5N3Azi , M5N3DynP , M5N3FAFxi , M5N3FAFyi , & + M5N3FAFzi , M5N3FAGxi , M5N3FAGyi , M5N3FAGzi , M5N3FAMxi , M5N3FAMyi , M5N3FAMzi , & + M5N3FBFxi , M5N3FBFyi , M5N3FBFzi , M5N3FBxi , M5N3FByi , M5N3FBzi , M5N3FDxi , & + M5N3FDyi , M5N3FDzi , M5N3FIxi , M5N3FIyi , M5N3FIzi , M5N3FMGxi , M5N3FMGyi , & + M5N3FMGzi , M5N3MAFxi , M5N3MAFyi , M5N3MAFzi , M5N3MAGxi , M5N3MAGyi , M5N3MAGzi , & + M5N3MBFxi , M5N3MBFyi , M5N3MBFzi , M5N3MBxi , M5N3MByi , M5N3MBzi , M5N3MMGxi , & + M5N3MMGyi , M5N3MMGzi , M5N3STAxi , M5N3STAyi , M5N3STAzi , M5N3STVxi , M5N3STVyi , & + M5N3STVzi , M5N3Vxi , M5N3Vyi , M5N3Vzi , M5N4Axi , M5N4Ayi , M5N4Azi , & + M5N4DynP , M5N4FAFxi , M5N4FAFyi , M5N4FAFzi , M5N4FAGxi , M5N4FAGyi , M5N4FAGzi , & + M5N4FAMxi , M5N4FAMyi , M5N4FAMzi , M5N4FBFxi , M5N4FBFyi , M5N4FBFzi , M5N4FBxi , & + M5N4FByi , M5N4FBzi , M5N4FDxi , M5N4FDyi , M5N4FDzi , M5N4FIxi , M5N4FIyi , & + M5N4FIzi , M5N4FMGxi , M5N4FMGyi , M5N4FMGzi , M5N4MAFxi , M5N4MAFyi , M5N4MAFzi , & + M5N4MAGxi , M5N4MAGyi , M5N4MAGzi , M5N4MBFxi , M5N4MBFyi , M5N4MBFzi , M5N4MBxi , & + M5N4MByi , M5N4MBzi , M5N4MMGxi , M5N4MMGyi , M5N4MMGzi , M5N4STAxi , M5N4STAyi , & + M5N4STAzi , M5N4STVxi , M5N4STVyi , M5N4STVzi , M5N4Vxi , M5N4Vyi , M5N4Vzi , & + M5N5Axi , M5N5Ayi , M5N5Azi , M5N5DynP , M5N5FAFxi , M5N5FAFyi , M5N5FAFzi , & + M5N5FAGxi , M5N5FAGyi , M5N5FAGzi , M5N5FAMxi , M5N5FAMyi , M5N5FAMzi , M5N5FBFxi , & + M5N5FBFyi , M5N5FBFzi , M5N5FBxi , M5N5FByi , M5N5FBzi , M5N5FDxi , M5N5FDyi , & + M5N5FDzi , M5N5FIxi , M5N5FIyi , M5N5FIzi , M5N5FMGxi , M5N5FMGyi , M5N5FMGzi , & + M5N5MAFxi , M5N5MAFyi , M5N5MAFzi , M5N5MAGxi , M5N5MAGyi , M5N5MAGzi , M5N5MBFxi , & + M5N5MBFyi , M5N5MBFzi , M5N5MBxi , M5N5MByi , M5N5MBzi , M5N5MMGxi , M5N5MMGyi , & + M5N5MMGzi , M5N5STAxi , M5N5STAyi , M5N5STAzi , M5N5STVxi , M5N5STVyi , M5N5STVzi , & + M5N5Vxi , M5N5Vyi , M5N5Vzi , M5N6Axi , M5N6Ayi , M5N6Azi , M5N6DynP , & + M5N6FAFxi , M5N6FAFyi , M5N6FAFzi , M5N6FAGxi , M5N6FAGyi , M5N6FAGzi , M5N6FAMxi , & + M5N6FAMyi , M5N6FAMzi , M5N6FBFxi , M5N6FBFyi , M5N6FBFzi , M5N6FBxi , M5N6FByi , & + M5N6FBzi , M5N6FDxi , M5N6FDyi , M5N6FDzi , M5N6FIxi , M5N6FIyi , M5N6FIzi , & + M5N6FMGxi , M5N6FMGyi , M5N6FMGzi , M5N6MAFxi , M5N6MAFyi , M5N6MAFzi , M5N6MAGxi , & + M5N6MAGyi , M5N6MAGzi , M5N6MBFxi , M5N6MBFyi , M5N6MBFzi , M5N6MBxi , M5N6MByi , & + M5N6MBzi , M5N6MMGxi , M5N6MMGyi , M5N6MMGzi , M5N6STAxi , M5N6STAyi , M5N6STAzi , & + M5N6STVxi , M5N6STVyi , M5N6STVzi , M5N6Vxi , M5N6Vyi , M5N6Vzi , M5N7Axi , & + M5N7Ayi , M5N7Azi , M5N7DynP , M5N7FAFxi , M5N7FAFyi , M5N7FAFzi , M5N7FAGxi , & + M5N7FAGyi , M5N7FAGzi , M5N7FAMxi , M5N7FAMyi , M5N7FAMzi , M5N7FBFxi , M5N7FBFyi , & + M5N7FBFzi , M5N7FBxi , M5N7FByi , M5N7FBzi , M5N7FDxi , M5N7FDyi , M5N7FDzi , & + M5N7FIxi , M5N7FIyi , M5N7FIzi , M5N7FMGxi , M5N7FMGyi , M5N7FMGzi , M5N7MAFxi , & + M5N7MAFyi , M5N7MAFzi , M5N7MAGxi , M5N7MAGyi , M5N7MAGzi , M5N7MBFxi , M5N7MBFyi , & + M5N7MBFzi , M5N7MBxi , M5N7MByi , M5N7MBzi , M5N7MMGxi , M5N7MMGyi , M5N7MMGzi , & + M5N7STAxi , M5N7STAyi , M5N7STAzi , M5N7STVxi , M5N7STVyi , M5N7STVzi , M5N7Vxi , & + M5N7Vyi , M5N7Vzi , M5N8Axi , M5N8Ayi , M5N8Azi , M5N8DynP , M5N8FAFxi , & + M5N8FAFyi , M5N8FAFzi , M5N8FAGxi , M5N8FAGyi , M5N8FAGzi , M5N8FAMxi , M5N8FAMyi , & + M5N8FAMzi , M5N8FBFxi , M5N8FBFyi , M5N8FBFzi , M5N8FBxi , M5N8FByi , M5N8FBzi , & + M5N8FDxi , M5N8FDyi , M5N8FDzi , M5N8FIxi , M5N8FIyi , M5N8FIzi , M5N8FMGxi , & + M5N8FMGyi , M5N8FMGzi , M5N8MAFxi , M5N8MAFyi , M5N8MAFzi , M5N8MAGxi , M5N8MAGyi , & + M5N8MAGzi , M5N8MBFxi , M5N8MBFyi , M5N8MBFzi , M5N8MBxi , M5N8MByi , M5N8MBzi , & + M5N8MMGxi , M5N8MMGyi , M5N8MMGzi , M5N8STAxi , M5N8STAyi , M5N8STAzi , M5N8STVxi , & + M5N8STVyi , M5N8STVzi , M5N8Vxi , M5N8Vyi , M5N8Vzi , M5N9Axi , M5N9Ayi , & + M5N9Azi , M5N9DynP , M5N9FAFxi , M5N9FAFyi , M5N9FAFzi , M5N9FAGxi , M5N9FAGyi , & + M5N9FAGzi , M5N9FAMxi , M5N9FAMyi , M5N9FAMzi , M5N9FBFxi , M5N9FBFyi , M5N9FBFzi , & + M5N9FBxi , M5N9FByi , M5N9FBzi , M5N9FDxi , M5N9FDyi , M5N9FDzi , M5N9FIxi , & + M5N9FIyi , M5N9FIzi , M5N9FMGxi , M5N9FMGyi , M5N9FMGzi , M5N9MAFxi , M5N9MAFyi , & + M5N9MAFzi , M5N9MAGxi , M5N9MAGyi , M5N9MAGzi , M5N9MBFxi , M5N9MBFyi , M5N9MBFzi , & + M5N9MBxi , M5N9MByi , M5N9MBzi , M5N9MMGxi , M5N9MMGyi , M5N9MMGzi , M5N9STAxi , & + M5N9STAyi , M5N9STAzi , M5N9STVxi , M5N9STVyi , M5N9STVzi , M5N9Vxi , M5N9Vyi , & + M5N9Vzi , M6N1Axi , M6N1Ayi , M6N1Azi , M6N1DynP , M6N1FAFxi , M6N1FAFyi , & + M6N1FAFzi , M6N1FAGxi , M6N1FAGyi , M6N1FAGzi , M6N1FAMxi , M6N1FAMyi , M6N1FAMzi , & + M6N1FBFxi , M6N1FBFyi , M6N1FBFzi , M6N1FBxi , M6N1FByi , M6N1FBzi , M6N1FDxi , & + M6N1FDyi , M6N1FDzi , M6N1FIxi , M6N1FIyi , M6N1FIzi , M6N1FMGxi , M6N1FMGyi , & + M6N1FMGzi , M6N1MAFxi , M6N1MAFyi , M6N1MAFzi , M6N1MAGxi , M6N1MAGyi , M6N1MAGzi , & + M6N1MBFxi , M6N1MBFyi , M6N1MBFzi , M6N1MBxi , M6N1MByi , M6N1MBzi , M6N1MMGxi , & + M6N1MMGyi , M6N1MMGzi , M6N1STAxi , M6N1STAyi , M6N1STAzi , M6N1STVxi , M6N1STVyi , & + M6N1STVzi , M6N1Vxi , M6N1Vyi , M6N1Vzi , M6N2Axi , M6N2Ayi , M6N2Azi , & + M6N2DynP , M6N2FAFxi , M6N2FAFyi , M6N2FAFzi , M6N2FAGxi , M6N2FAGyi , M6N2FAGzi , & + M6N2FAMxi , M6N2FAMyi , M6N2FAMzi , M6N2FBFxi , M6N2FBFyi , M6N2FBFzi , M6N2FBxi , & + M6N2FByi , M6N2FBzi , M6N2FDxi , M6N2FDyi , M6N2FDzi , M6N2FIxi , M6N2FIyi , & + M6N2FIzi , M6N2FMGxi , M6N2FMGyi , M6N2FMGzi , M6N2MAFxi , M6N2MAFyi , M6N2MAFzi , & + M6N2MAGxi , M6N2MAGyi , M6N2MAGzi , M6N2MBFxi , M6N2MBFyi , M6N2MBFzi , M6N2MBxi , & + M6N2MByi , M6N2MBzi , M6N2MMGxi , M6N2MMGyi , M6N2MMGzi , M6N2STAxi , M6N2STAyi , & + M6N2STAzi , M6N2STVxi , M6N2STVyi , M6N2STVzi , M6N2Vxi , M6N2Vyi , M6N2Vzi , & + M6N3Axi , M6N3Ayi , M6N3Azi , M6N3DynP , M6N3FAFxi , M6N3FAFyi , M6N3FAFzi , & + M6N3FAGxi , M6N3FAGyi , M6N3FAGzi , M6N3FAMxi , M6N3FAMyi , M6N3FAMzi , M6N3FBFxi , & + M6N3FBFyi , M6N3FBFzi , M6N3FBxi , M6N3FByi , M6N3FBzi , M6N3FDxi , M6N3FDyi , & + M6N3FDzi , M6N3FIxi , M6N3FIyi , M6N3FIzi , M6N3FMGxi , M6N3FMGyi , M6N3FMGzi , & + M6N3MAFxi , M6N3MAFyi , M6N3MAFzi , M6N3MAGxi , M6N3MAGyi , M6N3MAGzi , M6N3MBFxi , & + M6N3MBFyi , M6N3MBFzi , M6N3MBxi , M6N3MByi , M6N3MBzi , M6N3MMGxi , M6N3MMGyi , & + M6N3MMGzi , M6N3STAxi , M6N3STAyi , M6N3STAzi , M6N3STVxi , M6N3STVyi , M6N3STVzi , & + M6N3Vxi , M6N3Vyi , M6N3Vzi , M6N4Axi , M6N4Ayi , M6N4Azi , M6N4DynP , & + M6N4FAFxi , M6N4FAFyi , M6N4FAFzi , M6N4FAGxi , M6N4FAGyi , M6N4FAGzi , M6N4FAMxi , & + M6N4FAMyi , M6N4FAMzi , M6N4FBFxi , M6N4FBFyi , M6N4FBFzi , M6N4FBxi , M6N4FByi , & + M6N4FBzi , M6N4FDxi , M6N4FDyi , M6N4FDzi , M6N4FIxi , M6N4FIyi , M6N4FIzi , & + M6N4FMGxi , M6N4FMGyi , M6N4FMGzi , M6N4MAFxi , M6N4MAFyi , M6N4MAFzi , M6N4MAGxi , & + M6N4MAGyi , M6N4MAGzi , M6N4MBFxi , M6N4MBFyi , M6N4MBFzi , M6N4MBxi , M6N4MByi , & + M6N4MBzi , M6N4MMGxi , M6N4MMGyi , M6N4MMGzi , M6N4STAxi , M6N4STAyi , M6N4STAzi , & + M6N4STVxi , M6N4STVyi , M6N4STVzi , M6N4Vxi , M6N4Vyi , M6N4Vzi , M6N5Axi , & + M6N5Ayi , M6N5Azi , M6N5DynP , M6N5FAFxi , M6N5FAFyi , M6N5FAFzi , M6N5FAGxi , & + M6N5FAGyi , M6N5FAGzi , M6N5FAMxi , M6N5FAMyi , M6N5FAMzi , M6N5FBFxi , M6N5FBFyi , & + M6N5FBFzi , M6N5FBxi , M6N5FByi , M6N5FBzi , M6N5FDxi , M6N5FDyi , M6N5FDzi , & + M6N5FIxi , M6N5FIyi , M6N5FIzi , M6N5FMGxi , M6N5FMGyi , M6N5FMGzi , M6N5MAFxi , & + M6N5MAFyi , M6N5MAFzi , M6N5MAGxi , M6N5MAGyi , M6N5MAGzi , M6N5MBFxi , M6N5MBFyi , & + M6N5MBFzi , M6N5MBxi , M6N5MByi , M6N5MBzi , M6N5MMGxi , M6N5MMGyi , M6N5MMGzi , & + M6N5STAxi , M6N5STAyi , M6N5STAzi , M6N5STVxi , M6N5STVyi , M6N5STVzi , M6N5Vxi , & + M6N5Vyi , M6N5Vzi , M6N6Axi , M6N6Ayi , M6N6Azi , M6N6DynP , M6N6FAFxi , & + M6N6FAFyi , M6N6FAFzi , M6N6FAGxi , M6N6FAGyi , M6N6FAGzi , M6N6FAMxi , M6N6FAMyi , & + M6N6FAMzi , M6N6FBFxi , M6N6FBFyi , M6N6FBFzi , M6N6FBxi , M6N6FByi , M6N6FBzi , & + M6N6FDxi , M6N6FDyi , M6N6FDzi , M6N6FIxi , M6N6FIyi , M6N6FIzi , M6N6FMGxi , & + M6N6FMGyi , M6N6FMGzi , M6N6MAFxi , M6N6MAFyi , M6N6MAFzi , M6N6MAGxi , M6N6MAGyi , & + M6N6MAGzi , M6N6MBFxi , M6N6MBFyi , M6N6MBFzi , M6N6MBxi , M6N6MByi , M6N6MBzi , & + M6N6MMGxi , M6N6MMGyi , M6N6MMGzi , M6N6STAxi , M6N6STAyi , M6N6STAzi , M6N6STVxi , & + M6N6STVyi , M6N6STVzi , M6N6Vxi , M6N6Vyi , M6N6Vzi , M6N7Axi , M6N7Ayi , & + M6N7Azi , M6N7DynP , M6N7FAFxi , M6N7FAFyi , M6N7FAFzi , M6N7FAGxi , M6N7FAGyi , & + M6N7FAGzi , M6N7FAMxi , M6N7FAMyi , M6N7FAMzi , M6N7FBFxi , M6N7FBFyi , M6N7FBFzi , & + M6N7FBxi , M6N7FByi /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry3(1542) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M6N7FBzi , M6N7FDxi , M6N7FDyi , M6N7FDzi , M6N7FIxi , M6N7FIyi , M6N7FIzi , & + M6N7FMGxi , M6N7FMGyi , M6N7FMGzi , M6N7MAFxi , M6N7MAFyi , M6N7MAFzi , M6N7MAGxi , & + M6N7MAGyi , M6N7MAGzi , M6N7MBFxi , M6N7MBFyi , M6N7MBFzi , M6N7MBxi , M6N7MByi , & + M6N7MBzi , M6N7MMGxi , M6N7MMGyi , M6N7MMGzi , M6N7STAxi , M6N7STAyi , M6N7STAzi , & + M6N7STVxi , M6N7STVyi , M6N7STVzi , M6N7Vxi , M6N7Vyi , M6N7Vzi , M6N8Axi , & + M6N8Ayi , M6N8Azi , M6N8DynP , M6N8FAFxi , M6N8FAFyi , M6N8FAFzi , M6N8FAGxi , & + M6N8FAGyi , M6N8FAGzi , M6N8FAMxi , M6N8FAMyi , M6N8FAMzi , M6N8FBFxi , M6N8FBFyi , & + M6N8FBFzi , M6N8FBxi , M6N8FByi , M6N8FBzi , M6N8FDxi , M6N8FDyi , M6N8FDzi , & + M6N8FIxi , M6N8FIyi , M6N8FIzi , M6N8FMGxi , M6N8FMGyi , M6N8FMGzi , M6N8MAFxi , & + M6N8MAFyi , M6N8MAFzi , M6N8MAGxi , M6N8MAGyi , M6N8MAGzi , M6N8MBFxi , M6N8MBFyi , & + M6N8MBFzi , M6N8MBxi , M6N8MByi , M6N8MBzi , M6N8MMGxi , M6N8MMGyi , M6N8MMGzi , & + M6N8STAxi , M6N8STAyi , M6N8STAzi , M6N8STVxi , M6N8STVyi , M6N8STVzi , M6N8Vxi , & + M6N8Vyi , M6N8Vzi , M6N9Axi , M6N9Ayi , M6N9Azi , M6N9DynP , M6N9FAFxi , & + M6N9FAFyi , M6N9FAFzi , M6N9FAGxi , M6N9FAGyi , M6N9FAGzi , M6N9FAMxi , M6N9FAMyi , & + M6N9FAMzi , M6N9FBFxi , M6N9FBFyi , M6N9FBFzi , M6N9FBxi , M6N9FByi , M6N9FBzi , & + M6N9FDxi , M6N9FDyi , M6N9FDzi , M6N9FIxi , M6N9FIyi , M6N9FIzi , M6N9FMGxi , & + M6N9FMGyi , M6N9FMGzi , M6N9MAFxi , M6N9MAFyi , M6N9MAFzi , M6N9MAGxi , M6N9MAGyi , & + M6N9MAGzi , M6N9MBFxi , M6N9MBFyi , M6N9MBFzi , M6N9MBxi , M6N9MByi , M6N9MBzi , & + M6N9MMGxi , M6N9MMGyi , M6N9MMGzi , M6N9STAxi , M6N9STAyi , M6N9STAzi , M6N9STVxi , & + M6N9STVyi , M6N9STVzi , M6N9Vxi , M6N9Vyi , M6N9Vzi , M7N1Axi , M7N1Ayi , & + M7N1Azi , M7N1DynP , M7N1FAFxi , M7N1FAFyi , M7N1FAFzi , M7N1FAGxi , M7N1FAGyi , & + M7N1FAGzi , M7N1FAMxi , M7N1FAMyi , M7N1FAMzi , M7N1FBFxi , M7N1FBFyi , M7N1FBFzi , & + M7N1FBxi , M7N1FByi , M7N1FBzi , M7N1FDxi , M7N1FDyi , M7N1FDzi , M7N1FIxi , & + M7N1FIyi , M7N1FIzi , M7N1FMGxi , M7N1FMGyi , M7N1FMGzi , M7N1MAFxi , M7N1MAFyi , & + M7N1MAFzi , M7N1MAGxi , M7N1MAGyi , M7N1MAGzi , M7N1MBFxi , M7N1MBFyi , M7N1MBFzi , & + M7N1MBxi , M7N1MByi , M7N1MBzi , M7N1MMGxi , M7N1MMGyi , M7N1MMGzi , M7N1STAxi , & + M7N1STAyi , M7N1STAzi , M7N1STVxi , M7N1STVyi , M7N1STVzi , M7N1Vxi , M7N1Vyi , & + M7N1Vzi , M7N2Axi , M7N2Ayi , M7N2Azi , M7N2DynP , M7N2FAFxi , M7N2FAFyi , & + M7N2FAFzi , M7N2FAGxi , M7N2FAGyi , M7N2FAGzi , M7N2FAMxi , M7N2FAMyi , M7N2FAMzi , & + M7N2FBFxi , M7N2FBFyi , M7N2FBFzi , M7N2FBxi , M7N2FByi , M7N2FBzi , M7N2FDxi , & + M7N2FDyi , M7N2FDzi , M7N2FIxi , M7N2FIyi , M7N2FIzi , M7N2FMGxi , M7N2FMGyi , & + M7N2FMGzi , M7N2MAFxi , M7N2MAFyi , M7N2MAFzi , M7N2MAGxi , M7N2MAGyi , M7N2MAGzi , & + M7N2MBFxi , M7N2MBFyi , M7N2MBFzi , M7N2MBxi , M7N2MByi , M7N2MBzi , M7N2MMGxi , & + M7N2MMGyi , M7N2MMGzi , M7N2STAxi , M7N2STAyi , M7N2STAzi , M7N2STVxi , M7N2STVyi , & + M7N2STVzi , M7N2Vxi , M7N2Vyi , M7N2Vzi , M7N3Axi , M7N3Ayi , M7N3Azi , & + M7N3DynP , M7N3FAFxi , M7N3FAFyi , M7N3FAFzi , M7N3FAGxi , M7N3FAGyi , M7N3FAGzi , & + M7N3FAMxi , M7N3FAMyi , M7N3FAMzi , M7N3FBFxi , M7N3FBFyi , M7N3FBFzi , M7N3FBxi , & + M7N3FByi , M7N3FBzi , M7N3FDxi , M7N3FDyi , M7N3FDzi , M7N3FIxi , M7N3FIyi , & + M7N3FIzi , M7N3FMGxi , M7N3FMGyi , M7N3FMGzi , M7N3MAFxi , M7N3MAFyi , M7N3MAFzi , & + M7N3MAGxi , M7N3MAGyi , M7N3MAGzi , M7N3MBFxi , M7N3MBFyi , M7N3MBFzi , M7N3MBxi , & + M7N3MByi , M7N3MBzi , M7N3MMGxi , M7N3MMGyi , M7N3MMGzi , M7N3STAxi , M7N3STAyi , & + M7N3STAzi , M7N3STVxi , M7N3STVyi , M7N3STVzi , M7N3Vxi , M7N3Vyi , M7N3Vzi , & + M7N4Axi , M7N4Ayi , M7N4Azi , M7N4DynP , M7N4FAFxi , M7N4FAFyi , M7N4FAFzi , & + M7N4FAGxi , M7N4FAGyi , M7N4FAGzi , M7N4FAMxi , M7N4FAMyi , M7N4FAMzi , M7N4FBFxi , & + M7N4FBFyi , M7N4FBFzi , M7N4FBxi , M7N4FByi , M7N4FBzi , M7N4FDxi , M7N4FDyi , & + M7N4FDzi , M7N4FIxi , M7N4FIyi , M7N4FIzi , M7N4FMGxi , M7N4FMGyi , M7N4FMGzi , & + M7N4MAFxi , M7N4MAFyi , M7N4MAFzi , M7N4MAGxi , M7N4MAGyi , M7N4MAGzi , M7N4MBFxi , & + M7N4MBFyi , M7N4MBFzi , M7N4MBxi , M7N4MByi , M7N4MBzi , M7N4MMGxi , M7N4MMGyi , & + M7N4MMGzi , M7N4STAxi , M7N4STAyi , M7N4STAzi , M7N4STVxi , M7N4STVyi , M7N4STVzi , & + M7N4Vxi , M7N4Vyi , M7N4Vzi , M7N5Axi , M7N5Ayi , M7N5Azi , M7N5DynP , & + M7N5FAFxi , M7N5FAFyi , M7N5FAFzi , M7N5FAGxi , M7N5FAGyi , M7N5FAGzi , M7N5FAMxi , & + M7N5FAMyi , M7N5FAMzi , M7N5FBFxi , M7N5FBFyi , M7N5FBFzi , M7N5FBxi , M7N5FByi , & + M7N5FBzi , M7N5FDxi , M7N5FDyi , M7N5FDzi , M7N5FIxi , M7N5FIyi , M7N5FIzi , & + M7N5FMGxi , M7N5FMGyi , M7N5FMGzi , M7N5MAFxi , M7N5MAFyi , M7N5MAFzi , M7N5MAGxi , & + M7N5MAGyi , M7N5MAGzi , M7N5MBFxi , M7N5MBFyi , M7N5MBFzi , M7N5MBxi , M7N5MByi , & + M7N5MBzi , M7N5MMGxi , M7N5MMGyi , M7N5MMGzi , M7N5STAxi , M7N5STAyi , M7N5STAzi , & + M7N5STVxi , M7N5STVyi , M7N5STVzi , M7N5Vxi , M7N5Vyi , M7N5Vzi , M7N6Axi , & + M7N6Ayi , M7N6Azi , M7N6DynP , M7N6FAFxi , M7N6FAFyi , M7N6FAFzi , M7N6FAGxi , & + M7N6FAGyi , M7N6FAGzi , M7N6FAMxi , M7N6FAMyi , M7N6FAMzi , M7N6FBFxi , M7N6FBFyi , & + M7N6FBFzi , M7N6FBxi , M7N6FByi , M7N6FBzi , M7N6FDxi , M7N6FDyi , M7N6FDzi , & + M7N6FIxi , M7N6FIyi , M7N6FIzi , M7N6FMGxi , M7N6FMGyi , M7N6FMGzi , M7N6MAFxi , & + M7N6MAFyi , M7N6MAFzi , M7N6MAGxi , M7N6MAGyi , M7N6MAGzi , M7N6MBFxi , M7N6MBFyi , & + M7N6MBFzi , M7N6MBxi , M7N6MByi , M7N6MBzi , M7N6MMGxi , M7N6MMGyi , M7N6MMGzi , & + M7N6STAxi , M7N6STAyi , M7N6STAzi , M7N6STVxi , M7N6STVyi , M7N6STVzi , M7N6Vxi , & + M7N6Vyi , M7N6Vzi , M7N7Axi , M7N7Ayi , M7N7Azi , M7N7DynP , M7N7FAFxi , & + M7N7FAFyi , M7N7FAFzi , M7N7FAGxi , M7N7FAGyi , M7N7FAGzi , M7N7FAMxi , M7N7FAMyi , & + M7N7FAMzi , M7N7FBFxi , M7N7FBFyi , M7N7FBFzi , M7N7FBxi , M7N7FByi , M7N7FBzi , & + M7N7FDxi , M7N7FDyi , M7N7FDzi , M7N7FIxi , M7N7FIyi , M7N7FIzi , M7N7FMGxi , & + M7N7FMGyi , M7N7FMGzi , M7N7MAFxi , M7N7MAFyi , M7N7MAFzi , M7N7MAGxi , M7N7MAGyi , & + M7N7MAGzi , M7N7MBFxi , M7N7MBFyi , M7N7MBFzi , M7N7MBxi , M7N7MByi , M7N7MBzi , & + M7N7MMGxi , M7N7MMGyi , M7N7MMGzi , M7N7STAxi , M7N7STAyi , M7N7STAzi , M7N7STVxi , & + M7N7STVyi , M7N7STVzi , M7N7Vxi , M7N7Vyi , M7N7Vzi , M7N8Axi , M7N8Ayi , & + M7N8Azi , M7N8DynP , M7N8FAFxi , M7N8FAFyi , M7N8FAFzi , M7N8FAGxi , M7N8FAGyi , & + M7N8FAGzi , M7N8FAMxi , M7N8FAMyi , M7N8FAMzi , M7N8FBFxi , M7N8FBFyi , M7N8FBFzi , & + M7N8FBxi , M7N8FByi , M7N8FBzi , M7N8FDxi , M7N8FDyi , M7N8FDzi , M7N8FIxi , & + M7N8FIyi , M7N8FIzi , M7N8FMGxi , M7N8FMGyi , M7N8FMGzi , M7N8MAFxi , M7N8MAFyi , & + M7N8MAFzi , M7N8MAGxi , M7N8MAGyi , M7N8MAGzi , M7N8MBFxi , M7N8MBFyi , M7N8MBFzi , & + M7N8MBxi , M7N8MByi , M7N8MBzi , M7N8MMGxi , M7N8MMGyi , M7N8MMGzi , M7N8STAxi , & + M7N8STAyi , M7N8STAzi , M7N8STVxi , M7N8STVyi , M7N8STVzi , M7N8Vxi , M7N8Vyi , & + M7N8Vzi , M7N9Axi , M7N9Ayi , M7N9Azi , M7N9DynP , M7N9FAFxi , M7N9FAFyi , & + M7N9FAFzi , M7N9FAGxi , M7N9FAGyi , M7N9FAGzi , M7N9FAMxi , M7N9FAMyi , M7N9FAMzi , & + M7N9FBFxi , M7N9FBFyi , M7N9FBFzi , M7N9FBxi , M7N9FByi , M7N9FBzi , M7N9FDxi , & + M7N9FDyi , M7N9FDzi , M7N9FIxi , M7N9FIyi , M7N9FIzi , M7N9FMGxi , M7N9FMGyi , & + M7N9FMGzi , M7N9MAFxi , M7N9MAFyi , M7N9MAFzi , M7N9MAGxi , M7N9MAGyi , M7N9MAGzi , & + M7N9MBFxi , M7N9MBFyi , M7N9MBFzi , M7N9MBxi , M7N9MByi , M7N9MBzi , M7N9MMGxi , & + M7N9MMGyi , M7N9MMGzi , M7N9STAxi , M7N9STAyi , M7N9STAzi , M7N9STVxi , M7N9STVyi , & + M7N9STVzi , M7N9Vxi , M7N9Vyi , M7N9Vzi , M8N1Axi , M8N1Ayi , M8N1Azi , & + M8N1DynP , M8N1FAFxi , M8N1FAFyi , M8N1FAFzi , M8N1FAGxi , M8N1FAGyi , M8N1FAGzi , & + M8N1FAMxi , M8N1FAMyi , M8N1FAMzi , M8N1FBFxi , M8N1FBFyi , M8N1FBFzi , M8N1FBxi , & + M8N1FByi , M8N1FBzi , M8N1FDxi , M8N1FDyi , M8N1FDzi , M8N1FIxi , M8N1FIyi , & + M8N1FIzi , M8N1FMGxi , M8N1FMGyi , M8N1FMGzi , M8N1MAFxi , M8N1MAFyi , M8N1MAFzi , & + M8N1MAGxi , M8N1MAGyi , M8N1MAGzi , M8N1MBFxi , M8N1MBFyi , M8N1MBFzi , M8N1MBxi , & + M8N1MByi , M8N1MBzi , M8N1MMGxi , M8N1MMGyi , M8N1MMGzi , M8N1STAxi , M8N1STAyi , & + M8N1STAzi , M8N1STVxi , M8N1STVyi , M8N1STVzi , M8N1Vxi , M8N1Vyi , M8N1Vzi , & + M8N2Axi , M8N2Ayi , M8N2Azi , M8N2DynP , M8N2FAFxi , M8N2FAFyi , M8N2FAFzi , & + M8N2FAGxi , M8N2FAGyi , M8N2FAGzi , M8N2FAMxi , M8N2FAMyi , M8N2FAMzi , M8N2FBFxi , & + M8N2FBFyi , M8N2FBFzi , M8N2FBxi , M8N2FByi , M8N2FBzi , M8N2FDxi , M8N2FDyi , & + M8N2FDzi , M8N2FIxi , M8N2FIyi , M8N2FIzi , M8N2FMGxi , M8N2FMGyi , M8N2FMGzi , & + M8N2MAFxi , M8N2MAFyi , M8N2MAFzi , M8N2MAGxi , M8N2MAGyi , M8N2MAGzi , M8N2MBFxi , & + M8N2MBFyi , M8N2MBFzi , M8N2MBxi , M8N2MByi , M8N2MBzi , M8N2MMGxi , M8N2MMGyi , & + M8N2MMGzi , M8N2STAxi , M8N2STAyi , M8N2STAzi , M8N2STVxi , M8N2STVyi , M8N2STVzi , & + M8N2Vxi , M8N2Vyi , M8N2Vzi , M8N3Axi , M8N3Ayi , M8N3Azi , M8N3DynP , & + M8N3FAFxi , M8N3FAFyi , M8N3FAFzi , M8N3FAGxi , M8N3FAGyi , M8N3FAGzi , M8N3FAMxi , & + M8N3FAMyi , M8N3FAMzi , M8N3FBFxi , M8N3FBFyi , M8N3FBFzi , M8N3FBxi , M8N3FByi , & + M8N3FBzi , M8N3FDxi , M8N3FDyi , M8N3FDzi , M8N3FIxi , M8N3FIyi , M8N3FIzi , & + M8N3FMGxi , M8N3FMGyi , M8N3FMGzi , M8N3MAFxi , M8N3MAFyi , M8N3MAFzi , M8N3MAGxi , & + M8N3MAGyi , M8N3MAGzi , M8N3MBFxi , M8N3MBFyi , M8N3MBFzi , M8N3MBxi , M8N3MByi , & + M8N3MBzi , M8N3MMGxi , M8N3MMGyi , M8N3MMGzi , M8N3STAxi , M8N3STAyi , M8N3STAzi , & + M8N3STVxi , M8N3STVyi , M8N3STVzi , M8N3Vxi , M8N3Vyi , M8N3Vzi , M8N4Axi , & + M8N4Ayi , M8N4Azi , M8N4DynP , M8N4FAFxi , M8N4FAFyi , M8N4FAFzi , M8N4FAGxi , & + M8N4FAGyi , M8N4FAGzi , M8N4FAMxi , M8N4FAMyi , M8N4FAMzi , M8N4FBFxi , M8N4FBFyi , & + M8N4FBFzi , M8N4FBxi , M8N4FByi , M8N4FBzi , M8N4FDxi , M8N4FDyi , M8N4FDzi , & + M8N4FIxi , M8N4FIyi , M8N4FIzi , M8N4FMGxi , M8N4FMGyi , M8N4FMGzi , M8N4MAFxi , & + M8N4MAFyi , M8N4MAFzi , M8N4MAGxi , M8N4MAGyi , M8N4MAGzi , M8N4MBFxi , M8N4MBFyi , & + M8N4MBFzi , M8N4MBxi , M8N4MByi , M8N4MBzi , M8N4MMGxi , M8N4MMGyi , M8N4MMGzi , & + M8N4STAxi , M8N4STAyi , M8N4STAzi , M8N4STVxi , M8N4STVyi , M8N4STVzi , M8N4Vxi , & + M8N4Vyi , M8N4Vzi , M8N5Axi , M8N5Ayi , M8N5Azi , M8N5DynP , M8N5FAFxi , & + M8N5FAFyi , M8N5FAFzi , M8N5FAGxi , M8N5FAGyi , M8N5FAGzi , M8N5FAMxi , M8N5FAMyi , & + M8N5FAMzi , M8N5FBFxi , M8N5FBFyi , M8N5FBFzi , M8N5FBxi , M8N5FByi , M8N5FBzi , & + M8N5FDxi , M8N5FDyi , M8N5FDzi , M8N5FIxi , M8N5FIyi , M8N5FIzi , M8N5FMGxi , & + M8N5FMGyi , M8N5FMGzi , M8N5MAFxi , M8N5MAFyi , M8N5MAFzi , M8N5MAGxi , M8N5MAGyi , & + M8N5MAGzi , M8N5MBFxi , M8N5MBFyi , M8N5MBFzi , M8N5MBxi , M8N5MByi , M8N5MBzi , & + M8N5MMGxi , M8N5MMGyi , M8N5MMGzi , M8N5STAxi , M8N5STAyi , M8N5STAzi , M8N5STVxi , & + M8N5STVyi , M8N5STVzi , M8N5Vxi , M8N5Vyi , M8N5Vzi , M8N6Axi , M8N6Ayi , & + M8N6Azi , M8N6DynP , M8N6FAFxi , M8N6FAFyi , M8N6FAFzi , M8N6FAGxi , M8N6FAGyi , & + M8N6FAGzi , M8N6FAMxi , M8N6FAMyi , M8N6FAMzi , M8N6FBFxi , M8N6FBFyi , M8N6FBFzi , & + M8N6FBxi , M8N6FByi , M8N6FBzi , M8N6FDxi , M8N6FDyi , M8N6FDzi , M8N6FIxi , & + M8N6FIyi , M8N6FIzi , M8N6FMGxi , M8N6FMGyi , M8N6FMGzi , M8N6MAFxi , M8N6MAFyi , & + M8N6MAFzi , M8N6MAGxi , M8N6MAGyi , M8N6MAGzi , M8N6MBFxi , M8N6MBFyi , M8N6MBFzi , & + M8N6MBxi , M8N6MByi , M8N6MBzi , M8N6MMGxi , M8N6MMGyi , M8N6MMGzi , M8N6STAxi , & + M8N6STAyi , M8N6STAzi , M8N6STVxi , M8N6STVyi , M8N6STVzi , M8N6Vxi , M8N6Vyi , & + M8N6Vzi , M8N7Axi , M8N7Ayi , M8N7Azi , M8N7DynP , M8N7FAFxi , M8N7FAFyi , & + M8N7FAFzi , M8N7FAGxi , M8N7FAGyi , M8N7FAGzi , M8N7FAMxi , M8N7FAMyi , M8N7FAMzi , & + M8N7FBFxi , M8N7FBFyi , M8N7FBFzi , M8N7FBxi , M8N7FByi , M8N7FBzi , M8N7FDxi , & + M8N7FDyi , M8N7FDzi , M8N7FIxi , M8N7FIyi , M8N7FIzi , M8N7FMGxi , M8N7FMGyi , & + M8N7FMGzi , M8N7MAFxi , M8N7MAFyi , M8N7MAFzi , M8N7MAGxi , M8N7MAGyi , M8N7MAGzi , & + M8N7MBFxi , M8N7MBFyi , M8N7MBFzi , M8N7MBxi , M8N7MByi , M8N7MBzi , M8N7MMGxi , & + M8N7MMGyi , M8N7MMGzi , M8N7STAxi , M8N7STAyi , M8N7STAzi , M8N7STVxi , M8N7STVyi , & + M8N7STVzi , M8N7Vxi , M8N7Vyi , M8N7Vzi , M8N8Axi , M8N8Ayi , M8N8Azi , & + M8N8DynP , M8N8FAFxi , M8N8FAFyi , M8N8FAFzi , M8N8FAGxi , M8N8FAGyi , M8N8FAGzi , & + M8N8FAMxi , M8N8FAMyi , M8N8FAMzi , M8N8FBFxi , M8N8FBFyi , M8N8FBFzi , M8N8FBxi , & + M8N8FByi , M8N8FBzi , M8N8FDxi , M8N8FDyi , M8N8FDzi , M8N8FIxi , M8N8FIyi , & + M8N8FIzi , M8N8FMGxi , M8N8FMGyi , M8N8FMGzi , M8N8MAFxi , M8N8MAFyi , M8N8MAFzi , & + M8N8MAGxi , M8N8MAGyi , M8N8MAGzi , M8N8MBFxi , M8N8MBFyi , M8N8MBFzi , M8N8MBxi , & + M8N8MByi , M8N8MBzi , M8N8MMGxi , M8N8MMGyi , M8N8MMGzi , M8N8STAxi , M8N8STAyi , & + M8N8STAzi , M8N8STVxi , M8N8STVyi , M8N8STVzi , M8N8Vxi , M8N8Vyi , M8N8Vzi , & + M8N9Axi , M8N9Ayi , M8N9Azi , M8N9DynP , M8N9FAFxi , M8N9FAFyi , M8N9FAFzi , & + M8N9FAGxi , M8N9FAGyi , M8N9FAGzi , M8N9FAMxi , M8N9FAMyi , M8N9FAMzi , M8N9FBFxi , & + M8N9FBFyi , M8N9FBFzi , M8N9FBxi , M8N9FByi , M8N9FBzi , M8N9FDxi , M8N9FDyi , & + M8N9FDzi , M8N9FIxi , M8N9FIyi , M8N9FIzi , M8N9FMGxi , M8N9FMGyi , M8N9FMGzi , & + M8N9MAFxi , M8N9MAFyi , M8N9MAFzi , M8N9MAGxi , M8N9MAGyi , M8N9MAGzi , M8N9MBFxi , & + M8N9MBFyi , M8N9MBFzi , M8N9MBxi , M8N9MByi , M8N9MBzi , M8N9MMGxi , M8N9MMGyi , & + M8N9MMGzi , M8N9STAxi , M8N9STAyi , M8N9STAzi , M8N9STVxi , M8N9STVyi , M8N9STVzi , & + M8N9Vxi , M8N9Vyi , M8N9Vzi , M9N1Axi , M9N1Ayi , M9N1Azi , M9N1DynP , & + M9N1FAFxi , M9N1FAFyi , M9N1FAFzi , M9N1FAGxi , M9N1FAGyi , M9N1FAGzi , M9N1FAMxi , & + M9N1FAMyi , M9N1FAMzi , M9N1FBFxi , M9N1FBFyi , M9N1FBFzi , M9N1FBxi , M9N1FByi , & + M9N1FBzi , M9N1FDxi , M9N1FDyi , M9N1FDzi , M9N1FIxi , M9N1FIyi , M9N1FIzi , & + M9N1FMGxi , M9N1FMGyi , M9N1FMGzi , M9N1MAFxi , M9N1MAFyi , M9N1MAFzi , M9N1MAGxi , & + M9N1MAGyi , M9N1MAGzi , M9N1MBFxi , M9N1MBFyi , M9N1MBFzi , M9N1MBxi , M9N1MByi , & + M9N1MBzi , M9N1MMGxi , M9N1MMGyi , M9N1MMGzi , M9N1STAxi , M9N1STAyi , M9N1STAzi , & + M9N1STVxi , M9N1STVyi , M9N1STVzi , M9N1Vxi , M9N1Vyi , M9N1Vzi , M9N2Axi , & + M9N2Ayi , M9N2Azi , M9N2DynP , M9N2FAFxi , M9N2FAFyi , M9N2FAFzi , M9N2FAGxi , & + M9N2FAGyi , M9N2FAGzi , M9N2FAMxi , M9N2FAMyi , M9N2FAMzi , M9N2FBFxi , M9N2FBFyi , & + M9N2FBFzi , M9N2FBxi , M9N2FByi , M9N2FBzi , M9N2FDxi , M9N2FDyi , M9N2FDzi , & + M9N2FIxi , M9N2FIyi , M9N2FIzi , M9N2FMGxi , M9N2FMGyi , M9N2FMGzi , M9N2MAFxi , & + M9N2MAFyi , M9N2MAFzi , M9N2MAGxi , M9N2MAGyi , M9N2MAGzi , M9N2MBFxi , M9N2MBFyi , & + M9N2MBFzi , M9N2MBxi , M9N2MByi , M9N2MBzi , M9N2MMGxi , M9N2MMGyi , M9N2MMGzi , & + M9N2STAxi , M9N2STAyi , M9N2STAzi , M9N2STVxi , M9N2STVyi , M9N2STVzi , M9N2Vxi , & + M9N2Vyi , M9N2Vzi , M9N3Axi , M9N3Ayi , M9N3Azi , M9N3DynP , M9N3FAFxi , & + M9N3FAFyi , M9N3FAFzi , M9N3FAGxi , M9N3FAGyi , M9N3FAGzi , M9N3FAMxi , M9N3FAMyi , & + M9N3FAMzi , M9N3FBFxi , M9N3FBFyi , M9N3FBFzi , M9N3FBxi , M9N3FByi , M9N3FBzi , & + M9N3FDxi , M9N3FDyi , M9N3FDzi , M9N3FIxi , M9N3FIyi , M9N3FIzi , M9N3FMGxi , & + M9N3FMGyi , M9N3FMGzi , M9N3MAFxi , M9N3MAFyi , M9N3MAFzi , M9N3MAGxi , M9N3MAGyi , & + M9N3MAGzi , M9N3MBFxi , M9N3MBFyi , M9N3MBFzi , M9N3MBxi , M9N3MByi , M9N3MBzi , & + M9N3MMGxi , M9N3MMGyi , M9N3MMGzi , M9N3STAxi , M9N3STAyi , M9N3STAzi , M9N3STVxi , & + M9N3STVyi , M9N3STVzi , M9N3Vxi , M9N3Vyi , M9N3Vzi , M9N4Axi , M9N4Ayi , & + M9N4Azi , M9N4DynP , M9N4FAFxi , M9N4FAFyi , M9N4FAFzi , M9N4FAGxi , M9N4FAGyi , & + M9N4FAGzi , M9N4FAMxi , M9N4FAMyi , M9N4FAMzi , M9N4FBFxi , M9N4FBFyi , M9N4FBFzi , & + M9N4FBxi , M9N4FByi , M9N4FBzi , M9N4FDxi , M9N4FDyi , M9N4FDzi , M9N4FIxi , & + M9N4FIyi , M9N4FIzi , M9N4FMGxi , M9N4FMGyi , M9N4FMGzi , M9N4MAFxi , M9N4MAFyi , & + M9N4MAFzi , M9N4MAGxi , M9N4MAGyi , M9N4MAGzi , M9N4MBFxi , M9N4MBFyi , M9N4MBFzi , & + M9N4MBxi , M9N4MByi , M9N4MBzi , M9N4MMGxi , M9N4MMGyi , M9N4MMGzi , M9N4STAxi , & + M9N4STAyi , M9N4STAzi , M9N4STVxi , M9N4STVyi , M9N4STVzi , M9N4Vxi , M9N4Vyi , & + M9N4Vzi , M9N5Axi , M9N5Ayi , M9N5Azi , M9N5DynP , M9N5FAFxi , M9N5FAFyi , & + M9N5FAFzi , M9N5FAGxi , M9N5FAGyi , M9N5FAGzi , M9N5FAMxi , M9N5FAMyi , M9N5FAMzi , & + M9N5FBFxi , M9N5FBFyi , M9N5FBFzi , M9N5FBxi , M9N5FByi , M9N5FBzi , M9N5FDxi , & + M9N5FDyi , M9N5FDzi , M9N5FIxi , M9N5FIyi , M9N5FIzi , M9N5FMGxi , M9N5FMGyi , & + M9N5FMGzi , M9N5MAFxi , M9N5MAFyi , M9N5MAFzi , M9N5MAGxi , M9N5MAGyi , M9N5MAGzi , & + M9N5MBFxi , M9N5MBFyi , M9N5MBFzi , M9N5MBxi , M9N5MByi , M9N5MBzi , M9N5MMGxi , & + M9N5MMGyi , M9N5MMGzi , M9N5STAxi , M9N5STAyi , M9N5STAzi , M9N5STVxi , M9N5STVyi , & + M9N5STVzi , M9N5Vxi , M9N5Vyi , M9N5Vzi , M9N6Axi , M9N6Ayi , M9N6Azi , & + M9N6DynP , M9N6FAFxi , M9N6FAFyi , M9N6FAFzi , M9N6FAGxi , M9N6FAGyi , M9N6FAGzi , & + M9N6FAMxi , M9N6FAMyi , M9N6FAMzi , M9N6FBFxi , M9N6FBFyi , M9N6FBFzi , M9N6FBxi , & + M9N6FByi , M9N6FBzi , M9N6FDxi , M9N6FDyi , M9N6FDzi , M9N6FIxi , M9N6FIyi , & + M9N6FIzi , M9N6FMGxi , M9N6FMGyi , M9N6FMGzi , M9N6MAFxi , M9N6MAFyi , M9N6MAFzi , & + M9N6MAGxi , M9N6MAGyi , M9N6MAGzi , M9N6MBFxi , M9N6MBFyi , M9N6MBFzi , M9N6MBxi , & + M9N6MByi , M9N6MBzi , M9N6MMGxi , M9N6MMGyi , M9N6MMGzi , M9N6STAxi , M9N6STAyi , & + M9N6STAzi , M9N6STVxi , M9N6STVyi , M9N6STVzi , M9N6Vxi , M9N6Vyi , M9N6Vzi , & + M9N7Axi , M9N7Ayi , M9N7Azi , M9N7DynP , M9N7FAFxi , M9N7FAFyi , M9N7FAFzi , & + M9N7FAGxi , M9N7FAGyi , M9N7FAGzi , M9N7FAMxi , M9N7FAMyi , M9N7FAMzi , M9N7FBFxi , & + M9N7FBFyi , M9N7FBFzi , M9N7FBxi , M9N7FByi , M9N7FBzi , M9N7FDxi , M9N7FDyi , & + M9N7FDzi , M9N7FIxi , M9N7FIyi , M9N7FIzi , M9N7FMGxi , M9N7FMGyi , M9N7FMGzi , & + M9N7MAFxi , M9N7MAFyi , M9N7MAFzi , M9N7MAGxi , M9N7MAGyi , M9N7MAGzi , M9N7MBFxi , & + M9N7MBFyi , M9N7MBFzi , M9N7MBxi , M9N7MByi , M9N7MBzi , M9N7MMGxi , M9N7MMGyi , & + M9N7MMGzi , M9N7STAxi , M9N7STAyi , M9N7STAzi , M9N7STVxi , M9N7STVyi , M9N7STVzi , & + M9N7Vxi , M9N7Vyi , M9N7Vzi , M9N8Axi , M9N8Ayi , M9N8Azi , M9N8DynP , & + M9N8FAFxi , M9N8FAFyi , M9N8FAFzi , M9N8FAGxi , M9N8FAGyi , M9N8FAGzi , M9N8FAMxi , & + M9N8FAMyi , M9N8FAMzi , M9N8FBFxi , M9N8FBFyi , M9N8FBFzi , M9N8FBxi , M9N8FByi , & + M9N8FBzi , M9N8FDxi , M9N8FDyi , M9N8FDzi , M9N8FIxi , M9N8FIyi , M9N8FIzi , & + M9N8FMGxi , M9N8FMGyi , M9N8FMGzi , M9N8MAFxi , M9N8MAFyi , M9N8MAFzi , M9N8MAGxi , & + M9N8MAGyi , M9N8MAGzi , M9N8MBFxi , M9N8MBFyi , M9N8MBFzi , M9N8MBxi , M9N8MByi , & + M9N8MBzi , M9N8MMGxi , M9N8MMGyi , M9N8MMGzi , M9N8STAxi , M9N8STAyi , M9N8STAzi , & + M9N8STVxi , M9N8STVyi , M9N8STVzi , M9N8Vxi , M9N8Vyi , M9N8Vzi , M9N9Axi , & + M9N9Ayi , M9N9Azi , M9N9DynP , M9N9FAFxi , M9N9FAFyi , M9N9FAFzi , M9N9FAGxi , & + M9N9FAGyi , M9N9FAGzi , M9N9FAMxi , M9N9FAMyi , M9N9FAMzi , M9N9FBFxi , M9N9FBFyi , & + M9N9FBFzi , M9N9FBxi , M9N9FByi , M9N9FBzi , M9N9FDxi , M9N9FDyi , M9N9FDzi , & + M9N9FIxi , M9N9FIyi , M9N9FIzi , M9N9FMGxi , M9N9FMGyi , M9N9FMGzi , M9N9MAFxi , & + M9N9MAFyi , M9N9MAFzi , M9N9MAGxi , M9N9MAGyi , M9N9MAGzi , M9N9MBFxi , M9N9MBFyi , & + M9N9MBFzi , M9N9MBxi , M9N9MByi , M9N9MBzi , M9N9MMGxi , M9N9MMGyi , M9N9MMGzi , & + M9N9STAxi , M9N9STAyi , M9N9STAzi , M9N9STVxi , M9N9STVyi , M9N9STVzi , M9N9Vxi , & + M9N9Vyi , M9N9Vzi /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry(4626) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + ParamIndxAry1, ParamIndxAry2, ParamIndxAry3/) +!********************************************************************************************************************************** + + ! ..... Public Subroutines ................................................................................................... PUBLIC :: MrsnOut_MapOutputs - PUBLIC :: MrsnOut_OpenOutput - PUBLIC :: MrsnOut_CloseOutput - PUBLIC :: MrsnOut_WriteOutputNames - PUBLIC :: MrsnOut_WriteOutputUnits - PUBLIC :: MrsnOut_WriteOutputs PUBLIC :: MrsnOut_Init - PUBLIC :: MrsnOut_DestroyParam PUBLIC :: GetMorisonChannels CONTAINS - -!==================================================================================================== -SUBROUTINE SetInvalidOutputs(NMOutputs, MOutLst, NJOutputs, JOutLst, InvalidOutput) -! This subroutine checks the user requested member and joint output lists and sets the unused items to -! invalid. -!---------------------------------------------------------------------------------------------------- - INTEGER, INTENT( IN ) :: NMOutputs - TYPE(Morison_MOutput), INTENT( IN ) :: MOutLst(:) - INTEGER, INTENT( IN ) :: NJOutputs - TYPE(Morison_JOutput), INTENT( IN ) :: JOutLst(:) - LOGICAL, INTENT( INOUT ) :: InvalidOutput(:) - - - -END SUBROUTINE SetInvalidOutputs - !==================================================================================================== -SUBROUTINE MrsnOut_MapOutputs( CurrentTime, y, p, u, m, AllOuts, ErrStat, ErrMsg ) +SUBROUTINE MrsnOut_MapOutputs( y, p, u, m ) ! This subroutine writes the data stored in the y variable to the correct indexed postions in WriteOutput ! This is called by HydroDyn_CalcOutput() at each time step. !---------------------------------------------------------------------------------------------------- - REAL(DbKi), INTENT( IN ) :: CurrentTime ! Current simulation time in seconds TYPE(Morison_OutputType), INTENT( INOUT ) :: y ! Morison module's output data TYPE(Morison_ParameterType), INTENT( IN ) :: p ! Morison module's parameter data TYPE(Morison_InputType), INTENT( IN ) :: u ! Morison module's input data TYPE(Morison_MiscVarType), INTENT( INOUT ) :: m ! Misc/optimization variables - REAL(ReKi), INTENT( OUT ) :: AllOuts(MaxMrsnOutputs) ! Array of output data for all possible outputs - INTEGER(IntKi), INTENT( OUT ) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None INTEGER :: I, J @@ -6439,10 +7790,9 @@ SUBROUTINE MrsnOut_MapOutputs( CurrentTime, y, p, u, m, AllOuts, ErrStat, ErrMsg real(ReKi) :: mult1, mult2 ! Load multiplier for joint nodes vs interior nodes real(ReKi) :: dl ! member element length (m) REAL(ReKi) :: s ! The linear interpolation factor for the requested location + REAL(ReKi) :: AllOuts(MaxOutPts) ! Array of output data for all possible outputs - - ErrStat = ErrID_None - ErrMsg = "" + AllOuts = 0.0_ReKi ! Only generate member-based outputs for the number of user-requested member outputs @@ -6548,6 +7898,9 @@ SUBROUTINE MrsnOut_MapOutputs( CurrentTime, y, p, u, m, AllOuts, ErrStat, ErrMsg AllOuts(JVi (:,I)) = m%FV (1:3,m1) ! fluid velocity AllOuts(JAi (:,I)) = m%FA (1:3,m1) ! fluid acceleration AllOuts(JDynP( I)) = m%FDynP( m1) ! fluid dynamic pressure + AllOuts(JWaveElev( I)) = m%WaveElev( m1) ! total wave elevation + AllOuts(JWaveElev1( I)) = m%WaveElev1( m1) ! 1st order wave elevation effects + AllOuts(JWaveElev2( I)) = m%WaveElev2( m1) ! 2nd order wave elevation effects AllOuts(JSTVi (:,I)) = u%Mesh%TranslationVel(: ,m1) ! structural velocity AllOuts(JSTAi (:,I)) = u%Mesh%TranslationAcc(: ,m1) ! structural acceleration @@ -6564,224 +7917,18 @@ SUBROUTINE MrsnOut_MapOutputs( CurrentTime, y, p, u, m, AllOuts, ErrStat, ErrMsg END DO - - END IF -END SUBROUTINE MrsnOut_MapOutputs - -!==================================================================================================== -SUBROUTINE MrsnOut_OpenOutput( ProgName, OutRootName, p, InitOut, ErrStat, ErrMsg ) -! This subroutine initialized the output module, checking if the output parameter list (OutList) -! contains valid names, and opening the output file if there are any requested outputs -!---------------------------------------------------------------------------------------------------- - - - - ! Passed variables - - CHARACTER(*), INTENT( IN ) :: ProgName - CHARACTER(*), INTENT( IN ) :: OutRootName ! Root name for the output file - TYPE(Morison_ParameterType), INTENT( INOUT ) :: p - TYPE(Morison_InitOutPutType ), INTENT( IN ) :: InitOut ! - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables - INTEGER :: I ! Generic loop counter -! INTEGER :: J ! Generic loop counter -! INTEGER :: Indx ! Counts the current index into the WaveKinNd array - CHARACTER(1024) :: OutFileName ! The name of the output file including the full path. - CHARACTER(200) :: Frmt ! a string to hold a format statement - - !------------------------------------------------------------------------------------------------- - ! Initialize local variables - !------------------------------------------------------------------------------------------------- - - - ErrStat = ErrID_None - ErrMsg = "" - - !TODO Finish error handling - - !------------------------------------------------------------------------------------------------- - ! Open the output file, if necessary, and write the header - !------------------------------------------------------------------------------------------------- - - IF ( ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0 ) THEN ! Output has been requested so let's open an output file - - ! Open the file for output - OutFileName = TRIM(OutRootName)//'.MRSN.out' - CALL GetNewUnit( p%UnOutFile ) - - CALL OpenFOutFile ( p%UnOutFile, OutFileName, ErrStat, ErrMsg ) - IF (ErrStat >=AbortErrLev) RETURN - - - - ! Write the output file header - - WRITE (p%UnOutFile,'(/,A/)', IOSTAT=ErrStat) 'These predictions were generated by '//TRIM(ProgName)//& - ' on '//CurDate()//' at '//CurTime()//'.' - - ! Write the names of the output parameters: - - Frmt = '(A8,'//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' - WRITE(p%UnOutFile,Frmt) TRIM( 'Time' ), ( p%Delim, TRIM( InitOut%WriteOutputHdr(I) ), I=1,p%NumOuts ) - - - - WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) ! write the line return - - - ! Write the units of the output parameters: - - - - WRITE(p%UnOutFile,Frmt) TRIM( 's'), ( p%Delim, TRIM( InitOut%WriteOutputUnt(I) ), I=1,p%NumOuts ) - - - WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) ! write the line return - - - - - END IF ! there are any requested outputs - - RETURN - -END SUBROUTINE MrsnOut_OpenOutput - -!==================================================================================================== - - -!==================================================================================================== -SUBROUTINE MrsnOut_CloseOutput ( p, ErrStat, ErrMsg ) -! This function cleans up after running the HydroDyn output module. It closes the output file, -! releases memory, and resets the number of outputs requested to 0. -!---------------------------------------------------------------------------------------------------- - - ! Passed variables - - TYPE(Morison_ParameterType), INTENT( INOUT ) :: p ! parameter data for this instance of the Morison module - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - -! ! Internal variables - LOGICAL :: Err - - - !------------------------------------------------------------------------------------------------- - ! Initialize error information - !------------------------------------------------------------------------------------------------- - ErrStat = ErrID_None - ErrMsg = "" - Err = .FALSE. - - !------------------------------------------------------------------------------------------------- - ! Close our output file - !------------------------------------------------------------------------------------------------- - CLOSE( p%UnOutFile, IOSTAT = ErrStat ) - IF ( ErrStat /= 0 ) Err = .TRUE. - - - - !------------------------------------------------------------------------------------------------- - ! Make sure ErrStat is non-zero if an error occurred - !------------------------------------------------------------------------------------------------- - IF ( Err ) ErrStat = ErrID_Fatal - - RETURN - -END SUBROUTINE MrsnOut_CloseOutput -!==================================================================================================== - - -SUBROUTINE MrsnOut_WriteOutputNames( UnOutFile, p, ErrStat, ErrMsg ) - - INTEGER, INTENT( IN ) :: UnOutFile ! file unit for the output file - TYPE(Morison_ParameterType), INTENT( IN ) :: p ! Morison module's parameter data - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - CHARACTER(200) :: Frmt ! a string to hold a format statement - INTEGER :: I ! Generic loop counter - - ErrStat = ErrID_None - ErrMsg = "" - - Frmt = '(A8,'//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' - - WRITE(UnOutFile,Frmt) 'Time', ( p%Delim, TRIM( p%OutParam(I)%Name ), I=1,p%NumOuts ) - -END SUBROUTINE MrsnOut_WriteOutputNames - -!==================================================================================================== - - -SUBROUTINE MrsnOut_WriteOutputUnits( UnOutFile, p, ErrStat, ErrMsg ) - - INTEGER, INTENT( IN ) :: UnOutFile ! file unit for the output file - TYPE(Morison_ParameterType), INTENT( IN ) :: p ! Morison module's parameter data - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + ! Put the output data in the WriteOutput array + DO I = 1,p%NumOuts + y%WriteOutput(I) = p%OutParam(I)%SignM * AllOuts( p%OutParam(I)%Indx ) + END DO - CHARACTER(200) :: Frmt ! a string to hold a format statement - INTEGER :: I ! Generic loop counter + END IF ! p%NumOuts > 0 - ErrStat = ErrID_None - ErrMsg = "" - - Frmt = '(A8,'//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' +END SUBROUTINE MrsnOut_MapOutputs - WRITE(UnOutFile,Frmt) '(sec)', ( p%Delim, TRIM( p%OutParam(I)%Units ), I=1,p%NumOuts ) - -END SUBROUTINE MrsnOut_WriteOutputUnits !==================================================================================================== -SUBROUTINE MrsnOut_WriteOutputs( UnOutFile, Time, y, p, ErrStat, ErrMsg ) -! This subroutine writes the data stored in WriteOutputs (and indexed in OutParam) to the file -! opened in MrsnOut_Init() -!---------------------------------------------------------------------------------------------------- - - ! Passed variables - INTEGER, INTENT( IN ) :: UnOutFile ! file unit for the output file - REAL(DbKi), INTENT( IN ) :: Time ! Time for this output - TYPE(Morison_OutputType), INTENT( IN ) :: y ! Morison module's output data - TYPE(Morison_ParameterType), INTENT( IN ) :: p ! Morison module's parameter data - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables - ! REAL(ReKi) :: OutData (0:p%NumOuts) ! an output array - INTEGER :: I ! Generic loop counter - CHARACTER(200) :: Frmt ! a string to hold a format statement - - - - ! Initialize ErrStat and determine if it makes any sense to write output - - IF ( .NOT. ALLOCATED( p%OutParam ) .OR. UnOutFile < 0 ) THEN - ErrStat = ErrID_Warn - ErrMsg = ' To write outputs for HydroDyn there must be a valid file ID and OutParam must be allocated.' - RETURN - ELSE - ErrStat = ErrID_None - ErrMsg = '' - END IF - - - ! Write the output parameters to the file - - Frmt = '(F8.3,'//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutFmt )//'))' - !Frmt = '('//TRIM( p%OutFmt )//','//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutFmt )//'))' - - WRITE(UnOutFile,Frmt) Time, ( p%Delim, y%WriteOutput(I), I=1,p%NumOuts ) - - - RETURN - - -END SUBROUTINE MrsnOut_WriteOutputs SUBROUTINE GetNeighboringNodes(member, d, m1, m2, i1, i2, s, ErrStat, ErrMsg) @@ -6863,25 +8010,18 @@ SUBROUTINE MrsnOut_Init( InitInp, y, p, InitOut, ErrStat, ErrMsg ) ! MrsnOut_Data%NumOuts = HDO_InitData%NumOuts if (p%NumOuts > 0 ) THEN - CALL MrsnOut_ChkOutLst( InitInp%OutList(1:p%NumOuts), InitInp%ValidOutList(1:p%NumOuts), y, p, ErrStat, ErrMsg ) + CALL SetOutParam( InitInp%OutList, p, ErrStat, ErrMsg ) IF ( ErrStat >= AbortErrLev ) RETURN END IF - ! Set the number of outputs related to the OutAll flag - - IF ( InitInp%OutAll ) THEN - ! p%NumOutAll = InitInp%NMember*2*22 + InitInp%NJoints*19 - p%NumOutAll = 0 - ELSE - p%NumOutAll = 0 - END IF + !------------------------------------------------------------------------------------------------- ! Open the output file, if necessary, and write the header !------------------------------------------------------------------------------------------------- - - IF ( InitInp%OutAll .OR. ( ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0 ) ) THEN ! Output has been requested so let's open an output file + + IF ( ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0 ) THEN ! Output has been requested so let's open an output file - ALLOCATE( y%WriteOutput( p%NumOuts + p%NumOutAll ), STAT = ErrStat ) + ALLOCATE( y%WriteOutput( p%NumOuts ), STAT = ErrStat ) IF ( ErrStat /= ErrID_None ) THEN ErrMsg = ' Error allocating space for WriteOutput array.' ErrStat = ErrID_Fatal @@ -6914,14 +8054,14 @@ SUBROUTINE MrsnOut_Init( InitInp, y, p, InitOut, ErrStat, ErrMsg ) ! These variables are to help follow the framework template, but the data in them is simply a copy of data ! already available in the OutParam data structure - ALLOCATE ( InitOut%WriteOutputHdr(p%NumOuts + p%NumOutAll), STAT = ErrStat ) + ALLOCATE ( InitOut%WriteOutputHdr(p%NumOuts), STAT = ErrStat ) IF ( ErrStat /= ErrID_None ) THEN ErrMsg = ' Error allocating space for WriteOutputHdr array.' ErrStat = ErrID_Fatal RETURN END IF - ALLOCATE ( InitOut%WriteOutputUnt(p%NumOuts + p%NumOutAll), STAT = ErrStat ) + ALLOCATE ( InitOut%WriteOutputUnt(p%NumOuts), STAT = ErrStat ) IF ( ErrStat /= ErrID_None ) THEN ErrMsg = ' Error allocating space for WriteOutputHdr array.' ErrStat = ErrID_Fatal @@ -6935,15 +8075,7 @@ SUBROUTINE MrsnOut_Init( InitInp, y, p, InitOut, ErrStat, ErrMsg ) InitOut%WriteOutputHdr(I) = TRIM( p%OutParam(I)%Name ) InitOut%WriteOutputUnt(I) = TRIM( p%OutParam(I)%Units ) - END DO - - IF ( InitInp%OutAll ) THEN - ! Loop over joints - ! J1FDXi, ... - ! Loop over members - ! M1BEGFDXi, M1ENDFDXi, ... - !InitOut%WriteOutputHdr(p%NOuts+count) - END IF + END DO END IF ! there are any requested outputs @@ -6959,7 +8091,7 @@ FUNCTION GetMorisonChannels ( NUserOutputs, UserOutputs, OutList, foundMask !---------------------------------------------------------------------------------------------------- INTEGER, INTENT( IN ) :: NUserOutputs ! Number of user-specified output channels CHARACTER(ChanLen), INTENT( IN ) :: UserOutputs (:) ! An array holding the names of the requested output channels. - CHARACTER(ChanLen), INTENT( OUT ) :: OutList (:) ! An array holding the names of the matched WAMIT output channels. + CHARACTER(ChanLen),ALLOCATABLE,INTENT( OUT ) :: OutList (:) ! An array holding the names of the matched Morison output channels. LOGICAL, INTENT( INOUT ) :: foundMask (:) ! A mask indicating whether a user requested channel belongs to a module's output channels. INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None @@ -6968,2255 +8100,893 @@ FUNCTION GetMorisonChannels ( NUserOutputs, UserOutputs, OutList, foundMask ! Local variables. - INTEGER :: I ! Generic loop-counting index. + INTEGER :: I, J ! Generic loop-counting index. INTEGER :: count ! Generic loop-counting index. INTEGER :: INDX ! Index for valid arrays + INTEGER :: newFoundMask (NUserOutputs) ! A mask indicating whether a user requested channel belongs to a module's output channels - CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I). - CHARACTER(28), PARAMETER :: OutPFmt = "( I4, 3X,A 10,1 X, A10 )" ! Output format parameter output list. -! LOGICAL :: InvalidOutput(MaxMrsnOutputs) ! This array determines if the output channel is valid for this configuration - LOGICAL :: CheckOutListAgain - LOGICAL :: newFoundMask (NUserOutputs) ! A mask indicating whether a user requested channel belongs to a module's output channels. ! Initialize ErrStat - - ErrStat = ErrID_None + ErrStat = ErrID_None ErrMsg = "" - ValidParamAry(1:500) = (/ & - "J1AXI ","J1AYI ","J1AZI ","J1DYNP ","J1FAGXI ","J1FAGYI ","J1FAGZI ", & - "J1FAMXI ","J1FAMYI ","J1FAMZI ","J1FBFXI ","J1FBFYI ","J1FBFZI ","J1FBXI ", & - "J1FBYI ","J1FBZI ","J1FDXI ","J1FDYI ","J1FDZI ","J1FIXI ","J1FIYI ", & - "J1FIZI ","J1FMGXI ","J1FMGYI ","J1FMGZI ","J1MAGXI ","J1MAGYI ","J1MAGZI ", & - "J1MBFXI ","J1MBFYI ","J1MBFZI ","J1MBXI ","J1MBYI ","J1MBZI ","J1STAXI ", & - "J1STAYI ","J1STAZI ","J1STVXI ","J1STVYI ","J1STVZI ","J1VXI ","J1VYI ", & - "J1VZI ","J2AXI ","J2AYI ","J2AZI ","J2DYNP ","J2FAGXI ","J2FAGYI ", & - "J2FAGZI ","J2FAMXI ","J2FAMYI ","J2FAMZI ","J2FBFXI ","J2FBFYI ","J2FBFZI ", & - "J2FBXI ","J2FBYI ","J2FBZI ","J2FDXI ","J2FDYI ","J2FDZI ","J2FIXI ", & - "J2FIYI ","J2FIZI ","J2FMGXI ","J2FMGYI ","J2FMGZI ","J2MAGXI ","J2MAGYI ", & - "J2MAGZI ","J2MBFXI ","J2MBFYI ","J2MBFZI ","J2MBXI ","J2MBYI ","J2MBZI ", & - "J2STAXI ","J2STAYI ","J2STAZI ","J2STVXI ","J2STVYI ","J2STVZI ","J2VXI ", & - "J2VYI ","J2VZI ","J3AXI ","J3AYI ","J3AZI ","J3DYNP ","J3FAGXI ", & - "J3FAGYI ","J3FAGZI ","J3FAMXI ","J3FAMYI ","J3FAMZI ","J3FBFXI ","J3FBFYI ", & - "J3FBFZI ","J3FBXI ","J3FBYI ","J3FBZI ","J3FDXI ","J3FDYI ","J3FDZI ", & - "J3FIXI ","J3FIYI ","J3FIZI ","J3FMGXI ","J3FMGYI ","J3FMGZI ","J3MAGXI ", & - "J3MAGYI ","J3MAGZI ","J3MBFXI ","J3MBFYI ","J3MBFZI ","J3MBXI ","J3MBYI ", & - "J3MBZI ","J3STAXI ","J3STAYI ","J3STAZI ","J3STVXI ","J3STVYI ","J3STVZI ", & - "J3VXI ","J3VYI ","J3VZI ","J4AXI ","J4AYI ","J4AZI ","J4DYNP ", & - "J4FAGXI ","J4FAGYI ","J4FAGZI ","J4FAMXI ","J4FAMYI ","J4FAMZI ","J4FBFXI ", & - "J4FBFYI ","J4FBFZI ","J4FBXI ","J4FBYI ","J4FBZI ","J4FDXI ","J4FDYI ", & - "J4FDZI ","J4FIXI ","J4FIYI ","J4FIZI ","J4FMGXI ","J4FMGYI ","J4FMGZI ", & - "J4MAGXI ","J4MAGYI ","J4MAGZI ","J4MBFXI ","J4MBFYI ","J4MBFZI ","J4MBXI ", & - "J4MBYI ","J4MBZI ","J4STAXI ","J4STAYI ","J4STAZI ","J4STVXI ","J4STVYI ", & - "J4STVZI ","J4VXI ","J4VYI ","J4VZI ","J5AXI ","J5AYI ","J5AZI ", & - "J5DYNP ","J5FAGXI ","J5FAGYI ","J5FAGZI ","J5FAMXI ","J5FAMYI ","J5FAMZI ", & - "J5FBFXI ","J5FBFYI ","J5FBFZI ","J5FBXI ","J5FBYI ","J5FBZI ","J5FDXI ", & - "J5FDYI ","J5FDZI ","J5FIXI ","J5FIYI ","J5FIZI ","J5FMGXI ","J5FMGYI ", & - "J5FMGZI ","J5MAGXI ","J5MAGYI ","J5MAGZI ","J5MBFXI ","J5MBFYI ","J5MBFZI ", & - "J5MBXI ","J5MBYI ","J5MBZI ","J5STAXI ","J5STAYI ","J5STAZI ","J5STVXI ", & - "J5STVYI ","J5STVZI ","J5VXI ","J5VYI ","J5VZI ","J6AXI ","J6AYI ", & - "J6AZI ","J6DYNP ","J6FAGXI ","J6FAGYI ","J6FAGZI ","J6FAMXI ","J6FAMYI ", & - "J6FAMZI ","J6FBFXI ","J6FBFYI ","J6FBFZI ","J6FBXI ","J6FBYI ","J6FBZI ", & - "J6FDXI ","J6FDYI ","J6FDZI ","J6FIXI ","J6FIYI ","J6FIZI ","J6FMGXI ", & - "J6FMGYI ","J6FMGZI ","J6MAGXI ","J6MAGYI ","J6MAGZI ","J6MBFXI ","J6MBFYI ", & - "J6MBFZI ","J6MBXI ","J6MBYI ","J6MBZI ","J6STAXI ","J6STAYI ","J6STAZI ", & - "J6STVXI ","J6STVYI ","J6STVZI ","J6VXI ","J6VYI ","J6VZI ","J7AXI ", & - "J7AYI ","J7AZI ","J7DYNP ","J7FAGXI ","J7FAGYI ","J7FAGZI ","J7FAMXI ", & - "J7FAMYI ","J7FAMZI ","J7FBFXI ","J7FBFYI ","J7FBFZI ","J7FBXI ","J7FBYI ", & - "J7FBZI ","J7FDXI ","J7FDYI ","J7FDZI ","J7FIXI ","J7FIYI ","J7FIZI ", & - "J7FMGXI ","J7FMGYI ","J7FMGZI ","J7MAGXI ","J7MAGYI ","J7MAGZI ","J7MBFXI ", & - "J7MBFYI ","J7MBFZI ","J7MBXI ","J7MBYI ","J7MBZI ","J7STAXI ","J7STAYI ", & - "J7STAZI ","J7STVXI ","J7STVYI ","J7STVZI ","J7VXI ","J7VYI ","J7VZI ", & - "J8AXI ","J8AYI ","J8AZI ","J8DYNP ","J8FAGXI ","J8FAGYI ","J8FAGZI ", & - "J8FAMXI ","J8FAMYI ","J8FAMZI ","J8FBFXI ","J8FBFYI ","J8FBFZI ","J8FBXI ", & - "J8FBYI ","J8FBZI ","J8FDXI ","J8FDYI ","J8FDZI ","J8FIXI ","J8FIYI ", & - "J8FIZI ","J8FMGXI ","J8FMGYI ","J8FMGZI ","J8MAGXI ","J8MAGYI ","J8MAGZI ", & - "J8MBFXI ","J8MBFYI ","J8MBFZI ","J8MBXI ","J8MBYI ","J8MBZI ","J8STAXI ", & - "J8STAYI ","J8STAZI ","J8STVXI ","J8STVYI ","J8STVZI ","J8VXI ","J8VYI ", & - "J8VZI ","J9AXI ","J9AYI ","J9AZI ","J9DYNP ","J9FAGXI ","J9FAGYI ", & - "J9FAGZI ","J9FAMXI ","J9FAMYI ","J9FAMZI ","J9FBFXI ","J9FBFYI ","J9FBFZI ", & - "J9FBXI ","J9FBYI ","J9FBZI ","J9FDXI ","J9FDYI ","J9FDZI ","J9FIXI ", & - "J9FIYI ","J9FIZI ","J9FMGXI ","J9FMGYI ","J9FMGZI ","J9MAGXI ","J9MAGYI ", & - "J9MAGZI ","J9MBFXI ","J9MBFYI ","J9MBFZI ","J9MBXI ","J9MBYI ","J9MBZI ", & - "J9STAXI ","J9STAYI ","J9STAZI ","J9STVXI ","J9STVYI ","J9STVZI ","J9VXI ", & - "J9VYI ","J9VZI ","M1N1AXI ","M1N1AYI ","M1N1AZI ","M1N1DYNP ","M1N1FAFXI", & - "M1N1FAFYI","M1N1FAFZI","M1N1FAGXI","M1N1FAGYI","M1N1FAGZI","M1N1FAMXI","M1N1FAMYI", & - "M1N1FAMZI","M1N1FBFXI","M1N1FBFYI","M1N1FBFZI","M1N1FBXI ","M1N1FBYI ","M1N1FBZI ", & - "M1N1FDXI ","M1N1FDYI ","M1N1FDZI ","M1N1FIXI ","M1N1FIYI ","M1N1FIZI ","M1N1FMGXI", & - "M1N1FMGYI","M1N1FMGZI","M1N1MAFXI","M1N1MAFYI","M1N1MAFZI","M1N1MAGXI","M1N1MAGYI", & - "M1N1MAGZI","M1N1MBFXI","M1N1MBFYI","M1N1MBFZI","M1N1MBXI ","M1N1MBYI ","M1N1MBZI ", & - "M1N1MMGXI","M1N1MMGYI","M1N1MMGZI","M1N1STAXI","M1N1STAYI","M1N1STAZI","M1N1STVXI", & - "M1N1STVYI","M1N1STVZI","M1N1VXI ","M1N1VYI ","M1N1VZI ","M1N2AXI ","M1N2AYI ", & - "M1N2AZI ","M1N2DYNP ","M1N2FAFXI","M1N2FAFYI","M1N2FAFZI","M1N2FAGXI","M1N2FAGYI", & - "M1N2FAGZI","M1N2FAMXI","M1N2FAMYI","M1N2FAMZI","M1N2FBFXI","M1N2FBFYI","M1N2FBFZI", & - "M1N2FBXI ","M1N2FBYI ","M1N2FBZI ","M1N2FDXI ","M1N2FDYI ","M1N2FDZI ","M1N2FIXI ", & - "M1N2FIYI ","M1N2FIZI ","M1N2FMGXI","M1N2FMGYI","M1N2FMGZI","M1N2MAFXI","M1N2MAFYI", & - "M1N2MAFZI","M1N2MAGXI","M1N2MAGYI","M1N2MAGZI","M1N2MBFXI","M1N2MBFYI","M1N2MBFZI", & - "M1N2MBXI ","M1N2MBYI ","M1N2MBZI ","M1N2MMGXI","M1N2MMGYI","M1N2MMGZI","M1N2STAXI", & - "M1N2STAYI","M1N2STAZI","M1N2STVXI","M1N2STVYI","M1N2STVZI","M1N2VXI ","M1N2VYI ", & - "M1N2VZI ","M1N3AXI ","M1N3AYI ","M1N3AZI ","M1N3DYNP ","M1N3FAFXI","M1N3FAFYI", & - "M1N3FAFZI","M1N3FAGXI","M1N3FAGYI"/) - ValidParamAry(501:1000) = (/ & - "M1N3FAGZI","M1N3FAMXI","M1N3FAMYI","M1N3FAMZI","M1N3FBFXI","M1N3FBFYI","M1N3FBFZI", & - "M1N3FBXI ","M1N3FBYI ","M1N3FBZI ","M1N3FDXI ","M1N3FDYI ","M1N3FDZI ","M1N3FIXI ", & - "M1N3FIYI ","M1N3FIZI ","M1N3FMGXI","M1N3FMGYI","M1N3FMGZI","M1N3MAFXI","M1N3MAFYI", & - "M1N3MAFZI","M1N3MAGXI","M1N3MAGYI","M1N3MAGZI","M1N3MBFXI","M1N3MBFYI","M1N3MBFZI", & - "M1N3MBXI ","M1N3MBYI ","M1N3MBZI ","M1N3MMGXI","M1N3MMGYI","M1N3MMGZI","M1N3STAXI", & - "M1N3STAYI","M1N3STAZI","M1N3STVXI","M1N3STVYI","M1N3STVZI","M1N3VXI ","M1N3VYI ", & - "M1N3VZI ","M1N4AXI ","M1N4AYI ","M1N4AZI ","M1N4DYNP ","M1N4FAFXI","M1N4FAFYI", & - "M1N4FAFZI","M1N4FAGXI","M1N4FAGYI","M1N4FAGZI","M1N4FAMXI","M1N4FAMYI","M1N4FAMZI", & - "M1N4FBFXI","M1N4FBFYI","M1N4FBFZI","M1N4FBXI ","M1N4FBYI ","M1N4FBZI ","M1N4FDXI ", & - "M1N4FDYI ","M1N4FDZI ","M1N4FIXI ","M1N4FIYI ","M1N4FIZI ","M1N4FMGXI","M1N4FMGYI", & - "M1N4FMGZI","M1N4MAFXI","M1N4MAFYI","M1N4MAFZI","M1N4MAGXI","M1N4MAGYI","M1N4MAGZI", & - "M1N4MBFXI","M1N4MBFYI","M1N4MBFZI","M1N4MBXI ","M1N4MBYI ","M1N4MBZI ","M1N4MMGXI", & - "M1N4MMGYI","M1N4MMGZI","M1N4STAXI","M1N4STAYI","M1N4STAZI","M1N4STVXI","M1N4STVYI", & - "M1N4STVZI","M1N4VXI ","M1N4VYI ","M1N4VZI ","M1N5AXI ","M1N5AYI ","M1N5AZI ", & - "M1N5DYNP ","M1N5FAFXI","M1N5FAFYI","M1N5FAFZI","M1N5FAGXI","M1N5FAGYI","M1N5FAGZI", & - "M1N5FAMXI","M1N5FAMYI","M1N5FAMZI","M1N5FBFXI","M1N5FBFYI","M1N5FBFZI","M1N5FBXI ", & - "M1N5FBYI ","M1N5FBZI ","M1N5FDXI ","M1N5FDYI ","M1N5FDZI ","M1N5FIXI ","M1N5FIYI ", & - "M1N5FIZI ","M1N5FMGXI","M1N5FMGYI","M1N5FMGZI","M1N5MAFXI","M1N5MAFYI","M1N5MAFZI", & - "M1N5MAGXI","M1N5MAGYI","M1N5MAGZI","M1N5MBFXI","M1N5MBFYI","M1N5MBFZI","M1N5MBXI ", & - "M1N5MBYI ","M1N5MBZI ","M1N5MMGXI","M1N5MMGYI","M1N5MMGZI","M1N5STAXI","M1N5STAYI", & - "M1N5STAZI","M1N5STVXI","M1N5STVYI","M1N5STVZI","M1N5VXI ","M1N5VYI ","M1N5VZI ", & - "M1N6AXI ","M1N6AYI ","M1N6AZI ","M1N6DYNP ","M1N6FAFXI","M1N6FAFYI","M1N6FAFZI", & - "M1N6FAGXI","M1N6FAGYI","M1N6FAGZI","M1N6FAMXI","M1N6FAMYI","M1N6FAMZI","M1N6FBFXI", & - "M1N6FBFYI","M1N6FBFZI","M1N6FBXI ","M1N6FBYI ","M1N6FBZI ","M1N6FDXI ","M1N6FDYI ", & - "M1N6FDZI ","M1N6FIXI ","M1N6FIYI ","M1N6FIZI ","M1N6FMGXI","M1N6FMGYI","M1N6FMGZI", & - "M1N6MAFXI","M1N6MAFYI","M1N6MAFZI","M1N6MAGXI","M1N6MAGYI","M1N6MAGZI","M1N6MBFXI", & - "M1N6MBFYI","M1N6MBFZI","M1N6MBXI ","M1N6MBYI ","M1N6MBZI ","M1N6MMGXI","M1N6MMGYI", & - "M1N6MMGZI","M1N6STAXI","M1N6STAYI","M1N6STAZI","M1N6STVXI","M1N6STVYI","M1N6STVZI", & - "M1N6VXI ","M1N6VYI ","M1N6VZI ","M1N7AXI ","M1N7AYI ","M1N7AZI ","M1N7DYNP ", & - "M1N7FAFXI","M1N7FAFYI","M1N7FAFZI","M1N7FAGXI","M1N7FAGYI","M1N7FAGZI","M1N7FAMXI", & - "M1N7FAMYI","M1N7FAMZI","M1N7FBFXI","M1N7FBFYI","M1N7FBFZI","M1N7FBXI ","M1N7FBYI ", & - "M1N7FBZI ","M1N7FDXI ","M1N7FDYI ","M1N7FDZI ","M1N7FIXI ","M1N7FIYI ","M1N7FIZI ", & - "M1N7FMGXI","M1N7FMGYI","M1N7FMGZI","M1N7MAFXI","M1N7MAFYI","M1N7MAFZI","M1N7MAGXI", & - "M1N7MAGYI","M1N7MAGZI","M1N7MBFXI","M1N7MBFYI","M1N7MBFZI","M1N7MBXI ","M1N7MBYI ", & - "M1N7MBZI ","M1N7MMGXI","M1N7MMGYI","M1N7MMGZI","M1N7STAXI","M1N7STAYI","M1N7STAZI", & - "M1N7STVXI","M1N7STVYI","M1N7STVZI","M1N7VXI ","M1N7VYI ","M1N7VZI ","M1N8AXI ", & - "M1N8AYI ","M1N8AZI ","M1N8DYNP ","M1N8FAFXI","M1N8FAFYI","M1N8FAFZI","M1N8FAGXI", & - "M1N8FAGYI","M1N8FAGZI","M1N8FAMXI","M1N8FAMYI","M1N8FAMZI","M1N8FBFXI","M1N8FBFYI", & - "M1N8FBFZI","M1N8FBXI ","M1N8FBYI ","M1N8FBZI ","M1N8FDXI ","M1N8FDYI ","M1N8FDZI ", & - "M1N8FIXI ","M1N8FIYI ","M1N8FIZI ","M1N8FMGXI","M1N8FMGYI","M1N8FMGZI","M1N8MAFXI", & - "M1N8MAFYI","M1N8MAFZI","M1N8MAGXI","M1N8MAGYI","M1N8MAGZI","M1N8MBFXI","M1N8MBFYI", & - "M1N8MBFZI","M1N8MBXI ","M1N8MBYI ","M1N8MBZI ","M1N8MMGXI","M1N8MMGYI","M1N8MMGZI", & - "M1N8STAXI","M1N8STAYI","M1N8STAZI","M1N8STVXI","M1N8STVYI","M1N8STVZI","M1N8VXI ", & - "M1N8VYI ","M1N8VZI ","M1N9AXI ","M1N9AYI ","M1N9AZI ","M1N9DYNP ","M1N9FAFXI", & - "M1N9FAFYI","M1N9FAFZI","M1N9FAGXI","M1N9FAGYI","M1N9FAGZI","M1N9FAMXI","M1N9FAMYI", & - "M1N9FAMZI","M1N9FBFXI","M1N9FBFYI","M1N9FBFZI","M1N9FBXI ","M1N9FBYI ","M1N9FBZI ", & - "M1N9FDXI ","M1N9FDYI ","M1N9FDZI ","M1N9FIXI ","M1N9FIYI ","M1N9FIZI ","M1N9FMGXI", & - "M1N9FMGYI","M1N9FMGZI","M1N9MAFXI","M1N9MAFYI","M1N9MAFZI","M1N9MAGXI","M1N9MAGYI", & - "M1N9MAGZI","M1N9MBFXI","M1N9MBFYI","M1N9MBFZI","M1N9MBXI ","M1N9MBYI ","M1N9MBZI ", & - "M1N9MMGXI","M1N9MMGYI","M1N9MMGZI","M1N9STAXI","M1N9STAYI","M1N9STAZI","M1N9STVXI", & - "M1N9STVYI","M1N9STVZI","M1N9VXI ","M1N9VYI ","M1N9VZI ","M2N1AXI ","M2N1AYI ", & - "M2N1AZI ","M2N1DYNP ","M2N1FAFXI","M2N1FAFYI","M2N1FAFZI","M2N1FAGXI","M2N1FAGYI", & - "M2N1FAGZI","M2N1FAMXI","M2N1FAMYI","M2N1FAMZI","M2N1FBFXI","M2N1FBFYI","M2N1FBFZI", & - "M2N1FBXI ","M2N1FBYI ","M2N1FBZI ","M2N1FDXI ","M2N1FDYI ","M2N1FDZI ","M2N1FIXI ", & - "M2N1FIYI ","M2N1FIZI ","M2N1FMGXI","M2N1FMGYI","M2N1FMGZI","M2N1MAFXI","M2N1MAFYI", & - "M2N1MAFZI","M2N1MAGXI","M2N1MAGYI","M2N1MAGZI","M2N1MBFXI","M2N1MBFYI","M2N1MBFZI", & - "M2N1MBXI ","M2N1MBYI ","M2N1MBZI ","M2N1MMGXI","M2N1MMGYI","M2N1MMGZI","M2N1STAXI", & - "M2N1STAYI","M2N1STAZI","M2N1STVXI","M2N1STVYI","M2N1STVZI","M2N1VXI ","M2N1VYI ", & - "M2N1VZI ","M2N2AXI ","M2N2AYI ","M2N2AZI ","M2N2DYNP ","M2N2FAFXI","M2N2FAFYI", & - "M2N2FAFZI","M2N2FAGXI","M2N2FAGYI","M2N2FAGZI","M2N2FAMXI","M2N2FAMYI","M2N2FAMZI", & - "M2N2FBFXI","M2N2FBFYI","M2N2FBFZI","M2N2FBXI ","M2N2FBYI ","M2N2FBZI ","M2N2FDXI ", & - "M2N2FDYI ","M2N2FDZI ","M2N2FIXI ","M2N2FIYI ","M2N2FIZI ","M2N2FMGXI","M2N2FMGYI", & - "M2N2FMGZI","M2N2MAFXI","M2N2MAFYI","M2N2MAFZI","M2N2MAGXI","M2N2MAGYI","M2N2MAGZI", & - "M2N2MBFXI","M2N2MBFYI","M2N2MBFZI","M2N2MBXI ","M2N2MBYI ","M2N2MBZI ","M2N2MMGXI", & - "M2N2MMGYI","M2N2MMGZI","M2N2STAXI","M2N2STAYI","M2N2STAZI","M2N2STVXI","M2N2STVYI", & - "M2N2STVZI","M2N2VXI ","M2N2VYI ","M2N2VZI ","M2N3AXI ","M2N3AYI ","M2N3AZI ", & - "M2N3DYNP ","M2N3FAFXI","M2N3FAFYI","M2N3FAFZI","M2N3FAGXI","M2N3FAGYI","M2N3FAGZI", & - "M2N3FAMXI","M2N3FAMYI","M2N3FAMZI","M2N3FBFXI","M2N3FBFYI","M2N3FBFZI","M2N3FBXI ", & - "M2N3FBYI ","M2N3FBZI ","M2N3FDXI ","M2N3FDYI ","M2N3FDZI ","M2N3FIXI ","M2N3FIYI ", & - "M2N3FIZI ","M2N3FMGXI","M2N3FMGYI","M2N3FMGZI","M2N3MAFXI","M2N3MAFYI","M2N3MAFZI", & - "M2N3MAGXI","M2N3MAGYI","M2N3MAGZI","M2N3MBFXI","M2N3MBFYI","M2N3MBFZI","M2N3MBXI ", & - "M2N3MBYI ","M2N3MBZI ","M2N3MMGXI"/) - ValidParamAry(1001:1500) = (/ & - "M2N3MMGYI","M2N3MMGZI","M2N3STAXI","M2N3STAYI","M2N3STAZI","M2N3STVXI","M2N3STVYI", & - "M2N3STVZI","M2N3VXI ","M2N3VYI ","M2N3VZI ","M2N4AXI ","M2N4AYI ","M2N4AZI ", & - "M2N4DYNP ","M2N4FAFXI","M2N4FAFYI","M2N4FAFZI","M2N4FAGXI","M2N4FAGYI","M2N4FAGZI", & - "M2N4FAMXI","M2N4FAMYI","M2N4FAMZI","M2N4FBFXI","M2N4FBFYI","M2N4FBFZI","M2N4FBXI ", & - "M2N4FBYI ","M2N4FBZI ","M2N4FDXI ","M2N4FDYI ","M2N4FDZI ","M2N4FIXI ","M2N4FIYI ", & - "M2N4FIZI ","M2N4FMGXI","M2N4FMGYI","M2N4FMGZI","M2N4MAFXI","M2N4MAFYI","M2N4MAFZI", & - "M2N4MAGXI","M2N4MAGYI","M2N4MAGZI","M2N4MBFXI","M2N4MBFYI","M2N4MBFZI","M2N4MBXI ", & - "M2N4MBYI ","M2N4MBZI ","M2N4MMGXI","M2N4MMGYI","M2N4MMGZI","M2N4STAXI","M2N4STAYI", & - "M2N4STAZI","M2N4STVXI","M2N4STVYI","M2N4STVZI","M2N4VXI ","M2N4VYI ","M2N4VZI ", & - "M2N5AXI ","M2N5AYI ","M2N5AZI ","M2N5DYNP ","M2N5FAFXI","M2N5FAFYI","M2N5FAFZI", & - "M2N5FAGXI","M2N5FAGYI","M2N5FAGZI","M2N5FAMXI","M2N5FAMYI","M2N5FAMZI","M2N5FBFXI", & - "M2N5FBFYI","M2N5FBFZI","M2N5FBXI ","M2N5FBYI ","M2N5FBZI ","M2N5FDXI ","M2N5FDYI ", & - "M2N5FDZI ","M2N5FIXI ","M2N5FIYI ","M2N5FIZI ","M2N5FMGXI","M2N5FMGYI","M2N5FMGZI", & - "M2N5MAFXI","M2N5MAFYI","M2N5MAFZI","M2N5MAGXI","M2N5MAGYI","M2N5MAGZI","M2N5MBFXI", & - "M2N5MBFYI","M2N5MBFZI","M2N5MBXI ","M2N5MBYI ","M2N5MBZI ","M2N5MMGXI","M2N5MMGYI", & - "M2N5MMGZI","M2N5STAXI","M2N5STAYI","M2N5STAZI","M2N5STVXI","M2N5STVYI","M2N5STVZI", & - "M2N5VXI ","M2N5VYI ","M2N5VZI ","M2N6AXI ","M2N6AYI ","M2N6AZI ","M2N6DYNP ", & - "M2N6FAFXI","M2N6FAFYI","M2N6FAFZI","M2N6FAGXI","M2N6FAGYI","M2N6FAGZI","M2N6FAMXI", & - "M2N6FAMYI","M2N6FAMZI","M2N6FBFXI","M2N6FBFYI","M2N6FBFZI","M2N6FBXI ","M2N6FBYI ", & - "M2N6FBZI ","M2N6FDXI ","M2N6FDYI ","M2N6FDZI ","M2N6FIXI ","M2N6FIYI ","M2N6FIZI ", & - "M2N6FMGXI","M2N6FMGYI","M2N6FMGZI","M2N6MAFXI","M2N6MAFYI","M2N6MAFZI","M2N6MAGXI", & - "M2N6MAGYI","M2N6MAGZI","M2N6MBFXI","M2N6MBFYI","M2N6MBFZI","M2N6MBXI ","M2N6MBYI ", & - "M2N6MBZI ","M2N6MMGXI","M2N6MMGYI","M2N6MMGZI","M2N6STAXI","M2N6STAYI","M2N6STAZI", & - "M2N6STVXI","M2N6STVYI","M2N6STVZI","M2N6VXI ","M2N6VYI ","M2N6VZI ","M2N7AXI ", & - "M2N7AYI ","M2N7AZI ","M2N7DYNP ","M2N7FAFXI","M2N7FAFYI","M2N7FAFZI","M2N7FAGXI", & - "M2N7FAGYI","M2N7FAGZI","M2N7FAMXI","M2N7FAMYI","M2N7FAMZI","M2N7FBFXI","M2N7FBFYI", & - "M2N7FBFZI","M2N7FBXI ","M2N7FBYI ","M2N7FBZI ","M2N7FDXI ","M2N7FDYI ","M2N7FDZI ", & - "M2N7FIXI ","M2N7FIYI ","M2N7FIZI ","M2N7FMGXI","M2N7FMGYI","M2N7FMGZI","M2N7MAFXI", & - "M2N7MAFYI","M2N7MAFZI","M2N7MAGXI","M2N7MAGYI","M2N7MAGZI","M2N7MBFXI","M2N7MBFYI", & - "M2N7MBFZI","M2N7MBXI ","M2N7MBYI ","M2N7MBZI ","M2N7MMGXI","M2N7MMGYI","M2N7MMGZI", & - "M2N7STAXI","M2N7STAYI","M2N7STAZI","M2N7STVXI","M2N7STVYI","M2N7STVZI","M2N7VXI ", & - "M2N7VYI ","M2N7VZI ","M2N8AXI ","M2N8AYI ","M2N8AZI ","M2N8DYNP ","M2N8FAFXI", & - "M2N8FAFYI","M2N8FAFZI","M2N8FAGXI","M2N8FAGYI","M2N8FAGZI","M2N8FAMXI","M2N8FAMYI", & - "M2N8FAMZI","M2N8FBFXI","M2N8FBFYI","M2N8FBFZI","M2N8FBXI ","M2N8FBYI ","M2N8FBZI ", & - "M2N8FDXI ","M2N8FDYI ","M2N8FDZI ","M2N8FIXI ","M2N8FIYI ","M2N8FIZI ","M2N8FMGXI", & - "M2N8FMGYI","M2N8FMGZI","M2N8MAFXI","M2N8MAFYI","M2N8MAFZI","M2N8MAGXI","M2N8MAGYI", & - "M2N8MAGZI","M2N8MBFXI","M2N8MBFYI","M2N8MBFZI","M2N8MBXI ","M2N8MBYI ","M2N8MBZI ", & - "M2N8MMGXI","M2N8MMGYI","M2N8MMGZI","M2N8STAXI","M2N8STAYI","M2N8STAZI","M2N8STVXI", & - "M2N8STVYI","M2N8STVZI","M2N8VXI ","M2N8VYI ","M2N8VZI ","M2N9AXI ","M2N9AYI ", & - "M2N9AZI ","M2N9DYNP ","M2N9FAFXI","M2N9FAFYI","M2N9FAFZI","M2N9FAGXI","M2N9FAGYI", & - "M2N9FAGZI","M2N9FAMXI","M2N9FAMYI","M2N9FAMZI","M2N9FBFXI","M2N9FBFYI","M2N9FBFZI", & - "M2N9FBXI ","M2N9FBYI ","M2N9FBZI ","M2N9FDXI ","M2N9FDYI ","M2N9FDZI ","M2N9FIXI ", & - "M2N9FIYI ","M2N9FIZI ","M2N9FMGXI","M2N9FMGYI","M2N9FMGZI","M2N9MAFXI","M2N9MAFYI", & - "M2N9MAFZI","M2N9MAGXI","M2N9MAGYI","M2N9MAGZI","M2N9MBFXI","M2N9MBFYI","M2N9MBFZI", & - "M2N9MBXI ","M2N9MBYI ","M2N9MBZI ","M2N9MMGXI","M2N9MMGYI","M2N9MMGZI","M2N9STAXI", & - "M2N9STAYI","M2N9STAZI","M2N9STVXI","M2N9STVYI","M2N9STVZI","M2N9VXI ","M2N9VYI ", & - "M2N9VZI ","M3N1AXI ","M3N1AYI ","M3N1AZI ","M3N1DYNP ","M3N1FAFXI","M3N1FAFYI", & - "M3N1FAFZI","M3N1FAGXI","M3N1FAGYI","M3N1FAGZI","M3N1FAMXI","M3N1FAMYI","M3N1FAMZI", & - "M3N1FBFXI","M3N1FBFYI","M3N1FBFZI","M3N1FBXI ","M3N1FBYI ","M3N1FBZI ","M3N1FDXI ", & - "M3N1FDYI ","M3N1FDZI ","M3N1FIXI ","M3N1FIYI ","M3N1FIZI ","M3N1FMGXI","M3N1FMGYI", & - "M3N1FMGZI","M3N1MAFXI","M3N1MAFYI","M3N1MAFZI","M3N1MAGXI","M3N1MAGYI","M3N1MAGZI", & - "M3N1MBFXI","M3N1MBFYI","M3N1MBFZI","M3N1MBXI ","M3N1MBYI ","M3N1MBZI ","M3N1MMGXI", & - "M3N1MMGYI","M3N1MMGZI","M3N1STAXI","M3N1STAYI","M3N1STAZI","M3N1STVXI","M3N1STVYI", & - "M3N1STVZI","M3N1VXI ","M3N1VYI ","M3N1VZI ","M3N2AXI ","M3N2AYI ","M3N2AZI ", & - "M3N2DYNP ","M3N2FAFXI","M3N2FAFYI","M3N2FAFZI","M3N2FAGXI","M3N2FAGYI","M3N2FAGZI", & - "M3N2FAMXI","M3N2FAMYI","M3N2FAMZI","M3N2FBFXI","M3N2FBFYI","M3N2FBFZI","M3N2FBXI ", & - "M3N2FBYI ","M3N2FBZI ","M3N2FDXI ","M3N2FDYI ","M3N2FDZI ","M3N2FIXI ","M3N2FIYI ", & - "M3N2FIZI ","M3N2FMGXI","M3N2FMGYI","M3N2FMGZI","M3N2MAFXI","M3N2MAFYI","M3N2MAFZI", & - "M3N2MAGXI","M3N2MAGYI","M3N2MAGZI","M3N2MBFXI","M3N2MBFYI","M3N2MBFZI","M3N2MBXI ", & - "M3N2MBYI ","M3N2MBZI ","M3N2MMGXI","M3N2MMGYI","M3N2MMGZI","M3N2STAXI","M3N2STAYI", & - "M3N2STAZI","M3N2STVXI","M3N2STVYI","M3N2STVZI","M3N2VXI ","M3N2VYI ","M3N2VZI ", & - "M3N3AXI ","M3N3AYI ","M3N3AZI ","M3N3DYNP ","M3N3FAFXI","M3N3FAFYI","M3N3FAFZI", & - "M3N3FAGXI","M3N3FAGYI","M3N3FAGZI","M3N3FAMXI","M3N3FAMYI","M3N3FAMZI","M3N3FBFXI", & - "M3N3FBFYI","M3N3FBFZI","M3N3FBXI ","M3N3FBYI ","M3N3FBZI ","M3N3FDXI ","M3N3FDYI ", & - "M3N3FDZI ","M3N3FIXI ","M3N3FIYI ","M3N3FIZI ","M3N3FMGXI","M3N3FMGYI","M3N3FMGZI", & - "M3N3MAFXI","M3N3MAFYI","M3N3MAFZI","M3N3MAGXI","M3N3MAGYI","M3N3MAGZI","M3N3MBFXI", & - "M3N3MBFYI","M3N3MBFZI","M3N3MBXI ","M3N3MBYI ","M3N3MBZI ","M3N3MMGXI","M3N3MMGYI", & - "M3N3MMGZI","M3N3STAXI","M3N3STAYI","M3N3STAZI","M3N3STVXI","M3N3STVYI","M3N3STVZI", & - "M3N3VXI ","M3N3VYI ","M3N3VZI ","M3N4AXI ","M3N4AYI ","M3N4AZI ","M3N4DYNP ", & - "M3N4FAFXI","M3N4FAFYI","M3N4FAFZI","M3N4FAGXI","M3N4FAGYI","M3N4FAGZI","M3N4FAMXI", & - "M3N4FAMYI","M3N4FAMZI","M3N4FBFXI","M3N4FBFYI","M3N4FBFZI","M3N4FBXI ","M3N4FBYI ", & - "M3N4FBZI ","M3N4FDXI ","M3N4FDYI "/) - ValidParamAry(1501:2000) = (/ & - "M3N4FDZI ","M3N4FIXI ","M3N4FIYI ","M3N4FIZI ","M3N4FMGXI","M3N4FMGYI","M3N4FMGZI", & - "M3N4MAFXI","M3N4MAFYI","M3N4MAFZI","M3N4MAGXI","M3N4MAGYI","M3N4MAGZI","M3N4MBFXI", & - "M3N4MBFYI","M3N4MBFZI","M3N4MBXI ","M3N4MBYI ","M3N4MBZI ","M3N4MMGXI","M3N4MMGYI", & - "M3N4MMGZI","M3N4STAXI","M3N4STAYI","M3N4STAZI","M3N4STVXI","M3N4STVYI","M3N4STVZI", & - "M3N4VXI ","M3N4VYI ","M3N4VZI ","M3N5AXI ","M3N5AYI ","M3N5AZI ","M3N5DYNP ", & - "M3N5FAFXI","M3N5FAFYI","M3N5FAFZI","M3N5FAGXI","M3N5FAGYI","M3N5FAGZI","M3N5FAMXI", & - "M3N5FAMYI","M3N5FAMZI","M3N5FBFXI","M3N5FBFYI","M3N5FBFZI","M3N5FBXI ","M3N5FBYI ", & - "M3N5FBZI ","M3N5FDXI ","M3N5FDYI ","M3N5FDZI ","M3N5FIXI ","M3N5FIYI ","M3N5FIZI ", & - "M3N5FMGXI","M3N5FMGYI","M3N5FMGZI","M3N5MAFXI","M3N5MAFYI","M3N5MAFZI","M3N5MAGXI", & - "M3N5MAGYI","M3N5MAGZI","M3N5MBFXI","M3N5MBFYI","M3N5MBFZI","M3N5MBXI ","M3N5MBYI ", & - "M3N5MBZI ","M3N5MMGXI","M3N5MMGYI","M3N5MMGZI","M3N5STAXI","M3N5STAYI","M3N5STAZI", & - "M3N5STVXI","M3N5STVYI","M3N5STVZI","M3N5VXI ","M3N5VYI ","M3N5VZI ","M3N6AXI ", & - "M3N6AYI ","M3N6AZI ","M3N6DYNP ","M3N6FAFXI","M3N6FAFYI","M3N6FAFZI","M3N6FAGXI", & - "M3N6FAGYI","M3N6FAGZI","M3N6FAMXI","M3N6FAMYI","M3N6FAMZI","M3N6FBFXI","M3N6FBFYI", & - "M3N6FBFZI","M3N6FBXI ","M3N6FBYI ","M3N6FBZI ","M3N6FDXI ","M3N6FDYI ","M3N6FDZI ", & - "M3N6FIXI ","M3N6FIYI ","M3N6FIZI ","M3N6FMGXI","M3N6FMGYI","M3N6FMGZI","M3N6MAFXI", & - "M3N6MAFYI","M3N6MAFZI","M3N6MAGXI","M3N6MAGYI","M3N6MAGZI","M3N6MBFXI","M3N6MBFYI", & - "M3N6MBFZI","M3N6MBXI ","M3N6MBYI ","M3N6MBZI ","M3N6MMGXI","M3N6MMGYI","M3N6MMGZI", & - "M3N6STAXI","M3N6STAYI","M3N6STAZI","M3N6STVXI","M3N6STVYI","M3N6STVZI","M3N6VXI ", & - "M3N6VYI ","M3N6VZI ","M3N7AXI ","M3N7AYI ","M3N7AZI ","M3N7DYNP ","M3N7FAFXI", & - "M3N7FAFYI","M3N7FAFZI","M3N7FAGXI","M3N7FAGYI","M3N7FAGZI","M3N7FAMXI","M3N7FAMYI", & - "M3N7FAMZI","M3N7FBFXI","M3N7FBFYI","M3N7FBFZI","M3N7FBXI ","M3N7FBYI ","M3N7FBZI ", & - "M3N7FDXI ","M3N7FDYI ","M3N7FDZI ","M3N7FIXI ","M3N7FIYI ","M3N7FIZI ","M3N7FMGXI", & - "M3N7FMGYI","M3N7FMGZI","M3N7MAFXI","M3N7MAFYI","M3N7MAFZI","M3N7MAGXI","M3N7MAGYI", & - "M3N7MAGZI","M3N7MBFXI","M3N7MBFYI","M3N7MBFZI","M3N7MBXI ","M3N7MBYI ","M3N7MBZI ", & - "M3N7MMGXI","M3N7MMGYI","M3N7MMGZI","M3N7STAXI","M3N7STAYI","M3N7STAZI","M3N7STVXI", & - "M3N7STVYI","M3N7STVZI","M3N7VXI ","M3N7VYI ","M3N7VZI ","M3N8AXI ","M3N8AYI ", & - "M3N8AZI ","M3N8DYNP ","M3N8FAFXI","M3N8FAFYI","M3N8FAFZI","M3N8FAGXI","M3N8FAGYI", & - "M3N8FAGZI","M3N8FAMXI","M3N8FAMYI","M3N8FAMZI","M3N8FBFXI","M3N8FBFYI","M3N8FBFZI", & - "M3N8FBXI ","M3N8FBYI ","M3N8FBZI ","M3N8FDXI ","M3N8FDYI ","M3N8FDZI ","M3N8FIXI ", & - "M3N8FIYI ","M3N8FIZI ","M3N8FMGXI","M3N8FMGYI","M3N8FMGZI","M3N8MAFXI","M3N8MAFYI", & - "M3N8MAFZI","M3N8MAGXI","M3N8MAGYI","M3N8MAGZI","M3N8MBFXI","M3N8MBFYI","M3N8MBFZI", & - "M3N8MBXI ","M3N8MBYI ","M3N8MBZI ","M3N8MMGXI","M3N8MMGYI","M3N8MMGZI","M3N8STAXI", & - "M3N8STAYI","M3N8STAZI","M3N8STVXI","M3N8STVYI","M3N8STVZI","M3N8VXI ","M3N8VYI ", & - "M3N8VZI ","M3N9AXI ","M3N9AYI ","M3N9AZI ","M3N9DYNP ","M3N9FAFXI","M3N9FAFYI", & - "M3N9FAFZI","M3N9FAGXI","M3N9FAGYI","M3N9FAGZI","M3N9FAMXI","M3N9FAMYI","M3N9FAMZI", & - "M3N9FBFXI","M3N9FBFYI","M3N9FBFZI","M3N9FBXI ","M3N9FBYI ","M3N9FBZI ","M3N9FDXI ", & - "M3N9FDYI ","M3N9FDZI ","M3N9FIXI ","M3N9FIYI ","M3N9FIZI ","M3N9FMGXI","M3N9FMGYI", & - "M3N9FMGZI","M3N9MAFXI","M3N9MAFYI","M3N9MAFZI","M3N9MAGXI","M3N9MAGYI","M3N9MAGZI", & - "M3N9MBFXI","M3N9MBFYI","M3N9MBFZI","M3N9MBXI ","M3N9MBYI ","M3N9MBZI ","M3N9MMGXI", & - "M3N9MMGYI","M3N9MMGZI","M3N9STAXI","M3N9STAYI","M3N9STAZI","M3N9STVXI","M3N9STVYI", & - "M3N9STVZI","M3N9VXI ","M3N9VYI ","M3N9VZI ","M4N1AXI ","M4N1AYI ","M4N1AZI ", & - "M4N1DYNP ","M4N1FAFXI","M4N1FAFYI","M4N1FAFZI","M4N1FAGXI","M4N1FAGYI","M4N1FAGZI", & - "M4N1FAMXI","M4N1FAMYI","M4N1FAMZI","M4N1FBFXI","M4N1FBFYI","M4N1FBFZI","M4N1FBXI ", & - "M4N1FBYI ","M4N1FBZI ","M4N1FDXI ","M4N1FDYI ","M4N1FDZI ","M4N1FIXI ","M4N1FIYI ", & - "M4N1FIZI ","M4N1FMGXI","M4N1FMGYI","M4N1FMGZI","M4N1MAFXI","M4N1MAFYI","M4N1MAFZI", & - "M4N1MAGXI","M4N1MAGYI","M4N1MAGZI","M4N1MBFXI","M4N1MBFYI","M4N1MBFZI","M4N1MBXI ", & - "M4N1MBYI ","M4N1MBZI ","M4N1MMGXI","M4N1MMGYI","M4N1MMGZI","M4N1STAXI","M4N1STAYI", & - "M4N1STAZI","M4N1STVXI","M4N1STVYI","M4N1STVZI","M4N1VXI ","M4N1VYI ","M4N1VZI ", & - "M4N2AXI ","M4N2AYI ","M4N2AZI ","M4N2DYNP ","M4N2FAFXI","M4N2FAFYI","M4N2FAFZI", & - "M4N2FAGXI","M4N2FAGYI","M4N2FAGZI","M4N2FAMXI","M4N2FAMYI","M4N2FAMZI","M4N2FBFXI", & - "M4N2FBFYI","M4N2FBFZI","M4N2FBXI ","M4N2FBYI ","M4N2FBZI ","M4N2FDXI ","M4N2FDYI ", & - "M4N2FDZI ","M4N2FIXI ","M4N2FIYI ","M4N2FIZI ","M4N2FMGXI","M4N2FMGYI","M4N2FMGZI", & - "M4N2MAFXI","M4N2MAFYI","M4N2MAFZI","M4N2MAGXI","M4N2MAGYI","M4N2MAGZI","M4N2MBFXI", & - "M4N2MBFYI","M4N2MBFZI","M4N2MBXI ","M4N2MBYI ","M4N2MBZI ","M4N2MMGXI","M4N2MMGYI", & - "M4N2MMGZI","M4N2STAXI","M4N2STAYI","M4N2STAZI","M4N2STVXI","M4N2STVYI","M4N2STVZI", & - "M4N2VXI ","M4N2VYI ","M4N2VZI ","M4N3AXI ","M4N3AYI ","M4N3AZI ","M4N3DYNP ", & - "M4N3FAFXI","M4N3FAFYI","M4N3FAFZI","M4N3FAGXI","M4N3FAGYI","M4N3FAGZI","M4N3FAMXI", & - "M4N3FAMYI","M4N3FAMZI","M4N3FBFXI","M4N3FBFYI","M4N3FBFZI","M4N3FBXI ","M4N3FBYI ", & - "M4N3FBZI ","M4N3FDXI ","M4N3FDYI ","M4N3FDZI ","M4N3FIXI ","M4N3FIYI ","M4N3FIZI ", & - "M4N3FMGXI","M4N3FMGYI","M4N3FMGZI","M4N3MAFXI","M4N3MAFYI","M4N3MAFZI","M4N3MAGXI", & - "M4N3MAGYI","M4N3MAGZI","M4N3MBFXI","M4N3MBFYI","M4N3MBFZI","M4N3MBXI ","M4N3MBYI ", & - "M4N3MBZI ","M4N3MMGXI","M4N3MMGYI","M4N3MMGZI","M4N3STAXI","M4N3STAYI","M4N3STAZI", & - "M4N3STVXI","M4N3STVYI","M4N3STVZI","M4N3VXI ","M4N3VYI ","M4N3VZI ","M4N4AXI ", & - "M4N4AYI ","M4N4AZI ","M4N4DYNP ","M4N4FAFXI","M4N4FAFYI","M4N4FAFZI","M4N4FAGXI", & - "M4N4FAGYI","M4N4FAGZI","M4N4FAMXI","M4N4FAMYI","M4N4FAMZI","M4N4FBFXI","M4N4FBFYI", & - "M4N4FBFZI","M4N4FBXI ","M4N4FBYI ","M4N4FBZI ","M4N4FDXI ","M4N4FDYI ","M4N4FDZI ", & - "M4N4FIXI ","M4N4FIYI ","M4N4FIZI ","M4N4FMGXI","M4N4FMGYI","M4N4FMGZI","M4N4MAFXI", & - "M4N4MAFYI","M4N4MAFZI","M4N4MAGXI","M4N4MAGYI","M4N4MAGZI","M4N4MBFXI","M4N4MBFYI", & - "M4N4MBFZI","M4N4MBXI ","M4N4MBYI ","M4N4MBZI ","M4N4MMGXI","M4N4MMGYI","M4N4MMGZI", & - "M4N4STAXI","M4N4STAYI","M4N4STAZI","M4N4STVXI","M4N4STVYI","M4N4STVZI","M4N4VXI ", & - "M4N4VYI ","M4N4VZI ","M4N5AXI "/) - ValidParamAry(2001:2500) = (/ & - "M4N5AYI ","M4N5AZI ","M4N5DYNP ","M4N5FAFXI","M4N5FAFYI","M4N5FAFZI","M4N5FAGXI", & - "M4N5FAGYI","M4N5FAGZI","M4N5FAMXI","M4N5FAMYI","M4N5FAMZI","M4N5FBFXI","M4N5FBFYI", & - "M4N5FBFZI","M4N5FBXI ","M4N5FBYI ","M4N5FBZI ","M4N5FDXI ","M4N5FDYI ","M4N5FDZI ", & - "M4N5FIXI ","M4N5FIYI ","M4N5FIZI ","M4N5FMGXI","M4N5FMGYI","M4N5FMGZI","M4N5MAFXI", & - "M4N5MAFYI","M4N5MAFZI","M4N5MAGXI","M4N5MAGYI","M4N5MAGZI","M4N5MBFXI","M4N5MBFYI", & - "M4N5MBFZI","M4N5MBXI ","M4N5MBYI ","M4N5MBZI ","M4N5MMGXI","M4N5MMGYI","M4N5MMGZI", & - "M4N5STAXI","M4N5STAYI","M4N5STAZI","M4N5STVXI","M4N5STVYI","M4N5STVZI","M4N5VXI ", & - "M4N5VYI ","M4N5VZI ","M4N6AXI ","M4N6AYI ","M4N6AZI ","M4N6DYNP ","M4N6FAFXI", & - "M4N6FAFYI","M4N6FAFZI","M4N6FAGXI","M4N6FAGYI","M4N6FAGZI","M4N6FAMXI","M4N6FAMYI", & - "M4N6FAMZI","M4N6FBFXI","M4N6FBFYI","M4N6FBFZI","M4N6FBXI ","M4N6FBYI ","M4N6FBZI ", & - "M4N6FDXI ","M4N6FDYI ","M4N6FDZI ","M4N6FIXI ","M4N6FIYI ","M4N6FIZI ","M4N6FMGXI", & - "M4N6FMGYI","M4N6FMGZI","M4N6MAFXI","M4N6MAFYI","M4N6MAFZI","M4N6MAGXI","M4N6MAGYI", & - "M4N6MAGZI","M4N6MBFXI","M4N6MBFYI","M4N6MBFZI","M4N6MBXI ","M4N6MBYI ","M4N6MBZI ", & - "M4N6MMGXI","M4N6MMGYI","M4N6MMGZI","M4N6STAXI","M4N6STAYI","M4N6STAZI","M4N6STVXI", & - "M4N6STVYI","M4N6STVZI","M4N6VXI ","M4N6VYI ","M4N6VZI ","M4N7AXI ","M4N7AYI ", & - "M4N7AZI ","M4N7DYNP ","M4N7FAFXI","M4N7FAFYI","M4N7FAFZI","M4N7FAGXI","M4N7FAGYI", & - "M4N7FAGZI","M4N7FAMXI","M4N7FAMYI","M4N7FAMZI","M4N7FBFXI","M4N7FBFYI","M4N7FBFZI", & - "M4N7FBXI ","M4N7FBYI ","M4N7FBZI ","M4N7FDXI ","M4N7FDYI ","M4N7FDZI ","M4N7FIXI ", & - "M4N7FIYI ","M4N7FIZI ","M4N7FMGXI","M4N7FMGYI","M4N7FMGZI","M4N7MAFXI","M4N7MAFYI", & - "M4N7MAFZI","M4N7MAGXI","M4N7MAGYI","M4N7MAGZI","M4N7MBFXI","M4N7MBFYI","M4N7MBFZI", & - "M4N7MBXI ","M4N7MBYI ","M4N7MBZI ","M4N7MMGXI","M4N7MMGYI","M4N7MMGZI","M4N7STAXI", & - "M4N7STAYI","M4N7STAZI","M4N7STVXI","M4N7STVYI","M4N7STVZI","M4N7VXI ","M4N7VYI ", & - "M4N7VZI ","M4N8AXI ","M4N8AYI ","M4N8AZI ","M4N8DYNP ","M4N8FAFXI","M4N8FAFYI", & - "M4N8FAFZI","M4N8FAGXI","M4N8FAGYI","M4N8FAGZI","M4N8FAMXI","M4N8FAMYI","M4N8FAMZI", & - "M4N8FBFXI","M4N8FBFYI","M4N8FBFZI","M4N8FBXI ","M4N8FBYI ","M4N8FBZI ","M4N8FDXI ", & - "M4N8FDYI ","M4N8FDZI ","M4N8FIXI ","M4N8FIYI ","M4N8FIZI ","M4N8FMGXI","M4N8FMGYI", & - "M4N8FMGZI","M4N8MAFXI","M4N8MAFYI","M4N8MAFZI","M4N8MAGXI","M4N8MAGYI","M4N8MAGZI", & - "M4N8MBFXI","M4N8MBFYI","M4N8MBFZI","M4N8MBXI ","M4N8MBYI ","M4N8MBZI ","M4N8MMGXI", & - "M4N8MMGYI","M4N8MMGZI","M4N8STAXI","M4N8STAYI","M4N8STAZI","M4N8STVXI","M4N8STVYI", & - "M4N8STVZI","M4N8VXI ","M4N8VYI ","M4N8VZI ","M4N9AXI ","M4N9AYI ","M4N9AZI ", & - "M4N9DYNP ","M4N9FAFXI","M4N9FAFYI","M4N9FAFZI","M4N9FAGXI","M4N9FAGYI","M4N9FAGZI", & - "M4N9FAMXI","M4N9FAMYI","M4N9FAMZI","M4N9FBFXI","M4N9FBFYI","M4N9FBFZI","M4N9FBXI ", & - "M4N9FBYI ","M4N9FBZI ","M4N9FDXI ","M4N9FDYI ","M4N9FDZI ","M4N9FIXI ","M4N9FIYI ", & - "M4N9FIZI ","M4N9FMGXI","M4N9FMGYI","M4N9FMGZI","M4N9MAFXI","M4N9MAFYI","M4N9MAFZI", & - "M4N9MAGXI","M4N9MAGYI","M4N9MAGZI","M4N9MBFXI","M4N9MBFYI","M4N9MBFZI","M4N9MBXI ", & - "M4N9MBYI ","M4N9MBZI ","M4N9MMGXI","M4N9MMGYI","M4N9MMGZI","M4N9STAXI","M4N9STAYI", & - "M4N9STAZI","M4N9STVXI","M4N9STVYI","M4N9STVZI","M4N9VXI ","M4N9VYI ","M4N9VZI ", & - "M5N1AXI ","M5N1AYI ","M5N1AZI ","M5N1DYNP ","M5N1FAFXI","M5N1FAFYI","M5N1FAFZI", & - "M5N1FAGXI","M5N1FAGYI","M5N1FAGZI","M5N1FAMXI","M5N1FAMYI","M5N1FAMZI","M5N1FBFXI", & - "M5N1FBFYI","M5N1FBFZI","M5N1FBXI ","M5N1FBYI ","M5N1FBZI ","M5N1FDXI ","M5N1FDYI ", & - "M5N1FDZI ","M5N1FIXI ","M5N1FIYI ","M5N1FIZI ","M5N1FMGXI","M5N1FMGYI","M5N1FMGZI", & - "M5N1MAFXI","M5N1MAFYI","M5N1MAFZI","M5N1MAGXI","M5N1MAGYI","M5N1MAGZI","M5N1MBFXI", & - "M5N1MBFYI","M5N1MBFZI","M5N1MBXI ","M5N1MBYI ","M5N1MBZI ","M5N1MMGXI","M5N1MMGYI", & - "M5N1MMGZI","M5N1STAXI","M5N1STAYI","M5N1STAZI","M5N1STVXI","M5N1STVYI","M5N1STVZI", & - "M5N1VXI ","M5N1VYI ","M5N1VZI ","M5N2AXI ","M5N2AYI ","M5N2AZI ","M5N2DYNP ", & - "M5N2FAFXI","M5N2FAFYI","M5N2FAFZI","M5N2FAGXI","M5N2FAGYI","M5N2FAGZI","M5N2FAMXI", & - "M5N2FAMYI","M5N2FAMZI","M5N2FBFXI","M5N2FBFYI","M5N2FBFZI","M5N2FBXI ","M5N2FBYI ", & - "M5N2FBZI ","M5N2FDXI ","M5N2FDYI ","M5N2FDZI ","M5N2FIXI ","M5N2FIYI ","M5N2FIZI ", & - "M5N2FMGXI","M5N2FMGYI","M5N2FMGZI","M5N2MAFXI","M5N2MAFYI","M5N2MAFZI","M5N2MAGXI", & - "M5N2MAGYI","M5N2MAGZI","M5N2MBFXI","M5N2MBFYI","M5N2MBFZI","M5N2MBXI ","M5N2MBYI ", & - "M5N2MBZI ","M5N2MMGXI","M5N2MMGYI","M5N2MMGZI","M5N2STAXI","M5N2STAYI","M5N2STAZI", & - "M5N2STVXI","M5N2STVYI","M5N2STVZI","M5N2VXI ","M5N2VYI ","M5N2VZI ","M5N3AXI ", & - "M5N3AYI ","M5N3AZI ","M5N3DYNP ","M5N3FAFXI","M5N3FAFYI","M5N3FAFZI","M5N3FAGXI", & - "M5N3FAGYI","M5N3FAGZI","M5N3FAMXI","M5N3FAMYI","M5N3FAMZI","M5N3FBFXI","M5N3FBFYI", & - "M5N3FBFZI","M5N3FBXI ","M5N3FBYI ","M5N3FBZI ","M5N3FDXI ","M5N3FDYI ","M5N3FDZI ", & - "M5N3FIXI ","M5N3FIYI ","M5N3FIZI ","M5N3FMGXI","M5N3FMGYI","M5N3FMGZI","M5N3MAFXI", & - "M5N3MAFYI","M5N3MAFZI","M5N3MAGXI","M5N3MAGYI","M5N3MAGZI","M5N3MBFXI","M5N3MBFYI", & - "M5N3MBFZI","M5N3MBXI ","M5N3MBYI ","M5N3MBZI ","M5N3MMGXI","M5N3MMGYI","M5N3MMGZI", & - "M5N3STAXI","M5N3STAYI","M5N3STAZI","M5N3STVXI","M5N3STVYI","M5N3STVZI","M5N3VXI ", & - "M5N3VYI ","M5N3VZI ","M5N4AXI ","M5N4AYI ","M5N4AZI ","M5N4DYNP ","M5N4FAFXI", & - "M5N4FAFYI","M5N4FAFZI","M5N4FAGXI","M5N4FAGYI","M5N4FAGZI","M5N4FAMXI","M5N4FAMYI", & - "M5N4FAMZI","M5N4FBFXI","M5N4FBFYI","M5N4FBFZI","M5N4FBXI ","M5N4FBYI ","M5N4FBZI ", & - "M5N4FDXI ","M5N4FDYI ","M5N4FDZI ","M5N4FIXI ","M5N4FIYI ","M5N4FIZI ","M5N4FMGXI", & - "M5N4FMGYI","M5N4FMGZI","M5N4MAFXI","M5N4MAFYI","M5N4MAFZI","M5N4MAGXI","M5N4MAGYI", & - "M5N4MAGZI","M5N4MBFXI","M5N4MBFYI","M5N4MBFZI","M5N4MBXI ","M5N4MBYI ","M5N4MBZI ", & - "M5N4MMGXI","M5N4MMGYI","M5N4MMGZI","M5N4STAXI","M5N4STAYI","M5N4STAZI","M5N4STVXI", & - "M5N4STVYI","M5N4STVZI","M5N4VXI ","M5N4VYI ","M5N4VZI ","M5N5AXI ","M5N5AYI ", & - "M5N5AZI ","M5N5DYNP ","M5N5FAFXI","M5N5FAFYI","M5N5FAFZI","M5N5FAGXI","M5N5FAGYI", & - "M5N5FAGZI","M5N5FAMXI","M5N5FAMYI","M5N5FAMZI","M5N5FBFXI","M5N5FBFYI","M5N5FBFZI", & - "M5N5FBXI ","M5N5FBYI ","M5N5FBZI ","M5N5FDXI ","M5N5FDYI ","M5N5FDZI ","M5N5FIXI ", & - "M5N5FIYI ","M5N5FIZI ","M5N5FMGXI","M5N5FMGYI","M5N5FMGZI","M5N5MAFXI","M5N5MAFYI", & - "M5N5MAFZI","M5N5MAGXI","M5N5MAGYI"/) - ValidParamAry(2501:3000) = (/ & - "M5N5MAGZI","M5N5MBFXI","M5N5MBFYI","M5N5MBFZI","M5N5MBXI ","M5N5MBYI ","M5N5MBZI ", & - "M5N5MMGXI","M5N5MMGYI","M5N5MMGZI","M5N5STAXI","M5N5STAYI","M5N5STAZI","M5N5STVXI", & - "M5N5STVYI","M5N5STVZI","M5N5VXI ","M5N5VYI ","M5N5VZI ","M5N6AXI ","M5N6AYI ", & - "M5N6AZI ","M5N6DYNP ","M5N6FAFXI","M5N6FAFYI","M5N6FAFZI","M5N6FAGXI","M5N6FAGYI", & - "M5N6FAGZI","M5N6FAMXI","M5N6FAMYI","M5N6FAMZI","M5N6FBFXI","M5N6FBFYI","M5N6FBFZI", & - "M5N6FBXI ","M5N6FBYI ","M5N6FBZI ","M5N6FDXI ","M5N6FDYI ","M5N6FDZI ","M5N6FIXI ", & - "M5N6FIYI ","M5N6FIZI ","M5N6FMGXI","M5N6FMGYI","M5N6FMGZI","M5N6MAFXI","M5N6MAFYI", & - "M5N6MAFZI","M5N6MAGXI","M5N6MAGYI","M5N6MAGZI","M5N6MBFXI","M5N6MBFYI","M5N6MBFZI", & - "M5N6MBXI ","M5N6MBYI ","M5N6MBZI ","M5N6MMGXI","M5N6MMGYI","M5N6MMGZI","M5N6STAXI", & - "M5N6STAYI","M5N6STAZI","M5N6STVXI","M5N6STVYI","M5N6STVZI","M5N6VXI ","M5N6VYI ", & - "M5N6VZI ","M5N7AXI ","M5N7AYI ","M5N7AZI ","M5N7DYNP ","M5N7FAFXI","M5N7FAFYI", & - "M5N7FAFZI","M5N7FAGXI","M5N7FAGYI","M5N7FAGZI","M5N7FAMXI","M5N7FAMYI","M5N7FAMZI", & - "M5N7FBFXI","M5N7FBFYI","M5N7FBFZI","M5N7FBXI ","M5N7FBYI ","M5N7FBZI ","M5N7FDXI ", & - "M5N7FDYI ","M5N7FDZI ","M5N7FIXI ","M5N7FIYI ","M5N7FIZI ","M5N7FMGXI","M5N7FMGYI", & - "M5N7FMGZI","M5N7MAFXI","M5N7MAFYI","M5N7MAFZI","M5N7MAGXI","M5N7MAGYI","M5N7MAGZI", & - "M5N7MBFXI","M5N7MBFYI","M5N7MBFZI","M5N7MBXI ","M5N7MBYI ","M5N7MBZI ","M5N7MMGXI", & - "M5N7MMGYI","M5N7MMGZI","M5N7STAXI","M5N7STAYI","M5N7STAZI","M5N7STVXI","M5N7STVYI", & - "M5N7STVZI","M5N7VXI ","M5N7VYI ","M5N7VZI ","M5N8AXI ","M5N8AYI ","M5N8AZI ", & - "M5N8DYNP ","M5N8FAFXI","M5N8FAFYI","M5N8FAFZI","M5N8FAGXI","M5N8FAGYI","M5N8FAGZI", & - "M5N8FAMXI","M5N8FAMYI","M5N8FAMZI","M5N8FBFXI","M5N8FBFYI","M5N8FBFZI","M5N8FBXI ", & - "M5N8FBYI ","M5N8FBZI ","M5N8FDXI ","M5N8FDYI ","M5N8FDZI ","M5N8FIXI ","M5N8FIYI ", & - "M5N8FIZI ","M5N8FMGXI","M5N8FMGYI","M5N8FMGZI","M5N8MAFXI","M5N8MAFYI","M5N8MAFZI", & - "M5N8MAGXI","M5N8MAGYI","M5N8MAGZI","M5N8MBFXI","M5N8MBFYI","M5N8MBFZI","M5N8MBXI ", & - "M5N8MBYI ","M5N8MBZI ","M5N8MMGXI","M5N8MMGYI","M5N8MMGZI","M5N8STAXI","M5N8STAYI", & - "M5N8STAZI","M5N8STVXI","M5N8STVYI","M5N8STVZI","M5N8VXI ","M5N8VYI ","M5N8VZI ", & - "M5N9AXI ","M5N9AYI ","M5N9AZI ","M5N9DYNP ","M5N9FAFXI","M5N9FAFYI","M5N9FAFZI", & - "M5N9FAGXI","M5N9FAGYI","M5N9FAGZI","M5N9FAMXI","M5N9FAMYI","M5N9FAMZI","M5N9FBFXI", & - "M5N9FBFYI","M5N9FBFZI","M5N9FBXI ","M5N9FBYI ","M5N9FBZI ","M5N9FDXI ","M5N9FDYI ", & - "M5N9FDZI ","M5N9FIXI ","M5N9FIYI ","M5N9FIZI ","M5N9FMGXI","M5N9FMGYI","M5N9FMGZI", & - "M5N9MAFXI","M5N9MAFYI","M5N9MAFZI","M5N9MAGXI","M5N9MAGYI","M5N9MAGZI","M5N9MBFXI", & - "M5N9MBFYI","M5N9MBFZI","M5N9MBXI ","M5N9MBYI ","M5N9MBZI ","M5N9MMGXI","M5N9MMGYI", & - "M5N9MMGZI","M5N9STAXI","M5N9STAYI","M5N9STAZI","M5N9STVXI","M5N9STVYI","M5N9STVZI", & - "M5N9VXI ","M5N9VYI ","M5N9VZI ","M6N1AXI ","M6N1AYI ","M6N1AZI ","M6N1DYNP ", & - "M6N1FAFXI","M6N1FAFYI","M6N1FAFZI","M6N1FAGXI","M6N1FAGYI","M6N1FAGZI","M6N1FAMXI", & - "M6N1FAMYI","M6N1FAMZI","M6N1FBFXI","M6N1FBFYI","M6N1FBFZI","M6N1FBXI ","M6N1FBYI ", & - "M6N1FBZI ","M6N1FDXI ","M6N1FDYI ","M6N1FDZI ","M6N1FIXI ","M6N1FIYI ","M6N1FIZI ", & - "M6N1FMGXI","M6N1FMGYI","M6N1FMGZI","M6N1MAFXI","M6N1MAFYI","M6N1MAFZI","M6N1MAGXI", & - "M6N1MAGYI","M6N1MAGZI","M6N1MBFXI","M6N1MBFYI","M6N1MBFZI","M6N1MBXI ","M6N1MBYI ", & - "M6N1MBZI ","M6N1MMGXI","M6N1MMGYI","M6N1MMGZI","M6N1STAXI","M6N1STAYI","M6N1STAZI", & - "M6N1STVXI","M6N1STVYI","M6N1STVZI","M6N1VXI ","M6N1VYI ","M6N1VZI ","M6N2AXI ", & - "M6N2AYI ","M6N2AZI ","M6N2DYNP ","M6N2FAFXI","M6N2FAFYI","M6N2FAFZI","M6N2FAGXI", & - "M6N2FAGYI","M6N2FAGZI","M6N2FAMXI","M6N2FAMYI","M6N2FAMZI","M6N2FBFXI","M6N2FBFYI", & - "M6N2FBFZI","M6N2FBXI ","M6N2FBYI ","M6N2FBZI ","M6N2FDXI ","M6N2FDYI ","M6N2FDZI ", & - "M6N2FIXI ","M6N2FIYI ","M6N2FIZI ","M6N2FMGXI","M6N2FMGYI","M6N2FMGZI","M6N2MAFXI", & - "M6N2MAFYI","M6N2MAFZI","M6N2MAGXI","M6N2MAGYI","M6N2MAGZI","M6N2MBFXI","M6N2MBFYI", & - "M6N2MBFZI","M6N2MBXI ","M6N2MBYI ","M6N2MBZI ","M6N2MMGXI","M6N2MMGYI","M6N2MMGZI", & - "M6N2STAXI","M6N2STAYI","M6N2STAZI","M6N2STVXI","M6N2STVYI","M6N2STVZI","M6N2VXI ", & - "M6N2VYI ","M6N2VZI ","M6N3AXI ","M6N3AYI ","M6N3AZI ","M6N3DYNP ","M6N3FAFXI", & - "M6N3FAFYI","M6N3FAFZI","M6N3FAGXI","M6N3FAGYI","M6N3FAGZI","M6N3FAMXI","M6N3FAMYI", & - "M6N3FAMZI","M6N3FBFXI","M6N3FBFYI","M6N3FBFZI","M6N3FBXI ","M6N3FBYI ","M6N3FBZI ", & - "M6N3FDXI ","M6N3FDYI ","M6N3FDZI ","M6N3FIXI ","M6N3FIYI ","M6N3FIZI ","M6N3FMGXI", & - "M6N3FMGYI","M6N3FMGZI","M6N3MAFXI","M6N3MAFYI","M6N3MAFZI","M6N3MAGXI","M6N3MAGYI", & - "M6N3MAGZI","M6N3MBFXI","M6N3MBFYI","M6N3MBFZI","M6N3MBXI ","M6N3MBYI ","M6N3MBZI ", & - "M6N3MMGXI","M6N3MMGYI","M6N3MMGZI","M6N3STAXI","M6N3STAYI","M6N3STAZI","M6N3STVXI", & - "M6N3STVYI","M6N3STVZI","M6N3VXI ","M6N3VYI ","M6N3VZI ","M6N4AXI ","M6N4AYI ", & - "M6N4AZI ","M6N4DYNP ","M6N4FAFXI","M6N4FAFYI","M6N4FAFZI","M6N4FAGXI","M6N4FAGYI", & - "M6N4FAGZI","M6N4FAMXI","M6N4FAMYI","M6N4FAMZI","M6N4FBFXI","M6N4FBFYI","M6N4FBFZI", & - "M6N4FBXI ","M6N4FBYI ","M6N4FBZI ","M6N4FDXI ","M6N4FDYI ","M6N4FDZI ","M6N4FIXI ", & - "M6N4FIYI ","M6N4FIZI ","M6N4FMGXI","M6N4FMGYI","M6N4FMGZI","M6N4MAFXI","M6N4MAFYI", & - "M6N4MAFZI","M6N4MAGXI","M6N4MAGYI","M6N4MAGZI","M6N4MBFXI","M6N4MBFYI","M6N4MBFZI", & - "M6N4MBXI ","M6N4MBYI ","M6N4MBZI ","M6N4MMGXI","M6N4MMGYI","M6N4MMGZI","M6N4STAXI", & - "M6N4STAYI","M6N4STAZI","M6N4STVXI","M6N4STVYI","M6N4STVZI","M6N4VXI ","M6N4VYI ", & - "M6N4VZI ","M6N5AXI ","M6N5AYI ","M6N5AZI ","M6N5DYNP ","M6N5FAFXI","M6N5FAFYI", & - "M6N5FAFZI","M6N5FAGXI","M6N5FAGYI","M6N5FAGZI","M6N5FAMXI","M6N5FAMYI","M6N5FAMZI", & - "M6N5FBFXI","M6N5FBFYI","M6N5FBFZI","M6N5FBXI ","M6N5FBYI ","M6N5FBZI ","M6N5FDXI ", & - "M6N5FDYI ","M6N5FDZI ","M6N5FIXI ","M6N5FIYI ","M6N5FIZI ","M6N5FMGXI","M6N5FMGYI", & - "M6N5FMGZI","M6N5MAFXI","M6N5MAFYI","M6N5MAFZI","M6N5MAGXI","M6N5MAGYI","M6N5MAGZI", & - "M6N5MBFXI","M6N5MBFYI","M6N5MBFZI","M6N5MBXI ","M6N5MBYI ","M6N5MBZI ","M6N5MMGXI", & - "M6N5MMGYI","M6N5MMGZI","M6N5STAXI","M6N5STAYI","M6N5STAZI","M6N5STVXI","M6N5STVYI", & - "M6N5STVZI","M6N5VXI ","M6N5VYI ","M6N5VZI ","M6N6AXI ","M6N6AYI ","M6N6AZI ", & - "M6N6DYNP ","M6N6FAFXI","M6N6FAFYI","M6N6FAFZI","M6N6FAGXI","M6N6FAGYI","M6N6FAGZI", & - "M6N6FAMXI","M6N6FAMYI","M6N6FAMZI"/) - ValidParamAry(3001:3500) = (/ & - "M6N6FBFXI","M6N6FBFYI","M6N6FBFZI","M6N6FBXI ","M6N6FBYI ","M6N6FBZI ","M6N6FDXI ", & - "M6N6FDYI ","M6N6FDZI ","M6N6FIXI ","M6N6FIYI ","M6N6FIZI ","M6N6FMGXI","M6N6FMGYI", & - "M6N6FMGZI","M6N6MAFXI","M6N6MAFYI","M6N6MAFZI","M6N6MAGXI","M6N6MAGYI","M6N6MAGZI", & - "M6N6MBFXI","M6N6MBFYI","M6N6MBFZI","M6N6MBXI ","M6N6MBYI ","M6N6MBZI ","M6N6MMGXI", & - "M6N6MMGYI","M6N6MMGZI","M6N6STAXI","M6N6STAYI","M6N6STAZI","M6N6STVXI","M6N6STVYI", & - "M6N6STVZI","M6N6VXI ","M6N6VYI ","M6N6VZI ","M6N7AXI ","M6N7AYI ","M6N7AZI ", & - "M6N7DYNP ","M6N7FAFXI","M6N7FAFYI","M6N7FAFZI","M6N7FAGXI","M6N7FAGYI","M6N7FAGZI", & - "M6N7FAMXI","M6N7FAMYI","M6N7FAMZI","M6N7FBFXI","M6N7FBFYI","M6N7FBFZI","M6N7FBXI ", & - "M6N7FBYI ","M6N7FBZI ","M6N7FDXI ","M6N7FDYI ","M6N7FDZI ","M6N7FIXI ","M6N7FIYI ", & - "M6N7FIZI ","M6N7FMGXI","M6N7FMGYI","M6N7FMGZI","M6N7MAFXI","M6N7MAFYI","M6N7MAFZI", & - "M6N7MAGXI","M6N7MAGYI","M6N7MAGZI","M6N7MBFXI","M6N7MBFYI","M6N7MBFZI","M6N7MBXI ", & - "M6N7MBYI ","M6N7MBZI ","M6N7MMGXI","M6N7MMGYI","M6N7MMGZI","M6N7STAXI","M6N7STAYI", & - "M6N7STAZI","M6N7STVXI","M6N7STVYI","M6N7STVZI","M6N7VXI ","M6N7VYI ","M6N7VZI ", & - "M6N8AXI ","M6N8AYI ","M6N8AZI ","M6N8DYNP ","M6N8FAFXI","M6N8FAFYI","M6N8FAFZI", & - "M6N8FAGXI","M6N8FAGYI","M6N8FAGZI","M6N8FAMXI","M6N8FAMYI","M6N8FAMZI","M6N8FBFXI", & - "M6N8FBFYI","M6N8FBFZI","M6N8FBXI ","M6N8FBYI ","M6N8FBZI ","M6N8FDXI ","M6N8FDYI ", & - "M6N8FDZI ","M6N8FIXI ","M6N8FIYI ","M6N8FIZI ","M6N8FMGXI","M6N8FMGYI","M6N8FMGZI", & - "M6N8MAFXI","M6N8MAFYI","M6N8MAFZI","M6N8MAGXI","M6N8MAGYI","M6N8MAGZI","M6N8MBFXI", & - "M6N8MBFYI","M6N8MBFZI","M6N8MBXI ","M6N8MBYI ","M6N8MBZI ","M6N8MMGXI","M6N8MMGYI", & - "M6N8MMGZI","M6N8STAXI","M6N8STAYI","M6N8STAZI","M6N8STVXI","M6N8STVYI","M6N8STVZI", & - "M6N8VXI ","M6N8VYI ","M6N8VZI ","M6N9AXI ","M6N9AYI ","M6N9AZI ","M6N9DYNP ", & - "M6N9FAFXI","M6N9FAFYI","M6N9FAFZI","M6N9FAGXI","M6N9FAGYI","M6N9FAGZI","M6N9FAMXI", & - "M6N9FAMYI","M6N9FAMZI","M6N9FBFXI","M6N9FBFYI","M6N9FBFZI","M6N9FBXI ","M6N9FBYI ", & - "M6N9FBZI ","M6N9FDXI ","M6N9FDYI ","M6N9FDZI ","M6N9FIXI ","M6N9FIYI ","M6N9FIZI ", & - "M6N9FMGXI","M6N9FMGYI","M6N9FMGZI","M6N9MAFXI","M6N9MAFYI","M6N9MAFZI","M6N9MAGXI", & - "M6N9MAGYI","M6N9MAGZI","M6N9MBFXI","M6N9MBFYI","M6N9MBFZI","M6N9MBXI ","M6N9MBYI ", & - "M6N9MBZI ","M6N9MMGXI","M6N9MMGYI","M6N9MMGZI","M6N9STAXI","M6N9STAYI","M6N9STAZI", & - "M6N9STVXI","M6N9STVYI","M6N9STVZI","M6N9VXI ","M6N9VYI ","M6N9VZI ","M7N1AXI ", & - "M7N1AYI ","M7N1AZI ","M7N1DYNP ","M7N1FAFXI","M7N1FAFYI","M7N1FAFZI","M7N1FAGXI", & - "M7N1FAGYI","M7N1FAGZI","M7N1FAMXI","M7N1FAMYI","M7N1FAMZI","M7N1FBFXI","M7N1FBFYI", & - "M7N1FBFZI","M7N1FBXI ","M7N1FBYI ","M7N1FBZI ","M7N1FDXI ","M7N1FDYI ","M7N1FDZI ", & - "M7N1FIXI ","M7N1FIYI ","M7N1FIZI ","M7N1FMGXI","M7N1FMGYI","M7N1FMGZI","M7N1MAFXI", & - "M7N1MAFYI","M7N1MAFZI","M7N1MAGXI","M7N1MAGYI","M7N1MAGZI","M7N1MBFXI","M7N1MBFYI", & - "M7N1MBFZI","M7N1MBXI ","M7N1MBYI ","M7N1MBZI ","M7N1MMGXI","M7N1MMGYI","M7N1MMGZI", & - "M7N1STAXI","M7N1STAYI","M7N1STAZI","M7N1STVXI","M7N1STVYI","M7N1STVZI","M7N1VXI ", & - "M7N1VYI ","M7N1VZI ","M7N2AXI ","M7N2AYI ","M7N2AZI ","M7N2DYNP ","M7N2FAFXI", & - "M7N2FAFYI","M7N2FAFZI","M7N2FAGXI","M7N2FAGYI","M7N2FAGZI","M7N2FAMXI","M7N2FAMYI", & - "M7N2FAMZI","M7N2FBFXI","M7N2FBFYI","M7N2FBFZI","M7N2FBXI ","M7N2FBYI ","M7N2FBZI ", & - "M7N2FDXI ","M7N2FDYI ","M7N2FDZI ","M7N2FIXI ","M7N2FIYI ","M7N2FIZI ","M7N2FMGXI", & - "M7N2FMGYI","M7N2FMGZI","M7N2MAFXI","M7N2MAFYI","M7N2MAFZI","M7N2MAGXI","M7N2MAGYI", & - "M7N2MAGZI","M7N2MBFXI","M7N2MBFYI","M7N2MBFZI","M7N2MBXI ","M7N2MBYI ","M7N2MBZI ", & - "M7N2MMGXI","M7N2MMGYI","M7N2MMGZI","M7N2STAXI","M7N2STAYI","M7N2STAZI","M7N2STVXI", & - "M7N2STVYI","M7N2STVZI","M7N2VXI ","M7N2VYI ","M7N2VZI ","M7N3AXI ","M7N3AYI ", & - "M7N3AZI ","M7N3DYNP ","M7N3FAFXI","M7N3FAFYI","M7N3FAFZI","M7N3FAGXI","M7N3FAGYI", & - "M7N3FAGZI","M7N3FAMXI","M7N3FAMYI","M7N3FAMZI","M7N3FBFXI","M7N3FBFYI","M7N3FBFZI", & - "M7N3FBXI ","M7N3FBYI ","M7N3FBZI ","M7N3FDXI ","M7N3FDYI ","M7N3FDZI ","M7N3FIXI ", & - "M7N3FIYI ","M7N3FIZI ","M7N3FMGXI","M7N3FMGYI","M7N3FMGZI","M7N3MAFXI","M7N3MAFYI", & - "M7N3MAFZI","M7N3MAGXI","M7N3MAGYI","M7N3MAGZI","M7N3MBFXI","M7N3MBFYI","M7N3MBFZI", & - "M7N3MBXI ","M7N3MBYI ","M7N3MBZI ","M7N3MMGXI","M7N3MMGYI","M7N3MMGZI","M7N3STAXI", & - "M7N3STAYI","M7N3STAZI","M7N3STVXI","M7N3STVYI","M7N3STVZI","M7N3VXI ","M7N3VYI ", & - "M7N3VZI ","M7N4AXI ","M7N4AYI ","M7N4AZI ","M7N4DYNP ","M7N4FAFXI","M7N4FAFYI", & - "M7N4FAFZI","M7N4FAGXI","M7N4FAGYI","M7N4FAGZI","M7N4FAMXI","M7N4FAMYI","M7N4FAMZI", & - "M7N4FBFXI","M7N4FBFYI","M7N4FBFZI","M7N4FBXI ","M7N4FBYI ","M7N4FBZI ","M7N4FDXI ", & - "M7N4FDYI ","M7N4FDZI ","M7N4FIXI ","M7N4FIYI ","M7N4FIZI ","M7N4FMGXI","M7N4FMGYI", & - "M7N4FMGZI","M7N4MAFXI","M7N4MAFYI","M7N4MAFZI","M7N4MAGXI","M7N4MAGYI","M7N4MAGZI", & - "M7N4MBFXI","M7N4MBFYI","M7N4MBFZI","M7N4MBXI ","M7N4MBYI ","M7N4MBZI ","M7N4MMGXI", & - "M7N4MMGYI","M7N4MMGZI","M7N4STAXI","M7N4STAYI","M7N4STAZI","M7N4STVXI","M7N4STVYI", & - "M7N4STVZI","M7N4VXI ","M7N4VYI ","M7N4VZI ","M7N5AXI ","M7N5AYI ","M7N5AZI ", & - "M7N5DYNP ","M7N5FAFXI","M7N5FAFYI","M7N5FAFZI","M7N5FAGXI","M7N5FAGYI","M7N5FAGZI", & - "M7N5FAMXI","M7N5FAMYI","M7N5FAMZI","M7N5FBFXI","M7N5FBFYI","M7N5FBFZI","M7N5FBXI ", & - "M7N5FBYI ","M7N5FBZI ","M7N5FDXI ","M7N5FDYI ","M7N5FDZI ","M7N5FIXI ","M7N5FIYI ", & - "M7N5FIZI ","M7N5FMGXI","M7N5FMGYI","M7N5FMGZI","M7N5MAFXI","M7N5MAFYI","M7N5MAFZI", & - "M7N5MAGXI","M7N5MAGYI","M7N5MAGZI","M7N5MBFXI","M7N5MBFYI","M7N5MBFZI","M7N5MBXI ", & - "M7N5MBYI ","M7N5MBZI ","M7N5MMGXI","M7N5MMGYI","M7N5MMGZI","M7N5STAXI","M7N5STAYI", & - "M7N5STAZI","M7N5STVXI","M7N5STVYI","M7N5STVZI","M7N5VXI ","M7N5VYI ","M7N5VZI ", & - "M7N6AXI ","M7N6AYI ","M7N6AZI ","M7N6DYNP ","M7N6FAFXI","M7N6FAFYI","M7N6FAFZI", & - "M7N6FAGXI","M7N6FAGYI","M7N6FAGZI","M7N6FAMXI","M7N6FAMYI","M7N6FAMZI","M7N6FBFXI", & - "M7N6FBFYI","M7N6FBFZI","M7N6FBXI ","M7N6FBYI ","M7N6FBZI ","M7N6FDXI ","M7N6FDYI ", & - "M7N6FDZI ","M7N6FIXI ","M7N6FIYI ","M7N6FIZI ","M7N6FMGXI","M7N6FMGYI","M7N6FMGZI", & - "M7N6MAFXI","M7N6MAFYI","M7N6MAFZI","M7N6MAGXI","M7N6MAGYI","M7N6MAGZI","M7N6MBFXI", & - "M7N6MBFYI","M7N6MBFZI","M7N6MBXI ","M7N6MBYI ","M7N6MBZI ","M7N6MMGXI","M7N6MMGYI", & - "M7N6MMGZI","M7N6STAXI","M7N6STAYI"/) - ValidParamAry(3501:4000) = (/ & - "M7N6STAZI","M7N6STVXI","M7N6STVYI","M7N6STVZI","M7N6VXI ","M7N6VYI ","M7N6VZI ", & - "M7N7AXI ","M7N7AYI ","M7N7AZI ","M7N7DYNP ","M7N7FAFXI","M7N7FAFYI","M7N7FAFZI", & - "M7N7FAGXI","M7N7FAGYI","M7N7FAGZI","M7N7FAMXI","M7N7FAMYI","M7N7FAMZI","M7N7FBFXI", & - "M7N7FBFYI","M7N7FBFZI","M7N7FBXI ","M7N7FBYI ","M7N7FBZI ","M7N7FDXI ","M7N7FDYI ", & - "M7N7FDZI ","M7N7FIXI ","M7N7FIYI ","M7N7FIZI ","M7N7FMGXI","M7N7FMGYI","M7N7FMGZI", & - "M7N7MAFXI","M7N7MAFYI","M7N7MAFZI","M7N7MAGXI","M7N7MAGYI","M7N7MAGZI","M7N7MBFXI", & - "M7N7MBFYI","M7N7MBFZI","M7N7MBXI ","M7N7MBYI ","M7N7MBZI ","M7N7MMGXI","M7N7MMGYI", & - "M7N7MMGZI","M7N7STAXI","M7N7STAYI","M7N7STAZI","M7N7STVXI","M7N7STVYI","M7N7STVZI", & - "M7N7VXI ","M7N7VYI ","M7N7VZI ","M7N8AXI ","M7N8AYI ","M7N8AZI ","M7N8DYNP ", & - "M7N8FAFXI","M7N8FAFYI","M7N8FAFZI","M7N8FAGXI","M7N8FAGYI","M7N8FAGZI","M7N8FAMXI", & - "M7N8FAMYI","M7N8FAMZI","M7N8FBFXI","M7N8FBFYI","M7N8FBFZI","M7N8FBXI ","M7N8FBYI ", & - "M7N8FBZI ","M7N8FDXI ","M7N8FDYI ","M7N8FDZI ","M7N8FIXI ","M7N8FIYI ","M7N8FIZI ", & - "M7N8FMGXI","M7N8FMGYI","M7N8FMGZI","M7N8MAFXI","M7N8MAFYI","M7N8MAFZI","M7N8MAGXI", & - "M7N8MAGYI","M7N8MAGZI","M7N8MBFXI","M7N8MBFYI","M7N8MBFZI","M7N8MBXI ","M7N8MBYI ", & - "M7N8MBZI ","M7N8MMGXI","M7N8MMGYI","M7N8MMGZI","M7N8STAXI","M7N8STAYI","M7N8STAZI", & - "M7N8STVXI","M7N8STVYI","M7N8STVZI","M7N8VXI ","M7N8VYI ","M7N8VZI ","M7N9AXI ", & - "M7N9AYI ","M7N9AZI ","M7N9DYNP ","M7N9FAFXI","M7N9FAFYI","M7N9FAFZI","M7N9FAGXI", & - "M7N9FAGYI","M7N9FAGZI","M7N9FAMXI","M7N9FAMYI","M7N9FAMZI","M7N9FBFXI","M7N9FBFYI", & - "M7N9FBFZI","M7N9FBXI ","M7N9FBYI ","M7N9FBZI ","M7N9FDXI ","M7N9FDYI ","M7N9FDZI ", & - "M7N9FIXI ","M7N9FIYI ","M7N9FIZI ","M7N9FMGXI","M7N9FMGYI","M7N9FMGZI","M7N9MAFXI", & - "M7N9MAFYI","M7N9MAFZI","M7N9MAGXI","M7N9MAGYI","M7N9MAGZI","M7N9MBFXI","M7N9MBFYI", & - "M7N9MBFZI","M7N9MBXI ","M7N9MBYI ","M7N9MBZI ","M7N9MMGXI","M7N9MMGYI","M7N9MMGZI", & - "M7N9STAXI","M7N9STAYI","M7N9STAZI","M7N9STVXI","M7N9STVYI","M7N9STVZI","M7N9VXI ", & - "M7N9VYI ","M7N9VZI ","M8N1AXI ","M8N1AYI ","M8N1AZI ","M8N1DYNP ","M8N1FAFXI", & - "M8N1FAFYI","M8N1FAFZI","M8N1FAGXI","M8N1FAGYI","M8N1FAGZI","M8N1FAMXI","M8N1FAMYI", & - "M8N1FAMZI","M8N1FBFXI","M8N1FBFYI","M8N1FBFZI","M8N1FBXI ","M8N1FBYI ","M8N1FBZI ", & - "M8N1FDXI ","M8N1FDYI ","M8N1FDZI ","M8N1FIXI ","M8N1FIYI ","M8N1FIZI ","M8N1FMGXI", & - "M8N1FMGYI","M8N1FMGZI","M8N1MAFXI","M8N1MAFYI","M8N1MAFZI","M8N1MAGXI","M8N1MAGYI", & - "M8N1MAGZI","M8N1MBFXI","M8N1MBFYI","M8N1MBFZI","M8N1MBXI ","M8N1MBYI ","M8N1MBZI ", & - "M8N1MMGXI","M8N1MMGYI","M8N1MMGZI","M8N1STAXI","M8N1STAYI","M8N1STAZI","M8N1STVXI", & - "M8N1STVYI","M8N1STVZI","M8N1VXI ","M8N1VYI ","M8N1VZI ","M8N2AXI ","M8N2AYI ", & - "M8N2AZI ","M8N2DYNP ","M8N2FAFXI","M8N2FAFYI","M8N2FAFZI","M8N2FAGXI","M8N2FAGYI", & - "M8N2FAGZI","M8N2FAMXI","M8N2FAMYI","M8N2FAMZI","M8N2FBFXI","M8N2FBFYI","M8N2FBFZI", & - "M8N2FBXI ","M8N2FBYI ","M8N2FBZI ","M8N2FDXI ","M8N2FDYI ","M8N2FDZI ","M8N2FIXI ", & - "M8N2FIYI ","M8N2FIZI ","M8N2FMGXI","M8N2FMGYI","M8N2FMGZI","M8N2MAFXI","M8N2MAFYI", & - "M8N2MAFZI","M8N2MAGXI","M8N2MAGYI","M8N2MAGZI","M8N2MBFXI","M8N2MBFYI","M8N2MBFZI", & - "M8N2MBXI ","M8N2MBYI ","M8N2MBZI ","M8N2MMGXI","M8N2MMGYI","M8N2MMGZI","M8N2STAXI", & - "M8N2STAYI","M8N2STAZI","M8N2STVXI","M8N2STVYI","M8N2STVZI","M8N2VXI ","M8N2VYI ", & - "M8N2VZI ","M8N3AXI ","M8N3AYI ","M8N3AZI ","M8N3DYNP ","M8N3FAFXI","M8N3FAFYI", & - "M8N3FAFZI","M8N3FAGXI","M8N3FAGYI","M8N3FAGZI","M8N3FAMXI","M8N3FAMYI","M8N3FAMZI", & - "M8N3FBFXI","M8N3FBFYI","M8N3FBFZI","M8N3FBXI ","M8N3FBYI ","M8N3FBZI ","M8N3FDXI ", & - "M8N3FDYI ","M8N3FDZI ","M8N3FIXI ","M8N3FIYI ","M8N3FIZI ","M8N3FMGXI","M8N3FMGYI", & - "M8N3FMGZI","M8N3MAFXI","M8N3MAFYI","M8N3MAFZI","M8N3MAGXI","M8N3MAGYI","M8N3MAGZI", & - "M8N3MBFXI","M8N3MBFYI","M8N3MBFZI","M8N3MBXI ","M8N3MBYI ","M8N3MBZI ","M8N3MMGXI", & - "M8N3MMGYI","M8N3MMGZI","M8N3STAXI","M8N3STAYI","M8N3STAZI","M8N3STVXI","M8N3STVYI", & - "M8N3STVZI","M8N3VXI ","M8N3VYI ","M8N3VZI ","M8N4AXI ","M8N4AYI ","M8N4AZI ", & - "M8N4DYNP ","M8N4FAFXI","M8N4FAFYI","M8N4FAFZI","M8N4FAGXI","M8N4FAGYI","M8N4FAGZI", & - "M8N4FAMXI","M8N4FAMYI","M8N4FAMZI","M8N4FBFXI","M8N4FBFYI","M8N4FBFZI","M8N4FBXI ", & - "M8N4FBYI ","M8N4FBZI ","M8N4FDXI ","M8N4FDYI ","M8N4FDZI ","M8N4FIXI ","M8N4FIYI ", & - "M8N4FIZI ","M8N4FMGXI","M8N4FMGYI","M8N4FMGZI","M8N4MAFXI","M8N4MAFYI","M8N4MAFZI", & - "M8N4MAGXI","M8N4MAGYI","M8N4MAGZI","M8N4MBFXI","M8N4MBFYI","M8N4MBFZI","M8N4MBXI ", & - "M8N4MBYI ","M8N4MBZI ","M8N4MMGXI","M8N4MMGYI","M8N4MMGZI","M8N4STAXI","M8N4STAYI", & - "M8N4STAZI","M8N4STVXI","M8N4STVYI","M8N4STVZI","M8N4VXI ","M8N4VYI ","M8N4VZI ", & - "M8N5AXI ","M8N5AYI ","M8N5AZI ","M8N5DYNP ","M8N5FAFXI","M8N5FAFYI","M8N5FAFZI", & - "M8N5FAGXI","M8N5FAGYI","M8N5FAGZI","M8N5FAMXI","M8N5FAMYI","M8N5FAMZI","M8N5FBFXI", & - "M8N5FBFYI","M8N5FBFZI","M8N5FBXI ","M8N5FBYI ","M8N5FBZI ","M8N5FDXI ","M8N5FDYI ", & - "M8N5FDZI ","M8N5FIXI ","M8N5FIYI ","M8N5FIZI ","M8N5FMGXI","M8N5FMGYI","M8N5FMGZI", & - "M8N5MAFXI","M8N5MAFYI","M8N5MAFZI","M8N5MAGXI","M8N5MAGYI","M8N5MAGZI","M8N5MBFXI", & - "M8N5MBFYI","M8N5MBFZI","M8N5MBXI ","M8N5MBYI ","M8N5MBZI ","M8N5MMGXI","M8N5MMGYI", & - "M8N5MMGZI","M8N5STAXI","M8N5STAYI","M8N5STAZI","M8N5STVXI","M8N5STVYI","M8N5STVZI", & - "M8N5VXI ","M8N5VYI ","M8N5VZI ","M8N6AXI ","M8N6AYI ","M8N6AZI ","M8N6DYNP ", & - "M8N6FAFXI","M8N6FAFYI","M8N6FAFZI","M8N6FAGXI","M8N6FAGYI","M8N6FAGZI","M8N6FAMXI", & - "M8N6FAMYI","M8N6FAMZI","M8N6FBFXI","M8N6FBFYI","M8N6FBFZI","M8N6FBXI ","M8N6FBYI ", & - "M8N6FBZI ","M8N6FDXI ","M8N6FDYI ","M8N6FDZI ","M8N6FIXI ","M8N6FIYI ","M8N6FIZI ", & - "M8N6FMGXI","M8N6FMGYI","M8N6FMGZI","M8N6MAFXI","M8N6MAFYI","M8N6MAFZI","M8N6MAGXI", & - "M8N6MAGYI","M8N6MAGZI","M8N6MBFXI","M8N6MBFYI","M8N6MBFZI","M8N6MBXI ","M8N6MBYI ", & - "M8N6MBZI ","M8N6MMGXI","M8N6MMGYI","M8N6MMGZI","M8N6STAXI","M8N6STAYI","M8N6STAZI", & - "M8N6STVXI","M8N6STVYI","M8N6STVZI","M8N6VXI ","M8N6VYI ","M8N6VZI ","M8N7AXI ", & - "M8N7AYI ","M8N7AZI ","M8N7DYNP ","M8N7FAFXI","M8N7FAFYI","M8N7FAFZI","M8N7FAGXI", & - "M8N7FAGYI","M8N7FAGZI","M8N7FAMXI","M8N7FAMYI","M8N7FAMZI","M8N7FBFXI","M8N7FBFYI", & - "M8N7FBFZI","M8N7FBXI ","M8N7FBYI ","M8N7FBZI ","M8N7FDXI ","M8N7FDYI ","M8N7FDZI ", & - "M8N7FIXI ","M8N7FIYI ","M8N7FIZI "/) - ValidParamAry(4001:4500) = (/ & - "M8N7FMGXI","M8N7FMGYI","M8N7FMGZI","M8N7MAFXI","M8N7MAFYI","M8N7MAFZI","M8N7MAGXI", & - "M8N7MAGYI","M8N7MAGZI","M8N7MBFXI","M8N7MBFYI","M8N7MBFZI","M8N7MBXI ","M8N7MBYI ", & - "M8N7MBZI ","M8N7MMGXI","M8N7MMGYI","M8N7MMGZI","M8N7STAXI","M8N7STAYI","M8N7STAZI", & - "M8N7STVXI","M8N7STVYI","M8N7STVZI","M8N7VXI ","M8N7VYI ","M8N7VZI ","M8N8AXI ", & - "M8N8AYI ","M8N8AZI ","M8N8DYNP ","M8N8FAFXI","M8N8FAFYI","M8N8FAFZI","M8N8FAGXI", & - "M8N8FAGYI","M8N8FAGZI","M8N8FAMXI","M8N8FAMYI","M8N8FAMZI","M8N8FBFXI","M8N8FBFYI", & - "M8N8FBFZI","M8N8FBXI ","M8N8FBYI ","M8N8FBZI ","M8N8FDXI ","M8N8FDYI ","M8N8FDZI ", & - "M8N8FIXI ","M8N8FIYI ","M8N8FIZI ","M8N8FMGXI","M8N8FMGYI","M8N8FMGZI","M8N8MAFXI", & - "M8N8MAFYI","M8N8MAFZI","M8N8MAGXI","M8N8MAGYI","M8N8MAGZI","M8N8MBFXI","M8N8MBFYI", & - "M8N8MBFZI","M8N8MBXI ","M8N8MBYI ","M8N8MBZI ","M8N8MMGXI","M8N8MMGYI","M8N8MMGZI", & - "M8N8STAXI","M8N8STAYI","M8N8STAZI","M8N8STVXI","M8N8STVYI","M8N8STVZI","M8N8VXI ", & - "M8N8VYI ","M8N8VZI ","M8N9AXI ","M8N9AYI ","M8N9AZI ","M8N9DYNP ","M8N9FAFXI", & - "M8N9FAFYI","M8N9FAFZI","M8N9FAGXI","M8N9FAGYI","M8N9FAGZI","M8N9FAMXI","M8N9FAMYI", & - "M8N9FAMZI","M8N9FBFXI","M8N9FBFYI","M8N9FBFZI","M8N9FBXI ","M8N9FBYI ","M8N9FBZI ", & - "M8N9FDXI ","M8N9FDYI ","M8N9FDZI ","M8N9FIXI ","M8N9FIYI ","M8N9FIZI ","M8N9FMGXI", & - "M8N9FMGYI","M8N9FMGZI","M8N9MAFXI","M8N9MAFYI","M8N9MAFZI","M8N9MAGXI","M8N9MAGYI", & - "M8N9MAGZI","M8N9MBFXI","M8N9MBFYI","M8N9MBFZI","M8N9MBXI ","M8N9MBYI ","M8N9MBZI ", & - "M8N9MMGXI","M8N9MMGYI","M8N9MMGZI","M8N9STAXI","M8N9STAYI","M8N9STAZI","M8N9STVXI", & - "M8N9STVYI","M8N9STVZI","M8N9VXI ","M8N9VYI ","M8N9VZI ","M9N1AXI ","M9N1AYI ", & - "M9N1AZI ","M9N1DYNP ","M9N1FAFXI","M9N1FAFYI","M9N1FAFZI","M9N1FAGXI","M9N1FAGYI", & - "M9N1FAGZI","M9N1FAMXI","M9N1FAMYI","M9N1FAMZI","M9N1FBFXI","M9N1FBFYI","M9N1FBFZI", & - "M9N1FBXI ","M9N1FBYI ","M9N1FBZI ","M9N1FDXI ","M9N1FDYI ","M9N1FDZI ","M9N1FIXI ", & - "M9N1FIYI ","M9N1FIZI ","M9N1FMGXI","M9N1FMGYI","M9N1FMGZI","M9N1MAFXI","M9N1MAFYI", & - "M9N1MAFZI","M9N1MAGXI","M9N1MAGYI","M9N1MAGZI","M9N1MBFXI","M9N1MBFYI","M9N1MBFZI", & - "M9N1MBXI ","M9N1MBYI ","M9N1MBZI ","M9N1MMGXI","M9N1MMGYI","M9N1MMGZI","M9N1STAXI", & - "M9N1STAYI","M9N1STAZI","M9N1STVXI","M9N1STVYI","M9N1STVZI","M9N1VXI ","M9N1VYI ", & - "M9N1VZI ","M9N2AXI ","M9N2AYI ","M9N2AZI ","M9N2DYNP ","M9N2FAFXI","M9N2FAFYI", & - "M9N2FAFZI","M9N2FAGXI","M9N2FAGYI","M9N2FAGZI","M9N2FAMXI","M9N2FAMYI","M9N2FAMZI", & - "M9N2FBFXI","M9N2FBFYI","M9N2FBFZI","M9N2FBXI ","M9N2FBYI ","M9N2FBZI ","M9N2FDXI ", & - "M9N2FDYI ","M9N2FDZI ","M9N2FIXI ","M9N2FIYI ","M9N2FIZI ","M9N2FMGXI","M9N2FMGYI", & - "M9N2FMGZI","M9N2MAFXI","M9N2MAFYI","M9N2MAFZI","M9N2MAGXI","M9N2MAGYI","M9N2MAGZI", & - "M9N2MBFXI","M9N2MBFYI","M9N2MBFZI","M9N2MBXI ","M9N2MBYI ","M9N2MBZI ","M9N2MMGXI", & - "M9N2MMGYI","M9N2MMGZI","M9N2STAXI","M9N2STAYI","M9N2STAZI","M9N2STVXI","M9N2STVYI", & - "M9N2STVZI","M9N2VXI ","M9N2VYI ","M9N2VZI ","M9N3AXI ","M9N3AYI ","M9N3AZI ", & - "M9N3DYNP ","M9N3FAFXI","M9N3FAFYI","M9N3FAFZI","M9N3FAGXI","M9N3FAGYI","M9N3FAGZI", & - "M9N3FAMXI","M9N3FAMYI","M9N3FAMZI","M9N3FBFXI","M9N3FBFYI","M9N3FBFZI","M9N3FBXI ", & - "M9N3FBYI ","M9N3FBZI ","M9N3FDXI ","M9N3FDYI ","M9N3FDZI ","M9N3FIXI ","M9N3FIYI ", & - "M9N3FIZI ","M9N3FMGXI","M9N3FMGYI","M9N3FMGZI","M9N3MAFXI","M9N3MAFYI","M9N3MAFZI", & - "M9N3MAGXI","M9N3MAGYI","M9N3MAGZI","M9N3MBFXI","M9N3MBFYI","M9N3MBFZI","M9N3MBXI ", & - "M9N3MBYI ","M9N3MBZI ","M9N3MMGXI","M9N3MMGYI","M9N3MMGZI","M9N3STAXI","M9N3STAYI", & - "M9N3STAZI","M9N3STVXI","M9N3STVYI","M9N3STVZI","M9N3VXI ","M9N3VYI ","M9N3VZI ", & - "M9N4AXI ","M9N4AYI ","M9N4AZI ","M9N4DYNP ","M9N4FAFXI","M9N4FAFYI","M9N4FAFZI", & - "M9N4FAGXI","M9N4FAGYI","M9N4FAGZI","M9N4FAMXI","M9N4FAMYI","M9N4FAMZI","M9N4FBFXI", & - "M9N4FBFYI","M9N4FBFZI","M9N4FBXI ","M9N4FBYI ","M9N4FBZI ","M9N4FDXI ","M9N4FDYI ", & - "M9N4FDZI ","M9N4FIXI ","M9N4FIYI ","M9N4FIZI ","M9N4FMGXI","M9N4FMGYI","M9N4FMGZI", & - "M9N4MAFXI","M9N4MAFYI","M9N4MAFZI","M9N4MAGXI","M9N4MAGYI","M9N4MAGZI","M9N4MBFXI", & - "M9N4MBFYI","M9N4MBFZI","M9N4MBXI ","M9N4MBYI ","M9N4MBZI ","M9N4MMGXI","M9N4MMGYI", & - "M9N4MMGZI","M9N4STAXI","M9N4STAYI","M9N4STAZI","M9N4STVXI","M9N4STVYI","M9N4STVZI", & - "M9N4VXI ","M9N4VYI ","M9N4VZI ","M9N5AXI ","M9N5AYI ","M9N5AZI ","M9N5DYNP ", & - "M9N5FAFXI","M9N5FAFYI","M9N5FAFZI","M9N5FAGXI","M9N5FAGYI","M9N5FAGZI","M9N5FAMXI", & - "M9N5FAMYI","M9N5FAMZI","M9N5FBFXI","M9N5FBFYI","M9N5FBFZI","M9N5FBXI ","M9N5FBYI ", & - "M9N5FBZI ","M9N5FDXI ","M9N5FDYI ","M9N5FDZI ","M9N5FIXI ","M9N5FIYI ","M9N5FIZI ", & - "M9N5FMGXI","M9N5FMGYI","M9N5FMGZI","M9N5MAFXI","M9N5MAFYI","M9N5MAFZI","M9N5MAGXI", & - "M9N5MAGYI","M9N5MAGZI","M9N5MBFXI","M9N5MBFYI","M9N5MBFZI","M9N5MBXI ","M9N5MBYI ", & - "M9N5MBZI ","M9N5MMGXI","M9N5MMGYI","M9N5MMGZI","M9N5STAXI","M9N5STAYI","M9N5STAZI", & - "M9N5STVXI","M9N5STVYI","M9N5STVZI","M9N5VXI ","M9N5VYI ","M9N5VZI ","M9N6AXI ", & - "M9N6AYI ","M9N6AZI ","M9N6DYNP ","M9N6FAFXI","M9N6FAFYI","M9N6FAFZI","M9N6FAGXI", & - "M9N6FAGYI","M9N6FAGZI","M9N6FAMXI","M9N6FAMYI","M9N6FAMZI","M9N6FBFXI","M9N6FBFYI", & - "M9N6FBFZI","M9N6FBXI ","M9N6FBYI ","M9N6FBZI ","M9N6FDXI ","M9N6FDYI ","M9N6FDZI ", & - "M9N6FIXI ","M9N6FIYI ","M9N6FIZI ","M9N6FMGXI","M9N6FMGYI","M9N6FMGZI","M9N6MAFXI", & - "M9N6MAFYI","M9N6MAFZI","M9N6MAGXI","M9N6MAGYI","M9N6MAGZI","M9N6MBFXI","M9N6MBFYI", & - "M9N6MBFZI","M9N6MBXI ","M9N6MBYI ","M9N6MBZI ","M9N6MMGXI","M9N6MMGYI","M9N6MMGZI", & - "M9N6STAXI","M9N6STAYI","M9N6STAZI","M9N6STVXI","M9N6STVYI","M9N6STVZI","M9N6VXI ", & - "M9N6VYI ","M9N6VZI ","M9N7AXI ","M9N7AYI ","M9N7AZI ","M9N7DYNP ","M9N7FAFXI", & - "M9N7FAFYI","M9N7FAFZI","M9N7FAGXI","M9N7FAGYI","M9N7FAGZI","M9N7FAMXI","M9N7FAMYI", & - "M9N7FAMZI","M9N7FBFXI","M9N7FBFYI","M9N7FBFZI","M9N7FBXI ","M9N7FBYI ","M9N7FBZI ", & - "M9N7FDXI ","M9N7FDYI ","M9N7FDZI ","M9N7FIXI ","M9N7FIYI ","M9N7FIZI ","M9N7FMGXI", & - "M9N7FMGYI","M9N7FMGZI","M9N7MAFXI","M9N7MAFYI","M9N7MAFZI","M9N7MAGXI","M9N7MAGYI", & - "M9N7MAGZI","M9N7MBFXI","M9N7MBFYI","M9N7MBFZI","M9N7MBXI ","M9N7MBYI ","M9N7MBZI ", & - "M9N7MMGXI","M9N7MMGYI","M9N7MMGZI","M9N7STAXI","M9N7STAYI","M9N7STAZI","M9N7STVXI", & - "M9N7STVYI","M9N7STVZI","M9N7VXI ","M9N7VYI ","M9N7VZI ","M9N8AXI ","M9N8AYI ", & - "M9N8AZI ","M9N8DYNP ","M9N8FAFXI"/) - ValidParamAry(4501:4599) = (/ & - "M9N8FAFYI","M9N8FAFZI","M9N8FAGXI","M9N8FAGYI","M9N8FAGZI","M9N8FAMXI","M9N8FAMYI", & - "M9N8FAMZI","M9N8FBFXI","M9N8FBFYI","M9N8FBFZI","M9N8FBXI ","M9N8FBYI ","M9N8FBZI ", & - "M9N8FDXI ","M9N8FDYI ","M9N8FDZI ","M9N8FIXI ","M9N8FIYI ","M9N8FIZI ","M9N8FMGXI", & - "M9N8FMGYI","M9N8FMGZI","M9N8MAFXI","M9N8MAFYI","M9N8MAFZI","M9N8MAGXI","M9N8MAGYI", & - "M9N8MAGZI","M9N8MBFXI","M9N8MBFYI","M9N8MBFZI","M9N8MBXI ","M9N8MBYI ","M9N8MBZI ", & - "M9N8MMGXI","M9N8MMGYI","M9N8MMGZI","M9N8STAXI","M9N8STAYI","M9N8STAZI","M9N8STVXI", & - "M9N8STVYI","M9N8STVZI","M9N8VXI ","M9N8VYI ","M9N8VZI ","M9N9AXI ","M9N9AYI ", & - "M9N9AZI ","M9N9DYNP ","M9N9FAFXI","M9N9FAFYI","M9N9FAFZI","M9N9FAGXI","M9N9FAGYI", & - "M9N9FAGZI","M9N9FAMXI","M9N9FAMYI","M9N9FAMZI","M9N9FBFXI","M9N9FBFYI","M9N9FBFZI", & - "M9N9FBXI ","M9N9FBYI ","M9N9FBZI ","M9N9FDXI ","M9N9FDYI ","M9N9FDZI ","M9N9FIXI ", & - "M9N9FIYI ","M9N9FIZI ","M9N9FMGXI","M9N9FMGYI","M9N9FMGZI","M9N9MAFXI","M9N9MAFYI", & - "M9N9MAFZI","M9N9MAGXI","M9N9MAGYI","M9N9MAGZI","M9N9MBFXI","M9N9MBFYI","M9N9MBFZI", & - "M9N9MBXI ","M9N9MBYI ","M9N9MBZI ","M9N9MMGXI","M9N9MMGYI","M9N9MMGZI","M9N9STAXI", & - "M9N9STAYI","M9N9STAZI","M9N9STVXI","M9N9STVYI","M9N9STVZI","M9N9VXI ","M9N9VYI ", & - "M9N9VZI "/) - ParamIndxAry(1:500) = (/ & - J1Axi , J1Ayi , J1Azi , J1DynP , J1FAGxi , J1FAGyi , J1FAGzi , & - J1FAMxi , J1FAMyi , J1FAMzi , J1FBFxi , J1FBFyi , J1FBFzi , J1FBxi , & - J1FByi , J1FBzi , J1FDxi , J1FDyi , J1FDzi , J1FIxi , J1FIyi , & - J1FIzi , J1FMGxi , J1FMGyi , J1FMGzi , J1MAGxi , J1MAGyi , J1MAGzi , & - J1MBFxi , J1MBFyi , J1MBFzi , J1MBxi , J1MByi , J1MBzi , J1STAxi , & - J1STAyi , J1STAzi , J1STVxi , J1STVyi , J1STVzi , J1Vxi , J1Vyi , & - J1Vzi , J2Axi , J2Ayi , J2Azi , J2DynP , J2FAGxi , J2FAGyi , & - J2FAGzi , J2FAMxi , J2FAMyi , J2FAMzi , J2FBFxi , J2FBFyi , J2FBFzi , & - J2FBxi , J2FByi , J2FBzi , J2FDxi , J2FDyi , J2FDzi , J2FIxi , & - J2FIyi , J2FIzi , J2FMGxi , J2FMGyi , J2FMGzi , J2MAGxi , J2MAGyi , & - J2MAGzi , J2MBFxi , J2MBFyi , J2MBFzi , J2MBxi , J2MByi , J2MBzi , & - J2STAxi , J2STAyi , J2STAzi , J2STVxi , J2STVyi , J2STVzi , J2Vxi , & - J2Vyi , J2Vzi , J3Axi , J3Ayi , J3Azi , J3DynP , J3FAGxi , & - J3FAGyi , J3FAGzi , J3FAMxi , J3FAMyi , J3FAMzi , J3FBFxi , J3FBFyi , & - J3FBFzi , J3FBxi , J3FByi , J3FBzi , J3FDxi , J3FDyi , J3FDzi , & - J3FIxi , J3FIyi , J3FIzi , J3FMGxi , J3FMGyi , J3FMGzi , J3MAGxi , & - J3MAGyi , J3MAGzi , J3MBFxi , J3MBFyi , J3MBFzi , J3MBxi , J3MByi , & - J3MBzi , J3STAxi , J3STAyi , J3STAzi , J3STVxi , J3STVyi , J3STVzi , & - J3Vxi , J3Vyi , J3Vzi , J4Axi , J4Ayi , J4Azi , J4DynP , & - J4FAGxi , J4FAGyi , J4FAGzi , J4FAMxi , J4FAMyi , J4FAMzi , J4FBFxi , & - J4FBFyi , J4FBFzi , J4FBxi , J4FByi , J4FBzi , J4FDxi , J4FDyi , & - J4FDzi , J4FIxi , J4FIyi , J4FIzi , J4FMGxi , J4FMGyi , J4FMGzi , & - J4MAGxi , J4MAGyi , J4MAGzi , J4MBFxi , J4MBFyi , J4MBFzi , J4MBxi , & - J4MByi , J4MBzi , J4STAxi , J4STAyi , J4STAzi , J4STVxi , J4STVyi , & - J4STVzi , J4Vxi , J4Vyi , J4Vzi , J5Axi , J5Ayi , J5Azi , & - J5DynP , J5FAGxi , J5FAGyi , J5FAGzi , J5FAMxi , J5FAMyi , J5FAMzi , & - J5FBFxi , J5FBFyi , J5FBFzi , J5FBxi , J5FByi , J5FBzi , J5FDxi , & - J5FDyi , J5FDzi , J5FIxi , J5FIyi , J5FIzi , J5FMGxi , J5FMGyi , & - J5FMGzi , J5MAGxi , J5MAGyi , J5MAGzi , J5MBFxi , J5MBFyi , J5MBFzi , & - J5MBxi , J5MByi , J5MBzi , J5STAxi , J5STAyi , J5STAzi , J5STVxi , & - J5STVyi , J5STVzi , J5Vxi , J5Vyi , J5Vzi , J6Axi , J6Ayi , & - J6Azi , J6DynP , J6FAGxi , J6FAGyi , J6FAGzi , J6FAMxi , J6FAMyi , & - J6FAMzi , J6FBFxi , J6FBFyi , J6FBFzi , J6FBxi , J6FByi , J6FBzi , & - J6FDxi , J6FDyi , J6FDzi , J6FIxi , J6FIyi , J6FIzi , J6FMGxi , & - J6FMGyi , J6FMGzi , J6MAGxi , J6MAGyi , J6MAGzi , J6MBFxi , J6MBFyi , & - J6MBFzi , J6MBxi , J6MByi , J6MBzi , J6STAxi , J6STAyi , J6STAzi , & - J6STVxi , J6STVyi , J6STVzi , J6Vxi , J6Vyi , J6Vzi , J7Axi , & - J7Ayi , J7Azi , J7DynP , J7FAGxi , J7FAGyi , J7FAGzi , J7FAMxi , & - J7FAMyi , J7FAMzi , J7FBFxi , J7FBFyi , J7FBFzi , J7FBxi , J7FByi , & - J7FBzi , J7FDxi , J7FDyi , J7FDzi , J7FIxi , J7FIyi , J7FIzi , & - J7FMGxi , J7FMGyi , J7FMGzi , J7MAGxi , J7MAGyi , J7MAGzi , J7MBFxi , & - J7MBFyi , J7MBFzi , J7MBxi , J7MByi , J7MBzi , J7STAxi , J7STAyi , & - J7STAzi , J7STVxi , J7STVyi , J7STVzi , J7Vxi , J7Vyi , J7Vzi , & - J8Axi , J8Ayi , J8Azi , J8DynP , J8FAGxi , J8FAGyi , J8FAGzi , & - J8FAMxi , J8FAMyi , J8FAMzi , J8FBFxi , J8FBFyi , J8FBFzi , J8FBxi , & - J8FByi , J8FBzi , J8FDxi , J8FDyi , J8FDzi , J8FIxi , J8FIyi , & - J8FIzi , J8FMGxi , J8FMGyi , J8FMGzi , J8MAGxi , J8MAGyi , J8MAGzi , & - J8MBFxi , J8MBFyi , J8MBFzi , J8MBxi , J8MByi , J8MBzi , J8STAxi , & - J8STAyi , J8STAzi , J8STVxi , J8STVyi , J8STVzi , J8Vxi , J8Vyi , & - J8Vzi , J9Axi , J9Ayi , J9Azi , J9DynP , J9FAGxi , J9FAGyi , & - J9FAGzi , J9FAMxi , J9FAMyi , J9FAMzi , J9FBFxi , J9FBFyi , J9FBFzi , & - J9FBxi , J9FByi , J9FBzi , J9FDxi , J9FDyi , J9FDzi , J9FIxi , & - J9FIyi , J9FIzi , J9FMGxi , J9FMGyi , J9FMGzi , J9MAGxi , J9MAGyi , & - J9MAGzi , J9MBFxi , J9MBFyi , J9MBFzi , J9MBxi , J9MByi , J9MBzi , & - J9STAxi , J9STAyi , J9STAzi , J9STVxi , J9STVyi , J9STVzi , J9Vxi , & - J9Vyi , J9Vzi , M1N1Axi , M1N1Ayi , M1N1Azi , M1N1DynP , M1N1FAFxi , & - M1N1FAFyi , M1N1FAFzi , M1N1FAGxi , M1N1FAGyi , M1N1FAGzi , M1N1FAMxi , M1N1FAMyi , & - M1N1FAMzi , M1N1FBFxi , M1N1FBFyi , M1N1FBFzi , M1N1FBxi , M1N1FByi , M1N1FBzi , & - M1N1FDxi , M1N1FDyi , M1N1FDzi , M1N1FIxi , M1N1FIyi , M1N1FIzi , M1N1FMGxi , & - M1N1FMGyi , M1N1FMGzi , M1N1MAFxi , M1N1MAFyi , M1N1MAFzi , M1N1MAGxi , M1N1MAGyi , & - M1N1MAGzi , M1N1MBFxi , M1N1MBFyi , M1N1MBFzi , M1N1MBxi , M1N1MByi , M1N1MBzi , & - M1N1MMGxi , M1N1MMGyi , M1N1MMGzi , M1N1STAxi , M1N1STAyi , M1N1STAzi , M1N1STVxi , & - M1N1STVyi , M1N1STVzi , M1N1Vxi , M1N1Vyi , M1N1Vzi , M1N2Axi , M1N2Ayi , & - M1N2Azi , M1N2DynP , M1N2FAFxi , M1N2FAFyi , M1N2FAFzi , M1N2FAGxi , M1N2FAGyi , & - M1N2FAGzi , M1N2FAMxi , M1N2FAMyi , M1N2FAMzi , M1N2FBFxi , M1N2FBFyi , M1N2FBFzi , & - M1N2FBxi , M1N2FByi , M1N2FBzi , M1N2FDxi , M1N2FDyi , M1N2FDzi , M1N2FIxi , & - M1N2FIyi , M1N2FIzi , M1N2FMGxi , M1N2FMGyi , M1N2FMGzi , M1N2MAFxi , M1N2MAFyi , & - M1N2MAFzi , M1N2MAGxi , M1N2MAGyi , M1N2MAGzi , M1N2MBFxi , M1N2MBFyi , M1N2MBFzi , & - M1N2MBxi , M1N2MByi , M1N2MBzi , M1N2MMGxi , M1N2MMGyi , M1N2MMGzi , M1N2STAxi , & - M1N2STAyi , M1N2STAzi , M1N2STVxi , M1N2STVyi , M1N2STVzi , M1N2Vxi , M1N2Vyi , & - M1N2Vzi , M1N3Axi , M1N3Ayi , M1N3Azi , M1N3DynP , M1N3FAFxi , M1N3FAFyi , & - M1N3FAFzi , M1N3FAGxi , M1N3FAGyi /) - ParamIndxAry(501:1000) = (/ & - M1N3FAGzi , M1N3FAMxi , M1N3FAMyi , M1N3FAMzi , M1N3FBFxi , M1N3FBFyi , M1N3FBFzi , & - M1N3FBxi , M1N3FByi , M1N3FBzi , M1N3FDxi , M1N3FDyi , M1N3FDzi , M1N3FIxi , & - M1N3FIyi , M1N3FIzi , M1N3FMGxi , M1N3FMGyi , M1N3FMGzi , M1N3MAFxi , M1N3MAFyi , & - M1N3MAFzi , M1N3MAGxi , M1N3MAGyi , M1N3MAGzi , M1N3MBFxi , M1N3MBFyi , M1N3MBFzi , & - M1N3MBxi , M1N3MByi , M1N3MBzi , M1N3MMGxi , M1N3MMGyi , M1N3MMGzi , M1N3STAxi , & - M1N3STAyi , M1N3STAzi , M1N3STVxi , M1N3STVyi , M1N3STVzi , M1N3Vxi , M1N3Vyi , & - M1N3Vzi , M1N4Axi , M1N4Ayi , M1N4Azi , M1N4DynP , M1N4FAFxi , M1N4FAFyi , & - M1N4FAFzi , M1N4FAGxi , M1N4FAGyi , M1N4FAGzi , M1N4FAMxi , M1N4FAMyi , M1N4FAMzi , & - M1N4FBFxi , M1N4FBFyi , M1N4FBFzi , M1N4FBxi , M1N4FByi , M1N4FBzi , M1N4FDxi , & - M1N4FDyi , M1N4FDzi , M1N4FIxi , M1N4FIyi , M1N4FIzi , M1N4FMGxi , M1N4FMGyi , & - M1N4FMGzi , M1N4MAFxi , M1N4MAFyi , M1N4MAFzi , M1N4MAGxi , M1N4MAGyi , M1N4MAGzi , & - M1N4MBFxi , M1N4MBFyi , M1N4MBFzi , M1N4MBxi , M1N4MByi , M1N4MBzi , M1N4MMGxi , & - M1N4MMGyi , M1N4MMGzi , M1N4STAxi , M1N4STAyi , M1N4STAzi , M1N4STVxi , M1N4STVyi , & - M1N4STVzi , M1N4Vxi , M1N4Vyi , M1N4Vzi , M1N5Axi , M1N5Ayi , M1N5Azi , & - M1N5DynP , M1N5FAFxi , M1N5FAFyi , M1N5FAFzi , M1N5FAGxi , M1N5FAGyi , M1N5FAGzi , & - M1N5FAMxi , M1N5FAMyi , M1N5FAMzi , M1N5FBFxi , M1N5FBFyi , M1N5FBFzi , M1N5FBxi , & - M1N5FByi , M1N5FBzi , M1N5FDxi , M1N5FDyi , M1N5FDzi , M1N5FIxi , M1N5FIyi , & - M1N5FIzi , M1N5FMGxi , M1N5FMGyi , M1N5FMGzi , M1N5MAFxi , M1N5MAFyi , M1N5MAFzi , & - M1N5MAGxi , M1N5MAGyi , M1N5MAGzi , M1N5MBFxi , M1N5MBFyi , M1N5MBFzi , M1N5MBxi , & - M1N5MByi , M1N5MBzi , M1N5MMGxi , M1N5MMGyi , M1N5MMGzi , M1N5STAxi , M1N5STAyi , & - M1N5STAzi , M1N5STVxi , M1N5STVyi , M1N5STVzi , M1N5Vxi , M1N5Vyi , M1N5Vzi , & - M1N6Axi , M1N6Ayi , M1N6Azi , M1N6DynP , M1N6FAFxi , M1N6FAFyi , M1N6FAFzi , & - M1N6FAGxi , M1N6FAGyi , M1N6FAGzi , M1N6FAMxi , M1N6FAMyi , M1N6FAMzi , M1N6FBFxi , & - M1N6FBFyi , M1N6FBFzi , M1N6FBxi , M1N6FByi , M1N6FBzi , M1N6FDxi , M1N6FDyi , & - M1N6FDzi , M1N6FIxi , M1N6FIyi , M1N6FIzi , M1N6FMGxi , M1N6FMGyi , M1N6FMGzi , & - M1N6MAFxi , M1N6MAFyi , M1N6MAFzi , M1N6MAGxi , M1N6MAGyi , M1N6MAGzi , M1N6MBFxi , & - M1N6MBFyi , M1N6MBFzi , M1N6MBxi , M1N6MByi , M1N6MBzi , M1N6MMGxi , M1N6MMGyi , & - M1N6MMGzi , M1N6STAxi , M1N6STAyi , M1N6STAzi , M1N6STVxi , M1N6STVyi , M1N6STVzi , & - M1N6Vxi , M1N6Vyi , M1N6Vzi , M1N7Axi , M1N7Ayi , M1N7Azi , M1N7DynP , & - M1N7FAFxi , M1N7FAFyi , M1N7FAFzi , M1N7FAGxi , M1N7FAGyi , M1N7FAGzi , M1N7FAMxi , & - M1N7FAMyi , M1N7FAMzi , M1N7FBFxi , M1N7FBFyi , M1N7FBFzi , M1N7FBxi , M1N7FByi , & - M1N7FBzi , M1N7FDxi , M1N7FDyi , M1N7FDzi , M1N7FIxi , M1N7FIyi , M1N7FIzi , & - M1N7FMGxi , M1N7FMGyi , M1N7FMGzi , M1N7MAFxi , M1N7MAFyi , M1N7MAFzi , M1N7MAGxi , & - M1N7MAGyi , M1N7MAGzi , M1N7MBFxi , M1N7MBFyi , M1N7MBFzi , M1N7MBxi , M1N7MByi , & - M1N7MBzi , M1N7MMGxi , M1N7MMGyi , M1N7MMGzi , M1N7STAxi , M1N7STAyi , M1N7STAzi , & - M1N7STVxi , M1N7STVyi , M1N7STVzi , M1N7Vxi , M1N7Vyi , M1N7Vzi , M1N8Axi , & - M1N8Ayi , M1N8Azi , M1N8DynP , M1N8FAFxi , M1N8FAFyi , M1N8FAFzi , M1N8FAGxi , & - M1N8FAGyi , M1N8FAGzi , M1N8FAMxi , M1N8FAMyi , M1N8FAMzi , M1N8FBFxi , M1N8FBFyi , & - M1N8FBFzi , M1N8FBxi , M1N8FByi , M1N8FBzi , M1N8FDxi , M1N8FDyi , M1N8FDzi , & - M1N8FIxi , M1N8FIyi , M1N8FIzi , M1N8FMGxi , M1N8FMGyi , M1N8FMGzi , M1N8MAFxi , & - M1N8MAFyi , M1N8MAFzi , M1N8MAGxi , M1N8MAGyi , M1N8MAGzi , M1N8MBFxi , M1N8MBFyi , & - M1N8MBFzi , M1N8MBxi , M1N8MByi , M1N8MBzi , M1N8MMGxi , M1N8MMGyi , M1N8MMGzi , & - M1N8STAxi , M1N8STAyi , M1N8STAzi , M1N8STVxi , M1N8STVyi , M1N8STVzi , M1N8Vxi , & - M1N8Vyi , M1N8Vzi , M1N9Axi , M1N9Ayi , M1N9Azi , M1N9DynP , M1N9FAFxi , & - M1N9FAFyi , M1N9FAFzi , M1N9FAGxi , M1N9FAGyi , M1N9FAGzi , M1N9FAMxi , M1N9FAMyi , & - M1N9FAMzi , M1N9FBFxi , M1N9FBFyi , M1N9FBFzi , M1N9FBxi , M1N9FByi , M1N9FBzi , & - M1N9FDxi , M1N9FDyi , M1N9FDzi , M1N9FIxi , M1N9FIyi , M1N9FIzi , M1N9FMGxi , & - M1N9FMGyi , M1N9FMGzi , M1N9MAFxi , M1N9MAFyi , M1N9MAFzi , M1N9MAGxi , M1N9MAGyi , & - M1N9MAGzi , M1N9MBFxi , M1N9MBFyi , M1N9MBFzi , M1N9MBxi , M1N9MByi , M1N9MBzi , & - M1N9MMGxi , M1N9MMGyi , M1N9MMGzi , M1N9STAxi , M1N9STAyi , M1N9STAzi , M1N9STVxi , & - M1N9STVyi , M1N9STVzi , M1N9Vxi , M1N9Vyi , M1N9Vzi , M2N1Axi , M2N1Ayi , & - M2N1Azi , M2N1DynP , M2N1FAFxi , M2N1FAFyi , M2N1FAFzi , M2N1FAGxi , M2N1FAGyi , & - M2N1FAGzi , M2N1FAMxi , M2N1FAMyi , M2N1FAMzi , M2N1FBFxi , M2N1FBFyi , M2N1FBFzi , & - M2N1FBxi , M2N1FByi , M2N1FBzi , M2N1FDxi , M2N1FDyi , M2N1FDzi , M2N1FIxi , & - M2N1FIyi , M2N1FIzi , M2N1FMGxi , M2N1FMGyi , M2N1FMGzi , M2N1MAFxi , M2N1MAFyi , & - M2N1MAFzi , M2N1MAGxi , M2N1MAGyi , M2N1MAGzi , M2N1MBFxi , M2N1MBFyi , M2N1MBFzi , & - M2N1MBxi , M2N1MByi , M2N1MBzi , M2N1MMGxi , M2N1MMGyi , M2N1MMGzi , M2N1STAxi , & - M2N1STAyi , M2N1STAzi , M2N1STVxi , M2N1STVyi , M2N1STVzi , M2N1Vxi , M2N1Vyi , & - M2N1Vzi , M2N2Axi , M2N2Ayi , M2N2Azi , M2N2DynP , M2N2FAFxi , M2N2FAFyi , & - M2N2FAFzi , M2N2FAGxi , M2N2FAGyi , M2N2FAGzi , M2N2FAMxi , M2N2FAMyi , M2N2FAMzi , & - M2N2FBFxi , M2N2FBFyi , M2N2FBFzi , M2N2FBxi , M2N2FByi , M2N2FBzi , M2N2FDxi , & - M2N2FDyi , M2N2FDzi , M2N2FIxi , M2N2FIyi , M2N2FIzi , M2N2FMGxi , M2N2FMGyi , & - M2N2FMGzi , M2N2MAFxi , M2N2MAFyi , M2N2MAFzi , M2N2MAGxi , M2N2MAGyi , M2N2MAGzi , & - M2N2MBFxi , M2N2MBFyi , M2N2MBFzi , M2N2MBxi , M2N2MByi , M2N2MBzi , M2N2MMGxi , & - M2N2MMGyi , M2N2MMGzi , M2N2STAxi , M2N2STAyi , M2N2STAzi , M2N2STVxi , M2N2STVyi , & - M2N2STVzi , M2N2Vxi , M2N2Vyi , M2N2Vzi , M2N3Axi , M2N3Ayi , M2N3Azi , & - M2N3DynP , M2N3FAFxi , M2N3FAFyi , M2N3FAFzi , M2N3FAGxi , M2N3FAGyi , M2N3FAGzi , & - M2N3FAMxi , M2N3FAMyi , M2N3FAMzi , M2N3FBFxi , M2N3FBFyi , M2N3FBFzi , M2N3FBxi , & - M2N3FByi , M2N3FBzi , M2N3FDxi , M2N3FDyi , M2N3FDzi , M2N3FIxi , M2N3FIyi , & - M2N3FIzi , M2N3FMGxi , M2N3FMGyi , M2N3FMGzi , M2N3MAFxi , M2N3MAFyi , M2N3MAFzi , & - M2N3MAGxi , M2N3MAGyi , M2N3MAGzi , M2N3MBFxi , M2N3MBFyi , M2N3MBFzi , M2N3MBxi , & - M2N3MByi , M2N3MBzi , M2N3MMGxi /) - ParamIndxAry(1001:1500) = (/ & - M2N3MMGyi , M2N3MMGzi , M2N3STAxi , M2N3STAyi , M2N3STAzi , M2N3STVxi , M2N3STVyi , & - M2N3STVzi , M2N3Vxi , M2N3Vyi , M2N3Vzi , M2N4Axi , M2N4Ayi , M2N4Azi , & - M2N4DynP , M2N4FAFxi , M2N4FAFyi , M2N4FAFzi , M2N4FAGxi , M2N4FAGyi , M2N4FAGzi , & - M2N4FAMxi , M2N4FAMyi , M2N4FAMzi , M2N4FBFxi , M2N4FBFyi , M2N4FBFzi , M2N4FBxi , & - M2N4FByi , M2N4FBzi , M2N4FDxi , M2N4FDyi , M2N4FDzi , M2N4FIxi , M2N4FIyi , & - M2N4FIzi , M2N4FMGxi , M2N4FMGyi , M2N4FMGzi , M2N4MAFxi , M2N4MAFyi , M2N4MAFzi , & - M2N4MAGxi , M2N4MAGyi , M2N4MAGzi , M2N4MBFxi , M2N4MBFyi , M2N4MBFzi , M2N4MBxi , & - M2N4MByi , M2N4MBzi , M2N4MMGxi , M2N4MMGyi , M2N4MMGzi , M2N4STAxi , M2N4STAyi , & - M2N4STAzi , M2N4STVxi , M2N4STVyi , M2N4STVzi , M2N4Vxi , M2N4Vyi , M2N4Vzi , & - M2N5Axi , M2N5Ayi , M2N5Azi , M2N5DynP , M2N5FAFxi , M2N5FAFyi , M2N5FAFzi , & - M2N5FAGxi , M2N5FAGyi , M2N5FAGzi , M2N5FAMxi , M2N5FAMyi , M2N5FAMzi , M2N5FBFxi , & - M2N5FBFyi , M2N5FBFzi , M2N5FBxi , M2N5FByi , M2N5FBzi , M2N5FDxi , M2N5FDyi , & - M2N5FDzi , M2N5FIxi , M2N5FIyi , M2N5FIzi , M2N5FMGxi , M2N5FMGyi , M2N5FMGzi , & - M2N5MAFxi , M2N5MAFyi , M2N5MAFzi , M2N5MAGxi , M2N5MAGyi , M2N5MAGzi , M2N5MBFxi , & - M2N5MBFyi , M2N5MBFzi , M2N5MBxi , M2N5MByi , M2N5MBzi , M2N5MMGxi , M2N5MMGyi , & - M2N5MMGzi , M2N5STAxi , M2N5STAyi , M2N5STAzi , M2N5STVxi , M2N5STVyi , M2N5STVzi , & - M2N5Vxi , M2N5Vyi , M2N5Vzi , M2N6Axi , M2N6Ayi , M2N6Azi , M2N6DynP , & - M2N6FAFxi , M2N6FAFyi , M2N6FAFzi , M2N6FAGxi , M2N6FAGyi , M2N6FAGzi , M2N6FAMxi , & - M2N6FAMyi , M2N6FAMzi , M2N6FBFxi , M2N6FBFyi , M2N6FBFzi , M2N6FBxi , M2N6FByi , & - M2N6FBzi , M2N6FDxi , M2N6FDyi , M2N6FDzi , M2N6FIxi , M2N6FIyi , M2N6FIzi , & - M2N6FMGxi , M2N6FMGyi , M2N6FMGzi , M2N6MAFxi , M2N6MAFyi , M2N6MAFzi , M2N6MAGxi , & - M2N6MAGyi , M2N6MAGzi , M2N6MBFxi , M2N6MBFyi , M2N6MBFzi , M2N6MBxi , M2N6MByi , & - M2N6MBzi , M2N6MMGxi , M2N6MMGyi , M2N6MMGzi , M2N6STAxi , M2N6STAyi , M2N6STAzi , & - M2N6STVxi , M2N6STVyi , M2N6STVzi , M2N6Vxi , M2N6Vyi , M2N6Vzi , M2N7Axi , & - M2N7Ayi , M2N7Azi , M2N7DynP , M2N7FAFxi , M2N7FAFyi , M2N7FAFzi , M2N7FAGxi , & - M2N7FAGyi , M2N7FAGzi , M2N7FAMxi , M2N7FAMyi , M2N7FAMzi , M2N7FBFxi , M2N7FBFyi , & - M2N7FBFzi , M2N7FBxi , M2N7FByi , M2N7FBzi , M2N7FDxi , M2N7FDyi , M2N7FDzi , & - M2N7FIxi , M2N7FIyi , M2N7FIzi , M2N7FMGxi , M2N7FMGyi , M2N7FMGzi , M2N7MAFxi , & - M2N7MAFyi , M2N7MAFzi , M2N7MAGxi , M2N7MAGyi , M2N7MAGzi , M2N7MBFxi , M2N7MBFyi , & - M2N7MBFzi , M2N7MBxi , M2N7MByi , M2N7MBzi , M2N7MMGxi , M2N7MMGyi , M2N7MMGzi , & - M2N7STAxi , M2N7STAyi , M2N7STAzi , M2N7STVxi , M2N7STVyi , M2N7STVzi , M2N7Vxi , & - M2N7Vyi , M2N7Vzi , M2N8Axi , M2N8Ayi , M2N8Azi , M2N8DynP , M2N8FAFxi , & - M2N8FAFyi , M2N8FAFzi , M2N8FAGxi , M2N8FAGyi , M2N8FAGzi , M2N8FAMxi , M2N8FAMyi , & - M2N8FAMzi , M2N8FBFxi , M2N8FBFyi , M2N8FBFzi , M2N8FBxi , M2N8FByi , M2N8FBzi , & - M2N8FDxi , M2N8FDyi , M2N8FDzi , M2N8FIxi , M2N8FIyi , M2N8FIzi , M2N8FMGxi , & - M2N8FMGyi , M2N8FMGzi , M2N8MAFxi , M2N8MAFyi , M2N8MAFzi , M2N8MAGxi , M2N8MAGyi , & - M2N8MAGzi , M2N8MBFxi , M2N8MBFyi , M2N8MBFzi , M2N8MBxi , M2N8MByi , M2N8MBzi , & - M2N8MMGxi , M2N8MMGyi , M2N8MMGzi , M2N8STAxi , M2N8STAyi , M2N8STAzi , M2N8STVxi , & - M2N8STVyi , M2N8STVzi , M2N8Vxi , M2N8Vyi , M2N8Vzi , M2N9Axi , M2N9Ayi , & - M2N9Azi , M2N9DynP , M2N9FAFxi , M2N9FAFyi , M2N9FAFzi , M2N9FAGxi , M2N9FAGyi , & - M2N9FAGzi , M2N9FAMxi , M2N9FAMyi , M2N9FAMzi , M2N9FBFxi , M2N9FBFyi , M2N9FBFzi , & - M2N9FBxi , M2N9FByi , M2N9FBzi , M2N9FDxi , M2N9FDyi , M2N9FDzi , M2N9FIxi , & - M2N9FIyi , M2N9FIzi , M2N9FMGxi , M2N9FMGyi , M2N9FMGzi , M2N9MAFxi , M2N9MAFyi , & - M2N9MAFzi , M2N9MAGxi , M2N9MAGyi , M2N9MAGzi , M2N9MBFxi , M2N9MBFyi , M2N9MBFzi , & - M2N9MBxi , M2N9MByi , M2N9MBzi , M2N9MMGxi , M2N9MMGyi , M2N9MMGzi , M2N9STAxi , & - M2N9STAyi , M2N9STAzi , M2N9STVxi , M2N9STVyi , M2N9STVzi , M2N9Vxi , M2N9Vyi , & - M2N9Vzi , M3N1Axi , M3N1Ayi , M3N1Azi , M3N1DynP , M3N1FAFxi , M3N1FAFyi , & - M3N1FAFzi , M3N1FAGxi , M3N1FAGyi , M3N1FAGzi , M3N1FAMxi , M3N1FAMyi , M3N1FAMzi , & - M3N1FBFxi , M3N1FBFyi , M3N1FBFzi , M3N1FBxi , M3N1FByi , M3N1FBzi , M3N1FDxi , & - M3N1FDyi , M3N1FDzi , M3N1FIxi , M3N1FIyi , M3N1FIzi , M3N1FMGxi , M3N1FMGyi , & - M3N1FMGzi , M3N1MAFxi , M3N1MAFyi , M3N1MAFzi , M3N1MAGxi , M3N1MAGyi , M3N1MAGzi , & - M3N1MBFxi , M3N1MBFyi , M3N1MBFzi , M3N1MBxi , M3N1MByi , M3N1MBzi , M3N1MMGxi , & - M3N1MMGyi , M3N1MMGzi , M3N1STAxi , M3N1STAyi , M3N1STAzi , M3N1STVxi , M3N1STVyi , & - M3N1STVzi , M3N1Vxi , M3N1Vyi , M3N1Vzi , M3N2Axi , M3N2Ayi , M3N2Azi , & - M3N2DynP , M3N2FAFxi , M3N2FAFyi , M3N2FAFzi , M3N2FAGxi , M3N2FAGyi , M3N2FAGzi , & - M3N2FAMxi , M3N2FAMyi , M3N2FAMzi , M3N2FBFxi , M3N2FBFyi , M3N2FBFzi , M3N2FBxi , & - M3N2FByi , M3N2FBzi , M3N2FDxi , M3N2FDyi , M3N2FDzi , M3N2FIxi , M3N2FIyi , & - M3N2FIzi , M3N2FMGxi , M3N2FMGyi , M3N2FMGzi , M3N2MAFxi , M3N2MAFyi , M3N2MAFzi , & - M3N2MAGxi , M3N2MAGyi , M3N2MAGzi , M3N2MBFxi , M3N2MBFyi , M3N2MBFzi , M3N2MBxi , & - M3N2MByi , M3N2MBzi , M3N2MMGxi , M3N2MMGyi , M3N2MMGzi , M3N2STAxi , M3N2STAyi , & - M3N2STAzi , M3N2STVxi , M3N2STVyi , M3N2STVzi , M3N2Vxi , M3N2Vyi , M3N2Vzi , & - M3N3Axi , M3N3Ayi , M3N3Azi , M3N3DynP , M3N3FAFxi , M3N3FAFyi , M3N3FAFzi , & - M3N3FAGxi , M3N3FAGyi , M3N3FAGzi , M3N3FAMxi , M3N3FAMyi , M3N3FAMzi , M3N3FBFxi , & - M3N3FBFyi , M3N3FBFzi , M3N3FBxi , M3N3FByi , M3N3FBzi , M3N3FDxi , M3N3FDyi , & - M3N3FDzi , M3N3FIxi , M3N3FIyi , M3N3FIzi , M3N3FMGxi , M3N3FMGyi , M3N3FMGzi , & - M3N3MAFxi , M3N3MAFyi , M3N3MAFzi , M3N3MAGxi , M3N3MAGyi , M3N3MAGzi , M3N3MBFxi , & - M3N3MBFyi , M3N3MBFzi , M3N3MBxi , M3N3MByi , M3N3MBzi , M3N3MMGxi , M3N3MMGyi , & - M3N3MMGzi , M3N3STAxi , M3N3STAyi , M3N3STAzi , M3N3STVxi , M3N3STVyi , M3N3STVzi , & - M3N3Vxi , M3N3Vyi , M3N3Vzi , M3N4Axi , M3N4Ayi , M3N4Azi , M3N4DynP , & - M3N4FAFxi , M3N4FAFyi , M3N4FAFzi , M3N4FAGxi , M3N4FAGyi , M3N4FAGzi , M3N4FAMxi , & - M3N4FAMyi , M3N4FAMzi , M3N4FBFxi , M3N4FBFyi , M3N4FBFzi , M3N4FBxi , M3N4FByi , & - M3N4FBzi , M3N4FDxi , M3N4FDyi /) - ParamIndxAry(1501:2000) = (/ & - M3N4FDzi , M3N4FIxi , M3N4FIyi , M3N4FIzi , M3N4FMGxi , M3N4FMGyi , M3N4FMGzi , & - M3N4MAFxi , M3N4MAFyi , M3N4MAFzi , M3N4MAGxi , M3N4MAGyi , M3N4MAGzi , M3N4MBFxi , & - M3N4MBFyi , M3N4MBFzi , M3N4MBxi , M3N4MByi , M3N4MBzi , M3N4MMGxi , M3N4MMGyi , & - M3N4MMGzi , M3N4STAxi , M3N4STAyi , M3N4STAzi , M3N4STVxi , M3N4STVyi , M3N4STVzi , & - M3N4Vxi , M3N4Vyi , M3N4Vzi , M3N5Axi , M3N5Ayi , M3N5Azi , M3N5DynP , & - M3N5FAFxi , M3N5FAFyi , M3N5FAFzi , M3N5FAGxi , M3N5FAGyi , M3N5FAGzi , M3N5FAMxi , & - M3N5FAMyi , M3N5FAMzi , M3N5FBFxi , M3N5FBFyi , M3N5FBFzi , M3N5FBxi , M3N5FByi , & - M3N5FBzi , M3N5FDxi , M3N5FDyi , M3N5FDzi , M3N5FIxi , M3N5FIyi , M3N5FIzi , & - M3N5FMGxi , M3N5FMGyi , M3N5FMGzi , M3N5MAFxi , M3N5MAFyi , M3N5MAFzi , M3N5MAGxi , & - M3N5MAGyi , M3N5MAGzi , M3N5MBFxi , M3N5MBFyi , M3N5MBFzi , M3N5MBxi , M3N5MByi , & - M3N5MBzi , M3N5MMGxi , M3N5MMGyi , M3N5MMGzi , M3N5STAxi , M3N5STAyi , M3N5STAzi , & - M3N5STVxi , M3N5STVyi , M3N5STVzi , M3N5Vxi , M3N5Vyi , M3N5Vzi , M3N6Axi , & - M3N6Ayi , M3N6Azi , M3N6DynP , M3N6FAFxi , M3N6FAFyi , M3N6FAFzi , M3N6FAGxi , & - M3N6FAGyi , M3N6FAGzi , M3N6FAMxi , M3N6FAMyi , M3N6FAMzi , M3N6FBFxi , M3N6FBFyi , & - M3N6FBFzi , M3N6FBxi , M3N6FByi , M3N6FBzi , M3N6FDxi , M3N6FDyi , M3N6FDzi , & - M3N6FIxi , M3N6FIyi , M3N6FIzi , M3N6FMGxi , M3N6FMGyi , M3N6FMGzi , M3N6MAFxi , & - M3N6MAFyi , M3N6MAFzi , M3N6MAGxi , M3N6MAGyi , M3N6MAGzi , M3N6MBFxi , M3N6MBFyi , & - M3N6MBFzi , M3N6MBxi , M3N6MByi , M3N6MBzi , M3N6MMGxi , M3N6MMGyi , M3N6MMGzi , & - M3N6STAxi , M3N6STAyi , M3N6STAzi , M3N6STVxi , M3N6STVyi , M3N6STVzi , M3N6Vxi , & - M3N6Vyi , M3N6Vzi , M3N7Axi , M3N7Ayi , M3N7Azi , M3N7DynP , M3N7FAFxi , & - M3N7FAFyi , M3N7FAFzi , M3N7FAGxi , M3N7FAGyi , M3N7FAGzi , M3N7FAMxi , M3N7FAMyi , & - M3N7FAMzi , M3N7FBFxi , M3N7FBFyi , M3N7FBFzi , M3N7FBxi , M3N7FByi , M3N7FBzi , & - M3N7FDxi , M3N7FDyi , M3N7FDzi , M3N7FIxi , M3N7FIyi , M3N7FIzi , M3N7FMGxi , & - M3N7FMGyi , M3N7FMGzi , M3N7MAFxi , M3N7MAFyi , M3N7MAFzi , M3N7MAGxi , M3N7MAGyi , & - M3N7MAGzi , M3N7MBFxi , M3N7MBFyi , M3N7MBFzi , M3N7MBxi , M3N7MByi , M3N7MBzi , & - M3N7MMGxi , M3N7MMGyi , M3N7MMGzi , M3N7STAxi , M3N7STAyi , M3N7STAzi , M3N7STVxi , & - M3N7STVyi , M3N7STVzi , M3N7Vxi , M3N7Vyi , M3N7Vzi , M3N8Axi , M3N8Ayi , & - M3N8Azi , M3N8DynP , M3N8FAFxi , M3N8FAFyi , M3N8FAFzi , M3N8FAGxi , M3N8FAGyi , & - M3N8FAGzi , M3N8FAMxi , M3N8FAMyi , M3N8FAMzi , M3N8FBFxi , M3N8FBFyi , M3N8FBFzi , & - M3N8FBxi , M3N8FByi , M3N8FBzi , M3N8FDxi , M3N8FDyi , M3N8FDzi , M3N8FIxi , & - M3N8FIyi , M3N8FIzi , M3N8FMGxi , M3N8FMGyi , M3N8FMGzi , M3N8MAFxi , M3N8MAFyi , & - M3N8MAFzi , M3N8MAGxi , M3N8MAGyi , M3N8MAGzi , M3N8MBFxi , M3N8MBFyi , M3N8MBFzi , & - M3N8MBxi , M3N8MByi , M3N8MBzi , M3N8MMGxi , M3N8MMGyi , M3N8MMGzi , M3N8STAxi , & - M3N8STAyi , M3N8STAzi , M3N8STVxi , M3N8STVyi , M3N8STVzi , M3N8Vxi , M3N8Vyi , & - M3N8Vzi , M3N9Axi , M3N9Ayi , M3N9Azi , M3N9DynP , M3N9FAFxi , M3N9FAFyi , & - M3N9FAFzi , M3N9FAGxi , M3N9FAGyi , M3N9FAGzi , M3N9FAMxi , M3N9FAMyi , M3N9FAMzi , & - M3N9FBFxi , M3N9FBFyi , M3N9FBFzi , M3N9FBxi , M3N9FByi , M3N9FBzi , M3N9FDxi , & - M3N9FDyi , M3N9FDzi , M3N9FIxi , M3N9FIyi , M3N9FIzi , M3N9FMGxi , M3N9FMGyi , & - M3N9FMGzi , M3N9MAFxi , M3N9MAFyi , M3N9MAFzi , M3N9MAGxi , M3N9MAGyi , M3N9MAGzi , & - M3N9MBFxi , M3N9MBFyi , M3N9MBFzi , M3N9MBxi , M3N9MByi , M3N9MBzi , M3N9MMGxi , & - M3N9MMGyi , M3N9MMGzi , M3N9STAxi , M3N9STAyi , M3N9STAzi , M3N9STVxi , M3N9STVyi , & - M3N9STVzi , M3N9Vxi , M3N9Vyi , M3N9Vzi , M4N1Axi , M4N1Ayi , M4N1Azi , & - M4N1DynP , M4N1FAFxi , M4N1FAFyi , M4N1FAFzi , M4N1FAGxi , M4N1FAGyi , M4N1FAGzi , & - M4N1FAMxi , M4N1FAMyi , M4N1FAMzi , M4N1FBFxi , M4N1FBFyi , M4N1FBFzi , M4N1FBxi , & - M4N1FByi , M4N1FBzi , M4N1FDxi , M4N1FDyi , M4N1FDzi , M4N1FIxi , M4N1FIyi , & - M4N1FIzi , M4N1FMGxi , M4N1FMGyi , M4N1FMGzi , M4N1MAFxi , M4N1MAFyi , M4N1MAFzi , & - M4N1MAGxi , M4N1MAGyi , M4N1MAGzi , M4N1MBFxi , M4N1MBFyi , M4N1MBFzi , M4N1MBxi , & - M4N1MByi , M4N1MBzi , M4N1MMGxi , M4N1MMGyi , M4N1MMGzi , M4N1STAxi , M4N1STAyi , & - M4N1STAzi , M4N1STVxi , M4N1STVyi , M4N1STVzi , M4N1Vxi , M4N1Vyi , M4N1Vzi , & - M4N2Axi , M4N2Ayi , M4N2Azi , M4N2DynP , M4N2FAFxi , M4N2FAFyi , M4N2FAFzi , & - M4N2FAGxi , M4N2FAGyi , M4N2FAGzi , M4N2FAMxi , M4N2FAMyi , M4N2FAMzi , M4N2FBFxi , & - M4N2FBFyi , M4N2FBFzi , M4N2FBxi , M4N2FByi , M4N2FBzi , M4N2FDxi , M4N2FDyi , & - M4N2FDzi , M4N2FIxi , M4N2FIyi , M4N2FIzi , M4N2FMGxi , M4N2FMGyi , M4N2FMGzi , & - M4N2MAFxi , M4N2MAFyi , M4N2MAFzi , M4N2MAGxi , M4N2MAGyi , M4N2MAGzi , M4N2MBFxi , & - M4N2MBFyi , M4N2MBFzi , M4N2MBxi , M4N2MByi , M4N2MBzi , M4N2MMGxi , M4N2MMGyi , & - M4N2MMGzi , M4N2STAxi , M4N2STAyi , M4N2STAzi , M4N2STVxi , M4N2STVyi , M4N2STVzi , & - M4N2Vxi , M4N2Vyi , M4N2Vzi , M4N3Axi , M4N3Ayi , M4N3Azi , M4N3DynP , & - M4N3FAFxi , M4N3FAFyi , M4N3FAFzi , M4N3FAGxi , M4N3FAGyi , M4N3FAGzi , M4N3FAMxi , & - M4N3FAMyi , M4N3FAMzi , M4N3FBFxi , M4N3FBFyi , M4N3FBFzi , M4N3FBxi , M4N3FByi , & - M4N3FBzi , M4N3FDxi , M4N3FDyi , M4N3FDzi , M4N3FIxi , M4N3FIyi , M4N3FIzi , & - M4N3FMGxi , M4N3FMGyi , M4N3FMGzi , M4N3MAFxi , M4N3MAFyi , M4N3MAFzi , M4N3MAGxi , & - M4N3MAGyi , M4N3MAGzi , M4N3MBFxi , M4N3MBFyi , M4N3MBFzi , M4N3MBxi , M4N3MByi , & - M4N3MBzi , M4N3MMGxi , M4N3MMGyi , M4N3MMGzi , M4N3STAxi , M4N3STAyi , M4N3STAzi , & - M4N3STVxi , M4N3STVyi , M4N3STVzi , M4N3Vxi , M4N3Vyi , M4N3Vzi , M4N4Axi , & - M4N4Ayi , M4N4Azi , M4N4DynP , M4N4FAFxi , M4N4FAFyi , M4N4FAFzi , M4N4FAGxi , & - M4N4FAGyi , M4N4FAGzi , M4N4FAMxi , M4N4FAMyi , M4N4FAMzi , M4N4FBFxi , M4N4FBFyi , & - M4N4FBFzi , M4N4FBxi , M4N4FByi , M4N4FBzi , M4N4FDxi , M4N4FDyi , M4N4FDzi , & - M4N4FIxi , M4N4FIyi , M4N4FIzi , M4N4FMGxi , M4N4FMGyi , M4N4FMGzi , M4N4MAFxi , & - M4N4MAFyi , M4N4MAFzi , M4N4MAGxi , M4N4MAGyi , M4N4MAGzi , M4N4MBFxi , M4N4MBFyi , & - M4N4MBFzi , M4N4MBxi , M4N4MByi , M4N4MBzi , M4N4MMGxi , M4N4MMGyi , M4N4MMGzi , & - M4N4STAxi , M4N4STAyi , M4N4STAzi , M4N4STVxi , M4N4STVyi , M4N4STVzi , M4N4Vxi , & - M4N4Vyi , M4N4Vzi , M4N5Axi /) - ParamIndxAry(2001:2500) = (/ & - M4N5Ayi , M4N5Azi , M4N5DynP , M4N5FAFxi , M4N5FAFyi , M4N5FAFzi , M4N5FAGxi , & - M4N5FAGyi , M4N5FAGzi , M4N5FAMxi , M4N5FAMyi , M4N5FAMzi , M4N5FBFxi , M4N5FBFyi , & - M4N5FBFzi , M4N5FBxi , M4N5FByi , M4N5FBzi , M4N5FDxi , M4N5FDyi , M4N5FDzi , & - M4N5FIxi , M4N5FIyi , M4N5FIzi , M4N5FMGxi , M4N5FMGyi , M4N5FMGzi , M4N5MAFxi , & - M4N5MAFyi , M4N5MAFzi , M4N5MAGxi , M4N5MAGyi , M4N5MAGzi , M4N5MBFxi , M4N5MBFyi , & - M4N5MBFzi , M4N5MBxi , M4N5MByi , M4N5MBzi , M4N5MMGxi , M4N5MMGyi , M4N5MMGzi , & - M4N5STAxi , M4N5STAyi , M4N5STAzi , M4N5STVxi , M4N5STVyi , M4N5STVzi , M4N5Vxi , & - M4N5Vyi , M4N5Vzi , M4N6Axi , M4N6Ayi , M4N6Azi , M4N6DynP , M4N6FAFxi , & - M4N6FAFyi , M4N6FAFzi , M4N6FAGxi , M4N6FAGyi , M4N6FAGzi , M4N6FAMxi , M4N6FAMyi , & - M4N6FAMzi , M4N6FBFxi , M4N6FBFyi , M4N6FBFzi , M4N6FBxi , M4N6FByi , M4N6FBzi , & - M4N6FDxi , M4N6FDyi , M4N6FDzi , M4N6FIxi , M4N6FIyi , M4N6FIzi , M4N6FMGxi , & - M4N6FMGyi , M4N6FMGzi , M4N6MAFxi , M4N6MAFyi , M4N6MAFzi , M4N6MAGxi , M4N6MAGyi , & - M4N6MAGzi , M4N6MBFxi , M4N6MBFyi , M4N6MBFzi , M4N6MBxi , M4N6MByi , M4N6MBzi , & - M4N6MMGxi , M4N6MMGyi , M4N6MMGzi , M4N6STAxi , M4N6STAyi , M4N6STAzi , M4N6STVxi , & - M4N6STVyi , M4N6STVzi , M4N6Vxi , M4N6Vyi , M4N6Vzi , M4N7Axi , M4N7Ayi , & - M4N7Azi , M4N7DynP , M4N7FAFxi , M4N7FAFyi , M4N7FAFzi , M4N7FAGxi , M4N7FAGyi , & - M4N7FAGzi , M4N7FAMxi , M4N7FAMyi , M4N7FAMzi , M4N7FBFxi , M4N7FBFyi , M4N7FBFzi , & - M4N7FBxi , M4N7FByi , M4N7FBzi , M4N7FDxi , M4N7FDyi , M4N7FDzi , M4N7FIxi , & - M4N7FIyi , M4N7FIzi , M4N7FMGxi , M4N7FMGyi , M4N7FMGzi , M4N7MAFxi , M4N7MAFyi , & - M4N7MAFzi , M4N7MAGxi , M4N7MAGyi , M4N7MAGzi , M4N7MBFxi , M4N7MBFyi , M4N7MBFzi , & - M4N7MBxi , M4N7MByi , M4N7MBzi , M4N7MMGxi , M4N7MMGyi , M4N7MMGzi , M4N7STAxi , & - M4N7STAyi , M4N7STAzi , M4N7STVxi , M4N7STVyi , M4N7STVzi , M4N7Vxi , M4N7Vyi , & - M4N7Vzi , M4N8Axi , M4N8Ayi , M4N8Azi , M4N8DynP , M4N8FAFxi , M4N8FAFyi , & - M4N8FAFzi , M4N8FAGxi , M4N8FAGyi , M4N8FAGzi , M4N8FAMxi , M4N8FAMyi , M4N8FAMzi , & - M4N8FBFxi , M4N8FBFyi , M4N8FBFzi , M4N8FBxi , M4N8FByi , M4N8FBzi , M4N8FDxi , & - M4N8FDyi , M4N8FDzi , M4N8FIxi , M4N8FIyi , M4N8FIzi , M4N8FMGxi , M4N8FMGyi , & - M4N8FMGzi , M4N8MAFxi , M4N8MAFyi , M4N8MAFzi , M4N8MAGxi , M4N8MAGyi , M4N8MAGzi , & - M4N8MBFxi , M4N8MBFyi , M4N8MBFzi , M4N8MBxi , M4N8MByi , M4N8MBzi , M4N8MMGxi , & - M4N8MMGyi , M4N8MMGzi , M4N8STAxi , M4N8STAyi , M4N8STAzi , M4N8STVxi , M4N8STVyi , & - M4N8STVzi , M4N8Vxi , M4N8Vyi , M4N8Vzi , M4N9Axi , M4N9Ayi , M4N9Azi , & - M4N9DynP , M4N9FAFxi , M4N9FAFyi , M4N9FAFzi , M4N9FAGxi , M4N9FAGyi , M4N9FAGzi , & - M4N9FAMxi , M4N9FAMyi , M4N9FAMzi , M4N9FBFxi , M4N9FBFyi , M4N9FBFzi , M4N9FBxi , & - M4N9FByi , M4N9FBzi , M4N9FDxi , M4N9FDyi , M4N9FDzi , M4N9FIxi , M4N9FIyi , & - M4N9FIzi , M4N9FMGxi , M4N9FMGyi , M4N9FMGzi , M4N9MAFxi , M4N9MAFyi , M4N9MAFzi , & - M4N9MAGxi , M4N9MAGyi , M4N9MAGzi , M4N9MBFxi , M4N9MBFyi , M4N9MBFzi , M4N9MBxi , & - M4N9MByi , M4N9MBzi , M4N9MMGxi , M4N9MMGyi , M4N9MMGzi , M4N9STAxi , M4N9STAyi , & - M4N9STAzi , M4N9STVxi , M4N9STVyi , M4N9STVzi , M4N9Vxi , M4N9Vyi , M4N9Vzi , & - M5N1Axi , M5N1Ayi , M5N1Azi , M5N1DynP , M5N1FAFxi , M5N1FAFyi , M5N1FAFzi , & - M5N1FAGxi , M5N1FAGyi , M5N1FAGzi , M5N1FAMxi , M5N1FAMyi , M5N1FAMzi , M5N1FBFxi , & - M5N1FBFyi , M5N1FBFzi , M5N1FBxi , M5N1FByi , M5N1FBzi , M5N1FDxi , M5N1FDyi , & - M5N1FDzi , M5N1FIxi , M5N1FIyi , M5N1FIzi , M5N1FMGxi , M5N1FMGyi , M5N1FMGzi , & - M5N1MAFxi , M5N1MAFyi , M5N1MAFzi , M5N1MAGxi , M5N1MAGyi , M5N1MAGzi , M5N1MBFxi , & - M5N1MBFyi , M5N1MBFzi , M5N1MBxi , M5N1MByi , M5N1MBzi , M5N1MMGxi , M5N1MMGyi , & - M5N1MMGzi , M5N1STAxi , M5N1STAyi , M5N1STAzi , M5N1STVxi , M5N1STVyi , M5N1STVzi , & - M5N1Vxi , M5N1Vyi , M5N1Vzi , M5N2Axi , M5N2Ayi , M5N2Azi , M5N2DynP , & - M5N2FAFxi , M5N2FAFyi , M5N2FAFzi , M5N2FAGxi , M5N2FAGyi , M5N2FAGzi , M5N2FAMxi , & - M5N2FAMyi , M5N2FAMzi , M5N2FBFxi , M5N2FBFyi , M5N2FBFzi , M5N2FBxi , M5N2FByi , & - M5N2FBzi , M5N2FDxi , M5N2FDyi , M5N2FDzi , M5N2FIxi , M5N2FIyi , M5N2FIzi , & - M5N2FMGxi , M5N2FMGyi , M5N2FMGzi , M5N2MAFxi , M5N2MAFyi , M5N2MAFzi , M5N2MAGxi , & - M5N2MAGyi , M5N2MAGzi , M5N2MBFxi , M5N2MBFyi , M5N2MBFzi , M5N2MBxi , M5N2MByi , & - M5N2MBzi , M5N2MMGxi , M5N2MMGyi , M5N2MMGzi , M5N2STAxi , M5N2STAyi , M5N2STAzi , & - M5N2STVxi , M5N2STVyi , M5N2STVzi , M5N2Vxi , M5N2Vyi , M5N2Vzi , M5N3Axi , & - M5N3Ayi , M5N3Azi , M5N3DynP , M5N3FAFxi , M5N3FAFyi , M5N3FAFzi , M5N3FAGxi , & - M5N3FAGyi , M5N3FAGzi , M5N3FAMxi , M5N3FAMyi , M5N3FAMzi , M5N3FBFxi , M5N3FBFyi , & - M5N3FBFzi , M5N3FBxi , M5N3FByi , M5N3FBzi , M5N3FDxi , M5N3FDyi , M5N3FDzi , & - M5N3FIxi , M5N3FIyi , M5N3FIzi , M5N3FMGxi , M5N3FMGyi , M5N3FMGzi , M5N3MAFxi , & - M5N3MAFyi , M5N3MAFzi , M5N3MAGxi , M5N3MAGyi , M5N3MAGzi , M5N3MBFxi , M5N3MBFyi , & - M5N3MBFzi , M5N3MBxi , M5N3MByi , M5N3MBzi , M5N3MMGxi , M5N3MMGyi , M5N3MMGzi , & - M5N3STAxi , M5N3STAyi , M5N3STAzi , M5N3STVxi , M5N3STVyi , M5N3STVzi , M5N3Vxi , & - M5N3Vyi , M5N3Vzi , M5N4Axi , M5N4Ayi , M5N4Azi , M5N4DynP , M5N4FAFxi , & - M5N4FAFyi , M5N4FAFzi , M5N4FAGxi , M5N4FAGyi , M5N4FAGzi , M5N4FAMxi , M5N4FAMyi , & - M5N4FAMzi , M5N4FBFxi , M5N4FBFyi , M5N4FBFzi , M5N4FBxi , M5N4FByi , M5N4FBzi , & - M5N4FDxi , M5N4FDyi , M5N4FDzi , M5N4FIxi , M5N4FIyi , M5N4FIzi , M5N4FMGxi , & - M5N4FMGyi , M5N4FMGzi , M5N4MAFxi , M5N4MAFyi , M5N4MAFzi , M5N4MAGxi , M5N4MAGyi , & - M5N4MAGzi , M5N4MBFxi , M5N4MBFyi , M5N4MBFzi , M5N4MBxi , M5N4MByi , M5N4MBzi , & - M5N4MMGxi , M5N4MMGyi , M5N4MMGzi , M5N4STAxi , M5N4STAyi , M5N4STAzi , M5N4STVxi , & - M5N4STVyi , M5N4STVzi , M5N4Vxi , M5N4Vyi , M5N4Vzi , M5N5Axi , M5N5Ayi , & - M5N5Azi , M5N5DynP , M5N5FAFxi , M5N5FAFyi , M5N5FAFzi , M5N5FAGxi , M5N5FAGyi , & - M5N5FAGzi , M5N5FAMxi , M5N5FAMyi , M5N5FAMzi , M5N5FBFxi , M5N5FBFyi , M5N5FBFzi , & - M5N5FBxi , M5N5FByi , M5N5FBzi , M5N5FDxi , M5N5FDyi , M5N5FDzi , M5N5FIxi , & - M5N5FIyi , M5N5FIzi , M5N5FMGxi , M5N5FMGyi , M5N5FMGzi , M5N5MAFxi , M5N5MAFyi , & - M5N5MAFzi , M5N5MAGxi , M5N5MAGyi /) - ParamIndxAry(2501:3000) = (/ & - M5N5MAGzi , M5N5MBFxi , M5N5MBFyi , M5N5MBFzi , M5N5MBxi , M5N5MByi , M5N5MBzi , & - M5N5MMGxi , M5N5MMGyi , M5N5MMGzi , M5N5STAxi , M5N5STAyi , M5N5STAzi , M5N5STVxi , & - M5N5STVyi , M5N5STVzi , M5N5Vxi , M5N5Vyi , M5N5Vzi , M5N6Axi , M5N6Ayi , & - M5N6Azi , M5N6DynP , M5N6FAFxi , M5N6FAFyi , M5N6FAFzi , M5N6FAGxi , M5N6FAGyi , & - M5N6FAGzi , M5N6FAMxi , M5N6FAMyi , M5N6FAMzi , M5N6FBFxi , M5N6FBFyi , M5N6FBFzi , & - M5N6FBxi , M5N6FByi , M5N6FBzi , M5N6FDxi , M5N6FDyi , M5N6FDzi , M5N6FIxi , & - M5N6FIyi , M5N6FIzi , M5N6FMGxi , M5N6FMGyi , M5N6FMGzi , M5N6MAFxi , M5N6MAFyi , & - M5N6MAFzi , M5N6MAGxi , M5N6MAGyi , M5N6MAGzi , M5N6MBFxi , M5N6MBFyi , M5N6MBFzi , & - M5N6MBxi , M5N6MByi , M5N6MBzi , M5N6MMGxi , M5N6MMGyi , M5N6MMGzi , M5N6STAxi , & - M5N6STAyi , M5N6STAzi , M5N6STVxi , M5N6STVyi , M5N6STVzi , M5N6Vxi , M5N6Vyi , & - M5N6Vzi , M5N7Axi , M5N7Ayi , M5N7Azi , M5N7DynP , M5N7FAFxi , M5N7FAFyi , & - M5N7FAFzi , M5N7FAGxi , M5N7FAGyi , M5N7FAGzi , M5N7FAMxi , M5N7FAMyi , M5N7FAMzi , & - M5N7FBFxi , M5N7FBFyi , M5N7FBFzi , M5N7FBxi , M5N7FByi , M5N7FBzi , M5N7FDxi , & - M5N7FDyi , M5N7FDzi , M5N7FIxi , M5N7FIyi , M5N7FIzi , M5N7FMGxi , M5N7FMGyi , & - M5N7FMGzi , M5N7MAFxi , M5N7MAFyi , M5N7MAFzi , M5N7MAGxi , M5N7MAGyi , M5N7MAGzi , & - M5N7MBFxi , M5N7MBFyi , M5N7MBFzi , M5N7MBxi , M5N7MByi , M5N7MBzi , M5N7MMGxi , & - M5N7MMGyi , M5N7MMGzi , M5N7STAxi , M5N7STAyi , M5N7STAzi , M5N7STVxi , M5N7STVyi , & - M5N7STVzi , M5N7Vxi , M5N7Vyi , M5N7Vzi , M5N8Axi , M5N8Ayi , M5N8Azi , & - M5N8DynP , M5N8FAFxi , M5N8FAFyi , M5N8FAFzi , M5N8FAGxi , M5N8FAGyi , M5N8FAGzi , & - M5N8FAMxi , M5N8FAMyi , M5N8FAMzi , M5N8FBFxi , M5N8FBFyi , M5N8FBFzi , M5N8FBxi , & - M5N8FByi , M5N8FBzi , M5N8FDxi , M5N8FDyi , M5N8FDzi , M5N8FIxi , M5N8FIyi , & - M5N8FIzi , M5N8FMGxi , M5N8FMGyi , M5N8FMGzi , M5N8MAFxi , M5N8MAFyi , M5N8MAFzi , & - M5N8MAGxi , M5N8MAGyi , M5N8MAGzi , M5N8MBFxi , M5N8MBFyi , M5N8MBFzi , M5N8MBxi , & - M5N8MByi , M5N8MBzi , M5N8MMGxi , M5N8MMGyi , M5N8MMGzi , M5N8STAxi , M5N8STAyi , & - M5N8STAzi , M5N8STVxi , M5N8STVyi , M5N8STVzi , M5N8Vxi , M5N8Vyi , M5N8Vzi , & - M5N9Axi , M5N9Ayi , M5N9Azi , M5N9DynP , M5N9FAFxi , M5N9FAFyi , M5N9FAFzi , & - M5N9FAGxi , M5N9FAGyi , M5N9FAGzi , M5N9FAMxi , M5N9FAMyi , M5N9FAMzi , M5N9FBFxi , & - M5N9FBFyi , M5N9FBFzi , M5N9FBxi , M5N9FByi , M5N9FBzi , M5N9FDxi , M5N9FDyi , & - M5N9FDzi , M5N9FIxi , M5N9FIyi , M5N9FIzi , M5N9FMGxi , M5N9FMGyi , M5N9FMGzi , & - M5N9MAFxi , M5N9MAFyi , M5N9MAFzi , M5N9MAGxi , M5N9MAGyi , M5N9MAGzi , M5N9MBFxi , & - M5N9MBFyi , M5N9MBFzi , M5N9MBxi , M5N9MByi , M5N9MBzi , M5N9MMGxi , M5N9MMGyi , & - M5N9MMGzi , M5N9STAxi , M5N9STAyi , M5N9STAzi , M5N9STVxi , M5N9STVyi , M5N9STVzi , & - M5N9Vxi , M5N9Vyi , M5N9Vzi , M6N1Axi , M6N1Ayi , M6N1Azi , M6N1DynP , & - M6N1FAFxi , M6N1FAFyi , M6N1FAFzi , M6N1FAGxi , M6N1FAGyi , M6N1FAGzi , M6N1FAMxi , & - M6N1FAMyi , M6N1FAMzi , M6N1FBFxi , M6N1FBFyi , M6N1FBFzi , M6N1FBxi , M6N1FByi , & - M6N1FBzi , M6N1FDxi , M6N1FDyi , M6N1FDzi , M6N1FIxi , M6N1FIyi , M6N1FIzi , & - M6N1FMGxi , M6N1FMGyi , M6N1FMGzi , M6N1MAFxi , M6N1MAFyi , M6N1MAFzi , M6N1MAGxi , & - M6N1MAGyi , M6N1MAGzi , M6N1MBFxi , M6N1MBFyi , M6N1MBFzi , M6N1MBxi , M6N1MByi , & - M6N1MBzi , M6N1MMGxi , M6N1MMGyi , M6N1MMGzi , M6N1STAxi , M6N1STAyi , M6N1STAzi , & - M6N1STVxi , M6N1STVyi , M6N1STVzi , M6N1Vxi , M6N1Vyi , M6N1Vzi , M6N2Axi , & - M6N2Ayi , M6N2Azi , M6N2DynP , M6N2FAFxi , M6N2FAFyi , M6N2FAFzi , M6N2FAGxi , & - M6N2FAGyi , M6N2FAGzi , M6N2FAMxi , M6N2FAMyi , M6N2FAMzi , M6N2FBFxi , M6N2FBFyi , & - M6N2FBFzi , M6N2FBxi , M6N2FByi , M6N2FBzi , M6N2FDxi , M6N2FDyi , M6N2FDzi , & - M6N2FIxi , M6N2FIyi , M6N2FIzi , M6N2FMGxi , M6N2FMGyi , M6N2FMGzi , M6N2MAFxi , & - M6N2MAFyi , M6N2MAFzi , M6N2MAGxi , M6N2MAGyi , M6N2MAGzi , M6N2MBFxi , M6N2MBFyi , & - M6N2MBFzi , M6N2MBxi , M6N2MByi , M6N2MBzi , M6N2MMGxi , M6N2MMGyi , M6N2MMGzi , & - M6N2STAxi , M6N2STAyi , M6N2STAzi , M6N2STVxi , M6N2STVyi , M6N2STVzi , M6N2Vxi , & - M6N2Vyi , M6N2Vzi , M6N3Axi , M6N3Ayi , M6N3Azi , M6N3DynP , M6N3FAFxi , & - M6N3FAFyi , M6N3FAFzi , M6N3FAGxi , M6N3FAGyi , M6N3FAGzi , M6N3FAMxi , M6N3FAMyi , & - M6N3FAMzi , M6N3FBFxi , M6N3FBFyi , M6N3FBFzi , M6N3FBxi , M6N3FByi , M6N3FBzi , & - M6N3FDxi , M6N3FDyi , M6N3FDzi , M6N3FIxi , M6N3FIyi , M6N3FIzi , M6N3FMGxi , & - M6N3FMGyi , M6N3FMGzi , M6N3MAFxi , M6N3MAFyi , M6N3MAFzi , M6N3MAGxi , M6N3MAGyi , & - M6N3MAGzi , M6N3MBFxi , M6N3MBFyi , M6N3MBFzi , M6N3MBxi , M6N3MByi , M6N3MBzi , & - M6N3MMGxi , M6N3MMGyi , M6N3MMGzi , M6N3STAxi , M6N3STAyi , M6N3STAzi , M6N3STVxi , & - M6N3STVyi , M6N3STVzi , M6N3Vxi , M6N3Vyi , M6N3Vzi , M6N4Axi , M6N4Ayi , & - M6N4Azi , M6N4DynP , M6N4FAFxi , M6N4FAFyi , M6N4FAFzi , M6N4FAGxi , M6N4FAGyi , & - M6N4FAGzi , M6N4FAMxi , M6N4FAMyi , M6N4FAMzi , M6N4FBFxi , M6N4FBFyi , M6N4FBFzi , & - M6N4FBxi , M6N4FByi , M6N4FBzi , M6N4FDxi , M6N4FDyi , M6N4FDzi , M6N4FIxi , & - M6N4FIyi , M6N4FIzi , M6N4FMGxi , M6N4FMGyi , M6N4FMGzi , M6N4MAFxi , M6N4MAFyi , & - M6N4MAFzi , M6N4MAGxi , M6N4MAGyi , M6N4MAGzi , M6N4MBFxi , M6N4MBFyi , M6N4MBFzi , & - M6N4MBxi , M6N4MByi , M6N4MBzi , M6N4MMGxi , M6N4MMGyi , M6N4MMGzi , M6N4STAxi , & - M6N4STAyi , M6N4STAzi , M6N4STVxi , M6N4STVyi , M6N4STVzi , M6N4Vxi , M6N4Vyi , & - M6N4Vzi , M6N5Axi , M6N5Ayi , M6N5Azi , M6N5DynP , M6N5FAFxi , M6N5FAFyi , & - M6N5FAFzi , M6N5FAGxi , M6N5FAGyi , M6N5FAGzi , M6N5FAMxi , M6N5FAMyi , M6N5FAMzi , & - M6N5FBFxi , M6N5FBFyi , M6N5FBFzi , M6N5FBxi , M6N5FByi , M6N5FBzi , M6N5FDxi , & - M6N5FDyi , M6N5FDzi , M6N5FIxi , M6N5FIyi , M6N5FIzi , M6N5FMGxi , M6N5FMGyi , & - M6N5FMGzi , M6N5MAFxi , M6N5MAFyi , M6N5MAFzi , M6N5MAGxi , M6N5MAGyi , M6N5MAGzi , & - M6N5MBFxi , M6N5MBFyi , M6N5MBFzi , M6N5MBxi , M6N5MByi , M6N5MBzi , M6N5MMGxi , & - M6N5MMGyi , M6N5MMGzi , M6N5STAxi , M6N5STAyi , M6N5STAzi , M6N5STVxi , M6N5STVyi , & - M6N5STVzi , M6N5Vxi , M6N5Vyi , M6N5Vzi , M6N6Axi , M6N6Ayi , M6N6Azi , & - M6N6DynP , M6N6FAFxi , M6N6FAFyi , M6N6FAFzi , M6N6FAGxi , M6N6FAGyi , M6N6FAGzi , & - M6N6FAMxi , M6N6FAMyi , M6N6FAMzi /) - ParamIndxAry(3001:3500) = (/ & - M6N6FBFxi , M6N6FBFyi , M6N6FBFzi , M6N6FBxi , M6N6FByi , M6N6FBzi , M6N6FDxi , & - M6N6FDyi , M6N6FDzi , M6N6FIxi , M6N6FIyi , M6N6FIzi , M6N6FMGxi , M6N6FMGyi , & - M6N6FMGzi , M6N6MAFxi , M6N6MAFyi , M6N6MAFzi , M6N6MAGxi , M6N6MAGyi , M6N6MAGzi , & - M6N6MBFxi , M6N6MBFyi , M6N6MBFzi , M6N6MBxi , M6N6MByi , M6N6MBzi , M6N6MMGxi , & - M6N6MMGyi , M6N6MMGzi , M6N6STAxi , M6N6STAyi , M6N6STAzi , M6N6STVxi , M6N6STVyi , & - M6N6STVzi , M6N6Vxi , M6N6Vyi , M6N6Vzi , M6N7Axi , M6N7Ayi , M6N7Azi , & - M6N7DynP , M6N7FAFxi , M6N7FAFyi , M6N7FAFzi , M6N7FAGxi , M6N7FAGyi , M6N7FAGzi , & - M6N7FAMxi , M6N7FAMyi , M6N7FAMzi , M6N7FBFxi , M6N7FBFyi , M6N7FBFzi , M6N7FBxi , & - M6N7FByi , M6N7FBzi , M6N7FDxi , M6N7FDyi , M6N7FDzi , M6N7FIxi , M6N7FIyi , & - M6N7FIzi , M6N7FMGxi , M6N7FMGyi , M6N7FMGzi , M6N7MAFxi , M6N7MAFyi , M6N7MAFzi , & - M6N7MAGxi , M6N7MAGyi , M6N7MAGzi , M6N7MBFxi , M6N7MBFyi , M6N7MBFzi , M6N7MBxi , & - M6N7MByi , M6N7MBzi , M6N7MMGxi , M6N7MMGyi , M6N7MMGzi , M6N7STAxi , M6N7STAyi , & - M6N7STAzi , M6N7STVxi , M6N7STVyi , M6N7STVzi , M6N7Vxi , M6N7Vyi , M6N7Vzi , & - M6N8Axi , M6N8Ayi , M6N8Azi , M6N8DynP , M6N8FAFxi , M6N8FAFyi , M6N8FAFzi , & - M6N8FAGxi , M6N8FAGyi , M6N8FAGzi , M6N8FAMxi , M6N8FAMyi , M6N8FAMzi , M6N8FBFxi , & - M6N8FBFyi , M6N8FBFzi , M6N8FBxi , M6N8FByi , M6N8FBzi , M6N8FDxi , M6N8FDyi , & - M6N8FDzi , M6N8FIxi , M6N8FIyi , M6N8FIzi , M6N8FMGxi , M6N8FMGyi , M6N8FMGzi , & - M6N8MAFxi , M6N8MAFyi , M6N8MAFzi , M6N8MAGxi , M6N8MAGyi , M6N8MAGzi , M6N8MBFxi , & - M6N8MBFyi , M6N8MBFzi , M6N8MBxi , M6N8MByi , M6N8MBzi , M6N8MMGxi , M6N8MMGyi , & - M6N8MMGzi , M6N8STAxi , M6N8STAyi , M6N8STAzi , M6N8STVxi , M6N8STVyi , M6N8STVzi , & - M6N8Vxi , M6N8Vyi , M6N8Vzi , M6N9Axi , M6N9Ayi , M6N9Azi , M6N9DynP , & - M6N9FAFxi , M6N9FAFyi , M6N9FAFzi , M6N9FAGxi , M6N9FAGyi , M6N9FAGzi , M6N9FAMxi , & - M6N9FAMyi , M6N9FAMzi , M6N9FBFxi , M6N9FBFyi , M6N9FBFzi , M6N9FBxi , M6N9FByi , & - M6N9FBzi , M6N9FDxi , M6N9FDyi , M6N9FDzi , M6N9FIxi , M6N9FIyi , M6N9FIzi , & - M6N9FMGxi , M6N9FMGyi , M6N9FMGzi , M6N9MAFxi , M6N9MAFyi , M6N9MAFzi , M6N9MAGxi , & - M6N9MAGyi , M6N9MAGzi , M6N9MBFxi , M6N9MBFyi , M6N9MBFzi , M6N9MBxi , M6N9MByi , & - M6N9MBzi , M6N9MMGxi , M6N9MMGyi , M6N9MMGzi , M6N9STAxi , M6N9STAyi , M6N9STAzi , & - M6N9STVxi , M6N9STVyi , M6N9STVzi , M6N9Vxi , M6N9Vyi , M6N9Vzi , M7N1Axi , & - M7N1Ayi , M7N1Azi , M7N1DynP , M7N1FAFxi , M7N1FAFyi , M7N1FAFzi , M7N1FAGxi , & - M7N1FAGyi , M7N1FAGzi , M7N1FAMxi , M7N1FAMyi , M7N1FAMzi , M7N1FBFxi , M7N1FBFyi , & - M7N1FBFzi , M7N1FBxi , M7N1FByi , M7N1FBzi , M7N1FDxi , M7N1FDyi , M7N1FDzi , & - M7N1FIxi , M7N1FIyi , M7N1FIzi , M7N1FMGxi , M7N1FMGyi , M7N1FMGzi , M7N1MAFxi , & - M7N1MAFyi , M7N1MAFzi , M7N1MAGxi , M7N1MAGyi , M7N1MAGzi , M7N1MBFxi , M7N1MBFyi , & - M7N1MBFzi , M7N1MBxi , M7N1MByi , M7N1MBzi , M7N1MMGxi , M7N1MMGyi , M7N1MMGzi , & - M7N1STAxi , M7N1STAyi , M7N1STAzi , M7N1STVxi , M7N1STVyi , M7N1STVzi , M7N1Vxi , & - M7N1Vyi , M7N1Vzi , M7N2Axi , M7N2Ayi , M7N2Azi , M7N2DynP , M7N2FAFxi , & - M7N2FAFyi , M7N2FAFzi , M7N2FAGxi , M7N2FAGyi , M7N2FAGzi , M7N2FAMxi , M7N2FAMyi , & - M7N2FAMzi , M7N2FBFxi , M7N2FBFyi , M7N2FBFzi , M7N2FBxi , M7N2FByi , M7N2FBzi , & - M7N2FDxi , M7N2FDyi , M7N2FDzi , M7N2FIxi , M7N2FIyi , M7N2FIzi , M7N2FMGxi , & - M7N2FMGyi , M7N2FMGzi , M7N2MAFxi , M7N2MAFyi , M7N2MAFzi , M7N2MAGxi , M7N2MAGyi , & - M7N2MAGzi , M7N2MBFxi , M7N2MBFyi , M7N2MBFzi , M7N2MBxi , M7N2MByi , M7N2MBzi , & - M7N2MMGxi , M7N2MMGyi , M7N2MMGzi , M7N2STAxi , M7N2STAyi , M7N2STAzi , M7N2STVxi , & - M7N2STVyi , M7N2STVzi , M7N2Vxi , M7N2Vyi , M7N2Vzi , M7N3Axi , M7N3Ayi , & - M7N3Azi , M7N3DynP , M7N3FAFxi , M7N3FAFyi , M7N3FAFzi , M7N3FAGxi , M7N3FAGyi , & - M7N3FAGzi , M7N3FAMxi , M7N3FAMyi , M7N3FAMzi , M7N3FBFxi , M7N3FBFyi , M7N3FBFzi , & - M7N3FBxi , M7N3FByi , M7N3FBzi , M7N3FDxi , M7N3FDyi , M7N3FDzi , M7N3FIxi , & - M7N3FIyi , M7N3FIzi , M7N3FMGxi , M7N3FMGyi , M7N3FMGzi , M7N3MAFxi , M7N3MAFyi , & - M7N3MAFzi , M7N3MAGxi , M7N3MAGyi , M7N3MAGzi , M7N3MBFxi , M7N3MBFyi , M7N3MBFzi , & - M7N3MBxi , M7N3MByi , M7N3MBzi , M7N3MMGxi , M7N3MMGyi , M7N3MMGzi , M7N3STAxi , & - M7N3STAyi , M7N3STAzi , M7N3STVxi , M7N3STVyi , M7N3STVzi , M7N3Vxi , M7N3Vyi , & - M7N3Vzi , M7N4Axi , M7N4Ayi , M7N4Azi , M7N4DynP , M7N4FAFxi , M7N4FAFyi , & - M7N4FAFzi , M7N4FAGxi , M7N4FAGyi , M7N4FAGzi , M7N4FAMxi , M7N4FAMyi , M7N4FAMzi , & - M7N4FBFxi , M7N4FBFyi , M7N4FBFzi , M7N4FBxi , M7N4FByi , M7N4FBzi , M7N4FDxi , & - M7N4FDyi , M7N4FDzi , M7N4FIxi , M7N4FIyi , M7N4FIzi , M7N4FMGxi , M7N4FMGyi , & - M7N4FMGzi , M7N4MAFxi , M7N4MAFyi , M7N4MAFzi , M7N4MAGxi , M7N4MAGyi , M7N4MAGzi , & - M7N4MBFxi , M7N4MBFyi , M7N4MBFzi , M7N4MBxi , M7N4MByi , M7N4MBzi , M7N4MMGxi , & - M7N4MMGyi , M7N4MMGzi , M7N4STAxi , M7N4STAyi , M7N4STAzi , M7N4STVxi , M7N4STVyi , & - M7N4STVzi , M7N4Vxi , M7N4Vyi , M7N4Vzi , M7N5Axi , M7N5Ayi , M7N5Azi , & - M7N5DynP , M7N5FAFxi , M7N5FAFyi , M7N5FAFzi , M7N5FAGxi , M7N5FAGyi , M7N5FAGzi , & - M7N5FAMxi , M7N5FAMyi , M7N5FAMzi , M7N5FBFxi , M7N5FBFyi , M7N5FBFzi , M7N5FBxi , & - M7N5FByi , M7N5FBzi , M7N5FDxi , M7N5FDyi , M7N5FDzi , M7N5FIxi , M7N5FIyi , & - M7N5FIzi , M7N5FMGxi , M7N5FMGyi , M7N5FMGzi , M7N5MAFxi , M7N5MAFyi , M7N5MAFzi , & - M7N5MAGxi , M7N5MAGyi , M7N5MAGzi , M7N5MBFxi , M7N5MBFyi , M7N5MBFzi , M7N5MBxi , & - M7N5MByi , M7N5MBzi , M7N5MMGxi , M7N5MMGyi , M7N5MMGzi , M7N5STAxi , M7N5STAyi , & - M7N5STAzi , M7N5STVxi , M7N5STVyi , M7N5STVzi , M7N5Vxi , M7N5Vyi , M7N5Vzi , & - M7N6Axi , M7N6Ayi , M7N6Azi , M7N6DynP , M7N6FAFxi , M7N6FAFyi , M7N6FAFzi , & - M7N6FAGxi , M7N6FAGyi , M7N6FAGzi , M7N6FAMxi , M7N6FAMyi , M7N6FAMzi , M7N6FBFxi , & - M7N6FBFyi , M7N6FBFzi , M7N6FBxi , M7N6FByi , M7N6FBzi , M7N6FDxi , M7N6FDyi , & - M7N6FDzi , M7N6FIxi , M7N6FIyi , M7N6FIzi , M7N6FMGxi , M7N6FMGyi , M7N6FMGzi , & - M7N6MAFxi , M7N6MAFyi , M7N6MAFzi , M7N6MAGxi , M7N6MAGyi , M7N6MAGzi , M7N6MBFxi , & - M7N6MBFyi , M7N6MBFzi , M7N6MBxi , M7N6MByi , M7N6MBzi , M7N6MMGxi , M7N6MMGyi , & - M7N6MMGzi , M7N6STAxi , M7N6STAyi /) - ParamIndxAry(3501:4000) = (/ & - M7N6STAzi , M7N6STVxi , M7N6STVyi , M7N6STVzi , M7N6Vxi , M7N6Vyi , M7N6Vzi , & - M7N7Axi , M7N7Ayi , M7N7Azi , M7N7DynP , M7N7FAFxi , M7N7FAFyi , M7N7FAFzi , & - M7N7FAGxi , M7N7FAGyi , M7N7FAGzi , M7N7FAMxi , M7N7FAMyi , M7N7FAMzi , M7N7FBFxi , & - M7N7FBFyi , M7N7FBFzi , M7N7FBxi , M7N7FByi , M7N7FBzi , M7N7FDxi , M7N7FDyi , & - M7N7FDzi , M7N7FIxi , M7N7FIyi , M7N7FIzi , M7N7FMGxi , M7N7FMGyi , M7N7FMGzi , & - M7N7MAFxi , M7N7MAFyi , M7N7MAFzi , M7N7MAGxi , M7N7MAGyi , M7N7MAGzi , M7N7MBFxi , & - M7N7MBFyi , M7N7MBFzi , M7N7MBxi , M7N7MByi , M7N7MBzi , M7N7MMGxi , M7N7MMGyi , & - M7N7MMGzi , M7N7STAxi , M7N7STAyi , M7N7STAzi , M7N7STVxi , M7N7STVyi , M7N7STVzi , & - M7N7Vxi , M7N7Vyi , M7N7Vzi , M7N8Axi , M7N8Ayi , M7N8Azi , M7N8DynP , & - M7N8FAFxi , M7N8FAFyi , M7N8FAFzi , M7N8FAGxi , M7N8FAGyi , M7N8FAGzi , M7N8FAMxi , & - M7N8FAMyi , M7N8FAMzi , M7N8FBFxi , M7N8FBFyi , M7N8FBFzi , M7N8FBxi , M7N8FByi , & - M7N8FBzi , M7N8FDxi , M7N8FDyi , M7N8FDzi , M7N8FIxi , M7N8FIyi , M7N8FIzi , & - M7N8FMGxi , M7N8FMGyi , M7N8FMGzi , M7N8MAFxi , M7N8MAFyi , M7N8MAFzi , M7N8MAGxi , & - M7N8MAGyi , M7N8MAGzi , M7N8MBFxi , M7N8MBFyi , M7N8MBFzi , M7N8MBxi , M7N8MByi , & - M7N8MBzi , M7N8MMGxi , M7N8MMGyi , M7N8MMGzi , M7N8STAxi , M7N8STAyi , M7N8STAzi , & - M7N8STVxi , M7N8STVyi , M7N8STVzi , M7N8Vxi , M7N8Vyi , M7N8Vzi , M7N9Axi , & - M7N9Ayi , M7N9Azi , M7N9DynP , M7N9FAFxi , M7N9FAFyi , M7N9FAFzi , M7N9FAGxi , & - M7N9FAGyi , M7N9FAGzi , M7N9FAMxi , M7N9FAMyi , M7N9FAMzi , M7N9FBFxi , M7N9FBFyi , & - M7N9FBFzi , M7N9FBxi , M7N9FByi , M7N9FBzi , M7N9FDxi , M7N9FDyi , M7N9FDzi , & - M7N9FIxi , M7N9FIyi , M7N9FIzi , M7N9FMGxi , M7N9FMGyi , M7N9FMGzi , M7N9MAFxi , & - M7N9MAFyi , M7N9MAFzi , M7N9MAGxi , M7N9MAGyi , M7N9MAGzi , M7N9MBFxi , M7N9MBFyi , & - M7N9MBFzi , M7N9MBxi , M7N9MByi , M7N9MBzi , M7N9MMGxi , M7N9MMGyi , M7N9MMGzi , & - M7N9STAxi , M7N9STAyi , M7N9STAzi , M7N9STVxi , M7N9STVyi , M7N9STVzi , M7N9Vxi , & - M7N9Vyi , M7N9Vzi , M8N1Axi , M8N1Ayi , M8N1Azi , M8N1DynP , M8N1FAFxi , & - M8N1FAFyi , M8N1FAFzi , M8N1FAGxi , M8N1FAGyi , M8N1FAGzi , M8N1FAMxi , M8N1FAMyi , & - M8N1FAMzi , M8N1FBFxi , M8N1FBFyi , M8N1FBFzi , M8N1FBxi , M8N1FByi , M8N1FBzi , & - M8N1FDxi , M8N1FDyi , M8N1FDzi , M8N1FIxi , M8N1FIyi , M8N1FIzi , M8N1FMGxi , & - M8N1FMGyi , M8N1FMGzi , M8N1MAFxi , M8N1MAFyi , M8N1MAFzi , M8N1MAGxi , M8N1MAGyi , & - M8N1MAGzi , M8N1MBFxi , M8N1MBFyi , M8N1MBFzi , M8N1MBxi , M8N1MByi , M8N1MBzi , & - M8N1MMGxi , M8N1MMGyi , M8N1MMGzi , M8N1STAxi , M8N1STAyi , M8N1STAzi , M8N1STVxi , & - M8N1STVyi , M8N1STVzi , M8N1Vxi , M8N1Vyi , M8N1Vzi , M8N2Axi , M8N2Ayi , & - M8N2Azi , M8N2DynP , M8N2FAFxi , M8N2FAFyi , M8N2FAFzi , M8N2FAGxi , M8N2FAGyi , & - M8N2FAGzi , M8N2FAMxi , M8N2FAMyi , M8N2FAMzi , M8N2FBFxi , M8N2FBFyi , M8N2FBFzi , & - M8N2FBxi , M8N2FByi , M8N2FBzi , M8N2FDxi , M8N2FDyi , M8N2FDzi , M8N2FIxi , & - M8N2FIyi , M8N2FIzi , M8N2FMGxi , M8N2FMGyi , M8N2FMGzi , M8N2MAFxi , M8N2MAFyi , & - M8N2MAFzi , M8N2MAGxi , M8N2MAGyi , M8N2MAGzi , M8N2MBFxi , M8N2MBFyi , M8N2MBFzi , & - M8N2MBxi , M8N2MByi , M8N2MBzi , M8N2MMGxi , M8N2MMGyi , M8N2MMGzi , M8N2STAxi , & - M8N2STAyi , M8N2STAzi , M8N2STVxi , M8N2STVyi , M8N2STVzi , M8N2Vxi , M8N2Vyi , & - M8N2Vzi , M8N3Axi , M8N3Ayi , M8N3Azi , M8N3DynP , M8N3FAFxi , M8N3FAFyi , & - M8N3FAFzi , M8N3FAGxi , M8N3FAGyi , M8N3FAGzi , M8N3FAMxi , M8N3FAMyi , M8N3FAMzi , & - M8N3FBFxi , M8N3FBFyi , M8N3FBFzi , M8N3FBxi , M8N3FByi , M8N3FBzi , M8N3FDxi , & - M8N3FDyi , M8N3FDzi , M8N3FIxi , M8N3FIyi , M8N3FIzi , M8N3FMGxi , M8N3FMGyi , & - M8N3FMGzi , M8N3MAFxi , M8N3MAFyi , M8N3MAFzi , M8N3MAGxi , M8N3MAGyi , M8N3MAGzi , & - M8N3MBFxi , M8N3MBFyi , M8N3MBFzi , M8N3MBxi , M8N3MByi , M8N3MBzi , M8N3MMGxi , & - M8N3MMGyi , M8N3MMGzi , M8N3STAxi , M8N3STAyi , M8N3STAzi , M8N3STVxi , M8N3STVyi , & - M8N3STVzi , M8N3Vxi , M8N3Vyi , M8N3Vzi , M8N4Axi , M8N4Ayi , M8N4Azi , & - M8N4DynP , M8N4FAFxi , M8N4FAFyi , M8N4FAFzi , M8N4FAGxi , M8N4FAGyi , M8N4FAGzi , & - M8N4FAMxi , M8N4FAMyi , M8N4FAMzi , M8N4FBFxi , M8N4FBFyi , M8N4FBFzi , M8N4FBxi , & - M8N4FByi , M8N4FBzi , M8N4FDxi , M8N4FDyi , M8N4FDzi , M8N4FIxi , M8N4FIyi , & - M8N4FIzi , M8N4FMGxi , M8N4FMGyi , M8N4FMGzi , M8N4MAFxi , M8N4MAFyi , M8N4MAFzi , & - M8N4MAGxi , M8N4MAGyi , M8N4MAGzi , M8N4MBFxi , M8N4MBFyi , M8N4MBFzi , M8N4MBxi , & - M8N4MByi , M8N4MBzi , M8N4MMGxi , M8N4MMGyi , M8N4MMGzi , M8N4STAxi , M8N4STAyi , & - M8N4STAzi , M8N4STVxi , M8N4STVyi , M8N4STVzi , M8N4Vxi , M8N4Vyi , M8N4Vzi , & - M8N5Axi , M8N5Ayi , M8N5Azi , M8N5DynP , M8N5FAFxi , M8N5FAFyi , M8N5FAFzi , & - M8N5FAGxi , M8N5FAGyi , M8N5FAGzi , M8N5FAMxi , M8N5FAMyi , M8N5FAMzi , M8N5FBFxi , & - M8N5FBFyi , M8N5FBFzi , M8N5FBxi , M8N5FByi , M8N5FBzi , M8N5FDxi , M8N5FDyi , & - M8N5FDzi , M8N5FIxi , M8N5FIyi , M8N5FIzi , M8N5FMGxi , M8N5FMGyi , M8N5FMGzi , & - M8N5MAFxi , M8N5MAFyi , M8N5MAFzi , M8N5MAGxi , M8N5MAGyi , M8N5MAGzi , M8N5MBFxi , & - M8N5MBFyi , M8N5MBFzi , M8N5MBxi , M8N5MByi , M8N5MBzi , M8N5MMGxi , M8N5MMGyi , & - M8N5MMGzi , M8N5STAxi , M8N5STAyi , M8N5STAzi , M8N5STVxi , M8N5STVyi , M8N5STVzi , & - M8N5Vxi , M8N5Vyi , M8N5Vzi , M8N6Axi , M8N6Ayi , M8N6Azi , M8N6DynP , & - M8N6FAFxi , M8N6FAFyi , M8N6FAFzi , M8N6FAGxi , M8N6FAGyi , M8N6FAGzi , M8N6FAMxi , & - M8N6FAMyi , M8N6FAMzi , M8N6FBFxi , M8N6FBFyi , M8N6FBFzi , M8N6FBxi , M8N6FByi , & - M8N6FBzi , M8N6FDxi , M8N6FDyi , M8N6FDzi , M8N6FIxi , M8N6FIyi , M8N6FIzi , & - M8N6FMGxi , M8N6FMGyi , M8N6FMGzi , M8N6MAFxi , M8N6MAFyi , M8N6MAFzi , M8N6MAGxi , & - M8N6MAGyi , M8N6MAGzi , M8N6MBFxi , M8N6MBFyi , M8N6MBFzi , M8N6MBxi , M8N6MByi , & - M8N6MBzi , M8N6MMGxi , M8N6MMGyi , M8N6MMGzi , M8N6STAxi , M8N6STAyi , M8N6STAzi , & - M8N6STVxi , M8N6STVyi , M8N6STVzi , M8N6Vxi , M8N6Vyi , M8N6Vzi , M8N7Axi , & - M8N7Ayi , M8N7Azi , M8N7DynP , M8N7FAFxi , M8N7FAFyi , M8N7FAFzi , M8N7FAGxi , & - M8N7FAGyi , M8N7FAGzi , M8N7FAMxi , M8N7FAMyi , M8N7FAMzi , M8N7FBFxi , M8N7FBFyi , & - M8N7FBFzi , M8N7FBxi , M8N7FByi , M8N7FBzi , M8N7FDxi , M8N7FDyi , M8N7FDzi , & - M8N7FIxi , M8N7FIyi , M8N7FIzi /) - ParamIndxAry(4001:4500) = (/ & - M8N7FMGxi , M8N7FMGyi , M8N7FMGzi , M8N7MAFxi , M8N7MAFyi , M8N7MAFzi , M8N7MAGxi , & - M8N7MAGyi , M8N7MAGzi , M8N7MBFxi , M8N7MBFyi , M8N7MBFzi , M8N7MBxi , M8N7MByi , & - M8N7MBzi , M8N7MMGxi , M8N7MMGyi , M8N7MMGzi , M8N7STAxi , M8N7STAyi , M8N7STAzi , & - M8N7STVxi , M8N7STVyi , M8N7STVzi , M8N7Vxi , M8N7Vyi , M8N7Vzi , M8N8Axi , & - M8N8Ayi , M8N8Azi , M8N8DynP , M8N8FAFxi , M8N8FAFyi , M8N8FAFzi , M8N8FAGxi , & - M8N8FAGyi , M8N8FAGzi , M8N8FAMxi , M8N8FAMyi , M8N8FAMzi , M8N8FBFxi , M8N8FBFyi , & - M8N8FBFzi , M8N8FBxi , M8N8FByi , M8N8FBzi , M8N8FDxi , M8N8FDyi , M8N8FDzi , & - M8N8FIxi , M8N8FIyi , M8N8FIzi , M8N8FMGxi , M8N8FMGyi , M8N8FMGzi , M8N8MAFxi , & - M8N8MAFyi , M8N8MAFzi , M8N8MAGxi , M8N8MAGyi , M8N8MAGzi , M8N8MBFxi , M8N8MBFyi , & - M8N8MBFzi , M8N8MBxi , M8N8MByi , M8N8MBzi , M8N8MMGxi , M8N8MMGyi , M8N8MMGzi , & - M8N8STAxi , M8N8STAyi , M8N8STAzi , M8N8STVxi , M8N8STVyi , M8N8STVzi , M8N8Vxi , & - M8N8Vyi , M8N8Vzi , M8N9Axi , M8N9Ayi , M8N9Azi , M8N9DynP , M8N9FAFxi , & - M8N9FAFyi , M8N9FAFzi , M8N9FAGxi , M8N9FAGyi , M8N9FAGzi , M8N9FAMxi , M8N9FAMyi , & - M8N9FAMzi , M8N9FBFxi , M8N9FBFyi , M8N9FBFzi , M8N9FBxi , M8N9FByi , M8N9FBzi , & - M8N9FDxi , M8N9FDyi , M8N9FDzi , M8N9FIxi , M8N9FIyi , M8N9FIzi , M8N9FMGxi , & - M8N9FMGyi , M8N9FMGzi , M8N9MAFxi , M8N9MAFyi , M8N9MAFzi , M8N9MAGxi , M8N9MAGyi , & - M8N9MAGzi , M8N9MBFxi , M8N9MBFyi , M8N9MBFzi , M8N9MBxi , M8N9MByi , M8N9MBzi , & - M8N9MMGxi , M8N9MMGyi , M8N9MMGzi , M8N9STAxi , M8N9STAyi , M8N9STAzi , M8N9STVxi , & - M8N9STVyi , M8N9STVzi , M8N9Vxi , M8N9Vyi , M8N9Vzi , M9N1Axi , M9N1Ayi , & - M9N1Azi , M9N1DynP , M9N1FAFxi , M9N1FAFyi , M9N1FAFzi , M9N1FAGxi , M9N1FAGyi , & - M9N1FAGzi , M9N1FAMxi , M9N1FAMyi , M9N1FAMzi , M9N1FBFxi , M9N1FBFyi , M9N1FBFzi , & - M9N1FBxi , M9N1FByi , M9N1FBzi , M9N1FDxi , M9N1FDyi , M9N1FDzi , M9N1FIxi , & - M9N1FIyi , M9N1FIzi , M9N1FMGxi , M9N1FMGyi , M9N1FMGzi , M9N1MAFxi , M9N1MAFyi , & - M9N1MAFzi , M9N1MAGxi , M9N1MAGyi , M9N1MAGzi , M9N1MBFxi , M9N1MBFyi , M9N1MBFzi , & - M9N1MBxi , M9N1MByi , M9N1MBzi , M9N1MMGxi , M9N1MMGyi , M9N1MMGzi , M9N1STAxi , & - M9N1STAyi , M9N1STAzi , M9N1STVxi , M9N1STVyi , M9N1STVzi , M9N1Vxi , M9N1Vyi , & - M9N1Vzi , M9N2Axi , M9N2Ayi , M9N2Azi , M9N2DynP , M9N2FAFxi , M9N2FAFyi , & - M9N2FAFzi , M9N2FAGxi , M9N2FAGyi , M9N2FAGzi , M9N2FAMxi , M9N2FAMyi , M9N2FAMzi , & - M9N2FBFxi , M9N2FBFyi , M9N2FBFzi , M9N2FBxi , M9N2FByi , M9N2FBzi , M9N2FDxi , & - M9N2FDyi , M9N2FDzi , M9N2FIxi , M9N2FIyi , M9N2FIzi , M9N2FMGxi , M9N2FMGyi , & - M9N2FMGzi , M9N2MAFxi , M9N2MAFyi , M9N2MAFzi , M9N2MAGxi , M9N2MAGyi , M9N2MAGzi , & - M9N2MBFxi , M9N2MBFyi , M9N2MBFzi , M9N2MBxi , M9N2MByi , M9N2MBzi , M9N2MMGxi , & - M9N2MMGyi , M9N2MMGzi , M9N2STAxi , M9N2STAyi , M9N2STAzi , M9N2STVxi , M9N2STVyi , & - M9N2STVzi , M9N2Vxi , M9N2Vyi , M9N2Vzi , M9N3Axi , M9N3Ayi , M9N3Azi , & - M9N3DynP , M9N3FAFxi , M9N3FAFyi , M9N3FAFzi , M9N3FAGxi , M9N3FAGyi , M9N3FAGzi , & - M9N3FAMxi , M9N3FAMyi , M9N3FAMzi , M9N3FBFxi , M9N3FBFyi , M9N3FBFzi , M9N3FBxi , & - M9N3FByi , M9N3FBzi , M9N3FDxi , M9N3FDyi , M9N3FDzi , M9N3FIxi , M9N3FIyi , & - M9N3FIzi , M9N3FMGxi , M9N3FMGyi , M9N3FMGzi , M9N3MAFxi , M9N3MAFyi , M9N3MAFzi , & - M9N3MAGxi , M9N3MAGyi , M9N3MAGzi , M9N3MBFxi , M9N3MBFyi , M9N3MBFzi , M9N3MBxi , & - M9N3MByi , M9N3MBzi , M9N3MMGxi , M9N3MMGyi , M9N3MMGzi , M9N3STAxi , M9N3STAyi , & - M9N3STAzi , M9N3STVxi , M9N3STVyi , M9N3STVzi , M9N3Vxi , M9N3Vyi , M9N3Vzi , & - M9N4Axi , M9N4Ayi , M9N4Azi , M9N4DynP , M9N4FAFxi , M9N4FAFyi , M9N4FAFzi , & - M9N4FAGxi , M9N4FAGyi , M9N4FAGzi , M9N4FAMxi , M9N4FAMyi , M9N4FAMzi , M9N4FBFxi , & - M9N4FBFyi , M9N4FBFzi , M9N4FBxi , M9N4FByi , M9N4FBzi , M9N4FDxi , M9N4FDyi , & - M9N4FDzi , M9N4FIxi , M9N4FIyi , M9N4FIzi , M9N4FMGxi , M9N4FMGyi , M9N4FMGzi , & - M9N4MAFxi , M9N4MAFyi , M9N4MAFzi , M9N4MAGxi , M9N4MAGyi , M9N4MAGzi , M9N4MBFxi , & - M9N4MBFyi , M9N4MBFzi , M9N4MBxi , M9N4MByi , M9N4MBzi , M9N4MMGxi , M9N4MMGyi , & - M9N4MMGzi , M9N4STAxi , M9N4STAyi , M9N4STAzi , M9N4STVxi , M9N4STVyi , M9N4STVzi , & - M9N4Vxi , M9N4Vyi , M9N4Vzi , M9N5Axi , M9N5Ayi , M9N5Azi , M9N5DynP , & - M9N5FAFxi , M9N5FAFyi , M9N5FAFzi , M9N5FAGxi , M9N5FAGyi , M9N5FAGzi , M9N5FAMxi , & - M9N5FAMyi , M9N5FAMzi , M9N5FBFxi , M9N5FBFyi , M9N5FBFzi , M9N5FBxi , M9N5FByi , & - M9N5FBzi , M9N5FDxi , M9N5FDyi , M9N5FDzi , M9N5FIxi , M9N5FIyi , M9N5FIzi , & - M9N5FMGxi , M9N5FMGyi , M9N5FMGzi , M9N5MAFxi , M9N5MAFyi , M9N5MAFzi , M9N5MAGxi , & - M9N5MAGyi , M9N5MAGzi , M9N5MBFxi , M9N5MBFyi , M9N5MBFzi , M9N5MBxi , M9N5MByi , & - M9N5MBzi , M9N5MMGxi , M9N5MMGyi , M9N5MMGzi , M9N5STAxi , M9N5STAyi , M9N5STAzi , & - M9N5STVxi , M9N5STVyi , M9N5STVzi , M9N5Vxi , M9N5Vyi , M9N5Vzi , M9N6Axi , & - M9N6Ayi , M9N6Azi , M9N6DynP , M9N6FAFxi , M9N6FAFyi , M9N6FAFzi , M9N6FAGxi , & - M9N6FAGyi , M9N6FAGzi , M9N6FAMxi , M9N6FAMyi , M9N6FAMzi , M9N6FBFxi , M9N6FBFyi , & - M9N6FBFzi , M9N6FBxi , M9N6FByi , M9N6FBzi , M9N6FDxi , M9N6FDyi , M9N6FDzi , & - M9N6FIxi , M9N6FIyi , M9N6FIzi , M9N6FMGxi , M9N6FMGyi , M9N6FMGzi , M9N6MAFxi , & - M9N6MAFyi , M9N6MAFzi , M9N6MAGxi , M9N6MAGyi , M9N6MAGzi , M9N6MBFxi , M9N6MBFyi , & - M9N6MBFzi , M9N6MBxi , M9N6MByi , M9N6MBzi , M9N6MMGxi , M9N6MMGyi , M9N6MMGzi , & - M9N6STAxi , M9N6STAyi , M9N6STAzi , M9N6STVxi , M9N6STVyi , M9N6STVzi , M9N6Vxi , & - M9N6Vyi , M9N6Vzi , M9N7Axi , M9N7Ayi , M9N7Azi , M9N7DynP , M9N7FAFxi , & - M9N7FAFyi , M9N7FAFzi , M9N7FAGxi , M9N7FAGyi , M9N7FAGzi , M9N7FAMxi , M9N7FAMyi , & - M9N7FAMzi , M9N7FBFxi , M9N7FBFyi , M9N7FBFzi , M9N7FBxi , M9N7FByi , M9N7FBzi , & - M9N7FDxi , M9N7FDyi , M9N7FDzi , M9N7FIxi , M9N7FIyi , M9N7FIzi , M9N7FMGxi , & - M9N7FMGyi , M9N7FMGzi , M9N7MAFxi , M9N7MAFyi , M9N7MAFzi , M9N7MAGxi , M9N7MAGyi , & - M9N7MAGzi , M9N7MBFxi , M9N7MBFyi , M9N7MBFzi , M9N7MBxi , M9N7MByi , M9N7MBzi , & - M9N7MMGxi , M9N7MMGyi , M9N7MMGzi , M9N7STAxi , M9N7STAyi , M9N7STAzi , M9N7STVxi , & - M9N7STVyi , M9N7STVzi , M9N7Vxi , M9N7Vyi , M9N7Vzi , M9N8Axi , M9N8Ayi , & - M9N8Azi , M9N8DynP , M9N8FAFxi /) - ParamIndxAry(4501:4599) = (/ & - M9N8FAFyi , M9N8FAFzi , M9N8FAGxi , M9N8FAGyi , M9N8FAGzi , M9N8FAMxi , M9N8FAMyi , & - M9N8FAMzi , M9N8FBFxi , M9N8FBFyi , M9N8FBFzi , M9N8FBxi , M9N8FByi , M9N8FBzi , & - M9N8FDxi , M9N8FDyi , M9N8FDzi , M9N8FIxi , M9N8FIyi , M9N8FIzi , M9N8FMGxi , & - M9N8FMGyi , M9N8FMGzi , M9N8MAFxi , M9N8MAFyi , M9N8MAFzi , M9N8MAGxi , M9N8MAGyi , & - M9N8MAGzi , M9N8MBFxi , M9N8MBFyi , M9N8MBFzi , M9N8MBxi , M9N8MByi , M9N8MBzi , & - M9N8MMGxi , M9N8MMGyi , M9N8MMGzi , M9N8STAxi , M9N8STAyi , M9N8STAzi , M9N8STVxi , & - M9N8STVyi , M9N8STVzi , M9N8Vxi , M9N8Vyi , M9N8Vzi , M9N9Axi , M9N9Ayi , & - M9N9Azi , M9N9DynP , M9N9FAFxi , M9N9FAFyi , M9N9FAFzi , M9N9FAGxi , M9N9FAGyi , & - M9N9FAGzi , M9N9FAMxi , M9N9FAMyi , M9N9FAMzi , M9N9FBFxi , M9N9FBFyi , M9N9FBFzi , & - M9N9FBxi , M9N9FByi , M9N9FBzi , M9N9FDxi , M9N9FDyi , M9N9FDzi , M9N9FIxi , & - M9N9FIyi , M9N9FIzi , M9N9FMGxi , M9N9FMGyi , M9N9FMGzi , M9N9MAFxi , M9N9MAFyi , & - M9N9MAFzi , M9N9MAGxi , M9N9MAGyi , M9N9MAGzi , M9N9MBFxi , M9N9MBFyi , M9N9MBFzi , & - M9N9MBxi , M9N9MByi , M9N9MBzi , M9N9MMGxi , M9N9MMGyi , M9N9MMGzi , M9N9STAxi , & - M9N9STAyi , M9N9STAzi , M9N9STVxi , M9N9STVyi , M9N9STVzi , M9N9Vxi , M9N9Vyi , & - M9N9Vzi /) - ParamUnitsAry(1:500) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & - "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) "/) - ParamUnitsAry(501:1000) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) "/) - ParamUnitsAry(1001:1500) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) "/) - ParamUnitsAry(1501:2000) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) "/) - ParamUnitsAry(2001:2500) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) "/) - ParamUnitsAry(2501:3000) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) "/) - ParamUnitsAry(3001:3500) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) "/) - ParamUnitsAry(3501:4000) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) "/) - ParamUnitsAry(4001:4500) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(Pa) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) "/) - ParamUnitsAry(4501:4599) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m/s) ", & - "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & - "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & - "(m/s) "/) - - - GetMorisonChannels = 0 - - newFoundMask = .FALSE. + newFoundMask = 0 DO I = 1,NUserOutputs IF (.NOT. foundMask(I) ) THEN Indx = FindValidChannelIndx(UserOutputs(I), ValidParamAry) IF ( Indx > 0 ) THEN - newFoundMask(I) = .TRUE. + newFoundMask(I) = newFoundMask(I) + 1 foundMask(I) = .TRUE. GetMorisonChannels = GetMorisonChannels + 1 - - !ELSE - ! foundMask(I) = .FALSE. - END IF - END IF -END DO + END IF + END IF ! not found + END DO -IF ( GetMorisonChannels > 0 ) THEN + CALL AllocAry(OutList, GetMorisonChannels, 'Morison OutList', ErrStat, ErrMsg) - count = 1 - ! Test that num channels does not exceed max possible channels due to size of OutList - !ALLOCATE ( OutList(GetWAMITChannels) , STAT=ErrStat ) - IF ( ErrStat /= 0 ) THEN - ErrMsg = ' Error allocating memory for the OutList array in the GetMorisonChannels function.' - ErrStat = ErrID_Fatal - RETURN - END IF + IF ( GetMorisonChannels > 0 .and. ErrStat < AbortErrLev) THEN + count = 1 - DO I = 1,NUserOutputs - IF ( newFoundMask(I) ) THEN - OutList(count) = UserOutputs(I) - count = count + 1 - END IF - - END DO + DO I = 1,NUserOutputs + DO J = 1, newFoundMask(I) ! in case an output is requested more than one time + OutList(count) = UserOutputs(I) + count = count + 1 + END DO + END DO -END IF + END IF END FUNCTION GetMorisonChannels -!==================================================================================================== -SUBROUTINE MrsnOut_ChkOutLst( OutList, ValidOutList, y, p, ErrStat, ErrMsg ) -! This routine checks the names of inputted output channels, checks to see if any of them are ill- -! conditioned (returning an error if so), and assigns the OutputDataType settings (i.e, the index, -! name, and units of the output channels). -! Note that the Morison module must be initialized prior to calling this function (if it -! is being used) so that it can correctly determine if the Lines outputs are valid. -!---------------------------------------------------------------------------------------------------- - - - + +!********************************************************************************************************************************** +! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m" +! 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 routine checks to see if any requested output channel names (stored in the OutList(:)) are invalid. It returns a +!! warning if any of the channels are not available outputs from the module. +!! It assigns the settings for OutParam(:) (i.e, the index, name, and units of the output channels, WriteOutput(:)). +!! 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 06-Sep-2022 13:57:52. +SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) +!.................................................................................................................................. + + IMPLICIT NONE + ! Passed variables - CHARACTER(ChanLen), INTENT( IN ) :: OutList (:) ! An array holding the names of the requested output channels. - LOGICAL, INTENT( IN ) :: ValidOutList (:) ! An array holding the a flag for whether the elements are valid requested output channels. - TYPE(Morison_OutputType), INTENT( INOUT ) :: y ! Morison module output data - TYPE(Morison_ParameterType), INTENT( INOUT ) :: p ! Morison module parameter data - - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables. - - INTEGER :: I ! Generic loop-counting index. -! INTEGER :: J ! Generic loop-counting index. - INTEGER :: INDX ! Index for valid arrays - - CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I). - CHARACTER(28), PARAMETER :: OutPFmt = "( I4, 3X,A 10,1 X, A10 )" ! Output format parameter output list. - - - LOGICAL :: InvalidOutput(MaxMrsnOutputs) ! This array determines if the output channel is valid for this configuration - LOGICAL :: CheckOutListAgain - - InvalidOutput = .FALSE. + CHARACTER(ChanLen), INTENT(IN) :: OutList(:) !< The list out user-requested outputs + TYPE(Morison_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 - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - !------------------------------------------------------------------------------------------------- - ! ALLOCATE the OutParam array - !------------------------------------------------------------------------------------------------- - ALLOCATE ( p%OutParam(p%NumOuts) , STAT=ErrStat ) - IF ( ErrStat /= 0 ) THEN - ErrMsg = ' Error allocating memory for the OutParam array.' - ErrStat = ErrID_Fatal - RETURN - END IF - - - ! Check user-requested member and joint outputs and node lists and set InvalidOutput array values as needed - !CALL SetInvalidOutputs(NMOutputs, MOutLst, NJOutputs, JOutLst, InvalidOutput) - - DO I = 1,p%NumOuts - - p%OutParam(I)%Name = OutList(I) - OutListTmp = OutList(I) - - - ! Reverse the sign (+/-) of the output channel if the user prefixed the - ! channel name with a '-', '_', 'm', or 'M' character indicating "minus". - - CheckOutListAgain = .FALSE. - - IF ( INDEX( '-_', OutListTmp(1:1) ) > 0 ) THEN - p%OutParam(I)%SignM = -1 ! ex, '-TipDxc1' causes the sign of TipDxc1 to be switched. - OutListTmp = OutListTmp(2:) - ELSE IF ( INDEX( 'mM', OutListTmp(1:1) ) > 0 ) THEN ! We'll assume this is a variable name for now, (if not, we will check later if OutListTmp(2:) is also a variable name) - CheckOutListAgain = .TRUE. - p%OutParam(I)%SignM = 1 - ELSE - p%OutParam(I)%SignM = 1 - END IF - - CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - - - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) - - IF ( CheckOutListAgain .AND. Indx < 1 ) THEN ! Let's assume that "M" really meant "minus" and then test again - p%OutParam(I)%SignM = -1 ! ex, 'MTipDxc1' causes the sign of TipDxc1 to be switched. - OutListTmp = OutListTmp(2:) - - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) - END IF - - IF ( Indx > 0 ) THEN - p%OutParam(I)%Indx = ParamIndxAry(Indx) - IF ( InvalidOutput( ParamIndxAry(Indx) ) ) THEN - p%OutParam(I)%Units = 'INVALID' - p%OutParam(I)%SignM = 0 - ELSE - p%OutParam(I)%Units = ParamUnitsAry(Indx) - END IF - ELSE - - CALL WrScr(p%OutParam(I)%Name//' is not an available output channel.') - ErrMsg = ' An output channel was set as INVALID.' - ErrStat = ErrID_Warn - p%OutParam(I)%Units = 'INVALID' - p%OutParam(I)%Indx = 1 - p%OutParam(I)%SignM = 0 ! this will print all zeros - END IF - - IF ( .NOT. ValidOutList(I) ) THEN - ErrMsg = ' An output channel was set as INVALID.' - CALL WrScr(p%OutParam(I)%Name//' is not an available output channel.') - ErrStat = ErrID_Warn - p%OutParam(I)%Units = 'INVALID' - p%OutParam(I)%Indx = 1 - p%OutParam(I)%SignM = 0 - END IF - - END DO - - - - - RETURN -END SUBROUTINE MrsnOut_ChkOutLst + ! Local variables + INTEGER :: ErrStat2 ! temporary (local) error status + INTEGER :: I ! Generic loop-counting index + INTEGER :: J ! Generic loop-counting index + INTEGER :: K ! Generic loop-counting index + INTEGER :: INDX ! Index for valid arrays -!==================================================================================================== -SUBROUTINE MrsnOut_DestroyParam ( p, ErrStat, ErrMsg ) -! This function cleans up after running the HydroDyn output module. It closes the output file, -! releases memory, and resets the number of outputs requested to 0. -!---------------------------------------------------------------------------------------------------- + LOGICAL :: InvalidOutput(0:MaxOutPts) ! This array determines if the output channel is valid for this configuration + CHARACTER(*), PARAMETER :: RoutineName = "SetOutParam" - ! Passed variables - TYPE(Morison_ParameterType), INTENT( INOUT ) :: p ! parameter data for this instance of the Morison module - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None -! ! Internal variables - LOGICAL :: Err + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry1(1542) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m) ","(m) ","(m) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m) ","(m) ", & + "(m) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m) ","(m) ","(m) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m) ", & + "(m) ","(m) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m) ","(m) ","(m) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m) ","(m) ","(m) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m) ","(m) ","(m) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m) ","(m) ","(m) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m) ","(m) ", & + "(m) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)"/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry2(1542) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry3(1542) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)", & + "(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)", & + "(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)", & + "(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)", & + "(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s^2)","(m/s^2)","(m/s^2)","(Pa) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(m/s^2)","(m/s^2)","(m/s^2)", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s^2)", & + "(m/s^2)","(m/s^2)","(Pa) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ", & + "(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(m/s^2)","(m/s^2)","(m/s^2)","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) "/) + CHARACTER(OutStrLenM1), PARAMETER :: ParamUnitsAry(4626) = (/ & ! This lists the units corresponding to the allowed parameters + ParamUnitsAry1, ParamUnitsAry2, ParamUnitsAry3/) - !------------------------------------------------------------------------------------------------- - ! Initialize error information - !------------------------------------------------------------------------------------------------- + + ! Initialize values ErrStat = ErrID_None - ErrMsg = "" - Err = .FALSE. + ErrMsg = "" + InvalidOutput = .FALSE. - - !------------------------------------------------------------------------------------------------- - ! Deallocate arrays - !------------------------------------------------------------------------------------------------- - IF ( ALLOCATED( p%OutParam ) ) DEALLOCATE ( p%OutParam, STAT=ErrStat ) - IF ( ErrStat /= 0 ) Err = .TRUE. - - !------------------------------------------------------------------------------------------------- - ! Reset number of outputs - !------------------------------------------------------------------------------------------------- - p%NumOuts = 0 - +! ..... Developer must add checking for invalid inputs here: ..... + ! invalid members + DO J=p%NMOutputs+1, 9 + DO I=1,9 + InvalidOutput( MNDynP( I,J)) = .true. + DO K=1,3 + InvalidOutput( MNVi( K,I,J)) = .true. + InvalidOutput( MNAi( K,I,J)) = .true. + InvalidOutput( MNSTVi(K,I,J)) = .true. + InvalidOutput( MNSTAi(K,I,J)) = .true. + InvalidOutput( MNFDi( K,I,J)) = .true. + InvalidOutput( MNFIi( K,I,J)) = .true. + InvalidOutput( MNFBi( K,I,J)) = .true. + InvalidOutput( MNMBi( K,I,J)) = .true. + InvalidOutput( MNFBFi(K,I,J)) = .true. + InvalidOutput( MNMBFi(K,I,J)) = .true. + InvalidOutput( MNFMGi(K,I,J)) = .true. + InvalidOutput( MNMMGi(K,I,J)) = .true. + InvalidOutput( MNFAMi(K,I,J)) = .true. + InvalidOutput( MNFAGi(K,I,J)) = .true. + InvalidOutput( MNMAGi(K,I,J)) = .true. + InvalidOutput( MNFAFi(K,I,J)) = .true. + InvalidOutput( MNMAFi(K,I,J)) = .true. + END DO + END DO + END DO + + ! invalid nodes on valid members + DO J=1,p%NMOutputs + DO I=p%MOutLst(J)%NOutLoc+1,9 + InvalidOutput( MNDynP( I,J)) = .true. + DO K=1,3 + InvalidOutput( MNVi( K,I,J)) = .true. + InvalidOutput( MNAi( K,I,J)) = .true. + InvalidOutput( MNSTVi(K,I,J)) = .true. + InvalidOutput( MNSTAi(K,I,J)) = .true. + InvalidOutput( MNFDi( K,I,J)) = .true. + InvalidOutput( MNFIi( K,I,J)) = .true. + InvalidOutput( MNFBi( K,I,J)) = .true. + InvalidOutput( MNMBi( K,I,J)) = .true. + InvalidOutput( MNFBFi(K,I,J)) = .true. + InvalidOutput( MNMBFi(K,I,J)) = .true. + InvalidOutput( MNFMGi(K,I,J)) = .true. + InvalidOutput( MNMMGi(K,I,J)) = .true. + InvalidOutput( MNFAMi(K,I,J)) = .true. + InvalidOutput( MNFAGi(K,I,J)) = .true. + InvalidOutput( MNMAGi(K,I,J)) = .true. + InvalidOutput( MNFAFi(K,I,J)) = .true. + InvalidOutput( MNMAFi(K,I,J)) = .true. + END DO + END DO + END DO + + ! invalid joints + DO I=p%NJOutputs+1,9 + InvalidOutput( JDynP( I)) = .true. + InvalidOutput( JWaveElev( I)) = .true. + InvalidOutput( JWaveElev1(I)) = .true. + InvalidOutput( JWaveElev2(I)) = .true. + DO K=1,3 + InvalidOutput( JVi( K,I)) = .true. + InvalidOutput( JAi( K,I)) = .true. + InvalidOutput( JSTVi(K,I)) = .true. + InvalidOutput( JSTAi(K,I)) = .true. + InvalidOutput( JFDi( K,I)) = .true. + InvalidOutput( JFBi( K,I)) = .true. + InvalidOutput( JMBi( K,I)) = .true. + InvalidOutput( JFBFi(K,I)) = .true. + InvalidOutput( JMBFi(K,I)) = .true. + InvalidOutput( JFIi( K,I)) = .true. + InvalidOutput( JFAMi(K,I)) = .true. + InvalidOutput( JFAGi(K,I)) = .true. + InvalidOutput( JMAGi(K,I)) = .true. + InvalidOutput( JFMGi(K,I)) = .true. + END DO + END DO + +! ................. End of validity checking ................. + + !------------------------------------------------------------------------------------------------- - ! Make sure ErrStat is non-zero if an error occurred + ! Allocate and set index, name, and units for the output channels + ! If a selected output channel is not available in this module, set error flag. !------------------------------------------------------------------------------------------------- - IF ( Err ) ErrStat = ErrID_Fatal - - RETURN -END SUBROUTINE MrsnOut_DestroyParam -!==================================================================================================== + ALLOCATE ( p%OutParam(1:p%NumOuts) , STAT=ErrStat2 ) + IF ( ErrStat2 /= 0_IntKi ) THEN + CALL SetErrStat( ErrID_Fatal,"Error allocating memory for the Morison OutParam array.", ErrStat, ErrMsg, RoutineName ) + RETURN + ENDIF + +! ! Set index, name, and units for the time output channel: +! p%OutParam(0)%Indx = Time +! p%OutParam(0)%Name = "Time" ! OutParam(0) is the time channel by default. +! p%OutParam(0)%Units = "(s)" +! p%OutParam(0)%SignM = 1 + + + ! Set index, name, and units for all of the output channels. + ! If a selected output channel is not available by this module set ErrStat = ErrID_Warn. + + DO I = 1,p%NumOuts + + p%OutParam(I)%Name = OutList(I) + + Indx = FindValidChannelIndx(OutList(I), ValidParamAry, p%OutParam(I)%SignM) + + IF ( Indx > 0 ) THEN ! we found the channel name + IF ( InvalidOutput( ParamIndxAry(Indx) ) ) THEN ! but, it isn't valid for these settings + p%OutParam(I)%Indx = 1 ! pick any channel in the AllOuts array + p%OutParam(I)%Units = "INVALID" + p%OutParam(I)%SignM = 0 + ELSE + p%OutParam(I)%Indx = ParamIndxAry(Indx) + p%OutParam(I)%Units = ParamUnitsAry(Indx) ! it's a valid output + END IF + ELSE ! this channel isn't valid + p%OutParam(I)%Indx = 1 ! pick any channel in the AllOuts array + p%OutParam(I)%Units = "INVALID" + p%OutParam(I)%SignM = 0 ! multiply all results by zero + + CALL SetErrStat(ErrID_Warn, 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 +!********************************************************************************************************************************** END MODULE Morison_Output diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index 8f1ca39fd1..ef2fbe6e95 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -31,9 +31,9 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE Morison_Types !--------------------------------------------------------------------------------------------------------------------------------- +USE SeaState_Interp_Types USE NWTC_Library IMPLICIT NONE - INTEGER(IntKi), PUBLIC, PARAMETER :: MaxMrsnOutputs = 4599 ! Total number of possible Morison module output channels [-] ! ========= Morison_JointType ======= TYPE, PUBLIC :: Morison_JointType INTEGER(IntKi) :: JointID !< User-specified integer ID for the given joint [-] @@ -42,7 +42,7 @@ MODULE Morison_Types INTEGER(IntKi) :: JointAxIDIndx !< The index into the Axial Coefs arrays corresponding to the above Axial ID [-] INTEGER(IntKi) :: JointOvrlp !< Joint overlap code [Unused [-] INTEGER(IntKi) :: NConnections !< Number of members connecting to this joint [-] - INTEGER(IntKi) , DIMENSION(1:10) :: ConnectionList !< List of Members connected to this joint. The member index is what is stored, not the Member ID [-] + INTEGER(IntKi) , DIMENSION(1:50) :: ConnectionList !< List of Members connected to this joint. The member index is what is stored, not the Member ID [-] END TYPE Morison_JointType ! ======================= ! ========= Morison_MemberPropType ======= @@ -76,6 +76,7 @@ MODULE Morison_Types REAL(ReKi) :: DpthAxCaMG !< Depth-based Axial Ca for marine growth [-] REAL(ReKi) :: DpthAxCp !< Depth-based Axial Cp [-] REAL(ReKi) :: DpthAxCpMG !< Depth-based Axial Cp for marine growth [-] + LOGICAL :: DpthMCF !< Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model [-] END TYPE Morison_CoefDpths ! ======================= ! ========= Morison_AxialCoefType ======= @@ -84,6 +85,9 @@ MODULE Morison_Types REAL(ReKi) :: AxCd !< Axial Cd [-] REAL(ReKi) :: AxCa !< Axial Ca [-] REAL(ReKi) :: AxCp !< Axial Cp [-] + REAL(ReKi) :: AxVnCOff !< High-pass cut-off frequency for normal velocity when computing axial drag force [-] + REAL(ReKi) :: AxFDLoFSc !< Scaling factor for low frequency axial drag force [-] + INTEGER(IntKi) :: AxFDMod !< Switch for the axial drag formulation {0: original formulation, 1: Away from member only} [-] END TYPE Morison_AxialCoefType ! ======================= ! ========= Morison_MemberInputType ======= @@ -103,6 +107,7 @@ MODULE Morison_Types INTEGER(IntKi) :: MmbrCoefIDIndx !< Index into the appropriate coefs table for this member's properties [-] INTEGER(IntKi) :: MmbrFilledIDIndx !< Index into the filled group table if this is a filled member [-] LOGICAL :: PropPot !< Flag T/F for whether the member is modeled with potential flow theory [-] + LOGICAL :: PropMCF !< Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model [-] INTEGER(IntKi) :: NElements !< number of elements in this member [-] REAL(ReKi) :: RefLength !< the reference total length for this member [m] REAL(ReKi) :: dl !< the reference element length for this member (may be less than MDivSize to achieve uniform element lengths) [m] @@ -115,10 +120,13 @@ MODULE Morison_Types INTEGER(IntKi) :: JointOvrlp !< [-] INTEGER(IntKi) :: JointAxIDIndx !< [-] INTEGER(IntKi) :: NConnections !< Number of elements connecting to this node [-] - INTEGER(IntKi) , DIMENSION(1:10) :: ConnectionList !< Indices of all the members connected to this node (positive if end 1, negative if end 2) [-] + INTEGER(IntKi) , DIMENSION(1:50) :: ConnectionList !< Indices of all the members connected to this node (positive if end 1, negative if end 2) [-] REAL(ReKi) :: JAxCd !< Nodal lumped (joint) axial Cd [-] REAL(ReKi) :: JAxCa !< Nodal lumped (joint) axial Cp [-] REAL(ReKi) :: JAxCp !< Nodal lumped (joint) axial Ca [-] + REAL(ReKi) :: JAxVnCOff !< High-pass cut-off frequency for normal velocity when computing axial drag force [-] + REAL(ReKi) :: JAxFDLoFSc !< Scaling factor for low frequency axial drag force [-] + INTEGER(IntKi) :: JAxFDMod !< Switch for the axial drag formulation {0: original formulation, 1: Away from member only} [-] REAL(ReKi) :: FillDensity !< Fill fluid density [kg/m^3] REAL(ReKi) :: tMG !< Nodal thickness with marine growth [m] REAL(ReKi) :: MGdensity !< Nodal density of marine growth [kg/m^3] @@ -190,6 +198,7 @@ MODULE Morison_Types REAL(ReKi) :: FillFSLoc !< Z-location of the filled free-surface [m] REAL(ReKi) :: FillDens !< Filled fluid density [kg/m^3] LOGICAL :: PropPot !< Is this element/member modeled with potential flow theory T/F [-] + LOGICAL :: PropMCF !< Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model [-] LOGICAL :: Flipped !< Was the member flipped in a reordering event? Need to know this to get the correct normal vector to the ends [-] END TYPE Morison_MemberType ! ======================= @@ -235,6 +244,7 @@ MODULE Morison_Types REAL(ReKi) :: MemberAxCp2 !< Member-based coefs, see above descriptions for meanings (1 = start, 2=end) [-] REAL(ReKi) :: MemberAxCpMG1 !< Member-based coefs, see above descriptions for meanings (1 = start, 2=end) [-] REAL(ReKi) :: MemberAxCpMG2 !< Member-based coefs, see above descriptions for meanings (1 = start, 2=end) [-] + LOGICAL :: MemberMCF !< Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model [-] END TYPE Morison_CoefMembers ! ======================= ! ========= Morison_MGDepthsType ======= @@ -269,6 +279,8 @@ MODULE Morison_Types REAL(ReKi) :: WtrDens !< Water density [kg/m^3] REAL(ReKi) :: WtrDpth !< Water depth (positive-valued) [m] REAL(ReKi) :: MSL2SWL !< Mean Sea Level to Still Water Level offset [m] + INTEGER(IntKi) :: WaveDisp !< Method of computing Wave Kinematics. (0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [-] + INTEGER(IntKi) :: AMMod !< Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 1: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState] [-] INTEGER(IntKi) :: NJoints !< Number of user-specified joints [-] INTEGER(IntKi) :: NNodes !< Total number of nodes in the final software model [-] TYPE(Morison_JointType) , DIMENSION(:), ALLOCATABLE :: InpJoints !< Array of user-specified joints [-] @@ -289,6 +301,7 @@ MODULE Morison_Types REAL(ReKi) :: SimplAxCaMG !< Simple model Axial Ca for marine growth [-] REAL(ReKi) :: SimplAxCp !< Simple model Axial Cp [-] REAL(ReKi) :: SimplAxCpMG !< Simple model Axial Cp for marine growth [-] + LOGICAL :: SimplMCF !< Flag T/F for whether the member is modeled with the MacCamy-Fuchs diffraction model [-] INTEGER(IntKi) :: NCoefDpth !< [-] TYPE(Morison_CoefDpths) , DIMENSION(:), ALLOCATABLE :: CoefDpths !< [-] INTEGER(IntKi) :: NCoefMembers !< [-] @@ -305,20 +318,24 @@ MODULE Morison_Types TYPE(Morison_MOutput) , DIMENSION(:), ALLOCATABLE :: MOutLst !< [-] INTEGER(IntKi) :: NJOutputs !< [-] TYPE(Morison_JOutput) , DIMENSION(:), ALLOCATABLE :: JOutLst !< [-] - CHARACTER(ChanLen) , DIMENSION(1:4032) :: OutList !< This list size needs to be the maximum of possible outputs because of the use of ReadAry() [-] - LOGICAL , DIMENSION(:), ALLOCATABLE :: ValidOutList !< [-] + CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: OutList !< This list size needs to be the maximum of possible outputs because of the use of ReadAry(). Use MaxMrsnOutputs [-] INTEGER(IntKi) :: NumOuts !< [-] - INTEGER(IntKi) :: OutSwtch !< [-] - LOGICAL :: OutAll !< [-] - CHARACTER(1024) :: OutRootName !< [-] - INTEGER(IntKi) :: UnOutFile !< [-] INTEGER(IntKi) :: UnSum !< [-] INTEGER(IntKi) :: NStepWave !< [-] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc !< [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< [-] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveDynP !< [-] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel !< [-] - INTEGER(IntKi) , DIMENSION(:,:), ALLOCATABLE :: nodeInWater !< Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAccMCF => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAccMCF0 => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< (points to SeaState module data) [-] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + INTEGER(IntKi) :: WaveStMod !< [-] + REAL(SiKi) :: MCFD !< Diameter of the MacCamy-Fuchs member. [-] END TYPE Morison_InitInputType ! ======================= ! ========= Morison_InitOutputType ======= @@ -334,7 +351,7 @@ MODULE Morison_Types ! ======================= ! ========= Morison_DiscreteStateType ======= TYPE, PUBLIC :: Morison_DiscreteStateType - REAL(SiKi) :: DummyDiscState !< Remove this variable if you have discrete states [-] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: V_rel_n_FiltStat !< State of the high-pass filter for the joint relative normal velocity [m/s] END TYPE Morison_DiscreteStateType ! ======================= ! ========= Morison_ConstraintStateType ======= @@ -351,7 +368,11 @@ MODULE Morison_Types TYPE, PUBLIC :: Morison_MiscVarType REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: FV !< Fluid velocity at line element node at time t, which may not correspond to the WaveTime array of times [-] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: FA !< Fluid acceleration at line element node at time t, which may not correspond to the WaveTime array of times [-] + REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: FAMCF !< Fluid acceleration at line element node at time t, which may not correspond to the WaveTime array of times [-] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: FDynP !< Fluid dynamic pressure at line element node at time t, which may not correspond to the WaveTime array of times [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev !< Total wave elevation [m] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev1 !< First order wave elevation [m] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev2 !< Second order wave elevation [m] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: vrel !< velocity of structural node relative to the water [m/s^2] INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: nodeInWater !< Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated [-] TYPE(Morison_MemberLoads) , DIMENSION(:), ALLOCATABLE :: memberLoads !< Array (NMembers long) of member-based side-effects load contributions [-] @@ -361,7 +382,10 @@ MODULE Morison_Types REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: F_IMG_End !< Joint marine growth intertia loads at time t, which may not correspond to the WaveTime array of times [-] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: F_A_End !< Lumped added mass loads at time t, which may not correspond to the WaveTime array of times [-] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: F_BF_End !< [-] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: V_rel_n !< Normal relative flow velocity at joints [m/s] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: V_rel_n_HiPass !< High-pass filtered normal relative flow velocity at joints [m/s] INTEGER(IntKi) :: LastIndWave !< Last time index used in the wave kinematics arrays [-] + TYPE(SeaSt_Interp_MiscVarType) :: SeaSt_Interp_m !< misc var information from the SeaState Interpolation module [-] END TYPE Morison_MiscVarType ! ======================= ! ========= Morison_ParameterType ======= @@ -371,6 +395,8 @@ MODULE Morison_Types REAL(ReKi) :: WtrDens !< Water density [kg/m^3] REAL(ReKi) :: WtrDpth !< Water depth (positive-valued) [m] REAL(ReKi) :: MSL2SWL !< Mean Sea Level to Still Water Level offset [m] + INTEGER(IntKi) :: WaveDisp !< Method of computing Wave Kinematics. (0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [-] + INTEGER(IntKi) :: AMMod !< Method of computing distributed added-mass force. (0: Only and always on nodes below SWL at the undisplaced position. 1: Up to the instantaneous free surface) [overwrite to 0 when WaveMod = 0 or 6 or when WaveStMod = 0 in SeaState] [-] INTEGER(IntKi) :: NMembers !< number of members [-] TYPE(Morison_MemberType) , DIMENSION(:), ALLOCATABLE :: Members !< Array of Morison members used during simulation [-] INTEGER(IntKi) :: NNodes !< [-] @@ -378,15 +404,28 @@ MODULE Morison_Types REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: I_MG_End !< Inertial matrix associated with marine growth mass at joint [-] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: An_End !< directional area vector of each joint [m^2] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: DragConst_End !< [-] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: VRelNFiltConst !< [-] + INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: DragMod_End !< [-] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: DragLoFSc_End !< [-] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: F_WMG_End !< Joint marine growth weight loads, constant for all t [N] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: DP_Const_End !< Constant part of Joint dynamic pressure term [N] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: Mass_MG_End !< Joint marine growth mass [kg] REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: AM_End !< 3x3 Joint added mass matrix, constant for all t [N] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel !< [-] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc !< [-] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveDynP !< [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Times for which the wave kinematics are pre-computed [s] - INTEGER(IntKi) , DIMENSION(:,:), ALLOCATABLE :: nodeInWater !< Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation (points to SeaState module data) [m] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation (points to SeaState module data) [m] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAccMCF => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:), ALLOCATABLE :: WaveVel0 !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), ALLOCATABLE :: WaveAcc0 !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), ALLOCATABLE :: WaveAccMCF0 !< [-] + REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveDynP0 !< [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Times for which the wave kinematics are pre-computed (points to SeaState module data) [s] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAccMCF0 => NULL() !< (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< (points to SeaState module data) [-] INTEGER(IntKi) :: NStepWave !< [-] INTEGER(IntKi) :: NMOutputs !< [-] TYPE(Morison_MOutput) , DIMENSION(:), ALLOCATABLE :: MOutLst !< [-] @@ -394,12 +433,8 @@ MODULE Morison_Types TYPE(Morison_JOutput) , DIMENSION(:), ALLOCATABLE :: JOutLst !< [-] TYPE(OutParmType) , DIMENSION(:), ALLOCATABLE :: OutParam !< [-] INTEGER(IntKi) :: NumOuts !< [-] - INTEGER(IntKi) :: NumOutAll !< [-] - INTEGER(IntKi) :: OutSwtch !< [-] - INTEGER(IntKi) :: UnOutFile !< [-] - CHARACTER(20) :: OutFmt !< [-] - CHARACTER(20) :: OutSFmt !< [-] - CHARACTER(ChanLen) :: Delim !< [-] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + INTEGER(IntKi) :: WaveStMod !< [-] END TYPE Morison_ParameterType ! ======================= ! ========= Morison_InputType ======= @@ -425,6 +460,8 @@ SUBROUTINE Morison_CopyJointType( SrcJointTypeData, DstJointTypeData, CtrlCode, INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Morison_CopyJointType' @@ -568,6 +605,8 @@ SUBROUTINE Morison_UnPackJointType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Morison_UnPackJointType' @@ -995,6 +1034,7 @@ SUBROUTINE Morison_CopyCoefDpths( SrcCoefDpthsData, DstCoefDpthsData, CtrlCode, DstCoefDpthsData%DpthAxCaMG = SrcCoefDpthsData%DpthAxCaMG DstCoefDpthsData%DpthAxCp = SrcCoefDpthsData%DpthAxCp DstCoefDpthsData%DpthAxCpMG = SrcCoefDpthsData%DpthAxCpMG + DstCoefDpthsData%DpthMCF = SrcCoefDpthsData%DpthMCF END SUBROUTINE Morison_CopyCoefDpths SUBROUTINE Morison_DestroyCoefDpths( CoefDpthsData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -1068,6 +1108,7 @@ SUBROUTINE Morison_PackCoefDpths( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_BufSz = Re_BufSz + 1 ! DpthAxCaMG Re_BufSz = Re_BufSz + 1 ! DpthAxCp Re_BufSz = Re_BufSz + 1 ! DpthAxCpMG + Int_BufSz = Int_BufSz + 1 ! DpthMCF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1121,6 +1162,8 @@ SUBROUTINE Morison_PackCoefDpths( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%DpthAxCpMG Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%DpthMCF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_PackCoefDpths SUBROUTINE Morison_UnPackCoefDpths( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -1175,6 +1218,8 @@ SUBROUTINE Morison_UnPackCoefDpths( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Re_Xferred = Re_Xferred + 1 OutData%DpthAxCpMG = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 + OutData%DpthMCF = TRANSFER(IntKiBuf(Int_Xferred), OutData%DpthMCF) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_UnPackCoefDpths SUBROUTINE Morison_CopyAxialCoefType( SrcAxialCoefTypeData, DstAxialCoefTypeData, CtrlCode, ErrStat, ErrMsg ) @@ -1195,6 +1240,9 @@ SUBROUTINE Morison_CopyAxialCoefType( SrcAxialCoefTypeData, DstAxialCoefTypeData DstAxialCoefTypeData%AxCd = SrcAxialCoefTypeData%AxCd DstAxialCoefTypeData%AxCa = SrcAxialCoefTypeData%AxCa DstAxialCoefTypeData%AxCp = SrcAxialCoefTypeData%AxCp + DstAxialCoefTypeData%AxVnCOff = SrcAxialCoefTypeData%AxVnCOff + DstAxialCoefTypeData%AxFDLoFSc = SrcAxialCoefTypeData%AxFDLoFSc + DstAxialCoefTypeData%AxFDMod = SrcAxialCoefTypeData%AxFDMod END SUBROUTINE Morison_CopyAxialCoefType SUBROUTINE Morison_DestroyAxialCoefType( AxialCoefTypeData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -1259,6 +1307,9 @@ SUBROUTINE Morison_PackAxialCoefType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrSta Re_BufSz = Re_BufSz + 1 ! AxCd Re_BufSz = Re_BufSz + 1 ! AxCa Re_BufSz = Re_BufSz + 1 ! AxCp + Re_BufSz = Re_BufSz + 1 ! AxVnCOff + Re_BufSz = Re_BufSz + 1 ! AxFDLoFSc + Int_BufSz = Int_BufSz + 1 ! AxFDMod IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1294,6 +1345,12 @@ SUBROUTINE Morison_PackAxialCoefType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrSta Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%AxCp Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%AxVnCOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%AxFDLoFSc + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%AxFDMod + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_PackAxialCoefType SUBROUTINE Morison_UnPackAxialCoefType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -1330,6 +1387,12 @@ SUBROUTINE Morison_UnPackAxialCoefType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, Err Re_Xferred = Re_Xferred + 1 OutData%AxCp = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 + OutData%AxVnCOff = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%AxFDLoFSc = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%AxFDMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_UnPackAxialCoefType SUBROUTINE Morison_CopyMemberInputType( SrcMemberInputTypeData, DstMemberInputTypeData, CtrlCode, ErrStat, ErrMsg ) @@ -1373,6 +1436,7 @@ SUBROUTINE Morison_CopyMemberInputType( SrcMemberInputTypeData, DstMemberInputTy DstMemberInputTypeData%MmbrCoefIDIndx = SrcMemberInputTypeData%MmbrCoefIDIndx DstMemberInputTypeData%MmbrFilledIDIndx = SrcMemberInputTypeData%MmbrFilledIDIndx DstMemberInputTypeData%PropPot = SrcMemberInputTypeData%PropPot + DstMemberInputTypeData%PropMCF = SrcMemberInputTypeData%PropMCF DstMemberInputTypeData%NElements = SrcMemberInputTypeData%NElements DstMemberInputTypeData%RefLength = SrcMemberInputTypeData%RefLength DstMemberInputTypeData%dl = SrcMemberInputTypeData%dl @@ -1458,6 +1522,7 @@ SUBROUTINE Morison_PackMemberInputType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrS Int_BufSz = Int_BufSz + 1 ! MmbrCoefIDIndx Int_BufSz = Int_BufSz + 1 ! MmbrFilledIDIndx Int_BufSz = Int_BufSz + 1 ! PropPot + Int_BufSz = Int_BufSz + 1 ! PropMCF Int_BufSz = Int_BufSz + 1 ! NElements Re_BufSz = Re_BufSz + 1 ! RefLength Re_BufSz = Re_BufSz + 1 ! dl @@ -1531,6 +1596,8 @@ SUBROUTINE Morison_PackMemberInputType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrS Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = TRANSFER(InData%PropPot, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%PropMCF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NElements Int_Xferred = Int_Xferred + 1 ReKiBuf(Re_Xferred) = InData%RefLength @@ -1612,6 +1679,8 @@ SUBROUTINE Morison_UnPackMemberInputType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, E Int_Xferred = Int_Xferred + 1 OutData%PropPot = TRANSFER(IntKiBuf(Int_Xferred), OutData%PropPot) Int_Xferred = Int_Xferred + 1 + OutData%PropMCF = TRANSFER(IntKiBuf(Int_Xferred), OutData%PropMCF) + Int_Xferred = Int_Xferred + 1 OutData%NElements = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%RefLength = ReKiBuf(Re_Xferred) @@ -1644,6 +1713,9 @@ SUBROUTINE Morison_CopyNodeType( SrcNodeTypeData, DstNodeTypeData, CtrlCode, Err DstNodeTypeData%JAxCd = SrcNodeTypeData%JAxCd DstNodeTypeData%JAxCa = SrcNodeTypeData%JAxCa DstNodeTypeData%JAxCp = SrcNodeTypeData%JAxCp + DstNodeTypeData%JAxVnCOff = SrcNodeTypeData%JAxVnCOff + DstNodeTypeData%JAxFDLoFSc = SrcNodeTypeData%JAxFDLoFSc + DstNodeTypeData%JAxFDMod = SrcNodeTypeData%JAxFDMod DstNodeTypeData%FillDensity = SrcNodeTypeData%FillDensity DstNodeTypeData%tMG = SrcNodeTypeData%tMG DstNodeTypeData%MGdensity = SrcNodeTypeData%MGdensity @@ -1716,6 +1788,9 @@ SUBROUTINE Morison_PackNodeType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_BufSz = Re_BufSz + 1 ! JAxCd Re_BufSz = Re_BufSz + 1 ! JAxCa Re_BufSz = Re_BufSz + 1 ! JAxCp + Re_BufSz = Re_BufSz + 1 ! JAxVnCOff + Re_BufSz = Re_BufSz + 1 ! JAxFDLoFSc + Int_BufSz = Int_BufSz + 1 ! JAxFDMod Re_BufSz = Re_BufSz + 1 ! FillDensity Re_BufSz = Re_BufSz + 1 ! tMG Re_BufSz = Re_BufSz + 1 ! MGdensity @@ -1768,6 +1843,12 @@ SUBROUTINE Morison_PackNodeType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%JAxCp Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%JAxVnCOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%JAxFDLoFSc + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%JAxFDMod + Int_Xferred = Int_Xferred + 1 ReKiBuf(Re_Xferred) = InData%FillDensity Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%tMG @@ -1829,6 +1910,12 @@ SUBROUTINE Morison_UnPackNodeType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 OutData%JAxCp = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 + OutData%JAxVnCOff = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%JAxFDLoFSc = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%JAxFDMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 OutData%FillDensity = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 OutData%tMG = ReKiBuf(Re_Xferred) @@ -2324,6 +2411,7 @@ SUBROUTINE Morison_CopyMemberType( SrcMemberTypeData, DstMemberTypeData, CtrlCod DstMemberTypeData%FillFSLoc = SrcMemberTypeData%FillFSLoc DstMemberTypeData%FillDens = SrcMemberTypeData%FillDens DstMemberTypeData%PropPot = SrcMemberTypeData%PropPot + DstMemberTypeData%PropMCF = SrcMemberTypeData%PropMCF DstMemberTypeData%Flipped = SrcMemberTypeData%Flipped END SUBROUTINE Morison_CopyMemberType @@ -2708,6 +2796,7 @@ SUBROUTINE Morison_PackMemberType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Re_BufSz = Re_BufSz + 1 ! FillFSLoc Re_BufSz = Re_BufSz + 1 ! FillDens Int_BufSz = Int_BufSz + 1 ! PropPot + Int_BufSz = Int_BufSz + 1 ! PropMCF Int_BufSz = Int_BufSz + 1 ! Flipped IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) @@ -3355,6 +3444,8 @@ SUBROUTINE Morison_PackMemberType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Re_Xferred = Re_Xferred + 1 IntKiBuf(Int_Xferred) = TRANSFER(InData%PropPot, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%PropMCF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = TRANSFER(InData%Flipped, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_PackMemberType @@ -4127,6 +4218,8 @@ SUBROUTINE Morison_UnPackMemberType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Re_Xferred = Re_Xferred + 1 OutData%PropPot = TRANSFER(IntKiBuf(Int_Xferred), OutData%PropPot) Int_Xferred = Int_Xferred + 1 + OutData%PropMCF = TRANSFER(IntKiBuf(Int_Xferred), OutData%PropMCF) + Int_Xferred = Int_Xferred + 1 OutData%Flipped = TRANSFER(IntKiBuf(Int_Xferred), OutData%Flipped) Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_UnPackMemberType @@ -5020,6 +5113,7 @@ SUBROUTINE Morison_CopyCoefMembers( SrcCoefMembersData, DstCoefMembersData, Ctrl DstCoefMembersData%MemberAxCp2 = SrcCoefMembersData%MemberAxCp2 DstCoefMembersData%MemberAxCpMG1 = SrcCoefMembersData%MemberAxCpMG1 DstCoefMembersData%MemberAxCpMG2 = SrcCoefMembersData%MemberAxCpMG2 + DstCoefMembersData%MemberMCF = SrcCoefMembersData%MemberMCF END SUBROUTINE Morison_CopyCoefMembers SUBROUTINE Morison_DestroyCoefMembers( CoefMembersData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -5105,6 +5199,7 @@ SUBROUTINE Morison_PackCoefMembers( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Re_BufSz = Re_BufSz + 1 ! MemberAxCp2 Re_BufSz = Re_BufSz + 1 ! MemberAxCpMG1 Re_BufSz = Re_BufSz + 1 ! MemberAxCpMG2 + Int_BufSz = Int_BufSz + 1 ! MemberMCF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -5182,6 +5277,8 @@ SUBROUTINE Morison_PackCoefMembers( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%MemberAxCpMG2 Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%MemberMCF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_PackCoefMembers SUBROUTINE Morison_UnPackCoefMembers( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -5260,6 +5357,8 @@ SUBROUTINE Morison_UnPackCoefMembers( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt Re_Xferred = Re_Xferred + 1 OutData%MemberAxCpMG2 = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 + OutData%MemberMCF = TRANSFER(IntKiBuf(Int_Xferred), OutData%MemberMCF) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_UnPackCoefMembers SUBROUTINE Morison_CopyMGDepthsType( SrcMGDepthsTypeData, DstMGDepthsTypeData, CtrlCode, ErrStat, ErrMsg ) @@ -6034,6 +6133,8 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Morison_CopyInitInput' @@ -6044,6 +6145,8 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, DstInitInputData%WtrDens = SrcInitInputData%WtrDens DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth DstInitInputData%MSL2SWL = SrcInitInputData%MSL2SWL + DstInitInputData%WaveDisp = SrcInitInputData%WaveDisp + DstInitInputData%AMMod = SrcInitInputData%AMMod DstInitInputData%NJoints = SrcInitInputData%NJoints DstInitInputData%NNodes = SrcInitInputData%NNodes IF (ALLOCATED(SrcInitInputData%InpJoints)) THEN @@ -6124,6 +6227,7 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, DstInitInputData%SimplAxCaMG = SrcInitInputData%SimplAxCaMG DstInitInputData%SimplAxCp = SrcInitInputData%SimplAxCp DstInitInputData%SimplAxCpMG = SrcInitInputData%SimplAxCpMG + DstInitInputData%SimplMCF = SrcInitInputData%SimplMCF DstInitInputData%NCoefDpth = SrcInitInputData%NCoefDpth IF (ALLOCATED(SrcInitInputData%CoefDpths)) THEN i1_l = LBOUND(SrcInitInputData%CoefDpths,1) @@ -6245,35 +6349,66 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF - DstInitInputData%OutList = SrcInitInputData%OutList -IF (ALLOCATED(SrcInitInputData%ValidOutList)) THEN - i1_l = LBOUND(SrcInitInputData%ValidOutList,1) - i1_u = UBOUND(SrcInitInputData%ValidOutList,1) - IF (.NOT. ALLOCATED(DstInitInputData%ValidOutList)) THEN - ALLOCATE(DstInitInputData%ValidOutList(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcInitInputData%OutList)) THEN + i1_l = LBOUND(SrcInitInputData%OutList,1) + i1_u = UBOUND(SrcInitInputData%OutList,1) + IF (.NOT. ALLOCATED(DstInitInputData%OutList)) THEN + ALLOCATE(DstInitInputData%OutList(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%ValidOutList.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%OutList.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstInitInputData%ValidOutList = SrcInitInputData%ValidOutList + DstInitInputData%OutList = SrcInitInputData%OutList ENDIF DstInitInputData%NumOuts = SrcInitInputData%NumOuts - DstInitInputData%OutSwtch = SrcInitInputData%OutSwtch - DstInitInputData%OutAll = SrcInitInputData%OutAll - DstInitInputData%OutRootName = SrcInitInputData%OutRootName - DstInitInputData%UnOutFile = SrcInitInputData%UnOutFile DstInitInputData%UnSum = SrcInitInputData%UnSum DstInitInputData%NStepWave = SrcInitInputData%NStepWave -IF (ALLOCATED(SrcInitInputData%WaveAcc)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveElev1)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElev1,1) + i1_u = UBOUND(SrcInitInputData%WaveElev1,1) + i2_l = LBOUND(SrcInitInputData%WaveElev1,2) + i2_u = UBOUND(SrcInitInputData%WaveElev1,2) + i3_l = LBOUND(SrcInitInputData%WaveElev1,3) + i3_u = UBOUND(SrcInitInputData%WaveElev1,3) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev1)) THEN + ALLOCATE(DstInitInputData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElev1 = SrcInitInputData%WaveElev1 +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveElev2)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElev2,1) + i1_u = UBOUND(SrcInitInputData%WaveElev2,1) + i2_l = LBOUND(SrcInitInputData%WaveElev2,2) + i2_u = UBOUND(SrcInitInputData%WaveElev2,2) + i3_l = LBOUND(SrcInitInputData%WaveElev2,3) + i3_u = UBOUND(SrcInitInputData%WaveElev2,3) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev2)) THEN + ALLOCATE(DstInitInputData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElev2 = SrcInitInputData%WaveElev2 +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveAcc)) THEN i1_l = LBOUND(SrcInitInputData%WaveAcc,1) i1_u = UBOUND(SrcInitInputData%WaveAcc,1) i2_l = LBOUND(SrcInitInputData%WaveAcc,2) i2_u = UBOUND(SrcInitInputData%WaveAcc,2) i3_l = LBOUND(SrcInitInputData%WaveAcc,3) i3_u = UBOUND(SrcInitInputData%WaveAcc,3) - IF (.NOT. ALLOCATED(DstInitInputData%WaveAcc)) THEN - ALLOCATE(DstInitInputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + i4_l = LBOUND(SrcInitInputData%WaveAcc,4) + i4_u = UBOUND(SrcInitInputData%WaveAcc,4) + i5_l = LBOUND(SrcInitInputData%WaveAcc,5) + i5_u = UBOUND(SrcInitInputData%WaveAcc,5) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveAcc)) THEN + ALLOCATE(DstInitInputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveAcc.', ErrStat, ErrMsg,RoutineName) RETURN @@ -6281,10 +6416,30 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, END IF DstInitInputData%WaveAcc = SrcInitInputData%WaveAcc ENDIF -IF (ALLOCATED(SrcInitInputData%WaveTime)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveAccMCF)) THEN + i1_l = LBOUND(SrcInitInputData%WaveAccMCF,1) + i1_u = UBOUND(SrcInitInputData%WaveAccMCF,1) + i2_l = LBOUND(SrcInitInputData%WaveAccMCF,2) + i2_u = UBOUND(SrcInitInputData%WaveAccMCF,2) + i3_l = LBOUND(SrcInitInputData%WaveAccMCF,3) + i3_u = UBOUND(SrcInitInputData%WaveAccMCF,3) + i4_l = LBOUND(SrcInitInputData%WaveAccMCF,4) + i4_u = UBOUND(SrcInitInputData%WaveAccMCF,4) + i5_l = LBOUND(SrcInitInputData%WaveAccMCF,5) + i5_u = UBOUND(SrcInitInputData%WaveAccMCF,5) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveAccMCF)) THEN + ALLOCATE(DstInitInputData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveAccMCF = SrcInitInputData%WaveAccMCF +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveTime)) THEN i1_l = LBOUND(SrcInitInputData%WaveTime,1) i1_u = UBOUND(SrcInitInputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveTime)) THEN + IF (.NOT. ASSOCIATED(DstInitInputData%WaveTime)) THEN ALLOCATE(DstInitInputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -6293,13 +6448,17 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, END IF DstInitInputData%WaveTime = SrcInitInputData%WaveTime ENDIF -IF (ALLOCATED(SrcInitInputData%WaveDynP)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveDynP)) THEN i1_l = LBOUND(SrcInitInputData%WaveDynP,1) i1_u = UBOUND(SrcInitInputData%WaveDynP,1) i2_l = LBOUND(SrcInitInputData%WaveDynP,2) i2_u = UBOUND(SrcInitInputData%WaveDynP,2) - IF (.NOT. ALLOCATED(DstInitInputData%WaveDynP)) THEN - ALLOCATE(DstInitInputData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + i3_l = LBOUND(SrcInitInputData%WaveDynP,3) + i3_u = UBOUND(SrcInitInputData%WaveDynP,3) + i4_l = LBOUND(SrcInitInputData%WaveDynP,4) + i4_u = UBOUND(SrcInitInputData%WaveDynP,4) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveDynP)) THEN + ALLOCATE(DstInitInputData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveDynP.', ErrStat, ErrMsg,RoutineName) RETURN @@ -6307,15 +6466,19 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, END IF DstInitInputData%WaveDynP = SrcInitInputData%WaveDynP ENDIF -IF (ALLOCATED(SrcInitInputData%WaveVel)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveVel)) THEN i1_l = LBOUND(SrcInitInputData%WaveVel,1) i1_u = UBOUND(SrcInitInputData%WaveVel,1) i2_l = LBOUND(SrcInitInputData%WaveVel,2) i2_u = UBOUND(SrcInitInputData%WaveVel,2) i3_l = LBOUND(SrcInitInputData%WaveVel,3) i3_u = UBOUND(SrcInitInputData%WaveVel,3) - IF (.NOT. ALLOCATED(DstInitInputData%WaveVel)) THEN - ALLOCATE(DstInitInputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + i4_l = LBOUND(SrcInitInputData%WaveVel,4) + i4_u = UBOUND(SrcInitInputData%WaveVel,4) + i5_l = LBOUND(SrcInitInputData%WaveVel,5) + i5_u = UBOUND(SrcInitInputData%WaveVel,5) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveVel)) THEN + ALLOCATE(DstInitInputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveVel.', ErrStat, ErrMsg,RoutineName) RETURN @@ -6323,20 +6486,81 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, END IF DstInitInputData%WaveVel = SrcInitInputData%WaveVel ENDIF -IF (ALLOCATED(SrcInitInputData%nodeInWater)) THEN - i1_l = LBOUND(SrcInitInputData%nodeInWater,1) - i1_u = UBOUND(SrcInitInputData%nodeInWater,1) - i2_l = LBOUND(SrcInitInputData%nodeInWater,2) - i2_u = UBOUND(SrcInitInputData%nodeInWater,2) - IF (.NOT. ALLOCATED(DstInitInputData%nodeInWater)) THEN - ALLOCATE(DstInitInputData%nodeInWater(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) +IF (ASSOCIATED(SrcInitInputData%PWaveAcc0)) THEN + i1_l = LBOUND(SrcInitInputData%PWaveAcc0,1) + i1_u = UBOUND(SrcInitInputData%PWaveAcc0,1) + i2_l = LBOUND(SrcInitInputData%PWaveAcc0,2) + i2_u = UBOUND(SrcInitInputData%PWaveAcc0,2) + i3_l = LBOUND(SrcInitInputData%PWaveAcc0,3) + i3_u = UBOUND(SrcInitInputData%PWaveAcc0,3) + i4_l = LBOUND(SrcInitInputData%PWaveAcc0,4) + i4_u = UBOUND(SrcInitInputData%PWaveAcc0,4) + IF (.NOT. ASSOCIATED(DstInitInputData%PWaveAcc0)) THEN + ALLOCATE(DstInitInputData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%PWaveAcc0 = SrcInitInputData%PWaveAcc0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%PWaveAccMCF0)) THEN + i1_l = LBOUND(SrcInitInputData%PWaveAccMCF0,1) + i1_u = UBOUND(SrcInitInputData%PWaveAccMCF0,1) + i2_l = LBOUND(SrcInitInputData%PWaveAccMCF0,2) + i2_u = UBOUND(SrcInitInputData%PWaveAccMCF0,2) + i3_l = LBOUND(SrcInitInputData%PWaveAccMCF0,3) + i3_u = UBOUND(SrcInitInputData%PWaveAccMCF0,3) + i4_l = LBOUND(SrcInitInputData%PWaveAccMCF0,4) + i4_u = UBOUND(SrcInitInputData%PWaveAccMCF0,4) + IF (.NOT. ASSOCIATED(DstInitInputData%PWaveAccMCF0)) THEN + ALLOCATE(DstInitInputData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%PWaveAccMCF0 = SrcInitInputData%PWaveAccMCF0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%PWaveDynP0)) THEN + i1_l = LBOUND(SrcInitInputData%PWaveDynP0,1) + i1_u = UBOUND(SrcInitInputData%PWaveDynP0,1) + i2_l = LBOUND(SrcInitInputData%PWaveDynP0,2) + i2_u = UBOUND(SrcInitInputData%PWaveDynP0,2) + i3_l = LBOUND(SrcInitInputData%PWaveDynP0,3) + i3_u = UBOUND(SrcInitInputData%PWaveDynP0,3) + IF (.NOT. ASSOCIATED(DstInitInputData%PWaveDynP0)) THEN + ALLOCATE(DstInitInputData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%PWaveDynP0 = SrcInitInputData%PWaveDynP0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%PWaveVel0)) THEN + i1_l = LBOUND(SrcInitInputData%PWaveVel0,1) + i1_u = UBOUND(SrcInitInputData%PWaveVel0,1) + i2_l = LBOUND(SrcInitInputData%PWaveVel0,2) + i2_u = UBOUND(SrcInitInputData%PWaveVel0,2) + i3_l = LBOUND(SrcInitInputData%PWaveVel0,3) + i3_u = UBOUND(SrcInitInputData%PWaveVel0,3) + i4_l = LBOUND(SrcInitInputData%PWaveVel0,4) + i4_u = UBOUND(SrcInitInputData%PWaveVel0,4) + IF (.NOT. ASSOCIATED(DstInitInputData%PWaveVel0)) THEN + ALLOCATE(DstInitInputData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%nodeInWater.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstInitInputData%nodeInWater = SrcInitInputData%nodeInWater + DstInitInputData%PWaveVel0 = SrcInitInputData%PWaveVel0 ENDIF + CALL SeaSt_Interp_CopyParam( SrcInitInputData%SeaSt_Interp_p, DstInitInputData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + DstInitInputData%WaveStMod = SrcInitInputData%WaveStMod + DstInitInputData%MCFD = SrcInitInputData%MCFD END SUBROUTINE Morison_CopyInitInput SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -6437,24 +6661,66 @@ SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEp ENDDO DEALLOCATE(InitInputData%JOutLst) ENDIF -IF (ALLOCATED(InitInputData%ValidOutList)) THEN - DEALLOCATE(InitInputData%ValidOutList) +IF (ALLOCATED(InitInputData%OutList)) THEN + DEALLOCATE(InitInputData%OutList) +ENDIF +IF (ASSOCIATED(InitInputData%WaveElev1)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveElev1) + InitInputData%WaveElev1 => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveAcc)) THEN +IF (ASSOCIATED(InitInputData%WaveElev2)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveElev2) + InitInputData%WaveElev2 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveAcc)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveAcc) + InitInputData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveAccMCF)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveAccMCF) + InitInputData%WaveAccMCF => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN +IF (ASSOCIATED(InitInputData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveDynP)) THEN +IF (ASSOCIATED(InitInputData%WaveDynP)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveDynP) + InitInputData%WaveDynP => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveVel)) THEN +IF (ASSOCIATED(InitInputData%WaveVel)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveVel) + InitInputData%WaveVel => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveAcc0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%PWaveAcc0) + InitInputData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveAccMCF0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%PWaveAccMCF0) + InitInputData%PWaveAccMCF0 => NULL() ENDIF -IF (ALLOCATED(InitInputData%nodeInWater)) THEN - DEALLOCATE(InitInputData%nodeInWater) +IF (ASSOCIATED(InitInputData%PWaveDynP0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%PWaveDynP0) + InitInputData%PWaveDynP0 => NULL() ENDIF +IF (ASSOCIATED(InitInputData%PWaveVel0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%PWaveVel0) + InitInputData%PWaveVel0 => NULL() +ENDIF + CALL SeaSt_Interp_DestroyParam( InitInputData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE Morison_DestroyInitInput SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -6496,6 +6762,8 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_BufSz = Re_BufSz + 1 ! WtrDens Re_BufSz = Re_BufSz + 1 ! WtrDpth Re_BufSz = Re_BufSz + 1 ! MSL2SWL + Int_BufSz = Int_BufSz + 1 ! WaveDisp + Int_BufSz = Int_BufSz + 1 ! AMMod Int_BufSz = Int_BufSz + 1 ! NJoints Int_BufSz = Int_BufSz + 1 ! NNodes Int_BufSz = Int_BufSz + 1 ! InpJoints allocated yes/no @@ -6605,6 +6873,7 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_BufSz = Re_BufSz + 1 ! SimplAxCaMG Re_BufSz = Re_BufSz + 1 ! SimplAxCp Re_BufSz = Re_BufSz + 1 ! SimplAxCpMG + Int_BufSz = Int_BufSz + 1 ! SimplMCF Int_BufSz = Int_BufSz + 1 ! NCoefDpth Int_BufSz = Int_BufSz + 1 ! CoefDpths allocated yes/no IF ( ALLOCATED(InData%CoefDpths) ) THEN @@ -6775,44 +7044,88 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END IF END DO END IF + Int_BufSz = Int_BufSz + 1 ! OutList allocated yes/no + IF ( ALLOCATED(InData%OutList) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! OutList upper/lower bounds for each dimension Int_BufSz = Int_BufSz + SIZE(InData%OutList)*LEN(InData%OutList) ! OutList - Int_BufSz = Int_BufSz + 1 ! ValidOutList allocated yes/no - IF ( ALLOCATED(InData%ValidOutList) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! ValidOutList upper/lower bounds for each dimension - Int_BufSz = Int_BufSz + SIZE(InData%ValidOutList) ! ValidOutList END IF Int_BufSz = Int_BufSz + 1 ! NumOuts - Int_BufSz = Int_BufSz + 1 ! OutSwtch - Int_BufSz = Int_BufSz + 1 ! OutAll - Int_BufSz = Int_BufSz + 1*LEN(InData%OutRootName) ! OutRootName - Int_BufSz = Int_BufSz + 1 ! UnOutFile Int_BufSz = Int_BufSz + 1 ! UnSum Int_BufSz = Int_BufSz + 1 ! NStepWave + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev2) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 + END IF Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no - IF ( ALLOCATED(InData%WaveAcc) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc upper/lower bounds for each dimension + IF ( ASSOCIATED(InData%WaveAcc) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAcc upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc END IF + Int_BufSz = Int_BufSz + 1 ! WaveAccMCF allocated yes/no + IF ( ASSOCIATED(InData%WaveAccMCF) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAccMCF upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAccMCF) ! WaveAccMCF + END IF Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN + IF ( ASSOCIATED(InData%WaveTime) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime END IF Int_BufSz = Int_BufSz + 1 ! WaveDynP allocated yes/no - IF ( ALLOCATED(InData%WaveDynP) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveDynP upper/lower bounds for each dimension + IF ( ASSOCIATED(InData%WaveDynP) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveDynP upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP) ! WaveDynP END IF Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no - IF ( ALLOCATED(InData%WaveVel) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel upper/lower bounds for each dimension + IF ( ASSOCIATED(InData%WaveVel) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveVel upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel END IF - Int_BufSz = Int_BufSz + 1 ! nodeInWater allocated yes/no - IF ( ALLOCATED(InData%nodeInWater) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! nodeInWater upper/lower bounds for each dimension - Int_BufSz = Int_BufSz + SIZE(InData%nodeInWater) ! nodeInWater + Int_BufSz = Int_BufSz + 1 ! PWaveAcc0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAcc0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAcc0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAcc0) ! PWaveAcc0 END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAccMCF0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAccMCF0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAccMCF0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAccMCF0) ! PWaveAccMCF0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveDynP0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveDynP0) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! PWaveDynP0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveDynP0) ! PWaveDynP0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveVel0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveVel0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveVel0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveVel0) ! PWaveVel0 + END IF + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 1 ! WaveStMod + Re_BufSz = Re_BufSz + 1 ! MCFD IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -6848,6 +7161,10 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%MSL2SWL Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveDisp + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%AMMod + Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NJoints Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NNodes @@ -7044,6 +7361,8 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%SimplAxCpMG Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%SimplMCF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NCoefDpth Int_Xferred = Int_Xferred + 1 IF ( .NOT. ALLOCATED(InData%CoefDpths) ) THEN @@ -7349,44 +7668,80 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ENDIF END DO END IF - DO i1 = LBOUND(InData%OutList,1), UBOUND(InData%OutList,1) - DO I = 1, LEN(InData%OutList) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutList(i1)(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - IF ( .NOT. ALLOCATED(InData%ValidOutList) ) THEN + IF ( .NOT. ALLOCATED(InData%OutList) ) 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%ValidOutList,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ValidOutList,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%OutList,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%OutList,1) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%ValidOutList,1), UBOUND(InData%ValidOutList,1) - IntKiBuf(Int_Xferred) = TRANSFER(InData%ValidOutList(i1), IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 + DO i1 = LBOUND(InData%OutList,1), UBOUND(InData%OutList,1) + DO I = 1, LEN(InData%OutList) + IntKiBuf(Int_Xferred) = ICHAR(InData%OutList(i1)(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I END DO END IF IntKiBuf(Int_Xferred) = InData%NumOuts Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%OutSwtch + IntKiBuf(Int_Xferred) = InData%UnSum Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%OutAll, IntKiBuf(1)) + IntKiBuf(Int_Xferred) = InData%NStepWave Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(InData%OutRootName) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutRootName(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - IntKiBuf(Int_Xferred) = InData%UnOutFile + IF ( .NOT. ASSOCIATED(InData%WaveElev1) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%UnSum + ELSE + IntKiBuf( Int_Xferred ) = 1 Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NStepWave + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev1,3), UBOUND(InData%WaveElev1,3) + DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElev2) ) THEN + IntKiBuf( Int_Xferred ) = 0 + Int_Xferred = Int_Xferred + 1 + ELSE + IntKiBuf( Int_Xferred ) = 1 Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveAcc) ) THEN + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev2,3), UBOUND(InData%WaveElev2,3) + DO i2 = LBOUND(InData%WaveElev2,2), UBOUND(InData%WaveElev2,2) + DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) + ReKiBuf(Re_Xferred) = InData%WaveElev2(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAcc) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -7400,18 +7755,63 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = Int_Xferred + 2 IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,5) Int_Xferred = Int_Xferred + 2 - DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) - DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) - DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 + DO i5 = LBOUND(InData%WaveAcc,5), UBOUND(InData%WaveAcc,5) + DO i4 = LBOUND(InData%WaveAcc,4), UBOUND(InData%WaveAcc,4) + DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) + DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) + DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAccMCF) ) 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%WaveAccMCF,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAccMCF,5), UBOUND(InData%WaveAccMCF,5) + DO i4 = LBOUND(InData%WaveAccMCF,4), UBOUND(InData%WaveAccMCF,4) + DO i3 = LBOUND(InData%WaveAccMCF,3), UBOUND(InData%WaveAccMCF,3) + DO i2 = LBOUND(InData%WaveAccMCF,2), UBOUND(InData%WaveAccMCF,2) + DO i1 = LBOUND(InData%WaveAccMCF,1), UBOUND(InData%WaveAccMCF,1) + ReKiBuf(Re_Xferred) = InData%WaveAccMCF(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -7426,7 +7826,7 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_Xferred = Re_Xferred + 1 END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveDynP) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveDynP) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -7437,16 +7837,26 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = Int_Xferred + 2 IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,2) IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,4) Int_Xferred = Int_Xferred + 2 - DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) - DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) - ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2) - Re_Xferred = Re_Xferred + 1 + DO i4 = LBOUND(InData%WaveDynP,4), UBOUND(InData%WaveDynP,4) + DO i3 = LBOUND(InData%WaveDynP,3), UBOUND(InData%WaveDynP,3) + DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) + DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveVel) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveVel) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -7460,37 +7870,174 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = Int_Xferred + 2 IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveVel,5), UBOUND(InData%WaveVel,5) + DO i4 = LBOUND(InData%WaveVel,4), UBOUND(InData%WaveVel,4) + DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) + DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) + DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) + ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAcc0) ) 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%PWaveAcc0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAcc0,4), UBOUND(InData%PWaveAcc0,4) + DO i3 = LBOUND(InData%PWaveAcc0,3), UBOUND(InData%PWaveAcc0,3) + DO i2 = LBOUND(InData%PWaveAcc0,2), UBOUND(InData%PWaveAcc0,2) + DO i1 = LBOUND(InData%PWaveAcc0,1), UBOUND(InData%PWaveAcc0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAcc0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAccMCF0) ) 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%PWaveAccMCF0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAccMCF0,4), UBOUND(InData%PWaveAccMCF0,4) + DO i3 = LBOUND(InData%PWaveAccMCF0,3), UBOUND(InData%PWaveAccMCF0,3) + DO i2 = LBOUND(InData%PWaveAccMCF0,2), UBOUND(InData%PWaveAccMCF0,2) + DO i1 = LBOUND(InData%PWaveAccMCF0,1), UBOUND(InData%PWaveAccMCF0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAccMCF0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveDynP0) ) 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%PWaveDynP0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,3) Int_Xferred = Int_Xferred + 2 - DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) - DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) - DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) - ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3) + DO i3 = LBOUND(InData%PWaveDynP0,3), UBOUND(InData%PWaveDynP0,3) + DO i2 = LBOUND(InData%PWaveDynP0,2), UBOUND(InData%PWaveDynP0,2) + DO i1 = LBOUND(InData%PWaveDynP0,1), UBOUND(InData%PWaveDynP0,1) + ReKiBuf(Re_Xferred) = InData%PWaveDynP0(i1,i2,i3) Re_Xferred = Re_Xferred + 1 END DO END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%nodeInWater) ) THEN + IF ( .NOT. ASSOCIATED(InData%PWaveVel0) ) 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%nodeInWater,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%nodeInWater,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,3) Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%nodeInWater,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%nodeInWater,2) + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,4) Int_Xferred = Int_Xferred + 2 - DO i2 = LBOUND(InData%nodeInWater,2), UBOUND(InData%nodeInWater,2) - DO i1 = LBOUND(InData%nodeInWater,1), UBOUND(InData%nodeInWater,1) - IntKiBuf(Int_Xferred) = InData%nodeInWater(i1,i2) - Int_Xferred = Int_Xferred + 1 + DO i4 = LBOUND(InData%PWaveVel0,4), UBOUND(InData%PWaveVel0,4) + DO i3 = LBOUND(InData%PWaveVel0,3), UBOUND(InData%PWaveVel0,3) + DO i2 = LBOUND(InData%PWaveVel0,2), UBOUND(InData%PWaveVel0,2) + DO i1 = LBOUND(InData%PWaveVel0,1), UBOUND(InData%PWaveVel0,1) + ReKiBuf(Re_Xferred) = InData%PWaveVel0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END IF + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IntKiBuf(Int_Xferred) = InData%WaveStMod + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%MCFD + Re_Xferred = Re_Xferred + 1 END SUBROUTINE Morison_PackInitInput SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -7509,6 +8056,8 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Morison_UnPackInitInput' @@ -7530,6 +8079,10 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Re_Xferred = Re_Xferred + 1 OutData%MSL2SWL = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 + OutData%WaveDisp = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%AMMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 OutData%NJoints = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%NNodes = IntKiBuf(Int_Xferred) @@ -7786,6 +8339,8 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Re_Xferred = Re_Xferred + 1 OutData%SimplAxCpMG = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 + OutData%SimplMCF = TRANSFER(IntKiBuf(Int_Xferred), OutData%SimplMCF) + Int_Xferred = Int_Xferred + 1 OutData%NCoefDpth = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CoefDpths not allocated @@ -8196,49 +8751,33 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO END IF - i1_l = LBOUND(OutData%OutList,1) - i1_u = UBOUND(OutData%OutList,1) - DO i1 = LBOUND(OutData%OutList,1), UBOUND(OutData%OutList,1) - DO I = 1, LEN(OutData%OutList) - OutData%OutList(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ValidOutList not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! OutList 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%ValidOutList)) DEALLOCATE(OutData%ValidOutList) - ALLOCATE(OutData%ValidOutList(i1_l:i1_u),STAT=ErrStat2) + IF (ALLOCATED(OutData%OutList)) DEALLOCATE(OutData%OutList) + ALLOCATE(OutData%OutList(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ValidOutList.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%OutList.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i1 = LBOUND(OutData%ValidOutList,1), UBOUND(OutData%ValidOutList,1) - OutData%ValidOutList(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%ValidOutList(i1)) - Int_Xferred = Int_Xferred + 1 + DO i1 = LBOUND(OutData%OutList,1), UBOUND(OutData%OutList,1) + DO I = 1, LEN(OutData%OutList) + OutData%OutList(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I END DO END IF OutData%NumOuts = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 - OutData%OutSwtch = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%OutAll = TRANSFER(IntKiBuf(Int_Xferred), OutData%OutAll) - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(OutData%OutRootName) - OutData%OutRootName(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%UnOutFile = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 OutData%UnSum = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%NStepWave = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 not allocated Int_Xferred = Int_Xferred + 1 ELSE Int_Xferred = Int_Xferred + 1 @@ -8251,40 +8790,50 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat i3_l = IntKiBuf( Int_Xferred ) i3_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) - ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ASSOCIATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) - DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) - DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) - OutData%WaveAcc(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + DO i3 = LBOUND(OutData%WaveElev1,3), UBOUND(OutData%WaveElev1,3) + DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) Re_Xferred = Re_Xferred + 1 END DO END DO END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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%WaveTime)) DEALLOCATE(OutData%WaveTime) - ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) + ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) - OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 + DO i3 = LBOUND(OutData%WaveElev2,3), UBOUND(OutData%WaveElev2,3) + DO i2 = LBOUND(OutData%WaveElev2,2), UBOUND(OutData%WaveElev2,2) + DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) + OutData%WaveElev2(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc not allocated Int_Xferred = Int_Xferred + 1 ELSE Int_Xferred = Int_Xferred + 1 @@ -8294,16 +8843,120 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat i2_l = IntKiBuf( Int_Xferred ) i2_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) - ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) + ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAcc,5), UBOUND(OutData%WaveAcc,5) + DO i4 = LBOUND(OutData%WaveAcc,4), UBOUND(OutData%WaveAcc,4) + DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) + DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) + DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) + OutData%WaveAcc(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAccMCF 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAccMCF)) DEALLOCATE(OutData%WaveAccMCF) + ALLOCATE(OutData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAccMCF,5), UBOUND(OutData%WaveAccMCF,5) + DO i4 = LBOUND(OutData%WaveAccMCF,4), UBOUND(OutData%WaveAccMCF,4) + DO i3 = LBOUND(OutData%WaveAccMCF,3), UBOUND(OutData%WaveAccMCF,3) + DO i2 = LBOUND(OutData%WaveAccMCF,2), UBOUND(OutData%WaveAccMCF,2) + DO i1 = LBOUND(OutData%WaveAccMCF,1), UBOUND(OutData%WaveAccMCF,1) + OutData%WaveAccMCF(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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 (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) + OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) + ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) - DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) - OutData%WaveDynP(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 + DO i4 = LBOUND(OutData%WaveDynP,4), UBOUND(OutData%WaveDynP,4) + DO i3 = LBOUND(OutData%WaveDynP,3), UBOUND(OutData%WaveDynP,3) + DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) + DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) + OutData%WaveDynP(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END IF @@ -8320,22 +8973,126 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat i3_l = IntKiBuf( Int_Xferred ) i3_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) - ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) + ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) - DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) - DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) - OutData%WaveVel(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + DO i5 = LBOUND(OutData%WaveVel,5), UBOUND(OutData%WaveVel,5) + DO i4 = LBOUND(OutData%WaveVel,4), UBOUND(OutData%WaveVel,4) + DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) + DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) + DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) + OutData%WaveVel(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAcc0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAcc0)) DEALLOCATE(OutData%PWaveAcc0) + ALLOCATE(OutData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAcc0,4), UBOUND(OutData%PWaveAcc0,4) + DO i3 = LBOUND(OutData%PWaveAcc0,3), UBOUND(OutData%PWaveAcc0,3) + DO i2 = LBOUND(OutData%PWaveAcc0,2), UBOUND(OutData%PWaveAcc0,2) + DO i1 = LBOUND(OutData%PWaveAcc0,1), UBOUND(OutData%PWaveAcc0,1) + OutData%PWaveAcc0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAccMCF0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAccMCF0)) DEALLOCATE(OutData%PWaveAccMCF0) + ALLOCATE(OutData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAccMCF0,4), UBOUND(OutData%PWaveAccMCF0,4) + DO i3 = LBOUND(OutData%PWaveAccMCF0,3), UBOUND(OutData%PWaveAccMCF0,3) + DO i2 = LBOUND(OutData%PWaveAccMCF0,2), UBOUND(OutData%PWaveAccMCF0,2) + DO i1 = LBOUND(OutData%PWaveAccMCF0,1), UBOUND(OutData%PWaveAccMCF0,1) + OutData%PWaveAccMCF0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveDynP0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveDynP0)) DEALLOCATE(OutData%PWaveDynP0) + ALLOCATE(OutData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%PWaveDynP0,3), UBOUND(OutData%PWaveDynP0,3) + DO i2 = LBOUND(OutData%PWaveDynP0,2), UBOUND(OutData%PWaveDynP0,2) + DO i1 = LBOUND(OutData%PWaveDynP0,1), UBOUND(OutData%PWaveDynP0,1) + OutData%PWaveDynP0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) Re_Xferred = Re_Xferred + 1 END DO END DO END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! nodeInWater not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveVel0 not allocated Int_Xferred = Int_Xferred + 1 ELSE Int_Xferred = Int_Xferred + 1 @@ -8345,19 +9102,73 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat i2_l = IntKiBuf( Int_Xferred ) i2_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%nodeInWater)) DEALLOCATE(OutData%nodeInWater) - ALLOCATE(OutData%nodeInWater(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveVel0)) DEALLOCATE(OutData%PWaveVel0) + ALLOCATE(OutData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%nodeInWater.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i2 = LBOUND(OutData%nodeInWater,2), UBOUND(OutData%nodeInWater,2) - DO i1 = LBOUND(OutData%nodeInWater,1), UBOUND(OutData%nodeInWater,1) - OutData%nodeInWater(i1,i2) = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 + DO i4 = LBOUND(OutData%PWaveVel0,4), UBOUND(OutData%PWaveVel0,4) + DO i3 = LBOUND(OutData%PWaveVel0,3), UBOUND(OutData%PWaveVel0,3) + DO i2 = LBOUND(OutData%PWaveVel0,2), UBOUND(OutData%PWaveVel0,2) + DO i1 = LBOUND(OutData%PWaveVel0,1), UBOUND(OutData%PWaveVel0,1) + OutData%PWaveVel0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + OutData%WaveStMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%MCFD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 END SUBROUTINE Morison_UnPackInitInput SUBROUTINE Morison_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) @@ -8752,13 +9563,25 @@ SUBROUTINE Morison_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Morison_CopyDiscState' ! ErrStat = ErrID_None ErrMsg = "" - DstDiscStateData%DummyDiscState = SrcDiscStateData%DummyDiscState +IF (ALLOCATED(SrcDiscStateData%V_rel_n_FiltStat)) THEN + i1_l = LBOUND(SrcDiscStateData%V_rel_n_FiltStat,1) + i1_u = UBOUND(SrcDiscStateData%V_rel_n_FiltStat,1) + IF (.NOT. ALLOCATED(DstDiscStateData%V_rel_n_FiltStat)) THEN + ALLOCATE(DstDiscStateData%V_rel_n_FiltStat(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstDiscStateData%V_rel_n_FiltStat.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstDiscStateData%V_rel_n_FiltStat = SrcDiscStateData%V_rel_n_FiltStat +ENDIF END SUBROUTINE Morison_CopyDiscState SUBROUTINE Morison_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -8782,6 +9605,9 @@ SUBROUTINE Morison_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEp DEALLOCATEpointers_local = .true. END IF +IF (ALLOCATED(DiscStateData%V_rel_n_FiltStat)) THEN + DEALLOCATE(DiscStateData%V_rel_n_FiltStat) +ENDIF END SUBROUTINE Morison_DestroyDiscState SUBROUTINE Morison_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -8819,7 +9645,11 @@ SUBROUTINE Morison_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_BufSz = 0 Db_BufSz = 0 Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyDiscState + Int_BufSz = Int_BufSz + 1 ! V_rel_n_FiltStat allocated yes/no + IF ( ALLOCATED(InData%V_rel_n_FiltStat) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! V_rel_n_FiltStat upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%V_rel_n_FiltStat) ! V_rel_n_FiltStat + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -8847,8 +9677,21 @@ SUBROUTINE Morison_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Db_Xferred = 1 Int_Xferred = 1 - ReKiBuf(Re_Xferred) = InData%DummyDiscState - Re_Xferred = Re_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%V_rel_n_FiltStat) ) 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%V_rel_n_FiltStat,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%V_rel_n_FiltStat,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%V_rel_n_FiltStat,1), UBOUND(InData%V_rel_n_FiltStat,1) + ReKiBuf(Re_Xferred) = InData%V_rel_n_FiltStat(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF END SUBROUTINE Morison_PackDiscState SUBROUTINE Morison_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -8864,6 +9707,7 @@ SUBROUTINE Morison_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat INTEGER(IntKi) :: Db_Xferred INTEGER(IntKi) :: Int_Xferred INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Morison_UnPackDiscState' @@ -8877,8 +9721,24 @@ SUBROUTINE Morison_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Re_Xferred = 1 Db_Xferred = 1 Int_Xferred = 1 - OutData%DummyDiscState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! V_rel_n_FiltStat 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%V_rel_n_FiltStat)) DEALLOCATE(OutData%V_rel_n_FiltStat) + ALLOCATE(OutData%V_rel_n_FiltStat(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%V_rel_n_FiltStat.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%V_rel_n_FiltStat,1), UBOUND(OutData%V_rel_n_FiltStat,1) + OutData%V_rel_n_FiltStat(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF END SUBROUTINE Morison_UnPackDiscState SUBROUTINE Morison_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) @@ -9199,6 +10059,20 @@ SUBROUTINE Morison_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg END IF DstMiscData%FA = SrcMiscData%FA ENDIF +IF (ALLOCATED(SrcMiscData%FAMCF)) THEN + i1_l = LBOUND(SrcMiscData%FAMCF,1) + i1_u = UBOUND(SrcMiscData%FAMCF,1) + i2_l = LBOUND(SrcMiscData%FAMCF,2) + i2_u = UBOUND(SrcMiscData%FAMCF,2) + IF (.NOT. ALLOCATED(DstMiscData%FAMCF)) THEN + ALLOCATE(DstMiscData%FAMCF(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%FAMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%FAMCF = SrcMiscData%FAMCF +ENDIF IF (ALLOCATED(SrcMiscData%FDynP)) THEN i1_l = LBOUND(SrcMiscData%FDynP,1) i1_u = UBOUND(SrcMiscData%FDynP,1) @@ -9211,6 +10085,42 @@ SUBROUTINE Morison_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg END IF DstMiscData%FDynP = SrcMiscData%FDynP ENDIF +IF (ALLOCATED(SrcMiscData%WaveElev)) THEN + i1_l = LBOUND(SrcMiscData%WaveElev,1) + i1_u = UBOUND(SrcMiscData%WaveElev,1) + IF (.NOT. ALLOCATED(DstMiscData%WaveElev)) THEN + ALLOCATE(DstMiscData%WaveElev(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%WaveElev.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%WaveElev = SrcMiscData%WaveElev +ENDIF +IF (ALLOCATED(SrcMiscData%WaveElev1)) THEN + i1_l = LBOUND(SrcMiscData%WaveElev1,1) + i1_u = UBOUND(SrcMiscData%WaveElev1,1) + IF (.NOT. ALLOCATED(DstMiscData%WaveElev1)) THEN + ALLOCATE(DstMiscData%WaveElev1(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%WaveElev1 = SrcMiscData%WaveElev1 +ENDIF +IF (ALLOCATED(SrcMiscData%WaveElev2)) THEN + i1_l = LBOUND(SrcMiscData%WaveElev2,1) + i1_u = UBOUND(SrcMiscData%WaveElev2,1) + IF (.NOT. ALLOCATED(DstMiscData%WaveElev2)) THEN + ALLOCATE(DstMiscData%WaveElev2(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%WaveElev2 = SrcMiscData%WaveElev2 +ENDIF IF (ALLOCATED(SrcMiscData%vrel)) THEN i1_l = LBOUND(SrcMiscData%vrel,1) i1_u = UBOUND(SrcMiscData%vrel,1) @@ -9336,8 +10246,35 @@ SUBROUTINE Morison_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg END IF END IF DstMiscData%F_BF_End = SrcMiscData%F_BF_End +ENDIF +IF (ALLOCATED(SrcMiscData%V_rel_n)) THEN + i1_l = LBOUND(SrcMiscData%V_rel_n,1) + i1_u = UBOUND(SrcMiscData%V_rel_n,1) + IF (.NOT. ALLOCATED(DstMiscData%V_rel_n)) THEN + ALLOCATE(DstMiscData%V_rel_n(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%V_rel_n.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%V_rel_n = SrcMiscData%V_rel_n +ENDIF +IF (ALLOCATED(SrcMiscData%V_rel_n_HiPass)) THEN + i1_l = LBOUND(SrcMiscData%V_rel_n_HiPass,1) + i1_u = UBOUND(SrcMiscData%V_rel_n_HiPass,1) + IF (.NOT. ALLOCATED(DstMiscData%V_rel_n_HiPass)) THEN + ALLOCATE(DstMiscData%V_rel_n_HiPass(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%V_rel_n_HiPass.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%V_rel_n_HiPass = SrcMiscData%V_rel_n_HiPass ENDIF DstMiscData%LastIndWave = SrcMiscData%LastIndWave + CALL SeaSt_Interp_CopyMisc( SrcMiscData%SeaSt_Interp_m, DstMiscData%SeaSt_Interp_m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN END SUBROUTINE Morison_CopyMisc SUBROUTINE Morison_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -9367,9 +10304,21 @@ SUBROUTINE Morison_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) IF (ALLOCATED(MiscData%FA)) THEN DEALLOCATE(MiscData%FA) ENDIF +IF (ALLOCATED(MiscData%FAMCF)) THEN + DEALLOCATE(MiscData%FAMCF) +ENDIF IF (ALLOCATED(MiscData%FDynP)) THEN DEALLOCATE(MiscData%FDynP) ENDIF +IF (ALLOCATED(MiscData%WaveElev)) THEN + DEALLOCATE(MiscData%WaveElev) +ENDIF +IF (ALLOCATED(MiscData%WaveElev1)) THEN + DEALLOCATE(MiscData%WaveElev1) +ENDIF +IF (ALLOCATED(MiscData%WaveElev2)) THEN + DEALLOCATE(MiscData%WaveElev2) +ENDIF IF (ALLOCATED(MiscData%vrel)) THEN DEALLOCATE(MiscData%vrel) ENDIF @@ -9401,6 +10350,14 @@ SUBROUTINE Morison_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) IF (ALLOCATED(MiscData%F_BF_End)) THEN DEALLOCATE(MiscData%F_BF_End) ENDIF +IF (ALLOCATED(MiscData%V_rel_n)) THEN + DEALLOCATE(MiscData%V_rel_n) +ENDIF +IF (ALLOCATED(MiscData%V_rel_n_HiPass)) THEN + DEALLOCATE(MiscData%V_rel_n_HiPass) +ENDIF + CALL SeaSt_Interp_DestroyMisc( MiscData%SeaSt_Interp_m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE Morison_DestroyMisc SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -9448,11 +10405,31 @@ SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Int_BufSz = Int_BufSz + 2*2 ! FA upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%FA) ! FA END IF + Int_BufSz = Int_BufSz + 1 ! FAMCF allocated yes/no + IF ( ALLOCATED(InData%FAMCF) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! FAMCF upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%FAMCF) ! FAMCF + END IF Int_BufSz = Int_BufSz + 1 ! FDynP allocated yes/no IF ( ALLOCATED(InData%FDynP) ) THEN Int_BufSz = Int_BufSz + 2*1 ! FDynP upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%FDynP) ! FDynP END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev allocated yes/no + IF ( ALLOCATED(InData%WaveElev) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElev upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev) ! WaveElev + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ALLOCATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no + IF ( ALLOCATED(InData%WaveElev2) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElev2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 + END IF Int_BufSz = Int_BufSz + 1 ! vrel allocated yes/no IF ( ALLOCATED(InData%vrel) ) THEN Int_BufSz = Int_BufSz + 2*2 ! vrel upper/lower bounds for each dimension @@ -9517,13 +10494,40 @@ SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Int_BufSz = Int_BufSz + 2*2 ! F_BF_End upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%F_BF_End) ! F_BF_End END IF - Int_BufSz = Int_BufSz + 1 ! LastIndWave - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF + Int_BufSz = Int_BufSz + 1 ! V_rel_n allocated yes/no + IF ( ALLOCATED(InData%V_rel_n) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! V_rel_n upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%V_rel_n) ! V_rel_n + END IF + Int_BufSz = Int_BufSz + 1 ! V_rel_n_HiPass allocated yes/no + IF ( ALLOCATED(InData%V_rel_n_HiPass) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! V_rel_n_HiPass upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%V_rel_n_HiPass) ! V_rel_n_HiPass + END IF + Int_BufSz = Int_BufSz + 1 ! LastIndWave + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_m: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_m, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_m + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_m + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_m + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF END IF IF ( Db_BufSz .GT. 0 ) THEN ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) @@ -9585,6 +10589,26 @@ SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg END DO END DO END IF + IF ( .NOT. ALLOCATED(InData%FAMCF) ) 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%FAMCF,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%FAMCF,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%FAMCF,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%FAMCF,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%FAMCF,2), UBOUND(InData%FAMCF,2) + DO i1 = LBOUND(InData%FAMCF,1), UBOUND(InData%FAMCF,1) + ReKiBuf(Re_Xferred) = InData%FAMCF(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF IF ( .NOT. ALLOCATED(InData%FDynP) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -9600,6 +10624,51 @@ SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Re_Xferred = Re_Xferred + 1 END DO END IF + IF ( .NOT. ALLOCATED(InData%WaveElev) ) 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%WaveElev,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElev,1), UBOUND(InData%WaveElev,1) + ReKiBuf(Re_Xferred) = InData%WaveElev(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElev1) ) 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%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElev2) ) 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%WaveElev2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) + ReKiBuf(Re_Xferred) = InData%WaveElev2(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF IF ( .NOT. ALLOCATED(InData%vrel) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -9795,9 +10864,67 @@ SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Re_Xferred = Re_Xferred + 1 END DO END DO + END IF + IF ( .NOT. ALLOCATED(InData%V_rel_n) ) 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%V_rel_n,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%V_rel_n,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%V_rel_n,1), UBOUND(InData%V_rel_n,1) + ReKiBuf(Re_Xferred) = InData%V_rel_n(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%V_rel_n_HiPass) ) 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%V_rel_n_HiPass,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%V_rel_n_HiPass,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%V_rel_n_HiPass,1), UBOUND(InData%V_rel_n_HiPass,1) + ReKiBuf(Re_Xferred) = InData%V_rel_n_HiPass(i1) + Re_Xferred = Re_Xferred + 1 + END DO END IF IntKiBuf(Int_Xferred) = InData%LastIndWave Int_Xferred = Int_Xferred + 1 + CALL SeaSt_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_m, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF END SUBROUTINE Morison_PackMisc SUBROUTINE Morison_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -9874,6 +11001,29 @@ SUBROUTINE Morison_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err END DO END DO END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! FAMCF 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%FAMCF)) DEALLOCATE(OutData%FAMCF) + ALLOCATE(OutData%FAMCF(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%FAMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%FAMCF,2), UBOUND(OutData%FAMCF,2) + DO i1 = LBOUND(OutData%FAMCF,1), UBOUND(OutData%FAMCF,1) + OutData%FAMCF(i1,i2) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! FDynP not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -9892,6 +11042,60 @@ SUBROUTINE Morison_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err Re_Xferred = Re_Xferred + 1 END DO END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev 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%WaveElev)) DEALLOCATE(OutData%WaveElev) + ALLOCATE(OutData%WaveElev(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElev,1), UBOUND(OutData%WaveElev,1) + OutData%WaveElev(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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%WaveElev2)) DEALLOCATE(OutData%WaveElev2) + ALLOCATE(OutData%WaveElev2(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) + OutData%WaveElev2(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! vrel not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -10126,9 +11330,85 @@ SUBROUTINE Morison_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err Re_Xferred = Re_Xferred + 1 END DO END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! V_rel_n 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%V_rel_n)) DEALLOCATE(OutData%V_rel_n) + ALLOCATE(OutData%V_rel_n(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%V_rel_n.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%V_rel_n,1), UBOUND(OutData%V_rel_n,1) + OutData%V_rel_n(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! V_rel_n_HiPass 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%V_rel_n_HiPass)) DEALLOCATE(OutData%V_rel_n_HiPass) + ALLOCATE(OutData%V_rel_n_HiPass(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%V_rel_n_HiPass.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%V_rel_n_HiPass,1), UBOUND(OutData%V_rel_n_HiPass,1) + OutData%V_rel_n_HiPass(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO END IF OutData%LastIndWave = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_m, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE Morison_UnPackMisc SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) @@ -10142,6 +11422,8 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Morison_CopyParam' @@ -10153,6 +11435,8 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err DstParamData%WtrDens = SrcParamData%WtrDens DstParamData%WtrDpth = SrcParamData%WtrDpth DstParamData%MSL2SWL = SrcParamData%MSL2SWL + DstParamData%WaveDisp = SrcParamData%WaveDisp + DstParamData%AMMod = SrcParamData%AMMod DstParamData%NMembers = SrcParamData%NMembers IF (ALLOCATED(SrcParamData%Members)) THEN i1_l = LBOUND(SrcParamData%Members,1) @@ -10214,6 +11498,42 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%DragConst_End = SrcParamData%DragConst_End ENDIF +IF (ALLOCATED(SrcParamData%VRelNFiltConst)) THEN + i1_l = LBOUND(SrcParamData%VRelNFiltConst,1) + i1_u = UBOUND(SrcParamData%VRelNFiltConst,1) + IF (.NOT. ALLOCATED(DstParamData%VRelNFiltConst)) THEN + ALLOCATE(DstParamData%VRelNFiltConst(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%VRelNFiltConst.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%VRelNFiltConst = SrcParamData%VRelNFiltConst +ENDIF +IF (ALLOCATED(SrcParamData%DragMod_End)) THEN + i1_l = LBOUND(SrcParamData%DragMod_End,1) + i1_u = UBOUND(SrcParamData%DragMod_End,1) + IF (.NOT. ALLOCATED(DstParamData%DragMod_End)) THEN + ALLOCATE(DstParamData%DragMod_End(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%DragMod_End.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%DragMod_End = SrcParamData%DragMod_End +ENDIF +IF (ALLOCATED(SrcParamData%DragLoFSc_End)) THEN + i1_l = LBOUND(SrcParamData%DragLoFSc_End,1) + i1_u = UBOUND(SrcParamData%DragLoFSc_End,1) + IF (.NOT. ALLOCATED(DstParamData%DragLoFSc_End)) THEN + ALLOCATE(DstParamData%DragLoFSc_End(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%DragLoFSc_End.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%DragLoFSc_End = SrcParamData%DragLoFSc_End +ENDIF IF (ALLOCATED(SrcParamData%F_WMG_End)) THEN i1_l = LBOUND(SrcParamData%F_WMG_End,1) i1_u = UBOUND(SrcParamData%F_WMG_End,1) @@ -10270,15 +11590,51 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%AM_End = SrcParamData%AM_End ENDIF -IF (ALLOCATED(SrcParamData%WaveVel)) THEN +IF (ASSOCIATED(SrcParamData%WaveElev1)) THEN + i1_l = LBOUND(SrcParamData%WaveElev1,1) + i1_u = UBOUND(SrcParamData%WaveElev1,1) + i2_l = LBOUND(SrcParamData%WaveElev1,2) + i2_u = UBOUND(SrcParamData%WaveElev1,2) + i3_l = LBOUND(SrcParamData%WaveElev1,3) + i3_u = UBOUND(SrcParamData%WaveElev1,3) + IF (.NOT. ASSOCIATED(DstParamData%WaveElev1)) THEN + ALLOCATE(DstParamData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElev1 = SrcParamData%WaveElev1 +ENDIF +IF (ASSOCIATED(SrcParamData%WaveElev2)) THEN + i1_l = LBOUND(SrcParamData%WaveElev2,1) + i1_u = UBOUND(SrcParamData%WaveElev2,1) + i2_l = LBOUND(SrcParamData%WaveElev2,2) + i2_u = UBOUND(SrcParamData%WaveElev2,2) + i3_l = LBOUND(SrcParamData%WaveElev2,3) + i3_u = UBOUND(SrcParamData%WaveElev2,3) + IF (.NOT. ASSOCIATED(DstParamData%WaveElev2)) THEN + ALLOCATE(DstParamData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElev2 = SrcParamData%WaveElev2 +ENDIF +IF (ASSOCIATED(SrcParamData%WaveVel)) THEN i1_l = LBOUND(SrcParamData%WaveVel,1) i1_u = UBOUND(SrcParamData%WaveVel,1) i2_l = LBOUND(SrcParamData%WaveVel,2) i2_u = UBOUND(SrcParamData%WaveVel,2) i3_l = LBOUND(SrcParamData%WaveVel,3) i3_u = UBOUND(SrcParamData%WaveVel,3) - IF (.NOT. ALLOCATED(DstParamData%WaveVel)) THEN - ALLOCATE(DstParamData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + i4_l = LBOUND(SrcParamData%WaveVel,4) + i4_u = UBOUND(SrcParamData%WaveVel,4) + i5_l = LBOUND(SrcParamData%WaveVel,5) + i5_u = UBOUND(SrcParamData%WaveVel,5) + IF (.NOT. ASSOCIATED(DstParamData%WaveVel)) THEN + ALLOCATE(DstParamData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveVel.', ErrStat, ErrMsg,RoutineName) RETURN @@ -10286,15 +11642,19 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveVel = SrcParamData%WaveVel ENDIF -IF (ALLOCATED(SrcParamData%WaveAcc)) THEN +IF (ASSOCIATED(SrcParamData%WaveAcc)) THEN i1_l = LBOUND(SrcParamData%WaveAcc,1) i1_u = UBOUND(SrcParamData%WaveAcc,1) i2_l = LBOUND(SrcParamData%WaveAcc,2) i2_u = UBOUND(SrcParamData%WaveAcc,2) i3_l = LBOUND(SrcParamData%WaveAcc,3) i3_u = UBOUND(SrcParamData%WaveAcc,3) - IF (.NOT. ALLOCATED(DstParamData%WaveAcc)) THEN - ALLOCATE(DstParamData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + i4_l = LBOUND(SrcParamData%WaveAcc,4) + i4_u = UBOUND(SrcParamData%WaveAcc,4) + i5_l = LBOUND(SrcParamData%WaveAcc,5) + i5_u = UBOUND(SrcParamData%WaveAcc,5) + IF (.NOT. ASSOCIATED(DstParamData%WaveAcc)) THEN + ALLOCATE(DstParamData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveAcc.', ErrStat, ErrMsg,RoutineName) RETURN @@ -10302,13 +11662,37 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveAcc = SrcParamData%WaveAcc ENDIF -IF (ALLOCATED(SrcParamData%WaveDynP)) THEN +IF (ASSOCIATED(SrcParamData%WaveAccMCF)) THEN + i1_l = LBOUND(SrcParamData%WaveAccMCF,1) + i1_u = UBOUND(SrcParamData%WaveAccMCF,1) + i2_l = LBOUND(SrcParamData%WaveAccMCF,2) + i2_u = UBOUND(SrcParamData%WaveAccMCF,2) + i3_l = LBOUND(SrcParamData%WaveAccMCF,3) + i3_u = UBOUND(SrcParamData%WaveAccMCF,3) + i4_l = LBOUND(SrcParamData%WaveAccMCF,4) + i4_u = UBOUND(SrcParamData%WaveAccMCF,4) + i5_l = LBOUND(SrcParamData%WaveAccMCF,5) + i5_u = UBOUND(SrcParamData%WaveAccMCF,5) + IF (.NOT. ASSOCIATED(DstParamData%WaveAccMCF)) THEN + ALLOCATE(DstParamData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveAccMCF = SrcParamData%WaveAccMCF +ENDIF +IF (ASSOCIATED(SrcParamData%WaveDynP)) THEN i1_l = LBOUND(SrcParamData%WaveDynP,1) i1_u = UBOUND(SrcParamData%WaveDynP,1) i2_l = LBOUND(SrcParamData%WaveDynP,2) i2_u = UBOUND(SrcParamData%WaveDynP,2) - IF (.NOT. ALLOCATED(DstParamData%WaveDynP)) THEN - ALLOCATE(DstParamData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + i3_l = LBOUND(SrcParamData%WaveDynP,3) + i3_u = UBOUND(SrcParamData%WaveDynP,3) + i4_l = LBOUND(SrcParamData%WaveDynP,4) + i4_u = UBOUND(SrcParamData%WaveDynP,4) + IF (.NOT. ASSOCIATED(DstParamData%WaveDynP)) THEN + ALLOCATE(DstParamData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveDynP.', ErrStat, ErrMsg,RoutineName) RETURN @@ -10316,11 +11700,81 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveDynP = SrcParamData%WaveDynP ENDIF -IF (ALLOCATED(SrcParamData%WaveTime)) THEN - i1_l = LBOUND(SrcParamData%WaveTime,1) - i1_u = UBOUND(SrcParamData%WaveTime,1) - IF (.NOT. ALLOCATED(DstParamData%WaveTime)) THEN - ALLOCATE(DstParamData%WaveTime(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcParamData%WaveVel0)) THEN + i1_l = LBOUND(SrcParamData%WaveVel0,1) + i1_u = UBOUND(SrcParamData%WaveVel0,1) + i2_l = LBOUND(SrcParamData%WaveVel0,2) + i2_u = UBOUND(SrcParamData%WaveVel0,2) + i3_l = LBOUND(SrcParamData%WaveVel0,3) + i3_u = UBOUND(SrcParamData%WaveVel0,3) + i4_l = LBOUND(SrcParamData%WaveVel0,4) + i4_u = UBOUND(SrcParamData%WaveVel0,4) + IF (.NOT. ALLOCATED(DstParamData%WaveVel0)) THEN + ALLOCATE(DstParamData%WaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveVel0 = SrcParamData%WaveVel0 +ENDIF +IF (ALLOCATED(SrcParamData%WaveAcc0)) THEN + i1_l = LBOUND(SrcParamData%WaveAcc0,1) + i1_u = UBOUND(SrcParamData%WaveAcc0,1) + i2_l = LBOUND(SrcParamData%WaveAcc0,2) + i2_u = UBOUND(SrcParamData%WaveAcc0,2) + i3_l = LBOUND(SrcParamData%WaveAcc0,3) + i3_u = UBOUND(SrcParamData%WaveAcc0,3) + i4_l = LBOUND(SrcParamData%WaveAcc0,4) + i4_u = UBOUND(SrcParamData%WaveAcc0,4) + IF (.NOT. ALLOCATED(DstParamData%WaveAcc0)) THEN + ALLOCATE(DstParamData%WaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveAcc0 = SrcParamData%WaveAcc0 +ENDIF +IF (ALLOCATED(SrcParamData%WaveAccMCF0)) THEN + i1_l = LBOUND(SrcParamData%WaveAccMCF0,1) + i1_u = UBOUND(SrcParamData%WaveAccMCF0,1) + i2_l = LBOUND(SrcParamData%WaveAccMCF0,2) + i2_u = UBOUND(SrcParamData%WaveAccMCF0,2) + i3_l = LBOUND(SrcParamData%WaveAccMCF0,3) + i3_u = UBOUND(SrcParamData%WaveAccMCF0,3) + i4_l = LBOUND(SrcParamData%WaveAccMCF0,4) + i4_u = UBOUND(SrcParamData%WaveAccMCF0,4) + IF (.NOT. ALLOCATED(DstParamData%WaveAccMCF0)) THEN + ALLOCATE(DstParamData%WaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveAccMCF0 = SrcParamData%WaveAccMCF0 +ENDIF +IF (ALLOCATED(SrcParamData%WaveDynP0)) THEN + i1_l = LBOUND(SrcParamData%WaveDynP0,1) + i1_u = UBOUND(SrcParamData%WaveDynP0,1) + i2_l = LBOUND(SrcParamData%WaveDynP0,2) + i2_u = UBOUND(SrcParamData%WaveDynP0,2) + i3_l = LBOUND(SrcParamData%WaveDynP0,3) + i3_u = UBOUND(SrcParamData%WaveDynP0,3) + IF (.NOT. ALLOCATED(DstParamData%WaveDynP0)) THEN + ALLOCATE(DstParamData%WaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveDynP0 = SrcParamData%WaveDynP0 +ENDIF +IF (ASSOCIATED(SrcParamData%WaveTime)) THEN + i1_l = LBOUND(SrcParamData%WaveTime,1) + i1_u = UBOUND(SrcParamData%WaveTime,1) + IF (.NOT. ASSOCIATED(DstParamData%WaveTime)) THEN + ALLOCATE(DstParamData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveTime.', ErrStat, ErrMsg,RoutineName) RETURN @@ -10328,19 +11782,75 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveTime = SrcParamData%WaveTime ENDIF -IF (ALLOCATED(SrcParamData%nodeInWater)) THEN - i1_l = LBOUND(SrcParamData%nodeInWater,1) - i1_u = UBOUND(SrcParamData%nodeInWater,1) - i2_l = LBOUND(SrcParamData%nodeInWater,2) - i2_u = UBOUND(SrcParamData%nodeInWater,2) - IF (.NOT. ALLOCATED(DstParamData%nodeInWater)) THEN - ALLOCATE(DstParamData%nodeInWater(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) +IF (ASSOCIATED(SrcParamData%PWaveVel0)) THEN + i1_l = LBOUND(SrcParamData%PWaveVel0,1) + i1_u = UBOUND(SrcParamData%PWaveVel0,1) + i2_l = LBOUND(SrcParamData%PWaveVel0,2) + i2_u = UBOUND(SrcParamData%PWaveVel0,2) + i3_l = LBOUND(SrcParamData%PWaveVel0,3) + i3_u = UBOUND(SrcParamData%PWaveVel0,3) + i4_l = LBOUND(SrcParamData%PWaveVel0,4) + i4_u = UBOUND(SrcParamData%PWaveVel0,4) + IF (.NOT. ASSOCIATED(DstParamData%PWaveVel0)) THEN + ALLOCATE(DstParamData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%PWaveVel0 = SrcParamData%PWaveVel0 +ENDIF +IF (ASSOCIATED(SrcParamData%PWaveAcc0)) THEN + i1_l = LBOUND(SrcParamData%PWaveAcc0,1) + i1_u = UBOUND(SrcParamData%PWaveAcc0,1) + i2_l = LBOUND(SrcParamData%PWaveAcc0,2) + i2_u = UBOUND(SrcParamData%PWaveAcc0,2) + i3_l = LBOUND(SrcParamData%PWaveAcc0,3) + i3_u = UBOUND(SrcParamData%PWaveAcc0,3) + i4_l = LBOUND(SrcParamData%PWaveAcc0,4) + i4_u = UBOUND(SrcParamData%PWaveAcc0,4) + IF (.NOT. ASSOCIATED(DstParamData%PWaveAcc0)) THEN + ALLOCATE(DstParamData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%PWaveAcc0 = SrcParamData%PWaveAcc0 +ENDIF +IF (ASSOCIATED(SrcParamData%PWaveAccMCF0)) THEN + i1_l = LBOUND(SrcParamData%PWaveAccMCF0,1) + i1_u = UBOUND(SrcParamData%PWaveAccMCF0,1) + i2_l = LBOUND(SrcParamData%PWaveAccMCF0,2) + i2_u = UBOUND(SrcParamData%PWaveAccMCF0,2) + i3_l = LBOUND(SrcParamData%PWaveAccMCF0,3) + i3_u = UBOUND(SrcParamData%PWaveAccMCF0,3) + i4_l = LBOUND(SrcParamData%PWaveAccMCF0,4) + i4_u = UBOUND(SrcParamData%PWaveAccMCF0,4) + IF (.NOT. ASSOCIATED(DstParamData%PWaveAccMCF0)) THEN + ALLOCATE(DstParamData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%PWaveAccMCF0 = SrcParamData%PWaveAccMCF0 +ENDIF +IF (ASSOCIATED(SrcParamData%PWaveDynP0)) THEN + i1_l = LBOUND(SrcParamData%PWaveDynP0,1) + i1_u = UBOUND(SrcParamData%PWaveDynP0,1) + i2_l = LBOUND(SrcParamData%PWaveDynP0,2) + i2_u = UBOUND(SrcParamData%PWaveDynP0,2) + i3_l = LBOUND(SrcParamData%PWaveDynP0,3) + i3_u = UBOUND(SrcParamData%PWaveDynP0,3) + IF (.NOT. ASSOCIATED(DstParamData%PWaveDynP0)) THEN + ALLOCATE(DstParamData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%nodeInWater.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstParamData%nodeInWater = SrcParamData%nodeInWater + DstParamData%PWaveDynP0 = SrcParamData%PWaveDynP0 ENDIF DstParamData%NStepWave = SrcParamData%NStepWave DstParamData%NMOutputs = SrcParamData%NMOutputs @@ -10394,12 +11904,10 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err ENDDO ENDIF DstParamData%NumOuts = SrcParamData%NumOuts - DstParamData%NumOutAll = SrcParamData%NumOutAll - DstParamData%OutSwtch = SrcParamData%OutSwtch - DstParamData%UnOutFile = SrcParamData%UnOutFile - DstParamData%OutFmt = SrcParamData%OutFmt - DstParamData%OutSFmt = SrcParamData%OutSFmt - DstParamData%Delim = SrcParamData%Delim + CALL SeaSt_Interp_CopyParam( SrcParamData%SeaSt_Interp_p, DstParamData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + DstParamData%WaveStMod = SrcParamData%WaveStMod END SUBROUTINE Morison_CopyParam SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -10439,6 +11947,15 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers IF (ALLOCATED(ParamData%DragConst_End)) THEN DEALLOCATE(ParamData%DragConst_End) ENDIF +IF (ALLOCATED(ParamData%VRelNFiltConst)) THEN + DEALLOCATE(ParamData%VRelNFiltConst) +ENDIF +IF (ALLOCATED(ParamData%DragMod_End)) THEN + DEALLOCATE(ParamData%DragMod_End) +ENDIF +IF (ALLOCATED(ParamData%DragLoFSc_End)) THEN + DEALLOCATE(ParamData%DragLoFSc_End) +ENDIF IF (ALLOCATED(ParamData%F_WMG_End)) THEN DEALLOCATE(ParamData%F_WMG_End) ENDIF @@ -10451,20 +11968,72 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers IF (ALLOCATED(ParamData%AM_End)) THEN DEALLOCATE(ParamData%AM_End) ENDIF -IF (ALLOCATED(ParamData%WaveVel)) THEN +IF (ASSOCIATED(ParamData%WaveElev1)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveElev1) + ParamData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveElev2)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveElev2) + ParamData%WaveElev2 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveVel)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(ParamData%WaveVel) + ParamData%WaveVel => NULL() ENDIF -IF (ALLOCATED(ParamData%WaveAcc)) THEN +IF (ASSOCIATED(ParamData%WaveAcc)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(ParamData%WaveAcc) + ParamData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveAccMCF)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveAccMCF) + ParamData%WaveAccMCF => NULL() ENDIF -IF (ALLOCATED(ParamData%WaveDynP)) THEN +IF (ASSOCIATED(ParamData%WaveDynP)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(ParamData%WaveDynP) + ParamData%WaveDynP => NULL() +ENDIF +IF (ALLOCATED(ParamData%WaveVel0)) THEN + DEALLOCATE(ParamData%WaveVel0) +ENDIF +IF (ALLOCATED(ParamData%WaveAcc0)) THEN + DEALLOCATE(ParamData%WaveAcc0) +ENDIF +IF (ALLOCATED(ParamData%WaveAccMCF0)) THEN + DEALLOCATE(ParamData%WaveAccMCF0) +ENDIF +IF (ALLOCATED(ParamData%WaveDynP0)) THEN + DEALLOCATE(ParamData%WaveDynP0) ENDIF -IF (ALLOCATED(ParamData%WaveTime)) THEN +IF (ASSOCIATED(ParamData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(ParamData%WaveTime) + ParamData%WaveTime => NULL() ENDIF -IF (ALLOCATED(ParamData%nodeInWater)) THEN - DEALLOCATE(ParamData%nodeInWater) +IF (ASSOCIATED(ParamData%PWaveVel0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%PWaveVel0) + ParamData%PWaveVel0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveAcc0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%PWaveAcc0) + ParamData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveAccMCF0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%PWaveAccMCF0) + ParamData%PWaveAccMCF0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveDynP0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%PWaveDynP0) + ParamData%PWaveDynP0 => NULL() ENDIF IF (ALLOCATED(ParamData%MOutLst)) THEN DO i1 = LBOUND(ParamData%MOutLst,1), UBOUND(ParamData%MOutLst,1) @@ -10487,6 +12056,8 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ENDDO DEALLOCATE(ParamData%OutParam) ENDIF + CALL SeaSt_Interp_DestroyParam( ParamData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE Morison_DestroyParam SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -10529,6 +12100,8 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Re_BufSz = Re_BufSz + 1 ! WtrDens Re_BufSz = Re_BufSz + 1 ! WtrDpth Re_BufSz = Re_BufSz + 1 ! MSL2SWL + Int_BufSz = Int_BufSz + 1 ! WaveDisp + Int_BufSz = Int_BufSz + 1 ! AMMod Int_BufSz = Int_BufSz + 1 ! NMembers Int_BufSz = Int_BufSz + 1 ! Members allocated yes/no IF ( ALLOCATED(InData%Members) ) THEN @@ -10571,6 +12144,21 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_BufSz = Int_BufSz + 2*1 ! DragConst_End upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%DragConst_End) ! DragConst_End END IF + Int_BufSz = Int_BufSz + 1 ! VRelNFiltConst allocated yes/no + IF ( ALLOCATED(InData%VRelNFiltConst) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! VRelNFiltConst upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%VRelNFiltConst) ! VRelNFiltConst + END IF + Int_BufSz = Int_BufSz + 1 ! DragMod_End allocated yes/no + IF ( ALLOCATED(InData%DragMod_End) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! DragMod_End upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%DragMod_End) ! DragMod_End + END IF + Int_BufSz = Int_BufSz + 1 ! DragLoFSc_End allocated yes/no + IF ( ALLOCATED(InData%DragLoFSc_End) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! DragLoFSc_End upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%DragLoFSc_End) ! DragLoFSc_End + END IF Int_BufSz = Int_BufSz + 1 ! F_WMG_End allocated yes/no IF ( ALLOCATED(InData%F_WMG_End) ) THEN Int_BufSz = Int_BufSz + 2*2 ! F_WMG_End upper/lower bounds for each dimension @@ -10591,30 +12179,80 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_BufSz = Int_BufSz + 2*3 ! AM_End upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%AM_End) ! AM_End END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev2) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 + END IF Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no - IF ( ALLOCATED(InData%WaveVel) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel upper/lower bounds for each dimension + IF ( ASSOCIATED(InData%WaveVel) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveVel upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel END IF Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no - IF ( ALLOCATED(InData%WaveAcc) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc upper/lower bounds for each dimension + IF ( ASSOCIATED(InData%WaveAcc) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAcc upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc END IF + Int_BufSz = Int_BufSz + 1 ! WaveAccMCF allocated yes/no + IF ( ASSOCIATED(InData%WaveAccMCF) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAccMCF upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAccMCF) ! WaveAccMCF + END IF Int_BufSz = Int_BufSz + 1 ! WaveDynP allocated yes/no - IF ( ALLOCATED(InData%WaveDynP) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveDynP upper/lower bounds for each dimension + IF ( ASSOCIATED(InData%WaveDynP) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveDynP upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP) ! WaveDynP END IF + Int_BufSz = Int_BufSz + 1 ! WaveVel0 allocated yes/no + IF ( ALLOCATED(InData%WaveVel0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveVel0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveVel0) ! WaveVel0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAcc0 allocated yes/no + IF ( ALLOCATED(InData%WaveAcc0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveAcc0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc0) ! WaveAcc0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAccMCF0 allocated yes/no + IF ( ALLOCATED(InData%WaveAccMCF0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveAccMCF0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAccMCF0) ! WaveAccMCF0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDynP0 allocated yes/no + IF ( ALLOCATED(InData%WaveDynP0) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveDynP0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP0) ! WaveDynP0 + END IF Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN + IF ( ASSOCIATED(InData%WaveTime) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime END IF - Int_BufSz = Int_BufSz + 1 ! nodeInWater allocated yes/no - IF ( ALLOCATED(InData%nodeInWater) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! nodeInWater upper/lower bounds for each dimension - Int_BufSz = Int_BufSz + SIZE(InData%nodeInWater) ! nodeInWater + Int_BufSz = Int_BufSz + 1 ! PWaveVel0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveVel0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveVel0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveVel0) ! PWaveVel0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAcc0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAcc0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAcc0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAcc0) ! PWaveAcc0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAccMCF0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAccMCF0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAccMCF0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAccMCF0) ! PWaveAccMCF0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveDynP0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveDynP0) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! PWaveDynP0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveDynP0) ! PWaveDynP0 END IF Int_BufSz = Int_BufSz + 1 ! NStepWave Int_BufSz = Int_BufSz + 1 ! NMOutputs @@ -10689,12 +12327,24 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END DO END IF Int_BufSz = Int_BufSz + 1 ! NumOuts - Int_BufSz = Int_BufSz + 1 ! NumOutAll - Int_BufSz = Int_BufSz + 1 ! OutSwtch - Int_BufSz = Int_BufSz + 1 ! UnOutFile - Int_BufSz = Int_BufSz + 1*LEN(InData%OutFmt) ! OutFmt - Int_BufSz = Int_BufSz + 1*LEN(InData%OutSFmt) ! OutSFmt - Int_BufSz = Int_BufSz + 1*LEN(InData%Delim) ! Delim + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 1 ! WaveStMod IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -10732,6 +12382,10 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%MSL2SWL Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveDisp + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%AMMod + Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NMembers Int_Xferred = Int_Xferred + 1 IF ( .NOT. ALLOCATED(InData%Members) ) THEN @@ -10839,6 +12493,51 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Re_Xferred = Re_Xferred + 1 END DO END IF + IF ( .NOT. ALLOCATED(InData%VRelNFiltConst) ) 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%VRelNFiltConst,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%VRelNFiltConst,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%VRelNFiltConst,1), UBOUND(InData%VRelNFiltConst,1) + ReKiBuf(Re_Xferred) = InData%VRelNFiltConst(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%DragMod_End) ) 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%DragMod_End,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%DragMod_End,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%DragMod_End,1), UBOUND(InData%DragMod_End,1) + IntKiBuf(Int_Xferred) = InData%DragMod_End(i1) + Int_Xferred = Int_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%DragLoFSc_End) ) 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%DragLoFSc_End,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%DragLoFSc_End,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%DragLoFSc_End,1), UBOUND(InData%DragLoFSc_End,1) + ReKiBuf(Re_Xferred) = InData%DragLoFSc_End(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF IF ( .NOT. ALLOCATED(InData%F_WMG_End) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -10919,7 +12618,57 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveVel) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElev1) ) 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%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev1,3), UBOUND(InData%WaveElev1,3) + DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElev2) ) 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%WaveElev2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev2,3), UBOUND(InData%WaveElev2,3) + DO i2 = LBOUND(InData%WaveElev2,2), UBOUND(InData%WaveElev2,2) + DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) + ReKiBuf(Re_Xferred) = InData%WaveElev2(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveVel) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -10933,18 +12682,28 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_Xferred = Int_Xferred + 2 IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,5) Int_Xferred = Int_Xferred + 2 - DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) - DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) - DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) - ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 + DO i5 = LBOUND(InData%WaveVel,5), UBOUND(InData%WaveVel,5) + DO i4 = LBOUND(InData%WaveVel,4), UBOUND(InData%WaveVel,4) + DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) + DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) + DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) + ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveAcc) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveAcc) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -10958,18 +12717,63 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_Xferred = Int_Xferred + 2 IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,5) Int_Xferred = Int_Xferred + 2 - DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) - DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) - DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 + DO i5 = LBOUND(InData%WaveAcc,5), UBOUND(InData%WaveAcc,5) + DO i4 = LBOUND(InData%WaveAcc,4), UBOUND(InData%WaveAcc,4) + DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) + DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) + DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAccMCF) ) 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%WaveAccMCF,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAccMCF,5), UBOUND(InData%WaveAccMCF,5) + DO i4 = LBOUND(InData%WaveAccMCF,4), UBOUND(InData%WaveAccMCF,4) + DO i3 = LBOUND(InData%WaveAccMCF,3), UBOUND(InData%WaveAccMCF,3) + DO i2 = LBOUND(InData%WaveAccMCF,2), UBOUND(InData%WaveAccMCF,2) + DO i1 = LBOUND(InData%WaveAccMCF,1), UBOUND(InData%WaveAccMCF,1) + ReKiBuf(Re_Xferred) = InData%WaveAccMCF(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveDynP) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveDynP) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -10980,108 +12784,328 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_Xferred = Int_Xferred + 2 IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,2) IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,4) Int_Xferred = Int_Xferred + 2 - DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) - DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) - ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2) - Re_Xferred = Re_Xferred + 1 + DO i4 = LBOUND(InData%WaveDynP,4), UBOUND(InData%WaveDynP,4) + DO i3 = LBOUND(InData%WaveDynP,3), UBOUND(InData%WaveDynP,3) + DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) + DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) THEN + IF ( .NOT. ALLOCATED(InData%WaveVel0) ) 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%WaveTime,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel0,4) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) - ReKiBuf(Re_Xferred) = InData%WaveTime(i1) - Re_Xferred = Re_Xferred + 1 + DO i4 = LBOUND(InData%WaveVel0,4), UBOUND(InData%WaveVel0,4) + DO i3 = LBOUND(InData%WaveVel0,3), UBOUND(InData%WaveVel0,3) + DO i2 = LBOUND(InData%WaveVel0,2), UBOUND(InData%WaveVel0,2) + DO i1 = LBOUND(InData%WaveVel0,1), UBOUND(InData%WaveVel0,1) + ReKiBuf(Re_Xferred) = InData%WaveVel0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%nodeInWater) ) THEN + IF ( .NOT. ALLOCATED(InData%WaveAcc0) ) 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%nodeInWater,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%nodeInWater,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc0,3) Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%nodeInWater,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%nodeInWater,2) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc0,4) Int_Xferred = Int_Xferred + 2 - DO i2 = LBOUND(InData%nodeInWater,2), UBOUND(InData%nodeInWater,2) - DO i1 = LBOUND(InData%nodeInWater,1), UBOUND(InData%nodeInWater,1) - IntKiBuf(Int_Xferred) = InData%nodeInWater(i1,i2) - Int_Xferred = Int_Xferred + 1 + DO i4 = LBOUND(InData%WaveAcc0,4), UBOUND(InData%WaveAcc0,4) + DO i3 = LBOUND(InData%WaveAcc0,3), UBOUND(InData%WaveAcc0,3) + DO i2 = LBOUND(InData%WaveAcc0,2), UBOUND(InData%WaveAcc0,2) + DO i1 = LBOUND(InData%WaveAcc0,1), UBOUND(InData%WaveAcc0,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END IF - IntKiBuf(Int_Xferred) = InData%NStepWave + IF ( .NOT. ALLOCATED(InData%WaveAccMCF0) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NMOutputs + ELSE + IntKiBuf( Int_Xferred ) = 1 Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%MOutLst) ) THEN + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%WaveAccMCF0,4), UBOUND(InData%WaveAccMCF0,4) + DO i3 = LBOUND(InData%WaveAccMCF0,3), UBOUND(InData%WaveAccMCF0,3) + DO i2 = LBOUND(InData%WaveAccMCF0,2), UBOUND(InData%WaveAccMCF0,2) + DO i1 = LBOUND(InData%WaveAccMCF0,1), UBOUND(InData%WaveAccMCF0,1) + ReKiBuf(Re_Xferred) = InData%WaveAccMCF0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveDynP0) ) 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%MOutLst,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%MOutLst,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP0,3) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%MOutLst,1), UBOUND(InData%MOutLst,1) - CALL Morison_Packmoutput( Re_Buf, Db_Buf, Int_Buf, InData%MOutLst(i1), ErrStat2, ErrMsg2, OnlySize ) ! MOutLst - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO + DO i3 = LBOUND(InData%WaveDynP0,3), UBOUND(InData%WaveDynP0,3) + DO i2 = LBOUND(InData%WaveDynP0,2), UBOUND(InData%WaveDynP0,2) + DO i1 = LBOUND(InData%WaveDynP0,1), UBOUND(InData%WaveDynP0,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP0(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO END IF - IntKiBuf(Int_Xferred) = InData%NJOutputs + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN + IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%JOutLst) ) THEN + ELSE + IntKiBuf( Int_Xferred ) = 1 + Int_Xferred = Int_Xferred + 1 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveTime,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) + ReKiBuf(Re_Xferred) = InData%WaveTime(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveVel0) ) 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%JOutLst,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%JOutLst,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,4) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%JOutLst,1), UBOUND(InData%JOutLst,1) + DO i4 = LBOUND(InData%PWaveVel0,4), UBOUND(InData%PWaveVel0,4) + DO i3 = LBOUND(InData%PWaveVel0,3), UBOUND(InData%PWaveVel0,3) + DO i2 = LBOUND(InData%PWaveVel0,2), UBOUND(InData%PWaveVel0,2) + DO i1 = LBOUND(InData%PWaveVel0,1), UBOUND(InData%PWaveVel0,1) + ReKiBuf(Re_Xferred) = InData%PWaveVel0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAcc0) ) 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%PWaveAcc0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAcc0,4), UBOUND(InData%PWaveAcc0,4) + DO i3 = LBOUND(InData%PWaveAcc0,3), UBOUND(InData%PWaveAcc0,3) + DO i2 = LBOUND(InData%PWaveAcc0,2), UBOUND(InData%PWaveAcc0,2) + DO i1 = LBOUND(InData%PWaveAcc0,1), UBOUND(InData%PWaveAcc0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAcc0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAccMCF0) ) 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%PWaveAccMCF0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAccMCF0,4), UBOUND(InData%PWaveAccMCF0,4) + DO i3 = LBOUND(InData%PWaveAccMCF0,3), UBOUND(InData%PWaveAccMCF0,3) + DO i2 = LBOUND(InData%PWaveAccMCF0,2), UBOUND(InData%PWaveAccMCF0,2) + DO i1 = LBOUND(InData%PWaveAccMCF0,1), UBOUND(InData%PWaveAccMCF0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAccMCF0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveDynP0) ) 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%PWaveDynP0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%PWaveDynP0,3), UBOUND(InData%PWaveDynP0,3) + DO i2 = LBOUND(InData%PWaveDynP0,2), UBOUND(InData%PWaveDynP0,2) + DO i1 = LBOUND(InData%PWaveDynP0,1), UBOUND(InData%PWaveDynP0,1) + ReKiBuf(Re_Xferred) = InData%PWaveDynP0(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IntKiBuf(Int_Xferred) = InData%NStepWave + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NMOutputs + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%MOutLst) ) 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%MOutLst,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%MOutLst,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%MOutLst,1), UBOUND(InData%MOutLst,1) + CALL Morison_Packmoutput( Re_Buf, Db_Buf, Int_Buf, InData%MOutLst(i1), ErrStat2, ErrMsg2, OnlySize ) ! MOutLst + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + END IF + IntKiBuf(Int_Xferred) = InData%NJOutputs + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%JOutLst) ) 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%JOutLst,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%JOutLst,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%JOutLst,1), UBOUND(InData%JOutLst,1) CALL Morison_Packjoutput( Re_Buf, Db_Buf, Int_Buf, InData%JOutLst(i1), ErrStat2, ErrMsg2, OnlySize ) ! JOutLst CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -11155,24 +13179,36 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END IF IntKiBuf(Int_Xferred) = InData%NumOuts Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NumOutAll - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%OutSwtch - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%UnOutFile + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IntKiBuf(Int_Xferred) = InData%WaveStMod Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(InData%OutFmt) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutFmt(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%OutSFmt) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutSFmt(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%Delim) - IntKiBuf(Int_Xferred) = ICHAR(InData%Delim(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I END SUBROUTINE Morison_PackParam SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -11191,6 +13227,8 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Morison_UnPackParam' @@ -11214,6 +13252,10 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Re_Xferred = Re_Xferred + 1 OutData%MSL2SWL = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 + OutData%WaveDisp = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%AMMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 OutData%NMembers = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Members not allocated @@ -11345,6 +13387,60 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Re_Xferred = Re_Xferred + 1 END DO END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! VRelNFiltConst 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%VRelNFiltConst)) DEALLOCATE(OutData%VRelNFiltConst) + ALLOCATE(OutData%VRelNFiltConst(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%VRelNFiltConst.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%VRelNFiltConst,1), UBOUND(OutData%VRelNFiltConst,1) + OutData%VRelNFiltConst(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! DragMod_End 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%DragMod_End)) DEALLOCATE(OutData%DragMod_End) + ALLOCATE(OutData%DragMod_End(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%DragMod_End.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%DragMod_End,1), UBOUND(OutData%DragMod_End,1) + OutData%DragMod_End(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! DragLoFSc_End 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%DragLoFSc_End)) DEALLOCATE(OutData%DragLoFSc_End) + ALLOCATE(OutData%DragLoFSc_End(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%DragLoFSc_End.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%DragLoFSc_End,1), UBOUND(OutData%DragLoFSc_End,1) + OutData%DragLoFSc_End(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! F_WMG_End not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -11437,6 +13533,62 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er END DO END DO END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev1,3), UBOUND(OutData%WaveElev1,3) + DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) + ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev2,3), UBOUND(OutData%WaveElev2,3) + DO i2 = LBOUND(OutData%WaveElev2,2), UBOUND(OutData%WaveElev2,2) + DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) + OutData%WaveElev2(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -11450,17 +13602,27 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er i3_l = IntKiBuf( Int_Xferred ) i3_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) - ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) + ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) - DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) - DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) - OutData%WaveVel(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 + DO i5 = LBOUND(OutData%WaveVel,5), UBOUND(OutData%WaveVel,5) + DO i4 = LBOUND(OutData%WaveVel,4), UBOUND(OutData%WaveVel,4) + DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) + DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) + DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) + OutData%WaveVel(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END DO @@ -11478,17 +13640,65 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er i3_l = IntKiBuf( Int_Xferred ) i3_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) - ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) + ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) - DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) - DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) - OutData%WaveAcc(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 + DO i5 = LBOUND(OutData%WaveAcc,5), UBOUND(OutData%WaveAcc,5) + DO i4 = LBOUND(OutData%WaveAcc,4), UBOUND(OutData%WaveAcc,4) + DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) + DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) + DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) + OutData%WaveAcc(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAccMCF 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAccMCF)) DEALLOCATE(OutData%WaveAccMCF) + ALLOCATE(OutData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAccMCF,5), UBOUND(OutData%WaveAccMCF,5) + DO i4 = LBOUND(OutData%WaveAccMCF,4), UBOUND(OutData%WaveAccMCF,4) + DO i3 = LBOUND(OutData%WaveAccMCF,3), UBOUND(OutData%WaveAccMCF,3) + DO i2 = LBOUND(OutData%WaveAccMCF,2), UBOUND(OutData%WaveAccMCF,2) + DO i1 = LBOUND(OutData%WaveAccMCF,1), UBOUND(OutData%WaveAccMCF,1) + OutData%WaveAccMCF(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO END DO END DO END DO @@ -11503,16 +13713,153 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er i2_l = IntKiBuf( Int_Xferred ) i2_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) - ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) + ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) - DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) - OutData%WaveDynP(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 + DO i4 = LBOUND(OutData%WaveDynP,4), UBOUND(OutData%WaveDynP,4) + DO i3 = LBOUND(OutData%WaveDynP,3), UBOUND(OutData%WaveDynP,3) + DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) + DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) + OutData%WaveDynP(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveVel0)) DEALLOCATE(OutData%WaveVel0) + ALLOCATE(OutData%WaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveVel0,4), UBOUND(OutData%WaveVel0,4) + DO i3 = LBOUND(OutData%WaveVel0,3), UBOUND(OutData%WaveVel0,3) + DO i2 = LBOUND(OutData%WaveVel0,2), UBOUND(OutData%WaveVel0,2) + DO i1 = LBOUND(OutData%WaveVel0,1), UBOUND(OutData%WaveVel0,1) + OutData%WaveVel0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveAcc0)) DEALLOCATE(OutData%WaveAcc0) + ALLOCATE(OutData%WaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveAcc0,4), UBOUND(OutData%WaveAcc0,4) + DO i3 = LBOUND(OutData%WaveAcc0,3), UBOUND(OutData%WaveAcc0,3) + DO i2 = LBOUND(OutData%WaveAcc0,2), UBOUND(OutData%WaveAcc0,2) + DO i1 = LBOUND(OutData%WaveAcc0,1), UBOUND(OutData%WaveAcc0,1) + OutData%WaveAcc0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAccMCF0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveAccMCF0)) DEALLOCATE(OutData%WaveAccMCF0) + ALLOCATE(OutData%WaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveAccMCF0,4), UBOUND(OutData%WaveAccMCF0,4) + DO i3 = LBOUND(OutData%WaveAccMCF0,3), UBOUND(OutData%WaveAccMCF0,3) + DO i2 = LBOUND(OutData%WaveAccMCF0,2), UBOUND(OutData%WaveAccMCF0,2) + DO i1 = LBOUND(OutData%WaveAccMCF0,1), UBOUND(OutData%WaveAccMCF0,1) + OutData%WaveAccMCF0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveDynP0)) DEALLOCATE(OutData%WaveDynP0) + ALLOCATE(OutData%WaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveDynP0,3), UBOUND(OutData%WaveDynP0,3) + DO i2 = LBOUND(OutData%WaveDynP0,2), UBOUND(OutData%WaveDynP0,2) + DO i1 = LBOUND(OutData%WaveDynP0,1), UBOUND(OutData%WaveDynP0,1) + OutData%WaveDynP0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO END DO END DO END IF @@ -11523,7 +13870,7 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er i1_l = IntKiBuf( Int_Xferred ) i1_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + IF (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -11534,7 +13881,7 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Re_Xferred = Re_Xferred + 1 END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! nodeInWater not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveVel0 not allocated Int_Xferred = Int_Xferred + 1 ELSE Int_Xferred = Int_Xferred + 1 @@ -11544,16 +13891,120 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er i2_l = IntKiBuf( Int_Xferred ) i2_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%nodeInWater)) DEALLOCATE(OutData%nodeInWater) - ALLOCATE(OutData%nodeInWater(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveVel0)) DEALLOCATE(OutData%PWaveVel0) + ALLOCATE(OutData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%nodeInWater.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i2 = LBOUND(OutData%nodeInWater,2), UBOUND(OutData%nodeInWater,2) - DO i1 = LBOUND(OutData%nodeInWater,1), UBOUND(OutData%nodeInWater,1) - OutData%nodeInWater(i1,i2) = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 + DO i4 = LBOUND(OutData%PWaveVel0,4), UBOUND(OutData%PWaveVel0,4) + DO i3 = LBOUND(OutData%PWaveVel0,3), UBOUND(OutData%PWaveVel0,3) + DO i2 = LBOUND(OutData%PWaveVel0,2), UBOUND(OutData%PWaveVel0,2) + DO i1 = LBOUND(OutData%PWaveVel0,1), UBOUND(OutData%PWaveVel0,1) + OutData%PWaveVel0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAcc0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAcc0)) DEALLOCATE(OutData%PWaveAcc0) + ALLOCATE(OutData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAcc0,4), UBOUND(OutData%PWaveAcc0,4) + DO i3 = LBOUND(OutData%PWaveAcc0,3), UBOUND(OutData%PWaveAcc0,3) + DO i2 = LBOUND(OutData%PWaveAcc0,2), UBOUND(OutData%PWaveAcc0,2) + DO i1 = LBOUND(OutData%PWaveAcc0,1), UBOUND(OutData%PWaveAcc0,1) + OutData%PWaveAcc0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAccMCF0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAccMCF0)) DEALLOCATE(OutData%PWaveAccMCF0) + ALLOCATE(OutData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAccMCF0,4), UBOUND(OutData%PWaveAccMCF0,4) + DO i3 = LBOUND(OutData%PWaveAccMCF0,3), UBOUND(OutData%PWaveAccMCF0,3) + DO i2 = LBOUND(OutData%PWaveAccMCF0,2), UBOUND(OutData%PWaveAccMCF0,2) + DO i1 = LBOUND(OutData%PWaveAccMCF0,1), UBOUND(OutData%PWaveAccMCF0,1) + OutData%PWaveAccMCF0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveDynP0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveDynP0)) DEALLOCATE(OutData%PWaveDynP0) + ALLOCATE(OutData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%PWaveDynP0,3), UBOUND(OutData%PWaveDynP0,3) + DO i2 = LBOUND(OutData%PWaveDynP0,2), UBOUND(OutData%PWaveDynP0,2) + DO i1 = LBOUND(OutData%PWaveDynP0,1), UBOUND(OutData%PWaveDynP0,1) + OutData%PWaveDynP0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO END DO END DO END IF @@ -11733,24 +14184,48 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er END IF OutData%NumOuts = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 - OutData%NumOutAll = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%OutSwtch = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%UnOutFile = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(OutData%OutFmt) - OutData%OutFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%OutSFmt) - OutData%OutSFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%Delim) - OutData%Delim(I:I) = CHAR(IntKiBuf(Int_Xferred)) + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 - END DO ! I + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + OutData%WaveStMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_UnPackParam SUBROUTINE Morison_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) diff --git a/modules/hydrodyn/src/SS_Excitation.f90 b/modules/hydrodyn/src/SS_Excitation.f90 index 5af0dd457c..32fdc9a9f8 100644 --- a/modules/hydrodyn/src/SS_Excitation.f90 +++ b/modules/hydrodyn/src/SS_Excitation.f90 @@ -20,7 +20,7 @@ ! !********************************************************************************************************************************** MODULE SS_Excitation - + USE SeaState_Interp USE SS_Excitation_Types USE NWTC_Library @@ -77,7 +77,49 @@ subroutine TransformStateSpaceMatrices( NBody, RotZ, C ) end do end subroutine TransformStateSpaceMatrices + +function GetWaveElevation ( time, u_in, t_in, p, m, ErrStat, ErrMsg ) + real(DbKi), intent(in) :: time + TYPE(SS_Exc_InputType), INTENT(IN) :: u_in(:) ! Input at t1 > t2 > t3 + real(DbKi), intent(in) :: t_in(:) + TYPE(SS_Exc_ParameterType), INTENT(in) :: p !< Parameters + TYPE(SS_Exc_MiscVarType), INTENT(inout) :: m !< Initial misc/optimization variables + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + real(SiKi) :: GetWaveElevation(p%NBody) + TYPE(SS_Exc_InputType) :: u_out ! extra_interp result + integer :: iBody + character(ErrMsgLen) :: ErrMsg2 + integer(IntKi) :: ErrStat2 + character(*), parameter :: RoutineName = 'GetWaveElevation' + + + ! Initialize ErrStat + ErrStat = ErrID_None + ErrMsg = "" + + + if (p%ExctnDisp == 0) then + GetWaveElevation = InterpWrappedStpReal ( real(time, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) + else + + call SS_Exc_CopyInput(u_in(1), u_out, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) ! allocates arrays so that SS_Exc_Input_ExtrapInterp will work + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + call SS_Exc_Input_ExtrapInterp(u_in, t_in, u_out, time, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + + do iBody = 1, p%NBody + GetWaveElevation(iBody) = SeaSt_Interp_3D( time, u_out%PtfmPos(1:2,iBody), p%WaveElev1, p%SeaSt_interp_p, m%SeaSt_Interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + end do + + call SS_Exc_DestroyInput(u_out, ErrStat2, ErrMsg2 ) + + end if +end function GetWaveElevation !---------------------------------------------------------------------------------------------------------------------------------- !> This routine is called at the start of the simulation to perform initialization steps. !! The parameters are set here and not changed during the simulation. @@ -85,7 +127,7 @@ end subroutine TransformStateSpaceMatrices SUBROUTINE SS_Exc_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) !.................................................................................................................................. - TYPE(SS_Exc_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine + TYPE(SS_Exc_InitInputType), INTENT(INOUT) :: InitInp !< Input data for initialization routine TYPE(SS_Exc_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined TYPE(SS_Exc_ParameterType), INTENT( OUT) :: p !< Parameters TYPE(SS_Exc_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states @@ -119,13 +161,13 @@ SUBROUTINE SS_Exc_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" - - u%DummyInput = 0.0_ReKi + Allocate(u%PtfmPos(3,InitInp%NBody), Stat= ErrStat) + u%PtfmPos = 0.0_ReKi UnSS = -1 - p%numStates = 0 - p%NBody = InitInp%NBody ! Number of WAMIT bodies: =1 if WAMIT is using NBodyMod > 1, >=1 if NBodyMod=1 - + p%numStates = 0 + p%NBody = InitInp%NBody ! Number of WAMIT bodies: =1 if WAMIT is using NBodyMod > 1, >=1 if NBodyMod=1 + ! Open the .ss input file! CALL GetNewUnit( UnSS ) CALL OpenFInpFile ( UnSS, TRIM(InitInp%InputFile)//'.ssexctn', ErrStat2, ErrMsg2 ) ! Open file. @@ -152,7 +194,8 @@ SUBROUTINE SS_Exc_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL ReadVar( UnSS,TRIM(InitInp%InputFile)//'.ssexctn', p%numStates, 'p%numStates', 'Number of states',ErrStat2, ErrMsg2) ! Reads in the third line, containing the number of states CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'SS_Exc_Init') - + + call AllocAry( p%spdof, 6*p%NBody, 'p%spdof', ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'SS_Rad_Init') CALL ReadAry( UnSS,TRIM(InitInp%InputFile)//'.ssexctn', p%spDOF, 6*p%NBody, 'p%spDOF', 'States per DOF',ErrStat2, ErrMsg2) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'SS_Exc_Init') @@ -232,23 +275,29 @@ SUBROUTINE SS_Exc_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini ! Allocate Wave-elevation related arrays p%NStepWave = InitInp%NStepWave - allocate ( p%WaveElev0(0:p%NStepWave) , STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal,'Error allocating p%WaveElev0 array',ErrStat,ErrMsg,'SS_Exc_Init') - end if - allocate ( p%WaveTime (0:p%NStepWave) , STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal,'Error allocating p%WaveTime array',ErrStat,ErrMsg,'SS_Exc_Init') + !allocate ( p%WaveElev0(0:p%NStepWave) , STAT=ErrStat2 ) + !IF (ErrStat2 /= 0) THEN + ! CALL SetErrStat(ErrID_Fatal,'Error allocating p%WaveElev0 array',ErrStat,ErrMsg,'SS_Exc_Init') + !end if + !allocate ( p%WaveTime (0:p%NStepWave) , STAT=ErrStat2 ) + !IF (ErrStat2 /= 0) THEN + ! CALL SetErrStat(ErrID_Fatal,'Error allocating p%WaveTime array',ErrStat,ErrMsg,'SS_Exc_Init') + !end if + ! + !IF (ErrStat >= AbortErrLev) THEN + ! CALL CleanUp() + ! RETURN + !END IF + p%SeaSt_Interp_p = InitInp%SeaSt_Interp_p + p%ExctnDisp = InitInp%ExctnDisp + p%WaveTime => InitInp%WaveTime + p%ExctnDisp = InitInp%ExctnDisp + if (p%ExctnDisp == 0) then + call MOVE_ALLOC(InitInp%WaveElev0, p%WaveElev0) + else + p%WaveElev1 => InitInp%WaveElev1 end if - IF (ErrStat >= AbortErrLev) THEN - CALL CleanUp() - RETURN - END IF - - p%WaveTime = InitInp%WaveTime - p%WaveElev0 = InitInp%WaveElev0 - ! Define initial system states here: CALL AllocAry( x%x, p%numStates, 'x%x', ErrStat2, ErrMsg2); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'SS_Exc_Init') @@ -304,7 +353,7 @@ END SUBROUTINE CleanUp END SUBROUTINE SS_Exc_Init !---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is called at the end of the simulation. +!> This routine is called at the end of the simulation. It does NOT deallocate pointers to SeaState data. SUBROUTINE SS_Exc_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) !.................................................................................................................................. @@ -320,7 +369,6 @@ SUBROUTINE SS_Exc_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - ! Initialize ErrStat ErrStat = ErrID_None @@ -330,28 +378,28 @@ SUBROUTINE SS_Exc_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ! Place any last minute operations or calculations here: ! Destroy the input data: - CALL SS_Exc_DestroyInput( u, ErrStat, ErrMsg ) + CALL SS_Exc_DestroyInput( u, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) - ! Destroy the parameter data: - - CALL SS_Exc_DestroyParam( p, ErrStat, ErrMsg ) + ! Destroy the parameter data, but don't deallocate SeaState data: + ! **** Note, this is called only from the SS Excitation driver code, so there should not be any issues with pointers on restart*** + CALL SS_Exc_DestroyParam( p, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) ! Destroy the state data: - CALL SS_Exc_DestroyContState( x, ErrStat, ErrMsg ) - CALL SS_Exc_DestroyDiscState( xd, ErrStat, ErrMsg ) - CALL SS_Exc_DestroyConstrState( z, ErrStat, ErrMsg ) - CALL SS_Exc_DestroyOtherState( OtherState, ErrStat, ErrMsg ) + CALL SS_Exc_DestroyContState( x, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) + CALL SS_Exc_DestroyDiscState( xd, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) + CALL SS_Exc_DestroyConstrState( z, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) + CALL SS_Exc_DestroyOtherState( OtherState, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) ! Destroy misc vars: - CALL SS_Exc_DestroyMisc( m, ErrStat, ErrMsg ) + CALL SS_Exc_DestroyMisc( m, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) ! Destroy the output data: - CALL SS_Exc_DestroyOutput( y, ErrStat, ErrMsg ) + CALL SS_Exc_DestroyOutput( y, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) @@ -387,15 +435,15 @@ SUBROUTINE SS_Exc_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherStat CASE (1) ! RK4 - CALL SS_Exc_RK4( t, n, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) + CALL SS_Exc_RK4( t, n, Inputs, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) CASE (2) ! AB4 - CALL SS_Exc_AB4( t, n, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) + CALL SS_Exc_AB4( t, n, Inputs, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) CASE (3) ! ABM4 - CALL SS_Exc_ABM4( t, n, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) + CALL SS_Exc_ABM4( t, n, Inputs, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) CASE DEFAULT !bjj: we already checked this at initialization, but for completeness: @@ -446,7 +494,7 @@ SUBROUTINE SS_Exc_CalcContStateDeriv( Time, waveElev0, p, x, xd, z, OtherState, !.................................................................................................................................. REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - REAL(SiKi), INTENT(IN ) :: waveElev0 !< Wave elevation at origin at time: Time (m) + REAL(SiKi), INTENT(IN ) :: waveElev0(:) !< Wave elevation at origin at time: Time (m) TYPE(SS_Exc_ParameterType), INTENT(IN ) :: p !< Parameters TYPE(SS_Exc_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time TYPE(SS_Exc_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time @@ -457,6 +505,8 @@ SUBROUTINE SS_Exc_CalcContStateDeriv( Time, waveElev0, p, x, xd, z, OtherState, INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + real(SiKi) :: Bwave(p%numStates) + integer(IntKi) :: i, iBody, spbody, count, iStart ! Initialize ErrStat ErrStat = ErrID_None @@ -470,8 +520,21 @@ SUBROUTINE SS_Exc_CalcContStateDeriv( Time, waveElev0, p, x, xd, z, OtherState, !Calc dxdt of a state space system ! [dxdt] = [A]*[xr]+B*[q] + spbody = 0 + count = 1 + iStart = 1 + do iBody=1,p%NBody + spbody = 0 + do i = 1,6 + spbody = spbody + p%spdof(count) + count = count + 1 + end do + + Bwave(iStart:iStart+spbody-1) = p%B(iStart:iStart+spbody-1)*waveElev0(iBody) + iStart = iStart + spBody + end do - dxdt%x =matmul(p%A,x%x) + p%B * waveElev0 + dxdt%x =matmul(p%A,x%x) + Bwave END SUBROUTINE SS_Exc_CalcContStateDeriv !---------------------------------------------------------------------------------------------------------------------------------- @@ -549,12 +612,13 @@ END SUBROUTINE SS_Exc_CalcConstrStateResidual !! Runge-Kutta." �16.1 and 16.2 in Numerical Recipes in FORTRAN: The Art of Scientific Computing, 2nd ed. Cambridge, England: !! Cambridge University Press, pp. 704-716, 1992. !! -SUBROUTINE SS_Exc_RK4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) +SUBROUTINE SS_Exc_RK4( t, n, Inputs, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) !.................................................................................................................................. REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds INTEGER(IntKi), INTENT(IN ) :: n !< time step number REAL(DbKi), INTENT(IN ) :: utimes(:) !< times of input + TYPE(SS_Exc_InputType), INTENT(INOUT) :: Inputs(:) !< Inputs at InputTimes TYPE(SS_Exc_ParameterType), INTENT(IN ) :: p !< Parameters TYPE(SS_Exc_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states at t on input at t + dt on output TYPE(SS_Exc_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at t @@ -572,7 +636,7 @@ SUBROUTINE SS_Exc_RK4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg TYPE(SS_Exc_ContinuousStateType) :: k3 ! RK4 constant; see above TYPE(SS_Exc_ContinuousStateType) :: k4 ! RK4 constant; see above TYPE(SS_Exc_ContinuousStateType) :: x_tmp ! Holds temporary modification to x - real(SiKi) :: waveElev0 ! interpolated value of the wave elevation at the origin + real(SiKi) :: waveElev0(p%NBody) ! interpolated value of the wave elevation at the origin INTEGER(IntKi) :: ErrStat2 ! local error status CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message (ErrMsg) @@ -594,8 +658,11 @@ SUBROUTINE SS_Exc_RK4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg IF ( ErrStat >= AbortErrLev ) RETURN ! find waveElev0 for time, t+p%Tc - - waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) + !TODO: Replace with function call which extracts the correct form of wave elevation based on ExctnDisp, etc. + waveElev0 = GetWaveElevation( t+p%Tc, Inputs, utimes, p, m, ErrStat2, ErrMsg2 ) + CALL CheckError(ErrStat2,ErrMsg2) + IF ( ErrStat >= AbortErrLev ) RETURN + !waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) ! find xdot at t CALL SS_Exc_CalcContStateDeriv( t, waveElev0, p, x, xd, z, OtherState, m, xdot, ErrStat2, ErrMsg2 ) CALL CheckError(ErrStat2,ErrMsg2) @@ -605,7 +672,11 @@ SUBROUTINE SS_Exc_RK4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg x_tmp%x = x%x + 0.5 * k1%x ! find waveElev0 for time, t + p%Tc + dt/2 - waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc+p%DT/2.0, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) + !TODO: Replace with function call which extracts the correct form of wave elevation based on ExctnDisp, etc. + waveElev0 = GetWaveElevation( t+p%Tc+p%DT/2.0, Inputs, utimes, p, m, ErrStat2, ErrMsg2 ) + CALL CheckError(ErrStat2,ErrMsg2) + IF ( ErrStat >= AbortErrLev ) RETURN + !waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc+p%DT/2.0, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) ! find xdot at t + dt/2 CALL SS_Exc_CalcContStateDeriv( t + 0.5*p%dt, waveElev0, p, x_tmp, xd, z, OtherState, m, xdot, ErrStat2, ErrMsg2 ) @@ -624,7 +695,11 @@ SUBROUTINE SS_Exc_RK4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg x_tmp%x = x%x + k3%x ! find waveElev0 for time, (t + p%Tc + dt) - waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc+p%DT, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) + !TODO: Replace with function call which extracts the correct form of wave elevation based on ExctnDisp, etc. + waveElev0 = GetWaveElevation( t+p%Tc+p%DT, Inputs, utimes, p, m, ErrStat2, ErrMsg2 ) + CALL CheckError(ErrStat2,ErrMsg2) + IF ( ErrStat >= AbortErrLev ) RETURN + !waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc+p%DT, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) ! find xdot at t + dt @@ -708,12 +783,13 @@ END SUBROUTINE SS_Exc_RK4 !! !! K. E. Atkinson, "An Introduction to Numerical Analysis", 1989, John Wiley & Sons, Inc, Second Edition. !! -SUBROUTINE SS_Exc_AB4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) +SUBROUTINE SS_Exc_AB4( t, n, Inputs, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) !.................................................................................................................................. REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds INTEGER(IntKi), INTENT(IN ) :: n !< time step number REAL(DbKi), INTENT(IN ) :: utimes(:) !< times of input + TYPE(SS_Exc_InputType), INTENT(INOUT) :: Inputs(:) !< Inputs at InputTimes TYPE(SS_Exc_ParameterType), INTENT(IN ) :: p !< Parameters TYPE(SS_Exc_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states at t on input at t + dt on output TYPE(SS_Exc_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at t @@ -726,7 +802,7 @@ SUBROUTINE SS_Exc_AB4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ! local variables - real(SiKi) :: waveElev0 + real(SiKi) :: waveElev0(p%NBody) INTEGER(IntKi) :: ErrStat2 ! local error status CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message (ErrMsg) @@ -761,7 +837,11 @@ SUBROUTINE SS_Exc_AB4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg endif ! find waveElev at t + Tc - waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) + !TODO: Replace with function call which extracts the correct form of wave elevation based on ExctnDisp, etc. + waveElev0 = GetWaveElevation( t+p%Tc, Inputs, utimes, p, m, ErrStat2, ErrMsg2 ) + CALL CheckError(ErrStat2,ErrMsg2) + IF ( ErrStat >= AbortErrLev ) RETURN + !waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) CALL SS_Exc_CalcContStateDeriv( t, waveElev0, p, x, xd, z, OtherState, m, OtherState%xdot ( 1 ), ErrStat2, ErrMsg2 ) ! initializes OtherState%xdot ( 1 ) CALL CheckError(ErrStat2,ErrMsg2) @@ -770,7 +850,7 @@ SUBROUTINE SS_Exc_AB4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg if (n .le. 2) then - CALL SS_Exc_RK4(t, n, utimes, p, x, xd, z, OtherState, m, ErrStat2, ErrMsg2 ) + CALL SS_Exc_RK4(t, n, Inputs, utimes, p, x, xd, z, OtherState, m, ErrStat2, ErrMsg2 ) CALL CheckError(ErrStat2,ErrMsg2) IF ( ErrStat >= AbortErrLev ) RETURN @@ -836,12 +916,13 @@ END SUBROUTINE SS_Exc_AB4 !! or !! !! K. E. Atkinson, "An Introduction to Numerical Analysis", 1989, John Wiley & Sons, Inc, Second Edition. -SUBROUTINE SS_Exc_ABM4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) +SUBROUTINE SS_Exc_ABM4( t, n, Inputs, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) !.................................................................................................................................. REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds INTEGER(IntKi), INTENT(IN ) :: n !< time step number REAL(DbKi), INTENT(IN ) :: utimes(:) !< times of input + TYPE(SS_Exc_InputType), INTENT(INOUT) :: Inputs(:) !< Inputs at InputTimes TYPE(SS_Exc_ParameterType), INTENT(IN ) :: p !< Parameters TYPE(SS_Exc_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states at t on input at t + dt on output TYPE(SS_Exc_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at t @@ -855,7 +936,7 @@ SUBROUTINE SS_Exc_ABM4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMs TYPE(SS_Exc_ContinuousStateType) :: x_pred ! Continuous states at t TYPE(SS_Exc_ContinuousStateType) :: xdot_pred ! Derivative of continuous states at t - real(SiKi) :: waveElev0 + real(SiKi) :: waveElev0(p%NBody) INTEGER(IntKi) :: ErrStat2 ! local error status CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message (ErrMsg) @@ -869,13 +950,16 @@ SUBROUTINE SS_Exc_ABM4( t, n, utimes, p, x, xd, z, OtherState, m, ErrStat, ErrMs CALL CheckError(ErrStat2,ErrMsg2) IF ( ErrStat >= AbortErrLev ) RETURN - CALL SS_Exc_AB4( t, n, utimes, p, x_pred, xd, z, OtherState, m, ErrStat2, ErrMsg2 ) + CALL SS_Exc_AB4( t, n, Inputs, utimes, p, x_pred, xd, z, OtherState, m, ErrStat2, ErrMsg2 ) CALL CheckError(ErrStat2,ErrMsg2) IF ( ErrStat >= AbortErrLev ) RETURN if (n .gt. 2_IntKi) then - - waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc+p%DT, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) + !TODO: Replace with function call which extracts the correct form of wave elevation based on ExctnDisp, etc. + waveElev0 = GetWaveElevation( t+p%Tc+p%DT, Inputs, utimes, p, m, ErrStat2, ErrMsg2 ) + CALL CheckError(ErrStat2,ErrMsg2) + IF ( ErrStat >= AbortErrLev ) RETURN + !waveElev0 = InterpWrappedStpReal ( REAL(t+p%Tc+p%DT, SiKi), p%WaveTime(:), p%WaveElev0(:), m%LastIndWave, p%NStepWave + 1 ) CALL SS_Exc_CalcContStateDeriv(t + p%dt, waveElev0, p, x_pred, xd, z, OtherState, m, xdot_pred, ErrStat2, ErrMsg2 ) CALL CheckError(ErrStat2,ErrMsg2) IF ( ErrStat >= AbortErrLev ) RETURN diff --git a/modules/hydrodyn/src/SS_Excitation.txt b/modules/hydrodyn/src/SS_Excitation.txt index 251d863d7a..2126e1bf45 100644 --- a/modules/hydrodyn/src/SS_Excitation.txt +++ b/modules/hydrodyn/src/SS_Excitation.txt @@ -14,14 +14,18 @@ # (File) Revision #: $Rev$ # URL: $HeadURL$ ################################################################################################################################### +usefrom SeaState_Interp.txt typedef SS_Excitation/SS_Exc InitInputType CHARACTER(1024) InputFile - - - "Name of the input file" - typedef ^ ^ IntKi NBody - - - "Number of WAMIT bodies for this State Space model" - +typedef ^ ^ IntKi ExctnDisp - - - "0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0]" - typedef ^ ^ ReKi WaveDir - - - "Wave direction" rad typedef ^ ^ INTEGER NStepWave - - - "Number of timesteps in the WaveTime array" - typedef ^ ^ R8Ki PtfmRefztRot {:} - - "The rotation about zt of the body reference frame(s) from xt/yt" radians typedef ^ ^ SiKi WaveElev0 {:} - - "Wave elevation time history at origin" m -typedef ^ ^ SiKi WaveTime {:} - - "Times where wave elevation is known" s +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation (points to SeaState module data)" - +typedef ^ ^ SiKi WaveTime {*} - - "Times where wave elevation is known (points to SeaState module data)" s +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - typedef ^ InitOutputType CHARACTER(10) WriteOutputHdr {:} - - "Header of the output" - typedef ^ InitOutputType CHARACTER(10) WriteOutputUnt {:} - - "Units of the output" - @@ -42,6 +46,7 @@ typedef ^ ^ SS_Exc_ContinuousStateType # Define any data that are used only for efficiency purposes (these variables are not associated with time): # e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc. typedef ^ MiscVarType INTEGER LastIndWave - 1 - "last used index in the WaveTime array" - +typedef ^ ^ SeaSt_Interp_MiscVarType SeaSt_Interp_m - - - "misc var information from the SeaState Interpolation module" - # ..... Parameters ......................... @@ -50,19 +55,22 @@ typedef ^ MiscVarType INTEGER typedef ^ ParameterType DbKi DT - - - "Time step" s typedef ^ ^ IntKi NBody - - - "Number of WAMIT bodies for this State Space model" - +typedef ^ ^ IntKi ExctnDisp - - - "0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0]" - typedef ^ ^ INTEGER NStepWave - - - "Number of timesteps in the WaveTime array" - -typedef ^ ^ IntKi spDOF {6} - - "States per DOF" - +typedef ^ ^ IntKi spDOF {:} - - "States per DOF" - typedef ^ ^ ReKi A {:}{:} - - "A matrix" - typedef ^ ^ ReKi B {:} - - "B matrix" - typedef ^ ^ ReKi C {:}{:} - - "C matrix" - typedef ^ ^ INTEGER numStates - 0 - "Number of states" - typedef ^ ^ DbKi Tc - - - "Time shift" s typedef ^ ^ SiKi WaveElev0 {:} - - "Wave elevation time history at origin" m -typedef ^ ^ SiKi WaveTime {:} - - "Times where wave elevation is known" s +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation (points to SeaState module data)" - +typedef ^ ^ SiKi WaveTime {*} - - "Times where wave elevation is known (points to SeaState module data)" s +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - # ..... Inputs ............................. # Define inputs that are contained on the mesh here: -typedef ^ InputType ReKi DummyInput - - - "Remove this variable if you have input variables" - +typedef ^ InputType ReKi PtfmPos {:}{:} - - "Positions of the NBody platforms. Used when ExctnDisp = 1. For NBodyMod = 2, use actual instantaneous position, otherwise use only displacement" - # ..... Outputs ............................ diff --git a/modules/hydrodyn/src/SS_Excitation_Driver.f90 b/modules/hydrodyn/src/SS_Excitation_Driver.f90 index e9170bf772..985ac09210 100644 --- a/modules/hydrodyn/src/SS_Excitation_Driver.f90 +++ b/modules/hydrodyn/src/SS_Excitation_Driver.f90 @@ -238,6 +238,10 @@ PROGRAM SS_Excitation_Driver CALL WrScr( ErrMsg ) END IF + CALL SS_Exc_DestroyInitInput( InitInData, ErrStat, ErrMsg, DEALLOCATEpointers = .true. ) ! pointers were allocated in this data type, so we need to deallocate them here, too + IF ( ErrStat /= ErrID_None ) THEN ! Check if there was an error and do something about it if necessary + CALL WrScr( ErrMsg ) + END IF !............................................................................................................................... ! Routine to terminate program execution diff --git a/modules/hydrodyn/src/SS_Excitation_Types.f90 b/modules/hydrodyn/src/SS_Excitation_Types.f90 index df75e5077f..c3fa1ef85b 100644 --- a/modules/hydrodyn/src/SS_Excitation_Types.f90 +++ b/modules/hydrodyn/src/SS_Excitation_Types.f90 @@ -31,17 +31,21 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE SS_Excitation_Types !--------------------------------------------------------------------------------------------------------------------------------- +USE SeaState_Interp_Types USE NWTC_Library IMPLICIT NONE ! ========= SS_Exc_InitInputType ======= TYPE, PUBLIC :: SS_Exc_InitInputType CHARACTER(1024) :: InputFile !< Name of the input file [-] INTEGER(IntKi) :: NBody !< Number of WAMIT bodies for this State Space model [-] + INTEGER(IntKi) :: ExctnDisp !< 0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0] [-] REAL(ReKi) :: WaveDir !< Wave direction [rad] INTEGER(IntKi) :: NStepWave !< Number of timesteps in the WaveTime array [-] REAL(R8Ki) , DIMENSION(:), ALLOCATABLE :: PtfmRefztRot !< The rotation about zt of the body reference frame(s) from xt/yt [radians] REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev0 !< Wave elevation time history at origin [m] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Times where wave elevation is known [s] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Times where wave elevation is known (points to SeaState module data) [s] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] END TYPE SS_Exc_InitInputType ! ======================= ! ========= SS_Exc_InitOutputType ======= @@ -74,26 +78,30 @@ MODULE SS_Excitation_Types ! ========= SS_Exc_MiscVarType ======= TYPE, PUBLIC :: SS_Exc_MiscVarType INTEGER(IntKi) :: LastIndWave = 1 !< last used index in the WaveTime array [-] + TYPE(SeaSt_Interp_MiscVarType) :: SeaSt_Interp_m !< misc var information from the SeaState Interpolation module [-] END TYPE SS_Exc_MiscVarType ! ======================= ! ========= SS_Exc_ParameterType ======= TYPE, PUBLIC :: SS_Exc_ParameterType REAL(DbKi) :: DT !< Time step [s] INTEGER(IntKi) :: NBody !< Number of WAMIT bodies for this State Space model [-] + INTEGER(IntKi) :: ExctnDisp !< 0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0] [-] INTEGER(IntKi) :: NStepWave !< Number of timesteps in the WaveTime array [-] - INTEGER(IntKi) , DIMENSION(1:6) :: spDOF !< States per DOF [-] + INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: spDOF !< States per DOF [-] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: A !< A matrix [-] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: B !< B matrix [-] REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: C !< C matrix [-] INTEGER(IntKi) :: numStates = 0 !< Number of states [-] REAL(DbKi) :: Tc !< Time shift [s] REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev0 !< Wave elevation time history at origin [m] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Times where wave elevation is known [s] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Times where wave elevation is known (points to SeaState module data) [s] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] END TYPE SS_Exc_ParameterType ! ======================= ! ========= SS_Exc_InputType ======= TYPE, PUBLIC :: SS_Exc_InputType - REAL(ReKi) :: DummyInput !< Remove this variable if you have input variables [-] + REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: PtfmPos !< Positions of the NBody platforms. Used when ExctnDisp = 1. For NBodyMod = 2, use actual instantaneous position, otherwise use only displacement [-] END TYPE SS_Exc_InputType ! ======================= ! ========= SS_Exc_OutputType ======= @@ -113,6 +121,7 @@ SUBROUTINE SS_Exc_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'SS_Exc_CopyInitInput' @@ -121,6 +130,7 @@ SUBROUTINE SS_Exc_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E ErrMsg = "" DstInitInputData%InputFile = SrcInitInputData%InputFile DstInitInputData%NBody = SrcInitInputData%NBody + DstInitInputData%ExctnDisp = SrcInitInputData%ExctnDisp DstInitInputData%WaveDir = SrcInitInputData%WaveDir DstInitInputData%NStepWave = SrcInitInputData%NStepWave IF (ALLOCATED(SrcInitInputData%PtfmRefztRot)) THEN @@ -147,10 +157,26 @@ SUBROUTINE SS_Exc_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E END IF DstInitInputData%WaveElev0 = SrcInitInputData%WaveElev0 ENDIF -IF (ALLOCATED(SrcInitInputData%WaveTime)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveElev1)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElev1,1) + i1_u = UBOUND(SrcInitInputData%WaveElev1,1) + i2_l = LBOUND(SrcInitInputData%WaveElev1,2) + i2_u = UBOUND(SrcInitInputData%WaveElev1,2) + i3_l = LBOUND(SrcInitInputData%WaveElev1,3) + i3_u = UBOUND(SrcInitInputData%WaveElev1,3) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev1)) THEN + ALLOCATE(DstInitInputData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElev1 = SrcInitInputData%WaveElev1 +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveTime)) THEN i1_l = LBOUND(SrcInitInputData%WaveTime,1) i1_u = UBOUND(SrcInitInputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveTime)) THEN + IF (.NOT. ASSOCIATED(DstInitInputData%WaveTime)) THEN ALLOCATE(DstInitInputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -159,6 +185,9 @@ SUBROUTINE SS_Exc_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E END IF DstInitInputData%WaveTime = SrcInitInputData%WaveTime ENDIF + CALL SeaSt_Interp_CopyParam( SrcInitInputData%SeaSt_Interp_p, DstInitInputData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN END SUBROUTINE SS_Exc_CopyInitInput SUBROUTINE SS_Exc_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -188,9 +217,18 @@ SUBROUTINE SS_Exc_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpo IF (ALLOCATED(InitInputData%WaveElev0)) THEN DEALLOCATE(InitInputData%WaveElev0) ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN +IF (ASSOCIATED(InitInputData%WaveElev1)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveElev1) + InitInputData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() ENDIF + CALL SeaSt_Interp_DestroyParam( InitInputData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE SS_Exc_DestroyInitInput SUBROUTINE SS_Exc_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -230,6 +268,7 @@ SUBROUTINE SS_Exc_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Int_BufSz = 0 Int_BufSz = Int_BufSz + 1*LEN(InData%InputFile) ! InputFile Int_BufSz = Int_BufSz + 1 ! NBody + Int_BufSz = Int_BufSz + 1 ! ExctnDisp Re_BufSz = Re_BufSz + 1 ! WaveDir Int_BufSz = Int_BufSz + 1 ! NStepWave Int_BufSz = Int_BufSz + 1 ! PtfmRefztRot allocated yes/no @@ -242,11 +281,34 @@ SUBROUTINE SS_Exc_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Int_BufSz = Int_BufSz + 2*1 ! WaveElev0 upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveElev0) ! WaveElev0 END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN + IF ( ASSOCIATED(InData%WaveTime) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime END IF + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -280,6 +342,8 @@ SUBROUTINE SS_Exc_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er END DO ! I IntKiBuf(Int_Xferred) = InData%NBody Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%ExctnDisp + Int_Xferred = Int_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WaveDir Re_Xferred = Re_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NStepWave @@ -314,7 +378,32 @@ SUBROUTINE SS_Exc_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_Xferred = Re_Xferred + 1 END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElev1) ) 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%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev1,3), UBOUND(InData%WaveElev1,3) + DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -329,6 +418,34 @@ SUBROUTINE SS_Exc_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_Xferred = Re_Xferred + 1 END DO END IF + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF END SUBROUTINE SS_Exc_PackInitInput SUBROUTINE SS_Exc_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -346,6 +463,7 @@ SUBROUTINE SS_Exc_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, INTEGER(IntKi) :: i INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'SS_Exc_UnPackInitInput' @@ -365,6 +483,8 @@ SUBROUTINE SS_Exc_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, END DO ! I OutData%NBody = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%ExctnDisp = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 OutData%WaveDir = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 OutData%NStepWave = IntKiBuf(Int_Xferred) @@ -405,6 +525,34 @@ SUBROUTINE SS_Exc_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 END DO END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev1,3), UBOUND(OutData%WaveElev1,3) + DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -412,7 +560,7 @@ SUBROUTINE SS_Exc_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, i1_l = IntKiBuf( Int_Xferred ) i1_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + IF (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -423,6 +571,46 @@ SUBROUTINE SS_Exc_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 END DO END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE SS_Exc_UnPackInitInput SUBROUTINE SS_Exc_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) @@ -1389,6 +1577,9 @@ SUBROUTINE SS_Exc_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ErrStat = ErrID_None ErrMsg = "" DstMiscData%LastIndWave = SrcMiscData%LastIndWave + CALL SeaSt_Interp_CopyMisc( SrcMiscData%SeaSt_Interp_m, DstMiscData%SeaSt_Interp_m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN END SUBROUTINE SS_Exc_CopyMisc SUBROUTINE SS_Exc_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -1412,6 +1603,8 @@ SUBROUTINE SS_Exc_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) DEALLOCATEpointers_local = .true. END IF + CALL SeaSt_Interp_DestroyMisc( MiscData%SeaSt_Interp_m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE SS_Exc_DestroyMisc SUBROUTINE SS_Exc_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -1450,6 +1643,24 @@ SUBROUTINE SS_Exc_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Db_BufSz = 0 Int_BufSz = 0 Int_BufSz = Int_BufSz + 1 ! LastIndWave + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_m: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_m, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_m + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_m + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_m + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1479,6 +1690,34 @@ SUBROUTINE SS_Exc_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, IntKiBuf(Int_Xferred) = InData%LastIndWave Int_Xferred = Int_Xferred + 1 + CALL SeaSt_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_m, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF END SUBROUTINE SS_Exc_PackMisc SUBROUTINE SS_Exc_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -1509,6 +1748,46 @@ SUBROUTINE SS_Exc_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM Int_Xferred = 1 OutData%LastIndWave = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_m, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE SS_Exc_UnPackMisc SUBROUTINE SS_Exc_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) @@ -1521,6 +1800,7 @@ SUBROUTINE SS_Exc_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'SS_Exc_CopyParam' @@ -1529,8 +1809,20 @@ SUBROUTINE SS_Exc_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM ErrMsg = "" DstParamData%DT = SrcParamData%DT DstParamData%NBody = SrcParamData%NBody + DstParamData%ExctnDisp = SrcParamData%ExctnDisp DstParamData%NStepWave = SrcParamData%NStepWave +IF (ALLOCATED(SrcParamData%spDOF)) THEN + i1_l = LBOUND(SrcParamData%spDOF,1) + i1_u = UBOUND(SrcParamData%spDOF,1) + IF (.NOT. ALLOCATED(DstParamData%spDOF)) THEN + ALLOCATE(DstParamData%spDOF(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%spDOF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF DstParamData%spDOF = SrcParamData%spDOF +ENDIF IF (ALLOCATED(SrcParamData%A)) THEN i1_l = LBOUND(SrcParamData%A,1) i1_u = UBOUND(SrcParamData%A,1) @@ -1585,10 +1877,26 @@ SUBROUTINE SS_Exc_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM END IF DstParamData%WaveElev0 = SrcParamData%WaveElev0 ENDIF -IF (ALLOCATED(SrcParamData%WaveTime)) THEN +IF (ASSOCIATED(SrcParamData%WaveElev1)) THEN + i1_l = LBOUND(SrcParamData%WaveElev1,1) + i1_u = UBOUND(SrcParamData%WaveElev1,1) + i2_l = LBOUND(SrcParamData%WaveElev1,2) + i2_u = UBOUND(SrcParamData%WaveElev1,2) + i3_l = LBOUND(SrcParamData%WaveElev1,3) + i3_u = UBOUND(SrcParamData%WaveElev1,3) + IF (.NOT. ASSOCIATED(DstParamData%WaveElev1)) THEN + ALLOCATE(DstParamData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElev1 = SrcParamData%WaveElev1 +ENDIF +IF (ASSOCIATED(SrcParamData%WaveTime)) THEN i1_l = LBOUND(SrcParamData%WaveTime,1) i1_u = UBOUND(SrcParamData%WaveTime,1) - IF (.NOT. ALLOCATED(DstParamData%WaveTime)) THEN + IF (.NOT. ASSOCIATED(DstParamData%WaveTime)) THEN ALLOCATE(DstParamData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -1597,6 +1905,9 @@ SUBROUTINE SS_Exc_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM END IF DstParamData%WaveTime = SrcParamData%WaveTime ENDIF + CALL SeaSt_Interp_CopyParam( SrcParamData%SeaSt_Interp_p, DstParamData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN END SUBROUTINE SS_Exc_CopyParam SUBROUTINE SS_Exc_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -1620,6 +1931,9 @@ SUBROUTINE SS_Exc_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) DEALLOCATEpointers_local = .true. END IF +IF (ALLOCATED(ParamData%spDOF)) THEN + DEALLOCATE(ParamData%spDOF) +ENDIF IF (ALLOCATED(ParamData%A)) THEN DEALLOCATE(ParamData%A) ENDIF @@ -1632,9 +1946,18 @@ SUBROUTINE SS_Exc_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) IF (ALLOCATED(ParamData%WaveElev0)) THEN DEALLOCATE(ParamData%WaveElev0) ENDIF -IF (ALLOCATED(ParamData%WaveTime)) THEN +IF (ASSOCIATED(ParamData%WaveElev1)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveElev1) + ParamData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(ParamData%WaveTime) + ParamData%WaveTime => NULL() ENDIF + CALL SeaSt_Interp_DestroyParam( ParamData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE SS_Exc_DestroyParam SUBROUTINE SS_Exc_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -1674,8 +1997,13 @@ SUBROUTINE SS_Exc_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Int_BufSz = 0 Db_BufSz = Db_BufSz + 1 ! DT Int_BufSz = Int_BufSz + 1 ! NBody + Int_BufSz = Int_BufSz + 1 ! ExctnDisp Int_BufSz = Int_BufSz + 1 ! NStepWave + Int_BufSz = Int_BufSz + 1 ! spDOF allocated yes/no + IF ( ALLOCATED(InData%spDOF) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! spDOF upper/lower bounds for each dimension Int_BufSz = Int_BufSz + SIZE(InData%spDOF) ! spDOF + END IF Int_BufSz = Int_BufSz + 1 ! A allocated yes/no IF ( ALLOCATED(InData%A) ) THEN Int_BufSz = Int_BufSz + 2*2 ! A upper/lower bounds for each dimension @@ -1698,11 +2026,34 @@ SUBROUTINE SS_Exc_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Int_BufSz = Int_BufSz + 2*1 ! WaveElev0 upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveElev0) ! WaveElev0 END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN + IF ( ASSOCIATED(InData%WaveTime) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime END IF + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1734,12 +2085,25 @@ SUBROUTINE SS_Exc_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Db_Xferred = Db_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NBody Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%ExctnDisp + Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NStepWave Int_Xferred = Int_Xferred + 1 - DO i1 = LBOUND(InData%spDOF,1), UBOUND(InData%spDOF,1) - IntKiBuf(Int_Xferred) = InData%spDOF(i1) - Int_Xferred = Int_Xferred + 1 - END DO + IF ( .NOT. ALLOCATED(InData%spDOF) ) 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%spDOF,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%spDOF,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%spDOF,1), UBOUND(InData%spDOF,1) + IntKiBuf(Int_Xferred) = InData%spDOF(i1) + Int_Xferred = Int_Xferred + 1 + END DO + END IF IF ( .NOT. ALLOCATED(InData%A) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -1814,7 +2178,32 @@ SUBROUTINE SS_Exc_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Re_Xferred = Re_Xferred + 1 END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElev1) ) 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%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev1,3), UBOUND(InData%WaveElev1,3) + DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -1829,6 +2218,34 @@ SUBROUTINE SS_Exc_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Re_Xferred = Re_Xferred + 1 END DO END IF + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF END SUBROUTINE SS_Exc_PackParam SUBROUTINE SS_Exc_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -1846,6 +2263,7 @@ SUBROUTINE SS_Exc_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err INTEGER(IntKi) :: i INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'SS_Exc_UnPackParam' @@ -1863,14 +2281,28 @@ SUBROUTINE SS_Exc_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err Db_Xferred = Db_Xferred + 1 OutData%NBody = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%ExctnDisp = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 OutData%NStepWave = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 - i1_l = LBOUND(OutData%spDOF,1) - i1_u = UBOUND(OutData%spDOF,1) - DO i1 = LBOUND(OutData%spDOF,1), UBOUND(OutData%spDOF,1) - OutData%spDOF(i1) = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END DO + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! spDOF 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%spDOF)) DEALLOCATE(OutData%spDOF) + ALLOCATE(OutData%spDOF(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%spDOF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%spDOF,1), UBOUND(OutData%spDOF,1) + OutData%spDOF(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! A not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -1957,6 +2389,34 @@ SUBROUTINE SS_Exc_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err Re_Xferred = Re_Xferred + 1 END DO END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev1,3), UBOUND(OutData%WaveElev1,3) + DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -1964,7 +2424,7 @@ SUBROUTINE SS_Exc_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err i1_l = IntKiBuf( Int_Xferred ) i1_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + IF (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -1975,6 +2435,46 @@ SUBROUTINE SS_Exc_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err Re_Xferred = Re_Xferred + 1 END DO END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE SS_Exc_UnPackParam SUBROUTINE SS_Exc_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) @@ -1985,13 +2485,28 @@ SUBROUTINE SS_Exc_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrM CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'SS_Exc_CopyInput' ! ErrStat = ErrID_None ErrMsg = "" - DstInputData%DummyInput = SrcInputData%DummyInput +IF (ALLOCATED(SrcInputData%PtfmPos)) THEN + i1_l = LBOUND(SrcInputData%PtfmPos,1) + i1_u = UBOUND(SrcInputData%PtfmPos,1) + i2_l = LBOUND(SrcInputData%PtfmPos,2) + i2_u = UBOUND(SrcInputData%PtfmPos,2) + IF (.NOT. ALLOCATED(DstInputData%PtfmPos)) THEN + ALLOCATE(DstInputData%PtfmPos(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInputData%PtfmPos.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInputData%PtfmPos = SrcInputData%PtfmPos +ENDIF END SUBROUTINE SS_Exc_CopyInput SUBROUTINE SS_Exc_DestroyInput( InputData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -2015,6 +2530,9 @@ SUBROUTINE SS_Exc_DestroyInput( InputData, ErrStat, ErrMsg, DEALLOCATEpointers ) DEALLOCATEpointers_local = .true. END IF +IF (ALLOCATED(InputData%PtfmPos)) THEN + DEALLOCATE(InputData%PtfmPos) +ENDIF END SUBROUTINE SS_Exc_DestroyInput SUBROUTINE SS_Exc_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -2052,7 +2570,11 @@ SUBROUTINE SS_Exc_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Re_BufSz = 0 Db_BufSz = 0 Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyInput + Int_BufSz = Int_BufSz + 1 ! PtfmPos allocated yes/no + IF ( ALLOCATED(InData%PtfmPos) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! PtfmPos upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PtfmPos) ! PtfmPos + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -2080,8 +2602,26 @@ SUBROUTINE SS_Exc_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Db_Xferred = 1 Int_Xferred = 1 - ReKiBuf(Re_Xferred) = InData%DummyInput - Re_Xferred = Re_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%PtfmPos) ) 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%PtfmPos,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PtfmPos,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PtfmPos,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PtfmPos,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%PtfmPos,2), UBOUND(InData%PtfmPos,2) + DO i1 = LBOUND(InData%PtfmPos,1), UBOUND(InData%PtfmPos,1) + ReKiBuf(Re_Xferred) = InData%PtfmPos(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF END SUBROUTINE SS_Exc_PackInput SUBROUTINE SS_Exc_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -2097,6 +2637,8 @@ SUBROUTINE SS_Exc_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err INTEGER(IntKi) :: Db_Xferred INTEGER(IntKi) :: Int_Xferred INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'SS_Exc_UnPackInput' @@ -2110,8 +2652,29 @@ SUBROUTINE SS_Exc_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err Re_Xferred = 1 Db_Xferred = 1 Int_Xferred = 1 - OutData%DummyInput = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PtfmPos 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%PtfmPos)) DEALLOCATE(OutData%PtfmPos) + ALLOCATE(OutData%PtfmPos(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PtfmPos.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%PtfmPos,2), UBOUND(OutData%PtfmPos,2) + DO i1 = LBOUND(OutData%PtfmPos,1), UBOUND(OutData%PtfmPos,1) + OutData%PtfmPos(i1,i2) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF END SUBROUTINE SS_Exc_UnPackInput SUBROUTINE SS_Exc_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrMsg ) @@ -2432,6 +2995,10 @@ SUBROUTINE SS_Exc_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, ErrM REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation INTEGER(IntKi) :: ErrStat2 ! local errors CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors + INTEGER :: i01 ! dim1 level 0 counter variable for arrays of ddts + INTEGER :: i02 ! dim2 level 0 counter variable for arrays of ddts + INTEGER :: i1 ! dim1 counter variable for arrays + INTEGER :: i2 ! dim2 counter variable for arrays ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" @@ -2446,8 +3013,14 @@ SUBROUTINE SS_Exc_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, ErrM END IF ScaleFactor = t_out / t(2) - b = -(u1%DummyInput - u2%DummyInput) - u_out%DummyInput = u1%DummyInput + b * ScaleFactor +IF (ALLOCATED(u_out%PtfmPos) .AND. ALLOCATED(u1%PtfmPos)) THEN + DO i2 = LBOUND(u_out%PtfmPos,2),UBOUND(u_out%PtfmPos,2) + DO i1 = LBOUND(u_out%PtfmPos,1),UBOUND(u_out%PtfmPos,1) + b = -(u1%PtfmPos(i1,i2) - u2%PtfmPos(i1,i2)) + u_out%PtfmPos(i1,i2) = u1%PtfmPos(i1,i2) + b * ScaleFactor + END DO + END DO +END IF ! check if allocated END SUBROUTINE SS_Exc_Input_ExtrapInterp1 @@ -2483,6 +3056,10 @@ SUBROUTINE SS_Exc_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat, INTEGER(IntKi) :: ErrStat2 ! local errors CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors CHARACTER(*), PARAMETER :: RoutineName = 'SS_Exc_Input_ExtrapInterp2' + INTEGER :: i01 ! dim1 level 0 counter variable for arrays of ddts + INTEGER :: i02 ! dim2 level 0 counter variable for arrays of ddts + INTEGER :: i1 ! dim1 counter variable for arrays + INTEGER :: i2 ! dim2 counter variable for arrays ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" @@ -2503,9 +3080,15 @@ SUBROUTINE SS_Exc_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat, END IF ScaleFactor = t_out / (t(2) * t(3) * (t(2) - t(3))) - b = (t(3)**2*(u1%DummyInput - u2%DummyInput) + t(2)**2*(-u1%DummyInput + u3%DummyInput))* scaleFactor - c = ( (t(2)-t(3))*u1%DummyInput + t(3)*u2%DummyInput - t(2)*u3%DummyInput ) * scaleFactor - u_out%DummyInput = u1%DummyInput + b + c * t_out +IF (ALLOCATED(u_out%PtfmPos) .AND. ALLOCATED(u1%PtfmPos)) THEN + DO i2 = LBOUND(u_out%PtfmPos,2),UBOUND(u_out%PtfmPos,2) + DO i1 = LBOUND(u_out%PtfmPos,1),UBOUND(u_out%PtfmPos,1) + b = (t(3)**2*(u1%PtfmPos(i1,i2) - u2%PtfmPos(i1,i2)) + t(2)**2*(-u1%PtfmPos(i1,i2) + u3%PtfmPos(i1,i2)))* scaleFactor + c = ( (t(2)-t(3))*u1%PtfmPos(i1,i2) + t(3)*u2%PtfmPos(i1,i2) - t(2)*u3%PtfmPos(i1,i2) ) * scaleFactor + u_out%PtfmPos(i1,i2) = u1%PtfmPos(i1,i2) + b + c * t_out + END DO + END DO +END IF ! check if allocated END SUBROUTINE SS_Exc_Input_ExtrapInterp2 diff --git a/modules/hydrodyn/src/UserWaves.f90 b/modules/hydrodyn/src/UserWaves.f90 deleted file mode 100644 index 4689ba2438..0000000000 --- a/modules/hydrodyn/src/UserWaves.f90 +++ /dev/null @@ -1,984 +0,0 @@ -MODULE UserWaves - - USE Waves_Types - USE NWTC_Library - USE NWTC_FFTPACK - - IMPLICIT NONE - PRIVATE - - PUBLIC :: UserWaves_Init - PUBLIC :: UserWaveElevations_Init - - - ! Data type for reading in wave elevation data from a file. - TYPE :: WaveElevInputDataFile - REAL(DbKi) :: WaveDT !< time step size - INTEGER(IntKi) :: NStepWave !< Number of wave elevation steps - REAL(SiKi) :: WaveTMax !< Maximum time - REAL(SiKi), ALLOCATABLE :: WaveElev(:) !< Wave elevation at each timestep (m) - REAL(SiKi), ALLOCATABLE :: WaveTime(:) !< Timestamp of each wave elevation (s) - CHARACTER(1024) :: FileName !< Name of the file - END TYPE WaveElevInputDataFile - - - - - CONTAINS - - - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This subroutine reads in the wave elevations from a file and reconstructs the frequency information. -!! -!! FILE Format: -!! Header info: -!! This file may have header lines. These can be any number of lines at the beginning of the file that -!! start with non-numeric data. The Value of WaveDT is calculated using the first and last rows of data, -!! and the number of timesteps. The Number of timesteps is calculated as the number of lines of data, minus 1. -!! -!! column headings --> column 1 = time (s), column 2 = elevation (m) -!! -!! -SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) - - IMPLICIT NONE - TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine - TYPE(WaveElevInputDataFile), INTENT( OUT) :: WaveElevData !< Wave elevation file data, after changing NStepWave - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error Status at return - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Variables for reading in the wave elevation - CHARACTER(1024) :: FileName !< Name of the file we are reading - REAL(SiKi) :: TmpWaveElevRow(2) !< row read in from the wave elevation input file - - - ! Local Variables - CHARACTER(1024) :: TextLine !< One line of text read from the file - INTEGER(IntKi) :: LineLen !< The length of the line read in - INTEGER(IntKi) :: I !< Generic counter integer - INTEGER(IntKi) :: NumDataColumns !< Number of columns of data found in the file - INTEGER(IntKi) :: NumHeaderLines !< Number of header lines in the file. - INTEGER(IntKi) :: WaveElevUnit !< Unit number for the ElevFileName - INTEGER(IntKi) :: ErrStatTmp !< Temporarary error status for procesing - CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message for processing - CHARACTER(*), PARAMETER :: RoutineName = 'WaveElev_ReadFile' - - - - - ! Initialize the error handling - ErrStat = ErrID_None - ErrMsg = "" - - - ! Get a unit number for reading in the file - CALL GetNewUnit( WaveElevUnit ) - - ! Assemble the filename for the wave elevation data. - WaveElevData%FileName = TRIM(InitInp%WvKinFile)//'.Elev' - - ! Open the file containing the wave elevation timeseries - CALL OpenFInpFile( WaveElevUnit, WaveElevData%FileName, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat,ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) THEN - CLOSE ( WaveElevUnit ) - CALL CleanUp() - RETURN - END IF - - - ! Find out how the data is formatted - CALL GetFileLength(WaveElevUnit, TRIM(WaveElevData%Filename), NumDataColumns, WaveElevData%NStepWave, NumHeaderLines, ErrStatTmp, ErrMsgTmp) - CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat,ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) THEN - CLOSE ( WaveElevUnit ) - CALL CleanUp() - RETURN - END IF - - - ! Check that we read in two columns - IF ( NumDataColumns /= 2_IntKi ) THEN - CALL SetErrStat( ErrID_Fatal, ' Wave elevation files should contain only two columns of data: Time (s) and Elevation (m). '// & - 'Found '//TRIM(Num2LStr(NumDataColumns))//' of data in '//TRIM(WaveElevData%FileName)//'.', ErrStat, ErrMsg, RoutineName) - CLOSE ( WaveElevUnit ) - CALL CleanUp() - RETURN - END IF - - - ! Adjust the number of steps since we index from zero - WaveElevData%NStepWave = WaveElevData%NStepWave - 1_IntKi - - - - !-------------------------------------------------- - ! Read in the data - !-------------------------------------------------- - - ! Allocate the array to store the time series - ALLOCATE ( WaveElevData%WaveTime(0:WaveElevData%NStepWave), STAT = ErrStatTmp ) - IF ( ErrStatTmp /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating space for user WaveTime array.', ErrStat, ErrMsg, RoutineName ) - CLOSE ( WaveElevUnit ) - CALL CleanUp() - RETURN - END IF - - ! Allocate the array to store the elevation series - ALLOCATE ( WaveElevData%WaveElev(0:WaveElevData%NStepWave), STAT = ErrStatTmp ) - IF ( ErrStatTmp /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating space for user WaveElev array.', ErrStat, ErrMsg, RoutineName ) - CLOSE ( WaveElevUnit ) - CALL CleanUp() - RETURN - END IF - - - ! Read and discard the header lines - DO I=1,NumHeaderLines - CALL ReadLine( WaveElevUnit, '', TextLine, LineLen, ErrStatTmp ) - ENDDO - - - ! Read in all the data - DO I=0,WaveElevData%NStepWave - CALL ReadAry( WaveElevUnit, WaveElevData%FileName, TmpWaveElevRow(1:2), 2, 'TmpWaveElevRow','Temporary variable holding the time and wave elevation pair', & - ErrStatTmp,ErrMsgTmp ) - IF ( ErrStatTmp /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error in reading in value from the file: line number '//TRIM(Num2LStr(I))//'. Expecting a total of '// & - TRIM(Num2LStr(WaveElevData%NStepWave))//' rows of data.', ErrStat, ErrMsg, RoutineName ) - CLOSE ( WaveElevUnit ) - CALL CleanUp() - RETURN - END IF - - ! Copy the data to the appropriate places - WaveElevData%WaveTime(I) = TmpWaveElevRow(1) - WaveElevData%WaveElev(I) = TmpWaveElevRow(2) - - ENDDO - - CALL WrScr( ' Read in '//TRIM(Num2LStr(I))//' lines of wave elevation data from '//TRIM(WaveElevData%FileName)//'.' ) - - - CLOSE( WaveElevUnit ) - - - - ! We are going to be a little bit lazy here and blindly assume that the time is correct in the file - ! and that the timesteps are uniform throughout the file (if this isn't true, that isn't the problem - ! of the programmer, rather of the user). - - ! Set the value for WaveTMax using the difference betwee the last value read in and the fist - WaveElevData%WaveTMax = WaveElevData%WaveTime(WaveElevData%NStepWave) - WaveElevData%WaveTime(0) - - ! Set the value for WaveDT using the number of steps read in and the difference from first and last - WaveElevData%WaveDT = REAL( WaveElevData%WaveTMax / WaveElevData%NStepWave, DbKi ) - - - CONTAINS - - SUBROUTINE CleanUp - - IF (ALLOCATED( WaveElevData%WaveElev )) DEALLOCATE( WaveElevData%WaveElev, STAT=ErrStatTmp) - IF (ALLOCATED( WaveElevData%WaveTime )) DEALLOCATE( WaveElevData%WaveTime, STAT=ErrStatTmp) - - END SUBROUTINE CleanUp - - !------------------------------------------------------------------------------------------------------------------------------- - !> This subroutine looks at a file that has been opened and finds out how many header lines there are, how many periods - !! (frequencies) there are (first only if there are paired periods for second order), and how many lines of data there are in - !! the file. - !! - !! A few things are assumed about the file: - !! 1. Any header lines are the first thing in the file. - !! 2. No text appears anyplace other than in the file - !! 3. The datalines only contain numbers that can be read in as reals. - !! - !! Limitations: - !! 1. only handles up to 20 words (columns) on a line - !! 2. empty lines are considered text lines - !! 3. All data rows must contain the same number of columns - !! - !! - SUBROUTINE GetFileLength(UnitDataFile, Filename, NumDataColumns, NumDataLines, NumHeaderLines, ErrStat, ErrMsg) - - IMPLICIT NONE - - ! Passed variables - INTEGER(IntKi), INTENT(IN ) :: UnitDataFile !< Unit number of the file we are looking at. - CHARACTER(*), INTENT(IN ) :: Filename !< The name of the file we are looking at. - INTEGER(IntKi), INTENT( OUT) :: NumDataColumns !< The number of columns in the data file. - INTEGER(IntKi), INTENT( OUT) :: NumDataLines !< Number of lines containing data - INTEGER(IntKi), INTENT( OUT) :: NumHeaderLines !< Number of header lines at the start of the file - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error Message to return (empty if all good) - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Status flag if there were any problems (ErrID_None if all good) - - ! Local Variables - CHARACTER(2048) :: ErrMsgTmp !< Temporary message variable. Used in calls. - INTEGER(IntKi) :: ErrStatTmp !< Temporary error status. Used in calls. - INTEGER(IntKi) :: LclErrStat !< Temporary error status. Used locally to indicate when we have reached the end of the file. - INTEGER(IntKi) :: TmpIOErrStat !< Temporary error status for the internal read of the first word to a real number - LOGICAL :: IsRealNum !< Flag indicating if the first word on the line was a real number - - CHARACTER(1024) :: TextLine !< One line of text read from the file - INTEGER(IntKi) :: LineLen !< The length of the line read in - CHARACTER(1024) :: StrRead !< String containing the first word read in - REAL(SiKi) :: RealRead !< Returns value of the number (if there was one), or NaN (as set by NWTC_Num) if there wasn't - CHARACTER(1024) :: VarName !< Name of the variable we are trying to read from the file - CHARACTER(24) :: Words(20) !< Array of words we extract from a line. We shouldn't have more than 20. - INTEGER(IntKi) :: i,j,k !< simple integer counters - INTEGER(IntKi) :: LineNumber !< the line I am on - LOGICAL :: LineHasText !< Flag indicating if the line I just read has text. If so, it is a header line. - LOGICAL :: HaveReadData !< Flag indicating if I have started reading data. - INTEGER(IntKi) :: NumWords !< Number of words on a line - INTEGER(IntKi) :: FirstDataLineNum !< Line number of the first row of data in the file - CHARACTER(*), PARAMETER :: RoutineName = 'GetFileLength' - - - - ! Initialize the error handling - ErrStat = ErrID_None - ErrStatTmp = ErrID_None - LclErrStat = ErrID_None - ErrMsg = '' - ErrMsgTmp = '' - - - ! Set some of the flags and counters - HaveReadData = .FALSE. - NumDataColumns = 0 - NumHeaderLines = 0 - NumDataLines = 0 - LineNumber = 0 - - - ! Just in case we were handed a file that we are part way through reading (should never be true), rewind to the start - - REWIND( UnitDataFile ) - - - !------------------------------------ - !> The variable LclErrStat is used to indicate when we have reached the end of the file or had an error from - !! ReadLine. Until that occurs, we read each line, and decide if it contained any non-numeric data. The - !! first group of lines containing non-numeric data is considered the header. The first line of all numeric - !! data is considered the start of the data section. Any non-numeric containing found within the data section - !! will be considered as an invalid file format at which point we will return a fatal error from this routine. - - DO WHILE ( LclErrStat == ErrID_None ) - - !> Reset the indicator flag for the non-numeric content - LineHasText = .FALSE. - - !> Read in a single line from the file - CALL ReadLine( UnitDataFile, '', TextLine, LineLen, LclErrStat ) - - !> If there was an error in reading the file, then exit. - !! Possible causes: reading beyond end of file in which case we are done so don't process it. - IF ( LclErrStat /= ErrID_None ) EXIT - - !> Increment the line counter. - LineNumber = LineNumber + 1 - - !> Read all the words on the line into the array called 'Words'. Only the first words will be encountered - !! will be stored. The others are empty (i.e. only three words on the line, so the remaining 17 are empty). - CALL GetWords( TextLine, Words, 20 ) - - !> Cycle through and count how many are not empty. Once an empty value is encountered, all the rest should - !! be empty if GetWords worked correctly. The index of the last non-empty value is stored. - DO i=1,20 - IF (TRIM(Words(i)) .ne. '') NumWords=i - ENDDO - - - !> Now cycle through the first 'NumWords' of non-empty values stored in 'Words'. Words should contain - !! everything that is one the line. The subroutine ReadRealNumberFromString will set a flag 'IsRealNum' - !! when the value in Words(i) can be read as a real(SiKi). 'StrRead' will contain the string equivalent. - DO i=1,NumWords - CALL ReadRealNumberFromString( Words(i), RealRead, StrRead, IsRealNum, ErrStatTmp, ErrMsgTmp, TmpIOErrStat ) - IF ( .NOT. IsRealNum) THEN - LineHasText = .TRUE. - ENDIF - ENDDO - - !> If all the words on that line had no text in them, then it must have been a line of data. - !! If not, then we have either a header line, which is ok, or a line containing text in the middle of the - !! the data section, which is not good (the flag HaveReadData tells us which case this is). - IF ( LineHasText ) THEN - IF ( HaveReadData ) THEN ! Uh oh, we have already read a line of data before now, so there is a problem - CALL SetErrStat( ErrID_Fatal, ' Found text on line '//TRIM(Num2LStr(LineNumber))//' of '//TRIM(FileName)// & - ' when real numbers were expected. There may be a problem with the file.', ErrStat, ErrMsg, RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF - ELSE - NumHeaderLines = NumHeaderLines + 1 - ENDIF - ELSE ! No text, must be data line - NumDataLines = NumDataLines + 1 - ! If this is the first row of data, then store the number of words that were on the line - IF ( .NOT. HaveReadData ) THEN - ! If this is the first line of data, keep some relevant info about it and the number of columns in it - HaveReadData = .TRUE. - FirstDataLineNum = LineNumber ! Keep the line number of the first row of data (for error reporting) - NumDataColumns = NumWords - ELSE - ! Make sure that the number columns on the row matches the number of columnns on the first row of data. - IF ( NumWords /= NumDataColumns ) THEN - CALL SetErrStat( ErrID_Fatal, ' Error in data file: '//TRIM(Filename)//'.'// & - ' The number of data columns on line '//TRIM(Num2LStr(LineNumber))// & - '('//TRIM(Num2LStr(NumWords))//' columns) is different than the number of columns on first row of data '// & - ' (line: '//TRIM(Num2LStr(FirstDataLineNum))//', '//TRIM(Num2LStr(NumDataColumns))//' columns).', & - ErrStat, ErrMsg, RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF - ENDIF - ENDIF - ENDIF - - ENDDO - - IF ( NumDataLines < 2 ) THEN - CALL SetErrStat( ErrID_Fatal, ' The file '//TRIM(Filename)//' contains only '//TRIM(Num2LStr(NumDataLines))// & - ' lines of data. This does not appear to be a useful wave elevation file.', ErrStat, ErrMsg, RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF - ENDIF - - REWIND( UnitDataFile ) - - END SUBROUTINE GetFileLength - - - !------------------------------------------------------------------------------- - !> This subroutine takes a line of text that is passed in and reads the first - !! word to see if it is a number. An internal read is used to do this. If - !! it is a number, it is started in ValueRead and returned. The flag IsRealNum - !! is set to true. Otherwise, ValueRead is set to NaN (value from the NWTC_Num) - !! and the flag is set to false. - !! - !! The IsRealNum flag is set to indicate if we actually have a real number or - !! not. After calling this routine, a simple if statement can be used: - !! - !! @code - !! IF (IsRealNum) THEN - !! ! do something - !! ELSE - !! ! do something else - !! ENDIF - !! @endcode - !! - !------------------------------------------------------------------------------- - SUBROUTINE ReadRealNumberFromString(StringToParse, ValueRead, StrRead, IsRealNum, ErrStat, ErrMsg, IOErrStat) - - CHARACTER(*), INTENT(IN ) :: StringToParse !< The string we were handed. - REAL(SiKi), INTENT( OUT) :: ValueRead !< The variable being read. Returns as NaN (library defined) if not a Real. - CHARACTER(*), INTENT( OUT) :: StrRead !< A string containing what was read from the ReadNum routine. - LOGICAL, INTENT( OUT) :: IsRealNum !< Flag indicating if we successfully read a Real - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< ErrID level returned from ReadNum - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message including message from ReadNum - INTEGER(IntKi), INTENT( OUT) :: IOErrStat !< Error status from the internal read. Useful for diagnostics. - - - - ! Initialize some things - ErrStat = ErrID_None - ErrMsg = '' - - - ! ReadNum returns a string contained in StrRead. So, we now try to do an internal read to VarRead and then trap errors. - read(StringToParse,*,IOSTAT=IOErrStat) StrRead - read(StringToParse,*,IOSTAT=IOErrStat) ValueRead - - - ! If IOErrStat==0, then we have a real number, anything else is a problem. - if (IOErrStat==0) then - IsRealNum = .TRUE. - else - IsRealNum = .FALSE. - ValueRead = NaN ! This is NaN as defined in the NWTC_Num. - ErrMsg = 'Not a real number. '//TRIM(ErrMsgTmp)//NewLine - ErrSTat = ErrID_Severe - endif - - - - RETURN - END SUBROUTINE ReadRealNumberFromString - - - !------------------------------------------------------------------------------------------------------------------------------- - !------------------------------------------------------------------------------- - !> This subroutine works with the ReadNum routine from the library. ReadNum is - !! called to read a word from the input file. An internal read is then done to - !! convert the string to a number that is stored in VarRead and returned. - !! - !! The IsRealNum flag is set to indicate if we actually have a real number or - !! not. After calling this routine, a simple if statement can be used: - !! - !! @code - !! IF (ISRealNum) THEN - !! ! do something - !! ELSE - !! ! do something else - !! ENDIF - !! @endcode - !! - !------------------------------------------------------------------------------- - SUBROUTINE ReadRealNumber(UnitNum, FileName, VarName, VarRead, StrRead, IsRealNum, ErrStat, ErrMsg, IOErrStat) - - INTEGER(IntKi), INTENT(IN ) :: UnitNum !< The unit number of the file being read - CHARACTER(*), INTENT(IN ) :: FileName !< The name of the file being read. Used in the ErrMsg from ReadNum (Library routine). - CHARACTER(*), INTENT(IN ) :: VarName !< The variable we are reading. Used in the ErrMsg from ReadNum (Library routine)'. - REAL(SiKi), INTENT( OUT) :: VarRead !< The variable being read. Returns as NaN (library defined) if not a Real. - CHARACTER(*), INTENT( OUT) :: StrRead !< A string containing what was read from the ReadNum routine. - LOGICAL, INTENT( OUT) :: IsRealNum !< Flag indicating if we successfully read a Real - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< ErrID level returned from ReadNum - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message including message from ReadNum - INTEGER(IntKi), INTENT( OUT) :: IOErrStat !< Error status from the internal read. Useful for diagnostics. - - ! Local vars - INTEGER(IntKi) :: ErrStatTmp - CHARACTER(2048) :: ErrMsgTmp - - - - ! Initialize some things - ErrStat = ErrID_None - ErrMsg = '' - - - ! Now call the ReadNum routine to get the number - ! If it is a word that does not start with T or F, then ReadNum won't give any errors. - CALL ReadNum( UnitNum, FileName, StrRead, VarName, ErrStatTmp, ErrMsgTmp) - - - ! ReadNum returns a string contained in StrRead. So, we now try to do an internal read to VarRead and then trap errors. - read(StrRead,*,IOSTAT=IOErrStat) VarRead - - - ! If IOErrStat==0, then we have a real number, anything else is a problem. - if (IOErrStat==0) then - IsRealNum = .TRUE. - else - IsRealNum = .FALSE. - VarRead = NaN ! This is NaN as defined in the NWTC_Num. - ErrMsg = 'Not a real number. '//TRIM(ErrMsgTmp)//NewLine - ErrStat = ErrStatTmp ! The ErrStatTmp returned by the ReadNum routine is an ErrID level. - endif - - - RETURN - END SUBROUTINE ReadRealNumber - - -END SUBROUTINE WaveElev_ReadFile - -!---------------------------------------------------------------------------------------------------------------------------------- - -FUNCTION is_numeric(string, x) - IMPLICIT NONE - CHARACTER(len=*), INTENT(IN) :: string - REAL(SiKi), INTENT(OUT) :: x - LOGICAL :: is_numeric - - INTEGER :: e,n - CHARACTER(len=12) :: fmt - x = 0.0_SiKi - n=LEN_TRIM(string) - WRITE(fmt,'("(F",I0,".0)")') n - READ(string,fmt,IOSTAT=e) x - is_numeric = e == 0 -END FUNCTION is_numeric - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine initializes the wave kinematics based a set of user-supplied wave elevations -!! -!! NOTE: WaveDT in file must match given WaveDT in HydroDyn input file -!! Final timestep must match given WaveTMax in HydroDyn input file -!! NOTE: Wave frequency cutoffs can are applied to the read in wave elevation time series -!! -SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) -!---------------------------------------------------------------------------------------------------------------------------------- - TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine - TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut !< Initialization outputs - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - - ! Local Variables - TYPE(WaveElevInputDataFile) :: WaveElevData !< Wave elevation file data after changing NStepWave - REAL(SiKi), ALLOCATABLE :: TmpFFTWaveElev(:) !< Data for the FFT calculation - TYPE(FFT_DataType) :: FFT_Data !< the instance of the FFT module we're using - INTEGER(IntKi) :: I !< Generic counter - - - ! Temporary error handling variables - INTEGER(IntKi) :: ErrStatTmp !< Temporarary error status for procesing - CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message for processing - CHARACTER(*), PARAMETER :: RoutineName = 'UserWaveElevations_Init' - - ! Data verification: WaveDT in the HD file and in the .Elev file may be slightly different. We will allow - ! some slight differences due to rounding. If necessary, we could change this to a percentage allowable in the future. - REAL(SiKi), PARAMETER :: WaveDT_Tol = 0.001_SiKi !< Allowable difference in WaveDT values - - ! set error status information - ErrStat = ErrID_None - ErrMsg = '' - - - - ! Statement to user - CALL WrScr1 ( ' Reading in wave elevation data from wave kinematics files with root name "'//TRIM(InitInp%WvKinFile)//'".' ) - - ! Read in the wave elevation data - CALL WaveElev_ReadFile (InitInp, WaveElevData, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - ! Check that the file timestep is the same as the HD file, and check that the WaveTMax value of the file is larger than that of HD. - IF ( InitInp%WaveTMax > WaveElevData%WaveTMax ) THEN - CALL SetErrStat(ErrID_Fatal,' HydroDyn requires a minimum of '//TRIM(Num2LStr(InitInp%WaveTMax))//', but '//TRIM(WaveElevData%FileName)// & - ' only contains a maximum time of '//TRIM(Num2LStr(WaveElevData%WaveTMax))//' (last line).',ErrStat,ErrMsg,RoutineName) - ENDIF - - ! Check that the values of WaveDT are the same or similar enough - IF ( ABS(InitInp%WaveDT - WaveElevData%WaveDT) > WaveDT_Tol ) THEN - CALL SetErrStat(ErrID_Fatal,' WaveDT from Hydrodyn ('//TRIM(Num2LStr(InitInp%WaveDT))//') and timestep size in wave elevation file '// & - TRIM(WaveElevData%FileName)//' (WaveDT = '//TRIM(Num2LStr(WaveElevData%WaveDT))//') do not match. These need to be within '// & - TRIM(Num2LStr(WaveDT_Tol))//' seconds of each other.',ErrStat,ErrMsg,RoutineName) - ENDIF - - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - ! Set new value for NStepWave so that the FFT algorithms are efficient. We will use the values passed in rather than what is read from the file - ! NOTE: This method is what is used in the VariousWaves_Init routine in Waves.f90 - - InitOut%NStepWave = CEILING ( InitInp%WaveTMax/InitInp%WaveDT ) ! Set NStepWave to an even integer - IF ( MOD(InitOut%NStepWave,2) == 1 ) InitOut%NStepWave = InitOut%NStepWave + 1 ! larger or equal to WaveTMax/WaveDT. - InitOut%NStepWave2 = MAX( InitOut%NStepWave/2, 1 ) ! Make sure that NStepWave is an even product of small factors (PSF) that is - InitOut%NStepWave = 2*PSF ( InitOut%NStepWave2, 9 ) ! greater or equal to WaveTMax/WaveDT to ensure that the FFT is efficient. - InitOut%NStepWave2 = InitOut%NStepWave/2 ! Update the value of NStepWave2 based on the value needed for NStepWave. - InitOut%WaveTMax = InitOut%NStepWave*InitInp%WaveDT ! Update the value of WaveTMax based on the value needed for NStepWave. - InitOut%WaveDOmega = TwoPi/InitInp%WaveTMax ! Compute the frequency step for incident wave calculations. - - ! Give warning if the number of timesteps changed - IF ( WaveElevData%NStepWave /= InitOut%NStepWave ) THEN - CALL SetErrStat(ErrID_Warn, ' Changed number of timesteps from '//TRIM(Num2LStr(WaveElevData%NStepWave))//' to '// & - TRIM(Num2LStr(InitOut%NStepWave))//' in order to calculate the frequency information from the wave elevations. '// & - 'Wave elevations during additional time are padded with zero wave elevation.',ErrStat,ErrMsg,RoutineName) - ENDIF - - ! Allocate array to hold the wave elevations for calculation of FFT. - ALLOCATE ( TmpFFTWaveElev( 0:InitOut%NStepWave-1 ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpFFTWaveElev.',ErrStat,ErrMsg,RoutineName) - - ! Allocate frequency array for the wave elevation information in frequency space - ALLOCATE ( InitOut%WaveElevC0(2, 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevC0.',ErrStat,ErrMsg,RoutineName) - - - - ! Now check if all the allocations worked properly - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! Set the values - TmpFFTWaveElev = 0.0_SiKi - InitOut%WaveElevC0(:,:) = 0.0_SiKi - - - ! Copy values over - DO I=0,MIN(WaveElevData%NStepWave,InitOut%NStepWave-1) - TmpFFTWaveElev(I) = WaveElevData%WaveElev(I) - ENDDO - - ! Initialize the FFT - CALL InitFFT ( InitOut%NStepWave, FFT_Data, .FALSE., ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while initializing the FFT.',ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! Apply the forward FFT to get the real and imaginary parts of the frequency information. - CALL ApplyFFT_f ( TmpFFTWaveElev(:), FFT_Data, ErrStatTmp ) ! Note that the TmpFFTWaveElev now contains the real and imaginary bits. - CALL SetErrStat(ErrStatTmp,'Error occured while applying the forwards FFT to TmpFFTWaveElev array.',ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - ! Copy the resulting TmpFFTWaveElev(:) data over to the InitOut%WaveElevC0 array - DO I=1,InitOut%NStepWave2-1 - InitOut%WaveElevC0 (1,I) = TmpFFTWaveElev(2*I-1) - InitOut%WaveElevC0 (2,I) = TmpFFTWaveElev(2*I) - ENDDO - InitOut%WaveElevC0(:,InitOut%NStepWave2) = 0.0_SiKi - - CALL ExitFFT(FFT_Data, ErrStatTmp) - CALL SetErrStat(ErrStatTmp,'Error occured while cleaning up after the FFTs.', ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - IF (ALLOCATED( WaveElevData%WaveElev )) DEALLOCATE( WaveElevData%WaveElev, STAT=ErrStatTmp) - IF (ALLOCATED( TmpFFTWaveElev )) DEALLOCATE( TmpFFTWaveElev, STAT=ErrStatTmp) - - - - CONTAINS - - SUBROUTINE CleanUp - - IF (ALLOCATED( WaveElevData%WaveElev )) DEALLOCATE( WaveElevData%WaveElev, STAT=ErrStatTmp) - IF (ALLOCATED( WaveElevData%WaveTime )) DEALLOCATE( WaveElevData%WaveTime, STAT=ErrStatTmp) - IF (ALLOCATED( TmpFFTWaveElev )) DEALLOCATE( TmpFFTWaveElev, STAT=ErrStatTmp) - IF (ALLOCATED( InitOut%WaveElevC0 )) DEALLOCATE( InitOut%WaveElevC0, STAT=ErrStatTmp) - - END SUBROUTINE CleanUp - - -END SUBROUTINE UserWaveElevations_Init - - - -!---------------------------------------------------------------------------------------------------------------------------------- -SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) -! This routine initializes the wave kinematics based on user-supplied data -!---------------------------------------------------------------------------------------------------------------------------------- - TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine - TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Initialization outputs - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - - - INTEGER :: UnWv ! file unit for writing the various wave kinematics files - CHARACTER(1024) :: FileName ! complete filename for one of the output files - INTEGER :: I ! Generic index - INTEGER :: J ! Generic index - INTEGER :: iFile ! Generic index - CHARACTER(64) :: Frmt, Sfrmt - CHARACTER(10) :: Delim - CHARACTER(64), ALLOCATABLE :: WaveDataStr(:,:) - REAL(SiKi), ALLOCATABLE :: WaveData(:,:) - - ! Temporary error handling variables - INTEGER(IntKi) :: ErrStatTmp ! Temporarary error status for procesing - CHARACTER(ErrMsgLen) :: ErrMsgTmp ! Temporary error message for processing - LOGICAL :: isNumeric - CHARACTER(*), PARAMETER :: RoutineName = 'UserWaves_Init' - CHARACTER(5) :: extension(7) - - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - - extension = (/'.Vxi ','.Vyi ','.Vzi ','.Axi ','.Ayi ','.Azi ','.DynP'/) - Delim = '' - - - ! Tell our nice users what is about to happen that may take a while: - - CALL WrScr1 ( ' Reading in wave data from wave kinematics files with root name "'//TRIM(InitInp%WvKinFile)//'".' ) - - - - ! Perform some initialization computations including calculating the - ! total number of time steps in the incident wave and ALLOCATing the - ! arrays; initialize the unneeded values to zero: - InitOut%NStepWave = CEILING ( InitInp%WaveTMax/InitInp%WaveDT ) ! Set NStepWave to an even integer - IF (.NOT. (EqualRealNos( REAL(InitInp%WaveTMax, SiKi) - REAL(InitOut%NStepWave*InitInp%WaveDT, SiKi), 0.0_SiKi ) ) ) THEN - ErrMsg = 'For WaveMod = 5 or 6, WaveTMax must be a multiple of WaveDT' - ErrStat = ErrID_Fatal - RETURN - END IF - - InitOut%NStepWave2 = InitOut%NStepWave/2 - - ALLOCATE ( WaveDataStr (0:InitOut%NStepWave,InitInp%NWaveKin ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDataStr.', ErrStat,ErrMsg,RoutineName) - - ALLOCATE ( InitOut%nodeInWater (0:InitOut%NStepWave,InitInp%NWaveKin ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array outOfWaterFlag.', ErrStat,ErrMsg,RoutineName) - InitOut%nodeInWater = 1 - - ALLOCATE ( WaveData (0:InitOut%NStepWave,InitInp%NWaveKin ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveData.', ErrStat,ErrMsg,RoutineName) - WaveData = 0.0_SiKi - - ALLOCATE ( InitOut%WaveTime (0:InitOut%NStepWave ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveTime.', ErrStat,ErrMsg,RoutineName) - - ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NWaveElev ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev.', ErrStat,ErrMsg,RoutineName) - InitOut%WaveElev = 0.0_SiKi - - ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NWaveKin ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP.', ErrStat,ErrMsg,RoutineName) - - ALLOCATE ( InitOut%WaveVel (0:InitOut%NStepWave,InitInp%NWaveKin,3) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel.', ErrStat,ErrMsg,RoutineName) - - ALLOCATE ( InitOut%WaveAcc (0:InitOut%NStepWave,InitInp%NWaveKin,3) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc.', ErrStat,ErrMsg,RoutineName) - - - - ! Now check if all the allocations worked properly - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - - - ! Read the first file and set the initial values of the - - CALL GetNewUnit( UnWv ) - - FileName = TRIM(InitInp%WvKinFile) // TRIM(extension(1)) - - CALL OpenFInpFile ( UnWv, FileName, ErrStat, ErrMsg ) - IF ( ErrStat /= 0 ) THEN - ErrStat = ErrID_Fatal - ErrMsg = 'Failed to open wave kinematics file, ' // TRIM(FileName) - RETURN - END IF - - - - CALL ReadCom( UnWv, FileName, 'HydroDyn wave kinematics file header line 1', ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) - IF (ErrStat >= AbortErrLev) THEN - CALL Cleanup() - RETURN - END IF - - DO i = 0,InitOut%NStepWave-1 - ! Extract fields from current line - IF (.not. ExtractFields(UnWv, WaveDataStr(i,:), InitInp%NWaveKin)) THEN - call Cleanup() - RETURN - END IF - DO j = 1, InitInp%NWaveKin - - isNumeric = is_numeric(WaveDataStr(i,j), WaveData(i,j)) - IF (.NOT. isNumeric )THEN - InitOut%nodeInWater(i,j) = 0 - WaveData(i,j) = 0.0 - ELSE - InitOut%nodeInWater(i,j) = 1 - END IF - - - END DO - - END DO - - InitOut%WaveVel (:,:,1) = WaveData(:,:) - - ! Now read the remaining files and check that the elements are consistent with the first file - DO iFile = 2,7 - - CALL GetNewUnit( UnWv ) - - FileName = TRIM(InitInp%WvKinFile) // TRIM(extension(iFile)) - - CALL OpenFInpFile ( UnWv, FileName, ErrStat, ErrMsg ) - IF ( ErrStat /= 0 ) THEN - ErrStat = ErrID_Fatal - ErrMsg = 'Failed to open wave kinematics file, ' // TRIM(FileName) - RETURN - END IF - - - - CALL ReadCom( UnWv, FileName, 'HydroDyn wave kinematics file header line 1', ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) - IF (ErrStat >= AbortErrLev) THEN - CALL Cleanup() - RETURN - END IF - - DO i = 0,InitOut%NStepWave-1 - ! Extract fields from current line - IF (.not. ExtractFields(UnWv, WaveDataStr(i,:), InitInp%NWaveKin)) THEN - call Cleanup() - RETURN - END IF - DO j = 1, InitInp%NWaveKin - isNumeric = is_numeric(WaveDataStr(i,j), WaveData(i,j)) - IF ( ( isNumeric .AND. (InitOut%nodeInWater(i,j) == 0) ) .OR. ( .NOT. isNumeric .AND. ( InitOut%nodeInWater(i,j) == 1 ) ) ) THEN - ErrStatTmp = ErrID_Fatal - ErrMsgTmp = 'Element of wave kinematics file must be numerical or non-numerical across all files. Problem was found in ' // TRIM(FileName) // ' on row ' // Num2LStr(i+1) // ' and column ' // Num2LStr(j) - CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) - CALL CleanUp() - RETURN - END IF - - IF (.NOT. isNumeric ) THEN - InitOut%nodeInWater(i,j) = 0 - WaveData(i,j) = 0.0 - ELSE - InitOut%nodeInWater(i,j) = 1 - END IF - END DO - - END DO - SELECT CASE (iFile) - CASE (1) - InitOut%WaveVel (:,:,1) = WaveData(:,:) - CASE (2) - InitOut%WaveVel (:,:,2) = WaveData(:,:) - CASE (3) - InitOut%WaveVel (:,:,3) = WaveData(:,:) - CASE (4) - InitOut%WaveAcc (:,:,1) = WaveData(:,:) - CASE (5) - InitOut%WaveAcc (:,:,2) = WaveData(:,:) - CASE (6) - InitOut%WaveAcc (:,:,3) = WaveData(:,:) - CASE (7) - InitOut%WaveDynP = WaveData - END SELECT - - CLOSE(UnWv) - END DO - - ! WaveTime - DO i = 0,InitOut%NStepWave - InitOut%WaveTime(i) = i*InitInp%WaveDT - END DO - - ! WaveElev - IF ( InitInp%NWaveElev > 0 ) THEN - CALL GetNewUnit( UnWv ) - - FileName = TRIM(InitInp%WvKinFile) // '.Elev' - - CALL OpenFInpFile ( UnWv, FileName, ErrStat, ErrMsg ) - IF ( ErrStat /= 0 ) THEN - ErrStat = ErrID_Fatal - ErrMsg = 'Failed to open wave elevations file, ' // TRIM(FileName) - RETURN - END IF - - Frmt = '('//TRIM(Int2LStr(InitInp%NWaveElev))//'(:,A,ES11.4e2))' - - CALL ReadCom( UnWv, FileName, 'HydroDyn wave elevations file header line 1', ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) - IF (ErrStat >= AbortErrLev) THEN - CALL Cleanup() - RETURN - END IF - - DO i = 0,InitOut%NStepWave-1 - Read(UnWv,Frmt) ( Delim, InitOut%WaveElev(i,j) , j=1,InitInp%NWaveElev ) - END DO - CLOSE(UnWv) - END IF - CALL CleanUp( ) - - ! Need to append the first time step record to the end of each array for periodic waves - InitOut%WaveVel (InitOut%NStepWave,:,:) = InitOut%WaveVel (0,:,:) - InitOut%WaveAcc (InitOut%NStepWave,:,:) = InitOut%WaveAcc (0,:,:) - InitOut%WaveDynP(InitOut%NStepWave,:) = InitOut%WaveDynP(0,: ) - InitOut%WaveElev(InitOut%NStepWave,:) = InitOut%WaveElev(0,:) - InitOut%nodeInWater(InitOut%NStepWave,:) = InitOut%nodeInWater(0,:) - - - - ! For creating animations of the sea surface, the WaveElevXY array is passed in with a series of x,y coordinates - ! (index 1). The second index corresponds to the number of points passed in. A two dimensional time series - ! is created with the first index corresponding to the timestep, and second index corresponding to the second - ! index of the WaveElevXY array. - IF ( ALLOCATED(InitInp%WaveElevXY)) THEN - ALLOCATE ( InitOut%WaveElevSeries (0:InitOut%NStepWave, 1:SIZE(InitInp%WaveElevXY, DIM=2)) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) THEN - CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevSeries.',ErrStat,ErrMsg,'VariousWaves_Init') - RETURN - END IF - ! Calculate the wave elevation at all points requested in the array WaveElevXY - DO I = 0,InitOut%NStepWave - DO J = 1,SIZE(InitInp%WaveElevXY, DIM=2) - InitOut%WaveElevSeries(I,J) = 0.0_ReKi ! TODO, these values should be interpolated based on inputs - ENDDO - ENDDO - ENDIF - - -CONTAINS - - !> Sub function to extract n fields on the current line of the file unit FU - FUNCTION ExtractFields(FU, s, n) result(OK) - ! Arguments - INTEGER, INTENT(IN) :: FU !< Unit name - INTEGER, INTENT(IN) :: n !< Number of fields - CHARACTER(*), INTENT(OUT) :: s(n) !< Fields - LOGICAL :: OK - ! Local var - CHARACTER(65536) :: TextLine !< One line of text read from the file - OK=.TRUE. - - ! Read line - READ(FU, FMT='(A)', IOSTAT=ErrStat) TextLine - IF (ErrStat/=0) THEN - ErrStat = ErrID_Fatal - WRITE(ErrMsg,'(A,I0,A,I0,A)') 'Failed to read line ',I+2,' (out of ',InitOut%NStepWave+1,' expected lines) in file '//TRIM(FileName)//& - & '. Check that the number of lines (without header) is equal to WaveTMax/WaveDT. ' - OK=.FALSE. - RETURN - END IF - - ! Extract fields (ReadCAryFromStr is in NWTC_IO) - CALL ReadCAryFromStr ( TextLine, s, n, 'line', 'junk', ErrStat, ErrMsgTmp ) - IF (ErrStat/=0) THEN - ErrStat = ErrID_Fatal - write(ErrMsg,'(A,I0,A,I0,A)') 'Failed to extract fields from line ',I+2,' in file '//TRIM(FileName)//'. '//& - & trim(ErrMsgTmp)//' Check that the number of columns is correct and matches the number of internal HydroDyn nodes.'//& - &' (Typically twice the number of joints).' - OK=.FALSE. - RETURN - END IF - END FUNCTION ExtractFields - - SUBROUTINE CleanUp( ) - - IF (ALLOCATED( WaveDataStr )) DEALLOCATE( WaveDataStr, STAT=ErrStatTmp) - IF (ALLOCATED( WaveData )) DEALLOCATE( WaveData, STAT=ErrStatTmp) - !IF (ALLOCATED( outOfWaterFlag )) DEALLOCATE( outOfWaterFlag, STAT=ErrStatTmp) - !IF (ALLOCATED( GHWvDpth )) DEALLOCATE( GHWvDpth, STAT=ErrStatTmp) - !IF (ALLOCATED( WaveElev0 )) DEALLOCATE( WaveElev0, STAT=ErrStatTmp) - CLOSE(UnWv) - RETURN - END SUBROUTINE CleanUp - - END SUBROUTINE UserWaves_Init -END MODULE UserWaves diff --git a/modules/hydrodyn/src/WAMIT.f90 b/modules/hydrodyn/src/WAMIT.f90 index bce90bec42..7579ab7e32 100644 --- a/modules/hydrodyn/src/WAMIT.f90 +++ b/modules/hydrodyn/src/WAMIT.f90 @@ -30,6 +30,7 @@ MODULE WAMIT USE SS_Radiation USE SS_Excitation USE NWTC_FFTPACK + use SeaState_Interp IMPLICIT NONE @@ -95,7 +96,7 @@ end subroutine TransformWAMITMatrices !> This routine is called at the start of the simulation to perform initialization steps. !! The parameters are set here and not changed during the simulation. !! The initial states and initial guess for the input are defined. -SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) +SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, ErrStat, ErrMsg ) !.................................................................................................................................. TYPE(WAMIT_InitInputType), INTENT(INOUT) :: InitInp !< Input data for initialization routine. NOTE: we need INOUT because we may be moving the allocation of SS_Excitation data @@ -108,13 +109,12 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init TYPE(WAMIT_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; !! only the output mesh is initialized) TYPE(WAMIT_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables - REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: the rate that + REAL(DbKi), INTENT(IN ) :: Interval !< Coupling interval in seconds: the rate that !! (1) WAMIT_UpdateStates() is called in loose coupling & !! (2) WAMIT_UpdateDiscState() is called in tight coupling. !! Input is the suggested time from the glue code; !! Output is the actual coupling interval that will be used !! by the glue code. - TYPE(WAMIT_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None @@ -136,6 +136,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init REAL(DbKi) :: Interval_Sub ! Local timestep for the SS_Rad and SS_Exc modules, based on RdtnDT COMPLEX(SiKi), ALLOCATABLE :: HdroExctn (:,:,:) ! Frequency- and direction-dependent complex hydrodynamic wave excitation force per unit wave amplitude vector (kg/s^2, kg-m/s^2) COMPLEX(SiKi), ALLOCATABLE :: WaveExctnC(:,:) ! Discrete Fourier transform of the instantaneous value of the total excitation force on the support platfrom from incident waves (N, N-m) + COMPLEX(SiKi), ALLOCATABLE :: WaveExctnCGrid(:,:,:) ! Discrete Fourier transform of the instantaneous value of the total excitation force on the grid points from incident waves (N, N-m) REAL(ReKi) :: DffrctDim (6) ! Matrix used to redimensionalize WAMIT hydrodynamic wave excitation force output (kg/s^2, kg-m/s^2 ) REAL(SiKi), ALLOCATABLE :: HdroAddMs (:,:,:) ! The frequency-dependent hydrodynamic added mass matrix from the radiation problem (kg , kg-m , kg-m^2 ) REAL(SiKi), ALLOCATABLE :: HdroDmpng (:,:,:) ! The frequency-dependent hydrodynamic damping matrix from the radiation problem (kg/s, kg-m/s, kg-m^2/s) @@ -159,8 +160,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init REAL(ReKi), ALLOCATABLE :: WAMITPer (:) ! Period components as ordered in the WAMIT output files (sec ) REAL(ReKi), ALLOCATABLE :: WAMITWvDir(:) ! Wave direction components as ordered in the WAMIT output files (degrees) - INTEGER :: I ! Generic index - INTEGER :: Indx ! Cycles through the upper-triangular portion (diagonal and above) of the frequency-dependent hydrodynamic added mass and damping matrices from the radiation problem + INTEGER :: I,iGrid,iX,iY ! Generic index INTEGER :: InsertInd ! The lowest sorted index whose associated frequency component is higher than the current frequency component -- this is to sort the frequency components from lowest to highest INTEGER :: J ! Generic index INTEGER :: K ! Generic index @@ -181,7 +181,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init LOGICAL :: NewPer ! When .TRUE., indicates that the period has just changed. LOGICAL :: ZeroFreq ! When .TRUE., indicates that the zero -frequency limit of added mass is contained within the WAMIT output files. - CHARACTER(1024) :: Line ! String to temporarily hold the value of a line within a WAMIT output file. + CHARACTER(MaxFileInfoLineLen) :: Line ! String to temporarily hold the value of a line within a WAMIT output file. TYPE(FFT_DataType) :: FFT_Data ! the instance of the FFT module we're using integer(IntKi) :: iSub, jSub ! indices into the 6x6 sub-matrices used to redimensionalize the WAMIT data (Needed because NBodyMod=1 could have WAMIT matrices which are 6N x 6N) @@ -196,6 +196,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init CHARACTER(ErrMsgLen) :: ErrMsg2 ! Temporary error message for calls INTEGER(IntKi) :: ErrStat2 ! Temporary error status for calls COMPLEX(SiKi) :: Ctmp1, Ctmp2, Ctmp4, Ctmp5 ! Temporary COMPLEX transformation terms + character(*), parameter :: RoutineName = 'WAMIT_Init' ! Initialize data @@ -215,33 +216,29 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ErrStat = ErrID_None ErrMsg = "" - - ! Initialize the NWTC Subroutine Library (set pi constants) - - CALL NWTC_Init( ) - ! Copy Output Init data from Waves Module Init call p%NStepWave = InitInp%NStepWave - p%NumOuts = InitInp%NumOuts p%ExctnMod = InitInp%ExctnMod + p%ExctnDisp = InitInp%ExctnDisp + p%ExctnCutOff = InitInp%ExctnCutOff p%NBodyMod = InitInp%NBodyMod p%NBody = InitInp%NBody ! In the context of this WAMIT object NBody is 1 if NBodyMod > 1 [there are NBody different WAMIT objects in this case] - + p%seast_interp_p = InitInp%seast_interp_p ! This module's implementation requires that if NBodyMod = 2 or 3, then there is one instance of a WAMIT module for each body, therefore, HydroDyn may have NBody > 1, but this WAMIT module will have NBody = 1 if ( (p%NBodyMod > 1) .and. (p%NBody > 1) ) then - CALL SetErrStat( ErrID_Fatal, "DEVELOPER ERROR: If NBodyMod = 2 or 3, then NBody for the a WAMIT object must be equal to 1", ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, "DEVELOPER ERROR: If NBodyMod = 2 or 3, then NBody for the a WAMIT object must be equal to 1", ErrStat, ErrMsg, RoutineName) return end if ! Allocate misc var and parameter vectors/matrices - call AllocAry( p%F_HS_Moment_Offset, 6, p%NBody, 'p%F_HS_Moment_Offset', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - call AllocAry( m%F_HS , 6*p%NBody, 'm%F_HS' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - call AllocAry( m%F_Waves1 , 6*p%NBody, 'm%F_Waves1' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - call AllocAry( m%F_Rdtn , 6*p%NBody, 'm%F_Rdtn' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - call AllocAry( m%F_PtfmAM , 6*p%NBody, 'm%F_PtfmAM' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - call AllocAry( p%HdroAdMsI, 6*p%NBody,6*p%NBody, 'p%HdroAdMsI' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - call AllocAry( p%HdroSttc , 6*p%NBody,6*p%NBody, 'p%HdroSttc' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + call AllocAry( p%F_HS_Moment_Offset, 6, p%NBody, 'p%F_HS_Moment_Offset', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call AllocAry( m%F_HS , 6*p%NBody, 'm%F_HS' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call AllocAry( m%F_Waves1 , 6*p%NBody, 'm%F_Waves1' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call AllocAry( m%F_Rdtn , 6*p%NBody, 'm%F_Rdtn' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call AllocAry( m%F_PtfmAM , 6*p%NBody, 'm%F_PtfmAM' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call AllocAry( p%HdroAdMsI, 6*p%NBody,6*p%NBody, 'p%HdroAdMsI' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call AllocAry( p%HdroSttc , 6*p%NBody,6*p%NBody, 'p%HdroSttc' , ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) do iBody = 1, p%NBody @@ -327,7 +324,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! Linear restoring from the hydrostatics problem: CALL OpenFInpFile ( UnWh, TRIM(InitInp%WAMITFile)//'.hst', ErrStat2, ErrMsg2 ) ! Open file. - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -367,7 +364,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! radiation problem: CALL OpenFInpFile ( UnW1, TRIM(InitInp%WAMITFile)//'.1', ErrStat2, ErrMsg2 ) ! Open file. - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -412,12 +409,12 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! to store the frequencies and frequency-dependent hydrodynamic added mass ! and damping matrices: - CALL AllocAry( WAMITFreq, NInpFreq, 'WAMITFreq', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - CALL AllocAry( WAMITPer, NInpFreq, 'WAMITPer', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - CALL AllocAry( SortFreqInd, NInpFreq, 'SortFreqInd', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - CALL AllocAry( HdroFreq, NInpFreq, 'HdroFreq', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - CALL AllocAry( HdroAddMs, NInpFreq, 6*p%NBody, 6*p%NBody, 'HdroAddMs', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - CALL AllocAry( HdroDmpng, NInpFreq, 6*p%NBody, 6*p%NBody, 'HdroDmpng', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL AllocAry( WAMITFreq, NInpFreq, 'WAMITFreq', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL AllocAry( WAMITPer, NInpFreq, 'WAMITPer', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL AllocAry( SortFreqInd, NInpFreq, 'SortFreqInd', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL AllocAry( HdroFreq, NInpFreq, 'HdroFreq', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL AllocAry( HdroAddMs, NInpFreq, 6*p%NBody, 6*p%NBody, 'HdroAddMs', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL AllocAry( HdroDmpng, NInpFreq, 6*p%NBody, 6*p%NBody, 'HdroDmpng', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() @@ -529,7 +526,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init READ (Line,*,IOSTAT=Sttus) TmpPer, I, J, TmpData1 ! Read in the period, row index, column index, and nondimensional data from the WAMIT file IF ( Sttus /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, "Error reading line from WAMIT file", ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, "Error reading line from WAMIT file", ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -548,7 +545,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init READ (Line,*,IOSTAT=Sttus) TmpPer, I, J, TmpData1, TmpData2 ! Read in the period, row index, column index, and nondimensional data from the WAMIT file IF ( Sttus /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, "Error reading line from WAMIT file", ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, "Error reading line from WAMIT file", ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -591,7 +588,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! problem: CALL OpenFInpFile ( UnW3, TRIM(InitInp%WAMITFile)//'.3', ErrStat2, ErrMsg2 ) ! Open file. - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -653,9 +650,9 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! to store the directions and frequency- and direction-dependent complex wave ! excitation force per unit wave amplitude vector: - CALL AllocAry( WAMITWvDir, NInpWvDir, 'WAMITWvDir', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - CALL AllocAry( SortWvDirInd, NInpWvDir, 'SortWvDirInd', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - CALL AllocAry( HdroWvDir, NInpWvDir, 'HdroWvDir', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL AllocAry( WAMITWvDir, NInpWvDir, 'WAMITWvDir', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL AllocAry( SortWvDirInd, NInpWvDir, 'SortWvDirInd', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL AllocAry( HdroWvDir, NInpWvDir, 'HdroWvDir', ErrStat2, ErrMsg2 ); CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -663,7 +660,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ALLOCATE ( HdroExctn (NInpFreq,NInpWvDir,6*p%NBody) , STAT=ErrStat2 ) ! complex so we don't have a built in subroutine IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating space for HdroExctn array', ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, 'Error allocating space for HdroExctn array', ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -692,7 +689,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init READ (Line,*,IOSTAT=Sttus) TmpPer, TmpDir ! Read in only the period and direction from the WAMIT file IF ( Sttus /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error reading period and direction from WAMIT file.', ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, 'Error reading period and direction from WAMIT file.', ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -714,7 +711,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ErrMsg2 = ' Other than zero and infinite frequencies, "' //TRIM(InitInp%WAMITFile)//'.3",' // & ' contains different frequency components than "'//TRIM(InitInp%WAMITFile)//'.1". '// & ' Both WAMIT output files must be generated from the same run.' - CALL SetErrStat( ErrID_Fatal, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -744,7 +741,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ErrMsg2 = ' Not every frequency component in "'//TRIM(InitInp%WAMITFile)//'.3"'// & ' contains the same listing of direction angles. Check for' // & ' errors in the WAMIT output file.' - CALL SetErrStat( ErrID_Fatal, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -787,7 +784,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init READ (Line,*,IOSTAT=Sttus) TmpPer, TmpDir, I, TmpData1, TmpData2, TmpRe, TmpIm ! Read in the period, direction, row index, and nondimensional data from the WAMIT file IF ( Sttus /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error reading period and direction, row index, and nondimensional data from the WAMIT file.', ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, 'Error reading period and direction, row index, and nondimensional data from the WAMIT file.', ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -835,11 +832,8 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init END DO ! End loop through all rows in the file - - - CLOSE ( UnW3 ) ! Close file. - end if + CLOSE ( UnW3 ) ! Close file. ! For some reason, WAMIT computes the zero- and infinite- frequency limits for ! only the added mass. Based on hydrodynamic theory, the damping is zero at @@ -879,7 +873,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init IF ( .NOT. ( ZeroFreq .AND. InfFreq ) ) THEN ! .TRUE. if both the zero- and infinite-frequency limits of added mass are contained within the WAMIT file ErrMsg2 = ' "'//TRIM(InitInp%WAMITFile)// & '.1" must contain both the zero- and infinite-frequency limits of added mass.' - CALL SetErrStat( ErrID_Fatal, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -909,14 +903,14 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! Initialize the variables associated with the incident wave: SELECT CASE ( InitInp%WaveMod ) ! Which incident wave kinematics model are we using? - CASE ( 0 ) ! No waves + CASE ( 0 ) ! No waves, NOTE: for this case we are forcing ExctnDisp = 0, so only p%WaveExctn needs to be allocated, not p%WaveExctnGrid if ( p%ExctnMod == 1 ) then ! Initialize everything to zero: ALLOCATE ( p%WaveExctn (0:InitInp%NStepWave,6*p%NBody) , STAT=ErrStat2 ) IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the WaveExctn array.', ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the WaveExctn array.', ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -930,33 +924,37 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init SS_Exctn_InitInp%NStepWave = p%NStepWave SS_Exctn_InitInp%NBody = InitInp%NBody SS_Exctn_InitInp%PtfmRefztRot = InitInp%PtfmRefztRot - + SS_Exctn_InitInp%ExctnDisp = InitInp%ExctnDisp ! No other modules need this WaveElev0 array so we will simply move the allocation over to the SS_Exctn module IF (ALLOCATED(InitInp%WaveElev0)) CALL MOVE_ALLOC(InitInp%WaveElev0, SS_Exctn_InitInp%WaveElev0) - + !SS_Exctn_InitInp%WaveElev0 => InitInp%WaveElev0 + SS_Exctn_InitInp%WaveElev1 => InitInp%WaveElev1 !TODO: Verify what happens within SS_Exctn when we have no waves. ! We need the WaveTime array to stay intact for use in other modules, so we will make a copy instead of moving the allocation - ALLOCATE ( SS_Exctn_InitInp%WaveTime (0:InitInp%NStepWave) , STAT=ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the SS_Exctn_InitInp%WaveTime array.', ErrStat, ErrMsg, 'WAMIT_Init') - CALL Cleanup() - RETURN - END IF - SS_Exctn_InitInp%WaveTime = InitInp%WaveTime + !ALLOCATE ( SS_Exctn_InitInp%WaveTime (0:InitInp%NStepWave) , STAT=ErrStat2 ) + !IF ( ErrStat2 /= 0 ) THEN + ! CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the SS_Exctn_InitInp%WaveTime array.', ErrStat, ErrMsg, RoutineName) + ! CALL Cleanup() + ! RETURN + !END IF + SS_Exctn_InitInp%WaveTime => InitInp%WaveTime call SS_Exc_Init(SS_Exctn_InitInp, m%SS_Exctn_u, p%SS_Exctn, x%SS_Exctn, xd%SS_Exctn, z%SS_Exctn, OtherState%SS_Exctn, & m%SS_Exctn_y, m%SS_Exctn, Interval_Sub, SS_Exctn_InitOut, ErrStat2, ErrMsg2) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if ( ErrStat >= AbortErrLev ) then call Cleanup() return end if end if - CASE ( 1, 2, 3, 4, 5, 10 ) ! Plane progressive (regular) wave, JONSWAP/Pierson-Moskowitz spectrum (irregular) wave, white-noise wave, or user-defined spectrum (irregular) wave. + CASE ( 1, 2, 3, 4, 5, 7, 10 ) ! Plane progressive (regular) wave, JONSWAP/Pierson-Moskowitz spectrum (irregular) wave, white-noise wave, or user-defined spectrum (irregular) wave. + + if ( p%ExctnMod == 1 ) then + ! Abort if we have chosen a wave heading direction that is outside the range ! of directions where the complex wave excitation force per unit wave ! amplitude vector has been defined, else interpolate to find the complex @@ -965,33 +963,47 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! NOTE: we may end up inadvertantly aborting if the wave direction crosses ! the -Pi / Pi boundary (-180/180 degrees). - IF ( ( InitInp%WaveDirMin < HdroWvDir(1) ) .OR. ( InitInp%WaveDirMax > HdroWvDir(NInpWvDir) ) ) THEN - ErrMsg2 = 'All Wave directions must be within the wave heading angle range available in "' & - //TRIM(InitInp%WAMITFile)//'.3" (inclusive).' - CALL SetErrStat( ErrID_Fatal, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') - CALL Cleanup() - RETURN - END IF + IF ( ( InitInp%WaveDirMin < HdroWvDir(1) ) .OR. ( InitInp%WaveDirMax > HdroWvDir(NInpWvDir) ) ) THEN + ErrMsg2 = 'All Wave directions must be within the wave heading angle range available in "' & + //TRIM(InitInp%WAMITFile)//'.3" (inclusive).' + CALL SetErrStat( ErrID_Fatal, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Cleanup() + RETURN + END IF - if ( p%ExctnMod == 1 ) then - ! Calculate the WaveExctn data from WAMIT data if ExctnMod = 1 ! ALLOCATE the arrays: ALLOCATE ( WaveExctnC(0:InitInp%NStepWave2 ,6*p%NBody) , STAT=ErrStat2 ) IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the WaveExctnC array.', ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the WaveExctnC array.', ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF - ALLOCATE ( p%WaveExctn (0:InitInp%NStepWave,6*p%NBody) , STAT=ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the WaveExctn array.', ErrStat, ErrMsg, 'WAMIT_Init') - CALL Cleanup() - RETURN - END IF + if (p%ExctnDisp > 0 ) then + ALLOCATE ( WaveExctnCGrid(0:InitInp%NStepWave2 ,p%SeaSt_Interp_p%n(2)*p%SeaSt_Interp_p%n(3),6*p%NBody) , STAT=ErrStat2 ) + IF ( ErrStat2 /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the WaveExctnC array.', ErrStat, ErrMsg, RoutineName) + CALL Cleanup() + RETURN + END IF + ALLOCATE ( p%WaveExctnGrid (0:InitInp%NStepWave,p%SeaSt_Interp_p%n(2),p%SeaSt_Interp_p%n(3), 6*p%NBody) , STAT=ErrStat2 ) + IF ( ErrStat2 /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the WaveExctn array.', ErrStat, ErrMsg, RoutineName) + CALL Cleanup() + RETURN + END IF + else + ALLOCATE ( p%WaveExctn (0:InitInp%NStepWave,6*p%NBody) , STAT=ErrStat2 ) + IF ( ErrStat2 /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the WaveExctn array.', ErrStat, ErrMsg, RoutineName) + CALL Cleanup() + RETURN + END IF + end if + !==================================== ! Transform the wave excitation coefs @@ -1003,7 +1015,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init allocate ( HdroExctn_Local(NInpFreq, NInpWvDir, 6), STAT=ErrStat2 ) IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the HdroExctn_Local array.', ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the HdroExctn_Local array.', ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN END IF @@ -1059,7 +1071,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init end do end if - + if (p%ExctnDisp == 0 ) then ! Compute the positive-frequency components (including zero) of the discrete ! Fourier transform of the wave excitation force: @@ -1077,19 +1089,106 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init TmpCoord(1) = Omega TmpCoord(2) = InitInp%WaveDirArr(I) CALL WAMIT_Interp2D_Cplx( TmpCoord, HdroExctn(:,:,J), HdroFreq, HdroWvDir, LastInd2, WaveExctnC(I,J), ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN END IF WaveExctnC(I,J) = WaveExctnC(I,J) * CMPLX(InitInp%WaveElevC0(1,I), InitInp%WaveElevC0(2,I)) + END DO ! J - All wave excitation forces and moments END DO ! I - The positive frequency components (including zero) of the discrete Fourier transform - + ! Compute the inverse discrete Fourier transform to find the time-domain + ! representation of the wave excitation force: + + CALL InitFFT ( InitInp%NStepWave, FFT_Data, .TRUE., ErrStat2 ) + CALL SetErrStat( ErrStat2, 'Error in call to InitFFT.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + + DO J = 1,6*p%NBody ! Loop through all wave excitation forces and moments + CALL ApplyFFT_cx ( p%WaveExctn(0:InitInp%NStepWave-1,J), WaveExctnC(:,J), FFT_Data, ErrStat2 ) + CALL SetErrStat( ErrStat2, ' An error occured while applying an FFT to WaveExctnC.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + + ! Append first datpoint as the last as aid for repeated wave data + p%WaveExctn(InitInp%NStepWave,J) = p%WaveExctn(0,J) + END DO ! J - All wave excitation forces and moments + CALL ExitFFT(FFT_Data, ErrStat2) + CALL SetErrStat( ErrStat2, 'Error in call to ExitFFT.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + else + DO I = 0,InitInp%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transform + + ! Compute the frequency of this component: + + Omega = I*InitInp%WaveDOmega + + ! Compute the discrete Fourier transform of the instantaneous value of the + ! total excitation force on the support platfrom from incident waves: + + DO J = 1,6*p%NBody ! Loop through all wave excitation forces and moments + TmpCoord(1) = Omega + TmpCoord(2) = InitInp%WaveDirArr(I) + CALL WAMIT_Interp2D_Cplx( TmpCoord, HdroExctn(:,:,J), HdroFreq, HdroWvDir, LastInd2, WaveExctnC(I,J), ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL Cleanup() + RETURN + END IF + do iGrid = 1, p%SeaSt_Interp_p%n(2)*p%SeaSt_Interp_p%n(3) + WaveExctnCGrid(I,iGrid,J) = WaveExctnC(I,J) * CMPLX(InitInp%WaveElevC(1,I,iGrid), InitInp%WaveElevC(2,I,iGrid)) + end do + END DO ! J - All wave excitation forces and moments + END DO ! I - The positive frequency components (including zero) of the discrete Fourier transform + + ! Compute the inverse discrete Fourier transform to find the time-domain + ! representation of the wave excitation force: + + CALL InitFFT ( InitInp%NStepWave, FFT_Data, .TRUE., ErrStat2 ) + CALL SetErrStat( ErrStat2, 'Error in call to InitFFT.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + + DO J = 1,6*p%NBody ! Loop through all wave excitation forces and moments + do iGrid = 1, p%SeaSt_Interp_p%n(2)*p%SeaSt_Interp_p%n(3) + iX = mod(iGrid-1, p%SeaSt_Interp_p%n(2)) + 1 ! 1st n index is time + iY = (iGrid-1) / p%SeaSt_Interp_p%n(2) + 1 + CALL ApplyFFT_cx ( p%WaveExctnGrid(0:InitInp%NStepWave-1,iX,iY,J), WaveExctnCGrid(:,iGrid,J), FFT_Data, ErrStat2 ) + CALL SetErrStat( ErrStat2, ' An error occured while applying an FFT to WaveExctnC.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + ! Append first datpoint as the last as aid for repeated wave data + p%WaveExctnGrid(InitInp%NStepWave,iX,iY,J) = p%WaveExctnGrid(0,iX,iY,J) + end do + + END DO ! J - All wave excitation forces and moments + + CALL ExitFFT(FFT_Data, ErrStat2) + CALL SetErrStat( ErrStat2, 'Error in call to ExitFFT.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + + end if + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Dump the HdroFreq variable to a file for debugging @@ -1121,34 +1220,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init !CLOSE ( 66 ) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - ! Compute the inverse discrete Fourier transform to find the time-domain - ! representation of the wave excitation force: - - CALL InitFFT ( InitInp%NStepWave, FFT_Data, .TRUE., ErrStat2 ) - CALL SetErrStat( ErrStat2, 'Error in call to InitFFT.', ErrStat, ErrMsg, 'WAMIT_Init') - IF ( ErrStat >= AbortErrLev) THEN - CALL Cleanup() - RETURN - END IF - - DO J = 1,6*p%NBody ! Loop through all wave excitation forces and moments - CALL ApplyFFT_cx ( p%WaveExctn(0:InitInp%NStepWave-1,J), WaveExctnC(:,J), FFT_Data, ErrStat2 ) - CALL SetErrStat( ErrStat2, ' An error occured while applying an FFT to WaveExctnC.', ErrStat, ErrMsg, 'WAMIT_Init') - IF ( ErrStat >= AbortErrLev) THEN - CALL Cleanup() - RETURN - END IF - - ! Append first datpoint as the last as aid for repeated wave data - p%WaveExctn(InitInp%NStepWave,J) = p%WaveExctn(0,J) - END DO ! J - All wave excitation forces and moments - - CALL ExitFFT(FFT_Data, ErrStat2) - CALL SetErrStat( ErrStat2, 'Error in call to ExitFFT.', ErrStat, ErrMsg, 'WAMIT_Init') - IF ( ErrStat >= AbortErrLev) THEN - CALL Cleanup() - RETURN - END IF + else if ( p%ExctnMod == 2 ) then Interval_Sub = InitInp%Conv_Rdtn%RdtnDT SS_Exctn_InitInp%InputFile = InitInp%WAMITFile @@ -1156,92 +1228,113 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init SS_Exctn_InitInp%NStepWave = p%NStepWave SS_Exctn_InitInp%NBody = InitInp%NBody SS_Exctn_InitInp%PtfmRefztRot = InitInp%PtfmRefztRot - - - - - if (allocated(InitInp%WaveElev0)) then + SS_Exctn_InitInp%SeaSt_Interp_p = InitInp%SeaSt_Interp_p + SS_Exctn_InitInp%ExctnDisp = InitInp%ExctnDisp + ! We have been passed a pointer to WaveElev0 for use by the State Space excitation module. + ! If the special case shown below is not used, then the state space model simply uses WaveElev0, as is. + ! however, if we are using the special case, then WaveElev0 will be modified. This is okay, because no one else + ! is using WaveElev0 data + if (p%ExctnDisp == 0 ) then + if (allocated(InitInp%WaveElev0)) then - ! No other modules need this WaveElev0 array so we will simply move the allocation over to the SS_Exctn module - call MOVE_ALLOC(InitInp%WaveElev0, SS_Exctn_InitInp%WaveElev0) - + ! No other modules need this WaveElev0 array so we will simply move the allocation over to the SS_Exctn module + call MOVE_ALLOC(InitInp%WaveElev0, SS_Exctn_InitInp%WaveElev0) + ! SS_Exctn_InitInp%WaveElev0 => InitInp%WaveElev0 - ! Handle special case when NBodyMod=2 and (PtfmRefxt /= 0 or PtfmRefyt /= 0) : Need to phase shift the wave elevation data for the offset body - if ( p%NBodyMod==2 .and. (InitInp%PtfmRefxt(1) /= 0 .or. InitInp%PtfmRefyt(1) /= 0) ) then + ! Handle special case when NBodyMod=2 and (PtfmRefxt /= 0 or PtfmRefyt /= 0) : Need to phase shift the wave elevation data for the offset body + if ( p%NBodyMod==2 .and. (InitInp%PtfmRefxt(1) /= 0 .or. InitInp%PtfmRefyt(1) /= 0) ) then - ! Need to start with the DFT of the Wave Elevation data at the Platform reference point: InitInp%WaveElevC0 + ! Need to start with the DFT of the Wave Elevation data at the Platform reference point: InitInp%WaveElevC0 - ! Now apply the phase shift in the frequency space + ! Now apply the phase shift in the frequency space - do J = 1, NInpWvDir - do I = 0,InitInp%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transform + do J = 1, NInpWvDir + do I = 0,InitInp%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transform - ! Compute the frequency of this component: + ! Compute the frequency of this component: - Omega = I*InitInp%WaveDOmega - ! Fxy = exp(-j * k(w) * ( X*cos(Beta(w)) + Y*sin(Beta(w)) ) - WaveNmbr = WaveNumber ( Omega, InitInp%Gravity, InitInp%WtrDpth ) - tmpAngle = WaveNmbr * ( InitInp%PtfmRefxt(1)*cos(HdroWvDir(J)*D2R) + InitInp%PtfmRefyt(1)*sin(HdroWvDir(J)*D2R) ) - TmpRe = cos(tmpAngle) - TmpIm = -sin(tmpAngle) - Fxy = CMPLX( TmpRe, TmpIm ) + Omega = I*InitInp%WaveDOmega + ! Fxy = exp(-j * k(w) * ( X*cos(Beta(w)) + Y*sin(Beta(w)) ) + WaveNmbr = WaveNumber ( Omega, InitInp%Gravity, InitInp%WtrDpth ) + tmpAngle = WaveNmbr * ( InitInp%PtfmRefxt(1)*cos(HdroWvDir(J)*D2R) + InitInp%PtfmRefyt(1)*sin(HdroWvDir(J)*D2R) ) + TmpRe = cos(tmpAngle) + TmpIm = -sin(tmpAngle) + Fxy = CMPLX( TmpRe, TmpIm ) - tmpComplexArr(I) = Fxy*CMPLX(InitInp%WaveElevC0(1,I), InitInp%WaveElevC0(2,I)) + tmpComplexArr(I) = Fxy*CMPLX(InitInp%WaveElevC0(1,I), InitInp%WaveElevC0(2,I)) - end do - end do + end do + end do - ! Compute the inverse discrete Fourier transforms to find the time-domain - ! representations of the wave kinematics without stretcing: + ! Compute the inverse discrete Fourier transforms to find the time-domain + ! representations of the wave kinematics without stretching: - CALL InitFFT ( InitInp%NStepWave, FFT_Data, .TRUE., ErrStat2 ) - CALL SetErrStat(ErrStat2,'Error occured while initializing the FFT.',ErrStat,ErrMsg,'WAMIT_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF + CALL InitFFT ( InitInp%NStepWave, FFT_Data, .TRUE., ErrStat2 ) + CALL SetErrStat(ErrStat2,'Error occured while initializing the FFT.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF - ! We'll need the following for wave stretching once we implement it. - CALL ApplyFFT_cx ( SS_Exctn_InitInp%WaveElev0(0:InitInp%NStepWave-1), tmpComplexArr(: ), FFT_Data, ErrStat2 ) - CALL SetErrStat(ErrStat2,'Error occured while applying the FFT to WaveElev0.',ErrStat,ErrMsg,'WAMIT_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - CALL ExitFFT(FFT_Data, ErrStat2) - CALL SetErrStat( ErrStat2, 'Error in call to ExitFFT.', ErrStat, ErrMsg, 'WAMIT_Init') - IF ( ErrStat >= AbortErrLev) THEN - CALL Cleanup() + ! We'll need the following for wave stretching once we implement it. + CALL ApplyFFT_cx ( SS_Exctn_InitInp%WaveElev0(0:InitInp%NStepWave-1), tmpComplexArr(: ), FFT_Data, ErrStat2 ) + CALL SetErrStat(ErrStat2,'Error occured while applying the FFT to WaveElev0.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() RETURN END IF + + CALL ExitFFT(FFT_Data, ErrStat2) + CALL SetErrStat( ErrStat2, 'Error in call to ExitFFT.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF - end if + end if + else + !TODO: Error message because we need WaveElev0 for ExctnDisp=0 + end if + else + SS_Exctn_InitInp%WaveElev1 => InitInp%WaveElev1 + end if + ! We need the WaveTime array to stay intact for use in other modules, so we will make a copy instead of moving the allocation - ALLOCATE ( SS_Exctn_InitInp%WaveTime (0:InitInp%NStepWave) , STAT=ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the SS_Exctn_InitInp%WaveTime array.', ErrStat, ErrMsg, 'WAMIT_Init') - CALL Cleanup() - RETURN - END IF - SS_Exctn_InitInp%WaveTime = InitInp%WaveTime + !ALLOCATE ( SS_Exctn_InitInp%WaveTime (0:InitInp%NStepWave) , STAT=ErrStat2 ) + !IF ( ErrStat2 /= 0 ) THEN + ! CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the SS_Exctn_InitInp%WaveTime array.', ErrStat, ErrMsg, RoutineName) + ! CALL Cleanup() + ! RETURN + !END IF + SS_Exctn_InitInp%WaveTime => InitInp%WaveTime - end if + call SS_Exc_Init(SS_Exctn_InitInp, m%SS_Exctn_u, p%SS_Exctn, x%SS_Exctn, xd%SS_Exctn, z%SS_Exctn, OtherState%SS_Exctn, & m%SS_Exctn_y, m%SS_Exctn, Interval_Sub, SS_Exctn_InitOut, ErrStat2, ErrMsg2) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if ( ErrStat >= AbortErrLev ) then call Cleanup() return end if end if + IF ( (p%ExctnMod>0) .AND. (p%ExctnDisp==2) ) THEN ! Allocate array for filtered potential-flow body positions + p%ExctnFiltConst = exp(-2.0*Pi*p%ExctnCutOff * Interval) + ALLOCATE ( xd%BdyPosFilt(1:2, 1:p%NBody, 1:3) , STAT=ErrStat2 ) + IF ( ErrStat2 /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating memory for the BdyPosFilt array.', ErrStat, ErrMsg, RoutineName) + CALL Cleanup() + RETURN + END IF + xd%BdyPosFilt = 0.0_ReKi + END IF + CASE ( 6 ) ! User wave data. - CALL SetErrStat( ErrID_Fatal, 'User input wave data not applicable for floating platforms.', ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrID_Fatal, 'User input wave data not applicable for floating platforms.', ErrStat, ErrMsg, RoutineName) CALL Cleanup() RETURN @@ -1258,6 +1351,13 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init if ( InitInp%RdtnMod == 1 ) THEN + ! this check used to occur with equivalent variables after calling Conv_Rdtn_Init + if (.not. EqualRealNos( InitInp%Conv_Rdtn%RdtnDT, Interval) ) then + call SetErrStat(ErrID_Fatal,'RdtnDT must be the same as the HD time step', ErrStat, ErrMsg, RoutineName) + call Cleanup() + return + end if + ! Set Initialization data for the Conv_Rdtn submodule ! Would be nice if there were a copy InitInput function in the *_Types file ! BJJ 6/25/2014: There is a copy InitInput function.... ??? @@ -1265,19 +1365,18 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init CALL MOVE_ALLOC( HdroFreq, Conv_Rdtn_InitInp%HdroFreq ) CALL MOVE_ALLOC( HdroAddMs, Conv_Rdtn_InitInp%HdroAddMs ) CALL MOVE_ALLOC( HdroDmpng, Conv_Rdtn_InitInp%HdroDmpng ) - Conv_Rdtn_InitInp%NBody = InitInp%NBody + Conv_Rdtn_InitInp%NBody = InitInp%NBody Conv_Rdtn_InitInp%RdtnTMax = InitInp%RdtnTMax - Conv_Rdtn_InitInp%RdtnDT = InitInp%Conv_Rdtn%RdtnDT - Conv_Rdtn_InitInp%HighFreq = HighFreq - Conv_Rdtn_InitInp%WAMITFile = InitInp%WAMITFile - Conv_Rdtn_InitInp%NInpFreq = NInpFreq - Conv_Rdtn_InitInp%UnSum = InitInp%Conv_Rdtn%UnSum + Conv_Rdtn_InitInp%RdtnDT = InitInp%Conv_Rdtn%RdtnDT + Conv_Rdtn_InitInp%HighFreq = HighFreq + Conv_Rdtn_InitInp%WAMITFile = InitInp%WAMITFile + Conv_Rdtn_InitInp%NInpFreq = NInpFreq CALL Conv_Rdtn_Init(Conv_Rdtn_InitInp, m%Conv_Rdtn_u, p%Conv_Rdtn, x%Conv_Rdtn, xd%Conv_Rdtn, z%Conv_Rdtn, OtherState%Conv_Rdtn, & - m%Conv_Rdtn_y, m%Conv_Rdtn, Interval, Conv_Rdtn_InitOut, ErrStat2, ErrMsg2) + m%Conv_Rdtn_y, m%Conv_Rdtn, Conv_Rdtn_InitOut, ErrStat2, ErrMsg2) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -1289,7 +1388,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init SS_Rdtn_InitInp%InputFile = InitInp%WAMITFile - call AllocAry(SS_Rdtn_InitInp%enabledDOFs, 6*p%NBody, 'SS_Rdtn_InitInp%enabledDOFs', ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'WAMIT_Init') + call AllocAry(SS_Rdtn_InitInp%enabledDOFs, 6*p%NBody, 'SS_Rdtn_InitInp%enabledDOFs', ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -1297,7 +1396,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init SS_Rdtn_InitInp%enabledDOFs = 1 ! Set to 1 (True) for all DOFs, meaning each DOF is to be used in the analysis. Interval_Sub = InitInp%Conv_Rdtn%RdtnDT SS_Rdtn_InitInp%NBody = InitInp%NBody - call AllocAry(SS_Rdtn_InitInp%PtfmRefztRot, p%NBody, 'SS_Rdtn_InitInp%PtfmRefztRot', ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'WAMIT_Init') + call AllocAry(SS_Rdtn_InitInp%PtfmRefztRot, p%NBody, 'SS_Rdtn_InitInp%PtfmRefztRot', ErrStat2, ErrMsg2); call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -1306,7 +1405,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init CALL SS_Rad_Init(SS_Rdtn_InitInp, m%SS_Rdtn_u, p%SS_Rdtn, x%SS_Rdtn, xd%SS_Rdtn, z%SS_Rdtn, OtherState%SS_Rdtn, & m%SS_Rdtn_y, m%SS_Rdtn, Interval_Sub, SS_Rdtn_InitOut, ErrStat2, ErrMsg2) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -1354,7 +1453,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ,TranslationAcc = .TRUE. & ,RotationAcc = .TRUE.) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -1375,7 +1474,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init , ErrMsg2 & , orientation ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ! Create the mesh element @@ -1385,14 +1484,14 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init , ErrMsg2 & , iBody & ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) end do CALL MeshCommit ( u%Mesh & , ErrStat2 & , ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -1407,7 +1506,7 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ,Force = .TRUE. & ,Moment = .TRUE. ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'WAMIT_Init') + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL Cleanup() RETURN @@ -1434,13 +1533,13 @@ SUBROUTINE Cleanup() ! destroy local variables that are types in the framework: - CALL Conv_Rdtn_DestroyInitInput( Conv_Rdtn_InitInp, ErrStat2, ErrMsg2 ) - CALL Conv_Rdtn_DestroyInitOutput( Conv_Rdtn_InitOut, ErrStat2, ErrMsg2 ) + CALL Conv_Rdtn_DestroyInitInput( Conv_Rdtn_InitInp, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) + CALL Conv_Rdtn_DestroyInitOutput( Conv_Rdtn_InitOut, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) - CALL SS_Rad_DestroyInitInput( SS_Rdtn_InitInp, ErrStat2, ErrMsg2 ) - CALL SS_Rad_DestroyInitOutput( SS_Rdtn_InitOut, ErrStat2, ErrMsg2 ) - CALL SS_Exc_DestroyInitInput( SS_Exctn_InitInp, ErrStat2, ErrMsg2 ) - CALL SS_Exc_DestroyInitOutput( SS_Exctn_InitOut, ErrStat2, ErrMsg2 ) + CALL SS_Rad_DestroyInitInput( SS_Rdtn_InitInp, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) + CALL SS_Rad_DestroyInitOutput( SS_Rdtn_InitOut, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) + CALL SS_Exc_DestroyInitInput( SS_Exctn_InitInp, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) + CALL SS_Exc_DestroyInitOutput( SS_Exctn_InitOut, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) ! destroy local variables that are allocatable arrays: @@ -1500,8 +1599,7 @@ SUBROUTINE WAMIT_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ! Destroy the parameter data: - - CALL WAMIT_DestroyParam( p, ErrStat, ErrMsg ) + CALL WAMIT_DestroyParam( p, ErrStat, ErrMsg, DEALLOCATEpointers=.false. ) ! Destroy the state data: @@ -1555,15 +1653,16 @@ SUBROUTINE WAMIT_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherState ! INTEGER(IntKi) :: ErrStat2 ! Error status of the operation (secondary error) ! CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat2 /= ErrID_None - + REAL(ReKi) :: bodyPosition(2) ! Create dummy variables required by framework but which are not used by the module TYPE(Conv_Rdtn_InputType), ALLOCATABLE :: Conv_Rdtn_u(:) ! Inputs TYPE(SS_Rad_InputType), ALLOCATABLE :: SS_Rdtn_u(:) ! Inputs - TYPE(SS_Exc_InputType), ALLOCATABLE :: SS_Exctn_u(:) ! Inputs - + TYPE(SS_Exc_InputType), ALLOCATABLE :: SS_Exctn_u(:) ! Inputs + TYPE(WAMIT_InputType), ALLOCATABLE :: WAMIT_u(:) ! Inputs + TYPE(WAMIT_InputType) :: WAMIT_u_t ! Initialize ErrStat @@ -1574,7 +1673,7 @@ SUBROUTINE WAMIT_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherState nTime = size(Inputs) - IF ( p%RdtnMod == 1 ) THEN ! Update the convolution radiation memory effect sub-module's state + IF ( p%RdtnMod == 1 ) THEN ! Update the convolution radiation memory effect sub-module's state ! Allocate array of Conv_Rdtn inputs @@ -1632,7 +1731,41 @@ SUBROUTINE WAMIT_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherState END IF - if ( p%ExctnMod == 2 ) then ! Update the state-space wave excitation sub-module's states + IF ( (p%ExctnMod>0).AND.(p%ExctnDisp==2) ) THEN + ALLOCATE( WAMIT_u(nTime), STAT = ErrStat ) + IF (ErrStat /=0) THEN + ErrMsg = ' Failed to allocate array WAMIT_u.' + RETURN + END IF + DO I=1,nTime + ALLOCATE( WAMIT_u(I)%Mesh%TranslationDisp(3,p%NBody), STAT = ErrStat ) + IF (ErrStat /=0) THEN + ErrMsg = ' Failed to allocate array WAMIT_u(I)%Mesh%TranslationDisp.' + RETURN + END IF + DO iBody=1,p%NBody + WAMIT_u(I)%Mesh%TranslationDisp(:,iBody) = Inputs(I)%Mesh%TranslationDisp(:,iBody) + END DO + END DO + ! Interpolate WAMIT input at time t+dt + CALL WAMIT_Input_ExtrapInterp(WAMIT_u, InputTimes, WAMIT_u_t, t+p%dt, ErrStat, ErrMsg) + DO iBody = 1,p%NBody + ! Current unfiltered body position at time t+dt + bodyPosition(1) = WAMIT_u_t%Mesh%TranslationDisp(1,iBody) + bodyPosition(2) = WAMIT_u_t%Mesh%TranslationDisp(2,iBody) + ! Filtered body position + xd%BdyPosFilt(:,iBody,3) = xd%BdyPosFilt(:,iBody,2) + xd%BdyPosFilt(:,iBody,2) = xd%BdyPosFilt(:,iBody,1) + xd%BdyPosFilt(1,iBody,1) = p%ExctnFiltConst * xd%BdyPosFilt(1,iBody,1) + (1.0_ReKi - p%ExctnFiltConst) * bodyPosition(1) + xd%BdyPosFilt(2,iBody,1) = p%ExctnFiltConst * xd%BdyPosFilt(2,iBody,1) + (1.0_ReKi - p%ExctnFiltConst) * bodyPosition(2) + END DO + CALL WAMIT_DestroyInput( WAMIT_u_t, ErrStat, ErrMsg) + DO I=1,nTime + CALL WAMIT_DestroyInput( WAMIT_u(I), ErrStat, ErrMsg) + END DO + DEALLOCATE(WAMIT_u) + END IF + IF ( p%ExctnMod == 2 ) THEN ! Update the state-space wave excitation sub-module's states ! Allocate array of dummy SS_Excitation inputs for the framework @@ -1641,12 +1774,50 @@ SUBROUTINE WAMIT_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherState ErrMsg = ' Failed to allocate array SS_Exctn_u.' return end if + if (p%ExctnDisp == 1) then ! Use unfiltered position + DO I=1,nTime + ALLOCATE( SS_Exctn_u(I)%PtfmPos(3,p%NBody), STAT = ErrStat ) + IF (ErrStat /=0) THEN + ErrMsg = ' Failed to allocate array SS_Exctn_u(I)%PtfmPos.' + RETURN + END IF + if (p%NBodyMod == 2) then + do iBody=1,p%NBody + SS_Exctn_u(I)%PtfmPos(:,iBody) = Inputs(I)%Mesh%TranslationDisp(:,iBody) + Inputs(I)%Mesh%Position(:,iBody) + end do + else + do iBody=1,p%NBody + SS_Exctn_u(I)%PtfmPos(:,iBody) = Inputs(I)%Mesh%TranslationDisp(:,iBody) + end do + end if + + END DO + else if (p%ExctnDisp == 2) then ! Use filtered position (only need x and y coordinates) + DO I=1,nTime + ALLOCATE( SS_Exctn_u(I)%PtfmPos(3,p%NBody), STAT = ErrStat ) + IF (ErrStat /=0) THEN + ErrMsg = ' Failed to allocate array SS_Exctn_u(I)%PtfmPos.' + RETURN + END IF + if (p%NBodyMod == 2) then + do iBody=1,p%NBody + SS_Exctn_u(I)%PtfmPos(1:2,iBody) = xd%BdyPosFilt(:,iBody,I) + Inputs(I)%Mesh%Position(1:2,iBody) + end do + else + do iBody=1,p%NBody + SS_Exctn_u(I)%PtfmPos(1:2,iBody) = xd%BdyPosFilt(:,iBody,I) + end do + end if + + END DO + + end if call SS_Exc_UpdateStates( t, n, SS_Exctn_u, InputTimes, p%SS_Exctn, x%SS_Exctn, xd%SS_Exctn, z%SS_Exctn, OtherState%SS_Exctn, m%SS_Exctn, ErrStat, ErrMsg ) deallocate(SS_Exctn_u) - end if + END IF END SUBROUTINE WAMIT_UpdateStates !---------------------------------------------------------------------------------------------------------------------------------- @@ -1674,16 +1845,16 @@ SUBROUTINE WAMIT_CalcOutput( Time, WaveTime, u, p, x, xd, z, OtherState, y, m, E !REAL(ReKi) :: F_HS (6) ! Total load contribution from hydrostatics, including the effects of waterplane area and the center of buoyancy (N, N-m) !REAL(ReKi) :: F_Waves (6) ! Total load contribution from incident waves (i.e., the diffraction problem) (N, N-m) !REAL(ReKi) :: F_Rdtn (6) ! Total load contribution from wave radiation damping (i.e., the diffraction problem) (N, N-m) - INTEGER(IntKi) :: I ! Generic index - INTEGER(IntKi) :: J ! Generic index -! INTEGER(IntKi) :: K ! Generic index + INTEGER(IntKi) :: I,iStart ! Generic index REAL(ReKi) :: q(6*p%NBody), qdot(6*p%NBody), qdotdot(6*p%NBody) ! kinematics for all WAMIT bodies REAL(ReKi) :: rotdisp(3) ! small angle rotational displacements - REAL(ReKi) :: AllOuts(MaxWAMITOutputs) integer(IntKi) :: iBody ! Counter for WAMIT bodies. If NBodyMod > 1 then NBody = 1, and hence iBody = 1 integer(IntKi) :: indxStart, indxEnd ! Starting and ending indices for the iBody_th sub vector in an NBody long vector - - + real(ReKi) :: bodyPosition(2) ! x-y displaced location of a WAMIT body (relative to + ! Error handling + CHARACTER(1024) :: ErrMsg2 ! Temporary error message for calls + INTEGER(IntKi) :: ErrStat2 ! Temporary error status for calls + ! Initialize ErrStat ErrStat = ErrID_None @@ -1700,18 +1871,44 @@ SUBROUTINE WAMIT_CalcOutput( Time, WaveTime, u, p, x, xd, z, OtherState, y, m, E m%F_Waves1 = 0.0_ReKi else if ( p%ExctnMod == 1 ) then - - ! Abort if the wave excitation loads have not been computed yet: - IF ( .NOT. ALLOCATED ( p%WaveExctn ) ) THEN - ErrMsg = ' Routine WAMIT_Init() must be called before routine WAMIT_CalcOutput().' - ErrStat = ErrID_Fatal - RETURN - END IF - DO I = 1,6*p%NBody ! Loop through all wave excitation forces and moments - m%F_Waves1(I) = InterpWrappedStpReal ( REAL(Time, SiKi), WaveTime(:), p%WaveExctn(:,I), & - m%LastIndWave, p%NStepWave + 1 ) - END DO ! I - All wave excitation forces and moments + if ( p%ExctnDisp == 0 ) then + ! Abort if the wave excitation loads have not been computed yet: + IF ( .NOT. ALLOCATED ( p%WaveExctn ) ) THEN + ErrMsg = ' Routine WAMIT_Init() must be called before routine WAMIT_CalcOutput().' + ErrStat = ErrID_Fatal + RETURN + END IF + + DO I = 1,6*p%NBody ! Loop through all wave excitation forces and moments + m%F_Waves1(I) = InterpWrappedStpReal ( REAL(Time, SiKi), WaveTime(:), p%WaveExctn(:,I), & + m%LastIndWave, p%NStepWave + 1 ) + END DO ! I - All wave excitation forces and moments + else ! p%ExctnDisp > 0 + IF ( .NOT. allocated ( p%WaveExctnGrid ) ) THEN + ErrMsg = ' Routine WAMIT_Init() must be called before routine WAMIT_CalcOutput().' + ErrStat = ErrID_Fatal + RETURN + END IF + ! We are using the displaced x,y location of the WAMIT bodies to determine the Wave Exication force + + DO iBody = 1,p%NBody + IF ( p%ExctnDisp == 1 ) THEN + ! Current unfiltered body position + bodyPosition(1) = u%Mesh%TranslationDisp(1,iBody) + bodyPosition(2) = u%Mesh%TranslationDisp(2,iBody) + ELSE IF ( p%ExctnDisp == 2 ) THEN + ! Use filtered body position + bodyPosition(1) = xd%BdyPosFilt(1,iBody,1) + bodyPosition(2) = xd%BdyPosFilt(2,iBody,1) + END IF + iStart = (iBody-1)*6+1 + ! WaveExctnGrid dimensions are: 1st: wavetime, 2nd: X, 3rd: Y, 4th: Force component for each WAMIT Body + m%F_Waves1(iStart:iStart+5) = SeaSt_Interp_3D_Vec6( Time, bodyPosition, p%WaveExctnGrid(:,:,:,iStart:iStart+5), p%SeaSt_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + END DO + end if + else if ( p%ExctnMod == 2 ) then call SS_Exc_CalcOutput( Time, m%SS_Exctn_u, p%SS_Exctn, x%SS_Exctn, xd%SS_Exctn, & @@ -1817,7 +2014,7 @@ SUBROUTINE WAMIT_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, integer(IntKi) :: iBody ! WAMIT body index integer(IntKi) :: indxStart ! Starting and ending indices for the iBody_th sub vector in an NBody long vector - + real(SiKi) :: waveElev0(p%NBody) ! Initialize ErrStat ErrStat = ErrID_None @@ -1838,7 +2035,8 @@ SUBROUTINE WAMIT_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, ! NOTE: The input below (0.0) will only work as part of a linearization Get_OP call! If this routine (WAMIT_CalcContStateDeriv) is called in another context, then the following ! input needs to be implemented generically. As of Aug 10, 2020, this is only called for Get_OP related work. GJH if (p%ExctnMod == 2) then - CALL SS_Exc_CalcContStateDeriv( Time, 0.0_SiKi, p%SS_Exctn, x%SS_Exctn, xd%SS_Exctn, z%SS_Exctn, OtherState%SS_Exctn, m%SS_Exctn, dxdt%SS_Exctn, ErrStat, ErrMsg ) + waveElev0 = 0.0_SiKi + CALL SS_Exc_CalcContStateDeriv( Time, waveElev0, p%SS_Exctn, x%SS_Exctn, xd%SS_Exctn, z%SS_Exctn, OtherState%SS_Exctn, m%SS_Exctn, dxdt%SS_Exctn, ErrStat, ErrMsg ) end if END SUBROUTINE WAMIT_CalcContStateDeriv diff --git a/modules/hydrodyn/src/WAMIT.txt b/modules/hydrodyn/src/WAMIT.txt index 0317f50c9f..4e9d618998 100644 --- a/modules/hydrodyn/src/WAMIT.txt +++ b/modules/hydrodyn/src/WAMIT.txt @@ -16,12 +16,13 @@ include Registry_NWTC_Library.txt usefrom Conv_Radiation.txt usefrom SS_Radiation.txt usefrom SS_Excitation.txt -usefrom Waves.txt -param WAMIT/WAMIT unused INTEGER MaxWAMITOutputs - 18 - "" - -typedef ^ InitInputType INTEGER NBody - - - "[>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6]" - +#usefrom Waves.txt +usefrom SeaState_Interp.txt + +typedef WAMIT/WAMIT InitInputType INTEGER NBody - - - "[>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6]" - typedef ^ ^ INTEGER NBodyMod - - - "Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1]" - typedef ^ ^ ReKi Gravity - - - "Supplied by Driver: Gravitational acceleration" "(m/s^2)" -typedef ^ ^ SiKi WtrDpth - - - "Water depth (positive-valued)" m +typedef ^ ^ ReKi WtrDpth - - - "Water depth (positive-valued)" m typedef ^ ^ ReKi PtfmVol0 {:} - - "" - typedef ^ ^ LOGICAL HasWAMIT - - - ".TRUE. if using WAMIT model, .FALSE. otherwise" - typedef ^ ^ ReKi WAMITULEN - - - "" - @@ -33,6 +34,8 @@ typedef ^ ^ ReKi typedef ^ ^ ReKi PtfmCOByt {:} - - "" - typedef ^ ^ INTEGER RdtnMod - - - "" - typedef ^ ^ INTEGER ExctnMod - - - "" - +typedef ^ ^ INTEGER ExctnDisp - - - "0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0]" - +typedef ^ ^ ReKi ExctnCutOff - - - "Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] " Hz typedef ^ ^ DbKi RdtnTMax - - - "" - typedef ^ ^ ReKi WaveDir - - - "" - typedef ^ ^ CHARACTER(1024) WAMITFile - - - "" - @@ -44,20 +47,20 @@ typedef ^ ^ INTEGER typedef ^ ^ INTEGER NStepWave2 - - - "" - typedef ^ ^ ReKi WaveDOmega - - - "" - typedef ^ ^ SiKi WaveElev0 {:} - - "Wave elevation time history at origin (needed for SS_Excitation module)" m -typedef ^ ^ SiKi WaveElevC0 {:}{:} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part" (meters) -typedef ^ ^ SiKi WaveTime {:} - - "" - +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation (points to SeaState module data)" - +typedef ^ ^ SiKi WaveElevC0 {*}{*} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part (points to SeaState module data)" (meters) +typedef ^ ^ SiKi WaveElevC {:}{:}{:} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at all grid points. First column is real part, second column is imaginary part" (meters) +typedef ^ ^ SiKi WaveTime {*} - - "(points to SeaState module data)" - typedef ^ ^ INTEGER WaveMod - - - "" - typedef ^ ^ ReKi WtrDens - - - "" - -typedef ^ ^ SiKi WaveDirArr {:} - - "Array of wave directions (one per frequency) from the Waves module" - +typedef ^ ^ SiKi WaveDirArr {*} - - "Array of wave directions (one per frequency) from the Waves module (points to SeaState module data)" - typedef ^ ^ SiKi WaveDirMin - - - "Minimum wave direction from Waves module" - typedef ^ ^ SiKi WaveDirMax - - - "Maximum wave direction from Waves module" - -typedef ^ ^ CHARACTER(ChanLen) OutList {18} - - "This should really be dimensioned with MaxOutPts" - -typedef ^ ^ LOGICAL OutAll - - - "" - -typedef ^ ^ INTEGER NumOuts - - - "" - +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - # # # Define outputs from the initialization routine here: -typedef ^ InitOutputType ReKi NULLVAL - - - "" - +#typedef ^ InitOutputType IntKi NULLVAL - - - "" - # # # ..... States .................................................................................................................... @@ -73,6 +76,7 @@ typedef ^ ^ Conv_Rdtn_C typedef ^ DiscreteStateType Conv_Rdtn_DiscreteStateType Conv_Rdtn - - - "discrete states from the convolution radiation module" - typedef ^ DiscreteStateType SS_Rad_DiscreteStateType SS_Rdtn - - - "placeholder" - typedef ^ DiscreteStateType SS_Exc_DiscreteStateType SS_Exctn - - - "placeholder" - +typedef ^ DiscreteStateType ReKi BdyPosFilt {:}{:}{:} - - "Low-pass filtered WAMIT body position at the current and previous steps used when ExctnDisp=2" # # # Define constraint states here: @@ -106,6 +110,7 @@ typedef ^ ^ SS_Exc_Outp typedef ^ ^ Conv_Rdtn_MiscVarType Conv_Rdtn - - - "" - typedef ^ ^ Conv_Rdtn_InputType Conv_Rdtn_u - - - "" - typedef ^ ^ Conv_Rdtn_OutputType Conv_Rdtn_y - - - "" - +typedef ^ ^ SeaSt_Interp_MiscVarType SeaSt_Interp_m - - - "misc var information from the SeaState Interpolation module" - # ..... Parameters ................................................................................................................ # Define parameters here: @@ -118,19 +123,17 @@ typedef ^ ^ SiKi typedef ^ ^ SiKi HdroSttc {:}{:} - - "" - typedef ^ ^ INTEGER RdtnMod - - - "" - typedef ^ ^ INTEGER ExctnMod - - - "" - +typedef ^ ^ INTEGER ExctnDisp - - - "0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0]" - +typedef ^ ^ ReKi ExctnCutOff - - - "Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] " Hz +typedef ^ ^ ReKi ExctnFiltConst - - - "Low-pass time filter constant computed from ExctnCutOff" typedef ^ ^ SiKi WaveExctn {:}{:} - - "" - +typedef ^ ^ SiKi WaveExctnGrid {:}{:}{:}{:} - - "WaveExctnGrid dimensions are: 1st: wavetime, 2nd: X, 3rd: Y, 4th: Force component for eac WAMIT Body" - typedef ^ ^ INTEGER NStepWave - - - "" - typedef ^ ^ Conv_Rdtn_ParameterType Conv_Rdtn - - - "" - typedef ^ ^ SS_Rad_ParameterType SS_Rdtn - - - "" - typedef ^ ^ SS_Exc_ParameterType SS_Exctn - - - "" - typedef ^ ^ DbKi DT - - - "" - -typedef ^ ^ OutParmType OutParam {:} - - "" - -typedef ^ ^ INTEGER NumOuts - - - "" - -typedef ^ ^ INTEGER NumOutAll - - - "" - -typedef ^ ^ CHARACTER(20) OutFmt - - - "" - -typedef ^ ^ CHARACTER(20) OutSFmt - - - "" - -typedef ^ ^ CHARACTER(ChanLen) Delim - - - "" - -typedef ^ ^ INTEGER UnOutFile - - - "" - +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - # # # ..... Inputs .................................................................................................................... diff --git a/modules/hydrodyn/src/WAMIT2.f90 b/modules/hydrodyn/src/WAMIT2.f90 index 47653312a2..cf28edda86 100644 --- a/modules/hydrodyn/src/WAMIT2.f90 +++ b/modules/hydrodyn/src/WAMIT2.f90 @@ -71,28 +71,9 @@ MODULE WAMIT2 ! ..... Public Subroutines ................................................................................................... PUBLIC :: WAMIT2_Init !< Initialization routine - PUBLIC :: WAMIT2_End !< Ending routine (includes clean up) - PUBLIC :: WAMIT2_UpdateStates !< Loose coupling routine for solving for constraint states, integrating - !! continuous states, and updating discrete states PUBLIC :: WAMIT2_CalcOutput !< Routine for computing outputs - PUBLIC :: WAMIT2_CalcConstrStateResidual !< Tight coupling routine for returning the constraint state residual - PUBLIC :: WAMIT2_CalcContStateDeriv !< Tight coupling routine for computing derivatives of continuous states - PUBLIC :: WAMIT2_UpdateDiscState !< Tight coupling routine for updating discrete states - - !PUBLIC :: WAMIT2_JacobianPInput !< Routine to compute the Jacobians of the output (Y), continuous- (X), discrete- - ! !! (Xd), and constraint-state (Z) equations all with respect to the inputs (u) - !PUBLIC :: WAMIT2_JacobianPContState !< Routine to compute the Jacobians of the output (Y), continuous- (X), discrete- - ! !! (Xd), and constraint-state (Z) equations all with respect to the continuous - ! !! states (x) - !PUBLIC :: WAMIT2_JacobianPDiscState !< Routine to compute the Jacobians of the output (Y), continuous- (X), discrete- - ! !! (Xd), and constraint-state (Z) equations all with respect to the discrete - ! !! states (xd) - !PUBLIC :: WAMIT2_JacobianPConstrState !< Routine to compute the Jacobians of the output (Y), continuous- (X), discrete- - !! (Xd), and constraint-state (Z) equations all with respect to the constraint - !! states (z) - ! Derived types for data storage. @@ -206,20 +187,13 @@ MODULE WAMIT2 !! This routine is called at the start of the simulation to perform initialization steps. !! The parameters that are set here are not changed during the simulation. !! The initial states and initial guess for the input are defined. -SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) +SUBROUTINE WAMIT2_Init( InitInp, p, y, m, ErrStat, ErrMsg ) !.................................................................................................................................. TYPE(WAMIT2_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine - TYPE(WAMIT2_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined TYPE(WAMIT2_ParameterType), INTENT( OUT) :: p !< Parameters - TYPE(WAMIT2_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states - TYPE(WAMIT2_DiscreteStateType), INTENT( OUT) :: xd !< Initial discrete states - TYPE(WAMIT2_ConstraintStateType), INTENT( OUT) :: z !< Initial guess of the constraint states - TYPE(WAMIT2_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states TYPE(WAMIT2_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; only the output mesh is initialized) TYPE(WAMIT2_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables - REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: don't change it from the glue code provided value. - TYPE(WAMIT2_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None @@ -227,7 +201,6 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini ! Local Variables INTEGER(IntKi) :: IBody !< Counter for current body INTEGER(IntKi) :: ThisDim !< Counter to currrent dimension - INTEGER(IntKi) :: J !< Generic counter INTEGER(IntKi) :: Idx !< Generic counter REAL(R8Ki) :: theta(3) !< rotation about z for the current body (0 about x,y) REAL(R8Ki) :: orientation(3,3) !< Orientation matrix for orientation of the current body @@ -257,9 +230,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini !> Initialize Error handling variables ErrStat = ErrID_None - ErrStatTmp = ErrID_None ErrMsg = "" - ErrMsgTmp = "" !> Initialize the data storage @@ -279,12 +250,6 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini SumQTFData%Filename = '' - !> Initialize the NWTC Subroutine Library and display the information about this module. - - CALL NWTC_Init() ! WAMIT2_ProgDesc%Name, '('//WAMIT2_ProgDesc%Ver//','//WAMIT2_ProgDesc%Date//')', EchoLibVer = .FALSE. ) - - - !----------------------------------------------------------------------------- !> Before attempting to do any real calculations, we first check what was !! passed in through _InitInp_ to make sure it makes sense. That routine will @@ -298,10 +263,10 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini !------------------------------------------------------------------------------------------------------------- !> 1. Check the data file related values (_MnDrift_, _MnDriftF_ etc). Also copy over important things from _InitInp_ to _p_ and _InitOut_. - CALL CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanAppData, DiffQTFData, SumQTFData, ErrStatTmp, ErrMsgTmp ) + CALL CheckInitInput( InitInp, p, MnDriftData, NewmanAppData, DiffQTFData, SumQTFData, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -325,7 +290,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini 'CheckInitInput subroutine.', ErrStat, ErrMsg, RoutineName ) ENDIF IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -345,7 +310,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini 'CheckInitInput subroutine.', ErrStat, ErrMsg, RoutineName ) ENDIF IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -367,7 +332,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini 'CheckInitInput subroutine.', ErrStat, ErrMsg, RoutineName ) ENDIF IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -384,7 +349,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini 'CheckInitInput subroutine.', ErrStat, ErrMsg, RoutineName ) ENDIF IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -423,7 +388,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL SetErrStat( ErrID_Fatal, ' Programming error. MnDrift flag is set, but no data has been read in.',ErrStat,ErrMsg, RoutineName) ENDIF IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -457,7 +422,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL SetErrStat( ErrID_Fatal, ' Programming error. NewmanApp flag is set, but no data has been read in.',ErrStat,ErrMsg, RoutineName) ENDIF IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -480,7 +445,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL SetErrStat( ErrID_Fatal, ' Programming error. DiffQTF flag is set, but no data has been read in.',ErrStat,ErrMsg, RoutineName) ENDIF IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -503,7 +468,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL SetErrStat( ErrID_Fatal, ' Programming error. SumQTF flag is set, but no data has been read in.',ErrStat,ErrMsg, RoutineName) ENDIF IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -547,7 +512,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsgTmp, ErrStatTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -561,7 +526,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL NewmanApp_InitCalc( InitInp, p, NewmanAppData, NewmanAppForce, ErrMsgTmp, ErrStatTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -577,7 +542,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsgTmp, ErrStatTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -591,7 +556,7 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini CALL SumQTF_InitCalc( InitInp, p, SumQTFData, SumQTFForce, ErrMsgTmp, ErrStatTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ENDIF @@ -672,21 +637,17 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini !---------------------------------------------------------------------- ! Create the input and output meshes associated with lumped loads - CALL MeshCreate( BlankMesh = u%Mesh , & - IOS = COMPONENT_INPUT , & + CALL MeshCreate( BlankMesh = y%Mesh , & + IOS = COMPONENT_OUTPUT , & Nnodes = p%NBody , & ErrStat = ErrStatTmp , & ErrMess = ErrMsgTmp , & - TranslationDisp = .TRUE. , & - Orientation = .TRUE. , & - TranslationVel = .TRUE. , & - RotationVel = .TRUE. , & - TranslationAcc = .FALSE. , & - RotationAcc = .FALSE.) + Force = .TRUE. , & + Moment = .TRUE.) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN END IF @@ -698,32 +659,22 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini XYZloc = (/InitInp%PtfmRefxt(IBody), InitInp%PtfmRefyt(IBody), InitInp%PtfmRefzt(IBody)/) ! Create the node on the mesh - CALL MeshPositionNode (u%Mesh, IBody, XYZloc, ErrStatTmp, ErrMsgTmp, orientation ) + CALL MeshPositionNode (y%Mesh, IBody, XYZloc, ErrStatTmp, ErrMsgTmp, orientation ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) ! Create the mesh element - CALL MeshConstructElement ( u%Mesh, ELEMENT_POINT, ErrStatTmp, ErrMsgTmp, IBody ) + CALL MeshConstructElement ( y%Mesh, ELEMENT_POINT, ErrStatTmp, ErrMsgTmp, IBody ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) ENDDO - CALL MeshCommit ( u%Mesh, ErrStatTmp, ErrMsgTmp ) + CALL MeshCommit ( y%Mesh, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN END IF - CALL MeshCopy( SrcMesh=u%Mesh, DestMesh=y%Mesh, CtrlCode=MESH_SIBLING, IOS=COMPONENT_OUTPUT, & - ErrStat=ErrStatTmp, ErrMess=ErrMsgTmp, Force=.TRUE., Moment=.TRUE. ) - CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - END IF - - - u%Mesh%RemapFlag = .TRUE. y%Mesh%RemapFlag = .TRUE. @@ -731,19 +682,14 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini !> 6. Set zero values for unused outputs. This is mostly so that the !! compiler does not complain. Also set misc vars !---------------------------------------------------------------------- - x%DummyContState = 0.0_SiKi - xd%DummyDiscState = 0.0_SiKi - z%DummyConstrState = 0.0_SiKi CALL AllocAry( m%LastIndWave, p%NBody, 'm%LastIndWave', ErrStatTmp, ErrMsgTmp) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) m%LastIndWave = 1_IntKi call AllocAry(m%F_Waves2, 6*p%NBody, 'm%F_Waves2', ErrStatTmp, ErrMsgTmp) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) - OtherState%DummyOtherState = 0 - ! Cleanup remaining stuff - CALL CleanUp + CALL CleanUp() RETURN @@ -755,6 +701,11 @@ SUBROUTINE WAMIT2_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Ini !------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE CleanUp() + IF (ALLOCATED(MnDriftForce)) DEALLOCATE(MnDriftForce) + IF (ALLOCATED(NewmanAppForce)) DEALLOCATE(NewmanAppForce) + IF (ALLOCATED(DiffQTFForce)) DEALLOCATE(DiffQTFForce) + IF (ALLOCATED(SumQTFForce)) DEALLOCATE(SumQTFForce) + CALL Destroy_InitData3D( MnDriftData%Data3D ) CALL Destroy_InitData4D( MnDriftData%Data4D ) CALL Destroy_InitData3D( NewmanAppData%Data3D ) @@ -765,7 +716,7 @@ SUBROUTINE CleanUp() END SUBROUTINE CleanUp - +END SUBROUTINE WAMIT2_Init !------------------------------------------------------------------------------------------------------------------------------- @@ -847,9 +798,7 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS ! Initialize a few things ErrMsg = '' - ErrMsgTmp = '' ErrStat = ErrID_None - ErrStatTmp = ErrID_None ! Initialize resulting forces ALLOCATE( MnDriftForce(6*p%NBody), STAT=ErrStatTmp ) @@ -858,7 +807,7 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS 'of the 2nd order force.',ErrStat, ErrMsg, RoutineName) RETURN ENDIF - MnDriftForce = 0.0_SiKi + MnDriftForce = 0.0_SiKi ! initialize this subroutine return value !> 1. Check the data to see if low cutoff on the difference frequency is 0. If it is above zero, that implies no mean drift @@ -867,7 +816,6 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS IF ( InitInp%WvLowCOffD > 0.0_SiKi ) THEN CALL SetErrStat( ErrID_Warn, ' WvLowCOffD > 0.0, so no mean drift term is calculated (the mean drift uses only the equal '//& 'frequency terms of the QTF). Setting the mean drift force to 0.',ErrStat,ErrMsg,RoutineName) - MnDriftForce = 0.0_SiKi RETURN ENDIF @@ -937,12 +885,12 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS IF ( InitInp%WaveMultiDir .AND. (MnDriftData%Data3D%NumWvDir1 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(MnDriftData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(MnDriftData%Data3D%WvDir1(1)))//' degrees (first wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE IF ( InitInp%WaveMultiDir .AND. (MnDriftData%Data3D%NumWvDir2 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(MnDriftData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(MnDriftData%Data3D%WvDir2(1)))//' degrees (second wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE @@ -993,12 +941,12 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS IF ( InitInp%WaveMultiDir .AND. (MnDriftData%Data4D%NumWvDir1 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(MnDriftData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(MnDriftData%Data4D%WvDir1(1)))//' degrees (first wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE IF ( InitInp%WaveMultiDir .AND. (MnDriftData%Data4D%NumWvDir2 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(MnDriftData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(MnDriftData%Data4D%WvDir2(1)))//' degrees (second wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE @@ -1059,20 +1007,26 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS IF ( .NOT. MnDriftData%DataIs3D .AND. MnDriftData%Data4D%WvFreqDiagComplete ) THEN TmpFlag = .FALSE. ! if this goes true, then we need to convert to 3D data DO IBody=1,MnDriftData%Data4D%NumBodies + IF (TmpFlag) EXIT DO ThisDim=1,6 Idx = (IBody-1)*6+ThisDim IF ( p%MnDriftDims(IBody) ) THEN ! Flag indicating which dimension we are calculating for - IF ( MnDriftData%Data4D%DataIsSparse(Idx) .AND. MnDriftData%Data4D%LoadComponents(Idx) ) TmpFlag = .TRUE. + IF ( MnDriftData%Data4D%DataIsSparse(Idx) .AND. MnDriftData%Data4D%LoadComponents(Idx) ) THEN + TmpFlag = .TRUE. + EXIT ! inner DO + END IF ENDIF ENDDO ENDDO ! If we need to create the 3D data set, then - CALL Copy_InitData4Dto3D( MnDriftData%Data4D, MnDriftData%Data3D, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - IF (ErrStat >= AbortErrLev) RETURN + IF (TmpFlag) THEN + CALL Copy_InitData4Dto3D( MnDriftData%Data4D, MnDriftData%Data3D, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) + IF (ErrStat >= AbortErrLev) RETURN - MnDriftData%DataIs3D = .TRUE. ! Set flag to indicate we now have the 3D data. + MnDriftData%DataIs3D = .TRUE. ! Set flag to indicate we now have the 3D data. + END IF ! TmpFlag ENDIF @@ -1086,16 +1040,24 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS TmpFlag = .FALSE. IF ( MnDriftData%DataIs3D ) THEN DO IBody=1,MnDriftData%Data3D%NumBodies + IF (TmpFlag) EXIT DO ThisDim=1,6 Idx = (IBody-1)*6+ThisDim - IF ( MnDriftData%Data3D%DataIsSparse(Idx) .AND. MnDriftData%Data3D%LoadComponents(Idx) .AND. p%MnDriftDims(ThisDim) ) TmpFlag = .TRUE. + IF ( MnDriftData%Data3D%DataIsSparse(Idx) .AND. MnDriftData%Data3D%LoadComponents(Idx) .AND. p%MnDriftDims(ThisDim) ) THEN + TmpFlag = .TRUE. + EXIT + END IF ENDDO ENDDO ELSE ! must be 4D -- we checked that we had something at the start of this routine. DO IBody=1,MnDriftData%Data4D%NumBodies + IF (TmpFlag) EXIT DO ThisDim=1,6 Idx = (IBody-1)*6+ThisDim - IF ( MnDriftData%Data4D%DataIsSparse(Idx) .AND. MnDriftData%Data4D%LoadComponents(Idx) .AND. p%MnDriftDims(ThisDim) ) TmpFlag = .TRUE. + IF ( MnDriftData%Data4D%DataIsSparse(Idx) .AND. MnDriftData%Data4D%LoadComponents(Idx) .AND. p%MnDriftDims(ThisDim) ) THEN + TmpFlag = .TRUE. + EXIT + END IF ENDDO ENDDO ENDIF @@ -1127,8 +1089,7 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS ! If something went wrong during allocation of the temporary arrays... IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData3D)) DEALLOCATE(TmpData3D,STAT=ErrStatTmp) - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) + call cleanup() RETURN ENDIF @@ -1189,7 +1150,11 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS ! Only get a QTF value if within the range of frequencies we have wave amplitudes for (first order cutoffs). This - ! is done only for efficiency. + ! is done only for efficiency. + + !BJJ: If WaveMod==1, this could result in zeroing out the wrong values... + !InitInp%WvLowCOff and InitInp%WvHiCOff are not used in SeaState when WaveMod = 0,1, or 6 + ! Probably could just remove this IF statement???? IF ( (Omega1 >= InitInp%WvLowCOff) .AND. (Omega1 <= InitInp%WvHiCOff) ) THEN ! Now get the QTF value that corresponds to this frequency and wavedirection pair. @@ -1205,6 +1170,7 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS ! get the interpolated value for F(omega1,beta1,beta2) CALL WAMIT_Interp3D_Cplx( Coord3, TmpData3D, MnDriftData%Data3D%WvFreq1, & MnDriftData%Data3D%WvDir1, MnDriftData%Data3D%WvDir2, LastIndex3, QTF_Value, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) ELSE @@ -1218,6 +1184,7 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS ! get the interpolated value for F(omega1,omega2,beta1,beta2) CALL WAMIT_Interp4D_Cplx( Coord4, TmpData4D, MnDriftData%Data4D%WvFreq1, MnDriftData%Data4D%WvFreq2, & MnDriftData%Data4D%WvDir1, MnDriftData%Data4D%WvDir2, LastIndex4, QTF_Value, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) ENDIF !QTF value find @@ -1231,10 +1198,8 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS ! Check and make sure nothing bombed in the interpolation that we need to be aware of - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData3D)) DEALLOCATE(TmpData3D,STAT=ErrStatTmp) - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) + call cleanup() RETURN ENDIF @@ -1266,9 +1231,13 @@ SUBROUTINE MnDrift_InitCalc( InitInp, p, MnDriftData, MnDriftForce, ErrMsg, ErrS ! Cleanup - - IF (ALLOCATED(TmpData3D)) DEALLOCATE(TmpData3D,STAT=ErrStatTmp) - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) + call cleanup() + + CONTAINS + subroutine cleanup() + IF (ALLOCATED(TmpData3D)) DEALLOCATE(TmpData3D,STAT=ErrStatTmp) + IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) + end subroutine cleanup END SUBROUTINE MnDrift_InitCalc @@ -1383,7 +1352,8 @@ SUBROUTINE NewmanApp_InitCalc( InitInp, p, NewmanAppData, NewmanAppForce, ErrMsg !> 1. Check the data to see if the wave frequencies are present in the QTF data. Since Newman's approximation only uses !! frequencies where \f$ \omega_1=\omega_2 \f$, the data read in from the files must contain the full range of frequencies !! present in the waves. - +!bjj: InitInp%WvLowCOff and InitInp%WvHiCOff aren't supposed to be used when WaveMod=0, 1, or 6, but they are used here regardless of those conditions. +! Can we get rid of these checks???? IF ( NewmanAppData%DataIs3D ) THEN ! Check the low frequency cutoff @@ -1450,12 +1420,12 @@ SUBROUTINE NewmanApp_InitCalc( InitInp, p, NewmanAppData, NewmanAppForce, ErrMsg IF ( InitInp%WaveMultiDir .AND. (NewmanAppData%Data3D%NumWvDir1 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(NewmanAppData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(NewmanAppData%Data3D%WvDir1(1)))//' degrees (first wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE IF ( InitInp%WaveMultiDir .AND. (NewmanAppData%Data3D%NumWvDir2 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(NewmanAppData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(NewmanAppData%Data3D%WvDir2(1)))//' degrees (second wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE @@ -1506,12 +1476,12 @@ SUBROUTINE NewmanApp_InitCalc( InitInp, p, NewmanAppData, NewmanAppForce, ErrMsg IF ( InitInp%WaveMultiDir .AND. (NewmanAppData%Data4D%NumWvDir1 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(NewmanAppData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(NewmanAppData%Data4D%WvDir1(1)))//' degrees (first wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE IF ( InitInp%WaveMultiDir .AND. (NewmanAppData%Data4D%NumWvDir2 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(NewmanAppData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(NewmanAppData%Data4D%WvDir2(1)))//' degrees (second wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE @@ -2100,12 +2070,12 @@ SUBROUTINE DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsg, ErrS IF ( InitInp%WaveMultiDir .AND. (DiffQTFData%Data4D%NumWvDir1 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(DiffQTFData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(DiffQTFData%Data4D%WvDir1(1)))//' degrees (first wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE IF ( InitInp%WaveMultiDir .AND. (DiffQTFData%Data4D%NumWvDir2 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(DiffQTFData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(DiffQTFData%Data4D%WvDir2(1)))//' degrees (second wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE @@ -2198,10 +2168,7 @@ SUBROUTINE DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsg, ErrS ! If something went wrong during allocation of the temporary arrays... IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) - IF (ALLOCATED(DiffQTFForce)) DEALLOCATE(DiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) + call cleanup() RETURN ENDIF @@ -2214,10 +2181,7 @@ SUBROUTINE DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsg, ErrS CALL InitFFT ( InitInp%NStepWave, FFT_Data, .FALSE., ErrStatTmp ) CALL SetErrStat(ErrStatTmp,'Error occured while initializing the FFT.',ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) - IF (ALLOCATED(DiffQTFForce)) DEALLOCATE(DiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) + call cleanup() RETURN END IF @@ -2229,10 +2193,7 @@ SUBROUTINE DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsg, ErrS CALL MnDrift_InitCalc( InitInp, p, DiffQTFData, MnDriftForce, ErrMsgTmp, ErrStatTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) - IF (ALLOCATED(DiffQTFForce)) DEALLOCATE(DiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) + call cleanup() RETURN ENDIF @@ -2246,10 +2207,7 @@ SUBROUTINE DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsg, ErrS ErrStat,ErrMsg,RoutineName) ENDDO IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) - IF (ALLOCATED(DiffQTFForce)) DEALLOCATE(DiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) + call cleanup() RETURN ENDIF @@ -2323,10 +2281,7 @@ SUBROUTINE DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsg, ErrS DiffQTFData%Data4D%WvDir1, DiffQTFData%Data4D%WvDir2, LastIndex4, QTF_Value, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) IF (ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) - IF (ALLOCATED(DiffQTFForce)) DEALLOCATE(DiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) + call cleanup() RETURN ENDIF @@ -2407,10 +2362,7 @@ SUBROUTINE DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsg, ErrS CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to the second term of the difference QTF.', & ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) - IF (ALLOCATED(DiffQTFForce)) DEALLOCATE(DiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) + call cleanup() RETURN END IF @@ -2434,20 +2386,22 @@ SUBROUTINE DiffQTF_InitCalc( InitInp, p, DiffQTFData, DiffQTFForce, ErrMsg, ErrS CALL ExitFFT(FFT_Data, ErrStatTmp) CALL SetErrStat(ErrStatTmp,'Error occured while cleaning up after the FFTs.', ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) - IF (ALLOCATED(DiffQTFForce)) DEALLOCATE(DiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) + call cleanup() RETURN END IF - - ! Cleanup - IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) - IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) - - + call cleanup() + + contains +!--------------------------------------------------- + subroutine cleanup() + + ! Cleanup + IF (ALLOCATED(TmpData4D)) DEALLOCATE(TmpData4D,STAT=ErrStatTmp) + IF (ALLOCATED(TmpDiffQTFForce)) DEALLOCATE(TmpDiffQTFForce,STAT=ErrStatTmp) + IF (ALLOCATED(TmpComplexArr)) DEALLOCATE(TmpComplexArr,STAT=ErrStatTmp) + end subroutine cleanup +!--------------------------------------------------- END SUBROUTINE DiffQTF_InitCalc @@ -2622,12 +2576,12 @@ SUBROUTINE SumQTF_InitCalc( InitInp, p, SumQTFData, SumQTFForce, ErrMsg, ErrStat IF ( InitInp%WaveMultiDir .AND. (SumQTFData%Data4D%NumWvDir1 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(SumQTFData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(SumQTFData%Data4D%WvDir1(1)))//' degrees (first wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE IF ( InitInp%WaveMultiDir .AND. (SumQTFData%Data4D%NumWvDir2 == 1) ) THEN CALL SetErrStat( ErrID_Fatal,' WAMIT output file '//TRIM(SumQTFData%Filename)//' only contains one wave '// & 'direction at '//TRIM(Num2LStr(SumQTFData%Data4D%WvDir2(1)))//' degrees (second wave direction). '// & - 'It cannot be used with multidirectional waves. Set WvDirMod to 0 to use this file.', & + 'It cannot be used with multidirectional waves. Set WaveDirMod to 0 to use this file.', & ErrStat,ErrMsg,RoutineName) ELSE @@ -3069,14 +3023,12 @@ END SUBROUTINE SumQTF_InitCalc !! !! This subroutine also populates the InitOut and creates the filenames for each of the calculation types. !! - SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanAppData, DiffQTFData, SumQTFData, ErrStat, ErrMsg ) + SUBROUTINE CheckInitInput( InitInp, p, MnDriftData, NewmanAppData, DiffQTFData, SumQTFData, ErrStat, ErrMsg ) IMPLICIT NONE ! Passed variables. TYPE(WAMIT2_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine - REAL(DbKi), INTENT(IN ) :: Interval !< Coupling interval in seconds: don't change it from the glue code provided value. - TYPE(WAMIT2_InitOutputType), INTENT(INOUT) :: InitOut !< The output from the init routine TYPE(WAMIT2_ParameterType), INTENT( OUT) :: p !< The parameters ! QTF storage -- from the data files that are read in @@ -3104,9 +3056,7 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp !> 1. Initialize error variables ErrStat = ErrID_None - ErrStatTmp = ErrID_None ErrMsg = '' - ErrMsgTmp = '' !> 2. Initialize filenames MnDriftData%Filename = '' @@ -3147,11 +3097,8 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp ( InitInp%DiffQTF /= 0 .AND. InitInp%NewmanApp /= 0 ) .OR. & ( InitInp%MnDrift /= 0 .AND. InitInp%DiffQTF /= 0 ) ) THEN CALL SetErrStat( ErrID_Fatal, ' Only one of MnDrift, NewmanApp, or DiffQTF can be non-zero.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev ) RETURN END IF - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF !> 2. Check that we have a valid values for MnDrift, check flag status @@ -3177,10 +3124,8 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp ' MnDrift can only have values of 0, 7, 8, 9, 10, 11, or 12. '//NewLine// & ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, RoutineName) END IF - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF + IF ( ErrStat >= AbortErrLev ) RETURN + !> 3. Check that we have a valid values for NewmanApp, check flag status @@ -3205,10 +3150,7 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp ' NewmanApp can only have values of 0, 7, 8, 9, 10, 11, or 12. '//NewLine// & ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, RoutineName) END IF - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF + IF ( ErrStat >= AbortErrLev ) RETURN !> 4. Check that we have a valid values for DiffQTF, check flag status @@ -3230,10 +3172,7 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp ' DiffQTF can only have values of 0, 10, 11, or 12. '//NewLine// & ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, RoutineName) END IF - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF + IF ( ErrStat >= AbortErrLev ) RETURN !> 5. Check that we have a valid values for SumQTF, check flag status @@ -3255,10 +3194,7 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp ' SumQTF can only have values of 0, 10, 11, or 12. '//NewLine// & ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, RoutineName) END IF - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF + IF ( ErrStat >= AbortErrLev ) RETURN !-------------------------------------------------------------------------------- @@ -3275,7 +3211,6 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp CALL SetErrStat( ErrID_Fatal, ' Programming Error in call to WAMIT2_Init: '//NewLine// & ' WvHiCOffD must be larger than WvLowCOffD. Both must be positive.'// & ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp RETURN END IF END IF @@ -3288,7 +3223,6 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp CALL SetErrStat( ErrID_Fatal, ' Programming Error in call to WAMIT2_Init: '//NewLine// & ' WvHiCOffS must be larger than WvLowCOffS. Both must be positive.'// & ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp RETURN END IF END IF @@ -3314,10 +3248,9 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp INQUIRE( file=TRIM(MnDriftData%Filename), exist=TmpFileExist ) MnDriftData%DataIs4D = .TRUE. ENDIF - IF ( TmpFileExist .eqv. .FALSE. ) THEN + IF ( .not. TmpFileExist ) THEN CALL SetErrStat( ErrID_Fatal, ' Cannot find the WAMIT file '//TRIM(MnDriftData%Filename)// & ' required by the MnDrift option.', ErrStat, ErrMsg, RoutineName) - CALL CLeanup RETURN END IF END IF @@ -3338,10 +3271,9 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp INQUIRE( file=TRIM(NewmanAppData%Filename), exist=TmpFileExist ) NewmanAppData%DataIs4D = .TRUE. ENDIF - IF ( TmpFileExist .eqv. .FALSE. ) THEN + IF ( .not. TmpFileExist ) THEN CALL SetErrStat( ErrID_Fatal, ' Cannot find the WAMIT file '//TRIM(NewmanAppData%Filename)// & ' required by the NewmanApp option.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp RETURN END IF END IF @@ -3355,10 +3287,9 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp IF ( InitInp%DiffQTF /= 0) THEN DiffQTFData%Filename = TRIM(InitInp%WAMITFile)//'.'//TRIM(Num2LStr(InitInp%DiffQTF))//'d' INQUIRE( file=TRIM(DiffQTFData%Filename), exist=TmpFileExist ) - IF ( TmpFileExist .eqv. .FALSE. ) THEN + IF ( .not. TmpFileExist ) THEN CALL SetErrStat( ErrID_Fatal, ' Cannot find the WAMIT file '//TRIM(DiffQTFData%Filename)// & ' required by the DiffQTF option.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp RETURN END IF DiffQTFData%DataIs4D = .TRUE. @@ -3375,7 +3306,6 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp IF ( .not. TmpFileExist ) THEN CALL SetErrStat( ErrID_Fatal, ' Cannot find the WAMIT file '//TRIM(SumQTFData%Filename)// & ' required by the SumQTF option.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp RETURN END IF SumQTFData%DataIs4D = .TRUE. @@ -3394,7 +3324,6 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp ' --> Expected array for WaveElevC0 to be of size 2x'//TRIM(Num2LStr(InitInp%NStepWave2 + 1))// & ' (2x(NStepWave2+1)), but instead received array of size '// & TRIM(Num2LStr(SIZE(InitInp%WaveElevC0,1)))//'x'//TRIM(Num2LStr(SIZE(InitInp%WaveElevC0,2)))//'.', ErrStat, ErrMsg, RoutineName) - CALL CleanUp RETURN END IF @@ -3409,13 +3338,6 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp p%NStepWave = InitInp%NStepWave - !-------------------------------------------------------------------------------- - !> 2. Time related information - !-------------------------------------------------------------------------------- - - p%DT = Interval ! Timestep from calling program - - !-------------------------------------------------------------------------------- !> 3. WAMIT body related information !-------------------------------------------------------------------------------- @@ -3426,7 +3348,6 @@ SUBROUTINE CheckInitInput( InitInp, Interval, InitOut, p, MnDriftData, NewmanApp ! This module's implementation requires that if NBodyMod = 2 or 3, then there is one instance of a WAMIT module for each body, therefore, HydroDyn may have NBody > 1, but this WAMIT module will have NBody = 1 if ( (p%NBodyMod > 1) .and. (p%NBody > 1) ) then CALL SetErrStat( ErrID_Fatal, "DEVELOPER ERROR: If NBodyMod = 2 or 3, then NBody for the a WAMIT2 object must be equal to 1", ErrStat, ErrMsg, RoutineName) - CALL CleanUp return end if @@ -3600,7 +3521,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) ! File reading variables - CHARACTER(1024) :: TextLine !< One line of text read from the file + CHARACTER(MaxFileInfoLineLen) :: TextLine !< One line of text read from the file INTEGER(IntKi) :: LineLen !< The length of the line read in REAL(SiKi), ALLOCATABLE :: TmpRealArr(:) !< Temporary real array REAL(SiKi), ALLOCATABLE :: TmpDataRow(:) !< Single row of data @@ -3631,9 +3552,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) ! Initialize error variables ErrStat = ErrID_None - ErrStatTmp = ErrID_None ErrMsg = '' - ErrMsgTmp = '' HaveZeroFreq1 = .FALSE. ! If we find a zero frequency, we will set this to true @@ -3652,12 +3571,8 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL GetNewUnit(UnitDataFile,ErrStatTmp,ErrMsgTmp) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + UnitDataFile = -1 + CALL CleanUp() RETURN ENDIF @@ -3665,30 +3580,17 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL OpenFInpFile( UnitDataFile, TRIM(Filename3D), ErrStat, ErrMsg ) ! Open file containing mean drift information CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - CLOSE( UnitDataFile ) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + UnitDataFile = -1 + CALL CleanUp() RETURN ENDIF - REWIND( UnitDataFile ) - ! Do an initial readthrough and find out the length of the file, if there is a header line, and the number of columns in the file. - CALL GetFileLength( UnitDataFile, TRIM(Filename3D), NumDataColumns, NumDataLines, NumHeaderLines, ErrStat, ErrMsg) + CALL GetFileLength( UnitDataFile, TRIM(Filename3D), NumDataColumns, NumDataLines, NumHeaderLines, ErrStatTmp, ErrMsgTmp) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - CLOSE( UnitDataFile ) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -3697,13 +3599,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) IF ( NumDataColumns /= 8 ) THEN CALL SetErrStat( ErrID_Fatal, ' The 2nd order WAMIT data file '//TRIM(Filename3D)//' has '//TRIM(Num2LStr(NumDataColumns))// & ' columns instead of the 8 columns expected.', ErrStat, ErrMsg, RoutineName) - CLOSE( UnitDataFile ) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -3721,13 +3617,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL AllocAry( RawData3DTmp, NumDataLines, NumDataColumns, ' Array for holding raw 3D data for 2nd order WAMIT files', ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - CLOSE( UnitDataFile ) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -3743,19 +3633,14 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) ErrStatTmp, ErrMsgTmp ) ! Note, not echoing this to anything. CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - CLOSE( UnitDataFile ) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF RawData3DTmp(I,:) = TmpDataRow ENDDO CLOSE( UnitDataFile ) + UnitDataFile = -1 !> Before continuing, we need to figure out how many actual lines of data we will @@ -3778,13 +3663,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL AllocAry( RawData3D, NumDataLinesKeep, NumDataColumns, ' Array for holding raw 3D data for 2nd order WAMIT files', ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - CLOSE( UnitDataFile ) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -3888,12 +3767,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL UniqueRealValues( RawData3D(:,1), TmpWvFreq1, Data3D%NumWvFreq1, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -3901,12 +3775,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL UniqueRealValues( RawData3D(:,2), Data3D%WvDir1, Data3D%NumWvDir1, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -3914,12 +3783,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL UniqueRealValues( RawData3D(:,3), Data3D%WvDir2, Data3D%NumWvDir2, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -3937,12 +3801,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) IF ( Data3D%NumBodies > 1 ) CALL SetErrStat( ErrID_Info, ' Found data for '//TRIM(Num2LStr(Data3D%NumBodies))//' WAMIT bodies in '// & TRIM(Filename3D)//'.', ErrStat,ErrMsg,RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -3961,12 +3820,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL SetErrStat( ErrID_Fatal, ' Load components listed in column 4 of '//TRIM(Filename3D)// & ' must be between 1 and '//TRIM(Num2LStr(6*Data3D%NumBodies))//' for '//TRIM(Num2LStr(Data3D%NumBodies))// & ' WAMIT bodies.', ErrStat,ErrMsg,RoutineName) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF Data3D%LoadComponents(NINT(TmpRealArr(I))) = .TRUE. @@ -4000,12 +3854,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array Data3D%WvFreq1 to store '// & 'the sorted 3D 2nd order WAMIT frequency data.', ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4029,27 +3878,13 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) ALLOCATE( Data3D%DataSet( Data3D%NumWvFreq1, Data3D%NumWvDir1, Data3D%NumWvDir2, 6*Data3D%NumBodies ), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array Data3D%DataSet to store '// & 'the sorted 3D 2nd order WAMIT data.', ErrStat,ErrMsg,RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp - RETURN - ENDIF ! Allocate the logical array for storing the mask for which points are valid. Set to .FALSE. ALLOCATE( Data3D%DataMask( Data3D%NumWvFreq1, Data3D%NumWvDir1, Data3D%NumWvDir2, 6*Data3D%NumBodies ), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array Data3D%DataMask to store '// & 'the sorted 3D 2nd order WAMIT data.', ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4094,12 +3929,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL LocateStp( RawData3D(I,1), TmpWvFreq1, TmpCoord(1), WvFreq1HiIdx - (WvFreq1LoIdx - 1) ) ! inclusive limits IF ( TmpCoord(1) == 0 .OR. ( RawData3D(I,1) > Data3D%WvFreq1(Data3D%NumWvFreq1)) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming error. Array data point not found in Data3D%WvFreq1 array.', ErrStat, ErrMsg, RoutineName) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF TmpCoord(1) = TmpCoord(1) + ( WvFreq1LoIdx - 1 ) ! shift to the point in the Data3D%WvFreq1 array by adding the zero frequency step function @@ -4108,12 +3938,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL LocateStp( RawData3D(I,2), Data3D%WvDir1, TmpCoord(2), Data3D%NumWvDir1 ) IF ( TmpCoord(2) == 0 .OR. ( RawData3D(I,2) > Data3D%WvDir1(Data3D%NumWvDir1)) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming error. Array data point not found in Data3D%WvDir1 array.', ErrStat, ErrMsg, RoutineName) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4121,12 +3946,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) CALL LocateStp( RawData3D(I,3), Data3D%WvDir2, TmpCoord(3), Data3D%NumWvDir2 ) IF ( TmpCoord(3) == 0 .OR. ( RawData3D(I,3) > Data3D%WvDir2(Data3D%NumWvDir2)) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming error. Array data point not found in Data3D%WvDir2 array.', ErrStat, ErrMsg, RoutineName) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4184,12 +4004,7 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) 'given earlier in the file for the same values of wave frequency and wave direction '// & '(force dimension = '//TRIM(Num2LStr(TmpCoord(4)))//').', & ErrStat, ErrMsg, RoutineName ) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF ELSE @@ -4309,13 +4124,19 @@ SUBROUTINE Read_DataFile3D( InitInp, Filename3D, Data3D, ErrStat, Errmsg ) ! Clean up - IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - - + call cleanup() + + CONTAINS + subroutine cleanup() + + if (UnitDataFile > 0) CLOSE( UnitDataFile ) + + IF (ALLOCATED(RawData3D)) DEALLOCATE(RawData3D,STAT=ErrStatTmp) + IF (ALLOCATED(RawData3DTmp)) DEALLOCATE(RawData3DTmp,STAT=ErrStatTmp) + IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) + IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) + IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) + end subroutine cleanup END SUBROUTINE Read_DataFile3D @@ -4370,7 +4191,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) ! File reading variables - CHARACTER(1024) :: TextLine !< One line of text read from the file + CHARACTER(MaxFileInfoLineLen) :: TextLine !< One line of text read from the file INTEGER(IntKi) :: LineLen !< The length of the line read in REAL(SiKi), ALLOCATABLE :: TmpRealArr(:) !< Temporary real array REAL(SiKi), ALLOCATABLE :: TmpDataRow(:) !< Single row of data @@ -4404,12 +4225,10 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) ! Initialize error variables ErrStat = ErrID_None - ErrStatTmp = ErrID_None ErrMsg = '' - ErrMsgTmp = '' HaveZeroFreq1 = .FALSE. ! If we find a zero frequency, we will set this to true HaveZeroFreq2 = .FALSE. ! If we find a zero frequency, we will set this to true - + UnitDataFile = -1 !-------------------------------------------------------------------------------- !> ### Check data file for consistency @@ -4426,43 +4245,25 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL GetNewUnit(UnitDataFile,ErrStatTmp,ErrMsgTmp) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF ! Open the file - CALL OpenFInpFile( UnitDataFile, TRIM(Filename4D), ErrStat, ErrMsg ) ! Open file containing mean drift information + CALL OpenFInpFile( UnitDataFile, TRIM(Filename4D), ErrStatTmp, ErrMsgTmp ) ! Open file containing mean drift information CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CLOSE( UnitDataFile ) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF ! Do an initial readthrough and find out the length of the file, if there is a header line, and the number of columns in the file. - CALL GetFileLength( UnitDataFile, TRIM(Filename4D), NumDataColumns, NumDataLines, NumHeaderLines, ErrStat, ErrMsg) + CALL GetFileLength( UnitDataFile, TRIM(Filename4D), NumDataColumns, NumDataLines, NumHeaderLines, ErrStatTmp, ErrMsgTmp) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CLOSE( UnitDataFile ) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4475,13 +4276,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL SetErrStat( ErrID_Fatal, ' The 2nd order WAMIT data file '//TRIM(Filename4D)//' has '//TRIM(Num2LStr(NumDataColumns))// & ' columns instead of the 9 columns expected.', ErrStat, ErrMsg, RoutineName) CLOSE( UnitDataFile ) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4501,13 +4296,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CLOSE( UnitDataFile ) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4524,13 +4313,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CLOSE( UnitDataFile ) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF RawData4DTmp(I,:) = TmpDataRow @@ -4560,12 +4343,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CLOSE( UnitDataFile ) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4678,13 +4456,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL UniqueRealValues( RawData4D(:,1), TmpWvFreq1, Data4D%NumWvFreq1, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4692,13 +4464,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL UniqueRealValues( RawData4D(:,2), TmpWvFreq2, Data4D%NumWvFreq2, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4706,13 +4472,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL UniqueRealValues( RawData4D(:,3), Data4D%WvDir1, Data4D%NumWvDir1, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4720,13 +4480,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL UniqueRealValues( RawData4D(:,4), Data4D%WvDir2, Data4D%NumWvDir2, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4743,12 +4497,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) IF ( Data4D%NumBodies > 1 ) CALL SetErrStat( ErrID_Info, ' Found data for '//TRIM(Num2LStr(Data4D%NumBodies))//' WAMIT bodies in '// & TRIM(Filename4D)//'.', ErrStat,ErrMsg,RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4769,13 +4518,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL SetErrStat( ErrID_Fatal, ' Load components listed in column 4 of '//TRIM(Filename4D)// & ' must be between 1 and '//TRIM(Num2LStr(6*Data4D%NumBodies))//' for '//TRIM(Num2LStr(Data4D%NumBodies))// & ' WAMIT bodies.', ErrStat,ErrMsg,RoutineName) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF Data4D%LoadComponents(NINT(TmpRealArr(I))) = .TRUE. @@ -4821,13 +4564,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array Data4D%WvFreq1 to store '// & 'the sorted 4D 2nd order WAMIT frequency data.', ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4837,13 +4574,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array Data4D%WvFreq2 to store '// & 'the sorted 4D 2nd order WAMIT frequency data.', ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4882,13 +4613,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array Data4D%DataSet to store '// & 'the sorted 4D 2nd order WAMIT data.', ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4897,13 +4622,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array Data4D%DataMask to store '// & 'the sorted 4D 2nd order WAMIT data.', ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4949,13 +4668,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL LocateStp( RawData4D(I,1), TmpWvFreq1, TmpCoord(1), WvFreq1HiIdx - (WvFreq1LoIdx - 1) ) ! inclusive limits IF ( TmpCoord(1) == 0 .OR. ( RawData4D(I,1) > Data4D%WvFreq1(Data4D%NumWvFreq1)) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming error. Array data point not found in Data4D%WvFreq1 array.', ErrStat, ErrMsg, RoutineName) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF TmpCoord(1) = TmpCoord(1) + ( WvFreq1LoIdx - 1 ) ! shift to the point in the Data4D%WvFreq1 array by adding the zero frequency step function @@ -4965,13 +4678,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL LocateStp( RawData4D(I,2), TmpWvFreq2, TmpCoord(2), WvFreq2HiIdx - (WvFreq2LoIdx - 1) ) ! inclusive limits IF ( TmpCoord(2) == 0 .OR. ( RawData4D(I,2) > Data4D%WvFreq2(Data4D%NumWvFreq2)) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming error. Array data point not found in Data4D%WvFreq2 array.', ErrStat, ErrMsg, RoutineName) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF TmpCoord(2) = TmpCoord(2) + ( WvFreq2LoIdx - 1 ) ! shift to the point in the Data4D%WvFreq2 array by adding the zero frequency step function @@ -4980,13 +4687,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL LocateStp( RawData4D(I,3), Data4D%WvDir1, TmpCoord(3), Data4D%NumWvDir1 ) IF ( TmpCoord(3) == 0 .OR. ( RawData4D(I,3) > Data4D%WvDir1(Data4D%NumWvDir1)) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming error. Array data point not found in Data4D%WvDir1 array.', ErrStat, ErrMsg, RoutineName) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -4994,6 +4695,18 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) CALL LocateStp( RawData4D(I,4), Data4D%WvDir2, TmpCoord(4), Data4D%NumWvDir2 ) IF ( TmpCoord(4) == 0 .OR. ( RawData4D(I,4) > Data4D%WvDir2(Data4D%NumWvDir2)) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming error. Array data point not found in Data4D%WvDir2 array.', ErrStat, ErrMsg, RoutineName) + CALL CleanUp() + RETURN + ENDIF + + ! Find which force component this belongs to + TmpCoord(5) = NINT(RawData4D(I,5)) + ! Check that it is a valid force component + if (TmpCoord(5) < 1 .or. TmpCoord(5) > 6*Data4D%NumBodies) then + CALL SetErrStat( ErrID_Fatal, ' Line '//TRIM(Num2Lstr(NumHeaderLines+I))//' of '//TRIM(Filename4D)// & + ' contains force component '//TRIM(Num2LStr(TmpCoord(5)))//' which is outside the expected force '// & + ' range of 1 to '//TRIM(Num2Lstr(6*Data4D%NumBodies))//' for a '//TRIM(Num2LStr(Data4D%NumBodies))// & + ' body system.', ErrStat, ErrMsg, RoutineName) IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) @@ -5002,10 +4715,8 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) CALL CleanUp RETURN - ENDIF + endif - ! Find which force component this belongs to - TmpCoord(5) = NINT(RawData4D(I,5)) ! Check that it is a valid force component if (TmpCoord(5) < 1 .or. TmpCoord(5) > 6*Data4D%NumBodies) then CALL SetErrStat( ErrID_Fatal, ' Line '//TRIM(Num2Lstr(NumHeaderLines+I))//' of '//TRIM(Filename4D)// & @@ -5022,7 +4733,6 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) RETURN endif - !> The data from the WAMIT file is non-dimensional, so we need to dimensionalize it here. This !! is a partial dimensionalization since the wave amplitudes are not included (this is done later !! in each of the calculation methods). To dimensionalize the data, the equation is for the @@ -5058,13 +4768,7 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) 'given earlier in the file for the same values of wave frequency and wave direction '// & '(force dimension = '//TRIM(Num2LStr(TmpCoord(5)))//').', & ErrStat, ErrMsg, RoutineName ) - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - CALL CleanUp + CALL CleanUp() RETURN ENDIF ELSE @@ -5271,16 +4975,21 @@ SUBROUTINE Read_DataFile4D( InitInp, Filename4D, Data4D, ErrStat, Errmsg ) Data4D%WvFreqDiagComplete = TmpDiagComplete + call cleanup() + + contains + subroutine cleanup() - - ! Clean up - IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) - IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) - IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) - IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) - + ! Clean up + IF (ALLOCATED(RawData4D)) DEALLOCATE(RawData4D,STAT=ErrStatTmp) + IF (ALLOCATED(RawData4DTmp)) DEALLOCATE(RawData4DTmp,STAT=ErrStatTmp) + IF (ALLOCATED(TmpRealArr)) DEALLOCATE(TmpRealArr,STAT=ErrStatTmp) + IF (ALLOCATED(TmpDataRow)) DEALLOCATE(TmpDataRow,STAT=ErrStatTmp) + IF (ALLOCATED(TmpWvFreq1)) DEALLOCATE(TmpWvFreq1,STAT=ErrStatTmp) + IF (ALLOCATED(TmpWvFreq2)) DEALLOCATE(TmpWvFreq2,STAT=ErrStatTmp) + + end subroutine cleanup + END SUBROUTINE Read_DataFile4D @@ -5315,16 +5024,14 @@ SUBROUTINE UniqueRealValues( DataArrayIn, DataArrayOut, NumUnique, ErrStat, ErrM ! Initialize things ErrStat = ErrID_None - ErrStatTmp = ErrID_None - ErrMsg = '' - ErrMsgTmp = '' + ErrMsg = "" ! Allocate the temporary array CALL AllocAry( TmpRealArray, SIZE(DataArrayIn,1), 'Temporary array for data sorting', ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF @@ -5384,14 +5091,20 @@ SUBROUTINE UniqueRealValues( DataArrayIn, DataArrayOut, NumUnique, ErrStat, ErrM CALL AllocAry( DataArrayOut, NumUnique, 'Return array with sorted values', ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp + CALL CleanUp() RETURN ENDIF ! Copy the values over DataArrayOut = TmpRealArray(1:NumUnique) - + call cleanup() + + contains + subroutine cleanup() + if (allocated(TmpRealArray)) deallocate(TmpRealArray) + end subroutine cleanup + END SUBROUTINE UniqueRealValues @@ -5435,13 +5148,13 @@ SUBROUTINE GetFileLength(UnitDataFile, Filename, NumDataColumns, NumDataLines, N INTEGER(IntKi) :: TmpIOErrStat !< Temporary error status for the internal read of the first word to a real number LOGICAL :: IsRealNum !< Flag indicating if the first word on the line was a real number - CHARACTER(1024) :: TextLine !< One line of text read from the file + CHARACTER(MaxFileInfoLineLen) :: TextLine !< One line of text read from the file INTEGER(IntKi) :: LineLen !< The length of the line read in CHARACTER(1024) :: StrRead !< String containing the first word read in REAL(SiKi) :: RealRead !< Returns value of the number (if there was one), or NaN (as set by NWTC_Num) if there wasn't - CHARACTER(1024) :: VarName !< Name of the variable we are trying to read from the file +! CHARACTER(1024) :: VarName !< Name of the variable we are trying to read from the file CHARACTER(NWTC_SizeOfNumWord) :: Words(20) !< Array of words we extract from a line. We shouldn't have more than 20. - INTEGER(IntKi) :: i,j,k !< simple integer counters + INTEGER(IntKi) :: i !,j,k !< simple integer counters INTEGER(IntKi) :: LineNumber !< the line I am on LOGICAL :: LineHasText !< Flag indicating if the line I just read has text. If so, it is a header line. LOGICAL :: HaveReadData !< Flag indicating if I have started reading data. @@ -5517,10 +5230,7 @@ SUBROUTINE GetFileLength(UnitDataFile, Filename, NumDataColumns, NumDataLines, N CALL SetErrStat( ErrID_Fatal, ' Found text on line '//TRIM(Num2LStr(LineNumber))//' of '//TRIM(FileName)// & ' when real numbers were expected. There may be a problem with the 2nd order WAMIT file: '// & TRIM(Filename)//'.', ErrStat, ErrMsg, RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF + RETURN ELSE NumHeaderLines = NumHeaderLines + 1 ENDIF @@ -5540,10 +5250,7 @@ SUBROUTINE GetFileLength(UnitDataFile, Filename, NumDataColumns, NumDataLines, N '('//TRIM(Num2LStr(NumWords))//' columns) is different than the number of columns on first row of data '// & ' (line: '//TRIM(Num2LStr(FirstDataLineNum))//', '//TRIM(Num2LStr(NumDataColumns))//' columns).', & ErrStat, ErrMsg, RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF + RETURN ENDIF ENDIF ENDIF @@ -5553,10 +5260,7 @@ SUBROUTINE GetFileLength(UnitDataFile, Filename, NumDataColumns, NumDataLines, N IF ( NumDataLines < 2 ) THEN CALL SetErrStat( ErrID_Fatal, ' 2nd order WAMIT file '//TRIM(Filename)//' contains only '//TRIM(Num2LStr(NumDataLines))// & ' lines of data. This does not appear to be a valid WAMIT file.', ErrStat, ErrMsg, RoutineName) - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - ENDIF + RETURN ENDIF REWIND( UnitDataFile ) @@ -5690,124 +5394,15 @@ END SUBROUTINE ReadRealNumber -END SUBROUTINE WAMIT2_Init - - - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is called at the end of the simulation. The purpose of this routine is to destroy any data that is leftover. If -!! we don't do this, we may leave memory tied up after the simulation ends. -!! To destroy the data, we call several routines that are generated by the FAST registry, so any issues with the destroy routines -!! should be addressed by the registry.exe which generates the WAMIT2_Types.f90 file. -!! -SUBROUTINE WAMIT2_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u !< System inputs - TYPE(WAMIT2_ParameterType), INTENT(INOUT) :: p !< Parameters - TYPE(WAMIT2_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states - TYPE(WAMIT2_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states - TYPE(WAMIT2_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states - TYPE(WAMIT2_OtherStateType), INTENT(INOUT) :: OtherState !< Other states - TYPE(WAMIT2_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - - !> Place any last minute operations or calculations here. For WAMIT2, most calculations are performed - !! during the initialization, so there are no final calculations that need to be performed. - - - !> Close files here. The only files that are opened for WAMIT2 take place during the initialization routine. They should - !! have been closed then. - !! @todo Check to make sure nothing is left open by this module. - - - !> Destroy the input data: - - CALL WAMIT2_DestroyInput( u, ErrStat, ErrMsg ) - - - !> Destroy the parameter data: - - CALL WAMIT2_DestroyParam( p, ErrStat, ErrMsg ) - - - !> Destroy the state data: - - CALL WAMIT2_DestroyContState( x, ErrStat, ErrMsg ) - CALL WAMIT2_DestroyDiscState( xd, ErrStat, ErrMsg ) - CALL WAMIT2_DestroyConstrState( z, ErrStat, ErrMsg ) - CALL WAMIT2_DestroyOtherState( OtherState, ErrStat, ErrMsg ) - - - !> Destroy the output data: - - CALL WAMIT2_DestroyOutput( y, ErrStat, ErrMsg ) - - -END SUBROUTINE WAMIT2_End - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> Loose coupling routine for solving constraint states, integrating continuous states, and updating discrete states. -!> Continuous, constraint, and discrete states are updated to values at t + Interval. -SUBROUTINE WAMIT2_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds - INTEGER(IntKi), INTENT(IN ) :: n !< Current step of the simulation: t = n*Interval - TYPE(WAMIT2_InputType), INTENT(IN ) :: Inputs(:) !< Inputs at InputTimes - REAL(DbKi), INTENT(IN ) :: InputTimes(:) !< Times in seconds associated with Inputs - TYPE(WAMIT2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(WAMIT2_ContinuousStateType), INTENT(INOUT) :: x !< Input: Continuous states at t; - !!Output: Continuous states at t + Interval - TYPE(WAMIT2_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at t; - !!Output: Discrete states at t + Interval - TYPE(WAMIT2_ConstraintStateType), INTENT(INOUT) :: z !< Input: Constraint states at t; - !!Output: Constraint states at t + Interval - TYPE(WAMIT2_OtherStateType), INTENT(INOUT) :: OtherState !< Input: Other states at t; - !! Output: Other states at t + Interval - TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - -END SUBROUTINE WAMIT2_UpdateStates - - - !---------------------------------------------------------------------------------------------------------------------------------- !> Routine for computing outputs, used in both loose and tight coupling. -SUBROUTINE WAMIT2_CalcOutput( Time, WaveTime, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) +SUBROUTINE WAMIT2_CalcOutput( Time, WaveTime, p, y, m, ErrStat, ErrMsg ) !.................................................................................................................................. REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds real(SiKi), intent(in ) :: WaveTime(:) !< Array of wave kinematic time samples, (sec) - TYPE(WAMIT2_InputType), INTENT(IN ) :: u !< Inputs at Time TYPE(WAMIT2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(WAMIT2_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(WAMIT2_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(WAMIT2_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(WAMIT2_OtherStateType), INTENT(IN ) :: OtherState !< Other states TYPE(WAMIT2_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh !! connectivity information does not have to be recalculated) TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables @@ -5866,118 +5461,6 @@ END SUBROUTINE WAMIT2_CalcOutput -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is required for the FAST framework, but is not actually needed for this module. -!! In the framework, this routine calculates the derivative of the continuous states. -!! As this routine is not necessary in the WAMIT2 module, it simply issues a warning and returns. -!! @note A few values will be set so that compilers are happy, but nothing of value is done. -SUBROUTINE WAMIT2_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(WAMIT2_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(WAMIT2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(WAMIT2_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(WAMIT2_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(WAMIT2_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(WAMIT2_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - TYPE(WAMIT2_ContinuousStateType), INTENT( OUT) :: dxdt !< Continuous state derivatives at Time - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "Warning: No States to take derivative of in WAMIT2 module. *WAMIT2::CalcContStateDeriv was called. It "// & - "is not necessary in the WAMIT2 module, so it does nothing.*" - - - ! Compute the first time derivatives of the continuous states here: None to calculate, so no code here. - - ! Dummy output value for dxdt -- this is only here to prevent the compiler from complaining. - dxdt%DummyContState = 0.0_SiKi - - -END SUBROUTINE WAMIT2_CalcContStateDeriv - - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is required for the FAST framework, but is not actually needed for this module. -!! In the framework, this routine is used to update discrete states, by -!! So, this routine will simply issue a warning and return. -SUBROUTINE WAMIT2_UpdateDiscState( Time, n, u, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - INTEGER(IntKi), INTENT(IN ) :: n !< Current step of the simulation: t = n*Interval - TYPE(WAMIT2_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(WAMIT2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(WAMIT2_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(WAMIT2_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at Time; - !! Output: Discrete states at Time + Interval - TYPE(WAMIT2_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(WAMIT2_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "Warning: No Discrete States to update in WAMIT2 module. *WAMIT2::UpdateDiscState was called. It is not "// & - "necessary in the WAMIT2 module, so it does nothing.*" - - ! Code to update the discrete states would live here, but there are no discrete states to update, hence no code. - - -END SUBROUTINE WAMIT2_UpdateDiscState - - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is required for the FAST framework, but is not actually needed for this module. -!! In the framework, this is a tight coupling routine for solving for the residual of the constraint state equations -!! So, this routine will simply issue a warning and return. -!! @note A few values will be set so that compilers are happy, but nothing of value is done. -SUBROUTINE WAMIT2_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m, z_residual, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(WAMIT2_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(WAMIT2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(WAMIT2_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(WAMIT2_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(WAMIT2_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time (possibly a guess) - TYPE(WAMIT2_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - TYPE(WAMIT2_ConstraintStateType), INTENT( OUT) :: z_residual !< Residual of the constraint state equations using - !! the input values described above - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "Warning: No States in WAMIT2 module. *WAMIT2::CalcConstrStateResidual was called. It is not needed in "//& - "the WAMIT2 module, so it does nothing useful." - - - - ! Solve for the constraint states here: Since there are no constraint states to solve for in WAMIT2, there is no code here. - - z_residual%DummyConstrState = 0.0_SiKi ! This exists just so that we can make the compiler happy. - -END SUBROUTINE WAMIT2_CalcConstrStateResidual - - - !------------------------------------------------------------------------------- !> This subroutine copies data stored from a W2_InitData4D_Type to a W2_InitData3D_Type SUBROUTINE Copy_InitData4Dto3D( Data4D, Data3D, ErrStat, ErrMsg ) @@ -6127,6 +5610,10 @@ SUBROUTINE Destroy_InitData3D(Data3D) IMPLICIT NONE TYPE(W2_InitData3D_Type), INTENT(INOUT) :: Data3D INTEGER(IntKi) :: ErrStatTmp + + IF (ALLOCATED(Data3D%DataIsSparse)) DEALLOCATE(Data3D%DataIsSparse,STAT=ErrStatTmp) + IF (ALLOCATED(Data3D%LoadComponents)) DEALLOCATE(Data3D%LoadComponents,STAT=ErrStatTmp) + IF (ALLOCATED(Data3D%DataSet)) DEALLOCATE(Data3D%DataSet,STAT=ErrStatTmp) IF (ALLOCATED(Data3D%DataMask)) DEALLOCATE(Data3D%DataMask,STAT=ErrStatTmp) IF (ALLOCATED(Data3D%WvFreq1)) DEALLOCATE(Data3D%WvFreq1,STAT=ErrStatTmp) @@ -6140,12 +5627,16 @@ SUBROUTINE Destroy_InitData4D(Data4D) IMPLICIT NONE TYPE(W2_InitData4D_Type), INTENT(INOUT) :: Data4D INTEGER(IntKi) :: ErrStatTmp - IF (ALLOCATED(Data4D%DataSet)) DEALLOCATE(Data4D%DataSet,STAT=ErrStatTmp) - IF (ALLOCATED(Data4D%DataMask)) DEALLOCATE(Data4D%DataMask,STAT=ErrStatTmp) - IF (ALLOCATED(Data4D%WvFreq1)) DEALLOCATE(Data4D%WvFreq1,STAT=ErrStatTmp) - IF (ALLOCATED(Data4D%WvFreq2)) DEALLOCATE(Data4D%WvFreq2,STAT=ErrStatTmp) - IF (ALLOCATED(Data4D%WvDir1)) DEALLOCATE(Data4D%WvDir1,STAT=ErrStatTmp) - IF (ALLOCATED(Data4D%WvDir2)) DEALLOCATE(Data4D%WvDir2,STAT=ErrStatTmp) + + IF (ALLOCATED(Data4D%DataIsSparse)) DEALLOCATE(Data4D%DataIsSparse,STAT=ErrStatTmp) + IF (ALLOCATED(Data4D%LoadComponents)) DEALLOCATE(Data4D%LoadComponents,STAT=ErrStatTmp) + + IF (ALLOCATED(Data4D%DataSet)) DEALLOCATE(Data4D%DataSet,STAT=ErrStatTmp) + IF (ALLOCATED(Data4D%DataMask)) DEALLOCATE(Data4D%DataMask,STAT=ErrStatTmp) + IF (ALLOCATED(Data4D%WvFreq1)) DEALLOCATE(Data4D%WvFreq1,STAT=ErrStatTmp) + IF (ALLOCATED(Data4D%WvFreq2)) DEALLOCATE(Data4D%WvFreq2,STAT=ErrStatTmp) + IF (ALLOCATED(Data4D%WvDir1)) DEALLOCATE(Data4D%WvDir1,STAT=ErrStatTmp) + IF (ALLOCATED(Data4D%WvDir2)) DEALLOCATE(Data4D%WvDir2,STAT=ErrStatTmp) END SUBROUTINE Destroy_InitData4D diff --git a/modules/hydrodyn/src/WAMIT2.txt b/modules/hydrodyn/src/WAMIT2.txt index 992093a69a..79ff8a8b33 100644 --- a/modules/hydrodyn/src/WAMIT2.txt +++ b/modules/hydrodyn/src/WAMIT2.txt @@ -19,7 +19,6 @@ param WAMIT2/WAMIT2 unused INTEGER MaxWAMIT2Ou #InitInputType -- used for passing stuff into the Init routine. typedef WAMIT2/WAMIT2 InitInputType LOGICAL HasWAMIT - - - ".TRUE. if using WAMIT model, .FALSE. otherwise" - typedef ^ ^ CHARACTER(1024) WAMITFile - - - "Root of the filename for WAMIT2 outputs" - -typedef ^ ^ INTEGER UnSum - - - "The unit number for the HydroDyn summary file" - typedef ^ ^ INTEGER NBody - - - "[>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6]" - typedef ^ ^ INTEGER NBodyMod - - - "Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1]" - typedef ^ ^ ReKi PtfmRefxt {:} - - "The xt offset of the body reference point(s) from (0,0,0) [1 to NBody; only used when PotMod=1; must be 0.0 if NBodyMod=2 ]" (m) @@ -34,15 +33,14 @@ typedef ^ ^ INTEGER NStepWave2 typedef ^ ^ ReKi WaveDOmega - - - "Frequency step for incident wave calculations" (rad/s) typedef ^ ^ ReKi WtrDens - - - "Water density" (kg/m^3) typedef ^ ^ ReKi Gravity - - - "Supplied by Driver: Gravitational acceleration" (m/s^2) -typedef ^ ^ SiKi WtrDpth - - - "Water depth (positive-valued)" (m) +typedef ^ ^ ReKi WtrDpth - - - "Water depth (positive-valued)" (m) -typedef ^ ^ SiKi WaveElevC0 {:}{:} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part" (meters) +typedef ^ ^ SiKi WaveElevC0 {*}{*} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part (points to SeaState module data)" (meters) typedef ^ ^ SiKi WaveDir - - - "Mean incident wave propagation heading direction" (degrees) typedef ^ ^ LOGICAL WaveMultiDir - - - "Indicates the waves are multidirectional -- set by HydroDyn_Input" - -typedef ^ ^ SiKi WaveDirArr {:} - - "Wave direction assigned to each frequency" (degrees) +typedef ^ ^ SiKi WaveDirArr {*} - - "Wave direction assigned to each frequency (points to SeaState module data)" (degrees) typedef ^ ^ SiKi WaveDirMin - - - "Minimum wave direction from Waves module" - typedef ^ ^ SiKi WaveDirMax - - - "Maximum wave direction from Waves module" - -typedef ^ ^ SiKi WaveTime {:} - - "Simulation times at which the instantaneous second order loads associated with the incident waves are determined" sec typedef ^ ^ INTEGER WaveMod - - - "The wave model to use. This is for error checking -- ideally this would be done in the main calling routine, not here." - @@ -63,26 +61,6 @@ typedef ^ ^ ReKi WvLowCOffS typedef ^ ^ ReKi WvHiCOffS - - - "Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) -# Define outputs from the initialization routine here: -# -typedef ^ InitOutputType ReKi NULLVAL - - - "" - - - -# ..... States .................................................................................................................... -# Define continuous (differentiable) states here: -typedef ^ ContinuousStateType SiKi DummyContState - - - "Remove this variable if you have continuous states" - - - -# Define discrete (nondifferentiable) states here: -typedef ^ DiscreteStateType SiKi DummyDiscState - - - "Remove this variable if you have discrete states" - - - -# Define constraint states here: -typedef ^ ConstraintStateType SiKi DummyConstrState - - - "Remove this variable if you have constraint states" - - - -# Define any data that are integer or logical states here: -typedef ^ OtherStateType IntKi DummyOtherState - - - "Remove this variable if you have other states" - # ..... Misc/Optimization variables................................................................................................. @@ -97,9 +75,7 @@ typedef ^ ^ ReKi F_Waves2 # Define parameters here: # Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states: # -typedef ^ ParameterType SiKi WaveTime {:} - - "Simulation times at which the instantaneous second order loads associated with the incident waves are determined" sec -typedef ^ ^ IntKi NStepWave - - - "Number of wave time steps" - -typedef ^ ^ DbKi DT - - - "" - +typedef ^ ParameterType IntKi NStepWave - - - "Number of wave time steps" - typedef ^ ^ INTEGER NBody - - - "[>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6]" - typedef ^ ^ INTEGER NBodyMod - - - "Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1]" - @@ -117,22 +93,6 @@ typedef ^ ^ LOGICAL NewmanAppF typedef ^ ^ LOGICAL DiffQTFF - - - "Flag indicating the full difference QTF should be calculated" - typedef ^ ^ LOGICAL SumQTFF - - - "Flag indicating the full sum QTF should be calculated" - -typedef ^ ^ OutParmType OutParam {:} - - "" - -typedef ^ ^ INTEGER NumOuts - - - "" - -typedef ^ ^ INTEGER NumOutAll - - - "" - -typedef ^ ^ CHARACTER(20) OutFmt - - - "" - -typedef ^ ^ CHARACTER(20) OutSFmt - - - "" - -typedef ^ ^ CHARACTER(ChanLen) Delim - - - "" - -typedef ^ ^ INTEGER UnOutFile - - - "" - - - - - -# ..... Inputs .................................................................................................................... -# Define inputs that are contained on the mesh here: -# -typedef ^ InputType MeshType Mesh - - - "Displacements at the platform reference point in the inertial frame" - - # ..... Outputs ................................................................................................................... diff --git a/modules/hydrodyn/src/WAMIT2_Types.f90 b/modules/hydrodyn/src/WAMIT2_Types.f90 index d09382e26e..2e202905c4 100644 --- a/modules/hydrodyn/src/WAMIT2_Types.f90 +++ b/modules/hydrodyn/src/WAMIT2_Types.f90 @@ -38,7 +38,6 @@ MODULE WAMIT2_Types TYPE, PUBLIC :: WAMIT2_InitInputType LOGICAL :: HasWAMIT !< .TRUE. if using WAMIT model, .FALSE. otherwise [-] CHARACTER(1024) :: WAMITFile !< Root of the filename for WAMIT2 outputs [-] - INTEGER(IntKi) :: UnSum !< The unit number for the HydroDyn summary file [-] INTEGER(IntKi) :: NBody !< [>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6] [-] INTEGER(IntKi) :: NBodyMod !< Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1] [-] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: PtfmRefxt !< The xt offset of the body reference point(s) from (0,0,0) [1 to NBody; only used when PotMod=1; must be 0.0 if NBodyMod=2 ] [(m)] @@ -52,14 +51,13 @@ MODULE WAMIT2_Types REAL(ReKi) :: WaveDOmega !< Frequency step for incident wave calculations [(rad/s)] REAL(ReKi) :: WtrDens !< Water density [(kg/m^3)] REAL(ReKi) :: Gravity !< Supplied by Driver: Gravitational acceleration [(m/s^2)] - REAL(SiKi) :: WtrDpth !< Water depth (positive-valued) [(m)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevC0 !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part [(meters)] + REAL(ReKi) :: WtrDpth !< Water depth (positive-valued) [(m)] + REAL(SiKi) , DIMENSION(:,:), POINTER :: WaveElevC0 => NULL() !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part (points to SeaState module data) [(meters)] REAL(SiKi) :: WaveDir !< Mean incident wave propagation heading direction [(degrees)] LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveDirArr !< Wave direction assigned to each frequency [(degrees)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveDirArr => NULL() !< Wave direction assigned to each frequency (points to SeaState module data) [(degrees)] REAL(SiKi) :: WaveDirMin !< Minimum wave direction from Waves module [-] REAL(SiKi) :: WaveDirMax !< Maximum wave direction from Waves module [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Simulation times at which the instantaneous second order loads associated with the incident waves are determined [sec] INTEGER(IntKi) :: WaveMod !< The wave model to use. This is for error checking -- ideally this would be done in the main calling routine, not here. [-] INTEGER(IntKi) :: MnDrift !< Calculate the mean drift force {0: no mean drift; [7,8,9,10,11, or 12]: WAMIT file to use} [-] INTEGER(IntKi) :: NewmanApp !< Slow drift forces computed with Newman approximation from WAMIT file:{0: No slow drift; [7,8,9,10,11, or 12]: WAMIT file to use} [-] @@ -77,31 +75,6 @@ MODULE WAMIT2_Types REAL(ReKi) :: WvHiCOffS !< Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] END TYPE WAMIT2_InitInputType ! ======================= -! ========= WAMIT2_InitOutputType ======= - TYPE, PUBLIC :: WAMIT2_InitOutputType - REAL(ReKi) :: NULLVAL !< [-] - END TYPE WAMIT2_InitOutputType -! ======================= -! ========= WAMIT2_ContinuousStateType ======= - TYPE, PUBLIC :: WAMIT2_ContinuousStateType - REAL(SiKi) :: DummyContState !< Remove this variable if you have continuous states [-] - END TYPE WAMIT2_ContinuousStateType -! ======================= -! ========= WAMIT2_DiscreteStateType ======= - TYPE, PUBLIC :: WAMIT2_DiscreteStateType - REAL(SiKi) :: DummyDiscState !< Remove this variable if you have discrete states [-] - END TYPE WAMIT2_DiscreteStateType -! ======================= -! ========= WAMIT2_ConstraintStateType ======= - TYPE, PUBLIC :: WAMIT2_ConstraintStateType - REAL(SiKi) :: DummyConstrState !< Remove this variable if you have constraint states [-] - END TYPE WAMIT2_ConstraintStateType -! ======================= -! ========= WAMIT2_OtherStateType ======= - TYPE, PUBLIC :: WAMIT2_OtherStateType - INTEGER(IntKi) :: DummyOtherState !< Remove this variable if you have other states [-] - END TYPE WAMIT2_OtherStateType -! ======================= ! ========= WAMIT2_MiscVarType ======= TYPE, PUBLIC :: WAMIT2_MiscVarType INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: LastIndWave !< Index for last interpolation step of 2nd order forces [-] @@ -110,9 +83,7 @@ MODULE WAMIT2_Types ! ======================= ! ========= WAMIT2_ParameterType ======= TYPE, PUBLIC :: WAMIT2_ParameterType - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Simulation times at which the instantaneous second order loads associated with the incident waves are determined [sec] INTEGER(IntKi) :: NStepWave !< Number of wave time steps [-] - REAL(DbKi) :: DT !< [-] INTEGER(IntKi) :: NBody !< [>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6] [-] INTEGER(IntKi) :: NBodyMod !< Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1] [-] REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveExctn2 !< Time series of the resulting 2nd order force (first index is timestep, second index is load component) [(N)] @@ -124,20 +95,8 @@ MODULE WAMIT2_Types LOGICAL :: NewmanAppF !< Flag indicating Newman approximation should be calculated [-] LOGICAL :: DiffQTFF !< Flag indicating the full difference QTF should be calculated [-] LOGICAL :: SumQTFF !< Flag indicating the full sum QTF should be calculated [-] - TYPE(OutParmType) , DIMENSION(:), ALLOCATABLE :: OutParam !< [-] - INTEGER(IntKi) :: NumOuts !< [-] - INTEGER(IntKi) :: NumOutAll !< [-] - CHARACTER(20) :: OutFmt !< [-] - CHARACTER(20) :: OutSFmt !< [-] - CHARACTER(ChanLen) :: Delim !< [-] - INTEGER(IntKi) :: UnOutFile !< [-] END TYPE WAMIT2_ParameterType ! ======================= -! ========= WAMIT2_InputType ======= - TYPE, PUBLIC :: WAMIT2_InputType - TYPE(MeshType) :: Mesh !< Displacements at the platform reference point in the inertial frame [-] - END TYPE WAMIT2_InputType -! ======================= ! ========= WAMIT2_OutputType ======= TYPE, PUBLIC :: WAMIT2_OutputType TYPE(MeshType) :: Mesh !< Loads at the platform reference point in the inertial frame [-] @@ -162,7 +121,6 @@ SUBROUTINE WAMIT2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E ErrMsg = "" DstInitInputData%HasWAMIT = SrcInitInputData%HasWAMIT DstInitInputData%WAMITFile = SrcInitInputData%WAMITFile - DstInitInputData%UnSum = SrcInitInputData%UnSum DstInitInputData%NBody = SrcInitInputData%NBody DstInitInputData%NBodyMod = SrcInitInputData%NBodyMod IF (ALLOCATED(SrcInitInputData%PtfmRefxt)) THEN @@ -221,12 +179,12 @@ SUBROUTINE WAMIT2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E DstInitInputData%WtrDens = SrcInitInputData%WtrDens DstInitInputData%Gravity = SrcInitInputData%Gravity DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth -IF (ALLOCATED(SrcInitInputData%WaveElevC0)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveElevC0)) THEN i1_l = LBOUND(SrcInitInputData%WaveElevC0,1) i1_u = UBOUND(SrcInitInputData%WaveElevC0,1) i2_l = LBOUND(SrcInitInputData%WaveElevC0,2) i2_u = UBOUND(SrcInitInputData%WaveElevC0,2) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevC0)) THEN + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElevC0)) THEN ALLOCATE(DstInitInputData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) @@ -237,10 +195,10 @@ SUBROUTINE WAMIT2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E ENDIF DstInitInputData%WaveDir = SrcInitInputData%WaveDir DstInitInputData%WaveMultiDir = SrcInitInputData%WaveMultiDir -IF (ALLOCATED(SrcInitInputData%WaveDirArr)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveDirArr)) THEN i1_l = LBOUND(SrcInitInputData%WaveDirArr,1) i1_u = UBOUND(SrcInitInputData%WaveDirArr,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveDirArr)) THEN + IF (.NOT. ASSOCIATED(DstInitInputData%WaveDirArr)) THEN ALLOCATE(DstInitInputData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) @@ -251,18 +209,6 @@ SUBROUTINE WAMIT2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E ENDIF DstInitInputData%WaveDirMin = SrcInitInputData%WaveDirMin DstInitInputData%WaveDirMax = SrcInitInputData%WaveDirMax -IF (ALLOCATED(SrcInitInputData%WaveTime)) THEN - i1_l = LBOUND(SrcInitInputData%WaveTime,1) - i1_u = UBOUND(SrcInitInputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveTime)) THEN - ALLOCATE(DstInitInputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveTime = SrcInitInputData%WaveTime -ENDIF DstInitInputData%WaveMod = SrcInitInputData%WaveMod DstInitInputData%MnDrift = SrcInitInputData%MnDrift DstInitInputData%NewmanApp = SrcInitInputData%NewmanApp @@ -313,14 +259,15 @@ SUBROUTINE WAMIT2_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpo IF (ALLOCATED(InitInputData%PtfmRefztRot)) THEN DEALLOCATE(InitInputData%PtfmRefztRot) ENDIF -IF (ALLOCATED(InitInputData%WaveElevC0)) THEN +IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveElevC0) + InitInputData%WaveElevC0 => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveDirArr)) THEN +IF (ASSOCIATED(InitInputData%WaveDirArr)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveDirArr) -ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN - DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveDirArr => NULL() ENDIF END SUBROUTINE WAMIT2_DestroyInitInput @@ -361,7 +308,6 @@ SUBROUTINE WAMIT2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Int_BufSz = 0 Int_BufSz = Int_BufSz + 1 ! HasWAMIT Int_BufSz = Int_BufSz + 1*LEN(InData%WAMITFile) ! WAMITFile - Int_BufSz = Int_BufSz + 1 ! UnSum Int_BufSz = Int_BufSz + 1 ! NBody Int_BufSz = Int_BufSz + 1 ! NBodyMod Int_BufSz = Int_BufSz + 1 ! PtfmRefxt allocated yes/no @@ -393,24 +339,19 @@ SUBROUTINE WAMIT2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_BufSz = Re_BufSz + 1 ! Gravity Re_BufSz = Re_BufSz + 1 ! WtrDpth Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no - IF ( ALLOCATED(InData%WaveElevC0) ) THEN + IF ( ASSOCIATED(InData%WaveElevC0) ) THEN Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 END IF Re_BufSz = Re_BufSz + 1 ! WaveDir Int_BufSz = Int_BufSz + 1 ! WaveMultiDir Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no - IF ( ALLOCATED(InData%WaveDirArr) ) THEN + IF ( ASSOCIATED(InData%WaveDirArr) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr END IF Re_BufSz = Re_BufSz + 1 ! WaveDirMin Re_BufSz = Re_BufSz + 1 ! WaveDirMax - Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime - END IF Int_BufSz = Int_BufSz + 1 ! WaveMod Int_BufSz = Int_BufSz + 1 ! MnDrift Int_BufSz = Int_BufSz + 1 ! NewmanApp @@ -459,8 +400,6 @@ SUBROUTINE WAMIT2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er IntKiBuf(Int_Xferred) = ICHAR(InData%WAMITFile(I:I), IntKi) Int_Xferred = Int_Xferred + 1 END DO ! I - IntKiBuf(Int_Xferred) = InData%UnSum - Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NBody Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NBodyMod @@ -541,7 +480,7 @@ SUBROUTINE WAMIT2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WtrDpth Re_Xferred = Re_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveElevC0) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -565,7 +504,7 @@ SUBROUTINE WAMIT2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_Xferred = Re_Xferred + 1 IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveDirArr) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveDirArr) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -584,21 +523,6 @@ SUBROUTINE WAMIT2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WaveDirMax Re_Xferred = Re_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveTime) ) 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%WaveTime,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) - ReKiBuf(Re_Xferred) = InData%WaveTime(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF IntKiBuf(Int_Xferred) = InData%WaveMod Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%MnDrift @@ -665,8 +589,6 @@ SUBROUTINE WAMIT2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, OutData%WAMITFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) Int_Xferred = Int_Xferred + 1 END DO ! I - OutData%UnSum = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 OutData%NBody = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%NBodyMod = IntKiBuf(Int_Xferred) @@ -757,7 +679,7 @@ SUBROUTINE WAMIT2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 OutData%Gravity = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 - OutData%WtrDpth = REAL(ReKiBuf(Re_Xferred), SiKi) + OutData%WtrDpth = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 not allocated Int_Xferred = Int_Xferred + 1 @@ -769,7 +691,7 @@ SUBROUTINE WAMIT2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, i2_l = IntKiBuf( Int_Xferred ) i2_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) + IF (ASSOCIATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) @@ -793,7 +715,7 @@ SUBROUTINE WAMIT2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, i1_l = IntKiBuf( Int_Xferred ) i1_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) + IF (ASSOCIATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) @@ -808,24 +730,6 @@ SUBROUTINE WAMIT2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 OutData%WaveDirMax = REAL(ReKiBuf(Re_Xferred), SiKi) Re_Xferred = Re_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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%WaveTime)) DEALLOCATE(OutData%WaveTime) - ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) - OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF OutData%WaveMod = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%MnDrift = IntKiBuf(Int_Xferred) @@ -858,25 +762,49 @@ SUBROUTINE WAMIT2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 END SUBROUTINE WAMIT2_UnPackInitInput - SUBROUTINE WAMIT2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT2_InitOutputType), INTENT(IN) :: SrcInitOutputData - TYPE(WAMIT2_InitOutputType), INTENT(INOUT) :: DstInitOutputData + SUBROUTINE WAMIT2_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) + TYPE(WAMIT2_MiscVarType), INTENT(IN) :: SrcMiscData + TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: DstMiscData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyMisc' ! ErrStat = ErrID_None ErrMsg = "" - DstInitOutputData%NULLVAL = SrcInitOutputData%NULLVAL - END SUBROUTINE WAMIT2_CopyInitOutput +IF (ALLOCATED(SrcMiscData%LastIndWave)) THEN + i1_l = LBOUND(SrcMiscData%LastIndWave,1) + i1_u = UBOUND(SrcMiscData%LastIndWave,1) + IF (.NOT. ALLOCATED(DstMiscData%LastIndWave)) THEN + ALLOCATE(DstMiscData%LastIndWave(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%LastIndWave.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%LastIndWave = SrcMiscData%LastIndWave +ENDIF +IF (ALLOCATED(SrcMiscData%F_Waves2)) THEN + i1_l = LBOUND(SrcMiscData%F_Waves2,1) + i1_u = UBOUND(SrcMiscData%F_Waves2,1) + IF (.NOT. ALLOCATED(DstMiscData%F_Waves2)) THEN + ALLOCATE(DstMiscData%F_Waves2(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%F_Waves2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMiscData%F_Waves2 = SrcMiscData%F_Waves2 +ENDIF + END SUBROUTINE WAMIT2_CopyMisc - SUBROUTINE WAMIT2_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT2_InitOutputType), INTENT(INOUT) :: InitOutputData + SUBROUTINE WAMIT2_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: MiscData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers @@ -885,7 +813,7 @@ SUBROUTINE WAMIT2_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATE LOGICAL :: DEALLOCATEpointers_local INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyMisc' ErrStat = ErrID_None ErrMsg = "" @@ -896,13 +824,19 @@ SUBROUTINE WAMIT2_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATE DEALLOCATEpointers_local = .true. END IF - END SUBROUTINE WAMIT2_DestroyInitOutput +IF (ALLOCATED(MiscData%LastIndWave)) THEN + DEALLOCATE(MiscData%LastIndWave) +ENDIF +IF (ALLOCATED(MiscData%F_Waves2)) THEN + DEALLOCATE(MiscData%F_Waves2) +ENDIF + END SUBROUTINE WAMIT2_DestroyMisc - SUBROUTINE WAMIT2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE WAMIT2_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT2_InitOutputType), INTENT(IN) :: InData + TYPE(WAMIT2_MiscVarType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -917,7 +851,7 @@ SUBROUTINE WAMIT2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackMisc' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -933,7 +867,16 @@ SUBROUTINE WAMIT2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Re_BufSz = 0 Db_BufSz = 0 Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! NULLVAL + Int_BufSz = Int_BufSz + 1 ! LastIndWave allocated yes/no + IF ( ALLOCATED(InData%LastIndWave) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! LastIndWave upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%LastIndWave) ! LastIndWave + END IF + Int_BufSz = Int_BufSz + 1 ! F_Waves2 allocated yes/no + IF ( ALLOCATED(InData%F_Waves2) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! F_Waves2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%F_Waves2) ! F_Waves2 + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -961,15 +904,43 @@ SUBROUTINE WAMIT2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Db_Xferred = 1 Int_Xferred = 1 - ReKiBuf(Re_Xferred) = InData%NULLVAL - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT2_PackInitOutput + IF ( .NOT. ALLOCATED(InData%LastIndWave) ) 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%LastIndWave,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%LastIndWave,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%LastIndWave,1), UBOUND(InData%LastIndWave,1) + IntKiBuf(Int_Xferred) = InData%LastIndWave(i1) + Int_Xferred = Int_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%F_Waves2) ) 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%F_Waves2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%F_Waves2,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%F_Waves2,1), UBOUND(InData%F_Waves2,1) + ReKiBuf(Re_Xferred) = InData%F_Waves2(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + END SUBROUTINE WAMIT2_PackMisc - SUBROUTINE WAMIT2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + SUBROUTINE WAMIT2_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT2_InitOutputType), INTENT(INOUT) :: OutData + TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -978,9 +949,10 @@ SUBROUTINE WAMIT2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat INTEGER(IntKi) :: Db_Xferred INTEGER(IntKi) :: Int_Xferred INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackMisc' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -991,29 +963,89 @@ SUBROUTINE WAMIT2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Re_Xferred = 1 Db_Xferred = 1 Int_Xferred = 1 - OutData%NULLVAL = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT2_UnPackInitOutput + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! LastIndWave 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%LastIndWave)) DEALLOCATE(OutData%LastIndWave) + ALLOCATE(OutData%LastIndWave(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%LastIndWave.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%LastIndWave,1), UBOUND(OutData%LastIndWave,1) + OutData%LastIndWave(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! F_Waves2 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%F_Waves2)) DEALLOCATE(OutData%F_Waves2) + ALLOCATE(OutData%F_Waves2(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%F_Waves2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%F_Waves2,1), UBOUND(OutData%F_Waves2,1) + OutData%F_Waves2(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + END SUBROUTINE WAMIT2_UnPackMisc - SUBROUTINE WAMIT2_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT2_ContinuousStateType), INTENT(IN) :: SrcContStateData - TYPE(WAMIT2_ContinuousStateType), INTENT(INOUT) :: DstContStateData + SUBROUTINE WAMIT2_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) + TYPE(WAMIT2_ParameterType), INTENT(IN) :: SrcParamData + TYPE(WAMIT2_ParameterType), INTENT(INOUT) :: DstParamData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyContState' + CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyParam' ! ErrStat = ErrID_None ErrMsg = "" - DstContStateData%DummyContState = SrcContStateData%DummyContState - END SUBROUTINE WAMIT2_CopyContState + DstParamData%NStepWave = SrcParamData%NStepWave + DstParamData%NBody = SrcParamData%NBody + DstParamData%NBodyMod = SrcParamData%NBodyMod +IF (ALLOCATED(SrcParamData%WaveExctn2)) THEN + i1_l = LBOUND(SrcParamData%WaveExctn2,1) + i1_u = UBOUND(SrcParamData%WaveExctn2,1) + i2_l = LBOUND(SrcParamData%WaveExctn2,2) + i2_u = UBOUND(SrcParamData%WaveExctn2,2) + IF (.NOT. ALLOCATED(DstParamData%WaveExctn2)) THEN + ALLOCATE(DstParamData%WaveExctn2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveExctn2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveExctn2 = SrcParamData%WaveExctn2 +ENDIF + DstParamData%MnDriftDims = SrcParamData%MnDriftDims + DstParamData%NewmanAppDims = SrcParamData%NewmanAppDims + DstParamData%DiffQTFDims = SrcParamData%DiffQTFDims + DstParamData%SumQTFDims = SrcParamData%SumQTFDims + DstParamData%MnDriftF = SrcParamData%MnDriftF + DstParamData%NewmanAppF = SrcParamData%NewmanAppF + DstParamData%DiffQTFF = SrcParamData%DiffQTFF + DstParamData%SumQTFF = SrcParamData%SumQTFF + END SUBROUTINE WAMIT2_CopyParam - SUBROUTINE WAMIT2_DestroyContState( ContStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT2_ContinuousStateType), INTENT(INOUT) :: ContStateData + SUBROUTINE WAMIT2_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(WAMIT2_ParameterType), INTENT(INOUT) :: ParamData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers @@ -1022,7 +1054,7 @@ SUBROUTINE WAMIT2_DestroyContState( ContStateData, ErrStat, ErrMsg, DEALLOCATEpo LOGICAL :: DEALLOCATEpointers_local INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyContState' + CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyParam' ErrStat = ErrID_None ErrMsg = "" @@ -1033,13 +1065,16 @@ SUBROUTINE WAMIT2_DestroyContState( ContStateData, ErrStat, ErrMsg, DEALLOCATEpo DEALLOCATEpointers_local = .true. END IF - END SUBROUTINE WAMIT2_DestroyContState +IF (ALLOCATED(ParamData%WaveExctn2)) THEN + DEALLOCATE(ParamData%WaveExctn2) +ENDIF + END SUBROUTINE WAMIT2_DestroyParam - SUBROUTINE WAMIT2_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE WAMIT2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT2_ContinuousStateType), INTENT(IN) :: InData + TYPE(WAMIT2_ParameterType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -1054,7 +1089,7 @@ SUBROUTINE WAMIT2_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackContState' + CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackParam' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -1070,7 +1105,22 @@ SUBROUTINE WAMIT2_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_BufSz = 0 Db_BufSz = 0 Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyContState + Int_BufSz = Int_BufSz + 1 ! NStepWave + Int_BufSz = Int_BufSz + 1 ! NBody + Int_BufSz = Int_BufSz + 1 ! NBodyMod + Int_BufSz = Int_BufSz + 1 ! WaveExctn2 allocated yes/no + IF ( ALLOCATED(InData%WaveExctn2) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! WaveExctn2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveExctn2) ! WaveExctn2 + END IF + Int_BufSz = Int_BufSz + SIZE(InData%MnDriftDims) ! MnDriftDims + Int_BufSz = Int_BufSz + SIZE(InData%NewmanAppDims) ! NewmanAppDims + Int_BufSz = Int_BufSz + SIZE(InData%DiffQTFDims) ! DiffQTFDims + Int_BufSz = Int_BufSz + SIZE(InData%SumQTFDims) ! SumQTFDims + Int_BufSz = Int_BufSz + 1 ! MnDriftF + Int_BufSz = Int_BufSz + 1 ! NewmanAppF + Int_BufSz = Int_BufSz + 1 ! DiffQTFF + Int_BufSz = Int_BufSz + 1 ! SumQTFF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1098,1390 +1148,63 @@ SUBROUTINE WAMIT2_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Db_Xferred = 1 Int_Xferred = 1 - ReKiBuf(Re_Xferred) = InData%DummyContState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT2_PackContState + IntKiBuf(Int_Xferred) = InData%NStepWave + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NBody + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NBodyMod + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveExctn2) ) 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%WaveExctn2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveExctn2,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveExctn2,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveExctn2,2) + Int_Xferred = Int_Xferred + 2 - SUBROUTINE WAMIT2_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT2_ContinuousStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackContState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyContState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT2_UnPackContState - - SUBROUTINE WAMIT2_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT2_DiscreteStateType), INTENT(IN) :: SrcDiscStateData - TYPE(WAMIT2_DiscreteStateType), INTENT(INOUT) :: DstDiscStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyDiscState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstDiscStateData%DummyDiscState = SrcDiscStateData%DummyDiscState - END SUBROUTINE WAMIT2_CopyDiscState - - SUBROUTINE WAMIT2_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT2_DiscreteStateType), INTENT(INOUT) :: DiscStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyDiscState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE WAMIT2_DestroyDiscState - - SUBROUTINE WAMIT2_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT2_DiscreteStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackDiscState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyDiscState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyDiscState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT2_PackDiscState - - SUBROUTINE WAMIT2_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT2_DiscreteStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackDiscState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyDiscState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT2_UnPackDiscState - - SUBROUTINE WAMIT2_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT2_ConstraintStateType), INTENT(IN) :: SrcConstrStateData - TYPE(WAMIT2_ConstraintStateType), INTENT(INOUT) :: DstConstrStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyConstrState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstConstrStateData%DummyConstrState = SrcConstrStateData%DummyConstrState - END SUBROUTINE WAMIT2_CopyConstrState - - SUBROUTINE WAMIT2_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT2_ConstraintStateType), INTENT(INOUT) :: ConstrStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyConstrState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE WAMIT2_DestroyConstrState - - SUBROUTINE WAMIT2_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT2_ConstraintStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackConstrState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyConstrState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyConstrState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT2_PackConstrState - - SUBROUTINE WAMIT2_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT2_ConstraintStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackConstrState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyConstrState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT2_UnPackConstrState - - SUBROUTINE WAMIT2_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT2_OtherStateType), INTENT(IN) :: SrcOtherStateData - TYPE(WAMIT2_OtherStateType), INTENT(INOUT) :: DstOtherStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyOtherState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstOtherStateData%DummyOtherState = SrcOtherStateData%DummyOtherState - END SUBROUTINE WAMIT2_CopyOtherState - - SUBROUTINE WAMIT2_DestroyOtherState( OtherStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT2_OtherStateType), INTENT(INOUT) :: OtherStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyOtherState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE WAMIT2_DestroyOtherState - - SUBROUTINE WAMIT2_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT2_OtherStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackOtherState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! DummyOtherState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IntKiBuf(Int_Xferred) = InData%DummyOtherState - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE WAMIT2_PackOtherState - - SUBROUTINE WAMIT2_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT2_OtherStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackOtherState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyOtherState = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE WAMIT2_UnPackOtherState - - SUBROUTINE WAMIT2_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT2_MiscVarType), INTENT(IN) :: SrcMiscData - TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: DstMiscData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyMisc' -! - ErrStat = ErrID_None - ErrMsg = "" -IF (ALLOCATED(SrcMiscData%LastIndWave)) THEN - i1_l = LBOUND(SrcMiscData%LastIndWave,1) - i1_u = UBOUND(SrcMiscData%LastIndWave,1) - IF (.NOT. ALLOCATED(DstMiscData%LastIndWave)) THEN - ALLOCATE(DstMiscData%LastIndWave(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%LastIndWave.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstMiscData%LastIndWave = SrcMiscData%LastIndWave -ENDIF -IF (ALLOCATED(SrcMiscData%F_Waves2)) THEN - i1_l = LBOUND(SrcMiscData%F_Waves2,1) - i1_u = UBOUND(SrcMiscData%F_Waves2,1) - IF (.NOT. ALLOCATED(DstMiscData%F_Waves2)) THEN - ALLOCATE(DstMiscData%F_Waves2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMiscData%F_Waves2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstMiscData%F_Waves2 = SrcMiscData%F_Waves2 -ENDIF - END SUBROUTINE WAMIT2_CopyMisc - - SUBROUTINE WAMIT2_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: MiscData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyMisc' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(MiscData%LastIndWave)) THEN - DEALLOCATE(MiscData%LastIndWave) -ENDIF -IF (ALLOCATED(MiscData%F_Waves2)) THEN - DEALLOCATE(MiscData%F_Waves2) -ENDIF - END SUBROUTINE WAMIT2_DestroyMisc - - SUBROUTINE WAMIT2_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT2_MiscVarType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackMisc' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! LastIndWave allocated yes/no - IF ( ALLOCATED(InData%LastIndWave) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! LastIndWave upper/lower bounds for each dimension - Int_BufSz = Int_BufSz + SIZE(InData%LastIndWave) ! LastIndWave - END IF - Int_BufSz = Int_BufSz + 1 ! F_Waves2 allocated yes/no - IF ( ALLOCATED(InData%F_Waves2) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! F_Waves2 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%F_Waves2) ! F_Waves2 - END IF - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IF ( .NOT. ALLOCATED(InData%LastIndWave) ) 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%LastIndWave,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%LastIndWave,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%LastIndWave,1), UBOUND(InData%LastIndWave,1) - IntKiBuf(Int_Xferred) = InData%LastIndWave(i1) - Int_Xferred = Int_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%F_Waves2) ) 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%F_Waves2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%F_Waves2,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%F_Waves2,1), UBOUND(InData%F_Waves2,1) - ReKiBuf(Re_Xferred) = InData%F_Waves2(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - END SUBROUTINE WAMIT2_PackMisc - - SUBROUTINE WAMIT2_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT2_MiscVarType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackMisc' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! LastIndWave 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%LastIndWave)) DEALLOCATE(OutData%LastIndWave) - ALLOCATE(OutData%LastIndWave(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%LastIndWave.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%LastIndWave,1), UBOUND(OutData%LastIndWave,1) - OutData%LastIndWave(i1) = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! F_Waves2 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%F_Waves2)) DEALLOCATE(OutData%F_Waves2) - ALLOCATE(OutData%F_Waves2(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%F_Waves2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%F_Waves2,1), UBOUND(OutData%F_Waves2,1) - OutData%F_Waves2(i1) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - END SUBROUTINE WAMIT2_UnPackMisc - - SUBROUTINE WAMIT2_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT2_ParameterType), INTENT(IN) :: SrcParamData - TYPE(WAMIT2_ParameterType), INTENT(INOUT) :: DstParamData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyParam' -! - ErrStat = ErrID_None - ErrMsg = "" -IF (ALLOCATED(SrcParamData%WaveTime)) THEN - i1_l = LBOUND(SrcParamData%WaveTime,1) - i1_u = UBOUND(SrcParamData%WaveTime,1) - IF (.NOT. ALLOCATED(DstParamData%WaveTime)) THEN - ALLOCATE(DstParamData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstParamData%WaveTime = SrcParamData%WaveTime -ENDIF - DstParamData%NStepWave = SrcParamData%NStepWave - DstParamData%DT = SrcParamData%DT - DstParamData%NBody = SrcParamData%NBody - DstParamData%NBodyMod = SrcParamData%NBodyMod -IF (ALLOCATED(SrcParamData%WaveExctn2)) THEN - i1_l = LBOUND(SrcParamData%WaveExctn2,1) - i1_u = UBOUND(SrcParamData%WaveExctn2,1) - i2_l = LBOUND(SrcParamData%WaveExctn2,2) - i2_u = UBOUND(SrcParamData%WaveExctn2,2) - IF (.NOT. ALLOCATED(DstParamData%WaveExctn2)) THEN - ALLOCATE(DstParamData%WaveExctn2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveExctn2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstParamData%WaveExctn2 = SrcParamData%WaveExctn2 -ENDIF - DstParamData%MnDriftDims = SrcParamData%MnDriftDims - DstParamData%NewmanAppDims = SrcParamData%NewmanAppDims - DstParamData%DiffQTFDims = SrcParamData%DiffQTFDims - DstParamData%SumQTFDims = SrcParamData%SumQTFDims - DstParamData%MnDriftF = SrcParamData%MnDriftF - DstParamData%NewmanAppF = SrcParamData%NewmanAppF - DstParamData%DiffQTFF = SrcParamData%DiffQTFF - DstParamData%SumQTFF = SrcParamData%SumQTFF -IF (ALLOCATED(SrcParamData%OutParam)) THEN - i1_l = LBOUND(SrcParamData%OutParam,1) - i1_u = UBOUND(SrcParamData%OutParam,1) - IF (.NOT. ALLOCATED(DstParamData%OutParam)) THEN - ALLOCATE(DstParamData%OutParam(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%OutParam.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcParamData%OutParam,1), UBOUND(SrcParamData%OutParam,1) - CALL NWTC_Library_Copyoutparmtype( SrcParamData%OutParam(i1), DstParamData%OutParam(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - DstParamData%NumOuts = SrcParamData%NumOuts - DstParamData%NumOutAll = SrcParamData%NumOutAll - DstParamData%OutFmt = SrcParamData%OutFmt - DstParamData%OutSFmt = SrcParamData%OutSFmt - DstParamData%Delim = SrcParamData%Delim - DstParamData%UnOutFile = SrcParamData%UnOutFile - END SUBROUTINE WAMIT2_CopyParam - - SUBROUTINE WAMIT2_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT2_ParameterType), INTENT(INOUT) :: ParamData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyParam' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(ParamData%WaveTime)) THEN - DEALLOCATE(ParamData%WaveTime) -ENDIF -IF (ALLOCATED(ParamData%WaveExctn2)) THEN - DEALLOCATE(ParamData%WaveExctn2) -ENDIF -IF (ALLOCATED(ParamData%OutParam)) THEN -DO i1 = LBOUND(ParamData%OutParam,1), UBOUND(ParamData%OutParam,1) - CALL NWTC_Library_Destroyoutparmtype( ParamData%OutParam(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(ParamData%OutParam) -ENDIF - END SUBROUTINE WAMIT2_DestroyParam - - SUBROUTINE WAMIT2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT2_ParameterType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackParam' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime - END IF - Int_BufSz = Int_BufSz + 1 ! NStepWave - Db_BufSz = Db_BufSz + 1 ! DT - Int_BufSz = Int_BufSz + 1 ! NBody - Int_BufSz = Int_BufSz + 1 ! NBodyMod - Int_BufSz = Int_BufSz + 1 ! WaveExctn2 allocated yes/no - IF ( ALLOCATED(InData%WaveExctn2) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveExctn2 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveExctn2) ! WaveExctn2 - END IF - Int_BufSz = Int_BufSz + SIZE(InData%MnDriftDims) ! MnDriftDims - Int_BufSz = Int_BufSz + SIZE(InData%NewmanAppDims) ! NewmanAppDims - Int_BufSz = Int_BufSz + SIZE(InData%DiffQTFDims) ! DiffQTFDims - Int_BufSz = Int_BufSz + SIZE(InData%SumQTFDims) ! SumQTFDims - Int_BufSz = Int_BufSz + 1 ! MnDriftF - Int_BufSz = Int_BufSz + 1 ! NewmanAppF - Int_BufSz = Int_BufSz + 1 ! DiffQTFF - Int_BufSz = Int_BufSz + 1 ! SumQTFF - Int_BufSz = Int_BufSz + 1 ! OutParam allocated yes/no - IF ( ALLOCATED(InData%OutParam) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! OutParam upper/lower bounds for each dimension - ! Allocate buffers for subtypes, if any (we'll get sizes from these) - DO i1 = LBOUND(InData%OutParam,1), UBOUND(InData%OutParam,1) - Int_BufSz = Int_BufSz + 3 ! OutParam: size of buffers for each call to pack subtype - CALL NWTC_Library_Packoutparmtype( Re_Buf, Db_Buf, Int_Buf, InData%OutParam(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OutParam - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! OutParam - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! OutParam - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! OutParam - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 1 ! NumOuts - Int_BufSz = Int_BufSz + 1 ! NumOutAll - Int_BufSz = Int_BufSz + 1*LEN(InData%OutFmt) ! OutFmt - Int_BufSz = Int_BufSz + 1*LEN(InData%OutSFmt) ! OutSFmt - Int_BufSz = Int_BufSz + 1*LEN(InData%Delim) ! Delim - Int_BufSz = Int_BufSz + 1 ! UnOutFile - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IF ( .NOT. ALLOCATED(InData%WaveTime) ) 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%WaveTime,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) - ReKiBuf(Re_Xferred) = InData%WaveTime(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IntKiBuf(Int_Xferred) = InData%NStepWave - Int_Xferred = Int_Xferred + 1 - DbKiBuf(Db_Xferred) = InData%DT - Db_Xferred = Db_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NBody - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NBodyMod - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveExctn2) ) 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%WaveExctn2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveExctn2,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveExctn2,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveExctn2,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveExctn2,2), UBOUND(InData%WaveExctn2,2) - DO i1 = LBOUND(InData%WaveExctn2,1), UBOUND(InData%WaveExctn2,1) - ReKiBuf(Re_Xferred) = InData%WaveExctn2(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - DO i1 = LBOUND(InData%MnDriftDims,1), UBOUND(InData%MnDriftDims,1) - IntKiBuf(Int_Xferred) = TRANSFER(InData%MnDriftDims(i1), IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - END DO - DO i1 = LBOUND(InData%NewmanAppDims,1), UBOUND(InData%NewmanAppDims,1) - IntKiBuf(Int_Xferred) = TRANSFER(InData%NewmanAppDims(i1), IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - END DO - DO i1 = LBOUND(InData%DiffQTFDims,1), UBOUND(InData%DiffQTFDims,1) - IntKiBuf(Int_Xferred) = TRANSFER(InData%DiffQTFDims(i1), IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - END DO - DO i1 = LBOUND(InData%SumQTFDims,1), UBOUND(InData%SumQTFDims,1) - IntKiBuf(Int_Xferred) = TRANSFER(InData%SumQTFDims(i1), IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - END DO - IntKiBuf(Int_Xferred) = TRANSFER(InData%MnDriftF, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%NewmanAppF, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%DiffQTFF, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%SumQTFF, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%OutParam) ) 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%OutParam,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%OutParam,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%OutParam,1), UBOUND(InData%OutParam,1) - CALL NWTC_Library_Packoutparmtype( Re_Buf, Db_Buf, Int_Buf, InData%OutParam(i1), ErrStat2, ErrMsg2, OnlySize ) ! OutParam - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - IntKiBuf(Int_Xferred) = InData%NumOuts - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NumOutAll - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(InData%OutFmt) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutFmt(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%OutSFmt) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutSFmt(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%Delim) - IntKiBuf(Int_Xferred) = ICHAR(InData%Delim(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - IntKiBuf(Int_Xferred) = InData%UnOutFile - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE WAMIT2_PackParam - - SUBROUTINE WAMIT2_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT2_ParameterType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackParam' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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%WaveTime)) DEALLOCATE(OutData%WaveTime) - ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) - OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - OutData%NStepWave = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%DT = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - OutData%NBody = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NBodyMod = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveExctn2 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveExctn2)) DEALLOCATE(OutData%WaveExctn2) - ALLOCATE(OutData%WaveExctn2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveExctn2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveExctn2,2), UBOUND(OutData%WaveExctn2,2) - DO i1 = LBOUND(OutData%WaveExctn2,1), UBOUND(OutData%WaveExctn2,1) - OutData%WaveExctn2(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - i1_l = LBOUND(OutData%MnDriftDims,1) - i1_u = UBOUND(OutData%MnDriftDims,1) - DO i1 = LBOUND(OutData%MnDriftDims,1), UBOUND(OutData%MnDriftDims,1) - OutData%MnDriftDims(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%MnDriftDims(i1)) - Int_Xferred = Int_Xferred + 1 - END DO - i1_l = LBOUND(OutData%NewmanAppDims,1) - i1_u = UBOUND(OutData%NewmanAppDims,1) - DO i1 = LBOUND(OutData%NewmanAppDims,1), UBOUND(OutData%NewmanAppDims,1) - OutData%NewmanAppDims(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%NewmanAppDims(i1)) - Int_Xferred = Int_Xferred + 1 - END DO - i1_l = LBOUND(OutData%DiffQTFDims,1) - i1_u = UBOUND(OutData%DiffQTFDims,1) - DO i1 = LBOUND(OutData%DiffQTFDims,1), UBOUND(OutData%DiffQTFDims,1) - OutData%DiffQTFDims(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%DiffQTFDims(i1)) - Int_Xferred = Int_Xferred + 1 - END DO - i1_l = LBOUND(OutData%SumQTFDims,1) - i1_u = UBOUND(OutData%SumQTFDims,1) - DO i1 = LBOUND(OutData%SumQTFDims,1), UBOUND(OutData%SumQTFDims,1) - OutData%SumQTFDims(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%SumQTFDims(i1)) - Int_Xferred = Int_Xferred + 1 - END DO - OutData%MnDriftF = TRANSFER(IntKiBuf(Int_Xferred), OutData%MnDriftF) - Int_Xferred = Int_Xferred + 1 - OutData%NewmanAppF = TRANSFER(IntKiBuf(Int_Xferred), OutData%NewmanAppF) - Int_Xferred = Int_Xferred + 1 - OutData%DiffQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%DiffQTFF) - Int_Xferred = Int_Xferred + 1 - OutData%SumQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%SumQTFF) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! OutParam 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%OutParam)) DEALLOCATE(OutData%OutParam) - ALLOCATE(OutData%OutParam(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%OutParam.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%OutParam,1), UBOUND(OutData%OutParam,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackoutparmtype( Re_Buf, Db_Buf, Int_Buf, OutData%OutParam(i1), ErrStat2, ErrMsg2 ) ! OutParam - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - OutData%NumOuts = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NumOutAll = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(OutData%OutFmt) - OutData%OutFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%OutSFmt) - OutData%OutSFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%Delim) - OutData%Delim(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%UnOutFile = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE WAMIT2_UnPackParam - - SUBROUTINE WAMIT2_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT2_InputType), INTENT(INOUT) :: SrcInputData - TYPE(WAMIT2_InputType), INTENT(INOUT) :: DstInputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_CopyInput' -! - ErrStat = ErrID_None - ErrMsg = "" - CALL MeshCopy( SrcInputData%Mesh, DstInputData%Mesh, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - END SUBROUTINE WAMIT2_CopyInput - - SUBROUTINE WAMIT2_DestroyInput( InputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT2_InputType), INTENT(INOUT) :: InputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_DestroyInput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - CALL MeshDestroy( InputData%Mesh, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - END SUBROUTINE WAMIT2_DestroyInput - - SUBROUTINE WAMIT2_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT2_InputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_PackInput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - ! Allocate buffers for subtypes, if any (we'll get sizes from these) - Int_BufSz = Int_BufSz + 3 ! Mesh: size of buffers for each call to pack subtype - CALL MeshPack( InData%Mesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! Mesh - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Mesh - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Mesh - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Mesh - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - CALL MeshPack( InData%Mesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! Mesh - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END SUBROUTINE WAMIT2_PackInput + DO i2 = LBOUND(InData%WaveExctn2,2), UBOUND(InData%WaveExctn2,2) + DO i1 = LBOUND(InData%WaveExctn2,1), UBOUND(InData%WaveExctn2,1) + ReKiBuf(Re_Xferred) = InData%WaveExctn2(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + DO i1 = LBOUND(InData%MnDriftDims,1), UBOUND(InData%MnDriftDims,1) + IntKiBuf(Int_Xferred) = TRANSFER(InData%MnDriftDims(i1), IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END DO + DO i1 = LBOUND(InData%NewmanAppDims,1), UBOUND(InData%NewmanAppDims,1) + IntKiBuf(Int_Xferred) = TRANSFER(InData%NewmanAppDims(i1), IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END DO + DO i1 = LBOUND(InData%DiffQTFDims,1), UBOUND(InData%DiffQTFDims,1) + IntKiBuf(Int_Xferred) = TRANSFER(InData%DiffQTFDims(i1), IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END DO + DO i1 = LBOUND(InData%SumQTFDims,1), UBOUND(InData%SumQTFDims,1) + IntKiBuf(Int_Xferred) = TRANSFER(InData%SumQTFDims(i1), IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END DO + IntKiBuf(Int_Xferred) = TRANSFER(InData%MnDriftF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%NewmanAppF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%DiffQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%SumQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE WAMIT2_PackParam - SUBROUTINE WAMIT2_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + SUBROUTINE WAMIT2_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT2_InputType), INTENT(INOUT) :: OutData + TYPE(WAMIT2_ParameterType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -2490,9 +1213,11 @@ SUBROUTINE WAMIT2_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err INTEGER(IntKi) :: Db_Xferred INTEGER(IntKi) :: Int_Xferred INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackInput' + CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_UnPackParam' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2503,47 +1228,68 @@ SUBROUTINE WAMIT2_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err Re_Xferred = 1 Db_Xferred = 1 Int_Xferred = 1 - Buf_size=IntKiBuf( Int_Xferred ) + OutData%NStepWave = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NBody = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NBodyMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveExctn2 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveExctn2)) DEALLOCATE(OutData%WaveExctn2) + ALLOCATE(OutData%WaveExctn2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveExctn2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%WaveExctn2,2), UBOUND(OutData%WaveExctn2,2) + DO i1 = LBOUND(OutData%WaveExctn2,1), UBOUND(OutData%WaveExctn2,1) + OutData%WaveExctn2(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + i1_l = LBOUND(OutData%MnDriftDims,1) + i1_u = UBOUND(OutData%MnDriftDims,1) + DO i1 = LBOUND(OutData%MnDriftDims,1), UBOUND(OutData%MnDriftDims,1) + OutData%MnDriftDims(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%MnDriftDims(i1)) Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) + END DO + i1_l = LBOUND(OutData%NewmanAppDims,1) + i1_u = UBOUND(OutData%NewmanAppDims,1) + DO i1 = LBOUND(OutData%NewmanAppDims,1), UBOUND(OutData%NewmanAppDims,1) + OutData%NewmanAppDims(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%NewmanAppDims(i1)) Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) + END DO + i1_l = LBOUND(OutData%DiffQTFDims,1) + i1_u = UBOUND(OutData%DiffQTFDims,1) + DO i1 = LBOUND(OutData%DiffQTFDims,1), UBOUND(OutData%DiffQTFDims,1) + OutData%DiffQTFDims(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%DiffQTFDims(i1)) Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL MeshUnpack( OutData%Mesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! Mesh - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END SUBROUTINE WAMIT2_UnPackInput + END DO + i1_l = LBOUND(OutData%SumQTFDims,1) + i1_u = UBOUND(OutData%SumQTFDims,1) + DO i1 = LBOUND(OutData%SumQTFDims,1), UBOUND(OutData%SumQTFDims,1) + OutData%SumQTFDims(i1) = TRANSFER(IntKiBuf(Int_Xferred), OutData%SumQTFDims(i1)) + Int_Xferred = Int_Xferred + 1 + END DO + OutData%MnDriftF = TRANSFER(IntKiBuf(Int_Xferred), OutData%MnDriftF) + Int_Xferred = Int_Xferred + 1 + OutData%NewmanAppF = TRANSFER(IntKiBuf(Int_Xferred), OutData%NewmanAppF) + Int_Xferred = Int_Xferred + 1 + OutData%DiffQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%DiffQTFF) + Int_Xferred = Int_Xferred + 1 + OutData%SumQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%SumQTFF) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE WAMIT2_UnPackParam SUBROUTINE WAMIT2_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrMsg ) TYPE(WAMIT2_OutputType), INTENT(INOUT) :: SrcOutputData @@ -2768,160 +1514,6 @@ SUBROUTINE WAMIT2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er END SUBROUTINE WAMIT2_UnPackOutput - SUBROUTINE WAMIT2_Input_ExtrapInterp(u, t, u_out, t_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is given by the size of u -! -! expressions below based on either -! -! f(t) = a -! f(t) = a + b * t, or -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = u1, f(t2) = u2, f(t3) = u3 (as appropriate) -! -!.................................................................................................................................. - - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u(:) ! Input at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: t_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_Input_ExtrapInterp' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - if ( size(t) .ne. size(u)) then - CALL SetErrStat(ErrID_Fatal,'size(t) must equal size(u)',ErrStat,ErrMsg,RoutineName) - RETURN - endif - order = SIZE(u) - 1 - IF ( order .eq. 0 ) THEN - CALL WAMIT2_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL WAMIT2_Input_ExtrapInterp1(u(1), u(2), t, u_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 2 ) THEN - CALL WAMIT2_Input_ExtrapInterp2(u(1), u(2), u(3), t, u_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE - CALL SetErrStat(ErrID_Fatal,'size(u) must be less than 4 (order must be less than 3).',ErrStat,ErrMsg,RoutineName) - RETURN - ENDIF - END SUBROUTINE WAMIT2_Input_ExtrapInterp - - - SUBROUTINE WAMIT2_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is 1. -! -! f(t) = a + b * t, or -! -! where a and b are determined as the solution to -! f(t1) = u1, f(t2) = u2 -! -!.................................................................................................................................. - - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u1 ! Input at t1 > t2 - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u2 ! Input at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(2) ! Times associated with the Inputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_Input_ExtrapInterp1' - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / t(2) - CALL MeshExtrapInterp1(u1%Mesh, u2%Mesh, tin, u_out%Mesh, tin_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - END SUBROUTINE WAMIT2_Input_ExtrapInterp1 - - - SUBROUTINE WAMIT2_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is 2. -! -! expressions below based on either -! -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = u1, f(t2) = u2, f(t3) = u3 -! -!.................................................................................................................................. - - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u1 ! Input at t1 > t2 > t3 - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u2 ! Input at t2 > t3 - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u3 ! Input at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs - TYPE(WAMIT2_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(3) ! Times associated with the Inputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: c ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT2_Input_ExtrapInterp2' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(2), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(2) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(1), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / (t(2) * t(3) * (t(2) - t(3))) - CALL MeshExtrapInterp2(u1%Mesh, u2%Mesh, u3%Mesh, tin, u_out%Mesh, tin_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - END SUBROUTINE WAMIT2_Input_ExtrapInterp2 - - SUBROUTINE WAMIT2_Output_ExtrapInterp(y, t, y_out, t_out, ErrStat, ErrMsg ) ! ! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time diff --git a/modules/hydrodyn/src/WAMIT_Types.f90 b/modules/hydrodyn/src/WAMIT_Types.f90 index 4cdcbb6a88..863606d744 100644 --- a/modules/hydrodyn/src/WAMIT_Types.f90 +++ b/modules/hydrodyn/src/WAMIT_Types.f90 @@ -33,17 +33,16 @@ MODULE WAMIT_Types !--------------------------------------------------------------------------------------------------------------------------------- USE Conv_Radiation_Types USE SS_Radiation_Types +USE SeaState_Interp_Types USE SS_Excitation_Types -USE Waves_Types USE NWTC_Library IMPLICIT NONE - INTEGER(IntKi), PUBLIC, PARAMETER :: MaxWAMITOutputs = 18 ! [-] ! ========= WAMIT_InitInputType ======= TYPE, PUBLIC :: WAMIT_InitInputType INTEGER(IntKi) :: NBody !< [>=1; only used when PotMod=1. If NBodyMod=1, the WAMIT data contains a vector of size 6*NBody x 1 and matrices of size 6*NBody x 6*NBody; if NBodyMod>1, there are NBody sets of WAMIT data each with a vector of size 6 x 1 and matrices of size 6 x 6] [-] INTEGER(IntKi) :: NBodyMod !< Body coupling model {1: include coupling terms between each body and NBody in HydroDyn equals NBODY in WAMIT, 2: neglect coupling terms between each body and NBODY=1 with XBODY=0 in WAMIT, 3: Neglect coupling terms between each body and NBODY=1 with XBODY=/0 in WAMIT} (switch) [only used when PotMod=1] [-] REAL(ReKi) :: Gravity !< Supplied by Driver: Gravitational acceleration [(m/s^2)] - REAL(SiKi) :: WtrDpth !< Water depth (positive-valued) [m] + REAL(ReKi) :: WtrDpth !< Water depth (positive-valued) [m] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: PtfmVol0 !< [-] LOGICAL :: HasWAMIT !< .TRUE. if using WAMIT model, .FALSE. otherwise [-] REAL(ReKi) :: WAMITULEN !< [-] @@ -55,6 +54,8 @@ MODULE WAMIT_Types REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: PtfmCOByt !< [-] INTEGER(IntKi) :: RdtnMod !< [-] INTEGER(IntKi) :: ExctnMod !< [-] + INTEGER(IntKi) :: ExctnDisp !< 0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0] [-] + REAL(ReKi) :: ExctnCutOff !< Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] [Hz] REAL(DbKi) :: RdtnTMax !< [-] REAL(ReKi) :: WaveDir !< [-] CHARACTER(1024) :: WAMITFile !< [-] @@ -64,23 +65,18 @@ MODULE WAMIT_Types INTEGER(IntKi) :: NStepWave2 !< [-] REAL(ReKi) :: WaveDOmega !< [-] REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev0 !< Wave elevation time history at origin (needed for SS_Excitation module) [m] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevC0 !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation (points to SeaState module data) [-] + REAL(SiKi) , DIMENSION(:,:), POINTER :: WaveElevC0 => NULL() !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part (points to SeaState module data) [(meters)] + REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveElevC !< Discrete Fourier transform of the instantaneous elevation of incident waves at all grid points. First column is real part, second column is imaginary part [(meters)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< (points to SeaState module data) [-] INTEGER(IntKi) :: WaveMod !< [-] REAL(ReKi) :: WtrDens !< [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveDirArr !< Array of wave directions (one per frequency) from the Waves module [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveDirArr => NULL() !< Array of wave directions (one per frequency) from the Waves module (points to SeaState module data) [-] REAL(SiKi) :: WaveDirMin !< Minimum wave direction from Waves module [-] REAL(SiKi) :: WaveDirMax !< Maximum wave direction from Waves module [-] - CHARACTER(ChanLen) , DIMENSION(1:18) :: OutList !< This should really be dimensioned with MaxOutPts [-] - LOGICAL :: OutAll !< [-] - INTEGER(IntKi) :: NumOuts !< [-] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] END TYPE WAMIT_InitInputType ! ======================= -! ========= WAMIT_InitOutputType ======= - TYPE, PUBLIC :: WAMIT_InitOutputType - REAL(ReKi) :: NULLVAL !< [-] - END TYPE WAMIT_InitOutputType -! ======================= ! ========= WAMIT_ContinuousStateType ======= TYPE, PUBLIC :: WAMIT_ContinuousStateType TYPE(SS_Rad_ContinuousStateType) :: SS_Rdtn !< continuous states from the State Space radiation module [-] @@ -93,6 +89,7 @@ MODULE WAMIT_Types TYPE(Conv_Rdtn_DiscreteStateType) :: Conv_Rdtn !< discrete states from the convolution radiation module [-] TYPE(SS_Rad_DiscreteStateType) :: SS_Rdtn !< placeholder [-] TYPE(SS_Exc_DiscreteStateType) :: SS_Exctn !< placeholder [-] + REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: BdyPosFilt !< Low-pass filtered WAMIT body position at the current and previous steps used when ExctnDisp=2 [-] END TYPE WAMIT_DiscreteStateType ! ======================= ! ========= WAMIT_ConstraintStateType ======= @@ -125,6 +122,7 @@ MODULE WAMIT_Types TYPE(Conv_Rdtn_MiscVarType) :: Conv_Rdtn !< [-] TYPE(Conv_Rdtn_InputType) :: Conv_Rdtn_u !< [-] TYPE(Conv_Rdtn_OutputType) :: Conv_Rdtn_y !< [-] + TYPE(SeaSt_Interp_MiscVarType) :: SeaSt_Interp_m !< misc var information from the SeaState Interpolation module [-] END TYPE WAMIT_MiscVarType ! ======================= ! ========= WAMIT_ParameterType ======= @@ -136,19 +134,17 @@ MODULE WAMIT_Types REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: HdroSttc !< [-] INTEGER(IntKi) :: RdtnMod !< [-] INTEGER(IntKi) :: ExctnMod !< [-] + INTEGER(IntKi) :: ExctnDisp !< 0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) [only used when PotMod=1 and ExctnMod>0] [-] + REAL(ReKi) :: ExctnCutOff !< Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] [Hz] + REAL(ReKi) :: ExctnFiltConst !< Low-pass time filter constant computed from ExctnCutOff [-] REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveExctn !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), ALLOCATABLE :: WaveExctnGrid !< WaveExctnGrid dimensions are: 1st: wavetime, 2nd: X, 3rd: Y, 4th: Force component for eac WAMIT Body [-] INTEGER(IntKi) :: NStepWave !< [-] TYPE(Conv_Rdtn_ParameterType) :: Conv_Rdtn !< [-] TYPE(SS_Rad_ParameterType) :: SS_Rdtn !< [-] TYPE(SS_Exc_ParameterType) :: SS_Exctn !< [-] REAL(DbKi) :: DT !< [-] - TYPE(OutParmType) , DIMENSION(:), ALLOCATABLE :: OutParam !< [-] - INTEGER(IntKi) :: NumOuts !< [-] - INTEGER(IntKi) :: NumOutAll !< [-] - CHARACTER(20) :: OutFmt !< [-] - CHARACTER(20) :: OutSFmt !< [-] - CHARACTER(ChanLen) :: Delim !< [-] - INTEGER(IntKi) :: UnOutFile !< [-] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] END TYPE WAMIT_ParameterType ! ======================= ! ========= WAMIT_InputType ======= @@ -172,6 +168,8 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_CopyInitInput' @@ -270,6 +268,8 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er ENDIF DstInitInputData%RdtnMod = SrcInitInputData%RdtnMod DstInitInputData%ExctnMod = SrcInitInputData%ExctnMod + DstInitInputData%ExctnDisp = SrcInitInputData%ExctnDisp + DstInitInputData%ExctnCutOff = SrcInitInputData%ExctnCutOff DstInitInputData%RdtnTMax = SrcInitInputData%RdtnTMax DstInitInputData%WaveDir = SrcInitInputData%WaveDir DstInitInputData%WAMITFile = SrcInitInputData%WAMITFile @@ -292,12 +292,28 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er END IF DstInitInputData%WaveElev0 = SrcInitInputData%WaveElev0 ENDIF -IF (ALLOCATED(SrcInitInputData%WaveElevC0)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveElev1)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElev1,1) + i1_u = UBOUND(SrcInitInputData%WaveElev1,1) + i2_l = LBOUND(SrcInitInputData%WaveElev1,2) + i2_u = UBOUND(SrcInitInputData%WaveElev1,2) + i3_l = LBOUND(SrcInitInputData%WaveElev1,3) + i3_u = UBOUND(SrcInitInputData%WaveElev1,3) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev1)) THEN + ALLOCATE(DstInitInputData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElev1 = SrcInitInputData%WaveElev1 +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveElevC0)) THEN i1_l = LBOUND(SrcInitInputData%WaveElevC0,1) i1_u = UBOUND(SrcInitInputData%WaveElevC0,1) i2_l = LBOUND(SrcInitInputData%WaveElevC0,2) i2_u = UBOUND(SrcInitInputData%WaveElevC0,2) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevC0)) THEN + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElevC0)) THEN ALLOCATE(DstInitInputData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) @@ -306,10 +322,26 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er END IF DstInitInputData%WaveElevC0 = SrcInitInputData%WaveElevC0 ENDIF -IF (ALLOCATED(SrcInitInputData%WaveTime)) THEN +IF (ALLOCATED(SrcInitInputData%WaveElevC)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElevC,1) + i1_u = UBOUND(SrcInitInputData%WaveElevC,1) + i2_l = LBOUND(SrcInitInputData%WaveElevC,2) + i2_u = UBOUND(SrcInitInputData%WaveElevC,2) + i3_l = LBOUND(SrcInitInputData%WaveElevC,3) + i3_u = UBOUND(SrcInitInputData%WaveElevC,3) + IF (.NOT. ALLOCATED(DstInitInputData%WaveElevC)) THEN + ALLOCATE(DstInitInputData%WaveElevC(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevC.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElevC = SrcInitInputData%WaveElevC +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveTime)) THEN i1_l = LBOUND(SrcInitInputData%WaveTime,1) i1_u = UBOUND(SrcInitInputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveTime)) THEN + IF (.NOT. ASSOCIATED(DstInitInputData%WaveTime)) THEN ALLOCATE(DstInitInputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -320,10 +352,10 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er ENDIF DstInitInputData%WaveMod = SrcInitInputData%WaveMod DstInitInputData%WtrDens = SrcInitInputData%WtrDens -IF (ALLOCATED(SrcInitInputData%WaveDirArr)) THEN +IF (ASSOCIATED(SrcInitInputData%WaveDirArr)) THEN i1_l = LBOUND(SrcInitInputData%WaveDirArr,1) i1_u = UBOUND(SrcInitInputData%WaveDirArr,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveDirArr)) THEN + IF (.NOT. ASSOCIATED(DstInitInputData%WaveDirArr)) THEN ALLOCATE(DstInitInputData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) @@ -334,9 +366,9 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er ENDIF DstInitInputData%WaveDirMin = SrcInitInputData%WaveDirMin DstInitInputData%WaveDirMax = SrcInitInputData%WaveDirMax - DstInitInputData%OutList = SrcInitInputData%OutList - DstInitInputData%OutAll = SrcInitInputData%OutAll - DstInitInputData%NumOuts = SrcInitInputData%NumOuts + CALL SeaSt_Interp_CopyParam( SrcInitInputData%SeaSt_Interp_p, DstInitInputData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN END SUBROUTINE WAMIT_CopyInitInput SUBROUTINE WAMIT_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -386,15 +418,31 @@ SUBROUTINE WAMIT_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpoi IF (ALLOCATED(InitInputData%WaveElev0)) THEN DEALLOCATE(InitInputData%WaveElev0) ENDIF -IF (ALLOCATED(InitInputData%WaveElevC0)) THEN +IF (ASSOCIATED(InitInputData%WaveElev1)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveElev1) + InitInputData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveElevC0) + InitInputData%WaveElevC0 => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN +IF (ALLOCATED(InitInputData%WaveElevC)) THEN + DEALLOCATE(InitInputData%WaveElevC) +ENDIF +IF (ASSOCIATED(InitInputData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveDirArr)) THEN +IF (ASSOCIATED(InitInputData%WaveDirArr)) THEN + IF (DEALLOCATEpointers_local) & DEALLOCATE(InitInputData%WaveDirArr) + InitInputData%WaveDirArr => NULL() ENDIF + CALL SeaSt_Interp_DestroyParam( InitInputData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE WAMIT_DestroyInitInput SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -475,6 +523,8 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err END IF Int_BufSz = Int_BufSz + 1 ! RdtnMod Int_BufSz = Int_BufSz + 1 ! ExctnMod + Int_BufSz = Int_BufSz + 1 ! ExctnDisp + Re_BufSz = Re_BufSz + 1 ! ExctnCutOff Db_BufSz = Db_BufSz + 1 ! RdtnTMax Re_BufSz = Re_BufSz + 1 ! WaveDir Int_BufSz = Int_BufSz + 1*LEN(InData%WAMITFile) ! WAMITFile @@ -505,28 +555,52 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Int_BufSz = Int_BufSz + 2*1 ! WaveElev0 upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveElev0) ! WaveElev0 END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no - IF ( ALLOCATED(InData%WaveElevC0) ) THEN + IF ( ASSOCIATED(InData%WaveElevC0) ) THEN Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevC allocated yes/no + IF ( ALLOCATED(InData%WaveElevC) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElevC upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC) ! WaveElevC + END IF Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN + IF ( ASSOCIATED(InData%WaveTime) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime END IF Int_BufSz = Int_BufSz + 1 ! WaveMod Re_BufSz = Re_BufSz + 1 ! WtrDens Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no - IF ( ALLOCATED(InData%WaveDirArr) ) THEN + IF ( ASSOCIATED(InData%WaveDirArr) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr END IF Re_BufSz = Re_BufSz + 1 ! WaveDirMin Re_BufSz = Re_BufSz + 1 ! WaveDirMax - Int_BufSz = Int_BufSz + SIZE(InData%OutList)*LEN(InData%OutList) ! OutList - Int_BufSz = Int_BufSz + 1 ! OutAll - Int_BufSz = Int_BufSz + 1 ! NumOuts + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -675,6 +749,10 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%ExctnMod Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%ExctnDisp + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%ExctnCutOff + Re_Xferred = Re_Xferred + 1 DbKiBuf(Db_Xferred) = InData%RdtnTMax Db_Xferred = Db_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WaveDir @@ -734,7 +812,32 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Re_Xferred = Re_Xferred + 1 END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveElevC0) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElev1) ) 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%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev1,3), UBOUND(InData%WaveElev1,3) + DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -754,7 +857,32 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) THEN + IF ( .NOT. ALLOCATED(InData%WaveElevC) ) 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%WaveElevC,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElevC,3), UBOUND(InData%WaveElevC,3) + DO i2 = LBOUND(InData%WaveElevC,2), UBOUND(InData%WaveElevC,2) + DO i1 = LBOUND(InData%WaveElevC,1), UBOUND(InData%WaveElevC,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -773,7 +901,7 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Int_Xferred = Int_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WtrDens Re_Xferred = Re_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveDirArr) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveDirArr) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -792,16 +920,34 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WaveDirMax Re_Xferred = Re_Xferred + 1 - DO i1 = LBOUND(InData%OutList,1), UBOUND(InData%OutList,1) - DO I = 1, LEN(InData%OutList) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutList(i1)(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - IntKiBuf(Int_Xferred) = TRANSFER(InData%OutAll, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NumOuts - Int_Xferred = Int_Xferred + 1 + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF END SUBROUTINE WAMIT_PackInitInput SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -819,6 +965,8 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, INTEGER(IntKi) :: i INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_UnPackInitInput' @@ -838,7 +986,7 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Int_Xferred = Int_Xferred + 1 OutData%Gravity = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 - OutData%WtrDpth = REAL(ReKiBuf(Re_Xferred), SiKi) + OutData%WtrDpth = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PtfmVol0 not allocated Int_Xferred = Int_Xferred + 1 @@ -974,6 +1122,10 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Int_Xferred = Int_Xferred + 1 OutData%ExctnMod = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%ExctnDisp = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%ExctnCutOff = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 OutData%RdtnTMax = DbKiBuf(Db_Xferred) Db_Xferred = Db_Xferred + 1 OutData%WaveDir = ReKiBuf(Re_Xferred) @@ -1048,6 +1200,34 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 END DO END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev1,3), UBOUND(OutData%WaveElev1,3) + DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -1058,7 +1238,7 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, i2_l = IntKiBuf( Int_Xferred ) i2_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) + IF (ASSOCIATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) @@ -1071,6 +1251,34 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, END DO END DO END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveElevC)) DEALLOCATE(OutData%WaveElevC) + ALLOCATE(OutData%WaveElevC(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElevC,3), UBOUND(OutData%WaveElevC,3) + DO i2 = LBOUND(OutData%WaveElevC,2), UBOUND(OutData%WaveElevC,2) + DO i1 = LBOUND(OutData%WaveElevC,1), UBOUND(OutData%WaveElevC,1) + OutData%WaveElevC(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -1078,7 +1286,7 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, i1_l = IntKiBuf( Int_Xferred ) i1_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + IF (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) @@ -1100,7 +1308,7 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, i1_l = IntKiBuf( Int_Xferred ) i1_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) + IF (ASSOCIATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) @@ -1115,156 +1323,47 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 OutData%WaveDirMax = REAL(ReKiBuf(Re_Xferred), SiKi) Re_Xferred = Re_Xferred + 1 - i1_l = LBOUND(OutData%OutList,1) - i1_u = UBOUND(OutData%OutList,1) - DO i1 = LBOUND(OutData%OutList,1), UBOUND(OutData%OutList,1) - DO I = 1, LEN(OutData%OutList) - OutData%OutList(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - OutData%OutAll = TRANSFER(IntKiBuf(Int_Xferred), OutData%OutAll) - Int_Xferred = Int_Xferred + 1 - OutData%NumOuts = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE WAMIT_UnPackInitInput - - SUBROUTINE WAMIT_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(WAMIT_InitOutputType), INTENT(IN) :: SrcInitOutputData - TYPE(WAMIT_InitOutputType), INTENT(INOUT) :: DstInitOutputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_CopyInitOutput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstInitOutputData%NULLVAL = SrcInitOutputData%NULLVAL - END SUBROUTINE WAMIT_CopyInitOutput - - SUBROUTINE WAMIT_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(WAMIT_InitOutputType), INTENT(INOUT) :: InitOutputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_DestroyInitOutput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE WAMIT_DestroyInitOutput - - SUBROUTINE WAMIT_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(WAMIT_InitOutputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_PackInitOutput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! NULLVAL - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%NULLVAL - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT_PackInitOutput + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN - SUBROUTINE WAMIT_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(WAMIT_InitOutputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_UnPackInitOutput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%NULLVAL = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE WAMIT_UnPackInitOutput + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END SUBROUTINE WAMIT_UnPackInitInput SUBROUTINE WAMIT_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) TYPE(WAMIT_ContinuousStateType), INTENT(IN) :: SrcContStateData @@ -1676,6 +1775,9 @@ SUBROUTINE WAMIT_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, Er CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_CopyDiscState' @@ -1691,6 +1793,22 @@ SUBROUTINE WAMIT_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, Er CALL SS_Exc_CopyDiscState( SrcDiscStateData%SS_Exctn, DstDiscStateData%SS_Exctn, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN +IF (ALLOCATED(SrcDiscStateData%BdyPosFilt)) THEN + i1_l = LBOUND(SrcDiscStateData%BdyPosFilt,1) + i1_u = UBOUND(SrcDiscStateData%BdyPosFilt,1) + i2_l = LBOUND(SrcDiscStateData%BdyPosFilt,2) + i2_u = UBOUND(SrcDiscStateData%BdyPosFilt,2) + i3_l = LBOUND(SrcDiscStateData%BdyPosFilt,3) + i3_u = UBOUND(SrcDiscStateData%BdyPosFilt,3) + IF (.NOT. ALLOCATED(DstDiscStateData%BdyPosFilt)) THEN + ALLOCATE(DstDiscStateData%BdyPosFilt(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstDiscStateData%BdyPosFilt.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstDiscStateData%BdyPosFilt = SrcDiscStateData%BdyPosFilt +ENDIF END SUBROUTINE WAMIT_CopyDiscState SUBROUTINE WAMIT_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -1720,6 +1838,9 @@ SUBROUTINE WAMIT_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEpoi CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL SS_Exc_DestroyDiscState( DiscStateData%SS_Exctn, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(DiscStateData%BdyPosFilt)) THEN + DEALLOCATE(DiscStateData%BdyPosFilt) +ENDIF END SUBROUTINE WAMIT_DestroyDiscState SUBROUTINE WAMIT_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -1809,6 +1930,11 @@ SUBROUTINE WAMIT_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF + Int_BufSz = Int_BufSz + 1 ! BdyPosFilt allocated yes/no + IF ( ALLOCATED(InData%BdyPosFilt) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! BdyPosFilt upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%BdyPosFilt) ! BdyPosFilt + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1920,6 +2046,31 @@ SUBROUTINE WAMIT_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF + IF ( .NOT. ALLOCATED(InData%BdyPosFilt) ) 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%BdyPosFilt,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BdyPosFilt,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%BdyPosFilt,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BdyPosFilt,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%BdyPosFilt,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BdyPosFilt,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%BdyPosFilt,3), UBOUND(InData%BdyPosFilt,3) + DO i2 = LBOUND(InData%BdyPosFilt,2), UBOUND(InData%BdyPosFilt,2) + DO i1 = LBOUND(InData%BdyPosFilt,1), UBOUND(InData%BdyPosFilt,1) + ReKiBuf(Re_Xferred) = InData%BdyPosFilt(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF END SUBROUTINE WAMIT_PackDiscState SUBROUTINE WAMIT_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -1935,6 +2086,9 @@ SUBROUTINE WAMIT_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, INTEGER(IntKi) :: Db_Xferred INTEGER(IntKi) :: Int_Xferred INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_UnPackDiscState' @@ -2068,6 +2222,34 @@ SUBROUTINE WAMIT_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! BdyPosFilt 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%BdyPosFilt)) DEALLOCATE(OutData%BdyPosFilt) + ALLOCATE(OutData%BdyPosFilt(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%BdyPosFilt.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%BdyPosFilt,3), UBOUND(OutData%BdyPosFilt,3) + DO i2 = LBOUND(OutData%BdyPosFilt,2), UBOUND(OutData%BdyPosFilt,2) + DO i1 = LBOUND(OutData%BdyPosFilt,1), UBOUND(OutData%BdyPosFilt,1) + OutData%BdyPosFilt(i1,i2,i3) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF END SUBROUTINE WAMIT_UnPackDiscState SUBROUTINE WAMIT_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) @@ -2965,6 +3147,9 @@ SUBROUTINE WAMIT_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) CALL Conv_Rdtn_CopyOutput( SrcMiscData%Conv_Rdtn_y, DstMiscData%Conv_Rdtn_y, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN + CALL SeaSt_Interp_CopyMisc( SrcMiscData%SeaSt_Interp_m, DstMiscData%SeaSt_Interp_m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN END SUBROUTINE WAMIT_CopyMisc SUBROUTINE WAMIT_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -3018,6 +3203,8 @@ SUBROUTINE WAMIT_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL Conv_Rdtn_DestroyOutput( MiscData%Conv_Rdtn_y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL SeaSt_Interp_DestroyMisc( MiscData%SeaSt_Interp_m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) END SUBROUTINE WAMIT_DestroyMisc SUBROUTINE WAMIT_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -3230,6 +3417,23 @@ SUBROUTINE WAMIT_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_m: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_m, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_m + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_m + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_m + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -3571,6 +3775,34 @@ SUBROUTINE WAMIT_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF + CALL SeaSt_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_m, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF END SUBROUTINE WAMIT_PackMisc SUBROUTINE WAMIT_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -4034,6 +4266,46 @@ SUBROUTINE WAMIT_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_m, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE WAMIT_UnPackMisc SUBROUTINE WAMIT_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) @@ -4046,6 +4318,8 @@ SUBROUTINE WAMIT_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_CopyParam' @@ -4098,6 +4372,9 @@ SUBROUTINE WAMIT_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs ENDIF DstParamData%RdtnMod = SrcParamData%RdtnMod DstParamData%ExctnMod = SrcParamData%ExctnMod + DstParamData%ExctnDisp = SrcParamData%ExctnDisp + DstParamData%ExctnCutOff = SrcParamData%ExctnCutOff + DstParamData%ExctnFiltConst = SrcParamData%ExctnFiltConst IF (ALLOCATED(SrcParamData%WaveExctn)) THEN i1_l = LBOUND(SrcParamData%WaveExctn,1) i1_u = UBOUND(SrcParamData%WaveExctn,1) @@ -4111,6 +4388,24 @@ SUBROUTINE WAMIT_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs END IF END IF DstParamData%WaveExctn = SrcParamData%WaveExctn +ENDIF +IF (ALLOCATED(SrcParamData%WaveExctnGrid)) THEN + i1_l = LBOUND(SrcParamData%WaveExctnGrid,1) + i1_u = UBOUND(SrcParamData%WaveExctnGrid,1) + i2_l = LBOUND(SrcParamData%WaveExctnGrid,2) + i2_u = UBOUND(SrcParamData%WaveExctnGrid,2) + i3_l = LBOUND(SrcParamData%WaveExctnGrid,3) + i3_u = UBOUND(SrcParamData%WaveExctnGrid,3) + i4_l = LBOUND(SrcParamData%WaveExctnGrid,4) + i4_u = UBOUND(SrcParamData%WaveExctnGrid,4) + IF (.NOT. ALLOCATED(DstParamData%WaveExctnGrid)) THEN + ALLOCATE(DstParamData%WaveExctnGrid(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveExctnGrid.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveExctnGrid = SrcParamData%WaveExctnGrid ENDIF DstParamData%NStepWave = SrcParamData%NStepWave CALL Conv_Rdtn_CopyParam( SrcParamData%Conv_Rdtn, DstParamData%Conv_Rdtn, CtrlCode, ErrStat2, ErrMsg2 ) @@ -4123,28 +4418,9 @@ SUBROUTINE WAMIT_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN DstParamData%DT = SrcParamData%DT -IF (ALLOCATED(SrcParamData%OutParam)) THEN - i1_l = LBOUND(SrcParamData%OutParam,1) - i1_u = UBOUND(SrcParamData%OutParam,1) - IF (.NOT. ALLOCATED(DstParamData%OutParam)) THEN - ALLOCATE(DstParamData%OutParam(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%OutParam.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcParamData%OutParam,1), UBOUND(SrcParamData%OutParam,1) - CALL NWTC_Library_Copyoutparmtype( SrcParamData%OutParam(i1), DstParamData%OutParam(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SeaSt_Interp_CopyParam( SrcParamData%SeaSt_Interp_p, DstParamData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - DstParamData%NumOuts = SrcParamData%NumOuts - DstParamData%NumOutAll = SrcParamData%NumOutAll - DstParamData%OutFmt = SrcParamData%OutFmt - DstParamData%OutSFmt = SrcParamData%OutSFmt - DstParamData%Delim = SrcParamData%Delim - DstParamData%UnOutFile = SrcParamData%UnOutFile END SUBROUTINE WAMIT_CopyParam SUBROUTINE WAMIT_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -4179,6 +4455,9 @@ SUBROUTINE WAMIT_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) ENDIF IF (ALLOCATED(ParamData%WaveExctn)) THEN DEALLOCATE(ParamData%WaveExctn) +ENDIF +IF (ALLOCATED(ParamData%WaveExctnGrid)) THEN + DEALLOCATE(ParamData%WaveExctnGrid) ENDIF CALL Conv_Rdtn_DestroyParam( ParamData%Conv_Rdtn, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -4186,13 +4465,8 @@ SUBROUTINE WAMIT_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL SS_Exc_DestroyParam( ParamData%SS_Exctn, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(ParamData%OutParam)) THEN -DO i1 = LBOUND(ParamData%OutParam,1), UBOUND(ParamData%OutParam,1) - CALL NWTC_Library_Destroyoutparmtype( ParamData%OutParam(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SeaSt_Interp_DestroyParam( ParamData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(ParamData%OutParam) -ENDIF END SUBROUTINE WAMIT_DestroyParam SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -4249,10 +4523,18 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, END IF Int_BufSz = Int_BufSz + 1 ! RdtnMod Int_BufSz = Int_BufSz + 1 ! ExctnMod + Int_BufSz = Int_BufSz + 1 ! ExctnDisp + Re_BufSz = Re_BufSz + 1 ! ExctnCutOff + Re_BufSz = Re_BufSz + 1 ! ExctnFiltConst Int_BufSz = Int_BufSz + 1 ! WaveExctn allocated yes/no IF ( ALLOCATED(InData%WaveExctn) ) THEN Int_BufSz = Int_BufSz + 2*2 ! WaveExctn upper/lower bounds for each dimension Re_BufSz = Re_BufSz + SIZE(InData%WaveExctn) ! WaveExctn + END IF + Int_BufSz = Int_BufSz + 1 ! WaveExctnGrid allocated yes/no + IF ( ALLOCATED(InData%WaveExctnGrid) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveExctnGrid upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveExctnGrid) ! WaveExctnGrid END IF Int_BufSz = Int_BufSz + 1 ! NStepWave ! Allocate buffers for subtypes, if any (we'll get sizes from these) @@ -4308,35 +4590,23 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, DEALLOCATE(Int_Buf) END IF Db_BufSz = Db_BufSz + 1 ! DT - Int_BufSz = Int_BufSz + 1 ! OutParam allocated yes/no - IF ( ALLOCATED(InData%OutParam) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! OutParam upper/lower bounds for each dimension - DO i1 = LBOUND(InData%OutParam,1), UBOUND(InData%OutParam,1) - Int_BufSz = Int_BufSz + 3 ! OutParam: size of buffers for each call to pack subtype - CALL NWTC_Library_Packoutparmtype( Re_Buf, Db_Buf, Int_Buf, InData%OutParam(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OutParam + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! OutParam + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! OutParam + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! OutParam + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - END DO - END IF - Int_BufSz = Int_BufSz + 1 ! NumOuts - Int_BufSz = Int_BufSz + 1 ! NumOutAll - Int_BufSz = Int_BufSz + 1*LEN(InData%OutFmt) ! OutFmt - Int_BufSz = Int_BufSz + 1*LEN(InData%OutSFmt) ! OutSFmt - Int_BufSz = Int_BufSz + 1*LEN(InData%Delim) ! Delim - Int_BufSz = Int_BufSz + 1 ! UnOutFile IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -4432,6 +4702,12 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%ExctnMod Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%ExctnDisp + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%ExctnCutOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%ExctnFiltConst + Re_Xferred = Re_Xferred + 1 IF ( .NOT. ALLOCATED(InData%WaveExctn) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -4451,6 +4727,36 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Re_Xferred = Re_Xferred + 1 END DO END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveExctnGrid) ) 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%WaveExctnGrid,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveExctnGrid,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveExctnGrid,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveExctnGrid,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveExctnGrid,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveExctnGrid,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveExctnGrid,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveExctnGrid,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%WaveExctnGrid,4), UBOUND(InData%WaveExctnGrid,4) + DO i3 = LBOUND(InData%WaveExctnGrid,3), UBOUND(InData%WaveExctnGrid,3) + DO i2 = LBOUND(InData%WaveExctnGrid,2), UBOUND(InData%WaveExctnGrid,2) + DO i1 = LBOUND(InData%WaveExctnGrid,1), UBOUND(InData%WaveExctnGrid,1) + ReKiBuf(Re_Xferred) = InData%WaveExctnGrid(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO END IF IntKiBuf(Int_Xferred) = InData%NStepWave Int_Xferred = Int_Xferred + 1 @@ -4540,18 +4846,7 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, ENDIF DbKiBuf(Db_Xferred) = InData%DT Db_Xferred = Db_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%OutParam) ) 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%OutParam,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%OutParam,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%OutParam,1), UBOUND(InData%OutParam,1) - CALL NWTC_Library_Packoutparmtype( Re_Buf, Db_Buf, Int_Buf, InData%OutParam(i1), ErrStat2, ErrMsg2, OnlySize ) ! OutParam + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -4579,26 +4874,6 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END DO - END IF - IntKiBuf(Int_Xferred) = InData%NumOuts - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NumOutAll - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(InData%OutFmt) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutFmt(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%OutSFmt) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutSFmt(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%Delim) - IntKiBuf(Int_Xferred) = ICHAR(InData%Delim(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - IntKiBuf(Int_Xferred) = InData%UnOutFile - Int_Xferred = Int_Xferred + 1 END SUBROUTINE WAMIT_PackParam SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -4616,6 +4891,8 @@ SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM INTEGER(IntKi) :: i INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'WAMIT_UnPackParam' @@ -4706,6 +4983,12 @@ SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM Int_Xferred = Int_Xferred + 1 OutData%ExctnMod = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%ExctnDisp = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%ExctnCutOff = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%ExctnFiltConst = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveExctn not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -4728,6 +5011,39 @@ SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM Re_Xferred = Re_Xferred + 1 END DO END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveExctnGrid 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveExctnGrid)) DEALLOCATE(OutData%WaveExctnGrid) + ALLOCATE(OutData%WaveExctnGrid(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveExctnGrid.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveExctnGrid,4), UBOUND(OutData%WaveExctnGrid,4) + DO i3 = LBOUND(OutData%WaveExctnGrid,3), UBOUND(OutData%WaveExctnGrid,3) + DO i2 = LBOUND(OutData%WaveExctnGrid,2), UBOUND(OutData%WaveExctnGrid,2) + DO i1 = LBOUND(OutData%WaveExctnGrid,1), UBOUND(OutData%WaveExctnGrid,1) + OutData%WaveExctnGrid(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO END IF OutData%NStepWave = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 @@ -4853,20 +5169,6 @@ SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) OutData%DT = DbKiBuf(Db_Xferred) Db_Xferred = Db_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! OutParam 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%OutParam)) DEALLOCATE(OutData%OutParam) - ALLOCATE(OutData%OutParam(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%OutParam.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%OutParam,1), UBOUND(OutData%OutParam,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -4900,33 +5202,13 @@ SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackoutparmtype( Re_Buf, Db_Buf, Int_Buf, OutData%OutParam(i1), ErrStat2, ErrMsg2 ) ! OutParam + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - OutData%NumOuts = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NumOutAll = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(OutData%OutFmt) - OutData%OutFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%OutSFmt) - OutData%OutSFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%Delim) - OutData%Delim(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%UnOutFile = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 END SUBROUTINE WAMIT_UnPackParam SUBROUTINE WAMIT_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) diff --git a/modules/hydrodyn/src/Waves.f90 b/modules/hydrodyn/src/Waves.f90 deleted file mode 100644 index 8934278e16..0000000000 --- a/modules/hydrodyn/src/Waves.f90 +++ /dev/null @@ -1,2511 +0,0 @@ -!********************************************************************************************************************************** -! The Waves and Waves_Types modules make up a template for creating user-defined calculations in the FAST Modularization -! Framework. Waves_Types will be auto-generated based on a description of the variables for the module. -!.................................................................................................................................. -! LICENSING -! Copyright (C) 2013-2015 National Renewable Energy Laboratory -! -! This file is part of Waves. -! -! Licensed under the Apache License, Version 2.0 (the "License"); -! you may not use this file except in compliance with the License. -! You may obtain a copy of the License at -! -! http://www.apache.org/licenses/LICENSE-2.0 -! -! Unless required by applicable law or agreed to in writing, software -! distributed under the License is distributed on an "AS IS" BASIS, -! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -! See the License for the specific language governing permissions and -! limitations under the License. -! -!********************************************************************************************************************************** -MODULE Waves - - USE Waves_Types - USE UserWaves - USE NWTC_Library - USE NWTC_FFTPACK - USE NWTC_RandomNumber - - IMPLICIT NONE - - PRIVATE - - TYPE(ProgDesc), PARAMETER :: Waves_ProgDesc = ProgDesc( 'Waves', '', '' ) - - - ! ..... @mhall: Public variables for hard-coded wave kinematics grid (temporary solution) ........................... - - INTEGER, PUBLIC :: WaveGrid_n = 0 !150 Number of wave kinematics grid points = nx*ny*nz - ! - !REAL(SiKi), PUBLIC :: WaveGrid_x0 = -35.0 ! first grid point in x direction - !REAL(SiKi), PUBLIC :: WaveGrid_dx = 10.0 ! step size in x direction - !INTEGER, PUBLIC :: WaveGrid_nx = 10 ! Number of wave kinematics grid points in x - ! - !REAL(SiKi), PUBLIC :: WaveGrid_y0 = -35.0 ! same for y - !REAL(SiKi), PUBLIC :: WaveGrid_dy = 35.0 - !INTEGER, PUBLIC :: WaveGrid_ny = 3 - ! - !INTEGER, PUBLIC :: WaveGrid_nz = 5 ! Number of wave kinematics grid points in z (locations decided by 1.0 - 2.0**(WaveGrid_nz-I)) - - - ! ..... Public Subroutines ................................................................................................... - PUBLIC :: WavePkShpDefault ! Return the default value of the peak shape parameter of the incident wave spectrum - PUBLIC :: Waves_Init ! Initialization routine - PUBLIC :: Waves_End ! Ending routine (includes clean up) - - - PRIVATE:: WheelerStretching ! This FUNCTION applies the principle of Wheeler stretching to (1-Forward) find the elevation where the wave kinematics are to be applied using Wheeler stretching or (2-Backword) - PRIVATE:: BoxMuller - PRIVATE:: JONSWAP - PUBLIC :: WaveNumber - PRIVATE:: UserWaveSpctrm - PRIVATE:: StillWaterWaves_Init - PRIVATE:: VariousWaves_Init - ! PRIVATE:: WhiteNoiseWaves_Init - -CONTAINS - -!======================================================================= - - FUNCTION WavePkShpDefault ( Hs, Tp ) - - - ! This FUNCTION is used to return the default value of the peak shape - ! parameter of the incident wave spectrum, conditioned on significant - ! wave height and peak spectral period. - ! - ! There are several different versions of the JONSWAP spectrum - ! formula. This version is based on the one documented in the - ! IEC61400-3 wind turbine design standard for offshore wind turbines. - - - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(SiKi), INTENT(IN ) :: Hs ! Significant wave height (meters) - REAL(SiKi), INTENT(IN ) :: Tp ! Peak spectral period (sec) - REAL(SiKi) :: WavePkShpDefault ! This function = default value of the peak shape parameter of the incident wave spectrum conditioned on significant wave height and peak spectral period (-) - - - ! Local Variables: - - REAL(SiKi) :: TpOvrSqrtHs ! = Tp/SQRT(Hs) (s/SQRT(m)) - - - - ! Compute the default peak shape parameter of the incident wave spectrum, - ! conditioned on significant wave height and peak spectral period: - - TpOvrSqrtHs = Tp/SQRT(Hs) - - IF ( TpOvrSqrtHs <= 3.6 ) THEN - WavePkShpDefault = 5.0 - ELSEIF ( TpOvrSqrtHs >= 5.0 ) THEN - WavePkShpDefault = 1.0 - ELSE - WavePkShpDefault = EXP( 5.75 - 1.15*TpOvrSqrtHs ) - END IF - - - - RETURN - END FUNCTION WavePkShpDefault - -!======================================================================= - FUNCTION BoxMuller ( RNGType, NDAmp, Phase ) - - ! This FUNCTION uses the Box-Muller method to turn two uniformly - ! distributed randoms into two unit normal randoms, which are - ! returned as real and imaginary components. - - IMPLICIT NONE - - COMPLEX(SiKi) :: BoxMuller ! This function - - ! Passed Variables: - - INTEGER, INTENT(IN) :: RNGType - LOGICAL, INTENT(IN) :: NDAmp ! Flag for normally-distributed amplitudes - REAL(SiKi), INTENT(IN), OPTIONAL :: Phase ! Optional phase to override random phase (radians) - - ! Local Variables: - - REAL(SiKi) :: C1 ! Intermediate variable - REAL(SiKi) :: C2 ! Intermediate variable - REAL(SiKi) :: U1(1) ! First uniformly distributed random - REAL(SiKi) :: U2(1) ! Second uniformly distributed random - - ! Compute the two uniformly distributed randoms: - ! NOTE: The first random, U1, cannot be zero else the LOG() function - ! below will blow up; there is no restriction on the value of the - ! second random, U2. - - U1 = 0.0 - DO WHILE ( U1(1) == 0.0 ) - CALL UniformRandomNumbers(RNGType, U1) - END DO - CALL UniformRandomNumbers(RNGType, U2) - - ! Compute intermediate variables: - - IF ( NDAmp ) THEN ! Normally-distributed amplitudes - C1 = SQRT( -2.0*LOG(U1(1)) ) - ELSE ! Constant amplitudes (ignore U1); therefore, C1 = SQRT( 2.0 ) = MEAN( SQRT( -2.0*LOG(U1) ) for a uniform distribution of U1 between 0 and 1 - C1 = SQRT( 2.0 ) - END IF - - IF ( PRESENT( Phase ) ) THEN ! Specified phase to replace random phase (ignore U2) - C2 = Phase - ELSE ! Uniformly-distributed phase - C2 = TwoPi*U2(1) - END IF - - ! Compute the unit normal randoms: - - BoxMuller = CMPLX( C1*COS(C2), C1*SIN(C2) ) - - RETURN - END FUNCTION BoxMuller -!======================================================================= - FUNCTION JONSWAP ( Omega, Hs, Tp, Gamma ) - - - ! This FUNCTION computes the JOint North Sea WAve Project - ! (JONSWAP) representation of the one-sided power spectral density - ! or wave spectrum given the frequency, Omega, peak shape - ! parameter, Gamma, significant wave height, Hs, and peak spectral - ! period, Tp, as inputs. If the value of Gamma is 1.0, the - ! Pierson-Moskowitz wave spectrum is returned. - ! - ! There are several different versions of the JONSWAP spectrum - ! formula. This version is based on the one documented in the - ! IEC61400-3 wind turbine design standard for offshore wind - ! turbines. - - - - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(SiKi), INTENT(IN ) :: Gamma ! Peak shape parameter (-) - REAL(SiKi), INTENT(IN ) :: Hs ! Significant wave height (meters) - REAL(SiKi) :: JONSWAP ! This function = JONSWAP wave spectrum, S (m^2/(rad/s)) - REAL(SiKi), INTENT(IN ) :: Omega ! Wave frequency (rad/s) - REAL(SiKi), INTENT(IN ) :: Tp ! Peak spectral period (sec) - - - ! Local Variables: - - REAL(SiKi) :: Alpha ! Exponent on Gamma used in the spectral formulation (-) - REAL(SiKi) :: C ! Normalising factor used in the spectral formulation (-) - REAL(SiKi) :: f ! Wave frequency (Hz) - REAL(SiKi) :: fp ! Peak spectral frequency (Hz) - REAL(SiKi) :: fpOvrf4 ! (fp/f)^4 - REAL(SiKi) :: Sigma ! Scaling factor used in the spectral formulation (-) - - REAL(SiKi) :: Inv2Pi = 0.15915494 - - ! Compute the JONSWAP wave spectrum, unless Omega is zero, in which case, - ! return zero: - - IF ( EqualRealNos(Omega, 0.0_SiKi) ) THEN ! When .TRUE., the formulation below is ill-conditioned; thus, the known value of zero is returned. - - - JONSWAP = 0.0 - - - ELSE ! Omega > 0.0; forumulate the JONSWAP spectrum. - - - ! Compute the wave frequency and peak spectral frequency in Hz: - - f = Inv2Pi*Omega - fp = 1/Tp - fpOvrf4 = (fp/f)**4 - - - ! Compute the normalising factor: - - C = 1.0 - ( 0.287*LOG(GAMMA) ) - - - ! Compute Alpha: - - IF ( f <= fp ) THEN - Sigma = 0.07 - ELSE - Sigma = 0.09 - END IF - -!bjj: Alpha = EXP( ( -0.5*( ( (f/fp) - 1.0 )/Sigma )**2 ) ) - Alpha = EXP( ( -0.5*( ( (f*Tp) - 1.0 )/Sigma )**2 ) ) !this works even if Tp is 0 (but using f/fp doesn't) - - - ! Compute the wave spectrum: - - JONSWAP = Inv2Pi*C*( 0.3125*Hs*Hs*fpOvrf4/f )*EXP( ( -1.25*fpOvrf4 ) )*( GAMMA**Alpha ) - - - END IF - - - - RETURN - END FUNCTION JONSWAP - !======================================================================= -!JASON: MOVE THIS USER-DEFINED ROUTINE (UserWaveSpctrm) TO THE UserSubs.f90 OF HydroDyn WHEN THE PLATFORM LOADING FUNCTIONALITY HAS BEEN DOCUMENTED!!!!! - SUBROUTINE UserWaveSpctrm ( Omega, WaveDir, DirRoot, WaveS1Sdd ) - - - ! This is a dummy routine for holding the place of a user-specified - ! wave spectrum. Modify this code to create your own spectrum. - - - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(SiKi), INTENT(IN ) :: Omega ! Wave frequency, rad/s. - REAL(SiKi), INTENT(IN ) :: WaveDir ! Incident wave propagation heading direction, degrees - REAL(SiKi), INTENT(OUT) :: WaveS1Sdd ! One-sided power spectral density of the wave spectrum per unit time for the current frequency component and heading direction, m^2/(rad/s). - - 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. - - - - WaveS1Sdd = 0.0 - - - - RETURN - END SUBROUTINE UserWaveSpctrm - !======================================================================= - FUNCTION WaveNumber ( Omega, g, h ) - - - ! This FUNCTION solves the finite depth dispersion relationship: - ! - ! k*tanh(k*h)=(Omega^2)/g - ! - ! for k, the wavenumber (WaveNumber) given the frequency, Omega, - ! gravitational constant, g, and water depth, h, as inputs. A - ! high order initial guess is used in conjunction with a quadratic - ! Newton's method for the solution with seven significant digits - ! accuracy using only one iteration pass. The method is due to - ! Professor J.N. Newman of M.I.T. as found in routine EIGVAL of - ! the SWIM-MOTION-LINES (SML) software package in source file - ! Solve.f of the SWIM module. - - - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(ReKi), INTENT(IN ) :: g ! Gravitational acceleration (m/s^2) - REAL(SiKi), INTENT(IN ) :: h ! Water depth (meters) - REAL(SiKi), INTENT(IN ) :: Omega ! Wave frequency (rad/s) - REAL(SiKi) :: WaveNumber ! This function = wavenumber, k (1/m) - - - ! Local Variables: - - REAL(SiKi) :: A ! A temporary variable used in the solution. - REAL(SiKi) :: B ! A temporary variable used in the solution. - REAL(SiKi) :: C ! A temporary variable used in the solution. - REAL(SiKi) :: C2 ! A temporary variable used in the solution. - REAL(SiKi) :: CC ! A temporary variable used in the solution. - REAL(SiKi) :: E2 ! A temporary variable used in the solution. - REAL(SiKi) :: X0 ! A temporary variable used in the solution. - - - - ! Compute the wavenumber, unless Omega is zero, in which case, return - ! zero: - - IF ( Omega == 0.0 ) THEN ! When .TRUE., the formulation below is ill-conditioned; thus, the known value of zero is returned. - - - WaveNumber = 0.0 - - - ELSE ! Omega > 0.0; solve for the wavenumber as usual. - - - C = Omega*Omega*h/REAL(g,SiKi) - CC = C*C - - - ! Find X0: - - IF ( C <= 2.0 ) THEN - - X0 = SQRT(C)*( 1.0 + C*( 0.169 + (0.031*C) ) ) - - ELSE - - E2 = EXP(-2.0*C) - - X0 = C*( 1.0 + ( E2*( 2.0 - (12.0*E2) ) ) ) - - END IF - - - ! Find the WaveNumber: - - IF ( C <= 4.8 ) THEN - - C2 = CC - X0*X0 - A = 1.0/( C - C2 ) - B = A*( ( 0.5*LOG( ( X0 + C )/( X0 - C ) ) ) - X0 ) - - WaveNumber = ( X0 - ( B*C2*( 1.0 + (A*B*C*X0) ) ) )/h - - ELSE - - WaveNumber = X0/h - - END IF - - - END IF - - - - RETURN - END FUNCTION WaveNumber - - !======================================================================= - FUNCTION COSHNumOvrCOSHDen ( k, h, z ) - - - ! This FUNCTION computes the shallow water hyperbolic numerator - ! over denominator term in the wave kinematics expressions: - ! - ! COSH( k*( z + h ) )/COSH( k*h ) - ! - ! given the wave number, k, water depth, h, and elevation z, as - ! inputs. - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(SiKi) :: COSHNumOvrCOSHDen ! This function = COSH( k*( z + h ) )/COSH( k*h ) (-) - REAL(SiKi), INTENT(IN ) :: h ! Water depth ( h > 0 ) (meters) - REAL(SiKi), INTENT(IN ) :: k ! Wave number ( k >= 0 ) (1/m) - REAL(SiKi), INTENT(IN ) :: z ! Elevation (-h <= z <= 0 ) (meters) - - - - ! Compute the hyperbolic numerator over denominator: - - IF ( k*h > 89.4_SiKi ) THEN ! When .TRUE., the shallow water formulation will trigger a floating point overflow error; however, COSH( k*( z + h ) )/COSH( k*h ) = EXP( k*z ) + EXP( -k*( z + 2*h ) ) for large k*h. This equals the deep water formulation, EXP( k*z ), except near z = -h, because h > 14.23*wavelength (since k = 2*Pi/wavelength) in this case. - - COSHNumOvrCOSHDen = EXP( k*z ) + EXP( -k*( z + 2.0_SiKi*h ) ) - - ELSE ! 0 < k*h <= 89.4; use the shallow water formulation. - - COSHNumOvrCOSHDen =REAL( COSH( k*( z + h ) ),R8Ki)/COSH( k*h ) - - END IF - - - - RETURN - END FUNCTION COSHNumOvrCOSHDen -!======================================================================= - FUNCTION COSHNumOvrSINHDen ( k, h, z ) - - - ! This FUNCTION computes the shallow water hyperbolic numerator - ! over denominator term in the wave kinematics expressions: - ! - ! COSH( k*( z + h ) )/SINH( k*h ) - ! - ! given the wave number, k, water depth, h, and elevation z, as - ! inputs. - - - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(SiKi) :: COSHNumOvrSINHDen ! This function = COSH( k*( z + h ) )/SINH( k*h ) (-) - REAL(SiKi), INTENT(IN ) :: h ! Water depth ( h > 0 ) (meters) - REAL(SiKi), INTENT(IN ) :: k ! Wave number ( k >= 0 ) (1/m) - REAL(SiKi), INTENT(IN ) :: z ! Elevation (-h <= z <= 0 ) (meters) - - - - ! Compute the hyperbolic numerator over denominator: - - - IF ( k < EPSILON(0.0_SiKi) ) THEN ! When .TRUE., the shallow water formulation is ill-conditioned; thus, HUGE(k) is returned to approximate the known value of infinity. - - COSHNumOvrSINHDen = HUGE( k ) - - ELSEIF ( k*h > 89.4_SiKi ) THEN ! When .TRUE., the shallow water formulation will trigger a floating point overflow error; however, COSH( k*( z + h ) )/SINH( k*h ) = EXP( k*z ) + EXP( -k*( z + 2*h ) ) for large k*h. This equals the deep water formulation, EXP( k*z ), except near z = -h, because h > 14.23*wavelength (since k = 2*Pi/wavelength) in this case. - - COSHNumOvrSINHDen = EXP( k*z ) + EXP( -k*( z + 2*h ) ) - - ELSE ! 0 < k*h <= 89.4; use the shallow water formulation. - - COSHNumOvrSINHDen = COSH( k*( z + h ) )/SINH( k*h ) - - END IF - - - - RETURN - END FUNCTION COSHNumOvrSINHDen -!======================================================================= - FUNCTION COTH ( X ) - - - ! This FUNCTION computes the hyperbolic cotangent, - ! COSH(X)/SINH(X). - - - USE Precision - - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(SiKi) :: COTH ! This function = COSH( X )/SINH( X ) (-) - REAL(SiKi), INTENT(IN ) :: X ! The argument (-) - - - - ! Compute the hyperbolic cotangent: - - IF ( X == 0.0_SiKi ) THEN ! When .TRUE., the formulation below is ill-conditioned; thus, HUGE(X) is returned to approximate the known value of infinity. - - COTH = HUGE( X ) - - ELSE ! X /= 0.0; use the numerically-stable computation of COTH(X) by means of TANH(X). - - COTH = 1.0_SiKi/TANH( X ) ! = COSH( X )/SINH( X ) - - END IF - - - - RETURN - END FUNCTION COTH - - !======================================================================= - FUNCTION SINHNumOvrSINHDen ( k, h, z ) - - - ! This FUNCTION computes the shallow water hyperbolic numerator - ! over denominator term in the wave kinematics expressions: - ! - ! SINH( k*( z + h ) )/SINH( k*h ) - ! - ! given the wave number, k, water depth, h, and elevation z, as - ! inputs. - - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(SiKi) :: SINHNumOvrSINHDen ! This function = SINH( k*( z + h ) )/SINH( k*h ) (-) - REAL(SiKi), INTENT(IN ) :: h ! Water depth ( h > 0 ) (meters) - REAL(SiKi), INTENT(IN ) :: k ! Wave number ( k >= 0 ) (1/m) - REAL(SiKi), INTENT(IN ) :: z ! Elevation (-h <= z <= 0 ) (meters) - - - - ! Compute the hyperbolic numerator over denominator: - - IF ( k == 0.0_SiKi ) THEN ! When .TRUE., the shallow water formulation is ill-conditioned; thus, the known value of unity is returned. - - SINHNumOvrSINHDen = 1.0 - - ELSEIF ( k*h > 89.4_SiKi ) THEN ! When .TRUE., the shallow water formulation will trigger a floating point overflow error; however, SINH( k*( z + h ) )/SINH( k*h ) = EXP( k*z ) - EXP( -k*( z + 2*h ) ) for large k*h. This equals the deep water formulation, EXP( k*z ), except near z = -h, because h > 14.23*wavelength (since k = 2*Pi/wavelength) in this case. - - SINHNumOvrSINHDen = EXP( k*z ) - EXP( -k*( z + 2.0_SiKi*h ) ) - - ELSE ! 0 < k*h <= 89.4; use the shallow water formulation. - - SINHNumOvrSINHDen = SINH( k*( z + h ) )/SINH( k*h ) - - END IF - - - - RETURN - END FUNCTION SINHNumOvrSINHDen - - - -!---------------------------------------------------------------------------------------------------------------------------------- -SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) -! This routine initializes the waves data for WaveMod = 0 , or still water waves option -!---------------------------------------------------------------------------------------------------------------------------------- - - - TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine - TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Initialization output data - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! Local Variables - INTEGER :: I, J ! Generic index - INTEGER(IntKi) :: ErrStatTmp ! Temporary error status - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrStatTmp = ErrID_None - ErrMsg = "" - - - ! Initialize everything to zero: - - InitOut%NStepWave = 2 ! We must have at least two elements in order to interpolate later on - InitOut%NStepWave2 = 1 - - ALLOCATE ( InitOut%WaveTime (0:InitOut%NStepWave ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveTime.', ErrStat,ErrMsg,'StillWaterWaves_Init') - ALLOCATE ( InitOut%WaveElev0 (0:InitOut%NStepWave ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev0.', ErrStat,ErrMsg,'StillWaterWaves_Init') - ALLOCATE ( InitOut%WaveElevC0 (2, 0:InitOut%NStepWave2 ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevC0.',ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NWaveElev ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev.', ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NWaveKin ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP.', ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%WaveVel (0:InitOut%NStepWave,InitInp%NWaveKin,3) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel.', ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%WaveAcc (0:InitOut%NStepWave,InitInp%NWaveKin,3) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc.', ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%PWaveDynP0 (0:InitOut%NStepWave,InitInp%NWaveKin ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveDynP0.', ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%PWaveVel0 (0:InitOut%NStepWave,InitInp%NWaveKin,3) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveVel0.', ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%PWaveAcc0 (0:InitOut%NStepWave,InitInp%NWaveKin,3) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveAcc0.', ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%nodeInWater(0:InitOut%NStepWave,InitInp%NWaveKin ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%nodeInWater.', ErrStat,ErrMsg,'StillWaterWaves_Init') - - ALLOCATE ( InitOut%WaveDirArr (0:InitOut%NStepWave2 ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDirArr.',ErrStat,ErrMsg,'StillWaterWaves_Init') - - - IF ( ErrStat >= AbortErrLev ) RETURN - - InitOut%WaveDOmega = 0.0 - InitOut%WaveTime = (/ 0.0_DbKi, 1.0_DbKi, 2.0_DbKi /) ! We must have at least two different time steps in the interpolation - InitOut%WaveElev0 = 0.0 - InitOut%WaveElevC0 = 0.0 - InitOut%WaveElev = 0.0 - InitOut%PWaveDynP0 = 0.0 - InitOut%PWaveVel0 = 0.0 - InitOut%PWaveAcc0 = 0.0 - InitOut%WaveDynP = 0.0 - InitOut%WaveVel = 0.0 - InitOut%WaveAcc = 0.0 - InitOut%WaveDirArr = 0.0 - - ! For creating animations of the sea surface, the WaveElevXY array is passed in with a series of x,y coordinates - ! (index 1). The second index corresponds to the number of points passed in. A two dimensional time series - ! is created with the first index corresponding to the timestep, and second index corresponding to the second - ! index of the WaveElevXY array. - IF ( ALLOCATED(InitInp%WaveElevXY)) THEN - ALLOCATE ( InitOut%WaveElevSeries (0:InitOut%NStepWave, 1:SIZE(InitInp%WaveElevXY, DIM=2)) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) THEN - CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevSeries.',ErrStat,ErrMsg,'VariousWaves_Init') - RETURN - END IF - ! Calculate the wave elevation at all points requested in the array WaveElevXY - DO I = 0,InitOut%NStepWave - DO J = 1,SIZE(InitInp%WaveElevXY, DIM=2) - InitOut%WaveElevSeries(I,J) = 0.0_ReKi - ENDDO - ENDDO - ENDIF - - - ! Add the current velocities to the wave velocities: - - DO J = 1,InitInp%NWaveKin ! Loop through all Morison element nodes where the incident wave kinematics will be computed - - InitOut%WaveVel(:,J,1) = InitInp%CurrVxi(J) ! xi-direction - InitOut%WaveVel(:,J,2) = InitInp%CurrVyi(J) ! yi-direction - IF ( InitInp%WaveKinzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinzi(J) <= 0 ) THEN - - InitOut%nodeInWater(:, J) = 1 - ELSE - InitOut%nodeInWater(:, J) = 0 - END IF - END DO ! J - All points where the incident wave kinematics will be computed - -END SUBROUTINE StillWaterWaves_Init - - -!---------------------------------------------------------------------------------------------------------------------------------- -SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) -! Compute the wave kinematics and related information for Plane progressive (regular) wave, JONSWAP/Pierson-Moskowitz spectrum -! (irregular) wave, or user-defined spectrum (irregular) wave. -!---------------------------------------------------------------------------------------------------------------------------------- - - TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine - TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Output data - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - - - ! Local Variables - COMPLEX(SiKi), PARAMETER :: ImagNmbr = (0.0,1.0) ! The imaginary number, SQRT(-1.0) - COMPLEX(SiKi) :: ImagOmega ! = ImagNmbr*Omega (rad/s) - ! REAL(SiKi), ALLOCATABLE :: WaveElev0 (:) ! Instantaneous elevation of incident waves at the platform reference point (meters) - !COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0HxiPz0 (:,:) ! Partial derivative of WaveAccC0Hxi(:) with respect to zi at zi = 0 (1/s^2) - !COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0HyiPz0 (:,:) ! Partial derivative of WaveAccC0Hyi(:) with respect to zi at zi = 0 (1/s^2) - !COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0VPz0 (:,:) ! Partial derivative of WaveAccC0V (:) with respect to zi at zi = 0 (1/s^2) - !COMPLEX(SiKi), ALLOCATABLE :: PWaveDynPC0BPz0(:,:) ! Partial derivative of WaveDynPC0B (:) with respect to zi at zi = 0 (N/m ) - !COMPLEX(SiKi), ALLOCATABLE :: PWaveVelC0HxiPz0 (:,:) ! Partial derivative of WaveVelC0Hxi(:) with respect to zi at zi = 0 (1/s ) - !COMPLEX(SiKi), ALLOCATABLE :: PWaveVelC0HyiPz0 (:,:) ! Partial derivative of WaveVelC0Hyi(:) with respect to zi at zi = 0 (1/s ) - !COMPLEX(SiKi), ALLOCATABLE :: PWaveVelC0VPz0 (:,:) ! Partial derivative of WaveVelC0V (:) with respect to zi at zi = 0 (1/s ) - COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0Hxi(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) - COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0Hyi(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) - COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0V(:,:) ! Discrete Fourier transform of the instantaneous vertical acceleration of incident waves before applying stretching at the zi-coordinates for points (m/s^2) - COMPLEX(SiKi), ALLOCATABLE :: WaveDynPC0(:,:) ! Discrete Fourier transform of the instantaneous dynamic pressure of incident waves before applying stretching at the zi-coordinates for points (N/m^2) - COMPLEX(SiKi), ALLOCATABLE :: WaveElevC (:,:) ! Discrete Fourier transform of the instantaneous elevation of incident waves (meters) - COMPLEX(SiKi), ALLOCATABLE :: WaveVelC0Hxi(:,:) ! Discrete Fourier transform of the instantaneous horizontal velocity of incident waves before applying stretching at the zi-coordinates for points (m/s) - COMPLEX(SiKi), ALLOCATABLE :: WaveVelC0Hyi(:,:) ! Discrete Fourier transform of the instantaneous horizontal velocity in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s) - COMPLEX(SiKi), ALLOCATABLE :: WaveVelC0V(:,:) ! Discrete Fourier transform of the instantaneous vertical velocity in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s) - COMPLEX(SiKi) :: WGNC ! Discrete Fourier transform of the realization of a White Gaussian Noise (WGN) time series process with unit variance for the current frequency component (-) -! REAL(SiKi) :: CurrVxi ! xi-component of the current velocity at the instantaneous elevation (m/s) -! REAL(SiKi) :: CurrVyi ! yi-component of the current velocity at the instantaneous elevation (m/s) -! REAL(SiKi) :: CurrVxi0 ! xi-component of the current velocity at zi = 0.0 meters (m/s) -! REAL(SiKi) :: CurrVyi0 ! yi-component of the current velocity at zi = 0.0 meters (m/s) -! REAL(SiKi) :: CurrVxiS ! xi-component of the current velocity at zi = -SmllNmbr meters (m/s) -! REAL(SiKi) :: CurrVyiS ! yi-component of the current velocity at zi = -SmllNmbr meters (m/s) - REAL(SiKi), ALLOCATABLE :: CosWaveDir(:) ! COS( WaveDirArr(I) ) -- Each wave frequency has a unique wave direction. - REAL(SiKi), ALLOCATABLE :: GHWaveAcc (:,:) ! Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the GHNWvDpth vertical locations in GH Bladed wave data files (m/s^2) - REAL(SiKi), ALLOCATABLE :: GHWaveDynP(: ) ! Instantaneous dynamic pressure of incident waves at each of the GHNWvDpth vertical locations in GH Bladed wave data files (N/m^2) -! REAL(SiKi) :: GHWaveTime ! Instantaneous simulation times in GH Bladed wave data files (sec) - REAL(SiKi), ALLOCATABLE :: GHWaveVel (:,:) ! Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the GHNWvDpth vertical locations in GH Bladed wave data files (m/s ) - REAL(SiKi), ALLOCATABLE :: GHWvDpth (:) ! Vertical locations in GH Bladed wave data files. -!UNUSED: !REAL(SiKi), PARAMETER :: n_Massel = 3.0 ! Factor used to the scale the peak spectral frequency in order to find the cut-off frequency based on the suggestion in: Massel, S. R., Ocean Surface Waves: Their Physics and Prediction, Advanced Series on Ocean Engineering - Vol. 11, World Scientific Publishing, Singapore - New Jersey - London - Hong Kong, 1996. This reference recommends n_Massel > 3.0 (higher for higher-order wave kinemetics); the ">" designation is accounted for by checking if ( Omega > OmegaCutOff ). - REAL(SiKi) :: Omega ! Wave frequency (rad/s) -!UNUSED: !REAL(SiKi) :: OmegaCutOff ! Cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s) -!UNUSED: ! REAL(SiKi) :: PCurrVxiPz0 ! Partial derivative of CurrVxi with respect to zi at zi = 0 (1/s ) -!UNUSED: ! REAL(SiKi) :: PCurrVyiPz0 ! Partial derivative of CurrVyi with respect to zi at zi = 0 (1/s ) - !REAL(SiKi), ALLOCATABLE :: PWaveAcc0HxiPz0(:,:) ! Partial derivative of WaveAcc0Hxi(:) with respect to zi at zi = 0 (1/s^2) - !REAL(SiKi), ALLOCATABLE :: PWaveAcc0HyiPz0(:,:) ! Partial derivative of WaveAcc0Hyi(:) with respect to zi at zi = 0 (1/s^2) - !REAL(SiKi), ALLOCATABLE :: PWaveAcc0VPz0 (:,:) ! Partial derivative of WaveAcc0V (:) with respect to zi at zi = 0 (1/s^2) - !REAL(SiKi), ALLOCATABLE :: PWaveDynP0BPz0 (:,:) ! Partial derivative of WaveDynP0B (:) with respect to zi at zi = 0 (N/m ) - !REAL(SiKi), ALLOCATABLE :: PWaveVel0HxiPz0(:,:) ! Partial derivative of WaveVel0Hxi(:) with respect to zi at zi = 0 (1/s ) - !REAL(SiKi), ALLOCATABLE :: PWaveVel0HyiPz0(:,:) ! Partial derivative of WaveVel0Hyi(:) with respect to zi at zi = 0 (1/s ) - !REAL(SiKi), ALLOCATABLE :: PWaveVel0VPz0 (:,:) ! Partial derivative of WaveVel0V (:) with respect to zi at zi = 0 (1/s ) -! REAL(SiKi) :: Slope ! Miscellanous slope used in an interpolation (-) - REAL(SiKi), PARAMETER :: SmllNmbr = 9.999E-4 ! A small number representing epsilon for taking numerical derivatives. !bjj: how about using SQRT(EPSILON())? - REAL(SiKi) :: SQRTNStepWave2 ! SQRT( NStepWave/2 ) - REAL(SiKi), ALLOCATABLE :: SinWaveDir (:) ! SIN( WaveDirArr(I) ) - REAL(SiKi), ALLOCATABLE :: WaveAcc0Hxi (:,:) ! Instantaneous horizontal acceleration in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) - REAL(SiKi), ALLOCATABLE :: WaveAcc0Hyi (:,:) ! Instantaneous horizontal acceleration in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) -!UNUSED: for future wave stretching -! REAL(SiKi) :: WaveAcc0HxiExtrap ! Temporary value extrapolated from the WaveAcc0Hxi(:,:) array (m/s^2) -! REAL(SiKi) :: WaveAcc0HxiExtrap ! Temporary value extrapolated from the WaveAcc0Hxi(:,:) array (m/s^2) -! REAL(SiKi) :: WaveAcc0HyiInterp ! Temporary value interpolated from the WaveAcc0Hyi(:,:) array (m/s^2) -! REAL(SiKi) :: WaveAcc0HyiInterp ! Temporary value interpolated from the WaveAcc0Hyi(:,:) array (m/s^2) - REAL(SiKi), ALLOCATABLE :: WaveAcc0V (:,:) ! Instantaneous vertical acceleration of incident waves before applying stretching at the zi-coordinates for points (m/s^2) -!UNUSED: for future wave stretching -! REAL(SiKi) :: WaveAcc0VExtrap ! Temporary value extrapolated from the WaveAcc0V (:,:) array (m/s^2) -! REAL(SiKi) :: WaveAcc0VInterp ! Temporary value interpolated from the WaveAcc0V (:,:) array (m/s^2) - REAL(SiKi), ALLOCATABLE :: WaveDynP0B(:,:) ! Instantaneous dynamic pressure of incident waves before applying stretching at the zi-coordinates for points (N/m^2) -!UNUSED: for future wave stretching -! REAL(SiKi) :: WaveDynP0BExtrap ! Temporary value extrapolated from the WaveDynP0B (:,:) array (N/m^2) -! REAL(SiKi) :: WaveDynP0BInterp ! Temporary value interpolated from the WaveDynP0B (:,:) array (N/m^2) -! REAL(SiKi) :: WaveElev_Max ! Maximum expected value of the instantaneous elevation of incident waves (meters) -! REAL(SiKi) :: WaveElev_Min ! Minimum expected value of the instantaneous elevation of incident waves (meters) - COMPLEX(SiKi) :: WaveElevxiPrime0 - REAL(SiKi), ALLOCATABLE :: WaveKinzi0Prime(:) ! zi-coordinates for points where the incident wave kinematics will be computed before applying stretching; these are relative to the mean see level (meters) - INTEGER , ALLOCATABLE :: WaveKinPrimeMap(:) -! REAL(SiKi), ALLOCATABLE :: WaveKinzi0St (:) ! Array of elevations found by stretching the elevations in the WaveKinzi0Prime(:) array using the instantaneous wave elevation; these are relative to the mean see level (meters) - REAL(SiKi) :: WaveNmbr ! Wavenumber of the current frequency component (1/meter) - REAL(SiKi) :: WaveS1Sdd ! One-sided power spectral density of the wave spectrum per unit time for the current frequency component (m^2/(rad/s)) - REAL(SiKi) :: WaveS2Sdd ! Two-sided power spectral density of the wave spectrum per unit time for the current frequency component (m^2/(rad/s)) - REAL(DbKi) :: WaveTMax ! Analysis time for incident wave calculations (sec) - REAL(SiKi), ALLOCATABLE :: WaveVel0Hxi (:,:) ! Instantaneous xi-direction velocity of incident waves before applying stretching at the zi-coordinates for points (m/s ) -!UNUSED: for future wave stretching -! REAL(SiKi) :: WaveVel0HxiExtrap ! Temporary value extrapolated from the WaveVel0Hxi(:,:) array (m/s ) -! REAL(SiKi) :: WaveVel0HxiInterp ! Temporary value interpolated from the WaveVel0Hxi(:,:) array (m/s ) - REAL(SiKi), ALLOCATABLE :: WaveVel0Hyi (:,:) ! Instantaneous yi-direction velocity of incident waves before applying stretching at the zi-coordinates for points (m/s ) -!UNUSED: for future wave stretching -! REAL(SiKi) :: WaveVel0HyiExtrap ! Temporary value extrapolated from the WaveVel0Hyi(:,:) array (m/s ) -! REAL(SiKi) :: WaveVel0HyiInterp ! Temporary value interpolated from the WaveVel0Hyi(:,:) array (m/s ) - REAL(SiKi), ALLOCATABLE :: WaveVel0V (:,:) ! Instantaneous vertical velocity of incident waves before applying stretching at the zi-coordinates for points (m/s ) -!UNUSED: for future wave stretching -! REAL(SiKi) :: WaveVel0VExtrap ! Temporary value extrapolated from the WaveVel0V (:,:) array (m/s ) -! REAL(SiKi) :: WaveVel0VInterp ! Temporary value interpolated from the WaveVel0V (:,:) array (m/s ) -! REAL(SiKi) :: zi_Max ! Maximum elevation where the wave kinematics are to be applied using stretching to the instantaneous free surface (meters) -! REAL(SiKi) :: zi_Min ! Minimum elevation where the wave kinematics are to be applied using stretching to the instantaneous free surface (meters) -! REAL(SiKi) :: ziPrime_Max ! Maximum elevation where the wave kinematics are computed before applying stretching to the instantaneous free surface (meters) -! REAL(SiKi) :: ziPrime_Min ! Minimum elevation where the wave kinematics are computed before applying stretching to the instantaneous free surface (meters) - -! REAL(SiKi) :: WGNC_Fact -! INTEGER :: GHNStepWave ! Total number of time steps in the GH Bladed wave data files. -! INTEGER :: GHNWvDpth ! Number of vertical locations in GH Bladed wave data files. - INTEGER :: I ! Generic index -! INTEGER :: I_Orig ! The index of the time step from original (input) part of data - INTEGER :: I_WaveTp ! The index of the frequency component nearest to WaveTp - INTEGER :: J ! Generic index - INTEGER :: J_Min ! The minimum value of index J such that WaveKinzi(J) >= -WtrDpth - INTEGER :: K ! Generic index - INTEGER :: LastInd ! Index into the arrays saved from the last call as a starting point for this call - INTEGER :: nSeeds ! number of seeds required to initialize the intrinsic random number generator - INTEGER :: NWaveKin0Prime ! Number of points where the incident wave kinematics will be computed before applying stretching to the instantaneous free surface (-) - INTEGER, ALLOCATABLE :: TmpWaveSeeds (:) ! A temporary array used for portability. IVF/CVF use a random number generator initialized with 2 seeds; other platforms can use different implementations (e.g. gfortran needs 8 or 12 seeds) - COMPLEX(SiKi) :: tmpComplex ! A temporary varible to hold the complex value of the wave elevation before storing it into a REAL array - COMPLEX(SiKi),ALLOCATABLE :: tmpComplexArr(:) ! A temporary array (0:NStepWave2-1) for FFT use. - TYPE(FFT_DataType) :: FFT_Data ! the instance of the FFT module we're using - - ! Variables for mult-direction waves - INTEGER(IntKi) :: WaveNDirMax !< Maximum value we can change WaveNDir to (relative to original value passed in). Used in finding new WaveNDir value. - INTEGER(IntKi) :: WvSpreadNDir !< Number of wave spreading directions for intermediate calculations. Set later to be MAX(15*InitOut%WaveNDir,1000) - INTEGER(IntKi) :: WvSpreadFreqPerDir !< Number of wave frequencies per direction - REAL(SiKi), ALLOCATABLE :: WvSpreadCos2SArr(:) !< Wave spreading function results array. Used in equal energy wave spreading function. - REAL(SiKi) :: WvSpreadCos2SConst !< Normalization constant for wave spreading function. - REAL(SiKi), ALLOCATABLE :: WvSpreadIntegral(:) !< Cumulative integral of the wave spreading function. Used in finding equal energy wave directions. - REAL(SiKi) :: WvSpreadDTheta !< Wave direction step size for intermediate calculations. Used in finding equal energy wave directions. - REAL(SiKi), ALLOCATABLE :: WvSpreadThetas(:) !< Wave direction used in calculations and interpolations - REAL(SiKi), ALLOCATABLE :: WvSpreadThetaIdx(:) !< Indices for wave directions - REAL(SiKi), ALLOCATABLE :: WvTheta(:) !< Final set of wave directions (degrees) - REAL(SiKi) :: WvSpreadIntegralTmp !< Temporary variable for the interpolation - - - ! Variables for error handling - INTEGER(IntKi) :: ErrStatTmp !< Temporary error status - CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message - CHARACTER(ErrMsgLen) :: ErrMsgTmp2 !< Another temporary error message - - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrStatTmp = ErrID_None - ErrMsg = "" - ErrMsgTmp = "" - - ! Set the WaveNDir information (number of wave directions). - ! -> Since this must be adjusted later, put it in InitOut first and adjust that later in the code. - InitOut%WaveNDir = InitInp%WaveNDir - InitOut%WaveDir = InitInp%WaveDir ! We may want this value later (I had a nasty surprise when this wasn't set) - WaveNDirMax = CEILING(InitOut%WaveNDir*1.25_SiKi) ! Value we allow WaveNDir to reach before aborting - - - - - - ! Tell our nice users what is about to happen that may take a while: - - CALL WrScr ( ' Generating incident wave kinematics and current time history.' ) - - - - ! Determine the number of, NWaveKin0Prime, and the zi-coordinates for, - ! WaveKinzi0Prime(:), points where the incident wave kinematics will be - ! computed before applying stretching to the instantaneous free surface. - ! The locations are relative to the mean see level. Also determine J_Min, - ! which is the minimum value of index J such that WaveKinzi(J) >= - ! -WtrDpth. These depend on which incident wave kinematics stretching - ! method is being used: - -!JASON: ADD OTHER STRETCHING METHODS HERE, SUCH AS: DELTA STRETCHING (SEE ISO 19901-1) OR CHAKRABARTI STRETCHING (SEE OWTES)??? -!JASON: APPLY STRETCHING TO THE DYNAMIC PRESSURE, IF YOU EVER COMPUTE THAT HERE!!! - -! SELECT CASE ( InitInp%WaveStMod ) ! Which model are we using to extrapolate the incident wave kinematics to the instantaneous free surface? - -! CASE ( 0 ) ! None=no stretching. - - - ! Since we have no stretching, NWaveKin0Prime and WaveKinzi0Prime(:) are - ! equal to the number of, and the zi-coordinates for, the points in the - ! WaveKinzi(:) array between, and including, -WtrDpth and 0.0. - - ! Determine J_Min and NWaveKin0Prime here: - - J_Min = 0 - NWaveKin0Prime = 0 - DO J = 1,InitInp%NWaveKin ! Loop through all mesh points where the incident wave kinematics will be computed - ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinzi and WtrDpth have already been adjusted using MSL2SWL - IF ( InitInp%WaveKinzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinzi(J) <= 0 ) THEN - NWaveKin0Prime = NWaveKin0Prime + 1 - END IF - END DO ! J - All Morison nodes where the incident wave kinematics will be computed - - - - ! ALLOCATE the WaveKinzi0Prime(:) array and compute its elements here: - - ALLOCATE ( WaveKinzi0Prime(NWaveKin0Prime) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinzi0Prime.',ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveKinPrimeMap(NWaveKin0Prime) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinPrimeMap.',ErrStat,ErrMsg,'VariousWaves_Init') - - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - I = 1 - - DO J = 1,InitInp%NWaveKin ! Loop through all points where the incident wave kinematics will be computed without stretching - ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinzi and WtrDpth have already been adjusted using MSL2SWL - IF ( InitInp%WaveKinzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinzi(J) <= 0 ) THEN - - WaveKinzi0Prime(I) = InitInp%WaveKinzi(J) - WaveKinPrimeMap(I) = J - I = I + 1 - - END IF - - END DO ! J - All points where the incident wave kinematics will be computed without stretching - - -! CASE ( 1, 2 ) ! Vertical stretching or extrapolation stretching. - - - ! Vertical stretching says that the wave kinematics above the mean sea level - ! equal the wave kinematics at the mean sea level. The wave kinematics - ! below the mean sea level are left unchanged. - ! - ! Extrapolation stretching uses a linear Taylor expansion of the wave - ! kinematics (and their partial derivatives with respect to z) at the mean - ! sea level to find the wave kinematics above the mean sea level. The - ! wave kinematics below the mean sea level are left unchanged. - ! - ! Vertical stretching and extrapolation stretching do not effect the wave - ! kinematics below the mean sea level; also, vertical stretching and - ! extrapolation stretching say the wave kinematics above the mean sea - ! level depend only on the mean sea level values. Consequently, - ! NWaveKin0Prime and WaveKinzi0Prime(:) are equal to the number of, and - ! the zi-coordinates for, the points in the WaveKinzi(:) array between, - ! and including, -WtrDpth and 0.0; the WaveKinzi0Prime(:) array must also - ! include 0.0 even if the WaveKinzi(:) array does not. - - - - -! CASE ( 3 ) ! Wheeler stretching. - - - ! Wheeler stretching says that wave kinematics calculated using Airy theory - ! at the mean sea level should actually be applied at the instantaneous - ! free surface and that Airy wave kinematics computed at locations between - ! the seabed and the mean sea level should be shifted vertically to new - ! locations in proportion to their elevation above the seabed. - ! - ! Thus, given a range of zi(:) where we want to know the wave kinematics - ! after applying Wheeler stretching, the required range of ziPrime(:) - ! where the wave kinematics need to be computed before applying - ! stretching, is as follows: - ! - ! ziPrime_Min <= ziPrime(:) <= ziPrime_Max - ! - ! ziPrime_Min = MAX{ ( zi_Min - WaveElev_Max )/( 1 + WaveElev_Max/WtrDpth ), -WtrDpth } - ! ziPrime_Max = MIN{ ( zi_Max - WaveElev_Min )/( 1 + WaveElev_Min/WtrDpth ), 0 } - ! - ! where, - ! zi_Max = maximum elevation where the wave kinematics are to be - ! applied using stretching to the instantaneous free - ! surface - ! zi_Min = minimum elevation where the wave kinematics are to be - ! applied using stretching to the instantaneous free - ! surface - ! ziPrime_Max = maximum elevation where the wave kinematics are computed - ! before applying stretching to the instantaneous free - ! surface - ! ziPrime_Min = minimum elevation where the wave kinematics are computed - ! before applying stretching to the instantaneous free - ! surface - ! WaveElev_Max = maximum expected value of the instantaneous elevation of - ! incident waves - ! WaveElev_Min = minimum expected value of the instantaneous elevation of - ! incident waves - ! - ! Thus, in order to account for Wheeler stretching when computing the wave - ! kinematics at each of the NWaveKin points along a vertical line passing - ! through the platform reference point [defined by the zi-coordinates - ! relative to the mean see level as specified in the WaveKinzi(:) array], - ! we must first compute the wave kinematics without stretching at - ! alternative elevations [indicated here by the NWaveKin0Prime-element - ! array WaveKinzi0Prime(:)]: - - - - - -! ENDSELECT - - - - - ! Perform some initialization computations including initializing the - ! pseudorandom number generator, calculating the total number of frequency - ! components = total number of time steps in the incident wave, - ! calculating the frequency step, calculating the index of the frequency - ! component nearest to WaveTp, and ALLOCATing the arrays: - ! NOTE: WaveDOmega = 2*Pi/WaveTMax since, in the FFT: - ! Omega = (K-1)*WaveDOmega - ! Time = (J-1)*WaveDT - ! and therefore: - ! Omega*Time = (K-1)*(J-1)*WaveDOmega*WaveDT - ! = (K-1)*(J-1)*2*Pi/NStepWave [see NWTC_FFTPACK] - ! or: - ! WaveDOmega = 2*Pi/(NStepWave*WaveDT) - ! = 2*Pi/WaveTMax - - CALL RANDOM_SEED ( SIZE = nSeeds ) - - IF ( nSeeds /= 2 ) THEN - ErrMsgTmp = ' The random number generator in use differs from the original code provided by NREL. This pRNG uses ' & - //TRIM(Int2LStr(nSeeds))//' seeds instead of the 2 in the HydroDyn input file.' - CALL SetErrStat(ErrID_Warn,ErrMsgTmp,ErrStat,ErrMsg,'VariousWaves_Init') - END IF - - ALLOCATE ( TmpWaveSeeds ( nSeeds ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpWaveSeeds.',ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! We'll just populate this with odd seeds = Seed(1) and even seeds = Seed(2) - DO I = 1,nSeeds,2 - TmpWaveSeeds(I) = InitInp%WaveSeed(1) - END DO - DO I = 2,nSeeds,2 - TmpWaveSeeds(I) = InitInp%WaveSeed(2) - END DO - - - CALL RANDOM_SEED ( PUT=TmpWaveSeeds ) - DEALLOCATE(TmpWaveSeeds, STAT=ErrStatTmp) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot deallocate array TmpWaveSeeds.',ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - ! Set new value for NStepWave so that the FFT algorithms are efficient. Note that if this method is changed, the method - ! used to calculate the number of multidirectional wave directions (WaveNDir) and the UserWaveElevations_Init subroutine - ! will need to be updated. - - ! NOTE: For WaveMod = 5, NStepWave and several other things were already set in the UserWaveElevations_Init routine - ! using file information (an FFT was performed there, so the information was needed before now). - IF (InitInp%WaveMod /= 5 ) THEN - InitOut%NStepWave = CEILING ( InitInp%WaveTMax/InitInp%WaveDT ) ! Set NStepWave to an even integer - IF ( MOD(InitOut%NStepWave,2) == 1 ) InitOut%NStepWave = InitOut%NStepWave + 1 ! larger or equal to WaveTMax/WaveDT. - InitOut%NStepWave2 = MAX( InitOut%NStepWave/2, 1 ) ! Make sure that NStepWave is an even product of small factors (PSF) that is - InitOut%NStepWave = 2*PSF ( InitOut%NStepWave2, 9 ) ! greater or equal to WaveTMax/WaveDT to ensure that the FFT is efficient. - - InitOut%NStepWave2 = InitOut%NStepWave/2 ! Update the value of NStepWave2 based on the value needed for NStepWave. - WaveTMax = InitOut%NStepWave*InitInp%WaveDT ! Update the value of WaveTMax based on the value needed for NStepWave. - InitOut%WaveTMax = WaveTMax ! Update the value of WaveTMax in the output. Needed by glue code later. - InitOut%WaveDOmega = TwoPi/WaveTMax ! Compute the frequency step for incident wave calculations. - ELSE - WaveTMax = InitOut%WaveTMax - ENDIF - SQRTNStepWave2 = SQRT( REAL( InitOut%NStepWave2, SiKi ) ) ! Compute SQRT( NStepWave/2 ). - I_WaveTp = NINT ( TwoPi/(InitOut%WaveDOmega*InitInp%WaveTp) ) ! Compute the index of the frequency component nearest to WaveTp. - - - ! Allocate all the arrays we need. - - IF ( InitInp%WaveMod /= 5 ) THEN ! For WaveMod == 5, these are allocated and populated in UserWaveElevations_Init - ALLOCATE ( InitOut%WaveElevC0(2, 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevC0.',ErrStat,ErrMsg,'VariousWaves_Init') - ENDIF - - ALLOCATE ( InitOut%WaveTime (0:InitOut%NStepWave ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveTime.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( tmpComplexArr(0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array tmpComplexArr.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveElevC (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElevC.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveDynPC0 (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynPC0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveVelC0Hxi (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVelC0Hxi.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveVelC0Hyi (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVelC0Hyi.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveVelC0V (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVelC0V.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveAccC0Hxi (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0Hxi.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveAccC0Hyi (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0Hyi.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveAccC0V (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0V.', ErrStat,ErrMsg,'VariousWaves_Init') - - !ALLOCATE ( PWaveDynPC0BPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveDynPC0BPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveVelC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveVelC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveVelC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveAccC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveAccC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveAccC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%WaveElev0 (0:InitOut%NStepWave ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElev0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NWaveElev ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveDynP0B (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP0B.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveVel0Hxi (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel0Hxi.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveVel0Hyi (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel0Hyi.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveVel0V (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel0V.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveAcc0Hxi (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0Hxi.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveAcc0Hyi (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0Hyi.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( WaveAcc0V (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0V.', ErrStat,ErrMsg,'VariousWaves_Init') - - !ALLOCATE ( PWaveDynP0BPz0 (0:InitOut%NStepWave-1,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveDynP0BPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveVel0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveVel0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveVel0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0Pz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveAcc0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveAcc0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !ALLOCATE ( PWaveAcc0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NWaveKin ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%WaveVel (0:InitOut%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%WaveAcc (0:InitOut%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%PWaveDynP0 (0:InitOut%NStepWave,InitInp%NWaveKin ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveDynP0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%PWaveVel0 (0:InitOut%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveVel0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%PWaveAcc0 (0:InitOut%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveAcc0.', ErrStat,ErrMsg,'VariousWaves_Init') - - - - ALLOCATE ( InitOut%nodeInWater(0:InitOut%NStepWave,InitInp%NWaveKin ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%nodeInWater.', ErrStat,ErrMsg,'VariousWaves_Init') - - ! Wave direction associated with each frequency - ALLOCATE ( InitOut%WaveDirArr( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDirArr.',ErrStat,ErrMsg,'VariousWaves_Init') - - ! Arrays for the Sin and Cos of the wave direction for each frequency. Used in calculating wave elevation, velocity, acceleration etc. - ALLOCATE ( CosWaveDir( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array CosWaveDir.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( SinWaveDir( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array SinWaveDir.', ErrStat,ErrMsg,'VariousWaves_Init') - - - ! Now check if all the allocations worked properly - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - - ! We now need to establish the nodeInWater flag values for all the simulation node for all timesteps, this is an extension which is needed to - ! support user input wave data. TODO: THIS ASSUMES NO WAVE STRETCHING!!!!!!!! GJH 18 Mar 2015 - DO J = 1,InitInp%NWaveKin ! Loop through all points where the incident wave kinematics will be computed without stretching - ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinzi and WtrDpth have already been adjusted using MSL2SWL - IF ( InitInp%WaveKinzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinzi(J) <= 0 ) THEN - - InitOut%nodeInWater(:, J) = 1 - ELSE - InitOut%nodeInWater(:, J) = 0 - END IF - - END DO ! J - All points where the incident wave kinematics will be computed without stretching - - -!FIXME: Is this piece still needed? If so, why is it commented out? - ! Calculate the factors needed by the discrete time inverse Fourier - ! transform in the calculations of the White Gaussian Noise (WGN) and - ! the two-sided power spectral density of the wave spectrum per unit time: - - ! This factor is needed by the discrete time inverse Fourier transform to ensure that the time series WGN - ! process has unit variance - ! WGNC_Fact = SQRT( Pi/(InitOut%WaveDOmega*InitInp%WaveDT) ) - - - - - - !-------------------------------------------------------------------------------- - !> # Multi Directional Waves - !> ## Adjust WaveNDir - !! - !! If multi-directional waves will be used, the value of WaveNDir may need to be adjusted. The reason is that - !! for the equal energy approach used here, the following condition must be met: - !! - !! CONDITION: (NStepWave2) / WaveNDir must be an integer - !! - !! If this is true, then an equal number of frequencies is assigned to each of the WaveNDir directions which - !! gives the proper wave direction distribution function. Otherwise, the energy distribution by direction - !! will not be correct. - !! - !! _WaveNDir_ could not be adjusted before _NStepWave2_ was finalized above. - !! - !! @note Use the value of WaveNDir stored in InitOut since InitInp cannot be changed. - !! - !! @note Originally, the criteria had been that (NStepWave2 - 1) / WaveNDir is an integer. This criteria - !! was relaxed by setting the direction for Omega = 0 (which has no amplitude) since it was found that - !! (NStepWave2 - 1) is often a prime number due to how NStepWave is calculated above to be a product - !! of smallish numbers. - - IF ( InitInp%WaveMultiDir ) THEN ! Multi-directional waves in use - - ! Check that the number of wave directions is a positive odd number. In theory this has been - ! done before the Waves module was called. We repeat it here in the event that the Waves module - ! gets used in some other code. - ! -> If it is less than 0, error out. - ! -> If it is even, we will increment it by 1. - IF ( InitOut%WaveNDir <= 0_IntKi ) THEN - ErrMsgTmp = 'WaveNDir must be an odd number greater than 0.' - ErrStatTmp = ErrID_Fatal - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'VariousWaves_Init') - RETURN - END IF - - IF ( MODULO( InitOut%WaveNDir, 2_IntKi) == 0_IntKi ) THEN - InitOut%WaveNDir = InitOut%WaveNDir + 1 - ErrMsgTmp = 'WaveNDir must be odd. Changing the value to '//TRIM(Num2LStr(InitOut%WaveNDir)) - CALL SetErrStat(ErrID_Warn,ErrMsgTmp,ErrStat,ErrMsg,'VariousWaves_Init') - END IF - - ! Now adjust WaveNDir as necessary so that (NStepWave2) / WaveNDir is integer - IF ( .NOT. EqualRealNos(REAL(( InitOut%NStepWave2 )/ InitOut%WaveNDir), & - ((REAL(InitOut%NStepWave2))/REAL(InitOut%WaveNDir)) )) THEN - DO WHILE ( InitOut%WaveNDir <= WaveNDirMax ) - - InitOut%WaveNDir = InitOut%WaveNDir + 2.0_SiKi - IF ( EqualRealNos(REAL(( InitOut%NStepWave2 )/ InitOut%WaveNDir), & - ((REAL(InitOut%NStepWave2))/REAL(InitOut%WaveNDir)) )) THEN - ErrMsgTmp = 'Changed WaveNDir from '//TRIM(Num2LStr(InitInp%WaveNDir))//' to '// & - TRIM(Num2LStr(InitOut%WaveNDir))//' so that an equal number of frequencies are assigned to '// & - 'each direction.' - CALL SetErrStat(ErrID_Warn,ErrMsgTmp,ErrStat,ErrMsg,'VariousWaves_Init') - EXIT - END IF - END DO - END IF - - ! If we exited because we hit a limit (in which case the condition is not satisfied), then we cannot continue. - ! We warn the user that a value for WaveNDir was not found, and that they should try a different value, or try - ! a different value for WaveTMax. The reason for suggesting the latter is that NStepWave is derived from - ! WaveTMax and adjusted until it is a product of smallish numbers (most likely even, but not necessarily so). - ! So, there is a very small possibility then that NStepWave2 is a prime number, in which case we won't find a - ! value for WaveNDir, so we suggest that the user change WaveTMax. To make this a little easier for the user, - ! we will report the first 5 possible values for WaveNDir between their requested value and 1/4 of NStepWave2, - ! if there are any. - IF ( .NOT. EqualRealNos(REAL(( InitOut%NStepWave2 )/ InitOut%WaveNDir), & - ((REAL(InitOut%NStepWave2))/REAL(InitOut%WaveNDir)) )) THEN - ErrMsgTmp = 'Could not find value for WaveNDir between '//TRIM(Num2LStr(InitInp%WaveNDir))//' and '// & - TRIM(Num2LStr(WaveNDirMax))//' such that an equal number of frequencies are assigned to each '// & - 'direction.' - ErrStatTmp = ErrID_Fatal - - ! Now check for the possible values of WaveNDir so that we can tell the user about it. The variable 'I' contains - ! the count of the number of values of WaveNDir found. - I = 0 - ErrMsgTmp2 = 'The next values of WaveNDir that work with the selected values for WaveTMax and WaveDT:' - DO WHILE ( InitOut%WaveNDir <= INT(InitOut%NStepWave2/4.0) ) - IF ( EqualRealNos(REAL(( InitOut%NStepWave2 )/ InitOut%WaveNDir), & - ((REAL(InitOut%NStepWave2))/REAL(InitOut%WaveNDir)) )) THEN - ErrMsgTmp2 = TRIM(ErrMsgTmp2)//" "//TRIM(Num2LStr(InitOut%WaveNDir)) - I = I + 1 - END IF - - InitOut%WaveNDir = InitOut%WaveNDir + 2.0_SiKi - - IF ( I >= 5 ) EXIT - - END DO - - ! If there were no additional values for WaveNDir found, I will be 0, so we rewrite the error message. - IF ( I == 0 ) THEN - ErrMsgTmp2 = 'There are no values for WaveNDir between '//TRIM(Num2LStr(WaveNDirMax))//' and '// & - TRIM(Num2LStr(INT(InitOut%NStepWave2/4.0)))//' (4 frequencies per wave direction)'// & - ' that will work with the selected values for WaveTMax ('//TRIM(Num2Lstr(InitOut%WaveTMax))// & - ') and WaveDT ('//TRIM(Num2LStr(InitInp%WaveDT))//'). Change either'// & - ' WaveTMax or WaveDT.' - ELSE - ErrMsgTmp2 = TRIM(ErrMsgTmp2)//'.' - ENDIF - - ! Append the message about the possible values for WaveNDir (if any were found) and set the error status before - ! returning to the calling program. - ErrMsgTmp = TRIM(ErrMsgTmp)//NewLine//' '//TRIM(ErrMsgTmp2) - - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'VariousWaves_Init') - RETURN - END IF - - ! Save the number of frequencies per direction so that we can use it later in assigning the directios. - WvSpreadFreqPerDir = (InitOut%NStepWave2)/InitOut%WaveNDir - - - !> ## Calculate the wave directions based on an equal energy approach. - !! - !! All the angles are supplied in degrees and are converted as needed. For the cosine function, - !! we could convert degrees to radians, but the conversion constant cancels out. - !! - !! | Variable | Fortran Name | Location | Units | Description | - !! | :----------------: | :-------------------: | :-------: | :--------: | :----------------------------------------------------- | - !! | \f$\bar\theta\f$ | _WaveDir_ | _InitInp_ | (degrees) | Mean direction heading (_WaveDir_) | - !! | \f$\Theta\f$ | _WaveNDir_ | _InitOut_ | (-) | Number of wave directions | - !! | \f$\delta\theta\f$ | _WaveDirRange_ | _InitInp_ | (degrees) | Full range of spreading function | - !! | \f$S\f$ | _WaveDirSpread_ | _InitInp_ | (-) | The spreading coefficient | - !! | | _WvSpreadNDir_ | local | (-) | Number of angles discretizing the spreading function | - !! | \f$C\f$ | _WvSpreadCos2SConst_ | local | (1/degrees) | The normalization coefficient | - !! | | _WvTheta_ | local | (degrees) | The interpolated wave directions to assign to | - !! | \f$\theta_i\f$ | _WvSpreadThetas_ | local | (degrees) | Array of wave directions associated with _WvSpreadIntegral_ | - !! | | _D2R_ | global | (rad/degree) | Constant from library to convert degrees to radians | - !! - !! The equal energy approach is used to set the wave directions such that each direction has the same - !! number of frequencies. To ensure that direction spreading function (Cosine^2S in this case) has - !! the correct overal energy distribution shape, the wave directions are adjusted. The spacing between - !! directions is closer near the central direction than in the tails of the spreading function. The - !! method distributes the wave directions so that the energy integral between wave directions is kept - !! constant. The following steps are taken: - !! - !! 1. Discretize the spreading function over the range _InitInp%WaveDirRange_ into _WvSpreadNDir_. - !! - !! 2. Calculate the spreading function, _WvSpreadCos2SArr_, in the range.\n - !! \f$ D(\theta) = C \left| \cos\left(\frac{\pi (\theta-\bar\theta)}{\delta\theta}\right)\right|^{2S} \f$\n - !! where\n - !! \f$ C = \frac{\sqrt{\pi} \: \Gamma(S+1)}{\delta\theta \: \Gamma(S+1/2)} \f$, - !! and - !! \f$ \Gamma \f$ is the gamma function. - !! - !! 3. Calculate the integral of WvSpreadCos2SArr up to the current angle, and save it as - !! WvSpreadIntegral. The integral can be written as:\n - !! \f$P(\theta) = \int\limits^{\theta}_{\bar\theta - \delta\theta/2} D(\theta') \: \mathrm{d}\theta'\f$ - !! - !! 4. Do a sanity check on the result of \f$P(\theta)\f$ over the range. - !! - !! 5. Divide the integrated area of _WvSpreadCos2SArr_ into _InitOut%WaveNDir_ directions (the final number - !! of wave directions that was solved for above). To do this, simply find the _1/WaveNDir_ values - !! of the integral and interpolate to find the values of the _WvSpreadThetas_ that match. These are the - !! new wave directions to use. These results are stored in the array _WvTheta_. - !! - !! 6. Cleanup - !! - - !> ### Code Implementation order - !! 1. Discretize the spreading function range and calculate the values of the wave spreading function - - ! Now that we have the value for _WaveNDir_ found above, we set the value of _WvSpreadNDir_ to be 15x as - ! large, or 1000 (whichever is larger). WvSpreadNDir is used only in discretization for later - ! interpolation of actual wave directions. - WvSpreadNDir = MAX(15*InitOut%WaveNDir,1000) - WvSpreadDTheta = InitInp%WaveDirRange/REAL(WvSpreadNDir,SiKi) - - ! Calculate the normalization constant for the wave spreading. - WvSpreadCos2SConst = sqrt(Pi)* (NWTC_GAMMA(InitInp%WaveDirSpread + 1.0_SiKi))/ & - (InitInp%WaveDirRange * NWTC_GAMMA(InitInp%WaveDirSpread + 0.5_SiKi)) - - ! Allocate arrays to use for storing the intermediate values - ALLOCATE( WvSpreadCos2SArr(0:WvSpreadNDir), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvSpreadCos2SArr.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE( WvSpreadIntegral(0:WvSpreadNDir), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvSpreadIntegral.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE( WvSpreadThetas(0:WvSpreadNDir), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvSpreadThetas.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE( WvTheta(1:InitOut%WaveNDir), STAT=ErrStatTmp ) ! Dealocate this at very end of routine. - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvTheta.', ErrStat,ErrMsg,'VariousWaves_Init') - - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - !> 2. Calculate the spreading function as a function of angle. Step through all _WvSpreadNDir_ steps. - DO I=0,WvSpreadNDir - ! The current angle as we step through the range - WvSpreadThetas(I) = I*WvSpreadDTheta + InitInp%WaveDir - InitInp%WaveDirRange/(2.0_SiKi) - - ! Calculate the wave spreading for the current value of WvSpreadThetas - WvSpreadCos2SArr(I) = WvSpreadCos2SConst*abs( cos(Pi*(WvSpreadThetas(I)-InitInp%WaveDir)/InitInp%WaveDirRange) ) & - **(2*InitInp%WaveDirSpread) - - !> 3. Calculate the integral of the spreading function up to the current angle and save it. - ! Remember that the first element can't refer to one before it. - IF (I == 0) THEN - WvSpreadIntegral(I) = WvSpreadCos2SArr(I) * WvSpreadDTheta - ELSE - WvSpreadIntegral(I) = WvSpreadCos2SArr(I) * WvSpreadDTheta + WvSpreadIntegral(I-1) - END IF - ENDDO - - - !> 4. Perform a quick sanity check. The last value of the integral table should be 1.0 exactly. - !! We will allow for a 1% deviation. If for some reason an error occurs, it may be due to the - !! GAMMA function calculation for the normalization constant, _WvSpreadCos2SConst_. - IF ( WvSpreadIntegral(WvSpreadNDir) < 0.99_SiKi .OR. WvSpreadIntegral(WvSpreadNDir) > 1.01_SiKi ) THEN - CALL SetErrStat(ErrID_Fatal,' Something went wrong in evaluating the multidirectional wave spreading function. '// & - 'Integral is '//TRIM(Num2LStr(WvSpreadIntegral(WvSpreadNDir))),ErrStat,ErrMsg,'VariousWaves_Init') - RETURN - END IF - - - !> 5. Set the wave directions using the results from the integral. - ! We will use the variable LastInd as a simple index for figuring out where in the array we are. First set to 0 - LastInd = 0_IntKi - DO I=1,InitOut%WaveNDir - WvSpreadIntegralTmp = (REAL(I)-0.5_SiKi)/REAL(InitOut%WaveNDir) - WvTheta(I) = InterpStp( WvSpreadIntegralTmp, WvSpreadIntegral, WvSpreadThetas, LastInd, WvSpreadNDir ) - ENDDO ! I=1,InitOut%WaveNDir - - ! Store the minimum and maximum wave directions - InitOut%WaveDirMin = MINVAL(WvTheta) - InitOut%WaveDirMax = MAXVAL(WvTheta) - - !> 6. Done with equal energy wavedirection calculations. Deallocate the arrays used during calculations. - IF(ALLOCATED( WvSpreadCos2SArr )) DEALLOCATE( WvSpreadCos2SArr, STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot deallocate array WvSpreadCos2SArr.', ErrStat,ErrMsg,'VariousWaves_Init') - IF(ALLOCATED( WvSpreadIntegral )) DEALLOCATE( WvSpreadIntegral, STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot deallocate array WvSpreadIntegral.', ErrStat,ErrMsg,'VariousWaves_Init') - IF(ALLOCATED( WvSpreadThetas )) DEALLOCATE( WvSpreadThetas, STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot deallocate array WvSpreadThetas.', ErrStat,ErrMsg,'VariousWaves_Init') - - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ELSE ! Multi-directional waves not used - - InitOut%WaveDirMin = InitInp%WaveDir - InitOut%WaveDirMax = InitInp%WaveDir - - ENDIF ! Multi-directional waves in use (InitInp%WaveMultiDir == .TRUE.) - - - - ! JASON: IMPLEMENT EQUATIONS (2.12 - 2.13) IN MY DISSERTATION SO THAT ONE CAN READ IN EXTERNAL WAVE - ! DATA?<--BETTER YET, IMPLEMENT WaveElevC0 = DFT(WaveElev) WHERE WaveElev CAN BE READ IN AS - ! GH BLADED WAVE DATA. THAT IS, ADD AN OPTION TO READ IN WAVE DATA FOR FLOATERS! - - ! Compute the positive-frequency components (including zero) of the discrete - ! Fourier transforms of the wave kinematics: - - DO I = 0,InitOut%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transforms - - - ! Compute the frequency of this component and its imaginary value: - - Omega = I* InitOut%WaveDOmega - ImagOmega = ImagNmbr*Omega - - - - ! Compute the discrete Fourier transform of the realization of a White - ! Gaussian Noise (WGN) time series process with unit variance: - ! - ! NOTE: For the time series process to be real with zero mean, the values at - ! Omega == 0.0 and Omega == NStepWave2*WaveDOmega (= WaveOmegaMax) - ! must be zero. - - IF ( ( I == 0 ) .OR. ( I == InitOut%NStepWave2 ) ) THEN ! .TRUE. if ( Omega == 0.0 ) or ( Omega == NStepWave2*WaveDOmega (= WaveOmegaMax) ) - WGNC = (0.0,0.0) - ELSEIF ( InitInp%WaveMod == 10 ) THEN ! .TRUE. for plane progressive (regular) waves with a specified phase - WGNC = BoxMuller ( InitInp%RNG%pRNG, InitInp%WaveNDAmp, InitInp%WavePhase ) - ! This scaling of WGNC is used to ensure that the Box-Muller method is only providing a random phase, - ! not a magnitude change, at the frequency of the plane progressive wave. The SQRT(2.0) is used to - ! ensure that the time series WGN process has unit variance (i.e. sinusoidal with amplitude SQRT(2.0)). - ! - ! NOTE: the denominator here will never equal zero since U1 cannot equal 1.0, and thus, C1 cannot be - ! 0.0 in the Box-Muller method. - IF ( ( I == I_WaveTp ) ) WGNC = WGNC*( SQRT(2.0)/ABS(WGNC) ) - ELSE ! All other Omega - WGNC = BoxMuller ( InitInp%RNG%pRNG, InitInp%WaveNDAmp ) - ! This scaling of WGNC is used to ensure that the Box-Muller method is only providing a random phase, - ! not a magnitude change, at the frequency of the plane progressive wave. The SQRT(2.0) is used to - ! ensure that the time series WGN process has unit variance (i.e. sinusoidal with amplitude SQRT(2.0)). - ! - ! NOTE: the denominator here will never equal zero since U1 cannot equal 1.0, and thus, C1 cannot be - ! 0.0 in the Box-Muller method. - IF ( ( InitInp%WaveMod == 1 ) .AND. ( I == I_WaveTp ) ) WGNC = WGNC*( SQRT(2.0)/ABS(WGNC) ) - END IF - - - ! Compute the one-sided power spectral density of the wave spectrum per unit - ! time; zero-out the wave spectrum above the cut-off frequency: - - SELECT CASE ( InitInp%WaveMod ) ! Which incident wave kinematics model are we using? - - CASE ( 1, 10 ) ! Plane progressive (regular) wave; the wave spectrum is an impulse function centered on frequency component closest to WaveTp. - IF ( I == I_WaveTp ) THEN ! .TRUE. if we are at the Omega closest to WaveTp. - WaveS1Sdd = 0.5*(InitInp%WaveHs/2.0)*(InitInp%WaveHs/2.0)/InitOut%WaveDOmega - ELSE ! All other Omega - WaveS1Sdd = 0.0 - END IF - - CASE ( 2 ) ! JONSWAP/Pierson-Moskowitz spectrum (irregular) wave. - ! Zero-out the wave spectrum above the cut-off frequency. We must cut-off the frequency in order to - ! void nonphysical wave forces. Waves that have wavelengths much smaller than the platform diameter - ! (high frequency) do not contribute to the net force because regions of positive and negative - ! velocity/acceleration are experienced by the platform at the same time and cancel out. - ! - ! JASON: OTHER FREQUENCY CUT-OFF CONDITIONS ARE USED THROUGHOUT THE INDUSTRY. SHOULD YOU USE ONE OF - ! THEM INSTEAD? SEE, FOR EXAMPLE, MY E-MAIL EXCHANGES WITH PAUL SCLAVOUNOS DATED 5/26/2006 OR: - ! "GH Bladed Thoery Manual" OR: Trumars, Jenny M. V.; Tarp-Johansen, Niels Jacob; Krogh, Thomas; - ! "The Effect of Wave Modelling on Offshore Wind Turbine Fatigue Loads," 2005 Copenhagen Offshore - ! Wind Conference and Exhibition, 26-28 October 2005, Copenhagen, Denmark [CD-ROM]. - IF ( Omega < InitInp%WvLowCOff .OR. Omega > InitInp%WvHiCOff ) THEN ! .TRUE. if Omega is above or below the cut-off frequency - WaveS1Sdd = 0.0 - ELSE ! All other Omega - WaveS1Sdd = JONSWAP ( Omega, InitInp%WaveHs, InitInp%WaveTp, InitInp%WavePkShp ) - END IF - CASE ( 3 ) ! White-noise - IF ( Omega < InitInp%WvLowCOff .OR. Omega > InitInp%WvHiCOff ) THEN ! .TRUE. if Omega is above or below the cut-off frequency - WaveS1Sdd = 0.0 - ELSE - WaveS1Sdd = InitInp%WaveHs * InitInp%WaveHs / ( 8.0 * (InitInp%WvHiCOff - InitInp%WvLowCOff) ) - END IF - CASE ( 4 ) ! User-defined spectrum (irregular) wave. - IF ( Omega < InitInp%WvLowCOff .OR. Omega > InitInp%WvHiCOff ) THEN ! .TRUE. if Omega is above or below the cut-off frequency - WaveS1Sdd = 0.0 - ELSE - CALL UserWaveSpctrm ( Omega, InitInp%WaveDir, InitInp%DirRoot, WaveS1Sdd ) - END IF - - ENDSELECT - - - IF ( InitInp%WaveMod == 5 ) THEN ! Wave Elevation data read in - - ! Apply limits to the existing WaveElevC0 arrays if outside frequency range - IF ( Omega < InitInp%WvLowCOff .OR. Omega > InitInp%WvHiCOff ) THEN - InitOut%WaveElevC0(:,I) = 0.0_SiKi - ENDIF - - ELSE ! All other wave cases - - ! Compute the two-sided power spectral density of the wave spectrum per unit - ! time: - - WaveS2Sdd = 0.5*WaveS1Sdd - - - ! Compute the discrete Fourier transform of the instantaneous elevation of - ! incident waves at the WAMIT reference point: - tmpComplex = SQRTNStepWave2*WGNC*SQRT( TwoPi*WaveS2Sdd/REAL(InitInp%WaveDT,SiKi) ) - InitOut%WaveElevC0 (1,I) = REAL( tmpComplex) - InitOut%WaveElevC0 (2,I) = AIMAG(tmpComplex) - - ENDIF - - END DO ! I - The positive frequency components (including zero) of the discrete Fourier transforms - - !-------------------------------------------------------------------------------- - !=== Multi-Directional Waves === - !> ## Assign Wave directions - !! For the equal energy approach to the multi-directional waves, we need to use the random number generator to - !! select which direction each wave frequency is assigned to. We also require that the phase and amplitudes - !! assigned to each frequency are the same regardless of whether or not multiple directions are used, we must - !! first finish assigning all the amplitudes and phases before using the random number generator again. For this - !! reason, the above do loop is completed, the multiple wave directions are computed, and then we run through the - !! all wave frequencies again to set up the remaining pieces. If we did not do this, we would change the seed - !! used by the random number generator before selecting the next amplitude and phase pair. - !! - !! The wave directions are assigned in groups of _WaveNDir_ frequencies such that each frequency is assigned to - !! one of the _WaveNDir_ unique wave directions. Each wave direction is used only once within each group of - !! frequencies. - !! - !! When complete, we deallocate the _WvSpreadThetas_ array that was used to store the assigned directions. - - IF ( InitInp%WaveMultiDir .AND. InitInp%WaveNDir > 1 ) THEN ! Multi-directional waves in use - - - ! Allocate the index array for each group of frequencies. This array is used to randomize the directions - ! within each WaveNDir sized group of frequencies. This is a REAL array used to hold the random numbers. - ALLOCATE( WvSpreadThetaIdx(1:InitOut%WaveNDir), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvSpreadThetaIdx while assigning '// & - 'wave directions.',ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - ! Reset the K so that we can use it to count the frequency index. - ! It should be exactly NStepWave2 when done assigning directions. The the Omega = 0 has - ! no amplitude, but gets a direction anyhow (to simplify the calculation of WaveNDir). - K = 0 - - - ! Work through the frequencies in groups of directions. - DO I = 1,WvSpreadFreqPerDir - - ! Populate the array with random numbers - CALL UniformRandomNumbers(InitInp%RNG%pRNG, WvSpreadThetaIdx) - - DO J = 1, InitOut%WaveNDir - - ! Find the index lowest value in the WvSpreadThetaIdx array. This is the index to - ! use for this wave direction. - LastInd = MINLOC( WvSpreadThetaIdx, DIM=1 ) - - ! Assign the direction for this frequency piece to the LastInd value. - InitOut%WaveDirArr(K) = WvTheta( LastInd ) - - ! Now make that element in the WvSpreadThetaIdx really big so we don't pick it again - WvSpreadThetaIdx( LastInd ) = HUGE(1.0_SiKi) - - K = K + 1 ! Increment the frequency index - - ENDDO - ENDDO - ! Filling last value since it is not reached by the loop above - CALL UniformRandomNumbers(InitInp%RNG%pRNG, WvSpreadThetaIdx) - LastInd = MINLOC( WvSpreadThetaIdx, DIM=1 ) - InitOut%WaveDirArr(K) = WvTheta( LastInd ) - - ! Perform a quick sanity check. We should have assigned all wave frequencies a direction, so K should be - ! K = NStepWave2 (K is incrimented afterwards). - IF ( K /= (InitOut%NStepWave2 ) ) CALL SetErrStat(ErrID_Fatal, & - 'Something went wrong while assigning wave directions.',ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! We are done with the indexing array, so deallocate it - IF(ALLOCATED( WvSpreadThetaIdx )) DEALLOCATE( WvSpreadThetaIdx ) - - ! This had been allocated above (calculation section of equal energy portion of multidirectional waves). - ! Deallocate it here after we have completed all the calculations involving it. - IF(ALLOCATED( WvTheta )) DEALLOCATE( WvTheta ) - - ELSE ! Not really multi-directional waves - - ! Since we do not have multi-directional waves, we must set the wave direction array to the single wave heading. - InitOut%WaveDirArr = InitInp%WaveDir - ENDIF ! Multi-directional waves in use. - - - ! Set the CosWaveDir and SinWaveDir arrays - CosWaveDir=COS(D2R*InitOut%WaveDirArr) - SinWaveDir=SIN(D2R*InitOut%WaveDirArr) - - - !-------------------------------------------------------------------------------- - !> ## Phase shift the discrete Fourier transform of wave elevations at the WRP - !> This changes the phasing of all wave kinematics and loads to reflect the turbine's - !! location in the larger farm, in the case of FAST.Farm simulations, based on - !! specified PtfmLocationX and PtfmLocationY. - - IF (InitInp%WaveFieldMod == 2) THEN ! case 2: adjust wave phases based on turbine offsets from farm origin - - CALL WrScr ( ' Adjusting incident wave kinematics for turbine offset from array origin.' ) - - DO I = 0,InitOut%NStepWave2 - - tmpComplex = CMPLX( InitOut%WaveElevC0(1,I), InitOut%WaveElevC0(2,I)) - - ! some redundant calculations with later, but insignificant - Omega = I*InitOut%WaveDOmega - WaveNmbr = WaveNumber ( Omega, InitInp%Gravity, InitInp%WtrDpth ) - - ! apply the phase shift - tmpComplex = tmpComplex * EXP( -ImagNmbr*WaveNmbr*( InitInp%PtfmLocationX*CosWaveDir(I) + InitInp%PtfmLocationY*SinWaveDir(I) )) - - ! put shifted complex amplitudes back into the array for use in the remainder of this module and other modules (Waves2, WAMIT, WAMIT2) - InitOut%WaveElevC0 (1,I) = REAL( tmpComplex) - InitOut%WaveElevC0 (2,I) = AIMAG(tmpComplex) - - END DO - END IF - - - !-------------------------------------------------------------------------------- - !> ## Compute IFFTs - !> Compute the discrete Fourier transform of the instantaneous elevation of - !! incident waves at each desired point on the still water level plane - !! where it can be output: - - DO I = 0,InitOut%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transforms - - - ! Set tmpComplex to the Ith element of the WAveElevC0 array - - tmpComplex = CMPLX( InitOut%WaveElevC0(1,I), InitOut%WaveElevC0(2,I)) - - - ! Compute the frequency of this component and its imaginary value: - - Omega = I* InitOut%WaveDOmega - ImagOmega = ImagNmbr*Omega - - ! Compute the wavenumber: - - WaveNmbr = WaveNumber ( Omega, InitInp%Gravity, InitInp%WtrDpth ) - - - ! Compute the discrete Fourier transform of the incident wave kinematics - ! before applying stretching at the zi-coordinates for the WAMIT reference point, and all - ! points where are Morison loads will be calculated. - - DO J = 1,NWaveKin0Prime ! Loop through all points where the incident wave kinematics will be computed without stretching - - WaveElevxiPrime0 = EXP( -ImagNmbr*WaveNmbr*( InitInp%WaveKinxi(WaveKinPrimeMap(J))*CosWaveDir(I) + & - InitInp%WaveKinyi(WaveKinPrimeMap(J))*SinWaveDir(I) )) - - WaveDynPC0 (I,J) = InitOut%RhoXg*tmpComplex*WaveElevxiPrime0 * COSHNumOvrCOSHDen ( WaveNmbr, InitInp%WtrDpth, WaveKinzi0Prime(J) ) - - WaveVelC0Hxi (I,J) = CosWaveDir(I)*Omega*tmpComplex* WaveElevxiPrime0 * COSHNumOvrSINHDen ( WaveNmbr, InitInp%WtrDpth, WaveKinzi0Prime(J) ) - WaveVelC0Hyi (I,J) = SinWaveDir(I)*Omega*tmpComplex* WaveElevxiPrime0 * COSHNumOvrSINHDen ( WaveNmbr, InitInp%WtrDpth, WaveKinzi0Prime(J) ) - - WaveVelC0V (I,J) = ImagOmega*tmpComplex* WaveElevxiPrime0 * SINHNumOvrSINHDen ( WaveNmbr, InitInp%WtrDpth, WaveKinzi0Prime(J) ) - WaveAccC0Hxi (I,J) = ImagOmega* WaveVelC0Hxi (I,J) - - WaveAccC0Hyi (I,J) = ImagOmega* WaveVelC0Hyi (I,J) - WaveAccC0V (I,J) = ImagOmega* WaveVelC0V (I,J) - - - - - END DO ! J - All points where the incident wave kinematics will be computed without stretching - -!=================================== -! Wave stretching - ! DO J = 1,InitInp%NWaveKin - ! WaveElevxiPrime0 = EXP( -ImagNmbr*WaveNmbr*( InitInp%WaveKinxi(J)*CosWaveDir(I) + & - ! InitInp%WaveKinyi(J)*SinWaveDir(I) )) - !! Partial derivatives at zi = 0 - ! PWaveDynPC0BPz0 (I,J) = InitOut%RhoXg* tmpComplex*WaveElevxiPrime0*WaveNmbr*TANH ( WaveNmbr*InitInp%WtrDpth ) - ! PWaveVelC0HxiPz0(I,J) = CosWaveDir(I)*Omega*tmpComplex*WaveElevxiPrime0*WaveNmbr - ! PWaveVelC0HyiPz0(I,J) = SinWaveDir(I)*Omega*tmpComplex*WaveElevxiPrime0*WaveNmbr - ! PWaveVelC0VPz0 (I,J) = ImagOmega*tmpComplex*WaveElevxiPrime0*WaveNmbr*COTH ( WaveNmbr*InitInp%WtrDpth ) - ! PWaveAccC0HxiPz0(I,J) = ImagOmega*PWaveVelC0HxiPz0(I,J) - ! PWaveAccC0HyiPz0(I,J) = ImagOmega*PWaveVelC0HyiPz0(I,J) - ! PWaveAccC0VPz0 (I,J) = ImagOmega*PWaveVelC0VPz0 (I,J) - ! - ! - ! END DO ! J - All points where the incident wave kinematics will be computed without stretching -!=================================== - - END DO ! I - The positive frequency components (including zero) of the discrete Fourier transforms - - - - ! Calculate the array of simulation times at which the instantaneous - ! elevation of, velocity of, acceleration of, and loads associated with - ! the incident waves are to be determined: - - DO I = 0,InitOut%NStepWave ! Loop through all time steps - InitOut%WaveTime(I) = I*REAL(InitInp%WaveDT,SiKi) - END DO ! I - All time steps - - DO I = 0,InitOut%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transform - tmpComplexArr(I) = CMPLX(InitOut%WaveElevC0(1,I), InitOut%WaveElevC0(2,I)) - END DO - - ! Compute the inverse discrete Fourier transforms to find the time-domain - ! representations of the wave kinematics without stretcing: - - CALL InitFFT ( InitOut%NStepWave, FFT_Data, .TRUE., ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while initializing the FFT.',ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - ! We'll need the following for wave stretching once we implement it. - CALL ApplyFFT_cx ( InitOut%WaveElev0 (0:InitOut%NStepWave-1), tmpComplexArr (: ), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveElev0.',ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - DO J = 1,InitInp%NWaveElev ! Loop through all points where the incident wave elevations can be output - ! This subroutine call applies the FFT at the correct location. - CALL WaveElevTimeSeriesAtXY( InitInp%WaveElevxi(J), InitInp%WaveElevyi(J), InitOut%WaveElev(:,J), ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - END DO ! J - All points where the incident wave elevations can be output - - ! :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - !@mhall: hard-coding some additional wave elevation time series output for now - - !ALLOCATE ( InitOut%WaveElevMD (0:InitOut%NStepWave, WaveGrid_nx*WaveGrid_ny), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevMD.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - !DO J = 1,WaveGrid_ny !y = -60.0 + 20.0*J - ! DO K = 1,WaveGrid_nx !x = -60.0 + 20.0*K - ! - ! I = (J-1)*WaveGrid_nx + K ! index of actual node - ! - ! CALL WaveElevTimeSeriesAtXY( WaveGrid_x0 + WaveGrid_dx*(K-1), WaveGrid_y0 + WaveGrid_dy*(J-1), InitOut%WaveElevMD(:,I), ErrStatTmp, ErrMsgTmp ) - ! CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElevMD.',ErrStat,ErrMsg,'VariousWaves_Init') - ! IF ( ErrStat >= AbortErrLev ) THEN - ! CALL CleanUp() - ! RETURN - ! END IF - ! END DO - !END DO - - ! :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: - - - ! For creating animations of the sea surface, the WaveElevXY array is passed in with a series of x,y coordinates - ! (index 1). The second index corresponds to the number of points passed in. A two dimensional time series - ! is created with the first index corresponding to the timestep, and second index corresponding to the second - ! index of the WaveElevXY array. - IF ( ALLOCATED(InitInp%WaveElevXY)) THEN - ALLOCATE ( InitOut%WaveElevSeries (0:InitOut%NStepWave, 1:SIZE(InitInp%WaveElevXY, DIM=2)) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) THEN - CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevSeries.',ErrStat,ErrMsg,'VariousWaves_Init') - CALL CleanUp() - RETURN - END IF - ! Calculate the wave elevation at all points requested in the array WaveElevXY - DO J = 1,SIZE(InitInp%WaveElevXY, DIM=2) - ! This subroutine call applies the FFT at the correct location. - CALL WaveElevTimeSeriesAtXY( InitInp%WaveElevXY(1,J), InitInp%WaveElevXY(2,J), InitOut%WaveElevSeries(0:InitOut%NStepWave,J), ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - ENDDO - ENDIF - - - ! User requested data points -- Do all the FFT calls first, then return if something failed. - DO J = 1,NWaveKin0Prime ! Loop through all points where the incident wave kinematics will be computed without stretching - CALL ApplyFFT_cx ( WaveDynP0B (:,J), WaveDynPC0 (:,J), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveDynP0B.', ErrStat,ErrMsg,'VariousWaves_Init') - - CALL ApplyFFT_cx ( WaveVel0Hxi (:,J), WaveVelC0Hxi (:,J), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveVel0Hxi.', ErrStat,ErrMsg,'VariousWaves_Init') - - CALL ApplyFFT_cx ( WaveVel0Hyi (:,J), WaveVelC0Hyi (:,J), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveVel0Hyi.', ErrStat,ErrMsg,'VariousWaves_Init') - - CALL ApplyFFT_cx ( WaveVel0V (:,J), WaveVelC0V (:,J), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveVel0V.', ErrStat,ErrMsg,'VariousWaves_Init') - - CALL ApplyFFT_cx ( WaveAcc0Hxi (:,J), WaveAccC0Hxi (:,J), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0Hxi.', ErrStat,ErrMsg,'VariousWaves_Init') - - CALL ApplyFFT_cx ( WaveAcc0Hyi (:,J), WaveAccC0Hyi (:,J), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0Hyi.', ErrStat,ErrMsg,'VariousWaves_Init') - - CALL ApplyFFT_cx ( WaveAcc0V (:,J), WaveAccC0V (:,J), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0V.', ErrStat,ErrMsg,'VariousWaves_Init') - - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - END DO ! J - All points where the incident wave kinematics will be computed without stretching - -!=================================== - !DO J = 1,InitInp%NWaveKin ! Loop through all points where the incident wave kinematics will be computed without stretching - ! ! FFT's of the partial derivatives - ! CALL ApplyFFT_cx ( PWaveDynP0BPz0(:,J ), PWaveDynPC0BPz0(:,J ), FFT_Data, ErrStatTmp ) - ! CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveDynP0BPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - ! CALL ApplyFFT_cx ( PWaveVel0HxiPz0 (:,J ), PWaveVelC0HxiPz0( :,J ),FFT_Data, ErrStatTmp ) - ! CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveVel0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - ! CALL ApplyFFT_cx ( PWaveVel0HyiPz0 (:,J ), PWaveVelC0HyiPz0( :,J ),FFT_Data, ErrStatTmp ) - ! CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveVel0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - ! CALL ApplyFFT_cx ( PWaveVel0VPz0 (:,J ), PWaveVelC0VPz0 (:,J ), FFT_Data, ErrStatTmp ) - ! CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveVel0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - ! CALL ApplyFFT_cx ( PWaveAcc0HxiPz0 (:,J ), PWaveAccC0HxiPz0(:,J ),FFT_Data, ErrStatTmp ) - ! CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - ! CALL ApplyFFT_cx ( PWaveAcc0HyiPz0 (:,J ), PWaveAccC0HyiPz0(:,J ),FFT_Data, ErrStatTmp ) - ! CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - ! CALL ApplyFFT_cx ( PWaveAcc0VPz0 (:,J ), PWaveAccC0VPz0( :,J ), FFT_Data, ErrStatTmp ) - ! CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - ! - ! IF ( ErrStat >= AbortErrLev ) THEN - ! CALL CleanUp() - ! RETURN - ! END IF - ! - !END DO ! J - All points where the incident wave kinematics will be computed without stretching -!=================================== - - - CALL ExitFFT(FFT_Data, ErrStatTmp) - CALL SetErrStat(ErrStatTmp,'Error occured while cleaning up after the FFTs.', ErrStat,ErrMsg,'VariousWaves_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - - - - ! Add the current velocities to the wave velocities: - ! NOTE: Both the horizontal velocities and the partial derivative of the - ! horizontal velocities with respect to zi at zi = 0 are found here. - ! - ! NOTE: The current module must be called prior to the waves module. If that was not done, then we - ! don't have a current to add to the wave velocity. So, check if the current velocity components - ! exist. - - - ! If there is a current, we need to add that (the current module was called prior to calling this module - - IF(ALLOCATED(InitInp%CurrVxi)) THEN - - DO J = 1,NWaveKin0Prime ! Loop through all points where the incident wave kinematics will be computed without stretching - - WaveVel0Hxi (:,J) = WaveVel0Hxi (:,J) + InitInp%CurrVxi(WaveKinPrimeMap(J)) ! xi-direction - WaveVel0Hyi (:,J) = WaveVel0Hyi (:,J) + InitInp%CurrVyi(WaveKinPrimeMap(J)) ! yi-direction - - END DO ! J - All points where the incident wave kinematics will be computed without stretching - - !PWaveVel0HxiPz0(: ) = PWaveVel0HxiPz0(: ) + InitInp%PCurrVxiPz0 ! xi-direction - !PWaveVel0HyiPz0(: ) = PWaveVel0HyiPz0(: ) + InitInp%PCurrVyiPz0 ! yi-direction - - ENDIF - - - ! Apply stretching to obtain the wave kinematics, WaveDynP0, WaveVel0, and - ! WaveAcc0, at the desired locations from the wave kinematics at - ! alternative locations, WaveDynP0B, WaveVel0Hxi, WaveVel0Hyi, WaveVel0V, - ! WaveAcc0Hxi, WaveAcc0Hyi, WaveAcc0V, if the elevation of the point defined by - ! WaveKinzi(J) lies between the seabed and the instantaneous free - ! surface, else set WaveDynP0, WaveVel0, and WaveAcc0 to zero. This - ! depends on which incident wave kinematics stretching method is being - ! used: - - ! SELECT CASE ( InitInp%WaveStMod ) ! Which model are we using to extrapolate the incident wave kinematics to the instantaneous free surface? - - ! CASE ( 0 ) ! None=no stretching. - - - ! Since we have no stretching, the wave kinematics between the seabed and - ! the mean sea level are left unchanged; below the seabed or above the - ! mean sea level, the wave kinematics are zero: - - InitOut%PWaveDynP0(:,:) = 0.0 - InitOut%PWaveVel0 (:,:,:) = 0.0 - InitOut%PWaveAcc0 (:,:,:) = 0.0 - K = 1 - DO J = 1,InitInp%NWaveKin ! Loop through all points where the incident wave kinematics will be computed - - IF ( ( InitInp%WaveKinzi(J) < -InitInp%WtrDpth ) .OR. ( InitInp%WaveKinzi(J) > 0.0 ) ) THEN - ! .TRUE. if the elevation of the point defined by WaveKinzi(J) lies below the seabed or above mean sea level (exclusive) - ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinzi and WtrDpth have already been adjusted using MSL2SWL - - InitOut%WaveDynP(:,J ) = 0.0 - InitOut%WaveVel (:,J,:) = 0.0 - InitOut%WaveAcc (:,J,:) = 0.0 - - ELSE - ! The elevation of the point defined by WaveKinzi(J) must lie between the seabed and the mean sea level (inclusive) - - InitOut%WaveDynP(0:InitOut%NStepWave-1,J ) = WaveDynP0B( 0:InitOut%NStepWave-1,K) - InitOut%WaveVel (0:InitOut%NStepWave-1,J,1) = WaveVel0Hxi(0:InitOut%NStepWave-1,K) - InitOut%WaveVel (0:InitOut%NStepWave-1,J,2) = WaveVel0Hyi(0:InitOut%NStepWave-1,K) - InitOut%WaveVel (0:InitOut%NStepWave-1,J,3) = WaveVel0V( 0:InitOut%NStepWave-1,K) - InitOut%WaveAcc (0:InitOut%NStepWave-1,J,1) = WaveAcc0Hxi(0:InitOut%NStepWave-1,K) - InitOut%WaveAcc (0:InitOut%NStepWave-1,J,2) = WaveAcc0Hyi(0:InitOut%NStepWave-1,K) - InitOut%WaveAcc (0:InitOut%NStepWave-1,J,3) = WaveAcc0V( 0:InitOut%NStepWave-1,K) - K = K + 1 - END IF - - END DO ! J - All points where the incident wave kinematics will be computed - - ! CASE ( 1 ) ! Vertical stretching. - - - ! Vertical stretching says that the wave kinematics above the mean sea level - ! equal the wave kinematics at the mean sea level. The wave kinematics - ! below the mean sea level are left unchanged: - - - - - - ! CASE ( 2 ) ! Extrapolation stretching. - - - ! Extrapolation stretching uses a linear Taylor expansion of the wave - ! kinematics (and their partial derivatives with respect to z) at the mean - ! sea level to find the wave kinematics above the mean sea level. The - ! wave kinematics below the mean sea level are left unchanged: - - - - - - ! CASE ( 3 ) ! Wheeler stretching. - - - ! Wheeler stretching says that wave kinematics calculated using Airy theory - ! at the mean sea level should actually be applied at the instantaneous - ! free surface and that Airy wave kinematics computed at locations between - ! the seabed and the mean sea level should be shifted vertically to new - ! locations in proportion to their elevation above the seabed. - ! - ! Computing the wave kinematics with Wheeler stretching requires that first - ! say that the wave kinematics we computed at the elevations defined by - ! the WaveKinzi0Prime(:) array are actual applied at the elevations found - ! by stretching the elevations in the WaveKinzi0Prime(:) array using the - ! instantaneous wave elevation--these new elevations are stored in the - ! WaveKinzi0St(:) array. Next, we interpolate the wave kinematics - ! computed without stretching to the desired elevations (defined in the - ! WaveKinzi(:) array) using the WaveKinzi0St(:) array: - - - - - ! ENDSELECT - - ! Set the ending timestep to the same as the first timestep - InitOut%WaveDynP(InitOut%NStepWave,: ) = InitOut%WaveDynP(0,: ) - InitOut%WaveVel (InitOut%NStepWave,:,:) = InitOut%WaveVel (0,:,:) - InitOut%WaveAcc (InitOut%NStepWave,:,:) = InitOut%WaveAcc (0,:,:) - InitOut%PWaveDynP0(InitOut%NStepWave,: ) = InitOut%PWaveDynP0(0,: ) - InitOut%PWaveVel0 (InitOut%NStepWave,:,:) = InitOut%PWaveVel0 (0,:,:) - InitOut%PWaveAcc0 (InitOut%NStepWave,:,:) = InitOut%PWaveAcc0 (0,:,:) - InitOut%WaveElev0 (InitOut%NStepWave) = InitOut%WaveElev0 (0 ) - - - - CALL CleanUp ( ) - - -CONTAINS - - - SUBROUTINE WaveElevTimeSeriesAtXY(Xcoord,Ycoord, WaveElevSeriesAtXY, ErrStatLcl, ErrMsgLcl ) - - REAL(SiKi), INTENT(IN ) :: Xcoord - REAL(SiKi), INTENT(IN ) :: Ycoord - REAL(SiKi), INTENT( OUT) :: WaveElevSeriesAtXY(0:InitOut%NStepWave) - INTEGER(IntKi), INTENT( OUT) :: ErrStatLcl - INTEGER(IntKi) :: ErrStatLcl2 - CHARACTER(*), INTENT( OUT) :: ErrMsgLcl - - ! This is probably poor programming practice, but we will use I, Omega, WaveNmbr, and tmpComplexArr from the calling routine here. - - ErrStatLcl = ErrID_None - - ! Zero out the temporary array. - tmpComplexArr = CMPLX(0.0_SiKi,0.0_SiKi) - - ! Loop through the positive frequency components (including zero). - DO I = 0,InitOut%NStepWave2 - - Omega = I* InitOut%WaveDOmega - WaveNmbr = WaveNumber ( Omega, InitInp%Gravity, InitInp%WtrDpth ) - tmpComplexArr(I) = CMPLX( InitOut%WaveElevC0(1,I), InitOut%WaveElevC0(2,I)) * & - EXP( -ImagNmbr*WaveNmbr*( Xcoord*CosWaveDir(I)+ & - Ycoord*SinWaveDir(I) ) ) - ENDDO - - CALL ApplyFFT_cx ( WaveElevSeriesAtXY(0:InitOut%NStepWave-1), tmpComplexArr, FFT_Data, ErrStatLcl2 ) - CALL SetErrStat(ErrStatLcl2,'Error occured while applying the FFT to InitOut%WaveElevSeries.',ErrStatLcl,ErrMsgLcl,'WaveElevTimeSeriesAtXY') - - ! Append first datpoint as the last as aid for repeated wave data - WaveElevSeriesAtXY(InitOut%NStepWave) = WaveElevSeriesAtXY(0) - - END SUBROUTINE WaveElevTimeSeriesAtXY - - - - SUBROUTINE CleanUp( ) - - IF (ALLOCATED( WaveKinPrimeMap )) DEALLOCATE( WaveKinPrimeMap, STAT=ErrStatTmp) - IF (ALLOCATED( WaveKinzi0Prime )) DEALLOCATE( WaveKinzi0Prime, STAT=ErrStatTmp) - IF (ALLOCATED( WvSpreadCos2SArr )) DEALLOCATE( WvSpreadCos2SArr, STAT=ErrStatTmp) - IF (ALLOCATED( WvSpreadIntegral )) DEALLOCATE( WvSpreadIntegral, STAT=ErrStatTmp) - IF (ALLOCATED( WvSpreadThetas )) DEALLOCATE( WvSpreadThetas, STAT=ErrStatTmp) - IF (ALLOCATED( TmpWaveSeeds )) DEALLOCATE( TmpWaveSeeds, STAT=ErrStatTmp) - IF (ALLOCATED( GHWaveAcc )) DEALLOCATE( GHWaveAcc, STAT=ErrStatTmp) - IF (ALLOCATED( GHWaveDynP )) DEALLOCATE( GHWaveDynP, STAT=ErrStatTmp) - IF (ALLOCATED( GHWaveVel )) DEALLOCATE( GHWaveVel, STAT=ErrStatTmp) - IF (ALLOCATED( GHWvDpth )) DEALLOCATE( GHWvDpth, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveAcc0HxiPz0 )) DEALLOCATE( PWaveAcc0HxiPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveAcc0HyiPz0 )) DEALLOCATE( PWaveAcc0HyiPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveAcc0VPz0 )) DEALLOCATE( PWaveAcc0VPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveAccC0HxiPz0 )) DEALLOCATE( PWaveAccC0HxiPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveAccC0HyiPz0 )) DEALLOCATE( PWaveAccC0HyiPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveAccC0VPz0 )) DEALLOCATE( PWaveAccC0VPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveDynP0BPz0 )) DEALLOCATE( PWaveDynP0BPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveDynPC0BPz0 )) DEALLOCATE( PWaveDynPC0BPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveVel0HxiPz0 )) DEALLOCATE( PWaveVel0HxiPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveVel0HyiPz0 )) DEALLOCATE( PWaveVel0HyiPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveVel0VPz0 )) DEALLOCATE( PWaveVel0VPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveVelC0HxiPz0 )) DEALLOCATE( PWaveVelC0HxiPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveVelC0HyiPz0 )) DEALLOCATE( PWaveVelC0HyiPz0, STAT=ErrStatTmp) - !IF (ALLOCATED( PWaveVelC0VPz0 )) DEALLOCATE( PWaveVelC0VPz0, STAT=ErrStatTmp) - IF (ALLOCATED( WaveAcc0Hxi )) DEALLOCATE( WaveAcc0Hxi, STAT=ErrStatTmp) - IF (ALLOCATED( WaveAcc0Hyi )) DEALLOCATE( WaveAcc0Hyi, STAT=ErrStatTmp) - IF (ALLOCATED( WaveAcc0V )) DEALLOCATE( WaveAcc0V, STAT=ErrStatTmp) - IF (ALLOCATED( WaveAccC0Hxi )) DEALLOCATE( WaveAccC0Hxi, STAT=ErrStatTmp) - IF (ALLOCATED( WaveAccC0Hyi )) DEALLOCATE( WaveAccC0Hyi, STAT=ErrStatTmp) - IF (ALLOCATED( WaveAccC0V )) DEALLOCATE( WaveAccC0V, STAT=ErrStatTmp) - IF (ALLOCATED( WaveDynP0B )) DEALLOCATE( WaveDynP0B, STAT=ErrStatTmp) - IF (ALLOCATED( WaveDynPC0 )) DEALLOCATE( WaveDynPC0, STAT=ErrStatTmp) - ! IF (ALLOCATED( WaveElev0 )) DEALLOCATE( WaveElev0, STAT=ErrStatTmp) - IF (ALLOCATED( WaveElevC )) DEALLOCATE( WaveElevC, STAT=ErrStatTmp) - IF (ALLOCATED( WaveVel0Hxi )) DEALLOCATE( WaveVel0Hxi, STAT=ErrStatTmp) - IF (ALLOCATED( WaveVel0Hyi )) DEALLOCATE( WaveVel0Hyi, STAT=ErrStatTmp) - IF (ALLOCATED( WaveVel0V )) DEALLOCATE( WaveVel0V, STAT=ErrStatTmp) - IF (ALLOCATED( WaveVelC0Hxi )) DEALLOCATE( WaveVelC0Hxi, STAT=ErrStatTmp) - IF (ALLOCATED( WaveVelC0Hyi )) DEALLOCATE( WaveVelC0Hyi, STAT=ErrStatTmp) - IF (ALLOCATED( WaveVelC0V )) DEALLOCATE( WaveVelC0V, STAT=ErrStatTmp) - IF (ALLOCATED( WvSpreadThetaIdx )) DEALLOCATE( WvSpreadThetaIdx, STAT=ErrStatTmp) - IF (ALLOCATED( tmpComplexArr )) DEALLOCATE( tmpComplexArr, STAT=ErrStatTmp) - RETURN - - END SUBROUTINE CleanUp - - -END SUBROUTINE VariousWaves_Init - - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is called at the start of the simulation to perform initialization steps. -!! The parameters are set here and not changed during the simulation. -!! The initial states and initial guess for the input are defined. -SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) -!.................................................................................................................................. - - TYPE(Waves_InitInputType), INTENT(INOUT) :: InitInp !< Input data for initialization routine !NOTE: We are making this INOUT so that we can overwrite the WaveKinzi with zeros for wave stretching calculations - TYPE(Waves_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined - TYPE(Waves_ParameterType), INTENT( OUT) :: p !< Parameters - TYPE(Waves_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states - TYPE(Waves_DiscreteStateType), INTENT( OUT) :: xd !< Initial discrete states - TYPE(Waves_ConstraintStateType), INTENT( OUT) :: z !< Initial guess of the constraint states - TYPE(Waves_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states - TYPE(Waves_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; - !! only the output mesh is initialized) - TYPE(Waves_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables - REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: the rate that - !! (1) Waves_UpdateStates() is called in loose coupling & - !! (2) Waves_UpdateDiscState() is called in tight coupling. - !! Input is the suggested time from the glue code; - !! Output is the actual coupling interval that will be used - !! by the glue code. - TYPE(Waves_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - - ! Local Variables: - INTEGER(IntKi) :: ErrStatTmp ! Temporary error status for processing - CHARACTER(ErrMsgLen) :: ErrMsgTmp ! Temporary error message for procesing -! REAL(ReKi), ALLOCATABLE :: tmpWaveKinzi(:) - -! TYPE(FFT_DataType) :: FFT_Data ! the instance of the FFT module we're using - - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrStatTmp = ErrID_None - ErrMsg = "" - ErrMsgTmp = "" - - - ! Initialize the NWTC Subroutine Library - - CALL NWTC_Init( ) - - ! Initialize the pRNG - CALL RandNum_Init(InitInp%RNG, ErrStat, ErrMsg) - IF ( ErrStat >= AbortErrLev ) RETURN - - ! Define initialization-routine output here: - - !InitOut%WriteOutputHdr = (/ 'Time', 'Column2' /) - !InitOut%WriteOutputUnt = (/ '(s)', '(-)' /) - - InitOut%RhoXg = InitInp%WtrDens*InitInp%Gravity - - - ! Set the minimum and maximum wave directions to WaveDir. These are reset in the - ! subroutine calls as necessary. - InitOut%WaveDirMin = InitInp%WaveDir - InitOut%WaveDirMax = InitInp%WaveDir - InitOut%WaveDir = InitInp%WaveDir ! Not sure why there are so many copies of this variable, but InitOut%WaveDir must be set, and isn't in all cases otherwise. - - - ! Initialize the variables associated with the incident wave: - - SELECT CASE ( InitInp%WaveMod ) ! Which incident wave kinematics model are we using? - - - CASE ( 0 ) ! None=still water. - - CALL StillWaterWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') - - !@mhall: :::: ensure all arrays needed for the wave grid to MoorDyn are allocated in the WaveMod=0 case too :::: - !ALLOCATE ( InitOut%WaveElevMD (0:InitOut%NStepWave, WaveGrid_nx*WaveGrid_ny), STAT=ErrStatTmp ) - !InitOut%WaveElevMD = 0.0_DbKi ! zero it - ! ::::: end ::::: - - IF ( ErrStat >= AbortErrLev ) RETURN - - - CASE ( 1, 2, 3, 4, 10 ) ! 1, 10: Plane progressive (regular) wave, 2: JONSWAP/Pierson-Moskowitz spectrum (irregular) wave, 3: white-noise, or 4: user-defined spectrum (irregular) wave. - - ! To correctly perform stretching we need wave kinematics at (xi,yi,0) for all nodes where kinematics are computed. - ! This could all be done with the same call to VariousWaves_Init, but then we would have to allocate double the number of temporary data - ! structures for this extra set of locations. - ! INSTEAD, to save memory (at the expense of time) we are going to call VariousWaves_Init, twice! Once for the (xi,yi,zi) locations - ! and then again for the (xi,yi,0) locations. - ! To accomplish this, we need to schuffle some of our data structures or create temporary copies - - ! ! Allocate the temporary storage array for the WvKinxi - !ALLOCATE ( tmpWaveKinzi(InitInp%NWaveKin), STAT = ErrStatTmp ) - !IF ( ErrStatTmp /= ErrID_None ) THEN - ! CALL SetErrStat( ErrID_Fatal,'Error allocating space for tmpWaveKinzi array.',ErrStat,ErrMsg,'Waves_Init') - ! RETURN - !END IF - !!DO I = 1,InitInp%NWaveKin - !! tmpWaveKinzi(I) = InitInp%WaveKinzi(I) - !! InitInp%WaveKinzi(I) = 0.0_ReKi ! Force all zi coordinates to 0.0 for this version of the Waves initialization - !! END DO - ! tmpWaveKinzi = InitInp%WaveKinzi - ! InitInp%WaveKinzi = 0.0_ReKi ! Force all zi coordinates to 0.0 for this version of the Waves initialization - ! - !CALL VariousWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) - ! CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') - ! IF ( ErrStat >= AbortErrLev ) RETURN - ! - !ALLOCATE ( InitOut%WaveDynP0 (0:InitOut%NStepWave,InitInp%NWaveKin ), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP0.', ErrStat,ErrMsg,'Waves_Init') - ! - !ALLOCATE ( InitOut%WaveVel0 (0:InitOut%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel0.', ErrStat,ErrMsg,'Waves_Init') - ! - !ALLOCATE ( InitOut%WaveAcc0 (0:InitOut%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc0.', ErrStat,ErrMsg,'Waves_Init') - ! - !IF ( ErrStat >= AbortErrLev ) RETURN - ! - ! ! Copy the init output arrays into the MSL versions - !InitOut%WaveDynP0 = InitOut%WaveDynP - !InitOut%WaveAcc0 = InitOut%WaveAcc - !InitOut%WaveVel0 = InitOut%WaveVel - ! - ! ! Reset the zi locations - !InitInp%WaveKinzi = tmpWaveKinzi - ! - ! ! Deallocate data which will be allocated again within the Init routine - !DEALLOCATE( InitOut%WaveDynP ) - !DEALLOCATE( InitOut%WaveAcc ) - !DEALLOCATE( InitOut%WaveVel ) - !DEALLOCATE( InitOut%WaveElevC0) - !DEALLOCATE( InitOut%WaveDirArr) - !DEALLOCATE( InitOut%WaveElev ) - !DEALLOCATE( InitOut%WaveTime ) - !DEALLOCATE( InitOut%NodeInWater ) - - ! Now call the init with all the zi locations for the Morrison member nodes - CALL VariousWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') - IF ( ErrStat >= AbortErrLev ) RETURN - - - CASE ( 5 ) ! User-supplied wave elevation time history; HD derives full wave kinematics from this elevation time series data. - - ! Get the wave frequency information from the file (by FFT of the elevation) - CALL UserWaveElevations_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') - IF ( ErrStat >= AbortErrLev ) RETURN - - ! Now call VariousWaves to continue using the wave elevation and derived frequency information from the file - CALL VariousWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') - IF ( ErrStat >= AbortErrLev ) RETURN - - - CASE ( 6 ) ! User-supplied wave kinematics data. - - CALL UserWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') - IF ( ErrStat >= AbortErrLev ) RETURN - ENDSELECT - - - u%DummyInput = 0.0 - p%DT = Interval - p%WaveMultiDir = InitOut%WaveMultiDir ! Flag to indicate multidirectional waves - x%DummyContState = 0.0 - xd%DummyDiscState = 0.0 - z%DummyConstrState = 0.0 - OtherState%DummyOtherState = 0 - m%DummyMiscVar = 0 - y%DummyOutput = 0.0 - - - -END SUBROUTINE Waves_Init - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is called at the end of the simulation. -SUBROUTINE Waves_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - TYPE(Waves_InputType), INTENT(INOUT) :: u !< System inputs - TYPE(Waves_ParameterType), INTENT(INOUT) :: p !< Parameters - TYPE(Waves_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states - TYPE(Waves_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states - TYPE(Waves_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states - TYPE(Waves_OtherStateType), INTENT(INOUT) :: OtherState !< Other states - TYPE(Waves_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(Waves_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - ! Local error handling variables - INTEGER(IntKi) :: ErrStatTmp - CHARACTER(ErrMsgLen) :: ErrMsgTmp - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_End' - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - - ! Place any last minute operations or calculations here: - - - ! Close files here: - - - - ! Destroy the input data: - - CALL Waves_DestroyInput( u, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - - - ! Destroy the parameter data: - - CALL Waves_DestroyParam( p, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - - - ! Destroy the state data: - - CALL Waves_DestroyContState( x, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyDiscState( xd, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyConstrState( z, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - CALL Waves_DestroyOtherState( OtherState, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - - CALL Waves_DestroyMisc( m, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - - - ! Destroy the output data: - - CALL Waves_DestroyOutput( y, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) - - - - -END SUBROUTINE Waves_End -!---------------------------------------------------------------------------------------------------------------------------------- - -!======================================================================= -FUNCTION WheelerStretching ( zOrzPrime, Zeta, h, ForwardOrBackward, ErrStat, ErrMsg ) - - - ! This FUNCTION applies the principle of Wheeler stretching to - ! (1-Forward) find the elevation where the wave kinematics are to - ! be applied using Wheeler stretching or (2-Backword) find the - ! elevation where the wave kinematics are computed before applying - ! Wheeler stretching. Wheeler stretching says that wave - ! kinematics calculated using Airy theory at the mean sea level - ! should actually be applied at the instantaneous free surface and - ! that Airy wave kinematics computed at locations between the - ! seabed and the mean sea level should be shifted vertically to - ! new locations in proportion to their elevation above the seabed - ! as follows: - ! - ! Forward: z(zPrime,Zeta,h) = ( 1 + Zeta/h )*zPrime + Zeta - ! - ! or equivalently: - ! - ! Backword: zPrime(z,Zeta,h) = ( z - Zeta )/( 1 + Zeta/h ) - ! - ! where, - ! Zeta = instantaneous elevation of incident waves - ! h = water depth - ! z = elevations where the wave kinematics are to be - ! applied using Wheeler stretching - ! zPrime = elevations where the wave kinematics are computed - ! before applying Wheeler stretching - - - - IMPLICIT NONE - - - ! Passed Variables: - - REAL(SiKi), INTENT(IN ) :: h ! Water depth (meters) - REAL(SiKi) :: WheelerStretching ! This function = zPrime [forward] or z [backward] (meters) - REAL(SiKi), INTENT(IN ) :: Zeta ! Instantaneous elevation of incident waves (meters) - REAL(SiKi), INTENT(IN ) :: zOrzPrime ! Elevations where the wave kinematics are to be applied using Wheeler stretching, z, [forward] or elevations where the wave kinematics are computed before applying Wheeler stretching, zPrime, [backward] (meters) - CHARACTER(1), INTENT(IN ) :: ForwardOrBackWard ! A string holding the direction ('F'=Forward, 'B'=Backward) for applying Wheeler stretching. - INTEGER(IntKi), INTENT(OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - ! Apply Wheeler stretching, depending on the direction: - - SELECT CASE ( ForwardOrBackWard ) - - CASE ( 'F' ) ! Forward - - WheelerStretching = ( 1.0 + Zeta/h )*zOrzPrime + Zeta - - - CASE ( 'B' ) ! Backward - - WheelerStretching = ( zOrzPrime - Zeta )/( 1.0 + Zeta/h ) - - - CASE DEFAULT - - WheelerStretching = 0.0_SiKi - - ErrMsg = 'The last argument in routine WheelerStretching() must be ''F'' or ''B''.' - ErrStat = ErrID_Fatal - RETURN - - - END SELECT - - - - RETURN -END FUNCTION WheelerStretching - -END MODULE Waves -!********************************************************************************************************************************** diff --git a/modules/hydrodyn/src/Waves2.txt b/modules/hydrodyn/src/Waves2.txt deleted file mode 100644 index 71aa3c56ad..0000000000 --- a/modules/hydrodyn/src/Waves2.txt +++ /dev/null @@ -1,154 +0,0 @@ -################################################################################################################################### -# Registry for Waves2 in the FAST Modularization Framework -# This Registry file is used to create MODULE Waves2_Types which contains all of the user-defined types needed in Waves2. -# It also contains copy, destroy, pack, and unpack routines associated with each defined data types. -# See NWTC Programmer's Handbook for further information on the format/contents of this file. -# -# Entries are of the form -# -# -# Use ^ as a shortcut for the value in the same column from the previous line. -################################################################################################################################### - -# ...... Include files (definitions from NWTC Library) ............................................................................ -# make sure that the file name does not have any trailing white spaces! -include Registry_NWTC_Library.txt - -param Waves2/Waves2 unused INTEGER MaxWaves2Outputs - 9 - "" - -# ..... Initialization data ....................................................................................................... -# Define inputs that the initialization routine may need here: -# e.g., the name of the input file, the file root name,etc. -# -typedef Waves2/Waves2 InitInputType INTEGER UnSum - - - "The unit number for the HydroDyn summary file" - - -typedef ^ ^ ReKi Gravity - - - "Gravitational acceleration" (m/s^2) -typedef ^ ^ ReKi WtrDens - - - "Water density" (kg/m^3) -typedef ^ ^ SiKi WtrDpth - - - "Water depth" (meters) - -typedef ^ ^ INTEGER NStepWave - - - "Total number of frequency components = total number of time steps in the incident wave" - -typedef ^ ^ INTEGER NStepWave2 - - - "NStepWave / 2" - -typedef ^ ^ SiKi WaveDOmega - - - "Frequency step for incident wave calculations" (rad/s) - -typedef ^ ^ INTEGER WaveStMod - - - "Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching}" - - -typedef ^ ^ LOGICAL WaveMultiDir - - - "Indicates the waves are multidirectional -- set by HydroDyn_Input" - -typedef ^ ^ SiKi WaveDirArr {:} - - "Wave direction array. Each frequency has a unique direction of WaveNDir > 1" (degrees) -typedef ^ ^ SiKi WaveElevC0 {:}{:} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part" (meters) -typedef ^ ^ SiKi WaveTime {:} - - "Simulation times at which the instantaneous second order loads associated with the incident waves are determined" sec - -typedef ^ ^ INTEGER NWaveElev - - - "Number of points where the incident wave elevations can be output" - -typedef ^ ^ SiKi WaveElevxi {:} - - "xi-coordinates for points where the incident wave elevations can be output" (meters) -typedef ^ ^ SiKi WaveElevyi {:} - - "yi-coordinates for points where the incident wave elevations can be output" (meters) -typedef ^ ^ SiKi WaveElevXY {:}{:} - - "Supplied by Driver: X-Y locations for WaveElevation output (for visualization). Index 1 corresponds to X or Y coordinate. Index 2 corresponds to point number." - - -typedef ^ ^ INTEGER NWaveKin - - - "Number of points where the incident wave kinematics will be computed" - -typedef ^ ^ SiKi WaveKinxi {:} - - "xi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) -typedef ^ ^ SiKi WaveKinyi {:} - - "yi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) -typedef ^ ^ SiKi WaveKinzi {:} - - "zi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) - -typedef ^ ^ LOGICAL WvDiffQTFF - - - "Full difference QTF second order forces flag" (-) -typedef ^ ^ LOGICAL WvSumQTFF - - - "Full sum QTF second order forces flag" (-) - -typedef ^ ^ SiKi WvLowCOffD - - - "Minimum frequency used in the difference methods [Ignored if all difference methods = 0]" (rad/s) -typedef ^ ^ SiKi WvHiCOffD - - - "Maximum frequency used in the difference methods [Ignored if all difference methods = 0]" (rad/s) -typedef ^ ^ SiKi WvLowCOffS - - - "Minimum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) -typedef ^ ^ SiKi WvHiCOffS - - - "Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) - -typedef ^ ^ CHARACTER(ChanLen) OutList {18} - - "This should really be dimensioned with MaxOutPts" - -typedef ^ ^ LOGICAL OutAll - - - "" - -typedef ^ ^ INTEGER NumOuts - - - "" - -typedef ^ ^ INTEGER NumOutAll - - - "" - - - -# Define outputs from the initialization routine here: -# -typedef ^ InitOutputType CHARACTER(ChanLen) WriteOutputHdr {:} - - "" - -typedef ^ ^ CHARACTER(ChanLen) WriteOutputUnt {:} - - "" - -typedef ^ ^ SiKi WaveElevSeries2 {:}{:} - - "" (m) -# "Instantaneous elevation time-series at each of the points given by WaveElevXY. Used for making movies of the waves. First index is the timestep. Second index is XY point number corresponding to second index of WaveElevXY." (m) -typedef ^ ^ SiKi WaveAcc2D {:}{:}{:} - - "" (m/s^2) -# "Instantaneous 2nd-order difference frequency correction for the acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) -typedef ^ ^ SiKi WaveDynP2D {:}{:} - - "" (N/m^2) -# "Instantaneous 2nd-order difference frequency correction for the dynamic pressure of incident waves , at each of the NWaveKin points where the incident wave kinematics will be computed" (N/m^2) -typedef ^ ^ SiKi WaveAcc2S {:}{:}{:} - - "" (m/s^2) -# "Instantaneous 2nd-order sum frequency correction for the acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) -typedef ^ ^ SiKi WaveDynP2S {:}{:} - - "" (N/m^2) -# "Instantaneous 2nd-order sum frequency correction for the dynamic pressure of incident waves , at each of the NWaveKin points where the incident wave kinematics will be computed" (N/m^2) -typedef ^ ^ SiKi WaveVel2D {:}{:}{:} - - "" (m/s) -# "Instantaneous 2nd-order difference frequency correction for the velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) -typedef ^ ^ SiKi WaveVel2S {:}{:}{:} - - "" (m/s) -# "Instantaneous 2nd-order sum frequency correction for the velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) -typedef ^ ^ SiKi WaveAcc2D0 {:}{:}{:} - - "" (m/s^2) -# "Instantaneous 2nd-order difference frequency correction for the acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), for each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) -typedef ^ ^ SiKi WaveDynP2D0 {:}{:} - - "" (N/m^2) -# "Instantaneous 2nd-order difference frequency correction for the dynamic pressure of incident waves , at the location (xi,yi,0), for each of the NWaveKin points where the incident wave kinematics will be computed" (N/m^2) -typedef ^ ^ SiKi WaveAcc2S0 {:}{:}{:} - - "" (m/s^2) -# "Instantaneous 2nd-order sum frequency correction for the acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), for each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) -typedef ^ ^ SiKi WaveDynP2S0 {:}{:} - - "" (N/m^2) -# "Instantaneous 2nd-order sum frequency correction for the dynamic pressure of incident waves , at the location (xi,yi,0), for each of the NWaveKin points where the incident wave kinematics will be computed" (N/m^2) -typedef ^ ^ SiKi WaveVel2D0 {:}{:}{:} - - "" (m/s) -# "Instantaneous 2nd-order difference frequency correction for the velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), for each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) -typedef ^ ^ SiKi WaveVel2S0 {:}{:}{:} - - "" (m/s) -# "Instantaneous 2nd-order sum frequency correction for the velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), for each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) - - - - -# ..... States .................................................................................................................... -# Define continuous (differentiable) states here: -typedef ^ ContinuousStateType SiKi DummyContState - - - "Remove this variable if you have continuous states" - - - -# Define discrete (nondifferentiable) states here: -typedef ^ DiscreteStateType SiKi DummyDiscState - - - "Remove this variable if you have discrete states" - - - -# Define constraint states here: -typedef ^ ConstraintStateType SiKi DummyConstrState - - - "Remove this variable if you have constraint states" - - - -# Define any other states, including integer or logical states here: -typedef ^ OtherStateType IntKi DummyOtherState - - - "Remove this variable if you have other states" - - - -# ..... Misc/Optimization variables................................................................................................. -# Define any data that are used only for efficiency purposes (these variables are not associated with time): -# e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc. -typedef ^ MiscVarType INTEGER LastIndWave - - - "Index for last interpolation step of 2nd order forces" - - - -# ..... Parameters ................................................................................................................ -# Define parameters here: -# Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states: -typedef ^ ParameterType DbKi DT - - - "Time step for continuous state integration & discrete state update" seconds -typedef ^ ^ LOGICAL WvDiffQTFF - - - "Full difference QTF second order forces flag" (-) -typedef ^ ^ LOGICAL WvSumQTFF - - - "Full sum QTF second order forces flag" (-) -typedef ^ ^ INTEGER NWaveElev - - - "Number of points where the incident wave elevations can be output" - -typedef ^ ^ INTEGER NStepWave - - - "Total number of frequency components = total number of time steps in the incident wave" - -typedef ^ ^ INTEGER NStepWave2 - - - "NStepWave / 2" - -typedef ^ ^ SiKi WaveTime {:} - - "Simulation times at which the instantaneous second order loads associated with the incident waves are determined" sec -typedef ^ ^ SiKi WaveElev2 {:}{:} - - "Instantaneous elevation time-series of incident waves at each of the NWaveElev points where the incident wave elevations can be output" (meters) -#typedef ^ ^ SiKi WaveElev2D {:}{:} - - "" (m) -# "Instantaneous 2nd-order difference frequency correction for the elevation time-series of incident waves at each of the NWaveElev points where the incident wave elevations can be output" (meters) -#typedef ^ ^ SiKi WaveElev2S {:}{:} - - "" (m) -# "Instantaneous 2nd-order sum frequency correction for the elevation time-series of incident waves at each of the NWaveElev points where the incident wave elevations can be output" (meters) -typedef ^ ^ OutParmType OutParam {:} - - "" - -typedef ^ ^ INTEGER NumOuts - - - "" - -typedef ^ ^ INTEGER NumOutAll - - - "" - -typedef ^ ^ CHARACTER(20) OutFmt - - - "" - -typedef ^ ^ CHARACTER(20) OutSFmt - - - "" - -typedef ^ ^ CHARACTER(ChanLen) Delim - - - "" - -typedef ^ ^ INTEGER UnOutFile - - - "" - - - - - - -# ..... Inputs .................................................................................................................... -# Define inputs that are contained on the mesh here: -typedef ^ InputType SiKi DummyInput - - - "Remove this variable if you have input data" - - - -# ..... Outputs ................................................................................................................... -# Define outputs that are contained on the mesh here: -typedef ^ OutputType ReKi WriteOutput {:} - - "" - diff --git a/modules/hydrodyn/src/Waves2_Output.f90 b/modules/hydrodyn/src/Waves2_Output.f90 deleted file mode 100644 index 0faee486ee..0000000000 --- a/modules/hydrodyn/src/Waves2_Output.f90 +++ /dev/null @@ -1,575 +0,0 @@ -!********************************************************************************************************************************** -! LICENSING -! Copyright (C) 2013-2015 National Renewable Energy Laboratory -! -! This file is part of HydroDyn. -! -! Licensed under the Apache License, Version 2.0 (the "License"); -! you may not use this file except in compliance with the License. -! You may obtain a copy of the License at -! -! http://www.apache.org/licenses/LICENSE-2.0 -! -! Unless required by applicable law or agreed to in writing, software -! distributed under the License is distributed on an "AS IS" BASIS, -! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -! See the License for the specific language governing permissions and -! limitations under the License. -! -!********************************************************************************************************************************** -MODULE Waves2_Output - - ! This MODULE stores variables used for output. - - USE NWTC_Library - USE Waves2_Types - !USE HydroDyn_Output_Types -! USE Waves - IMPLICIT NONE - - PRIVATE - - ! Indices for computing output channels: - ! NOTES: - ! (1) These parameters are in the order stored in "OutListParameters.xlsx" - ! (2) Array AllOuts() must be dimensioned to the value of the largest output parameter - - - ! Waves2 Body Forces: - - INTEGER(IntKi), PARAMETER :: Wave1Elv2 = 1 - INTEGER(IntKi), PARAMETER :: Wave2Elv2 = 2 - INTEGER(IntKi), PARAMETER :: Wave3Elv2 = 3 - INTEGER(IntKi), PARAMETER :: Wave4Elv2 = 4 - INTEGER(IntKi), PARAMETER :: Wave5Elv2 = 5 - INTEGER(IntKi), PARAMETER :: Wave6Elv2 = 6 - INTEGER(IntKi), PARAMETER :: Wave7Elv2 = 7 - INTEGER(IntKi), PARAMETER :: Wave8Elv2 = 8 - INTEGER(IntKi), PARAMETER :: Wave9Elv2 = 9 - - - -!End of code generated by Matlab script - - - INTEGER(IntKi), PARAMETER :: WaveElevi2(9) = (/Wave1Elv2,Wave2Elv2,Wave3Elv2,Wave4Elv2,Wave5Elv2,Wave6Elv2,Wave7Elv2,Wave8Elv2,Wave9Elv2/) - - - -! This code was generated by hand. - CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(9) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "WAVE1ELV2","WAVE2ELV2","WAVE3ELV2","WAVE4ELV2","WAVE5ELV2","WAVE6ELV2","WAVE7ELV2","WAVE8ELV2","WAVE9ELV2"/) - INTEGER(IntKi), PARAMETER :: ParamIndxAry(9) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) - Wave1Elv2 , Wave2Elv2 , Wave3Elv2 , Wave4Elv2 , Wave5Elv2 , Wave6Elv2 , Wave7Elv2 , Wave8Elv2 , Wave9Elv2 /) - CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(9) = (/ & ! This lists the units corresponding to the allowed parameters - "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) "/) - - - REAL(ReKi) :: AllOuts(MaxWaves2Outputs) ! Array of all possible outputs - - ! ..... Public Subroutines ................................................................................................... - PUBLIC :: Wvs2OUT_MapOutputs - PUBLIC :: Wvs2OUT_WriteOutputNames - PUBLIC :: Wvs2OUT_WriteOutputUnits - PUBLIC :: Wvs2OUT_WriteOutputs - PUBLIC :: Wvs2OUT_Init - PUBLIC :: Wvs2OUT_DestroyParam - PUBLIC :: GetWaves2Channels - -CONTAINS - - - - -!==================================================================================================== -SUBROUTINE Wvs2OUT_MapOutputs( CurrentTime, y, NWaveElev, WaveElev2, AllOuts, ErrStat, ErrMsg ) -! This subroutine writes the data stored in the y variable to the correct indexed postions in WriteOutput -! This is called by Waves2_CalcOutput() at each time step. -!---------------------------------------------------------------------------------------------------- - REAL(DbKi), INTENT( IN ) :: CurrentTime ! Current simulation time in seconds - TYPE(Waves2_OutputType), INTENT( INOUT ) :: y ! Waves2's output data - INTEGER, INTENT( IN ) :: NWaveElev ! Number of wave elevation locations to output - REAL(SiKi), INTENT( IN ) :: WaveElev2(:) ! Instantaneous second order correction to the elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) - REAL(ReKi), INTENT( OUT ) :: AllOuts(MaxWaves2Outputs) - INTEGER(IntKi), INTENT( OUT ) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - INTEGER :: I - - ErrStat = ErrID_None - ErrMsg = "" - - - ! TODO: use y%mesh for the forces instead of individual parameters - - DO I=1,NWaveElev - AllOuts(WaveElevi2(I)) = WaveElev2(I) - END DO - - - -END SUBROUTINE Wvs2OUT_MapOutputs - - -!==================================================================================================== - -SUBROUTINE Wvs2OUT_WriteOutputNames( UnOutFile, p, ErrStat, ErrMsg ) - - INTEGER, INTENT( IN ) :: UnOutFile ! file unit for the output file - TYPE(Waves2_ParameterType), INTENT( IN ) :: p ! Waves2 module's parameter data - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - CHARACTER(200) :: Frmt ! a string to hold a format statement - INTEGER :: I ! Generic loop counter - - ErrStat = ErrID_None - ErrMsg = "" - - Frmt = '(A8,'//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' - - WRITE(UnOutFile,Frmt) 'Time', ( p%Delim, TRIM( p%OutParam(I)%Name ), I=1,p%NumOuts ) - -END SUBROUTINE Wvs2OUT_WriteOutputNames - -!==================================================================================================== - - -SUBROUTINE Wvs2OUT_WriteOutputUnits( UnOutFile, p, ErrStat, ErrMsg ) - - INTEGER, INTENT( IN ) :: UnOutFile ! file unit for the output file - TYPE(Waves2_ParameterType), INTENT( IN ) :: p ! Waves2 module's parameter data - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - CHARACTER(200) :: Frmt ! a string to hold a format statement - INTEGER :: I ! Generic loop counter - - ErrStat = ErrID_None - ErrMsg = "" - - Frmt = '(A8,'//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' - - WRITE(UnOutFile,Frmt) '(sec)', ( p%Delim, TRIM( p%OutParam(I)%Units ), I=1,p%NumOuts ) - -END SUBROUTINE Wvs2OUT_WriteOutputUnits - -!==================================================================================================== -SUBROUTINE Wvs2OUT_WriteOutputs( UnOutFile, Time, y, p, ErrStat, ErrMsg ) -! This subroutine writes the data stored in WriteOutputs (and indexed in OutParam) to the file -! opened in Wvs2OUT_Init() -!---------------------------------------------------------------------------------------------------- - - ! Passed variables - INTEGER , INTENT( IN ) :: UnOutFile - REAL(DbKi), INTENT( IN ) :: Time ! Time for this output - TYPE(Waves2_OutputType), INTENT( INOUT ) :: y ! Waves2's output data - TYPE(Waves2_ParameterType),INTENT( IN ) :: p ! Waves2 parameter data - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables -! REAL(ReKi) :: OutData (0:p%NumOuts) ! an output array - INTEGER :: I ! Generic loop counter - CHARACTER(200) :: Frmt ! a string to hold a format statement - - - - ! Initialize ErrStat and determine if it makes any sense to write output - - IF ( .NOT. ALLOCATED( p%OutParam ) .OR. UnOutFile < 0 ) THEN - ErrMsg = ' No Waves2 outputs written. The OutParam array must be allocated and there must be a valid output file identifier before we can write outputs.' - ErrStat = ErrID_Warn - RETURN - ELSE - ErrStat = ErrID_None - ErrMsg = '' - END IF - - - - - - ! Write the output parameters to the file - - Frmt = '(F8.3,'//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutFmt )//'))' - !Frmt = '('//TRIM( p%OutFmt )//','//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutFmt )//'))' - - WRITE(UnOutFile,Frmt) Time, ( p%Delim, y%WriteOutput(I), I=1,p%NumOuts ) - - - RETURN - - -END SUBROUTINE Wvs2OUT_WriteOutputs - - - -!==================================================================================================== -SUBROUTINE Wvs2OUT_Init( InitInp, y, p, InitOut, ErrStat, ErrMsg ) -! This subroutine initialized the output module, checking if the output parameter list (OutList) -! contains valid names, and opening the output file if there are any requested outputs -!---------------------------------------------------------------------------------------------------- - - - - ! Passed variables - - - TYPE(Waves2_InitInputType ), INTENT( IN ) :: InitInp ! data needed to initialize the output module - TYPE(Waves2_OutputType), INTENT( INOUT ) :: y ! This module's internal data - TYPE(Waves2_ParameterType), INTENT( INOUT ) :: p - TYPE(Waves2_InitOutputType), INTENT( OUT ) :: InitOut - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables - INTEGER :: I ! Generic loop counter -! INTEGER :: J ! Generic loop counter -! INTEGER :: Indx ! Counts the current index into the WaveKinNd array -! CHARACTER(1024) :: OutFileName ! The name of the output file including the full path. -! CHARACTER(200) :: Frmt ! a string to hold a format statement - - CHARACTER(ErrMsgLen) :: ErrMsgTmp ! Temporary Error status - INTEGER(IntKi) :: ErrStatTmp ! Temporary Error message - - - !------------------------------------------------------------------------------------------------- - ! Initialize local variables - !------------------------------------------------------------------------------------------------- - - - ErrStat = ErrID_None - ErrStatTmp = ErrID_None - ErrMsg = "" - ErrMsgTmp = "" - - - - - !------------------------------------------------------------------------------------------------- - ! Check that the variables in OutList are valid - !------------------------------------------------------------------------------------------------- - - CALL Wvs2OUT_ChkOutLst( InitInp%OutList(1:p%NumOuts), y, p, ErrStatTmp, ErrMsg ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Wvs2OUT_Init') - IF (ErrStat >= AbortErrLev ) RETURN - - IF ( ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0 ) THEN ! Output has been requested so let's open an output file - - ALLOCATE( y%WriteOutput( p%NumOuts ), STAT = ErrStatTmp ) - IF ( ErrStattmp /= ErrID_None ) THEN - CALL SetErrStat(ErrID_Fatal,' Error allocating space for WriteOutput array.',ErrStat,ErrMsg,'Wvs2OUT_Init') - IF (ErrStat >= AbortErrLev ) RETURN - RETURN - END IF - y%WriteOutput = 0.0_ReKi - - ALLOCATE ( InitOut%WriteOutputHdr(p%NumOuts), STAT = ErrStatTmp ) - IF ( ErrStattmp /= ErrID_None ) THEN - CALL SetErrStat(ErrID_Fatal,' Error allocating space for WriteOutputHdr array.',ErrStat,ErrMsg,'Wvs2OUT_Init') - IF (ErrStat >= AbortErrLev ) RETURN - RETURN - END IF - - ALLOCATE ( InitOut%WriteOutputUnt(p%NumOuts), STAT = ErrStatTmp ) - IF ( ErrStattmp /= ErrID_None ) THEN - CALL SetErrStat(ErrID_Fatal,' Error allocating space for WriteOutputUnt array.',ErrStat,ErrMsg,'Wvs2OUT_Init') - IF (ErrStat >= AbortErrLev ) RETURN - RETURN - END IF - - DO I = 1,p%NumOuts - - InitOut%WriteOutputHdr(I) = TRIM( p%OutParam(I)%Name ) - InitOut%WriteOutputUnt(I) = TRIM( p%OutParam(I)%Units ) - - END DO - - END IF ! there are any requested outputs - - RETURN - -END SUBROUTINE Wvs2OUT_Init - - -!==================================================================================================== -FUNCTION GetWaves2Channels ( NUserOutputs, UserOutputs, OutList, foundMask, ErrStat, ErrMsg ) -! This routine checks the names of inputted output channels, checks to see if they -! below to the list of available Waves2 channels. - -!---------------------------------------------------------------------------------------------------- - INTEGER, INTENT( IN ) :: NUserOutputs ! Number of user-specified output channels - CHARACTER(ChanLen), INTENT( IN ) :: UserOutputs (:) ! An array holding the names of the requested output channels. - CHARACTER(ChanLen), INTENT( OUT ) :: OutList (:) ! An array holding the names of the matched Waves2 output channels. - LOGICAL, INTENT( INOUT ) :: foundMask (:) ! A mask indicating whether a user requested channel belongs to a module's output channels. - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - INTEGER GetWaves2Channels ! The number of channels found in this module - - ! Local variables. - - INTEGER :: I ! Generic loop-counting index. - INTEGER :: count ! Generic loop-counting index. - INTEGER :: INDX ! Index for valid arrays - - CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I). - CHARACTER(28), PARAMETER :: OutPFmt = "( I4, 3X,A 10,1 X, A10 )" ! Output format parameter output list. -! LOGICAL :: InvalidOutput(MaxWaves2Outputs) ! This array determines if the output channel is valid for this configuration - LOGICAL :: CheckOutListAgain - - LOGICAL :: newFoundMask (NUserOutputs) ! A Mask indicating whether a user requested channel belongs to a modules output channels. - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - GetWaves2Channels = 0 - - newFoundMask = .FALSE. - - - DO I = 1,NUserOutputs - IF (.NOT. foundMask(I) ) THEN - OutListTmp = UserOutputs(I) - - CheckOutListAgain = .FALSE. - - ! Reverse the sign (+/-) of the output channel if the user prefixed the - ! channel name with a '-', '_', 'm', or 'M' character indicating "minus". - - - - IF ( INDEX( '-_', OutListTmp(1:1) ) > 0 ) THEN - - OutListTmp = OutListTmp(2:) - ELSE IF ( INDEX( 'mM', OutListTmp(1:1) ) > 0 ) THEN ! We'll assume this is a variable name for now, (if not, we will check later if OutListTmp(2:) is also a variable name) - CheckOutListAgain = .TRUE. - - END IF - - CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - - - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) - - IF ( CheckOutListAgain .AND. Indx < 1 ) THEN ! Let's assume that "M" really meant "minus" and then test again - ! ex, 'MTipDxc1' causes the sign of TipDxc1 to be switched. - OutListTmp = OutListTmp(2:) - - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) - END IF - - IF ( Indx > 0 ) THEN - newFoundMask(I) = .TRUE. - foundMask(I) = .TRUE. - GetWaves2Channels = GetWaves2Channels + 1 - - !ELSE - ! foundMask(I) = .FALSE. - END IF - END IF -END DO - - -IF ( GetWaves2Channels > 0 ) THEN - - count = 1 - ! ! Test that num channels does not exceed max possible channels due to size of OutList - ! ALLOCATE ( OutList(GetWaves2Channels) , STAT=ErrStat ) - ! IF ( ErrStat /= 0 ) THEN - ! ErrMsg = ' Error allocating memory for the OutList array in the GetWaves2Channels function.' - ! ErrStat = ErrID_Fatal - ! RETURN - ! END IF - - DO I = 1,NUserOutputs - IF ( newFoundMask(I) ) THEN - OutList(count) = UserOutputs(I) - count = count + 1 - END IF - - END DO - -END IF - - -END FUNCTION GetWaves2Channels - - - - -!==================================================================================================== -SUBROUTINE Wvs2OUT_ChkOutLst( OutList, y, p, ErrStat, ErrMsg ) -! This routine checks the names of inputted output channels, checks to see if any of them are ill- -! conditioned (returning an error if so), and assigns the OutputDataType settings (i.e, the index, -! name, and units of the output channels). -! Note that the Wamit module must be initialized prior to calling this function (if it -! is being used) so that it can correctly determine if the Lines outputs are valid. -!---------------------------------------------------------------------------------------------------- - - - - ! Passed variables - - TYPE(Waves2_OutputType), INTENT( INOUT ) :: y ! This module's internal data - TYPE(Waves2_ParameterType), INTENT( INOUT ) :: p ! parameter data for this instance of the Waves2 platform module - CHARACTER(ChanLen), INTENT( IN ) :: OutList (:) ! An array holding the names of the requested output channels. - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - - ! Local variables. - - CHARACTER(ErrMsgLen) :: ErrMsgTmp ! Temporary error message - INTEGER(IntKi) :: ErrStatTmp ! Temporary error status - - INTEGER :: I ! Generic loop-counting index. -! INTEGER :: J ! Generic loop-counting index. - INTEGER :: INDX ! Index for valid arrays - - CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I). - CHARACTER(28), PARAMETER :: OutPFmt = "( I4, 3X,A 10,1 X, A10 )" ! Output format parameter output list. - - - ! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m" -! 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 09-Jan-2013 14:53:03. - - LOGICAL :: InvalidOutput(MaxWaves2Outputs) ! This array determines if the output channel is valid for this configuration - - LOGICAL :: CheckOutListAgain - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrStatTmp = ErrID_None - ErrMsg = "" - ErrMsgTmp = "" - - InvalidOutput = .FALSE. - -!End of code generated by Matlab script - - !------------------------------------------------------------------------------------------------- - ! ALLOCATE the OutParam array - !------------------------------------------------------------------------------------------------- - - - ALLOCATE ( p%OutParam(p%NumOuts) , STAT=ErrStatTmp ) - IF ( ErrStatTmp /= 0 ) CALL SetErrStat(ErrID_Fatal,' Error allocating memory for the OutParam array.',ErrStat,ErrMsg,'Wvs2OUT_ChkOutLst') - IF ( ErrStat >= AbortErrLev ) RETURN - - - - - DO I = 1,p%NumOuts - - p%OutParam(I)%Name = OutList(I) - OutListTmp = OutList(I) - - - ! Reverse the sign (+/-) of the output channel if the user prefixed the - ! channel name with a '-', '_', 'm', or 'M' character indicating "minus". - - CheckOutListAgain = .FALSE. - - IF ( INDEX( '-_', OutListTmp(1:1) ) > 0 ) THEN - p%OutParam(I)%SignM = -1 ! ex, '-TipDxc1' causes the sign of TipDxc1 to be switched. - OutListTmp = OutListTmp(2:) - ELSE IF ( INDEX( 'mM', OutListTmp(1:1) ) > 0 ) THEN ! We'll assume this is a variable name for now, (if not, we will check later if OutListTmp(2:) is also a variable name) - CheckOutListAgain = .TRUE. - p%OutParam(I)%SignM = 1 - ELSE - p%OutParam(I)%SignM = 1 - END IF - - CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - - - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) - - IF ( CheckOutListAgain .AND. Indx < 1 ) THEN ! Let's assume that "M" really meant "minus" and then test again - p%OutParam(I)%SignM = -1 ! ex, 'MTipDxc1' causes the sign of TipDxc1 to be switched. - OutListTmp = OutListTmp(2:) - - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) - END IF - - IF ( Indx > 0 ) THEN - p%OutParam(I)%Indx = ParamIndxAry(Indx) - IF ( InvalidOutput( ParamIndxAry(Indx) ) ) THEN - p%OutParam(I)%Units = 'INVALID' - p%OutParam(I)%Indx = 1 - p%OutParam(I)%SignM = 0 - ELSE - p%OutParam(I)%Units = ParamUnitsAry(Indx) - END IF - ELSE - ErrMsg = p%OutParam(I)%Name//' is not an available output channel.' - ErrStat = ErrID_Fatal - - p%OutParam(I)%Units = 'INVALID' - p%OutParam(I)%Indx = 1 - p%OutParam(I)%SignM = 0 ! this will print all zeros - END IF - - END DO - - - RETURN -END SUBROUTINE Wvs2OUT_ChkOutLst - - -!==================================================================================================== -SUBROUTINE Wvs2OUT_DestroyParam ( p, ErrStat, ErrMsg ) -! This function cleans up after running the Waves2 output module. It closes the output file, -! releases memory, and resets the number of outputs requested to 0. -!---------------------------------------------------------------------------------------------------- - - ! Passed variables - - TYPE(Waves2_ParameterType), INTENT( INOUT ) :: p ! parameter data for this instance of the Waves2 module - INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred - CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - -! ! Internal variables - LOGICAL :: Err - - - !------------------------------------------------------------------------------------------------- - ! Initialize error information - !------------------------------------------------------------------------------------------------- - ErrStat = ErrID_None - ErrMsg = "" - Err = .FALSE. - - - - !------------------------------------------------------------------------------------------------- - ! Deallocate arrays - !------------------------------------------------------------------------------------------------- - IF ( ALLOCATED( p%OutParam ) ) DEALLOCATE ( p%OutParam, STAT=ErrStat ) - IF ( ErrStat /= 0 ) Err = .TRUE. - - !------------------------------------------------------------------------------------------------- - ! Reset number of outputs - !------------------------------------------------------------------------------------------------- - p%NumOuts = 0 - p%UnOutFile = -1 - - !p%WaveKinNd = -1 ! set this array to "invalid" - - !------------------------------------------------------------------------------------------------- - ! Make sure ErrStat is non-zero if an error occurred - !------------------------------------------------------------------------------------------------- - IF ( Err ) ErrStat = ErrID_Fatal - - RETURN - -END SUBROUTINE Wvs2OUT_DestroyParam -!==================================================================================================== - - -END MODULE Waves2_Output diff --git a/modules/hydrodyn/src/Waves2_Types.f90 b/modules/hydrodyn/src/Waves2_Types.f90 deleted file mode 100644 index c5c1afd7dc..0000000000 --- a/modules/hydrodyn/src/Waves2_Types.f90 +++ /dev/null @@ -1,3923 +0,0 @@ -!STARTOFREGISTRYGENERATEDFILE 'Waves2_Types.f90' -! -! WARNING This file is generated automatically by the FAST registry. -! Do not edit. Your changes to this file will be lost. -! -! FAST Registry -!********************************************************************************************************************************* -! Waves2_Types -!................................................................................................................................. -! This file is part of Waves2. -! -! Copyright (C) 2012-2016 National Renewable Energy Laboratory -! -! Licensed under the Apache License, Version 2.0 (the "License"); -! you may not use this file except in compliance with the License. -! You may obtain a copy of the License at -! -! http://www.apache.org/licenses/LICENSE-2.0 -! -! Unless required by applicable law or agreed to in writing, software -! distributed under the License is distributed on an "AS IS" BASIS, -! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -! See the License for the specific language governing permissions and -! limitations under the License. -! -! -! W A R N I N G : This file was automatically generated from the FAST registry. Changes made to this file may be lost. -! -!********************************************************************************************************************************* -!> This module contains the user-defined types needed in Waves2. It also contains copy, destroy, pack, and -!! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. -MODULE Waves2_Types -!--------------------------------------------------------------------------------------------------------------------------------- -USE NWTC_Library -IMPLICIT NONE - INTEGER(IntKi), PUBLIC, PARAMETER :: MaxWaves2Outputs = 9 ! [-] -! ========= Waves2_InitInputType ======= - TYPE, PUBLIC :: Waves2_InitInputType - INTEGER(IntKi) :: UnSum !< The unit number for the HydroDyn summary file [-] - REAL(ReKi) :: Gravity !< Gravitational acceleration [(m/s^2)] - REAL(ReKi) :: WtrDens !< Water density [(kg/m^3)] - REAL(SiKi) :: WtrDpth !< Water depth [(meters)] - INTEGER(IntKi) :: NStepWave !< Total number of frequency components = total number of time steps in the incident wave [-] - INTEGER(IntKi) :: NStepWave2 !< NStepWave / 2 [-] - REAL(SiKi) :: WaveDOmega !< Frequency step for incident wave calculations [(rad/s)] - INTEGER(IntKi) :: WaveStMod !< Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} [-] - LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveDirArr !< Wave direction array. Each frequency has a unique direction of WaveNDir > 1 [(degrees)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevC0 !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Simulation times at which the instantaneous second order loads associated with the incident waves are determined [sec] - INTEGER(IntKi) :: NWaveElev !< Number of points where the incident wave elevations can be output [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElevxi !< xi-coordinates for points where the incident wave elevations can be output [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElevyi !< yi-coordinates for points where the incident wave elevations can be output [(meters)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevXY !< Supplied by Driver: X-Y locations for WaveElevation output (for visualization). Index 1 corresponds to X or Y coordinate. Index 2 corresponds to point number. [-] - INTEGER(IntKi) :: NWaveKin !< Number of points where the incident wave kinematics will be computed [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinxi !< xi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinyi !< yi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinzi !< zi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] - LOGICAL :: WvDiffQTFF !< Full difference QTF second order forces flag [(-)] - LOGICAL :: WvSumQTFF !< Full sum QTF second order forces flag [(-)] - REAL(SiKi) :: WvLowCOffD !< Minimum frequency used in the difference methods [Ignored if all difference methods = 0] [(rad/s)] - REAL(SiKi) :: WvHiCOffD !< Maximum frequency used in the difference methods [Ignored if all difference methods = 0] [(rad/s)] - REAL(SiKi) :: WvLowCOffS !< Minimum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] - REAL(SiKi) :: WvHiCOffS !< Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] - CHARACTER(ChanLen) , DIMENSION(1:18) :: OutList !< This should really be dimensioned with MaxOutPts [-] - LOGICAL :: OutAll !< [-] - INTEGER(IntKi) :: NumOuts !< [-] - INTEGER(IntKi) :: NumOutAll !< [-] - END TYPE Waves2_InitInputType -! ======================= -! ========= Waves2_InitOutputType ======= - TYPE, PUBLIC :: Waves2_InitOutputType - CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: WriteOutputHdr !< [-] - CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: WriteOutputUnt !< [-] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevSeries2 !< [(m)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc2D !< [(m/s^2)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveDynP2D !< [(N/m^2)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc2S !< [(m/s^2)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveDynP2S !< [(N/m^2)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel2D !< [(m/s)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel2S !< [(m/s)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc2D0 !< [(m/s^2)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveDynP2D0 !< [(N/m^2)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc2S0 !< [(m/s^2)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveDynP2S0 !< [(N/m^2)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel2D0 !< [(m/s)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel2S0 !< [(m/s)] - END TYPE Waves2_InitOutputType -! ======================= -! ========= Waves2_ContinuousStateType ======= - TYPE, PUBLIC :: Waves2_ContinuousStateType - REAL(SiKi) :: DummyContState !< Remove this variable if you have continuous states [-] - END TYPE Waves2_ContinuousStateType -! ======================= -! ========= Waves2_DiscreteStateType ======= - TYPE, PUBLIC :: Waves2_DiscreteStateType - REAL(SiKi) :: DummyDiscState !< Remove this variable if you have discrete states [-] - END TYPE Waves2_DiscreteStateType -! ======================= -! ========= Waves2_ConstraintStateType ======= - TYPE, PUBLIC :: Waves2_ConstraintStateType - REAL(SiKi) :: DummyConstrState !< Remove this variable if you have constraint states [-] - END TYPE Waves2_ConstraintStateType -! ======================= -! ========= Waves2_OtherStateType ======= - TYPE, PUBLIC :: Waves2_OtherStateType - INTEGER(IntKi) :: DummyOtherState !< Remove this variable if you have other states [-] - END TYPE Waves2_OtherStateType -! ======================= -! ========= Waves2_MiscVarType ======= - TYPE, PUBLIC :: Waves2_MiscVarType - INTEGER(IntKi) :: LastIndWave !< Index for last interpolation step of 2nd order forces [-] - END TYPE Waves2_MiscVarType -! ======================= -! ========= Waves2_ParameterType ======= - TYPE, PUBLIC :: Waves2_ParameterType - REAL(DbKi) :: DT !< Time step for continuous state integration & discrete state update [seconds] - LOGICAL :: WvDiffQTFF !< Full difference QTF second order forces flag [(-)] - LOGICAL :: WvSumQTFF !< Full sum QTF second order forces flag [(-)] - INTEGER(IntKi) :: NWaveElev !< Number of points where the incident wave elevations can be output [-] - INTEGER(IntKi) :: NStepWave !< Total number of frequency components = total number of time steps in the incident wave [-] - INTEGER(IntKi) :: NStepWave2 !< NStepWave / 2 [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Simulation times at which the instantaneous second order loads associated with the incident waves are determined [sec] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElev2 !< Instantaneous elevation time-series of incident waves at each of the NWaveElev points where the incident wave elevations can be output [(meters)] - TYPE(OutParmType) , DIMENSION(:), ALLOCATABLE :: OutParam !< [-] - INTEGER(IntKi) :: NumOuts !< [-] - INTEGER(IntKi) :: NumOutAll !< [-] - CHARACTER(20) :: OutFmt !< [-] - CHARACTER(20) :: OutSFmt !< [-] - CHARACTER(ChanLen) :: Delim !< [-] - INTEGER(IntKi) :: UnOutFile !< [-] - END TYPE Waves2_ParameterType -! ======================= -! ========= Waves2_InputType ======= - TYPE, PUBLIC :: Waves2_InputType - REAL(SiKi) :: DummyInput !< Remove this variable if you have input data [-] - END TYPE Waves2_InputType -! ======================= -! ========= Waves2_OutputType ======= - TYPE, PUBLIC :: Waves2_OutputType - REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WriteOutput !< [-] - END TYPE Waves2_OutputType -! ======================= -CONTAINS - SUBROUTINE Waves2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_InitInputType), INTENT(IN) :: SrcInitInputData - TYPE(Waves2_InitInputType), INTENT(INOUT) :: DstInitInputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyInitInput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstInitInputData%UnSum = SrcInitInputData%UnSum - DstInitInputData%Gravity = SrcInitInputData%Gravity - DstInitInputData%WtrDens = SrcInitInputData%WtrDens - DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth - DstInitInputData%NStepWave = SrcInitInputData%NStepWave - DstInitInputData%NStepWave2 = SrcInitInputData%NStepWave2 - DstInitInputData%WaveDOmega = SrcInitInputData%WaveDOmega - DstInitInputData%WaveStMod = SrcInitInputData%WaveStMod - DstInitInputData%WaveMultiDir = SrcInitInputData%WaveMultiDir -IF (ALLOCATED(SrcInitInputData%WaveDirArr)) THEN - i1_l = LBOUND(SrcInitInputData%WaveDirArr,1) - i1_u = UBOUND(SrcInitInputData%WaveDirArr,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveDirArr)) THEN - ALLOCATE(DstInitInputData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveDirArr = SrcInitInputData%WaveDirArr -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveElevC0)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElevC0,1) - i1_u = UBOUND(SrcInitInputData%WaveElevC0,1) - i2_l = LBOUND(SrcInitInputData%WaveElevC0,2) - i2_u = UBOUND(SrcInitInputData%WaveElevC0,2) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevC0)) THEN - ALLOCATE(DstInitInputData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElevC0 = SrcInitInputData%WaveElevC0 -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveTime)) THEN - i1_l = LBOUND(SrcInitInputData%WaveTime,1) - i1_u = UBOUND(SrcInitInputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveTime)) THEN - ALLOCATE(DstInitInputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveTime = SrcInitInputData%WaveTime -ENDIF - DstInitInputData%NWaveElev = SrcInitInputData%NWaveElev -IF (ALLOCATED(SrcInitInputData%WaveElevxi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElevxi,1) - i1_u = UBOUND(SrcInitInputData%WaveElevxi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevxi)) THEN - ALLOCATE(DstInitInputData%WaveElevxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElevxi = SrcInitInputData%WaveElevxi -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveElevyi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElevyi,1) - i1_u = UBOUND(SrcInitInputData%WaveElevyi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevyi)) THEN - ALLOCATE(DstInitInputData%WaveElevyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElevyi = SrcInitInputData%WaveElevyi -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveElevXY)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElevXY,1) - i1_u = UBOUND(SrcInitInputData%WaveElevXY,1) - i2_l = LBOUND(SrcInitInputData%WaveElevXY,2) - i2_u = UBOUND(SrcInitInputData%WaveElevXY,2) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevXY)) THEN - ALLOCATE(DstInitInputData%WaveElevXY(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevXY.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElevXY = SrcInitInputData%WaveElevXY -ENDIF - DstInitInputData%NWaveKin = SrcInitInputData%NWaveKin -IF (ALLOCATED(SrcInitInputData%WaveKinxi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveKinxi,1) - i1_u = UBOUND(SrcInitInputData%WaveKinxi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveKinxi)) THEN - ALLOCATE(DstInitInputData%WaveKinxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveKinxi = SrcInitInputData%WaveKinxi -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveKinyi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveKinyi,1) - i1_u = UBOUND(SrcInitInputData%WaveKinyi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveKinyi)) THEN - ALLOCATE(DstInitInputData%WaveKinyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveKinyi = SrcInitInputData%WaveKinyi -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveKinzi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveKinzi,1) - i1_u = UBOUND(SrcInitInputData%WaveKinzi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveKinzi)) THEN - ALLOCATE(DstInitInputData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveKinzi = SrcInitInputData%WaveKinzi -ENDIF - DstInitInputData%WvDiffQTFF = SrcInitInputData%WvDiffQTFF - DstInitInputData%WvSumQTFF = SrcInitInputData%WvSumQTFF - DstInitInputData%WvLowCOffD = SrcInitInputData%WvLowCOffD - DstInitInputData%WvHiCOffD = SrcInitInputData%WvHiCOffD - DstInitInputData%WvLowCOffS = SrcInitInputData%WvLowCOffS - DstInitInputData%WvHiCOffS = SrcInitInputData%WvHiCOffS - DstInitInputData%OutList = SrcInitInputData%OutList - DstInitInputData%OutAll = SrcInitInputData%OutAll - DstInitInputData%NumOuts = SrcInitInputData%NumOuts - DstInitInputData%NumOutAll = SrcInitInputData%NumOutAll - END SUBROUTINE Waves2_CopyInitInput - - SUBROUTINE Waves2_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_InitInputType), INTENT(INOUT) :: InitInputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyInitInput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(InitInputData%WaveDirArr)) THEN - DEALLOCATE(InitInputData%WaveDirArr) -ENDIF -IF (ALLOCATED(InitInputData%WaveElevC0)) THEN - DEALLOCATE(InitInputData%WaveElevC0) -ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN - DEALLOCATE(InitInputData%WaveTime) -ENDIF -IF (ALLOCATED(InitInputData%WaveElevxi)) THEN - DEALLOCATE(InitInputData%WaveElevxi) -ENDIF -IF (ALLOCATED(InitInputData%WaveElevyi)) THEN - DEALLOCATE(InitInputData%WaveElevyi) -ENDIF -IF (ALLOCATED(InitInputData%WaveElevXY)) THEN - DEALLOCATE(InitInputData%WaveElevXY) -ENDIF -IF (ALLOCATED(InitInputData%WaveKinxi)) THEN - DEALLOCATE(InitInputData%WaveKinxi) -ENDIF -IF (ALLOCATED(InitInputData%WaveKinyi)) THEN - DEALLOCATE(InitInputData%WaveKinyi) -ENDIF -IF (ALLOCATED(InitInputData%WaveKinzi)) THEN - DEALLOCATE(InitInputData%WaveKinzi) -ENDIF - END SUBROUTINE Waves2_DestroyInitInput - - SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_InitInputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackInitInput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! UnSum - Re_BufSz = Re_BufSz + 1 ! Gravity - Re_BufSz = Re_BufSz + 1 ! WtrDens - Re_BufSz = Re_BufSz + 1 ! WtrDpth - Int_BufSz = Int_BufSz + 1 ! NStepWave - Int_BufSz = Int_BufSz + 1 ! NStepWave2 - Re_BufSz = Re_BufSz + 1 ! WaveDOmega - Int_BufSz = Int_BufSz + 1 ! WaveStMod - Int_BufSz = Int_BufSz + 1 ! WaveMultiDir - Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no - IF ( ALLOCATED(InData%WaveDirArr) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no - IF ( ALLOCATED(InData%WaveElevC0) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime - END IF - Int_BufSz = Int_BufSz + 1 ! NWaveElev - Int_BufSz = Int_BufSz + 1 ! WaveElevxi allocated yes/no - IF ( ALLOCATED(InData%WaveElevxi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveElevxi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevxi) ! WaveElevxi - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevyi allocated yes/no - IF ( ALLOCATED(InData%WaveElevyi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveElevyi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevyi) ! WaveElevyi - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevXY allocated yes/no - IF ( ALLOCATED(InData%WaveElevXY) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevXY upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevXY) ! WaveElevXY - END IF - Int_BufSz = Int_BufSz + 1 ! NWaveKin - Int_BufSz = Int_BufSz + 1 ! WaveKinxi allocated yes/no - IF ( ALLOCATED(InData%WaveKinxi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveKinxi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveKinxi) ! WaveKinxi - END IF - Int_BufSz = Int_BufSz + 1 ! WaveKinyi allocated yes/no - IF ( ALLOCATED(InData%WaveKinyi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveKinyi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveKinyi) ! WaveKinyi - END IF - Int_BufSz = Int_BufSz + 1 ! WaveKinzi allocated yes/no - IF ( ALLOCATED(InData%WaveKinzi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveKinzi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveKinzi) ! WaveKinzi - END IF - Int_BufSz = Int_BufSz + 1 ! WvDiffQTFF - Int_BufSz = Int_BufSz + 1 ! WvSumQTFF - Re_BufSz = Re_BufSz + 1 ! WvLowCOffD - Re_BufSz = Re_BufSz + 1 ! WvHiCOffD - Re_BufSz = Re_BufSz + 1 ! WvLowCOffS - Re_BufSz = Re_BufSz + 1 ! WvHiCOffS - Int_BufSz = Int_BufSz + SIZE(InData%OutList)*LEN(InData%OutList) ! OutList - Int_BufSz = Int_BufSz + 1 ! OutAll - Int_BufSz = Int_BufSz + 1 ! NumOuts - Int_BufSz = Int_BufSz + 1 ! NumOutAll - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IntKiBuf(Int_Xferred) = InData%UnSum - Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%Gravity - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WtrDens - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WtrDpth - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NStepWave - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NStepWave2 - Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveDOmega - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%WaveStMod - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveDirArr) ) 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%WaveDirArr,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDirArr,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveDirArr,1), UBOUND(InData%WaveDirArr,1) - ReKiBuf(Re_Xferred) = InData%WaveDirArr(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevC0) ) 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%WaveElevC0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElevC0,2), UBOUND(InData%WaveElevC0,2) - DO i1 = LBOUND(InData%WaveElevC0,1), UBOUND(InData%WaveElevC0,1) - ReKiBuf(Re_Xferred) = InData%WaveElevC0(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) 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%WaveTime,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) - ReKiBuf(Re_Xferred) = InData%WaveTime(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IntKiBuf(Int_Xferred) = InData%NWaveElev - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveElevxi) ) 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%WaveElevxi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevxi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveElevxi,1), UBOUND(InData%WaveElevxi,1) - ReKiBuf(Re_Xferred) = InData%WaveElevxi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevyi) ) 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%WaveElevyi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevyi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveElevyi,1), UBOUND(InData%WaveElevyi,1) - ReKiBuf(Re_Xferred) = InData%WaveElevyi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevXY) ) 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%WaveElevXY,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevXY,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElevXY,2), UBOUND(InData%WaveElevXY,2) - DO i1 = LBOUND(InData%WaveElevXY,1), UBOUND(InData%WaveElevXY,1) - ReKiBuf(Re_Xferred) = InData%WaveElevXY(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IntKiBuf(Int_Xferred) = InData%NWaveKin - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveKinxi) ) 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%WaveKinxi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinxi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveKinxi,1), UBOUND(InData%WaveKinxi,1) - ReKiBuf(Re_Xferred) = InData%WaveKinxi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveKinyi) ) 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%WaveKinyi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinyi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveKinyi,1), UBOUND(InData%WaveKinyi,1) - ReKiBuf(Re_Xferred) = InData%WaveKinyi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveKinzi) ) 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%WaveKinzi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinzi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveKinzi,1), UBOUND(InData%WaveKinzi,1) - ReKiBuf(Re_Xferred) = InData%WaveKinzi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IntKiBuf(Int_Xferred) = TRANSFER(InData%WvDiffQTFF, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%WvSumQTFF, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WvLowCOffD - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WvHiCOffD - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WvLowCOffS - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WvHiCOffS - Re_Xferred = Re_Xferred + 1 - DO i1 = LBOUND(InData%OutList,1), UBOUND(InData%OutList,1) - DO I = 1, LEN(InData%OutList) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutList(i1)(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - IntKiBuf(Int_Xferred) = TRANSFER(InData%OutAll, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NumOuts - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NumOutAll - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves2_PackInitInput - - SUBROUTINE Waves2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_InitInputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackInitInput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%UnSum = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%Gravity = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%WtrDens = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%WtrDpth = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%NStepWave = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NStepWave2 = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WaveDOmega = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveStMod = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WaveMultiDir = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveMultiDir) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDirArr 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%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) - ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveDirArr,1), UBOUND(OutData%WaveDirArr,1) - OutData%WaveDirArr(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) - ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevC0,2), UBOUND(OutData%WaveElevC0,2) - DO i1 = LBOUND(OutData%WaveElevC0,1), UBOUND(OutData%WaveElevC0,1) - OutData%WaveElevC0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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%WaveTime)) DEALLOCATE(OutData%WaveTime) - ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) - OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - OutData%NWaveElev = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevxi 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%WaveElevxi)) DEALLOCATE(OutData%WaveElevxi) - ALLOCATE(OutData%WaveElevxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveElevxi,1), UBOUND(OutData%WaveElevxi,1) - OutData%WaveElevxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevyi 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%WaveElevyi)) DEALLOCATE(OutData%WaveElevyi) - ALLOCATE(OutData%WaveElevyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveElevyi,1), UBOUND(OutData%WaveElevyi,1) - OutData%WaveElevyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevXY 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevXY)) DEALLOCATE(OutData%WaveElevXY) - ALLOCATE(OutData%WaveElevXY(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevXY.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevXY,2), UBOUND(OutData%WaveElevXY,2) - DO i1 = LBOUND(OutData%WaveElevXY,1), UBOUND(OutData%WaveElevXY,1) - OutData%WaveElevXY(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - OutData%NWaveKin = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinxi 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%WaveKinxi)) DEALLOCATE(OutData%WaveKinxi) - ALLOCATE(OutData%WaveKinxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveKinxi,1), UBOUND(OutData%WaveKinxi,1) - OutData%WaveKinxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinyi 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%WaveKinyi)) DEALLOCATE(OutData%WaveKinyi) - ALLOCATE(OutData%WaveKinyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveKinyi,1), UBOUND(OutData%WaveKinyi,1) - OutData%WaveKinyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinzi 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%WaveKinzi)) DEALLOCATE(OutData%WaveKinzi) - ALLOCATE(OutData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveKinzi,1), UBOUND(OutData%WaveKinzi,1) - OutData%WaveKinzi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - OutData%WvDiffQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%WvDiffQTFF) - Int_Xferred = Int_Xferred + 1 - OutData%WvSumQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%WvSumQTFF) - Int_Xferred = Int_Xferred + 1 - OutData%WvLowCOffD = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WvHiCOffD = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WvLowCOffS = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WvHiCOffS = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - i1_l = LBOUND(OutData%OutList,1) - i1_u = UBOUND(OutData%OutList,1) - DO i1 = LBOUND(OutData%OutList,1), UBOUND(OutData%OutList,1) - DO I = 1, LEN(OutData%OutList) - OutData%OutList(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - OutData%OutAll = TRANSFER(IntKiBuf(Int_Xferred), OutData%OutAll) - Int_Xferred = Int_Xferred + 1 - OutData%NumOuts = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NumOutAll = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves2_UnPackInitInput - - SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_InitOutputType), INTENT(IN) :: SrcInitOutputData - TYPE(Waves2_InitOutputType), INTENT(INOUT) :: DstInitOutputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyInitOutput' -! - ErrStat = ErrID_None - ErrMsg = "" -IF (ALLOCATED(SrcInitOutputData%WriteOutputHdr)) THEN - i1_l = LBOUND(SrcInitOutputData%WriteOutputHdr,1) - i1_u = UBOUND(SrcInitOutputData%WriteOutputHdr,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WriteOutputHdr)) THEN - ALLOCATE(DstInitOutputData%WriteOutputHdr(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WriteOutputHdr.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WriteOutputHdr = SrcInitOutputData%WriteOutputHdr -ENDIF -IF (ALLOCATED(SrcInitOutputData%WriteOutputUnt)) THEN - i1_l = LBOUND(SrcInitOutputData%WriteOutputUnt,1) - i1_u = UBOUND(SrcInitOutputData%WriteOutputUnt,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WriteOutputUnt)) THEN - ALLOCATE(DstInitOutputData%WriteOutputUnt(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WriteOutputUnt.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WriteOutputUnt = SrcInitOutputData%WriteOutputUnt -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveElevSeries2)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveElevSeries2,1) - i1_u = UBOUND(SrcInitOutputData%WaveElevSeries2,1) - i2_l = LBOUND(SrcInitOutputData%WaveElevSeries2,2) - i2_u = UBOUND(SrcInitOutputData%WaveElevSeries2,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElevSeries2)) THEN - ALLOCATE(DstInitOutputData%WaveElevSeries2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevSeries2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveElevSeries2 = SrcInitOutputData%WaveElevSeries2 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveAcc2D)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveAcc2D,1) - i1_u = UBOUND(SrcInitOutputData%WaveAcc2D,1) - i2_l = LBOUND(SrcInitOutputData%WaveAcc2D,2) - i2_u = UBOUND(SrcInitOutputData%WaveAcc2D,2) - i3_l = LBOUND(SrcInitOutputData%WaveAcc2D,3) - i3_u = UBOUND(SrcInitOutputData%WaveAcc2D,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc2D)) THEN - ALLOCATE(DstInitOutputData%WaveAcc2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc2D.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveAcc2D = SrcInitOutputData%WaveAcc2D -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveDynP2D)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveDynP2D,1) - i1_u = UBOUND(SrcInitOutputData%WaveDynP2D,1) - i2_l = LBOUND(SrcInitOutputData%WaveDynP2D,2) - i2_u = UBOUND(SrcInitOutputData%WaveDynP2D,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP2D)) THEN - ALLOCATE(DstInitOutputData%WaveDynP2D(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP2D.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveDynP2D = SrcInitOutputData%WaveDynP2D -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveAcc2S)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveAcc2S,1) - i1_u = UBOUND(SrcInitOutputData%WaveAcc2S,1) - i2_l = LBOUND(SrcInitOutputData%WaveAcc2S,2) - i2_u = UBOUND(SrcInitOutputData%WaveAcc2S,2) - i3_l = LBOUND(SrcInitOutputData%WaveAcc2S,3) - i3_u = UBOUND(SrcInitOutputData%WaveAcc2S,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc2S)) THEN - ALLOCATE(DstInitOutputData%WaveAcc2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc2S.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveAcc2S = SrcInitOutputData%WaveAcc2S -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveDynP2S)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveDynP2S,1) - i1_u = UBOUND(SrcInitOutputData%WaveDynP2S,1) - i2_l = LBOUND(SrcInitOutputData%WaveDynP2S,2) - i2_u = UBOUND(SrcInitOutputData%WaveDynP2S,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP2S)) THEN - ALLOCATE(DstInitOutputData%WaveDynP2S(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP2S.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveDynP2S = SrcInitOutputData%WaveDynP2S -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveVel2D)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveVel2D,1) - i1_u = UBOUND(SrcInitOutputData%WaveVel2D,1) - i2_l = LBOUND(SrcInitOutputData%WaveVel2D,2) - i2_u = UBOUND(SrcInitOutputData%WaveVel2D,2) - i3_l = LBOUND(SrcInitOutputData%WaveVel2D,3) - i3_u = UBOUND(SrcInitOutputData%WaveVel2D,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel2D)) THEN - ALLOCATE(DstInitOutputData%WaveVel2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel2D.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveVel2D = SrcInitOutputData%WaveVel2D -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveVel2S)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveVel2S,1) - i1_u = UBOUND(SrcInitOutputData%WaveVel2S,1) - i2_l = LBOUND(SrcInitOutputData%WaveVel2S,2) - i2_u = UBOUND(SrcInitOutputData%WaveVel2S,2) - i3_l = LBOUND(SrcInitOutputData%WaveVel2S,3) - i3_u = UBOUND(SrcInitOutputData%WaveVel2S,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel2S)) THEN - ALLOCATE(DstInitOutputData%WaveVel2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel2S.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveVel2S = SrcInitOutputData%WaveVel2S -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveAcc2D0)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveAcc2D0,1) - i1_u = UBOUND(SrcInitOutputData%WaveAcc2D0,1) - i2_l = LBOUND(SrcInitOutputData%WaveAcc2D0,2) - i2_u = UBOUND(SrcInitOutputData%WaveAcc2D0,2) - i3_l = LBOUND(SrcInitOutputData%WaveAcc2D0,3) - i3_u = UBOUND(SrcInitOutputData%WaveAcc2D0,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc2D0)) THEN - ALLOCATE(DstInitOutputData%WaveAcc2D0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc2D0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveAcc2D0 = SrcInitOutputData%WaveAcc2D0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveDynP2D0)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveDynP2D0,1) - i1_u = UBOUND(SrcInitOutputData%WaveDynP2D0,1) - i2_l = LBOUND(SrcInitOutputData%WaveDynP2D0,2) - i2_u = UBOUND(SrcInitOutputData%WaveDynP2D0,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP2D0)) THEN - ALLOCATE(DstInitOutputData%WaveDynP2D0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP2D0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveDynP2D0 = SrcInitOutputData%WaveDynP2D0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveAcc2S0)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveAcc2S0,1) - i1_u = UBOUND(SrcInitOutputData%WaveAcc2S0,1) - i2_l = LBOUND(SrcInitOutputData%WaveAcc2S0,2) - i2_u = UBOUND(SrcInitOutputData%WaveAcc2S0,2) - i3_l = LBOUND(SrcInitOutputData%WaveAcc2S0,3) - i3_u = UBOUND(SrcInitOutputData%WaveAcc2S0,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc2S0)) THEN - ALLOCATE(DstInitOutputData%WaveAcc2S0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc2S0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveAcc2S0 = SrcInitOutputData%WaveAcc2S0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveDynP2S0)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveDynP2S0,1) - i1_u = UBOUND(SrcInitOutputData%WaveDynP2S0,1) - i2_l = LBOUND(SrcInitOutputData%WaveDynP2S0,2) - i2_u = UBOUND(SrcInitOutputData%WaveDynP2S0,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP2S0)) THEN - ALLOCATE(DstInitOutputData%WaveDynP2S0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP2S0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveDynP2S0 = SrcInitOutputData%WaveDynP2S0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveVel2D0)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveVel2D0,1) - i1_u = UBOUND(SrcInitOutputData%WaveVel2D0,1) - i2_l = LBOUND(SrcInitOutputData%WaveVel2D0,2) - i2_u = UBOUND(SrcInitOutputData%WaveVel2D0,2) - i3_l = LBOUND(SrcInitOutputData%WaveVel2D0,3) - i3_u = UBOUND(SrcInitOutputData%WaveVel2D0,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel2D0)) THEN - ALLOCATE(DstInitOutputData%WaveVel2D0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel2D0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveVel2D0 = SrcInitOutputData%WaveVel2D0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveVel2S0)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveVel2S0,1) - i1_u = UBOUND(SrcInitOutputData%WaveVel2S0,1) - i2_l = LBOUND(SrcInitOutputData%WaveVel2S0,2) - i2_u = UBOUND(SrcInitOutputData%WaveVel2S0,2) - i3_l = LBOUND(SrcInitOutputData%WaveVel2S0,3) - i3_u = UBOUND(SrcInitOutputData%WaveVel2S0,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel2S0)) THEN - ALLOCATE(DstInitOutputData%WaveVel2S0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel2S0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveVel2S0 = SrcInitOutputData%WaveVel2S0 -ENDIF - END SUBROUTINE Waves2_CopyInitOutput - - SUBROUTINE Waves2_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_InitOutputType), INTENT(INOUT) :: InitOutputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyInitOutput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(InitOutputData%WriteOutputHdr)) THEN - DEALLOCATE(InitOutputData%WriteOutputHdr) -ENDIF -IF (ALLOCATED(InitOutputData%WriteOutputUnt)) THEN - DEALLOCATE(InitOutputData%WriteOutputUnt) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElevSeries2)) THEN - DEALLOCATE(InitOutputData%WaveElevSeries2) -ENDIF -IF (ALLOCATED(InitOutputData%WaveAcc2D)) THEN - DEALLOCATE(InitOutputData%WaveAcc2D) -ENDIF -IF (ALLOCATED(InitOutputData%WaveDynP2D)) THEN - DEALLOCATE(InitOutputData%WaveDynP2D) -ENDIF -IF (ALLOCATED(InitOutputData%WaveAcc2S)) THEN - DEALLOCATE(InitOutputData%WaveAcc2S) -ENDIF -IF (ALLOCATED(InitOutputData%WaveDynP2S)) THEN - DEALLOCATE(InitOutputData%WaveDynP2S) -ENDIF -IF (ALLOCATED(InitOutputData%WaveVel2D)) THEN - DEALLOCATE(InitOutputData%WaveVel2D) -ENDIF -IF (ALLOCATED(InitOutputData%WaveVel2S)) THEN - DEALLOCATE(InitOutputData%WaveVel2S) -ENDIF -IF (ALLOCATED(InitOutputData%WaveAcc2D0)) THEN - DEALLOCATE(InitOutputData%WaveAcc2D0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveDynP2D0)) THEN - DEALLOCATE(InitOutputData%WaveDynP2D0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveAcc2S0)) THEN - DEALLOCATE(InitOutputData%WaveAcc2S0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveDynP2S0)) THEN - DEALLOCATE(InitOutputData%WaveDynP2S0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveVel2D0)) THEN - DEALLOCATE(InitOutputData%WaveVel2D0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveVel2S0)) THEN - DEALLOCATE(InitOutputData%WaveVel2S0) -ENDIF - END SUBROUTINE Waves2_DestroyInitOutput - - SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_InitOutputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackInitOutput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! WriteOutputHdr allocated yes/no - IF ( ALLOCATED(InData%WriteOutputHdr) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WriteOutputHdr upper/lower bounds for each dimension - Int_BufSz = Int_BufSz + SIZE(InData%WriteOutputHdr)*LEN(InData%WriteOutputHdr) ! WriteOutputHdr - END IF - Int_BufSz = Int_BufSz + 1 ! WriteOutputUnt allocated yes/no - IF ( ALLOCATED(InData%WriteOutputUnt) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WriteOutputUnt upper/lower bounds for each dimension - Int_BufSz = Int_BufSz + SIZE(InData%WriteOutputUnt)*LEN(InData%WriteOutputUnt) ! WriteOutputUnt - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevSeries2 allocated yes/no - IF ( ALLOCATED(InData%WaveElevSeries2) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevSeries2 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevSeries2) ! WaveElevSeries2 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveAcc2D allocated yes/no - IF ( ALLOCATED(InData%WaveAcc2D) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc2D upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc2D) ! WaveAcc2D - END IF - Int_BufSz = Int_BufSz + 1 ! WaveDynP2D allocated yes/no - IF ( ALLOCATED(InData%WaveDynP2D) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveDynP2D upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP2D) ! WaveDynP2D - END IF - Int_BufSz = Int_BufSz + 1 ! WaveAcc2S allocated yes/no - IF ( ALLOCATED(InData%WaveAcc2S) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc2S upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc2S) ! WaveAcc2S - END IF - Int_BufSz = Int_BufSz + 1 ! WaveDynP2S allocated yes/no - IF ( ALLOCATED(InData%WaveDynP2S) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveDynP2S upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP2S) ! WaveDynP2S - END IF - Int_BufSz = Int_BufSz + 1 ! WaveVel2D allocated yes/no - IF ( ALLOCATED(InData%WaveVel2D) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel2D upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveVel2D) ! WaveVel2D - END IF - Int_BufSz = Int_BufSz + 1 ! WaveVel2S allocated yes/no - IF ( ALLOCATED(InData%WaveVel2S) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel2S upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveVel2S) ! WaveVel2S - END IF - Int_BufSz = Int_BufSz + 1 ! WaveAcc2D0 allocated yes/no - IF ( ALLOCATED(InData%WaveAcc2D0) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc2D0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc2D0) ! WaveAcc2D0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveDynP2D0 allocated yes/no - IF ( ALLOCATED(InData%WaveDynP2D0) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveDynP2D0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP2D0) ! WaveDynP2D0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveAcc2S0 allocated yes/no - IF ( ALLOCATED(InData%WaveAcc2S0) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc2S0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc2S0) ! WaveAcc2S0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveDynP2S0 allocated yes/no - IF ( ALLOCATED(InData%WaveDynP2S0) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveDynP2S0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP2S0) ! WaveDynP2S0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveVel2D0 allocated yes/no - IF ( ALLOCATED(InData%WaveVel2D0) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel2D0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveVel2D0) ! WaveVel2D0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveVel2S0 allocated yes/no - IF ( ALLOCATED(InData%WaveVel2S0) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel2S0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveVel2S0) ! WaveVel2S0 - END IF - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IF ( .NOT. ALLOCATED(InData%WriteOutputHdr) ) 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%WriteOutputHdr,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WriteOutputHdr,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WriteOutputHdr,1), UBOUND(InData%WriteOutputHdr,1) - DO I = 1, LEN(InData%WriteOutputHdr) - IntKiBuf(Int_Xferred) = ICHAR(InData%WriteOutputHdr(i1)(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WriteOutputUnt) ) 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%WriteOutputUnt,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WriteOutputUnt,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WriteOutputUnt,1), UBOUND(InData%WriteOutputUnt,1) - DO I = 1, LEN(InData%WriteOutputUnt) - IntKiBuf(Int_Xferred) = ICHAR(InData%WriteOutputUnt(i1)(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevSeries2) ) 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%WaveElevSeries2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevSeries2,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevSeries2,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevSeries2,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElevSeries2,2), UBOUND(InData%WaveElevSeries2,2) - DO i1 = LBOUND(InData%WaveElevSeries2,1), UBOUND(InData%WaveElevSeries2,1) - ReKiBuf(Re_Xferred) = InData%WaveElevSeries2(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveAcc2D) ) 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%WaveAcc2D,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2D,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2D,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveAcc2D,3), UBOUND(InData%WaveAcc2D,3) - DO i2 = LBOUND(InData%WaveAcc2D,2), UBOUND(InData%WaveAcc2D,2) - DO i1 = LBOUND(InData%WaveAcc2D,1), UBOUND(InData%WaveAcc2D,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc2D(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveDynP2D) ) 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%WaveDynP2D,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2D,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2D,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2D,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveDynP2D,2), UBOUND(InData%WaveDynP2D,2) - DO i1 = LBOUND(InData%WaveDynP2D,1), UBOUND(InData%WaveDynP2D,1) - ReKiBuf(Re_Xferred) = InData%WaveDynP2D(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveAcc2S) ) 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%WaveAcc2S,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2S,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2S,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveAcc2S,3), UBOUND(InData%WaveAcc2S,3) - DO i2 = LBOUND(InData%WaveAcc2S,2), UBOUND(InData%WaveAcc2S,2) - DO i1 = LBOUND(InData%WaveAcc2S,1), UBOUND(InData%WaveAcc2S,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc2S(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveDynP2S) ) 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%WaveDynP2S,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2S,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2S,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2S,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveDynP2S,2), UBOUND(InData%WaveDynP2S,2) - DO i1 = LBOUND(InData%WaveDynP2S,1), UBOUND(InData%WaveDynP2S,1) - ReKiBuf(Re_Xferred) = InData%WaveDynP2S(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveVel2D) ) 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%WaveVel2D,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2D,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2D,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveVel2D,3), UBOUND(InData%WaveVel2D,3) - DO i2 = LBOUND(InData%WaveVel2D,2), UBOUND(InData%WaveVel2D,2) - DO i1 = LBOUND(InData%WaveVel2D,1), UBOUND(InData%WaveVel2D,1) - ReKiBuf(Re_Xferred) = InData%WaveVel2D(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveVel2S) ) 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%WaveVel2S,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveVel2S,3), UBOUND(InData%WaveVel2S,3) - DO i2 = LBOUND(InData%WaveVel2S,2), UBOUND(InData%WaveVel2S,2) - DO i1 = LBOUND(InData%WaveVel2S,1), UBOUND(InData%WaveVel2S,1) - ReKiBuf(Re_Xferred) = InData%WaveVel2S(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveAcc2D0) ) 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%WaveAcc2D0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2D0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D0,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2D0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D0,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveAcc2D0,3), UBOUND(InData%WaveAcc2D0,3) - DO i2 = LBOUND(InData%WaveAcc2D0,2), UBOUND(InData%WaveAcc2D0,2) - DO i1 = LBOUND(InData%WaveAcc2D0,1), UBOUND(InData%WaveAcc2D0,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc2D0(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveDynP2D0) ) 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%WaveDynP2D0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2D0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2D0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2D0,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveDynP2D0,2), UBOUND(InData%WaveDynP2D0,2) - DO i1 = LBOUND(InData%WaveDynP2D0,1), UBOUND(InData%WaveDynP2D0,1) - ReKiBuf(Re_Xferred) = InData%WaveDynP2D0(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveAcc2S0) ) 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%WaveAcc2S0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2S0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S0,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2S0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S0,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveAcc2S0,3), UBOUND(InData%WaveAcc2S0,3) - DO i2 = LBOUND(InData%WaveAcc2S0,2), UBOUND(InData%WaveAcc2S0,2) - DO i1 = LBOUND(InData%WaveAcc2S0,1), UBOUND(InData%WaveAcc2S0,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc2S0(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveDynP2S0) ) 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%WaveDynP2S0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2S0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2S0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2S0,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveDynP2S0,2), UBOUND(InData%WaveDynP2S0,2) - DO i1 = LBOUND(InData%WaveDynP2S0,1), UBOUND(InData%WaveDynP2S0,1) - ReKiBuf(Re_Xferred) = InData%WaveDynP2S0(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveVel2D0) ) 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%WaveVel2D0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2D0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D0,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2D0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D0,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveVel2D0,3), UBOUND(InData%WaveVel2D0,3) - DO i2 = LBOUND(InData%WaveVel2D0,2), UBOUND(InData%WaveVel2D0,2) - DO i1 = LBOUND(InData%WaveVel2D0,1), UBOUND(InData%WaveVel2D0,1) - ReKiBuf(Re_Xferred) = InData%WaveVel2D0(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveVel2S0) ) 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%WaveVel2S0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S0,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S0,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveVel2S0,3), UBOUND(InData%WaveVel2S0,3) - DO i2 = LBOUND(InData%WaveVel2S0,2), UBOUND(InData%WaveVel2S0,2) - DO i1 = LBOUND(InData%WaveVel2S0,1), UBOUND(InData%WaveVel2S0,1) - ReKiBuf(Re_Xferred) = InData%WaveVel2S0(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - END SUBROUTINE Waves2_PackInitOutput - - SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_InitOutputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackInitOutput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WriteOutputHdr 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%WriteOutputHdr)) DEALLOCATE(OutData%WriteOutputHdr) - ALLOCATE(OutData%WriteOutputHdr(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WriteOutputHdr.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WriteOutputHdr,1), UBOUND(OutData%WriteOutputHdr,1) - DO I = 1, LEN(OutData%WriteOutputHdr) - OutData%WriteOutputHdr(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WriteOutputUnt 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%WriteOutputUnt)) DEALLOCATE(OutData%WriteOutputUnt) - ALLOCATE(OutData%WriteOutputUnt(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WriteOutputUnt.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WriteOutputUnt,1), UBOUND(OutData%WriteOutputUnt,1) - DO I = 1, LEN(OutData%WriteOutputUnt) - OutData%WriteOutputUnt(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevSeries2 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevSeries2)) DEALLOCATE(OutData%WaveElevSeries2) - ALLOCATE(OutData%WaveElevSeries2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevSeries2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevSeries2,2), UBOUND(OutData%WaveElevSeries2,2) - DO i1 = LBOUND(OutData%WaveElevSeries2,1), UBOUND(OutData%WaveElevSeries2,1) - OutData%WaveElevSeries2(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc2D 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc2D)) DEALLOCATE(OutData%WaveAcc2D) - ALLOCATE(OutData%WaveAcc2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc2D.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveAcc2D,3), UBOUND(OutData%WaveAcc2D,3) - DO i2 = LBOUND(OutData%WaveAcc2D,2), UBOUND(OutData%WaveAcc2D,2) - DO i1 = LBOUND(OutData%WaveAcc2D,1), UBOUND(OutData%WaveAcc2D,1) - OutData%WaveAcc2D(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP2D 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDynP2D)) DEALLOCATE(OutData%WaveDynP2D) - ALLOCATE(OutData%WaveDynP2D(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP2D.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveDynP2D,2), UBOUND(OutData%WaveDynP2D,2) - DO i1 = LBOUND(OutData%WaveDynP2D,1), UBOUND(OutData%WaveDynP2D,1) - OutData%WaveDynP2D(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc2S 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc2S)) DEALLOCATE(OutData%WaveAcc2S) - ALLOCATE(OutData%WaveAcc2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc2S.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveAcc2S,3), UBOUND(OutData%WaveAcc2S,3) - DO i2 = LBOUND(OutData%WaveAcc2S,2), UBOUND(OutData%WaveAcc2S,2) - DO i1 = LBOUND(OutData%WaveAcc2S,1), UBOUND(OutData%WaveAcc2S,1) - OutData%WaveAcc2S(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP2S 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDynP2S)) DEALLOCATE(OutData%WaveDynP2S) - ALLOCATE(OutData%WaveDynP2S(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP2S.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveDynP2S,2), UBOUND(OutData%WaveDynP2S,2) - DO i1 = LBOUND(OutData%WaveDynP2S,1), UBOUND(OutData%WaveDynP2S,1) - OutData%WaveDynP2S(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel2D 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel2D)) DEALLOCATE(OutData%WaveVel2D) - ALLOCATE(OutData%WaveVel2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel2D.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveVel2D,3), UBOUND(OutData%WaveVel2D,3) - DO i2 = LBOUND(OutData%WaveVel2D,2), UBOUND(OutData%WaveVel2D,2) - DO i1 = LBOUND(OutData%WaveVel2D,1), UBOUND(OutData%WaveVel2D,1) - OutData%WaveVel2D(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel2S 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel2S)) DEALLOCATE(OutData%WaveVel2S) - ALLOCATE(OutData%WaveVel2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel2S.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveVel2S,3), UBOUND(OutData%WaveVel2S,3) - DO i2 = LBOUND(OutData%WaveVel2S,2), UBOUND(OutData%WaveVel2S,2) - DO i1 = LBOUND(OutData%WaveVel2S,1), UBOUND(OutData%WaveVel2S,1) - OutData%WaveVel2S(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc2D0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc2D0)) DEALLOCATE(OutData%WaveAcc2D0) - ALLOCATE(OutData%WaveAcc2D0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc2D0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveAcc2D0,3), UBOUND(OutData%WaveAcc2D0,3) - DO i2 = LBOUND(OutData%WaveAcc2D0,2), UBOUND(OutData%WaveAcc2D0,2) - DO i1 = LBOUND(OutData%WaveAcc2D0,1), UBOUND(OutData%WaveAcc2D0,1) - OutData%WaveAcc2D0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP2D0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDynP2D0)) DEALLOCATE(OutData%WaveDynP2D0) - ALLOCATE(OutData%WaveDynP2D0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP2D0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveDynP2D0,2), UBOUND(OutData%WaveDynP2D0,2) - DO i1 = LBOUND(OutData%WaveDynP2D0,1), UBOUND(OutData%WaveDynP2D0,1) - OutData%WaveDynP2D0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc2S0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc2S0)) DEALLOCATE(OutData%WaveAcc2S0) - ALLOCATE(OutData%WaveAcc2S0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc2S0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveAcc2S0,3), UBOUND(OutData%WaveAcc2S0,3) - DO i2 = LBOUND(OutData%WaveAcc2S0,2), UBOUND(OutData%WaveAcc2S0,2) - DO i1 = LBOUND(OutData%WaveAcc2S0,1), UBOUND(OutData%WaveAcc2S0,1) - OutData%WaveAcc2S0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP2S0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDynP2S0)) DEALLOCATE(OutData%WaveDynP2S0) - ALLOCATE(OutData%WaveDynP2S0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP2S0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveDynP2S0,2), UBOUND(OutData%WaveDynP2S0,2) - DO i1 = LBOUND(OutData%WaveDynP2S0,1), UBOUND(OutData%WaveDynP2S0,1) - OutData%WaveDynP2S0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel2D0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel2D0)) DEALLOCATE(OutData%WaveVel2D0) - ALLOCATE(OutData%WaveVel2D0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel2D0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveVel2D0,3), UBOUND(OutData%WaveVel2D0,3) - DO i2 = LBOUND(OutData%WaveVel2D0,2), UBOUND(OutData%WaveVel2D0,2) - DO i1 = LBOUND(OutData%WaveVel2D0,1), UBOUND(OutData%WaveVel2D0,1) - OutData%WaveVel2D0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel2S0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel2S0)) DEALLOCATE(OutData%WaveVel2S0) - ALLOCATE(OutData%WaveVel2S0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel2S0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveVel2S0,3), UBOUND(OutData%WaveVel2S0,3) - DO i2 = LBOUND(OutData%WaveVel2S0,2), UBOUND(OutData%WaveVel2S0,2) - DO i1 = LBOUND(OutData%WaveVel2S0,1), UBOUND(OutData%WaveVel2S0,1) - OutData%WaveVel2S0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - END SUBROUTINE Waves2_UnPackInitOutput - - SUBROUTINE Waves2_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_ContinuousStateType), INTENT(IN) :: SrcContStateData - TYPE(Waves2_ContinuousStateType), INTENT(INOUT) :: DstContStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyContState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstContStateData%DummyContState = SrcContStateData%DummyContState - END SUBROUTINE Waves2_CopyContState - - SUBROUTINE Waves2_DestroyContState( ContStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_ContinuousStateType), INTENT(INOUT) :: ContStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyContState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves2_DestroyContState - - SUBROUTINE Waves2_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_ContinuousStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackContState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyContState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyContState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves2_PackContState - - SUBROUTINE Waves2_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_ContinuousStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackContState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyContState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves2_UnPackContState - - SUBROUTINE Waves2_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_DiscreteStateType), INTENT(IN) :: SrcDiscStateData - TYPE(Waves2_DiscreteStateType), INTENT(INOUT) :: DstDiscStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyDiscState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstDiscStateData%DummyDiscState = SrcDiscStateData%DummyDiscState - END SUBROUTINE Waves2_CopyDiscState - - SUBROUTINE Waves2_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_DiscreteStateType), INTENT(INOUT) :: DiscStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyDiscState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves2_DestroyDiscState - - SUBROUTINE Waves2_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_DiscreteStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackDiscState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyDiscState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyDiscState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves2_PackDiscState - - SUBROUTINE Waves2_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_DiscreteStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackDiscState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyDiscState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves2_UnPackDiscState - - SUBROUTINE Waves2_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_ConstraintStateType), INTENT(IN) :: SrcConstrStateData - TYPE(Waves2_ConstraintStateType), INTENT(INOUT) :: DstConstrStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyConstrState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstConstrStateData%DummyConstrState = SrcConstrStateData%DummyConstrState - END SUBROUTINE Waves2_CopyConstrState - - SUBROUTINE Waves2_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_ConstraintStateType), INTENT(INOUT) :: ConstrStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyConstrState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves2_DestroyConstrState - - SUBROUTINE Waves2_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_ConstraintStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackConstrState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyConstrState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyConstrState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves2_PackConstrState - - SUBROUTINE Waves2_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_ConstraintStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackConstrState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyConstrState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves2_UnPackConstrState - - SUBROUTINE Waves2_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_OtherStateType), INTENT(IN) :: SrcOtherStateData - TYPE(Waves2_OtherStateType), INTENT(INOUT) :: DstOtherStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyOtherState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstOtherStateData%DummyOtherState = SrcOtherStateData%DummyOtherState - END SUBROUTINE Waves2_CopyOtherState - - SUBROUTINE Waves2_DestroyOtherState( OtherStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_OtherStateType), INTENT(INOUT) :: OtherStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyOtherState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves2_DestroyOtherState - - SUBROUTINE Waves2_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_OtherStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackOtherState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! DummyOtherState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IntKiBuf(Int_Xferred) = InData%DummyOtherState - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves2_PackOtherState - - SUBROUTINE Waves2_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_OtherStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackOtherState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyOtherState = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves2_UnPackOtherState - - SUBROUTINE Waves2_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_MiscVarType), INTENT(IN) :: SrcMiscData - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: DstMiscData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyMisc' -! - ErrStat = ErrID_None - ErrMsg = "" - DstMiscData%LastIndWave = SrcMiscData%LastIndWave - END SUBROUTINE Waves2_CopyMisc - - SUBROUTINE Waves2_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: MiscData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyMisc' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves2_DestroyMisc - - SUBROUTINE Waves2_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_MiscVarType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackMisc' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! LastIndWave - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IntKiBuf(Int_Xferred) = InData%LastIndWave - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves2_PackMisc - - SUBROUTINE Waves2_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackMisc' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%LastIndWave = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves2_UnPackMisc - - SUBROUTINE Waves2_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_ParameterType), INTENT(IN) :: SrcParamData - TYPE(Waves2_ParameterType), INTENT(INOUT) :: DstParamData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyParam' -! - ErrStat = ErrID_None - ErrMsg = "" - DstParamData%DT = SrcParamData%DT - DstParamData%WvDiffQTFF = SrcParamData%WvDiffQTFF - DstParamData%WvSumQTFF = SrcParamData%WvSumQTFF - DstParamData%NWaveElev = SrcParamData%NWaveElev - DstParamData%NStepWave = SrcParamData%NStepWave - DstParamData%NStepWave2 = SrcParamData%NStepWave2 -IF (ALLOCATED(SrcParamData%WaveTime)) THEN - i1_l = LBOUND(SrcParamData%WaveTime,1) - i1_u = UBOUND(SrcParamData%WaveTime,1) - IF (.NOT. ALLOCATED(DstParamData%WaveTime)) THEN - ALLOCATE(DstParamData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstParamData%WaveTime = SrcParamData%WaveTime -ENDIF -IF (ALLOCATED(SrcParamData%WaveElev2)) THEN - i1_l = LBOUND(SrcParamData%WaveElev2,1) - i1_u = UBOUND(SrcParamData%WaveElev2,1) - i2_l = LBOUND(SrcParamData%WaveElev2,2) - i2_u = UBOUND(SrcParamData%WaveElev2,2) - IF (.NOT. ALLOCATED(DstParamData%WaveElev2)) THEN - ALLOCATE(DstParamData%WaveElev2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstParamData%WaveElev2 = SrcParamData%WaveElev2 -ENDIF -IF (ALLOCATED(SrcParamData%OutParam)) THEN - i1_l = LBOUND(SrcParamData%OutParam,1) - i1_u = UBOUND(SrcParamData%OutParam,1) - IF (.NOT. ALLOCATED(DstParamData%OutParam)) THEN - ALLOCATE(DstParamData%OutParam(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%OutParam.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcParamData%OutParam,1), UBOUND(SrcParamData%OutParam,1) - CALL NWTC_Library_Copyoutparmtype( SrcParamData%OutParam(i1), DstParamData%OutParam(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - DstParamData%NumOuts = SrcParamData%NumOuts - DstParamData%NumOutAll = SrcParamData%NumOutAll - DstParamData%OutFmt = SrcParamData%OutFmt - DstParamData%OutSFmt = SrcParamData%OutSFmt - DstParamData%Delim = SrcParamData%Delim - DstParamData%UnOutFile = SrcParamData%UnOutFile - END SUBROUTINE Waves2_CopyParam - - SUBROUTINE Waves2_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_ParameterType), INTENT(INOUT) :: ParamData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyParam' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(ParamData%WaveTime)) THEN - DEALLOCATE(ParamData%WaveTime) -ENDIF -IF (ALLOCATED(ParamData%WaveElev2)) THEN - DEALLOCATE(ParamData%WaveElev2) -ENDIF -IF (ALLOCATED(ParamData%OutParam)) THEN -DO i1 = LBOUND(ParamData%OutParam,1), UBOUND(ParamData%OutParam,1) - CALL NWTC_Library_Destroyoutparmtype( ParamData%OutParam(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(ParamData%OutParam) -ENDIF - END SUBROUTINE Waves2_DestroyParam - - SUBROUTINE Waves2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_ParameterType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackParam' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Db_BufSz = Db_BufSz + 1 ! DT - Int_BufSz = Int_BufSz + 1 ! WvDiffQTFF - Int_BufSz = Int_BufSz + 1 ! WvSumQTFF - Int_BufSz = Int_BufSz + 1 ! NWaveElev - Int_BufSz = Int_BufSz + 1 ! NStepWave - Int_BufSz = Int_BufSz + 1 ! NStepWave2 - Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no - IF ( ALLOCATED(InData%WaveElev2) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElev2 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 - END IF - Int_BufSz = Int_BufSz + 1 ! OutParam allocated yes/no - IF ( ALLOCATED(InData%OutParam) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! OutParam upper/lower bounds for each dimension - ! Allocate buffers for subtypes, if any (we'll get sizes from these) - DO i1 = LBOUND(InData%OutParam,1), UBOUND(InData%OutParam,1) - Int_BufSz = Int_BufSz + 3 ! OutParam: size of buffers for each call to pack subtype - CALL NWTC_Library_Packoutparmtype( Re_Buf, Db_Buf, Int_Buf, InData%OutParam(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OutParam - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! OutParam - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! OutParam - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! OutParam - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 1 ! NumOuts - Int_BufSz = Int_BufSz + 1 ! NumOutAll - Int_BufSz = Int_BufSz + 1*LEN(InData%OutFmt) ! OutFmt - Int_BufSz = Int_BufSz + 1*LEN(InData%OutSFmt) ! OutSFmt - Int_BufSz = Int_BufSz + 1*LEN(InData%Delim) ! Delim - Int_BufSz = Int_BufSz + 1 ! UnOutFile - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - DbKiBuf(Db_Xferred) = InData%DT - Db_Xferred = Db_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%WvDiffQTFF, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%WvSumQTFF, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NWaveElev - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NStepWave - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NStepWave2 - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveTime) ) 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%WaveTime,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) - ReKiBuf(Re_Xferred) = InData%WaveTime(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElev2) ) 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%WaveElev2,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElev2,2), UBOUND(InData%WaveElev2,2) - DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) - ReKiBuf(Re_Xferred) = InData%WaveElev2(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%OutParam) ) 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%OutParam,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%OutParam,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%OutParam,1), UBOUND(InData%OutParam,1) - CALL NWTC_Library_Packoutparmtype( Re_Buf, Db_Buf, Int_Buf, InData%OutParam(i1), ErrStat2, ErrMsg2, OnlySize ) ! OutParam - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - IntKiBuf(Int_Xferred) = InData%NumOuts - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NumOutAll - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(InData%OutFmt) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutFmt(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%OutSFmt) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutSFmt(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%Delim) - IntKiBuf(Int_Xferred) = ICHAR(InData%Delim(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - IntKiBuf(Int_Xferred) = InData%UnOutFile - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves2_PackParam - - SUBROUTINE Waves2_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_ParameterType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackParam' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DT = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - OutData%WvDiffQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%WvDiffQTFF) - Int_Xferred = Int_Xferred + 1 - OutData%WvSumQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%WvSumQTFF) - Int_Xferred = Int_Xferred + 1 - OutData%NWaveElev = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NStepWave = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NStepWave2 = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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%WaveTime)) DEALLOCATE(OutData%WaveTime) - ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) - OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) - ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElev2,2), UBOUND(OutData%WaveElev2,2) - DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) - OutData%WaveElev2(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! OutParam 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%OutParam)) DEALLOCATE(OutData%OutParam) - ALLOCATE(OutData%OutParam(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%OutParam.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%OutParam,1), UBOUND(OutData%OutParam,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackoutparmtype( Re_Buf, Db_Buf, Int_Buf, OutData%OutParam(i1), ErrStat2, ErrMsg2 ) ! OutParam - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - OutData%NumOuts = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NumOutAll = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(OutData%OutFmt) - OutData%OutFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%OutSFmt) - OutData%OutSFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%Delim) - OutData%Delim(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%UnOutFile = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves2_UnPackParam - - SUBROUTINE Waves2_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_InputType), INTENT(IN) :: SrcInputData - TYPE(Waves2_InputType), INTENT(INOUT) :: DstInputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyInput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstInputData%DummyInput = SrcInputData%DummyInput - END SUBROUTINE Waves2_CopyInput - - SUBROUTINE Waves2_DestroyInput( InputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_InputType), INTENT(INOUT) :: InputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyInput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves2_DestroyInput - - SUBROUTINE Waves2_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_InputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackInput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyInput - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyInput - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves2_PackInput - - SUBROUTINE Waves2_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_InputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackInput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyInput = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves2_UnPackInput - - SUBROUTINE Waves2_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves2_OutputType), INTENT(IN) :: SrcOutputData - TYPE(Waves2_OutputType), INTENT(INOUT) :: DstOutputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyOutput' -! - ErrStat = ErrID_None - ErrMsg = "" -IF (ALLOCATED(SrcOutputData%WriteOutput)) THEN - i1_l = LBOUND(SrcOutputData%WriteOutput,1) - i1_u = UBOUND(SrcOutputData%WriteOutput,1) - IF (.NOT. ALLOCATED(DstOutputData%WriteOutput)) THEN - ALLOCATE(DstOutputData%WriteOutput(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstOutputData%WriteOutput.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstOutputData%WriteOutput = SrcOutputData%WriteOutput -ENDIF - END SUBROUTINE Waves2_CopyOutput - - SUBROUTINE Waves2_DestroyOutput( OutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves2_OutputType), INTENT(INOUT) :: OutputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyOutput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(OutputData%WriteOutput)) THEN - DEALLOCATE(OutputData%WriteOutput) -ENDIF - END SUBROUTINE Waves2_DestroyOutput - - SUBROUTINE Waves2_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves2_OutputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackOutput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! WriteOutput allocated yes/no - IF ( ALLOCATED(InData%WriteOutput) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WriteOutput upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WriteOutput) ! WriteOutput - END IF - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IF ( .NOT. ALLOCATED(InData%WriteOutput) ) 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%WriteOutput,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WriteOutput,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WriteOutput,1), UBOUND(InData%WriteOutput,1) - ReKiBuf(Re_Xferred) = InData%WriteOutput(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - END SUBROUTINE Waves2_PackOutput - - SUBROUTINE Waves2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves2_OutputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackOutput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WriteOutput 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%WriteOutput)) DEALLOCATE(OutData%WriteOutput) - ALLOCATE(OutData%WriteOutput(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WriteOutput.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WriteOutput,1), UBOUND(OutData%WriteOutput,1) - OutData%WriteOutput(i1) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - END SUBROUTINE Waves2_UnPackOutput - - - SUBROUTINE Waves2_Input_ExtrapInterp(u, t, u_out, t_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is given by the size of u -! -! expressions below based on either -! -! f(t) = a -! f(t) = a + b * t, or -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = u1, f(t2) = u2, f(t3) = u3 (as appropriate) -! -!.................................................................................................................................. - - TYPE(Waves2_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs - TYPE(Waves2_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: t_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_Input_ExtrapInterp' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - if ( size(t) .ne. size(u)) then - CALL SetErrStat(ErrID_Fatal,'size(t) must equal size(u)',ErrStat,ErrMsg,RoutineName) - RETURN - endif - order = SIZE(u) - 1 - IF ( order .eq. 0 ) THEN - CALL Waves2_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL Waves2_Input_ExtrapInterp1(u(1), u(2), t, u_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 2 ) THEN - CALL Waves2_Input_ExtrapInterp2(u(1), u(2), u(3), t, u_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE - CALL SetErrStat(ErrID_Fatal,'size(u) must be less than 4 (order must be less than 3).',ErrStat,ErrMsg,RoutineName) - RETURN - ENDIF - END SUBROUTINE Waves2_Input_ExtrapInterp - - - SUBROUTINE Waves2_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is 1. -! -! f(t) = a + b * t, or -! -! where a and b are determined as the solution to -! f(t1) = u1, f(t2) = u2 -! -!.................................................................................................................................. - - TYPE(Waves2_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 - TYPE(Waves2_InputType), INTENT(IN) :: u2 ! Input at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs - TYPE(Waves2_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(2) ! Times associated with the Inputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_Input_ExtrapInterp1' - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / t(2) - b = -(u1%DummyInput - u2%DummyInput) - u_out%DummyInput = u1%DummyInput + b * ScaleFactor - END SUBROUTINE Waves2_Input_ExtrapInterp1 - - - SUBROUTINE Waves2_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is 2. -! -! expressions below based on either -! -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = u1, f(t2) = u2, f(t3) = u3 -! -!.................................................................................................................................. - - TYPE(Waves2_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 - TYPE(Waves2_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 - TYPE(Waves2_InputType), INTENT(IN) :: u3 ! Input at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs - TYPE(Waves2_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(3) ! Times associated with the Inputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: c ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_Input_ExtrapInterp2' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(2), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(2) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(1), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / (t(2) * t(3) * (t(2) - t(3))) - b = (t(3)**2*(u1%DummyInput - u2%DummyInput) + t(2)**2*(-u1%DummyInput + u3%DummyInput))* scaleFactor - c = ( (t(2)-t(3))*u1%DummyInput + t(3)*u2%DummyInput - t(2)*u3%DummyInput ) * scaleFactor - u_out%DummyInput = u1%DummyInput + b + c * t_out - END SUBROUTINE Waves2_Input_ExtrapInterp2 - - - SUBROUTINE Waves2_Output_ExtrapInterp(y, t, y_out, t_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is given by the size of y -! -! expressions below based on either -! -! f(t) = a -! f(t) = a + b * t, or -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = y1, f(t2) = y2, f(t3) = y3 (as appropriate) -! -!.................................................................................................................................. - - TYPE(Waves2_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs - TYPE(Waves2_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: t_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_Output_ExtrapInterp' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - if ( size(t) .ne. size(y)) then - CALL SetErrStat(ErrID_Fatal,'size(t) must equal size(y)',ErrStat,ErrMsg,RoutineName) - RETURN - endif - order = SIZE(y) - 1 - IF ( order .eq. 0 ) THEN - CALL Waves2_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL Waves2_Output_ExtrapInterp1(y(1), y(2), t, y_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 2 ) THEN - CALL Waves2_Output_ExtrapInterp2(y(1), y(2), y(3), t, y_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE - CALL SetErrStat(ErrID_Fatal,'size(y) must be less than 4 (order must be less than 3).',ErrStat,ErrMsg,RoutineName) - RETURN - ENDIF - END SUBROUTINE Waves2_Output_ExtrapInterp - - - SUBROUTINE Waves2_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is 1. -! -! f(t) = a + b * t, or -! -! where a and b are determined as the solution to -! f(t1) = y1, f(t2) = y2 -! -!.................................................................................................................................. - - TYPE(Waves2_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 - TYPE(Waves2_OutputType), INTENT(IN) :: y2 ! Output at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs - TYPE(Waves2_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(2) ! Times associated with the Outputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_Output_ExtrapInterp1' - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - INTEGER :: i01 ! dim1 level 0 counter variable for arrays of ddts - INTEGER :: i1 ! dim1 counter variable for arrays - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / t(2) -IF (ALLOCATED(y_out%WriteOutput) .AND. ALLOCATED(y1%WriteOutput)) THEN - DO i1 = LBOUND(y_out%WriteOutput,1),UBOUND(y_out%WriteOutput,1) - b = -(y1%WriteOutput(i1) - y2%WriteOutput(i1)) - y_out%WriteOutput(i1) = y1%WriteOutput(i1) + b * ScaleFactor - END DO -END IF ! check if allocated - END SUBROUTINE Waves2_Output_ExtrapInterp1 - - - SUBROUTINE Waves2_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is 2. -! -! expressions below based on either -! -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = y1, f(t2) = y2, f(t3) = y3 -! -!.................................................................................................................................. - - TYPE(Waves2_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 - TYPE(Waves2_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 - TYPE(Waves2_OutputType), INTENT(IN) :: y3 ! Output at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs - TYPE(Waves2_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(3) ! Times associated with the Outputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: c ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_Output_ExtrapInterp2' - INTEGER :: i01 ! dim1 level 0 counter variable for arrays of ddts - INTEGER :: i1 ! dim1 counter variable for arrays - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(2), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(2) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(1), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / (t(2) * t(3) * (t(2) - t(3))) -IF (ALLOCATED(y_out%WriteOutput) .AND. ALLOCATED(y1%WriteOutput)) THEN - DO i1 = LBOUND(y_out%WriteOutput,1),UBOUND(y_out%WriteOutput,1) - b = (t(3)**2*(y1%WriteOutput(i1) - y2%WriteOutput(i1)) + t(2)**2*(-y1%WriteOutput(i1) + y3%WriteOutput(i1)))* scaleFactor - c = ( (t(2)-t(3))*y1%WriteOutput(i1) + t(3)*y2%WriteOutput(i1) - t(2)*y3%WriteOutput(i1) ) * scaleFactor - y_out%WriteOutput(i1) = y1%WriteOutput(i1) + b + c * t_out - END DO -END IF ! check if allocated - END SUBROUTINE Waves2_Output_ExtrapInterp2 - -END MODULE Waves2_Types -!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/hydrodyn/src/Waves_Types.f90 b/modules/hydrodyn/src/Waves_Types.f90 deleted file mode 100644 index 3c3a277d08..0000000000 --- a/modules/hydrodyn/src/Waves_Types.f90 +++ /dev/null @@ -1,3668 +0,0 @@ -!STARTOFREGISTRYGENERATEDFILE 'Waves_Types.f90' -! -! WARNING This file is generated automatically by the FAST registry. -! Do not edit. Your changes to this file will be lost. -! -! FAST Registry -!********************************************************************************************************************************* -! Waves_Types -!................................................................................................................................. -! This file is part of Waves. -! -! Copyright (C) 2012-2016 National Renewable Energy Laboratory -! -! Licensed under the Apache License, Version 2.0 (the "License"); -! you may not use this file except in compliance with the License. -! You may obtain a copy of the License at -! -! http://www.apache.org/licenses/LICENSE-2.0 -! -! Unless required by applicable law or agreed to in writing, software -! distributed under the License is distributed on an "AS IS" BASIS, -! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -! See the License for the specific language governing permissions and -! limitations under the License. -! -! -! W A R N I N G : This file was automatically generated from the FAST registry. Changes made to this file may be lost. -! -!********************************************************************************************************************************* -!> This module contains the user-defined types needed in Waves. It also contains copy, destroy, pack, and -!! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. -MODULE Waves_Types -!--------------------------------------------------------------------------------------------------------------------------------- -USE NWTC_Library -IMPLICIT NONE -! ========= Waves_InitInputType ======= - TYPE, PUBLIC :: Waves_InitInputType - CHARACTER(1024) :: InputFile !< Name of the input file [-] - CHARACTER(1024) :: DirRoot !< The name of the root file including the full path. 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. [-] - CHARACTER(1024) :: WvKinFile !< The root name of user input wave kinematics files [-] - LOGICAL :: WriteWvKin !< Flag indicating whether we are going to write out kinematics files. [Must be FALSE if WaveMod = 5 or 6, if TRUE then WvKinFile must have a string value and this is the rootname for all the output files] [-] - INTEGER(IntKi) :: UnSum !< The unit number for the HydroDyn summary file [-] - REAL(ReKi) :: Gravity !< Gravitational acceleration [(m/s^2)] - REAL(ReKi) :: MSL2SWL !< Offset between still-water level and mean sea level [positive upward; must be zero if using WAMIT] [(meters)] - REAL(SiKi) :: WvLowCOff !< Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4] [(rad/s)] - REAL(SiKi) :: WvHiCOff !< High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4] [(rad/s)] - REAL(SiKi) :: WaveDir !< Mean incident wave propagation heading direction [(degrees)] - INTEGER(IntKi) :: WaveNDir !< Number of wave directions [only used if WaveDirMod = 1] [Must be an odd number -- will be adjusted within the waves module] [(-)] - LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] - INTEGER(IntKi) :: WaveDirMod !< Directional wave spreading function {0: none, 1: COS2S} [only used if WaveMod=6] [-] - REAL(SiKi) :: WaveDirSpread !< Spreading coefficient [WaveMod=2,3,4 and WaveDirMod=1] [-] - REAL(SiKi) :: WaveDirRange !< Range of wave directions (full range: WaveDir +/- WaveDirRange/2) [only used if WaveMod=6] [(degrees)] - REAL(DbKi) :: WaveDT !< Time step for incident wave calculations [(sec)] - REAL(SiKi) :: WaveHs !< Significant wave height of incident waves [(meters)] - INTEGER(IntKi) :: WaveMod !< Incident wave kinematics model {0: none=still water, 1: plane progressive (regular), 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: white-noise spectrum, 4: user-defind spectrum from routine UserWaveSpctrm (irregular), 5: GH BLADED } [-] - CHARACTER(80) :: WaveModChr !< String to temporarially hold the value of the wave kinematics input line [-] - LOGICAL :: WaveNDAmp !< Flag for normally-distributed amplitudes in incident waves spectrum [flag] [-] - REAL(SiKi) :: WavePhase !< Specified phase for regular waves [(radians)] - REAL(SiKi) :: WavePkShp !< Peak shape parameter of incident wave spectrum [1.0 for Pierson-Moskowitz] [-] - CHARACTER(80) :: WavePkShpChr !< String to temporarially hold value of peak shape parameter input line [-] - INTEGER(IntKi) , DIMENSION(1:2) :: WaveSeed !< Random seeds of incident waves [-2147483648 to 2147483647] [-] - INTEGER(IntKi) :: WaveStMod !< Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} [-] - REAL(DbKi) :: WaveTMax !< Analysis time for incident wave calculations; the actual analysis time may be larger than this value in order for the maintain an effecient FFT [(sec)] - REAL(SiKi) :: WaveTp !< Peak spectral period of incident waves [(sec)] - REAL(SiKi) :: WtrDens !< Water density [(kg/m^3)] - REAL(SiKi) :: WtrDpth !< Water depth [(meters)] - INTEGER(IntKi) :: NWaveElev !< Number of points where the incident wave elevations can be output [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElevxi !< xi-coordinates for points where the incident wave elevations can be output [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElevyi !< yi-coordinates for points where the incident wave elevations can be output [(meters)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevXY !< Supplied by Driver: X-Y locations for WaveElevation output (for visualization). Index 1 corresponds to X or Y coordinate. Index 2 corresponds to point number. [-] - REAL(ReKi) :: PtfmLocationX !< Copy of X coordinate of platform location in the wave field, used to offset/phase-shift all wave kinematics to account for location in the farm [m] - REAL(ReKi) :: PtfmLocationY !< Copy of Y coordinate of platform location in the wave field, used to offset/phase-shift all wave kinematics to account for location in the farm [m] - INTEGER(IntKi) :: WaveFieldMod !< Wave field handling (-) (switch) 0: use individual HydroDyn inputs without adjustment, 1: adjust wave phases based on turbine offsets from farm origin [-] - INTEGER(IntKi) :: NWaveKin !< Number of points where the incident wave kinematics will be computed [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinxi !< xi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinyi !< yi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinzi !< zi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: CurrVxi !< xi-component of the current velocity at elevation i [(m/s)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: CurrVyi !< yi-component of the current velocity at elevation i [(m/s)] - REAL(SiKi) :: PCurrVxiPz0 !< xi-component of the partial derivative of the current velocity at elevation near mean sea level [(m/s)] - REAL(SiKi) :: PCurrVyiPz0 !< yi-component of the partial derivative of the current velocity at elevation near mean sea level [(m/s)] - TYPE(NWTC_RandomNumber_ParameterType) :: RNG !< Parameters for the pseudo random number generator [-] - END TYPE Waves_InitInputType -! ======================= -! ========= Waves_InitOutputType ======= - TYPE, PUBLIC :: Waves_InitOutputType - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevC0 !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveDirArr !< Wave direction array. Each frequency has a unique direction of WaveNDir > 1 [(degrees)] - REAL(SiKi) :: WaveDirMin !< Minimum wave direction. [(degrees)] - REAL(SiKi) :: WaveDirMax !< Maximum wave direction. [(degrees)] - REAL(SiKi) :: WaveDir !< Incident wave propagation heading direction [(degrees)] - INTEGER(IntKi) :: WaveNDir !< Number of wave directions [only used if WaveDirMod = 1] [Must be an odd number -- will be adjusted within the waves module] [(-)] - LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] - REAL(SiKi) :: WaveDOmega !< Frequency step for incident wave calculations [(rad/s)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinzi !< zi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean see level [(meters)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: PWaveDynP0 !< Instantaneous dynamic pressure of incident waves , at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed [(N/m^2)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveDynP !< Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed [(N/m^2)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed [(m/s^2)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: PWaveAcc0 !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed [(m/s^2)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] - REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: PWaveVel0 !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElev !< Instantaneous elevation time-series of incident waves at each of the NWaveElev points where the incident wave elevations can be output [(meters)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev0 !< Instantaneous elevation time-series of incident waves at the platform reference point [(meters)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevMD !< Instantaneous elevation time-series of incident waves at hard coded grid for temporary use in MoorDyn [(m)] - REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevSeries !< Instantaneous elevation time-series at each of the points given by WaveElevXY. Used for making movies of the waves. First index is the timestep. Second index is XY point number corresponding to second index of WaveElevXY. [(m)] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined [(sec)] - REAL(DbKi) :: WaveTMax !< Analysis time for incident wave calculations; the actual analysis time may be larger than this value in order for the maintain an effecient FFT [(sec)] - INTEGER(IntKi) , DIMENSION(:,:), ALLOCATABLE :: nodeInWater !< Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated [-] - REAL(SiKi) :: RhoXg !< = WtrDens*Gravity [-] - INTEGER(IntKi) :: NStepWave !< Total number of frequency components = total number of time steps in the incident wave [-] - INTEGER(IntKi) :: NStepWave2 !< NStepWave / 2 [-] - END TYPE Waves_InitOutputType -! ======================= -! ========= Waves_ContinuousStateType ======= - TYPE, PUBLIC :: Waves_ContinuousStateType - REAL(SiKi) :: DummyContState !< Remove this variable if you have continuous states [-] - END TYPE Waves_ContinuousStateType -! ======================= -! ========= Waves_DiscreteStateType ======= - TYPE, PUBLIC :: Waves_DiscreteStateType - REAL(SiKi) :: DummyDiscState !< Remove this variable if you have discrete states [-] - END TYPE Waves_DiscreteStateType -! ======================= -! ========= Waves_ConstraintStateType ======= - TYPE, PUBLIC :: Waves_ConstraintStateType - REAL(SiKi) :: DummyConstrState !< Remove this variable if you have constraint states [-] - END TYPE Waves_ConstraintStateType -! ======================= -! ========= Waves_OtherStateType ======= - TYPE, PUBLIC :: Waves_OtherStateType - INTEGER(IntKi) :: DummyOtherState !< Remove this variable if you have other states [-] - END TYPE Waves_OtherStateType -! ======================= -! ========= Waves_MiscVarType ======= - TYPE, PUBLIC :: Waves_MiscVarType - INTEGER(IntKi) :: DummyMiscVar !< Remove this variable if you have misc/optimization variables [-] - END TYPE Waves_MiscVarType -! ======================= -! ========= Waves_ParameterType ======= - TYPE, PUBLIC :: Waves_ParameterType - REAL(DbKi) :: DT !< Time step for continuous state integration & discrete state update [seconds] - REAL(DbKi) :: WaveTMax !< Analysis time for incident wave calculations; the actual analysis time may be larger than this value in order for the maintain an effecient FFT [(sec)] - INTEGER(IntKi) :: NStepWave !< Total number of frequency components = total number of time steps in the incident wave [-] - INTEGER(IntKi) :: WaveNDir !< Number of wave directions [only used if WaveDirMod = 1] [Must be an odd number -- will be adjusted within the waves module] [(-)] - LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] - END TYPE Waves_ParameterType -! ======================= -! ========= Waves_InputType ======= - TYPE, PUBLIC :: Waves_InputType - REAL(SiKi) :: DummyInput !< Remove this variable if you have input data [-] - END TYPE Waves_InputType -! ======================= -! ========= Waves_OutputType ======= - TYPE, PUBLIC :: Waves_OutputType - REAL(SiKi) :: DummyOutput !< Remove this variable if you have output data [-] - END TYPE Waves_OutputType -! ======================= -CONTAINS - SUBROUTINE Waves_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_InitInputType), INTENT(IN) :: SrcInitInputData - TYPE(Waves_InitInputType), INTENT(INOUT) :: DstInitInputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyInitInput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstInitInputData%InputFile = SrcInitInputData%InputFile - DstInitInputData%DirRoot = SrcInitInputData%DirRoot - DstInitInputData%WvKinFile = SrcInitInputData%WvKinFile - DstInitInputData%WriteWvKin = SrcInitInputData%WriteWvKin - DstInitInputData%UnSum = SrcInitInputData%UnSum - DstInitInputData%Gravity = SrcInitInputData%Gravity - DstInitInputData%MSL2SWL = SrcInitInputData%MSL2SWL - DstInitInputData%WvLowCOff = SrcInitInputData%WvLowCOff - DstInitInputData%WvHiCOff = SrcInitInputData%WvHiCOff - DstInitInputData%WaveDir = SrcInitInputData%WaveDir - DstInitInputData%WaveNDir = SrcInitInputData%WaveNDir - DstInitInputData%WaveMultiDir = SrcInitInputData%WaveMultiDir - DstInitInputData%WaveDirMod = SrcInitInputData%WaveDirMod - DstInitInputData%WaveDirSpread = SrcInitInputData%WaveDirSpread - DstInitInputData%WaveDirRange = SrcInitInputData%WaveDirRange - DstInitInputData%WaveDT = SrcInitInputData%WaveDT - DstInitInputData%WaveHs = SrcInitInputData%WaveHs - DstInitInputData%WaveMod = SrcInitInputData%WaveMod - DstInitInputData%WaveModChr = SrcInitInputData%WaveModChr - DstInitInputData%WaveNDAmp = SrcInitInputData%WaveNDAmp - DstInitInputData%WavePhase = SrcInitInputData%WavePhase - DstInitInputData%WavePkShp = SrcInitInputData%WavePkShp - DstInitInputData%WavePkShpChr = SrcInitInputData%WavePkShpChr - DstInitInputData%WaveSeed = SrcInitInputData%WaveSeed - DstInitInputData%WaveStMod = SrcInitInputData%WaveStMod - DstInitInputData%WaveTMax = SrcInitInputData%WaveTMax - DstInitInputData%WaveTp = SrcInitInputData%WaveTp - DstInitInputData%WtrDens = SrcInitInputData%WtrDens - DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth - DstInitInputData%NWaveElev = SrcInitInputData%NWaveElev -IF (ALLOCATED(SrcInitInputData%WaveElevxi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElevxi,1) - i1_u = UBOUND(SrcInitInputData%WaveElevxi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevxi)) THEN - ALLOCATE(DstInitInputData%WaveElevxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElevxi = SrcInitInputData%WaveElevxi -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveElevyi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElevyi,1) - i1_u = UBOUND(SrcInitInputData%WaveElevyi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevyi)) THEN - ALLOCATE(DstInitInputData%WaveElevyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElevyi = SrcInitInputData%WaveElevyi -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveElevXY)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElevXY,1) - i1_u = UBOUND(SrcInitInputData%WaveElevXY,1) - i2_l = LBOUND(SrcInitInputData%WaveElevXY,2) - i2_u = UBOUND(SrcInitInputData%WaveElevXY,2) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElevXY)) THEN - ALLOCATE(DstInitInputData%WaveElevXY(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevXY.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElevXY = SrcInitInputData%WaveElevXY -ENDIF - DstInitInputData%PtfmLocationX = SrcInitInputData%PtfmLocationX - DstInitInputData%PtfmLocationY = SrcInitInputData%PtfmLocationY - DstInitInputData%WaveFieldMod = SrcInitInputData%WaveFieldMod - DstInitInputData%NWaveKin = SrcInitInputData%NWaveKin -IF (ALLOCATED(SrcInitInputData%WaveKinxi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveKinxi,1) - i1_u = UBOUND(SrcInitInputData%WaveKinxi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveKinxi)) THEN - ALLOCATE(DstInitInputData%WaveKinxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveKinxi = SrcInitInputData%WaveKinxi -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveKinyi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveKinyi,1) - i1_u = UBOUND(SrcInitInputData%WaveKinyi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveKinyi)) THEN - ALLOCATE(DstInitInputData%WaveKinyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveKinyi = SrcInitInputData%WaveKinyi -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveKinzi)) THEN - i1_l = LBOUND(SrcInitInputData%WaveKinzi,1) - i1_u = UBOUND(SrcInitInputData%WaveKinzi,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveKinzi)) THEN - ALLOCATE(DstInitInputData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveKinzi = SrcInitInputData%WaveKinzi -ENDIF -IF (ALLOCATED(SrcInitInputData%CurrVxi)) THEN - i1_l = LBOUND(SrcInitInputData%CurrVxi,1) - i1_u = UBOUND(SrcInitInputData%CurrVxi,1) - IF (.NOT. ALLOCATED(DstInitInputData%CurrVxi)) THEN - ALLOCATE(DstInitInputData%CurrVxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%CurrVxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%CurrVxi = SrcInitInputData%CurrVxi -ENDIF -IF (ALLOCATED(SrcInitInputData%CurrVyi)) THEN - i1_l = LBOUND(SrcInitInputData%CurrVyi,1) - i1_u = UBOUND(SrcInitInputData%CurrVyi,1) - IF (.NOT. ALLOCATED(DstInitInputData%CurrVyi)) THEN - ALLOCATE(DstInitInputData%CurrVyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%CurrVyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%CurrVyi = SrcInitInputData%CurrVyi -ENDIF - DstInitInputData%PCurrVxiPz0 = SrcInitInputData%PCurrVxiPz0 - DstInitInputData%PCurrVyiPz0 = SrcInitInputData%PCurrVyiPz0 - CALL NWTC_Library_Copynwtc_randomnumber_parametertype( SrcInitInputData%RNG, DstInitInputData%RNG, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - END SUBROUTINE Waves_CopyInitInput - - SUBROUTINE Waves_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_InitInputType), INTENT(INOUT) :: InitInputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyInitInput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(InitInputData%WaveElevxi)) THEN - DEALLOCATE(InitInputData%WaveElevxi) -ENDIF -IF (ALLOCATED(InitInputData%WaveElevyi)) THEN - DEALLOCATE(InitInputData%WaveElevyi) -ENDIF -IF (ALLOCATED(InitInputData%WaveElevXY)) THEN - DEALLOCATE(InitInputData%WaveElevXY) -ENDIF -IF (ALLOCATED(InitInputData%WaveKinxi)) THEN - DEALLOCATE(InitInputData%WaveKinxi) -ENDIF -IF (ALLOCATED(InitInputData%WaveKinyi)) THEN - DEALLOCATE(InitInputData%WaveKinyi) -ENDIF -IF (ALLOCATED(InitInputData%WaveKinzi)) THEN - DEALLOCATE(InitInputData%WaveKinzi) -ENDIF -IF (ALLOCATED(InitInputData%CurrVxi)) THEN - DEALLOCATE(InitInputData%CurrVxi) -ENDIF -IF (ALLOCATED(InitInputData%CurrVyi)) THEN - DEALLOCATE(InitInputData%CurrVyi) -ENDIF - CALL NWTC_Library_Destroynwtc_randomnumber_parametertype( InitInputData%RNG, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - END SUBROUTINE Waves_DestroyInitInput - - SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_InitInputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackInitInput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1*LEN(InData%InputFile) ! InputFile - Int_BufSz = Int_BufSz + 1*LEN(InData%DirRoot) ! DirRoot - Int_BufSz = Int_BufSz + 1*LEN(InData%WvKinFile) ! WvKinFile - Int_BufSz = Int_BufSz + 1 ! WriteWvKin - Int_BufSz = Int_BufSz + 1 ! UnSum - Re_BufSz = Re_BufSz + 1 ! Gravity - Re_BufSz = Re_BufSz + 1 ! MSL2SWL - Re_BufSz = Re_BufSz + 1 ! WvLowCOff - Re_BufSz = Re_BufSz + 1 ! WvHiCOff - Re_BufSz = Re_BufSz + 1 ! WaveDir - Int_BufSz = Int_BufSz + 1 ! WaveNDir - Int_BufSz = Int_BufSz + 1 ! WaveMultiDir - Int_BufSz = Int_BufSz + 1 ! WaveDirMod - Re_BufSz = Re_BufSz + 1 ! WaveDirSpread - Re_BufSz = Re_BufSz + 1 ! WaveDirRange - Db_BufSz = Db_BufSz + 1 ! WaveDT - Re_BufSz = Re_BufSz + 1 ! WaveHs - Int_BufSz = Int_BufSz + 1 ! WaveMod - Int_BufSz = Int_BufSz + 1*LEN(InData%WaveModChr) ! WaveModChr - Int_BufSz = Int_BufSz + 1 ! WaveNDAmp - Re_BufSz = Re_BufSz + 1 ! WavePhase - Re_BufSz = Re_BufSz + 1 ! WavePkShp - Int_BufSz = Int_BufSz + 1*LEN(InData%WavePkShpChr) ! WavePkShpChr - Int_BufSz = Int_BufSz + SIZE(InData%WaveSeed) ! WaveSeed - Int_BufSz = Int_BufSz + 1 ! WaveStMod - Db_BufSz = Db_BufSz + 1 ! WaveTMax - Re_BufSz = Re_BufSz + 1 ! WaveTp - Re_BufSz = Re_BufSz + 1 ! WtrDens - Re_BufSz = Re_BufSz + 1 ! WtrDpth - Int_BufSz = Int_BufSz + 1 ! NWaveElev - Int_BufSz = Int_BufSz + 1 ! WaveElevxi allocated yes/no - IF ( ALLOCATED(InData%WaveElevxi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveElevxi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevxi) ! WaveElevxi - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevyi allocated yes/no - IF ( ALLOCATED(InData%WaveElevyi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveElevyi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevyi) ! WaveElevyi - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevXY allocated yes/no - IF ( ALLOCATED(InData%WaveElevXY) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevXY upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevXY) ! WaveElevXY - END IF - Re_BufSz = Re_BufSz + 1 ! PtfmLocationX - Re_BufSz = Re_BufSz + 1 ! PtfmLocationY - Int_BufSz = Int_BufSz + 1 ! WaveFieldMod - Int_BufSz = Int_BufSz + 1 ! NWaveKin - Int_BufSz = Int_BufSz + 1 ! WaveKinxi allocated yes/no - IF ( ALLOCATED(InData%WaveKinxi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveKinxi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveKinxi) ! WaveKinxi - END IF - Int_BufSz = Int_BufSz + 1 ! WaveKinyi allocated yes/no - IF ( ALLOCATED(InData%WaveKinyi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveKinyi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveKinyi) ! WaveKinyi - END IF - Int_BufSz = Int_BufSz + 1 ! WaveKinzi allocated yes/no - IF ( ALLOCATED(InData%WaveKinzi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveKinzi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveKinzi) ! WaveKinzi - END IF - Int_BufSz = Int_BufSz + 1 ! CurrVxi allocated yes/no - IF ( ALLOCATED(InData%CurrVxi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! CurrVxi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%CurrVxi) ! CurrVxi - END IF - Int_BufSz = Int_BufSz + 1 ! CurrVyi allocated yes/no - IF ( ALLOCATED(InData%CurrVyi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! CurrVyi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%CurrVyi) ! CurrVyi - END IF - Re_BufSz = Re_BufSz + 1 ! PCurrVxiPz0 - Re_BufSz = Re_BufSz + 1 ! PCurrVyiPz0 - ! Allocate buffers for subtypes, if any (we'll get sizes from these) - Int_BufSz = Int_BufSz + 3 ! RNG: size of buffers for each call to pack subtype - CALL NWTC_Library_Packnwtc_randomnumber_parametertype( Re_Buf, Db_Buf, Int_Buf, InData%RNG, ErrStat2, ErrMsg2, .TRUE. ) ! RNG - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! RNG - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! RNG - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! RNG - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - DO I = 1, LEN(InData%InputFile) - IntKiBuf(Int_Xferred) = ICHAR(InData%InputFile(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%DirRoot) - IntKiBuf(Int_Xferred) = ICHAR(InData%DirRoot(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(InData%WvKinFile) - IntKiBuf(Int_Xferred) = ICHAR(InData%WvKinFile(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - IntKiBuf(Int_Xferred) = TRANSFER(InData%WriteWvKin, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%UnSum - Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%Gravity - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%MSL2SWL - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WvLowCOff - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WvHiCOff - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveDir - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%WaveNDir - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%WaveDirMod - Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveDirSpread - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveDirRange - Re_Xferred = Re_Xferred + 1 - DbKiBuf(Db_Xferred) = InData%WaveDT - Db_Xferred = Db_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveHs - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%WaveMod - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(InData%WaveModChr) - IntKiBuf(Int_Xferred) = ICHAR(InData%WaveModChr(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveNDAmp, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WavePhase - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WavePkShp - Re_Xferred = Re_Xferred + 1 - DO I = 1, LEN(InData%WavePkShpChr) - IntKiBuf(Int_Xferred) = ICHAR(InData%WavePkShpChr(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO i1 = LBOUND(InData%WaveSeed,1), UBOUND(InData%WaveSeed,1) - IntKiBuf(Int_Xferred) = InData%WaveSeed(i1) - Int_Xferred = Int_Xferred + 1 - END DO - IntKiBuf(Int_Xferred) = InData%WaveStMod - Int_Xferred = Int_Xferred + 1 - DbKiBuf(Db_Xferred) = InData%WaveTMax - Db_Xferred = Db_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveTp - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WtrDens - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WtrDpth - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NWaveElev - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveElevxi) ) 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%WaveElevxi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevxi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveElevxi,1), UBOUND(InData%WaveElevxi,1) - ReKiBuf(Re_Xferred) = InData%WaveElevxi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevyi) ) 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%WaveElevyi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevyi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveElevyi,1), UBOUND(InData%WaveElevyi,1) - ReKiBuf(Re_Xferred) = InData%WaveElevyi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevXY) ) 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%WaveElevXY,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevXY,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElevXY,2), UBOUND(InData%WaveElevXY,2) - DO i1 = LBOUND(InData%WaveElevXY,1), UBOUND(InData%WaveElevXY,1) - ReKiBuf(Re_Xferred) = InData%WaveElevXY(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - ReKiBuf(Re_Xferred) = InData%PtfmLocationX - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%PtfmLocationY - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%WaveFieldMod - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NWaveKin - Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveKinxi) ) 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%WaveKinxi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinxi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveKinxi,1), UBOUND(InData%WaveKinxi,1) - ReKiBuf(Re_Xferred) = InData%WaveKinxi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveKinyi) ) 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%WaveKinyi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinyi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveKinyi,1), UBOUND(InData%WaveKinyi,1) - ReKiBuf(Re_Xferred) = InData%WaveKinyi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveKinzi) ) 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%WaveKinzi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinzi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveKinzi,1), UBOUND(InData%WaveKinzi,1) - ReKiBuf(Re_Xferred) = InData%WaveKinzi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%CurrVxi) ) 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%CurrVxi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%CurrVxi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%CurrVxi,1), UBOUND(InData%CurrVxi,1) - ReKiBuf(Re_Xferred) = InData%CurrVxi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%CurrVyi) ) 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%CurrVyi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%CurrVyi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%CurrVyi,1), UBOUND(InData%CurrVyi,1) - ReKiBuf(Re_Xferred) = InData%CurrVyi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - ReKiBuf(Re_Xferred) = InData%PCurrVxiPz0 - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%PCurrVyiPz0 - Re_Xferred = Re_Xferred + 1 - CALL NWTC_Library_Packnwtc_randomnumber_parametertype( Re_Buf, Db_Buf, Int_Buf, InData%RNG, ErrStat2, ErrMsg2, OnlySize ) ! RNG - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END SUBROUTINE Waves_PackInitInput - - SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_InitInputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackInitInput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - DO I = 1, LEN(OutData%InputFile) - OutData%InputFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%DirRoot) - OutData%DirRoot(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - DO I = 1, LEN(OutData%WvKinFile) - OutData%WvKinFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%WriteWvKin = TRANSFER(IntKiBuf(Int_Xferred), OutData%WriteWvKin) - Int_Xferred = Int_Xferred + 1 - OutData%UnSum = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%Gravity = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%MSL2SWL = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%WvLowCOff = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WvHiCOff = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveDir = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveNDir = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WaveMultiDir = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveMultiDir) - Int_Xferred = Int_Xferred + 1 - OutData%WaveDirMod = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WaveDirSpread = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveDirRange = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveDT = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - OutData%WaveHs = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveMod = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(OutData%WaveModChr) - OutData%WaveModChr(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - OutData%WaveNDAmp = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveNDAmp) - Int_Xferred = Int_Xferred + 1 - OutData%WavePhase = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WavePkShp = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - DO I = 1, LEN(OutData%WavePkShpChr) - OutData%WavePkShpChr(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I - i1_l = LBOUND(OutData%WaveSeed,1) - i1_u = UBOUND(OutData%WaveSeed,1) - DO i1 = LBOUND(OutData%WaveSeed,1), UBOUND(OutData%WaveSeed,1) - OutData%WaveSeed(i1) = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END DO - OutData%WaveStMod = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WaveTMax = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - OutData%WaveTp = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WtrDens = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WtrDpth = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%NWaveElev = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevxi 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%WaveElevxi)) DEALLOCATE(OutData%WaveElevxi) - ALLOCATE(OutData%WaveElevxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveElevxi,1), UBOUND(OutData%WaveElevxi,1) - OutData%WaveElevxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevyi 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%WaveElevyi)) DEALLOCATE(OutData%WaveElevyi) - ALLOCATE(OutData%WaveElevyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveElevyi,1), UBOUND(OutData%WaveElevyi,1) - OutData%WaveElevyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevXY 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevXY)) DEALLOCATE(OutData%WaveElevXY) - ALLOCATE(OutData%WaveElevXY(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevXY.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevXY,2), UBOUND(OutData%WaveElevXY,2) - DO i1 = LBOUND(OutData%WaveElevXY,1), UBOUND(OutData%WaveElevXY,1) - OutData%WaveElevXY(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - OutData%PtfmLocationX = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%PtfmLocationY = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%WaveFieldMod = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NWaveKin = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinxi 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%WaveKinxi)) DEALLOCATE(OutData%WaveKinxi) - ALLOCATE(OutData%WaveKinxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveKinxi,1), UBOUND(OutData%WaveKinxi,1) - OutData%WaveKinxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinyi 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%WaveKinyi)) DEALLOCATE(OutData%WaveKinyi) - ALLOCATE(OutData%WaveKinyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveKinyi,1), UBOUND(OutData%WaveKinyi,1) - OutData%WaveKinyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinzi 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%WaveKinzi)) DEALLOCATE(OutData%WaveKinzi) - ALLOCATE(OutData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveKinzi,1), UBOUND(OutData%WaveKinzi,1) - OutData%WaveKinzi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CurrVxi 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%CurrVxi)) DEALLOCATE(OutData%CurrVxi) - ALLOCATE(OutData%CurrVxi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%CurrVxi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%CurrVxi,1), UBOUND(OutData%CurrVxi,1) - OutData%CurrVxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CurrVyi 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%CurrVyi)) DEALLOCATE(OutData%CurrVyi) - ALLOCATE(OutData%CurrVyi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%CurrVyi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%CurrVyi,1), UBOUND(OutData%CurrVyi,1) - OutData%CurrVyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - OutData%PCurrVxiPz0 = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%PCurrVyiPz0 = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpacknwtc_randomnumber_parametertype( Re_Buf, Db_Buf, Int_Buf, OutData%RNG, ErrStat2, ErrMsg2 ) ! RNG - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END SUBROUTINE Waves_UnPackInitInput - - SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_InitOutputType), INTENT(IN) :: SrcInitOutputData - TYPE(Waves_InitOutputType), INTENT(INOUT) :: DstInitOutputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyInitOutput' -! - ErrStat = ErrID_None - ErrMsg = "" -IF (ALLOCATED(SrcInitOutputData%WaveElevC0)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveElevC0,1) - i1_u = UBOUND(SrcInitOutputData%WaveElevC0,1) - i2_l = LBOUND(SrcInitOutputData%WaveElevC0,2) - i2_u = UBOUND(SrcInitOutputData%WaveElevC0,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElevC0)) THEN - ALLOCATE(DstInitOutputData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveElevC0 = SrcInitOutputData%WaveElevC0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveDirArr)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveDirArr,1) - i1_u = UBOUND(SrcInitOutputData%WaveDirArr,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDirArr)) THEN - ALLOCATE(DstInitOutputData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveDirArr = SrcInitOutputData%WaveDirArr -ENDIF - DstInitOutputData%WaveDirMin = SrcInitOutputData%WaveDirMin - DstInitOutputData%WaveDirMax = SrcInitOutputData%WaveDirMax - DstInitOutputData%WaveDir = SrcInitOutputData%WaveDir - DstInitOutputData%WaveNDir = SrcInitOutputData%WaveNDir - DstInitOutputData%WaveMultiDir = SrcInitOutputData%WaveMultiDir - DstInitOutputData%WaveDOmega = SrcInitOutputData%WaveDOmega -IF (ALLOCATED(SrcInitOutputData%WaveKinzi)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveKinzi,1) - i1_u = UBOUND(SrcInitOutputData%WaveKinzi,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveKinzi)) THEN - ALLOCATE(DstInitOutputData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveKinzi = SrcInitOutputData%WaveKinzi -ENDIF -IF (ALLOCATED(SrcInitOutputData%PWaveDynP0)) THEN - i1_l = LBOUND(SrcInitOutputData%PWaveDynP0,1) - i1_u = UBOUND(SrcInitOutputData%PWaveDynP0,1) - i2_l = LBOUND(SrcInitOutputData%PWaveDynP0,2) - i2_u = UBOUND(SrcInitOutputData%PWaveDynP0,2) - IF (.NOT. ALLOCATED(DstInitOutputData%PWaveDynP0)) THEN - ALLOCATE(DstInitOutputData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%PWaveDynP0 = SrcInitOutputData%PWaveDynP0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveDynP)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveDynP,1) - i1_u = UBOUND(SrcInitOutputData%WaveDynP,1) - i2_l = LBOUND(SrcInitOutputData%WaveDynP,2) - i2_u = UBOUND(SrcInitOutputData%WaveDynP,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP)) THEN - ALLOCATE(DstInitOutputData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveDynP = SrcInitOutputData%WaveDynP -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveAcc)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveAcc,1) - i1_u = UBOUND(SrcInitOutputData%WaveAcc,1) - i2_l = LBOUND(SrcInitOutputData%WaveAcc,2) - i2_u = UBOUND(SrcInitOutputData%WaveAcc,2) - i3_l = LBOUND(SrcInitOutputData%WaveAcc,3) - i3_u = UBOUND(SrcInitOutputData%WaveAcc,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc)) THEN - ALLOCATE(DstInitOutputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveAcc = SrcInitOutputData%WaveAcc -ENDIF -IF (ALLOCATED(SrcInitOutputData%PWaveAcc0)) THEN - i1_l = LBOUND(SrcInitOutputData%PWaveAcc0,1) - i1_u = UBOUND(SrcInitOutputData%PWaveAcc0,1) - i2_l = LBOUND(SrcInitOutputData%PWaveAcc0,2) - i2_u = UBOUND(SrcInitOutputData%PWaveAcc0,2) - i3_l = LBOUND(SrcInitOutputData%PWaveAcc0,3) - i3_u = UBOUND(SrcInitOutputData%PWaveAcc0,3) - IF (.NOT. ALLOCATED(DstInitOutputData%PWaveAcc0)) THEN - ALLOCATE(DstInitOutputData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%PWaveAcc0 = SrcInitOutputData%PWaveAcc0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveVel)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveVel,1) - i1_u = UBOUND(SrcInitOutputData%WaveVel,1) - i2_l = LBOUND(SrcInitOutputData%WaveVel,2) - i2_u = UBOUND(SrcInitOutputData%WaveVel,2) - i3_l = LBOUND(SrcInitOutputData%WaveVel,3) - i3_u = UBOUND(SrcInitOutputData%WaveVel,3) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel)) THEN - ALLOCATE(DstInitOutputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveVel = SrcInitOutputData%WaveVel -ENDIF -IF (ALLOCATED(SrcInitOutputData%PWaveVel0)) THEN - i1_l = LBOUND(SrcInitOutputData%PWaveVel0,1) - i1_u = UBOUND(SrcInitOutputData%PWaveVel0,1) - i2_l = LBOUND(SrcInitOutputData%PWaveVel0,2) - i2_u = UBOUND(SrcInitOutputData%PWaveVel0,2) - i3_l = LBOUND(SrcInitOutputData%PWaveVel0,3) - i3_u = UBOUND(SrcInitOutputData%PWaveVel0,3) - IF (.NOT. ALLOCATED(DstInitOutputData%PWaveVel0)) THEN - ALLOCATE(DstInitOutputData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%PWaveVel0 = SrcInitOutputData%PWaveVel0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveElev)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveElev,1) - i1_u = UBOUND(SrcInitOutputData%WaveElev,1) - i2_l = LBOUND(SrcInitOutputData%WaveElev,2) - i2_u = UBOUND(SrcInitOutputData%WaveElev,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElev)) THEN - ALLOCATE(DstInitOutputData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveElev = SrcInitOutputData%WaveElev -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveElev0)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveElev0,1) - i1_u = UBOUND(SrcInitOutputData%WaveElev0,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElev0)) THEN - ALLOCATE(DstInitOutputData%WaveElev0(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveElev0 = SrcInitOutputData%WaveElev0 -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveElevMD)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveElevMD,1) - i1_u = UBOUND(SrcInitOutputData%WaveElevMD,1) - i2_l = LBOUND(SrcInitOutputData%WaveElevMD,2) - i2_u = UBOUND(SrcInitOutputData%WaveElevMD,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElevMD)) THEN - ALLOCATE(DstInitOutputData%WaveElevMD(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevMD.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveElevMD = SrcInitOutputData%WaveElevMD -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveElevSeries)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveElevSeries,1) - i1_u = UBOUND(SrcInitOutputData%WaveElevSeries,1) - i2_l = LBOUND(SrcInitOutputData%WaveElevSeries,2) - i2_u = UBOUND(SrcInitOutputData%WaveElevSeries,2) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElevSeries)) THEN - ALLOCATE(DstInitOutputData%WaveElevSeries(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevSeries.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveElevSeries = SrcInitOutputData%WaveElevSeries -ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveTime)) THEN - i1_l = LBOUND(SrcInitOutputData%WaveTime,1) - i1_u = UBOUND(SrcInitOutputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveTime)) THEN - ALLOCATE(DstInitOutputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%WaveTime = SrcInitOutputData%WaveTime -ENDIF - DstInitOutputData%WaveTMax = SrcInitOutputData%WaveTMax -IF (ALLOCATED(SrcInitOutputData%nodeInWater)) THEN - i1_l = LBOUND(SrcInitOutputData%nodeInWater,1) - i1_u = UBOUND(SrcInitOutputData%nodeInWater,1) - i2_l = LBOUND(SrcInitOutputData%nodeInWater,2) - i2_u = UBOUND(SrcInitOutputData%nodeInWater,2) - IF (.NOT. ALLOCATED(DstInitOutputData%nodeInWater)) THEN - ALLOCATE(DstInitOutputData%nodeInWater(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%nodeInWater.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitOutputData%nodeInWater = SrcInitOutputData%nodeInWater -ENDIF - DstInitOutputData%RhoXg = SrcInitOutputData%RhoXg - DstInitOutputData%NStepWave = SrcInitOutputData%NStepWave - DstInitOutputData%NStepWave2 = SrcInitOutputData%NStepWave2 - END SUBROUTINE Waves_CopyInitOutput - - SUBROUTINE Waves_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOutputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyInitOutput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - -IF (ALLOCATED(InitOutputData%WaveElevC0)) THEN - DEALLOCATE(InitOutputData%WaveElevC0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveDirArr)) THEN - DEALLOCATE(InitOutputData%WaveDirArr) -ENDIF -IF (ALLOCATED(InitOutputData%WaveKinzi)) THEN - DEALLOCATE(InitOutputData%WaveKinzi) -ENDIF -IF (ALLOCATED(InitOutputData%PWaveDynP0)) THEN - DEALLOCATE(InitOutputData%PWaveDynP0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveDynP)) THEN - DEALLOCATE(InitOutputData%WaveDynP) -ENDIF -IF (ALLOCATED(InitOutputData%WaveAcc)) THEN - DEALLOCATE(InitOutputData%WaveAcc) -ENDIF -IF (ALLOCATED(InitOutputData%PWaveAcc0)) THEN - DEALLOCATE(InitOutputData%PWaveAcc0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveVel)) THEN - DEALLOCATE(InitOutputData%WaveVel) -ENDIF -IF (ALLOCATED(InitOutputData%PWaveVel0)) THEN - DEALLOCATE(InitOutputData%PWaveVel0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElev)) THEN - DEALLOCATE(InitOutputData%WaveElev) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElev0)) THEN - DEALLOCATE(InitOutputData%WaveElev0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElevMD)) THEN - DEALLOCATE(InitOutputData%WaveElevMD) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElevSeries)) THEN - DEALLOCATE(InitOutputData%WaveElevSeries) -ENDIF -IF (ALLOCATED(InitOutputData%WaveTime)) THEN - DEALLOCATE(InitOutputData%WaveTime) -ENDIF -IF (ALLOCATED(InitOutputData%nodeInWater)) THEN - DEALLOCATE(InitOutputData%nodeInWater) -ENDIF - END SUBROUTINE Waves_DestroyInitOutput - - SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_InitOutputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackInitOutput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no - IF ( ALLOCATED(InData%WaveElevC0) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no - IF ( ALLOCATED(InData%WaveDirArr) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr - END IF - Re_BufSz = Re_BufSz + 1 ! WaveDirMin - Re_BufSz = Re_BufSz + 1 ! WaveDirMax - Re_BufSz = Re_BufSz + 1 ! WaveDir - Int_BufSz = Int_BufSz + 1 ! WaveNDir - Int_BufSz = Int_BufSz + 1 ! WaveMultiDir - Re_BufSz = Re_BufSz + 1 ! WaveDOmega - Int_BufSz = Int_BufSz + 1 ! WaveKinzi allocated yes/no - IF ( ALLOCATED(InData%WaveKinzi) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveKinzi upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveKinzi) ! WaveKinzi - END IF - Int_BufSz = Int_BufSz + 1 ! PWaveDynP0 allocated yes/no - IF ( ALLOCATED(InData%PWaveDynP0) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! PWaveDynP0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%PWaveDynP0) ! PWaveDynP0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveDynP allocated yes/no - IF ( ALLOCATED(InData%WaveDynP) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveDynP upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP) ! WaveDynP - END IF - Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no - IF ( ALLOCATED(InData%WaveAcc) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc - END IF - Int_BufSz = Int_BufSz + 1 ! PWaveAcc0 allocated yes/no - IF ( ALLOCATED(InData%PWaveAcc0) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! PWaveAcc0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%PWaveAcc0) ! PWaveAcc0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no - IF ( ALLOCATED(InData%WaveVel) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel - END IF - Int_BufSz = Int_BufSz + 1 ! PWaveVel0 allocated yes/no - IF ( ALLOCATED(InData%PWaveVel0) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! PWaveVel0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%PWaveVel0) ! PWaveVel0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElev allocated yes/no - IF ( ALLOCATED(InData%WaveElev) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElev upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElev) ! WaveElev - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElev0 allocated yes/no - IF ( ALLOCATED(InData%WaveElev0) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveElev0 upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElev0) ! WaveElev0 - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevMD allocated yes/no - IF ( ALLOCATED(InData%WaveElevMD) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevMD upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevMD) ! WaveElevMD - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElevSeries allocated yes/no - IF ( ALLOCATED(InData%WaveElevSeries) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElevSeries upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElevSeries) ! WaveElevSeries - END IF - Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime - END IF - Db_BufSz = Db_BufSz + 1 ! WaveTMax - Int_BufSz = Int_BufSz + 1 ! nodeInWater allocated yes/no - IF ( ALLOCATED(InData%nodeInWater) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! nodeInWater upper/lower bounds for each dimension - Int_BufSz = Int_BufSz + SIZE(InData%nodeInWater) ! nodeInWater - END IF - Re_BufSz = Re_BufSz + 1 ! RhoXg - Int_BufSz = Int_BufSz + 1 ! NStepWave - Int_BufSz = Int_BufSz + 1 ! NStepWave2 - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IF ( .NOT. ALLOCATED(InData%WaveElevC0) ) 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%WaveElevC0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElevC0,2), UBOUND(InData%WaveElevC0,2) - DO i1 = LBOUND(InData%WaveElevC0,1), UBOUND(InData%WaveElevC0,1) - ReKiBuf(Re_Xferred) = InData%WaveElevC0(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveDirArr) ) 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%WaveDirArr,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDirArr,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveDirArr,1), UBOUND(InData%WaveDirArr,1) - ReKiBuf(Re_Xferred) = InData%WaveDirArr(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - ReKiBuf(Re_Xferred) = InData%WaveDirMin - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveDirMax - Re_Xferred = Re_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveDir - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%WaveNDir - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - ReKiBuf(Re_Xferred) = InData%WaveDOmega - Re_Xferred = Re_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveKinzi) ) 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%WaveKinzi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinzi,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveKinzi,1), UBOUND(InData%WaveKinzi,1) - ReKiBuf(Re_Xferred) = InData%WaveKinzi(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%PWaveDynP0) ) 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%PWaveDynP0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%PWaveDynP0,2), UBOUND(InData%PWaveDynP0,2) - DO i1 = LBOUND(InData%PWaveDynP0,1), UBOUND(InData%PWaveDynP0,1) - ReKiBuf(Re_Xferred) = InData%PWaveDynP0(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveDynP) ) 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%WaveDynP,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) - DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) - ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveAcc) ) 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%WaveAcc,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) - DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) - DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%PWaveAcc0) ) 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%PWaveAcc0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%PWaveAcc0,3), UBOUND(InData%PWaveAcc0,3) - DO i2 = LBOUND(InData%PWaveAcc0,2), UBOUND(InData%PWaveAcc0,2) - DO i1 = LBOUND(InData%PWaveAcc0,1), UBOUND(InData%PWaveAcc0,1) - ReKiBuf(Re_Xferred) = InData%PWaveAcc0(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveVel) ) 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%WaveVel,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) - DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) - DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) - ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%PWaveVel0) ) 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%PWaveVel0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%PWaveVel0,3), UBOUND(InData%PWaveVel0,3) - DO i2 = LBOUND(InData%PWaveVel0,2), UBOUND(InData%PWaveVel0,2) - DO i1 = LBOUND(InData%PWaveVel0,1), UBOUND(InData%PWaveVel0,1) - ReKiBuf(Re_Xferred) = InData%PWaveVel0(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElev) ) 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%WaveElev,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElev,2), UBOUND(InData%WaveElev,2) - DO i1 = LBOUND(InData%WaveElev,1), UBOUND(InData%WaveElev,1) - ReKiBuf(Re_Xferred) = InData%WaveElev(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElev0) ) 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%WaveElev0,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev0,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveElev0,1), UBOUND(InData%WaveElev0,1) - ReKiBuf(Re_Xferred) = InData%WaveElev0(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevMD) ) 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%WaveElevMD,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevMD,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevMD,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevMD,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElevMD,2), UBOUND(InData%WaveElevMD,2) - DO i1 = LBOUND(InData%WaveElevMD,1), UBOUND(InData%WaveElevMD,1) - ReKiBuf(Re_Xferred) = InData%WaveElevMD(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElevSeries) ) 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%WaveElevSeries,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevSeries,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevSeries,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevSeries,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElevSeries,2), UBOUND(InData%WaveElevSeries,2) - DO i1 = LBOUND(InData%WaveElevSeries,1), UBOUND(InData%WaveElevSeries,1) - ReKiBuf(Re_Xferred) = InData%WaveElevSeries(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) 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%WaveTime,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) - ReKiBuf(Re_Xferred) = InData%WaveTime(i1) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - DbKiBuf(Db_Xferred) = InData%WaveTMax - Db_Xferred = Db_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%nodeInWater) ) 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%nodeInWater,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%nodeInWater,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%nodeInWater,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%nodeInWater,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%nodeInWater,2), UBOUND(InData%nodeInWater,2) - DO i1 = LBOUND(InData%nodeInWater,1), UBOUND(InData%nodeInWater,1) - IntKiBuf(Int_Xferred) = InData%nodeInWater(i1,i2) - Int_Xferred = Int_Xferred + 1 - END DO - END DO - END IF - ReKiBuf(Re_Xferred) = InData%RhoXg - Re_Xferred = Re_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NStepWave - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NStepWave2 - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves_PackInitOutput - - SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_InitOutputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 - INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackInitOutput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) - ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevC0,2), UBOUND(OutData%WaveElevC0,2) - DO i1 = LBOUND(OutData%WaveElevC0,1), UBOUND(OutData%WaveElevC0,1) - OutData%WaveElevC0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDirArr 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%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) - ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveDirArr,1), UBOUND(OutData%WaveDirArr,1) - OutData%WaveDirArr(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - OutData%WaveDirMin = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveDirMax = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveDir = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%WaveNDir = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WaveMultiDir = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveMultiDir) - Int_Xferred = Int_Xferred + 1 - OutData%WaveDOmega = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinzi 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%WaveKinzi)) DEALLOCATE(OutData%WaveKinzi) - ALLOCATE(OutData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveKinzi,1), UBOUND(OutData%WaveKinzi,1) - OutData%WaveKinzi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveDynP0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%PWaveDynP0)) DEALLOCATE(OutData%PWaveDynP0) - ALLOCATE(OutData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%PWaveDynP0,2), UBOUND(OutData%PWaveDynP0,2) - DO i1 = LBOUND(OutData%PWaveDynP0,1), UBOUND(OutData%PWaveDynP0,1) - OutData%PWaveDynP0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) - ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) - DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) - OutData%WaveDynP(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) - ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) - DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) - DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) - OutData%WaveAcc(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAcc0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%PWaveAcc0)) DEALLOCATE(OutData%PWaveAcc0) - ALLOCATE(OutData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%PWaveAcc0,3), UBOUND(OutData%PWaveAcc0,3) - DO i2 = LBOUND(OutData%PWaveAcc0,2), UBOUND(OutData%PWaveAcc0,2) - DO i1 = LBOUND(OutData%PWaveAcc0,1), UBOUND(OutData%PWaveAcc0,1) - OutData%PWaveAcc0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) - ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) - DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) - DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) - OutData%WaveVel(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveVel0 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%PWaveVel0)) DEALLOCATE(OutData%PWaveVel0) - ALLOCATE(OutData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%PWaveVel0,3), UBOUND(OutData%PWaveVel0,3) - DO i2 = LBOUND(OutData%PWaveVel0,2), UBOUND(OutData%PWaveVel0,2) - DO i1 = LBOUND(OutData%PWaveVel0,1), UBOUND(OutData%PWaveVel0,1) - OutData%PWaveVel0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElev)) DEALLOCATE(OutData%WaveElev) - ALLOCATE(OutData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElev,2), UBOUND(OutData%WaveElev,2) - DO i1 = LBOUND(OutData%WaveElev,1), UBOUND(OutData%WaveElev,1) - OutData%WaveElev(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev0 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%WaveElev0)) DEALLOCATE(OutData%WaveElev0) - ALLOCATE(OutData%WaveElev0(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev0.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveElev0,1), UBOUND(OutData%WaveElev0,1) - OutData%WaveElev0(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevMD 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevMD)) DEALLOCATE(OutData%WaveElevMD) - ALLOCATE(OutData%WaveElevMD(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevMD.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevMD,2), UBOUND(OutData%WaveElevMD,2) - DO i1 = LBOUND(OutData%WaveElevMD,1), UBOUND(OutData%WaveElevMD,1) - OutData%WaveElevMD(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevSeries 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElevSeries)) DEALLOCATE(OutData%WaveElevSeries) - ALLOCATE(OutData%WaveElevSeries(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevSeries.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElevSeries,2), UBOUND(OutData%WaveElevSeries,2) - DO i1 = LBOUND(OutData%WaveElevSeries,1), UBOUND(OutData%WaveElevSeries,1) - OutData%WaveElevSeries(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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%WaveTime)) DEALLOCATE(OutData%WaveTime) - ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) - OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END DO - END IF - OutData%WaveTMax = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! nodeInWater 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%nodeInWater)) DEALLOCATE(OutData%nodeInWater) - ALLOCATE(OutData%nodeInWater(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%nodeInWater.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%nodeInWater,2), UBOUND(OutData%nodeInWater,2) - DO i1 = LBOUND(OutData%nodeInWater,1), UBOUND(OutData%nodeInWater,1) - OutData%nodeInWater(i1,i2) = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END DO - END DO - END IF - OutData%RhoXg = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - OutData%NStepWave = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%NStepWave2 = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves_UnPackInitOutput - - SUBROUTINE Waves_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_ContinuousStateType), INTENT(IN) :: SrcContStateData - TYPE(Waves_ContinuousStateType), INTENT(INOUT) :: DstContStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyContState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstContStateData%DummyContState = SrcContStateData%DummyContState - END SUBROUTINE Waves_CopyContState - - SUBROUTINE Waves_DestroyContState( ContStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_ContinuousStateType), INTENT(INOUT) :: ContStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyContState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves_DestroyContState - - SUBROUTINE Waves_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_ContinuousStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackContState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyContState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyContState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_PackContState - - SUBROUTINE Waves_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_ContinuousStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackContState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyContState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_UnPackContState - - SUBROUTINE Waves_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_DiscreteStateType), INTENT(IN) :: SrcDiscStateData - TYPE(Waves_DiscreteStateType), INTENT(INOUT) :: DstDiscStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyDiscState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstDiscStateData%DummyDiscState = SrcDiscStateData%DummyDiscState - END SUBROUTINE Waves_CopyDiscState - - SUBROUTINE Waves_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_DiscreteStateType), INTENT(INOUT) :: DiscStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyDiscState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves_DestroyDiscState - - SUBROUTINE Waves_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_DiscreteStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackDiscState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyDiscState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyDiscState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_PackDiscState - - SUBROUTINE Waves_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_DiscreteStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackDiscState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyDiscState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_UnPackDiscState - - SUBROUTINE Waves_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_ConstraintStateType), INTENT(IN) :: SrcConstrStateData - TYPE(Waves_ConstraintStateType), INTENT(INOUT) :: DstConstrStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyConstrState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstConstrStateData%DummyConstrState = SrcConstrStateData%DummyConstrState - END SUBROUTINE Waves_CopyConstrState - - SUBROUTINE Waves_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_ConstraintStateType), INTENT(INOUT) :: ConstrStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyConstrState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves_DestroyConstrState - - SUBROUTINE Waves_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_ConstraintStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackConstrState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyConstrState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyConstrState - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_PackConstrState - - SUBROUTINE Waves_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_ConstraintStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackConstrState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyConstrState = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_UnPackConstrState - - SUBROUTINE Waves_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_OtherStateType), INTENT(IN) :: SrcOtherStateData - TYPE(Waves_OtherStateType), INTENT(INOUT) :: DstOtherStateData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyOtherState' -! - ErrStat = ErrID_None - ErrMsg = "" - DstOtherStateData%DummyOtherState = SrcOtherStateData%DummyOtherState - END SUBROUTINE Waves_CopyOtherState - - SUBROUTINE Waves_DestroyOtherState( OtherStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_OtherStateType), INTENT(INOUT) :: OtherStateData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyOtherState' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves_DestroyOtherState - - SUBROUTINE Waves_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_OtherStateType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackOtherState' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! DummyOtherState - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IntKiBuf(Int_Xferred) = InData%DummyOtherState - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves_PackOtherState - - SUBROUTINE Waves_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_OtherStateType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackOtherState' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyOtherState = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves_UnPackOtherState - - SUBROUTINE Waves_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_MiscVarType), INTENT(IN) :: SrcMiscData - TYPE(Waves_MiscVarType), INTENT(INOUT) :: DstMiscData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyMisc' -! - ErrStat = ErrID_None - ErrMsg = "" - DstMiscData%DummyMiscVar = SrcMiscData%DummyMiscVar - END SUBROUTINE Waves_CopyMisc - - SUBROUTINE Waves_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_MiscVarType), INTENT(INOUT) :: MiscData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyMisc' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves_DestroyMisc - - SUBROUTINE Waves_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_MiscVarType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackMisc' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Int_BufSz = Int_BufSz + 1 ! DummyMiscVar - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - IntKiBuf(Int_Xferred) = InData%DummyMiscVar - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves_PackMisc - - SUBROUTINE Waves_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_MiscVarType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackMisc' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyMiscVar = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves_UnPackMisc - - SUBROUTINE Waves_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_ParameterType), INTENT(IN) :: SrcParamData - TYPE(Waves_ParameterType), INTENT(INOUT) :: DstParamData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyParam' -! - ErrStat = ErrID_None - ErrMsg = "" - DstParamData%DT = SrcParamData%DT - DstParamData%WaveTMax = SrcParamData%WaveTMax - DstParamData%NStepWave = SrcParamData%NStepWave - DstParamData%WaveNDir = SrcParamData%WaveNDir - DstParamData%WaveMultiDir = SrcParamData%WaveMultiDir - END SUBROUTINE Waves_CopyParam - - SUBROUTINE Waves_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_ParameterType), INTENT(INOUT) :: ParamData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyParam' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves_DestroyParam - - SUBROUTINE Waves_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_ParameterType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackParam' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Db_BufSz = Db_BufSz + 1 ! DT - Db_BufSz = Db_BufSz + 1 ! WaveTMax - Int_BufSz = Int_BufSz + 1 ! NStepWave - Int_BufSz = Int_BufSz + 1 ! WaveNDir - Int_BufSz = Int_BufSz + 1 ! WaveMultiDir - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - DbKiBuf(Db_Xferred) = InData%DT - Db_Xferred = Db_Xferred + 1 - DbKiBuf(Db_Xferred) = InData%WaveTMax - Db_Xferred = Db_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%NStepWave - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = InData%WaveNDir - Int_Xferred = Int_Xferred + 1 - IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves_PackParam - - SUBROUTINE Waves_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_ParameterType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackParam' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DT = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - OutData%WaveTMax = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - OutData%NStepWave = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WaveNDir = IntKiBuf(Int_Xferred) - Int_Xferred = Int_Xferred + 1 - OutData%WaveMultiDir = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveMultiDir) - Int_Xferred = Int_Xferred + 1 - END SUBROUTINE Waves_UnPackParam - - SUBROUTINE Waves_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_InputType), INTENT(IN) :: SrcInputData - TYPE(Waves_InputType), INTENT(INOUT) :: DstInputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyInput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstInputData%DummyInput = SrcInputData%DummyInput - END SUBROUTINE Waves_CopyInput - - SUBROUTINE Waves_DestroyInput( InputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_InputType), INTENT(INOUT) :: InputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyInput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves_DestroyInput - - SUBROUTINE Waves_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_InputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackInput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyInput - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyInput - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_PackInput - - SUBROUTINE Waves_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_InputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackInput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyInput = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_UnPackInput - - SUBROUTINE Waves_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(Waves_OutputType), INTENT(IN) :: SrcOutputData - TYPE(Waves_OutputType), INTENT(INOUT) :: DstOutputData - INTEGER(IntKi), INTENT(IN ) :: CtrlCode - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg -! Local - INTEGER(IntKi) :: i,j,k - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyOutput' -! - ErrStat = ErrID_None - ErrMsg = "" - DstOutputData%DummyOutput = SrcOutputData%DummyOutput - END SUBROUTINE Waves_CopyOutput - - SUBROUTINE Waves_DestroyOutput( OutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(Waves_OutputType), INTENT(INOUT) :: OutputData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers - - INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 - LOGICAL :: DEALLOCATEpointers_local - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyOutput' - - ErrStat = ErrID_None - ErrMsg = "" - - IF (PRESENT(DEALLOCATEpointers)) THEN - DEALLOCATEpointers_local = DEALLOCATEpointers - ELSE - DEALLOCATEpointers_local = .true. - END IF - - END SUBROUTINE Waves_DestroyOutput - - SUBROUTINE Waves_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) - REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(Waves_OutputType), INTENT(IN) :: InData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly - ! Local variables - INTEGER(IntKi) :: Re_BufSz - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_BufSz - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_BufSz - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 - LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackOutput' - ! buffers to store subtypes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - - OnlySize = .FALSE. - IF ( PRESENT(SizeOnly) ) THEN - OnlySize = SizeOnly - ENDIF - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_BufSz = 0 - Db_BufSz = 0 - Int_BufSz = 0 - Re_BufSz = Re_BufSz + 1 ! DummyOutput - IF ( Re_BufSz .GT. 0 ) THEN - ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Db_BufSz .GT. 0 ) THEN - ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF ( Int_BufSz .GT. 0 ) THEN - ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) - - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - - ReKiBuf(Re_Xferred) = InData%DummyOutput - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_PackOutput - - SUBROUTINE Waves_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) - REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) - REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) - INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(Waves_OutputType), INTENT(INOUT) :: OutData - INTEGER(IntKi), INTENT( OUT) :: ErrStat - CHARACTER(*), INTENT( OUT) :: ErrMsg - ! Local variables - INTEGER(IntKi) :: Buf_size - INTEGER(IntKi) :: Re_Xferred - INTEGER(IntKi) :: Db_Xferred - INTEGER(IntKi) :: Int_Xferred - INTEGER(IntKi) :: i - INTEGER(IntKi) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackOutput' - ! buffers to store meshes, if any - REAL(ReKi), ALLOCATABLE :: Re_Buf(:) - REAL(DbKi), ALLOCATABLE :: Db_Buf(:) - INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) - ! - ErrStat = ErrID_None - ErrMsg = "" - Re_Xferred = 1 - Db_Xferred = 1 - Int_Xferred = 1 - OutData%DummyOutput = REAL(ReKiBuf(Re_Xferred), SiKi) - Re_Xferred = Re_Xferred + 1 - END SUBROUTINE Waves_UnPackOutput - - - SUBROUTINE Waves_Input_ExtrapInterp(u, t, u_out, t_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is given by the size of u -! -! expressions below based on either -! -! f(t) = a -! f(t) = a + b * t, or -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = u1, f(t2) = u2, f(t3) = u3 (as appropriate) -! -!.................................................................................................................................. - - TYPE(Waves_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs - TYPE(Waves_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: t_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_Input_ExtrapInterp' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - if ( size(t) .ne. size(u)) then - CALL SetErrStat(ErrID_Fatal,'size(t) must equal size(u)',ErrStat,ErrMsg,RoutineName) - RETURN - endif - order = SIZE(u) - 1 - IF ( order .eq. 0 ) THEN - CALL Waves_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL Waves_Input_ExtrapInterp1(u(1), u(2), t, u_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 2 ) THEN - CALL Waves_Input_ExtrapInterp2(u(1), u(2), u(3), t, u_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE - CALL SetErrStat(ErrID_Fatal,'size(u) must be less than 4 (order must be less than 3).',ErrStat,ErrMsg,RoutineName) - RETURN - ENDIF - END SUBROUTINE Waves_Input_ExtrapInterp - - - SUBROUTINE Waves_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is 1. -! -! f(t) = a + b * t, or -! -! where a and b are determined as the solution to -! f(t1) = u1, f(t2) = u2 -! -!.................................................................................................................................. - - TYPE(Waves_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 - TYPE(Waves_InputType), INTENT(IN) :: u2 ! Input at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs - TYPE(Waves_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(2) ! Times associated with the Inputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_Input_ExtrapInterp1' - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / t(2) - b = -(u1%DummyInput - u2%DummyInput) - u_out%DummyInput = u1%DummyInput + b * ScaleFactor - END SUBROUTINE Waves_Input_ExtrapInterp1 - - - SUBROUTINE Waves_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Input u_out at time t_out, from previous/future time -! values of u (which has values associated with times in t). Order of the interpolation is 2. -! -! expressions below based on either -! -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = u1, f(t2) = u2, f(t3) = u3 -! -!.................................................................................................................................. - - TYPE(Waves_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 - TYPE(Waves_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 - TYPE(Waves_InputType), INTENT(IN) :: u3 ! Input at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs - TYPE(Waves_InputType), INTENT(INOUT) :: u_out ! Input at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(3) ! Times associated with the Inputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: c ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_Input_ExtrapInterp2' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(2), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(2) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(1), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / (t(2) * t(3) * (t(2) - t(3))) - b = (t(3)**2*(u1%DummyInput - u2%DummyInput) + t(2)**2*(-u1%DummyInput + u3%DummyInput))* scaleFactor - c = ( (t(2)-t(3))*u1%DummyInput + t(3)*u2%DummyInput - t(2)*u3%DummyInput ) * scaleFactor - u_out%DummyInput = u1%DummyInput + b + c * t_out - END SUBROUTINE Waves_Input_ExtrapInterp2 - - - SUBROUTINE Waves_Output_ExtrapInterp(y, t, y_out, t_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is given by the size of y -! -! expressions below based on either -! -! f(t) = a -! f(t) = a + b * t, or -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = y1, f(t2) = y2, f(t3) = y3 (as appropriate) -! -!.................................................................................................................................. - - TYPE(Waves_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs - TYPE(Waves_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: t_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_Output_ExtrapInterp' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - if ( size(t) .ne. size(y)) then - CALL SetErrStat(ErrID_Fatal,'size(t) must equal size(y)',ErrStat,ErrMsg,RoutineName) - RETURN - endif - order = SIZE(y) - 1 - IF ( order .eq. 0 ) THEN - CALL Waves_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL Waves_Output_ExtrapInterp1(y(1), y(2), t, y_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 2 ) THEN - CALL Waves_Output_ExtrapInterp2(y(1), y(2), y(3), t, y_out, t_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE - CALL SetErrStat(ErrID_Fatal,'size(y) must be less than 4 (order must be less than 3).',ErrStat,ErrMsg,RoutineName) - RETURN - ENDIF - END SUBROUTINE Waves_Output_ExtrapInterp - - - SUBROUTINE Waves_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is 1. -! -! f(t) = a + b * t, or -! -! where a and b are determined as the solution to -! f(t1) = y1, f(t2) = y2 -! -!.................................................................................................................................. - - TYPE(Waves_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 - TYPE(Waves_OutputType), INTENT(IN) :: y2 ! Output at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs - TYPE(Waves_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(2) ! Times associated with the Outputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_Output_ExtrapInterp1' - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / t(2) - b = -(y1%DummyOutput - y2%DummyOutput) - y_out%DummyOutput = y1%DummyOutput + b * ScaleFactor - END SUBROUTINE Waves_Output_ExtrapInterp1 - - - SUBROUTINE Waves_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrStat, ErrMsg ) -! -! This subroutine calculates a extrapolated (or interpolated) Output y_out at time t_out, from previous/future time -! values of y (which has values associated with times in t). Order of the interpolation is 2. -! -! expressions below based on either -! -! f(t) = a + b * t + c * t**2 -! -! where a, b and c are determined as the solution to -! f(t1) = y1, f(t2) = y2, f(t3) = y3 -! -!.................................................................................................................................. - - TYPE(Waves_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 - TYPE(Waves_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 - TYPE(Waves_OutputType), INTENT(IN) :: y3 ! Output at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs - TYPE(Waves_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out - REAL(DbKi), INTENT(IN ) :: tin_out ! time to be extrap/interp'd to - INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None - ! local variables - REAL(DbKi) :: t(3) ! Times associated with the Outputs - REAL(DbKi) :: t_out ! Time to which to be extrap/interpd - INTEGER(IntKi) :: order ! order of polynomial fit (max 2) - REAL(DbKi) :: b ! temporary for extrapolation/interpolation - REAL(DbKi) :: c ! temporary for extrapolation/interpolation - REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation - INTEGER(IntKi) :: ErrStat2 ! local errors - CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'Waves_Output_ExtrapInterp2' - ! Initialize ErrStat - ErrStat = ErrID_None - ErrMsg = "" - ! we'll subtract a constant from the times to resolve some - ! numerical issues when t gets large (and to simplify the equations) - t = tin - tin(1) - t_out = tin_out - tin(1) - - IF ( EqualRealNos( t(1), t(2) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(2) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(2), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(2) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - ELSE IF ( EqualRealNos( t(1), t(3) ) ) THEN - CALL SetErrStat(ErrID_Fatal, 't(1) must not equal t(3) to avoid a division-by-zero error.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - - ScaleFactor = t_out / (t(2) * t(3) * (t(2) - t(3))) - b = (t(3)**2*(y1%DummyOutput - y2%DummyOutput) + t(2)**2*(-y1%DummyOutput + y3%DummyOutput))* scaleFactor - c = ( (t(2)-t(3))*y1%DummyOutput + t(3)*y2%DummyOutput - t(2)*y3%DummyOutput ) * scaleFactor - y_out%DummyOutput = y1%DummyOutput + b + c * t_out - END SUBROUTINE Waves_Output_ExtrapInterp2 - -END MODULE Waves_Types -!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/icefloe/src/icefloe/IceFlexISO.f90 b/modules/icefloe/src/icefloe/IceFlexISO.f90 index bc1844f3dd..aeb4e9f25d 100644 --- a/modules/icefloe/src/icefloe/IceFlexISO.f90 +++ b/modules/icefloe/src/icefloe/IceFlexISO.f90 @@ -282,7 +282,7 @@ subroutine randomFlexLoadTimeSeries (myIceParams, iceLog, maxLoad) ! Period is time from no load up to peak, down, then dwell at minimum (normal distribution) CALL RndNorm( period, meanPeriod, inParams%periodCOV*meanPeriod ) ! Period has to be limited to +/- 50% of the mean period - period = min(1.5*meanPeriod, max(0.5*meanPeriod, period)) + period = min(1.5_ReKi*meanPeriod, max(0.5_ReKi*meanPeriod, period)) ! sub period is the fraction of a period: time for load to go up then down (uniform distribution) CALL RanLux ( tau ) diff --git a/modules/inflowwind/src/InflowWind_IO.f90 b/modules/inflowwind/src/InflowWind_IO.f90 index 122d8a5cec..5863024344 100644 --- a/modules/inflowwind/src/InflowWind_IO.f90 +++ b/modules/inflowwind/src/InflowWind_IO.f90 @@ -2405,7 +2405,7 @@ subroutine Grid3D_PopulateWindFileDat(Grid3DField, FileName, WindType, HasTower, if (HasTower) then FileDat%ZRange = [0.0_Reki, Grid3DField%RefHeight + Grid3DField%ZHWid] else - FileDat%ZRange = [Grid3DField%GridBase, Grid3DField%GridBase + Grid3DField%ZHWid*2.0] + FileDat%ZRange = [Grid3DField%GridBase, Grid3DField%GridBase + Grid3DField%ZHWid*2.0_ReKi] end if FileDat%ZRange_Limited = .true. diff --git a/modules/map/src/map.f90 b/modules/map/src/map.f90 index fbad83037e..d116bdd5cd 100644 --- a/modules/map/src/map.f90 +++ b/modules/map/src/map.f90 @@ -404,7 +404,7 @@ SUBROUTINE MAP_Restart( u, p, x, xd, z, other, y, ErrStat, ErrMsg ) CHARACTER(KIND=C_CHAR), DIMENSION(1024) :: message_from_MAP INTEGER(IntKi) :: ErrStat2 ! Error status of the operation - CHARACTER(1024) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None CHARACTER(*), PARAMETER :: RoutineName = 'MAP_Restart' @@ -517,7 +517,7 @@ SUBROUTINE MAP_Init( InitInp, u, p, x, xd, z, other, y, Interval, InitOut, ErrSt CHARACTER(KIND=C_CHAR), DIMENSION(1024) :: message_from_MAP INTEGER(IntKi) :: ErrStat2 ! Error status of the operation - CHARACTER(1024) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None CHARACTER(*), PARAMETER :: RoutineName = 'MAP_Init' INTEGER(IntKi) :: i @@ -722,7 +722,7 @@ SUBROUTINE MAP_UpdateStates( t, n, u, utimes, p, x, xd, z, O, ErrStat, ErrMsg) TYPE(MAP_InputType) :: u_interp ! Inputs at t INTEGER(IntKi) :: ErrStat2 ! Error status of the operation - CHARACTER(1024) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None CHARACTER(*), PARAMETER :: RoutineName = 'MAP_UpdateStates' ErrStat = ErrID_None @@ -796,7 +796,7 @@ SUBROUTINE MAP_CalcOutput( t, u, p, x, xd, z, O, y, ErrStat, ErrMsg ) integer :: i INTEGER(IntKi) :: ErrStat2 ! Error status of the operation - CHARACTER(1024) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None CHARACTER(*), PARAMETER :: RoutineName = 'MAP_CalcOutput' @@ -859,7 +859,7 @@ SUBROUTINE MAP_End(u, p, x, xd, z, other, y, ErrStat , ErrMsg) ! INTEGER(IntKi) :: i=0 INTEGER(IntKi) :: ErrStat2 ! Error status of the operation - CHARACTER(1024) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat /= ErrID_None CHARACTER(*), PARAMETER :: RoutineName = 'MAP_End' @@ -920,7 +920,7 @@ SUBROUTINE map_read_input_file_contents(file, InitInp, p, ErrStat) CHARACTER(255) :: line INTEGER :: Un - CHARACTER(1024) :: ErrMsg + CHARACTER(ErrMsgLen) :: ErrMsg CHARACTER(*), PARAMETER :: RoutineName = 'map_read_input_file_contents' ErrStat = ErrID_None @@ -1495,22 +1495,6 @@ SUBROUTINE MAP_GetOP( t, u, p, x, xd, z, OtherState, y, ErrStat, ErrMsg, u_op, y END SUBROUTINE MAP_GetOP !========================================================================================================== - - ! ========== MAP_ERROR ====== <-------------------------------------------------------------------+ - ! ! | - ! this is different from MAP_ERROR_CHECKER. MAP_ERROR check internal fortran errors, whereas - ! the former checks errors in the MAP DLL. - SUBROUTINE MAP_ERROR(ErrMsg, ErrStat, string) - CHARACTER(1024), INTENT(INOUT) :: ErrMsg - INTEGER(IntKi), INTENT(INOUT) :: ErrStat - CHARACTER(*), INTENT(IN ) :: string - - IF (ErrStat.NE.ErrID_None) THEN - ErrMsg = TRIM(ErrMsg)//string - END IF - END SUBROUTINE MAP_ERROR ! -------+ - !========================================================================================================== - ! ========== MAP_ERROR_CHECKER ====== <-----------------------------------------------------------+ ! ! | diff --git a/modules/moordyn/src/MoorDyn.f90 b/modules/moordyn/src/MoorDyn.f90 index bbd5fc9328..f7b8409688 100644 --- a/modules/moordyn/src/MoorDyn.f90 +++ b/modules/moordyn/src/MoorDyn.f90 @@ -29,7 +29,6 @@ MODULE MoorDyn USE MoorDyn_Body USE MoorDyn_Misc - !USE WAVES, only: WaveGrid_n, WaveGrid_x0, WaveGrid_dx, WaveGrid_nx, WaveGrid_y0, WaveGrid_dy, WaveGrid_ny, WaveGrid_nz ! seeing if I can get waves data here directly... IMPLICIT NONE @@ -84,18 +83,18 @@ SUBROUTINE MD_Init(InitInp, u, p, x, xd, z, other, y, m, DTcoupling, InitOut, Er INTEGER(IntKi) :: iTurb ! index for turbine in FAST.Farm applications INTEGER(IntKi) :: Converged ! flag indicating whether the dynamic relaxation has converged INTEGER(IntKi) :: N ! convenience integer for readability: number of segments in the line - REAL(ReKi) :: rPos(3) ! array for setting fairlead reference positions in mesh +! REAL(ReKi) :: rPos(3) ! array for setting fairlead reference positions in mesh REAL(ReKi) :: OrMat(3,3) ! rotation matrix for setting fairlead positions correctly if there is initial platform rotation REAL(ReKi) :: OrMat2(3,3) REAL(R8Ki) :: OrMatRef(3,3) REAL(DbKi), ALLOCATABLE :: FairTensIC(:,:)! array of size nCpldCons, 3 to store three latest fairlead tensions of each line - CHARACTER(20) :: TempString ! temporary string for incidental use +! CHARACTER(20) :: TempString ! temporary string for incidental use INTEGER(IntKi) :: ErrStat2 ! Error status of the operation CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat2 /= ErrID_None REAL(DbKi) :: dtM ! actual mooring dynamics time step INTEGER(IntKi) :: NdtM ! number of time steps to integrate through with RK2 - INTEGER(IntKi) :: ntWave ! number of time steps of wave data +! INTEGER(IntKi) :: ntWave ! number of time steps of wave data TYPE(MD_InputType) :: u_array(1) ! a size-one array for u to make call to TimeStep happy REAL(DbKi) :: t_array(1) ! a size-one array saying time is 0 to make call to TimeStep happy @@ -107,10 +106,10 @@ SUBROUTINE MD_Init(InitInp, u, p, x, xd, z, other, y, m, DTcoupling, InitOut, Er ! Local variables for reading file input (Previously in MDIO_ReadInput) INTEGER(IntKi) :: UnEc ! The local unit number for this module's echo file - INTEGER(IntKi) :: UnOut ! for outputing wave kinematics data - CHARACTER(200) :: Frmt ! a string to hold a format statement +! INTEGER(IntKi) :: UnOut ! for outputing wave kinematics data +! CHARACTER(200) :: Frmt ! a string to hold a format statement - CHARACTER(1024) :: EchoFile ! Name of MoorDyn echo file +! CHARACTER(1024) :: EchoFile ! Name of MoorDyn echo file CHARACTER(1024) :: Line ! String to temporarially hold value of read line CHARACTER(20) :: LineOutString ! String to temporarially hold characters specifying line output options CHARACTER(20) :: OptString ! String to temporarially hold name of option variable @@ -124,7 +123,7 @@ SUBROUTINE MD_Init(InitInp, u, p, x, xd, z, other, y, m, DTcoupling, InitOut, Er CHARACTER(40) :: TempString4 ! CHARACTER(40) :: TempString5 ! CHARACTER(40) :: TempStrings(6) ! Array of 6 strings used when parsing comma-separated items - CHARACTER(1024) :: FileName ! +! CHARACTER(1024) :: FileName ! REAL(DbKi) :: depth ! local water depth interpolated from bathymetry grid [m] Real(DbKi) :: nvec(3) ! local seabed surface normal vector (positive out) @@ -688,8 +687,8 @@ SUBROUTINE MD_Init(InitInp, u, p, x, xd, z, other, y, m, DTcoupling, InitOut, Er !read into a line Line = NextLine(i) - ! check for correct number of columns in current line - IF ( CountWords( Line ) /= 7 ) THEN + ! check for correct number of columns in current line (bjj: I'm not going to throw an error if there are extra columns in this line, e.g. comments) + IF ( CountWords( Line ) < 7 ) THEN CALL SetErrStat( ErrID_Fatal, ' Unable to parse Rod Type '//trim(Num2LStr(l))//' on row '//trim(Num2LStr(i))//' in input file. Row has wrong number of columns. Must be 7 columns.', ErrStat, ErrMsg, RoutineName ) CALL CleanUp() RETURN @@ -1245,8 +1244,8 @@ SUBROUTINE MD_Init(InitInp, u, p, x, xd, z, other, y, m, DTcoupling, InitOut, Er !read into a line Line = NextLine(i) - ! check for correct number of columns in current line - IF ( CountWords( Line ) /= 7 ) THEN + ! check for correct number of columns in current line (bjj: I'm not going to throw an error if there are extra columns in this line, e.g. comments) + IF ( CountWords( Line ) < 7 ) THEN CALL SetErrStat( ErrID_Fatal, ' Unable to parse Line '//trim(Num2LStr(l))//' on row '//trim(Num2LStr(i))//' in input file. Row has wrong number of columns. Must be 7 columns.', ErrStat, ErrMsg, RoutineName ) CALL CleanUp() RETURN @@ -2658,10 +2657,10 @@ SUBROUTINE MD_CalcContStateDeriv( t, u, p, x, xd, z, other, m, dxdt, ErrStat, Er INTEGER(IntKi) :: J ! index INTEGER(IntKi) :: K ! index INTEGER(IntKi) :: iTurb ! index - INTEGER(IntKi) :: Istart ! start index of line/connect in state vector - INTEGER(IntKi) :: Iend ! end index of line/connect in state vector +! INTEGER(IntKi) :: Istart ! start index of line/connect in state vector +! INTEGER(IntKi) :: Iend ! end index of line/connect in state vector - REAL(DbKi) :: temp(3) ! temporary for passing kinematics +! REAL(DbKi) :: temp(3) ! temporary for passing kinematics REAL(DbKi) :: r6_in(6) ! temporary for passing kinematics REAL(DbKi) :: v6_in(6) ! temporary for passing kinematics @@ -3625,7 +3624,7 @@ SUBROUTINE MD_Init_Jacobian(Init, p, u, y, m, InitOut, ErrStat, ErrMsg) INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'SD_Init_Jacobian' - real(ReKi) :: dx, dy, dz, maxDim +! real(ReKi) :: dx, dy, dz, maxDim INTEGER(IntKi) :: l, I real(ReKi) :: dl_slack ! how much a given line segment is stretched [m] diff --git a/modules/moordyn/src/MoorDyn_Body.f90 b/modules/moordyn/src/MoorDyn_Body.f90 index c34e21c162..5547b91d46 100644 --- a/modules/moordyn/src/MoorDyn_Body.f90 +++ b/modules/moordyn/src/MoorDyn_Body.f90 @@ -60,10 +60,13 @@ SUBROUTINE Body_Setup( Body, tempArray, p, ErrStat, ErrMsg) CHARACTER(*), INTENT(INOUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None INTEGER(4) :: J ! Generic index - INTEGER(4) :: K ! Generic index - INTEGER(IntKi) :: N +! INTEGER(4) :: K ! Generic index +! INTEGER(IntKi) :: N REAL(DbKi) :: Mtemp(6,6) + + ErrStat = ErrID_None + ErrMsg = "" ! set initial velocity to zero Body%v6 = 0.0_DbKi @@ -209,7 +212,7 @@ SUBROUTINE Body_SetKinematics(Body, r_in, v_in, a_in, t, m) TYPE(MD_MiscVarType), INTENT(INOUT) :: m ! passing along all mooring objects (for simplicity, since Bodies deal with Rods and Connections) - INTEGER(IntKi) :: l +! INTEGER(IntKi) :: l ! store current time Body%time = t @@ -247,8 +250,8 @@ SUBROUTINE Body_SetState(Body, X, t, m) Real(DbKi), INTENT(IN ) :: t ! instantaneous time TYPE(MD_MiscVarType), INTENT(INOUT) :: m ! passing along all mooring objects - INTEGER(IntKi) :: l ! index of segments or nodes along line - INTEGER(IntKi) :: J ! index +! INTEGER(IntKi) :: l ! index of segments or nodes along line +! INTEGER(IntKi) :: J ! index ! store current time Body%time = t @@ -379,14 +382,11 @@ SUBROUTINE Body_DoRHS(Body, m, p) !TYPE(MD_MiscVarType), INTENT(INOUT) :: m ! misc/optimization variables INTEGER(IntKi) :: l ! index of attached lines - INTEGER(IntKi) :: I ! index - INTEGER(IntKi) :: J ! index - INTEGER(IntKi) :: K ! index Real(DbKi) :: Fgrav(3) ! body weight force Real(DbKi) :: body_rCGrotated(3) ! instantaneous vector from body ref point to CG Real(DbKi) :: U(3) ! water velocity - zero for now - Real(DbKi) :: Ud(3) ! water acceleration- zero for now +! Real(DbKi) :: Ud(3) ! water acceleration- zero for now Real(DbKi) :: vi(6) ! relative water velocity (last 3 terms are rotatonal and will be set to zero Real(DbKi) :: F6_i(6) ! net force and moments from an attached object Real(DbKi) :: M6_i(6,6) ! mass and inertia from an attached object diff --git a/modules/moordyn/src/MoorDyn_Driver.f90 b/modules/moordyn/src/MoorDyn_Driver.f90 index 9b370d8eb7..dbf8a4b015 100644 --- a/modules/moordyn/src/MoorDyn_Driver.f90 +++ b/modules/moordyn/src/MoorDyn_Driver.f90 @@ -57,7 +57,6 @@ PROGRAM MoorDyn_Driver TYPE(MD_Drvr_InitInput) :: drvrInitInp ! Initialization data for the driver program INTEGER :: UnIn ! Unit number for the input file INTEGER :: UnEcho ! The local unit number for this module's echo file - TYPE (MD_InitInputType) :: MD_InitInp TYPE (MD_ParameterType) :: MD_p @@ -102,7 +101,7 @@ PROGRAM MoorDyn_Driver Integer(IntKi) :: iTurb Integer(IntKi) :: nTurbines Integer(IntKi) :: iIn - integer(intKi) :: Un + !integer(intKi) :: Un ! data for SimStatus/RunTimes: REAL(DbKi) :: PrevSimTime !< Previous time message was written to screen (s > 0) @@ -214,29 +213,29 @@ PROGRAM MoorDyn_Driver ! -------------------------------- ----------------------------------- ! fill in the hydrodynamics data - ALLOCATE( MD_InitInp%WaveVel (2,200,3)) - ALLOCATE( MD_InitInp%WaveAcc (2,200,3)) - ALLOCATE( MD_InitInp%WavePDyn(2,200) ) - ALLOCATE( MD_InitInp%WaveElev(2,200) ) - ALLOCATE( MD_InitInp%WaveTime(2) ) - MD_InitInp%WaveVel = 0.0_ReKi - MD_InitInp%WaveAcc = 0.0_ReKi - MD_InitInp%WavePDyn = 0.0_ReKi - MD_InitInp%WaveElev = 0.0_ReKi - MD_InitInp%WaveTime = 0.0_ReKi - DO I = 1,SIZE(MD_InitInp%WaveTime) - MD_InitInp%WaveTime(I) = 600.0*I - END DO + !ALLOCATE( MD_InitInp%WaveVel (2,200,3)) + !ALLOCATE( MD_InitInp%WaveAcc (2,200,3)) + !ALLOCATE( MD_InitInp%WavePDyn(2,200) ) + !ALLOCATE( MD_InitInp%WaveElev(2,200) ) + !ALLOCATE( MD_InitInp%WaveTime(2) ) + !MD_InitInp%WaveVel = 0.0_ReKi + !MD_InitInp%WaveAcc = 0.0_ReKi + !MD_InitInp%WavePDyn = 0.0_ReKi + !MD_InitInp%WaveElev = 0.0_ReKi + !MD_InitInp%WaveTime = 0.0_ReKi + !DO I = 1,SIZE(MD_InitInp%WaveTime) + ! MD_InitInp%WaveTime(I) = 600.0*I + !END DO ! open driver output file >>> not yet used <<< !CALL GetNewUnit( Un ) !OPEN(Unit=Un,FILE='MD.out',STATUS='UNKNOWN') ! call the initialization routine - CALL MD_Init( MD_InitInp, MD_u(1), MD_p, MD_x , MD_xd, MD_xc, MD_xo, MD_y, MD_m, dtC, MD_InitOut, ErrStat, ErrMsg2 ); call AbortIfFailed() + CALL MD_Init( MD_InitInp, MD_u(1), MD_p, MD_x , MD_xd, MD_xc, MD_xo, MD_y, MD_m, dtC, MD_InitOut, ErrStat2, ErrMsg2 ); call AbortIfFailed() - CALL MD_DestroyInitInput ( MD_InitInp , ErrStat, ErrMsg ); call AbortIfFailed() - CALL MD_DestroyInitOutput ( MD_InitOut , ErrStat, ErrMsg ); call AbortIfFailed() + CALL MD_DestroyInitInput ( MD_InitInp , ErrStat2, ErrMsg2 ); call AbortIfFailed() + CALL MD_DestroyInitOutput ( MD_InitOut , ErrStat2, ErrMsg2 ); call AbortIfFailed() CALL DispNVD( MD_InitOut%Ver ) @@ -259,8 +258,8 @@ PROGRAM MoorDyn_Driver if (drvrInitInp%InputsMod == 1 ) then if ( LEN( TRIM(drvrInitInp%InputsFile) ) < 1 ) then - ErrStat = ErrID_Fatal - ErrMsg = ' ERROR: MoorDyn Driver InputFile cannot be empty if InputsMode is 1.' + ErrStat2 = ErrID_Fatal + ErrMsg2 = ' ERROR: MoorDyn Driver InputFile cannot be empty if InputsMode is 1.' CALL AbortIfFailed() end if @@ -308,7 +307,7 @@ PROGRAM MoorDyn_Driver ALLOCATE ( r_in(nt, ncIn), r_in2(nt, ncIn), rd_in(nt, ncIn), rd_in2(nt, ncIn), rdd_in(nt, ncIn), rdd_in2(nt, ncIn), STAT=ErrStat2) IF ( ErrStat2 /= ErrID_None ) THEN ErrStat2 = ErrID_Fatal - ErrMsg = ' Error allocating space for r_in or rd_in array.' + ErrMsg2 = ' Error allocating space for r_in or rd_in array.' call AbortIfFailed() END IF @@ -667,43 +666,41 @@ PROGRAM MoorDyn_Driver CALL MD_End( MD_u(1), MD_p, MD_x, MD_xd, MD_xc , MD_xo, MD_y, MD_m, ErrStat2, ErrMsg2 ); call AbortIfFailed() do j = 2,MD_interp_order+1 - call MD_DestroyInput( MD_u(j), ErrStat, ErrMsg) + call MD_DestroyInput( MD_u(j), ErrStat2, ErrMsg2) end do - - DEALLOCATE(MD_u) - DEALLOCATE(MD_uTimes) - - IF (ALLOCATED(r_in) ) DEALLOCATE(r_in ) - IF (ALLOCATED(PtfmMotIn)) DEALLOCATE(PtfmMotIn) - - CALL WrScr( "Program has ended" ) - close (un) + + !close (un) + call CleanUp() + CALL NormStop() CONTAINS SUBROUTINE AbortIfFailed() - call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'MoorDyn_Driver') - IF ( ErrStat /= ErrID_None ) THEN - CALL WrScr( "Local error: "//ErrMsg2 ) - CALL WrScr( "Full error messages: "//ErrMsg ) - END IF + + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'MoorDyn_Driver') + if (ErrStat >= AbortErrLev) then call CleanUp() - STOP - endif + Call ProgAbort(trim(ErrMsg)) + elseif ( ErrStat /= ErrID_None ) THEN + CALL WrScr1( trim(GetErrStr(ErrStat))//': '//trim(ErrMsg) ) + end if END SUBROUTINE AbortIfFailed - LOGICAL FUNCTION Failed() - call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'OutSummary') - Failed = ErrStat >= AbortErrLev - if (Failed) call CleanUp() - END FUNCTION Failed - SUBROUTINE CleanUp() - if(UnEcho>0) CLOSE(UnEcho) - if(UnEcho>0) CLOSE( UnIn) - if(allocated(MD_u)) deallocate(MD_u) + if(UnEcho >0) CLOSE( UnEcho ) + if(UnIn >0) CLOSE( UnIn ) + + IF (ALLOCATED(MD_u )) DEALLOCATE(MD_u ) + IF (ALLOCATED(MD_uTimes)) DEALLOCATE(MD_uTimes) + IF (ALLOCATED(PtfmMotIn)) DEALLOCATE(PtfmMotIn) + IF (ALLOCATED(r_in )) DEALLOCATE(r_in ) + IF (ALLOCATED(r_in2 )) DEALLOCATE(r_in2 ) + IF (ALLOCATED(rd_in )) DEALLOCATE(rd_in ) + IF (ALLOCATED(rd_in2 )) DEALLOCATE(rd_in2 ) + IF (ALLOCATED(rdd_in )) DEALLOCATE(rdd_in ) + IF (ALLOCATED(rdd_in2 )) DEALLOCATE(rdd_in2 ) END SUBROUTINE CleanUp !------------------------------------------------------------------------------------------------------------------------------- @@ -711,16 +708,11 @@ SUBROUTINE ReadDriverInputFile( inputFile, InitInp) CHARACTER(*), INTENT( IN ) :: inputFile TYPE(MD_Drvr_InitInput), INTENT( OUT ) :: InitInp ! Local variables - INTEGER :: I ! generic integer for counting INTEGER :: J ! generic integer for counting - CHARACTER( 2) :: strI ! string version of the loop counter CHARACTER(1024) :: EchoFile ! Name of MoorDyn echo file - CHARACTER(1024) :: Line ! String to temporarially hold value of read line - CHARACTER(1024) :: TmpPath ! Temporary storage for relative path name - CHARACTER(1024) :: TmpFmt ! Temporary storage for format statement CHARACTER(1024) :: FileName ! Name of MoorDyn input file - CHARACTER(1024) :: FilePath ! Path Name of MoorDyn input file + CHARACTER(1024) :: FilePath ! Name of path to MoorDyn input file UnEcho=-1 UnIn =-1 @@ -741,7 +733,7 @@ SUBROUTINE ReadDriverInputFile( inputFile, InitInp) IF ( InitInp%Echo ) THEN EchoFile = TRIM(FileName)//'.echo' CALL GetNewUnit( UnEcho ) - CALL OpenEcho ( UnEcho, EchoFile, ErrStat, ErrMsg ); call AbortIfFailed() + CALL OpenEcho ( UnEcho, EchoFile, ErrStat2, ErrMsg2 ); call AbortIfFailed() REWIND(UnIn) CALL ReadCom( UnIn, FileName, 'MoorDyn Driver input file header line 1', ErrStat2, ErrMsg2, UnEcho); call AbortIfFailed() CALL ReadCom( UnIn, FileName, 'MoorDyn Driver input file header line 2', ErrStat2, ErrMsg2, UnEcho); call AbortIfFailed() @@ -772,17 +764,23 @@ SUBROUTINE ReadDriverInputFile( inputFile, InitInp) if(UnEcho>0) CLOSE( UnEcho ) if(UnIn>0) CLOSE( UnIn ) + UnEcho = -1 + UnIn = -1 + ! Perform input checks and triggers - !CALL GetPath( FileName, FilePath ) - !IF ( PathIsRelative( InitInp%MDInputFile ) ) then - ! InitInp%MDInputFile = TRIM(FilePath)//TRIM(InitInp%MDInputFile) - !END IF - !IF ( PathIsRelative( InitInp%OutRootName ) ) then - ! InitInp%OutRootName = TRIM(FilePath)//TRIM(InitInp%OutRootName) - !endif - !IF ( PathIsRelative( InitInp%InputsFile ) ) then - ! InitInp%InputsFile = TRIM(FilePath)//TRIM(InitInp%InputsFile) - !endif + CALL GetPath( FileName, FilePath ) + + IF ( PathIsRelative( InitInp%MDInputFile ) ) then + InitInp%MDInputFile = TRIM(FilePath)//TRIM(InitInp%MDInputFile) + END IF + + IF ( PathIsRelative( InitInp%OutRootName ) ) then + InitInp%OutRootName = TRIM(FilePath)//TRIM(InitInp%OutRootName) + endif + + IF ( PathIsRelative( InitInp%InputsFile ) ) then + InitInp%InputsFile = TRIM(FilePath)//TRIM(InitInp%InputsFile) + endif END SUBROUTINE ReadDriverInputFile diff --git a/modules/moordyn/src/MoorDyn_IO.f90 b/modules/moordyn/src/MoorDyn_IO.f90 index 14d93ff6be..5adde74ab6 100644 --- a/modules/moordyn/src/MoorDyn_IO.f90 +++ b/modules/moordyn/src/MoorDyn_IO.f90 @@ -215,7 +215,7 @@ SUBROUTINE getCoefficientOrCurve(inputString, LineProp_c, LineProp_npoints, Line INTEGER(IntKi), INTENT( OUT) :: ErrStat3 ! Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg3 ! Error message if ErrStat /= ErrID_None - INTEGER(IntKi) :: nC, I + INTEGER(IntKi) :: I INTEGER(IntKi) :: UnCoef ! unit number for coefficient input file @@ -283,7 +283,7 @@ SUBROUTINE SplitByBars(instring, n, outstrings) INTEGER(IntKi), INTENT( OUT) :: n CHARACTER(40), INTENT(INOUT) :: outstrings(6) ! array of output strings. Up to 6 strings can be read - INTEGER :: pos1, pos2, i + INTEGER :: pos1, pos2 n = 0 pos1=1 @@ -318,13 +318,13 @@ SUBROUTINE DecomposeString(outWord, let1, num1, let2, num2, let3) ! INTEGER(IntKi), INTENT( OUT) :: num2 CHARACTER(25), INTENT( OUT) :: let3 - INTEGER(IntKi) :: I ! Generic loop-counting index +! INTEGER(IntKi) :: I ! Generic loop-counting index - CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I), the name of each output channel - CHARACTER(ChanLen) :: qVal ! quantity type string to match to list of valid options +! CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I), the name of each output channel +! CHARACTER(ChanLen) :: qVal ! quantity type string to match to list of valid options - INTEGER :: oID ! ID number of connect or line object - INTEGER :: nID ! ID number of node object +! INTEGER :: oID ! ID number of connect or line object +! INTEGER :: nID ! ID number of node object INTEGER :: i1 = 0 ! indices of start of numbers or letters in OutListTmp string, for parsing INTEGER :: i2 = 0 INTEGER :: i3 = 0 @@ -417,7 +417,7 @@ SUBROUTINE MDIO_ProcessOutList(OutList, p, m, y, InitOut, ErrStat, ErrMsg ) INTEGER :: oID ! ID number of connect or line object INTEGER :: nID ! ID number of node object - INTEGER :: i1,i2,i3,i4 ! indices of start of numbers or letters in OutListTmp string, for parsing +! INTEGER :: i1,i2,i3,i4 ! indices of start of numbers or letters in OutListTmp string, for parsing CHARACTER(25) :: let1 ! strings used for splitting and parsing identifiers CHARACTER(25) :: num1 @@ -785,7 +785,7 @@ SUBROUTINE MDIO_OpenOutput( MD_ProgDesc, p, m, InitOut, ErrStat, ErrMsg ) INTEGER :: I ! Generic loop counter INTEGER :: J ! Generic loop counter CHARACTER(1024) :: OutFileName ! The name of the output file including the full path. - INTEGER :: L ! counter for index in LineWrOutput +! INTEGER :: L ! counter for index in LineWrOutput INTEGER :: LineNumOuts ! number of entries in LineWrOutput for each line INTEGER :: RodNumOuts ! for Rods ... redundant <<< CHARACTER(200) :: Frmt ! a string to hold a format statement diff --git a/modules/moordyn/src/MoorDyn_Line.f90 b/modules/moordyn/src/MoorDyn_Line.f90 index 1d6b216424..abb2935eff 100644 --- a/modules/moordyn/src/MoorDyn_Line.f90 +++ b/modules/moordyn/src/MoorDyn_Line.f90 @@ -56,7 +56,7 @@ SUBROUTINE SetupLine (Line, LineProp, p, ErrStat, ErrMsg) INTEGER, INTENT( INOUT ) :: ErrStat ! returns a non-zero value when an error occurs CHARACTER(*), INTENT( INOUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None - INTEGER(4) :: I, J, K ! Generic index + INTEGER(4) :: I, J ! Generic index INTEGER(IntKi) :: N REAL(DbKi) :: temp @@ -1511,7 +1511,7 @@ SUBROUTINE Line_SetEndKinematics(Line, r_in, rd_in, t, topOfLine) Real(DbKi), INTENT(IN ) :: t ! instantaneous time INTEGER(IntKi), INTENT(IN ) :: topOfLine ! 0 for end A (Node 0), 1 for end B (node N) - Integer(IntKi) :: I,J + Integer(IntKi) :: J INTEGER(IntKi) :: inode IF (topOfLine==1) THEN @@ -1551,8 +1551,8 @@ SUBROUTINE Line_GetEndStuff(Line, Fnet_out, Moment_out, M_out, topOfLine) REAL(DbKi), INTENT( OUT) :: M_out(3,3) ! mass matrix of end node INTEGER(IntKi), INTENT(IN ) :: topOfLine ! 0 for end A (Node 0), 1 for end B (node N) - Integer(IntKi) :: I,J - INTEGER(IntKi) :: inode + Integer(IntKi) :: J +! INTEGER(IntKi) :: inode IF (topOfLine==1) THEN ! end B of line Fnet_out = Line%Fnet(:, Line%N) diff --git a/modules/moordyn/src/MoorDyn_Misc.f90 b/modules/moordyn/src/MoorDyn_Misc.f90 index 90cb049d18..ddc8bf25a6 100644 --- a/modules/moordyn/src/MoorDyn_Misc.f90 +++ b/modules/moordyn/src/MoorDyn_Misc.f90 @@ -236,10 +236,10 @@ SUBROUTINE TransformKinematicsA(rRelBody, r_in, TransMat, v_in, a_in, r_out, v_o REAL(DbKi), INTENT( OUT) :: a_out(3) ! acceleration of point REAL(DbKi) :: rRel(3) - REAL(DbKi) :: rRel2(3) +! REAL(DbKi) :: rRel2(3) - REAL(DbKi) :: r_out2(3) - REAL(DbKi) :: rd_out2(3) +! REAL(DbKi) :: r_out2(3) +! REAL(DbKi) :: rd_out2(3) REAL(DbKi) :: H(3,3) ! rd_in should be in global orientation frame @@ -322,10 +322,10 @@ SUBROUTINE TranslateMass3to6DOF(dx, Min, Mout) REAL(DbKi), INTENT( OUT) :: Mout(6,6) ! resultant mass and inertia matrix about ref point REAL(DbKi) :: H( 3,3) ! "anti-symmetric tensor components" from Sadeghi and Incecik - REAL(DbKi) :: tempM( 3,3) - REAL(DbKi) :: tempM2(3,3) - REAL(DbKi) :: Htrans(3,3) - Integer(IntKi) :: I,J +! REAL(DbKi) :: tempM( 3,3) +! REAL(DbKi) :: tempM2(3,3) +! REAL(DbKi) :: Htrans(3,3) +! Integer(IntKi) :: I ! sub-matrix definitions are accordint to | m J | ! | J^T I | @@ -444,8 +444,8 @@ FUNCTION CalcOrientation(phi, beta, gamma) result(R) REAL(DbKi), INTENT ( IN ) :: gamma ! member twist angle REAL(DbKi) :: R(3,3) ! rotation matrix - INTEGER(IntKi) :: errStat - CHARACTER(100) :: errMsg +! INTEGER(IntKi) :: errStat +! CHARACTER(100) :: errMsg REAL(DbKi) :: s1, c1, s2, c2, s3, c3 @@ -920,7 +920,7 @@ SUBROUTINE getWaterKin(p, x, y, z, t, tindex, U, Ud, zeta, PDyn) INTEGER(IntKi) :: ix, iy, iz, it ! indices for interpolation INTEGER(IntKi) :: iz0, iz1 ! special indices for currrent interpolation - INTEGER(IntKi) :: N ! number of rod elements for convenience +! INTEGER(IntKi) :: N ! number of rod elements for convenience Real(SiKi) :: fx, fy, fz, ft ! interpolation fractions Real(DbKi) :: zp ! zprime coordinate used for Wheeler stretching @@ -980,114 +980,114 @@ SUBROUTINE getWaterKin(p, x, y, z, t, tindex, U, Ud, zeta, PDyn) END SUBROUTINE getWaterKin - ! unused routine with old code for taking wave kinematic grid inputs from HydroDyn - SUBROUTINE CopyWaterKinFromHydroDyn(p, InitInp) - - TYPE(MD_InitInputType), INTENT(IN ) :: InitInp ! INTENT(INOUT) : Input data for initialization routine - TYPE(MD_ParameterType), INTENT( OUT) :: p ! INTENT( OUT) : Parameters - - INTEGER(IntKi) :: I, J, K, Itemp - - - ! ----------------------------- Arrays for wave kinematics ----------------------------- - - - ! :::::::::::::: BELOW WILL BE USED EVENTUALLY WHEN WAVE INFO IS AN INPUT :::::::::::::::::: - ! ! The rAll array contains all nodes or reference points in the system - ! ! (x,y,z global coordinates for each) in the order of bodies, rods, points, internal line nodes. - ! - ! ! count the number of nodes to use for passing wave kinematics - ! J=0 - ! ! Body reference point coordinates - ! J = J + p%nBodies - ! ! Rod node coordinates (including ends) - ! DO l = 1, p%nRods - ! J = J + (m%RodList(l)%N + 1) - ! END DO - ! ! Point reference point coordinates - ! J = J + p%nConnects - ! ! Line internal node coordinates - ! DO l = 1, p%nLines - ! J = J + (m%LineList(l)%N - 1) - ! END DO - ! - ! ! allocate all relevant arrays - ! ! allocate state vector and temporary state vectors based on size just calculated - ! ALLOCATE ( y%rAll(3,J), u%U(3,J), u%Ud(3,J), u%zeta(J), u%PDyn(J), STAT = ErrStat ) - ! IF ( ErrStat /= ErrID_None ) THEN - ! ErrMsg = ' Error allocating wave kinematics vectors.' - ! RETURN - ! END IF - ! - ! - ! ! go through the nodes and fill in the data (this should maybe be turned into a global function) - ! J=0 - ! ! Body reference point coordinates - ! DO I = 1, p%nBodies - ! J = J + 1 - ! y%rAll(:,J) = m%BodyList(I)%r6(1:3) - ! END DO - ! ! Rod node coordinates - ! DO I = 1, p%nRods - ! DO K = 0,m%RodList(I)%N - ! J = J + 1 - ! y%rAll(:,J) = m%RodList(I)%r(:,K) - ! END DO - ! END DO - ! ! Point reference point coordinates - ! DO I = 1, p%nConnects - ! J = J + 1 - ! y%rAll(:,J) = m%ConnectList(I)%r - ! END DO - ! ! Line internal node coordinates - ! DO I = 1, p%nLines - ! DO K = 1,m%LineList(I)%N-1 - ! J = J + 1 - ! y%rAll(:,J) = m%LineList(I)%r(:,K) - ! END DO - ! END DO - ! :::::::::::::::: the above might be used eventually. For now, let's store wave info grids within this module ::::::::::::::::: - - - ! ----- copy wave grid data over from HydroDyn (as was done in USFLOWT branch) ----- - - ! get grid and time info (currently this is hard-coded to match what's in HydroDyn_Input - ! DO I=1,p%nzWave - ! p%pz(I) = 1.0 - 2.0**(p%nzWave-I) ! -127, -63, -31, -15, -7, -3, -1, 0 - ! END DO - ! DO J = 1,p%nyWave - ! p%py(J) = WaveGrid_y0 + WaveGrid_dy*(J-1) - ! END DO - ! DO K = 1,p%nxWave - ! p%px(K) = WaveGrid_x0 + WaveGrid_dx*(K-1) - ! END DO - ! - ! p%tWave = InitInp%WaveTime - - DO I=1,p%nzWave - DO J = 1,p%nyWave - DO K = 1,p%nxWave - Itemp = (I-1)*p%nxWave*p%nyWave + (J-1)*p%nxWave + K ! index of actual node on 3D grid - - p%uxWave (:,I,J,K) = InitInp%WaveVel( :,Itemp,1) ! note: indices are t, z, y, x - p%uyWave (:,I,J,K) = InitInp%WaveVel( :,Itemp,2) - p%uzWave (:,I,J,K) = InitInp%WaveVel( :,Itemp,3) - p%axWave (:,I,J,K) = InitInp%WaveAcc( :,Itemp,1) - p%ayWave (:,I,J,K) = InitInp%WaveAcc( :,Itemp,2) - p%azWave (:,I,J,K) = InitInp%WaveAcc( :,Itemp,3) - p%PDyn( :,I,J,K) = InitInp%WavePDyn(:,Itemp) - END DO - END DO - END DO - - DO J = 1,p%nyWave - DO K = 1,p%nxWave - Itemp = (J-1)*p%nxWave + K ! index of actual node on surface 2D grid - p%zeta(:,J,K) = InitInp%WaveElev(:,Itemp) - END DO - END DO - - END SUBROUTINE CopyWaterKinFromHydroDyn + !! ! unused routine with old code for taking wave kinematic grid inputs from HydroDyn + !! SUBROUTINE CopyWaterKinFromHydroDyn(p, InitInp) + !! + !! TYPE(MD_InitInputType), INTENT(IN ) :: InitInp ! INTENT(INOUT) : Input data for initialization routine + !! TYPE(MD_ParameterType), INTENT( OUT) :: p ! INTENT( OUT) : Parameters + !! + !! INTEGER(IntKi) :: I, J, K, Itemp + !! + !! + !! ! ----------------------------- Arrays for wave kinematics ----------------------------- + !! + !! + !!! :::::::::::::: BELOW WILL BE USED EVENTUALLY WHEN WAVE INFO IS AN INPUT :::::::::::::::::: + !!! ! The rAll array contains all nodes or reference points in the system + !!! ! (x,y,z global coordinates for each) in the order of bodies, rods, points, internal line nodes. + !!! + !!! ! count the number of nodes to use for passing wave kinematics + !!! J=0 + !!! ! Body reference point coordinates + !!! J = J + p%nBodies + !!! ! Rod node coordinates (including ends) + !!! DO l = 1, p%nRods + !!! J = J + (m%RodList(l)%N + 1) + !!! END DO + !!! ! Point reference point coordinates + !!! J = J + p%nConnects + !!! ! Line internal node coordinates + !!! DO l = 1, p%nLines + !!! J = J + (m%LineList(l)%N - 1) + !!! END DO + !!! + !!! ! allocate all relevant arrays + !!! ! allocate state vector and temporary state vectors based on size just calculated + !!! ALLOCATE ( y%rAll(3,J), u%U(3,J), u%Ud(3,J), u%zeta(J), u%PDyn(J), STAT = ErrStat ) + !!! IF ( ErrStat /= ErrID_None ) THEN + !!! ErrMsg = ' Error allocating wave kinematics vectors.' + !!! RETURN + !!! END IF + !!! + !!! + !!! ! go through the nodes and fill in the data (this should maybe be turned into a global function) + !!! J=0 + !!! ! Body reference point coordinates + !!! DO I = 1, p%nBodies + !!! J = J + 1 + !!! y%rAll(:,J) = m%BodyList(I)%r6(1:3) + !!! END DO + !!! ! Rod node coordinates + !!! DO I = 1, p%nRods + !!! DO K = 0,m%RodList(I)%N + !!! J = J + 1 + !!! y%rAll(:,J) = m%RodList(I)%r(:,K) + !!! END DO + !!! END DO + !!! ! Point reference point coordinates + !!! DO I = 1, p%nConnects + !!! J = J + 1 + !!! y%rAll(:,J) = m%ConnectList(I)%r + !!! END DO + !!! ! Line internal node coordinates + !!! DO I = 1, p%nLines + !!! DO K = 1,m%LineList(I)%N-1 + !!! J = J + 1 + !!! y%rAll(:,J) = m%LineList(I)%r(:,K) + !!! END DO + !!! END DO + !! ! :::::::::::::::: the above might be used eventually. For now, let's store wave info grids within this module ::::::::::::::::: + !! + !! + !! ! ----- copy wave grid data over from HydroDyn (as was done in USFLOWT branch) ----- + !! + !! ! get grid and time info (currently this is hard-coded to match what's in HydroDyn_Input + !! ! DO I=1,p%nzWave + !! ! p%pz(I) = 1.0 - 2.0**(p%nzWave-I) ! -127, -63, -31, -15, -7, -3, -1, 0 + !! ! END DO + !! ! DO J = 1,p%nyWave + !! ! p%py(J) = WaveGrid_y0 + WaveGrid_dy*(J-1) + !! ! END DO + !! ! DO K = 1,p%nxWave + !! ! p%px(K) = WaveGrid_x0 + WaveGrid_dx*(K-1) + !! ! END DO + !! ! + !! ! p%tWave = InitInp%WaveTime + !! + !! DO I=1,p%nzWave + !! DO J = 1,p%nyWave + !! DO K = 1,p%nxWave + !! Itemp = (I-1)*p%nxWave*p%nyWave + (J-1)*p%nxWave + K ! index of actual node on 3D grid + !! + !! p%uxWave (:,I,J,K) = InitInp%WaveVel( :,Itemp,1) ! note: indices are t, z, y, x + !! p%uyWave (:,I,J,K) = InitInp%WaveVel( :,Itemp,2) + !! p%uzWave (:,I,J,K) = InitInp%WaveVel( :,Itemp,3) + !! p%axWave (:,I,J,K) = InitInp%WaveAcc( :,Itemp,1) + !! p%ayWave (:,I,J,K) = InitInp%WaveAcc( :,Itemp,2) + !! p%azWave (:,I,J,K) = InitInp%WaveAcc( :,Itemp,3) + !! p%PDyn( :,I,J,K) = InitInp%WavePDyn(:,Itemp) + !! END DO + !! END DO + !! END DO + !! + !! DO J = 1,p%nyWave + !! DO K = 1,p%nxWave + !! Itemp = (J-1)*p%nxWave + K ! index of actual node on surface 2D grid + !! p%zeta(:,J,K) = InitInp%WaveElev(:,Itemp) + !! END DO + !! END DO + !! + !! END SUBROUTINE CopyWaterKinFromHydroDyn ! ----- write wave grid spacing to output file ----- @@ -1099,7 +1099,7 @@ SUBROUTINE WriteWaveGrid(p, ErrStat, ErrMsg) CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None INTEGER(IntKi) :: ErrStat2 - CHARACTER(120) :: ErrMsg2 +! CHARACTER(120) :: ErrMsg2 CHARACTER(120) :: Frmt INTEGER(IntKi) :: UnOut ! for outputing wave kinematics data @@ -1131,8 +1131,9 @@ SUBROUTINE WriteWaveGrid(p, ErrStat, ErrMsg) Frmt = '('//TRIM(Int2LStr(8))//'(A1,e10.4))' WRITE(UnOut,*, IOSTAT=ErrStat2) ( " ", TRIM(Num2LStr(p%pzWave(I))), I=1,p%nzWave ) - CLOSE(UnOut, IOSTAT = ErrStat ) - IF ( ErrStat /= 0 ) THEN + CLOSE(UnOut, IOSTAT = ErrStat2 ) + IF ( ErrStat2 /= 0 ) THEN + ErrStat = ErrID_Severe ErrMsg = 'Error closing wave grid file' END IF @@ -1148,7 +1149,7 @@ SUBROUTINE WriteWaveData(p, ErrStat, ErrMsg) CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None INTEGER(IntKi) :: ErrStat2 - CHARACTER(120) :: ErrMsg2 +! CHARACTER(120) :: ErrMsg2 INTEGER(IntKi) :: UnOut ! for outputing wave kinematics data INTEGER(IntKi) :: I,J,K, l, Itemp @@ -1297,7 +1298,7 @@ SUBROUTINE setupWaterKin(WaterKinString, p, Tmax, ErrStat, ErrMsg) REAL(SiKi) :: t, Frac CHARACTER(1024) :: FileName ! Name of MoorDyn input file CHARACTER(120) :: Line - CHARACTER(120) :: Line2 +! CHARACTER(120) :: Line2 CHARACTER(120) :: entries2 INTEGER(IntKi) :: coordtype @@ -1327,7 +1328,7 @@ SUBROUTINE setupWaterKin(WaterKinString, p, Tmax, ErrStat, ErrMsg) COMPLEX(SiKi), ALLOCATABLE :: WaveVelCHx(:) ! Discrete Fourier transform of the instantaneous horizontal velocity of incident waves before applying stretching at the zi-coordinates for points (m/s) COMPLEX(SiKi), ALLOCATABLE :: WaveVelCHy(:) ! Discrete Fourier transform of the instantaneous horizontal velocity in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s) COMPLEX(SiKi), ALLOCATABLE :: WaveVelCV( :) ! Discrete Fourier transform of the instantaneous vertical velocity in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s) - COMPLEX(SiKi) :: WGNC ! Discrete Fourier transform of the realization of a White Gaussian Noise (WGN) time series process with unit variance for the current frequency component (-) +! COMPLEX(SiKi) :: WGNC ! Discrete Fourier transform of the realization of a White Gaussian Noise (WGN) time series process with unit variance for the current frequency component (-) INTEGER(IntKi) :: ErrStatTmp INTEGER(IntKi) :: ErrStat2 diff --git a/modules/moordyn/src/MoorDyn_Point.f90 b/modules/moordyn/src/MoorDyn_Point.f90 index fce8aab12f..bbfd3b2519 100644 --- a/modules/moordyn/src/MoorDyn_Point.f90 +++ b/modules/moordyn/src/MoorDyn_Point.f90 @@ -161,8 +161,8 @@ SUBROUTINE Connect_GetStateDeriv(Connect, Xd, m, p) !INTEGER(IntKi) :: l ! index of attached lines INTEGER(IntKi) :: J ! index - INTEGER(IntKi) :: K ! index - Real(DbKi) :: Sum1 ! for adding things +! INTEGER(IntKi) :: K ! index +! Real(DbKi) :: Sum1 ! for adding things Real(DbKi) :: S(3,3) ! inverse mass matrix @@ -215,9 +215,9 @@ SUBROUTINE Connect_DoRHS(Connect, m, p) !TYPE(MD_MiscVarType), INTENT(INOUT) :: m ! misc/optimization variables INTEGER(IntKi) :: l ! index of attached lines - INTEGER(IntKi) :: I ! index +! INTEGER(IntKi) :: I ! index INTEGER(IntKi) :: J ! index - INTEGER(IntKi) :: K ! index +! INTEGER(IntKi) :: K ! index Real(DbKi) :: Fnet_i(3) ! force from an attached line Real(DbKi) :: Moment_dummy(3) ! dummy vector to hold unused line end moments diff --git a/modules/moordyn/src/MoorDyn_Registry.txt b/modules/moordyn/src/MoorDyn_Registry.txt index a3ed6ef2b9..35f1543655 100644 --- a/modules/moordyn/src/MoorDyn_Registry.txt +++ b/modules/moordyn/src/MoorDyn_Registry.txt @@ -40,12 +40,6 @@ typedef ^ ^ Logical Linearize - .FA #typedef ^ ^ DbKi zetaGrid {:}{:} - - "water surface elevations time series at each grid point" - #typedef ^ ^ DbKi PDynGrid {:}{:} - - "water dynamic pressure time series at each grid point" - -typedef ^ ^ ReKi WaveVel {:}{:}{:} - - "" - -typedef ^ ^ ReKi WaveAcc {:}{:}{:} - - "" - -typedef ^ ^ ReKi WavePDyn {:}{:} - - "" - -typedef ^ ^ ReKi WaveElev {:}{:} - - "" - -typedef ^ ^ DbKi WaveTime {:} - - "Should this be double precision?" - - # nvm # Farm-level simulation inputs - these are passed by FAST.Farm - the arrays are populated from the individual turbine-level MoorDyn instances # nvm typedef ^ ^ MeshType FarmCoupledKinematics {:} - - "array of input kinematics meshes from each of the turbine-level MoorDyn instances" "[m, m/s]" # nvm typedef ^ ^ IntKi FarmNCpldBodies {:} - - "" "" diff --git a/modules/moordyn/src/MoorDyn_Rod.f90 b/modules/moordyn/src/MoorDyn_Rod.f90 index 26bd00c96b..1e85e92c73 100644 --- a/modules/moordyn/src/MoorDyn_Rod.f90 +++ b/modules/moordyn/src/MoorDyn_Rod.f90 @@ -59,7 +59,7 @@ SUBROUTINE Rod_Setup(Rod, RodProp, endCoords, p, ErrStat, ErrMsg) CHARACTER(*), INTENT( INOUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None INTEGER(4) :: i ! Generic index - INTEGER(4) :: K ! Generic index +! INTEGER(4) :: K ! Generic index INTEGER(IntKi) :: N Real(DbKi) :: phi, beta, sinPhi, cosPhi, tanPhi, sinBeta, cosBeta ! various orientation things @@ -197,9 +197,9 @@ SUBROUTINE Rod_Initialize(Rod, states, m) TYPE(MD_MiscVarType), INTENT(INOUT) :: m ! passing along all mooring objects - INTEGER(IntKi) :: l ! index of segments or nodes along line - REAL(DbKi) :: rRef(3) ! reference position of mesh node - REAL(DbKi) :: OrMat(3,3) ! DCM for body orientation based on r6_in +! INTEGER(IntKi) :: l ! index of segments or nodes along line +! REAL(DbKi) :: rRef(3) ! reference position of mesh node +! REAL(DbKi) :: OrMat(3,3) ! DCM for body orientation based on r6_in IF (wordy > 0) print *, "initializing Rod ", Rod%idNum @@ -248,7 +248,7 @@ SUBROUTINE Rod_SetKinematics(Rod, r6_in, v6_in, a6_in, t, m) Real(DbKi), INTENT(IN ) :: t ! instantaneous time TYPE(MD_MiscVarType), INTENT(INOUT) :: m ! passing along all mooring objects - INTEGER(IntKi) :: l +! INTEGER(IntKi) :: l Rod%time = t ! store current time @@ -296,7 +296,7 @@ SUBROUTINE Rod_SetState(Rod, X, t, m) Real(DbKi), INTENT(IN ) :: t ! instantaneous time TYPE(MD_MiscVarType), INTENT(INOUT) :: m ! passing along all mooring objects - INTEGER(IntKi) :: J ! index +! INTEGER(IntKi) :: J ! index ! for a free Rod, there are 12 states: @@ -361,13 +361,13 @@ SUBROUTINE Rod_SetDependentKin(Rod, t, m, initial) LOGICAL, INTENT(IN ) :: initial ! true if this is the call during initialization (in which case avoid calling any Lines yet) INTEGER(IntKi) :: l ! index of segments or nodes along line - INTEGER(IntKi) :: J ! index +! INTEGER(IntKi) :: J ! index INTEGER(IntKi) :: N ! number of segments - REAL(DbKi) :: qEnd(3) ! unit vector of attached line end segment, following same direction convention as Rod's q vector +! REAL(DbKi) :: qEnd(3) ! unit vector of attached line end segment, following same direction convention as Rod's q vector REAL(DbKi) :: q_EI_dl(3) ! <<<< add description - REAL(DbKi) :: EIend ! bending stiffness of attached line end segment - REAL(DbKi) :: dlEnd ! stretched length of attached line end segment +! REAL(DbKi) :: EIend ! bending stiffness of attached line end segment +! REAL(DbKi) :: dlEnd ! stretched length of attached line end segment REAL(DbKi) :: qMomentSum(3) ! summation of qEnd*EI/dl_stretched (with correct sign) for each attached line @@ -452,7 +452,7 @@ SUBROUTINE Rod_GetStateDeriv(Rod, Xd, m, p) Real(DbKi) :: acc(6) ! 6DOF acceleration vector about reference point - Real(DbKi) :: Mcpl(3) ! moment in response to end A acceleration due to inertial coupling +! Real(DbKi) :: Mcpl(3) ! moment in response to end A acceleration due to inertial coupling Real(DbKi) :: y_temp (6) ! temporary vector for LU decomposition Real(DbKi) :: LU_temp(6,6) ! temporary matrix for LU decomposition @@ -563,7 +563,7 @@ SUBROUTINE Rod_DoRHS(Rod, m, p) Real(DbKi) :: m_i, v_i ! Real(DbKi) :: zeta ! wave elevation above/below a given node !Real(DbKi) :: h0 ! distance along rod centerline from end A to the waterplane - Real(DbKi) :: deltaL ! submerged length of a given segment +! Real(DbKi) :: deltaL ! submerged length of a given segment Real(DbKi) :: Lsum ! cumulative length along rod axis from bottom Real(DbKi) :: dL ! length attributed to node Real(DbKi) :: VOF ! fraction of volume associated with node that is submerged diff --git a/modules/moordyn/src/MoorDyn_Types.f90 b/modules/moordyn/src/MoorDyn_Types.f90 index b35edada02..873aabf164 100644 --- a/modules/moordyn/src/MoorDyn_Types.f90 +++ b/modules/moordyn/src/MoorDyn_Types.f90 @@ -57,11 +57,6 @@ MODULE MoorDyn_Types LOGICAL :: Echo !< echo parameter - do we want to echo the header line describing the input file? [-] CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: OutList !< string containing list of output channels requested in input file [-] LOGICAL :: Linearize = .FALSE. !< Flag that tells this module if the glue code wants to linearize. [-] - REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveVel !< [-] - REAL(ReKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveAcc !< [-] - REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: WavePDyn !< [-] - REAL(ReKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElev !< [-] - REAL(DbKi) , DIMENSION(:), ALLOCATABLE :: WaveTime !< Should this be double precision? [-] END TYPE MD_InitInputType ! ======================= ! ========= MD_LineProp ======= @@ -640,7 +635,6 @@ SUBROUTINE MD_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrSt INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'MD_CopyInitInput' @@ -700,78 +694,6 @@ SUBROUTINE MD_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrSt DstInitInputData%OutList = SrcInitInputData%OutList ENDIF DstInitInputData%Linearize = SrcInitInputData%Linearize -IF (ALLOCATED(SrcInitInputData%WaveVel)) THEN - i1_l = LBOUND(SrcInitInputData%WaveVel,1) - i1_u = UBOUND(SrcInitInputData%WaveVel,1) - i2_l = LBOUND(SrcInitInputData%WaveVel,2) - i2_u = UBOUND(SrcInitInputData%WaveVel,2) - i3_l = LBOUND(SrcInitInputData%WaveVel,3) - i3_u = UBOUND(SrcInitInputData%WaveVel,3) - IF (.NOT. ALLOCATED(DstInitInputData%WaveVel)) THEN - ALLOCATE(DstInitInputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveVel.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveVel = SrcInitInputData%WaveVel -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveAcc)) THEN - i1_l = LBOUND(SrcInitInputData%WaveAcc,1) - i1_u = UBOUND(SrcInitInputData%WaveAcc,1) - i2_l = LBOUND(SrcInitInputData%WaveAcc,2) - i2_u = UBOUND(SrcInitInputData%WaveAcc,2) - i3_l = LBOUND(SrcInitInputData%WaveAcc,3) - i3_u = UBOUND(SrcInitInputData%WaveAcc,3) - IF (.NOT. ALLOCATED(DstInitInputData%WaveAcc)) THEN - ALLOCATE(DstInitInputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveAcc.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveAcc = SrcInitInputData%WaveAcc -ENDIF -IF (ALLOCATED(SrcInitInputData%WavePDyn)) THEN - i1_l = LBOUND(SrcInitInputData%WavePDyn,1) - i1_u = UBOUND(SrcInitInputData%WavePDyn,1) - i2_l = LBOUND(SrcInitInputData%WavePDyn,2) - i2_u = UBOUND(SrcInitInputData%WavePDyn,2) - IF (.NOT. ALLOCATED(DstInitInputData%WavePDyn)) THEN - ALLOCATE(DstInitInputData%WavePDyn(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WavePDyn.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WavePDyn = SrcInitInputData%WavePDyn -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveElev)) THEN - i1_l = LBOUND(SrcInitInputData%WaveElev,1) - i1_u = UBOUND(SrcInitInputData%WaveElev,1) - i2_l = LBOUND(SrcInitInputData%WaveElev,2) - i2_u = UBOUND(SrcInitInputData%WaveElev,2) - IF (.NOT. ALLOCATED(DstInitInputData%WaveElev)) THEN - ALLOCATE(DstInitInputData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElev = SrcInitInputData%WaveElev -ENDIF -IF (ALLOCATED(SrcInitInputData%WaveTime)) THEN - i1_l = LBOUND(SrcInitInputData%WaveTime,1) - i1_u = UBOUND(SrcInitInputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitInputData%WaveTime)) THEN - ALLOCATE(DstInitInputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveTime = SrcInitInputData%WaveTime -ENDIF END SUBROUTINE MD_CopyInitInput SUBROUTINE MD_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) @@ -805,21 +727,6 @@ SUBROUTINE MD_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointe CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ALLOCATED(InitInputData%OutList)) THEN DEALLOCATE(InitInputData%OutList) -ENDIF -IF (ALLOCATED(InitInputData%WaveVel)) THEN - DEALLOCATE(InitInputData%WaveVel) -ENDIF -IF (ALLOCATED(InitInputData%WaveAcc)) THEN - DEALLOCATE(InitInputData%WaveAcc) -ENDIF -IF (ALLOCATED(InitInputData%WavePDyn)) THEN - DEALLOCATE(InitInputData%WavePDyn) -ENDIF -IF (ALLOCATED(InitInputData%WaveElev)) THEN - DEALLOCATE(InitInputData%WaveElev) -ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN - DEALLOCATE(InitInputData%WaveTime) ENDIF END SUBROUTINE MD_DestroyInitInput @@ -901,31 +808,6 @@ SUBROUTINE MD_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Int_BufSz = Int_BufSz + SIZE(InData%OutList)*LEN(InData%OutList) ! OutList END IF Int_BufSz = Int_BufSz + 1 ! Linearize - Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no - IF ( ALLOCATED(InData%WaveVel) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveVel upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel - END IF - Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no - IF ( ALLOCATED(InData%WaveAcc) ) THEN - Int_BufSz = Int_BufSz + 2*3 ! WaveAcc upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc - END IF - Int_BufSz = Int_BufSz + 1 ! WavePDyn allocated yes/no - IF ( ALLOCATED(InData%WavePDyn) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WavePDyn upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WavePDyn) ! WavePDyn - END IF - Int_BufSz = Int_BufSz + 1 ! WaveElev allocated yes/no - IF ( ALLOCATED(InData%WaveElev) ) THEN - Int_BufSz = Int_BufSz + 2*2 ! WaveElev upper/lower bounds for each dimension - Re_BufSz = Re_BufSz + SIZE(InData%WaveElev) ! WaveElev - END IF - Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no - IF ( ALLOCATED(InData%WaveTime) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension - Db_BufSz = Db_BufSz + SIZE(InData%WaveTime) ! WaveTime - END IF IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1062,111 +944,6 @@ SUBROUTINE MD_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg END IF IntKiBuf(Int_Xferred) = TRANSFER(InData%Linearize, IntKiBuf(1)) Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveVel) ) 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%WaveVel,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) - DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) - DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) - ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveAcc) ) 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%WaveAcc,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,2) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) - Int_Xferred = Int_Xferred + 2 - - DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) - DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) - DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) - ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WavePDyn) ) 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%WavePDyn,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WavePDyn,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WavePDyn,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WavePDyn,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WavePDyn,2), UBOUND(InData%WavePDyn,2) - DO i1 = LBOUND(InData%WavePDyn,1), UBOUND(InData%WavePDyn,1) - ReKiBuf(Re_Xferred) = InData%WavePDyn(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveElev) ) 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%WaveElev,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%WaveElev,2), UBOUND(InData%WaveElev,2) - DO i1 = LBOUND(InData%WaveElev,1), UBOUND(InData%WaveElev,1) - ReKiBuf(Re_Xferred) = InData%WaveElev(i1,i2) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%WaveTime) ) 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%WaveTime,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) - DbKiBuf(Db_Xferred) = InData%WaveTime(i1) - Db_Xferred = Db_Xferred + 1 - END DO - END IF END SUBROUTINE MD_PackInitInput SUBROUTINE MD_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -1184,7 +961,6 @@ SUBROUTINE MD_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err INTEGER(IntKi) :: i INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 - INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'MD_UnPackInitInput' @@ -1328,126 +1104,6 @@ SUBROUTINE MD_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err END IF OutData%Linearize = TRANSFER(IntKiBuf(Int_Xferred), OutData%Linearize) Int_Xferred = Int_Xferred + 1 - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) - ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) - DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) - DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) - OutData%WaveVel(i1,i2,i3) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) - ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) - DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) - DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) - OutData%WaveAcc(i1,i2,i3) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WavePDyn 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WavePDyn)) DEALLOCATE(OutData%WavePDyn) - ALLOCATE(OutData%WavePDyn(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WavePDyn.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WavePDyn,2), UBOUND(OutData%WavePDyn,2) - DO i1 = LBOUND(OutData%WavePDyn,1), UBOUND(OutData%WavePDyn,1) - OutData%WavePDyn(i1,i2) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev 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 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) - Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElev)) DEALLOCATE(OutData%WaveElev) - ALLOCATE(OutData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i2 = LBOUND(OutData%WaveElev,2), UBOUND(OutData%WaveElev,2) - DO i1 = LBOUND(OutData%WaveElev,1), UBOUND(OutData%WaveElev,1) - OutData%WaveElev(i1,i2) = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - END DO - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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%WaveTime)) DEALLOCATE(OutData%WaveTime) - ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) - OutData%WaveTime(i1) = DbKiBuf(Db_Xferred) - Db_Xferred = Db_Xferred + 1 - END DO - END IF END SUBROUTINE MD_UnPackInitInput SUBROUTINE MD_CopyLineProp( SrcLinePropData, DstLinePropData, CtrlCode, ErrStat, ErrMsg ) diff --git a/modules/nwtc-library/src/ModMesh.f90 b/modules/nwtc-library/src/ModMesh.f90 index 6661370353..e946a05d46 100644 --- a/modules/nwtc-library/src/ModMesh.f90 +++ b/modules/nwtc-library/src/ModMesh.f90 @@ -3601,14 +3601,18 @@ SUBROUTINE CreatePointMesh(mesh, posInit, orientInit, errStat, errMsg, hasMotion real(R8Ki), intent(in ) :: orientInit(3,3) !< Orientation (direction cosine matrix) of node; identity by default logical, intent(in ) :: hasMotion !< include displacements in mesh logical, intent(in ) :: hasLoads !< include loads in mesh - logical, optional, intent(in ) :: hasAcc !< include acceleration (default is true) + logical, optional, intent(in ) :: hasAcc !< include acceleration (default is true) integer(IntKi) , intent(out) :: errStat ! Status of error message character(*) , intent(out) :: errMsg ! Error message if ErrStat /= ErrID_None - logical :: hasAcc_loc !< include acceleration - integer(IntKi) :: errStat2 ! local status of error message - character(ErrMsgLen) :: errMsg2 ! local error message if ErrStat /= ErrID_None + logical :: hasAcc_loc !< include acceleration + + integer(IntKi) :: errStat2 ! local status of error message + character(ErrMsgLen) :: errMsg2 ! local error message if ErrStat /= ErrID_None + character(*), parameter :: RoutineName = 'CreatePointMesh' + errStat = ErrID_None errMsg = '' + hasAcc_loc = .true. if (present(hasAcc)) hasAcc_loc=hasAcc @@ -3616,18 +3620,20 @@ SUBROUTINE CreatePointMesh(mesh, posInit, orientInit, errStat, errMsg, hasMotion Orientation=hasMotion, TranslationDisp=hasMotion, TranslationVel=hasMotion, RotationVel=hasMotion, & TranslationAcc=hasAcc_loc, RotationAcc=hasAcc_loc, & Force = hasLoads, Moment = hasLoads) - call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'CreatePointMesh') + call SetErrStat(errStat2, errMsg2, errStat, errMsg, RoutineName) if (ErrStat >= AbortErrLev) return call MeshPositionNode(mesh, 1, posInit, errStat2, errMsg2, orientInit); - call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'CreatePointMesh') + call SetErrStat(errStat2, errMsg2, errStat, errMsg, RoutineName) call MeshConstructElement(mesh, ELEMENT_POINT, errStat2, errMsg2, p1=1); - call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'CreatePointMesh') + call SetErrStat(errStat2, errMsg2, errStat, errMsg, RoutineName) call MeshCommit(mesh, errStat2, errMsg2); - call SetErrStat(errStat2, errMsg2, errStat, errMsg, 'CreatePointMesh') + call SetErrStat(errStat2, errMsg2, errStat, errMsg, RoutineName) + + ! bjj: this initialization in done in MeshCreate already... ! Initialize fields if (hasLoads) then mesh%Force = 0.0_ReKi diff --git a/modules/nwtc-library/src/NWTC_IO.f90 b/modules/nwtc-library/src/NWTC_IO.f90 index 231b7e4a3c..a1d2570ca3 100644 --- a/modules/nwtc-library/src/NWTC_IO.f90 +++ b/modules/nwtc-library/src/NWTC_IO.f90 @@ -1999,7 +1999,7 @@ FUNCTION GetErrStr ( ErrID ) INTEGER(IntKi), INTENT(IN) :: ErrID !< error status/level ! Function delcaration - CHARACTER(13) :: GetErrStr !< description of the ErrID level + CHARACTER(25) :: GetErrStr !< description of the ErrID level SELECT CASE ( ErrID ) CASE ( ErrID_None ) @@ -2013,7 +2013,7 @@ FUNCTION GetErrStr ( ErrID ) CASE ( ErrID_Fatal ) GetErrStr = 'FATAL ERROR' CASE DEFAULT - GetErrStr = 'Unknown ErrID' + GetErrStr = 'Unknown ErrID '//TRIM(Num2LStr(ErrID)) END SELECT @@ -5813,9 +5813,10 @@ SUBROUTINE ReadOutputList ( UnIn, Fil, CharAry, AryLenRead, AryName, AryDescr, E IF ( AryLenRead > MaxAryLen ) THEN - ErrStat = ErrID_Fatal + ErrStat = ErrID_Severe ErrMsg = 'ReadOutputList:The maximum number of output channels allowed is '//TRIM( Int2LStr(MaxAryLen) )//'.' - RETURN + AryLenRead = AryLenRead - NumWords ! The total number of output channels read in so far. +! RETURN ! finish reading the file instead of returning first ELSE @@ -5823,6 +5824,7 @@ SUBROUTINE ReadOutputList ( UnIn, Fil, CharAry, AryLenRead, AryName, AryDescr, E END IF + END DO @@ -5851,10 +5853,11 @@ SUBROUTINE ReadOutputListFromFileInfo ( FileInfo, LineNum, CharAry, AryLenRead, INTEGER :: MaxAryLen ! Maximum length of the array being read INTEGER :: NumWords ! Number of words contained on a line + INTEGER :: ErrStat2 - INTEGER :: QuoteCh ! Character position. +! INTEGER :: QuoteCh ! Character position. - CHARACTER(1000) :: OutLine ! Character string read from file, containing output list + CHARACTER(MaxFileInfoLineLen) :: OutLine ! Character string read from file, containing output list CHARACTER(3) :: EndOfFile @@ -5876,22 +5879,28 @@ SUBROUTINE ReadOutputListFromFileInfo ( FileInfo, LineNum, CharAry, AryLenRead, IF ( PRESENT(UnEc) ) THEN if (UnEc > 0) WRITE(UnEc, '(A)') trim(FileInfo%Lines(LineNum)) ENDIF - OutLine = adjustl(trim(FileInfo%Lines(LineNum))) ! remove leading whitespace + +! OutLine = adjustl(trim(FileInfo%Lines(LineNum))) ! remove leading whitespace + READ (FileInfo%Lines(LineNum),*,IOSTAT=ErrStat2) OutLine ! read first output channel name, or remove quotes on list of outputs so that this behaves like ReadOutputList + IF (ErrStat2 /= 0) THEN + ErrStat = ErrID_Fatal + ErrMsg = 'Error reading from OutList. Line # '//trim(num2lstr(LineNum))//': "'//trim(FileInfo%Lines(LineNum))//'".' + RETURN + END IF + + !IF ( PRESENT(UnEc) ) THEN + ! IF ( UnEc > 0 ) WRITE (UnEc,Ec_StrFrmt) OutLine, "List of user-requested output channels", '"OutList"' + !END IF + + LineNum = LineNum + 1 + EndOfFile = OutLine(1:3) ! EndOfFile is the 1st 3 characters of OutLine CALL Conv2UC( EndOfFile ) ! Convert EndOfFile to upper case IF ( EndOfFile == 'END' ) THEN - LineNum = LineNum + 1 EXIT ! End of OutList has been reached; therefore, exit this DO ENDIF - ! Check if we have a quoted string at the begining. Ignore anything outside the quotes if so (this is the ReadVar behaviour for quoted strings). - if (SCAN(OutLine(1:1), '''"' ) == 1_IntKi ) then - QuoteCh = SCAN( OutLine(2:), '''"' ) ! last quote - if (QuoteCh < 1) QuoteCh = LEN_TRIM(OutLine) ! in case no end quote - OutLine(QuoteCh+2:) = ' ' ! blank out everything after last quote - endif - NumWords = CountWords( OutLine ) ! The number of words in OutLine. AryLenRead = AryLenRead + NumWords ! The total number of output channels read in so far. @@ -5900,9 +5909,10 @@ SUBROUTINE ReadOutputListFromFileInfo ( FileInfo, LineNum, CharAry, AryLenRead, IF ( AryLenRead > MaxAryLen ) THEN - ErrStat = ErrID_Fatal + ErrStat = ErrID_Severe ErrMsg = 'ReadOutputList:The maximum number of output channels allowed is '//TRIM( Int2LStr(MaxAryLen) )//'.' - RETURN + AryLenRead = AryLenRead - NumWords ! The total number of output channels read in so far. +! RETURN ! finish processing the OutList variable before returning ELSE @@ -5910,7 +5920,6 @@ SUBROUTINE ReadOutputListFromFileInfo ( FileInfo, LineNum, CharAry, AryLenRead, END IF - LineNum = LineNum+1 if (LineNum > FileInfo%NumLines) exit ! Don't overrun end of file in case no END found @@ -6236,7 +6245,6 @@ SUBROUTINE ReadR4Var ( UnIn, Fil, Var, VarName, VarDescr, ErrStat, ErrMsg, UnEc CALL ReadNum ( UnIn, Fil, Word, VarName, ErrStat, ErrMsg ) IF ( ErrStat >= AbortErrLev) RETURN ! If we're about to read a T/F and treat it as a number, we have a less severe ErrStat - READ (Word,*,IOSTAT=IOS) Var CALL CheckIOS ( IOS, Fil, VarName, NumType, ErrStat, ErrMsg ) @@ -7788,6 +7796,5 @@ SUBROUTINE WrScr1 ( Str ) RETURN END SUBROUTINE WrScr1 - END MODULE NWTC_IO diff --git a/modules/nwtc-library/src/NWTC_Num.f90 b/modules/nwtc-library/src/NWTC_Num.f90 index de4fcd8def..3168adb776 100644 --- a/modules/nwtc-library/src/NWTC_Num.f90 +++ b/modules/nwtc-library/src/NWTC_Num.f90 @@ -209,6 +209,13 @@ MODULE NWTC_Num MODULE PROCEDURE InterpStpReal8 END INTERFACE + !> \copydoc nwtc_num::interpstpmat4 + INTERFACE InterpStpMat + MODULE PROCEDURE InterpStpMat4 + MODULE PROCEDURE InterpStpMat8 + END INTERFACE + + !> \copydoc nwtc_num::interparrayr4 INTERFACE InterpArray MODULE PROCEDURE InterpArrayR4 @@ -3184,11 +3191,11 @@ END FUNCTION InterpStpReal8 !! especially useful when the calling routines save the value from the last time this routine was called !! for a given case where XVal does not change much from call to call. !! It returns the first or last Y() row value if XVal is outside the limits of XAry(). - SUBROUTINE InterpStpMat( XVal, XAry, Y, Ind, AryLen, yInterp ) + SUBROUTINE InterpStpMat4( XVal, XAry, Y, Ind, AryLen, yInterp ) ! Function declaration. - REAL(ReKi), intent(out) :: yInterp(:) !< The interpolated value(s) of Y(dim=2) at XVal + REAL(R4Ki), intent(out) :: yInterp(:) !< The interpolated value(s) of Y(dim=2) at XVal ! Argument declarations. @@ -3196,9 +3203,72 @@ SUBROUTINE InterpStpMat( XVal, XAry, Y, Ind, AryLen, yInterp ) INTEGER, INTENT(IN) :: AryLen !< Length of the arrays. INTEGER, INTENT(INOUT) :: Ind !< Initial and final index into the arrays. - REAL(ReKi), INTENT(IN) :: XAry (AryLen) !< Array of X values to be interpolated. - REAL(ReKi), INTENT(IN) :: XVal !< X value to be interpolated. - REAL(ReKi), INTENT(IN) :: Y (:,:) !< Matrix of Y values to be interpolated; First dimension is AryLen. + REAL(R4Ki), INTENT(IN) :: XAry (AryLen) !< Array of X values to be interpolated. + REAL(R4Ki), INTENT(IN) :: XVal !< X value to be interpolated. + REAL(R4Ki), INTENT(IN) :: Y (:,:) !< Matrix of Y values to be interpolated; First dimension is AryLen. + + + + ! Let's check the limits first. + + IF ( XVal <= XAry(1) ) THEN + yInterp = Y(1,:) + Ind = 1 + RETURN + ELSE IF ( XVal >= XAry(AryLen) ) THEN + yInterp = Y(AryLen,:) + Ind = MAX(AryLen - 1, 1) + RETURN + END IF + + + ! Let's interpolate! + + Ind = MAX( MIN( Ind, AryLen-1 ), 1 ) + + DO + + IF ( XVal < XAry(Ind) ) THEN + + Ind = Ind - 1 + + ELSE IF ( XVal >= XAry(Ind+1) ) THEN + + Ind = Ind + 1 + + ELSE + + yInterp = ( Y(Ind+1,:) - Y(Ind,:) )*( XVal - XAry(Ind) )/( XAry(Ind+1) - XAry(Ind) ) + Y(Ind,:) + RETURN + + END IF + + END DO + + + RETURN + END SUBROUTINE InterpStpMat4 +!======================================================================= +!> This funtion returns a y-value array that corresponds to an input x-value by interpolating into the arrays. +!! It uses the passed index as the starting point and does a stepwise interpolation from there. This is +!! especially useful when the calling routines save the value from the last time this routine was called +!! for a given case where XVal does not change much from call to call. +!! It returns the first or last Y() row value if XVal is outside the limits of XAry(). + SUBROUTINE InterpStpMat8( XVal, XAry, Y, Ind, AryLen, yInterp ) + + ! Function declaration. + + REAL(R8Ki), intent(out) :: yInterp(:) !< The interpolated value(s) of Y(dim=2) at XVal + + + ! Argument declarations. + + INTEGER, INTENT(IN) :: AryLen !< Length of the arrays. + INTEGER, INTENT(INOUT) :: Ind !< Initial and final index into the arrays. + + REAL(R8Ki), INTENT(IN) :: XAry (AryLen) !< Array of X values to be interpolated. + REAL(R8Ki), INTENT(IN) :: XVal !< X value to be interpolated. + REAL(R8Ki), INTENT(IN) :: Y (:,:) !< Matrix of Y values to be interpolated; First dimension is AryLen. @@ -3240,7 +3310,7 @@ SUBROUTINE InterpStpMat( XVal, XAry, Y, Ind, AryLen, yInterp ) RETURN - END SUBROUTINE InterpStpMat + END SUBROUTINE InterpStpMat8 !======================================================================= !< This routine linearly interpolates Dataset. It is !! set for a 2-d interpolation on x and y of the input point. diff --git a/modules/openfast-library/CMakeLists.txt b/modules/openfast-library/CMakeLists.txt index d549e705f9..d6d973f5e1 100644 --- a/modules/openfast-library/CMakeLists.txt +++ b/modules/openfast-library/CMakeLists.txt @@ -56,6 +56,7 @@ target_link_libraries(openfast_prelib moordynlib orcaflexlib sctypeslib + seastlib servodynlib subdynlib ) diff --git a/modules/openfast-library/src/FAST_Library.f90 b/modules/openfast-library/src/FAST_Library.f90 index e962337d3a..1a02f350ff 100644 --- a/modules/openfast-library/src/FAST_Library.f90 +++ b/modules/openfast-library/src/FAST_Library.f90 @@ -134,6 +134,7 @@ subroutine FAST_Sizes(iTurb, InputFileName_c, AbortErrLev_c, NumOuts_c, dt_c, dt ! -- MATLAB Integration -- ! Make sure fast farm integration is false ExternInitData%FarmIntegration = .false. + ExternInitData%WaveFieldMod = 0 IF ( NINT(InitInpAry(2)) == 1 ) THEN ExternInitData%LidRadialVel = .true. diff --git a/modules/openfast-library/src/FAST_Lin.f90 b/modules/openfast-library/src/FAST_Lin.f90 index c412b5f1f3..9300a7c4bb 100644 --- a/modules/openfast-library/src/FAST_Lin.f90 +++ b/modules/openfast-library/src/FAST_Lin.f90 @@ -1860,7 +1860,7 @@ SUBROUTINE Glue_Jacobians( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD, IfW, OpFM, ! \f$ \frac{\partial U_\Lambda^{SD}}{\partial y^{ED}} \end{bmatrix} = \f$ ! \f$ \frac{\partial U_\Lambda^{SD}}{\partial y^{HD}} \end{bmatrix} = \f$ ! \f$ \frac{\partial U_\Lambda^{SD}}{\partial y^{SD}} \end{bmatrix} = \f$ - ! \f$ \frac{\partial U_\Lambda^{SD}}{\partial y^{MAP}} \end{bmatrix} = \f$ (dUdy block row 7=AD) + ! \f$ \frac{\partial U_\Lambda^{SD}}{\partial y^{MAP}} \end{bmatrix} = \f$ (dUdy block row 7=SD) !............ if (p_FAST%CompHydro == MODULE_HD) then call Linear_HD_InputSolve_dy( p_FAST, y_FAST, HD%Input(1), ED%y, SD%y, MeshMapData, dUdy, ErrStat2, ErrMsg2 ) @@ -2070,15 +2070,15 @@ SUBROUTINE Linear_ED_InputSolve_du( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD if ( allocated(SrvD%y%SStCLoadMesh) ) then do j=1,size(SrvD%y%SStCLoadMesh) if (SrvD%y%SStCLoadMesh(j)%Committed) then - call Linearize_Point_to_Point( SrvD%y%SStCLoadMesh(j), u_ED%PlatformPtMesh, MeshMapData%SStC_P_P_2_ED_P(j), ErrStat2, ErrMsg2, SrvD%Input(1)%SStCMotionMesh(j), y_ED%PlatformPtMesh ) + call Linearize_Point_to_Point( SrvD%y%SStCLoadMesh(j), u_ED%PlatformPtMesh, MeshMapData%SStC_P_P_2_SubStructure(j), ErrStat2, ErrMsg2, SrvD%Input(1)%SStCMotionMesh(j), y_ED%PlatformPtMesh ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) ED_Start_mt = Indx_u_ED_Platform_Start(u_ED, y_FAST) & + u_ED%PlatformPtMesh%NNodes * 3 ! 3 forces at the nacelle (so we start at the moments) SrvD_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + SrvD%p%Jac_Idx_SStC_u(1,j) ! SrvD is source in the mapping, so we want M_{uSm} (moments) - if (allocated(MeshMapData%SStC_P_P_2_ED_P(j)%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%SStC_P_P_2_ED_P(j)%dM%m_us, ED_Start_mt, SrvD_Start ) + if (allocated(MeshMapData%SStC_P_P_2_SubStructure(j)%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%SStC_P_P_2_SubStructure(j)%dM%m_us, ED_Start_mt, SrvD_Start ) endif endif enddo @@ -2193,12 +2193,12 @@ SUBROUTINE Linear_ED_InputSolve_du( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD ! we're mapping loads, so we also need the sibling meshes' displacements: HD_Start = Indx_u_HD_Morison_Start(HD%Input(1), y_FAST) - call Linearize_Point_to_Point( HD%y%Morison%Mesh, u_ED%PlatformPtMesh, MeshMapData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2, HD%Input(1)%Morison%Mesh, y_ED%PlatformPtMesh) !HD%Input(1)%Morison and y_ED%PlatformPtMesh contain the displaced positions for load calculations + call Linearize_Point_to_Point( HD%y%Morison%Mesh, u_ED%PlatformPtMesh, MeshMapData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, HD%Input(1)%Morison%Mesh, y_ED%PlatformPtMesh) !HD%Input(1)%Morison and y_ED%PlatformPtMesh contain the displaced positions for load calculations call SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ! HD is source in the mapping, so we want M_{uSm} - if (allocated(MeshMapData%HD_M_P_2_ED_P%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%HD_M_P_2_ED_P%dM%m_us, ED_Start_mt, HD_Start ) + if (allocated(MeshMapData%HD_M_P_2_SubStructure%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%HD_M_P_2_SubStructure%dM%m_us, ED_Start_mt, HD_Start ) end if end if @@ -2208,12 +2208,12 @@ SUBROUTINE Linear_ED_InputSolve_du( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD ! we're mapping loads, so we also need the sibling meshes' displacements: HD_Start = Indx_u_HD_WAMIT_Start(HD%Input(1), y_FAST) - call Linearize_Point_to_Point( HD%y%WAMITMesh, u_ED%PlatformPtMesh, MeshMapData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2, HD%Input(1)%WAMITMesh, y_ED%PlatformPtMesh) !HD%Input(1)%WAMITMesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations + call Linearize_Point_to_Point( HD%y%WAMITMesh, u_ED%PlatformPtMesh, MeshMapData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, HD%Input(1)%WAMITMesh, y_ED%PlatformPtMesh) !HD%Input(1)%WAMITMesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations call SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ! HD is source in the mapping, so we want M_{uSm} - if (allocated(MeshMapData%HD_W_P_2_ED_P%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%HD_W_P_2_ED_P%dM%m_us, ED_Start_mt, HD_Start ) + if (allocated(MeshMapData%HD_W_P_2_SubStructure%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%HD_W_P_2_SubStructure%dM%m_us, ED_Start_mt, HD_Start ) end if end if @@ -2235,12 +2235,12 @@ SUBROUTINE Linear_ED_InputSolve_du( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD ! NOTE: Assumes at least one MAP Fairlead point - CALL Linearize_Point_to_Point( MAPp%y%ptFairleadLoad, u_ED%PlatformPtMesh, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, MAPp%Input(1)%PtFairDisplacement, y_ED%PlatformPtMesh) !MAPp%Input(1)%ptFairleadLoad and y_ED%PlatformPtMesh contain the displaced positions for load calculations + CALL Linearize_Point_to_Point( MAPp%y%ptFairleadLoad, u_ED%PlatformPtMesh, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, MAPp%Input(1)%PtFairDisplacement, y_ED%PlatformPtMesh) !MAPp%Input(1)%ptFairleadLoad and y_ED%PlatformPtMesh contain the displaced positions for load calculations CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - ! HD is source in the mapping, so we want M_{uSm} - if (allocated(MeshMapData%Mooring_P_2_ED_P%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%Mooring_P_2_ED_P%dM%m_us, ED_Start_mt, MAP_Start ) + ! MAP is source in the mapping, so we want M_{uSm} + if (allocated(MeshMapData%Mooring_2_Structure%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%Mooring_2_Structure%dM%m_us, ED_Start_mt, MAP_Start ) end if !.......... @@ -2258,12 +2258,12 @@ SUBROUTINE Linear_ED_InputSolve_du( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD ! NOTE: Assumes at least one coupled MD object - CALL Linearize_Point_to_Point( MD%y%CoupledLoads(1), u_ED%PlatformPtMesh, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, MD%Input(1)%CoupledKinematics(1), y_ED%PlatformPtMesh) + CALL Linearize_Point_to_Point( MD%y%CoupledLoads(1), u_ED%PlatformPtMesh, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, MD%Input(1)%CoupledKinematics(1), y_ED%PlatformPtMesh) CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ! HD is source in the mapping, so we want M_{uSm} - if (allocated(MeshMapData%Mooring_P_2_ED_P%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%Mooring_P_2_ED_P%dM%m_us, ED_Start_mt, MD_Start ) + if (allocated(MeshMapData%Mooring_2_Structure%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%Mooring_2_Structure%dM%m_us, ED_Start_mt, MD_Start ) end if end if @@ -2320,13 +2320,13 @@ SUBROUTINE Linear_SD_InputSolve_du( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, + u_SD%LMesh%NNodes * 3 ! 3 forces at each node (we're going to start at the moments) do j=1,size(SrvD%y%SStCLoadMesh) if (SrvD%y%SStCLoadMesh(j)%Committed) then - call Linearize_Point_to_Point( SrvD%y%SStCLoadMesh(j), u_SD%LMesh, MeshMapData%SStC_P_P_2_SD_P(j), ErrStat2, ErrMsg2, SrvD%Input(1)%SStCMotionMesh(j), y_SD%Y3Mesh ) + call Linearize_Point_to_Point( SrvD%y%SStCLoadMesh(j), u_SD%LMesh, MeshMapData%SStC_P_P_2_SubStructure(j), ErrStat2, ErrMsg2, SrvD%Input(1)%SStCMotionMesh(j), y_SD%Y3Mesh ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) SrvD_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + SrvD%p%Jac_Idx_SStC_u(1,j) ! SrvD is source in the mapping, so we want M_{uSm} (moments) - if (allocated(MeshMapData%SStC_P_P_2_SD_P(j)%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%SStC_P_P_2_SD_P(j)%dM%m_us, SD_Start, SrvD_Start ) + if (allocated(MeshMapData%SStC_P_P_2_SubStructure(j)%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%SStC_P_P_2_SubStructure(j)%dM%m_us, SD_Start, SrvD_Start ) endif endif enddo @@ -2378,12 +2378,12 @@ SUBROUTINE Linear_SD_InputSolve_du( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, ! we're mapping loads, so we also need the sibling meshes' displacements: HD_Start = Indx_u_HD_Morison_Start(HD%Input(1), y_FAST) - call Linearize_Point_to_Point( HD%y%Morison%Mesh, u_SD%LMesh, MeshMapData%HD_M_P_2_SD_P, ErrStat2, ErrMsg2, HD%Input(1)%Morison%Mesh, y_SD%Y2Mesh) !HD%Input(1)%Mesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations + call Linearize_Point_to_Point( HD%y%Morison%Mesh, u_SD%LMesh, MeshMapData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, HD%Input(1)%Morison%Mesh, y_SD%Y2Mesh) !HD%Input(1)%Mesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations call SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ! HD is source in the mapping, so we want M_{uSm} - if (allocated(MeshMapData%HD_M_P_2_SD_P%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%HD_M_P_2_SD_P%dM%m_us, SD_Start, HD_Start ) + if (allocated(MeshMapData%HD_M_P_2_SubStructure%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%HD_M_P_2_SubStructure%dM%m_us, SD_Start, HD_Start ) end if @@ -2396,12 +2396,12 @@ SUBROUTINE Linear_SD_InputSolve_du( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, ! we're mapping loads, so we also need the sibling meshes' displacements: HD_Start = Indx_u_HD_WAMIT_Start(HD%Input(1), y_FAST) - call Linearize_Point_to_Point( HD%y%WAMITMesh, u_SD%LMesh, MeshMapData%HD_W_P_2_SD_P, ErrStat2, ErrMsg2, HD%Input(1)%WAMITMesh, y_SD%Y2Mesh) !HD%Input(1)%Mesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations + call Linearize_Point_to_Point( HD%y%WAMITMesh, u_SD%LMesh, MeshMapData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, HD%Input(1)%WAMITMesh, y_SD%Y2Mesh) !HD%Input(1)%Mesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations call SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ! HD is source in the mapping, so we want M_{uSm} - if (allocated(MeshMapData%HD_W_P_2_SD_P%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%HD_W_P_2_SD_P%dM%m_us, SD_Start, HD_Start ) + if (allocated(MeshMapData%HD_W_P_2_SubStructure%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%HD_W_P_2_SubStructure%dM%m_us, SD_Start, HD_Start ) end if @@ -2419,15 +2419,17 @@ SUBROUTINE Linear_SD_InputSolve_du( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, MAP_Start = y_FAST%Lin%Modules(MODULE_MAP)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - ! NOTE: Assumes at least one MAP Fairlead point - - CALL Linearize_Point_to_Point( MAPp%y%ptFairleadLoad, u_SD%LMesh, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, MAPp%Input(1)%PtFairDisplacement, y_SD%Y3Mesh) !MAPp%Input(1)%ptFairleadLoad and y_SD%Y3Mesh contain the displaced positions for load calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - - ! SD is source in the mapping, so we want M_{uSm} - if (allocated(MeshMapData%Mooring_P_2_SD_P%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%Mooring_P_2_SD_P%dM%m_us, SD_Start, MAP_Start ) - end if + MAP_Start = y_FAST%Lin%Modules(MODULE_MAP)%Instance(1)%LinStartIndx(LIN_INPUT_COL) + + ! NOTE: Assumes at least one MAP Fairlead point + + CALL Linearize_Point_to_Point( MAPp%y%ptFairleadLoad, u_SD%LMesh, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, MAPp%Input(1)%PtFairDisplacement, y_SD%Y3Mesh) !MAPp%Input(1)%ptFairleadLoad and y_SD%Y3Mesh contain the displaced positions for load calculations + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + + ! SD is source in the mapping, so we want M_{uSm} + if (allocated(MeshMapData%Mooring_2_Structure%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%Mooring_2_Structure%dM%m_us, SD_Start, MAP_Start ) + end if !.......... ! dU^{SD}/du^{MD} @@ -2441,12 +2443,12 @@ SUBROUTINE Linear_SD_InputSolve_du( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, ! NOTE: Assumes at least one coupled MD object - CALL Linearize_Point_to_Point( MD%y%CoupledLoads(1), u_SD%LMesh, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, MD%Input(1)%CoupledKinematics(1), y_SD%Y3Mesh) + CALL Linearize_Point_to_Point( MD%y%CoupledLoads(1), u_SD%LMesh, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, MD%Input(1)%CoupledKinematics(1), y_SD%Y3Mesh) CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ! SD is source in the mapping, so we want M_{uSm} - if (allocated(MeshMapData%Mooring_P_2_SD_P%dM%m_us )) then - call SetBlockMatrix( dUdu, MeshMapData%Mooring_P_2_SD_P%dM%m_us, SD_Start, MD_Start ) + if (allocated(MeshMapData%Mooring_2_Structure%dM%m_us )) then + call SetBlockMatrix( dUdu, MeshMapData%Mooring_2_Structure%dM%m_us, SD_Start, MD_Start ) end if end if @@ -2499,7 +2501,7 @@ SUBROUTINE Linear_SD_InputSolve_dy( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, do j=1,size(SrvD%y%SStCLoadMesh) if (SrvD%y%SStCLoadMesh(j)%Committed) then SrvD_Out_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + SrvD%p%Jac_Idx_SStC_y(1,j) - call Assemble_dUdy_Loads(SrvD%y%SStCLoadMesh(j), u_SD%LMesh, MeshMapData%SStC_P_P_2_SD_P(j), SD_Start, SrvD_Out_Start, dUdy) + call Assemble_dUdy_Loads(SrvD%y%SStCLoadMesh(j), u_SD%LMesh, MeshMapData%SStC_P_P_2_SubStructure(j), SD_Start, SrvD_Out_Start, dUdy) endif enddo endif @@ -2526,29 +2528,29 @@ SUBROUTINE Linear_SD_InputSolve_dy( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, SD_Out_Start = Indx_y_SD_Y2Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y2Mesh%TranslationDisp field ! we're just going to assume u_SD%LMesh is committed if ( HD%y%Morison%Mesh%Committed ) then ! meshes for floating - !!! ! This linearization was done in forming dUdu (see Linear_ED_InputSolve_du()), so we don't need to re-calculate these matrices + !!! ! This linearization was done in forming dUdu (see Linear_SD_InputSolve_du()), so we don't need to re-calculate these matrices !!! ! while forming dUdy, too. - ! call Linearize_Point_to_Point( HD%y%Morison, u_ED%PlatformPtMesh, MeshMapData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2, HD%Input(1)%Morison, y_ED%PlatformPtMesh) !HD%Input(1)%Morison and y_ED%PlatformPtMesh contain the displaced positions for load calculations + ! call Linearize_Point_to_Point( HD%y%Morison%Mesh, u_SD%LMesh, MeshMapData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, HD%Input(1)%Morison%Mesh, y_SD%Y2Mesh) HD_Out_Start = Indx_y_HD_Morison_Start(HD%y, y_FAST) SD_Start = Indx_u_SD_LMesh_Start(u_SD, y_FAST) ! start of u_SD%LMesh%Force field - call Assemble_dUdy_Loads(HD%y%Morison%Mesh, u_SD%LMesh, MeshMapData%HD_M_P_2_SD_P, SD_Start, HD_Out_Start, dUdy) + call Assemble_dUdy_Loads(HD%y%Morison%Mesh, u_SD%LMesh, MeshMapData%HD_M_P_2_SubStructure, SD_Start, HD_Out_Start, dUdy) ! SD translation displacement-to-SD moment transfer (dU^{SD}/dy^{SD}): SD_Start = Indx_u_SD_LMesh_Start(u_SD, y_FAST) + u_SD%LMesh%NNodes*3 ! start of u_SD%LMesh%Moment field (skip the SD forces) - call SetBlockMatrix( dUdy, MeshMapData%HD_M_P_2_SD_P%dM%m_uD, SD_Start, SD_Out_Start ) + call SetBlockMatrix( dUdy, MeshMapData%HD_M_P_2_SubStructure%dM%m_uD, SD_Start, SD_Out_Start ) ! maybe this should be SumBlockMatrix with future changes to linearized modules??? end if if ( HD%y%WAMITMesh%Committed ) then ! meshes for floating - !!! ! This linearization was done in forming dUdu (see Linear_ED_InputSolve_du()), so we don't need to re-calculate these matrices + !!! ! This linearization was done in forming dUdu (see Linear_SD_InputSolve_du()), so we don't need to re-calculate these matrices !!! ! while forming dUdy, too. - ! call Linearize_Point_to_Point( HD%y%WAMITMesh, u_ED%PlatformPtMesh, MeshMapData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2, HD%Input(1)%WAMITMesh, y_ED%PlatformPtMesh) !HD%Input(1)%WAMITMesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations + ! call Linearize_Point_to_Point( HD%y%WAMITMesh, u_SD%LMesh, MeshMapData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, HD%Input(1)%WAMITMesh, y_SD%Y2Mesh) HD_Out_Start = Indx_y_HD_WAMIT_Start(HD%y, y_FAST) SD_Start = Indx_u_SD_LMesh_Start(u_SD, y_FAST) ! start of u_SD%LMesh%Force field - call Assemble_dUdy_Loads(HD%y%WAMITMesh, u_SD%LMesh, MeshMapData%HD_W_P_2_SD_P, SD_Start, HD_Out_Start, dUdy) + call Assemble_dUdy_Loads(HD%y%WAMITMesh, u_SD%LMesh, MeshMapData%HD_W_P_2_SubStructure, SD_Start, HD_Out_Start, dUdy) ! SD translation displacement-to-SD moment transfer (dU^{SD}/dy^{SD}): SD_Start = Indx_u_SD_LMesh_Start(u_SD, y_FAST) + u_SD%LMesh%NNodes*3 ! start of u_SD%LMesh%Moment field (skip the SD forces) - call SumBlockMatrix( dUdy, MeshMapData%HD_W_P_2_SD_P%dM%m_uD, SD_Start, SD_Out_Start ) + call SumBlockMatrix( dUdy, MeshMapData%HD_W_P_2_SubStructure%dM%m_uD, SD_Start, SD_Out_Start ) ! maybe this should be SumBlockMatrix with future changes to linearized modules??? end if end if @@ -2560,15 +2562,15 @@ SUBROUTINE Linear_SD_InputSolve_dy( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, if ( MAPp%y%ptFairleadLoad%Committed ) then ! meshes for floating !!! ! This linearization was done in forming dUdu (see Linear_SD_InputSolve_du()), so we don't need to re-calculate these matrices !!! ! while forming dUdy, too. - ! CALL Linearize_Point_to_Point( MAPp%y%ptFairleadLoad, u_SD%LMesh, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, MAPp%Input(1)%PtFairDisplacement, y_SD%Y3Mesh) !MAPp%Input(1)%ptFairleadLoad and y_ED%Y3Mesh contain the displaced positions for load calculations + ! CALL Linearize_Point_to_Point( MAPp%y%ptFairleadLoad, u_SD%LMesh, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, MAPp%Input(1)%PtFairDisplacement, y_SD%Y3Mesh) !MAPp%Input(1)%ptFairleadLoad and y_ED%Y3Mesh contain the displaced positions for load calculations MAP_Out_Start = y_FAST%Lin%Modules(MODULE_MAP)%Instance(1)%LinStartIndx(LIN_OUTPUT_COL) SD_Start = Indx_u_SD_LMesh_Start(u_SD, y_FAST) ! start of u_SD%LMesh%TranslationDisp field - call Assemble_dUdy_Loads(MAPp%y%ptFairLeadLoad, u_SD%LMesh, MeshMapData%Mooring_P_2_SD_P, SD_Start, MAP_Out_Start, dUdy) + call Assemble_dUdy_Loads(MAPp%y%ptFairLeadLoad, u_SD%LMesh, MeshMapData%Mooring_2_Structure, SD_Start, MAP_Out_Start, dUdy) ! SD translation displacement-to-SD moment transfer (dU^{SD}/dy^{SD}): SD_Start = Indx_u_SD_LMesh_Start(u_SD, y_FAST) + u_SD%LMesh%NNodes*3 ! start of u_ED%LMesh%Moment field (skip the SD forces) SD_Out_Start = Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y3Mesh%TranslationDisp field - call SumBlockMatrix( dUdy, MeshMapData%Mooring_P_2_SD_P%dM%m_uD, SD_Start, SD_Out_Start ) + call SumBlockMatrix( dUdy, MeshMapData%Mooring_2_Structure%dM%m_uD, SD_Start, SD_Out_Start ) end if !.......... @@ -2580,12 +2582,12 @@ SUBROUTINE Linear_SD_InputSolve_dy( p_FAST, y_FAST, SrvD, u_SD, y_SD, y_ED, HD, !!! ! while forming dUdy, too. MD_Out_Start = y_FAST%Lin%Modules(Module_MD)%Instance(1)%LinStartIndx(LIN_OUTPUT_COL) SD_Start = Indx_u_SD_LMesh_Start(u_SD, y_FAST) ! start of u_SD%LMesh%TranslationDisp field - call Assemble_dUdy_Loads(MD%y%CoupledLoads(1), u_SD%LMesh, MeshMapData%Mooring_P_2_SD_P, SD_Start, MD_Out_Start, dUdy) + call Assemble_dUdy_Loads(MD%y%CoupledLoads(1), u_SD%LMesh, MeshMapData%Mooring_2_Structure, SD_Start, MD_Out_Start, dUdy) ! SD translation displacement-to-SD moment transfer (dU^{SD}/dy^{SD}): SD_Start = Indx_u_SD_LMesh_Start(u_SD, y_FAST) + u_SD%LMesh%NNodes*3 ! start of u_ED%LMesh%Moment field (skip the SD forces) SD_Out_Start = Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y3Mesh%TranslationDisp field - call SumBlockMatrix( dUdy, MeshMapData%Mooring_P_2_SD_P%dM%m_uD, SD_Start, SD_Out_Start ) + call SumBlockMatrix( dUdy, MeshMapData%Mooring_2_Structure%dM%m_uD, SD_Start, SD_Out_Start ) end if end if END SUBROUTINE Linear_SD_InputSolve_dy @@ -2820,7 +2822,7 @@ SUBROUTINE Linear_AD_InputSolve_du( p_FAST, y_FAST, u_AD, y_ED, BD, MeshMapData, call SetBlockMatrix( dUdu, MeshMapData%BDED_L_2_AD_L_B(k)%dM%tv_ud, AD_Start_tv, AD_Start_td ) end if - if (allocated( MeshMapData%BDED_L_2_AD_L_B(k)%dM%tv_ud)) then + if (allocated( MeshMapData%BDED_L_2_AD_L_B(k)%dM%ta_ud)) then AD_Start_ta = AD_Start_td + u_AD%rotors(1)%BladeMotion(k)%NNodes * 12 ! 4 fields (TranslationDisp, Orientation, TranslationVel, and RotationVel) with 3 components before translational velocity field call SetBlockMatrix( dUdu, MeshMapData%BDED_L_2_AD_L_B(k)%dM%ta_ud, AD_Start_ta, AD_Start_td ) @@ -2963,20 +2965,20 @@ SUBROUTINE Linear_SrvD_InputSolve_du( p_FAST, y_FAST, p_SrvD, u_SrvD, y_ED, BD, if ( ALLOCATED(u_SrvD%SStCMotionMesh) ) then do j=1,size(u_SrvD%SStCMotionMesh) if (u_SrvD%SStCMotionMesh(j)%Committed) then - CALL Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_SrvD%SStCMotionMesh(j), MeshMapData%ED_P_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) + CALL Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_SrvD%SStCMotionMesh(j), MeshMapData%Substructure_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) ! SrvD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} ! translational velocity: - if (allocated(MeshMapData%ED_P_2_SStC_P_P(j)%dM%tv_uD )) then + if (allocated(MeshMapData%Substructure_2_SStC_P_P(j)%dM%tv_uD )) then SrvD_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + (p_SrvD%Jac_Idx_SStC_u(1,j) + 6) ! skip translational displacement and orientation fields - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_SStC_P_P(j)%dM%tv_uD, SrvD_Start, y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) ) + call SetBlockMatrix( dUdu, MeshMapData%Substructure_2_SStC_P_P(j)%dM%tv_uD, SrvD_Start, y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) ) end if ! translational acceleration: - if (allocated(MeshMapData%ED_P_2_SStC_P_P(j)%dM%ta_uD )) then + if (allocated(MeshMapData%Substructure_2_SStC_P_P(j)%dM%ta_uD )) then SrvD_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + (p_SrvD%Jac_Idx_SStC_u(1,j) + 12) ! skip translational displacement and orientation fields - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_SStC_P_P(j)%dM%ta_uD, SrvD_Start, y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) ) + call SetBlockMatrix( dUdu, MeshMapData%Substructure_2_SStC_P_P(j)%dM%ta_uD, SrvD_Start, y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) ) end if endif enddo @@ -2985,20 +2987,20 @@ SUBROUTINE Linear_SrvD_InputSolve_du( p_FAST, y_FAST, p_SrvD, u_SrvD, y_ED, BD, if ( ALLOCATED(u_SrvD%SStCMotionMesh) ) then do j=1,size(u_SrvD%SStCMotionMesh) IF (u_SrvD%SStCMotionMesh(j)%Committed) then - CALL Linearize_Point_to_Point( SD%y%y3Mesh, u_SrvD%SStCMotionMesh(j), MeshMapData%SDy3_P_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) + CALL Linearize_Point_to_Point( SD%y%y3Mesh, u_SrvD%SStCMotionMesh(j), MeshMapData%SubStructure_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) ! SrvD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} ! translational velocity: - if (allocated(MeshMapData%SDy3_P_2_SStC_P_P(j)%dM%tv_uD )) then + if (allocated(MeshMapData%SubStructure_2_SStC_P_P(j)%dM%tv_uD )) then SrvD_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + (p_SrvD%Jac_Idx_SStC_u(1,j) + 6) ! skip translational displacement and orientation fields - call SetBlockMatrix( dUdu, MeshMapData%SDy3_P_2_SStC_P_P(j)%dM%tv_uD, SrvD_Start, y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) ) + call SetBlockMatrix( dUdu, MeshMapData%SubStructure_2_SStC_P_P(j)%dM%tv_uD, SrvD_Start, y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) ) end if ! translational acceleration: - if (allocated(MeshMapData%SDy3_P_2_SStC_P_P(j)%dM%ta_uD )) then + if (allocated(MeshMapData%SubStructure_2_SStC_P_P(j)%dM%ta_uD )) then SrvD_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + (p_SrvD%Jac_Idx_SStC_u(1,j) + 12) ! skip translational displacement and orientation fields - call SetBlockMatrix( dUdu, MeshMapData%SDy3_P_2_SStC_P_P(j)%dM%ta_uD, SrvD_Start, y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) ) + call SetBlockMatrix( dUdu, MeshMapData%SubStructure_2_SStC_P_P(j)%dM%ta_uD, SrvD_Start, y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) ) end if endif enddo @@ -3118,7 +3120,7 @@ SUBROUTINE Linear_SrvD_InputSolve_dy( p_FAST, y_FAST, p_SrvD, u_SrvD, y_ED, BD, if (u_SrvD%SStCMotionMesh(j)%Committed) then SrvD_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + (p_SrvD%Jac_Idx_SStC_u(1,j)) ED_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of %TranslationDisp field - call Assemble_dUdy_Motions( y_ED%PlatformPtMesh, u_SrvD%SStCMotionMesh(j), MeshMapData%ED_P_2_SStC_P_P(j), SrvD_Start, ED_Out_Start, dUdy, .false.) + call Assemble_dUdy_Motions( y_ED%PlatformPtMesh, u_SrvD%SStCMotionMesh(j), MeshMapData%Substructure_2_SStC_P_P(j), SrvD_Start, ED_Out_Start, dUdy, .false.) endif enddo endif @@ -3131,7 +3133,7 @@ SUBROUTINE Linear_SrvD_InputSolve_dy( p_FAST, y_FAST, p_SrvD, u_SrvD, y_ED, BD, if (u_SrvD%SStCMotionMesh(j)%Committed) then SrvD_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + (p_SrvD%Jac_Idx_SStC_u(1,j)) SD_Out_Start = Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) ! start of %TranslationDisp field - call Assemble_dUdy_Motions( y_SD%y3Mesh, u_SrvD%SStCMotionMesh(j), MeshMapData%SDy3_P_2_SStC_P_P(j), SrvD_Start, SD_Out_Start, dUdy, .false.) + call Assemble_dUdy_Motions( y_SD%y3Mesh, u_SrvD%SStCMotionMesh(j), MeshMapData%SubStructure_2_SStC_P_P(j), SrvD_Start, SD_Out_Start, dUdy, .false.) endif enddo endif @@ -3255,12 +3257,12 @@ SUBROUTINE Linear_ED_InputSolve_dy( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD if (SrvD%y%SStCLoadMesh(j)%Committed) then ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) SrvD_Out_Start = y_FAST%Lin%Modules(MODULE_SrvD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - 1 + SrvD%p%Jac_Idx_SStC_y(1,j) - call Assemble_dUdy_Loads(SrvD%y%SStCLoadMesh(j), u_ED%PlatformPtMesh, MeshMapData%SStC_P_P_2_ED_P(j), ED_Start, SrvD_Out_Start, dUdy) + call Assemble_dUdy_Loads(SrvD%y%SStCLoadMesh(j), u_ED%PlatformPtMesh, MeshMapData%SStC_P_P_2_SubStructure(j), ED_Start, SrvD_Out_Start, dUdy) ! ED translation displacement-to-ED moment transfer (dU^{ED}/dy^{ED}): ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) + u_ED%PlatformPtMesh%NNodes*3 ! start of u_ED%PlatformPtMesh%Moment field (skip the ED forces) ED_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field - call SumBlockMatrix( dUdy, MeshMapData%HD_M_P_2_ED_P%dM%m_uD, ED_Start, ED_Out_Start ) + call SumBlockMatrix( dUdy, MeshMapData%HD_M_P_2_SubStructure%dM%m_uD, ED_Start, ED_Out_Start ) endif enddo endif @@ -3338,7 +3340,7 @@ SUBROUTINE Linear_ED_InputSolve_dy( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD END IF - if ( p_FAST%CompSub == Module_None ) then + if ( p_FAST%CompSub == Module_None ) then !This also occurs with ExtPtfm (though that's not linearized, yet) ! HD ! parts of dU^{ED}/dy^{HD} and dU^{ED}/dy^{ED}: if ( p_FAST%CompHydro == Module_HD ) then ! HydroDyn-{ElastoDyn or SubDyn} @@ -3347,27 +3349,27 @@ SUBROUTINE Linear_ED_InputSolve_dy( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD if ( HD%y%Morison%Mesh%Committed ) then ! meshes for floating !!! ! This linearization was done in forming dUdu (see Linear_ED_InputSolve_du()), so we don't need to re-calculate these matrices !!! ! while forming dUdy, too. - ! call Linearize_Point_to_Point( HD%y%Morison, u_ED%PlatformPtMesh, MeshMapData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2, HD%Input(1)%Morison, y_ED%PlatformPtMesh) !HD%Input(1)%Morison and y_ED%PlatformPtMesh contain the displaced positions for load calculations + ! call Linearize_Point_to_Point( HD%y%Morison, u_ED%PlatformPtMesh, MeshMapData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, HD%Input(1)%Morison, y_ED%PlatformPtMesh) !HD%Input(1)%Morison and y_ED%PlatformPtMesh contain the displaced positions for load calculations HD_Out_Start = Indx_y_HD_Morison_Start(HD%y, y_FAST) ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) ! start of u_ED%PlatformPtMesh%Force field - call Assemble_dUdy_Loads(HD%y%Morison%Mesh, u_ED%PlatformPtMesh, MeshMapData%HD_M_P_2_ED_P, ED_Start, HD_Out_Start, dUdy) + call Assemble_dUdy_Loads(HD%y%Morison%Mesh, u_ED%PlatformPtMesh, MeshMapData%HD_M_P_2_SubStructure, ED_Start, HD_Out_Start, dUdy) ! ED translation displacement-to-ED moment transfer (dU^{ED}/dy^{ED}): ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) + u_ED%PlatformPtMesh%NNodes*3 ! start of u_ED%PlatformPtMesh%Moment field (skip the ED forces) - call SumBlockMatrix( dUdy, MeshMapData%HD_M_P_2_ED_P%dM%m_uD, ED_Start, ED_Out_Start ) + call SumBlockMatrix( dUdy, MeshMapData%HD_M_P_2_SubStructure%dM%m_uD, ED_Start, ED_Out_Start ) end if if ( HD%y%WAMITMesh%Committed ) then ! meshes for floating !!! ! This linearization was done in forming dUdu (see Linear_ED_InputSolve_du()), so we don't need to re-calculate these matrices !!! ! while forming dUdy, too. - ! call Linearize_Point_to_Point( HD%y%WAMITMesh, u_ED%PlatformPtMesh, MeshMapData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2, HD%Input(1)%WAMITMesh, y_ED%PlatformPtMesh) !HD%Input(1)%WAMITMesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations + ! call Linearize_Point_to_Point( HD%y%WAMITMesh, u_ED%PlatformPtMesh, MeshMapData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, HD%Input(1)%WAMITMesh, y_ED%PlatformPtMesh) !HD%Input(1)%WAMITMesh and y_ED%PlatformPtMesh contain the displaced positions for load calculations HD_Out_Start = Indx_y_HD_WAMIT_Start(HD%y, y_FAST) ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) ! start of u_ED%PlatformPtMesh%Force field - call Assemble_dUdy_Loads(HD%y%WAMITMesh, u_ED%PlatformPtMesh, MeshMapData%HD_W_P_2_ED_P, ED_Start, HD_Out_Start, dUdy) + call Assemble_dUdy_Loads(HD%y%WAMITMesh, u_ED%PlatformPtMesh, MeshMapData%HD_W_P_2_SubStructure, ED_Start, HD_Out_Start, dUdy) ! ED translation displacement-to-ED moment transfer (dU^{ED}/dy^{ED}): ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) + u_ED%PlatformPtMesh%NNodes*3 ! start of u_ED%PlatformPtMesh%Moment field (skip the ED forces) - call SumBlockMatrix( dUdy, MeshMapData%HD_W_P_2_ED_P%dM%m_uD, ED_Start, ED_Out_Start ) + call SumBlockMatrix( dUdy, MeshMapData%HD_W_P_2_SubStructure%dM%m_uD, ED_Start, ED_Out_Start ) end if @@ -3380,15 +3382,15 @@ SUBROUTINE Linear_ED_InputSolve_dy( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD if ( MAPp%y%ptFairleadLoad%Committed ) then ! meshes for floating !!! ! This linearization was done in forming dUdu (see Linear_ED_InputSolve_du()), so we don't need to re-calculate these matrices !!! ! while forming dUdy, too. - ! CALL Linearize_Point_to_Point( MAPp%y%ptFairleadLoad, u_ED%PlatformPtMesh, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, MAPp%Input(1)%PtFairDisplacement, y_ED%PlatformPtMesh) !MAPp%Input(1)%ptFairleadLoad and y_ED%PlatformPtMesh contain the displaced positions for load calculations + ! CALL Linearize_Point_to_Point( MAPp%y%ptFairleadLoad, u_ED%PlatformPtMesh, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, MAPp%Input(1)%PtFairDisplacement, y_ED%PlatformPtMesh) !MAPp%Input(1)%ptFairleadLoad and y_ED%PlatformPtMesh contain the displaced positions for load calculations MAP_Out_Start = y_FAST%Lin%Modules(MODULE_MAP)%Instance(1)%LinStartIndx(LIN_OUTPUT_COL) - ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) ! start of u_ED%PlatformPtMesh%TranslationDisp field - call Assemble_dUdy_Loads(MAPp%y%ptFairLeadLoad, u_ED%PlatformPtMesh, MeshMapData%Mooring_P_2_ED_P, ED_Start, MAP_Out_Start, dUdy) + ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) ! start of u_ED%PlatformPtMesh%Force field + call Assemble_dUdy_Loads(MAPp%y%ptFairLeadLoad, u_ED%PlatformPtMesh, MeshMapData%Mooring_2_Structure, ED_Start, MAP_Out_Start, dUdy) ! ED translation displacement-to-ED moment transfer (dU^{ED}/dy^{ED}): ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) + u_ED%PlatformPtMesh%NNodes*3 ! start of u_ED%PlatformPtMesh%Moment field (skip the ED forces) ED_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field - call SumBlockMatrix( dUdy, MeshMapData%Mooring_P_2_ED_P%dM%m_uD, ED_Start, ED_Out_Start ) + call SumBlockMatrix( dUdy, MeshMapData%Mooring_2_Structure%dM%m_uD, ED_Start, ED_Out_Start ) end if ! MoorDyn ! parts of dU^{ED}/dy^{MD} and dU^{ED}/dy^{ED}: @@ -3398,12 +3400,12 @@ SUBROUTINE Linear_ED_InputSolve_dy( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD !!! ! while forming dUdy, too. MD_Out_Start = y_FAST%Lin%Modules(Module_MD)%Instance(1)%LinStartIndx(LIN_OUTPUT_COL) ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) ! start of u_ED%PlatformPtMesh%TranslationDisp field - call Assemble_dUdy_Loads(MD%y%CoupledLoads(1), u_ED%PlatformPtMesh, MeshMapData%Mooring_P_2_ED_P, ED_Start, MD_Out_Start, dUdy) + call Assemble_dUdy_Loads(MD%y%CoupledLoads(1), u_ED%PlatformPtMesh, MeshMapData%Mooring_2_Structure, ED_Start, MD_Out_Start, dUdy) ! ED translation displacement-to-ED moment transfer (dU^{ED}/dy^{ED}): ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) + u_ED%PlatformPtMesh%NNodes*3 ! start of u_ED%PlatformPtMesh%Moment field (skip the ED forces) ED_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field - call SumBlockMatrix( dUdy, MeshMapData%Mooring_P_2_ED_P%dM%m_uD, ED_Start, ED_Out_Start ) + call SumBlockMatrix( dUdy, MeshMapData%Mooring_2_Structure%dM%m_uD, ED_Start, ED_Out_Start ) end if end if else if ( p_FAST%CompSub == Module_SD ) then @@ -3420,6 +3422,8 @@ SUBROUTINE Linear_ED_InputSolve_dy( p_FAST, y_FAST, SrvD, u_ED, y_ED, y_AD, u_AD ED_Start = Indx_u_ED_Platform_Start(u_ED, y_FAST) + u_ED%PlatformPtMesh%NNodes*3 ! start of u_ED%PlatformPtMesh%Moment field (skip the ED forces) ED_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field call SetBlockMatrix( dUdy, MeshMapData%SD_TP_2_ED_P%dM%m_uD, ED_Start, ED_Out_Start ) + + !Mooring gets set in the Linear_SD_InputSolve_ routines end if END SUBROUTINE Linear_ED_InputSolve_dy !---------------------------------------------------------------------------------------------------------------------------------- @@ -3752,8 +3756,8 @@ SUBROUTINE Linear_HD_InputSolve_du( p_FAST, y_FAST, u_HD, y_ED, y_SD, MeshMapDat TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< FAST parameter data TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) TYPE(HydroDyn_InputType), INTENT(INOUT) :: u_HD !< The inputs to HydroDyn - TYPE(ED_OutputType), INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module - TYPE(SD_OutputType), INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module + TYPE(ED_OutputType),TARGET, INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module + TYPE(SD_OutputType),TARGET, INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules REAL(R8Ki), INTENT(INOUT) :: dUdu(:,:) !< Jacobian matrix of which we are computing the dU^{HD}/du^{HD} block @@ -3767,12 +3771,22 @@ SUBROUTINE Linear_HD_InputSolve_du( p_FAST, y_FAST, u_HD, y_ED, y_SD, MeshMapDat INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Linear_HD_InputSolve_du' + TYPE(MeshType), POINTER :: PlatformMotion + TYPE(MeshType), POINTER :: SubstructureMotion2HD ErrStat = ErrID_None ErrMsg = "" + + PlatformMotion => y_ED%PlatformPtMesh + + IF (p_FAST%CompSub == Module_SD) THEN + SubstructureMotion2HD => y_SD%Y2Mesh + ELSE + SubstructureMotion2HD => PlatformMotion + END IF ! look at how the translational displacement gets transfered to the translational velocity and translational acceleration: !------------------------------------------------------------------------------------------------- ! Set the inputs from ElastoDyn: @@ -3791,7 +3805,7 @@ SUBROUTINE Linear_HD_InputSolve_du( p_FAST, y_FAST, u_HD, y_ED, y_SD, MeshMapDat ! Transfer ED motions to HD motion input (HD inputs depend on previously calculated HD inputs from ED): if ( u_HD%PRPMesh%Committed ) then - call Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) + call Linearize_Point_to_Point( PlatformMotion, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) ! HD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} @@ -3811,108 +3825,53 @@ SUBROUTINE Linear_HD_InputSolve_du( p_FAST, y_FAST, u_HD, y_ED, y_SD, MeshMapDat end if end if - if ( p_FAST%CompSub == Module_None ) then - !=================================================== - ! y_ED%PlatformPtMesh and u_HD%Morison%Mesh - !=================================================== - - ! Transfer ED motions to HD motion input (HD inputs depend on previously calculated HD inputs from ED): - if ( u_HD%Morison%Mesh%Committed ) then - call Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_HD%Morison%Mesh, MeshMapData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + !=================================================== + ! y_ED%PlatformPtMesh or SD%y2Mesh and u_HD%Morison%Mesh + !=================================================== + ! Transfer ED motions to HD motion input (HD inputs depend on previously calculated HD inputs from ED): + if ( u_HD%Morison%Mesh%Committed ) then + call Linearize_Point_to_Point( SubstructureMotion2HD, u_HD%Morison%Mesh, MeshMapData%SubStructure_2_HD_M_P, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - ! HD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} + ! HD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} - HD_Start_td = Indx_u_HD_Morison_Start(u_HD, y_FAST) - HD_Start_tr = HD_Start_td + u_HD%Morison%Mesh%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field + HD_Start_td = Indx_u_HD_Morison_Start(u_HD, y_FAST) + HD_Start_tr = HD_Start_td + u_HD%Morison%Mesh%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field - ! translational velocity: - if (allocated(MeshMapData%ED_P_2_HD_M_P%dM%tv_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_HD_M_P%dM%tv_ud, HD_Start_tr, HD_Start_td ) - end if + ! translational velocity: + if (allocated(MeshMapData%SubStructure_2_HD_M_P%dM%tv_uD )) then + call SetBlockMatrix( dUdu, MeshMapData%SubStructure_2_HD_M_P%dM%tv_ud, HD_Start_tr, HD_Start_td ) + end if - ! translational acceleration: - HD_Start_tr = HD_Start_tr + u_HD%Morison%Mesh%NNodes * 6 ! skip 2 fields ( TranslationVel and RotationVel) - if (allocated(MeshMapData%ED_P_2_HD_M_P%dM%ta_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_HD_M_P%dM%ta_ud, HD_Start_tr, HD_Start_td ) - end if + ! translational acceleration: + HD_Start_tr = HD_Start_tr + u_HD%Morison%Mesh%NNodes * 6 ! skip 2 fields ( TranslationVel and RotationVel) + if (allocated(MeshMapData%SubStructure_2_HD_M_P%dM%ta_uD )) then + call SetBlockMatrix( dUdu, MeshMapData%SubStructure_2_HD_M_P%dM%ta_ud, HD_Start_tr, HD_Start_td ) end if + end if !=================================================== - ! y_ED%PlatformPtMesh and u_HD%WAMITMesh + ! y_ED%PlatformPtMesh or SD%y2Mesh and u_HD%WAMITMesh !=================================================== - if ( u_HD%WAMITMesh%Committed ) then - - call Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_HD%WAMITMesh, MeshMapData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - HD_Start_td = Indx_u_HD_WAMIT_Start(u_HD, y_FAST) - HD_Start_tr = HD_Start_td + u_HD%WAMITMesh%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field - ! translational velocity: - if (allocated(MeshMapData%ED_P_2_HD_W_P%dM%tv_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_HD_W_P%dM%tv_ud, HD_Start_tr, HD_Start_td ) - end if + if ( u_HD%WAMITMesh%Committed ) then - ! translational acceleration: - HD_Start_tr = HD_Start_tr + u_HD%WAMITMesh%NNodes * 6 ! skip 2 fields ( TranslationVel and RotationVel) - - if (allocated(MeshMapData%ED_P_2_HD_W_P%dM%ta_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_HD_W_P%dM%ta_ud, HD_Start_tr, HD_Start_td ) - end if - end if - - - else if ( p_FAST%CompSub == Module_SD ) then - - - !=================================================== - ! y_SD%Y2Mesh and u_HD%Morison%Mesh - !=================================================== - if ( u_HD%Morison%Mesh%Committed ) then - ! Transfer ED motions to HD motion input (HD inputs depend on previously calculated HD inputs from ED): - - call Linearize_Point_to_Point( y_SD%Y2Mesh, u_HD%Morison%Mesh, MeshMapData%SD_P_2_HD_M_P, ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - - ! HD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} + call Linearize_Point_to_Point( SubstructureMotion2HD, u_HD%WAMITMesh, MeshMapData%SubStructure_2_HD_W_P, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + HD_Start_td = Indx_u_HD_WAMIT_Start(u_HD, y_FAST) + HD_Start_tr = HD_Start_td + u_HD%WAMITMesh%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field - HD_Start_td = Indx_u_HD_Morison_Start(u_HD, y_FAST) - HD_Start_tr = HD_Start_td + u_HD%Morison%Mesh%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field - - ! translational velocity: - if (allocated(MeshMapData%SD_P_2_HD_M_P%dM%tv_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%SD_P_2_HD_M_P%dM%tv_ud, HD_Start_tr, HD_Start_td ) - end if - - ! translational acceleration: - HD_Start_tr = HD_Start_tr + u_HD%Morison%Mesh%NNodes * 6 ! skip 2 fields ( TranslationVel and RotationVel) - if (allocated(MeshMapData%SD_P_2_HD_M_P%dM%ta_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%SD_P_2_HD_M_P%dM%ta_ud, HD_Start_tr, HD_Start_td ) - end if + ! translational velocity: + if (allocated(MeshMapData%SubStructure_2_HD_W_P%dM%tv_uD )) then + call SetBlockMatrix( dUdu, MeshMapData%SubStructure_2_HD_W_P%dM%tv_ud, HD_Start_tr, HD_Start_td ) end if - - !=================================================== - ! y_SD%Y2Mesh and u_HD%WAMITMesh - !=================================================== - if ( u_HD%WAMITMesh%Committed ) then - call Linearize_Point_to_Point( y_SD%Y2Mesh, u_HD%WAMITMesh, MeshMapData%SD_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - - HD_Start_td = Indx_u_HD_WAMIT_Start(u_HD, y_FAST) - HD_Start_tr = HD_Start_td + u_HD%WAMITMesh%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field - ! translational velocity: - if (allocated(MeshMapData%SD_P_2_HD_W_P%dM%tv_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%SD_P_2_HD_W_P%dM%tv_ud, HD_Start_tr, HD_Start_td ) - end if - ! translational acceleration: - HD_Start_tr = HD_Start_tr + u_HD%WAMITMesh%NNodes * 6 ! skip 2 fields ( TranslationVel and RotationVel) - - if (allocated(MeshMapData%SD_P_2_HD_W_P%dM%ta_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_HD_W_P%dM%ta_ud, HD_Start_tr, HD_Start_td ) - end if + ! translational acceleration: + HD_Start_tr = HD_Start_tr + u_HD%WAMITMesh%NNodes * 6 ! skip 2 fields ( TranslationVel and RotationVel) + if (allocated(MeshMapData%SubStructure_2_HD_W_P%dM%ta_uD )) then + call SetBlockMatrix( dUdu, MeshMapData%SubStructure_2_HD_W_P%dM%ta_ud, HD_Start_tr, HD_Start_td ) end if - end if end if @@ -3928,8 +3887,8 @@ SUBROUTINE Linear_HD_InputSolve_dy( p_FAST, y_FAST, u_HD, y_ED, y_SD, MeshMapDat TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< FAST parameter data TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) TYPE(HydroDyn_InputType), INTENT(INOUT) :: u_HD !< The inputs to HydroDyn - TYPE(ED_OutputType), INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module - TYPE(SD_OutputType), INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module + TYPE(ED_OutputType), TARGET, INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module + TYPE(SD_OutputType), TARGET, INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules REAL(R8Ki), INTENT(INOUT) :: dUdy(:,:) !< Jacobian matrix of which we are computing the dU^{HD}/dy^{ED} block @@ -3939,80 +3898,65 @@ SUBROUTINE Linear_HD_InputSolve_dy( p_FAST, y_FAST, u_HD, y_ED, y_SD, MeshMapDat ! Local variables: INTEGER(IntKi) :: HD_Start ! starting index of dUdy (column) where particular HD fields are located - INTEGER(IntKi) :: ED_Out_Start! starting index of dUdy (row) where particular ED fields are located - INTEGER(IntKi) :: SD_Out_Start! starting index of dUdy (row) where particular SD fields are located + INTEGER(IntKi) :: Platform_Out_Start! starting index of dUdy (row) where particular ED fields are located + INTEGER(IntKi) :: SubStructure_Out_Start! starting index of dUdy (row) where particular SD/ED fields are located + TYPE(MeshType), POINTER :: PlatformMotion + TYPE(MeshType), POINTER :: SubstructureMotion2HD + CHARACTER(*), PARAMETER :: RoutineName = 'Linear_HD_InputSolve_dy' ErrStat = ErrID_None ErrMsg = "" + - ! Add ED Platform mesh to HD PRP Mesh + PlatformMotion => y_ED%PlatformPtMesh + Platform_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field + + IF (p_FAST%CompSub == Module_SD) THEN + SubstructureMotion2HD => y_SD%y2Mesh + SubStructure_Out_Start = Indx_y_SD_Y2Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y2Mesh%TranslationDisp field + ELSE + SubstructureMotion2HD => PlatformMotion + SubStructure_Out_Start = Platform_Out_Start + END IF + + + !................................... + ! HD PRP Mesh + !................................... ! use Indx_u_HD_PRP_Start HD_Start = Indx_u_HD_PRP_Start(u_HD, y_FAST) ! start of u_HD%Morison%Mesh%TranslationDisp field - ED_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field - call Assemble_dUdy_Motions(y_ED%PlatformPtMesh, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, HD_Start, ED_Out_Start, dUdy, .false.) + call Assemble_dUdy_Motions(PlatformMotion, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, HD_Start, Platform_Out_Start, dUdy, .false.) - if ( p_FAST%CompSub == Module_None ) then - ! dU^{HD}/dy^{ED} - !................................... - ! Morison Mesh - !................................... - IF (u_HD%Morison%Mesh%Committed) THEN + ! dU^{HD}/dy^{ED} or ! dU^{HD}/dy^{SD} + !................................... + ! Morison Mesh + !................................... + IF (u_HD%Morison%Mesh%Committed) THEN - !!! ! This linearization was done in forming dUdu (see Linear_HD_InputSolve_du()), so we don't need to re-calculate these matrices - !!! ! while forming dUdy, too. - !!!call Linearize_Point_to_Line2( y_ED%PlatformPtMesh, u_HD%Morison%Mesh, MeshMapData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2 ) + !!! ! This linearization was done in forming dUdu (see Linear_HD_InputSolve_du()), so we don't need to re-calculate these matrices + !!! ! while forming dUdy, too. + !!!call Linearize_Point_to_Line2( SubstructureMotion2HD, u_HD%Morison%Mesh, MeshMapData%SubStructure_2_HD_M_P, ErrStat2, ErrMsg2 ) - HD_Start = Indx_u_HD_Morison_Start(u_HD, y_FAST) ! start of u_HD%Morison%Mesh%TranslationDisp field - call Assemble_dUdy_Motions(y_ED%PlatformPtMesh, u_HD%Morison%Mesh, MeshMapData%ED_P_2_HD_M_P, HD_Start, ED_Out_Start, dUdy, .false.) - END IF + HD_Start = Indx_u_HD_Morison_Start(u_HD, y_FAST) ! start of u_HD%Morison%Mesh%TranslationDisp field + call Assemble_dUdy_Motions(SubstructureMotion2HD, u_HD%Morison%Mesh, MeshMapData%SubStructure_2_HD_M_P, HD_Start, SubStructure_Out_Start, dUdy, .false.) + END IF - !................................... - ! Lumped Platform Reference Pt Mesh - !................................... - IF (u_HD%WAMITMesh%Committed) THEN - - !!! ! This linearization was done in forming dUdu (see Linear_HD_InputSolve_du()), so we don't need to re-calculate these matrices - !!! ! while forming dUdy, too. - !!!call Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_HD%Mesh, MeshMapData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - - HD_Start = Indx_u_HD_WAMIT_Start(u_HD, y_FAST) ! start of u_HD%Mesh%TranslationDisp field - call Assemble_dUdy_Motions(y_ED%PlatformPtMesh, u_HD%WAMITMesh, MeshMapData%ED_P_2_HD_W_P, HD_Start, ED_Out_Start, dUdy, .false.) - END IF - - else if ( p_FAST%CompSub == Module_SD ) then - ! dU^{HD}/dy^{SD} - SD_Out_Start = Indx_y_SD_Y2Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y2Mesh%TranslationDisp field - !................................... - ! Morison Mesh - !................................... - IF (u_HD%Morison%Mesh%Committed) THEN + !................................... + ! Lumped Platform Reference Pt Mesh + !................................... + IF (u_HD%WAMITMesh%Committed) THEN - !!! ! This linearization was done in forming dUdu (see Linear_HD_InputSolve_du()), so we don't need to re-calculate these matrices - !!! ! while forming dUdy, too. - !!!call Linearize_Point_to_Line2( y_SD%Y2Mesh, u_HD%Morison%Mesh, MeshMapData%SD_P_2_HD_M_P, ErrStat2, ErrMsg2 ) + !!! ! This linearization was done in forming dUdu (see Linear_HD_InputSolve_du()), so we don't need to re-calculate these matrices + !!! ! while forming dUdy, too. + !!!call Linearize_Point_to_Point( SubstructureMotion2HD, u_HD%Mesh, MeshMapData%SubStructure_2_HD_W_P, ErrStat2, ErrMsg2 ) - HD_Start = Indx_u_HD_Morison_Start(u_HD, y_FAST) ! start of u_HD%Morison%Mesh%TranslationDisp field - call Assemble_dUdy_Motions(y_SD%Y2Mesh, u_HD%Morison%Mesh, MeshMapData%SD_P_2_HD_M_P, HD_Start, SD_Out_Start, dUdy, .false.) - END IF + HD_Start = Indx_u_HD_WAMIT_Start(u_HD, y_FAST) ! start of u_HD%Mesh%TranslationDisp field + call Assemble_dUdy_Motions(SubstructureMotion2HD, u_HD%WAMITMesh, MeshMapData%SubStructure_2_HD_W_P, HD_Start, SubStructure_Out_Start, dUdy, .false.) + END IF - !................................... - ! Lumped Platform Reference Pt Mesh - !................................... - IF (u_HD%WAMITMesh%Committed) THEN - - !!! ! This linearization was done in forming dUdu (see Linear_HD_InputSolve_du()), so we don't need to re-calculate these matrices - !!! ! while forming dUdy, too. - !!!call Linearize_Point_to_Point( y_SD%Y2Mesh, u_HD%Mesh, MeshMapData%SD_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - - HD_Start = Indx_u_HD_WAMIT_Start(u_HD, y_FAST) ! start of u_HD%Mesh%TranslationDisp field - call Assemble_dUdy_Motions(y_SD%Y2Mesh, u_HD%WAMITMesh, MeshMapData%SD_P_2_HD_W_P, HD_Start, SD_Out_Start, dUdy, .false.) - END IF - - end if - END SUBROUTINE Linear_HD_InputSolve_dy @@ -4025,8 +3969,8 @@ SUBROUTINE Linear_MAP_InputSolve_dy( p_FAST, y_FAST, u_MAP, y_ED, y_SD, MeshMapD TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< FAST parameter data TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) TYPE(MAP_InputType), INTENT(INOUT) :: u_MAP !< The inputs to MAP - TYPE(ED_OutputType), INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module - TYPE(SD_OutputType), INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module + TYPE(ED_OutputType), TARGET, INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module + TYPE(SD_OutputType), TARGET, INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules REAL(R8Ki), INTENT(INOUT) :: dUdy(:,:) !< Jacobian matrix of which we are computing the dU^{MAP}/dy^{ED} block @@ -4036,8 +3980,10 @@ SUBROUTINE Linear_MAP_InputSolve_dy( p_FAST, y_FAST, u_MAP, y_ED, y_SD, MeshMapD ! Local variables: INTEGER(IntKi) :: MAP_Start ! starting index of dUdy (column) where particular MAP fields are located - INTEGER(IntKi) :: ED_Out_Start! starting index of dUdy (row) where particular ED fields are located - INTEGER(IntKi) :: SD_Out_Start! starting index of dUdy (row) where particular SD fields are located + + INTEGER(IntKi) :: SubStructure_Out_Start! starting index of dUdy (row) where particular SD/ED fields are located + TYPE(MeshType), POINTER :: SubstructureMotion + INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Linear_MAP_InputSolve_dy' @@ -4045,6 +3991,15 @@ SUBROUTINE Linear_MAP_InputSolve_dy( p_FAST, y_FAST, u_MAP, y_ED, y_SD, MeshMapD ErrStat = ErrID_None ErrMsg = "" + + IF (p_FAST%CompSub == Module_SD) THEN + SubstructureMotion => y_SD%y3Mesh + SubStructure_Out_Start = Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y3Mesh%TranslationDisp field + ELSE + SubstructureMotion => y_ED%PlatformPtMesh + SubStructure_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field + END IF + IF (u_MAP%PtFairDisplacement%Committed) THEN !................................... ! FairLead Mesh @@ -4052,20 +4007,10 @@ SUBROUTINE Linear_MAP_InputSolve_dy( p_FAST, y_FAST, u_MAP, y_ED, y_SD, MeshMapD MAP_Start = y_FAST%Lin%Modules(MODULE_MAP)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - if ( p_FAST%CompSub == Module_SD ) THEN - ! dU^{MAP}/dy^{SD} - SD_Out_Start = Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y3Mesh%TranslationDisp field - call Linearize_Point_to_Point( y_SD%Y3Mesh, u_MAP%PtFairDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - call Assemble_dUdy_Motions(y_SD%Y3Mesh , u_MAP%PtFairDisplacement, MeshMapData%SDy3_P_2_Mooring_P, MAP_Start, SD_Out_Start, dUdy, OnlyTranslationDisp=.true.) - - else if ( p_FAST%CompSub == Module_None ) THEN - ! dU^{MAP}/dy^{ED} - ED_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field - call Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_MAP%PtFairDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - call Assemble_dUdy_Motions(y_ED%PlatformPtMesh, u_MAP%PtFairDisplacement, MeshMapData%ED_P_2_Mooring_P, MAP_Start, ED_Out_Start, dUdy, OnlyTranslationDisp=.true.) + ! dU^{MAP}/dy^{SD} or ! dU^{MAP}/dy^{ED} + call Linearize_Point_to_Point( SubstructureMotion, u_MAP%PtFairDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + call Assemble_dUdy_Motions(y_ED%PlatformPtMesh, u_MAP%PtFairDisplacement, MeshMapData%Structure_2_Mooring, MAP_Start, SubStructure_Out_Start, dUdy, OnlyTranslationDisp=.true.) - end if - END IF END SUBROUTINE Linear_MAP_InputSolve_dy @@ -4078,8 +4023,8 @@ SUBROUTINE Linear_MD_InputSolve_du( p_FAST, y_FAST, u_MD, y_ED, y_SD, MeshMapDat TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< FAST parameter data TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) TYPE(MD_InputType), INTENT(INOUT) :: u_MD !< The inputs to MoorDyn - TYPE(ED_OutputType), INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module - TYPE(SD_OutputType), INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module + TYPE(ED_OutputType), TARGET, INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module + TYPE(SD_OutputType), TARGET, INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules REAL(R8Ki), INTENT(INOUT) :: dUdu(:,:) !< Jacobian matrix of which we are computing the dU^{MD}/dy^{ED} block @@ -4090,6 +4035,9 @@ SUBROUTINE Linear_MD_InputSolve_du( p_FAST, y_FAST, u_MD, y_ED, y_SD, MeshMapDat INTEGER(IntKi) :: MD_Start_td ! starting index of dUdu (column) where particular MD fields are located INTEGER(IntKi) :: MD_Start_tr ! starting index of dUdu (row) where particular MD fields are located + + TYPE(MeshType), POINTER :: SubstructureMotion + INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'Linear_MD_InputSolve_du' @@ -4097,52 +4045,36 @@ SUBROUTINE Linear_MD_InputSolve_du( p_FAST, y_FAST, u_MD, y_ED, y_SD, MeshMapDat ErrStat = ErrID_None ErrMsg = "" + + IF (p_FAST%CompSub == Module_SD) THEN + SubstructureMotion => y_SD%y3Mesh + ELSE + SubstructureMotion => y_ED%PlatformPtMesh + END IF + IF (u_MD%CoupledKinematics(1)%Committed) THEN - !................................... - ! FairLead Mesh - !................................... + !................................... + ! FairLead Mesh + !................................... - if ( p_FAST%CompSub == Module_SD ) THEN ! dU^{MD}/du^{MD} - call Linearize_Point_to_Point( y_SD%Y3Mesh, u_MD%CoupledKinematics(1), MeshMapData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2 ) + call Linearize_Point_to_Point( SubstructureMotion, u_MD%CoupledKinematics(1), MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) - ! MD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} - MD_Start_td = y_FAST%Lin%Modules(MODULE_MD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - MD_Start_tr = MD_Start_td + u_MD%CoupledKinematics(1)%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field + ! MD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} + MD_Start_td = y_FAST%Lin%Modules(MODULE_MD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) + MD_Start_tr = MD_Start_td + u_MD%CoupledKinematics(1)%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field ! translational velocity: - if (allocated(MeshMapData%SDy3_P_2_Mooring_P%dM%tv_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%SDy3_P_2_Mooring_P%dM%tv_ud, MD_Start_tr, MD_Start_td ) + if (allocated(MeshMapData%Structure_2_Mooring%dM%tv_uD )) then + call SetBlockMatrix( dUdu, MeshMapData%Structure_2_Mooring%dM%tv_ud, MD_Start_tr, MD_Start_td ) end if ! translational acceleration: MD_Start_tr = MD_Start_tr + u_MD%CoupledKinematics(1)%NNodes * 6 ! skip 2 fields ( TranslationVel and RotationVel) - if (allocated(MeshMapData%SDy3_P_2_Mooring_P%dM%ta_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%SDy3_P_2_Mooring_P%dM%ta_ud, MD_Start_tr, MD_Start_td ) + if (allocated(MeshMapData%Structure_2_Mooring%dM%ta_uD )) then + call SetBlockMatrix( dUdu, MeshMapData%Structure_2_Mooring%dM%ta_ud, MD_Start_tr, MD_Start_td ) end if - else if ( p_FAST%CompSub == Module_None ) THEN - ! dU^{MD}/du^{MD} - call Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_MD%CoupledKinematics(1), MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - - ! MD is destination in the mapping, so we want M_{tv_uD} and M_{ta_uD} - MD_Start_td = y_FAST%Lin%Modules(MODULE_MD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - MD_Start_tr = MD_Start_td + u_MD%CoupledKinematics(1)%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field - - ! translational velocity: - if (allocated(MeshMapData%ED_P_2_Mooring_P%dM%tv_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_Mooring_P%dM%tv_ud, MD_Start_tr, MD_Start_td ) - end if - - ! translational acceleration: - MD_Start_tr = MD_Start_tr + u_MD%CoupledKinematics(1)%NNodes * 6 ! skip 2 fields (TranslationDisp and Orientation) with 3 components before translational velocity field - if (allocated(MeshMapData%ED_P_2_Mooring_P%dM%ta_uD )) then - call SetBlockMatrix( dUdu, MeshMapData%ED_P_2_Mooring_P%dM%ta_ud, MD_Start_tr, MD_Start_td ) - end if - - end if - - END IF END SUBROUTINE Linear_MD_InputSolve_du @@ -4155,8 +4087,8 @@ SUBROUTINE Linear_MD_InputSolve_dy( p_FAST, y_FAST, u_MD, y_ED, y_SD, MeshMapDat TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< FAST parameter data TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) TYPE(MD_InputType), INTENT(INOUT) :: u_MD !< The inputs to MoorDyn - TYPE(ED_OutputType), INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module - TYPE(SD_OutputType), INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module + TYPE(ED_OutputType), TARGET, INTENT(IN) :: y_ED !< The outputs from the ElastoDyn structural dynamics module + TYPE(SD_OutputType), TARGET, INTENT(IN) :: y_SD !< The outputs from the SubDyn structural dynamics module TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules REAL(R8Ki), INTENT(INOUT) :: dUdy(:,:) !< Jacobian matrix of which we are computing the dU^{MD}/dy^{ED} block @@ -4166,40 +4098,38 @@ SUBROUTINE Linear_MD_InputSolve_dy( p_FAST, y_FAST, u_MD, y_ED, y_SD, MeshMapDat ! Local variables: INTEGER(IntKi) :: MD_Start ! starting index of dUdy (column) where particular MD fields are located - INTEGER(IntKi) :: ED_Out_Start! starting index of dUdy (row) where particular ED fields are located - INTEGER(IntKi) :: SD_Out_Start! starting index of dUdy (row) where particular SD fields are located + INTEGER(IntKi) :: SubStructure_Out_Start! starting index of dUdy (row) where particular SD/ED fields are located + TYPE(MeshType), POINTER :: SubstructureMotion + CHARACTER(*), PARAMETER :: RoutineName = 'Linear_MD_InputSolve_dy' ErrStat = ErrID_None ErrMsg = "" - IF (u_MD%CoupledKinematics(1)%Committed) THEN + + IF (u_MD%CoupledKinematics(1)%Committed) THEN + + IF (p_FAST%CompSub == Module_SD) THEN + SubstructureMotion => y_SD%y3Mesh + SubStructure_Out_Start = Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y3Mesh%TranslationDisp field + ELSE + SubstructureMotion => y_ED%PlatformPtMesh + SubStructure_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field + END IF + !................................... ! FairLead Mesh !................................... MD_Start = y_FAST%Lin%Modules(MODULE_MD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) - if ( p_FAST%CompSub == Module_SD ) THEN - ! dU^{MD}/dy^{SD} - - !!! ! This linearization was done in forming dUdu (see Linear_MD_InputSolve_du()), so we don't need to re-calculate these matrices - !!! ! while forming dUdy, too. - !!!call Linearize_Point_to_Point( y_SD%Y3Mesh, u_MD%CoupledKinematics(1), MeshMapData%SD_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - - SD_Out_Start = Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) ! start of y_SD%Y3Mesh%TranslationDisp field - call Assemble_dUdy_Motions( y_SD%Y3Mesh, u_MD%CoupledKinematics(1), MeshMapData%SDy3_P_2_Mooring_P, MD_Start, SD_Out_Start, dUdy, OnlyTranslationDisp=.false.) + ! dU^{MD}/dy^{SD} or dU^{MD}/dy^{ED} - else if ( p_FAST%CompSub == Module_None ) THEN - ! dU^{MD}/dy^{ED} - !!! ! This linearization was done in forming dUdu (see Linear_MD_InputSolve_du()), so we don't need to re-calculate these matrices - !!! ! while forming dUdy, too. - !!!call Linearize_Point_to_Point( y_ED%PlatformPtMesh, u_MD%CoupledKinematics, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - - ED_Out_Start = Indx_y_ED_Platform_Start(y_ED, y_FAST) ! start of y_ED%PlatformPtMesh%TranslationDisp field - call Assemble_dUdy_Motions(y_ED%PlatformPtMesh, u_MD%CoupledKinematics(1), MeshMapData%ED_P_2_Mooring_P, MD_Start, ED_Out_Start, dUdy, OnlyTranslationDisp=.false.) + !!! ! This linearization was done in forming dUdu (see Linear_MD_InputSolve_du()), so we don't need to re-calculate these matrices + !!! ! while forming dUdy, too. + !!!call Linearize_Point_to_Point( SubstructureMotion, u_MD%CoupledKinematics(1), MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) - end if + call Assemble_dUdy_Motions( SubstructureMotion, u_MD%CoupledKinematics(1), MeshMapData%Structure_2_Mooring, MD_Start, SubStructure_Out_Start, dUdy, OnlyTranslationDisp=.false.) END IF END SUBROUTINE Linear_MD_InputSolve_dy @@ -5098,6 +5028,38 @@ FUNCTION Indx_u_SD_TPMesh_Start(u_SD, y_FAST) RESULT(SD_Start) SD_Start = y_FAST%Lin%Modules(Module_SD)%Instance(1)%LinStartIndx(LIN_INPUT_COL) END FUNCTION Indx_u_SD_TPMesh_Start +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine returns the starting index for the y_SD%Y1Mesh mesh in the FAST linearization outputs. +FUNCTION Indx_y_SD_Y1Mesh_Start(y_SD, y_FAST) RESULT(SD_Out_Start) + TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) + TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< SD outputs at t + + INTEGER :: SD_Out_Start !< starting index of this mesh in ElastoDyn outputs + + SD_Out_Start = y_FAST%Lin%Modules(MODULE_SD)%Instance(1)%LinStartIndx(LIN_OUTPUT_COL) +END FUNCTION Indx_y_SD_Y1Mesh_Start +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine returns the starting index for the y_SD%Y2Mesh mesh in the FAST linearization outputs. +FUNCTION Indx_y_SD_Y2Mesh_Start(y_SD, y_FAST) RESULT(SD_Out_Start) + TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) + TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< SD outputs at t + + INTEGER :: SD_Out_Start !< starting index of this mesh in ElastoDyn outputs + + SD_Out_Start = Indx_y_SD_Y1Mesh_Start(y_SD, y_FAST) + y_SD%Y1Mesh%NNodes * 6 ! 3 forces + 3 moments at each node! skip all of the Y1Mesh data and get to the beginning of +END FUNCTION Indx_y_SD_Y2Mesh_Start +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine returns the starting index for the y_SD%Y3Mesh mesh in the FAST linearization outputs. +FUNCTION Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) RESULT(SD_Out_Start) + TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) + TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< SD outputs at t + + INTEGER :: SD_Out_Start !< starting index of this mesh in ElastoDyn outputs + + SD_Out_Start = Indx_y_SD_Y2Mesh_Start(y_SD, y_FAST) + y_SD%Y2Mesh%NNodes * 6 ! 3 forces + 3 moments at each node! skip all of the Y1Mesh data and get to the beginning of +END FUNCTION Indx_y_SD_Y3Mesh_Start +!---------------------------------------------------------------------------------------------------------------------------------- + !---------------------------------------------------------------------------------------------------------------------------------- !> This routine returns the starting index for the u_SD%TPMesh mesh in the FAST linearization inputs. FUNCTION Indx_u_SD_LMesh_Start(u_SD, y_FAST) RESULT(SD_Start) @@ -5170,34 +5132,6 @@ FUNCTION Indx_y_HD_WAMIT_Start(y_HD, y_FAST) RESULT(HD_Start) END FUNCTION Indx_y_HD_WAMIT_Start !---------------------------------------------------------------------------------------------------------------------------------- -!> This routine returns the starting index for the y_SD%Y1Mesh mesh in the FAST linearization outputs. -FUNCTION Indx_y_SD_Y1Mesh_Start(y_SD, y_FAST) RESULT(SD_Out_Start) - TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) - TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< SD outputs at t - - INTEGER :: SD_Out_Start !< starting index of this mesh in SubDyn outputs - - SD_Out_Start = y_FAST%Lin%Modules(MODULE_SD)%Instance(1)%LinStartIndx(LIN_OUTPUT_COL) -END FUNCTION Indx_y_SD_Y1Mesh_Start -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine returns the starting index for the y_SD%Y2Mesh mesh in the FAST linearization outputs. -FUNCTION Indx_y_SD_Y2Mesh_Start(y_SD, y_FAST) RESULT(SD_Out_Start) - TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) - TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< SD outputs at t - - INTEGER :: SD_Out_Start !< starting index of this mesh in SubDyn outputs - - SD_Out_Start = Indx_y_SD_Y1Mesh_Start(y_SD, y_FAST) + y_SD%Y1Mesh%NNodes * 6 ! 3 forces + 3 moments at each node! skip all of the Y1Mesh data and get to the beginning of -END FUNCTION Indx_y_SD_Y2Mesh_Start -!> This routine returns the starting index for the y_SD%Y3Mesh mesh in the FAST linearization outputs. -FUNCTION Indx_y_SD_Y3Mesh_Start(y_SD, y_FAST) RESULT(SD_Out_Start) - TYPE(FAST_OutputFileType), INTENT(IN ) :: y_FAST !< FAST output file data (for linearization) - TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< SD outputs at t - - INTEGER :: SD_Out_Start !< starting index of this mesh in SubDyn outputs - - SD_Out_Start = Indx_y_SD_Y2Mesh_Start(y_SD, y_FAST) + y_SD%Y2Mesh%NNodes * 6 ! 3 forces + 3 moments at each node! skip all of the Y2Mesh data and get to the beginning of Y3Mesh -END FUNCTION Indx_y_SD_Y3Mesh_Start !---------------------------------------------------------------------------------------------------------------------------------- !> This subroutine allocates the arrays that store the operating point at each linearization time for later producing VTK diff --git a/modules/openfast-library/src/FAST_Mods.f90 b/modules/openfast-library/src/FAST_Mods.f90 index a98e8d15b8..e223e39268 100644 --- a/modules/openfast-library/src/FAST_Mods.f90 +++ b/modules/openfast-library/src/FAST_Mods.f90 @@ -61,6 +61,9 @@ MODULE FAST_ModTypes INTEGER(IntKi), PARAMETER :: LIN_OUTPUT_COL = 2 !< index for outputs INTEGER(IntKi), PARAMETER :: LIN_ContSTATE_COL = 3 !< index for continuous states + INTEGER(IntKi), PARAMETER :: Solve_FullOpt1 = 1 + INTEGER(IntKi), PARAMETER :: Solve_FullOpt2 = 2 + INTEGER(IntKi), PARAMETER :: Solve_SimplifiedOpt1 = 3 INTEGER(IntKi), PARAMETER :: SizeJac_ED_HD = 12 diff --git a/modules/openfast-library/src/FAST_Registry.txt b/modules/openfast-library/src/FAST_Registry.txt index f1b4e5504f..c2205023e7 100644 --- a/modules/openfast-library/src/FAST_Registry.txt +++ b/modules/openfast-library/src/FAST_Registry.txt @@ -17,6 +17,7 @@ usefrom ServoDyn_Registry.txt usefrom Registry-AD14.txt usefrom AeroDyn_Registry.txt usefrom SubDyn_Registry.txt +usefrom SeaState.txt usefrom HydroDyn.txt usefrom IceFloe_FASTRegistry.inp usefrom InflowWind.txt @@ -44,16 +45,17 @@ param ^ - INTEGER Module_BD - 5 - "BeamDyn" - param ^ - INTEGER Module_AD14 - 6 - "AeroDyn14" - param ^ - INTEGER Module_AD - 7 - "AeroDyn" - param ^ - INTEGER Module_SrvD - 8 - "ServoDyn" - -param ^ - INTEGER Module_HD - 9 - "HydroDyn" - -param ^ - INTEGER Module_SD - 10 - "SubDyn" - -param ^ - INTEGER Module_ExtPtfm - 11 - "External Platform Loading MCKF" - -param ^ - INTEGER Module_MAP - 12 - "MAP (Mooring Analysis Program)" - -param ^ - INTEGER Module_FEAM - 13 - "FEAMooring" - -param ^ - INTEGER Module_MD - 14 - "MoorDyn" - -param ^ - INTEGER Module_Orca - 15 - "OrcaFlex integration (HD/Mooring)" - -param ^ - INTEGER Module_IceF - 16 - "IceFloe" - -param ^ - INTEGER Module_IceD - 17 - "IceDyn" - -param ^ - INTEGER NumModules - 17 - "The number of modules available in FAST" - +param ^ - INTEGER Module_SeaSt - 9 - "SeaState" - +param ^ - INTEGER Module_HD - 10 - "HydroDyn" - +param ^ - INTEGER Module_SD - 11 - "SubDyn" - +param ^ - INTEGER Module_ExtPtfm - 12 - "External Platform Loading MCKF" - +param ^ - INTEGER Module_MAP - 13 - "MAP (Mooring Analysis Program)" - +param ^ - INTEGER Module_FEAM - 14 - "FEAMooring" - +param ^ - INTEGER Module_MD - 15 - "MoorDyn" - +param ^ - INTEGER Module_Orca - 16 - "OrcaFlex integration (HD/Mooring)" - +param ^ - INTEGER Module_IceF - 17 - "IceFloe" - +param ^ - INTEGER Module_IceD - 18 - "IceDyn" - +param ^ - INTEGER NumModules - 18 - "The number of modules available in FAST" - # Other Constants param ^ - INTEGER MaxNBlades - 3 - "Maximum number of blades allowed on a turbine" - param ^ - INTEGER IceD_MaxLegs - 4 - "because I don't know how many legs there are before calling IceD_Init and I don't want to copy the data because of sibling mesh issues, I'm going to allocate IceD based on this number" - @@ -105,12 +107,13 @@ typedef ^ FAST_ParameterType LOGICAL ModuleInitialized {NumModules} - - "An arra typedef ^ FAST_ParameterType DbKi DT_Ujac - - - "Time between when we need to re-calculate these Jacobians" s typedef ^ FAST_ParameterType Reki UJacSclFact - - - "Scaling factor used to get similar magnitudes between accelerations, forces, and moments in Jacobians" - typedef ^ FAST_ParameterType IntKi SizeJac_Opt1 {9} - - "(1)=size of matrix; (2)=size of ED portion; (3)=size of SD portion [2 meshes]; (4)=size of HD portion; (5)=size of BD portion blade 1; (6)=size of BD portion blade 2; (7)=size of BD portion blade 3; (8)=size of Orca portion; (9)=size of ExtPtfm portion;" - -#typedef ^ FAST_ParameterType IntKi SolveOption - - - "Switch to determine which solve option we are going to use (see Solve_FullOpt1, etc)" - +typedef ^ FAST_ParameterType IntKi SolveOption - - - "Switch to determine which solve option we are going to use (see Solve_FullOpt1, etc)" - # Feature switches and flags: typedef ^ FAST_ParameterType IntKi CompElast - - - "Compute blade loads (switch) {Module_ED; Module_BD}" - typedef ^ FAST_ParameterType IntKi CompInflow - - - "Compute inflow wind conditions (switch) {Module_None; Module_IfW; Module_OpFM}" - typedef ^ FAST_ParameterType IntKi CompAero - - - "Compute aerodynamic loads (switch) {Module_None; Module_AD14; Module_AD}" - typedef ^ FAST_ParameterType IntKi CompServo - - - "Compute control and electrical-drive dynamics (switch) {Module_None; Module_SrvD}" - +typedef ^ FAST_ParameterType IntKi CompSeaSt - - - "Compute sea states; wave kinematics (switch) {Module_None; Module_SeaSt}" - typedef ^ FAST_ParameterType IntKi CompHydro - - - "Compute hydrodynamic loads (switch) {Module_None; Module_HD}" - typedef ^ FAST_ParameterType IntKi CompSub - - - "Compute sub-structural dynamics (switch) {Module_None; Module_HD}" - typedef ^ FAST_ParameterType IntKi CompMooring - - - "Compute mooring system (switch) {Module_None; Module_MAP; Module_FEAM; Module_MD; Module_Orca}" - @@ -137,6 +140,7 @@ typedef ^ FAST_ParameterType CHARACTER(1024) BDBldFile {MaxNBlades} - - "Name of typedef ^ FAST_ParameterType CHARACTER(1024) InflowFile - - - "Name of file containing inflow wind input parameters" - typedef ^ FAST_ParameterType CHARACTER(1024) AeroFile - - - "Name of file containing aerodynamic input parameters" - typedef ^ FAST_ParameterType CHARACTER(1024) ServoFile - - - "Name of file containing control and electrical-drive input parameters" - +typedef ^ FAST_ParameterType CHARACTER(1024) SeaStFile - - - "Name of file containing sea state input parameters" - typedef ^ FAST_ParameterType CHARACTER(1024) HydroFile - - - "Name of file containing hydrodynamic input parameters" - typedef ^ FAST_ParameterType CHARACTER(1024) SubFile - - - "Name of file containing sub-structural input parameters" - typedef ^ FAST_ParameterType CHARACTER(1024) MooringFile - - - "Name of file containing mooring system input parameters" - @@ -356,7 +360,6 @@ typedef ^ FAST_OutputFileType IntKi VTK_count - - - "Number of VTK files written typedef ^ FAST_OutputFileType IntKi VTK_LastWaveIndx - - - "last index into wave array" - typedef ^ FAST_OutputFileType FAST_LinFileType Lin - - - "linearization data for output" typedef ^ FAST_OutputFileType IntKi ActualChanLen - - - "width of the column headers output in the text and/or binary file" - -typedef ^ FAST_OutputFileType CHARACTER(30) OutFmt_a - - - "Format used for text tabular output (except time); combines OutFmt with delim and appropriate spaces" - typedef ^ FAST_OutputFileType FAST_LinStateSave op - - - "operating points of states and inputs for VTK output of mode shapes" typedef ^ FAST_OutputFileType ReKi DriverWriteOutput {5} - - "pitch and tsr for current aero map case, plus error, number of iterations, wind speed" #typedef ^ FAST_OutputFileType CHARACTER(ChanLen) DriverWriteOutputHdr {:} - - "headers of data output from the driver" @@ -499,6 +502,20 @@ typedef ^ ^ ExtPtfm_MiscVarType m - - - "Misc/optimization variables" typedef ^ ^ ExtPtfm_InputType Input {:} - - "Array of inputs associated with InputTimes" typedef ^ ^ DbKi InputTimes {:} - - "Array of times associated with Input Array" +# ..... SeaState data ....................................................................................................... +typedef FAST SeaState_Data SeaSt_ContinuousStateType x {2} - - "Continuous states" +typedef ^ ^ SeaSt_DiscreteStateType xd {2} - - "Discrete states" +typedef ^ ^ SeaSt_ConstraintStateType z {2} - - "Constraint states" +typedef ^ ^ SeaSt_OtherStateType OtherSt {2} - - "Other states" +typedef ^ ^ SeaSt_ParameterType p - - - "Parameters" +typedef ^ ^ SeaSt_InputType u - - - "System inputs" +typedef ^ ^ SeaSt_OutputType y - - - "System outputs" +typedef ^ ^ SeaSt_MiscVarType m - - - "Misc/optimization variables" +typedef ^ ^ SeaSt_InputType Input {:} - - "Array of inputs associated with InputTimes" +typedef ^ ^ SeaSt_OutputType Output {:} - - "Array of outputs associated with CalcSteady Azimuths" +typedef ^ ^ SeaSt_OutputType y_interp - - - "interpolated system outputs for CalcSteady" +typedef ^ ^ DbKi InputTimes {:} - - "Array of times associated with Input Array" + # ..... HydroDyn data ....................................................................................................... typedef FAST HydroDyn_Data HydroDyn_ContinuousStateType x {2} - - "Continuous states" typedef ^ ^ HydroDyn_DiscreteStateType xd {2} - - "Discrete states" @@ -583,26 +600,18 @@ typedef ^ ^ DbKi InputTimes {:} - - "Array of times associated with Input Array" typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_BD_P {:} - - "Map ElastoDyn BladeRootMotion meshes to BeamDyn RootMotion point meshes" typedef ^ FAST_ModuleMapType MeshMapType BD_P_2_ED_P {:} - - "Map BeamDyn ReactionForce loads point meshes to ElastoDyn HubPtLoad point mesh" typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_BD_P_Hub {:} - - "ElastoDyn hub to BeamDyn for hub orientation necessary for pitch actuator" -# ED <-> HD +# ED/SD <-> HD typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_HD_PRP_P - - - "Map ElastoDyn PlatformPtMesh to HydroDyn platform reference Point" -typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_HD_W_P - - - "Map ElastoDyn PlatformPtMesh to HydroDyn WAMIT Point" -typedef ^ FAST_ModuleMapType MeshMapType HD_W_P_2_ED_P - - - "Map HydroDyn WAMIT Point from y%WAMITMesh to ElastoDyn PlatformPtMesh" -typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_HD_M_P - - - "Map ElastoDyn PlatformPtMesh to HydroDyn Morison Point" -typedef ^ FAST_ModuleMapType MeshMapType HD_M_P_2_ED_P - - - "Map HydroDyn Morison Point to ElastoDyn PlatformPtMesh" -# ED <-> Mooring (MAP, FEAM, MoorDyn, OrcaFlex) -typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_Mooring_P - - - "Map ElastoDyn PlatformPtMesh to MAP/FEAM/MoorDyn/OrcaFlex point mesh" -typedef ^ FAST_ModuleMapType MeshMapType Mooring_P_2_ED_P - - - "Map FEAM/MAP/MoorDyn/OrcaFlex point mesh to ElastoDyn PlatformPtMesh" -# SD <-> Mooring (MAP, FEAM, MoorDyn, OrcaFlex) -typedef ^ FAST_ModuleMapType MeshMapType SDy3_P_2_Mooring_P - - - "Map SD Motions (y3Mesh) to MAP/FEAM/MoorDyn/OrcaFlex point mesh" -typedef ^ FAST_ModuleMapType MeshMapType Mooring_P_2_SD_P - - - "Map FEAM/MAP/MoorDyn/OrcaFlex point mesh to SD point loads (LMesh) mesh" +typedef ^ FAST_ModuleMapType MeshMapType SubStructure_2_HD_W_P - - - "Map ElastoDyn PlatformPtMesh or SubDyn y2Mesh to HydroDyn WAMIT Point" +typedef ^ FAST_ModuleMapType MeshMapType HD_W_P_2_SubStructure - - - "Map HydroDyn WAMIT Point from y%WAMITMesh to ElastoDyn PlatformPtMesh or SD LMesh" +typedef ^ FAST_ModuleMapType MeshMapType SubStructure_2_HD_M_P - - - "Map ElastoDyn PlatformPtMesh or SubDyn y2Mesh to HydroDyn Morison Point" +typedef ^ FAST_ModuleMapType MeshMapType HD_M_P_2_SubStructure - - - "Map HydroDyn Morison Point to ElastoDyn PlatformPtMesh or SD LMesh" +# Structure (ED, SD, ExtPtfm) <-> Mooring (MAP, FEAM, MoorDyn, OrcaFlex) +typedef ^ FAST_ModuleMapType MeshMapType Structure_2_Mooring - - - "Map structural SD (y3Mesh)/ED to MAP/FEAM/MoorDyn/OrcaFlex point mesh" "Motions" +typedef ^ FAST_ModuleMapType MeshMapType Mooring_2_Structure - - - "Map FEAM/MAP/MoorDyn/OrcaFlex mesh to SD (LMesh)/ED (PlatformPtMesh)/ExtPtfm mesh" "Loads" # ED <-> SD or User-Platform (ExtPtfm_MCKF) typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_SD_TP - - - "Map ElastoDyn PlatformPtMesh to SubDyn transition-piece point mesh" typedef ^ FAST_ModuleMapType MeshMapType SD_TP_2_ED_P - - - "Map SubDyn transition-piece point mesh to ElastoDyn PlatformPtMesh" -# SD <-> HD -typedef ^ FAST_ModuleMapType MeshMapType SD_P_2_HD_M_P - - - "Map SubDyn y2Mesh Point to HydroDyn Morison Point" -typedef ^ FAST_ModuleMapType MeshMapType HD_M_P_2_SD_P - - - "Map HydroDyn Morison Point to SubDyn y2Mesh Point" -typedef ^ FAST_ModuleMapType MeshMapType SD_P_2_HD_W_P - - - "Map SubDyn y2Mesh Point to HydroDyn WAMIT Point" -typedef ^ FAST_ModuleMapType MeshMapType HD_W_P_2_SD_P - - - "Map HydroDyn WAMIT Point to SubDyn y2Mesh Point" # ED/BD <-> SrvD/StC typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_NStC_P_N {:} - - "Map ElastoDyn nacelle point mesh to ServoDyn/NStC point mesh" typedef ^ FAST_ModuleMapType MeshMapType NStC_P_2_ED_P_N {:} - - "Map ServoDyn/NStC nacelle point mesh to ElastoDyn point mesh on the nacelle" @@ -613,10 +622,8 @@ typedef ^ FAST_ModuleMapType MeshMapType BStC_P_2_ED_P_B {:}{:} - - "Map ServoD typedef ^ FAST_ModuleMapType MeshMapType BD_L_2_BStC_P_B {:}{:} - - "Map BeamDyn blade line2 mesh to ServoDyn/BStC point mesh" typedef ^ FAST_ModuleMapType MeshMapType BStC_P_2_BD_P_B {:}{:} - - "Map ServoDyn/BStC point mesh to BeamDyn point load mesh on the blade" # ED/SD <-> SrvD/StC -- Platform TMD -typedef ^ FAST_ModuleMapType MeshMapType SStC_P_P_2_ED_P {:} - - "Map ServoDyn/SStC platform point mesh load to ElastoDyn point load mesh" -typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_SStC_P_P {:} - - "Map ElastoDyn platform point mesh motion to ServoDyn/SStC point mesh" -typedef ^ FAST_ModuleMapType MeshMapType SStC_P_P_2_SD_P {:} - - "Map ServoDyn/SStC platform point mesh load to SubDyn point load mesh" -typedef ^ FAST_ModuleMapType MeshMapType SDy3_P_2_SStC_P_P {:} - - "Map SubDyn y3mesh point mesh motion to ServoDyn/SStC point mesh" +typedef ^ FAST_ModuleMapType MeshMapType SStC_P_P_2_SubStructure {:} - - "Map ServoDyn/SStC platform point mesh load to SubDyn/ElastoDyn point load mesh" +typedef ^ FAST_ModuleMapType MeshMapType SubStructure_2_SStC_P_P {:} - - "Map SubDyn y3mesh or ED platform mesh motion to ServoDyn/SStC point mesh" # ED --> SrvD -- PlatformPtMesh motion to SrvD%PtfmMotionMesh for passing to DLL typedef ^ FAST_ModuleMapType MeshMapType ED_P_2_SrvD_P_P - - - "Map ElastoDyn platform point mesh motion to ServoDyn point mesh -- for passing to controller" # ED/BD <-> AD (blades) @@ -645,15 +652,14 @@ typedef ^ FAST_ModuleMapType Integer Jacobian_pivot {:} - - "Pivot array used fo typedef ^ FAST_ModuleMapType Integer Jac_u_indx {:}{:} - - "matrix to help fill/pack the u vector in computing the jacobian" # Temporary copies of input meshes (stored here so we don't have to keep allocating/destroying them) typedef ^ FAST_ModuleMapType MeshType u_ED_NacelleLoads - - - "copy of ED input mesh" -typedef ^ FAST_ModuleMapType MeshType u_ED_PlatformPtMesh - - - "copy of ED input mesh" -typedef ^ FAST_ModuleMapType MeshType u_ED_PlatformPtMesh_2 - - - "copy of ED input mesh (used only for temporary storage)" -typedef ^ FAST_ModuleMapType MeshType u_ED_PlatformPtMesh_3 - - - "copy of ED input mesh (used only for temporary storage)" -typedef ^ FAST_ModuleMapType MeshType u_ED_PlatformPtMesh_MDf - - - "copy of ED input mesh used to store loads from farm-level MD" +typedef ^ FAST_ModuleMapType MeshType SubstructureLoads_Tmp - - - "copy of substructure loads input mesh (ED or SD)" +typedef ^ FAST_ModuleMapType MeshType SubstructureLoads_Tmp2 - - - "copy of substructure loads input mesh (ED or SD, used only for temporary storage)" +typedef ^ FAST_ModuleMapType MeshType PlatformLoads_Tmp - - - "copy of platform loads input mesh (ED)" +typedef ^ FAST_ModuleMapType MeshType PlatformLoads_Tmp2 - - - "copy of platform loads input mesh (ED, used only for temporary storage)" +typedef ^ FAST_ModuleMapType MeshType SubstructureLoads_Tmp_Farm - - - "copy of substructure mesh used to store loads from farm-level MD" typedef ^ FAST_ModuleMapType MeshType u_ED_TowerPtloads - - - "copy of ED input mesh" typedef ^ FAST_ModuleMapType MeshType u_ED_BladePtLoads {:} - - "copy of ED input mesh" typedef ^ FAST_ModuleMapType MeshType u_SD_TPMesh - - - "copy of SD input mesh" -typedef ^ FAST_ModuleMapType MeshType u_SD_LMesh - - - "copy of SD input mesh" -typedef ^ FAST_ModuleMapType MeshType u_SD_LMesh_2 - - - "copy of SD input mesh (used only for temporary storage)" #typedef ^ FAST_ModuleMapType MeshType u_HD_M_LumpedMesh - - - "copy of HD input mesh" typedef ^ FAST_ModuleMapType MeshType u_HD_M_Mesh - - - "copy of HD morison input mesh" typedef ^ FAST_ModuleMapType MeshType u_HD_W_Mesh - - - "copy of HD wamit input mesh" @@ -708,6 +714,8 @@ typedef ^ FAST_InitData InflowWind_InitInputType InData_IfW - - typedef ^ FAST_InitData InflowWind_InitOutputType OutData_IfW - - - "IfW Initialization output data" typedef ^ FAST_InitData OpFM_InitInputType InData_OpFM - - - "OpFM Initialization input data" typedef ^ FAST_InitData OpFM_InitOutputType OutData_OpFM - - - "OpFM Initialization output data" +typedef ^ FAST_InitData SeaSt_InitInputType InData_SeaSt - - - "SeaSt Initialization input data" +typedef ^ FAST_InitData SeaSt_InitOutputType OutData_SeaSt - - - "SeaSt Initialization output data" typedef ^ FAST_InitData HydroDyn_InitInputType InData_HD - - - "HD Initialization input data" typedef ^ FAST_InitData HydroDyn_InitOutputType OutData_HD - - - "HD Initialization output data" typedef ^ FAST_InitData SD_InitInputType InData_SD - - - "SD Initialization input data" @@ -763,6 +771,7 @@ typedef ^ FAST_TurbineType AeroDyn14_Data AD14 - - - "Data for the AeroDyn14 mod typedef ^ FAST_TurbineType InflowWind_Data IfW - - - "Data for InflowWind module" - typedef ^ FAST_TurbineType OpenFOAM_Data OpFM - - - "Data for OpenFOAM integration module" - typedef ^ FAST_TurbineType SCDataEx_Data SC_DX - - - "Data for SuperController integration module" - +typedef ^ FAST_TurbineType SeaState_Data SeaSt - - - "Data for the SeaState module" - typedef ^ FAST_TurbineType HydroDyn_Data HD - - - "Data for the HydroDyn module" - typedef ^ FAST_TurbineType SubDyn_Data SD - - - "Data for the SubDyn module" - typedef ^ FAST_TurbineType MAP_Data MAP - - - "Data for the MAP (Mooring Analysis Program) module" - diff --git a/modules/openfast-library/src/FAST_Solver.f90 b/modules/openfast-library/src/FAST_Solver.f90 index 1f6653285c..02f148307f 100644 --- a/modules/openfast-library/src/FAST_Solver.f90 +++ b/modules/openfast-library/src/FAST_Solver.f90 @@ -36,6 +36,7 @@ MODULE FAST_Solver USE MoorDyn USE MAP USE OrcaFlexInterface + USE SeaState USE HydroDyn USE IceDyn USE IceFloe @@ -343,10 +344,10 @@ SUBROUTINE ED_InputSolve( p_FAST, u_ED, y_ED, p_AD14, y_AD14, y_AD, y_SrvD, u_AD IF ( ALLOCATED(y_SrvD%SStCLoadMesh) ) THEN ! Platform do j=1,size(y_SrvD%SStCLoadMesh) IF (y_SrvD%SStCLoadMesh(j)%Committed) THEN - CALL Transfer_Point_to_Point( y_SrvD%SStCLoadMesh(j), MeshMapData%u_ED_PlatformPtMesh, MeshMapData%SStC_P_P_2_ED_P(j), ErrStat2, ErrMsg2, u_SrvD%SStCMotionMesh(j), y_ED%PlatformPtMesh ) + CALL Transfer_Point_to_Point( y_SrvD%SStCLoadMesh(j), MeshMapData%SubstructureLoads_Tmp, MeshMapData%SStC_P_P_2_SubStructure(j), ErrStat2, ErrMsg2, u_SrvD%SStCMotionMesh(j), y_ED%PlatformPtMesh ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//':u_ED%PlatformPtMesh' ) - u_ED%PlatformPtMesh%Force = u_ED%PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh%Force - u_ED%PlatformPtMesh%Moment = u_ED%PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh%Moment + u_ED%PlatformPtMesh%Force = u_ED%PlatformPtMesh%Force + MeshMapData%SubstructureLoads_Tmp%Force + u_ED%PlatformPtMesh%Moment = u_ED%PlatformPtMesh%Moment + MeshMapData%SubstructureLoads_Tmp%Moment ENDIF enddo ENDIF @@ -878,7 +879,7 @@ SUBROUTINE SrvD_InputSolve( p_FAST, m_FAST, u_SrvD, y_ED, y_IfW, y_OpFM, y_BD, y TYPE(InflowWind_OutputType), INTENT(IN) :: y_IfW !< InflowWind outputs TYPE(OpFM_OutputType), INTENT(IN) :: y_OpFM !< OpenFOAM outputs TYPE(BD_OutputType), INTENT(IN) :: y_BD(:) !< BD Outputs - TYPE(SD_OutputType), INTENT(IN) :: y_SD !< SD Outputs + TYPE(SD_OutputType),TARGET, INTENT(IN) :: y_SD !< SD Outputs TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message @@ -886,13 +887,17 @@ SUBROUTINE SrvD_InputSolve( p_FAST, m_FAST, u_SrvD, y_ED, y_IfW, y_OpFM, y_BD, y INTEGER(IntKi) :: k ! blade loop counter INTEGER(IntKi) :: j ! StC instance counter - TYPE(MeshType), POINTER :: PlatformMotion + TYPE(MeshType), POINTER :: SubStructureMotion INTEGER(IntKi) :: ErrStat2 ! temporary Error status of the operation CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary Error message if ErrStat /= ErrID_None CHARACTER(*), PARAMETER :: RoutineName = 'SrvD_InputSolve' - PlatformMotion => y_ED%PlatformPtMesh + IF (p_FAST%CompSub == Module_SD) THEN + SubStructureMotion => y_SD%y3Mesh + ELSE + SubStructureMotion => y_ED%PlatformPtMesh + END IF ErrStat = ErrID_None ErrMsg = "" @@ -1041,13 +1046,10 @@ SUBROUTINE SrvD_InputSolve( p_FAST, m_FAST, u_SrvD, y_ED, y_IfW, y_OpFM, y_BD, y ENDIF ! Platform - IF ( p_FAST%CompServo == Module_SrvD .and. p_FAST%CompSub /= Module_SD ) THEN - call Transfer_ED_to_SStC( u_SrvD, y_ED, MeshMapData, ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - ELSE - call Transfer_SD_to_SStC( u_SrvD, y_SD, MeshMapData, ErrStat2, ErrMsg2 ) + IF ( p_FAST%CompSub /= Module_None ) THEN + call Transfer_Substructure_to_SStC( u_SrvD, SubStructureMotion, MeshMapData, ErrStat2, ErrMsg2 ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - ENDIF + END IF ! Transfer any cable length info from SD or MD ! --> SrvD, SD, and MD are not setup for this yet. Add here if feedback is ever required @@ -1060,61 +1062,33 @@ SUBROUTINE SrvD_InputSolve( p_FAST, m_FAST, u_SrvD, y_ED, y_IfW, y_OpFM, y_BD, y END SUBROUTINE SrvD_InputSolve !---------------------------------------------------------------------------------------------------------------------------------- -!> This routine sets the inputs for the SrvD%SStC mesh motion from ElastoDyn -SUBROUTINE Transfer_ED_to_SStC( u_SrvD, y_ED, MeshMapData, ErrStat, ErrMsg ) -!.................................................................................................................................. - TYPE(SrvD_InputType), INTENT(INOUT) :: u_SrvD !< ServoDyn input - TYPE(ED_OutputType), INTENT(IN ) :: y_ED !< The outputs of the structural dynamics module - TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< data for mapping meshes between modules - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*) , INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - INTEGER(IntKi) :: ErrStat2 ! temporary Error status of the operation - CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary Error message if ErrStat /= ErrID_None - integer(IntKi) :: j ! Generic counter - - ErrStat = ErrID_None - ErrMsg = '' - !---------------------------------------------------------------------------------------------------- - ! Map ElastoDyn platform point mesh motion to ServoDyn/SStC point mesh -- motions - !---------------------------------------------------------------------------------------------------- - ! motions: - IF ( ALLOCATED(u_SrvD%SStCMotionMesh) ) THEN - do j=1,size(u_SrvD%SStCMotionMesh) - IF (u_SrvD%SStCMotionMesh(j)%Committed) THEN - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_SrvD%SStCMotionMesh(j), MeshMapData%ED_P_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'Transfer_ED_to_SStC') - ENDIF - enddo - ENDIF -END SUBROUTINE Transfer_ED_to_SStC -!---------------------------------------------------------------------------------------------------------------------------------- !> This routine sets the inputs for the SrvD%SStC mesh motion from SubDyn -SUBROUTINE Transfer_SD_to_SStC( u_SrvD, y_SD, MeshMapData, ErrStat, ErrMsg ) +SUBROUTINE Transfer_Substructure_to_SStC( u_SrvD, SubstructureMotionMesh, MeshMapData, ErrStat, ErrMsg ) !.................................................................................................................................. - TYPE(SrvD_InputType), INTENT(INOUT) :: u_SrvD !< ServoDyn input - TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< The outputs of the structural dynamics module - TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< data for mapping meshes between modules - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*) , INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - INTEGER(IntKi) :: ErrStat2 ! temporary Error status of the operation - CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary Error message if ErrStat /= ErrID_None - integer(IntKi) :: j ! Generic counter + TYPE(SrvD_InputType), INTENT(INOUT) :: u_SrvD !< ServoDyn input + TYPE(MeshType), INTENT(IN ) :: SubstructureMotionMesh !< The outputs of the structural dynamics module + TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< data for mapping meshes between modules + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*) , INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + INTEGER(IntKi) :: ErrStat2 ! temporary Error status of the operation + CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary Error message if ErrStat /= ErrID_None + integer(IntKi) :: j ! Generic counter ErrStat = ErrID_None ErrMsg = '' !---------------------------------------------------------------------------------------------------- - ! Map SubDyn platform point mesh motion to ServoDyn/SStC point mesh -- motions + ! Map SubDyn or ElastoDyn platform point mesh motion to ServoDyn/SStC point mesh -- motions !---------------------------------------------------------------------------------------------------- ! motions: IF ( ALLOCATED(u_SrvD%SStCMotionMesh) ) THEN do j=1,size(u_SrvD%SStCMotionMesh) IF (u_SrvD%SStCMotionMesh(j)%Committed) THEN - CALL Transfer_Point_to_Point( y_SD%y3Mesh, u_SrvD%SStCMotionMesh(j), MeshMapData%SDy3_P_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'Transfer_SD_to_SStC') + CALL Transfer_Point_to_Point( SubstructureMotionMesh, u_SrvD%SStCMotionMesh(j), MeshMapData%SubStructure_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,'Transfer_Substructure_to_SStC') ENDIF enddo ENDIF -END SUBROUTINE Transfer_SD_to_SStC +END SUBROUTINE Transfer_Substructure_to_SStC !---------------------------------------------------------------------------------------------------------------------------------- !> This routine sets the inputs required for ServoDyn from an external source (Simulink) SUBROUTINE SrvD_SetExternalInputs( p_FAST, m_FAST, u_SrvD ) @@ -1164,9 +1138,9 @@ SUBROUTINE SrvD_SetExternalInputs( p_FAST, m_FAST, u_SrvD ) END SUBROUTINE SrvD_SetExternalInputs !---------------------------------------------------------------------------------------------------------------------------------- !> This routine transfers the SD outputs into inputs required for HD -SUBROUTINE Transfer_SD_to_HD( y_SD, u_HD_W_Mesh, u_HD_M_Mesh, MeshMapData, ErrStat, ErrMsg ) +SUBROUTINE Transfer_SubStructureMotion_to_HD( SubStructureMotionMesh2HD, u_HD_W_Mesh, u_HD_M_Mesh, MeshMapData, ErrStat, ErrMsg ) !.................................................................................................................................. - TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< The outputs of the structural dynamics module + TYPE(MeshType), INTENT(IN ) :: SubStructureMotionMesh2HD !< The outputs of the structural dynamics module TYPE(MeshType), INTENT(INOUT) :: u_HD_W_Mesh !< HydroDyn input mesh (separated here so that we can use temp meshes in ED_SD_HD_InputSolve) TYPE(MeshType), INTENT(INOUT) :: u_HD_M_Mesh !< HydroDyn input mesh (separated here so that we can use temp meshes in ED_SD_HD_InputSolve) TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< data for mapping meshes @@ -1185,19 +1159,19 @@ SUBROUTINE Transfer_SD_to_HD( y_SD, u_HD_W_Mesh, u_HD_M_Mesh, MeshMapData, ErrSt IF ( u_HD_W_Mesh%Committed ) THEN ! These are the motions for the lumped point loads associated viscous drag on the WAMIT body and/or filled/flooded lumped forces of the WAMIT body - CALL Transfer_Point_to_Point( y_SD%y2Mesh, u_HD_W_Mesh, MeshMapData%SD_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,'Transfer_SD_to_HD (u_HD%WAMITMesh)' ) + CALL Transfer_Point_to_Point( SubStructureMotionMesh2HD, u_HD_W_Mesh, MeshMapData%SubStructure_2_HD_W_P, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,'Transfer_SubStructureMotion_to_HD (u_HD%WAMITMesh)' ) END IF IF ( u_HD_M_Mesh%Committed ) THEN ! These are the motions for the lumped point loads associated viscous drag on the WAMIT body and/or filled/flooded lumped forces of the WAMIT body - CALL Transfer_Point_to_Point( y_SD%y2Mesh, u_HD_M_Mesh, MeshMapData%SD_P_2_HD_M_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,'Transfer_SD_to_HD (u_HD%Morison%Mesh)' ) + CALL Transfer_Point_to_Point( SubStructureMotionMesh2HD, u_HD_M_Mesh, MeshMapData%SubStructure_2_HD_M_P, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,'Transfer_SubStructureMotion_to_HD (u_HD%Morison%Mesh)' ) END IF -END SUBROUTINE Transfer_SD_to_HD +END SUBROUTINE Transfer_SubStructureMotion_to_HD !---------------------------------------------------------------------------------------------------------------------------------- !> This routine transfers the platform motion output of the structural module (ED) into inputs required for HD SUBROUTINE Transfer_PlatformMotion_to_HD( PlatformMotion, u_HD, MeshMapData, ErrStat, ErrMsg ) @@ -1220,31 +1194,14 @@ SUBROUTINE Transfer_PlatformMotion_to_HD( PlatformMotion, u_HD, MeshMapData, Err ! This is for case of rigid substructure - !bjj: We do this without all the extra meshcopy/destroy calls with u_mapped because these inputs are only from one mesh - ! Transfer the ED outputs of the platform motions to the HD input of which represents the same data CALL Transfer_Point_to_Point( PlatformMotion, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,'Transfer_ED_to_HD (u_HD%PRPMesh)' ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//' (u_HD%PRPMesh)' ) - IF ( u_HD%WAMITMesh%Committed ) THEN - - ! These are the motions for the lumped point loads associated the WAMIT body(ies) and include: hydrostatics, radiation memory effect, - ! wave kinematics, additional preload, additional stiffness, additional linear damping, additional quadratic damping, - ! hydrodynamic added mass - - CALL Transfer_Point_to_Point( PlatformMotion, u_HD%WAMITMesh, MeshMapData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg, RoutineName//' (u_HD%WAMITMesh)' ) - - END IF !WAMIT - - - IF ( u_HD%Morison%Mesh%Committed ) THEN - - ! These are the motions for the lumped point loads associated viscous drag on the WAMIT body and/or filled/flooded lumped forces of the WAMIT body - CALL Transfer_Point_to_Point( PlatformMotion, u_HD%Morison%Mesh, MeshMapData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg, RoutineName//' (u_HD%Morison%Mesh)' ) - END IF + CALL Transfer_SubStructureMotion_to_HD( PlatformMotion, u_HD%WAMITMesh, u_HD%Morison%Mesh, MeshMapData, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + END SUBROUTINE Transfer_PlatformMotion_to_HD !---------------------------------------------------------------------------------------------------------------------------------- @@ -1276,12 +1233,15 @@ SUBROUTINE Transfer_SrvD_to_SD_MD( p_FAST, y_SrvD, u_SD, u_MD ) END SUBROUTINE Transfer_SrvD_to_SD_MD !---------------------------------------------------------------------------------------------------------------------------------- !> This routine transfers the ED outputs into inputs required for HD, SD, ExtPtfm, BD, MAP, and/or FEAM -SUBROUTINE Transfer_ED_to_HD_SD_BD_Mooring( p_FAST, y_ED, u_HD, u_SD, u_ExtPtfm, u_MAP, u_FEAM, u_MD, u_Orca, u_BD, u_SrvD, MeshMapData, ErrStat, ErrMsg ) +!> Note that this also calls SD_CalcOutput if SubDyn and HydroDyn are both used. +SUBROUTINE Transfer_Structure_to_Opt1Inputs( this_time, this_state, p_FAST, y_ED, u_HD, SD, u_ExtPtfm, u_MAP, u_FEAM, u_MD, u_Orca, u_BD, u_SrvD, MeshMapData, ErrStat, ErrMsg ) !.................................................................................................................................. + REAL(DbKi) , intent(in ) :: this_time !< The current simulation time (actual or time of prediction) + INTEGER(IntKi) , intent(in ) :: this_state !< Index into the state array (current or predicted states) TYPE(FAST_ParameterType), INTENT(IN) :: p_FAST !< Glue-code simulation parameters - TYPE(ED_OutputType), INTENT(IN ) :: y_ED !< The outputs of the structural dynamics module + TYPE(ED_OutputType),TARGET, INTENT(IN ) :: y_ED !< The outputs of the structural dynamics module TYPE(HydroDyn_InputType), INTENT(INOUT) :: u_HD !< HydroDyn input - TYPE(SD_InputType), INTENT(INOUT) :: u_SD !< SubDyn input + TYPE(SubDyn_Data), TARGET, INTENT(INOUT) :: SD !< SubDyn data (all data transferred so we can call SD_CalcOutput if necessary) TYPE(ExtPtfm_InputType), INTENT(INOUT) :: u_ExtPtfm !< ExtPtfm_MCKF input TYPE(MAP_InputType), INTENT(INOUT) :: u_MAP !< MAP input TYPE(FEAM_InputType), INTENT(INOUT) :: u_FEAM !< FEAM input @@ -1297,118 +1257,109 @@ SUBROUTINE Transfer_ED_to_HD_SD_BD_Mooring( p_FAST, y_ED, u_HD, u_SD, u_ExtPtfm, ! local variables INTEGER(IntKi) :: ErrStat2 ! temporary Error status of the operation CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary Error message if ErrStat /= ErrID_None - CHARACTER(*), PARAMETER :: RoutineName = 'Transfer_ED_to_HD_SD_BD_Mooring' + CHARACTER(*), PARAMETER :: RoutineName = 'Transfer_Structure_to_Opt1Inputs' + TYPE(MeshType), POINTER :: PlatformMotion + TYPE(MeshType), POINTER :: SubstructureMotion + TYPE(MeshType), POINTER :: SubstructureMotion2HD ErrStat = ErrID_None ErrMsg = "" + PlatformMotion => y_ED%PlatformPtMesh + + IF (p_FAST%CompSub == Module_SD) THEN + SubstructureMotion => SD%y%y3Mesh + SubstructureMotion2HD => SD%y%y2Mesh + ELSE + SubstructureMotion => PlatformMotion + SubstructureMotion2HD => PlatformMotion + ENDIF + ! transfer ED outputs to other modules used in option 1: IF ( p_FAST%CompSub == Module_SD ) THEN ! Map ED (motion) outputs to SD inputs: - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_SD%TPMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( PlatformMotion, SD%Input(1)%TPMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//':u_SD%TPMesh' ) - IF ( p_FAST%CompHydro == Module_HD ) call TransferEDToHD_PRP() + IF ( p_FAST%CompHydro == Module_HD ) THEN ! This call to SD_CalcOutput was added because of some instabilities in the TCF merge (per conversation with ADP in May/June 2021) + CALL SD_CalcOutput( this_time, SD%Input(1), SD%p, SD%x(this_state), SD%xd(this_state), SD%z(this_state), SD%OtherSt(this_state), SD%y, SD%m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF ELSEIF ( p_FAST%CompSub == Module_ExtPtfm ) THEN ! Map ED (motion) outputs to ExtPtfm inputs: - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_ExtPtfm%PtfmMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( PlatformMotion, u_ExtPtfm%PtfmMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//':u_ExtPtfm%PtfmMesh' ) - if ( p_FAST%CompHydro == Module_HD ) then - ! Map ED outputs to HD inputs: - CALL Transfer_PlatformMotion_to_HD( y_ED%PlatformPtMesh, u_HD, MeshMapData, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName ) - ! TODO: GJH Used to be the following GJH 5/13/2020 - ! call TransferFixedBottomToHD() - end if - - - ELSEIF ( p_FAST%CompHydro == Module_HD ) THEN - ! Map ED outputs to HD inputs: - CALL Transfer_PlatformMotion_to_HD( y_ED%PlatformPtMesh, u_HD, MeshMapData, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName ) - END IF + IF ( p_FAST%CompHydro == Module_HD ) THEN - - - IF ( p_FAST%CompElast == Module_BD .and. BD_Solve_Option1) THEN - ! map ED root and hub motion outputs to BeamDyn: - CALL Transfer_ED_to_BD(y_ED, u_BD, MeshMapData, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName ) + CALL Transfer_Point_to_Point( PlatformMotion, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg, RoutineName//' (u_HD%PRPMesh)' ) + ! if we don't have a call to SD_CalcOutput, we need to check that p_FAST%CompSub /= Module_SD before this: + ! IF (p_FAST%CompSub /= Module_SD) THEN + CALL Transfer_SubStructureMotion_to_HD( SubstructureMotion2HD, u_HD%WAMITMesh, u_HD%Morison%Mesh, MeshMapData, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + !END IF ! don't transfer for SubDyn unless we have called SD_CalcOutput + END IF - - if ( p_FAST%CompSub /= Module_SD ) then + + ! if we don't have a call to SD_CalcOutput, we need to check that p_FAST%CompSub /= Module_SD before this: + ! IF (p_FAST%CompSub /= Module_SD) THEN IF ( p_FAST%CompMooring == Module_MAP ) THEN - !TODO: GJH I do not have plan documentation for the External Platform connection to MAP GJH 8/11/2020 ! motions: - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_MAP%PtFairDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( SubstructureMotion, u_MAP%PtFairDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//'u_MAP%PtFairDisplacement' ) ELSEIF ( p_FAST%CompMooring == Module_MD ) THEN ! motions: - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_MD%CoupledKinematics(1), MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( SubstructureMotion, u_MD%CoupledKinematics(1), MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//'u_MD%CoupledKinematics' ) ELSEIF ( p_FAST%CompMooring == Module_FEAM ) THEN ! motions: - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_FEAM%PtFairleadDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( SubstructureMotion, u_FEAM%PtFairleadDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//'u_FEAM%PtFairleadDisplacement' ) ELSEIF ( p_FAST%CompMooring == Module_Orca ) THEN ! motions: - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_Orca%PtfmMesh, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( PlatformMotion, u_Orca%PtfmMesh, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//'u_Orca%PtfmMesh' ) END IF - end if - - + ! Map motions for ServodDyn Structural control (TMD) if used. - IF ( p_FAST%CompServo == Module_SrvD .and. p_FAST%CompSub /= Module_SD ) THEN - call Transfer_ED_to_SStC( u_SrvD, y_ED, MeshMapData, ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName//'u_SrvD%SStCMotionMesh') - ENDIF - -contains - subroutine TransferEDToHD_PRP() + ! don't transfer for SubDyn unless we have called SD_CalcOutput + IF ( p_FAST%CompServo == Module_SrvD ) THEN + call Transfer_Substructure_to_SStC( u_SrvD, SubstructureMotion, MeshMapData, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName//'u_SrvD%SStCMotionMesh') + END IF - ! These are the motions for the lumped point loads associated the WAMIT body and include: hydrostatics, radiation memory effect, - ! wave kinematics, additional preload, additional stiffness, additional linear damping, additional quadratic damping, - ! hydrodynamic added mass - - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg, RoutineName//' (u_HD%PRPMesh)' ) - - end subroutine + !END IF ! don't transfer for SubDyn unless we have called SD_CalcOutput - subroutine TransferFixedBottomToHD() - IF ( u_HD%WAMITMesh%Committed ) THEN -!TODO: GJH Do we still need this? ExtPtfm ? GJH 5/11/2020 - ! These are the motions for the lumped point loads associated the WAMIT body and include: hydrostatics, radiation memory effect, - ! wave kinematics, additional preload, additional stiffness, additional linear damping, additional quadratic damping, - ! hydrodynamic added mass - CALL Transfer_Point_to_Point( y_ED%PlatformPtMesh, u_HD%WAMITMesh, MeshMapData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg, RoutineName//' (u_HD%Mesh)' ) + IF ( p_FAST%CompElast == Module_BD .and. BD_Solve_Option1) THEN + ! map ED root and hub motion outputs to BeamDyn: + CALL Transfer_ED_to_BD(y_ED, u_BD, MeshMapData, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName ) + + END IF + - END IF !WAMIT - end subroutine -END SUBROUTINE Transfer_ED_to_HD_SD_BD_Mooring +END SUBROUTINE Transfer_Structure_to_Opt1Inputs !---------------------------------------------------------------------------------------------------------------------------------- !> This routine sets the inputs required for IceFloe. -SUBROUTINE IceFloe_InputSolve( u_IceF, y_SD, MeshMapData, ErrStat, ErrMsg ) +SUBROUTINE IceFloe_InputSolve( u_IceF, SubstructureMotionMesh, MeshMapData, ErrStat, ErrMsg ) !.................................................................................................................................. ! Passed variables TYPE(IceFloe_InputType), INTENT(INOUT) :: u_IceF !< IceFloe input - TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< SubDyn outputs + TYPE(MeshType), INTENT(IN ) :: SubstructureMotionMesh !< Substructure motion (output) mesh TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< data for mapping meshes between modules INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation @@ -1419,17 +1370,17 @@ SUBROUTINE IceFloe_InputSolve( u_IceF, y_SD, MeshMapData, ErrStat, ErrMsg ) ! Map SD outputs to IceFloe inputs !---------------------------------------------------------------------------------------------------- ! motions: - CALL Transfer_Point_to_Point( y_SD%y3Mesh, u_IceF%IceMesh, MeshMapData%SDy3_P_2_IceF_P, ErrStat, ErrMsg ) + CALL Transfer_Point_to_Point( SubstructureMotionMesh, u_IceF%IceMesh, MeshMapData%SDy3_P_2_IceF_P, ErrStat, ErrMsg ) END SUBROUTINE IceFloe_InputSolve !---------------------------------------------------------------------------------------------------------------------------------- !> This routine sets the inputs required for IceFloe. -SUBROUTINE IceD_InputSolve( u_IceD, y_SD, MeshMapData, legNum, ErrStat, ErrMsg ) +SUBROUTINE IceD_InputSolve( u_IceD, SubstructureMotionMesh, MeshMapData, legNum, ErrStat, ErrMsg ) !.................................................................................................................................. ! Passed variables TYPE(IceD_InputType), INTENT(INOUT) :: u_IceD !< IceDyn input - TYPE(SD_OutputType), INTENT(IN ) :: y_SD !< SubDyn outputs + TYPE(MeshType), INTENT(IN ) :: SubstructureMotionMesh !< Substructure motion (output) mesh TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< data for mapping meshes between modules INTEGER(IntKi), INTENT(IN ) :: legNum !< which instance of IceDyn we're using @@ -1441,7 +1392,7 @@ SUBROUTINE IceD_InputSolve( u_IceD, y_SD, MeshMapData, legNum, ErrStat, ErrMsg ) ! Map SD outputs to IceFloe inputs !---------------------------------------------------------------------------------------------------- ! motions: - CALL Transfer_Point_to_Point( y_SD%y3Mesh, u_IceD%PointMesh, MeshMapData%SDy3_P_2_IceD_P(legNum), ErrStat, ErrMsg ) + CALL Transfer_Point_to_Point( SubstructureMotionMesh, u_IceD%PointMesh, MeshMapData%SDy3_P_2_IceD_P(legNum), ErrStat, ErrMsg ) END SUBROUTINE IceD_InputSolve !---------------------------------------------------------------------------------------------------------------------------------- @@ -1522,79 +1473,6 @@ SUBROUTINE Transfer_ED_to_BD_tmp( y_ED, MeshMapData, ErrStat, ErrMsg ) END SUBROUTINE Transfer_ED_to_BD_tmp !---------------------------------------------------------------------------------------------------------------------------------- -!> This routine transfers the HD outputs into inputs required for ED. Note that this *adds* to the values already in -!! u_SD_LMesh (so initialize it before calling this routine). -SUBROUTINE Transfer_HD_to_SD( u_mapped, u_SD_LMesh, u_mapped_positions, y_HD, u_HD_W_Mesh, u_HD_M_Mesh, MeshMapData, ErrStat, ErrMsg ) -!.................................................................................................................................. - TYPE(MeshType), INTENT(INOUT) :: u_mapped !< temporary copy of SD mesh (an argument to avoid another temporary mesh copy) - TYPE(MeshType), INTENT(INOUT) :: u_SD_LMesh !< SD Inputs on LMesh at t (separate so we can call from FullOpt1_InputOutputSolve with temp meshes) - TYPE(MeshType), INTENT(IN ) :: u_mapped_positions !< Mesh sibling of u_mapped, with displaced positions - TYPE(HydroDyn_OutputType), INTENT(IN ) :: y_HD !< HydroDyn outputs - TYPE(MeshType), INTENT(IN ) :: u_HD_W_Mesh !< HydroDyn WAMIT input mesh (separate so we can call from FullOpt1_InputOutputSolve with temp meshes) - TYPE(MeshType), INTENT(IN ) :: u_HD_M_Mesh !< HydroDyn Morison input mesh (separate so we can call from FullOpt1_InputOutputSolve with temp meshes) - - TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message - - ! local variables - INTEGER(IntKi) :: ErrStat2 ! temporary Error status of the operation - CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary Error message if ErrStat /= ErrID_None - - CHARACTER(*), PARAMETER :: RoutineName = 'Transfer_HD_to_SD' - - ErrStat = ErrID_None - ErrMsg = "" - - !assumes u_SD%LMesh%Committed (i.e., u_SD_LMesh%Committed) - IF ( y_HD%WAMITMesh%Committed ) THEN - ! we're mapping loads, so we also need the sibling meshes' displacements: - CALL Transfer_Point_to_Point( y_HD%WAMITMesh, u_mapped, MeshMapData%HD_W_P_2_SD_P, ErrStat2, ErrMsg2, u_HD_W_Mesh, u_mapped_positions ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - u_SD_LMesh%Force = u_SD_LMesh%Force + u_mapped%Force - u_SD_LMesh%Moment = u_SD_LMesh%Moment + u_mapped%Moment - -#ifdef DEBUG_MESH_TRANSFER - CALL WrScr('********************************************************') - CALL WrScr('**** SD to HD point-to-point (WAMIT) *****') - CALL WrScr('********************************************************') - CALL WriteMappingTransferToFile(u_mapped, u_mapped_positions, u_HD_W_Mesh, y_HD%WAMITMesh,& - MeshMapData%SD_P_2_HD_W_P, MeshMapData%HD_M_P_2_SD_P, & - 'SD_y2_HD_WP_Meshes_t'//TRIM(Num2LStr(0))//'.bin' ) - !print * - !pause - -#endif - END IF - - IF ( y_HD%Morison%Mesh%Committed ) THEN - ! we're mapping loads, so we also need the sibling meshes' displacements: - CALL Transfer_Point_to_Point( y_HD%Morison%Mesh, u_mapped, MeshMapData%HD_M_P_2_SD_P, ErrStat2, ErrMsg2, u_HD_M_Mesh, u_mapped_positions ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - u_SD_LMesh%Force = u_SD_LMesh%Force + u_mapped%Force - u_SD_LMesh%Moment = u_SD_LMesh%Moment + u_mapped%Moment - -#ifdef DEBUG_MESH_TRANSFER - CALL WrScr('********************************************************') - CALL WrScr('**** SD to HD point-to-point (morison) *****') - CALL WrScr('********************************************************') - CALL WriteMappingTransferToFile(u_mapped, u_mapped_positions, u_HD_M_Mesh, y_HD%Morison%Mesh,& - MeshMapData%SD_P_2_HD_M_P, MeshMapData%HD_M_P_2_SD_P, & - 'SD_y2_HD_MP_Meshes_t'//TRIM(Num2LStr(0))//'.bin' ) - !print * - !pause - -#endif - - END IF - - -END SUBROUTINE Transfer_HD_to_SD -!---------------------------------------------------------------------------------------------------------------------------------- !> function to return the size of perturbation in calculating jacobian with finite differences. Currently hard-coded to return 1. REAL(ReKi) FUNCTION GetPerturb(x) REAL(ReKi), INTENT(IN) :: x !< value that we want to perturb @@ -1979,9 +1857,14 @@ SUBROUTINE U_ED_HD_Residual( y_ED2, y_HD2, u_IN, U_Resid) REAL(ReKi) , INTENT( OUT) :: U_Resid(NumInputs) integer(IntKi) :: j ! Generic counter + TYPE(MeshType), POINTER :: SubstructureMotion TYPE(MeshType), POINTER :: PlatformMotions + TYPE(MeshType), POINTER :: SubstructureMotion2HD - PlatformMotions => y_ED2%PlatformPtMesh + ! SD cannot be used, so these all point to the same place. Using separate variables so they match with values in the full option 1 solve + PlatformMotions => y_ED2%PlatformPtMesh + SubstructureMotion => y_ED2%PlatformPtMesh + SubstructureMotion2HD => y_ED2%PlatformPtMesh ! This is only called is there is no flexible substructure model (RIGID substructure) @@ -1995,57 +1878,58 @@ SUBROUTINE U_ED_HD_Residual( y_ED2, y_HD2, u_IN, U_Resid) IF ( p_FAST%CompMooring == Module_MAP ) THEN ! note: MAP_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - CALL Transfer_Point_to_Point( y_ED2%PlatformPtMesh, u_MAP%PtFairDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) + CALL Transfer_Point_to_Point( SubstructureMotion, u_MAP%PtFairDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - CALL Transfer_Point_to_Point( y_MAP%PtFairleadLoad, MeshMapData%u_ED_PlatformPtMesh, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, u_MAP%PtFairDisplacement, PlatformMotions ) !u_MAP and y_ED contain the displacements needed for moment calculations + CALL Transfer_Point_to_Point( y_MAP%PtFairleadLoad, MeshMapData%SubstructureLoads_Tmp, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, u_MAP%PtFairDisplacement, SubstructureMotion ) !u_MAP and y_ED contain the displacements needed for moment calculations CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ELSEIF ( p_FAST%CompMooring == Module_MD ) THEN ! note: MD_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - CALL Transfer_Point_to_Point( y_ED2%PlatformPtMesh, u_MD%CoupledKinematics(1), MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) + CALL Transfer_Point_to_Point( SubstructureMotion, u_MD%CoupledKinematics(1), MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - CALL Transfer_Point_to_Point( y_MD%CoupledLoads(1), MeshMapData%u_ED_PlatformPtMesh, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, u_MD%CoupledKinematics(1), PlatformMotions ) !u_MD and y_ED contain the displacements needed for moment calculations + CALL Transfer_Point_to_Point( y_MD%CoupledLoads(1), MeshMapData%SubstructureLoads_Tmp, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, u_MD%CoupledKinematics(1), SubstructureMotion ) !u_MD and y_ED contain the displacements needed for moment calculations CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ELSEIF ( p_FAST%CompMooring == Module_FEAM ) THEN ! note: FEAM_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - CALL Transfer_Point_to_Point( y_ED2%PlatformPtMesh, u_FEAM%PtFairleadDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) + CALL Transfer_Point_to_Point( SubstructureMotion, u_FEAM%PtFairleadDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - CALL Transfer_Point_to_Point( y_FEAM%PtFairleadLoad, MeshMapData%u_ED_PlatformPtMesh, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, u_FEAM%PtFairleadDisplacement, PlatformMotions ) !u_FEAM and y_ED contain the displacements needed for moment calculations + CALL Transfer_Point_to_Point( y_FEAM%PtFairleadLoad, MeshMapData%SubstructureLoads_Tmp, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, u_FEAM%PtFairleadDisplacement, SubstructureMotion ) !u_FEAM and y_ED contain the displacements needed for moment calculations CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ELSE - MeshMapData%u_ED_PlatformPtMesh%Force = 0.0_ReKi - MeshMapData%u_ED_PlatformPtMesh%Moment = 0.0_ReKi + MeshMapData%SubstructureLoads_Tmp%Force = 0.0_ReKi + MeshMapData%SubstructureLoads_Tmp%Moment = 0.0_ReKi END IF - ! add farm-level mooring loads if applicable >>> note: not yet set up for SubDyn <<< + ! add farm-level mooring loads if applicable >>> note: these are fixed loads from the previous time step <<< IF (p_FAST%FarmIntegration) THEN - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_MDf%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_MDf%Moment + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp_Farm%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp_Farm%Moment END IF - + ! Map motions for ServodDyn Structural control (TMD) if used and forces from the TMD to the platform IF ( p_FAST%CompServo == Module_SrvD .and. p_FAST%CompSub /= Module_SD ) THEN - call Transfer_ED_to_SStC( u_SrvD, y_ED, MeshMapData, ErrStat2, ErrMsg2 ) + call Transfer_Substructure_to_SStC( u_SrvD, SubstructureMotion, MeshMapData, ErrStat2, ErrMsg2 ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName//'u_SrvD%SStC%Mesh') + ! we're mapping loads, so we also need the sibling meshes' displacements: IF ( ALLOCATED(y_SrvD%SStCLoadMesh) ) THEN ! Platform do j=1,size(y_SrvD%SStCLoadMesh) IF (y_SrvD%SStCLoadMesh(j)%Committed) THEN - CALL Transfer_Point_to_Point( y_SrvD%SStCLoadMesh(j), MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%SStC_P_P_2_ED_P(j), ErrStat2, ErrMsg2, u_SrvD%SStCMotionMesh(j), PlatformMotions ) + CALL Transfer_Point_to_Point( y_SrvD%SStCLoadMesh(j), MeshMapData%SubstructureLoads_Tmp2, MeshMapData%SStC_P_P_2_SubStructure(j), ErrStat2, ErrMsg2, u_SrvD%SStCMotionMesh(j), SubstructureMotion ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//':u_ED%PlatformPtMesh' ) - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment ENDIF enddo ENDIF @@ -2054,34 +1938,32 @@ SUBROUTINE U_ED_HD_Residual( y_ED2, y_HD2, u_IN, U_Resid) ! we use copies of the input meshes (we don't need to update values in the original data structures): -!bjj: why don't we update u_HD2 here? shouldn't we update before using it to transfer the loads? + ! Need to transfer motions first + CALL Transfer_SubStructureMotion_to_HD( SubstructureMotion2HD, MeshMapData%u_HD_W_Mesh, MeshMapData%u_HD_M_Mesh, MeshMapData, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + if ( y_HD2%WAMITMesh%Committed ) then - ! Need to transfer motions first - CALL Transfer_Point_to_Point( PlatformMotions, MeshMapData%u_HD_W_Mesh, MeshMapData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - ! we're mapping loads, so we also need the sibling meshes' displacements: - CALL Transfer_Point_to_Point( y_HD2%WAMITMesh, MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_HD_W_Mesh, PlatformMotions) !u_HD and u_mapped_positions contain the displaced positions for load calculations + CALL Transfer_Point_to_Point( y_HD2%WAMITMesh, MeshMapData%SubstructureLoads_Tmp2, MeshMapData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, MeshMapData%u_HD_W_Mesh, SubstructureMotion2HD) !u_HD_W_Mesh and SubStructureMotions contain the displaced positions for load calculations CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment - end if + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment + end if + if ( y_HD2%Morison%Mesh%Committed ) then - ! Need to transfer motions first - CALL Transfer_Point_to_Point( PlatformMotions, MeshMapData%u_HD_M_Mesh, MeshMapData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - ! we're mapping loads, so we also need the sibling meshes' displacements: - CALL Transfer_Point_to_Point( y_HD2%Morison%Mesh, MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_HD_M_Mesh, PlatformMotions) !u_HD and u_mapped_positions contain the displaced positions for load calculations + CALL Transfer_Point_to_Point( y_HD2%Morison%Mesh, MeshMapData%SubstructureLoads_Tmp2, MeshMapData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, MeshMapData%u_HD_M_Mesh, SubStructureMotion2HD) !u_HD_W_Mesh and SubStructureMotions contain the displaced positions for load calculations CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment - end if - U_Resid( 1: 3) = u_in( 1: 3) - MeshMapData%u_ED_PlatformPtMesh%Force(:,1) / p_FAST%UJacSclFact - U_Resid( 4: 6) = u_in( 4: 6) - MeshMapData%u_ED_PlatformPtMesh%Moment(:,1) / p_FAST%UJacSclFact + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment + end if + + U_Resid( 1: 3) = u_in( 1: 3) - MeshMapData%SubstructureLoads_Tmp%Force(:,1) / p_FAST%UJacSclFact + U_Resid( 4: 6) = u_in( 4: 6) - MeshMapData%SubstructureLoads_Tmp%Moment(:,1) / p_FAST%UJacSclFact + ! note that PlatformMotions is the same as SubstructureMotion and SubstructureMotion2HD in this simplified option 1 solve: U_Resid( 7: 9) = u_in( 7: 9) - PlatformMotions%TranslationAcc(:,1) U_Resid(10:12) = u_in(10:12) - PlatformMotions%RotationAcc(:,1) @@ -2105,7 +1987,7 @@ SUBROUTINE CleanUp() CALL HydroDyn_DestroyInput( u_HD_perturb, ErrStat3, ErrMsg3 ) IF (ErrStat3 /= ErrID_None) CALL WrScr(RoutineName//'/HydroDyn_DestroyInput: '//TRIM(ErrMsg3) ) CALL HydroDyn_DestroyOutput(y_HD_perturb, ErrStat3, ErrMsg3 ) - IF (ErrStat3 /= ErrID_None) CALL WrScr(RoutineName//'/HydroDyn_DestroyOutput: '//TRIM(ErrMsg3) ) + IF (ErrStat3 /= ErrID_None) CALL WrScr(RoutineName//'/HydroDyn_DestroyOutput: '//TRIM(ErrMsg3) ) END IF @@ -2172,7 +2054,7 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & TYPE(SD_OtherStateType) , INTENT(IN ) :: OtherSt_SD !< Other states TYPE(SD_ParameterType) , INTENT(IN ) :: p_SD !< Parameters TYPE(SD_InputType) , INTENT(INOUT) :: u_SD !< System inputs - TYPE(SD_OutputType) , INTENT(INOUT) :: y_SD !< System outputs + TYPE(SD_OutputType), TARGET , INTENT(INOUT) :: y_SD !< System outputs TYPE(SD_MiscVarType) , INTENT(INOUT) :: m_SD !< misc/optimization variables !ExtPtfm: @@ -2224,7 +2106,7 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & TYPE(AD_OutputType), INTENT(IN ) :: y_AD !< The outputs to AeroDyn14 TYPE(AD_InputType), INTENT(INOUT) :: u_AD !< The inputs to AeroDyn15 - TYPE(FAST_ModuleMapType) , INTENT(INOUT) :: MeshMapData !< data for mapping meshes between modules + TYPE(FAST_ModuleMapType), TARGET , INTENT(INOUT) :: MeshMapData !< data for mapping meshes between modules INTEGER(IntKi) , INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*) , INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None LOGICAL , INTENT(IN ) :: WriteThisStep !< Will we print the WriteOutput values this step? @@ -2262,7 +2144,9 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & INTEGER(IntKi) :: ErrStat2 ! temporary Error status of the operation CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary Error message if ErrStat /= ErrID_None - TYPE(MeshType), POINTER :: PlatformMotionMesh + TYPE(MeshType), POINTER :: PlatformMotionMesh_1 + TYPE(MeshType), POINTER :: SubStructureMotionMesh_1 + TYPE(MeshType), POINTER :: SubStructureMotionMesh2HD_1 #ifdef OUTPUT_ADDEDMASS REAL(ReKi) :: AddedMassMatrix(6,6) @@ -2355,7 +2239,7 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & call MeshCopy( u_BD(nb)%RootMotion, MeshMapData%u_BD_RootMotion(nb), MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) END DO - + CALL Create_FullOpt1_UVector(u, u_ED%PlatformPtMesh, u_SD%TPMesh, u_SD%LMesh, & u_HD%Morison%Mesh, u_HD%WAMITMesh, u_ED%HubPtLoad, MeshMapData%u_BD_RootMotion, u_Orca%PtfmMesh, & u_ExtPtfm%PtfmMesh, p_FAST ) @@ -2774,7 +2658,15 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & ! This is effectively doing option 2, where we set the input velocities and displacements based on the outputs we just calculated !............................................... - PlatformMotionMesh => y_ED%PlatformPtMesh + PlatformMotionMesh_1 => y_ED%PlatformPtMesh + if (p_FAST%CompSub == MODULE_SD) then + SubStructureMotionMesh_1 => y_SD%y3Mesh + SubStructureMotionMesh2HD_1 => y_SD%y2Mesh + + else + SubStructureMotionMesh_1 => y_ED%PlatformPtMesh + SubStructureMotionMesh2HD_1 => y_ED%PlatformPtMesh + end if ! BD motion inputs: (from ED) @@ -2813,26 +2705,13 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & MeshMapData%u_HD_W_Mesh%TranslationAcc = u_HD%WAMITMesh%TranslationAcc ENDIF - ! transfer the output data to inputs - - IF ( p_FAST%CompSub == Module_SD ) THEN - ! Map SD outputs to HD inputs (keeping the accelerations we just calculated) - - CALL Transfer_SD_to_HD( y_SD, u_HD%WAMITMesh, u_HD%Morison%Mesh, MeshMapData, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ! transfer the output data from ED and/or SD to inputs + CALL Transfer_Point_to_Point( PlatformMotionMesh_1, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - ! Map ED outputs to HD inputs (keeping the accelerations we just calculated): + CALL Transfer_SubStructureMotion_to_HD( SubStructureMotionMesh2HD_1, u_HD%WAMITMesh, u_HD%Morison%Mesh, MeshMapData, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - ! Transfer the ED outputs of the platform motions to the HD input of which represents the same data - CALL Transfer_Point_to_Point( PlatformMotionMesh, u_HD%PRPMesh, MeshMapData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg, RoutineName ) - - ELSE - - CALL Transfer_PlatformMotion_to_HD( PlatformMotionMesh, u_HD, MeshMapData, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - - END IF ! put the acceleration data (calucluted in this routine) back @@ -2842,8 +2721,8 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & ENDIF IF (MeshMapData%u_HD_W_Mesh%Committed) THEN - u_HD%WAMITMesh%RotationAcc = MeshMapData%u_HD_W_Mesh%RotationAcc - u_HD%WAMITMesh%TranslationAcc = MeshMapData%u_HD_W_Mesh%TranslationAcc + u_HD%WAMITMesh%RotationAcc = MeshMapData%u_HD_W_Mesh%RotationAcc + u_HD%WAMITMesh%TranslationAcc = MeshMapData%u_HD_W_Mesh%TranslationAcc ENDIF !...... @@ -2859,7 +2738,7 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & MeshMapData%u_SD_TPMesh%RotationAcc = u_SD%TPMesh%RotationAcc MeshMapData%u_SD_TPMesh%TranslationAcc = u_SD%TPMesh%TranslationAcc - CALL Transfer_Point_to_Point( PlatformMotionMesh, u_SD%TPMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( PlatformMotionMesh_1, u_SD%TPMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -2875,7 +2754,7 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & MeshMapData%u_ExtPtfm_PtfmMesh%RotationAcc = u_ExtPtfm%PtfmMesh%RotationAcc MeshMapData%u_ExtPtfm_PtfmMesh%TranslationAcc = u_ExtPtfm%PtfmMesh%TranslationAcc - CALL Transfer_Point_to_Point( PlatformMotionMesh, u_ExtPtfm%PtfmMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( PlatformMotionMesh_1, u_ExtPtfm%PtfmMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) u_ExtPtfm%PtfmMesh%RotationAcc = MeshMapData%u_ExtPtfm_PtfmMesh%RotationAcc @@ -2892,7 +2771,7 @@ SUBROUTINE FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & MeshMapData%u_Orca_PtfmMesh%RotationAcc = u_Orca%PtfmMesh%RotationAcc MeshMapData%u_Orca_PtfmMesh%TranslationAcc = u_Orca%PtfmMesh%TranslationAcc - CALL Transfer_Point_to_Point( PlatformMotionMesh, u_Orca%PtfmMesh, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) + CALL Transfer_Point_to_Point( PlatformMotionMesh_1, u_Orca%PtfmMesh, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) u_Orca%PtfmMesh%RotationAcc = MeshMapData%u_Orca_PtfmMesh%RotationAcc @@ -2911,7 +2790,7 @@ SUBROUTINE U_FullOpt1_Residual( y_ED2, y_SD2, y_HD2, y_BD2, y_Orca2, y_ExtPtfm2, !............................................................................................................................... TYPE(ED_OutputType), TARGET , INTENT(IN ) :: y_ED2 ! System outputs - TYPE(SD_OutputType) , INTENT(IN ) :: y_SD2 ! System outputs + TYPE(SD_OutputType), TARGET , INTENT(IN ) :: y_SD2 ! System outputs TYPE(HydroDyn_OutputType) , INTENT(IN ) :: y_HD2 ! System outputs TYPE(BD_OutputType) , INTENT(IN ) :: y_BD2(:) ! System outputs TYPE(Orca_OutputType) , INTENT(IN ) :: y_Orca2 ! System outputs @@ -2922,9 +2801,25 @@ SUBROUTINE U_FullOpt1_Residual( y_ED2, y_SD2, y_HD2, y_BD2, y_Orca2, y_ExtPtfm2, INTEGER(IntKi) :: i ! counter for ice leg and beamdyn loops INTEGER(IntKi) :: k ! counter for SrvD TMD instances TYPE(MeshType), POINTER :: PlatformMotions + TYPE(MeshType), POINTER :: SubstructureMotion + TYPE(MeshType), POINTER :: SubstructureMotion2HD - PlatformMotions => y_ED2%PlatformPtMesh + TYPE(MeshType), POINTER :: SD_LMesh + TYPE(MeshType), POINTER :: ED_PtfmPtMesh + + TYPE(MeshType), TARGET :: BlankMesh + PlatformMotions => y_ED2%PlatformPtMesh + + IF (p_FAST%CompSub == Module_SD) then + SubstructureMotion => y_SD2%y3Mesh + SubstructureMotion2HD => y_SD2%y2Mesh + SD_LMesh => MeshMapData%SubstructureLoads_Tmp + ELSE + SubstructureMotion => y_ED2%PlatformPtMesh + SubstructureMotion2HD => y_ED2%PlatformPtMesh + SD_LMesh => BlankMesh + END IF !.................. ! Set mooring line and ice inputs (which don't have acceleration fields and aren't used elsewhere in this routine, thus we're using the actual inputs (not a copy) @@ -2935,57 +2830,43 @@ SUBROUTINE U_FullOpt1_Residual( y_ED2, y_SD2, y_HD2, y_BD2, y_Orca2, y_ExtPtfm2, IF ( p_FAST%CompMooring == Module_MAP ) THEN ! note: MAP_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( y_SD2%y3Mesh, u_MAP%PtFairDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - else - CALL Transfer_Point_to_Point( y_ED2%PlatformPtMesh, u_MAP%PtFairDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - end if + CALL Transfer_Point_to_Point( SubstructureMotion, u_MAP%PtFairDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ELSEIF ( p_FAST%CompMooring == Module_MD ) THEN ! note: MD_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( y_SD2%y3Mesh, u_MD%CoupledKinematics(1), MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - else - CALL Transfer_Point_to_Point( y_ED2%PlatformPtMesh, u_MD%CoupledKinematics(1), MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - end if + CALL Transfer_Point_to_Point( SubstructureMotion, u_MD%CoupledKinematics(1), MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ELSEIF ( p_FAST%CompMooring == Module_FEAM ) THEN ! note: FEAM_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( y_SD2%y3Mesh, u_FEAM%PtFairleadDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - else - CALL Transfer_Point_to_Point( y_ED2%PlatformPtMesh, u_FEAM%PtFairleadDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - end if + CALL Transfer_Point_to_Point( SubstructureMotion, u_FEAM%PtFairleadDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ELSEIF ( p_FAST%CompMooring == Module_Orca ) THEN ! Map ED motion output to Orca inputs: ! note: must be called before setting ED loads inputs (so that Orca motions are known for loads [moment] mapping) - CALL Transfer_Point_to_Point( PlatformMotions, MeshMapData%u_Orca_PtfmMesh, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) + + ! NOTE THAT THIS USES **PlatformMotion** WHILE THE OTHER MOORING CODES COUPLE WITH **SubStructureMotion** + CALL Transfer_Point_to_Point( PlatformMotions, MeshMapData%u_Orca_PtfmMesh, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) END IF - IF ( p_FAST%CompIce == Module_IceF ) THEN - CALL IceFloe_InputSolve( u_IceF, y_SD2, MeshMapData, ErrStat2, ErrMsg2 ) + CALL IceFloe_InputSolve( u_IceF, SubstructureMotion, MeshMapData, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ELSEIF ( p_FAST%CompIce == Module_IceD ) THEN DO i=1,p_FAST%numIceLegs - CALL IceD_InputSolve( u_IceD(i), y_SD2, MeshMapData, i, ErrStat2, ErrMsg2 ) + CALL IceD_InputSolve( u_IceD(i), SubstructureMotion, MeshMapData, i, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) END DO @@ -2997,12 +2878,15 @@ SUBROUTINE U_FullOpt1_Residual( y_ED2, y_SD2, y_HD2, y_BD2, y_Orca2, y_ExtPtfm2, ! Set motions for the ServoDyn Structural control for platform inputs (this has accelerations, but we assume the loads generated are small) ! Note that these values get overwritten at the completion of this routine.) !.................. - IF ( p_FAST%CompServo == Module_SrvD .and. p_FAST%CompSub == Module_SD ) THEN - call Transfer_SD_to_SStC( u_SrvD, y_SD2, MeshMapData, ErrStat2, ErrMsg2 ) + IF ( p_FAST%CompServo == Module_SrvD ) THEN + call Transfer_Substructure_to_SStC( u_SrvD, SubstructureMotion, MeshMapData, ErrStat2, ErrMsg2 ) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) ENDIF + MeshMapData%u_ED_HubPtLoad%Force = 0.0_ReKi + MeshMapData%u_ED_HubPtLoad%Moment = 0.0_ReKi + IF ( p_FAST%CompElast == Module_BD .and. BD_Solve_Option1) THEN ! Transfer ED motions to BD inputs: @@ -3011,8 +2895,6 @@ SUBROUTINE U_FullOpt1_Residual( y_ED2, y_SD2, y_HD2, y_BD2, y_Orca2, y_ExtPtfm2, ! Transfer BD loads to ED hub input: ! we're mapping loads, so we also need the sibling meshes' displacements: - MeshMapData%u_ED_HubPtLoad%Force = 0.0_ReKi - MeshMapData%u_ED_HubPtLoad%Moment = 0.0_ReKi do i=1,p_FAST%nBeams CALL Transfer_Point_to_Point( y_BD2(i)%ReactionForce, MeshMapData%u_ED_HubPtLoad_2, MeshMapData%BD_P_2_ED_P(i), ErrStat2, ErrMsg2, MeshMapData%u_BD_RootMotion(i), y_ED2%HubPtMotion) !u_BD_RootMotion and y_ED2%HubPtMotion contain the displaced positions for load calculations CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -3031,98 +2913,100 @@ SUBROUTINE U_FullOpt1_Residual( y_ED2, y_SD2, y_HD2, y_BD2, y_Orca2, y_ExtPtfm2, END IF - IF ( p_FAST%CompSub == Module_SD ) THEN + MeshMapData%SubstructureLoads_Tmp%Force = 0.0_ReKi + MeshMapData%SubstructureLoads_Tmp%Moment = 0.0_ReKi - IF ( p_FAST%CompHydro == Module_HD ) THEN - - ! initialize these SD loads inputs here in case HD is used (note from initialiazation that these meshes don't exist if HD isn't used) - MeshMapData%u_SD_LMesh%Force = 0.0_ReKi - MeshMapData%u_SD_LMesh%Moment = 0.0_ReKi - + IF ( p_FAST%CompHydro == Module_HD ) THEN - !.................. - ! Get HD inputs on Morison%Mesh and WAMITMesh - !.................. + !.................. + ! Get HD inputs on Morison%Mesh and WAMITMesh + !.................. - ! SD motions to HD: - CALL Transfer_SD_to_HD( y_SD2, MeshMapData%u_HD_W_Mesh, MeshMapData%u_HD_M_Mesh, MeshMapData, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + ! SD or ED motions to HD: + CALL Transfer_SubStructureMotion_to_HD( SubstructureMotion2HD, MeshMapData%u_HD_W_Mesh, MeshMapData%u_HD_M_Mesh, MeshMapData, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - !.................. - ! Get SD loads inputs (MeshMapData%u_HD_W_Mesh and MeshMapData%u_HD_M_Mesh meshes must be set first) - !.................. + !.................. + ! Get Substructure loads inputs (MeshMapData%u_HD_W_Mesh and MeshMapData%u_HD_M_Mesh meshes must be set first) + !.................. - ! Loads (outputs) from HD meshes transfered to SD LMesh (zero them out first because they get summed in Transfer_HD_to_SD) + ! Loads (outputs) from HD meshes transfered to SD LMesh (zero them out first because they get summed in Transfer_HD_to_SD) + IF ( y_HD2%WAMITMesh%Committed ) THEN + ! we're mapping loads, so we also need the sibling meshes' displacements: + CALL Transfer_Point_to_Point( y_HD2%WAMITMesh, MeshMapData%SubstructureLoads_Tmp2, MeshMapData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, MeshMapData%u_HD_W_Mesh, SubStructureMotion2HD ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN - CALL Transfer_HD_to_SD( MeshMapData%u_SD_LMesh_2, MeshMapData%u_SD_LMesh, y_SD2%Y2Mesh, y_HD2, MeshMapData%u_HD_W_Mesh, MeshMapData%u_HD_M_Mesh, MeshMapData, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment + END IF + + IF ( y_HD2%Morison%Mesh%Committed ) THEN + ! we're mapping loads, so we also need the sibling meshes' displacements: + CALL Transfer_Point_to_Point( y_HD2%Morison%Mesh, MeshMapData%SubstructureLoads_Tmp2, MeshMapData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, MeshMapData%u_HD_M_Mesh, SubStructureMotion2HD ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment + + END IF - IF ( p_FAST%CompIce == Module_IceF ) THEN + IF ( p_FAST%CompIce == Module_IceF ) THEN - ! SD loads from IceFloe: - IF ( y_IceF%iceMesh%Committed ) THEN - ! we're mapping loads, so we also need the sibling meshes' displacements: - CALL Transfer_Point_to_Point( y_IceF%iceMesh, MeshMapData%u_SD_LMesh_2, MeshMapData%IceF_P_2_SD_P, ErrStat2, ErrMsg2, u_IceF%iceMesh, y_SD2%Y3Mesh ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + ! SD loads from IceFloe: + IF ( y_IceF%iceMesh%Committed ) THEN + ! we're mapping loads, so we also need the sibling meshes' displacements: + CALL Transfer_Point_to_Point( y_IceF%iceMesh, MeshMapData%SubstructureLoads_Tmp2, MeshMapData%IceF_P_2_SD_P, ErrStat2, ErrMsg2, u_IceF%iceMesh, SubStructureMotion ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - MeshMapData%u_SD_LMesh%Force = MeshMapData%u_SD_LMesh%Force + MeshMapData%u_SD_LMesh_2%Force - MeshMapData%u_SD_LMesh%Moment = MeshMapData%u_SD_LMesh%Moment + MeshMapData%u_SD_LMesh_2%Moment + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment -!... -#ifdef DEBUG_MESH_TRANSFER_ICE - if (.not. calcJacobian) then - CALL WrScr('********************************************************') - CALL WrScr('**** IceF to SD point-to-point *****') - CALL WrScr('********************************************************') - CALL WriteMappingTransferToFile(MeshMapData%u_SD_LMesh_2, y_SD2%Y3Mesh, u_IceF%iceMesh, y_IceF%iceMesh,& - MeshMapData%SDy3_P_2_IceF_P, MeshMapData%IceF_P_2_SD_P, & - 'SD_y2_IceF_Meshes_t'//TRIM(Num2LStr(this_time))//'.I.bin' ) - !print * - !pause - end IF -#endif - END IF !Module_IceF + END IF !Module_IceF - ELSEIF ( p_FAST%CompIce == Module_IceD ) THEN + ELSEIF ( p_FAST%CompIce == Module_IceD ) THEN - ! SD loads from IceDyn: - DO i=1,p_FAST%numIceLegs + ! SD loads from IceDyn: + DO i=1,p_FAST%numIceLegs - IF ( y_IceD(i)%PointMesh%Committed ) THEN - ! we're mapping loads, so we also need the sibling meshes' displacements: - CALL Transfer_Point_to_Point( y_IceD(i)%PointMesh, MeshMapData%u_SD_LMesh_2, MeshMapData%IceD_P_2_SD_P(i), ErrStat2, ErrMsg2, u_IceD(i)%PointMesh, y_SD2%Y3Mesh ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF ( y_IceD(i)%PointMesh%Committed ) THEN + ! we're mapping loads, so we also need the sibling meshes' displacements: + CALL Transfer_Point_to_Point( y_IceD(i)%PointMesh, MeshMapData%SubstructureLoads_Tmp2, MeshMapData%IceD_P_2_SD_P(i), ErrStat2, ErrMsg2, u_IceD(i)%PointMesh, SubStructureMotion ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - MeshMapData%u_SD_LMesh%Force = MeshMapData%u_SD_LMesh%Force + MeshMapData%u_SD_LMesh_2%Force - MeshMapData%u_SD_LMesh%Moment = MeshMapData%u_SD_LMesh%Moment + MeshMapData%u_SD_LMesh_2%Moment + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment - END IF + END IF - END DO + END DO - END IF ! Ice loading + END IF ! Ice loading - END IF ! HD is used (IceFloe/IceDyn can't be used unless HydroDyn is used) + END IF ! HD is used (IceFloe/IceDyn can't be used unless HydroDyn is used) + !.................. - ! Get SD loads inputs from ServoDyn Structural control + ! Get Substructure (SD or ED) loads inputs from ServoDyn Structural control !.................. + IF ( p_FAST%CompServo == Module_SrvD .and. allocated(y_SrvD%SStCLoadMesh) ) THEN + do k=1,size(y_SrvD%SStCLoadMesh) + IF (y_SrvD%SStCLoadMesh(k)%Committed) THEN ! size 1 only for SStC + CALL Transfer_Point_to_Point( y_SrvD%SStCLoadMesh(k), MeshMapData%SubstructureLoads_Tmp2, MeshMapData%SStC_P_P_2_SubStructure(k), ErrStat2, ErrMsg2, u_SrvD%SStCMotionMesh(k), SubStructureMotion ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName ) + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment + ENDIF + enddo + ENDIF - IF ( p_FAST%CompServo == Module_SrvD .and. allocated(y_SrvD%SStCLoadMesh) ) THEN - do k=1,size(y_SrvD%SStCLoadMesh) - IF (y_SrvD%SStCLoadMesh(k)%Committed) THEN ! size 1 only for SStC - CALL Transfer_Point_to_Point( y_SrvD%SStCLoadMesh(k), MeshMapData%u_SD_LMesh_2, MeshMapData%SStC_P_P_2_SD_P(k), ErrStat2, ErrMsg2, u_SrvD%SStCMotionMesh(k), y_SD2%Y3Mesh ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName ) - MeshMapData%u_SD_LMesh%Force = MeshMapData%u_SD_LMesh%Force + MeshMapData%u_SD_LMesh_2%Force - MeshMapData%u_SD_LMesh%Moment = MeshMapData%u_SD_LMesh%Moment + MeshMapData%u_SD_LMesh_2%Moment - ENDIF - enddo - ENDIF + IF ( p_FAST%CompSub == Module_SD ) THEN !.................. ! Get SD motions input @@ -3133,12 +3017,12 @@ SUBROUTINE U_FullOpt1_Residual( y_ED2, y_SD2, y_HD2, y_BD2, y_Orca2, y_ExtPtfm2, CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) !.................. - ! Get ED loads input (from SD and possibly HD) + ! Get ED platform loads input !.................. ! Loads (outputs) on the SD transition piece transfered to ED input location/mesh: ! we're mapping loads, so we also need the sibling meshes' displacements: - CALL Transfer_Point_to_Point( y_SD2%Y1Mesh, MeshMapData%u_ED_PlatformPtMesh, MeshMapData%SD_TP_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_SD_TPMesh, PlatformMotions ) !MeshMapData%u_SD_TPMesh contains the orientations needed for moment calculations + CALL Transfer_Point_to_Point( y_SD2%Y1Mesh, MeshMapData%PlatformLoads_Tmp, MeshMapData%SD_TP_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_SD_TPMesh, PlatformMotions ) !MeshMapData%u_SD_TPMesh contains the orientations needed for moment calculations CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -3153,156 +3037,86 @@ SUBROUTINE U_FullOpt1_Residual( y_ED2, y_SD2, y_HD2, y_BD2, y_Orca2, y_ExtPtfm2, CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) !.................. - ! Get ED loads input (from SD and possibly HD) + ! Get ED platform loads input !.................. ! Loads (outputs) on the ExtPtfm platform mesh transfered to ED input location/mesh: ! we're mapping loads, so we also need the sibling meshes' displacements: - CALL Transfer_Point_to_Point( y_ExtPtfm2%PtfmMesh, MeshMapData%u_ED_PlatformPtMesh, MeshMapData%SD_TP_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_ExtPtfm_PtfmMesh, PlatformMotions ) + CALL Transfer_Point_to_Point( y_ExtPtfm2%PtfmMesh, MeshMapData%PlatformLoads_Tmp, MeshMapData%SD_TP_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_ExtPtfm_PtfmMesh, PlatformMotions ) CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - ELSE IF ( p_FAST%CompHydro == Module_HD ) THEN - - ! Rigid Substructure case - - !.................. - ! Get HD inputs on 3 meshes - !.................. - - ! Map ED motion outputs to HD inputs: - ! basically, we want to call Transfer_PlatformMotion_to_HD, except we have the meshes in a different data structure (not a copy of u_HD) - ! CALL Transfer_PlatformMotion_to_HD( y_ED2%PlatformPtMesh, u_HD, MeshMapData, ErrStat2, ErrMsg2 ) - ! so, here are the transfers, again. - - ! Motions from ED to HD for mesh mapping - - ! These are the motions for the lumped point loads associated the WAMIT body: - if (MeshMapData%u_HD_W_Mesh%Committed) then - CALL Transfer_Point_to_Point( PlatformMotions, MeshMapData%u_HD_W_Mesh, MeshMapData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - endif - - ! These are the motions for the lumped point loads associated viscous drag on the WAMIT body and/or filled/flooded lumped forces of the WAMIT body - if (MeshMapData%u_HD_M_Mesh%Committed) then - CALL Transfer_Point_to_Point( PlatformMotions, MeshMapData%u_HD_M_Mesh, MeshMapData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - endif - - - - !.................. - ! Get ED loads input (from HD only) - !.................. - MeshMapData%u_ED_PlatformPtMesh%Force = 0.0_ReKi - MeshMapData%u_ED_PlatformPtMesh%Moment = 0.0_ReKi - - ! we're mapping loads, so we also need the sibling meshes' displacements: - if ( y_HD2%WAMITMesh%Committed) then - CALL Transfer_Point_to_Point( y_HD2%WAMITMesh, MeshMapData%u_ED_PlatformPtMesh, MeshMapData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_HD_W_Mesh, PlatformMotions) !u_HD and u_mapped_positions contain the displaced positions for load calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - end if - - if ( y_HD2%Morison%Mesh%Committed ) then - CALL Transfer_Point_to_Point( y_HD2%Morison%Mesh, MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_HD_M_Mesh, PlatformMotions ) !u_MAP and y_ED contain the displacements needed for moment calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment - end if - ELSE - - ! When using OrcaFlex, we need to zero this out - MeshMapData%u_ED_PlatformPtMesh%Force = 0.0_ReKi - MeshMapData%u_ED_PlatformPtMesh%Moment = 0.0_ReKi + + MeshMapData%PlatformLoads_Tmp%Force = 0.0_ReKi + MeshMapData%PlatformLoads_Tmp%Moment = 0.0_ReKi END IF + !.................. - ! Get remaining portion of ED loads input on MeshMapData%u_ED_PlatformPtMesh (must do this after MeshMapData%u_SD_TPMesh and MeshMapData%u_HD_W_Mesh are set) - ! at this point, MeshMapData%u_ED_PlatformPtMesh contains the portion of loads from SD and/or HD + ! Get remaining portion of substructure (ED or SD) loads input on MeshMapData%SubstructureLoads_Tmp (must do this after all input motion meshes are set) + ! at this point, MeshMapData%PlatformLoads_Tmp contains the portion of loads from SD and/or HD !.................. ! Get the loads for ED/SD from a mooring module and add them: IF ( p_FAST%CompMooring == Module_MAP ) THEN - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( y_MAP%PtFairleadLoad, MeshMapData%u_SD_LMesh_2, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, u_MAP%PtFairDisplacement, y_SD2%Y3Mesh ) !u_MAP and y_SD contain the displacements needed for moment calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - - MeshMapData%u_SD_LMesh%Force = MeshMapData%u_SD_LMesh%Force + MeshMapData%u_SD_LMesh_2%Force - MeshMapData%u_SD_LMesh%Moment = MeshMapData%u_SD_LMesh%Moment + MeshMapData%u_SD_LMesh_2%Moment - else - CALL Transfer_Point_to_Point( y_MAP%PtFairleadLoad, MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, u_MAP%PtFairDisplacement, PlatformMotions ) !u_MAP and y_ED contain the displacements needed for moment calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Transfer_Point_to_Point( y_MAP%PtFairleadLoad, MeshMapData%SubstructureLoads_Tmp2, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, u_MAP%PtFairDisplacement, SubStructureMotion ) !u_MAP and y_SD contain the displacements needed for moment calculations + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment - end if + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment ELSEIF ( p_FAST%CompMooring == Module_MD ) THEN - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( y_MD%CoupledLoads(1), MeshMapData%u_SD_LMesh_2, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, u_MD%CoupledKinematics(1), y_SD2%Y3Mesh ) !u_MD and y_SD contain the displacements needed for moment calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - - MeshMapData%u_SD_LMesh%Force = MeshMapData%u_SD_LMesh%Force + MeshMapData%u_SD_LMesh_2%Force - MeshMapData%u_SD_LMesh%Moment = MeshMapData%u_SD_LMesh%Moment + MeshMapData%u_SD_LMesh_2%Moment - else - CALL Transfer_Point_to_Point( y_MD%CoupledLoads(1), MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, u_MD%CoupledKinematics(1), PlatformMotions ) !u_MD and y_ED contain the displacements needed for moment calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Transfer_Point_to_Point( y_MD%CoupledLoads(1), MeshMapData%SubstructureLoads_Tmp2, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, u_MD%CoupledKinematics(1), SubStructureMotion ) !u_MD and y_SD contain the displacements needed for moment calculations + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment - end if - + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment + ELSEIF ( p_FAST%CompMooring == Module_FEAM ) THEN - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( y_FEAM%PtFairleadLoad, MeshMapData%u_SD_LMesh_2, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, u_FEAM%PtFairleadDisplacement, y_SD2%Y3Mesh ) !u_FEAM and y_SD contain the displacements needed for moment calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Transfer_Point_to_Point( y_FEAM%PtFairleadLoad, MeshMapData%SubstructureLoads_Tmp2, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, u_FEAM%PtFairleadDisplacement, SubStructureMotion ) !u_FEAM and y_SD contain the displacements needed for moment calculations + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - MeshMapData%u_SD_LMesh%Force = MeshMapData%u_SD_LMesh%Force + MeshMapData%u_SD_LMesh_2%Force - MeshMapData%u_SD_LMesh%Moment = MeshMapData%u_SD_LMesh%Moment + MeshMapData%u_SD_LMesh_2%Moment - else - CALL Transfer_Point_to_Point( y_FEAM%PtFairleadLoad, MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, u_FEAM%PtFairleadDisplacement, PlatformMotions ) !u_FEAM and y_ED contain the displacements needed for moment calculations - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment - end if + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp2%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp2%Moment ELSEIF ( p_FAST%CompMooring == Module_Orca ) THEN - CALL Transfer_Point_to_Point( y_Orca2%PtfmMesh, MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, MeshMapData%u_Orca_PtfmMesh, PlatformMotions ) !u_Orca_PtfmMesh and y_ED contain the displacements needed for moment calculations + !NOTE: ORCAFLEX INTERFACE COUPLES WITH **PlatformMotions** AND NOT **SubStructureMotion** LIKE THE OTHER MOORING MODULES DO + + ! BECAUSE ORCAFLEX INTERFACE CANNOT BE USED WITH SUBDYN, THE SUBSTRUCTURELOADS DATA STRUCTURES POINT TO ELASTODYN (MORE LIKE PLATFORM MESH) + CALL Transfer_Point_to_Point( y_Orca2%PtfmMesh, MeshMapData%PlatformLoads_Tmp2, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2, MeshMapData%u_Orca_PtfmMesh, PlatformMotions ) !u_Orca_PtfmMesh and y_ED contain the displacements needed for moment calculations CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment + MeshMapData%PlatformLoads_Tmp%Force = MeshMapData%PlatformLoads_Tmp%Force + MeshMapData%PlatformLoads_Tmp2%Force + MeshMapData%PlatformLoads_Tmp%Moment = MeshMapData%PlatformLoads_Tmp%Moment + MeshMapData%PlatformLoads_Tmp2%Moment END IF ! add farm-level mooring loads if applicable IF (p_FAST%FarmIntegration) THEN - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_MDf%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_MDf%Moment + MeshMapData%SubstructureLoads_Tmp%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%SubstructureLoads_Tmp_Farm%Force + MeshMapData%SubstructureLoads_Tmp%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%SubstructureLoads_Tmp_Farm%Moment END IF - ! Map the forces from the platform mounted TMD (from ServoDyn) to the platform reference point - IF ( p_FAST%CompServo == Module_SrvD .and. p_FAST%CompSub /= Module_SD .and. allocated(y_SrvD%SStCLoadMesh)) THEN - do k=1,size(y_SrvD%SStCLoadMesh) - IF (y_SrvD%SStCLoadMesh(k)%Committed) THEN ! size 1 only for SStC - CALL Transfer_Point_to_Point( y_SrvD%SStCLoadMesh(k), MeshMapData%u_ED_PlatformPtMesh_2, MeshMapData%SStC_P_P_2_ED_P(k), ErrStat2, ErrMsg2, u_SrvD%SStCMotionMesh(k), PlatformMotions ) - CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat, ErrMsg,RoutineName//':u_ED%PlatformPtMesh' ) - MeshMapData%u_ED_PlatformPtMesh%Force = MeshMapData%u_ED_PlatformPtMesh%Force + MeshMapData%u_ED_PlatformPtMesh_2%Force - MeshMapData%u_ED_PlatformPtMesh%Moment = MeshMapData%u_ED_PlatformPtMesh%Moment + MeshMapData%u_ED_PlatformPtMesh_2%Moment - ENDIF - enddo - ENDIF - !.................. ! Calculate the residual with these new inputs: !.................. - - CALL Create_FullOpt1_UVector(U_Resid, MeshMapData%u_ED_PlatformPtMesh, MeshMapData%u_SD_TPMesh, MeshMapData%u_SD_LMesh, & + ! Make sure that the substructure loads get mapped with the platform loads when SD is not used: + IF (p_FAST%CompSub /= MODULE_SD) THEN + ! In this case, the substructure and platform are the same mesh: + ED_PtfmPtMesh => MeshMapData%PlatformLoads_Tmp + SD_LMesh => BlankMesh + + ED_PtfmPtMesh%Force = MeshMapData%SubstructureLoads_Tmp%Force + MeshMapData%PlatformLoads_Tmp%Force + ED_PtfmPtMesh%Moment = MeshMapData%SubstructureLoads_Tmp%Moment + MeshMapData%PlatformLoads_Tmp%Moment + ELSE + ED_PtfmPtMesh => MeshMapData%PlatformLoads_Tmp + SD_LMesh => MeshMapData%SubstructureLoads_Tmp + ENDIF + + CALL Create_FullOpt1_UVector(U_Resid, ED_PtfmPtMesh, MeshMapData%u_SD_TPMesh, SD_LMesh, & MeshMapData%u_HD_M_Mesh, MeshMapData%u_HD_W_Mesh, & MeshMapData%u_ED_HubPtLoad, MeshMapData%u_BD_RootMotion, MeshMapData%u_Orca_PtfmMesh, & MeshMapData%u_ExtPtfm_PtfmMesh, p_FAST ) @@ -4267,7 +4081,7 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M TYPE(AeroDyn_Data), INTENT(INOUT) :: AD !< AeroDyn data TYPE(AeroDyn14_Data), INTENT(INOUT) :: AD14 !< AeroDyn14 data TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data - TYPE(SubDyn_Data), INTENT(INOUT) :: SD !< SubDyn data + TYPE(SubDyn_Data), TARGET, INTENT(INOUT) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm data TYPE(MAP_Data), INTENT(INOUT) :: MAPp !< MAP data TYPE(FEAMooring_Data), INTENT(INOUT) :: FEAM !< FEAMooring data @@ -4292,15 +4106,61 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M TYPE(MeshType), POINTER :: PlatformMotion TYPE(MeshType), POINTER :: PlatformLoads + + TYPE(MeshType), POINTER :: SubstructureMotion2HD + TYPE(MeshType), POINTER :: SubstructureMotion + TYPE(MeshType), POINTER :: SubstructureLoads !............................................................................................................................ ErrStat = ErrID_None ErrMsg = "" - NumBl = SIZE(ED%y%BladeRootMotion,1) - PlatformMotion => ED%y%PlatformPtMesh - PlatformLoads => ED%Input(1)%PlatformPtMesh + IF (p_FAST%CompElast == Module_BD) THEN + NumBl = p_FAST%nBeams ! BeamDyn might set this to 1 blade for aeromaps (instead of SIZE(ED%y%BladeRootMotion,1)) + ELSE + NumBl = SIZE(ED%y%BladeRootMotion,1) + END IF + PlatformMotion => ED%y%PlatformPtMesh + PlatformLoads => ED%Input(1)%PlatformPtMesh + + IF (p_FAST%CompSub == MODULE_SD) THEN + SubstructureMotion2HD => SD%y%y2Mesh + SubstructureMotion => SD%y%y3Mesh + SubstructureLoads => SD%Input(1)%LMesh + ELSE ! all of these get mapped to ElastoDyn ! (offshore floating with rigid substructure) + SubstructureMotion2HD => ED%y%PlatformPtMesh + SubstructureMotion => ED%y%PlatformPtMesh + SubstructureLoads => ED%Input(1)%PlatformPtMesh + END IF + + !............................................................................................................................ + ! Determine solver options: + !............................................................................................................................ + IF (p_FAST%CompElast == Module_BD .and. BD_Solve_Option1) THEN + + p_FAST%SolveOption = Solve_FullOpt1 + + ELSEIF (p_FAST%CompMooring == Module_Orca .or. & + p_FAST%CompSub /= Module_None ) THEN + + p_FAST%SolveOption = Solve_FullOpt1 + + ELSEIF ( p_FAST%CompHydro == Module_HD ) THEN + + IF (p_FAST%CompElast == Module_ED) THEN + p_FAST%SolveOption = Solve_SimplifiedOpt1 + ELSE + p_FAST%SolveOption = Solve_FullOpt1 + END IF + + ELSE + + p_FAST%SolveOption = Solve_FullOpt2 + + END IF + + !............................................................................................................................ ! Create the data structures and mappings in MeshMapType !............................................................................................................................ @@ -4438,7 +4298,7 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M ENDIF !------------------------- -! ServoDyn <-> Platform +! ServoDyn <-> Platform and Substructure !------------------------- ! ServoDyn platform point mesh from ElastoDyn platform point mesh -- Motions passed to DLL IF ( SrvD%Input(1)%PtfmMotionMesh%Committed ) THEN @@ -4446,44 +4306,25 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':ED_P_2_SrvD_P_P' ) ENDIF - IF ( ALLOCATED(SrvD%Input(1)%SStCMotionMesh) ) THEN - IF ( p_FAST%CompSub /= Module_SD ) THEN ! all of these get mapped to ElastoDyn ! (offshore floating with rigid substructure) - j=size(SrvD%Input(1)%SStCMotionMesh) - ALLOCATE( MeshMapData%SStC_P_P_2_ED_P(j), MeshMapData%ED_P_2_SStC_P_P(j), STAT=ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating MeshMapData%SStC_P_P_2_ED_P and MeshMapData%ED_P_2_SStC_P_P.', & - ErrStat, ErrMsg, RoutineName ) - RETURN - END IF - do j=1,size(SrvD%Input(1)%SStCMotionMesh) - IF ( SrvD%Input(1)%SStCMotionMesh(j)%Committed ) THEN ! Single point per SStC instance - ! ServoDyn SStC point mesh to/from ElastoDyn point mesh - CALL MeshMapCreate( PlatformMotion, SrvD%Input(1)%SStCMotionMesh(j), MeshMapData%ED_P_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':ED_P_2_SStC_P_P' ) - CALL MeshMapCreate( SrvD%y%SStCLoadMesh(j), PlatformLoads, MeshMapData%SStC_P_P_2_ED_P(j), ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SStC_P_P_2_ED_P' ) - ENDIF - enddo - ELSE ! SubDyn is used - j=size(SrvD%Input(1)%SStCMotionMesh) - ALLOCATE( MeshMapData%SStC_P_P_2_SD_P(j), MeshMapData%SDy3_P_2_SStC_P_P(j), STAT=ErrStat2 ) - IF ( ErrStat2 /= 0 ) THEN - CALL SetErrStat( ErrID_Fatal, 'Error allocating MeshMapData%SStC_P_P_2_SD_P and MeshMapData%SDy3_P_2_SStC_P_P.', & - ErrStat, ErrMsg, RoutineName ) - RETURN - END IF - do j=1,size(SrvD%Input(1)%SStCMotionMesh) - IF ( SrvD%Input(1)%SStCMotionMesh(j)%Committed ) THEN ! Single point per SStC instance - ! ServoDyn SStC point mesh to/from SubDyn point mesh - CALL MeshMapCreate( SrvD%y%SStCLoadMesh(j), SD%Input(1)%LMesh, MeshMapData%SStC_P_P_2_SD_P(j), ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SStC_P_P_2_SD_P' ) - CALL MeshMapCreate( SD%y%y3Mesh, SrvD%Input(1)%SStCMotionMesh(j), MeshMapData%SDy3_P_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SDy3_P_2_SStC_P_P' ) - ENDIF - enddo - ENDIF + j=size(SrvD%Input(1)%SStCMotionMesh) + ALLOCATE( MeshMapData%SStC_P_P_2_SubStructure(j), MeshMapData%SubStructure_2_SStC_P_P(j), STAT=ErrStat2 ) + IF ( ErrStat2 /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating MeshMapData%SStC_P_P_2_SubStructure and MeshMapData%SubStructure_2_SStC_P_P.', & + ErrStat, ErrMsg, RoutineName ) + RETURN + END IF + do j=1,size(SrvD%Input(1)%SStCMotionMesh) + IF ( SrvD%Input(1)%SStCMotionMesh(j)%Committed ) THEN ! Single point per SStC instance + ! ServoDyn SStC point mesh to/from SubDyn/ElastoDyn point mesh + CALL MeshMapCreate( SubStructureMotion, SrvD%Input(1)%SStCMotionMesh(j), MeshMapData%SubStructure_2_SStC_P_P(j), ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SubStructure_2_SStC_P_P' ) + CALL MeshMapCreate( SrvD%y%SStCLoadMesh(j), SubStructureLoads, MeshMapData%SStC_P_P_2_SubStructure(j), ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SStC_P_P_2_SubStructure' ) + ENDIF + enddo ENDIF + ENDIF @@ -4494,20 +4335,6 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M IF ( p_FAST%CompAero == Module_AD14 ) THEN ! ED-AD14 - ! Blade meshes: (allocate two mapping data structures to number of blades, then allocate data inside the structures) - ! AD14 does not properly set up its blade meshes, so we can't use this - !ALLOCATE( MeshMapData%BDED_L_2_AD_L_B(NumBl), MeshMapData%AD_L_2_BDED_B(NumBl), STAT=ErrStat2 ) - ! IF ( ErrStat2 /= 0 ) THEN - ! CALL SetErrStat( ErrID_Fatal, 'Error allocating MeshMapData%BDED_L_2_AD_L_B and MeshMapData%AD_L_2_BDED_B.', & - ! ErrStat, ErrMsg, RoutineName ) - ! RETURN - ! END IF - ! - !DO K=1,NumBl - ! CALL MeshMapCreate( AD14%y%OutputLoads(K), ED%Input(1)%BladePtLoads(K), MeshMapData%AD_L_2_BDED_B(K), ErrStat2, ErrMsg2 ) - ! CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':AD_L_2_BDED_B('//TRIM(Num2LStr(K))//')' ) - !END DO - ! Tower mesh: IF ( AD14%Input(1)%Twr_InputMarkers%Committed ) THEN CALL MeshMapCreate( ED%y%TowerLn2Mesh, AD14%Input(1)%Twr_InputMarkers, MeshMapData%ED_L_2_AD_L_T, ErrStat2, ErrMsg2 ) @@ -4668,54 +4495,25 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':ED_P_2_HD_PRP_P' ) !------------------------- -! HydroDyn <-> ElastoDyn +! HydroDyn <-> ElastoDyn or SubDyn !------------------------- - IF ( p_FAST%CompSub /= Module_SD ) THEN ! all of these get mapped to ElastoDyn ! (offshore floating with rigid substructure) - - IF ( HD%y%WAMITMesh%Committed ) THEN ! meshes for floating - ! HydroDyn WAMIT point mesh to/from ElastoDyn point mesh - CALL MeshMapCreate( HD%y%WAMITMesh, PlatformLoads, MeshMapData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':HD_W_P_2_ED_P' ) - CALL MeshMapCreate( PlatformMotion, HD%Input(1)%WAMITMesh, MeshMapData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':ED_P_2_HD_W_P' ) - END IF - - ! ElastoDyn point mesh HydroDyn Morison point mesh (ED sets inputs, but gets outputs from HD%y%WAMITMesh in floating case) - IF ( HD%Input(1)%Morison%Mesh%Committed ) THEN - CALL MeshMapCreate( HD%y%Morison%Mesh, PlatformLoads, MeshMapData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':HD_M_P_2_ED_P' ) - CALL MeshMapCreate( PlatformMotion, HD%Input(1)%Morison%Mesh, MeshMapData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':ED_P_2_HD_M_P' ) - END IF - - ELSE ! these get mapped to ElastoDyn AND SubDyn (in ED_SD_HD coupling) ! offshore with substructure flexibility - - - -!------------------------- -! HydroDyn <-> SubDyn -!------------------------- - - ! HydroDyn Morison point mesh to SubDyn point mesh - IF ( HD%y%Morison%Mesh%Committed ) THEN - - CALL MeshMapCreate( HD%y%Morison%Mesh, SD%Input(1)%LMesh, MeshMapData%HD_M_P_2_SD_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':HD_M_P_2_SD_P' ) - CALL MeshMapCreate( SD%y%y2Mesh, HD%Input(1)%Morison%Mesh, MeshMapData%SD_P_2_HD_M_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SD_P_2_HD_M_P' ) - END IF - - ! HydroDyn WAMIT point mesh to SD point mesh - IF ( HD%y%WAMITMesh%Committed ) THEN - - CALL MeshMapCreate( HD%y%WAMITMesh, SD%Input(1)%LMesh, MeshMapData%HD_W_P_2_SD_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':HD_W_P_2_SD_P' ) - CALL MeshMapCreate( SD%y%y2Mesh, HD%Input(1)%WAMITMesh, MeshMapData%SD_P_2_HD_W_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SD_P_2_HD_W_P' ) - - END IF - - END IF ! HydroDyn-SubDyn + ! NOTE: HD-SD couple with y2 mesh NOT y3! + + IF ( HD%y%WAMITMesh%Committed ) THEN ! meshes for floating + ! HydroDyn WAMIT point mesh to/from ElastoDyn or SD point mesh + CALL MeshMapCreate( HD%y%WAMITMesh, SubstructureLoads, MeshMapData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':HD_W_P_2_SubStructure' ) + CALL MeshMapCreate( SubstructureMotion2HD, HD%Input(1)%WAMITMesh, MeshMapData%SubStructure_2_HD_W_P, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SubStructure_2_HD_W_P' ) + END IF + + ! ElastoDyn or SD point mesh to HydroDyn Morison point mesh (ED sets inputs, but gets outputs from HD%y%WAMITMesh in floating case) + IF ( HD%Input(1)%Morison%Mesh%Committed ) THEN + CALL MeshMapCreate( HD%y%Morison%Mesh, SubstructureLoads, MeshMapData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':HD_M_P_2_SubStructure' ) + CALL MeshMapCreate( SubstructureMotion2HD, HD%Input(1)%Morison%Mesh, MeshMapData%SubStructure_2_HD_M_P, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SubStructure_2_HD_M_P' ) + END IF IF (ErrStat >= AbortErrLev ) RETURN @@ -4748,86 +4546,53 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M CALL MeshMapCreate( PlatformMotion, ExtPtfm%Input(1)%PtfmMesh, MeshMapData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Ptfm_2_SD_TP' ) - END IF ! SubDyn-ElastoDyn + END IF ! SubDyn,ExtPtfm - ElastoDyn IF ( p_FAST%CompMooring == Module_MAP ) THEN - - IF ( p_FAST%CompSub == Module_SD ) THEN !------------------------- -! SubDyn <-> MAP -!------------------------- - ! MAP point mesh to/from SubDyn point mesh - CALL MeshMapCreate( MAPp%y%PtFairleadLoad, SD%Input(1)%LMesh, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_P_2_SD_P' ) - CALL MeshMapCreate( SD%y%y3Mesh, MAPp%Input(1)%PtFairDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SDy3_P_2_Mooring_P' ) - ELSE +! SubDyn/ElastoDyn <-> MAP !------------------------- -! ElastoDyn <-> MAP -!------------------------- - ! MAP point mesh to/from ElastoDyn point mesh - CALL MeshMapCreate( MAPp%y%PtFairleadLoad, PlatformLoads, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_P_2_Ptfm' ) - CALL MeshMapCreate( PlatformMotion, MAPp%Input(1)%PtFairDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Ptfm_2_Mooring_P' ) - END IF ! p_FAST%CompSub == Module_SD - + ! MAP point mesh to/from SubDyn or ElastoDyn point mesh + CALL MeshMapCreate( MAPp%y%PtFairleadLoad, SubstructureLoads, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_2_Structure' ) + CALL MeshMapCreate( SubstructureMotion, MAPp%Input(1)%PtFairDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Structure_2_Mooring' ) + ELSEIF ( p_FAST%CompMooring == Module_MD ) THEN - IF ( p_FAST%CompSub == Module_SD ) THEN !------------------------- -! SubDyn <-> MoorDyn -!------------------------- - ! MoorDyn point mesh to/from SubDyn point mesh - CALL MeshMapCreate( MD%y%CoupledLoads(1), SD%Input(1)%LMesh, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_P_2_SD_P' ) - CALL MeshMapCreate( SD%y%y3Mesh, MD%Input(1)%CoupledKinematics(1), MeshMapData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SDy3_P_2_Mooring_P' ) - ELSE +! SubDyn/ElastoDyn <-> MoorDyn !------------------------- -! ElastoDyn <-> MoorDyn -!------------------------- - ! MoorDyn point mesh to/from ElastoDyn point mesh - CALL MeshMapCreate( MD%y%CoupledLoads(1), PlatformLoads, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_P_2_Ptfm' ) - CALL MeshMapCreate( PlatformMotion, MD%Input(1)%CoupledKinematics(1), MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Ptfm_2_Mooring_P' ) - END IF ! p_FAST%CompSub == Module_SD + ! MoorDyn point mesh to/from SubDyn or ElastoDyn point mesh + CALL MeshMapCreate( MD%y%CoupledLoads(1), SubstructureLoads, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_2_Structure' ) + CALL MeshMapCreate( SubstructureMotion, MD%Input(1)%CoupledKinematics(1), MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Structure_2_Mooring' ) ELSEIF ( p_FAST%CompMooring == Module_FEAM ) THEN - IF ( p_FAST%CompSub == Module_SD ) THEN !------------------------- -! SubDyn <-> FEAMooring -!------------------------- - ! FEAMooring point mesh to/from SubDyn point mesh - CALL MeshMapCreate( FEAM%y%PtFairleadLoad, SD%Input(1)%LMesh, MeshMapData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_P_2_SD_P' ) - CALL MeshMapCreate( SD%y%y3Mesh, FEAM%Input(1)%PtFairleadDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SDy3_P_2_Mooring_P' ) - ELSE +! SubDyn/ElastoDyn <-> FEAMooring !------------------------- -! ElastoDyn <-> FEAMooring -!------------------------- - ! FEAMooring point mesh to/from ElastoDyn point mesh - CALL MeshMapCreate( FEAM%y%PtFairleadLoad, PlatformLoads, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_P_2_Ptfm' ) - CALL MeshMapCreate( PlatformMotion, FEAM%Input(1)%PtFairleadDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Ptfm_2_Mooring_P' ) - END IF ! p_FAST%CompSub == Module_SD + ! FEAMooring point mesh to/from SubDyn or ElastoDyn point mesh + CALL MeshMapCreate( FEAM%y%PtFairleadLoad, SubstructureLoads, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_2_Structure' ) + CALL MeshMapCreate( SubstructureMotion, FEAM%Input(1)%PtFairleadDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Structure_2_Mooring' ) + ELSEIF ( p_FAST%CompMooring == Module_Orca ) THEN !------------------------- ! ElastoDyn <-> OrcaFlex -!------------------------- +!------------------------- ! OrcaFlex point mesh to/from ElastoDyn point mesh - CALL MeshMapCreate( Orca%y%PtfmMesh, PlatformLoads, MeshMapData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2 ) + CALL MeshMapCreate( Orca%y%PtfmMesh, PlatformLoads, MeshMapData%Mooring_2_Structure, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Mooring_P_2_Ptfm' ) - CALL MeshMapCreate( PlatformMotion, Orca%Input(1)%PtfmMesh, MeshMapData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) + CALL MeshMapCreate( PlatformMotion, Orca%Input(1)%PtfmMesh, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':Ptfm_2_Mooring_P' ) - END IF ! MAP-ElastoDyn ; FEAM-ElastoDyn; Orca-ElastoDyn + END IF ! Mooring to substructure !------------------------- @@ -4837,10 +4602,10 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M IF ( p_FAST%CompIce == Module_IceF ) THEN ! IceFloe iceMesh point mesh to SubDyn LMesh point mesh - CALL MeshMapCreate( IceF%y%iceMesh, SD%Input(1)%LMesh, MeshMapData%IceF_P_2_SD_P, ErrStat2, ErrMsg2 ) + CALL MeshMapCreate( IceF%y%iceMesh, SubstructureLoads, MeshMapData%IceF_P_2_SD_P, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':IceF_P_2_SD_P' ) ! SubDyn y3Mesh point mesh to IceFloe iceMesh point mesh - CALL MeshMapCreate( SD%y%y3Mesh, IceF%Input(1)%iceMesh, MeshMapData%SDy3_P_2_IceF_P, ErrStat2, ErrMsg2 ) + CALL MeshMapCreate( SubstructureMotion, IceF%Input(1)%iceMesh, MeshMapData%SDy3_P_2_IceF_P, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SDy3_P_2_IceF_P' ) !------------------------- @@ -4859,10 +4624,10 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M DO i = 1,p_FAST%numIceLegs ! IceDyn PointMesh point mesh to SubDyn LMesh point mesh - CALL MeshMapCreate( IceD%y(i)%PointMesh, SD%Input(1)%LMesh, MeshMapData%IceD_P_2_SD_P(i), ErrStat2, ErrMsg2 ) + CALL MeshMapCreate( IceD%y(i)%PointMesh, SubstructureLoads, MeshMapData%IceD_P_2_SD_P(i), ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':IceD_P_2_SD_P('//TRIM(num2LStr(i))//')' ) ! SubDyn y3Mesh point mesh to IceDyn PointMesh point mesh - CALL MeshMapCreate( SD%y%y3Mesh, IceD%Input(1,i)%PointMesh, MeshMapData%SDy3_P_2_IceD_P(i), ErrStat2, ErrMsg2 ) + CALL MeshMapCreate( SubstructureMotion, IceD%Input(1,i)%PointMesh, MeshMapData%SDy3_P_2_IceD_P(i), ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SDy3_P_2_IceD_P('//TRIM(num2LStr(i))//')' ) END DO @@ -4874,14 +4639,13 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M !............................................................................................................................ ! Initialize the Jacobian structures: !............................................................................................................................ - !IF ( p_FAST%TurbineType == Type_Offshore_Fixed ) THEN - IF ( p_FAST%CompSub /= Module_None .OR. (p_FAST%CompElast == Module_BD .and. BD_Solve_Option1) .or. p_FAST%CompMooring == Module_Orca) THEN !.OR. p_FAST%CompHydro == Module_HD ) THEN + IF ( p_FAST%SolveOption == Solve_FullOpt1 ) THEN CALL Init_FullOpt1_Jacobian( p_FAST, MeshMapData, ED%Input(1)%PlatformPtMesh, SD%Input(1)%TPMesh, SD%Input(1)%LMesh, & HD%Input(1)%Morison%Mesh, HD%Input(1)%WAMITMesh, & ED%Input(1)%HubPtLoad, BD%Input(1,:), Orca%Input(1)%PtfmMesh, ExtPtfm%Input(1)%PtfmMesh, ErrStat2, ErrMsg2) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - ELSEIF ( p_FAST%CompHydro == Module_HD ) THEN - CALL AllocAry( MeshMapData%Jacobian_Opt1, SizeJac_ED_HD, SizeJac_ED_HD, 'Jacobian for Ptfm-HD coupling', ErrStat2, ErrMsg2 ) + ELSEIF ( p_FAST%SolveOption == Solve_SimplifiedOpt1 ) THEN + CALL AllocAry( MeshMapData%Jacobian_Opt1, SizeJac_ED_HD, SizeJac_ED_HD, 'Jacobian for Ptfm-HD coupling', ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) END IF @@ -4901,32 +4665,33 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M ! initialize the temporary input meshes (for input-output solves in Solve Option 1): ! (note that we do this after ResetRemapFlags() so that the copies have remap=false) !............................................................................................................................ - IF ( p_FAST%CompHydro == Module_HD .OR. p_FAST%CompSub /= Module_None .OR. (p_FAST%CompElast == Module_BD .and. BD_Solve_Option1) & - .or. p_FAST%CompMooring == Module_Orca) THEN + IF ( p_FAST%SolveOption /= Solve_FullOpt2 ) THEN ! Temporary meshes for transfering inputs to ED, HD, BD, Orca, and SD - CALL MeshCopy( ED%Input(1)%HubPtLoad, MeshMapData%u_ED_HubPtLoad, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_ED_HubPtLoad' ) - - CALL MeshCopy ( ED%Input(1)%PlatformPtMesh, MeshMapData%u_ED_PlatformPtMesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_ED_PlatformPtMesh' ) + CALL MeshCopy ( ED%Input(1)%HubPtLoad, MeshMapData%u_ED_HubPtLoad, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_ED_HubPtLoad' ) + + CALL MeshCopy ( SubStructureLoads, MeshMapData%SubstructureLoads_Tmp, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SubstructureLoads_Tmp' ) - CALL MeshCopy ( ED%Input(1)%PlatformPtMesh, MeshMapData%u_ED_PlatformPtMesh_2, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_ED_PlatformPtMesh_2' ) + CALL MeshCopy ( SubStructureLoads, MeshMapData%SubstructureLoads_Tmp2, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SubstructureLoads_Tmp2' ) + + CALL MeshCopy ( PlatformLoads, MeshMapData%PlatformLoads_Tmp, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':PlatformLoads_Tmp' ) - CALL MeshCopy ( ED%Input(1)%PlatformPtMesh, MeshMapData%u_ED_PlatformPtMesh_3, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_ED_PlatformPtMesh_3' ) + CALL MeshCopy ( PlatformLoads, MeshMapData%PlatformLoads_Tmp2, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':PlatformLoads_Tmp2' ) ! for now, setting up this additional load mesh for farm-level MD loads if in FAST.Farm (@mhall TODO: add more checks/handling) <<< if (p_FAST%FarmIntegration) then - CALL MeshCopy ( ED%Input(1)%PlatformPtMesh, MeshMapData%u_ED_PlatformPtMesh_MDf, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_ED_PlatformPtMesh_MDf' ) + CALL MeshCopy ( SubStructureLoads, MeshMapData%SubstructureLoads_Tmp_Farm, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SubstructureLoads_Tmp_Farm' ) - ! need to initialize to zero? - MeshMapData%u_ED_PlatformPtMesh_MDf%Force = 0.0_ReKi - MeshMapData%u_ED_PlatformPtMesh_MDf%Moment = 0.0_ReKi + ! initialize to zero for safety (likely not necessary) + MeshMapData%SubstructureLoads_Tmp_Farm%Force = 0.0_ReKi + MeshMapData%SubstructureLoads_Tmp_Farm%Moment = 0.0_ReKi end if - IF ( p_FAST%CompElast == Module_BD ) THEN @@ -4950,18 +4715,8 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M IF ( p_FAST%CompSub == Module_SD ) THEN - CALL MeshCopy ( SD%Input(1)%TPMesh, MeshMapData%u_SD_TPMesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_SD_TPMesh' ) - - IF ( p_FAST%CompHydro == Module_HD ) THEN - - CALL MeshCopy ( SD%Input(1)%LMesh, MeshMapData%u_SD_LMesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_SD_LMesh' ) - - CALL MeshCopy ( SD%Input(1)%LMesh, MeshMapData%u_SD_LMesh_2, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_SD_LMesh_2' ) - - END IF + CALL MeshCopy ( SD%Input(1)%TPMesh, MeshMapData%u_SD_TPMesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_SD_TPMesh' ) ELSE IF ( p_FAST%CompSub == Module_ExtPtfm ) THEN @@ -4992,10 +4747,11 @@ SUBROUTINE InitModuleMappings(p_FAST, ED, BD, AD14, AD, HD, SD, ExtPtfm, SrvD, M END IF - ELSEIF ( p_FAST%CompSub /= Module_SD ) THEN ! Platform loads from SrvD Structural control (TMDs) if not SD + ELSEIF ( p_FAST%CompSub /= Module_SD ) THEN ! Platform loads from SrvD Structural control (TMDs) to ED in Full Option2 solve; bjj note: solves with SD are always option 1, so this condition is always true (could replace ELSEIF with ELSE) + IF ( ALLOCATED(SrvD%Input(1)%SStCMotionMesh) ) THEN ! Platform TMD loads - CALL MeshCopy ( ED%Input(1)%PlatformPtMesh, MeshMapData%u_ED_PlatformPtMesh, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':u_ED_PlatformPtMesh' ) + CALL MeshCopy ( SubstructureLoads, MeshMapData%SubstructureLoads_Tmp, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':SubstructureLoads_Tmp' ) ENDIF END IF @@ -5108,28 +4864,13 @@ SUBROUTINE CalcOutputs_And_SolveForInputs( n_t_global, this_time, this_state, ca !> transfer SrvD outputs to other modules used in option 1: call Transfer_SrvD_to_SD_MD( p_FAST, SrvD%y, SD%Input(1), MD%Input(1) ) - !> transfer ED outputs to other modules used in option 1: - CALL Transfer_ED_to_HD_SD_BD_Mooring( p_FAST, ED%y, HD%Input(1), SD%Input(1), ExtPtfm%Input(1), & + !> transfer ED outputs to other modules used in option 1 (because we've already computed ED_CalcOutput in SolveOption2): + !> Note that this also calls SD_CalcOutput if SubDyn and HydroDyn are both used. + CALL Transfer_Structure_to_Opt1Inputs( this_time, this_state, p_FAST, ED%y, HD%Input(1), SD, ExtPtfm%Input(1), & MAPp%Input(1), FEAM%Input(1), MD%Input(1), & Orca%Input(1), BD%Input(1,:), SrvD%Input(1), MeshMapData, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - IF ( p_FAST%CompSub == Module_SD .and. p_FAST%CompHydro == Module_HD ) THEN - CALL SD_CalcOutput( this_time, SD%Input(1), SD%p, SD%x(this_state), SD%xd(this_state), SD%z(this_state), SD%OtherSt(this_state), SD%y, SD%m, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - call Transfer_SD_to_HD( SD%y, HD%Input(1)%WAMITMesh, HD%Input(1)%Morison%Mesh, MeshMapData, ErrStat, ErrMsg ) - - IF ( p_FAST%CompMooring == Module_MAP ) THEN - CALL Transfer_Point_to_Point( SD%y%y3Mesh, MAPp%Input(1)%PtFairDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - ELSEIF ( p_FAST%CompMooring == Module_MD ) THEN - CALL Transfer_Point_to_Point( SD%y%y3Mesh, MD%Input(1)%CoupledKinematics(1), MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - ELSEIF ( p_FAST%CompMooring == Module_FEAM ) THEN - CALL Transfer_Point_to_Point( SD%y%y3Mesh, FEAM%Input(1)%PtFairleadDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - END IF - END IF !> Solve option 1 (rigorous solve on loads/accelerations) CALL SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, SD, ExtPtfm, MAPp, FEAM, MD, Orca, IceF, IceD, SrvD, AD, MeshMapData, ErrStat2, ErrMsg2, WriteThisStep) @@ -5197,33 +4938,28 @@ END SUBROUTINE CalcOutputs_And_SolveForInputs !! platform reference point. Also in solve option 1 are the BD-ED blade root coupling. SUBROUTINE SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, SD, ExtPtfm, MAPp, FEAM, MD, Orca, IceF, IceD, SrvD, AD, MeshMapData, ErrStat, ErrMsg, WriteThisStep ) !............................................................................................................................... - REAL(DbKi) , intent(in ) :: this_time !< The current simulation time (actual or time of prediction) - INTEGER(IntKi) , intent(in ) :: this_state !< Index into the state array (current or predicted states) - LOGICAL , intent(in ) :: calcJacobian !< Should we calculate Jacobians in Option 1? - - TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< Parameters for the glue code - - TYPE(ElastoDyn_Data), INTENT(INOUT) :: ED !< ElastoDyn data - TYPE(BeamDyn_Data), INTENT(INOUT) :: BD !< BeamDyn data - TYPE(ServoDyn_Data), INTENT(INOUT) :: SrvD ! ServoDyn data - !TYPE(AeroDyn14_Data), INTENT(INOUT) :: AD14 ! AeroDyn14 data - TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data - TYPE(SubDyn_Data), INTENT(INOUT) :: SD !< SubDyn data - TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm data - TYPE(MAP_Data), INTENT(INOUT) :: MAPp !< MAP data - TYPE(FEAMooring_Data), INTENT(INOUT) :: FEAM !< FEAMooring data - TYPE(MoorDyn_Data), INTENT(INOUT) :: MD !< MoorDyn data - TYPE(OrcaFlex_Data), INTENT(INOUT) :: Orca !< OrcaFlex interface data - TYPE(IceFloe_Data), INTENT(INOUT) :: IceF !< IceFloe data - TYPE(IceDyn_Data), INTENT(INOUT) :: IceD !< All the IceDyn data used in time-step loop - TYPE(AeroDyn_Data), INTENT(INOUT) :: AD !< AeroDyn data - - TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules - - - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - LOGICAL , INTENT(IN ) :: WriteThisStep !< Will we print the WriteOutput values this step? + REAL(DbKi) , intent(in ) :: this_time !< The current simulation time (actual or time of prediction) + INTEGER(IntKi) , intent(in ) :: this_state !< Index into the state array (current or predicted states) + LOGICAL , intent(in ) :: calcJacobian !< Should we calculate Jacobians in Option 1? + TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< Parameters for the glue code + TYPE(ElastoDyn_Data), TARGET, INTENT(INOUT) :: ED !< ElastoDyn data + TYPE(BeamDyn_Data), INTENT(INOUT) :: BD !< BeamDyn data + TYPE(ServoDyn_Data), INTENT(INOUT) :: SrvD !< ServoDyn data + TYPE(AeroDyn_Data), INTENT(INOUT) :: AD !< AeroDyn data + TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data + TYPE(SubDyn_Data), TARGET, INTENT(INOUT) :: SD !< SubDyn data + TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm data + TYPE(MAP_Data), INTENT(INOUT) :: MAPp !< MAP data + TYPE(FEAMooring_Data), INTENT(INOUT) :: FEAM !< FEAMooring data + TYPE(MoorDyn_Data), INTENT(INOUT) :: MD !< MoorDyn data + TYPE(OrcaFlex_Data), INTENT(INOUT) :: Orca !< OrcaFlex interface data + TYPE(IceFloe_Data), INTENT(INOUT) :: IceF !< IceFloe data + TYPE(IceDyn_Data), INTENT(INOUT) :: IceD !< All the IceDyn data used in time-step loop + TYPE(FAST_ModuleMapType), INTENT(INOUT) :: MeshMapData !< Data for mapping between modules + + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + LOGICAL, INTENT(IN ) :: WriteThisStep !< Will we print the WriteOutput values this step? INTEGER :: i ! loop counter @@ -5231,6 +4967,7 @@ SUBROUTINE SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, CHARACTER(ErrMsgLen) :: ErrMSg2 CHARACTER(*), PARAMETER :: RoutineName = 'SolveOption1' + TYPE(MeshType), POINTER :: SubstructureMotion !............................................................................................................................ !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @@ -5241,6 +4978,12 @@ SUBROUTINE SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, ErrStat = ErrID_None ErrMsg = "" + IF (p_FAST%CompSub == Module_SD) then + SubstructureMotion => SD%y%y3Mesh + ELSE + SubstructureMotion => ED%y%PlatformPtMesh + END IF + ! Because MAP, FEAM, MoorDyn, IceDyn, and IceFloe do not contain acceleration inputs, we do this outside the DO loop in the ED{_SD}_HD_InputOutput solves. IF ( p_FAST%CompMooring == Module_MAP ) THEN @@ -5291,7 +5034,7 @@ SUBROUTINE SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, IF (ErrStat >= AbortErrLev) RETURN - IF ( p_FAST%CompSub /= Module_None .OR. (p_FAST%CompElast == Module_BD .and. BD_Solve_Option1) .OR. p_FAST%CompMooring == Module_Orca ) THEN !.OR. p_FAST%CompHydro == Module_HD ) THEN + IF (p_FAST%SolveOption == Solve_FullOpt1) THEN CALL FullOpt1_InputOutputSolve( this_time, p_FAST, calcJacobian & , ED%Input(1), ED%p, ED%x( this_state), ED%xd( this_state), ED%z( this_state), ED%OtherSt( this_state), ED%y, ED%m & @@ -5311,7 +5054,7 @@ SUBROUTINE SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - ELSEIF ( p_FAST%CompHydro == Module_HD ) THEN ! No substructure model + ELSEIF ( p_FAST%SolveOption == Solve_SimplifiedOpt1 ) THEN ! No substructure model CALL ED_HD_InputOutputSolve( this_time, p_FAST, calcJacobian & , ED%Input(1), ED%p, ED%x(this_state), ED%xd(this_state), ED%z(this_state), ED%OtherSt(this_state), ED%y, ED%m & @@ -5330,48 +5073,33 @@ SUBROUTINE SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, IF ( p_FAST%CompMooring == Module_MAP ) THEN ! note: MAP_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( SD%y%y3Mesh, MAPp%Input(1)%PtFairDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - else - CALL Transfer_Point_to_Point( ED%y%PlatformPtMesh, MAPp%Input(1)%PtFairDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - end if + CALL Transfer_Point_to_Point( SubstructureMotion, MAPp%Input(1)%PtFairDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ELSEIF ( p_FAST%CompMooring == Module_MD ) THEN ! note: MD_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( SD%y%y3Mesh, MD%Input(1)%CoupledKinematics(1), MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - else - CALL Transfer_Point_to_Point( ED%y%PlatformPtMesh, MD%Input(1)%CoupledKinematics(1), MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - endif + CALL Transfer_Point_to_Point( SubstructureMotion, MD%Input(1)%CoupledKinematics(1), MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) ELSEIF ( p_FAST%CompMooring == Module_FEAM ) THEN - ! note: FEAM_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) - if ( p_FAST%CompSub == Module_SD ) then - CALL Transfer_Point_to_Point( SD%y%y3Mesh, FEAM%Input(1)%PtFairleadDisplacement, MeshMapData%SDy3_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) - else - CALL Transfer_Point_to_Point( ED%y%PlatformPtMesh, FEAM%Input(1)%PtFairleadDisplacement, MeshMapData%ED_P_2_Mooring_P, ErrStat, ErrMsg ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - end if - - END IF + ! note: FEAM_InputSolve must be called before setting ED loads inputs (so that motions are known for loads [moment] mapping) + CALL Transfer_Point_to_Point( SubstructureMotion, FEAM%Input(1)%PtFairleadDisplacement, MeshMapData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2, ErrStat, ErrMsg, RoutineName) + + END IF IF ( p_FAST%CompIce == Module_IceF ) THEN - CALL IceFloe_InputSolve( IceF%Input(1), SD%y, MeshMapData, ErrStat2, ErrMsg2 ) + CALL IceFloe_InputSolve( IceF%Input(1), SubstructureMotion, MeshMapData, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ELSEIF ( p_FAST%CompIce == Module_IceD ) THEN DO i=1,p_FAST%numIceLegs - CALL IceD_InputSolve( IceD%Input(1,i), SD%y, MeshMapData, i, ErrStat2, ErrMsg2 ) + CALL IceD_InputSolve( IceD%Input(1,i), SubstructureMotion, MeshMapData, i, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//':IceD_InputSolve' ) END DO @@ -5381,13 +5109,8 @@ SUBROUTINE SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, ! Map motions for ServodDyn Structural control (TMD) if used. IF ( p_FAST%CompServo == Module_SrvD ) THEN - IF ( p_FAST%CompSub /= Module_SD ) THEN - call Transfer_ED_to_SStC( SrvD%Input(1), ED%y, MeshMapData, ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - ELSEIF ( p_FAST%CompSub == Module_SD ) THEN - call Transfer_SD_to_SStC( SrvD%Input(1), SD%y, MeshMapData, ErrStat2, ErrMsg2 ) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) - ENDIF + call Transfer_Substructure_to_SStC( SrvD%Input(1), SubstructureMotion, MeshMapData, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) END IF @@ -5401,19 +5124,14 @@ SUBROUTINE SolveOption1(this_time, this_state, calcJacobian, p_FAST, ED, BD, HD, CALL WriteMappingTransferToFile(SD%Input(1)%LMesh, SD%y%Y2Mesh, HD%Input(1)%Morison%Mesh, HD%y%Morison%Mesh,& - MeshMapData%SD_P_2_HD_M_P, MeshMapData%HD_M_P_2_SD_P, & + MeshMapData%SubStructure_2_HD_M_P, MeshMapData%HD_M_P_2_SubStructure, & 'SD_y2_HD_M_L_Meshes_t'//TRIM(Num2LStr(0))//'.PHL.bin' ) - - - - !print * - !pause #endif END SUBROUTINE SolveOption1 !---------------------------------------------------------------------------------------------------------------------------------- !> This routine implements the first part of the "option 2" solve for inputs that apply to BeamDyn and AeroDyn -SUBROUTINE SolveOption2a_Inp2BD(this_time, this_state, p_FAST, m_FAST, ED, BD, AD14, AD, SrvD, IfW, OpFM, MeshMapData, ErrStat, ErrMsg, WriteThisStep) +SUBROUTINE SolveOption2a_Inp2BD(this_time, this_state, p_FAST, m_FAST, ED, BD, AD, SrvD, IfW, OpFM, MeshMapData, ErrStat, ErrMsg, WriteThisStep) REAL(DbKi) , intent(in ) :: this_time !< The current simulation time (actual or time of prediction) INTEGER(IntKi) , intent(in ) :: this_state !< Index into the state array (current or predicted states) @@ -5423,7 +5141,6 @@ SUBROUTINE SolveOption2a_Inp2BD(this_time, this_state, p_FAST, m_FAST, ED, BD, A TYPE(ElastoDyn_Data), INTENT(INOUT) :: ED !< ElastoDyn data TYPE(BeamDyn_Data), INTENT(INOUT) :: BD !< BeamDyn data TYPE(ServoDyn_Data), INTENT(INOUT) :: SrvD !< ServoDyn data - TYPE(AeroDyn14_Data), INTENT(INOUT) :: AD14 !< AeroDyn14 data TYPE(AeroDyn_Data), INTENT(INOUT) :: AD !< AeroDyn data TYPE(InflowWind_Data), INTENT(INOUT) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(INOUT) :: OpFM !< OpenFOAM data @@ -5656,7 +5373,7 @@ SUBROUTINE SolveOption2(this_time, this_state, p_FAST, m_FAST, ED, BD, AD14, AD, ! SolveOption2* routines are being called in FAST_AdvanceStates, but the first time we call CalcOutputs_And_SolveForInputs, we haven't called the AdvanceStates routine IF (firstCall) THEN ! call ElastoDyn's CalcOutput & compute BD inputs from ED: - CALL SolveOption2a_Inp2BD(this_time, this_state, p_FAST, m_FAST, ED, BD, AD14, AD, SrvD, IfW, OpFM, MeshMapData, ErrStat2, ErrMsg2, WriteThisStep) + CALL SolveOption2a_Inp2BD(this_time, this_state, p_FAST, m_FAST, ED, BD, AD, SrvD, IfW, OpFM, MeshMapData, ErrStat2, ErrMsg2, WriteThisStep) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ! compute AD position inputs; compute all of IfW inputs from ED/BD outputs: CALL SolveOption2b_Inp2IfW(this_time, this_state, p_FAST, m_FAST, ED, BD, AD14, AD, SrvD, IfW, OpFM, MeshMapData, ErrStat2, ErrMsg2, WriteThisStep) @@ -5789,7 +5506,7 @@ SUBROUTINE FAST_AdvanceStates( t_initial, n_t_global, p_FAST, m_FAST, ED, BD, Sr ! BeamDyn doesn't like extrapolated rotations, so we will calculate them from ED and transfer instead of doing a correction step. ! (Also calls ED_CalcOutput here so that we can use it for AeroDyn optimization, too): - CALL SolveOption2a_Inp2BD(t_global_next, STATE_PRED, p_FAST, m_FAST, ED, BD, AD14, AD, SrvD, IfW, OpFM, MeshMapData, ErrStat2, ErrMsg2, WriteThisStep) + CALL SolveOption2a_Inp2BD(t_global_next, STATE_PRED, p_FAST, m_FAST, ED, BD, AD, SrvD, IfW, OpFM, MeshMapData, ErrStat2, ErrMsg2, WriteThisStep) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) IF ( p_FAST%CompElast == Module_BD ) THEN @@ -6268,6 +5985,10 @@ SUBROUTINE FAST_ExtrapInterpMods( t_global_next, p_FAST, m_FAST, ED, BD, SrvD, A CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName ) SrvD%InputTimes(1) = t_global_next + + ! ! put zero-order hold on SrvD inputs from Simulink (avoids extrapolation issues) + !CALL SrvD_SetExternalInputs( p_FAST, m_FAST, SrvD%Input(1) ) + END IF ! ServoDyn ! HydroDyn diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 2f99a720cf..0e0585a17f 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -23,7 +23,6 @@ MODULE FAST_Subs USE FAST_Solver USE FAST_Linear - USE Waves, ONLY : WaveGrid_n USE SC_DataEx USE VersionInfo @@ -51,18 +50,18 @@ SUBROUTINE FAST_InitializeAll_T( t_initial, TurbID, Turbine, ErrStat, ErrMsg, In IF (PRESENT(ExternInitData)) THEN CALL FAST_InitializeAll( t_initial, Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, Turbine%SC_DX,& - Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & + Turbine%SeaSt, Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrStat, ErrMsg, InFile, ExternInitData ) ELSE CALL FAST_InitializeAll( t_initial, Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, Turbine%SC_DX, & - Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & + Turbine%SeaSt, Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrStat, ErrMsg, InFile ) END IF ELSE CALL FAST_InitializeAll( t_initial, Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, Turbine%SC_DX, & - Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & + Turbine%SeaSt, Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrStat, ErrMsg ) END IF @@ -70,7 +69,7 @@ SUBROUTINE FAST_InitializeAll_T( t_initial, TurbID, Turbine, ErrStat, ErrMsg, In END SUBROUTINE FAST_InitializeAll_T !---------------------------------------------------------------------------------------------------------------------------------- !> Routine to call Init routine for each module. This routine sets all of the init input data for each module. -SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, HD, SD, ExtPtfm, & +SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, SeaSt, HD, SD, ExtPtfm, & MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat, ErrMsg, InFile, ExternInitData ) use ElastoDyn_Parameters, only: Method_RK4 @@ -88,6 +87,7 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, TYPE(InflowWind_Data), INTENT(INOUT) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(INOUT) :: OpFM !< OpenFOAM data TYPE(SCDataEx_Data), INTENT(INOUT) :: SC_DX !< SuperController exchange data + TYPE(SeaState_Data), INTENT(INOUT) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(INOUT) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm_MCKF data @@ -195,7 +195,7 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, ! also, set applicable farm paramters and turbine reference position also for graphics output p_FAST%UseSC = .FALSE. if (PRESENT(ExternInitData)) then - p_FAST%FarmIntegration = ExternInitData%FarmIntegration + p_FAST%FarmIntegration = ExternInitData%FarmIntegration p_FAST%TurbinePos = ExternInitData%TurbinePos p_FAST%WaveFieldMod = ExternInitData%WaveFieldMod if( (ExternInitData%NumSC2CtrlGlob .gt. 0) .or. (ExternInitData%NumSC2Ctrl .gt. 0) .or. (ExternInitData%NumCtrl2SC .gt. 0)) then @@ -752,7 +752,7 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, ! get wave elevation data for visualization if ( p_FAST%WrVTK > VTK_None ) then - call SetVTKParameters_B4HD(p_FAST, Init%OutData_ED, Init%InData_HD, BD, ErrStat2, ErrMsg2) + call SetVTKParameters_B4SeaSt(p_FAST, Init%OutData_ED, Init%InData_SeaSt, BD, ErrStat2, ErrMsg2) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF (ErrStat >= AbortErrLev) THEN CALL Cleanup() @@ -760,7 +760,95 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, END IF end if + ! ........................ + ! initialize SeaStates + ! ........................ + ALLOCATE( SeaSt%Input( p_FAST%InterpOrder+1 ), SeaSt%InputTimes( p_FAST%InterpOrder+1 ), STAT = ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal,"Error allocating SeaSt%Input and SeaSt%InputTimes.",ErrStat,ErrMsg,RoutineName) + CALL Cleanup() + RETURN + END IF + if ( p_FAST%CompSeaSt == Module_SeaSt ) then + + Init%InData_SeaSt%Gravity = p_FAST%Gravity + Init%InData_SeaSt%defWtrDens = p_FAST%WtrDens + Init%InData_SeaSt%defWtrDpth = p_FAST%WtrDpth + Init%InData_SeaSt%defMSL2SWL = p_FAST%MSL2SWL + Init%InData_SeaSt%UseInputFile = .TRUE. + Init%InData_SeaSt%Linearize = p_FAST%Linearize + Init%InData_SeaSt%hasIce = p_FAST%CompIce /= Module_None + Init%InData_SeaSt%InputFile = p_FAST%SeaStFile + Init%InData_SeaSt%OutRootName = TRIM(p_FAST%OutFileRoot)//'.'//TRIM(y_FAST%Module_Abrev(Module_SeaSt)) + + ! these values support wave field handling + Init%InData_SeaSt%WaveFieldMod = p_FAST%WaveFieldMod + Init%InData_SeaSt%PtfmLocationX = p_FAST%TurbinePos(1) + Init%InData_SeaSt%PtfmLocationY = p_FAST%TurbinePos(2) + + Init%InData_SeaSt%TMax = p_FAST%TMax + + CALL SeaSt_Init( Init%InData_SeaSt, SeaSt%Input(1), SeaSt%p, SeaSt%x(STATE_CURR), SeaSt%xd(STATE_CURR), SeaSt%z(STATE_CURR), & + SeaSt%OtherSt(STATE_CURR), SeaSt%y, SeaSt%m, p_FAST%dt_module( MODULE_SeaSt ), Init%OutData_SeaSt, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + p_FAST%ModuleInitialized(Module_SeaSt) = .TRUE. + CALL SetModuleSubstepTime(Module_SeaSt, p_FAST, y_FAST, ErrStat2, ErrMsg2) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + IF (ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + + ! Need to set up other module's InitInput data here because we will also need to clean up SeaState data and would rather not defer that cleanup + if ( p_FAST%CompHydro == Module_HD ) then + Init%InData_HD%NStepWave = Init%OutData_SeaSt%NStepWave + Init%InData_HD%NStepWave2 = Init%OutData_SeaSt%NStepWave2 + Init%InData_HD%RhoXg = Init%OutData_SeaSt%RhoXg + Init%InData_HD%WaveMod = Init%OutData_SeaSt%WaveMod + Init%InData_HD%WaveStMod = Init%OutData_SeaSt%WaveStMod + Init%InData_HD%WaveDirMod = Init%OutData_SeaSt%WaveDirMod + Init%InData_HD%WvLowCOff = Init%OutData_SeaSt%WvLowCOff + Init%InData_HD%WvHiCOff = Init%OutData_SeaSt%WvHiCOff + Init%InData_HD%WvLowCOffD = Init%OutData_SeaSt%WvLowCOffD + Init%InData_HD%WvHiCOffD = Init%OutData_SeaSt%WvHiCOffD + Init%InData_HD%WvLowCOffS = Init%OutData_SeaSt%WvLowCOffS + Init%InData_HD%WvHiCOffS = Init%OutData_SeaSt%WvHiCOffS + Init%InData_HD%InvalidWithSSExctn = Init%OutData_SeaSt%InvalidWithSSExctn + + Init%InData_HD%WaveDirMin = Init%OutData_SeaSt%WaveDirMin + Init%InData_HD%WaveDirMax = Init%OutData_SeaSt%WaveDirMax + Init%InData_HD%WaveDir = Init%OutData_SeaSt%WaveDir + Init%InData_HD%WaveMultiDir = Init%OutData_SeaSt%WaveMultiDir + Init%InData_HD%WaveDOmega = Init%OutData_SeaSt%WaveDOmega + Init%InData_HD%MCFD = Init%OutData_SeaSt%MCFD + + CALL MOVE_ALLOC( Init%OutData_SeaSt%WaveElev0, Init%InData_HD%WaveElev0 ) + Init%InData_HD%WaveTime => Init%OutData_SeaSt%WaveTime + Init%InData_HD%WaveDynP => Init%OutData_SeaSt%WaveDynP + Init%InData_HD%WaveAcc => Init%OutData_SeaSt%WaveAcc + Init%InData_HD%WaveVel => Init%OutData_SeaSt%WaveVel + Init%InData_HD%PWaveDynP0 => Init%OutData_SeaSt%PWaveDynP0 + Init%InData_HD%PWaveAcc0 => Init%OutData_SeaSt%PWaveAcc0 + Init%InData_HD%PWaveVel0 => Init%OutData_SeaSt%PWaveVel0 + Init%InData_HD%WaveElevC0 => Init%OutData_SeaSt%WaveElevC0 + CALL MOVE_ALLOC( Init%OutData_SeaSt%WaveElevC, Init%InData_HD%WaveElevC ) + Init%InData_HD%WaveDirArr => Init%OutData_SeaSt%WaveDirArr + Init%InData_HD%WaveElev1 => Init%OutData_SeaSt%WaveElev1 + Init%InData_HD%WaveElev2 => Init%OutData_SeaSt%WaveElev2 + + Init%InData_HD%WaveAccMCF => Init%OutData_SeaSt%WaveAccMCF + Init%InData_HD%PWaveAccMCF0 => Init%OutData_SeaSt%PWaveAccMCF0 + + call SeaSt_Interp_CopyParam(Init%OutData_SeaSt%SeaSt_Interp_p, Init%InData_HD%SeaSt_Interp_p, MESH_NEWCOPY, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + end if + + end if + ! ........................ ! initialize HydroDyn ! ........................ @@ -774,21 +862,15 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, IF ( p_FAST%CompHydro == Module_HD ) THEN Init%InData_HD%Gravity = p_FAST%Gravity - Init%InData_HD%defWtrDens = p_FAST%WtrDens - Init%InData_HD%defWtrDpth = p_FAST%WtrDpth - Init%InData_HD%defMSL2SWL = p_FAST%MSL2SWL + Init%InData_HD%WtrDens = Init%OutData_SeaSt%WtrDens + Init%InData_HD%WtrDpth = Init%OutData_SeaSt%WtrDpth + Init%InData_HD%MSL2SWL = Init%OutData_SeaSt%MSL2SWL Init%InData_HD%UseInputFile = .TRUE. Init%InData_HD%InputFile = p_FAST%HydroFile - Init%InData_HD%OutRootName = p_FAST%OutFileRoot + Init%InData_HD%OutRootName = TRIM(p_FAST%OutFileRoot)//'.'//TRIM(y_FAST%Module_Abrev(Module_HD)) Init%InData_HD%TMax = p_FAST%TMax - Init%InData_HD%hasIce = p_FAST%CompIce /= Module_None Init%InData_HD%Linearize = p_FAST%Linearize - ! these values support wave field handling - Init%InData_HD%WaveFieldMod = p_FAST%WaveFieldMod - Init%InData_HD%PtfmLocationX = p_FAST%TurbinePos(1) - Init%InData_HD%PtfmLocationY = p_FAST%TurbinePos(2) - CALL HydroDyn_Init( Init%InData_HD, HD%Input(1), HD%p, HD%x(STATE_CURR), HD%xd(STATE_CURR), HD%z(STATE_CURR), & HD%OtherSt(STATE_CURR), HD%y, HD%m, p_FAST%dt_module( MODULE_HD ), Init%OutData_HD, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) @@ -797,6 +879,11 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, CALL SetModuleSubstepTime(Module_HD, p_FAST, y_FAST, ErrStat2, ErrMsg2) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF (ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + allocate( y_FAST%Lin%Modules(MODULE_HD)%Instance(1), stat=ErrStat2) if (ErrStat2 /= 0 ) then call SetErrStat(ErrID_Fatal, "Error allocating Lin%Modules(HD).", ErrStat, ErrMsg, RoutineName ) @@ -836,7 +923,7 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, IF ( p_FAST%CompSub == Module_SD ) THEN IF ( p_FAST%CompHydro == Module_HD ) THEN - Init%InData_SD%WtrDpth = Init%OutData_HD%WtrDpth + Init%InData_SD%WtrDpth = Init%OutData_SeaSt%WtrDpth ELSE Init%InData_SD%WtrDpth = 0.0_ReKi END IF @@ -953,13 +1040,13 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, ! Init%InData_MAP%rootname = p_FAST%OutFileRoot ! Output file name Init%InData_MAP%gravity = p_FAST%Gravity ! This need to be according to g from driver - Init%InData_MAP%sea_density = Init%OutData_HD%WtrDens ! This needs to be set according to seawater density in HydroDyn - Init%InData_MAP%depth = Init%OutData_HD%WtrDpth ! This need to be set according to the water depth in HydroDyn + Init%InData_MAP%sea_density = Init%OutData_SeaSt%WtrDens ! This needs to be set according to seawater density in SeaState + Init%InData_MAP%depth = Init%OutData_SeaSt%WtrDpth ! This need to be set according to the water depth in SeaState ! differences for MAP++ Init%InData_MAP%file_name = p_FAST%MooringFile ! This needs to be set according to what is in the FAST input file. Init%InData_MAP%summary_file_name = TRIM(p_FAST%OutFileRoot)//'.MAP.sum' ! Output file name - Init%InData_MAP%depth = -Init%OutData_HD%WtrDpth ! This need to be set according to the water depth in HydroDyn + Init%InData_MAP%depth = -Init%OutData_SeaSt%WtrDpth ! This need to be set according to the water depth in SeaState Init%InData_MAP%LinInitInp%Linearize = p_FAST%Linearize @@ -1003,11 +1090,11 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, Init%InData_MD%RootName = p_FAST%OutFileRoot Init%InData_MD%PtfmInit(:,1) = Init%OutData_ED%PlatformPos ! initial position of the platform (when a FAST module, MoorDyn just takes one row in this matrix) - Init%InData_MD%FarmSize = 0 ! 0 here indicates normal FAST module use of MoorDyn, for a single turbine + Init%InData_MD%FarmSize = 0 ! 0 here indicates normal FAST module use of MoorDyn, for a single turbine Init%InData_MD%TurbineRefPos(:,1) = 0.0_DbKi ! for normal FAST use, the global reference frame is at 0,0,0 Init%InData_MD%g = p_FAST%Gravity ! This need to be according to g used in ElastoDyn - Init%InData_MD%rhoW = Init%OutData_HD%WtrDens ! This needs to be set according to seawater density in HydroDyn - Init%InData_MD%WtrDepth = Init%OutData_HD%WtrDpth ! This need to be set according to the water depth in HydroDyn + Init%InData_MD%rhoW = Init%OutData_SeaSt%WtrDens ! This needs to be set according to seawater density in SeaState + Init%InData_MD%WtrDepth = Init%OutData_SeaSt%WtrDpth ! This need to be set according to the water depth in SeaState Init%InData_MD%Tmax = p_FAST%TMax ! expected simulation duration (used by MoorDyn for wave kinematics preprocesing) Init%InData_MD%Linearize = p_FAST%Linearize @@ -1051,8 +1138,8 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, Init%InData_FEAM%PtfmInit = Init%OutData_ED%PlatformPos !ED%x(STATE_CURR)%QT(1:6) ! initial position of the platform !bjj: this should come from Init%OutData_ED, not x_ED Init%InData_FEAM%NStepWave = 1 ! an arbitrary number > 0 (to set the size of the wave data, which currently contains all zero values) Init%InData_FEAM%gravity = p_FAST%Gravity ! This need to be according to g from driver - Init%InData_FEAM%WtrDens = Init%OutData_HD%WtrDens ! This needs to be set according to seawater density in HydroDyn -! Init%InData_FEAM%depth = Init%OutData_HD%WtrDpth ! This need to be set according to the water depth in HydroDyn + Init%InData_FEAM%WtrDens = Init%OutData_SeaSt%WtrDens ! This needs to be set according to seawater density in SeaState +! Init%InData_FEAM%depth = Init%OutData_SeaSt%WtrDpth ! This need to be set according to the water depth in SeaState CALL FEAM_Init( Init%InData_FEAM, FEAM%Input(1), FEAM%p, FEAM%x(STATE_CURR), FEAM%xd(STATE_CURR), FEAM%z(STATE_CURR), & FEAM%OtherSt(STATE_CURR), FEAM%y, FEAM%m, p_FAST%dt_module( MODULE_FEAM ), Init%OutData_FEAM, ErrStat2, ErrMsg2 ) @@ -1140,7 +1227,7 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, Init%InData_IceF%InputFile = p_FAST%IceFile Init%InData_IceF%RootName = TRIM(p_FAST%OutFileRoot)//'.'//TRIM(y_FAST%Module_Abrev(Module_IceF)) Init%InData_IceF%simLength = p_FAST%TMax !bjj: IceFloe stores this as single-precision (ReKi) TMax is DbKi - Init%InData_IceF%MSL2SWL = Init%OutData_HD%MSL2SWL + Init%InData_IceF%MSL2SWL = Init%OutData_SeaSt%MSL2SWL Init%InData_IceF%gravity = p_FAST%Gravity CALL IceFloe_Init( Init%InData_IceF, IceF%Input(1), IceF%p, IceF%x(STATE_CURR), IceF%xd(STATE_CURR), IceF%z(STATE_CURR), & @@ -1162,8 +1249,8 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, Init%InData_IceD%InputFile = p_FAST%IceFile Init%InData_IceD%RootName = TRIM(p_FAST%OutFileRoot)//'.'//TRIM(y_FAST%Module_Abrev(Module_IceD))//'1' - Init%InData_IceD%MSL2SWL = Init%OutData_HD%MSL2SWL - Init%InData_IceD%WtrDens = Init%OutData_HD%WtrDens + Init%InData_IceD%MSL2SWL = Init%OutData_SeaSt%MSL2SWL + Init%InData_IceD%WtrDens = Init%OutData_SeaSt%WtrDens Init%InData_IceD%gravity = p_FAST%Gravity Init%InData_IceD%TMax = p_FAST%TMax Init%InData_IceD%LegNum = 1 @@ -1419,7 +1506,7 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, ! Initialize data for VTK output ! ------------------------------------------------------------------------- if ( p_FAST%WrVTK > VTK_None ) then - call SetVTKParameters(p_FAST, Init%OutData_ED, Init%OutData_AD, Init%InData_HD, Init%OutData_HD, ED, BD, AD, HD, ErrStat2, ErrMsg2) + call SetVTKParameters(p_FAST, Init%OutData_ED, Init%OutData_AD, Init%InData_SeaSt, Init%OutData_SeaSt, ED, BD, AD, HD, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) end if @@ -1484,7 +1571,9 @@ SUBROUTINE Cleanup() !............................................................................................................................... ! Destroy initializion data !............................................................................................................................... - CALL FAST_DestroyInitData( Init, ErrStat2, ErrMsg2 ) + ! We assume that all initializion data points to parameter data, so we just nullify the pointers instead of deallocate + ! data that they point to: + CALL FAST_DestroyInitData( Init, ErrStat2, ErrMsg2, DEALLOCATEpointers=.false. ) CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) END SUBROUTINE Cleanup @@ -1715,6 +1804,7 @@ SUBROUTINE FAST_Init( p, m_FAST, y_FAST, t_initial, InputFile, ErrStat, ErrMsg, y_FAST%Module_Ver( Module_AD14 )%Name = 'AeroDyn14' y_FAST%Module_Ver( Module_AD )%Name = 'AeroDyn' y_FAST%Module_Ver( Module_SrvD )%Name = 'ServoDyn' + y_FAST%Module_Ver( Module_SeaSt )%Name = 'SeaState' y_FAST%Module_Ver( Module_HD )%Name = 'HydroDyn' y_FAST%Module_Ver( Module_SD )%Name = 'SubDyn' y_FAST%Module_Ver( Module_ExtPtfm)%Name = 'ExtPtfm_MCKF' @@ -1733,6 +1823,7 @@ SUBROUTINE FAST_Init( p, m_FAST, y_FAST, t_initial, InputFile, ErrStat, ErrMsg, y_FAST%Module_Abrev( Module_AD14 ) = 'AD' y_FAST%Module_Abrev( Module_AD ) = 'AD' y_FAST%Module_Abrev( Module_SrvD ) = 'SrvD' + y_FAST%Module_Abrev( Module_SeaSt ) = 'SEA' y_FAST%Module_Abrev( Module_HD ) = 'HD' y_FAST%Module_Abrev( Module_SD ) = 'SD' y_FAST%Module_Abrev( Module_ExtPtfm) = 'ExtPtfm' @@ -1742,7 +1833,7 @@ SUBROUTINE FAST_Init( p, m_FAST, y_FAST, t_initial, InputFile, ErrStat, ErrMsg, y_FAST%Module_Abrev( Module_Orca ) = 'Orca' y_FAST%Module_Abrev( Module_IceF ) = 'IceF' y_FAST%Module_Abrev( Module_IceD ) = 'IceD' - + p%n_substeps = 1 ! number of substeps for between modules and global/FAST time p%BD_OutputSibling = .false. @@ -1776,15 +1867,19 @@ SUBROUTINE FAST_Init( p, m_FAST, y_FAST, t_initial, InputFile, ErrStat, ErrMsg, p%nBeams = 0 ! initialize number of BeamDyn instances (will be set later) ! determine what kind of turbine we're modeling: - IF ( p%CompHydro == Module_HD .and. p%MHK == 0) THEN + IF ( p%MHK == 1 ) THEN + p%TurbineType = Type_MHK_Fixed + ELSEIF ( p%MHK == 2 ) THEN + p%TurbineType = Type_MHK_Floating + ELSEIF ( p%CompHydro == Module_HD ) THEN IF ( p%CompSub == Module_SD ) THEN p%TurbineType = Type_Offshore_Fixed ELSE p%TurbineType = Type_Offshore_Floating END IF - ELSEIF ( p%CompMooring == Module_Orca .and. p%MHK == 0) THEN + ELSEIF ( p%CompMooring == Module_Orca ) THEN p%TurbineType = Type_Offshore_Floating - ELSEIF ( p%CompSub == Module_ExtPtfm .and. p%MHK == 0) THEN + ELSEIF ( p%CompSub == Module_ExtPtfm ) THEN p%TurbineType = Type_Offshore_Fixed ELSEIF ( p%MHK == 1 ) THEN p%TurbineType = Type_MHK_Fixed @@ -1811,7 +1906,6 @@ SUBROUTINE FAST_Init( p, m_FAST, y_FAST, t_initial, InputFile, ErrStat, ErrMsg, CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - IF ( ErrStat >= AbortErrLev ) RETURN @@ -1879,10 +1973,17 @@ SUBROUTINE ValidateInputData(p, m_FAST, ErrStat, ErrMsg) IF (p%CompElast == Module_Unknown) CALL SetErrStat( ErrID_Fatal, 'CompElast must be 1 (ElastoDyn) or 2 (BeamDyn).', ErrStat, ErrMsg, RoutineName ) IF (p%CompAero == Module_Unknown) CALL SetErrStat( ErrID_Fatal, 'CompAero must be 0 (None), 1 (AeroDyn14), or 2 (AeroDyn).', ErrStat, ErrMsg, RoutineName ) IF (p%CompServo == Module_Unknown) CALL SetErrStat( ErrID_Fatal, 'CompServo must be 0 (None) or 1 (ServoDyn).', ErrStat, ErrMsg, RoutineName ) + IF (p%CompSeaSt == Module_Unknown) CALL SetErrStat( ErrID_Fatal, 'CompSeaSt must be 0 (None) or 1 (SeaState).', ErrStat, ErrMsg, RoutineName ) IF (p%CompHydro == Module_Unknown) CALL SetErrStat( ErrID_Fatal, 'CompHydro must be 0 (None) or 1 (HydroDyn).', ErrStat, ErrMsg, RoutineName ) IF (p%CompSub == Module_Unknown) CALL SetErrStat( ErrID_Fatal, 'CompSub must be 0 (None), 1 (SubDyn), or 2 (ExtPtfm_MCKF).', ErrStat, ErrMsg, RoutineName ) IF (p%CompMooring == Module_Unknown) CALL SetErrStat( ErrID_Fatal, 'CompMooring must be 0 (None), 1 (MAP), 2 (FEAMooring), 3 (MoorDyn), or 4 (OrcaFlex).', ErrStat, ErrMsg, RoutineName ) IF (p%CompIce == Module_Unknown) CALL SetErrStat( ErrID_Fatal, 'CompIce must be 0 (None) or 1 (IceFloe).', ErrStat, ErrMsg, RoutineName ) + + ! NOTE: If future modules consume SeaState data, then their checks should be added to this routine. 12/1/21 GJH + if (p%CompHydro == Module_HD .and. p%CompSeaSt == Module_None) then + CALL SetErrStat( ErrID_Fatal, 'SeaState must be used when HydroDyn is used. Set CompSeaSt = 1 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) + end if + IF (p%CompHydro /= Module_HD) THEN IF (p%CompMooring == Module_MAP) THEN CALL SetErrStat( ErrID_Fatal, 'HydroDyn must be used when MAP is used. Set CompHydro > 0 or CompMooring = 0 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) @@ -1895,13 +1996,15 @@ SUBROUTINE ValidateInputData(p, m_FAST, ErrStat, ErrMsg) IF (p%CompMooring == Module_Orca) CALL SetErrStat( ErrID_Fatal, 'HydroDyn cannot be used if OrcaFlex is used. Set CompHydro = 0 or CompMooring < 4 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) IF (p%CompSub == Module_ExtPtfm) CALL SetErrStat( ErrID_Fatal, 'HydroDyn cannot be used if ExtPtfm_MCKF is used. Set CompHydro = 0 or CompSub < 2 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) END IF + + IF (p%CompMooring == Module_Orca .and. p%CompSub /= Module_None) CALL SetErrStat( ErrID_Fatal, 'SubDyn and ExtPtfm cannot be used if OrcaFlex is used. Set CompSub = 0 or CompMooring < 4 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) IF (p%CompIce == Module_IceF) THEN - IF (p%CompSub /= Module_SD) CALL SetErrStat( ErrID_Fatal, 'SubDyn must be used when IceFloe is used. Set CompSub > 0 or CompIce = 0 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) + IF (p%CompSub /= Module_SD) CALL SetErrStat( ErrID_Fatal, 'SubDyn must be used when IceFloe is used. Set CompSub = 1 or CompIce = 0 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) IF (p%CompHydro /= Module_HD) CALL SetErrStat( ErrID_Fatal, 'HydroDyn must be used when IceFloe is used. Set CompHydro > 0 or CompIce = 0 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) ELSEIF (p%CompIce == Module_IceD) THEN - IF (p%CompSub /= Module_SD) CALL SetErrStat( ErrID_Fatal, 'SubDyn must be used when IceDyn is used. Set CompSub > 0 or CompIce = 0 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) + IF (p%CompSub /= Module_SD) CALL SetErrStat( ErrID_Fatal, 'SubDyn must be used when IceDyn is used. Set CompSub = 1 or CompIce = 0 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) IF (p%CompHydro /= Module_HD) CALL SetErrStat( ErrID_Fatal, 'HydroDyn must be used when IceDyn is used. Set CompHydro > 0 or CompIce = 0 in the FAST input file.', ErrStat, ErrMsg, RoutineName ) END IF @@ -2075,6 +2178,11 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ErrStat, ErrMsg ) y_FAST%FileDescLines(2) = TRIM(y_FAST%FileDescLines(2) ) //'; '//TRIM(GetNVD(y_FAST%Module_Ver( Module_SrvD ))) END IF + IF ( p_FAST%CompSeaSt == Module_SeaSt ) THEN + y_FAST%Module_Ver( Module_SeaSt ) = Init%OutData_SeaSt%Ver + y_FAST%FileDescLines(2) = TRIM(y_FAST%FileDescLines(2) ) //'; '//TRIM(GetNVD(y_FAST%Module_Ver( Module_SeaSt ))) + END IF + IF ( p_FAST%CompHydro == Module_HD ) THEN y_FAST%Module_Ver( Module_HD ) = Init%OutData_HD%Ver y_FAST%FileDescLines(2) = TRIM(y_FAST%FileDescLines(2) ) //'; '//TRIM(GetNVD(y_FAST%Module_Ver( Module_HD ))) @@ -2128,6 +2236,7 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ErrStat, ErrMsg ) IF ( ALLOCATED( Init%OutData_AD%rotors(1)%WriteOutputHdr)) y_FAST%numOuts(Module_AD) = SIZE(Init%OutData_AD%rotors(1)%WriteOutputHdr) ENDIF IF ( ALLOCATED( Init%OutData_SrvD%WriteOutputHdr ) ) y_FAST%numOuts(Module_SrvD) = SIZE(Init%OutData_SrvD%WriteOutputHdr) + IF ( ALLOCATED( Init%OutData_SeaSt%WriteOutputHdr ) ) y_FAST%numOuts(Module_SeaSt) = SIZE(Init%OutData_SeaSt%WriteOutputHdr) IF ( ALLOCATED( Init%OutData_HD%WriteOutputHdr ) ) y_FAST%numOuts(Module_HD) = SIZE(Init%OutData_HD%WriteOutputHdr) IF ( ALLOCATED( Init%OutData_SD%WriteOutputHdr ) ) y_FAST%numOuts(Module_SD) = SIZE(Init%OutData_SD%WriteOutputHdr) IF ( ALLOCATED( Init%OutData_ExtPtfm%WriteOutputHdr) ) y_FAST%numOuts(Module_ExtPtfm)= SIZE(Init%OutData_ExtPtfm%WriteOutputHdr) @@ -2203,6 +2312,12 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ErrStat, ErrMsg ) indxNext = indxNext + 1 END DO + DO i=1,y_FAST%numOuts(Module_SeaSt) !SeaState + y_FAST%ChannelNames(indxNext) = Init%OutData_SeaSt%WriteOutputHdr(i) + y_FAST%ChannelUnits(indxNext) = Init%OutData_SeaSt%WriteOutputUnt(i) + indxNext = indxNext + 1 + END DO + DO i=1,y_FAST%numOuts(Module_HD) !HydroDyn y_FAST%ChannelNames(indxNext) = Init%OutData_HD%WriteOutputHdr(i) y_FAST%ChannelUnits(indxNext) = Init%OutData_HD%WriteOutputUnt(i) @@ -2274,11 +2389,6 @@ SUBROUTINE FAST_InitOutput( p_FAST, y_FAST, Init, ErrStat, ErrMsg ) y_FAST%ActualChanLen = max( y_FAST%ActualChanLen, LEN_TRIM(y_FAST%ChannelUnits(I)) ) ENDDO ! I - y_FAST%OutFmt_a = '"'//p_FAST%Delim//'"'//p_FAST%OutFmt ! format for array elements from individual modules - if (p_FAST%FmtWidth < y_FAST%ActualChanLen) then - y_FAST%OutFmt_a = trim(y_FAST%OutFmt_a)//','//trim(num2lstr(y_FAST%ActualChanLen - p_FAST%FmtWidth))//'x' - end if - CALL GetNewUnit( y_FAST%UnOu, ErrStat, ErrMsg ) IF ( ErrStat >= AbortErrLev ) RETURN @@ -2665,6 +2775,23 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS END IF + ! CompSeaSt - Compute sea state information (switch) {0=None; 1=SeaState}: + CALL ReadVar( UnIn, InputFile, p%CompSeaSt, "CompSeaSt", "Compute sea state information (switch) {0=None; 1=SeaState}}", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + + ! immediately convert to values used inside the code: + IF ( p%CompSeaSt == 0 ) THEN + p%CompSeaSt = Module_NONE + ELSEIF ( p%CompSeaSt == 1 ) THEN + p%CompSeaSt = Module_SeaSt + ELSE + p%CompSeaSt = Module_Unknown + END IF + ! CompHydro - Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn}: CALL ReadVar( UnIn, InputFile, p%CompHydro, "CompHydro", "Compute hydrodynamic loads (switch) {0=None; 1=HydroDyn}", ErrStat2, ErrMsg2, UnEc) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -2886,6 +3013,15 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS end if IF ( PathIsRelative( p%ServoFile ) ) p%ServoFile = TRIM(PriPath)//TRIM(p%ServoFile) + ! SeaStFile - Name of file containing sea state input parameters (-): + CALL ReadVar( UnIn, InputFile, p%SeaStFile, "SeaStFile", "Name of file containing sea state input parameters (-)", ErrStat2, ErrMsg2, UnEc) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if ( ErrStat >= AbortErrLev ) then + call cleanup() + RETURN + end if + IF ( PathIsRelative( p%SeaStFile ) ) p%SeaStFile = TRIM(PriPath)//TRIM(p%SeaStFile) + ! HydroFile - Name of file containing hydrodynamic input parameters (-): CALL ReadVar( UnIn, InputFile, p%HydroFile, "HydroFile", "Name of file containing hydrodynamic input parameters (-)", ErrStat2, ErrMsg2, UnEc) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -3050,7 +3186,7 @@ SUBROUTINE FAST_ReadPrimaryFile( InputFile, p, m_FAST, OverrideAbortErrLev, ErrS OutFileFmt = OutFileFmt / 2 ! integer division if (OutFileFmt /= 0) then - call SetErrStat( ErrID_Fatal, "OutFileFmt must be 0, 1, 2, or 3.",ErrStat,ErrMsg,RoutineName) + call SetErrStat( ErrID_Fatal, "OutFileFmt must be 0, 1, 2, 3, 4, or 5.",ErrStat,ErrMsg,RoutineName) call cleanup() return end if @@ -3292,12 +3428,12 @@ end subroutine cleanup END SUBROUTINE FAST_ReadPrimaryFile !---------------------------------------------------------------------------------------------------------------------------------- !> This subroutine sets up some of the information needed for plotting VTK surfaces. It initializes only the data needed before -!! HD initialization. (HD needs some of this data so it can return the wave elevation data we want.) -SUBROUTINE SetVTKParameters_B4HD(p_FAST, InitOutData_ED, InitInData_HD, BD, ErrStat, ErrMsg) +!! SeaState initialization. (SeaSt needs some of this data so it can return the wave elevation data we want.) +SUBROUTINE SetVTKParameters_B4SeaSt(p_FAST, InitOutData_ED, InitInData_SeaSt, BD, ErrStat, ErrMsg) TYPE(FAST_ParameterType), INTENT(INOUT) :: p_FAST !< The parameters of the glue code TYPE(ED_InitOutputType), INTENT(IN ) :: InitOutData_ED !< The initialization output from structural dynamics module - TYPE(HydroDyn_InitInputType), INTENT(INOUT) :: InitInData_HD !< The initialization input to HydroDyn + TYPE(SeaSt_InitInputType), INTENT(INOUT) :: InitInData_SeaSt !< The initialization input to SeaState TYPE(BeamDyn_Data), INTENT(IN ) :: BD !< BeamDyn data INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None @@ -3308,7 +3444,7 @@ SUBROUTINE SetVTKParameters_B4HD(p_FAST, InitOutData_ED, InitInData_HD, BD, ErrS INTEGER(IntKi) :: i, j, n INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SetVTKParameters_B4HD' + CHARACTER(*), PARAMETER :: RoutineName = 'SetVTKParameters_B4SeaSt' ErrStat = ErrID_None @@ -3329,12 +3465,12 @@ SUBROUTINE SetVTKParameters_B4HD(p_FAST, InitOutData_ED, InitInData_HD, BD, ErrS !........................................................................................................ ! initialize wave elevation data: - if ( p_FAST%CompHydro == Module_HD ) then + if ( p_FAST%CompSeaSt == Module_SeaSt ) then p_FAST%VTK_surface%NWaveElevPts(1) = 25 p_FAST%VTK_surface%NWaveElevPts(2) = 25 - call allocAry( InitInData_HD%WaveElevXY, 2, p_FAST%VTK_surface%NWaveElevPts(1)*p_FAST%VTK_surface%NWaveElevPts(2), 'WaveElevXY', ErrStat2, ErrMsg2) + call allocAry( InitInData_SeaSt%WaveElevXY, 2, p_FAST%VTK_surface%NWaveElevPts(1)*p_FAST%VTK_surface%NWaveElevPts(2), 'WaveElevXY', ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if (ErrStat >= AbortErrLev) return @@ -3346,8 +3482,8 @@ SUBROUTINE SetVTKParameters_B4HD(p_FAST, InitOutData_ED, InitInData_HD, BD, ErrS n = 1 do i=1,p_FAST%VTK_surface%NWaveElevPts(1) do j=1,p_FAST%VTK_surface%NWaveElevPts(2) - InitInData_HD%WaveElevXY(1,n) = dx*(i-1) - WidthBy2 !+ p_FAST%TurbinePos(1) ! HD takes p_FAST%TurbinePos into account already - InitInData_HD%WaveElevXY(2,n) = dy*(j-1) - WidthBy2 !+ p_FAST%TurbinePos(2) + InitInData_SeaSt%WaveElevXY(1,n) = dx*(i-1) - WidthBy2 !+ p_FAST%TurbinePos(1) ! HD takes p_FAST%TurbinePos into account already + InitInData_SeaSt%WaveElevXY(2,n) = dy*(j-1) - WidthBy2 !+ p_FAST%TurbinePos(2) n = n+1 end do end do @@ -3355,16 +3491,16 @@ SUBROUTINE SetVTKParameters_B4HD(p_FAST, InitOutData_ED, InitInData_HD, BD, ErrS end if -END SUBROUTINE SetVTKParameters_B4HD +END SUBROUTINE SetVTKParameters_B4SeaSt !---------------------------------------------------------------------------------------------------------------------------------- !> This subroutine sets up the information needed for plotting VTK surfaces. -SUBROUTINE SetVTKParameters(p_FAST, InitOutData_ED, InitOutData_AD, InitInData_HD, InitOutData_HD, ED, BD, AD, HD, ErrStat, ErrMsg) +SUBROUTINE SetVTKParameters(p_FAST, InitOutData_ED, InitOutData_AD, InitInData_SeaSt, InitOutData_SeaSt, ED, BD, AD, HD, ErrStat, ErrMsg) TYPE(FAST_ParameterType), INTENT(INOUT) :: p_FAST !< The parameters of the glue code TYPE(ED_InitOutputType), INTENT(IN ) :: InitOutData_ED !< The initialization output from structural dynamics module TYPE(AD_InitOutputType), INTENT(INOUT) :: InitOutData_AD !< The initialization output from AeroDyn - TYPE(HydroDyn_InitInputType), INTENT(INOUT) :: InitInData_HD !< The initialization input to HydroDyn - TYPE(HydroDyn_InitOutputType),INTENT(INOUT) :: InitOutData_HD !< The initialization output from HydroDyn + TYPE(SeaSt_InitInputType), INTENT(INOUT) :: InitInData_SeaSt !< The initialization input to SeaState + TYPE(SeaSt_InitOutputType), INTENT(INOUT) :: InitOutData_SeaSt !< The initialization output from SeaState TYPE(ElastoDyn_Data), INTENT(IN ) :: ED !< ElastoDyn data TYPE(BeamDyn_Data), INTENT(IN ) :: BD !< BeamDyn data TYPE(AeroDyn_Data), INTENT(IN ) :: AD !< AeroDyn data @@ -3413,19 +3549,19 @@ SUBROUTINE SetVTKParameters(p_FAST, InitOutData_ED, InitOutData_AD, InitInData_H ! initialize the vtk data p_FAST%VTK_Surface%NumSectors = 25 - ! NOTE: we set p_FAST%VTK_Surface%GroundRad and p_FAST%VTK_Surface%HubRad in SetVTKParameters_B4HD + ! NOTE: we set p_FAST%VTK_Surface%GroundRad and p_FAST%VTK_Surface%HubRad in SetVTKParameters_B4SeaSt ! write the ground or seabed reference polygon: RefPoint = p_FAST%TurbinePos - if (p_FAST%CompHydro == MODULE_HD) then + if (p_FAST%CompSeaSt == MODULE_SeaSt) then RefLengths = p_FAST%VTK_Surface%GroundRad*VTK_GroundFactor/2.0_SiKi ! note that p_FAST%TurbinePos(3) must be 0 for offshore turbines - RefPoint(3) = p_FAST%TurbinePos(3) - InitOutData_HD%WtrDpth + RefPoint(3) = p_FAST%TurbinePos(3) - p_FAST%WtrDpth call WrVTK_Ground ( RefPoint, RefLengths, trim(p_FAST%VTK_OutFileRoot) // '.SeabedSurface', ErrStat2, ErrMsg2 ) - RefPoint(3) = p_FAST%TurbinePos(3) - InitOutData_HD%MSL2SWL + RefPoint(3) = p_FAST%TurbinePos(3) - p_FAST%MSL2SWL call WrVTK_Ground ( RefPoint, RefLengths, trim(p_FAST%VTK_OutFileRoot) // '.StillWaterSurface', ErrStat2, ErrMsg2 ) else RefLengths = p_FAST%VTK_Surface%GroundRad !array = scalar @@ -3536,20 +3672,15 @@ SUBROUTINE SetVTKParameters(p_FAST, InitOutData_ED, InitOutData_AD, InitInData_H !....................... !bjj: interpolate here instead of each time step? - if ( allocated(InitOutData_HD%WaveElevSeries) ) then - call move_alloc( InitInData_HD%WaveElevXY, p_FAST%VTK_Surface%WaveElevXY ) - call move_alloc( InitOutData_HD%WaveElevSeries, p_FAST%VTK_Surface%WaveElev ) + if ( allocated(InitOutData_SeaSt%WaveElevSeries) ) then + call move_alloc( InitInData_SeaSt%WaveElevXY, p_FAST%VTK_Surface%WaveElevXY ) + call move_alloc( InitOutData_SeaSt%WaveElevSeries, p_FAST%VTK_Surface%WaveElev ) ! put the following lines in loops to avoid stack-size issues: do k=1,size(p_FAST%VTK_Surface%WaveElevXY,2) p_FAST%VTK_Surface%WaveElevXY(:,k) = p_FAST%VTK_Surface%WaveElevXY(:,k) + p_FAST%TurbinePos(1:2) end do - ! note that p_FAST%TurbinePos(3) must be 0 for offshore turbines - !do k=1,size(p_FAST%VTK_Surface%WaveElev,2) - ! p_FAST%VTK_Surface%WaveElev(:,k) = p_FAST%VTK_Surface%WaveElev(:,k) + p_FAST%TurbinePos(3) ! not sure this is really accurate if p_FAST%TurbinePos(3) is non-zero - !end do - end if !....................... @@ -3938,71 +4069,19 @@ SUBROUTINE FAST_WrSum( p_FAST, y_FAST, MeshMapData, ErrStat, ErrMsg ) WRITE (y_FAST%UnSum,'(/A)') 'FAST Summary File' WRITE (y_FAST%UnSum,'(/A)') TRIM( y_FAST%FileDescLines(1) ) - WRITE (y_FAST%UnSum,'(2X,A)' ) 'compiled with' + WRITE (y_FAST%UnSum,'(2X,A)' ) 'run with' Fmt = '(4x,A)' WRITE (y_FAST%UnSum,Fmt) TRIM( GetNVD( NWTC_Ver ) ) - WRITE (y_FAST%UnSum,Fmt) TRIM( GetNVD( y_FAST%Module_Ver( Module_ED ) ) ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_BD ) ) - IF ( p_FAST%CompElast /= Module_BD ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_IfW ) ) - IF ( p_FAST%CompInflow /= Module_IfW ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - ! I'm not going to write the openfoam module info to the summary file - !DescStr = GetNVD( y_FAST%Module_Ver( Module_OpFM ) ) - !IF ( p_FAST%CompInflow /= Module_OpFM ) DescStr = TRIM(DescStr)//NotUsedTxt - !WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_AD14 ) ) - IF ( p_FAST%CompAero /= Module_AD14 ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_AD ) ) - IF ( p_FAST%CompAero /= Module_AD ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_SrvD ) ) - IF ( p_FAST%CompServo /= Module_SrvD ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_HD ) ) - IF ( p_FAST%CompHydro /= Module_HD ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_SD ) ) - IF ( p_FAST%CompSub /= Module_SD ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_ExtPtfm ) ) - IF ( p_FAST%CompSub /= Module_ExtPtfm ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_MAP ) ) - IF ( p_FAST%CompMooring /= Module_MAP ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_FEAM ) ) - IF ( p_FAST%CompMooring /= Module_FEAM ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_MD ) ) - IF ( p_FAST%CompMooring /= Module_MD ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_Orca ) ) - IF ( p_FAST%CompMooring /= Module_Orca ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) - - DescStr = GetNVD( y_FAST%Module_Ver( Module_IceF ) ) - IF ( p_FAST%CompIce /= Module_IceF ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) + DO I = 2,NumModules + IF (p_FAST%ModuleInitialized(I)) THEN + WRITE (y_FAST%UnSum,Fmt) TRIM( GetNVD( y_FAST%Module_Ver( I ) ) ) + !ELSE + ! DescStr = GetNVD( y_FAST%Module_Ver( I ) ) + ! WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr )//NotUsedTxt + END IF + END DO - DescStr = GetNVD( y_FAST%Module_Ver( Module_IceD ) ) - IF ( p_FAST%CompIce /= Module_IceD ) DescStr = TRIM(DescStr)//NotUsedTxt - WRITE (y_FAST%UnSum,Fmt) TRIM( DescStr ) !.......................... Information from FAST input File ...................................... @@ -4153,13 +4232,13 @@ SUBROUTINE FAST_Solution0_T(Turbine, ErrStat, ErrMsg) CALL FAST_Solution0(Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, Turbine%SC_DX,& - Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & + Turbine%SeaSt, Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrStat, ErrMsg ) END SUBROUTINE FAST_Solution0_T !---------------------------------------------------------------------------------------------------------------------------------- !> Routine that calls CalcOutput for the first time of the simulation (at t=0). After the initial solve, data arrays are initialized. -SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, HD, SD, ExtPtfm, & +SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, SeaSt, HD, SD, ExtPtfm, & MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat, ErrMsg ) TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< Parameters for the glue code @@ -4174,6 +4253,7 @@ SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, O TYPE(InflowWind_Data), INTENT(INOUT) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(INOUT) :: OpFM !< OpenFOAM data TYPE(SCDataEx_Data), INTENT(INOUT) :: SC_DX !< Supercontroller exchange data + TYPE(SeaState_Data), INTENT(INOUT) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(INOUT) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm_MCKF data @@ -4217,8 +4297,13 @@ SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, O ! the initial ServoDyn and IfW/Lidar inputs from Simulink: IF ( p_FAST%CompServo == Module_SrvD ) CALL SrvD_SetExternalInputs( p_FAST, m_FAST, SrvD%Input(1) ) - - + + if ( P_FAST%CompSeaSt == Module_SeaSt .and. y_FAST%WriteThisStep) then + ! note: SeaState has no inputs and only calculates WriteOutputs, so we don't need to call CalcOutput unless we are writing to the file + call SeaSt_CalcOutput( t_initial, SeaSt%u, SeaSt%p, SeaSt%x(1), SeaSt%xd(1), SeaSt%z(1), SeaSt%OtherSt(1), SeaSt%y, SeaSt%m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + end if + CALL CalcOutputs_And_SolveForInputs( n_t_global, t_initial, STATE_CURR, m_FAST%calcJacobian, m_FAST%NextJacCalcTime, & p_FAST, m_FAST, y_FAST%WriteThisStep, ED, BD, SrvD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, & MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat2, ErrMsg2 ) @@ -4233,14 +4318,14 @@ SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, O ! Check to see if we should output data this time step: !---------------------------------------------------------------------------------------- - CALL WriteOutputToFile(n_t_global_next, t_initial, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat2, ErrMsg2) + CALL WriteOutputToFile(n_t_global_next, t_initial, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat2, ErrMsg2) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) ! turn off VTK output when if (p_FAST%WrVTK == VTK_InitOnly) then ! Write visualization data for initialization (and also note that we're ignoring any errors that occur doing so) - call WriteVTK(t_initial, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) + call WriteVTK(t_initial, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) end if @@ -4727,13 +4812,13 @@ SUBROUTINE FAST_Solution_T(t_initial, n_t_global, Turbine, ErrStat, ErrMsg ) CALL FAST_Solution(t_initial, n_t_global, Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, Turbine%SC_DX, & - Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & + Turbine%SeaSt, Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrStat, ErrMsg ) END SUBROUTINE FAST_Solution_T !---------------------------------------------------------------------------------------------------------------------------------- !> This routine takes data from n_t_global and gets values at n_t_global + 1 -SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, HD, SD, ExtPtfm, & +SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SC_DX, SeaSt, HD, SD, ExtPtfm, & MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat, ErrMsg ) REAL(DbKi), INTENT(IN ) :: t_initial !< initial time @@ -4751,6 +4836,7 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, TYPE(InflowWind_Data), INTENT(INOUT) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(INOUT) :: OpFM !< OpenFOAM data TYPE(SCDataEx_Data), INTENT(INOUT) :: SC_DX !< Supercontroller Exchange data + TYPE(SeaState_Data), INTENT(INOUT) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(INOUT) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm_MCKF data @@ -4893,6 +4979,12 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, call SC_DX_SetInputs(p_FAST, SrvD%y, SC_DX, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) end if + + if ( P_FAST%CompSeaSt == Module_SeaSt .and. y_FAST%WriteThisStep) then + ! note: SeaState has no inputs and only calculates WriteOutputs, so we don't need to call CalcOutput unless we are writing to the file + call SeaSt_CalcOutput( t_global_next, SeaSt%u, SeaSt%p, SeaSt%x(1), SeaSt%xd(1), SeaSt%z(1), SeaSt%OtherSt(1), SeaSt%y, SeaSt%m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + end if !++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ !! ## Step 3: Save all final variables (advance to next time) @@ -4975,6 +5067,7 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) END IF + ! SeaState has no states ! HydroDyn: copy final predictions to actual states IF ( p_FAST%CompHydro == Module_HD ) THEN @@ -5085,9 +5178,8 @@ SUBROUTINE FAST_Solution(t_initial, n_t_global, p_FAST, y_FAST, m_FAST, ED, BD, !---------------------------------------------------------------------------------------- !! Check to see if we should output data this time step: - !---------------------------------------------------------------------------------------- - - CALL WriteOutputToFile(n_t_global_next, t_global_next, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, & + !---------------------------------------------------------------------------------------- + CALL WriteOutputToFile(n_t_global_next, t_global_next, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, & SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat2, ErrMsg2) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) @@ -5124,7 +5216,7 @@ END FUNCTION NeedWriteOutput !> This routine determines if it's time to write to the output files--based on a previous call to fast_subs::needwriteoutput--, and !! calls the routine to write to the files with the output data. It should be called after all the output solves for a given time !! have been completed, and assumes y_FAST\%WriteThisStep has been set. -SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, & +SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, & SrvD, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat, ErrMsg) !............................................................................................................................... INTEGER(IntKi), INTENT(IN ) :: n_t_global !< Current global time step @@ -5139,6 +5231,7 @@ SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, TYPE(AeroDyn_Data), INTENT(IN ) :: AD !< AeroDyn data TYPE(InflowWind_Data), INTENT(IN ) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(IN ) :: OpFM !< OpenFOAM data + TYPE(SeaState_Data), INTENT(IN ) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(IN ) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(IN ) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(IN ) :: ExtPtfm !< ExtPtfm_MCKF data @@ -5166,7 +5259,7 @@ SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, ! Generate glue-code output file CALL WrOutputLine( t_global, p_FAST, y_FAST, IfW%y%WriteOutput, OpFM%y%WriteOutput, ED%y%WriteOutput, & - AD%y, SrvD%y%WriteOutput, HD%y%WriteOutput, SD%y%WriteOutput, ExtPtfm%y%WriteOutput, MAPp%y%WriteOutput, & + AD%y, SrvD%y%WriteOutput, SeaSt%y%WriteOutput, HD%y%WriteOutput, SD%y%WriteOutput, ExtPtfm%y%WriteOutput, MAPp%y%WriteOutput, & FEAM%y%WriteOutput, MD%y%WriteOutput, Orca%y%WriteOutput, IceF%y%WriteOutput, IceD%y, BD%y, ErrStat, ErrMsg ) ENDIF @@ -5174,7 +5267,7 @@ SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, ! Write visualization data (and also note that we're ignoring any errors that occur doing so) IF ( p_FAST%WrVTK == VTK_Animate ) THEN IF ( MOD( n_t_global, p_FAST%n_VTKTime ) == 0 ) THEN - call WriteVTK(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) + call WriteVTK(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) END IF END IF @@ -5182,7 +5275,7 @@ SUBROUTINE WriteOutputToFile(n_t_global, t_global, p_FAST, y_FAST, ED, BD, AD14, END SUBROUTINE WriteOutputToFile !---------------------------------------------------------------------------------------------------------------------------------- !> This routine writes the module output to the primary output file(s). -SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, SrvDOutput, HDOutput, SDOutput, ExtPtfmOutput,& +SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, SrvDOutput, SeaStOutput, HDOutput, SDOutput, ExtPtfmOutput,& MAPOutput, FEAMOutput, MDOutput, OrcaOutput, IceFOutput, y_IceD, y_BD, ErrStat, ErrMsg) IMPLICIT NONE @@ -5198,6 +5291,7 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_A REAL(ReKi), ALLOCATABLE, INTENT(IN) :: EDOutput (:) !< ElastoDyn WriteOutput values TYPE(AD_OutputType), INTENT(IN) :: y_AD !< AeroDyn outputs (WriteOutput values are subset of allocated Rotors) REAL(ReKi), ALLOCATABLE, INTENT(IN) :: SrvDOutput (:) !< ServoDyn WriteOutput values + REAL(ReKi), ALLOCATABLE, INTENT(IN) :: SeaStOutput (:) !< SeaState WriteOutput values REAL(ReKi), ALLOCATABLE, INTENT(IN) :: HDOutput (:) !< HydroDyn WriteOutput values REAL(ReKi), ALLOCATABLE, INTENT(IN) :: SDOutput (:) !< SubDyn WriteOutput values REAL(ReKi), ALLOCATABLE, INTENT(IN) :: ExtPtfmOutput (:) !< ExtPtfm_MCKF WriteOutput values @@ -5222,7 +5316,7 @@ SUBROUTINE WrOutputLine( t, p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_A ErrStat = ErrID_None ErrMsg = '' - CALL FillOutputAry(p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, SrvDOutput, HDOutput, SDOutput, ExtPtfmOutput, & + CALL FillOutputAry(p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, SrvDOutput, SeaStOutput, HDOutput, SDOutput, ExtPtfmOutput, & MAPOutput, FEAMOutput, MDOutput, OrcaOutput, IceFOutput, y_IceD, y_BD, OutputAry) IF (p_FAST%WrTxtOutFile) THEN @@ -5283,7 +5377,7 @@ SUBROUTINE FillOutputAry_T(Turbine, Outputs) CALL FillOutputAry(Turbine%p_FAST, Turbine%y_FAST, Turbine%IfW%y%WriteOutput, Turbine%OpFM%y%WriteOutput, & Turbine%ED%y%WriteOutput, Turbine%AD%y, Turbine%SrvD%y%WriteOutput, & - Turbine%HD%y%WriteOutput, Turbine%SD%y%WriteOutput, Turbine%ExtPtfm%y%WriteOutput, Turbine%MAP%y%WriteOutput, & + Turbine%SeaSt%y%WriteOutput, Turbine%HD%y%WriteOutput, Turbine%SD%y%WriteOutput, Turbine%ExtPtfm%y%WriteOutput, Turbine%MAP%y%WriteOutput, & Turbine%FEAM%y%WriteOutput, Turbine%MD%y%WriteOutput, Turbine%Orca%y%WriteOutput, & Turbine%IceF%y%WriteOutput, Turbine%IceD%y, Turbine%BD%y, Outputs) @@ -5291,7 +5385,7 @@ END SUBROUTINE FillOutputAry_T !---------------------------------------------------------------------------------------------------------------------------------- !> This routine concatenates all of the WriteOutput values from the module Output into one array to be written to the FAST !! output file. -SUBROUTINE FillOutputAry(p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, SrvDOutput, HDOutput, SDOutput, ExtPtfmOutput, & +SUBROUTINE FillOutputAry(p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, SrvDOutput, SeaStOutput, HDOutput, SDOutput, ExtPtfmOutput, & MAPOutput, FEAMOutput, MDOutput, OrcaOutput, IceFOutput, y_IceD, y_BD, OutputAry) TYPE(FAST_ParameterType), INTENT(IN) :: p_FAST !< Glue-code simulation parameters @@ -5302,6 +5396,7 @@ SUBROUTINE FillOutputAry(p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, REAL(ReKi), ALLOCATABLE, INTENT(IN) :: EDOutput (:) !< ElastoDyn WriteOutput values TYPE(AD_OutputType), INTENT(IN) :: y_AD !< AeroDyn outputs (WriteOutput values are subset of allocated Rotors) REAL(ReKi), ALLOCATABLE, INTENT(IN) :: SrvDOutput (:) !< ServoDyn WriteOutput values + REAL(ReKi), ALLOCATABLE, INTENT(IN) :: SeaStOutput (:) !< SeaState WriteOutput values REAL(ReKi), ALLOCATABLE, INTENT(IN) :: HDOutput (:) !< HydroDyn WriteOutput values REAL(ReKi), ALLOCATABLE, INTENT(IN) :: SDOutput (:) !< SubDyn WriteOutput values REAL(ReKi), ALLOCATABLE, INTENT(IN) :: ExtPtfmOutput (:) !< ExtPtfm_MCKF WriteOutput values @@ -5371,6 +5466,12 @@ SUBROUTINE FillOutputAry(p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, indxNext = IndxLast + 1 END IF + IF ( y_FAST%numOuts(Module_SeaSt) > 0 ) THEN + indxLast = indxNext + SIZE(SeaStOutput) - 1 + OutputAry(indxNext:indxLast) = SeaStOutput + indxNext = IndxLast + 1 + END IF + IF ( y_FAST%numOuts(Module_HD) > 0 ) THEN indxLast = indxNext + SIZE(HDOutput) - 1 OutputAry(indxNext:indxLast) = HDOutput @@ -5419,7 +5520,7 @@ SUBROUTINE FillOutputAry(p_FAST, y_FAST, IfWOutput, OpFMOutput, EDOutput, y_AD, END SUBROUTINE FillOutputAry !---------------------------------------------------------------------------------------------------------------------------------- -SUBROUTINE WriteVTK(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) +SUBROUTINE WriteVTK(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) REAL(DbKi), INTENT(IN ) :: t_global !< Current global time TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< Parameters for the glue code TYPE(FAST_OutputFileType),INTENT(INOUT) :: y_FAST !< Output variables for the glue code (only because we're updating VTK_LastWaveIndx) @@ -5431,6 +5532,7 @@ SUBROUTINE WriteVTK(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM TYPE(AeroDyn_Data), INTENT(IN ) :: AD !< AeroDyn data TYPE(InflowWind_Data), INTENT(IN ) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(IN ) :: OpFM !< OpenFOAM data + TYPE(SeaState_Data), INTENT(IN ) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(IN ) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(IN ) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(IN ) :: ExtPtfm !< ExtPtfm_MCKF data @@ -5448,7 +5550,7 @@ SUBROUTINE WriteVTK(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM IF ( p_FAST%VTK_Type == VTK_Surf ) THEN - CALL WrVTK_Surfaces(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, HD, SD, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) + CALL WrVTK_Surfaces(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, SeaSt, HD, SD, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) ELSE IF ( p_FAST%VTK_Type == VTK_Basic ) THEN CALL WrVTK_BasicMeshes(p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, HD, SD, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) ELSE IF ( p_FAST%VTK_Type == VTK_All ) THEN @@ -5818,7 +5920,7 @@ END SUBROUTINE WrVTK_BasicMeshes !---------------------------------------------------------------------------------------------------------------------------------- !> This routine writes a minimal subset of meshes with surfaces to VTK-formatted files. It doesn't bother with !! returning an error code. -SUBROUTINE WrVTK_Surfaces(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, HD, SD, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) +SUBROUTINE WrVTK_Surfaces(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, SeaSt, HD, SD, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) use FVW_IO, only: WrVTK_FVW REAL(DbKi), INTENT(IN ) :: t_global !< Current global time @@ -5832,6 +5934,7 @@ SUBROUTINE WrVTK_Surfaces(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW TYPE(AeroDyn_Data), INTENT(IN ) :: AD !< AeroDyn data TYPE(InflowWind_Data), INTENT(IN ) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(IN ) :: OpFM !< OpenFOAM data + TYPE(SeaState_Data), INTENT(IN ) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(IN ) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(IN ) :: SD !< SubDyn data TYPE(MAP_Data), INTENT(IN ) :: MAPp !< MAP data @@ -5856,7 +5959,7 @@ SUBROUTINE WrVTK_Surfaces(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW ! Ground (written at initialization) ! Wave elevation - if ( allocated( p_FAST%VTK_Surface%WaveElev ) ) call WrVTK_WaveElev( t_global, p_FAST, y_FAST, HD) + if ( allocated( p_FAST%VTK_Surface%WaveElev ) ) call WrVTK_WaveElev( t_global, p_FAST, y_FAST, SeaSt) if (allocated(ED%Input)) then ! Nacelle @@ -5949,13 +6052,13 @@ SUBROUTINE WrVTK_Surfaces(t_global, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW END SUBROUTINE WrVTK_Surfaces !---------------------------------------------------------------------------------------------------------------------------------- !> This subroutine writes the wave elevation data for a given time step -SUBROUTINE WrVTK_WaveElev(t_global, p_FAST, y_FAST, HD) +SUBROUTINE WrVTK_WaveElev(t_global, p_FAST, y_FAST, SeaSt) REAL(DbKi), INTENT(IN ) :: t_global !< Current global time TYPE(FAST_ParameterType), INTENT(IN ) :: p_FAST !< Parameters for the glue code TYPE(FAST_OutputFileType),INTENT(INOUT) :: y_FAST !< Output variables for the glue code - TYPE(HydroDyn_Data), INTENT(IN ) :: HD !< HydroDyn data + TYPE(SeaState_Data), INTENT(IN ) :: SeaSt !< SeaState data ! local variables INTEGER(IntKi) :: Un ! fortran unit number @@ -5994,7 +6097,7 @@ SUBROUTINE WrVTK_WaveElev(t_global, p_FAST, y_FAST, HD) ! I'm not going to interpolate in time; I'm just going to get the index of the closest wave time value t = REAL(t_global,SiKi) - call GetWaveElevIndx( t, HD%p%WaveTime, y_FAST%VTK_LastWaveIndx ) + call GetWaveElevIndx( t, SeaSt%p%WaveTime, y_FAST%VTK_LastWaveIndx ) n = 1 do ix=1,p_FAST%VTK_surface%NWaveElevPts(1) @@ -6110,8 +6213,8 @@ SUBROUTINE WriteInputMeshesToFile(u_ED, u_AD, u_SD, u_HD, u_MAP, u_BD, FileName, TYPE(MAP_InputType), INTENT(IN) :: u_MAP !< MAP inputs TYPE(BD_InputType), INTENT(IN) :: u_BD(:) !< BeamDyn inputs CHARACTER(*), INTENT(IN) :: FileName !< Name of file to write this information to - INTEGER(IntKi) :: ErrStat !< Error status of the operation - CHARACTER(*) :: ErrMsg !< Error message if ErrStat /= ErrID_None + INTEGER(IntKi), INTENT(OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT(OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None INTEGER(IntKi) :: unOut INTEGER(IntKi) :: K_local @@ -6402,7 +6505,9 @@ SUBROUTINE ExitThisProgram_T( Turbine, ErrLevel_in, StopTheProgram, ErrLocMsg, S LOGICAL, OPTIONAL, INTENT(IN) :: SkipRunTimeMsg !< an optional message describing run-time stats LOGICAL :: SkipRunTimes - + INTEGER(IntKi) :: ErrStat + CHARACTER(ErrMsgLen) :: ErrMsg + IF (PRESENT(SkipRunTimeMsg)) THEN SkipRunTimes = SkipRunTimeMsg ELSE @@ -6414,17 +6519,21 @@ SUBROUTINE ExitThisProgram_T( Turbine, ErrLevel_in, StopTheProgram, ErrLocMsg, S CALL ExitThisProgram( Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, & - Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & + Turbine%SeaSt, Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrLevel_in, StopTheProgram, ErrLocMsg, SkipRunTimes ) ELSE CALL ExitThisProgram( Turbine%p_FAST, Turbine%y_FAST, Turbine%m_FAST, & Turbine%ED, Turbine%BD, Turbine%SrvD, Turbine%AD14, Turbine%AD, Turbine%IfW, Turbine%OpFM, & - Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & + Turbine%SeaSt, Turbine%HD, Turbine%SD, Turbine%ExtPtfm, Turbine%MAP, Turbine%FEAM, Turbine%MD, Turbine%Orca, & Turbine%IceF, Turbine%IceD, Turbine%MeshMapData, ErrLevel_in, StopTheProgram, SkipRunTimeMsg=SkipRunTimes ) END IF + + + CALL FAST_DestroyTurbineType( Turbine, ErrStat, ErrMsg) ! just in case we missed some data in ExitThisProgram() + END SUBROUTINE ExitThisProgram_T !---------------------------------------------------------------------------------------------------------------------------------- @@ -6432,7 +6541,7 @@ END SUBROUTINE ExitThisProgram_T !! main program. If there was an error, it also aborts. Otherwise, it prints the run times and performs a normal exit. !! This routine should not be called from glue code (e.g., FAST_Prog.f90) or ExitThisProgram_T only. It should not be called in any !! of these driver routines. -SUBROUTINE ExitThisProgram( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, & +SUBROUTINE ExitThisProgram( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, & MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrLevel_in, StopTheProgram, ErrLocMsg, SkipRunTimeMsg ) !............................................................................................................................... @@ -6448,6 +6557,7 @@ SUBROUTINE ExitThisProgram( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, TYPE(AeroDyn_Data), INTENT(INOUT) :: AD !< AeroDyn data TYPE(InflowWind_Data), INTENT(INOUT) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(INOUT) :: OpFM !< OpenFOAM data + TYPE(SeaState_Data), INTENT(INOUT) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(INOUT) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm_MCKF data @@ -6497,7 +6607,7 @@ SUBROUTINE ExitThisProgram( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, ! Destroy all data associated with FAST variables: - CALL FAST_DestroyAll( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat2, ErrMsg2 ) + CALL FAST_DestroyAll( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat2, ErrMsg2 ) IF (ErrStat2 /= ErrID_None) THEN CALL WrScr( NewLine//RoutineName//':'//TRIM(ErrMsg2)//NewLine ) ErrorLevel = MAX(ErrorLevel,ErrStat2) @@ -6760,7 +6870,7 @@ SUBROUTINE FAST_EndMods( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, HD END SUBROUTINE FAST_EndMods !---------------------------------------------------------------------------------------------------------------------------------- !> This routine calls the destroy routines for each module. (It is basically a duplicate of FAST_DestroyTurbineType().) -SUBROUTINE FAST_DestroyAll( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, & +SUBROUTINE FAST_DestroyAll( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, & MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, ErrStat, ErrMsg ) TYPE(FAST_ParameterType), INTENT(INOUT) :: p_FAST !< Parameters for the glue code @@ -6774,6 +6884,7 @@ SUBROUTINE FAST_DestroyAll( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, TYPE(AeroDyn_Data), INTENT(INOUT) :: AD !< AeroDyn data TYPE(InflowWind_Data), INTENT(INOUT) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(INOUT) :: OpFM !< OpenFOAM data + TYPE(SeaState_Data), INTENT(INOUT) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(INOUT) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm data @@ -6842,6 +6953,10 @@ SUBROUTINE FAST_DestroyAll( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, CALL FAST_DestroyOpenFOAM_Data( OpFM, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + ! SeaState + CALL FAST_DestroySeaState_Data( SeaSt, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + ! HydroDyn CALL FAST_DestroyHydroDyn_Data( HD, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -6854,7 +6969,6 @@ SUBROUTINE FAST_DestroyAll( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, CALL FAST_DestroyExtPtfm_Data( ExtPtfm, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - ! MAP CALL FAST_DestroyMAP_Data( MAPp, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -6871,7 +6985,6 @@ SUBROUTINE FAST_DestroyAll( p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, CALL FAST_DestroyOrcaFlex_Data( Orca, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - ! IceFloe CALL FAST_DestroyIceFloe_Data( IceF, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -7062,7 +7175,8 @@ SUBROUTINE FAST_CreateCheckpoint_T(t_initial, n_t_global, NumTurbines, Turbine, Turbine%SrvD%m%dll_data%SimStatus = Turbine%SrvD%m%dll_data%avrSWAP( 1) end if END IF - + + call cleanup() contains @@ -7265,7 +7379,10 @@ SUBROUTINE FAST_RestoreFromCheckpoint_T(t_initial, n_t_global, NumTurbines, Turb ! deal with sibling meshes here: ! (ignoring for now; they are not going to be siblings on restart) + + Turbine%HD%p%PointsToSeaState = .false. ! since the pointers aren't pointing to the same data as SeaState after restart, set this to avoid memory leaks and deallocation problems + ! deal with files that were open: IF (Turbine%p_FAST%WrTxtOutFile) THEN CALL OpenFunkFileAppend ( Turbine%y_FAST%UnOu, TRIM(Turbine%p_FAST%OutFileRoot)//'.out', ErrStat2, ErrMsg2) @@ -7325,7 +7442,7 @@ SUBROUTINE FAST_RestoreForVTKModeShape_Tary(t_initial, Turbine, InputFileName, E CALL FAST_RestoreForVTKModeShape_T(t_initial, Turbine(i_turb)%p_FAST, Turbine(i_turb)%y_FAST, Turbine(i_turb)%m_FAST, & Turbine(i_turb)%ED, Turbine(i_turb)%BD, Turbine(i_turb)%SrvD, Turbine(i_turb)%AD14, Turbine(i_turb)%AD, Turbine(i_turb)%IfW, Turbine(i_turb)%OpFM, & - Turbine(i_turb)%HD, Turbine(i_turb)%SD, Turbine(i_turb)%ExtPtfm, Turbine(i_turb)%MAP, Turbine(i_turb)%FEAM, Turbine(i_turb)%MD, Turbine(i_turb)%Orca, & + Turbine(i_turb)%SeaSt, Turbine(i_turb)%HD, Turbine(i_turb)%SD, Turbine(i_turb)%ExtPtfm, Turbine(i_turb)%MAP, Turbine(i_turb)%FEAM, Turbine(i_turb)%MD, Turbine(i_turb)%Orca, & Turbine(i_turb)%IceF, Turbine(i_turb)%IceD, Turbine(i_turb)%MeshMapData, trim(InputFileName), ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) END DO @@ -7335,7 +7452,7 @@ END SUBROUTINE FAST_RestoreForVTKModeShape_Tary !---------------------------------------------------------------------------------------------------------------------------------- !> This routine calculates the motions generated by mode shapes and outputs VTK data for it -SUBROUTINE FAST_RestoreForVTKModeShape_T(t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, HD, SD, ExtPtfm, & +SUBROUTINE FAST_RestoreForVTKModeShape_T(t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, & MAPp, FEAM, MD, Orca, IceF, IceD, MeshMapData, InputFileName, ErrStat, ErrMsg ) REAL(DbKi), INTENT(IN ) :: t_initial !< initial time @@ -7351,6 +7468,7 @@ SUBROUTINE FAST_RestoreForVTKModeShape_T(t_initial, p_FAST, y_FAST, m_FAST, ED, TYPE(AeroDyn_Data), INTENT(INOUT) :: AD !< AeroDyn data TYPE(InflowWind_Data), INTENT(INOUT) :: IfW !< InflowWind data TYPE(OpenFOAM_Data), INTENT(INOUT) :: OpFM !< OpenFOAM data + TYPE(SeaState_Data), INTENT(INOUT) :: SeaSt !< SeaState data TYPE(HydroDyn_Data), INTENT(INOUT) :: HD !< HydroDyn data TYPE(SubDyn_Data), INTENT(INOUT) :: SD !< SubDyn data TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm !< ExtPtfm_MCKF data @@ -7456,7 +7574,7 @@ SUBROUTINE FAST_RestoreForVTKModeShape_T(t_initial, p_FAST, y_FAST, m_FAST, ED, CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) IF (ErrStat >= AbortErrLev) RETURN - call WriteVTK(m_FAST%Lin%LinTimes(iLinTime), p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) + call WriteVTK(m_FAST%Lin%LinTimes(iLinTime), p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) end do ! iLinTime case (2) @@ -7488,7 +7606,7 @@ SUBROUTINE FAST_RestoreForVTKModeShape_T(t_initial, p_FAST, y_FAST, m_FAST, ED, CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) IF (ErrStat >= AbortErrLev) RETURN - call WriteVTK(m_FAST%Lin%LinTimes(iLinTime)+tprime, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) + call WriteVTK(m_FAST%Lin%LinTimes(iLinTime)+tprime, p_FAST, y_FAST, MeshMapData, ED, BD, AD, IfW, OpFM, SeaSt, HD, SD, ExtPtfm, SrvD, MAPp, FEAM, MD, Orca, IceF, IceD) end do ! it end do ! iLinTime diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index afe11cb45c..7a2b73f8f1 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -60,16 +60,17 @@ MODULE FAST_Types INTEGER(IntKi), PUBLIC, PARAMETER :: Module_AD14 = 6 ! AeroDyn14 [-] INTEGER(IntKi), PUBLIC, PARAMETER :: Module_AD = 7 ! AeroDyn [-] INTEGER(IntKi), PUBLIC, PARAMETER :: Module_SrvD = 8 ! ServoDyn [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_HD = 9 ! HydroDyn [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_SD = 10 ! SubDyn [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_ExtPtfm = 11 ! External Platform Loading MCKF [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_MAP = 12 ! MAP (Mooring Analysis Program) [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_FEAM = 13 ! FEAMooring [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_MD = 14 ! MoorDyn [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_Orca = 15 ! OrcaFlex integration (HD/Mooring) [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_IceF = 16 ! IceFloe [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: Module_IceD = 17 ! IceDyn [-] - INTEGER(IntKi), PUBLIC, PARAMETER :: NumModules = 17 ! The number of modules available in FAST [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_SeaSt = 9 ! SeaState [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_HD = 10 ! HydroDyn [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_SD = 11 ! SubDyn [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_ExtPtfm = 12 ! External Platform Loading MCKF [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_MAP = 13 ! MAP (Mooring Analysis Program) [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_FEAM = 14 ! FEAMooring [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_MD = 15 ! MoorDyn [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_Orca = 16 ! OrcaFlex integration (HD/Mooring) [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_IceF = 17 ! IceFloe [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: Module_IceD = 18 ! IceDyn [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: NumModules = 18 ! The number of modules available in FAST [-] INTEGER(IntKi), PUBLIC, PARAMETER :: MaxNBlades = 3 ! Maximum number of blades allowed on a turbine [-] INTEGER(IntKi), PUBLIC, PARAMETER :: IceD_MaxLegs = 4 ! because I don't know how many legs there are before calling IceD_Init and I don't want to copy the data because of sibling mesh issues, I'm going to allocate IceD based on this number [-] ! ========= FAST_VTK_BLSurfaceType ======= @@ -125,10 +126,12 @@ MODULE FAST_Types REAL(DbKi) :: DT_Ujac !< Time between when we need to re-calculate these Jacobians [s] REAL(ReKi) :: UJacSclFact !< Scaling factor used to get similar magnitudes between accelerations, forces, and moments in Jacobians [-] INTEGER(IntKi) , DIMENSION(1:9) :: SizeJac_Opt1 !< (1)=size of matrix; (2)=size of ED portion; (3)=size of SD portion [2 meshes]; (4)=size of HD portion; (5)=size of BD portion blade 1; (6)=size of BD portion blade 2; (7)=size of BD portion blade 3; (8)=size of Orca portion; (9)=size of ExtPtfm portion; [-] + INTEGER(IntKi) :: SolveOption !< Switch to determine which solve option we are going to use (see Solve_FullOpt1, etc) [-] INTEGER(IntKi) :: CompElast !< Compute blade loads (switch) {Module_ED; Module_BD} [-] INTEGER(IntKi) :: CompInflow !< Compute inflow wind conditions (switch) {Module_None; Module_IfW; Module_OpFM} [-] INTEGER(IntKi) :: CompAero !< Compute aerodynamic loads (switch) {Module_None; Module_AD14; Module_AD} [-] INTEGER(IntKi) :: CompServo !< Compute control and electrical-drive dynamics (switch) {Module_None; Module_SrvD} [-] + INTEGER(IntKi) :: CompSeaSt !< Compute sea states; wave kinematics (switch) {Module_None; Module_SeaSt} [-] INTEGER(IntKi) :: CompHydro !< Compute hydrodynamic loads (switch) {Module_None; Module_HD} [-] INTEGER(IntKi) :: CompSub !< Compute sub-structural dynamics (switch) {Module_None; Module_HD} [-] INTEGER(IntKi) :: CompMooring !< Compute mooring system (switch) {Module_None; Module_MAP; Module_FEAM; Module_MD; Module_Orca} [-] @@ -153,6 +156,7 @@ MODULE FAST_Types CHARACTER(1024) :: InflowFile !< Name of file containing inflow wind input parameters [-] CHARACTER(1024) :: AeroFile !< Name of file containing aerodynamic input parameters [-] CHARACTER(1024) :: ServoFile !< Name of file containing control and electrical-drive input parameters [-] + CHARACTER(1024) :: SeaStFile !< Name of file containing sea state input parameters [-] CHARACTER(1024) :: HydroFile !< Name of file containing hydrodynamic input parameters [-] CHARACTER(1024) :: SubFile !< Name of file containing sub-structural input parameters [-] CHARACTER(1024) :: MooringFile !< Name of file containing mooring system input parameters [-] @@ -357,7 +361,6 @@ MODULE FAST_Types INTEGER(IntKi) :: VTK_LastWaveIndx !< last index into wave array [-] TYPE(FAST_LinFileType) :: Lin !< linearization data for output [-] INTEGER(IntKi) :: ActualChanLen !< width of the column headers output in the text and/or binary file [-] - CHARACTER(30) :: OutFmt_a !< Format used for text tabular output (except time); combines OutFmt with delim and appropriate spaces [-] TYPE(FAST_LinStateSave) :: op !< operating points of states and inputs for VTK output of mode shapes [-] REAL(ReKi) , DIMENSION(1:5) :: DriverWriteOutput !< pitch and tsr for current aero map case, plus error, number of iterations, wind speed [-] END TYPE FAST_OutputFileType @@ -515,6 +518,22 @@ MODULE FAST_Types REAL(DbKi) , DIMENSION(:), ALLOCATABLE :: InputTimes !< Array of times associated with Input Array [-] END TYPE ExtPtfm_Data ! ======================= +! ========= SeaState_Data ======= + TYPE, PUBLIC :: SeaState_Data + TYPE(SeaSt_ContinuousStateType) , DIMENSION(1:2) :: x !< Continuous states [-] + TYPE(SeaSt_DiscreteStateType) , DIMENSION(1:2) :: xd !< Discrete states [-] + TYPE(SeaSt_ConstraintStateType) , DIMENSION(1:2) :: z !< Constraint states [-] + TYPE(SeaSt_OtherStateType) , DIMENSION(1:2) :: OtherSt !< Other states [-] + TYPE(SeaSt_ParameterType) :: p !< Parameters [-] + TYPE(SeaSt_InputType) :: u !< System inputs [-] + TYPE(SeaSt_OutputType) :: y !< System outputs [-] + TYPE(SeaSt_MiscVarType) :: m !< Misc/optimization variables [-] + TYPE(SeaSt_InputType) , DIMENSION(:), ALLOCATABLE :: Input !< Array of inputs associated with InputTimes [-] + TYPE(SeaSt_OutputType) , DIMENSION(:), ALLOCATABLE :: Output !< Array of outputs associated with CalcSteady Azimuths [-] + TYPE(SeaSt_OutputType) :: y_interp !< interpolated system outputs for CalcSteady [-] + REAL(DbKi) , DIMENSION(:), ALLOCATABLE :: InputTimes !< Array of times associated with Input Array [-] + END TYPE SeaState_Data +! ======================= ! ========= HydroDyn_Data ======= TYPE, PUBLIC :: HydroDyn_Data TYPE(HydroDyn_ContinuousStateType) , DIMENSION(1:2) :: x !< Continuous states [-] @@ -611,20 +630,14 @@ MODULE FAST_Types TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: BD_P_2_ED_P !< Map BeamDyn ReactionForce loads point meshes to ElastoDyn HubPtLoad point mesh [-] TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: ED_P_2_BD_P_Hub !< ElastoDyn hub to BeamDyn for hub orientation necessary for pitch actuator [-] TYPE(MeshMapType) :: ED_P_2_HD_PRP_P !< Map ElastoDyn PlatformPtMesh to HydroDyn platform reference Point [-] - TYPE(MeshMapType) :: ED_P_2_HD_W_P !< Map ElastoDyn PlatformPtMesh to HydroDyn WAMIT Point [-] - TYPE(MeshMapType) :: HD_W_P_2_ED_P !< Map HydroDyn WAMIT Point from y%WAMITMesh to ElastoDyn PlatformPtMesh [-] - TYPE(MeshMapType) :: ED_P_2_HD_M_P !< Map ElastoDyn PlatformPtMesh to HydroDyn Morison Point [-] - TYPE(MeshMapType) :: HD_M_P_2_ED_P !< Map HydroDyn Morison Point to ElastoDyn PlatformPtMesh [-] - TYPE(MeshMapType) :: ED_P_2_Mooring_P !< Map ElastoDyn PlatformPtMesh to MAP/FEAM/MoorDyn/OrcaFlex point mesh [-] - TYPE(MeshMapType) :: Mooring_P_2_ED_P !< Map FEAM/MAP/MoorDyn/OrcaFlex point mesh to ElastoDyn PlatformPtMesh [-] - TYPE(MeshMapType) :: SDy3_P_2_Mooring_P !< Map SD Motions (y3Mesh) to MAP/FEAM/MoorDyn/OrcaFlex point mesh [-] - TYPE(MeshMapType) :: Mooring_P_2_SD_P !< Map FEAM/MAP/MoorDyn/OrcaFlex point mesh to SD point loads (LMesh) mesh [-] + TYPE(MeshMapType) :: SubStructure_2_HD_W_P !< Map ElastoDyn PlatformPtMesh or SubDyn y2Mesh to HydroDyn WAMIT Point [-] + TYPE(MeshMapType) :: HD_W_P_2_SubStructure !< Map HydroDyn WAMIT Point from y%WAMITMesh to ElastoDyn PlatformPtMesh or SD LMesh [-] + TYPE(MeshMapType) :: SubStructure_2_HD_M_P !< Map ElastoDyn PlatformPtMesh or SubDyn y2Mesh to HydroDyn Morison Point [-] + TYPE(MeshMapType) :: HD_M_P_2_SubStructure !< Map HydroDyn Morison Point to ElastoDyn PlatformPtMesh or SD LMesh [-] + TYPE(MeshMapType) :: Structure_2_Mooring !< Map structural SD (y3Mesh)/ED to MAP/FEAM/MoorDyn/OrcaFlex point mesh [Motions] + TYPE(MeshMapType) :: Mooring_2_Structure !< Map FEAM/MAP/MoorDyn/OrcaFlex mesh to SD (LMesh)/ED (PlatformPtMesh)/ExtPtfm mesh [Loads] TYPE(MeshMapType) :: ED_P_2_SD_TP !< Map ElastoDyn PlatformPtMesh to SubDyn transition-piece point mesh [-] TYPE(MeshMapType) :: SD_TP_2_ED_P !< Map SubDyn transition-piece point mesh to ElastoDyn PlatformPtMesh [-] - TYPE(MeshMapType) :: SD_P_2_HD_M_P !< Map SubDyn y2Mesh Point to HydroDyn Morison Point [-] - TYPE(MeshMapType) :: HD_M_P_2_SD_P !< Map HydroDyn Morison Point to SubDyn y2Mesh Point [-] - TYPE(MeshMapType) :: SD_P_2_HD_W_P !< Map SubDyn y2Mesh Point to HydroDyn WAMIT Point [-] - TYPE(MeshMapType) :: HD_W_P_2_SD_P !< Map HydroDyn WAMIT Point to SubDyn y2Mesh Point [-] TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: ED_P_2_NStC_P_N !< Map ElastoDyn nacelle point mesh to ServoDyn/NStC point mesh [-] TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: NStC_P_2_ED_P_N !< Map ServoDyn/NStC nacelle point mesh to ElastoDyn point mesh on the nacelle [-] TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: ED_L_2_TStC_P_T !< Map ElastoDyn tower line2 mesh to ServoDyn/TStC point mesh [-] @@ -633,10 +646,8 @@ MODULE FAST_Types TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BStC_P_2_ED_P_B !< Map ServoDyn/BStC point mesh to ElastoDyn point load mesh on the blade [-] TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BD_L_2_BStC_P_B !< Map BeamDyn blade line2 mesh to ServoDyn/BStC point mesh [-] TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BStC_P_2_BD_P_B !< Map ServoDyn/BStC point mesh to BeamDyn point load mesh on the blade [-] - TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SStC_P_P_2_ED_P !< Map ServoDyn/SStC platform point mesh load to ElastoDyn point load mesh [-] - TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: ED_P_2_SStC_P_P !< Map ElastoDyn platform point mesh motion to ServoDyn/SStC point mesh [-] - TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SStC_P_P_2_SD_P !< Map ServoDyn/SStC platform point mesh load to SubDyn point load mesh [-] - TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SDy3_P_2_SStC_P_P !< Map SubDyn y3mesh point mesh motion to ServoDyn/SStC point mesh [-] + TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SStC_P_P_2_SubStructure !< Map ServoDyn/SStC platform point mesh load to SubDyn/ElastoDyn point load mesh [-] + TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SubStructure_2_SStC_P_P !< Map SubDyn y3mesh or ED platform mesh motion to ServoDyn/SStC point mesh [-] TYPE(MeshMapType) :: ED_P_2_SrvD_P_P !< Map ElastoDyn platform point mesh motion to ServoDyn point mesh -- for passing to controller [-] TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: BDED_L_2_AD_L_B !< Map ElastoDyn BladeLn2Mesh point meshes OR BeamDyn BldMotion line2 meshes to AeroDyn14 InputMarkers OR AeroDyn BladeMotion line2 meshes [-] TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: AD_L_2_BDED_B !< Map AeroDyn14 InputMarkers or AeroDyn BladeLoad line2 meshes to ElastoDyn BladePtLoad point meshes or BeamDyn BldMotion line2 meshes [-] @@ -658,15 +669,14 @@ MODULE FAST_Types INTEGER(IntKi) , DIMENSION(:), ALLOCATABLE :: Jacobian_pivot !< Pivot array used for LU decomposition of Jacobian_Opt1 [-] INTEGER(IntKi) , DIMENSION(:,:), ALLOCATABLE :: Jac_u_indx !< matrix to help fill/pack the u vector in computing the jacobian [-] TYPE(MeshType) :: u_ED_NacelleLoads !< copy of ED input mesh [-] - TYPE(MeshType) :: u_ED_PlatformPtMesh !< copy of ED input mesh [-] - TYPE(MeshType) :: u_ED_PlatformPtMesh_2 !< copy of ED input mesh (used only for temporary storage) [-] - TYPE(MeshType) :: u_ED_PlatformPtMesh_3 !< copy of ED input mesh (used only for temporary storage) [-] - TYPE(MeshType) :: u_ED_PlatformPtMesh_MDf !< copy of ED input mesh used to store loads from farm-level MD [-] + TYPE(MeshType) :: SubstructureLoads_Tmp !< copy of substructure loads input mesh (ED or SD) [-] + TYPE(MeshType) :: SubstructureLoads_Tmp2 !< copy of substructure loads input mesh (ED or SD, used only for temporary storage) [-] + TYPE(MeshType) :: PlatformLoads_Tmp !< copy of platform loads input mesh (ED) [-] + TYPE(MeshType) :: PlatformLoads_Tmp2 !< copy of platform loads input mesh (ED, used only for temporary storage) [-] + TYPE(MeshType) :: SubstructureLoads_Tmp_Farm !< copy of substructure mesh used to store loads from farm-level MD [-] TYPE(MeshType) :: u_ED_TowerPtloads !< copy of ED input mesh [-] TYPE(MeshType) , DIMENSION(:), ALLOCATABLE :: u_ED_BladePtLoads !< copy of ED input mesh [-] TYPE(MeshType) :: u_SD_TPMesh !< copy of SD input mesh [-] - TYPE(MeshType) :: u_SD_LMesh !< copy of SD input mesh [-] - TYPE(MeshType) :: u_SD_LMesh_2 !< copy of SD input mesh (used only for temporary storage) [-] TYPE(MeshType) :: u_HD_M_Mesh !< copy of HD morison input mesh [-] TYPE(MeshType) :: u_HD_W_Mesh !< copy of HD wamit input mesh [-] TYPE(MeshType) :: u_ED_HubPtLoad !< copy of ED input mesh [-] @@ -723,6 +733,8 @@ MODULE FAST_Types TYPE(InflowWind_InitOutputType) :: OutData_IfW !< IfW Initialization output data [-] TYPE(OpFM_InitInputType) :: InData_OpFM !< OpFM Initialization input data [-] TYPE(OpFM_InitOutputType) :: OutData_OpFM !< OpFM Initialization output data [-] + TYPE(SeaSt_InitInputType) :: InData_SeaSt !< SeaSt Initialization input data [-] + TYPE(SeaSt_InitOutputType) :: OutData_SeaSt !< SeaSt Initialization output data [-] TYPE(HydroDyn_InitInputType) :: InData_HD !< HD Initialization input data [-] TYPE(HydroDyn_InitOutputType) :: OutData_HD !< HD Initialization output data [-] TYPE(SD_InitInputType) :: InData_SD !< SD Initialization input data [-] @@ -781,6 +793,7 @@ MODULE FAST_Types TYPE(InflowWind_Data) :: IfW !< Data for InflowWind module [-] TYPE(OpenFOAM_Data) :: OpFM !< Data for OpenFOAM integration module [-] TYPE(SCDataEx_Data) :: SC_DX !< Data for SuperController integration module [-] + TYPE(SeaState_Data) :: SeaSt !< Data for the SeaState module [-] TYPE(HydroDyn_Data) :: HD !< Data for the HydroDyn module [-] TYPE(SubDyn_Data) :: SD !< Data for the SubDyn module [-] TYPE(MAP_Data) :: MAP !< Data for the MAP (Mooring Analysis Program) module [-] @@ -2153,10 +2166,12 @@ SUBROUTINE FAST_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg DstParamData%DT_Ujac = SrcParamData%DT_Ujac DstParamData%UJacSclFact = SrcParamData%UJacSclFact DstParamData%SizeJac_Opt1 = SrcParamData%SizeJac_Opt1 + DstParamData%SolveOption = SrcParamData%SolveOption DstParamData%CompElast = SrcParamData%CompElast DstParamData%CompInflow = SrcParamData%CompInflow DstParamData%CompAero = SrcParamData%CompAero DstParamData%CompServo = SrcParamData%CompServo + DstParamData%CompSeaSt = SrcParamData%CompSeaSt DstParamData%CompHydro = SrcParamData%CompHydro DstParamData%CompSub = SrcParamData%CompSub DstParamData%CompMooring = SrcParamData%CompMooring @@ -2181,6 +2196,7 @@ SUBROUTINE FAST_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg DstParamData%InflowFile = SrcParamData%InflowFile DstParamData%AeroFile = SrcParamData%AeroFile DstParamData%ServoFile = SrcParamData%ServoFile + DstParamData%SeaStFile = SrcParamData%SeaStFile DstParamData%HydroFile = SrcParamData%HydroFile DstParamData%SubFile = SrcParamData%SubFile DstParamData%MooringFile = SrcParamData%MooringFile @@ -2312,10 +2328,12 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Db_BufSz = Db_BufSz + 1 ! DT_Ujac Re_BufSz = Re_BufSz + 1 ! UJacSclFact Int_BufSz = Int_BufSz + SIZE(InData%SizeJac_Opt1) ! SizeJac_Opt1 + Int_BufSz = Int_BufSz + 1 ! SolveOption Int_BufSz = Int_BufSz + 1 ! CompElast Int_BufSz = Int_BufSz + 1 ! CompInflow Int_BufSz = Int_BufSz + 1 ! CompAero Int_BufSz = Int_BufSz + 1 ! CompServo + Int_BufSz = Int_BufSz + 1 ! CompSeaSt Int_BufSz = Int_BufSz + 1 ! CompHydro Int_BufSz = Int_BufSz + 1 ! CompSub Int_BufSz = Int_BufSz + 1 ! CompMooring @@ -2340,6 +2358,7 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_BufSz = Int_BufSz + 1*LEN(InData%InflowFile) ! InflowFile Int_BufSz = Int_BufSz + 1*LEN(InData%AeroFile) ! AeroFile Int_BufSz = Int_BufSz + 1*LEN(InData%ServoFile) ! ServoFile + Int_BufSz = Int_BufSz + 1*LEN(InData%SeaStFile) ! SeaStFile Int_BufSz = Int_BufSz + 1*LEN(InData%HydroFile) ! HydroFile Int_BufSz = Int_BufSz + 1*LEN(InData%SubFile) ! SubFile Int_BufSz = Int_BufSz + 1*LEN(InData%MooringFile) ! MooringFile @@ -2486,6 +2505,8 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, IntKiBuf(Int_Xferred) = InData%SizeJac_Opt1(i1) Int_Xferred = Int_Xferred + 1 END DO + IntKiBuf(Int_Xferred) = InData%SolveOption + Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%CompElast Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%CompInflow @@ -2494,6 +2515,8 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%CompServo Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%CompSeaSt + Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%CompHydro Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%CompSub @@ -2556,6 +2579,10 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, IntKiBuf(Int_Xferred) = ICHAR(InData%ServoFile(I:I), IntKi) Int_Xferred = Int_Xferred + 1 END DO ! I + DO I = 1, LEN(InData%SeaStFile) + IntKiBuf(Int_Xferred) = ICHAR(InData%SeaStFile(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I DO I = 1, LEN(InData%HydroFile) IntKiBuf(Int_Xferred) = ICHAR(InData%HydroFile(I:I), IntKi) Int_Xferred = Int_Xferred + 1 @@ -2803,6 +2830,8 @@ SUBROUTINE FAST_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs OutData%SizeJac_Opt1(i1) = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 END DO + OutData%SolveOption = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 OutData%CompElast = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%CompInflow = IntKiBuf(Int_Xferred) @@ -2811,6 +2840,8 @@ SUBROUTINE FAST_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs Int_Xferred = Int_Xferred + 1 OutData%CompServo = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%CompSeaSt = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 OutData%CompHydro = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%CompSub = IntKiBuf(Int_Xferred) @@ -2877,6 +2908,10 @@ SUBROUTINE FAST_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs OutData%ServoFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) Int_Xferred = Int_Xferred + 1 END DO ! I + DO I = 1, LEN(OutData%SeaStFile) + OutData%SeaStFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I DO I = 1, LEN(OutData%HydroFile) OutData%HydroFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) Int_Xferred = Int_Xferred + 1 @@ -15512,7 +15547,6 @@ SUBROUTINE FAST_CopyOutputFileType( SrcOutputFileTypeData, DstOutputFileTypeData CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN DstOutputFileTypeData%ActualChanLen = SrcOutputFileTypeData%ActualChanLen - DstOutputFileTypeData%OutFmt_a = SrcOutputFileTypeData%OutFmt_a CALL FAST_Copylinstatesave( SrcOutputFileTypeData%op, DstOutputFileTypeData%op, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -15666,7 +15700,6 @@ SUBROUTINE FAST_PackOutputFileType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 1 ! ActualChanLen - Int_BufSz = Int_BufSz + 1*LEN(InData%OutFmt_a) ! OutFmt_a Int_BufSz = Int_BufSz + 3 ! op: size of buffers for each call to pack subtype CALL FAST_Packlinstatesave( Re_Buf, Db_Buf, Int_Buf, InData%op, ErrStat2, ErrMsg2, .TRUE. ) ! op CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -15873,10 +15906,6 @@ SUBROUTINE FAST_PackOutputFileType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF IntKiBuf(Int_Xferred) = InData%ActualChanLen Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(InData%OutFmt_a) - IntKiBuf(Int_Xferred) = ICHAR(InData%OutFmt_a(I:I), IntKi) - Int_Xferred = Int_Xferred + 1 - END DO ! I CALL FAST_Packlinstatesave( Re_Buf, Db_Buf, Int_Buf, InData%op, ErrStat2, ErrMsg2, OnlySize ) ! op CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -16144,10 +16173,6 @@ SUBROUTINE FAST_UnPackOutputFileType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) OutData%ActualChanLen = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 - DO I = 1, LEN(OutData%OutFmt_a) - OutData%OutFmt_a(I:I) = CHAR(IntKiBuf(Int_Xferred)) - Int_Xferred = Int_Xferred + 1 - END DO ! I Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -29401,9 +29426,9 @@ SUBROUTINE FAST_UnPackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat END IF END SUBROUTINE FAST_UnPackExtPtfm_Data - SUBROUTINE FAST_CopyHydroDyn_Data( SrcHydroDyn_DataData, DstHydroDyn_DataData, CtrlCode, ErrStat, ErrMsg ) - TYPE(HydroDyn_Data), INTENT(INOUT) :: SrcHydroDyn_DataData - TYPE(HydroDyn_Data), INTENT(INOUT) :: DstHydroDyn_DataData + SUBROUTINE FAST_CopySeaState_Data( SrcSeaState_DataData, DstSeaState_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_Data), INTENT(IN) :: SrcSeaState_DataData + TYPE(SeaState_Data), INTENT(INOUT) :: DstSeaState_DataData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg @@ -29412,93 +29437,93 @@ SUBROUTINE FAST_CopyHydroDyn_Data( SrcHydroDyn_DataData, DstHydroDyn_DataData, C INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyHydroDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopySeaState_Data' ! ErrStat = ErrID_None ErrMsg = "" - DO i1 = LBOUND(SrcHydroDyn_DataData%x,1), UBOUND(SrcHydroDyn_DataData%x,1) - CALL HydroDyn_CopyContState( SrcHydroDyn_DataData%x(i1), DstHydroDyn_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcSeaState_DataData%x,1), UBOUND(SrcSeaState_DataData%x,1) + CALL SeaSt_CopyContState( SrcSeaState_DataData%x(i1), DstSeaState_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcHydroDyn_DataData%xd,1), UBOUND(SrcHydroDyn_DataData%xd,1) - CALL HydroDyn_CopyDiscState( SrcHydroDyn_DataData%xd(i1), DstHydroDyn_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcSeaState_DataData%xd,1), UBOUND(SrcSeaState_DataData%xd,1) + CALL SeaSt_CopyDiscState( SrcSeaState_DataData%xd(i1), DstSeaState_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcHydroDyn_DataData%z,1), UBOUND(SrcHydroDyn_DataData%z,1) - CALL HydroDyn_CopyConstrState( SrcHydroDyn_DataData%z(i1), DstHydroDyn_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcSeaState_DataData%z,1), UBOUND(SrcSeaState_DataData%z,1) + CALL SeaSt_CopyConstrState( SrcSeaState_DataData%z(i1), DstSeaState_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcHydroDyn_DataData%OtherSt,1), UBOUND(SrcHydroDyn_DataData%OtherSt,1) - CALL HydroDyn_CopyOtherState( SrcHydroDyn_DataData%OtherSt(i1), DstHydroDyn_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcSeaState_DataData%OtherSt,1), UBOUND(SrcSeaState_DataData%OtherSt,1) + CALL SeaSt_CopyOtherState( SrcSeaState_DataData%OtherSt(i1), DstSeaState_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - CALL HydroDyn_CopyParam( SrcHydroDyn_DataData%p, DstHydroDyn_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SeaSt_CopyParam( SrcSeaState_DataData%p, DstSeaState_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL HydroDyn_CopyInput( SrcHydroDyn_DataData%u, DstHydroDyn_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SeaSt_CopyInput( SrcSeaState_DataData%u, DstSeaState_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL HydroDyn_CopyOutput( SrcHydroDyn_DataData%y, DstHydroDyn_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SeaSt_CopyOutput( SrcSeaState_DataData%y, DstSeaState_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL HydroDyn_CopyMisc( SrcHydroDyn_DataData%m, DstHydroDyn_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SeaSt_CopyMisc( SrcSeaState_DataData%m, DstSeaState_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcHydroDyn_DataData%Output)) THEN - i1_l = LBOUND(SrcHydroDyn_DataData%Output,1) - i1_u = UBOUND(SrcHydroDyn_DataData%Output,1) - IF (.NOT. ALLOCATED(DstHydroDyn_DataData%Output)) THEN - ALLOCATE(DstHydroDyn_DataData%Output(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcSeaState_DataData%Input)) THEN + i1_l = LBOUND(SrcSeaState_DataData%Input,1) + i1_u = UBOUND(SrcSeaState_DataData%Input,1) + IF (.NOT. ALLOCATED(DstSeaState_DataData%Input)) THEN + ALLOCATE(DstSeaState_DataData%Input(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstHydroDyn_DataData%Output.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSeaState_DataData%Input.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcHydroDyn_DataData%Output,1), UBOUND(SrcHydroDyn_DataData%Output,1) - CALL HydroDyn_CopyOutput( SrcHydroDyn_DataData%Output(i1), DstHydroDyn_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcSeaState_DataData%Input,1), UBOUND(SrcSeaState_DataData%Input,1) + CALL SeaSt_CopyInput( SrcSeaState_DataData%Input(i1), DstSeaState_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF - CALL HydroDyn_CopyOutput( SrcHydroDyn_DataData%y_interp, DstHydroDyn_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcHydroDyn_DataData%Input)) THEN - i1_l = LBOUND(SrcHydroDyn_DataData%Input,1) - i1_u = UBOUND(SrcHydroDyn_DataData%Input,1) - IF (.NOT. ALLOCATED(DstHydroDyn_DataData%Input)) THEN - ALLOCATE(DstHydroDyn_DataData%Input(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcSeaState_DataData%Output)) THEN + i1_l = LBOUND(SrcSeaState_DataData%Output,1) + i1_u = UBOUND(SrcSeaState_DataData%Output,1) + IF (.NOT. ALLOCATED(DstSeaState_DataData%Output)) THEN + ALLOCATE(DstSeaState_DataData%Output(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstHydroDyn_DataData%Input.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSeaState_DataData%Output.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcHydroDyn_DataData%Input,1), UBOUND(SrcHydroDyn_DataData%Input,1) - CALL HydroDyn_CopyInput( SrcHydroDyn_DataData%Input(i1), DstHydroDyn_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcSeaState_DataData%Output,1), UBOUND(SrcSeaState_DataData%Output,1) + CALL SeaSt_CopyOutput( SrcSeaState_DataData%Output(i1), DstSeaState_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcHydroDyn_DataData%InputTimes)) THEN - i1_l = LBOUND(SrcHydroDyn_DataData%InputTimes,1) - i1_u = UBOUND(SrcHydroDyn_DataData%InputTimes,1) - IF (.NOT. ALLOCATED(DstHydroDyn_DataData%InputTimes)) THEN - ALLOCATE(DstHydroDyn_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + CALL SeaSt_CopyOutput( SrcSeaState_DataData%y_interp, DstSeaState_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +IF (ALLOCATED(SrcSeaState_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcSeaState_DataData%InputTimes,1) + i1_u = UBOUND(SrcSeaState_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstSeaState_DataData%InputTimes)) THEN + ALLOCATE(DstSeaState_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstHydroDyn_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSeaState_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstHydroDyn_DataData%InputTimes = SrcHydroDyn_DataData%InputTimes + DstSeaState_DataData%InputTimes = SrcSeaState_DataData%InputTimes ENDIF - END SUBROUTINE FAST_CopyHydroDyn_Data + END SUBROUTINE FAST_CopySeaState_Data - SUBROUTINE FAST_DestroyHydroDyn_Data( HydroDyn_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(HydroDyn_Data), INTENT(INOUT) :: HydroDyn_DataData + SUBROUTINE FAST_DestroySeaState_Data( SeaState_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaState_Data), INTENT(INOUT) :: SeaState_DataData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers @@ -29507,7 +29532,7 @@ SUBROUTINE FAST_DestroyHydroDyn_Data( HydroDyn_DataData, ErrStat, ErrMsg, DEALLO LOGICAL :: DEALLOCATEpointers_local INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyHydroDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroySeaState_Data' ErrStat = ErrID_None ErrMsg = "" @@ -29518,56 +29543,56 @@ SUBROUTINE FAST_DestroyHydroDyn_Data( HydroDyn_DataData, ErrStat, ErrMsg, DEALLO DEALLOCATEpointers_local = .true. END IF -DO i1 = LBOUND(HydroDyn_DataData%x,1), UBOUND(HydroDyn_DataData%x,1) - CALL HydroDyn_DestroyContState( HydroDyn_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(SeaState_DataData%x,1), UBOUND(SeaState_DataData%x,1) + CALL SeaSt_DestroyContState( SeaState_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(HydroDyn_DataData%xd,1), UBOUND(HydroDyn_DataData%xd,1) - CALL HydroDyn_DestroyDiscState( HydroDyn_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(SeaState_DataData%xd,1), UBOUND(SeaState_DataData%xd,1) + CALL SeaSt_DestroyDiscState( SeaState_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(HydroDyn_DataData%z,1), UBOUND(HydroDyn_DataData%z,1) - CALL HydroDyn_DestroyConstrState( HydroDyn_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(SeaState_DataData%z,1), UBOUND(SeaState_DataData%z,1) + CALL SeaSt_DestroyConstrState( SeaState_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(HydroDyn_DataData%OtherSt,1), UBOUND(HydroDyn_DataData%OtherSt,1) - CALL HydroDyn_DestroyOtherState( HydroDyn_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(SeaState_DataData%OtherSt,1), UBOUND(SeaState_DataData%OtherSt,1) + CALL SeaSt_DestroyOtherState( SeaState_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - CALL HydroDyn_DestroyParam( HydroDyn_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SeaSt_DestroyParam( SeaState_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL HydroDyn_DestroyInput( HydroDyn_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SeaSt_DestroyInput( SeaState_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL HydroDyn_DestroyOutput( HydroDyn_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SeaSt_DestroyOutput( SeaState_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL HydroDyn_DestroyMisc( HydroDyn_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SeaSt_DestroyMisc( SeaState_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(HydroDyn_DataData%Output)) THEN -DO i1 = LBOUND(HydroDyn_DataData%Output,1), UBOUND(HydroDyn_DataData%Output,1) - CALL HydroDyn_DestroyOutput( HydroDyn_DataData%Output(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(SeaState_DataData%Input)) THEN +DO i1 = LBOUND(SeaState_DataData%Input,1), UBOUND(SeaState_DataData%Input,1) + CALL SeaSt_DestroyInput( SeaState_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(HydroDyn_DataData%Output) + DEALLOCATE(SeaState_DataData%Input) ENDIF - CALL HydroDyn_DestroyOutput( HydroDyn_DataData%y_interp, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(HydroDyn_DataData%Input)) THEN -DO i1 = LBOUND(HydroDyn_DataData%Input,1), UBOUND(HydroDyn_DataData%Input,1) - CALL HydroDyn_DestroyInput( HydroDyn_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(SeaState_DataData%Output)) THEN +DO i1 = LBOUND(SeaState_DataData%Output,1), UBOUND(SeaState_DataData%Output,1) + CALL SeaSt_DestroyOutput( SeaState_DataData%Output(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(HydroDyn_DataData%Input) + DEALLOCATE(SeaState_DataData%Output) ENDIF -IF (ALLOCATED(HydroDyn_DataData%InputTimes)) THEN - DEALLOCATE(HydroDyn_DataData%InputTimes) + CALL SeaSt_DestroyOutput( SeaState_DataData%y_interp, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(SeaState_DataData%InputTimes)) THEN + DEALLOCATE(SeaState_DataData%InputTimes) ENDIF - END SUBROUTINE FAST_DestroyHydroDyn_Data + END SUBROUTINE FAST_DestroySeaState_Data - SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE FAST_PackSeaState_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(HydroDyn_Data), INTENT(IN) :: InData + TYPE(SeaState_Data), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -29582,7 +29607,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackHydroDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackSeaState_Data' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -29601,7 +29626,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ! Allocate buffers for subtypes, if any (we'll get sizes from these) DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) Int_BufSz = Int_BufSz + 3 ! x: size of buffers for each call to pack subtype - CALL HydroDyn_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x + CALL SeaSt_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29620,7 +29645,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) Int_BufSz = Int_BufSz + 3 ! xd: size of buffers for each call to pack subtype - CALL HydroDyn_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd + CALL SeaSt_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29639,7 +29664,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) Int_BufSz = Int_BufSz + 3 ! z: size of buffers for each call to pack subtype - CALL HydroDyn_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z + CALL SeaSt_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29658,7 +29683,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) Int_BufSz = Int_BufSz + 3 ! OtherSt: size of buffers for each call to pack subtype - CALL HydroDyn_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt + CALL SeaSt_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29676,7 +29701,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END IF END DO Int_BufSz = Int_BufSz + 3 ! p: size of buffers for each call to pack subtype - CALL HydroDyn_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p + CALL SeaSt_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29693,7 +29718,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! u: size of buffers for each call to pack subtype - CALL HydroDyn_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u + CALL SeaSt_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29710,7 +29735,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! y: size of buffers for each call to pack subtype - CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y + CALL SeaSt_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29727,7 +29752,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! m: size of buffers for each call to pack subtype - CALL HydroDyn_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m + CALL SeaSt_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29743,69 +29768,69 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 1 ! Output allocated yes/no - IF ( ALLOCATED(InData%Output) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! Output upper/lower bounds for each dimension - DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) - Int_BufSz = Int_BufSz + 3 ! Output: size of buffers for each call to pack subtype - CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Output + Int_BufSz = Int_BufSz + 1 ! Input allocated yes/no + IF ( ALLOCATED(InData%Input) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! Input upper/lower bounds for each dimension + DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) + Int_BufSz = Int_BufSz + 3 ! Input: size of buffers for each call to pack subtype + CALL SeaSt_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! Output + IF(ALLOCATED(Re_Buf)) THEN ! Input Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! Output + IF(ALLOCATED(Db_Buf)) THEN ! Input Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! Output + IF(ALLOCATED(Int_Buf)) THEN ! Input Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF END DO END IF - Int_BufSz = Int_BufSz + 3 ! y_interp: size of buffers for each call to pack subtype - CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, .TRUE. ) ! y_interp + Int_BufSz = Int_BufSz + 1 ! Output allocated yes/no + IF ( ALLOCATED(InData%Output) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! Output upper/lower bounds for each dimension + DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) + Int_BufSz = Int_BufSz + 3 ! Output: size of buffers for each call to pack subtype + CALL SeaSt_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Output CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! y_interp + IF(ALLOCATED(Re_Buf)) THEN ! Output Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! y_interp + IF(ALLOCATED(Db_Buf)) THEN ! Output Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! y_interp + IF(ALLOCATED(Int_Buf)) THEN ! Output Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 1 ! Input allocated yes/no - IF ( ALLOCATED(InData%Input) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! Input upper/lower bounds for each dimension - DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) - Int_BufSz = Int_BufSz + 3 ! Input: size of buffers for each call to pack subtype - CALL HydroDyn_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + END DO + END IF + Int_BufSz = Int_BufSz + 3 ! y_interp: size of buffers for each call to pack subtype + CALL SeaSt_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, .TRUE. ) ! y_interp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! Input + IF(ALLOCATED(Re_Buf)) THEN ! y_interp Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! Input + IF(ALLOCATED(Db_Buf)) THEN ! y_interp Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! Input + IF(ALLOCATED(Int_Buf)) THEN ! y_interp Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - END DO - END IF Int_BufSz = Int_BufSz + 1 ! InputTimes allocated yes/no IF ( ALLOCATED(InData%InputTimes) ) THEN Int_BufSz = Int_BufSz + 2*1 ! InputTimes upper/lower bounds for each dimension @@ -29839,7 +29864,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_Xferred = 1 DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) - CALL HydroDyn_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x + CALL SeaSt_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29869,7 +29894,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) - CALL HydroDyn_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd + CALL SeaSt_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29899,7 +29924,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) - CALL HydroDyn_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z + CALL SeaSt_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29929,7 +29954,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) - CALL HydroDyn_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt + CALL SeaSt_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29958,7 +29983,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO - CALL HydroDyn_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p + CALL SeaSt_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -29986,7 +30011,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL HydroDyn_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u + CALL SeaSt_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30014,7 +30039,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y + CALL SeaSt_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30042,7 +30067,7 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL HydroDyn_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m + CALL SeaSt_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30070,18 +30095,18 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - IF ( .NOT. ALLOCATED(InData%Output) ) THEN + IF ( .NOT. ALLOCATED(InData%Input) ) 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%Output,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Output,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%Input,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Input,1) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) - CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, OnlySize ) ! Output + DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) + CALL SeaSt_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30111,7 +30136,18 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO END IF - CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, OnlySize ) ! y_interp + IF ( .NOT. ALLOCATED(InData%Output) ) 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%Output,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Output,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) + CALL SeaSt_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, OnlySize ) ! Output CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30139,18 +30175,9 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - IF ( .NOT. ALLOCATED(InData%Input) ) 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%Input,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Input,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) - CALL HydroDyn_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input + END DO + END IF + CALL SeaSt_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, OnlySize ) ! y_interp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30178,8 +30205,6 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END DO - END IF IF ( .NOT. ALLOCATED(InData%InputTimes) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -30195,13 +30220,13 @@ SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_PackHydroDyn_Data + END SUBROUTINE FAST_PackSeaState_Data - SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + SUBROUTINE FAST_UnPackSeaState_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(HydroDyn_Data), INTENT(INOUT) :: OutData + TYPE(SeaState_Data), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -30213,7 +30238,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackHydroDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackSeaState_Data' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -30260,7 +30285,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x + CALL SeaSt_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30304,7 +30329,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd + CALL SeaSt_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30348,7 +30373,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z + CALL SeaSt_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30392,7 +30417,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt + CALL SeaSt_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30433,7 +30458,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p + CALL SeaSt_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30473,7 +30498,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u + CALL SeaSt_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30513,7 +30538,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y + CALL SeaSt_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30553,13 +30578,69 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + CALL SeaSt_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Input 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%Input)) DEALLOCATE(OutData%Input) + ALLOCATE(OutData%Input(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%Input.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%Input,1), UBOUND(OutData%Input,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Output not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -30607,7 +30688,7 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Output(i1), ErrStat2, ErrMsg2 ) ! Output + CALL SeaSt_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Output(i1), ErrStat2, ErrMsg2 ) ! Output CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30649,69 +30730,13 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL HydroDyn_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y_interp, ErrStat2, ErrMsg2 ) ! y_interp - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Input 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%Input)) DEALLOCATE(OutData%Input) - ALLOCATE(OutData%Input(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%Input.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%Input,1), UBOUND(OutData%Input,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL HydroDyn_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input + CALL SeaSt_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y_interp, ErrStat2, ErrMsg2 ) ! y_interp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! InputTimes not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -30730,11 +30755,11 @@ SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_UnPackHydroDyn_Data + END SUBROUTINE FAST_UnPackSeaState_Data - SUBROUTINE FAST_CopyIceFloe_Data( SrcIceFloe_DataData, DstIceFloe_DataData, CtrlCode, ErrStat, ErrMsg ) - TYPE(IceFloe_Data), INTENT(INOUT) :: SrcIceFloe_DataData - TYPE(IceFloe_Data), INTENT(INOUT) :: DstIceFloe_DataData + SUBROUTINE FAST_CopyHydroDyn_Data( SrcHydroDyn_DataData, DstHydroDyn_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(HydroDyn_Data), INTENT(INOUT) :: SrcHydroDyn_DataData + TYPE(HydroDyn_Data), INTENT(INOUT) :: DstHydroDyn_DataData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg @@ -30743,74 +30768,93 @@ SUBROUTINE FAST_CopyIceFloe_Data( SrcIceFloe_DataData, DstIceFloe_DataData, Ctrl INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyIceFloe_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyHydroDyn_Data' ! ErrStat = ErrID_None ErrMsg = "" - DO i1 = LBOUND(SrcIceFloe_DataData%x,1), UBOUND(SrcIceFloe_DataData%x,1) - CALL IceFloe_CopyContState( SrcIceFloe_DataData%x(i1), DstIceFloe_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcHydroDyn_DataData%x,1), UBOUND(SrcHydroDyn_DataData%x,1) + CALL HydroDyn_CopyContState( SrcHydroDyn_DataData%x(i1), DstHydroDyn_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcIceFloe_DataData%xd,1), UBOUND(SrcIceFloe_DataData%xd,1) - CALL IceFloe_CopyDiscState( SrcIceFloe_DataData%xd(i1), DstIceFloe_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcHydroDyn_DataData%xd,1), UBOUND(SrcHydroDyn_DataData%xd,1) + CALL HydroDyn_CopyDiscState( SrcHydroDyn_DataData%xd(i1), DstHydroDyn_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcIceFloe_DataData%z,1), UBOUND(SrcIceFloe_DataData%z,1) - CALL IceFloe_CopyConstrState( SrcIceFloe_DataData%z(i1), DstIceFloe_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcHydroDyn_DataData%z,1), UBOUND(SrcHydroDyn_DataData%z,1) + CALL HydroDyn_CopyConstrState( SrcHydroDyn_DataData%z(i1), DstHydroDyn_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcIceFloe_DataData%OtherSt,1), UBOUND(SrcIceFloe_DataData%OtherSt,1) - CALL IceFloe_CopyOtherState( SrcIceFloe_DataData%OtherSt(i1), DstIceFloe_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcHydroDyn_DataData%OtherSt,1), UBOUND(SrcHydroDyn_DataData%OtherSt,1) + CALL HydroDyn_CopyOtherState( SrcHydroDyn_DataData%OtherSt(i1), DstHydroDyn_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - CALL IceFloe_CopyParam( SrcIceFloe_DataData%p, DstIceFloe_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL HydroDyn_CopyParam( SrcHydroDyn_DataData%p, DstHydroDyn_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL IceFloe_CopyInput( SrcIceFloe_DataData%u, DstIceFloe_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) + CALL HydroDyn_CopyInput( SrcHydroDyn_DataData%u, DstHydroDyn_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL IceFloe_CopyOutput( SrcIceFloe_DataData%y, DstIceFloe_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + CALL HydroDyn_CopyOutput( SrcHydroDyn_DataData%y, DstHydroDyn_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL IceFloe_CopyMisc( SrcIceFloe_DataData%m, DstIceFloe_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL HydroDyn_CopyMisc( SrcHydroDyn_DataData%m, DstHydroDyn_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcIceFloe_DataData%Input)) THEN - i1_l = LBOUND(SrcIceFloe_DataData%Input,1) - i1_u = UBOUND(SrcIceFloe_DataData%Input,1) - IF (.NOT. ALLOCATED(DstIceFloe_DataData%Input)) THEN - ALLOCATE(DstIceFloe_DataData%Input(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcHydroDyn_DataData%Output)) THEN + i1_l = LBOUND(SrcHydroDyn_DataData%Output,1) + i1_u = UBOUND(SrcHydroDyn_DataData%Output,1) + IF (.NOT. ALLOCATED(DstHydroDyn_DataData%Output)) THEN + ALLOCATE(DstHydroDyn_DataData%Output(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstIceFloe_DataData%Input.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstHydroDyn_DataData%Output.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcIceFloe_DataData%Input,1), UBOUND(SrcIceFloe_DataData%Input,1) - CALL IceFloe_CopyInput( SrcIceFloe_DataData%Input(i1), DstIceFloe_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcHydroDyn_DataData%Output,1), UBOUND(SrcHydroDyn_DataData%Output,1) + CALL HydroDyn_CopyOutput( SrcHydroDyn_DataData%Output(i1), DstHydroDyn_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcIceFloe_DataData%InputTimes)) THEN - i1_l = LBOUND(SrcIceFloe_DataData%InputTimes,1) - i1_u = UBOUND(SrcIceFloe_DataData%InputTimes,1) - IF (.NOT. ALLOCATED(DstIceFloe_DataData%InputTimes)) THEN - ALLOCATE(DstIceFloe_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + CALL HydroDyn_CopyOutput( SrcHydroDyn_DataData%y_interp, DstHydroDyn_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +IF (ALLOCATED(SrcHydroDyn_DataData%Input)) THEN + i1_l = LBOUND(SrcHydroDyn_DataData%Input,1) + i1_u = UBOUND(SrcHydroDyn_DataData%Input,1) + IF (.NOT. ALLOCATED(DstHydroDyn_DataData%Input)) THEN + ALLOCATE(DstHydroDyn_DataData%Input(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstIceFloe_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstHydroDyn_DataData%Input.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstIceFloe_DataData%InputTimes = SrcIceFloe_DataData%InputTimes + DO i1 = LBOUND(SrcHydroDyn_DataData%Input,1), UBOUND(SrcHydroDyn_DataData%Input,1) + CALL HydroDyn_CopyInput( SrcHydroDyn_DataData%Input(i1), DstHydroDyn_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO ENDIF - END SUBROUTINE FAST_CopyIceFloe_Data +IF (ALLOCATED(SrcHydroDyn_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcHydroDyn_DataData%InputTimes,1) + i1_u = UBOUND(SrcHydroDyn_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstHydroDyn_DataData%InputTimes)) THEN + ALLOCATE(DstHydroDyn_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstHydroDyn_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstHydroDyn_DataData%InputTimes = SrcHydroDyn_DataData%InputTimes +ENDIF + END SUBROUTINE FAST_CopyHydroDyn_Data - SUBROUTINE FAST_DestroyIceFloe_Data( IceFloe_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(IceFloe_Data), INTENT(INOUT) :: IceFloe_DataData + SUBROUTINE FAST_DestroyHydroDyn_Data( HydroDyn_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(HydroDyn_Data), INTENT(INOUT) :: HydroDyn_DataData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers @@ -30819,7 +30863,7 @@ SUBROUTINE FAST_DestroyIceFloe_Data( IceFloe_DataData, ErrStat, ErrMsg, DEALLOCA LOGICAL :: DEALLOCATEpointers_local INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyIceFloe_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyHydroDyn_Data' ErrStat = ErrID_None ErrMsg = "" @@ -30830,47 +30874,56 @@ SUBROUTINE FAST_DestroyIceFloe_Data( IceFloe_DataData, ErrStat, ErrMsg, DEALLOCA DEALLOCATEpointers_local = .true. END IF -DO i1 = LBOUND(IceFloe_DataData%x,1), UBOUND(IceFloe_DataData%x,1) - CALL IceFloe_DestroyContState( IceFloe_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(HydroDyn_DataData%x,1), UBOUND(HydroDyn_DataData%x,1) + CALL HydroDyn_DestroyContState( HydroDyn_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(IceFloe_DataData%xd,1), UBOUND(IceFloe_DataData%xd,1) - CALL IceFloe_DestroyDiscState( IceFloe_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(HydroDyn_DataData%xd,1), UBOUND(HydroDyn_DataData%xd,1) + CALL HydroDyn_DestroyDiscState( HydroDyn_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(IceFloe_DataData%z,1), UBOUND(IceFloe_DataData%z,1) - CALL IceFloe_DestroyConstrState( IceFloe_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(HydroDyn_DataData%z,1), UBOUND(HydroDyn_DataData%z,1) + CALL HydroDyn_DestroyConstrState( HydroDyn_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(IceFloe_DataData%OtherSt,1), UBOUND(IceFloe_DataData%OtherSt,1) - CALL IceFloe_DestroyOtherState( IceFloe_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(HydroDyn_DataData%OtherSt,1), UBOUND(HydroDyn_DataData%OtherSt,1) + CALL HydroDyn_DestroyOtherState( HydroDyn_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - CALL IceFloe_DestroyParam( IceFloe_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL HydroDyn_DestroyParam( HydroDyn_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL IceFloe_DestroyInput( IceFloe_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL HydroDyn_DestroyInput( HydroDyn_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL IceFloe_DestroyOutput( IceFloe_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL HydroDyn_DestroyOutput( HydroDyn_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL IceFloe_DestroyMisc( IceFloe_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL HydroDyn_DestroyMisc( HydroDyn_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(IceFloe_DataData%Input)) THEN -DO i1 = LBOUND(IceFloe_DataData%Input,1), UBOUND(IceFloe_DataData%Input,1) - CALL IceFloe_DestroyInput( IceFloe_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(HydroDyn_DataData%Output)) THEN +DO i1 = LBOUND(HydroDyn_DataData%Output,1), UBOUND(HydroDyn_DataData%Output,1) + CALL HydroDyn_DestroyOutput( HydroDyn_DataData%Output(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(IceFloe_DataData%Input) + DEALLOCATE(HydroDyn_DataData%Output) ENDIF -IF (ALLOCATED(IceFloe_DataData%InputTimes)) THEN - DEALLOCATE(IceFloe_DataData%InputTimes) + CALL HydroDyn_DestroyOutput( HydroDyn_DataData%y_interp, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(HydroDyn_DataData%Input)) THEN +DO i1 = LBOUND(HydroDyn_DataData%Input,1), UBOUND(HydroDyn_DataData%Input,1) + CALL HydroDyn_DestroyInput( HydroDyn_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO + DEALLOCATE(HydroDyn_DataData%Input) ENDIF - END SUBROUTINE FAST_DestroyIceFloe_Data +IF (ALLOCATED(HydroDyn_DataData%InputTimes)) THEN + DEALLOCATE(HydroDyn_DataData%InputTimes) +ENDIF + END SUBROUTINE FAST_DestroyHydroDyn_Data - SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE FAST_PackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(IceFloe_Data), INTENT(IN) :: InData + TYPE(HydroDyn_Data), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -30885,7 +30938,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackIceFloe_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackHydroDyn_Data' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -30904,7 +30957,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ! Allocate buffers for subtypes, if any (we'll get sizes from these) DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) Int_BufSz = Int_BufSz + 3 ! x: size of buffers for each call to pack subtype - CALL IceFloe_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x + CALL HydroDyn_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30923,7 +30976,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) Int_BufSz = Int_BufSz + 3 ! xd: size of buffers for each call to pack subtype - CALL IceFloe_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd + CALL HydroDyn_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30942,7 +30995,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) Int_BufSz = Int_BufSz + 3 ! z: size of buffers for each call to pack subtype - CALL IceFloe_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z + CALL HydroDyn_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30961,7 +31014,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END DO DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) Int_BufSz = Int_BufSz + 3 ! OtherSt: size of buffers for each call to pack subtype - CALL IceFloe_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt + CALL HydroDyn_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30979,7 +31032,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END IF END DO Int_BufSz = Int_BufSz + 3 ! p: size of buffers for each call to pack subtype - CALL IceFloe_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p + CALL HydroDyn_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -30996,7 +31049,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! u: size of buffers for each call to pack subtype - CALL IceFloe_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u + CALL HydroDyn_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31013,7 +31066,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! y: size of buffers for each call to pack subtype - CALL IceFloe_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y + CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31030,7 +31083,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! m: size of buffers for each call to pack subtype - CALL IceFloe_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m + CALL HydroDyn_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31046,12 +31099,52 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF + Int_BufSz = Int_BufSz + 1 ! Output allocated yes/no + IF ( ALLOCATED(InData%Output) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! Output upper/lower bounds for each dimension + DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) + Int_BufSz = Int_BufSz + 3 ! Output: size of buffers for each call to pack subtype + CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Output + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Output + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Output + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + END IF + Int_BufSz = Int_BufSz + 3 ! y_interp: size of buffers for each call to pack subtype + CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, .TRUE. ) ! y_interp + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! y_interp + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! y_interp + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! y_interp + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF Int_BufSz = Int_BufSz + 1 ! Input allocated yes/no IF ( ALLOCATED(InData%Input) ) THEN Int_BufSz = Int_BufSz + 2*1 ! Input upper/lower bounds for each dimension DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) Int_BufSz = Int_BufSz + 3 ! Input: size of buffers for each call to pack subtype - CALL IceFloe_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + CALL HydroDyn_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31102,7 +31195,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = 1 DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) - CALL IceFloe_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x + CALL HydroDyn_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31132,7 +31225,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ENDIF END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) - CALL IceFloe_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd + CALL HydroDyn_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31162,7 +31255,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ENDIF END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) - CALL IceFloe_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z + CALL HydroDyn_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31192,7 +31285,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ENDIF END DO DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) - CALL IceFloe_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt + CALL HydroDyn_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31221,7 +31314,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO - CALL IceFloe_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p + CALL HydroDyn_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31249,7 +31342,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL IceFloe_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u + CALL HydroDyn_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31277,7 +31370,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL IceFloe_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y + CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31305,7 +31398,76 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL IceFloe_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m + CALL HydroDyn_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF ( .NOT. ALLOCATED(InData%Output) ) 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%Output,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Output,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) + CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, OnlySize ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + END IF + CALL HydroDyn_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, OnlySize ) ! y_interp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31344,7 +31506,7 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = Int_Xferred + 2 DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) - CALL IceFloe_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input + CALL HydroDyn_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31389,13 +31551,13 @@ SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_PackIceFloe_Data + END SUBROUTINE FAST_PackHydroDyn_Data - SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + SUBROUTINE FAST_UnPackHydroDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(IceFloe_Data), INTENT(INOUT) :: OutData + TYPE(HydroDyn_Data), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -31407,7 +31569,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackIceFloe_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackHydroDyn_Data' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -31454,7 +31616,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x + CALL HydroDyn_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31498,7 +31660,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd + CALL HydroDyn_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31542,7 +31704,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z + CALL HydroDyn_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31586,7 +31748,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt + CALL HydroDyn_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31627,7 +31789,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p + CALL HydroDyn_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31667,7 +31829,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u + CALL HydroDyn_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31707,7 +31869,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y + CALL HydroDyn_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31747,7 +31909,103 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + CALL HydroDyn_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Output 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%Output)) DEALLOCATE(OutData%Output) + ALLOCATE(OutData%Output(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%Output.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%Output,1), UBOUND(OutData%Output,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL HydroDyn_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Output(i1), ErrStat2, ErrMsg2 ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL HydroDyn_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y_interp, ErrStat2, ErrMsg2 ) ! y_interp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31801,7 +32059,7 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL IceFloe_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input + CALL HydroDyn_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -31828,11 +32086,11 @@ SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_UnPackIceFloe_Data + END SUBROUTINE FAST_UnPackHydroDyn_Data - SUBROUTINE FAST_CopyMAP_Data( SrcMAP_DataData, DstMAP_DataData, CtrlCode, ErrStat, ErrMsg ) - TYPE(MAP_Data), INTENT(INOUT) :: SrcMAP_DataData - TYPE(MAP_Data), INTENT(INOUT) :: DstMAP_DataData + SUBROUTINE FAST_CopyIceFloe_Data( SrcIceFloe_DataData, DstIceFloe_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(IceFloe_Data), INTENT(INOUT) :: SrcIceFloe_DataData + TYPE(IceFloe_Data), INTENT(INOUT) :: DstIceFloe_DataData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg @@ -31841,91 +32099,74 @@ SUBROUTINE FAST_CopyMAP_Data( SrcMAP_DataData, DstMAP_DataData, CtrlCode, ErrSta INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyMAP_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyIceFloe_Data' ! ErrStat = ErrID_None ErrMsg = "" - DO i1 = LBOUND(SrcMAP_DataData%x,1), UBOUND(SrcMAP_DataData%x,1) - CALL MAP_CopyContState( SrcMAP_DataData%x(i1), DstMAP_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcIceFloe_DataData%x,1), UBOUND(SrcIceFloe_DataData%x,1) + CALL IceFloe_CopyContState( SrcIceFloe_DataData%x(i1), DstIceFloe_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcMAP_DataData%xd,1), UBOUND(SrcMAP_DataData%xd,1) - CALL MAP_CopyDiscState( SrcMAP_DataData%xd(i1), DstMAP_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcIceFloe_DataData%xd,1), UBOUND(SrcIceFloe_DataData%xd,1) + CALL IceFloe_CopyDiscState( SrcIceFloe_DataData%xd(i1), DstIceFloe_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcMAP_DataData%z,1), UBOUND(SrcMAP_DataData%z,1) - CALL MAP_CopyConstrState( SrcMAP_DataData%z(i1), DstMAP_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcIceFloe_DataData%z,1), UBOUND(SrcIceFloe_DataData%z,1) + CALL IceFloe_CopyConstrState( SrcIceFloe_DataData%z(i1), DstIceFloe_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - CALL MAP_CopyOtherState( SrcMAP_DataData%OtherSt, DstMAP_DataData%OtherSt, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL MAP_CopyParam( SrcMAP_DataData%p, DstMAP_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL MAP_CopyInput( SrcMAP_DataData%u, DstMAP_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcIceFloe_DataData%OtherSt,1), UBOUND(SrcIceFloe_DataData%OtherSt,1) + CALL IceFloe_CopyOtherState( SrcIceFloe_DataData%OtherSt(i1), DstIceFloe_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MAP_CopyOutput( SrcMAP_DataData%y, DstMAP_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + ENDDO + CALL IceFloe_CopyParam( SrcIceFloe_DataData%p, DstIceFloe_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MAP_CopyOtherState( SrcMAP_DataData%OtherSt_old, DstMAP_DataData%OtherSt_old, CtrlCode, ErrStat2, ErrMsg2 ) + CALL IceFloe_CopyInput( SrcIceFloe_DataData%u, DstIceFloe_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcMAP_DataData%Output)) THEN - i1_l = LBOUND(SrcMAP_DataData%Output,1) - i1_u = UBOUND(SrcMAP_DataData%Output,1) - IF (.NOT. ALLOCATED(DstMAP_DataData%Output)) THEN - ALLOCATE(DstMAP_DataData%Output(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMAP_DataData%Output.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcMAP_DataData%Output,1), UBOUND(SrcMAP_DataData%Output,1) - CALL MAP_CopyOutput( SrcMAP_DataData%Output(i1), DstMAP_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL IceFloe_CopyOutput( SrcIceFloe_DataData%y, DstIceFloe_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - CALL MAP_CopyOutput( SrcMAP_DataData%y_interp, DstMAP_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) + CALL IceFloe_CopyMisc( SrcIceFloe_DataData%m, DstIceFloe_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcMAP_DataData%Input)) THEN - i1_l = LBOUND(SrcMAP_DataData%Input,1) - i1_u = UBOUND(SrcMAP_DataData%Input,1) - IF (.NOT. ALLOCATED(DstMAP_DataData%Input)) THEN - ALLOCATE(DstMAP_DataData%Input(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcIceFloe_DataData%Input)) THEN + i1_l = LBOUND(SrcIceFloe_DataData%Input,1) + i1_u = UBOUND(SrcIceFloe_DataData%Input,1) + IF (.NOT. ALLOCATED(DstIceFloe_DataData%Input)) THEN + ALLOCATE(DstIceFloe_DataData%Input(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMAP_DataData%Input.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstIceFloe_DataData%Input.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcMAP_DataData%Input,1), UBOUND(SrcMAP_DataData%Input,1) - CALL MAP_CopyInput( SrcMAP_DataData%Input(i1), DstMAP_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcIceFloe_DataData%Input,1), UBOUND(SrcIceFloe_DataData%Input,1) + CALL IceFloe_CopyInput( SrcIceFloe_DataData%Input(i1), DstIceFloe_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcMAP_DataData%InputTimes)) THEN - i1_l = LBOUND(SrcMAP_DataData%InputTimes,1) - i1_u = UBOUND(SrcMAP_DataData%InputTimes,1) - IF (.NOT. ALLOCATED(DstMAP_DataData%InputTimes)) THEN - ALLOCATE(DstMAP_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcIceFloe_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcIceFloe_DataData%InputTimes,1) + i1_u = UBOUND(SrcIceFloe_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstIceFloe_DataData%InputTimes)) THEN + ALLOCATE(DstIceFloe_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMAP_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstIceFloe_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstMAP_DataData%InputTimes = SrcMAP_DataData%InputTimes + DstIceFloe_DataData%InputTimes = SrcIceFloe_DataData%InputTimes ENDIF - END SUBROUTINE FAST_CopyMAP_Data + END SUBROUTINE FAST_CopyIceFloe_Data - SUBROUTINE FAST_DestroyMAP_Data( MAP_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(MAP_Data), INTENT(INOUT) :: MAP_DataData + SUBROUTINE FAST_DestroyIceFloe_Data( IceFloe_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(IceFloe_Data), INTENT(INOUT) :: IceFloe_DataData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers @@ -31934,7 +32175,7 @@ SUBROUTINE FAST_DestroyMAP_Data( MAP_DataData, ErrStat, ErrMsg, DEALLOCATEpointe LOGICAL :: DEALLOCATEpointers_local INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyMAP_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyIceFloe_Data' ErrStat = ErrID_None ErrMsg = "" @@ -31945,54 +32186,47 @@ SUBROUTINE FAST_DestroyMAP_Data( MAP_DataData, ErrStat, ErrMsg, DEALLOCATEpointe DEALLOCATEpointers_local = .true. END IF -DO i1 = LBOUND(MAP_DataData%x,1), UBOUND(MAP_DataData%x,1) - CALL MAP_DestroyContState( MAP_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(IceFloe_DataData%x,1), UBOUND(IceFloe_DataData%x,1) + CALL IceFloe_DestroyContState( IceFloe_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(MAP_DataData%xd,1), UBOUND(MAP_DataData%xd,1) - CALL MAP_DestroyDiscState( MAP_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(IceFloe_DataData%xd,1), UBOUND(IceFloe_DataData%xd,1) + CALL IceFloe_DestroyDiscState( IceFloe_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(MAP_DataData%z,1), UBOUND(MAP_DataData%z,1) - CALL MAP_DestroyConstrState( MAP_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(IceFloe_DataData%z,1), UBOUND(IceFloe_DataData%z,1) + CALL IceFloe_DestroyConstrState( IceFloe_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - CALL MAP_DestroyOtherState( MAP_DataData%OtherSt, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MAP_DestroyParam( MAP_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MAP_DestroyInput( MAP_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(IceFloe_DataData%OtherSt,1), UBOUND(IceFloe_DataData%OtherSt,1) + CALL IceFloe_DestroyOtherState( IceFloe_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MAP_DestroyOutput( MAP_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +ENDDO + CALL IceFloe_DestroyParam( IceFloe_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MAP_DestroyOtherState( MAP_DataData%OtherSt_old, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL IceFloe_DestroyInput( IceFloe_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(MAP_DataData%Output)) THEN -DO i1 = LBOUND(MAP_DataData%Output,1), UBOUND(MAP_DataData%Output,1) - CALL MAP_DestroyOutput( MAP_DataData%Output(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL IceFloe_DestroyOutput( IceFloe_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(MAP_DataData%Output) -ENDIF - CALL MAP_DestroyOutput( MAP_DataData%y_interp, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL IceFloe_DestroyMisc( IceFloe_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(MAP_DataData%Input)) THEN -DO i1 = LBOUND(MAP_DataData%Input,1), UBOUND(MAP_DataData%Input,1) - CALL MAP_DestroyInput( MAP_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(IceFloe_DataData%Input)) THEN +DO i1 = LBOUND(IceFloe_DataData%Input,1), UBOUND(IceFloe_DataData%Input,1) + CALL IceFloe_DestroyInput( IceFloe_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(MAP_DataData%Input) + DEALLOCATE(IceFloe_DataData%Input) ENDIF -IF (ALLOCATED(MAP_DataData%InputTimes)) THEN - DEALLOCATE(MAP_DataData%InputTimes) +IF (ALLOCATED(IceFloe_DataData%InputTimes)) THEN + DEALLOCATE(IceFloe_DataData%InputTimes) ENDIF - END SUBROUTINE FAST_DestroyMAP_Data + END SUBROUTINE FAST_DestroyIceFloe_Data - SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE FAST_PackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(MAP_Data), INTENT(IN) :: InData + TYPE(IceFloe_Data), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -32007,7 +32241,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackMAP_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackIceFloe_Data' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -32026,7 +32260,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ! Allocate buffers for subtypes, if any (we'll get sizes from these) DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) Int_BufSz = Int_BufSz + 3 ! x: size of buffers for each call to pack subtype - CALL MAP_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x + CALL IceFloe_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32045,7 +32279,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) Int_BufSz = Int_BufSz + 3 ! xd: size of buffers for each call to pack subtype - CALL MAP_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd + CALL IceFloe_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32064,7 +32298,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) Int_BufSz = Int_BufSz + 3 ! z: size of buffers for each call to pack subtype - CALL MAP_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z + CALL IceFloe_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32081,8 +32315,9 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs DEALLOCATE(Int_Buf) END IF END DO + DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) Int_BufSz = Int_BufSz + 3 ! OtherSt: size of buffers for each call to pack subtype - CALL MAP_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt, ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt + CALL IceFloe_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32098,8 +32333,9 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF + END DO Int_BufSz = Int_BufSz + 3 ! p: size of buffers for each call to pack subtype - CALL MAP_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p + CALL IceFloe_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32116,7 +32352,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! u: size of buffers for each call to pack subtype - CALL MAP_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u + CALL IceFloe_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32133,7 +32369,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! y: size of buffers for each call to pack subtype - CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y + CALL IceFloe_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32149,60 +32385,20 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! OtherSt_old: size of buffers for each call to pack subtype - CALL MAP_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt_old, ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt_old - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! OtherSt_old - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! OtherSt_old - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! OtherSt_old - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 1 ! Output allocated yes/no - IF ( ALLOCATED(InData%Output) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! Output upper/lower bounds for each dimension - DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) - Int_BufSz = Int_BufSz + 3 ! Output: size of buffers for each call to pack subtype - CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Output - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Output - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Output - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Output - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 3 ! y_interp: size of buffers for each call to pack subtype - CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, .TRUE. ) ! y_interp + Int_BufSz = Int_BufSz + 3 ! m: size of buffers for each call to pack subtype + CALL IceFloe_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! y_interp + IF(ALLOCATED(Re_Buf)) THEN ! m Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! y_interp + IF(ALLOCATED(Db_Buf)) THEN ! m Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! y_interp + IF(ALLOCATED(Int_Buf)) THEN ! m Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF @@ -32211,7 +32407,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_BufSz = Int_BufSz + 2*1 ! Input upper/lower bounds for each dimension DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) Int_BufSz = Int_BufSz + 3 ! Input: size of buffers for each call to pack subtype - CALL MAP_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + CALL IceFloe_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32262,7 +32458,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_Xferred = 1 DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) - CALL MAP_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x + CALL IceFloe_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32292,7 +32488,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ENDIF END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) - CALL MAP_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd + CALL IceFloe_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32322,7 +32518,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ENDIF END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) - CALL MAP_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z + CALL IceFloe_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32351,63 +32547,8 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO - CALL MAP_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt, ErrStat2, ErrMsg2, OnlySize ) ! OtherSt - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL MAP_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL MAP_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u + DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) + CALL IceFloe_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32435,7 +32576,8 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y + END DO + CALL IceFloe_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32463,7 +32605,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MAP_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt_old, ErrStat2, ErrMsg2, OnlySize ) ! OtherSt_old + CALL IceFloe_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32491,18 +32633,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - IF ( .NOT. ALLOCATED(InData%Output) ) 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%Output,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Output,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) - CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, OnlySize ) ! Output + CALL IceFloe_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32530,9 +32661,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END DO - END IF - CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, OnlySize ) ! y_interp + CALL IceFloe_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32571,7 +32700,7 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_Xferred = Int_Xferred + 2 DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) - CALL MAP_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input + CALL IceFloe_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32616,13 +32745,13 @@ SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_PackMAP_Data + END SUBROUTINE FAST_PackIceFloe_Data - SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + SUBROUTINE FAST_UnPackIceFloe_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(MAP_Data), INTENT(INOUT) :: OutData + TYPE(IceFloe_Data), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -32634,7 +32763,7 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackMAP_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackIceFloe_Data' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -32681,7 +32810,7 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x + CALL IceFloe_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32725,7 +32854,7 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd + CALL IceFloe_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32769,7 +32898,7 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z + CALL IceFloe_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32777,6 +32906,9 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO + i1_l = LBOUND(OutData%OtherSt,1) + i1_u = UBOUND(OutData%OtherSt,1) + DO i1 = LBOUND(OutData%OtherSt,1), UBOUND(OutData%OtherSt,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -32810,93 +32942,14 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt, ErrStat2, ErrMsg2 ) ! OtherSt - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL MAP_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL MAP_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u + CALL IceFloe_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -32930,7 +32983,7 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y + CALL IceFloe_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -32970,27 +33023,13 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt_old, ErrStat2, ErrMsg2 ) ! OtherSt_old + CALL IceFloe_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Output 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%Output)) DEALLOCATE(OutData%Output) - ALLOCATE(OutData%Output(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%Output.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%Output,1), UBOUND(OutData%Output,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -33024,15 +33063,13 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Output(i1), ErrStat2, ErrMsg2 ) ! Output + CALL IceFloe_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -33066,7 +33103,7 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y_interp, ErrStat2, ErrMsg2 ) ! y_interp + CALL IceFloe_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33120,7 +33157,7 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MAP_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input + CALL IceFloe_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33147,11 +33184,11 @@ SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_UnPackMAP_Data + END SUBROUTINE FAST_UnPackIceFloe_Data - SUBROUTINE FAST_CopyFEAMooring_Data( SrcFEAMooring_DataData, DstFEAMooring_DataData, CtrlCode, ErrStat, ErrMsg ) - TYPE(FEAMooring_Data), INTENT(INOUT) :: SrcFEAMooring_DataData - TYPE(FEAMooring_Data), INTENT(INOUT) :: DstFEAMooring_DataData + SUBROUTINE FAST_CopyMAP_Data( SrcMAP_DataData, DstMAP_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(MAP_Data), INTENT(INOUT) :: SrcMAP_DataData + TYPE(MAP_Data), INTENT(INOUT) :: DstMAP_DataData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg @@ -33160,74 +33197,91 @@ SUBROUTINE FAST_CopyFEAMooring_Data( SrcFEAMooring_DataData, DstFEAMooring_DataD INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyFEAMooring_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyMAP_Data' ! ErrStat = ErrID_None ErrMsg = "" - DO i1 = LBOUND(SrcFEAMooring_DataData%x,1), UBOUND(SrcFEAMooring_DataData%x,1) - CALL FEAM_CopyContState( SrcFEAMooring_DataData%x(i1), DstFEAMooring_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMAP_DataData%x,1), UBOUND(SrcMAP_DataData%x,1) + CALL MAP_CopyContState( SrcMAP_DataData%x(i1), DstMAP_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcFEAMooring_DataData%xd,1), UBOUND(SrcFEAMooring_DataData%xd,1) - CALL FEAM_CopyDiscState( SrcFEAMooring_DataData%xd(i1), DstFEAMooring_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMAP_DataData%xd,1), UBOUND(SrcMAP_DataData%xd,1) + CALL MAP_CopyDiscState( SrcMAP_DataData%xd(i1), DstMAP_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcFEAMooring_DataData%z,1), UBOUND(SrcFEAMooring_DataData%z,1) - CALL FEAM_CopyConstrState( SrcFEAMooring_DataData%z(i1), DstFEAMooring_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMAP_DataData%z,1), UBOUND(SrcMAP_DataData%z,1) + CALL MAP_CopyConstrState( SrcMAP_DataData%z(i1), DstMAP_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcFEAMooring_DataData%OtherSt,1), UBOUND(SrcFEAMooring_DataData%OtherSt,1) - CALL FEAM_CopyOtherState( SrcFEAMooring_DataData%OtherSt(i1), DstFEAMooring_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL MAP_CopyOtherState( SrcMAP_DataData%OtherSt, DstMAP_DataData%OtherSt, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - ENDDO - CALL FEAM_CopyParam( SrcFEAMooring_DataData%p, DstFEAMooring_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MAP_CopyParam( SrcMAP_DataData%p, DstMAP_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL FEAM_CopyInput( SrcFEAMooring_DataData%u, DstFEAMooring_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MAP_CopyInput( SrcMAP_DataData%u, DstMAP_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL FEAM_CopyOutput( SrcFEAMooring_DataData%y, DstFEAMooring_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MAP_CopyOutput( SrcMAP_DataData%y, DstMAP_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL FEAM_CopyMisc( SrcFEAMooring_DataData%m, DstFEAMooring_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MAP_CopyOtherState( SrcMAP_DataData%OtherSt_old, DstMAP_DataData%OtherSt_old, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcFEAMooring_DataData%Input)) THEN - i1_l = LBOUND(SrcFEAMooring_DataData%Input,1) - i1_u = UBOUND(SrcFEAMooring_DataData%Input,1) - IF (.NOT. ALLOCATED(DstFEAMooring_DataData%Input)) THEN - ALLOCATE(DstFEAMooring_DataData%Input(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcMAP_DataData%Output)) THEN + i1_l = LBOUND(SrcMAP_DataData%Output,1) + i1_u = UBOUND(SrcMAP_DataData%Output,1) + IF (.NOT. ALLOCATED(DstMAP_DataData%Output)) THEN + ALLOCATE(DstMAP_DataData%Output(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstFEAMooring_DataData%Input.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMAP_DataData%Output.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcFEAMooring_DataData%Input,1), UBOUND(SrcFEAMooring_DataData%Input,1) - CALL FEAM_CopyInput( SrcFEAMooring_DataData%Input(i1), DstFEAMooring_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMAP_DataData%Output,1), UBOUND(SrcMAP_DataData%Output,1) + CALL MAP_CopyOutput( SrcMAP_DataData%Output(i1), DstMAP_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcFEAMooring_DataData%InputTimes)) THEN - i1_l = LBOUND(SrcFEAMooring_DataData%InputTimes,1) - i1_u = UBOUND(SrcFEAMooring_DataData%InputTimes,1) - IF (.NOT. ALLOCATED(DstFEAMooring_DataData%InputTimes)) THEN - ALLOCATE(DstFEAMooring_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + CALL MAP_CopyOutput( SrcMAP_DataData%y_interp, DstMAP_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +IF (ALLOCATED(SrcMAP_DataData%Input)) THEN + i1_l = LBOUND(SrcMAP_DataData%Input,1) + i1_u = UBOUND(SrcMAP_DataData%Input,1) + IF (.NOT. ALLOCATED(DstMAP_DataData%Input)) THEN + ALLOCATE(DstMAP_DataData%Input(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstFEAMooring_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMAP_DataData%Input.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstFEAMooring_DataData%InputTimes = SrcFEAMooring_DataData%InputTimes + DO i1 = LBOUND(SrcMAP_DataData%Input,1), UBOUND(SrcMAP_DataData%Input,1) + CALL MAP_CopyInput( SrcMAP_DataData%Input(i1), DstMAP_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO ENDIF - END SUBROUTINE FAST_CopyFEAMooring_Data +IF (ALLOCATED(SrcMAP_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcMAP_DataData%InputTimes,1) + i1_u = UBOUND(SrcMAP_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstMAP_DataData%InputTimes)) THEN + ALLOCATE(DstMAP_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMAP_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMAP_DataData%InputTimes = SrcMAP_DataData%InputTimes +ENDIF + END SUBROUTINE FAST_CopyMAP_Data - SUBROUTINE FAST_DestroyFEAMooring_Data( FEAMooring_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(FEAMooring_Data), INTENT(INOUT) :: FEAMooring_DataData + SUBROUTINE FAST_DestroyMAP_Data( MAP_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(MAP_Data), INTENT(INOUT) :: MAP_DataData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers @@ -33236,7 +33290,7 @@ SUBROUTINE FAST_DestroyFEAMooring_Data( FEAMooring_DataData, ErrStat, ErrMsg, DE LOGICAL :: DEALLOCATEpointers_local INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyFEAMooring_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyMAP_Data' ErrStat = ErrID_None ErrMsg = "" @@ -33247,47 +33301,54 @@ SUBROUTINE FAST_DestroyFEAMooring_Data( FEAMooring_DataData, ErrStat, ErrMsg, DE DEALLOCATEpointers_local = .true. END IF -DO i1 = LBOUND(FEAMooring_DataData%x,1), UBOUND(FEAMooring_DataData%x,1) - CALL FEAM_DestroyContState( FEAMooring_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(MAP_DataData%x,1), UBOUND(MAP_DataData%x,1) + CALL MAP_DestroyContState( MAP_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(FEAMooring_DataData%xd,1), UBOUND(FEAMooring_DataData%xd,1) - CALL FEAM_DestroyDiscState( FEAMooring_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(MAP_DataData%xd,1), UBOUND(MAP_DataData%xd,1) + CALL MAP_DestroyDiscState( MAP_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(FEAMooring_DataData%z,1), UBOUND(FEAMooring_DataData%z,1) - CALL FEAM_DestroyConstrState( FEAMooring_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(MAP_DataData%z,1), UBOUND(MAP_DataData%z,1) + CALL MAP_DestroyConstrState( MAP_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(FEAMooring_DataData%OtherSt,1), UBOUND(FEAMooring_DataData%OtherSt,1) - CALL FEAM_DestroyOtherState( FEAMooring_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MAP_DestroyOtherState( MAP_DataData%OtherSt, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - CALL FEAM_DestroyParam( FEAMooring_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MAP_DestroyParam( MAP_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL FEAM_DestroyInput( FEAMooring_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MAP_DestroyInput( MAP_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL FEAM_DestroyOutput( FEAMooring_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MAP_DestroyOutput( MAP_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL FEAM_DestroyMisc( FEAMooring_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MAP_DestroyOtherState( MAP_DataData%OtherSt_old, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(FEAMooring_DataData%Input)) THEN -DO i1 = LBOUND(FEAMooring_DataData%Input,1), UBOUND(FEAMooring_DataData%Input,1) - CALL FEAM_DestroyInput( FEAMooring_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(MAP_DataData%Output)) THEN +DO i1 = LBOUND(MAP_DataData%Output,1), UBOUND(MAP_DataData%Output,1) + CALL MAP_DestroyOutput( MAP_DataData%Output(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(FEAMooring_DataData%Input) + DEALLOCATE(MAP_DataData%Output) ENDIF -IF (ALLOCATED(FEAMooring_DataData%InputTimes)) THEN - DEALLOCATE(FEAMooring_DataData%InputTimes) + CALL MAP_DestroyOutput( MAP_DataData%y_interp, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(MAP_DataData%Input)) THEN +DO i1 = LBOUND(MAP_DataData%Input,1), UBOUND(MAP_DataData%Input,1) + CALL MAP_DestroyInput( MAP_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO + DEALLOCATE(MAP_DataData%Input) ENDIF - END SUBROUTINE FAST_DestroyFEAMooring_Data +IF (ALLOCATED(MAP_DataData%InputTimes)) THEN + DEALLOCATE(MAP_DataData%InputTimes) +ENDIF + END SUBROUTINE FAST_DestroyMAP_Data - SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE FAST_PackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(FEAMooring_Data), INTENT(IN) :: InData + TYPE(MAP_Data), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -33302,7 +33363,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackFEAMooring_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackMAP_Data' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -33321,7 +33382,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat ! Allocate buffers for subtypes, if any (we'll get sizes from these) DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) Int_BufSz = Int_BufSz + 3 ! x: size of buffers for each call to pack subtype - CALL FEAM_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x + CALL MAP_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33340,7 +33401,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) Int_BufSz = Int_BufSz + 3 ! xd: size of buffers for each call to pack subtype - CALL FEAM_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd + CALL MAP_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33359,7 +33420,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) Int_BufSz = Int_BufSz + 3 ! z: size of buffers for each call to pack subtype - CALL FEAM_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z + CALL MAP_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33376,9 +33437,8 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat DEALLOCATE(Int_Buf) END IF END DO - DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) Int_BufSz = Int_BufSz + 3 ! OtherSt: size of buffers for each call to pack subtype - CALL FEAM_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt + CALL MAP_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt, ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33394,9 +33454,8 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - END DO Int_BufSz = Int_BufSz + 3 ! p: size of buffers for each call to pack subtype - CALL FEAM_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p + CALL MAP_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33413,7 +33472,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! u: size of buffers for each call to pack subtype - CALL FEAM_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u + CALL MAP_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33430,7 +33489,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! y: size of buffers for each call to pack subtype - CALL FEAM_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y + CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33446,20 +33505,60 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! m: size of buffers for each call to pack subtype - CALL FEAM_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m + Int_BufSz = Int_BufSz + 3 ! OtherSt_old: size of buffers for each call to pack subtype + CALL MAP_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt_old, ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt_old CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! m + IF(ALLOCATED(Re_Buf)) THEN ! OtherSt_old Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! m + IF(ALLOCATED(Db_Buf)) THEN ! OtherSt_old Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! m + IF(ALLOCATED(Int_Buf)) THEN ! OtherSt_old + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 1 ! Output allocated yes/no + IF ( ALLOCATED(InData%Output) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! Output upper/lower bounds for each dimension + DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) + Int_BufSz = Int_BufSz + 3 ! Output: size of buffers for each call to pack subtype + CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Output + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Output + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Output + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + END IF + Int_BufSz = Int_BufSz + 3 ! y_interp: size of buffers for each call to pack subtype + CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, .TRUE. ) ! y_interp + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! y_interp + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! y_interp + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! y_interp Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF @@ -33468,7 +33567,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat Int_BufSz = Int_BufSz + 2*1 ! Input upper/lower bounds for each dimension DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) Int_BufSz = Int_BufSz + 3 ! Input: size of buffers for each call to pack subtype - CALL FEAM_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + CALL MAP_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33519,7 +33618,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat Int_Xferred = 1 DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) - CALL FEAM_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x + CALL MAP_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33549,7 +33648,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat ENDIF END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) - CALL FEAM_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd + CALL MAP_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33579,7 +33678,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat ENDIF END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) - CALL FEAM_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z + CALL MAP_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33608,8 +33707,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO - DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) - CALL FEAM_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt + CALL MAP_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt, ErrStat2, ErrMsg2, OnlySize ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33637,8 +33735,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END DO - CALL FEAM_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p + CALL MAP_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33666,7 +33763,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL FEAM_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u + CALL MAP_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33694,7 +33791,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL FEAM_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y + CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33722,7 +33819,76 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL FEAM_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m + CALL MAP_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt_old, ErrStat2, ErrMsg2, OnlySize ) ! OtherSt_old + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF ( .NOT. ALLOCATED(InData%Output) ) 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%Output,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Output,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) + CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, OnlySize ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + END IF + CALL MAP_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, OnlySize ) ! y_interp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33761,7 +33927,7 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat Int_Xferred = Int_Xferred + 2 DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) - CALL FEAM_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input + CALL MAP_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33806,13 +33972,13 @@ SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_PackFEAMooring_Data + END SUBROUTINE FAST_PackMAP_Data - SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + SUBROUTINE FAST_UnPackMAP_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(FEAMooring_Data), INTENT(INOUT) :: OutData + TYPE(MAP_Data), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -33824,7 +33990,7 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackFEAMooring_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackMAP_Data' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -33871,7 +34037,7 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x + CALL MAP_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33915,7 +34081,7 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd + CALL MAP_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33959,7 +34125,7 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z + CALL MAP_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -33967,9 +34133,6 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO - i1_l = LBOUND(OutData%OtherSt,1) - i1_u = UBOUND(OutData%OtherSt,1) - DO i1 = LBOUND(OutData%OtherSt,1), UBOUND(OutData%OtherSt,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -34003,14 +34166,13 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt + CALL MAP_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt, ErrStat2, ErrMsg2 ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -34044,7 +34206,7 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p + CALL MAP_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34084,7 +34246,7 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u + CALL MAP_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34124,7 +34286,7 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y + CALL MAP_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34164,7 +34326,103 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + CALL MAP_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt_old, ErrStat2, ErrMsg2 ) ! OtherSt_old + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Output 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%Output)) DEALLOCATE(OutData%Output) + ALLOCATE(OutData%Output(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%Output.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%Output,1), UBOUND(OutData%Output,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MAP_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Output(i1), ErrStat2, ErrMsg2 ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MAP_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y_interp, ErrStat2, ErrMsg2 ) ! y_interp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34218,7 +34476,7 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL FEAM_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input + CALL MAP_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34245,11 +34503,11 @@ SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_UnPackFEAMooring_Data + END SUBROUTINE FAST_UnPackMAP_Data - SUBROUTINE FAST_CopyMoorDyn_Data( SrcMoorDyn_DataData, DstMoorDyn_DataData, CtrlCode, ErrStat, ErrMsg ) - TYPE(MoorDyn_Data), INTENT(INOUT) :: SrcMoorDyn_DataData - TYPE(MoorDyn_Data), INTENT(INOUT) :: DstMoorDyn_DataData + SUBROUTINE FAST_CopyFEAMooring_Data( SrcFEAMooring_DataData, DstFEAMooring_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(FEAMooring_Data), INTENT(INOUT) :: SrcFEAMooring_DataData + TYPE(FEAMooring_Data), INTENT(INOUT) :: DstFEAMooring_DataData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg @@ -34258,93 +34516,74 @@ SUBROUTINE FAST_CopyMoorDyn_Data( SrcMoorDyn_DataData, DstMoorDyn_DataData, Ctrl INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyMoorDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyFEAMooring_Data' ! ErrStat = ErrID_None ErrMsg = "" - DO i1 = LBOUND(SrcMoorDyn_DataData%x,1), UBOUND(SrcMoorDyn_DataData%x,1) - CALL MD_CopyContState( SrcMoorDyn_DataData%x(i1), DstMoorDyn_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcFEAMooring_DataData%x,1), UBOUND(SrcFEAMooring_DataData%x,1) + CALL FEAM_CopyContState( SrcFEAMooring_DataData%x(i1), DstFEAMooring_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcMoorDyn_DataData%xd,1), UBOUND(SrcMoorDyn_DataData%xd,1) - CALL MD_CopyDiscState( SrcMoorDyn_DataData%xd(i1), DstMoorDyn_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcFEAMooring_DataData%xd,1), UBOUND(SrcFEAMooring_DataData%xd,1) + CALL FEAM_CopyDiscState( SrcFEAMooring_DataData%xd(i1), DstFEAMooring_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcMoorDyn_DataData%z,1), UBOUND(SrcMoorDyn_DataData%z,1) - CALL MD_CopyConstrState( SrcMoorDyn_DataData%z(i1), DstMoorDyn_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcFEAMooring_DataData%z,1), UBOUND(SrcFEAMooring_DataData%z,1) + CALL FEAM_CopyConstrState( SrcFEAMooring_DataData%z(i1), DstFEAMooring_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcMoorDyn_DataData%OtherSt,1), UBOUND(SrcMoorDyn_DataData%OtherSt,1) - CALL MD_CopyOtherState( SrcMoorDyn_DataData%OtherSt(i1), DstMoorDyn_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcFEAMooring_DataData%OtherSt,1), UBOUND(SrcFEAMooring_DataData%OtherSt,1) + CALL FEAM_CopyOtherState( SrcFEAMooring_DataData%OtherSt(i1), DstFEAMooring_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - CALL MD_CopyParam( SrcMoorDyn_DataData%p, DstMoorDyn_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL MD_CopyInput( SrcMoorDyn_DataData%u, DstMoorDyn_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL MD_CopyOutput( SrcMoorDyn_DataData%y, DstMoorDyn_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + CALL FEAM_CopyParam( SrcFEAMooring_DataData%p, DstFEAMooring_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MD_CopyMisc( SrcMoorDyn_DataData%m, DstMoorDyn_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL FEAM_CopyInput( SrcFEAMooring_DataData%u, DstFEAMooring_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcMoorDyn_DataData%Output)) THEN - i1_l = LBOUND(SrcMoorDyn_DataData%Output,1) - i1_u = UBOUND(SrcMoorDyn_DataData%Output,1) - IF (.NOT. ALLOCATED(DstMoorDyn_DataData%Output)) THEN - ALLOCATE(DstMoorDyn_DataData%Output(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMoorDyn_DataData%Output.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcMoorDyn_DataData%Output,1), UBOUND(SrcMoorDyn_DataData%Output,1) - CALL MD_CopyOutput( SrcMoorDyn_DataData%Output(i1), DstMoorDyn_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL FEAM_CopyOutput( SrcFEAMooring_DataData%y, DstFEAMooring_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF - CALL MD_CopyOutput( SrcMoorDyn_DataData%y_interp, DstMoorDyn_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) + CALL FEAM_CopyMisc( SrcFEAMooring_DataData%m, DstFEAMooring_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcMoorDyn_DataData%Input)) THEN - i1_l = LBOUND(SrcMoorDyn_DataData%Input,1) - i1_u = UBOUND(SrcMoorDyn_DataData%Input,1) - IF (.NOT. ALLOCATED(DstMoorDyn_DataData%Input)) THEN - ALLOCATE(DstMoorDyn_DataData%Input(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcFEAMooring_DataData%Input)) THEN + i1_l = LBOUND(SrcFEAMooring_DataData%Input,1) + i1_u = UBOUND(SrcFEAMooring_DataData%Input,1) + IF (.NOT. ALLOCATED(DstFEAMooring_DataData%Input)) THEN + ALLOCATE(DstFEAMooring_DataData%Input(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMoorDyn_DataData%Input.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstFEAMooring_DataData%Input.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcMoorDyn_DataData%Input,1), UBOUND(SrcMoorDyn_DataData%Input,1) - CALL MD_CopyInput( SrcMoorDyn_DataData%Input(i1), DstMoorDyn_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcFEAMooring_DataData%Input,1), UBOUND(SrcFEAMooring_DataData%Input,1) + CALL FEAM_CopyInput( SrcFEAMooring_DataData%Input(i1), DstFEAMooring_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcMoorDyn_DataData%InputTimes)) THEN - i1_l = LBOUND(SrcMoorDyn_DataData%InputTimes,1) - i1_u = UBOUND(SrcMoorDyn_DataData%InputTimes,1) - IF (.NOT. ALLOCATED(DstMoorDyn_DataData%InputTimes)) THEN - ALLOCATE(DstMoorDyn_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcFEAMooring_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcFEAMooring_DataData%InputTimes,1) + i1_u = UBOUND(SrcFEAMooring_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstFEAMooring_DataData%InputTimes)) THEN + ALLOCATE(DstFEAMooring_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMoorDyn_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstFEAMooring_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstMoorDyn_DataData%InputTimes = SrcMoorDyn_DataData%InputTimes + DstFEAMooring_DataData%InputTimes = SrcFEAMooring_DataData%InputTimes ENDIF - END SUBROUTINE FAST_CopyMoorDyn_Data + END SUBROUTINE FAST_CopyFEAMooring_Data - SUBROUTINE FAST_DestroyMoorDyn_Data( MoorDyn_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(MoorDyn_Data), INTENT(INOUT) :: MoorDyn_DataData + SUBROUTINE FAST_DestroyFEAMooring_Data( FEAMooring_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(FEAMooring_Data), INTENT(INOUT) :: FEAMooring_DataData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers @@ -34353,7 +34592,7 @@ SUBROUTINE FAST_DestroyMoorDyn_Data( MoorDyn_DataData, ErrStat, ErrMsg, DEALLOCA LOGICAL :: DEALLOCATEpointers_local INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyMoorDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyFEAMooring_Data' ErrStat = ErrID_None ErrMsg = "" @@ -34364,56 +34603,47 @@ SUBROUTINE FAST_DestroyMoorDyn_Data( MoorDyn_DataData, ErrStat, ErrMsg, DEALLOCA DEALLOCATEpointers_local = .true. END IF -DO i1 = LBOUND(MoorDyn_DataData%x,1), UBOUND(MoorDyn_DataData%x,1) - CALL MD_DestroyContState( MoorDyn_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(FEAMooring_DataData%x,1), UBOUND(FEAMooring_DataData%x,1) + CALL FEAM_DestroyContState( FEAMooring_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(MoorDyn_DataData%xd,1), UBOUND(MoorDyn_DataData%xd,1) - CALL MD_DestroyDiscState( MoorDyn_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(FEAMooring_DataData%xd,1), UBOUND(FEAMooring_DataData%xd,1) + CALL FEAM_DestroyDiscState( FEAMooring_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(MoorDyn_DataData%z,1), UBOUND(MoorDyn_DataData%z,1) - CALL MD_DestroyConstrState( MoorDyn_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(FEAMooring_DataData%z,1), UBOUND(FEAMooring_DataData%z,1) + CALL FEAM_DestroyConstrState( FEAMooring_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(MoorDyn_DataData%OtherSt,1), UBOUND(MoorDyn_DataData%OtherSt,1) - CALL MD_DestroyOtherState( MoorDyn_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(FEAMooring_DataData%OtherSt,1), UBOUND(FEAMooring_DataData%OtherSt,1) + CALL FEAM_DestroyOtherState( FEAMooring_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - CALL MD_DestroyParam( MoorDyn_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MD_DestroyInput( MoorDyn_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MD_DestroyOutput( MoorDyn_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL FEAM_DestroyParam( FEAMooring_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MD_DestroyMisc( MoorDyn_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL FEAM_DestroyInput( FEAMooring_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(MoorDyn_DataData%Output)) THEN -DO i1 = LBOUND(MoorDyn_DataData%Output,1), UBOUND(MoorDyn_DataData%Output,1) - CALL MD_DestroyOutput( MoorDyn_DataData%Output(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL FEAM_DestroyOutput( FEAMooring_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(MoorDyn_DataData%Output) -ENDIF - CALL MD_DestroyOutput( MoorDyn_DataData%y_interp, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL FEAM_DestroyMisc( FEAMooring_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(MoorDyn_DataData%Input)) THEN -DO i1 = LBOUND(MoorDyn_DataData%Input,1), UBOUND(MoorDyn_DataData%Input,1) - CALL MD_DestroyInput( MoorDyn_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(FEAMooring_DataData%Input)) THEN +DO i1 = LBOUND(FEAMooring_DataData%Input,1), UBOUND(FEAMooring_DataData%Input,1) + CALL FEAM_DestroyInput( FEAMooring_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(MoorDyn_DataData%Input) + DEALLOCATE(FEAMooring_DataData%Input) ENDIF -IF (ALLOCATED(MoorDyn_DataData%InputTimes)) THEN - DEALLOCATE(MoorDyn_DataData%InputTimes) +IF (ALLOCATED(FEAMooring_DataData%InputTimes)) THEN + DEALLOCATE(FEAMooring_DataData%InputTimes) ENDIF - END SUBROUTINE FAST_DestroyMoorDyn_Data + END SUBROUTINE FAST_DestroyFEAMooring_Data - SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE FAST_PackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(MoorDyn_Data), INTENT(IN) :: InData + TYPE(FEAMooring_Data), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -34428,7 +34658,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackMoorDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackFEAMooring_Data' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -34447,7 +34677,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ! Allocate buffers for subtypes, if any (we'll get sizes from these) DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) Int_BufSz = Int_BufSz + 3 ! x: size of buffers for each call to pack subtype - CALL MD_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x + CALL FEAM_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34466,7 +34696,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) Int_BufSz = Int_BufSz + 3 ! xd: size of buffers for each call to pack subtype - CALL MD_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd + CALL FEAM_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34485,7 +34715,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) Int_BufSz = Int_BufSz + 3 ! z: size of buffers for each call to pack subtype - CALL MD_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z + CALL FEAM_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34504,7 +34734,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END DO DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) Int_BufSz = Int_BufSz + 3 ! OtherSt: size of buffers for each call to pack subtype - CALL MD_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt + CALL FEAM_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34522,7 +34752,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END IF END DO Int_BufSz = Int_BufSz + 3 ! p: size of buffers for each call to pack subtype - CALL MD_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p + CALL FEAM_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34539,7 +34769,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! u: size of buffers for each call to pack subtype - CALL MD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u + CALL FEAM_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34556,7 +34786,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! y: size of buffers for each call to pack subtype - CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y + CALL FEAM_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34573,7 +34803,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! m: size of buffers for each call to pack subtype - CALL MD_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m + CALL FEAM_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34589,52 +34819,12 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 1 ! Output allocated yes/no - IF ( ALLOCATED(InData%Output) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! Output upper/lower bounds for each dimension - DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) - Int_BufSz = Int_BufSz + 3 ! Output: size of buffers for each call to pack subtype - CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Output - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! Output - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! Output - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! Output - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 3 ! y_interp: size of buffers for each call to pack subtype - CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, .TRUE. ) ! y_interp - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! y_interp - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! y_interp - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! y_interp - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 1 ! Input allocated yes/no IF ( ALLOCATED(InData%Input) ) THEN Int_BufSz = Int_BufSz + 2*1 ! Input upper/lower bounds for each dimension DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) Int_BufSz = Int_BufSz + 3 ! Input: size of buffers for each call to pack subtype - CALL MD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + CALL FEAM_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34685,7 +34875,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = 1 DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) - CALL MD_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x + CALL FEAM_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34715,7 +34905,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ENDIF END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) - CALL MD_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd + CALL FEAM_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34745,7 +34935,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ENDIF END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) - CALL MD_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z + CALL FEAM_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34775,7 +34965,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ENDIF END DO DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) - CALL MD_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt + CALL FEAM_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34804,63 +34994,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO - CALL MD_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL MD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y + CALL FEAM_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34888,7 +35022,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MD_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m + CALL FEAM_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34916,18 +35050,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - IF ( .NOT. ALLOCATED(InData%Output) ) 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%Output,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Output,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) - CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, OnlySize ) ! Output + CALL FEAM_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34955,9 +35078,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END DO - END IF - CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, OnlySize ) ! y_interp + CALL FEAM_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -34996,7 +35117,7 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = Int_Xferred + 2 DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) - CALL MD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input + CALL FEAM_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35041,13 +35162,13 @@ SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_PackMoorDyn_Data + END SUBROUTINE FAST_PackFEAMooring_Data - SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + SUBROUTINE FAST_UnPackFEAMooring_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) - TYPE(MoorDyn_Data), INTENT(INOUT) :: OutData + TYPE(FEAMooring_Data), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -35059,7 +35180,7 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackMoorDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackFEAMooring_Data' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -35106,7 +35227,7 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x + CALL FEAM_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35150,7 +35271,7 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd + CALL FEAM_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35194,7 +35315,7 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z + CALL FEAM_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35238,7 +35359,7 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt + CALL FEAM_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35279,87 +35400,7 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL MD_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL MD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y + CALL FEAM_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35399,27 +35440,13 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + CALL FEAM_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Output 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%Output)) DEALLOCATE(OutData%Output) - ALLOCATE(OutData%Output(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%Output.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%Output,1), UBOUND(OutData%Output,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -35453,15 +35480,13 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Output(i1), ErrStat2, ErrMsg2 ) ! Output + CALL FEAM_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -35495,7 +35520,7 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y_interp, ErrStat2, ErrMsg2 ) ! y_interp + CALL FEAM_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35549,7 +35574,7 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MD_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input + CALL FEAM_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35576,11 +35601,11 @@ SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_UnPackMoorDyn_Data + END SUBROUTINE FAST_UnPackFEAMooring_Data - SUBROUTINE FAST_CopyOrcaFlex_Data( SrcOrcaFlex_DataData, DstOrcaFlex_DataData, CtrlCode, ErrStat, ErrMsg ) - TYPE(OrcaFlex_Data), INTENT(INOUT) :: SrcOrcaFlex_DataData - TYPE(OrcaFlex_Data), INTENT(INOUT) :: DstOrcaFlex_DataData + SUBROUTINE FAST_CopyMoorDyn_Data( SrcMoorDyn_DataData, DstMoorDyn_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(MoorDyn_Data), INTENT(INOUT) :: SrcMoorDyn_DataData + TYPE(MoorDyn_Data), INTENT(INOUT) :: DstMoorDyn_DataData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg @@ -35589,74 +35614,93 @@ SUBROUTINE FAST_CopyOrcaFlex_Data( SrcOrcaFlex_DataData, DstOrcaFlex_DataData, C INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyOrcaFlex_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyMoorDyn_Data' ! ErrStat = ErrID_None ErrMsg = "" - DO i1 = LBOUND(SrcOrcaFlex_DataData%x,1), UBOUND(SrcOrcaFlex_DataData%x,1) - CALL Orca_CopyContState( SrcOrcaFlex_DataData%x(i1), DstOrcaFlex_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMoorDyn_DataData%x,1), UBOUND(SrcMoorDyn_DataData%x,1) + CALL MD_CopyContState( SrcMoorDyn_DataData%x(i1), DstMoorDyn_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcOrcaFlex_DataData%xd,1), UBOUND(SrcOrcaFlex_DataData%xd,1) - CALL Orca_CopyDiscState( SrcOrcaFlex_DataData%xd(i1), DstOrcaFlex_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMoorDyn_DataData%xd,1), UBOUND(SrcMoorDyn_DataData%xd,1) + CALL MD_CopyDiscState( SrcMoorDyn_DataData%xd(i1), DstMoorDyn_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcOrcaFlex_DataData%z,1), UBOUND(SrcOrcaFlex_DataData%z,1) - CALL Orca_CopyConstrState( SrcOrcaFlex_DataData%z(i1), DstOrcaFlex_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMoorDyn_DataData%z,1), UBOUND(SrcMoorDyn_DataData%z,1) + CALL MD_CopyConstrState( SrcMoorDyn_DataData%z(i1), DstMoorDyn_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcOrcaFlex_DataData%OtherSt,1), UBOUND(SrcOrcaFlex_DataData%OtherSt,1) - CALL Orca_CopyOtherState( SrcOrcaFlex_DataData%OtherSt(i1), DstOrcaFlex_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMoorDyn_DataData%OtherSt,1), UBOUND(SrcMoorDyn_DataData%OtherSt,1) + CALL MD_CopyOtherState( SrcMoorDyn_DataData%OtherSt(i1), DstMoorDyn_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - CALL Orca_CopyParam( SrcOrcaFlex_DataData%p, DstOrcaFlex_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MD_CopyParam( SrcMoorDyn_DataData%p, DstMoorDyn_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL Orca_CopyInput( SrcOrcaFlex_DataData%u, DstOrcaFlex_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MD_CopyInput( SrcMoorDyn_DataData%u, DstMoorDyn_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL Orca_CopyOutput( SrcOrcaFlex_DataData%y, DstOrcaFlex_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MD_CopyOutput( SrcMoorDyn_DataData%y, DstMoorDyn_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL Orca_CopyMisc( SrcOrcaFlex_DataData%m, DstOrcaFlex_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MD_CopyMisc( SrcMoorDyn_DataData%m, DstMoorDyn_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcOrcaFlex_DataData%Input)) THEN - i1_l = LBOUND(SrcOrcaFlex_DataData%Input,1) - i1_u = UBOUND(SrcOrcaFlex_DataData%Input,1) - IF (.NOT. ALLOCATED(DstOrcaFlex_DataData%Input)) THEN - ALLOCATE(DstOrcaFlex_DataData%Input(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcMoorDyn_DataData%Output)) THEN + i1_l = LBOUND(SrcMoorDyn_DataData%Output,1) + i1_u = UBOUND(SrcMoorDyn_DataData%Output,1) + IF (.NOT. ALLOCATED(DstMoorDyn_DataData%Output)) THEN + ALLOCATE(DstMoorDyn_DataData%Output(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstOrcaFlex_DataData%Input.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMoorDyn_DataData%Output.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcOrcaFlex_DataData%Input,1), UBOUND(SrcOrcaFlex_DataData%Input,1) - CALL Orca_CopyInput( SrcOrcaFlex_DataData%Input(i1), DstOrcaFlex_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcMoorDyn_DataData%Output,1), UBOUND(SrcMoorDyn_DataData%Output,1) + CALL MD_CopyOutput( SrcMoorDyn_DataData%Output(i1), DstMoorDyn_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcOrcaFlex_DataData%InputTimes)) THEN - i1_l = LBOUND(SrcOrcaFlex_DataData%InputTimes,1) - i1_u = UBOUND(SrcOrcaFlex_DataData%InputTimes,1) - IF (.NOT. ALLOCATED(DstOrcaFlex_DataData%InputTimes)) THEN - ALLOCATE(DstOrcaFlex_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + CALL MD_CopyOutput( SrcMoorDyn_DataData%y_interp, DstMoorDyn_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +IF (ALLOCATED(SrcMoorDyn_DataData%Input)) THEN + i1_l = LBOUND(SrcMoorDyn_DataData%Input,1) + i1_u = UBOUND(SrcMoorDyn_DataData%Input,1) + IF (.NOT. ALLOCATED(DstMoorDyn_DataData%Input)) THEN + ALLOCATE(DstMoorDyn_DataData%Input(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstOrcaFlex_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMoorDyn_DataData%Input.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstOrcaFlex_DataData%InputTimes = SrcOrcaFlex_DataData%InputTimes + DO i1 = LBOUND(SrcMoorDyn_DataData%Input,1), UBOUND(SrcMoorDyn_DataData%Input,1) + CALL MD_CopyInput( SrcMoorDyn_DataData%Input(i1), DstMoorDyn_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO ENDIF - END SUBROUTINE FAST_CopyOrcaFlex_Data +IF (ALLOCATED(SrcMoorDyn_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcMoorDyn_DataData%InputTimes,1) + i1_u = UBOUND(SrcMoorDyn_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstMoorDyn_DataData%InputTimes)) THEN + ALLOCATE(DstMoorDyn_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstMoorDyn_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstMoorDyn_DataData%InputTimes = SrcMoorDyn_DataData%InputTimes +ENDIF + END SUBROUTINE FAST_CopyMoorDyn_Data - SUBROUTINE FAST_DestroyOrcaFlex_Data( OrcaFlex_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) - TYPE(OrcaFlex_Data), INTENT(INOUT) :: OrcaFlex_DataData + SUBROUTINE FAST_DestroyMoorDyn_Data( MoorDyn_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(MoorDyn_Data), INTENT(INOUT) :: MoorDyn_DataData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers @@ -35665,7 +35709,7 @@ SUBROUTINE FAST_DestroyOrcaFlex_Data( OrcaFlex_DataData, ErrStat, ErrMsg, DEALLO LOGICAL :: DEALLOCATEpointers_local INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyOrcaFlex_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyMoorDyn_Data' ErrStat = ErrID_None ErrMsg = "" @@ -35676,47 +35720,56 @@ SUBROUTINE FAST_DestroyOrcaFlex_Data( OrcaFlex_DataData, ErrStat, ErrMsg, DEALLO DEALLOCATEpointers_local = .true. END IF -DO i1 = LBOUND(OrcaFlex_DataData%x,1), UBOUND(OrcaFlex_DataData%x,1) - CALL Orca_DestroyContState( OrcaFlex_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(MoorDyn_DataData%x,1), UBOUND(MoorDyn_DataData%x,1) + CALL MD_DestroyContState( MoorDyn_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(OrcaFlex_DataData%xd,1), UBOUND(OrcaFlex_DataData%xd,1) - CALL Orca_DestroyDiscState( OrcaFlex_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(MoorDyn_DataData%xd,1), UBOUND(MoorDyn_DataData%xd,1) + CALL MD_DestroyDiscState( MoorDyn_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(OrcaFlex_DataData%z,1), UBOUND(OrcaFlex_DataData%z,1) - CALL Orca_DestroyConstrState( OrcaFlex_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(MoorDyn_DataData%z,1), UBOUND(MoorDyn_DataData%z,1) + CALL MD_DestroyConstrState( MoorDyn_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO -DO i1 = LBOUND(OrcaFlex_DataData%OtherSt,1), UBOUND(OrcaFlex_DataData%OtherSt,1) - CALL Orca_DestroyOtherState( OrcaFlex_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +DO i1 = LBOUND(MoorDyn_DataData%OtherSt,1), UBOUND(MoorDyn_DataData%OtherSt,1) + CALL MD_DestroyOtherState( MoorDyn_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - CALL Orca_DestroyParam( OrcaFlex_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MD_DestroyParam( MoorDyn_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL Orca_DestroyInput( OrcaFlex_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MD_DestroyInput( MoorDyn_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL Orca_DestroyOutput( OrcaFlex_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MD_DestroyOutput( MoorDyn_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL Orca_DestroyMisc( OrcaFlex_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL MD_DestroyMisc( MoorDyn_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -IF (ALLOCATED(OrcaFlex_DataData%Input)) THEN -DO i1 = LBOUND(OrcaFlex_DataData%Input,1), UBOUND(OrcaFlex_DataData%Input,1) - CALL Orca_DestroyInput( OrcaFlex_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(MoorDyn_DataData%Output)) THEN +DO i1 = LBOUND(MoorDyn_DataData%Output,1), UBOUND(MoorDyn_DataData%Output,1) + CALL MD_DestroyOutput( MoorDyn_DataData%Output(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(OrcaFlex_DataData%Input) + DEALLOCATE(MoorDyn_DataData%Output) ENDIF -IF (ALLOCATED(OrcaFlex_DataData%InputTimes)) THEN - DEALLOCATE(OrcaFlex_DataData%InputTimes) + CALL MD_DestroyOutput( MoorDyn_DataData%y_interp, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(MoorDyn_DataData%Input)) THEN +DO i1 = LBOUND(MoorDyn_DataData%Input,1), UBOUND(MoorDyn_DataData%Input,1) + CALL MD_DestroyInput( MoorDyn_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO + DEALLOCATE(MoorDyn_DataData%Input) ENDIF - END SUBROUTINE FAST_DestroyOrcaFlex_Data +IF (ALLOCATED(MoorDyn_DataData%InputTimes)) THEN + DEALLOCATE(MoorDyn_DataData%InputTimes) +ENDIF + END SUBROUTINE FAST_DestroyMoorDyn_Data - SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE FAST_PackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) - TYPE(OrcaFlex_Data), INTENT(IN) :: InData + TYPE(MoorDyn_Data), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -35731,7 +35784,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackOrcaFlex_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackMoorDyn_Data' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -35750,7 +35803,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ! Allocate buffers for subtypes, if any (we'll get sizes from these) DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) Int_BufSz = Int_BufSz + 3 ! x: size of buffers for each call to pack subtype - CALL Orca_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x + CALL MD_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35769,7 +35822,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) Int_BufSz = Int_BufSz + 3 ! xd: size of buffers for each call to pack subtype - CALL Orca_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd + CALL MD_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35788,7 +35841,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) Int_BufSz = Int_BufSz + 3 ! z: size of buffers for each call to pack subtype - CALL Orca_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z + CALL MD_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35807,7 +35860,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) Int_BufSz = Int_BufSz + 3 ! OtherSt: size of buffers for each call to pack subtype - CALL Orca_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt + CALL MD_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35825,7 +35878,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END IF END DO Int_BufSz = Int_BufSz + 3 ! p: size of buffers for each call to pack subtype - CALL Orca_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p + CALL MD_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35842,7 +35895,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! u: size of buffers for each call to pack subtype - CALL Orca_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u + CALL MD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35859,7 +35912,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! y: size of buffers for each call to pack subtype - CALL Orca_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y + CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35876,7 +35929,7 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! m: size of buffers for each call to pack subtype - CALL Orca_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m + CALL MD_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -35892,12 +35945,1315 @@ SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF + Int_BufSz = Int_BufSz + 1 ! Output allocated yes/no + IF ( ALLOCATED(InData%Output) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! Output upper/lower bounds for each dimension + DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) + Int_BufSz = Int_BufSz + 3 ! Output: size of buffers for each call to pack subtype + CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Output + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Output + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Output + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + END IF + Int_BufSz = Int_BufSz + 3 ! y_interp: size of buffers for each call to pack subtype + CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, .TRUE. ) ! y_interp + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! y_interp + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! y_interp + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! y_interp + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF Int_BufSz = Int_BufSz + 1 ! Input allocated yes/no IF ( ALLOCATED(InData%Input) ) THEN Int_BufSz = Int_BufSz + 2*1 ! Input upper/lower bounds for each dimension DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) Int_BufSz = Int_BufSz + 3 ! Input: size of buffers for each call to pack subtype - CALL Orca_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + CALL MD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Input + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Input + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Input + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + END IF + Int_BufSz = Int_BufSz + 1 ! InputTimes allocated yes/no + IF ( ALLOCATED(InData%InputTimes) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! InputTimes upper/lower bounds for each dimension + Db_BufSz = Db_BufSz + SIZE(InData%InputTimes) ! InputTimes + END IF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) + CALL MD_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) + CALL MD_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) + CALL MD_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) + CALL MD_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + CALL MD_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + CALL MD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + CALL MD_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF ( .NOT. ALLOCATED(InData%Output) ) 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%Output,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Output,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%Output,1), UBOUND(InData%Output,1) + CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, OnlySize ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + END IF + CALL MD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y_interp, ErrStat2, ErrMsg2, OnlySize ) ! y_interp + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF ( .NOT. ALLOCATED(InData%Input) ) 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%Input,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%Input,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) + CALL MD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, OnlySize ) ! Input + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + END IF + IF ( .NOT. ALLOCATED(InData%InputTimes) ) 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%InputTimes,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%InputTimes,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%InputTimes,1), UBOUND(InData%InputTimes,1) + DbKiBuf(Db_Xferred) = InData%InputTimes(i1) + Db_Xferred = Db_Xferred + 1 + END DO + END IF + END SUBROUTINE FAST_PackMoorDyn_Data + + SUBROUTINE FAST_UnPackMoorDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(MoorDyn_Data), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackMoorDyn_Data' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + i1_l = LBOUND(OutData%x,1) + i1_u = UBOUND(OutData%x,1) + DO i1 = LBOUND(OutData%x,1), UBOUND(OutData%x,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + i1_l = LBOUND(OutData%xd,1) + i1_u = UBOUND(OutData%xd,1) + DO i1 = LBOUND(OutData%xd,1), UBOUND(OutData%xd,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + i1_l = LBOUND(OutData%z,1) + i1_u = UBOUND(OutData%z,1) + DO i1 = LBOUND(OutData%z,1), UBOUND(OutData%z,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackConstrState( Re_Buf, Db_Buf, Int_Buf, OutData%z(i1), ErrStat2, ErrMsg2 ) ! z + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + i1_l = LBOUND(OutData%OtherSt,1) + i1_u = UBOUND(OutData%OtherSt,1) + DO i1 = LBOUND(OutData%OtherSt,1), UBOUND(OutData%OtherSt,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackOtherState( Re_Buf, Db_Buf, Int_Buf, OutData%OtherSt(i1), ErrStat2, ErrMsg2 ) ! OtherSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Output 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%Output)) DEALLOCATE(OutData%Output) + ALLOCATE(OutData%Output(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%Output.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%Output,1), UBOUND(OutData%Output,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Output(i1), ErrStat2, ErrMsg2 ) ! Output + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y_interp, ErrStat2, ErrMsg2 ) ! y_interp + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Input 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%Input)) DEALLOCATE(OutData%Input) + ALLOCATE(OutData%Input(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%Input.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%Input,1), UBOUND(OutData%Input,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL MD_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! InputTimes 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%InputTimes)) DEALLOCATE(OutData%InputTimes) + ALLOCATE(OutData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%InputTimes.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%InputTimes,1), UBOUND(OutData%InputTimes,1) + OutData%InputTimes(i1) = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + END DO + END IF + END SUBROUTINE FAST_UnPackMoorDyn_Data + + SUBROUTINE FAST_CopyOrcaFlex_Data( SrcOrcaFlex_DataData, DstOrcaFlex_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(OrcaFlex_Data), INTENT(INOUT) :: SrcOrcaFlex_DataData + TYPE(OrcaFlex_Data), INTENT(INOUT) :: DstOrcaFlex_DataData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyOrcaFlex_Data' +! + ErrStat = ErrID_None + ErrMsg = "" + DO i1 = LBOUND(SrcOrcaFlex_DataData%x,1), UBOUND(SrcOrcaFlex_DataData%x,1) + CALL Orca_CopyContState( SrcOrcaFlex_DataData%x(i1), DstOrcaFlex_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO + DO i1 = LBOUND(SrcOrcaFlex_DataData%xd,1), UBOUND(SrcOrcaFlex_DataData%xd,1) + CALL Orca_CopyDiscState( SrcOrcaFlex_DataData%xd(i1), DstOrcaFlex_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO + DO i1 = LBOUND(SrcOrcaFlex_DataData%z,1), UBOUND(SrcOrcaFlex_DataData%z,1) + CALL Orca_CopyConstrState( SrcOrcaFlex_DataData%z(i1), DstOrcaFlex_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO + DO i1 = LBOUND(SrcOrcaFlex_DataData%OtherSt,1), UBOUND(SrcOrcaFlex_DataData%OtherSt,1) + CALL Orca_CopyOtherState( SrcOrcaFlex_DataData%OtherSt(i1), DstOrcaFlex_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO + CALL Orca_CopyParam( SrcOrcaFlex_DataData%p, DstOrcaFlex_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL Orca_CopyInput( SrcOrcaFlex_DataData%u, DstOrcaFlex_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL Orca_CopyOutput( SrcOrcaFlex_DataData%y, DstOrcaFlex_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL Orca_CopyMisc( SrcOrcaFlex_DataData%m, DstOrcaFlex_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +IF (ALLOCATED(SrcOrcaFlex_DataData%Input)) THEN + i1_l = LBOUND(SrcOrcaFlex_DataData%Input,1) + i1_u = UBOUND(SrcOrcaFlex_DataData%Input,1) + IF (.NOT. ALLOCATED(DstOrcaFlex_DataData%Input)) THEN + ALLOCATE(DstOrcaFlex_DataData%Input(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstOrcaFlex_DataData%Input.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DO i1 = LBOUND(SrcOrcaFlex_DataData%Input,1), UBOUND(SrcOrcaFlex_DataData%Input,1) + CALL Orca_CopyInput( SrcOrcaFlex_DataData%Input(i1), DstOrcaFlex_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO +ENDIF +IF (ALLOCATED(SrcOrcaFlex_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcOrcaFlex_DataData%InputTimes,1) + i1_u = UBOUND(SrcOrcaFlex_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstOrcaFlex_DataData%InputTimes)) THEN + ALLOCATE(DstOrcaFlex_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstOrcaFlex_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstOrcaFlex_DataData%InputTimes = SrcOrcaFlex_DataData%InputTimes +ENDIF + END SUBROUTINE FAST_CopyOrcaFlex_Data + + SUBROUTINE FAST_DestroyOrcaFlex_Data( OrcaFlex_DataData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(OrcaFlex_Data), INTENT(INOUT) :: OrcaFlex_DataData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyOrcaFlex_Data' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +DO i1 = LBOUND(OrcaFlex_DataData%x,1), UBOUND(OrcaFlex_DataData%x,1) + CALL Orca_DestroyContState( OrcaFlex_DataData%x(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO +DO i1 = LBOUND(OrcaFlex_DataData%xd,1), UBOUND(OrcaFlex_DataData%xd,1) + CALL Orca_DestroyDiscState( OrcaFlex_DataData%xd(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO +DO i1 = LBOUND(OrcaFlex_DataData%z,1), UBOUND(OrcaFlex_DataData%z,1) + CALL Orca_DestroyConstrState( OrcaFlex_DataData%z(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO +DO i1 = LBOUND(OrcaFlex_DataData%OtherSt,1), UBOUND(OrcaFlex_DataData%OtherSt,1) + CALL Orca_DestroyOtherState( OrcaFlex_DataData%OtherSt(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO + CALL Orca_DestroyParam( OrcaFlex_DataData%p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Orca_DestroyInput( OrcaFlex_DataData%u, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Orca_DestroyOutput( OrcaFlex_DataData%y, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Orca_DestroyMisc( OrcaFlex_DataData%m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(OrcaFlex_DataData%Input)) THEN +DO i1 = LBOUND(OrcaFlex_DataData%Input,1), UBOUND(OrcaFlex_DataData%Input,1) + CALL Orca_DestroyInput( OrcaFlex_DataData%Input(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO + DEALLOCATE(OrcaFlex_DataData%Input) +ENDIF +IF (ALLOCATED(OrcaFlex_DataData%InputTimes)) THEN + DEALLOCATE(OrcaFlex_DataData%InputTimes) +ENDIF + END SUBROUTINE FAST_DestroyOrcaFlex_Data + + SUBROUTINE FAST_PackOrcaFlex_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(OrcaFlex_Data), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackOrcaFlex_Data' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) + Int_BufSz = Int_BufSz + 3 ! x: size of buffers for each call to pack subtype + CALL Orca_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! x + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! x + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! x + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) + Int_BufSz = Int_BufSz + 3 ! xd: size of buffers for each call to pack subtype + CALL Orca_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! xd + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! xd + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! xd + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) + Int_BufSz = Int_BufSz + 3 ! z: size of buffers for each call to pack subtype + CALL Orca_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! z + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! z + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! z + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) + Int_BufSz = Int_BufSz + 3 ! OtherSt: size of buffers for each call to pack subtype + CALL Orca_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! OtherSt + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! OtherSt + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! OtherSt + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + Int_BufSz = Int_BufSz + 3 ! p: size of buffers for each call to pack subtype + CALL Orca_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 3 ! u: size of buffers for each call to pack subtype + CALL Orca_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! u + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! u + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! u + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 3 ! y: size of buffers for each call to pack subtype + CALL Orca_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! y + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! y + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! y + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 3 ! m: size of buffers for each call to pack subtype + CALL Orca_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! m + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! m + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! m + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 1 ! Input allocated yes/no + IF ( ALLOCATED(InData%Input) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! Input upper/lower bounds for each dimension + DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) + Int_BufSz = Int_BufSz + 3 ! Input: size of buffers for each call to pack subtype + CALL Orca_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -36743,28 +38099,22 @@ SUBROUTINE FAST_CopyModuleMapType( SrcModuleMapTypeData, DstModuleMapTypeData, C CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%ED_P_2_HD_PRP_P, DstModuleMapTypeData%ED_P_2_HD_PRP_P, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%ED_P_2_HD_W_P, DstModuleMapTypeData%ED_P_2_HD_W_P, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%HD_W_P_2_ED_P, DstModuleMapTypeData%HD_W_P_2_ED_P, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%ED_P_2_HD_M_P, DstModuleMapTypeData%ED_P_2_HD_M_P, CtrlCode, ErrStat2, ErrMsg2 ) + CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SubStructure_2_HD_W_P, DstModuleMapTypeData%SubStructure_2_HD_W_P, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%HD_M_P_2_ED_P, DstModuleMapTypeData%HD_M_P_2_ED_P, CtrlCode, ErrStat2, ErrMsg2 ) + CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%HD_W_P_2_SubStructure, DstModuleMapTypeData%HD_W_P_2_SubStructure, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%ED_P_2_Mooring_P, DstModuleMapTypeData%ED_P_2_Mooring_P, CtrlCode, ErrStat2, ErrMsg2 ) + CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SubStructure_2_HD_M_P, DstModuleMapTypeData%SubStructure_2_HD_M_P, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%Mooring_P_2_ED_P, DstModuleMapTypeData%Mooring_P_2_ED_P, CtrlCode, ErrStat2, ErrMsg2 ) + CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%HD_M_P_2_SubStructure, DstModuleMapTypeData%HD_M_P_2_SubStructure, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SDy3_P_2_Mooring_P, DstModuleMapTypeData%SDy3_P_2_Mooring_P, CtrlCode, ErrStat2, ErrMsg2 ) + CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%Structure_2_Mooring, DstModuleMapTypeData%Structure_2_Mooring, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%Mooring_P_2_SD_P, DstModuleMapTypeData%Mooring_P_2_SD_P, CtrlCode, ErrStat2, ErrMsg2 ) + CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%Mooring_2_Structure, DstModuleMapTypeData%Mooring_2_Structure, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%ED_P_2_SD_TP, DstModuleMapTypeData%ED_P_2_SD_TP, CtrlCode, ErrStat2, ErrMsg2 ) @@ -36773,18 +38123,6 @@ SUBROUTINE FAST_CopyModuleMapType( SrcModuleMapTypeData, DstModuleMapTypeData, C CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SD_TP_2_ED_P, DstModuleMapTypeData%SD_TP_2_ED_P, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SD_P_2_HD_M_P, DstModuleMapTypeData%SD_P_2_HD_M_P, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%HD_M_P_2_SD_P, DstModuleMapTypeData%HD_M_P_2_SD_P, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SD_P_2_HD_W_P, DstModuleMapTypeData%SD_P_2_HD_W_P, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%HD_W_P_2_SD_P, DstModuleMapTypeData%HD_W_P_2_SD_P, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN IF (ALLOCATED(SrcModuleMapTypeData%ED_P_2_NStC_P_N)) THEN i1_l = LBOUND(SrcModuleMapTypeData%ED_P_2_NStC_P_N,1) i1_u = UBOUND(SrcModuleMapTypeData%ED_P_2_NStC_P_N,1) @@ -36929,66 +38267,34 @@ SUBROUTINE FAST_CopyModuleMapType( SrcModuleMapTypeData, DstModuleMapTypeData, C ENDDO ENDDO ENDIF -IF (ALLOCATED(SrcModuleMapTypeData%SStC_P_P_2_ED_P)) THEN - i1_l = LBOUND(SrcModuleMapTypeData%SStC_P_P_2_ED_P,1) - i1_u = UBOUND(SrcModuleMapTypeData%SStC_P_P_2_ED_P,1) - IF (.NOT. ALLOCATED(DstModuleMapTypeData%SStC_P_P_2_ED_P)) THEN - ALLOCATE(DstModuleMapTypeData%SStC_P_P_2_ED_P(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstModuleMapTypeData%SStC_P_P_2_ED_P.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcModuleMapTypeData%SStC_P_P_2_ED_P,1), UBOUND(SrcModuleMapTypeData%SStC_P_P_2_ED_P,1) - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SStC_P_P_2_ED_P(i1), DstModuleMapTypeData%SStC_P_P_2_ED_P(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF -IF (ALLOCATED(SrcModuleMapTypeData%ED_P_2_SStC_P_P)) THEN - i1_l = LBOUND(SrcModuleMapTypeData%ED_P_2_SStC_P_P,1) - i1_u = UBOUND(SrcModuleMapTypeData%ED_P_2_SStC_P_P,1) - IF (.NOT. ALLOCATED(DstModuleMapTypeData%ED_P_2_SStC_P_P)) THEN - ALLOCATE(DstModuleMapTypeData%ED_P_2_SStC_P_P(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstModuleMapTypeData%ED_P_2_SStC_P_P.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcModuleMapTypeData%ED_P_2_SStC_P_P,1), UBOUND(SrcModuleMapTypeData%ED_P_2_SStC_P_P,1) - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%ED_P_2_SStC_P_P(i1), DstModuleMapTypeData%ED_P_2_SStC_P_P(i1), CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF -IF (ALLOCATED(SrcModuleMapTypeData%SStC_P_P_2_SD_P)) THEN - i1_l = LBOUND(SrcModuleMapTypeData%SStC_P_P_2_SD_P,1) - i1_u = UBOUND(SrcModuleMapTypeData%SStC_P_P_2_SD_P,1) - IF (.NOT. ALLOCATED(DstModuleMapTypeData%SStC_P_P_2_SD_P)) THEN - ALLOCATE(DstModuleMapTypeData%SStC_P_P_2_SD_P(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcModuleMapTypeData%SStC_P_P_2_SubStructure)) THEN + i1_l = LBOUND(SrcModuleMapTypeData%SStC_P_P_2_SubStructure,1) + i1_u = UBOUND(SrcModuleMapTypeData%SStC_P_P_2_SubStructure,1) + IF (.NOT. ALLOCATED(DstModuleMapTypeData%SStC_P_P_2_SubStructure)) THEN + ALLOCATE(DstModuleMapTypeData%SStC_P_P_2_SubStructure(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstModuleMapTypeData%SStC_P_P_2_SD_P.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstModuleMapTypeData%SStC_P_P_2_SubStructure.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcModuleMapTypeData%SStC_P_P_2_SD_P,1), UBOUND(SrcModuleMapTypeData%SStC_P_P_2_SD_P,1) - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SStC_P_P_2_SD_P(i1), DstModuleMapTypeData%SStC_P_P_2_SD_P(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcModuleMapTypeData%SStC_P_P_2_SubStructure,1), UBOUND(SrcModuleMapTypeData%SStC_P_P_2_SubStructure,1) + CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SStC_P_P_2_SubStructure(i1), DstModuleMapTypeData%SStC_P_P_2_SubStructure(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF -IF (ALLOCATED(SrcModuleMapTypeData%SDy3_P_2_SStC_P_P)) THEN - i1_l = LBOUND(SrcModuleMapTypeData%SDy3_P_2_SStC_P_P,1) - i1_u = UBOUND(SrcModuleMapTypeData%SDy3_P_2_SStC_P_P,1) - IF (.NOT. ALLOCATED(DstModuleMapTypeData%SDy3_P_2_SStC_P_P)) THEN - ALLOCATE(DstModuleMapTypeData%SDy3_P_2_SStC_P_P(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcModuleMapTypeData%SubStructure_2_SStC_P_P)) THEN + i1_l = LBOUND(SrcModuleMapTypeData%SubStructure_2_SStC_P_P,1) + i1_u = UBOUND(SrcModuleMapTypeData%SubStructure_2_SStC_P_P,1) + IF (.NOT. ALLOCATED(DstModuleMapTypeData%SubStructure_2_SStC_P_P)) THEN + ALLOCATE(DstModuleMapTypeData%SubStructure_2_SStC_P_P(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstModuleMapTypeData%SDy3_P_2_SStC_P_P.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstModuleMapTypeData%SubStructure_2_SStC_P_P.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcModuleMapTypeData%SDy3_P_2_SStC_P_P,1), UBOUND(SrcModuleMapTypeData%SDy3_P_2_SStC_P_P,1) - CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SDy3_P_2_SStC_P_P(i1), DstModuleMapTypeData%SDy3_P_2_SStC_P_P(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcModuleMapTypeData%SubStructure_2_SStC_P_P,1), UBOUND(SrcModuleMapTypeData%SubStructure_2_SStC_P_P,1) + CALL NWTC_Library_Copymeshmaptype( SrcModuleMapTypeData%SubStructure_2_SStC_P_P(i1), DstModuleMapTypeData%SubStructure_2_SStC_P_P(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO @@ -37165,16 +38471,19 @@ SUBROUTINE FAST_CopyModuleMapType( SrcModuleMapTypeData, DstModuleMapTypeData, C CALL MeshCopy( SrcModuleMapTypeData%u_ED_NacelleLoads, DstModuleMapTypeData%u_ED_NacelleLoads, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MeshCopy( SrcModuleMapTypeData%u_ED_PlatformPtMesh, DstModuleMapTypeData%u_ED_PlatformPtMesh, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MeshCopy( SrcModuleMapTypeData%SubstructureLoads_Tmp, DstModuleMapTypeData%SubstructureLoads_Tmp, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL MeshCopy( SrcModuleMapTypeData%SubstructureLoads_Tmp2, DstModuleMapTypeData%SubstructureLoads_Tmp2, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MeshCopy( SrcModuleMapTypeData%u_ED_PlatformPtMesh_2, DstModuleMapTypeData%u_ED_PlatformPtMesh_2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MeshCopy( SrcModuleMapTypeData%PlatformLoads_Tmp, DstModuleMapTypeData%PlatformLoads_Tmp, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MeshCopy( SrcModuleMapTypeData%u_ED_PlatformPtMesh_3, DstModuleMapTypeData%u_ED_PlatformPtMesh_3, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MeshCopy( SrcModuleMapTypeData%PlatformLoads_Tmp2, DstModuleMapTypeData%PlatformLoads_Tmp2, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MeshCopy( SrcModuleMapTypeData%u_ED_PlatformPtMesh_MDf, DstModuleMapTypeData%u_ED_PlatformPtMesh_MDf, CtrlCode, ErrStat2, ErrMsg2 ) + CALL MeshCopy( SrcModuleMapTypeData%SubstructureLoads_Tmp_Farm, DstModuleMapTypeData%SubstructureLoads_Tmp_Farm, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat>=AbortErrLev) RETURN CALL MeshCopy( SrcModuleMapTypeData%u_ED_TowerPtloads, DstModuleMapTypeData%u_ED_TowerPtloads, CtrlCode, ErrStat2, ErrMsg2 ) @@ -37199,12 +38508,6 @@ SUBROUTINE FAST_CopyModuleMapType( SrcModuleMapTypeData, DstModuleMapTypeData, C CALL MeshCopy( SrcModuleMapTypeData%u_SD_TPMesh, DstModuleMapTypeData%u_SD_TPMesh, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL MeshCopy( SrcModuleMapTypeData%u_SD_LMesh, DstModuleMapTypeData%u_SD_LMesh, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL MeshCopy( SrcModuleMapTypeData%u_SD_LMesh_2, DstModuleMapTypeData%u_SD_LMesh_2, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat>=AbortErrLev) RETURN CALL MeshCopy( SrcModuleMapTypeData%u_HD_M_Mesh, DstModuleMapTypeData%u_HD_M_Mesh, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -37317,34 +38620,22 @@ SUBROUTINE FAST_DestroyModuleMapType( ModuleMapTypeData, ErrStat, ErrMsg, DEALLO ENDIF CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SubStructure_2_HD_W_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SubStructure_2_HD_M_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%Structure_2_Mooring, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%Mooring_2_Structure, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%ED_P_2_SD_TP, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SD_TP_2_ED_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SD_P_2_HD_M_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%HD_M_P_2_SD_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SD_P_2_HD_W_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%HD_W_P_2_SD_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ALLOCATED(ModuleMapTypeData%ED_P_2_NStC_P_N)) THEN DO i1 = LBOUND(ModuleMapTypeData%ED_P_2_NStC_P_N,1), UBOUND(ModuleMapTypeData%ED_P_2_NStC_P_N,1) CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%ED_P_2_NStC_P_N(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) @@ -37409,33 +38700,19 @@ SUBROUTINE FAST_DestroyModuleMapType( ModuleMapTypeData, ErrStat, ErrMsg, DEALLO ENDDO DEALLOCATE(ModuleMapTypeData%BStC_P_2_BD_P_B) ENDIF -IF (ALLOCATED(ModuleMapTypeData%SStC_P_P_2_ED_P)) THEN -DO i1 = LBOUND(ModuleMapTypeData%SStC_P_P_2_ED_P,1), UBOUND(ModuleMapTypeData%SStC_P_P_2_ED_P,1) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SStC_P_P_2_ED_P(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(ModuleMapTypeData%SStC_P_P_2_ED_P) -ENDIF -IF (ALLOCATED(ModuleMapTypeData%ED_P_2_SStC_P_P)) THEN -DO i1 = LBOUND(ModuleMapTypeData%ED_P_2_SStC_P_P,1), UBOUND(ModuleMapTypeData%ED_P_2_SStC_P_P,1) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%ED_P_2_SStC_P_P(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) -ENDDO - DEALLOCATE(ModuleMapTypeData%ED_P_2_SStC_P_P) -ENDIF -IF (ALLOCATED(ModuleMapTypeData%SStC_P_P_2_SD_P)) THEN -DO i1 = LBOUND(ModuleMapTypeData%SStC_P_P_2_SD_P,1), UBOUND(ModuleMapTypeData%SStC_P_P_2_SD_P,1) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SStC_P_P_2_SD_P(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(ModuleMapTypeData%SStC_P_P_2_SubStructure)) THEN +DO i1 = LBOUND(ModuleMapTypeData%SStC_P_P_2_SubStructure,1), UBOUND(ModuleMapTypeData%SStC_P_P_2_SubStructure,1) + CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SStC_P_P_2_SubStructure(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(ModuleMapTypeData%SStC_P_P_2_SD_P) + DEALLOCATE(ModuleMapTypeData%SStC_P_P_2_SubStructure) ENDIF -IF (ALLOCATED(ModuleMapTypeData%SDy3_P_2_SStC_P_P)) THEN -DO i1 = LBOUND(ModuleMapTypeData%SDy3_P_2_SStC_P_P,1), UBOUND(ModuleMapTypeData%SDy3_P_2_SStC_P_P,1) - CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SDy3_P_2_SStC_P_P(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) +IF (ALLOCATED(ModuleMapTypeData%SubStructure_2_SStC_P_P)) THEN +DO i1 = LBOUND(ModuleMapTypeData%SubStructure_2_SStC_P_P,1), UBOUND(ModuleMapTypeData%SubStructure_2_SStC_P_P,1) + CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%SubStructure_2_SStC_P_P(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) ENDDO - DEALLOCATE(ModuleMapTypeData%SDy3_P_2_SStC_P_P) + DEALLOCATE(ModuleMapTypeData%SubStructure_2_SStC_P_P) ENDIF CALL NWTC_Library_Destroymeshmaptype( ModuleMapTypeData%ED_P_2_SrvD_P_P, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -37512,13 +38789,15 @@ SUBROUTINE FAST_DestroyModuleMapType( ModuleMapTypeData, ErrStat, ErrMsg, DEALLO ENDIF CALL MeshDestroy( ModuleMapTypeData%u_ED_NacelleLoads, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MeshDestroy( ModuleMapTypeData%u_ED_PlatformPtMesh, ErrStat2, ErrMsg2 ) + CALL MeshDestroy( ModuleMapTypeData%SubstructureLoads_Tmp, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL MeshDestroy( ModuleMapTypeData%SubstructureLoads_Tmp2, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MeshDestroy( ModuleMapTypeData%u_ED_PlatformPtMesh_2, ErrStat2, ErrMsg2 ) + CALL MeshDestroy( ModuleMapTypeData%PlatformLoads_Tmp, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MeshDestroy( ModuleMapTypeData%u_ED_PlatformPtMesh_3, ErrStat2, ErrMsg2 ) + CALL MeshDestroy( ModuleMapTypeData%PlatformLoads_Tmp2, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MeshDestroy( ModuleMapTypeData%u_ED_PlatformPtMesh_MDf, ErrStat2, ErrMsg2 ) + CALL MeshDestroy( ModuleMapTypeData%SubstructureLoads_Tmp_Farm, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL MeshDestroy( ModuleMapTypeData%u_ED_TowerPtloads, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -37531,10 +38810,6 @@ SUBROUTINE FAST_DestroyModuleMapType( ModuleMapTypeData, ErrStat, ErrMsg, DEALLO ENDIF CALL MeshDestroy( ModuleMapTypeData%u_SD_TPMesh, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MeshDestroy( ModuleMapTypeData%u_SD_LMesh, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - CALL MeshDestroy( ModuleMapTypeData%u_SD_LMesh_2, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL MeshDestroy( ModuleMapTypeData%u_HD_M_Mesh, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL MeshDestroy( ModuleMapTypeData%u_HD_W_Mesh, ErrStat2, ErrMsg2 ) @@ -37692,139 +38967,105 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! ED_P_2_HD_W_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2, .TRUE. ) ! ED_P_2_HD_W_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! ED_P_2_HD_W_P - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! ED_P_2_HD_W_P - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! ED_P_2_HD_W_P - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! HD_W_P_2_ED_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2, .TRUE. ) ! HD_W_P_2_ED_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! HD_W_P_2_ED_P - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! HD_W_P_2_ED_P - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! HD_W_P_2_ED_P - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! ED_P_2_HD_M_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2, .TRUE. ) ! ED_P_2_HD_M_P + Int_BufSz = Int_BufSz + 3 ! SubStructure_2_HD_W_P: size of buffers for each call to pack subtype + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SubStructure_2_HD_W_P, ErrStat2, ErrMsg2, .TRUE. ) ! SubStructure_2_HD_W_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! ED_P_2_HD_M_P + IF(ALLOCATED(Re_Buf)) THEN ! SubStructure_2_HD_W_P Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! ED_P_2_HD_M_P + IF(ALLOCATED(Db_Buf)) THEN ! SubStructure_2_HD_W_P Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! ED_P_2_HD_M_P + IF(ALLOCATED(Int_Buf)) THEN ! SubStructure_2_HD_W_P Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! HD_M_P_2_ED_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2, .TRUE. ) ! HD_M_P_2_ED_P + Int_BufSz = Int_BufSz + 3 ! HD_W_P_2_SubStructure: size of buffers for each call to pack subtype + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, .TRUE. ) ! HD_W_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! HD_M_P_2_ED_P + IF(ALLOCATED(Re_Buf)) THEN ! HD_W_P_2_SubStructure Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! HD_M_P_2_ED_P + IF(ALLOCATED(Db_Buf)) THEN ! HD_W_P_2_SubStructure Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! HD_M_P_2_ED_P + IF(ALLOCATED(Int_Buf)) THEN ! HD_W_P_2_SubStructure Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! ED_P_2_Mooring_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2, .TRUE. ) ! ED_P_2_Mooring_P + Int_BufSz = Int_BufSz + 3 ! SubStructure_2_HD_M_P: size of buffers for each call to pack subtype + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SubStructure_2_HD_M_P, ErrStat2, ErrMsg2, .TRUE. ) ! SubStructure_2_HD_M_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! ED_P_2_Mooring_P + IF(ALLOCATED(Re_Buf)) THEN ! SubStructure_2_HD_M_P Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! ED_P_2_Mooring_P + IF(ALLOCATED(Db_Buf)) THEN ! SubStructure_2_HD_M_P Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! ED_P_2_Mooring_P + IF(ALLOCATED(Int_Buf)) THEN ! SubStructure_2_HD_M_P Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! Mooring_P_2_ED_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, .TRUE. ) ! Mooring_P_2_ED_P + Int_BufSz = Int_BufSz + 3 ! HD_M_P_2_SubStructure: size of buffers for each call to pack subtype + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, .TRUE. ) ! HD_M_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! Mooring_P_2_ED_P + IF(ALLOCATED(Re_Buf)) THEN ! HD_M_P_2_SubStructure Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! Mooring_P_2_ED_P + IF(ALLOCATED(Db_Buf)) THEN ! HD_M_P_2_SubStructure Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! Mooring_P_2_ED_P + IF(ALLOCATED(Int_Buf)) THEN ! HD_M_P_2_SubStructure Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! SDy3_P_2_Mooring_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2, .TRUE. ) ! SDy3_P_2_Mooring_P + Int_BufSz = Int_BufSz + 3 ! Structure_2_Mooring: size of buffers for each call to pack subtype + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%Structure_2_Mooring, ErrStat2, ErrMsg2, .TRUE. ) ! Structure_2_Mooring CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! SDy3_P_2_Mooring_P + IF(ALLOCATED(Re_Buf)) THEN ! Structure_2_Mooring Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! SDy3_P_2_Mooring_P + IF(ALLOCATED(Db_Buf)) THEN ! Structure_2_Mooring Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! SDy3_P_2_Mooring_P + IF(ALLOCATED(Int_Buf)) THEN ! Structure_2_Mooring Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! Mooring_P_2_SD_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, .TRUE. ) ! Mooring_P_2_SD_P + Int_BufSz = Int_BufSz + 3 ! Mooring_2_Structure: size of buffers for each call to pack subtype + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%Mooring_2_Structure, ErrStat2, ErrMsg2, .TRUE. ) ! Mooring_2_Structure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! Mooring_P_2_SD_P + IF(ALLOCATED(Re_Buf)) THEN ! Mooring_2_Structure Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! Mooring_P_2_SD_P + IF(ALLOCATED(Db_Buf)) THEN ! Mooring_2_Structure Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! Mooring_P_2_SD_P + IF(ALLOCATED(Int_Buf)) THEN ! Mooring_2_Structure Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF @@ -37862,74 +39103,6 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! SD_P_2_HD_M_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SD_P_2_HD_M_P, ErrStat2, ErrMsg2, .TRUE. ) ! SD_P_2_HD_M_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! SD_P_2_HD_M_P - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! SD_P_2_HD_M_P - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! SD_P_2_HD_M_P - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! HD_M_P_2_SD_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_M_P_2_SD_P, ErrStat2, ErrMsg2, .TRUE. ) ! HD_M_P_2_SD_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! HD_M_P_2_SD_P - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! HD_M_P_2_SD_P - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! HD_M_P_2_SD_P - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! SD_P_2_HD_W_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SD_P_2_HD_W_P, ErrStat2, ErrMsg2, .TRUE. ) ! SD_P_2_HD_W_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! SD_P_2_HD_W_P - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! SD_P_2_HD_W_P - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! SD_P_2_HD_W_P - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! HD_W_P_2_SD_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_W_P_2_SD_P, ErrStat2, ErrMsg2, .TRUE. ) ! HD_W_P_2_SD_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! HD_W_P_2_SD_P - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! HD_W_P_2_SD_P - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! HD_W_P_2_SD_P - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 1 ! ED_P_2_NStC_P_N allocated yes/no IF ( ALLOCATED(InData%ED_P_2_NStC_P_N) ) THEN Int_BufSz = Int_BufSz + 2*1 ! ED_P_2_NStC_P_N upper/lower bounds for each dimension @@ -38122,93 +39295,47 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO END DO END IF - Int_BufSz = Int_BufSz + 1 ! SStC_P_P_2_ED_P allocated yes/no - IF ( ALLOCATED(InData%SStC_P_P_2_ED_P) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! SStC_P_P_2_ED_P upper/lower bounds for each dimension - DO i1 = LBOUND(InData%SStC_P_P_2_ED_P,1), UBOUND(InData%SStC_P_P_2_ED_P,1) - Int_BufSz = Int_BufSz + 3 ! SStC_P_P_2_ED_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SStC_P_P_2_ED_P(i1), ErrStat2, ErrMsg2, .TRUE. ) ! SStC_P_P_2_ED_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! SStC_P_P_2_ED_P - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! SStC_P_P_2_ED_P - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! SStC_P_P_2_ED_P - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 1 ! ED_P_2_SStC_P_P allocated yes/no - IF ( ALLOCATED(InData%ED_P_2_SStC_P_P) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! ED_P_2_SStC_P_P upper/lower bounds for each dimension - DO i1 = LBOUND(InData%ED_P_2_SStC_P_P,1), UBOUND(InData%ED_P_2_SStC_P_P,1) - Int_BufSz = Int_BufSz + 3 ! ED_P_2_SStC_P_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_P_2_SStC_P_P(i1), ErrStat2, ErrMsg2, .TRUE. ) ! ED_P_2_SStC_P_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! ED_P_2_SStC_P_P - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! ED_P_2_SStC_P_P - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! ED_P_2_SStC_P_P - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - END DO - END IF - Int_BufSz = Int_BufSz + 1 ! SStC_P_P_2_SD_P allocated yes/no - IF ( ALLOCATED(InData%SStC_P_P_2_SD_P) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! SStC_P_P_2_SD_P upper/lower bounds for each dimension - DO i1 = LBOUND(InData%SStC_P_P_2_SD_P,1), UBOUND(InData%SStC_P_P_2_SD_P,1) - Int_BufSz = Int_BufSz + 3 ! SStC_P_P_2_SD_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SStC_P_P_2_SD_P(i1), ErrStat2, ErrMsg2, .TRUE. ) ! SStC_P_P_2_SD_P + Int_BufSz = Int_BufSz + 1 ! SStC_P_P_2_SubStructure allocated yes/no + IF ( ALLOCATED(InData%SStC_P_P_2_SubStructure) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! SStC_P_P_2_SubStructure upper/lower bounds for each dimension + DO i1 = LBOUND(InData%SStC_P_P_2_SubStructure,1), UBOUND(InData%SStC_P_P_2_SubStructure,1) + Int_BufSz = Int_BufSz + 3 ! SStC_P_P_2_SubStructure: size of buffers for each call to pack subtype + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SStC_P_P_2_SubStructure(i1), ErrStat2, ErrMsg2, .TRUE. ) ! SStC_P_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! SStC_P_P_2_SD_P + IF(ALLOCATED(Re_Buf)) THEN ! SStC_P_P_2_SubStructure Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! SStC_P_P_2_SD_P + IF(ALLOCATED(Db_Buf)) THEN ! SStC_P_P_2_SubStructure Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! SStC_P_P_2_SD_P + IF(ALLOCATED(Int_Buf)) THEN ! SStC_P_P_2_SubStructure Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF END DO END IF - Int_BufSz = Int_BufSz + 1 ! SDy3_P_2_SStC_P_P allocated yes/no - IF ( ALLOCATED(InData%SDy3_P_2_SStC_P_P) ) THEN - Int_BufSz = Int_BufSz + 2*1 ! SDy3_P_2_SStC_P_P upper/lower bounds for each dimension - DO i1 = LBOUND(InData%SDy3_P_2_SStC_P_P,1), UBOUND(InData%SDy3_P_2_SStC_P_P,1) - Int_BufSz = Int_BufSz + 3 ! SDy3_P_2_SStC_P_P: size of buffers for each call to pack subtype - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SDy3_P_2_SStC_P_P(i1), ErrStat2, ErrMsg2, .TRUE. ) ! SDy3_P_2_SStC_P_P + Int_BufSz = Int_BufSz + 1 ! SubStructure_2_SStC_P_P allocated yes/no + IF ( ALLOCATED(InData%SubStructure_2_SStC_P_P) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! SubStructure_2_SStC_P_P upper/lower bounds for each dimension + DO i1 = LBOUND(InData%SubStructure_2_SStC_P_P,1), UBOUND(InData%SubStructure_2_SStC_P_P,1) + Int_BufSz = Int_BufSz + 3 ! SubStructure_2_SStC_P_P: size of buffers for each call to pack subtype + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SubStructure_2_SStC_P_P(i1), ErrStat2, ErrMsg2, .TRUE. ) ! SubStructure_2_SStC_P_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! SDy3_P_2_SStC_P_P + IF(ALLOCATED(Re_Buf)) THEN ! SubStructure_2_SStC_P_P Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! SDy3_P_2_SStC_P_P + IF(ALLOCATED(Db_Buf)) THEN ! SubStructure_2_SStC_P_P Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! SDy3_P_2_SStC_P_P + IF(ALLOCATED(Int_Buf)) THEN ! SubStructure_2_SStC_P_P Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF @@ -38571,71 +39698,88 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! u_ED_PlatformPtMesh: size of buffers for each call to pack subtype - CALL MeshPack( InData%u_ED_PlatformPtMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! u_ED_PlatformPtMesh + Int_BufSz = Int_BufSz + 3 ! SubstructureLoads_Tmp: size of buffers for each call to pack subtype + CALL MeshPack( InData%SubstructureLoads_Tmp, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! SubstructureLoads_Tmp + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SubstructureLoads_Tmp + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SubstructureLoads_Tmp + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SubstructureLoads_Tmp + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 3 ! SubstructureLoads_Tmp2: size of buffers for each call to pack subtype + CALL MeshPack( InData%SubstructureLoads_Tmp2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! SubstructureLoads_Tmp2 CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! u_ED_PlatformPtMesh + IF(ALLOCATED(Re_Buf)) THEN ! SubstructureLoads_Tmp2 Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! u_ED_PlatformPtMesh + IF(ALLOCATED(Db_Buf)) THEN ! SubstructureLoads_Tmp2 Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! u_ED_PlatformPtMesh + IF(ALLOCATED(Int_Buf)) THEN ! SubstructureLoads_Tmp2 Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! u_ED_PlatformPtMesh_2: size of buffers for each call to pack subtype - CALL MeshPack( InData%u_ED_PlatformPtMesh_2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! u_ED_PlatformPtMesh_2 + Int_BufSz = Int_BufSz + 3 ! PlatformLoads_Tmp: size of buffers for each call to pack subtype + CALL MeshPack( InData%PlatformLoads_Tmp, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! PlatformLoads_Tmp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! u_ED_PlatformPtMesh_2 + IF(ALLOCATED(Re_Buf)) THEN ! PlatformLoads_Tmp Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! u_ED_PlatformPtMesh_2 + IF(ALLOCATED(Db_Buf)) THEN ! PlatformLoads_Tmp Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! u_ED_PlatformPtMesh_2 + IF(ALLOCATED(Int_Buf)) THEN ! PlatformLoads_Tmp Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! u_ED_PlatformPtMesh_3: size of buffers for each call to pack subtype - CALL MeshPack( InData%u_ED_PlatformPtMesh_3, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! u_ED_PlatformPtMesh_3 + Int_BufSz = Int_BufSz + 3 ! PlatformLoads_Tmp2: size of buffers for each call to pack subtype + CALL MeshPack( InData%PlatformLoads_Tmp2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! PlatformLoads_Tmp2 CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! u_ED_PlatformPtMesh_3 + IF(ALLOCATED(Re_Buf)) THEN ! PlatformLoads_Tmp2 Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! u_ED_PlatformPtMesh_3 + IF(ALLOCATED(Db_Buf)) THEN ! PlatformLoads_Tmp2 Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! u_ED_PlatformPtMesh_3 + IF(ALLOCATED(Int_Buf)) THEN ! PlatformLoads_Tmp2 Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! u_ED_PlatformPtMesh_MDf: size of buffers for each call to pack subtype - CALL MeshPack( InData%u_ED_PlatformPtMesh_MDf, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! u_ED_PlatformPtMesh_MDf + Int_BufSz = Int_BufSz + 3 ! SubstructureLoads_Tmp_Farm: size of buffers for each call to pack subtype + CALL MeshPack( InData%SubstructureLoads_Tmp_Farm, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! SubstructureLoads_Tmp_Farm CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN - IF(ALLOCATED(Re_Buf)) THEN ! u_ED_PlatformPtMesh_MDf + IF(ALLOCATED(Re_Buf)) THEN ! SubstructureLoads_Tmp_Farm Re_BufSz = Re_BufSz + SIZE( Re_Buf ) DEALLOCATE(Re_Buf) END IF - IF(ALLOCATED(Db_Buf)) THEN ! u_ED_PlatformPtMesh_MDf + IF(ALLOCATED(Db_Buf)) THEN ! SubstructureLoads_Tmp_Farm Db_BufSz = Db_BufSz + SIZE( Db_Buf ) DEALLOCATE(Db_Buf) END IF - IF(ALLOCATED(Int_Buf)) THEN ! u_ED_PlatformPtMesh_MDf + IF(ALLOCATED(Int_Buf)) THEN ! SubstructureLoads_Tmp_Farm Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF @@ -38696,40 +39840,6 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF - Int_BufSz = Int_BufSz + 3 ! u_SD_LMesh: size of buffers for each call to pack subtype - CALL MeshPack( InData%u_SD_LMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! u_SD_LMesh - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! u_SD_LMesh - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! u_SD_LMesh - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! u_SD_LMesh - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF - Int_BufSz = Int_BufSz + 3 ! u_SD_LMesh_2: size of buffers for each call to pack subtype - CALL MeshPack( InData%u_SD_LMesh_2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! u_SD_LMesh_2 - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN ! u_SD_LMesh_2 - Re_BufSz = Re_BufSz + SIZE( Re_Buf ) - DEALLOCATE(Re_Buf) - END IF - IF(ALLOCATED(Db_Buf)) THEN ! u_SD_LMesh_2 - Db_BufSz = Db_BufSz + SIZE( Db_Buf ) - DEALLOCATE(Db_Buf) - END IF - IF(ALLOCATED(Int_Buf)) THEN ! u_SD_LMesh_2 - Int_BufSz = Int_BufSz + SIZE( Int_Buf ) - DEALLOCATE(Int_Buf) - END IF Int_BufSz = Int_BufSz + 3 ! u_HD_M_Mesh: size of buffers for each call to pack subtype CALL MeshPack( InData%u_HD_M_Mesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, .TRUE. ) ! u_HD_M_Mesh CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -39079,63 +40189,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2, OnlySize ) ! ED_P_2_HD_W_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2, OnlySize ) ! HD_W_P_2_ED_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2, OnlySize ) ! ED_P_2_HD_M_P + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SubStructure_2_HD_W_P, ErrStat2, ErrMsg2, OnlySize ) ! SubStructure_2_HD_W_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39163,7 +40217,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2, OnlySize ) ! HD_M_P_2_ED_P + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2, OnlySize ) ! HD_W_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39191,7 +40245,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2, OnlySize ) ! ED_P_2_Mooring_P + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SubStructure_2_HD_M_P, ErrStat2, ErrMsg2, OnlySize ) ! SubStructure_2_HD_M_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39219,7 +40273,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2, OnlySize ) ! Mooring_P_2_ED_P + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2, OnlySize ) ! HD_M_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39247,7 +40301,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2, OnlySize ) ! SDy3_P_2_Mooring_P + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%Structure_2_Mooring, ErrStat2, ErrMsg2, OnlySize ) ! Structure_2_Mooring CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39275,7 +40329,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2, OnlySize ) ! Mooring_P_2_SD_P + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%Mooring_2_Structure, ErrStat2, ErrMsg2, OnlySize ) ! Mooring_2_Structure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39359,118 +40413,6 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SD_P_2_HD_M_P, ErrStat2, ErrMsg2, OnlySize ) ! SD_P_2_HD_M_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_M_P_2_SD_P, ErrStat2, ErrMsg2, OnlySize ) ! HD_M_P_2_SD_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SD_P_2_HD_W_P, ErrStat2, ErrMsg2, OnlySize ) ! SD_P_2_HD_W_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%HD_W_P_2_SD_P, ErrStat2, ErrMsg2, OnlySize ) ! HD_W_P_2_SD_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF IF ( .NOT. ALLOCATED(InData%ED_P_2_NStC_P_N) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -39594,109 +40536,18 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO END IF - IF ( .NOT. ALLOCATED(InData%TStC_P_2_ED_P_T) ) 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%TStC_P_2_ED_P_T,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%TStC_P_2_ED_P_T,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%TStC_P_2_ED_P_T,1), UBOUND(InData%TStC_P_2_ED_P_T,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%TStC_P_2_ED_P_T(i1), ErrStat2, ErrMsg2, OnlySize ) ! TStC_P_2_ED_P_T - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END IF - IF ( .NOT. ALLOCATED(InData%ED_L_2_BStC_P_B) ) 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%ED_L_2_BStC_P_B,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ED_L_2_BStC_P_B,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%ED_L_2_BStC_P_B,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ED_L_2_BStC_P_B,2) - Int_Xferred = Int_Xferred + 2 - - DO i2 = LBOUND(InData%ED_L_2_BStC_P_B,2), UBOUND(InData%ED_L_2_BStC_P_B,2) - DO i1 = LBOUND(InData%ED_L_2_BStC_P_B,1), UBOUND(InData%ED_L_2_BStC_P_B,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_L_2_BStC_P_B(i1,i2), ErrStat2, ErrMsg2, OnlySize ) ! ED_L_2_BStC_P_B - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - END DO - END DO - END IF - IF ( .NOT. ALLOCATED(InData%BStC_P_2_ED_P_B) ) THEN + IF ( .NOT. ALLOCATED(InData%TStC_P_2_ED_P_T) ) 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%BStC_P_2_ED_P_B,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BStC_P_2_ED_P_B,1) - Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%BStC_P_2_ED_P_B,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BStC_P_2_ED_P_B,2) + IntKiBuf( Int_Xferred ) = LBOUND(InData%TStC_P_2_ED_P_T,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%TStC_P_2_ED_P_T,1) Int_Xferred = Int_Xferred + 2 - DO i2 = LBOUND(InData%BStC_P_2_ED_P_B,2), UBOUND(InData%BStC_P_2_ED_P_B,2) - DO i1 = LBOUND(InData%BStC_P_2_ED_P_B,1), UBOUND(InData%BStC_P_2_ED_P_B,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%BStC_P_2_ED_P_B(i1,i2), ErrStat2, ErrMsg2, OnlySize ) ! BStC_P_2_ED_P_B + DO i1 = LBOUND(InData%TStC_P_2_ED_P_T,1), UBOUND(InData%TStC_P_2_ED_P_T,1) + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%TStC_P_2_ED_P_T(i1), ErrStat2, ErrMsg2, OnlySize ) ! TStC_P_2_ED_P_T CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39725,24 +40576,23 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO - END DO END IF - IF ( .NOT. ALLOCATED(InData%BD_L_2_BStC_P_B) ) THEN + IF ( .NOT. ALLOCATED(InData%ED_L_2_BStC_P_B) ) 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%BD_L_2_BStC_P_B,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BD_L_2_BStC_P_B,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%ED_L_2_BStC_P_B,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ED_L_2_BStC_P_B,1) Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%BD_L_2_BStC_P_B,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BD_L_2_BStC_P_B,2) + IntKiBuf( Int_Xferred ) = LBOUND(InData%ED_L_2_BStC_P_B,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ED_L_2_BStC_P_B,2) Int_Xferred = Int_Xferred + 2 - DO i2 = LBOUND(InData%BD_L_2_BStC_P_B,2), UBOUND(InData%BD_L_2_BStC_P_B,2) - DO i1 = LBOUND(InData%BD_L_2_BStC_P_B,1), UBOUND(InData%BD_L_2_BStC_P_B,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%BD_L_2_BStC_P_B(i1,i2), ErrStat2, ErrMsg2, OnlySize ) ! BD_L_2_BStC_P_B + DO i2 = LBOUND(InData%ED_L_2_BStC_P_B,2), UBOUND(InData%ED_L_2_BStC_P_B,2) + DO i1 = LBOUND(InData%ED_L_2_BStC_P_B,1), UBOUND(InData%ED_L_2_BStC_P_B,1) + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_L_2_BStC_P_B(i1,i2), ErrStat2, ErrMsg2, OnlySize ) ! ED_L_2_BStC_P_B CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39773,22 +40623,22 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%BStC_P_2_BD_P_B) ) THEN + IF ( .NOT. ALLOCATED(InData%BStC_P_2_ED_P_B) ) 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%BStC_P_2_BD_P_B,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BStC_P_2_BD_P_B,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%BStC_P_2_ED_P_B,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BStC_P_2_ED_P_B,1) Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%BStC_P_2_BD_P_B,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BStC_P_2_BD_P_B,2) + IntKiBuf( Int_Xferred ) = LBOUND(InData%BStC_P_2_ED_P_B,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BStC_P_2_ED_P_B,2) Int_Xferred = Int_Xferred + 2 - DO i2 = LBOUND(InData%BStC_P_2_BD_P_B,2), UBOUND(InData%BStC_P_2_BD_P_B,2) - DO i1 = LBOUND(InData%BStC_P_2_BD_P_B,1), UBOUND(InData%BStC_P_2_BD_P_B,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%BStC_P_2_BD_P_B(i1,i2), ErrStat2, ErrMsg2, OnlySize ) ! BStC_P_2_BD_P_B + DO i2 = LBOUND(InData%BStC_P_2_ED_P_B,2), UBOUND(InData%BStC_P_2_ED_P_B,2) + DO i1 = LBOUND(InData%BStC_P_2_ED_P_B,1), UBOUND(InData%BStC_P_2_ED_P_B,1) + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%BStC_P_2_ED_P_B(i1,i2), ErrStat2, ErrMsg2, OnlySize ) ! BStC_P_2_ED_P_B CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39819,18 +40669,22 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%SStC_P_P_2_ED_P) ) THEN + IF ( .NOT. ALLOCATED(InData%BD_L_2_BStC_P_B) ) 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%SStC_P_P_2_ED_P,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%SStC_P_P_2_ED_P,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%BD_L_2_BStC_P_B,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BD_L_2_BStC_P_B,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%BD_L_2_BStC_P_B,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BD_L_2_BStC_P_B,2) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%SStC_P_P_2_ED_P,1), UBOUND(InData%SStC_P_P_2_ED_P,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SStC_P_P_2_ED_P(i1), ErrStat2, ErrMsg2, OnlySize ) ! SStC_P_P_2_ED_P + DO i2 = LBOUND(InData%BD_L_2_BStC_P_B,2), UBOUND(InData%BD_L_2_BStC_P_B,2) + DO i1 = LBOUND(InData%BD_L_2_BStC_P_B,1), UBOUND(InData%BD_L_2_BStC_P_B,1) + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%BD_L_2_BStC_P_B(i1,i2), ErrStat2, ErrMsg2, OnlySize ) ! BD_L_2_BStC_P_B CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39859,19 +40713,24 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO + END DO END IF - IF ( .NOT. ALLOCATED(InData%ED_P_2_SStC_P_P) ) THEN + IF ( .NOT. ALLOCATED(InData%BStC_P_2_BD_P_B) ) 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%ED_P_2_SStC_P_P,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%ED_P_2_SStC_P_P,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%BStC_P_2_BD_P_B,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BStC_P_2_BD_P_B,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%BStC_P_2_BD_P_B,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%BStC_P_2_BD_P_B,2) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%ED_P_2_SStC_P_P,1), UBOUND(InData%ED_P_2_SStC_P_P,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%ED_P_2_SStC_P_P(i1), ErrStat2, ErrMsg2, OnlySize ) ! ED_P_2_SStC_P_P + DO i2 = LBOUND(InData%BStC_P_2_BD_P_B,2), UBOUND(InData%BStC_P_2_BD_P_B,2) + DO i1 = LBOUND(InData%BStC_P_2_BD_P_B,1), UBOUND(InData%BStC_P_2_BD_P_B,1) + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%BStC_P_2_BD_P_B(i1,i2), ErrStat2, ErrMsg2, OnlySize ) ! BStC_P_2_BD_P_B CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39900,19 +40759,20 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO + END DO END IF - IF ( .NOT. ALLOCATED(InData%SStC_P_P_2_SD_P) ) THEN + IF ( .NOT. ALLOCATED(InData%SStC_P_P_2_SubStructure) ) 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%SStC_P_P_2_SD_P,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%SStC_P_P_2_SD_P,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%SStC_P_P_2_SubStructure,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%SStC_P_P_2_SubStructure,1) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%SStC_P_P_2_SD_P,1), UBOUND(InData%SStC_P_P_2_SD_P,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SStC_P_P_2_SD_P(i1), ErrStat2, ErrMsg2, OnlySize ) ! SStC_P_P_2_SD_P + DO i1 = LBOUND(InData%SStC_P_P_2_SubStructure,1), UBOUND(InData%SStC_P_P_2_SubStructure,1) + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SStC_P_P_2_SubStructure(i1), ErrStat2, ErrMsg2, OnlySize ) ! SStC_P_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -39942,18 +40802,18 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO END IF - IF ( .NOT. ALLOCATED(InData%SDy3_P_2_SStC_P_P) ) THEN + IF ( .NOT. ALLOCATED(InData%SubStructure_2_SStC_P_P) ) 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%SDy3_P_2_SStC_P_P,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%SDy3_P_2_SStC_P_P,1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%SubStructure_2_SStC_P_P,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%SubStructure_2_SStC_P_P,1) Int_Xferred = Int_Xferred + 2 - DO i1 = LBOUND(InData%SDy3_P_2_SStC_P_P,1), UBOUND(InData%SDy3_P_2_SStC_P_P,1) - CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SDy3_P_2_SStC_P_P(i1), ErrStat2, ErrMsg2, OnlySize ) ! SDy3_P_2_SStC_P_P + DO i1 = LBOUND(InData%SubStructure_2_SStC_P_P,1), UBOUND(InData%SubStructure_2_SStC_P_P,1) + CALL NWTC_Library_Packmeshmaptype( Re_Buf, Db_Buf, Int_Buf, InData%SubStructure_2_SStC_P_P(i1), ErrStat2, ErrMsg2, OnlySize ) ! SubStructure_2_SStC_P_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -40620,7 +41480,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MeshPack( InData%u_ED_PlatformPtMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_ED_PlatformPtMesh + CALL MeshPack( InData%SubstructureLoads_Tmp, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! SubstructureLoads_Tmp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -40648,7 +41508,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MeshPack( InData%u_ED_PlatformPtMesh_2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_ED_PlatformPtMesh_2 + CALL MeshPack( InData%SubstructureLoads_Tmp2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! SubstructureLoads_Tmp2 CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -40676,7 +41536,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MeshPack( InData%u_ED_PlatformPtMesh_3, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_ED_PlatformPtMesh_3 + CALL MeshPack( InData%PlatformLoads_Tmp, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! PlatformLoads_Tmp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -40704,7 +41564,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MeshPack( InData%u_ED_PlatformPtMesh_MDf, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_ED_PlatformPtMesh_MDf + CALL MeshPack( InData%PlatformLoads_Tmp2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! PlatformLoads_Tmp2 CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -40732,7 +41592,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MeshPack( InData%u_ED_TowerPtloads, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_ED_TowerPtloads + CALL MeshPack( InData%SubstructureLoads_Tmp_Farm, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! SubstructureLoads_Tmp_Farm CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -40760,18 +41620,7 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - IF ( .NOT. ALLOCATED(InData%u_ED_BladePtLoads) ) 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%u_ED_BladePtLoads,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%u_ED_BladePtLoads,1) - Int_Xferred = Int_Xferred + 2 - - DO i1 = LBOUND(InData%u_ED_BladePtLoads,1), UBOUND(InData%u_ED_BladePtLoads,1) - CALL MeshPack( InData%u_ED_BladePtLoads(i1), Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_ED_BladePtLoads + CALL MeshPack( InData%u_ED_TowerPtloads, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_ED_TowerPtloads CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -40799,37 +41648,18 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END DO - END IF - CALL MeshPack( InData%u_SD_TPMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_SD_TPMesh - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN + IF ( .NOT. ALLOCATED(InData%u_ED_BladePtLoads) ) 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%u_ED_BladePtLoads,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%u_ED_BladePtLoads,1) + Int_Xferred = Int_Xferred + 2 - IF(ALLOCATED(Re_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf - Re_Xferred = Re_Xferred + SIZE(Re_Buf) - DEALLOCATE(Re_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Db_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf - Db_Xferred = Db_Xferred + SIZE(Db_Buf) - DEALLOCATE(Db_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - IF(ALLOCATED(Int_Buf)) THEN - IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 - IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf - Int_Xferred = Int_Xferred + SIZE(Int_Buf) - DEALLOCATE(Int_Buf) - ELSE - IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 - ENDIF - CALL MeshPack( InData%u_SD_LMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_SD_LMesh + DO i1 = LBOUND(InData%u_ED_BladePtLoads,1), UBOUND(InData%u_ED_BladePtLoads,1) + CALL MeshPack( InData%u_ED_BladePtLoads(i1), Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_ED_BladePtLoads CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -40857,7 +41687,9 @@ SUBROUTINE FAST_PackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL MeshPack( InData%u_SD_LMesh_2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_SD_LMesh_2 + END DO + END IF + CALL MeshPack( InData%u_SD_TPMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2, OnlySize ) ! u_SD_TPMesh CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41309,271 +42141,29 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%BD_P_2_ED_P(i1), ErrStat2, ErrMsg2 ) ! BD_P_2_ED_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ED_P_2_BD_P_Hub 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%ED_P_2_BD_P_Hub)) DEALLOCATE(OutData%ED_P_2_BD_P_Hub) - ALLOCATE(OutData%ED_P_2_BD_P_Hub(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ED_P_2_BD_P_Hub.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%ED_P_2_BD_P_Hub,1), UBOUND(OutData%ED_P_2_BD_P_Hub,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_BD_P_Hub(i1), ErrStat2, ErrMsg2 ) ! ED_P_2_BD_P_Hub - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) ! ED_P_2_HD_PRP_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_HD_W_P, ErrStat2, ErrMsg2 ) ! ED_P_2_HD_W_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%HD_W_P_2_ED_P, ErrStat2, ErrMsg2 ) ! HD_W_P_2_ED_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_HD_M_P, ErrStat2, ErrMsg2 ) ! ED_P_2_HD_M_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%HD_M_P_2_ED_P, ErrStat2, ErrMsg2 ) ! HD_M_P_2_ED_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%BD_P_2_ED_P(i1), ErrStat2, ErrMsg2 ) ! BD_P_2_ED_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ED_P_2_BD_P_Hub 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%ED_P_2_BD_P_Hub)) DEALLOCATE(OutData%ED_P_2_BD_P_Hub) + ALLOCATE(OutData%ED_P_2_BD_P_Hub(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ED_P_2_BD_P_Hub.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%ED_P_2_BD_P_Hub,1), UBOUND(OutData%ED_P_2_BD_P_Hub,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -41607,13 +42197,15 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_Mooring_P, ErrStat2, ErrMsg2 ) ! ED_P_2_Mooring_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_BD_P_Hub(i1), ErrStat2, ErrMsg2 ) ! ED_P_2_BD_P_Hub CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -41647,7 +42239,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%Mooring_P_2_ED_P, ErrStat2, ErrMsg2 ) ! Mooring_P_2_ED_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_HD_PRP_P, ErrStat2, ErrMsg2 ) ! ED_P_2_HD_PRP_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41687,7 +42279,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SDy3_P_2_Mooring_P, ErrStat2, ErrMsg2 ) ! SDy3_P_2_Mooring_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SubStructure_2_HD_W_P, ErrStat2, ErrMsg2 ) ! SubStructure_2_HD_W_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41727,7 +42319,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%Mooring_P_2_SD_P, ErrStat2, ErrMsg2 ) ! Mooring_P_2_SD_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%HD_W_P_2_SubStructure, ErrStat2, ErrMsg2 ) ! HD_W_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41767,7 +42359,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) ! ED_P_2_SD_TP + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SubStructure_2_HD_M_P, ErrStat2, ErrMsg2 ) ! SubStructure_2_HD_M_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41807,7 +42399,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SD_TP_2_ED_P, ErrStat2, ErrMsg2 ) ! SD_TP_2_ED_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%HD_M_P_2_SubStructure, ErrStat2, ErrMsg2 ) ! HD_M_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41847,7 +42439,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SD_P_2_HD_M_P, ErrStat2, ErrMsg2 ) ! SD_P_2_HD_M_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%Structure_2_Mooring, ErrStat2, ErrMsg2 ) ! Structure_2_Mooring CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41887,7 +42479,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%HD_M_P_2_SD_P, ErrStat2, ErrMsg2 ) ! HD_M_P_2_SD_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%Mooring_2_Structure, ErrStat2, ErrMsg2 ) ! Mooring_2_Structure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41927,7 +42519,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SD_P_2_HD_W_P, ErrStat2, ErrMsg2 ) ! SD_P_2_HD_W_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_SD_TP, ErrStat2, ErrMsg2 ) ! ED_P_2_SD_TP CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -41967,7 +42559,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%HD_W_P_2_SD_P, ErrStat2, ErrMsg2 ) ! HD_W_P_2_SD_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SD_TP_2_ED_P, ErrStat2, ErrMsg2 ) ! SD_TP_2_ED_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -42442,20 +43034,20 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta END DO END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! SStC_P_P_2_ED_P not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! SStC_P_P_2_SubStructure 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%SStC_P_P_2_ED_P)) DEALLOCATE(OutData%SStC_P_P_2_ED_P) - ALLOCATE(OutData%SStC_P_P_2_ED_P(i1_l:i1_u),STAT=ErrStat2) + IF (ALLOCATED(OutData%SStC_P_P_2_SubStructure)) DEALLOCATE(OutData%SStC_P_P_2_SubStructure) + ALLOCATE(OutData%SStC_P_P_2_SubStructure(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%SStC_P_P_2_ED_P.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%SStC_P_P_2_SubStructure.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i1 = LBOUND(OutData%SStC_P_P_2_ED_P,1), UBOUND(OutData%SStC_P_P_2_ED_P,1) + DO i1 = LBOUND(OutData%SStC_P_P_2_SubStructure,1), UBOUND(OutData%SStC_P_P_2_SubStructure,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -42489,7 +43081,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SStC_P_P_2_ED_P(i1), ErrStat2, ErrMsg2 ) ! SStC_P_P_2_ED_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SStC_P_P_2_SubStructure(i1), ErrStat2, ErrMsg2 ) ! SStC_P_P_2_SubStructure CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -42498,20 +43090,20 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! ED_P_2_SStC_P_P not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! SubStructure_2_SStC_P_P 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%ED_P_2_SStC_P_P)) DEALLOCATE(OutData%ED_P_2_SStC_P_P) - ALLOCATE(OutData%ED_P_2_SStC_P_P(i1_l:i1_u),STAT=ErrStat2) + IF (ALLOCATED(OutData%SubStructure_2_SStC_P_P)) DEALLOCATE(OutData%SubStructure_2_SStC_P_P) + ALLOCATE(OutData%SubStructure_2_SStC_P_P(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%ED_P_2_SStC_P_P.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%SubStructure_2_SStC_P_P.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i1 = LBOUND(OutData%ED_P_2_SStC_P_P,1), UBOUND(OutData%ED_P_2_SStC_P_P,1) + DO i1 = LBOUND(OutData%SubStructure_2_SStC_P_P,1), UBOUND(OutData%SubStructure_2_SStC_P_P,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -42545,119 +43137,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%ED_P_2_SStC_P_P(i1), ErrStat2, ErrMsg2 ) ! ED_P_2_SStC_P_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! SStC_P_P_2_SD_P 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%SStC_P_P_2_SD_P)) DEALLOCATE(OutData%SStC_P_P_2_SD_P) - ALLOCATE(OutData%SStC_P_P_2_SD_P(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%SStC_P_P_2_SD_P.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%SStC_P_P_2_SD_P,1), UBOUND(OutData%SStC_P_P_2_SD_P,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SStC_P_P_2_SD_P(i1), ErrStat2, ErrMsg2 ) ! SStC_P_P_2_SD_P - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! SDy3_P_2_SStC_P_P 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%SDy3_P_2_SStC_P_P)) DEALLOCATE(OutData%SDy3_P_2_SStC_P_P) - ALLOCATE(OutData%SDy3_P_2_SStC_P_P(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%SDy3_P_2_SStC_P_P.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%SDy3_P_2_SStC_P_P,1), UBOUND(OutData%SDy3_P_2_SStC_P_P,1) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SDy3_P_2_SStC_P_P(i1), ErrStat2, ErrMsg2 ) ! SDy3_P_2_SStC_P_P + CALL NWTC_Library_Unpackmeshmaptype( Re_Buf, Db_Buf, Int_Buf, OutData%SubStructure_2_SStC_P_P(i1), ErrStat2, ErrMsg2 ) ! SubStructure_2_SStC_P_P CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -43579,47 +44059,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MeshUnpack( OutData%u_ED_PlatformPtMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_ED_PlatformPtMesh - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN - - IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) - IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) - IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) - Re_Xferred = Re_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) - Db_Xferred = Db_Xferred + Buf_size - END IF - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) - Int_Xferred = Int_Xferred + Buf_size - END IF - CALL MeshUnpack( OutData%u_ED_PlatformPtMesh_2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_ED_PlatformPtMesh_2 + CALL MeshUnpack( OutData%SubstructureLoads_Tmp, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! SubstructureLoads_Tmp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -43659,7 +44099,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MeshUnpack( OutData%u_ED_PlatformPtMesh_3, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_ED_PlatformPtMesh_3 + CALL MeshUnpack( OutData%SubstructureLoads_Tmp2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! SubstructureLoads_Tmp2 CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -43699,7 +44139,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MeshUnpack( OutData%u_ED_PlatformPtMesh_MDf, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_ED_PlatformPtMesh_MDf + CALL MeshUnpack( OutData%PlatformLoads_Tmp, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! PlatformLoads_Tmp CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -43739,27 +44179,13 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MeshUnpack( OutData%u_ED_TowerPtloads, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_ED_TowerPtloads + CALL MeshUnpack( OutData%PlatformLoads_Tmp2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! PlatformLoads_Tmp2 CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! u_ED_BladePtLoads 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%u_ED_BladePtLoads)) DEALLOCATE(OutData%u_ED_BladePtLoads) - ALLOCATE(OutData%u_ED_BladePtLoads(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%u_ED_BladePtLoads.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - DO i1 = LBOUND(OutData%u_ED_BladePtLoads,1), UBOUND(OutData%u_ED_BladePtLoads,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -43793,15 +44219,13 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MeshUnpack( OutData%u_ED_BladePtLoads(i1), Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_ED_BladePtLoads + CALL MeshUnpack( OutData%SubstructureLoads_Tmp_Farm, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! SubstructureLoads_Tmp_Farm CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END DO - END IF Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -43835,13 +44259,27 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MeshUnpack( OutData%u_SD_TPMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_SD_TPMesh + CALL MeshUnpack( OutData%u_ED_TowerPtloads, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_ED_TowerPtloads CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! u_ED_BladePtLoads 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%u_ED_BladePtLoads)) DEALLOCATE(OutData%u_ED_BladePtLoads) + ALLOCATE(OutData%u_ED_BladePtLoads(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%u_ED_BladePtLoads.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%u_ED_BladePtLoads,1), UBOUND(OutData%u_ED_BladePtLoads,1) Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -43875,13 +44313,15 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MeshUnpack( OutData%u_SD_LMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_SD_LMesh + CALL MeshUnpack( OutData%u_ED_BladePtLoads(i1), Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_ED_BladePtLoads CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -43915,7 +44355,7 @@ SUBROUTINE FAST_UnPackModuleMapType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL MeshUnpack( OutData%u_SD_LMesh_2, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_SD_LMesh_2 + CALL MeshUnpack( OutData%u_SD_TPMesh, Re_Buf, Db_Buf, Int_Buf, ErrStat2, ErrMsg2 ) ! u_SD_TPMesh CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -45005,6 +45445,12 @@ SUBROUTINE FAST_CopyInitData( SrcInitDataData, DstInitDataData, CtrlCode, ErrSta CALL OpFM_CopyInitOutput( SrcInitDataData%OutData_OpFM, DstInitDataData%OutData_OpFM, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN + CALL SeaSt_CopyInitInput( SrcInitDataData%InData_SeaSt, DstInitDataData%InData_SeaSt, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL SeaSt_CopyInitOutput( SrcInitDataData%OutData_SeaSt, DstInitDataData%OutData_SeaSt, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN CALL HydroDyn_CopyInitInput( SrcInitDataData%InData_HD, DstInitDataData%InData_HD, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -45115,6 +45561,10 @@ SUBROUTINE FAST_DestroyInitData( InitDataData, ErrStat, ErrMsg, DEALLOCATEpointe CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL OpFM_DestroyInitOutput( InitDataData%OutData_OpFM, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL SeaSt_DestroyInitInput( InitDataData%InData_SeaSt, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL SeaSt_DestroyInitOutput( InitDataData%OutData_SeaSt, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL HydroDyn_DestroyInitInput( InitDataData%InData_HD, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL HydroDyn_DestroyInitOutput( InitDataData%OutData_HD, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) @@ -45433,6 +45883,40 @@ SUBROUTINE FAST_PackInitData( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF + Int_BufSz = Int_BufSz + 3 ! InData_SeaSt: size of buffers for each call to pack subtype + CALL SeaSt_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%InData_SeaSt, ErrStat2, ErrMsg2, .TRUE. ) ! InData_SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! InData_SeaSt + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! InData_SeaSt + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! InData_SeaSt + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 3 ! OutData_SeaSt: size of buffers for each call to pack subtype + CALL SeaSt_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%OutData_SeaSt, ErrStat2, ErrMsg2, .TRUE. ) ! OutData_SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! OutData_SeaSt + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! OutData_SeaSt + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! OutData_SeaSt + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF Int_BufSz = Int_BufSz + 3 ! InData_HD: size of buffers for each call to pack subtype CALL HydroDyn_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%InData_HD, ErrStat2, ErrMsg2, .TRUE. ) ! InData_HD CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -46147,6 +46631,62 @@ SUBROUTINE FAST_PackInitData( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + CALL SeaSt_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%InData_SeaSt, ErrStat2, ErrMsg2, OnlySize ) ! InData_SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + CALL SeaSt_PackInitOutput( Re_Buf, Db_Buf, Int_Buf, InData%OutData_SeaSt, ErrStat2, ErrMsg2, OnlySize ) ! OutData_SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + IF(ALLOCATED(Re_Buf)) THEN IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf @@ -47277,6 +47817,86 @@ SUBROUTINE FAST_UnPackInitData( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_UnpackInitInput( Re_Buf, Db_Buf, Int_Buf, OutData%InData_SeaSt, ErrStat2, ErrMsg2 ) ! InData_SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_UnpackInitOutput( Re_Buf, Db_Buf, Int_Buf, OutData%OutData_SeaSt, ErrStat2, ErrMsg2 ) ! OutData_SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) @@ -48422,6 +49042,9 @@ SUBROUTINE FAST_CopyTurbineType( SrcTurbineTypeData, DstTurbineTypeData, CtrlCod CALL FAST_Copyscdataex_data( SrcTurbineTypeData%SC_DX, DstTurbineTypeData%SC_DX, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN + CALL FAST_Copyseastate_data( SrcTurbineTypeData%SeaSt, DstTurbineTypeData%SeaSt, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN CALL FAST_Copyhydrodyn_data( SrcTurbineTypeData%HD, DstTurbineTypeData%HD, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN @@ -48496,6 +49119,8 @@ SUBROUTINE FAST_DestroyTurbineType( TurbineTypeData, ErrStat, ErrMsg, DEALLOCATE CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL FAST_Destroyscdataex_data( TurbineTypeData%SC_DX, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL FAST_Destroyseastate_data( TurbineTypeData%SeaSt, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL FAST_Destroyhydrodyn_data( TurbineTypeData%HD, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) CALL FAST_Destroysubdyn_data( TurbineTypeData%SD, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) @@ -48757,6 +49382,23 @@ SUBROUTINE FAST_PackTurbineType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF + Int_BufSz = Int_BufSz + 3 ! SeaSt: size of buffers for each call to pack subtype + CALL FAST_Packseastate_data( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF Int_BufSz = Int_BufSz + 3 ! HD: size of buffers for each call to pack subtype CALL FAST_Packhydrodyn_data( Re_Buf, Db_Buf, Int_Buf, InData%HD, ErrStat2, ErrMsg2, .TRUE. ) ! HD CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -49251,6 +49893,34 @@ SUBROUTINE FAST_PackTurbineType( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + CALL FAST_Packseastate_data( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + IF(ALLOCATED(Re_Buf)) THEN IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf @@ -50034,6 +50704,46 @@ SUBROUTINE FAST_UnPackTurbineType( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL FAST_Unpackseastate_data( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt, ErrStat2, ErrMsg2 ) ! SeaSt + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) diff --git a/modules/orcaflex-interface/src/OrcaFlexInterface.f90 b/modules/orcaflex-interface/src/OrcaFlexInterface.f90 index 04c49d6d76..3671b6266c 100644 --- a/modules/orcaflex-interface/src/OrcaFlexInterface.f90 +++ b/modules/orcaflex-interface/src/OrcaFlexInterface.f90 @@ -728,7 +728,7 @@ SUBROUTINE Orca_CalcOutput( t, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ! Determine the rotational angles from the direction-cosine matrix rotdisp = GetSmllRotAngs ( u%PtfmMesh%Orientation(:,:,1), ErrStatTmp, ErrMsgTmp ) CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) - IF ( ErrStat >= ErrID_Fatal) RETURN + IF ( ErrStat >= AbortErrLev) RETURN q = reshape((/REAL(u%PtfmMesh%TranslationDisp(:,1),ReKi),rotdisp(:)/),(/6/)) qdot = reshape((/u%PtfmMesh%TranslationVel(:,1),u%PtfmMesh%RotationVel(:,1)/),(/6/)) diff --git a/modules/seastate/CMakeLists.txt b/modules/seastate/CMakeLists.txt new file mode 100644 index 0000000000..c7f418fa34 --- /dev/null +++ b/modules/seastate/CMakeLists.txt @@ -0,0 +1,53 @@ +# +# Copyright 2023 National Renewable Energy Laboratory +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +if (GENERATE_TYPES) + generate_f90_types(src/Current.txt ${CMAKE_CURRENT_LIST_DIR}/src/Current_Types.f90 -noextrap) + generate_f90_types(src/Waves.txt ${CMAKE_CURRENT_LIST_DIR}/src/Waves_Types.f90 -noextrap) + generate_f90_types(src/Waves2.txt ${CMAKE_CURRENT_LIST_DIR}/src/Waves2_Types.f90 -noextrap) + generate_f90_types(src/SeaState_Interp.txt ${CMAKE_CURRENT_LIST_DIR}/src/SeaState_Interp_Types.f90 -noextrap) + generate_f90_types(src/SeaState.txt ${CMAKE_CURRENT_LIST_DIR}/src/SeaState_Types.f90 -noextrap) +endif() + +add_library(seastlib + src/Current.f90 + src/Waves.f90 + src/Waves2.f90 + src/UserWaves.f90 + src/SeaState_Interp.f90 + src/SeaState_Input.f90 + src/SeaState.f90 + src/SeaState_Output.f90 + src/Current_Types.f90 + src/Waves_Types.f90 + src/Waves2_Types.f90 + src/SeaState_Interp_Types.f90 + src/SeaState_Types.f90 +) +target_link_libraries(seastlib nwtclibs versioninfolib) + +# Driver +add_executable(seastate_driver + src/SeaState_DriverCode.f90 +) +target_link_libraries(seastate_driver seastlib) + +install(TARGETS seastate_driver seastlib + EXPORT "${CMAKE_PROJECT_NAME}Libraries" + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +) diff --git a/modules/seastate/README.md b/modules/seastate/README.md new file mode 100644 index 0000000000..57c6b9672c --- /dev/null +++ b/modules/seastate/README.md @@ -0,0 +1,9 @@ +# SeaState Module +The legacy version of this module was incorporated within the HydroDyn module. Additional documentation are available +at the [NWTC Software Portal](https://nwtc.nrel.gov/HydroDyn/). + +## Overview +SeaState is a module for modeling hydrodynamics. It has been coupled +into the OpenFAST multi-physics engineering tool to enable hydrodynamic +simulation of horizontal-axis wind turbines. SeaState can also be driven +as a standalone code to generate wave elevation and kinematic data uncoupled from OpenFAST. diff --git a/modules/hydrodyn/src/Current.f90 b/modules/seastate/src/Current.f90 similarity index 68% rename from modules/hydrodyn/src/Current.f90 rename to modules/seastate/src/Current.f90 index a7415f6779..68af11a166 100644 --- a/modules/hydrodyn/src/Current.f90 +++ b/modules/seastate/src/Current.f90 @@ -35,7 +35,6 @@ MODULE Current ! ..... Public Subroutines ................................................................................................... PUBLIC :: Current_Init ! Initialization routine - PUBLIC :: Current_End ! Ending routine (includes clean up) CONTAINS @@ -154,25 +153,10 @@ END SUBROUTINE Calc_Current !> This routine is called at the start of the simulation to perform initialization steps. !! The parameters are set here and not changed during the simulation. !! The initial states and initial guess for the input are defined. -SUBROUTINE Current_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) +SUBROUTINE Current_Init( InitInp, InitOut, ErrStat, ErrMsg ) !.................................................................................................................................. TYPE(Current_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine - TYPE(Current_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined - TYPE(Current_ParameterType), INTENT( OUT) :: p !< Parameters - TYPE(Current_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states - TYPE(Current_DiscreteStateType), INTENT( OUT) :: xd !< Initial discrete states - TYPE(Current_ConstraintStateType), INTENT( OUT) :: z !< Initial guess of the constraint states - TYPE(Current_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states - TYPE(Current_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; - !! only the output mesh is initialized) - TYPE(Current_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables - REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: the rate that - !! (1) Current_UpdateStates() is called in loose coupling & - !! (2) Current_UpdateDiscState() is called in tight coupling. - !! Input is the suggested time from the glue code; - !! Output is the actual coupling interval that will be used - !! by the glue code. TYPE(Current_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None @@ -198,26 +182,20 @@ SUBROUTINE Current_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ErrStat = ErrID_None ErrMsg = "" - - - ! Initialize the NWTC Subroutine Library - - CALL NWTC_Init( ) - ! IF there are Morison elements, then compute the current components at each morison node elevation - IF ( InitInp%NMorisonNodes > 0 ) THEN + IF ( InitInp%NGridPts > 0 ) THEN - ALLOCATE ( InitOut%CurrVxi( InitInp%NMorisonNodes ) , STAT=ErrStat ) + ALLOCATE ( InitOut%CurrVxi( InitInp%NGridPts ) , STAT=ErrStat ) IF ( ErrStat /= ErrID_None ) THEN ErrMsg = ' Error allocating memory for the CurrVxi array.' ErrStat = ErrID_Fatal RETURN END IF - ALLOCATE ( InitOut%CurrVyi( InitInp%NMorisonNodes ) , STAT=ErrStat ) + ALLOCATE ( InitOut%CurrVyi( InitInp%NGridPts ) , STAT=ErrStat ) IF ( ErrStat /= ErrID_None ) THEN ErrMsg = ' Error allocating memory for the CurrVyi array.' ErrStat = ErrID_Fatal @@ -227,9 +205,9 @@ SUBROUTINE Current_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ! Loop over all of the points where current information is required - DO I = 1, InitInp%NMorisonNodes + DO I = 1, InitInp%NGridPts - CALL Calc_Current( InitInp, InitInp%MorisonNodezi(I), InitInp%WtrDpth, InitInp%DirRoot, CurrVxi, CurrVyi ) + CALL Calc_Current( InitInp, InitInp%WaveKinGridzi(I), InitInp%WtrDpth, InitInp%DirRoot, CurrVxi, CurrVyi ) InitOut%CurrVxi(I) = CurrVxi InitOut%CurrVyi(I) = CurrVyi @@ -247,77 +225,8 @@ SUBROUTINE Current_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In InitOut%PCurrVyiPz0 = ( CurrVyi0 - CurrVyiS )/SmllNmbr ! yi-direction - u%DummyInput = 0.0 - p%DT = Interval - x%DummyContState = 0.0 - xd%DummyDiscState = 0.0 - z%DummyConstrState = 0.0 - OtherState%DummyOtherState = 0 - y%DummyOutput = 0.0 - m%DummyMiscVar = 0 - END SUBROUTINE Current_Init - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is called at the end of the simulation. -SUBROUTINE Current_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - TYPE(Current_InputType), INTENT(INOUT) :: u !< System inputs - TYPE(Current_ParameterType), INTENT(INOUT) :: p !< Parameters - TYPE(Current_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states - TYPE(Current_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states - TYPE(Current_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states - TYPE(Current_OtherStateType), INTENT(INOUT) :: OtherState !< Other/optimization states - TYPE(Current_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(Current_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - - ! Place any last minute operations or calculations here: - - - ! Close files here: - - - - ! Destroy the input data: - - CALL Current_DestroyInput( u, ErrStat, ErrMsg ) - - - ! Destroy the parameter data: - - CALL Current_DestroyParam( p, ErrStat, ErrMsg ) - - - ! Destroy the state data: - - CALL Current_DestroyContState( x, ErrStat, ErrMsg ) - CALL Current_DestroyDiscState( xd, ErrStat, ErrMsg ) - CALL Current_DestroyConstrState( z, ErrStat, ErrMsg ) - CALL Current_DestroyOtherState( OtherState, ErrStat, ErrMsg ) - - CALL Current_DestroyMisc( m, ErrStat, ErrMsg ) - - ! Destroy the output data: - - CALL Current_DestroyOutput( y, ErrStat, ErrMsg ) - - - - -END SUBROUTINE Current_End -!---------------------------------------------------------------------------------------------------------------------------------- END MODULE Current !********************************************************************************************************************************** diff --git a/modules/hydrodyn/src/Current.txt b/modules/seastate/src/Current.txt similarity index 53% rename from modules/hydrodyn/src/Current.txt rename to modules/seastate/src/Current.txt index 5008b1b0af..a0a501ac32 100644 --- a/modules/hydrodyn/src/Current.txt +++ b/modules/seastate/src/Current.txt @@ -28,8 +28,8 @@ typedef ^ ^ SiKi Cu typedef ^ ^ SiKi CurrDIDir - - - "" - typedef ^ ^ INTEGER CurrMod - - - "" - typedef ^ ^ SiKi WtrDpth - - - "" - -typedef ^ ^ SiKi MorisonNodezi {:} - - "" - -typedef ^ ^ INTEGER NMorisonNodes - - - "" - +typedef ^ ^ SiKi WaveKinGridzi {:} - - "" - +typedef ^ ^ INTEGER NGridPts - - - "" - typedef ^ ^ CHARACTER(1024) DirRoot - "" - "" - # # @@ -40,49 +40,4 @@ typedef ^ ^ SiKi Cu typedef ^ ^ SiKi PCurrVxiPz0 - - - "" - typedef ^ ^ SiKi PCurrVyiPz0 - - - "" - # -# -# ..... States .................................................................................................................... -# Define continuous (differentiable) states here: -# -typedef ^ ContinuousStateType SiKi DummyContState - - - "Remove this variable if you have continuous states" - -# -# -# Define discrete (nondifferentiable) states here: -# -typedef ^ DiscreteStateType SiKi DummyDiscState - - - "Remove this variable if you have discrete states" - -# -# -# Define constraint states here: -# -typedef ^ ConstraintStateType SiKi DummyConstrState - - - "Remove this variable if you have constraint states" - -# -# -# Define any other states, including integer or logical states here: -typedef ^ OtherStateType IntKi DummyOtherState - - - "Remove this variable if you have other states" - - - -# ..... Misc/Optimization variables................................................................................................. -# Define any data that are used only for efficiency purposes (these variables are not associated with time): -# e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc. -typedef ^ MiscVarType ReKi DummyMiscVar - - - "Remove this variable if you have misc/optimization variables" - -# ..... Parameters ................................................................................................................ -# Define parameters here: -# Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states: -# -typedef ^ ParameterType DbKi DT - - - "Time step for continuous state integration and discrete state update" seconds -# -# -# ..... Inputs .................................................................................................................... -# Define inputs that are contained on the mesh here: -# -#typedef^ InputType MeshType MeshedInput - - - "Meshed input data" - -# Define inputs that are not on this mesh here: -typedef ^ InputType SiKi DummyInput - - - "Remove this variable if you have input data" - -# -# -# ..... Outputs ................................................................................................................... -# Define outputs that are contained on the mesh here: -#typedef^ OutputType MeshType MeshedOutput - - - "Meshed output data" - -# Define outputs that are not on this mesh here: -typedef ^ OutputType SiKi DummyOutput - - - "Remove this variable if you have output data" - \ No newline at end of file diff --git a/modules/seastate/src/Current_Types.f90 b/modules/seastate/src/Current_Types.f90 new file mode 100644 index 0000000000..fcd9c9f9fd --- /dev/null +++ b/modules/seastate/src/Current_Types.f90 @@ -0,0 +1,580 @@ +!STARTOFREGISTRYGENERATEDFILE 'Current_Types.f90' +! +! WARNING This file is generated automatically by the FAST registry. +! Do not edit. Your changes to this file will be lost. +! +! FAST Registry +!********************************************************************************************************************************* +! Current_Types +!................................................................................................................................. +! This file is part of Current. +! +! Copyright (C) 2012-2016 National Renewable Energy Laboratory +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +! +! W A R N I N G : This file was automatically generated from the FAST registry. Changes made to this file may be lost. +! +!********************************************************************************************************************************* +!> This module contains the user-defined types needed in Current. It also contains copy, destroy, pack, and +!! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. +MODULE Current_Types +!--------------------------------------------------------------------------------------------------------------------------------- +USE NWTC_Library +IMPLICIT NONE +! ========= Current_InitInputType ======= + TYPE, PUBLIC :: Current_InitInputType + REAL(SiKi) :: CurrSSV0 !< [-] + CHARACTER(80) :: CurrSSDirChr !< [-] + REAL(SiKi) :: CurrSSDir !< [-] + REAL(SiKi) :: CurrNSRef !< [-] + REAL(SiKi) :: CurrNSV0 !< [-] + REAL(SiKi) :: CurrNSDir !< [-] + REAL(SiKi) :: CurrDIV !< [-] + REAL(SiKi) :: CurrDIDir !< [-] + INTEGER(IntKi) :: CurrMod !< [-] + REAL(SiKi) :: WtrDpth !< [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinGridzi !< [-] + INTEGER(IntKi) :: NGridPts !< [-] + CHARACTER(1024) :: DirRoot !< [-] + END TYPE Current_InitInputType +! ======================= +! ========= Current_InitOutputType ======= + TYPE, PUBLIC :: Current_InitOutputType + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: CurrVxi !< [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: CurrVyi !< [-] + REAL(SiKi) :: PCurrVxiPz0 !< [-] + REAL(SiKi) :: PCurrVyiPz0 !< [-] + END TYPE Current_InitOutputType +! ======================= +CONTAINS + SUBROUTINE Current_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(Current_InitInputType), INTENT(IN) :: SrcInitInputData + TYPE(Current_InitInputType), INTENT(INOUT) :: DstInitInputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyInitInput' +! + ErrStat = ErrID_None + ErrMsg = "" + DstInitInputData%CurrSSV0 = SrcInitInputData%CurrSSV0 + DstInitInputData%CurrSSDirChr = SrcInitInputData%CurrSSDirChr + DstInitInputData%CurrSSDir = SrcInitInputData%CurrSSDir + DstInitInputData%CurrNSRef = SrcInitInputData%CurrNSRef + DstInitInputData%CurrNSV0 = SrcInitInputData%CurrNSV0 + DstInitInputData%CurrNSDir = SrcInitInputData%CurrNSDir + DstInitInputData%CurrDIV = SrcInitInputData%CurrDIV + DstInitInputData%CurrDIDir = SrcInitInputData%CurrDIDir + DstInitInputData%CurrMod = SrcInitInputData%CurrMod + DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth +IF (ALLOCATED(SrcInitInputData%WaveKinGridzi)) THEN + i1_l = LBOUND(SrcInitInputData%WaveKinGridzi,1) + i1_u = UBOUND(SrcInitInputData%WaveKinGridzi,1) + IF (.NOT. ALLOCATED(DstInitInputData%WaveKinGridzi)) THEN + ALLOCATE(DstInitInputData%WaveKinGridzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinGridzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveKinGridzi = SrcInitInputData%WaveKinGridzi +ENDIF + DstInitInputData%NGridPts = SrcInitInputData%NGridPts + DstInitInputData%DirRoot = SrcInitInputData%DirRoot + END SUBROUTINE Current_CopyInitInput + + SUBROUTINE Current_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(Current_InitInputType), INTENT(INOUT) :: InitInputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyInitInput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +IF (ALLOCATED(InitInputData%WaveKinGridzi)) THEN + DEALLOCATE(InitInputData%WaveKinGridzi) +ENDIF + END SUBROUTINE Current_DestroyInitInput + + SUBROUTINE Current_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(Current_InitInputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackInitInput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Re_BufSz = Re_BufSz + 1 ! CurrSSV0 + Int_BufSz = Int_BufSz + 1*LEN(InData%CurrSSDirChr) ! CurrSSDirChr + Re_BufSz = Re_BufSz + 1 ! CurrSSDir + Re_BufSz = Re_BufSz + 1 ! CurrNSRef + Re_BufSz = Re_BufSz + 1 ! CurrNSV0 + Re_BufSz = Re_BufSz + 1 ! CurrNSDir + Re_BufSz = Re_BufSz + 1 ! CurrDIV + Re_BufSz = Re_BufSz + 1 ! CurrDIDir + Int_BufSz = Int_BufSz + 1 ! CurrMod + Re_BufSz = Re_BufSz + 1 ! WtrDpth + Int_BufSz = Int_BufSz + 1 ! WaveKinGridzi allocated yes/no + IF ( ALLOCATED(InData%WaveKinGridzi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinGridzi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinGridzi) ! WaveKinGridzi + END IF + Int_BufSz = Int_BufSz + 1 ! NGridPts + Int_BufSz = Int_BufSz + 1*LEN(InData%DirRoot) ! DirRoot + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + ReKiBuf(Re_Xferred) = InData%CurrSSV0 + Re_Xferred = Re_Xferred + 1 + DO I = 1, LEN(InData%CurrSSDirChr) + IntKiBuf(Int_Xferred) = ICHAR(InData%CurrSSDirChr(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + ReKiBuf(Re_Xferred) = InData%CurrSSDir + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CurrNSRef + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CurrNSV0 + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CurrNSDir + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CurrDIV + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CurrDIDir + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%CurrMod + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WtrDpth + Re_Xferred = Re_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveKinGridzi) ) 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%WaveKinGridzi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinGridzi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinGridzi,1), UBOUND(InData%WaveKinGridzi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinGridzi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IntKiBuf(Int_Xferred) = InData%NGridPts + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(InData%DirRoot) + IntKiBuf(Int_Xferred) = ICHAR(InData%DirRoot(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END SUBROUTINE Current_PackInitInput + + SUBROUTINE Current_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(Current_InitInputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackInitInput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%CurrSSV0 = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + DO I = 1, LEN(OutData%CurrSSDirChr) + OutData%CurrSSDirChr(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%CurrSSDir = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CurrNSRef = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CurrNSV0 = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CurrNSDir = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CurrDIV = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CurrDIDir = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CurrMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WtrDpth = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinGridzi 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%WaveKinGridzi)) DEALLOCATE(OutData%WaveKinGridzi) + ALLOCATE(OutData%WaveKinGridzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinGridzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinGridzi,1), UBOUND(OutData%WaveKinGridzi,1) + OutData%WaveKinGridzi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%NGridPts = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(OutData%DirRoot) + OutData%DirRoot(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END SUBROUTINE Current_UnPackInitInput + + SUBROUTINE Current_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(Current_InitOutputType), INTENT(IN) :: SrcInitOutputData + TYPE(Current_InitOutputType), INTENT(INOUT) :: DstInitOutputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Current_CopyInitOutput' +! + ErrStat = ErrID_None + ErrMsg = "" +IF (ALLOCATED(SrcInitOutputData%CurrVxi)) THEN + i1_l = LBOUND(SrcInitOutputData%CurrVxi,1) + i1_u = UBOUND(SrcInitOutputData%CurrVxi,1) + IF (.NOT. ALLOCATED(DstInitOutputData%CurrVxi)) THEN + ALLOCATE(DstInitOutputData%CurrVxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%CurrVxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%CurrVxi = SrcInitOutputData%CurrVxi +ENDIF +IF (ALLOCATED(SrcInitOutputData%CurrVyi)) THEN + i1_l = LBOUND(SrcInitOutputData%CurrVyi,1) + i1_u = UBOUND(SrcInitOutputData%CurrVyi,1) + IF (.NOT. ALLOCATED(DstInitOutputData%CurrVyi)) THEN + ALLOCATE(DstInitOutputData%CurrVyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%CurrVyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%CurrVyi = SrcInitOutputData%CurrVyi +ENDIF + DstInitOutputData%PCurrVxiPz0 = SrcInitOutputData%PCurrVxiPz0 + DstInitOutputData%PCurrVyiPz0 = SrcInitOutputData%PCurrVyiPz0 + END SUBROUTINE Current_CopyInitOutput + + SUBROUTINE Current_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(Current_InitOutputType), INTENT(INOUT) :: InitOutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Current_DestroyInitOutput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +IF (ALLOCATED(InitOutputData%CurrVxi)) THEN + DEALLOCATE(InitOutputData%CurrVxi) +ENDIF +IF (ALLOCATED(InitOutputData%CurrVyi)) THEN + DEALLOCATE(InitOutputData%CurrVyi) +ENDIF + END SUBROUTINE Current_DestroyInitOutput + + SUBROUTINE Current_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(Current_InitOutputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Current_PackInitOutput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1 ! CurrVxi allocated yes/no + IF ( ALLOCATED(InData%CurrVxi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! CurrVxi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%CurrVxi) ! CurrVxi + END IF + Int_BufSz = Int_BufSz + 1 ! CurrVyi allocated yes/no + IF ( ALLOCATED(InData%CurrVyi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! CurrVyi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%CurrVyi) ! CurrVyi + END IF + Re_BufSz = Re_BufSz + 1 ! PCurrVxiPz0 + Re_BufSz = Re_BufSz + 1 ! PCurrVyiPz0 + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + IF ( .NOT. ALLOCATED(InData%CurrVxi) ) 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%CurrVxi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%CurrVxi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%CurrVxi,1), UBOUND(InData%CurrVxi,1) + ReKiBuf(Re_Xferred) = InData%CurrVxi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%CurrVyi) ) 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%CurrVyi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%CurrVyi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%CurrVyi,1), UBOUND(InData%CurrVyi,1) + ReKiBuf(Re_Xferred) = InData%CurrVyi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + ReKiBuf(Re_Xferred) = InData%PCurrVxiPz0 + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%PCurrVyiPz0 + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE Current_PackInitOutput + + SUBROUTINE Current_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(Current_InitOutputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Current_UnPackInitOutput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CurrVxi 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%CurrVxi)) DEALLOCATE(OutData%CurrVxi) + ALLOCATE(OutData%CurrVxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%CurrVxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%CurrVxi,1), UBOUND(OutData%CurrVxi,1) + OutData%CurrVxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CurrVyi 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%CurrVyi)) DEALLOCATE(OutData%CurrVyi) + ALLOCATE(OutData%CurrVyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%CurrVyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%CurrVyi,1), UBOUND(OutData%CurrVyi,1) + OutData%CurrVyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%PCurrVxiPz0 = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%PCurrVyiPz0 = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE Current_UnPackInitOutput + +END MODULE Current_Types +!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 new file mode 100644 index 0000000000..72290c4607 --- /dev/null +++ b/modules/seastate/src/SeaState.f90 @@ -0,0 +1,1053 @@ +!********************************************************************************************************************************** +! The SeaState and SeaState_Types modules make up a template for creating user-defined calculations in the FAST Modularization +! Framework. HydroDyns_Types will be auto-generated based on a description of the variables for the module. +! +! "SeaState" should be replaced with the name of your module. Example: SeaState +! "SeaState" (in SeaState_*) should be replaced with the module name or an abbreviation of it. Example: SeaSt +!.................................................................................................................................. +! LICENSING +! Copyright (C) 2013-2015 National Renewable Energy Laboratory +! +! This file is part of SeaState. +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +!********************************************************************************************************************************** +MODULE SeaState + + USE SeaState_Types + USE NWTC_Library + USE SeaState_Input + USE SeaState_Output + use SeaState_Interp + USE Current + USE Waves2 + + IMPLICIT NONE + + PRIVATE + + + + ! ..... Public Subroutines ................................................................................................... + + PUBLIC :: SeaSt_Init ! Initialization routine + PUBLIC :: SeaSt_End ! Ending routine (includes clean up) + + PUBLIC :: SeaSt_UpdateStates ! Loose coupling routine for solving for constraint states, integrating + ! continuous states, and updating discrete states + PUBLIC :: SeaSt_CalcOutput ! Routine for computing outputs + + PUBLIC :: SeaSt_CalcConstrStateResidual ! Tight coupling routine for returning the constraint state residual + PUBLIC :: SeaSt_CalcContStateDeriv ! Tight coupling routine for computing derivatives of continuous states + !PUBLIC :: SeaSt_UpdateDiscState ! Tight coupling routine for updating discrete states + + + CONTAINS +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine is called at the start of the simulation to perform initialization steps. +!! The parameters are set here and not changed during the simulation. +!! The initial states and initial guess for the input are defined. +SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) +!.................................................................................................................................. + + TYPE(SeaSt_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine. + TYPE(SeaSt_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined + TYPE(SeaSt_ParameterType), INTENT( OUT) :: p !< Parameters + TYPE(SeaSt_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states + TYPE(SeaSt_DiscreteStateType), INTENT( OUT) :: xd !< Initial discrete states + TYPE(SeaSt_ConstraintStateType), INTENT( OUT) :: z !< Initial guess of the constraint states + TYPE(SeaSt_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states + TYPE(SeaSt_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; + !! only the output mesh is initialized) + TYPE(SeaSt_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables + REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: the rate that + !! (1) SeaSt_UpdateStates() is called in loose coupling & + !! (2) SeaSt_UpdateDiscState() is called in tight coupling. + !! Input is the suggested time from the glue code; + !! Output is the actual coupling interval that will be used + !! by the glue code. + TYPE(SeaSt_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + ! Local variables + TYPE(SeaSt_InputFile) :: InputFileData !< Data from input file + TYPE(FileInfoType) :: InFileInfo !< The derived type for holding the full input file for parsing -- we may pass this in the future + TYPE(Waves_InitOutputType) :: Waves_InitOut ! Initialization Outputs from the Waves submodule initialization + TYPE(Waves2_InitOutputType) :: Waves2_InitOut ! Initialization Outputs from the Waves2 submodule initialization + TYPE(SeaSt_Interp_InitInputType) :: SeaSt_Interp_InitInp +! TYPE(Waves2_InitOutputType) :: Waves2_InitOut ! Initialization Outputs from the Waves2 module initialization + TYPE(Current_InitOutputType) :: Current_InitOut ! Initialization Outputs from the Current module initialization + INTEGER :: I ! Generic counters + INTEGER :: it ! Generic counters + REAL(ReKi) :: TmpElev ! temporary wave elevation + + + ! Wave Stretching Data + REAL(SiKi), ALLOCATABLE :: tmpWaveKinzi(: ) + REAL(SiKi), ALLOCATABLE :: tmpWaveElevxi(: ) + REAL(SiKi), ALLOCATABLE :: tmpWaveElevyi(: ) + REAL(SiKi), ALLOCATABLE :: WaveVel2S0 (:,:,:) + REAL(SiKi), ALLOCATABLE :: WaveAcc2S0 (:,:,:) + REAL(SiKi), ALLOCATABLE :: WaveDynP2S0 (:,: ) + REAL(SiKi), ALLOCATABLE :: WaveVel2D0 (:,:,:) + REAL(SiKi), ALLOCATABLE :: WaveAcc2D0 (:,:,:) + REAL(SiKi), ALLOCATABLE :: WaveDynP2D0 (:,: ) + + INTEGER(IntKi) :: ErrStat2 ! local error status + CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Init' + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + p%UnOutFile = -1 !bjj: this was being written to the screen when I had an error in my HD input file, so I'm going to initialize here. + + u%DummyInput = 0 ! initialize dummy variable to make the compiler warnings go away + z%UnusedStates = 0.0 + x%UnusedStates = 0.0 + xd%UnusedStates = 0.0 + OtherState%UnusedStates = 0.0 + m%SeaSt_Interp_m%FirstWarn_Clamp = .true. + + +#ifdef BETA_BUILD + CALL DispBetaNotice( "This is a beta version of SeaState and is for testing purposes only."//NewLine//"This version includes user waves, WaveMod=6 and the ability to write example user waves." ) +#endif + + ! Initialize the NWTC Subroutine Library + + CALL NWTC_Init( ) + + + ! Display the module information + + CALL DispNVD( SeaSt_ProgDesc ) + + + IF ( InitInp%UseInputFile ) THEN + CALL ProcessComFile( InitInp%InputFile, InFileInfo, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL Cleanup() + RETURN + ENDIF + ELSE + CALL NWTC_Library_CopyFileInfoType( InitInp%PassedFileData, InFileInfo, MESH_NEWCOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL Cleanup() + RETURN + ENDIF + ENDIF + + ! For diagnostic purposes, the following can be used to display the contents + ! of the InFileInfo data structure. + ! call Print_FileInfo_Struct( CU, InFileInfo ) ! CU is the screen -- different number on different systems. + + + ! Parse all SeaState-related input and populate the InputFileData structure + CALL SeaSt_ParseInput( InitInp%InputFile, InitInp%OutRootName, InitInp%defWtrDens, InitInp%defWtrDpth, InitInp%defMSL2SWL, InFileInfo, InputFileData, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + + ! Verify all the necessary initialization data. Do this at the HydroDynInput module-level + ! because the HydroDynInput module is also responsible for parsing all this + ! initialization data from a file + + CALL SeaStateInput_ProcessInitData( InitInp, p, InputFileData, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + p%DT = Interval + + + ! Now call each sub-module's *_Init subroutine + ! to fully initialize each sub-module based on the necessary initialization data + + + ! Initialize Current module + + CALL Current_Init(InputFileData%Current, Current_InitOut, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + + ! Move initialization output data from Current module into the initialization input data for the Waves module + + IF (ALLOCATED(Current_InitOut%CurrVxi)) CALL Move_Alloc( Current_InitOut%CurrVxi, InputFileData%Waves%CurrVxi ) + IF (ALLOCATED(Current_InitOut%CurrVyi)) CALL Move_Alloc( Current_InitOut%CurrVyi, InputFileData%Waves%CurrVyi ) + + InputFileData%Waves%PCurrVxiPz0 = Current_InitOut%PCurrVxiPz0 + InputFileData%Waves%PCurrVyiPz0 = Current_InitOut%PCurrVyiPz0 + + + + ! distribute wave field and turbine location variables as needed to submodule initInputs + InputFileData%Waves%WaveFieldMod = InitInp%WaveFieldMod + InputFileData%Waves%PtfmLocationX = InitInp%PtfmLocationX + InputFileData%Waves%PtfmLocationY = InitInp%PtfmLocationY + + + + ! Initialize Waves module (Note that this may change InputFileData%Waves%WaveDT) + CALL Waves_Init(InputFileData%Waves, Waves_InitOut, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) ! note that we DO NOT RETURN on error until AFTER the pointers modified, below + + ! Copy Waves_InitOut pointer information before calling cleanup (to avoid memory problems): + p%WaveTime => Waves_InitOut%WaveTime + p%WaveElev1 => Waves_InitOut%WaveElev + p%WaveVel => Waves_InitOut%WaveVel + p%WaveAcc => Waves_InitOut%WaveAcc + p%WaveDynP => Waves_InitOut%WaveDynP + p%PWaveVel0 => Waves_InitOut%PWaveVel0 + p%PWaveAcc0 => Waves_InitOut%PWaveAcc0 + p%PWaveDynP0 => Waves_InitOut%PWaveDynP0 + p%WaveAccMCF => Waves_InitOut%WaveAccMCF + p%WaveElevC0 => Waves_InitOut%WaveElevC0 + p%WaveDirArr => Waves_InitOut%WaveDirArr + p%PWaveAccMCF0 => Waves_InitOut%PWaveAccMCF0 + + ! check error (must be done AFTER moving pointers to parameters) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + + + ! Copy Waves initialization output into the initialization input type for the WAMIT module + p%NStepWave = Waves_InitOut%NStepWave + p%WaveDT = InputFileData%Waves%WaveDT + + ! Store user-requested wave elevation locations + p%NWaveElev = InputFileData%NWaveElev + call MOVE_ALLOC(InputFileData%WaveElevxi, p%WaveElevxi) + call MOVE_ALLOC(InputFileData%WaveElevyi, p%WaveElevyi) + + ! Store user-requested wave kinematic locations + p%NWaveKin = InputFileData%NWaveKin + call MOVE_ALLOC(InputFileData%WaveKinxi, p%WaveKinxi) + call MOVE_ALLOC(InputFileData%WaveKinyi, p%WaveKinyi) + call MOVE_ALLOC(InputFileData%WaveKinzi, p%WaveKinzi) + + + + ! add some warnings about requesting WriteOutput outside the SeaState domain: + do i=1,p%NWaveKin + if (abs(p%WaveKinxi(i)) > p%X_HalfWidth) then + CALL SetErrStat(ErrID_Warn,'Requested WaveKinxi is outside the SeaState spatial domain.', ErrStat, ErrMsg, RoutineName) + exit + end if + if (abs(p%WaveKinyi(i)) > p%Y_HalfWidth) then + CALL SetErrStat(ErrID_Warn,'Requested WaveKinyi is outside the SeaState spatial domain.', ErrStat, ErrMsg, RoutineName) + exit + end if + !if (p%WaveKinzi(i) < 0.0_ReKi .or. p%WaveKinzi(i) > p%Z_Depth) then + ! CALL SetErrStat(ErrID_Warn,'Requested WaveKinzi is outside the SeaState spatial domain.', ErrStat, ErrMsg, RoutineName) + ! exit + !end if + end do + + m%LastIndWave = 1 + + + IF ( InputFileData%Waves%WaveMod /= 6 ) THEN + + !---------------------------------- + ! Initialize Waves2 module + !---------------------------------- + + + IF (InputFileData%Waves2%WvDiffQTFF .OR. InputFileData%Waves2%WvSumQTFF ) THEN + ! Set a few things from the Waves module output + InputFileData%Waves2%NStepWave = Waves_InitOut%NStepWave + InputFileData%Waves2%NStepWave2 = Waves_InitOut%NStepWave2 + InputFileData%Waves2%WaveDOmega = Waves_InitOut%WaveDOmega + + ! Copy the WaveElevXY data in from the SeaState InputFileData + ! IF (ALLOCATED(tmpWaveElevXY)) CALL MOVE_ALLOC(tmpWaveElevXY, InputFileData%Waves2%WaveElevXY) + + ! assign pointer arrays to init input for Waves2 (save some space) + + InputFileData%Waves2%WaveTime => p%WaveTime + InputFileData%Waves2%WaveElevC0 => Waves_InitOut%WaveElevC0 + InputFileData%Waves2%WaveDirArr => Waves_InitOut%WaveDirArr + + CALL Waves2_Init(InputFileData%Waves2, p%Waves2, Waves2_InitOut, ErrStat2, ErrMsg2 ) + p%WaveElev2 => Waves2_InitOut%WaveElev2 ! do this before calling cleanup() so that pointers get deallocated properly + + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + + ! If we calculated wave elevations, it is now stored in p%WaveElev. So we need to add the corrections. + IF (InputFileData%Waves2%NWaveElevGrid > 0 ) THEN + ! Make sure the sizes of the two resulting arrays are identical... + IF ( SIZE(p%WaveElev1,DIM=1) /= SIZE(p%WaveElev2,DIM=1) .OR. & + SIZE(p%WaveElev1,DIM=2) /= SIZE(p%WaveElev2,DIM=2)) THEN + CALL SetErrStat(ErrID_Fatal,' WaveElev(NWaveElev) arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + InitOut%WaveElev2 => p%WaveElev2 + ENDIF + ENDIF + + ! The acceleration, velocity, and dynamic pressures will get added to the parts passed to the morrison module later... + ! Difference frequency results + IF ( p%Waves2%WvDiffQTFF ) THEN + + ! Dynamic pressure -- difference frequency terms + IF ( SIZE(p%WaveDynP,DIM=1) /= SIZE(Waves2_InitOut%WaveDynP2D,DIM=1) .OR. & + SIZE(p%WaveDynP,DIM=2) /= SIZE(Waves2_InitOut%WaveDynP2D,DIM=2).OR. & + SIZE(p%WaveDynP,DIM=3) /= SIZE(Waves2_InitOut%WaveDynP2D,DIM=3).OR. & + SIZE(p%WaveDynP,DIM=4) /= SIZE(Waves2_InitOut%WaveDynP2D,DIM=4)) THEN + CALL SetErrStat(ErrID_Fatal, & + ' WaveDynP arrays for first and second order wave elevations are of different sizes. '//NewLine// & + 'Waves: '// TRIM(Num2LStr(SIZE(p%WaveDynP,DIM=1)))//'x'// & + TRIM(Num2LStr(SIZE(p%WaveDynP,DIM=2)))//'x'// & + TRIM(Num2LStr(SIZE(p%WaveDynP,DIM=3)))//'x'// & + TRIM(Num2LStr(SIZE(p%WaveDynP,DIM=4)))//NewLine// & + 'Waves2: '// TRIM(Num2LStr(SIZE(Waves2_InitOut%WaveDynP2D,DIM=1)))//'x'// & + TRIM(Num2LStr(SIZE(Waves2_InitOut%WaveDynP2D,DIM=2)))//'x'// & + TRIM(Num2LStr(SIZE(Waves2_InitOut%WaveDynP2D,DIM=3)))//'x'// & + TRIM(Num2LStr(SIZE(Waves2_InitOut%WaveDynP2D,DIM=4))), & + ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + p%WaveDynP = p%WaveDynP + Waves2_InitOut%WaveDynP2D + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveDynP0 = WaveDynP0 + WaveDynP2D0 + ENDIF + + ! Particle velocity -- difference frequency terms + IF ( SIZE(p%WaveVel,DIM=1) /= SIZE(Waves2_InitOut%WaveVel2D,DIM=1) .OR. & + SIZE(p%WaveVel,DIM=2) /= SIZE(Waves2_InitOut%WaveVel2D,DIM=2) .OR. & + SIZE(p%WaveVel,DIM=3) /= SIZE(Waves2_InitOut%WaveVel2D,DIM=3) .OR. & + SIZE(p%WaveVel,DIM=4) /= SIZE(Waves2_InitOut%WaveVel2D,DIM=4) .OR. & + SIZE(p%WaveVel,DIM=5) /= SIZE(Waves2_InitOut%WaveVel2D,DIM=5)) THEN + CALL SetErrStat(ErrID_Fatal, & + ' WaveVel arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + p%WaveVel = p%WaveVel + Waves2_InitOut%WaveVel2D + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveVel0 = WaveVel0 + WaveVel2D0 + ENDIF + + + ! Particle acceleration -- difference frequency terms + IF ( SIZE(p%WaveAcc,DIM=1) /= SIZE(Waves2_InitOut%WaveAcc2D,DIM=1) .OR. & + SIZE(p%WaveAcc,DIM=2) /= SIZE(Waves2_InitOut%WaveAcc2D,DIM=2) .OR. & + SIZE(p%WaveAcc,DIM=3) /= SIZE(Waves2_InitOut%WaveAcc2D,DIM=3) .OR. & + SIZE(p%WaveAcc,DIM=4) /= SIZE(Waves2_InitOut%WaveAcc2D,DIM=4) .OR. & + SIZE(p%WaveAcc,DIM=5) /= SIZE(Waves2_InitOut%WaveAcc2D,DIM=5)) THEN + CALL SetErrStat(ErrID_Fatal, & + ' WaveAcc arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + p%WaveAcc = p%WaveAcc + Waves2_InitOut%WaveAcc2D + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2D0 + ! MacCamy-Fuchs scaled acceleration should not contain second-order contributions + !IF (InputFileData%Waves%MCFD > 0) THEN + ! p%WaveAccMCF = p%WaveAccMCF + Waves2_InitOut%WaveAcc2D + !END IF + + ENDIF + + ENDIF ! second order wave kinematics difference frequency results + + ! Sum frequency results + IF ( p%Waves2%WvSumQTFF ) THEN + + ! Dynamic pressure -- sum frequency terms + IF ( SIZE(p%WaveDynP,DIM=1) /= SIZE(Waves2_InitOut%WaveDynP2S,DIM=1) .OR. & + SIZE(p%WaveDynP,DIM=2) /= SIZE(Waves2_InitOut%WaveDynP2S,DIM=2) .OR. & + SIZE(p%WaveDynP,DIM=3) /= SIZE(Waves2_InitOut%WaveDynP2S,DIM=3) .OR. & + SIZE(p%WaveDynP,DIM=4) /= SIZE(Waves2_InitOut%WaveDynP2S,DIM=4)) THEN + CALL SetErrStat(ErrID_Fatal, & + ' WaveDynP arrays for first and second order wave elevations are of different sizes. '//NewLine// & + 'Waves: '// TRIM(Num2LStr(SIZE(p%WaveDynP,DIM=1)))//'x'// & + TRIM(Num2LStr(SIZE(p%WaveDynP,DIM=2)))//'x'// & + TRIM(Num2LStr(SIZE(p%WaveDynP,DIM=3)))//'x'// & + TRIM(Num2LStr(SIZE(p%WaveDynP,DIM=4)))//NewLine// & + 'Waves2: '// TRIM(Num2LStr(SIZE(Waves2_InitOut%WaveDynP2D,DIM=1)))//'x'// & + TRIM(Num2LStr(SIZE(Waves2_InitOut%WaveDynP2D,DIM=2)))//'x'// & + TRIM(Num2LStr(SIZE(Waves2_InitOut%WaveDynP2D,DIM=3)))//'x'// & + TRIM(Num2LStr(SIZE(Waves2_InitOut%WaveDynP2D,DIM=4))), & + ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + p%WaveDynP = p%WaveDynP + Waves2_InitOut%WaveDynP2S + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveDynP0 = WaveDynP0 + WaveDynP2S0 + ENDIF + + ! Particle velocity -- sum frequency terms + IF ( SIZE(p%WaveVel,DIM=1) /= SIZE(Waves2_InitOut%WaveVel2S,DIM=1) .OR. & + SIZE(p%WaveVel,DIM=2) /= SIZE(Waves2_InitOut%WaveVel2S,DIM=2) .OR. & + SIZE(p%WaveVel,DIM=3) /= SIZE(Waves2_InitOut%WaveVel2S,DIM=3) .OR. & + SIZE(p%WaveVel,DIM=4) /= SIZE(Waves2_InitOut%WaveVel2S,DIM=4) .OR. & + SIZE(p%WaveVel,DIM=5) /= SIZE(Waves2_InitOut%WaveVel2S,DIM=5)) THEN + CALL SetErrStat(ErrID_Fatal, & + ' WaveVel arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + p%WaveVel = p%WaveVel + Waves2_InitOut%WaveVel2S + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveVel0 = WaveVel0 + WaveVel2S0 + ENDIF + + ! Particle velocity -- sum frequency terms + IF ( SIZE(p%WaveAcc,DIM=1) /= SIZE(Waves2_InitOut%WaveAcc2S,DIM=1) .OR. & + SIZE(p%WaveAcc,DIM=2) /= SIZE(Waves2_InitOut%WaveAcc2S,DIM=2) .OR. & + SIZE(p%WaveAcc,DIM=3) /= SIZE(Waves2_InitOut%WaveAcc2S,DIM=3) .OR. & + SIZE(p%WaveAcc,DIM=4) /= SIZE(Waves2_InitOut%WaveAcc2S,DIM=4) .OR. & + SIZE(p%WaveAcc,DIM=5) /= SIZE(Waves2_InitOut%WaveAcc2S,DIM=5)) THEN + CALL SetErrStat(ErrID_Fatal, & + ' WaveAcc arrays for first and second order wave elevations are of different sizes.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + p%WaveAcc = p%WaveAcc + Waves2_InitOut%WaveAcc2S + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2S0 + ! MacCamy-Fuchs scaled accleration should not contain second-order contributions + !IF (InputFileData%Waves%MCFD > 0) THEN + ! p%WaveAccMCF = p%WaveAccMCF + Waves2_InitOut%WaveAcc2S + !END IF + ENDIF + + ENDIF ! second order wave kinematics sum frequency results + ELSE + ! these need to be set to zero since we don't have a UseWaves2 flag: + InputFileData%Waves2%NWaveElevGrid = 0 + p%Waves2%WvDiffQTFF = .FALSE. + p%Waves2%WvSumQTFF = .FALSE. + + + ENDIF ! InputFileData%Waves2%WvDiffQTFF .OR. InputFileData%Waves2%WvSumQTFF + + + END IF ! Check for WaveMod = 6 + + + + ! Create the Output file if requested + p%OutSwtch = InputFileData%OutSwtch + p%Delim = '' + p%OutFmt = InputFileData%OutFmt + p%OutSFmt = InputFileData%OutSFmt + p%NumOuts = InputFileData%NumOuts + + ! Define initialization-routine output here: + InitOut%Ver = SeaSt_ProgDesc + ! These three come directly from processing the inputs, and so will exist even if not using Morison elements: + InitOut%WtrDens = InputFileData%Waves%WtrDens + InitOut%WtrDpth = InputFileData%Waves%WtrDpth + p%WaveStMod = InputFileData%Waves%WaveStMod + InitOut%MSL2SWL = InputFileData%MSL2SWL + p%WtrDpth = InitOut%WtrDpth + + InitOut%WaveMultiDir = InputFileData%Waves%WaveMultiDir + InitOut%MCFD = InputFileData%Waves%MCFD + + CALL SeaStOut_Init( SeaSt_ProgDesc, InitInp%OutRootName, InputFileData, y, p, m, InitOut, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + +!=============================================== + + CALL SeaStOut_WrSummaryFile(InitInp, InputFileData, p, Waves_InitOut, ErrStat2, ErrMsg2) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + + + ! Setup the 4D grid information for the Interpolatin Module + SeaSt_Interp_InitInp%n = (/p%NStepWave,p%nGrid(1),p%nGrid(2),p%nGrid(3)/) + SeaSt_Interp_InitInp%delta = (/real(p%WaveDT,ReKi),p%deltaGrid(1),p%deltaGrid(2),p%deltaGrid(3)/) + SeaSt_Interp_InitInp%pZero(1) = 0.0 !Time + SeaSt_Interp_InitInp%pZero(2) = -InputFileData%X_HalfWidth + SeaSt_Interp_InitInp%pZero(3) = -InputFileData%Y_HalfWidth + SeaSt_Interp_InitInp%pZero(4) = -InputFileData%Z_Depth ! zi + SeaSt_Interp_InitInp%Z_Depth = InputFileData%Z_Depth + call SeaSt_Interp_Init(SeaSt_Interp_InitInp, p%seast_interp_p, ErrStat2, ErrMsg2) + + IF ( p%OutSwtch == 1 ) THEN ! Only HD-level output writing + ! HACK WE can tell FAST not to write any HD outputs by simply deallocating the WriteOutputHdr array! + DEALLOCATE ( InitOut%WriteOutputHdr ) + END IF + + ! Copy Waves InitOut data to SeaState InitOut + ! ... pointer data: + InitOut%WaveElev1 => p%WaveElev1 + InitOut%WaveDynP => p%WaveDynP ! For Morison + InitOut%WaveAcc => p%WaveAcc ! For Morison + InitOut%WaveVel => p%WaveVel ! For Morison + InitOut%PWaveDynP0 => p%PWaveDynP0 ! For Morison + InitOut%PWaveAcc0 => p%PWaveAcc0 ! For Morison + InitOut%PWaveVel0 => p%PWaveVel0 ! For Morison + InitOut%WaveAccMCF => p%WaveAccMCF ! For Morison (MacCamy-Fuchs) + InitOut%WaveTime => p%WaveTime ! For Morison, and WAMIT for use in SS_Excitation + InitOut%WaveElevC0 => p%WaveElevC0 ! For WAMIT and WAMIT2, FIT + InitOut%WaveDirArr => p%WaveDirArr ! For WAMIT and WAMIT2 + InitOut%PWaveAccMCF0 => p%PWaveAccMCF0 ! For Morison (MacCamy-Fuchs) + + ! non-pointer data: + CALL MOVE_ALLOC( Waves_InitOut%WaveElevC, InitOut%WaveElevC ) ! For WAMIT + InitOut%WaveDirMin = Waves_InitOut%WaveDirMin ! For WAMIT and WAMIT2 + InitOut%WaveDirMax = Waves_InitOut%WaveDirMax ! For WAMIT and WAMIT2 + InitOut%WaveDOmega = Waves_InitOut%WaveDOmega ! For WAMIT and WAMIT2, FIT + + + call MOVE_ALLOC(Waves_InitOut%WaveElev0, InitOut%WaveElev0 ) + InitOut%RhoXg = Waves_InitOut%RhoXg ! For WAMIT and WAMIT2 + InitOut%NStepWave = Waves_InitOut%NStepWave ! For WAMIT, WAMIT2, SS_Excitation, Morison + InitOut%NStepWave2 = Waves_InitOut%NStepWave2 ! For WAMIT and WAMIT2, FIT + + InitOut%WaveMod = InputFileData%Waves%WaveMod + InitOut%WaveStMod = InputFileData%Waves%WaveStMod + InitOut%WvLowCOff = InputFileData%Waves%WvLowCOff + InitOut%WvHiCOff = InputFileData%Waves%WvHiCOff + InitOut%WvLowCOffD = InputFileData%Waves2%WvLowCOffD + InitOut%WvHiCOffD = InputFileData%Waves2%WvHiCOffD + InitOut%WvLowCOffS = InputFileData%Waves2%WvLowCOffS + InitOut%WvHiCOffS = InputFileData%Waves2%WvHiCOffS + InitOut%WaveDirMod = InputFileData%Waves%WaveDirMod + InitOut%WaveDir = InputFileData%Waves%WaveDir ! For WAMIT for use in SS_Excitation + InitOut%WtrDens = InputFileData%Waves%WtrDens + InitOut%WtrDpth = InputFileData%Waves%WtrDpth + InitOut%MSL2SWL = InputFileData%MSL2SWL + + InitOut%SeaSt_Interp_p = p%seast_interp_p + + ! Tell HydroDyn if state-space wave excitation is not allowed: + InitOut%InvalidWithSSExctn = InputFileData%Waves%WaveMod == 6 .or. & !call SetErrStat( ErrID_Fatal, 'Externally generated full wave-kinematics time series cannot be used with state-space wave excitations. Set WaveMod 0, 1, 1P#, 2, 3, 4, or 5.', ErrStat, ErrMsg, RoutineName ) + InputFileData%Waves%WaveDirMod /= 0 .or. & !call SetErrStat( ErrID_Fatal, 'Directional spreading cannot be used with state-space wave excitations. Set WaveDirMod=0.', ErrStat, ErrMsg, RoutineName ) + InputFileData%Waves2%WvDiffQTFF .or. & !call SetErrStat( ErrID_Fatal, 'Cannot use full difference-frequency 2nd-order wave kinematics with state-space wave excitations. Set WvDiffQTF=FALSE.', ErrStat, ErrMsg, RoutineName ) + InputFileData%Waves2%WvSumQTFF !call SetErrStat( ErrID_Fatal, 'Cannot use full summation-frequency 2nd-order wave kinematics with state-space wave excitations. Set WvSumQTF=FALSE.', ErrStat, ErrMsg, RoutineName ) + + ! Write Wave Kinematics? + if ( InputFileData%Waves%WaveMod /= 6 ) then + if ( InitInp%WrWvKinMod == 2 ) then + call SeaStOut_WriteWvKinFiles( InitInp%OutRootname, SeaSt_ProgDesc, p%NStepWave, p%WaveDT, p%X_HalfWidth, p%Y_HalfWidth, & + p%Z_Depth, p%deltaGrid, p%NGrid, InitOut%WaveElev1, InitOut%WaveElev2, & + InitOut%WaveVel, InitOut%WaveAcc, InitOut%WaveDynP, ErrStat, ErrMsg ) + else if ( InitInp%WrWvKinMod == 1 ) then + call SeaStOut_WriteWaveElev0(InitInp%OutRootname, p%NStepWave, & + p%NGrid, InitOut%WaveElev1, InitOut%WaveElev2, & + InitOut%WaveTime, ErrStat, ErrMsg ) + end if + + end if + + + ! If requested, output wave elevation data for VTK visualization + + IF (ALLOCATED(InitInp%WaveElevXY)) THEN + ! maybe instead of getting these requested points, we just output the grid that SeaState is generated on? + ALLOCATE(InitOut%WaveElevSeries( 0:InitOut%NStepWave, 1:SIZE(InitInp%WaveElevXY, DIM=2)),STAT=ErrStat2) + if (ErrStat2 /= 0) then + CALL SetErrStat(ErrID_Fatal,"Error allocating InitOut%WaveElevSeries.",ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + end if + + do it = 1,size(p%WaveTime) + do i = 1, size(InitOut%WaveElevSeries,DIM=2) + InitOut%WaveElevSeries(it,i) = SeaSt_Interp_3D( real(p%WaveTime(it),DbKi), real(InitInp%WaveElevXY(:,i),ReKi), p%WaveElev1, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + end do + end do + + if (associated(p%WaveElev2)) then + do it = 1,size(p%WaveTime) + do i = 1, size(InitOut%WaveElevSeries,DIM=2) + TmpElev = SeaSt_Interp_3D( real(p%WaveTime(it),DbKi), real(InitInp%WaveElevXY(:,i),ReKi), p%WaveElev2, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + InitOut%WaveElevSeries(it,i) = InitOut%WaveElevSeries(it,i) + TmpElev + end do + end do + end if + + + ENDIF + + + IF ( InitInp%hasIce ) THEN + IF ((InputFileData%Waves%WaveMod /= 0) .OR. (InputFileData%Current%CurrMod /= 0) ) THEN + CALL SetErrStat(ErrID_Fatal,'Waves and Current must be turned off in SeaState when ice loading is computed. Set WaveMod=0 and CurrMod=0.',ErrStat,ErrMsg,RoutineName) + END IF + END IF + + if (InitInp%Linearize) then + + if ( InputFileData%Waves%WaveMod /= 0 ) then + call SetErrStat( ErrID_Fatal, 'Still water conditions must be used for linearization. Set WaveMod=0.', ErrStat, ErrMsg, RoutineName ) + end if + + if ( InputFileData%Waves%WaveDirMod /= 0 ) then + call SetErrStat( ErrID_Fatal, 'No directional spreading must be used for linearization. Set WaveDirMod=0.', ErrStat, ErrMsg, RoutineName ) + end if + + if ( InputFileData%Waves2%WvDiffQTFF ) then + call SetErrStat( ErrID_Fatal, 'Cannot use full difference-frequency 2nd-order wave kinematics for linearization. Set WvDiffQTF=FALSE.', ErrStat, ErrMsg, RoutineName ) + end if + + if ( InputFileData%Waves2%WvSumQTFF ) then + call SetErrStat( ErrID_Fatal, 'Cannot use full summation-frequency 2nd-order wave kinematics for linearization. Set WvSumQTF=FALSE.', ErrStat, ErrMsg, RoutineName ) + end if + + + end if + + + ! Destroy the local initialization data + CALL CleanUp() + +CONTAINS +!................................ + SUBROUTINE CleanUp() + + CALL SeaSt_DestroyInputFile( InputFileData, ErrStat2, ErrMsg2, DEALLOCATEpointers = .FALSE. );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + CALL NWTC_Library_DestroyFileInfoType(InFileInfo,ErrStat2, ErrMsg2, DEALLOCATEpointers = .FALSE. );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + ! Note: all pointers possibly allocated in Waves_init and Waves2_init are transferred to SeaSt parameters before deallocating them: + CALL Waves_DestroyInitOutput( Waves_InitOut, ErrStat2, ErrMsg2, DEALLOCATEpointers = .FALSE. ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + CALL Waves2_DestroyInitOutput( Waves2_InitOut, ErrStat2, ErrMsg2, DEALLOCATEpointers = .FALSE. ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + CALL Current_DestroyInitOutput( Current_InitOut, ErrStat2, ErrMsg2);CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + + if (allocated(tmpWaveKinzi )) deallocate(tmpWaveKinzi ) + if (allocated(tmpWaveElevxi)) deallocate(tmpWaveElevxi) + if (allocated(tmpWaveElevyi)) deallocate(tmpWaveElevyi) + ! if (allocated(WaveElevSt )) deallocate(WaveElevSt ) + ! if (allocated(WaveVel0 )) deallocate(WaveVel0 ) + ! if (allocated(WaveAcc0 )) deallocate(WaveAcc0 ) + ! if (allocated(WaveDynP0 )) deallocate(WaveDynP0 ) + if (allocated(WaveVel2S0 )) deallocate(WaveVel2S0 ) + if (allocated(WaveAcc2S0 )) deallocate(WaveAcc2S0 ) + if (allocated(WaveDynP2S0 )) deallocate(WaveDynP2S0 ) + if (allocated(WaveVel2D0 )) deallocate(WaveVel2D0 ) + if (allocated(WaveAcc2D0 )) deallocate(WaveAcc2D0 ) + if (allocated(WaveDynP2D0 )) deallocate(WaveDynP2D0 ) + + END SUBROUTINE CleanUp +!................................ +END SUBROUTINE SeaSt_Init + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine is called at the end of the simulation. +SUBROUTINE SeaSt_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) + + TYPE(SeaSt_InputType), INTENT(INOUT) :: u !< System inputs + TYPE(SeaSt_ParameterType), INTENT(INOUT) :: p !< Parameters + TYPE(SeaSt_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states + TYPE(SeaSt_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states + TYPE(SeaSt_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states + TYPE(SeaSt_OtherStateType), INTENT(INOUT) :: OtherState !< Other/optimization states + TYPE(SeaSt_OutputType), INTENT(INOUT) :: y !< System outputs + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + + ! Place any last minute operations or calculations here: + + + + ! Write the SeaState-level output file data FROM THE LAST COMPLETED TIME STEP if the user requested module-level output + ! and the current time has advanced since the last stored time step. + + IF ( p%OutSwtch == 1 .OR. p%OutSwtch == 3) THEN !Note: this will always output a line, even if we're ending early (e.g. if HD doesn't initialize properly, this will write a line of zeros to the output file.) + CALL SeaStOut_WriteOutputs( m%LastOutTime, y, p, m%Decimate, ErrStat, ErrMsg ) + END IF + + ! Close files here: + CALL SeaStOut_CloseOutput( p, ErrStat, ErrMsg ) + + + ! Destroy the input data: + + CALL SeaSt_DestroyInput( u, ErrStat, ErrMsg ) + + + ! Destroy the parameter data: + + CALL SeaSt_DestroyParam( p, ErrStat, ErrMsg ) + + + ! Destroy the state data: + + CALL SeaSt_DestroyContState( x, ErrStat, ErrMsg ) + CALL SeaSt_DestroyDiscState( xd, ErrStat, ErrMsg ) + CALL SeaSt_DestroyConstrState( z, ErrStat, ErrMsg ) + CALL SeaSt_DestroyOtherState( OtherState, ErrStat, ErrMsg ) + + ! Destroy misc variables: + + CALL SeaSt_DestroyMisc( m, ErrStat, ErrMsg ) + + ! Destroy the output data: + + CALL SeaSt_DestroyOutput( y, ErrStat, ErrMsg ) + + +END SUBROUTINE SeaSt_End + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> Loose coupling routine for solving constraint states, integrating continuous states, and updating discrete states. +!! Continuous, constraint, and discrete states are updated to values at t + Interval. +SUBROUTINE SeaSt_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) + + REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds + INTEGER(IntKi), INTENT(IN ) :: n !< Current step of the simulation: t = n*Interval + TYPE(SeaSt_InputType), INTENT(INOUT ) :: Inputs(:) !< Inputs at InputTimes + REAL(DbKi), INTENT(IN ) :: InputTimes(:) !< Times in seconds associated with Inputs + TYPE(SeaSt_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaSt_ContinuousStateType), INTENT(INOUT) :: x !< Input: Continuous states at t; + !! Output: Continuous states at t + Interval + TYPE(SeaSt_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at t; + !! Output: Discrete states at t + Interval + TYPE(SeaSt_ConstraintStateType), INTENT(INOUT) :: z !< Input: Constraint states at t; + !! Output: Constraint states at t + Interval + TYPE(SeaSt_OtherStateType), INTENT(INOUT) :: OtherState !< Other states: Other states at t; + !! Output: Other states at t + Interval + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + ! Initialize variables + + ErrStat = ErrID_None ! no error has occurred + ErrMsg = "" + + + + +END SUBROUTINE SeaSt_UpdateStates + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> Routine for computing outputs, used in both loose and tight coupling. +SUBROUTINE SeaSt_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) + + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + TYPE(SeaSt_InputType), INTENT(INOUT) :: u !< Inputs at Time (note that this is intent out because we're copying the u%WAMITMesh into m%u_wamit%mesh) + TYPE(SeaSt_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaSt_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(SeaSt_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(SeaSt_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time + TYPE(SeaSt_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time + TYPE(SeaSt_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh con- + !! nectivity information does not have to be recalculated) + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + INTEGER(IntKi), INTENT( OUT) :: ErrStat !! Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !! Error message if ErrStat /= ErrID_None + + INTEGER :: I ! Generic counters + + INTEGER(IntKi) :: ErrStat2 ! Error status of the operation (secondary error) + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat2 /= ErrID_None + character(*), parameter :: RoutineName = 'SeaSt_CalcOutput' + + + REAL(SiKi) :: WaveElev (p%NWaveElev) ! Instantaneous total elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi) :: WaveElev1(p%NWaveElev) ! Instantaneous first order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi) :: WaveElev2(p%NWaveElev) ! Instantaneous first order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi) :: WaveVel(3,p%NWaveKin) + REAL(SiKi) :: WaveAcc(3,p%NWaveKin) + REAL(SiKi) :: WaveAccMCF(3,p%NWaveKin) + REAL(SiKi) :: WaveDynP(p%NWaveKin) + REAL(ReKi) :: AllOuts(MaxOutPts) + real(ReKi) :: positionXYZ(3), positionXY(2) + + REAL(ReKi) :: zeta + REAL(ReKi) :: zeta1 + REAL(ReKi) :: zeta2 + REAL(SiKi) :: zp + REAL(ReKi) :: positionXYZp(3) + REAL(ReKi) :: positionXY0(3) + + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + WaveElev = 0.0_ReKi + WaveElev1 = 0.0_ReKi + WaveElev2 = 0.0_ReKi ! In case we don't use 2nd order waves + WaveAccMCF = 0.0_ReKi ! In case we don't use MCF approximation + ErrStat2 = ErrID_None + ErrMsg = "" + + ! Compute outputs here: + + ! These Outputs are only used for generated user-requested output channel results. + ! If the user did not request any outputs, then we can simply return + if ( p%NumOuts > 0 ) then + + ! Write the SeaState-level output file data FROM THE LAST COMPLETED TIME STEP if the user requested module-level output + ! and the current time has advanced since the last stored time step. Note that this must be done before filling y%WriteOutput + ! so that we don't get recent results. Also note that this may give strange results in the .SeaSt.out files of linearization simulations + ! because it assumes that the last call to SeaSt_CalcOutput was for a "normal" time step. + + IF ( (p%OutSwtch == 1 .OR. p%OutSwtch == 3) .AND. ( Time > m%LastOutTime ) ) THEN + CALL SeaStOut_WriteOutputs( m%LastOutTime, y, p, m%Decimate, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + m%LastOutTime = Time ! time associated with next WriteOutput calculations + + + !------------------------------------------------------------------- + ! Additional stiffness, damping forces. These need to be placed on a point mesh which is located at the WAMIT reference point (WRP). + ! This mesh will need to get mapped by the glue code for use by either ElastoDyn or SubDyn. + !------------------------------------------------------------------- + + DO i = 1, p%NWaveKin + positionXYZ = (/p%WaveKinxi(i),p%WaveKinyi(i),p%WaveKinzi(i)/) + IF (p%WaveStMod > 0) THEN ! Wave stretching enabled + positionXY = (/p%WaveKinxi(i),p%WaveKinyi(i)/) + zeta1 = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (associated(p%WaveElev2)) THEN + zeta2 = SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + zeta = zeta1 + zeta2 + ELSE + zeta = zeta1 + END IF + + IF (p%WaveKinzi(i) <= zeta) THEN ! Probe in water + IF (p%WaveStMod < 3) THEN ! Vertical or extrapolation stretching + IF (p%WaveKinzi(i)<=0.0) THEN ! Probe is below SWL + ! Evaluate wave kinematics as usual + CALL SeaSt_Interp_Setup( Time, positionXYZ, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (associated(p%WaveAccMCF)) THEN + WaveAccMCF(:,i) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ELSE ! Probe is above SWL + ! Get wave kinematics at the SWL first + positionXY0 = (/p%WaveKinxi(i),p%WaveKinyi(i),-0.00001_SiKi/) + CALL SeaSt_Interp_Setup( Time, positionXY0, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (associated(p%WaveAccMCF)) THEN + WaveAccMCF(:,i) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (p%WaveStMod == 2) THEN ! extrapolation stretching + ! Extrapolate + WaveVel(:,i) = WaveVel(:,i) + SeaSt_Interp_3D_Vec( Time, positionXY, p%PWaveVel0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * p%WaveKinzi(i) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveAcc(:,i) = WaveAcc(:,i) + SeaSt_Interp_3D_Vec( Time, positionXY, p%PWaveAcc0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * p%WaveKinzi(i) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (associated(p%WaveAccMCF)) THEN + WaveAccMCF(:,i) = WaveAcc(:,i) + SeaSt_Interp_3D_Vec( Time, positionXY, p%PWaveAccMCF0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * p%WaveKinzi(i) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + WaveDynP(i) = WaveDynP(i) + SeaSt_Interp_3D ( Time, positionXY, p%PWaveDynP0, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) * p%WaveKinzi(i) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + END IF + ELSE IF (p%WaveStMod == 3) THEN ! Wheeler stretching + ! Evaluate wave kinematics based on the re-mapped z-position + zp = p%WtrDpth * ( p%WtrDpth + p%WaveKinzi(i) )/( p%WtrDpth + zeta ) - p%WtrDpth + positionXYZp = (/p%WaveKinxi(i),p%WaveKinyi(i),zp/) + CALL SeaSt_Interp_Setup( Time, positionXYZp, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (associated(p%WaveAccMCF)) THEN + WaveAccMCF(:,i) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + ELSE ! Probe out of water + ! Zero everthing + WaveVel(:,i) = (/0.0,0.0,0.0/) + WaveAcc(:,i) = (/0.0,0.0,0.0/) + WaveDynP(i) = 0.0 + END IF + ELSE ! No wave stretching + IF (p%WaveKinzi(i)<=0) THEN ! Probe at or below SWL + IF (EqualRealNos(p%WaveKinzi(i),0.0_SiKi)) THEN + positionXYZ(3) = -0.000001_SiKi + END IF + ! Evaluate wave kinematics as usual + CALL SeaSt_Interp_Setup( Time, positionXYZ, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + IF (associated(p%WaveAccMCF)) THEN + WaveAccMCF(:,i) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + END IF + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ELSE ! Probe above SWL + ! Zero everthing + WaveVel(:,i) = (/0.0,0.0,0.0/) + WaveAcc(:,i) = (/0.0,0.0,0.0/) + WaveDynP(i) = 0.0 + END IF + END IF + END DO + + ! Compute the wave elevations at the requested output locations for this time. Note that p%WaveElev has the second order added to it already. + + do i = 1, p%NWaveElev + positionXY = (/p%WaveElevxi(i),p%WaveElevyi(i)/) + + WaveElev1(i) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + if (associated(p%WaveElev2)) then + WaveElev2(i) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, m%seast_interp_m%FirstWarn_Clamp, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + WaveElev(i) = WaveElev1(i) + WaveElev2(i) + else + WaveElev(i) = WaveElev1(i) + end if + + end do + + + ! Map calculated results into the AllOuts Array + CALL SeaStOut_MapOutputs( p, WaveElev, WaveElev1, WaveElev2, WaveVel, WaveAcc, WaveAccMCF, WaveDynP, AllOuts, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + DO I = 1,p%NumOuts + y%WriteOutput(I) = p%OutParam(I)%SignM * AllOuts( p%OutParam(I)%Indx ) + END DO + + end if + +END SUBROUTINE SeaSt_CalcOutput + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> Tight coupling routine for computing derivatives of continuous states +SUBROUTINE SeaSt_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, ErrStat, ErrMsg ) + + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + TYPE(SeaSt_InputType), INTENT(INOUT) :: u !< Inputs at Time (intent OUT only because we're copying the input mesh) + TYPE(SeaSt_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaSt_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(SeaSt_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(SeaSt_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time + TYPE(SeaSt_OtherStateType), INTENT(IN ) :: OtherState !< Other states + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(SeaSt_ContinuousStateType), INTENT(INOUT) :: dxdt !< Continuous state derivatives at Time + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CalcContStateDeriv' + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + + +END SUBROUTINE SeaSt_CalcContStateDeriv + + + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> Tight coupling routine for solving for the residual of the constraint state equations +SUBROUTINE SeaSt_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m, z_residual, ErrStat, ErrMsg ) + + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + TYPE(SeaSt_InputType), INTENT(INOUT) :: u !< Inputs at Time (intent OUT only because we're copying the input mesh) + TYPE(SeaSt_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaSt_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(SeaSt_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(SeaSt_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time (possibly a guess) + TYPE(SeaSt_OtherStateType), INTENT(IN ) :: OtherState !< Other/optimization states + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(SeaSt_ConstraintStateType), INTENT( OUT) :: z_residual !< Residual of the constraint state equations using + !! the input values described above + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + ! Nothing to do here since none of the sub-modules have contraint states + z_residual = z + + ! Solve for the constraint states here: + + +END SUBROUTINE SeaSt_CalcConstrStateResidual + + + + + +!---------------------------------------------------------------------------------------------------------------------------------- +END MODULE SeaState +!********************************************************************************************************************************** diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt new file mode 100644 index 0000000000..de2576d62a --- /dev/null +++ b/modules/seastate/src/SeaState.txt @@ -0,0 +1,200 @@ +################################################################################################################################### +################################################################################################################################### +# Registry for SeaState in the FAST Modularization Framework +# This Registry file is used to create MODULE SeaState which contains all of the user-defined types needed in SeaState. +# It also contains copy, destroy, pack, and unpack routines associated with each defined data types. +# See NWTC Programmer's Handbook for further information on the format/contents of this file. +# +# Entries are of the form +# +# +# Use ^ as a shortcut for the value in the same column from the previous line. +################################################################################################################################### +# +# ...... Include files (definitions from NWTC Library) ............................................................................ +# make sure that the file name does not have any trailing white spaces! +include Registry_NWTC_Library.txt +usefrom Current.txt +usefrom Waves.txt +usefrom Waves2.txt +usefrom SeaState_Interp.txt +# +# +typedef SeaState/SeaSt SeaSt_InputFile LOGICAL EchoFlag - - - "Echo the input file" +typedef ^ ^ ReKi MSL2SWL - - - "Mean Sea Level to Still Water Level offset" m +typedef ^ ^ ReKi X_HalfWidth - - - "Half-width of the domain in the X direction" m +typedef ^ ^ ReKi Y_HalfWidth - - - "Half-width of the domain in the Y direction" m +typedef ^ ^ ReKi Z_Depth - - - "Depth of the domain the Z direction" m +typedef ^ ^ INTEGER NX - - - "Number of nodes in half of the X-direction domain" +typedef ^ ^ INTEGER NY - - - "Number of nodes in half of the Y-direction domain" +typedef ^ ^ INTEGER NZ - - - "Number of nodes in half of the Z-direction domain" +typedef ^ ^ Waves_InitInputType Waves - - - "Initialization data for Waves module" - +typedef ^ ^ Waves2_InitInputType Waves2 - - - "Initialization data for Waves2 module" - +typedef ^ ^ Current_InitInputType Current - - - "Initialization data for Current module" - +typedef ^ ^ LOGICAL Echo - - - "Echo the input files to a file with the same name as the input but with a .echo extension [T/F]" - +typedef ^ ^ INTEGER NWaveElev - - - "Number of user-requested points where the incident wave elevations can be output" - +typedef ^ ^ SiKi WaveElevxi {:} - - "xi-coordinates for points where the incident wave elevations can be output" (meters) +typedef ^ ^ SiKi WaveElevyi {:} - - "yi-coordinates for points where the incident wave elevations can be output" (meters) +typedef ^ ^ INTEGER NWaveKin - - - "Number of points where the incident wave kinematics will be computed" - +typedef ^ ^ SiKi WaveKinxi {:} - - "xi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinyi {:} - - "yi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinzi {:} - - "zi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) +typedef ^ ^ INTEGER OutSwtch - - - "Output requested channels to: [1=SeaState.out 2=GlueCode.out 3=both files]" - +typedef ^ ^ LOGICAL OutAll - - - "Output all user-specified member and joint loads (only at each member end, not interior locations) [T/F]" - +typedef ^ ^ INTEGER NumOuts - - - "The number of outputs for this module as requested in the input file" - +typedef ^ ^ CHARACTER(ChanLen) OutList {:} - - "The user-requested output channel labels for this modules. This should really be dimensioned with MaxOutPts" - +typedef ^ ^ LOGICAL SeaStSum - - - "Generate a SeaState summary file [T/F]" - +typedef ^ ^ CHARACTER(20) OutFmt - - - "Output format for numerical results" - +typedef ^ ^ CHARACTER(20) OutSFmt - - - "Output format for header strings" - + +typedef SeaState/SeaSt InitInputType CHARACTER(1024) InputFile - - - "Supplied by Driver: full path and filename for the SeaState module" - +typedef ^ ^ LOGICAL UseInputFile - .TRUE. - "Supplied by Driver: .TRUE. if using a input file, .FALSE. if all inputs are being passed in by the caller" - +typedef ^ ^ FileInfoType PassedFileData - - - "If we don't use the input file, pass everything through this" - +typedef ^ ^ CHARACTER(1024) OutRootName - - - "Supplied by Driver: The name of the root file (without extension) including the full path" - +typedef ^ ^ ReKi Gravity - - - "Supplied by Driver: Gravitational acceleration" "(m/s^2)" +typedef ^ ^ ReKi defWtrDens - - - "Default water density from the driver; may be overwritten " "(kg/m^3)" +typedef ^ ^ ReKi defWtrDpth - - - "Default water depth from the driver; may be overwritten " "m" +typedef ^ ^ ReKi defMSL2SWL - - - "Default mean sea level to still water level from the driver; may be overwritten" "m" +typedef ^ ^ DbKi TMax - - - "Supplied by Driver: The total simulation time" "(sec)" +typedef ^ ^ SiKi WaveElevXY {:}{:} - - "Supplied by Driver: X-Y locations for WaveElevation output (for visualization). First dimension is the X (1) and Y (2) coordinate. Second dimension is the point number." "m,-" +typedef ^ ^ INTEGER WaveFieldMod - - - "Wave field handling (-) (switch) 0: use individual SeaState inputs without adjustment, 1: adjust wave phases based on turbine offsets from farm origin" - +typedef ^ ^ ReKi PtfmLocationX - - - "Supplied by Driver: X coordinate of platform location in the wave field" "m" +typedef ^ ^ ReKi PtfmLocationY - - - "Supplied by Driver: Y coordinate of platform location in the wave field" "m" +typedef ^ ^ IntKi WrWvKinMod - 0 - "0,1, or 2 indicating whether we are going to write out kinematics files. [ignored if WaveMod = 6, if 1 or 2 then files are written using the outrootname]" - +typedef ^ ^ LOGICAL HasIce - - - "Supplied by Driver: Whether this simulation has ice loading (flag)" - +typedef ^ ^ Logical Linearize - .FALSE. - "Flag that tells this module if the glue code wants to linearize." - + +# +# +# Define outputs from the initialization routine here: +# +typedef ^ InitOutputType CHARACTER(ChanLen) WriteOutputHdr {:} - - "The is the list of all HD-related output channel header strings (includes all sub-module channels)" - +typedef ^ ^ CHARACTER(ChanLen) WriteOutputUnt {:} - - "The is the list of all HD-related output channel unit strings (includes all sub-module channels)" - +typedef ^ ^ ProgDesc Ver - - - "Version of SeaState" +typedef ^ ^ ReKi WtrDens - - - "Water density, this is necessary to inform glue-code what the module is using for WtrDens (may not be the glue-code's default)" (kg/m^3) +typedef ^ ^ ReKi WtrDpth - - - "Water depth, this is necessary to inform glue-code what the module is using for WtrDpth (may not be the glue-code's default)" (m) +typedef ^ ^ ReKi MSL2SWL - - - "Offset between still-water level and mean sea level, this is necessary to inform glue-code what the module is using for MSL2SWL (may not be the glue-code's default)" (m) +typedef ^ ^ SiKi WaveElevC0 {*}{*} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part" (meters) +typedef ^ ^ SiKi WaveElevC {:}{:}{:} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at all grid points. First column is real part, second column is imaginary part" (meters) +typedef ^ ^ SiKi WaveDirArr {*} - - "Wave direction array. Each frequency has a unique direction of WaveNDir > 1" (degrees) +typedef ^ ^ SiKi WaveDirMin - - - "Minimum wave direction." (degrees) +typedef ^ ^ SiKi WaveDirMax - - - "Maximum wave direction." (degrees) +typedef ^ ^ SiKi WaveDir - - - "Incident wave propagation heading direction" (degrees) +typedef ^ ^ LOGICAL WaveMultiDir - - - "Indicates the waves are multidirectional -- set by HydroDyn_Input" - +typedef ^ ^ SiKi WaveDOmega - - - "Frequency step for incident wave calculations" (rad/s) +typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed" (N/m^2) +typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi WaveAccMCF {*}{*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) +typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "Instantaneous dynamic pressure of incident waves , at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed" (N/m^2) +typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi PWaveAccMCF0 {*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" - +typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" - +typedef ^ ^ SiKi WaveElev0 {:} - - "Instantaneous elevation time-series of incident waves at the platform reference point" (meters) +typedef ^ ^ SiKi WaveTime {*} - - "Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined" (sec) +typedef ^ ^ SiKi RhoXg - - - "= WtrDens*Gravity" - +typedef ^ ^ INTEGER NStepWave - - - "Total number of frequency components = total number of time steps in the incident wave" - +typedef ^ ^ INTEGER NStepWave2 - - - "NStepWave / 2" - +typedef ^ ^ INTEGER WaveMod - - - "Incident wave kinematics model {0: none=still water, 1: plane progressive (regular), 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: white-noise spectrum, 4: user-defind spectrum from routine UserWaveSpctrm (irregular), 5: GH BLADED }" - +typedef ^ ^ INTEGER WaveStMod - - - "Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching}" - +typedef ^ ^ INTEGER WaveDirMod - - - "Directional wave spreading function {0: none, 1: COS2S} [only used if WaveMod=6]" - +typedef ^ ^ SiKi WvLowCOff - - - "Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4]" (rad/s) +typedef ^ ^ SiKi WvHiCOff - - - "High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4]" (rad/s) +typedef ^ ^ SiKi WvLowCOffD - - - "Minimum frequency used in the difference methods [Ignored if all difference methods = 0]" (rad/s) +typedef ^ ^ SiKi WvHiCOffD - - - "Maximum frequency used in the difference methods [Ignored if all difference methods = 0]" (rad/s) +typedef ^ ^ SiKi WvLowCOffS - - - "Minimum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) +typedef ^ ^ SiKi WvHiCOffS - - - "Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) +typedef ^ ^ LOGICAL InvalidWithSSExctn - - - "Whether SeaState configuration is invalid with HydroDyn's state-space excitation (ExctnMod=2)" (-) +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +typedef ^ ^ SiKi MCFD - - - "Diameter of MacCamy-Fuchs member" (meters) +typedef ^ ^ SiKi WaveElevSeries {:}{:} - - "Wave elevation time-series at each of the points given by WaveElevXY. First dimension is the timestep. Second dimension is XY point number corresponding to second dimension of WaveElevXY." (m) +# +# +# ..... States .................................................................................................................... +# Define continuous (differentiable) states here: +typedef ^ ContinuousStateType R8Ki UnusedStates - - - "placeholder for states" - +# +# +# Define discrete (nondifferentiable) states here: +typedef ^ DiscreteStateType R8Ki UnusedStates - - - "placeholder for states" - +# +# +# Define constraint states here: +typedef ^ ConstraintStateType R8Ki UnusedStates - - - "placeholder for states" - +# +# +# Define any other states, including integer or logical states here: +typedef ^ OtherStateType R8Ki UnusedStates - - - "placeholder for states" - +# +# ..... Misc/Optimization variables................................................................................................. +# Define any data that are used only for efficiency purposes (these variables are not associated with time): +# e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc. +typedef ^ MiscVarType INTEGER Decimate - - - "The output decimation counter" - +typedef ^ ^ DbKi LastOutTime - - - "Last time step which was written to the output file (sec)" - +typedef ^ ^ INTEGER LastIndWave - - - "The last index used in the wave kinematics arrays, used to optimize interpolation" - +typedef ^ ^ SeaSt_Interp_MiscVarType SeaSt_Interp_m - - - "misc var information from the SeaState Interpolation module" - + +# ..... Parameters ................................................................................................................ +# Define parameters here: +# Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states: +# +typedef ^ ParameterType Waves2_ParameterType Waves2 - - - "Parameter data for the Waves2 module" - +typedef ^ ^ SiKi WaveTime {*} - - "Array of time samples, (sec)" - +typedef ^ ^ DbKi WaveDT - - - "Wave DT" sec +typedef ^ ^ INTEGER NGridPts - - - "Number of data points in the wave kinematics grid" - +typedef ^ ^ INTEGER NGrid 3 - - "Number of grid entries in x, y, and z" +typedef ^ ^ ReKi deltaGrid 3 - - "delta between grid points in x, y, and theta (for z)" m,m,rad +typedef ^ ^ ReKi X_HalfWidth - - - "Half-width of the domain in the X direction" m +typedef ^ ^ ReKi Y_HalfWidth - - - "Half-width of the domain in the Y direction" m +typedef ^ ^ ReKi Z_Depth - - - "Depth of the domain the Z direction" m +#typedef ^ ^ ReKi gridDX - - - "distance between kinematics grid points along the xi direction" m +#typedef ^ ^ ReKi gridDY - - - "distance between kinematics grid points along the yi direction" m +#typedef ^ ^ ReKi gridDTheta - - - "delta angle used for cosine-spaced zi direction kinematic grid points" rad +typedef ^ ^ INTEGER NStepWave - - - "Number of user-requested data points in the wave kinematics arrays" - +typedef ^ ^ INTEGER NWaveElev - - - "Number of wave elevation outputs" - +typedef ^ ^ SiKi WaveElevxi {:} - - "xi-coordinates for points where the incident wave elevations can be output" (meters) +typedef ^ ^ SiKi WaveElevyi {:} - - "yi-coordinates for points where the incident wave elevations can be output" (meters) +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" - +typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" - +typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "Instantaneous dynamic pressure of incident waves , at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed" (N/m^2) +typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed" (N/m^2) +typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) +typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) +typedef ^ ^ SiKi WaveAccMCF {*}{*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) +#### vvvvvvvvvvvvvvvvvvvvvvvvv +#### The following 3 parameters aren't used in SeaState after initialization, but are stored as parameters so that we can deallocate the arrays and nullify the pointers in a consistent way (in one module) +typedef ^ ^ SiKi WaveDirArr {*} - - "Wave direction array. Each frequency has a unique direction of WaveNDir > 1" (degrees) +typedef ^ ^ SiKi WaveElevC0 {*}{*} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part" (meters) +typedef ^ ^ SiKi PWaveAccMCF0 {*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed" (m/s^2) +#### ^^^^^^^^^^^^^^^^^^^^^^^^^ +typedef ^ ^ INTEGER NWaveKin - - - "Number of points where the incident wave kinematics can be output" - +typedef ^ ^ SiKi WaveKinxi {:} - - "xi-coordinates for points where the incident wave kinematics can be output; these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinyi {:} - - "yi-coordinates for points where the incident wave kinematics can be output; these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinzi {:} - - "zi-coordinates for points where the incident wave kinematics can be output; these are relative to the mean sea level" (meters) +typedef ^ ^ ReKi WtrDpth - - - "Water depth" (m) +typedef ^ ^ DbKi DT - - - "Time step in seconds for integration of continuous states (if a fixed-step integrator is used) and update of discrete states" - +typedef ^ ^ IntKi WaveStMod - - - "Wave stretching model" - +typedef ^ ^ OutParmType OutParam {:} - - "" - +typedef ^ ^ INTEGER NumOuts - - - "Number of SeaState module-level outputs (not the total number including sub-modules" - +typedef ^ ^ INTEGER OutSwtch - - - "Output requested channels to: [1=SeaState.out 2=GlueCode.out 3=both files]" - +typedef ^ ^ CHARACTER(20) OutFmt - - - "Output format for numerical results" - +typedef ^ ^ CHARACTER(20) OutSFmt - - - "Output format for header strings" - +typedef ^ ^ CHARACTER(1) Delim - - - "Delimiter string for outputs, defaults to space" - +typedef ^ ^ INTEGER UnOutFile - - - "File unit for the SeaState outputs" - +typedef ^ ^ INTEGER OutDec - - - "Write every OutDec time steps" - +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +# +# +# ..... Inputs .................................................................................................................... +# Define inputs that are contained on the mesh here: +# +typedef ^ InputType SiKi DummyInput - - - "Remove this variable if you have inputs" - +# +# +# ..... Outputs ................................................................................................................... +# Define outputs that are contained on the mesh here: +typedef ^ OutputType ReKi WriteOutput {:} - - "Outputs to be written to the output file(s)" - diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 new file mode 100644 index 0000000000..0c31a57531 --- /dev/null +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -0,0 +1,694 @@ +!********************************************************************************************************************************** +! SeaState_DriverCode: This code tests the template modules +!.................................................................................................................................. +! LICENSING +! Copyright (C) 2012-2015 National Renewable Energy Laboratory +! +! This file is part of SeaState. +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +!********************************************************************************************************************************** + +program SeaStateDriver + + use NWTC_Library + use SeaState + use SeaState_Types + use SeaState_Output + use ModMesh_Types + use VersionInfo + + implicit none + + type SeaSt_Drvr_InitInput + logical :: Echo + real(ReKi) :: Gravity + real(ReKi) :: WtrDens + real(ReKi) :: WtrDpth + real(ReKi) :: MSL2SWL + character(1024) :: SeaStateInputFile + character(1024) :: OutRootName + integer :: WrWvKinMod + integer :: NSteps + real(DbKi) :: TimeInterval + logical :: WaveElevSeriesFlag !< Should we put together a wave elevation series and save it to file? + real(ReKi) :: WaveElevdX !< Spacing in the X direction for wave elevation series (m) + real(ReKi) :: WaveElevdY !< Spacing in the Y direction for the wave elevation series (m) + integer(IntKi) :: WaveElevNX !< Number of points in the X direction for the wave elevation series (-) + integer(IntKi) :: WaveElevNY !< Number of points in the X direction for the wave elevation series (-) + end type SeaSt_Drvr_InitInput + +! ----------------------------------------------------------------------------------- +! NOTE: this module and the ModMesh.f90 modules must use the Fortran compiler flag: +! /fpp because of they both have preprocessor statements +! ----------------------------------------------------------------------------------- + + INTEGER(IntKi), PARAMETER :: NumInp = 1 ! Number of inputs sent to HydroDyn_UpdateStates + + ! Program variables + + real(DbKi) :: Time ! Variable for storing time, in seconds + + real(DbKi) :: InputTime(NumInp) ! Variable for storing time associated with inputs, in seconds + real(DbKi) :: Interval ! HD module requested time interval + integer(B1Ki), allocatable :: SaveAry(:) ! Array to store packed data structure + + type(SeaSt_InitInputType) :: InitInData ! Input data for initialization + type(SeaSt_InitOutputType) :: InitOutData ! Output data from initialization + + type(SeaSt_ContinuousStateType) :: x ! Continuous states + type(SeaSt_ContinuousStateType) :: x_new ! Continuous states at updated time + type(SeaSt_DiscreteStateType) :: xd ! Discrete states + type(SeaSt_DiscreteStateType) :: xd_new ! Discrete states at updated time + type(SeaSt_ConstraintStateType) :: z ! Constraint states + type(SeaSt_ConstraintStateType) :: z_residual ! Residual of the constraint state equations (Z) + type(SeaSt_OtherStateType) :: OtherState ! Other states + type(SeaSt_MiscVarType) :: m ! Misc/optimization variables + + type(SeaSt_ParameterType) :: p ! Parameters + !type(SeaSt_InputType) :: u ! System inputs [OLD STYLE] + type(SeaSt_InputType) :: u(NumInp) ! System inputs + type(SeaSt_OutputType) :: y ! System outputs + + integer(IntKi) :: UnSeaSt_Out ! Output file identifier + integer(IntKi) :: I ! Generic loop counter + integer(IntKi) :: J ! Generic loop counter + integer(IntKi) :: n ! Loop counter (for time step) + integer(IntKi) :: ErrStat,ErrStat2 ! Status of error message + character(1024) :: ErrMsg,ErrMsg2 ! Error message if ErrStat /= ErrID_None + real(R8Ki) :: dcm (3,3) ! The resulting transformation matrix from X to x, (-). + character(1024) :: drvrFilename ! Filename and path for the driver input file. This is passed in as a command line argument when running the Driver exe. + type(SeaSt_Drvr_InitInput) :: drvrInitInp ! Initialization data for the driver program + + integer :: StrtTime (8) ! Start time of simulation (including intialization) + integer :: SimStrtTime (8) ! Start time of simulation (after initialization) + real(ReKi) :: PrevClockTime ! Clock time at start of simulation in seconds + real(ReKi) :: UsrTime1 ! User CPU time for simulation initialization + real(ReKi) :: UsrTime2 ! User CPU time for simulation (without intialization) + real(DbKi) :: TiLstPrn ! The simulation time of the last print + real(DbKi) :: t_global ! Current simulation time (for global/FAST simulation) + real(DbKi) :: SttsTime ! Amount of time between screen status messages (sec) + integer :: n_SttsTime ! Number of time steps between screen status messages (-) + + + ! For testing + logical :: DoTight = .FALSE. + + + + character(20) :: FlagArg ! Flag argument from command line + character(200) :: git_commit ! String containing the current git commit hash + + type(ProgDesc), parameter :: version = ProgDesc( 'SeaState Driver', '', '' ) ! The version number of this program. + + ! Variables Init + Time = -99999 + + !............................................................................................................................... + ! Routines called in initialization + !............................................................................................................................... + + + + ! TODO: Need to think some more about how to pass DRIVER-level initialization data to the SeaState module because if UseInputFile = .FALSE. + ! then the input processing code will still be querying the *Chr input data to look for the use of the 'DEFAULT' string and to set that + ! data to the driver's version instead of using a module-specific version. + ! Currently, these variables are: + ! InitInp%Waves%WavePkShpChr + ! InitInp%Current%CurrSSDirChr + ! InitInp%PtfmSgFChr + ! InitInp%PtfmSwFChr + ! InitInp%PtfmHvFChr + ! InitInp%PtfmRFChr + ! InitInp%PtfmPFChr + ! InitInp%PtfmYFChr + ! InitInp%Morison%InpMembers(k)%FillDensChr + ! + ! + + call NWTC_Init( ProgNameIn=version%Name ) + + drvrFilename = '' + call CheckArgs( drvrFilename, Flag=FlagArg ) + if ( LEN( TRIM(FlagArg) ) > 0 ) call NormStop() + + ! Display the copyright notice + call DispCopyrightLicense( version%Name ) + CALL DispCompileRuntimeInfo( version%Name ) + + + ! Parse the driver input file and run the simulation based on that file + call ReadDriverInputFile( drvrFilename, drvrInitInp, ErrStat, ErrMsg ) + if (errStat >= AbortErrLev) then + ! Clean up and exit + call SeaSt_DvrCleanup() + end if + InitInData%Gravity = drvrInitInp%Gravity + InitInData%defWtrDens = drvrInitInp%WtrDens + InitInData%defWtrDpth = drvrInitInp%WtrDpth + InitInData%defMSL2SWL = drvrInitInp%MSL2SWL + InitInData%UseInputFile = .TRUE. + InitInData%InputFile = drvrInitInp%SeaStateInputFile + InitInData%OutRootName = drvrInitInp%OutRootName + InitInData%TMax = (drvrInitInp%NSteps-1) * drvrInitInp%TimeInterval ! Starting time is always t = 0.0 + InitInData%HasIce = .false. + + ! Get the current time + call date_and_time ( Values=StrtTime ) ! Let's time the whole simulation + call cpu_time ( UsrTime1 ) ! Initial time (this zeros the start time when used as a MATLAB function) + SttsTime = 1.0 ! seconds + + ! figure out how many time steps we should go before writing screen output: + n_SttsTime = MAX( 1, NINT( SttsTime / drvrInitInp%TimeInterval ) ) ! this may not be the final TimeInterval, though!!! GJH 8/14/14 + + InitInData%WrWvKinMod = drvrInitInp%WrWvKinMod +!------------------------------------------------------------------------------------- +! Begin Simulation Setup +!------------------------------------------------------------------------------------- + + ! Setup the arrays for the wave elevation timeseries if requested by the driver input file + !if ( drvrInitInp%WaveElevSeriesFlag ) then + ! ALLOCATE ( InitInData%WaveElevXY(2,drvrInitInp%WaveElevNX*drvrInitInp%WaveElevNY), STAT=ErrStat ) + ! if ( ErrStat >= ErrID_Fatal ) then + ! call SeaSt_End( u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) + ! if ( ErrStat /= ErrID_None ) then + ! call WrScr( ErrMsg ) + ! end if + ! stop + ! end if + ! + ! ! Set the values + ! n = 0 ! Dummy counter we are using to get the current point number + ! do I = 0,drvrInitInp%WaveElevNX-1 + ! do J = 0, drvrInitInp%WaveElevNY-1 + ! n = n+1 + ! ! X dimension + ! InitInData%WaveElevXY(1,n) = drvrInitInp%WaveElevDX*(I - 0.5*(drvrInitInp%WaveElevNX-1)) + ! ! Y dimension + ! InitInData%WaveElevXY(2,n) = drvrInitInp%WaveElevDY*(J - 0.5*(drvrInitInp%WaveElevNY-1)) + ! ENDDO + ! ENDDO + !endif + + ! Initialize the module + Interval = drvrInitInp%TimeInterval + call SeaSt_Init( InitInData, u(1), p, x, xd, z, OtherState, y, m, Interval, InitOutData, ErrStat, ErrMsg ) + if (errStat >= AbortErrLev) then + ! Clean up and exit + call SeaSt_DvrCleanup() + end if + + if ( Interval /= drvrInitInp%TimeInterval) then + call SetErrStat( ErrID_Fatal, 'The SeaState Module attempted to change timestep interval, but this is not allowed. The SeaState Module must use the Driver Interval.', ErrStat, ErrMsg, 'Driver') + call SeaSt_DvrCleanup() + end if + + + ! Write the gridded wave elevation data to a file + + if ( drvrInitInp%WaveElevSeriesFlag ) call WaveElevGrid_Output (drvrInitInp, InitInData, InitOutData, p, ErrStat, ErrMsg) + if (errStat >= AbortErrLev) then + ! Clean up and exit + call SeaSt_DvrCleanup() + end if + + + ! Destroy initialization data + + call SeaSt_DestroyInitInput( InitInData, ErrStat, ErrMsg, DEALLOCATEpointers = .false. ) + call SeaSt_DestroyInitOutput( InitOutData, ErrStat, ErrMsg, DEALLOCATEpointers = .false. ) + + + if (errStat >= AbortErrLev) then + ! Clean up and exit + call SeaSt_DvrCleanup() + end if + + + + !............................................................................................................................... + ! Routines called in loose coupling -- the glue code may implement this in various ways + !............................................................................................................................... + Time = 0.0 + call SimStatus_FirstTime( TiLstPrn, PrevClockTime, SimStrtTime, UsrTime2, time, InitInData%TMax ) + + ! loop through time steps + + + do n = 1, drvrInitInp%NSteps + + Time = (n-1) * drvrInitInp%TimeInterval + InputTime(1) = Time + + ! Calculate outputs at n + + call SeaSt_CalcOutput( Time, u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) + if (errStat >= AbortErrLev) then + ! Clean up and exit + call SeaSt_DvrCleanup() + end if + + + if ( MOD( n + 1, n_SttsTime ) == 0 ) then + + call SimStatus( TiLstPrn, PrevClockTime, time, InitInData%TMax ) + + endif + + ! Write output to a file which is managed by the driver program and not the individual modules + ! TODO + + end do + + + +! For now, finish here. +call SeaSt_DvrCleanup() + + + + contains + + + +subroutine SeaSt_DvrCleanup() + + ! Local variables + character(len(errMsg)) :: errMsg2 ! temporary Error message if ErrStat /= ErrID_None + integer(IntKi) :: errStat2 ! temporary Error status of the operation + + errStat2 = ErrID_None + errMsg2 = "" + + call SeaSt_DestroyInitInput( InitInData, errStat2, errMsg2, DEALLOCATEpointers = .false. ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'SeaSt_DvrCleanup' ) + + call SeaSt_End( u(1), p, x, xd, z, OtherState, y, m, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'SeaSt_DvrCleanup' ) + + if ( ErrStat /= ErrID_None ) then !This assumes PRESENT(ErrID) is also .TRUE. : + call WrScr(NewLine//NewLine//'Error status and messages after execution:'//NewLine//' ErrStat: '// & + TRIM(Num2LStr(ErrStat))//NewLine//' ErrMsg returned: '//TRIM(ErrMsg)//NewLine) + if ( time < 0.0 ) then + ErrMsg = 'at initialization' + else if ( time > InitInData%TMax ) then + ErrMsg = 'after computing the solution' + else + ErrMsg = 'at simulation time '//trim(Num2LStr(time))//' of '//trim(Num2LStr(InitInData%TMax))//' seconds' + end if + + if (ErrStat >= AbortErrLev) then + call ProgAbort( 'SeaState encountered an error '//trim(errMsg)//'.'//NewLine//' Simulation error level: '& + //trim(GetErrStr(errStat)), TrapErrors=.FALSE., TimeWait=3._ReKi ) ! wait 3 seconds (in case they double-clicked and got an error) + end if + end if + + call RunTimes( StrtTime, real(UsrTime1,ReKi), SimStrtTime, real(UsrTime2,ReKi), time ) + call NormStop() + +end subroutine SeaSt_DvrCleanup + + +SUBROUTINE ReadDriverInputFile( inputFile, InitInp, ErrStat, ErrMsg ) + + character(1024), intent( in ) :: inputFile + type(SeaSt_Drvr_InitInput), intent( out ) :: InitInp + integer, intent( out ) :: ErrStat ! returns a non-zero value when an error occurs + character(*), intent( out ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + + integer :: I ! generic integer for counting + integer :: J ! generic integer for counting + character( 2) :: strI ! string version of the loop counter + + integer :: UnIn ! Unit number for the input file + integer :: UnEchoLocal ! The local unit number for this module's echo file + character(1024) :: EchoFile ! Name of SeaState echo file + character(1024) :: Line ! String to temporarially hold value of read line + character(1024) :: TmpPath ! Temporary storage for relative path name + character(1024) :: TmpFmt ! Temporary storage for format statement + character(1024) :: FileName ! Name of SeaState input file + + real(ReKi) :: TmpRealVar2(2) !< Temporary real array size 2 + integer(IntKi) :: TmpIntVar2(2) !< Temporary integer array size 2 + + + + ! Initialize the echo file unit to -1 which is the default to prevent echoing, we will alter this based on user input + UnEchoLocal = -1 + + FileName = TRIM(inputFile) + + call GetNewUnit( UnIn ) + call OpenFInpFile ( UnIn, FileName, ErrStat, ErrMsg ) + if (ErrStat >=AbortErrLev) then + call WrScr( ErrMsg ) + stop + endif + + + call WrScr( 'Opening SeaState Driver input file: '//FileName ) + + + !------------------------------------------------------------------------------------------------- + ! File header + !------------------------------------------------------------------------------------------------- + + call ReadCom( UnIn, FileName, 'SeaState Driver input file header line 1', ErrStat, ErrMsg ) + + if ( ErrStat >=AbortErrLev ) then + close( UnIn ) + return + end if + + + call ReadCom( UnIn, FileName, 'SeaState Driver input file header line 2', ErrStat, ErrMsg ) + + if ( ErrStat >=AbortErrLev ) then + close( UnIn ) + return + end if + + + ! Echo Input Files. + + call ReadVar ( UnIn, FileName, InitInp%Echo, 'Echo', 'Echo Input', ErrStat, ErrMsg ) + + if ( ErrStat>=AbortErrLev ) then + close( UnIn ) + return + end if + + + ! If we are Echoing the input then we should re-read the first three lines so that we can echo them + ! using the NWTC_Library routines. The echoing is done inside those routines via a global variable + ! which we must store, set, and then replace on error or completion. + + if ( InitInp%Echo ) then + + EchoFile = TRIM(FileName)//'.ech' + call GetNewUnit( UnEchoLocal ) + call OpenEcho ( UnEchoLocal, EchoFile, ErrStat, ErrMsg ) + if ( ErrStat >= AbortErrLev ) then + close( UnIn ) + return + end if + + REWIND(UnIn) + + call ReadCom( UnIn, FileName, 'SeaState Driver input file header line 1', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + + call ReadCom( UnIn, FileName, 'SeaState Driver input file header line 2', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + + ! Echo Input Files. Note this line is prevented from being echoed by the ReadVar routine. + + call ReadVar ( UnIn, FileName, InitInp%Echo, 'Echo', 'Echo the input file data', ErrStat, ErrMsg, UnEchoLocal ) + !write (UnEchoLocal,Frmt ) InitInp%Echo, 'Echo', 'Echo input file' + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + end if + !------------------------------------------------------------------------------------------------- + ! Environmental conditions section + !------------------------------------------------------------------------------------------------- + + ! Header + + call ReadCom( UnIn, FileName, 'Environmental conditions header', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + + ! Gravity - Gravity. + + call ReadVar ( UnIn, FileName, InitInp%Gravity, 'Gravity', 'Gravity', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + ! WtrDens - Water density. + + call ReadVar ( UnIn, FileName, InitInp%WtrDens, 'WtrDens', 'Water density', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + ! WtrDpth - Water depth. + + call ReadVar ( UnIn, FileName, InitInp%WtrDpth, 'WtrDpth', 'Water depth', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + ! MSL2SWL - Offset between still-water level and mean sea level. + + call ReadVar ( UnIn, FileName, InitInp%MSL2SWL, 'MSL2SWL', 'Offset between still-water level and mean sea level', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + !------------------------------------------------------------------------------------------------- + ! SeaState section + !------------------------------------------------------------------------------------------------- + + ! Header + + call ReadCom( UnIn, FileName, 'SeaState header', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + + ! HDInputFile + + call ReadVar ( UnIn, FileName, InitInp%SeaStateInputFile, 'SeaStateInputFile', & + 'SeaState input filename', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + + ! OutRootName + + call ReadVar ( UnIn, FileName, InitInp%OutRootName, 'OutRootName', & + 'SeaState output root filename', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + ! WrWvKinMod - Write Kinematics? + + call ReadVar ( UnIn, FileName, InitInp%WrWvKinMod, 'WrWvKinMod', 'WrWvKinMod', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + if ( InitInp%WrWvKinMod < 0 .or. InitInp%WrWvKinMod > 2 ) then + ErrMsg = ' WrWvKinMod parameter must be 0, 1, or 2' + ErrStat = ErrID_Fatal + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + + ! NSteps + + call ReadVar ( UnIn, FileName, InitInp%NSteps, 'NSteps', & + 'Number of time steps in the SeaState simulation', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + + ! TimeInterval + + call ReadVar ( UnIn, FileName, InitInp%TimeInterval, 'TimeInterval', & + 'Time interval for any SeaState inputs', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + + !------------------------------------------------------------------------------------------------- + !> ### Waves elevation series section + !------------------------------------------------------------------------------------------------- + + !> Header + + call ReadCom( UnIn, FileName, 'Waves multipoint elevation output header', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + !> WaveElevSeriesFlag -- are we doing multipoint wave elevation output? + call ReadVar ( UnIn, FileName, InitInp%WaveElevSeriesFlag, 'WaveElevSeriesFlag', 'WaveElevSeriesFlag', ErrStat, ErrMsg ) + if ( ErrStat >= AbortErrLev ) then + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + return + end if + + if (InitInp%Echo .and. UnEchoLocal>0) close(UnEchoLocal) + close( UnIn ) + +end SUBROUTINE ReadDriverInputFile + +SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, SeaState_p, ErrStat, ErrMsg) + + type(SeaSt_drvr_InitInput), intent( in ) :: drvrInitInp + type(SeaSt_InitInputType), intent( in ) :: SeaStateInitInp + type(SeaSt_InitOutputType), intent( in ) :: SeaStateInitOut ! Output data from initialization + type(SeaSt_ParameterType), intent( in ) :: SeaState_p ! Output data from initialization + integer, intent( out ) :: ErrStat ! returns a non-zero value when an error occurs + character(*), intent( out ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Temporary local variables + integer(IntKi) :: ErrStatTmp !< Temporary variable for the status of error message + character(1024) :: ErrMsgTmp !< Temporary variable for the error message + + integer(IntKi) :: WaveElevFileUn !< Number for the output file for the wave elevation series + character(1024) :: WaveElevFileName !< Name for the output file for the wave elevation series + character(128) :: WaveElevFmt !< Format specifier for the output file for wave elevation series + real(ReKi) :: xpos, ypos + real(SiKi) :: WaveElev,minWaveVal,maxWaveVal + integer(IntKi) :: i,j,k + + WaveElevFmt = "(F14.7,3x,F14.7,3x,F14.7)" + + ErrMsg = "" + ErrStat = ErrID_None + ErrMsgTmp = "" + ErrStatTmp = ErrID_None + + + ! If we calculated the wave elevation at a set of coordinates for use with making movies, put it into an output file + WaveElevFileName = TRIM(drvrInitInp%OutRootName)//".WaveElev.out" + call GetNewUnit( WaveElevFileUn ) + + call OpenFOutFile( WaveElevFileUn, WaveElevFileName, ErrStat, ErrMsg ) + if ( ErrStat /= ErrID_None) then + if ( ErrStat >= AbortErrLev ) return + end if + + if (associated(SeaState_p%WaveElev2)) then + maxWaveVal = MAXVAL(SeaState_p%WaveElev1+SeaState_p%WaveElev2) + minWaveVal = MINVAL(SeaState_p%WaveElev1+SeaState_p%WaveElev2) + else + maxWaveVal = MAXVAL(SeaState_p%WaveElev1) + minWaveVal = MINVAL(SeaState_p%WaveElev1) + end if + + ! Write some useful header information +! write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## This file was generated by '//TRIM(GetNVD(SeaState_Drv_ProgDesc))// & +! ' on '//CurDate()//' at '//CurTime()//'.' + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## This file was generated on '//CurDate()//' at '//CurTime()//'.' + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## This file contains the wave elevations at a series of points '// & + 'through the entire timeseries.' + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## It is arranged as blocks of X,Y,Elevation at each timestep' + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '## Each block is separated by two blank lines for use in gnuplot' + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# ' + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# WaveTMax = '//TRIM(Num2LStr(SeaState_p%WaveTime(SeaState_P%NStepWave))) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# NStepWave = '//TRIM(Num2LStr(SeaState_p%NStepWave)) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# GridXPoints = '//TRIM(Num2LStr(SeaState_p%NGrid(1))) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# GridYPoints = '//TRIM(Num2LStr(SeaState_p%NGrid(2))) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# GridDX = '//TRIM(Num2LStr(SeaState_p%deltaGrid(1))) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# GridDY = '//TRIM(Num2LStr(SeaState_p%deltaGrid(2))) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# MaxWaveElev = '//TRIM(Num2LStr(maxWaveVal)) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# MinWaveElev = '//TRIM(Num2LStr(minWaveVal)) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# ' + + ! Timestep looping + do i = 0,SeaState_p%NStepWave + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) NewLine + write (WaveElevFileUn,'(A8,F10.3)', IOSTAT=ErrStatTmp ) '# Time: ',SeaState_p%WaveTime(I) + ! Now output the X,Y, Elev info for this timestep + do j=1,SeaState_p%NGrid(1) + xpos = -SeaState_p%deltaGrid(1)*(SeaState_p%NGrid(1)-1)/2.0 + (J-1)*SeaState_p%deltaGrid(1) + do k=1, SeaState_p%NGrid(2) + ypos = -SeaState_p%deltaGrid(2)*(SeaState_p%NGrid(2)-1)/2.0 + (K-1)*SeaState_p%deltaGrid(2) + if (associated(SeaState_p%WaveElev2)) then + WaveElev = SeaState_p%WaveElev1(I,J,K) + SeaState_p%WaveElev2(I,J,K) + else + WaveElev = SeaState_p%WaveElev1(I,J,K) + end if + write (WaveElevFileUn,WaveElevFmt, IOSTAT=ErrStatTmp ) xpos, ypos, WaveElev + end do + end do + end do + + ! Done. Close the file + close (WaveElevFileUn) + +end SUBROUTINE WaveElevGrid_Output + +!---------------------------------------------------------------------------------------------------------------------------------- + +end PROGRAM SeaStateDriver + diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 new file mode 100644 index 0000000000..708a46827d --- /dev/null +++ b/modules/seastate/src/SeaState_Input.f90 @@ -0,0 +1,1246 @@ +!********************************************************************************************************************************** +! LICENSING +! Copyright (C) 2013-2021 National Renewable Energy Laboratory +! +! This file is part of SeaState. +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +!********************************************************************************************************************************** +module SeaState_Input + use NWTC_Library + use SeaState_Types + use SeaState_Output + use Waves + use NWTC_RandomNumber ! for parameters pRNG_INTRINSIC and pRNG_RANLUX + + implicit none + + contains + +!==================================================================================================== +subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, defMSL2SWL, FileInfo_In, InputFileData, ErrStat, ErrMsg ) +! This public subroutine reads the input required for SeaState from the file whose name is an +! input parameter. +!---------------------------------------------------------------------------------------------------- + + ! Passed variables + character(*), intent(in ) :: InputFileName !< The name of the input file, for putting in echo file. + character(*), intent(in ) :: OutRootName !< The rootname of the echo file, possibly opened in this routine + real(ReKi), intent(in ) :: defWtrDens !< default value for water density + real(ReKi), intent(in ) :: defWtrDpth !< default value for water depth + real(ReKi), intent(in ) :: defMSL2SWL !< default value for mean sea level to still water level + type(FileInfoType), INTENT(IN ) :: FileInfo_In !< The derived type for holding the file information + type(SeaSt_InputFile), INTENT(INOUT) :: InputFileData ! the SeaState input file data + integer, INTENT( OUT) :: ErrStat ! returns a non-zero value when an error occurs + character(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + integer :: UnEc ! The local unit number for this module's echo file + character(1024) :: EchoFile ! Name of SeaState echo file + character(MaxFileInfoLineLen) :: Line ! String to temporarially hold value of read line + real(ReKi), allocatable :: tmpVec1(:), tmpVec2(:) ! Temporary arrays for WAMIT data + integer, allocatable :: tmpArray(:) ! Temporary array storage of the joint output list + real(ReKi), allocatable :: tmpReArray(:) ! Temporary array storage of the joint output list + character(1) :: Line1 ! The first character of an input line + integer(IntKi) :: CurLine !< Current entry in FileInfo_In%Lines array + integer(IntKi) :: ErrStat2 + character(ErrMsgLen) :: ErrMsg2 + character(*), parameter :: RoutineName = 'SeaSt_ParaseInput' + + ! Initialize local data + UnEc = -1 + ErrStat = ErrID_None + ErrMsg = "" + InputFileData%Echo = .FALSE. ! initialize for error handling (cleanup() routine) + + + !------------------------------------------------------------------------------------------------- + ! General settings + !------------------------------------------------------------------------------------------------- + + CurLine = 3 ! Skip the first three lines as they are known to be header lines and separators + call ParseVar( FileInfo_In, CurLine, 'Echo', InputFileData%Echo, ErrStat2, ErrMsg2 ) + if (Failed()) return; + + if ( InputFileData%Echo ) then + EchoFile = trim(OutRootName)//'.ech' + call OpenEcho ( UnEc, trim(EchoFile), ErrStat2, ErrMsg2 ) + if (Failed()) return; + write(UnEc, '(A)') 'Echo file for SeaState primary input file: '//trim(InputFileName) + ! Write the first three lines into the echo file + write(UnEc, '(A)') trim(FileInfo_In%Lines(1)) + write(UnEc, '(A)') trim(FileInfo_In%Lines(2)) + + CurLine = 3 + call ParseVar( FileInfo_In, CurLine, 'Echo', InputFileData%Echo, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return + endif + + + !------------------------------------------------------------------------------------------------- + ! Environmental conditions section + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) write(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! WtrDens - Water density. + call ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDens', InputFileData%Waves%WtrDens, defWtrDens, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WtrDpth - Water depth + call ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDpth', InputFileData%Waves%WtrDpth, defWtrDpth, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! MSL2SWL + call ParseVarWDefault ( FileInfo_In, CurLine, 'MSL2SWL', InputFileData%MSL2SWL, defMSL2SWL, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + !------------------------------------------------------------------------------------------------- + ! Data section for Wave Kinematics data grid spatial discretization + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) write(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! X_HalfWidth - Half-width of the domain in the X direction. + call ParseVar( FileInfo_In, CurLine, 'X_HalfWidth', InputFileData%X_HalfWidth, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! Y_HalfWidth - Half-width of the domain in the Y direction. + call ParseVar( FileInfo_In, CurLine, 'Y_HalfWidth', InputFileData%Y_HalfWidth, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! Z_Depth - Depth of the domain the Z direction. + call ParseVarWDefault ( FileInfo_In, CurLine, 'Z_Depth', InputFileData%Z_Depth, defWtrDpth, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! NX - Number of nodes in half of the X-direction domain. + call ParseVar( FileInfo_In, CurLine, 'NX', InputFileData%NX, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! NY - Number of nodes in half of the Y-direction domain. + call ParseVar( FileInfo_In, CurLine, 'NY', InputFileData%NY, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! NZ - Number of nodes in the Z-direction domain. + call ParseVar( FileInfo_In, CurLine, 'NZ', InputFileData%NZ, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + !------------------------------------------------------------------------------------------------- + ! Data section for waves + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) write(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! WaveMod - Wave kinematics model switch. + call ParseVar( FileInfo_In, CurLine, 'WaveMod', InputFileData%Waves%WaveModChr, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + call Conv2UC( InputFileData%Waves%WaveModChr ) ! Convert Line to upper case. + + InputFileData%Waves%WavePhase = 0.0 + InputFileData%Waves%WaveNDAmp = .FALSE. + + + ! WaveStMod - Model switch for stretching incident wave kinematics to instantaneous free surface. + call ParseVar( FileInfo_In, CurLine, 'WaveStMod', InputFileData%Waves%WaveStMod, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveTMax - Analysis time for incident wave calculations. + call ParseVar( FileInfo_In, CurLine, 'WaveTMax', InputFileData%Waves%WaveTMax, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveDT - Time step for incident wave calculations + call ParseVar( FileInfo_In, CurLine, 'WaveDT', InputFileData%Waves%WaveDT, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveHs - Significant wave height + call ParseVar( FileInfo_In, CurLine, 'WaveHs', InputFileData%Waves%WaveHs, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveTp - Peak spectral period. + call ParseVar( FileInfo_In, CurLine, 'WaveTp', InputFileData%Waves%WaveTp, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WavePkShp - Peak shape parameter. + call ParseVar( FileInfo_In, CurLine, 'WavePkShp', InputFileData%Waves%WavePkShpChr, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WvLowCOff - Low Cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s). + call ParseVar( FileInfo_In, CurLine, 'WvLowCOff', InputFileData%Waves%WvLowCOff, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WvHiCOff - High Cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed (rad/s). + call ParseVar( FileInfo_In, CurLine, 'WvHiCOff', InputFileData%Waves%WvHiCOff, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveDir - Mean wave heading direction. + call ParseVar( FileInfo_In, CurLine, 'WaveDir', InputFileData%Waves%WaveDir, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveDirMod - Directional spreading function {0: None, 1: COS2S} (-) [Used only if WaveMod=2] + call ParseVar( FileInfo_In, CurLine, 'WaveDirMod', InputFileData%Waves%WaveDirMod, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveDirSpread - Spreading coefficient [only used if WaveMod=2 and WaveDirMod=1] + call ParseVar( FileInfo_In, CurLine, 'WaveDirSpread', InputFileData%Waves%WaveDirSpread, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveNDir - The number of wave directions to calculate [must be odd; only used if WaveDirMod=1] + call ParseVar( FileInfo_In, CurLine, 'WaveNDir', InputFileData%Waves%WaveNDir, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveDirRange - Full range of the wave directions from WaveDir - WaveDirRange/2 to WaveDir + WaveDirRange/2 (only used if WaveMod=2 and WaveDirMod=1) + call ParseVar( FileInfo_In, CurLine, 'WaveDirRange', InputFileData%Waves%WaveDirRange, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! Negative values should be treated as positive. + InputFileData%Waves%WaveDirRange = abs( InputFileData%Waves%WaveDirRange ) + + + ! WaveSeed(1) + call ParseVar( FileInfo_In, CurLine, 'WaveSeed(1)', InputFileData%Waves%WaveSeed(1), ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + InputFileData%Waves%RNG%RandSeed(1) = InputFileData%Waves%WaveSeed(1) + + !WaveSeed(2) + call ParseVar( FileInfo_In, CurLine, 'WaveSeed(2)', Line, ErrStat2, ErrMsg2, UnEc ) ! Read into a string and then parse + if (Failed()) return; + + read (Line,*,IOSTAT=ErrStat2) Line1 ! check the first character to make sure we don't have T/F, which can be interpreted as 1/-1 or 0 in Fortran + call Conv2UC( Line1 ) + if ( (Line1 == 'T') .OR. (Line1 == 'F') ) then + ErrStat2 = ErrID_Fatal + ErrMsg2 = ' WaveSeed(2): Invalid RNG type.' + if (Failed()) return; + endif + + read (Line,*,IOSTAT=ErrStat2) InputFileData%Waves%WaveSeed(2) + + if (ErrStat2 == 0) then ! the user entered a number + InputFileData%Waves%RNG%RandSeed(2) = InputFileData%Waves%WaveSeed(2) + + InputFileData%Waves%RNG%RNG_type = "NORMAL" + InputFileData%Waves%RNG%pRNG = pRNG_INTRINSIC + + else + InputFileData%Waves%RNG%RandSeed(2) = 0 + + InputFileData%Waves%RNG%RNG_type = adjustl( Line ) + call Conv2UC( InputFileData%Waves%RNG%RNG_type ) + + if ( InputFileData%Waves%RNG%RNG_type == "RANLUX") then + InputFileData%Waves%RNG%pRNG = pRNG_RANLUX + else + ErrStat2 = ErrID_Fatal + ErrMsg2 = ' WaveSeed(2): Invalid alternative random number generator.' + if (Failed()) return; + endif + + endif + + + ! WaveNDAmp - Flag for normally distributed amplitudes. + call ParseVar( FileInfo_In, CurLine, 'WaveNDAmp', InputFileData%Waves%WaveNDAmp, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WvKinFile + call ParseVar( FileInfo_In, CurLine, 'WvKinFile', InputFileData%Waves%WvKinFile, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + !------------------------------------------------------------------------------------------------- + ! Data section for 2nd Order Waves + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) write(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! WvDiffQTFF - Second order waves -- difference forces + call ParseVar( FileInfo_In, CurLine, 'WvDiffQTF', InputFileData%Waves2%WvDiffQTFF, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WvSumQTFF - Second order waves -- sum forces + call ParseVar( FileInfo_In, CurLine, 'WvSumQTF', InputFileData%Waves2%WvSumQTFF, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WvLowCOffD -- Minimum frequency used in the difference methods (rad/s) [Only used if DiffQTF /= 0] + call ParseVar( FileInfo_In, CurLine, 'WvLowCOffD', InputFileData%Waves2%WvLowCOffD, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WvHiCOffD -- Maximum frequency used in the difference methods (rad/s) [Only used if DiffQTF /= 0] + call ParseVar( FileInfo_In, CurLine, 'WvHiCOffD', InputFileData%Waves2%WvHiCOffD, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WvLowCOffS -- Minimum frequency used in the sum-QTF (rad/s) [Only used if SumQTF /= 0] + call ParseVar( FileInfo_In, CurLine, 'WvLowCOffS', InputFileData%Waves2%WvLowCOffS, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WvHiCOffS -- Maximum frequency used in the sum-QTF (rad/s) [Only used if SumQTF /= 0] + call ParseVar( FileInfo_In, CurLine, 'WvHiCOffS', InputFileData%Waves2%WvHiCOffS, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + !------------------------------------------------------------------------------------------------- + ! Data section for constrained wave + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) write(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! ConstWaveMod - Constrained wave model switch. + call ParseVar( FileInfo_In, CurLine, 'ConstWaveMod', InputFileData%Waves%ConstWaveMod, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + IF ( ( InputFileData%Waves%ConstWaveMod /= 0 ) .AND. ( InputFileData%Waves%ConstWaveMod /= 1 ) .AND. & + ( InputFileData%Waves%ConstWaveMod /= 2 ) ) THEN + call SetErrStat( ErrID_Fatal,'ConstWaveMod must be 0, 1, or 2.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + + ! CrestHmax - Crest height + call ParseVar( FileInfo_In, CurLine, 'CrestHmax', InputFileData%Waves%CrestHmax, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + IF ( (InputFileData%Waves%WaveModChr == '2') .AND. ( InputFileData%Waves%ConstWaveMod>0 ) .AND. & + ( InputFileData%Waves%CrestHmax < InputFileData%Waves%WaveHs ) ) THEN + call SetErrStat( ErrID_Fatal,'CrestHmax must be larger than WaveHs.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + + ! CrestTime -Time of the crest + call ParseVar( FileInfo_In, CurLine, 'CrestTime', InputFileData%Waves%CrestTime, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! CrestXi - X-position of the crest + call ParseVar( FileInfo_In, CurLine, 'CrestXi', InputFileData%Waves%CrestXi, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! CrestYi - Y-position of the crest + call ParseVar( FileInfo_In, CurLine, 'CrestYi', InputFileData%Waves%CrestYi, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + !------------------------------------------------------------------------------------------------- + ! Data section for current + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) write(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! CurrMod - Current profile model switch + call ParseVar( FileInfo_In, CurLine, 'CurrMod', InputFileData%Current%CurrMod, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! CurrSSV0 - Sub-surface current velocity at still water level + call ParseVar( FileInfo_In, CurLine, 'CurrSSV0', InputFileData%Current%CurrSSV0, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + + ! CurrSSDirChr - Sub-surface current heading direction + call ParseVar( FileInfo_In, CurLine, 'CurrSSDir', InputFileData%Current%CurrSSDirChr, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + call Conv2UC( InputFileData%Current%CurrSSDirChr ) ! Convert Line to upper case. + + + ! CurrNSRef - Near-surface current reference depth. + call ParseVar( FileInfo_In, CurLine, 'CurrNSRef', InputFileData%Current%CurrNSRef, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! CurrNSV0 - Near-surface current velocity at still water level. + call ParseVar( FileInfo_In, CurLine, 'CurrNSV0', InputFileData%Current%CurrNSV0, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! CurrNSDir - Near-surface current heading direction. + call ParseVar( FileInfo_In, CurLine, 'CurrNSDir', InputFileData%Current%CurrNSDir, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! CurrDIV - Depth-independent current velocity. + call ParseVar( FileInfo_In, CurLine, 'CurrDIV', InputFileData%Current%CurrDIV, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! CurrDIDir - Depth-independent current heading direction. + call ParseVar( FileInfo_In, CurLine, 'CurrDIDir', InputFileData%Current%CurrDIDir, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + !------------------------------------------------------------------------------------------------- + ! Data section for the MacCamy-Fuchs diffraction model + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) write(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! MacCamy-Fuchs member radius + call ParseVar( FileInfo_In, CurLine, 'MCFD', InputFileData%Waves%MCFD, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + IF ( InputFileData%Waves%WaveModChr == '0' .OR. InputFileData%Waves%WaveModChr == '6' ) THEN + IF ( InputFileData%Waves%MCFD > 0.0_SiKi ) THEN + CALL SetErrStat( ErrID_Fatal,' The MacCamy-Fuchs diffraction model is not compatible with WaveMod = 0 or 6. Need to set MCFD to 0.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + END IF + + !------------------------------------------------------------------------------------------------- + ! Data section for OUTPUT + !------------------------------------------------------------------------------------------------- + if ( InputFileData%Echo ) write(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! SeaSum - Whether or not to generate a summary file + call ParseVar( FileInfo_In, CurLine, 'SeaStSum', InputFileData%SeaStSum, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! OutSwtch - Specify how to write to an output file + call ParseVar( FileInfo_In, CurLine, 'OutSwtch', InputFileData%OutSwtch, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! OutFmt - Format for numerical outputs + call ParseVar( FileInfo_In, CurLine, 'OutFmt', InputFileData%OutFmt, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! OutSFmt - Format for output column headers + call ParseVar( FileInfo_In, CurLine, 'OutSFmt', InputFileData%OutSFmt, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! NWaveElev - Number of Wave elevations to output + call ParseVar( FileInfo_In, CurLine, 'NWaveElev', InputFileData%NWaveElev, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + + ! This check is needed here instead of being located in SeaStateInput_ProcessInputData() because + ! we need to allocate arrays. If _GetInput() was skipped, then these array would already have + ! been allocated and populated. + + if ( InputFileData%NWaveElev < 0 .OR. InputFileData%NWaveElev > 9 ) then + ErrStat2 = ErrID_Fatal + ErrMsg2 = 'NWaveElev must be greater than or equal to zero and less than 10.' + if (Failed()) return; + end if + + ! allocate space for the output location arrays: + call AllocAry( InputFileData%WaveElevxi, InputFileData%NWaveElev, 'WaveElevxi' , ErrStat2, ErrMsg2); if (Failed()) return; + call AllocAry( InputFileData%WaveElevyi, InputFileData%NWaveElev, 'WaveElevyi' , ErrStat2, ErrMsg2); if (Failed()) return; + + ! WaveElevxi + call ParseAry ( FileInfo_In, CurLine, 'WaveElevxi.', InputFileData%WaveElevxi, InputFileData%NWaveElev, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveElevyi + call ParseAry ( FileInfo_In, CurLine, 'WaveElevyi.', InputFileData%WaveElevyi, InputFileData%NWaveElev, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! NWaveKin + call ParseVar( FileInfo_In, CurLine, 'NWaveKin', InputFileData%NWaveKin, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + + ! This check is needed here instead of being located in SeaStateInput_ProcessInputData() because + ! we need to allocate arrays. If _GetInput() was skipped, then these array would already have + ! been allocated and populated. + + if ( InputFileData%NWaveKin < 0 .OR. InputFileData%NWaveKin > 9 ) then + ErrStat2 = ErrID_Fatal + ErrMsg2 = 'NWaveKin must be greater than or equal to zero and less than 10.' + if (Failed()) return; + end if + + ! allocate space for the output location arrays: + call AllocAry( InputFileData%WaveKinxi, InputFileData%NWaveKin, 'WaveKinxi' , ErrStat2, ErrMsg2); if (Failed()) return; + call AllocAry( InputFileData%WaveKinyi, InputFileData%NWaveKin, 'WaveKinyi' , ErrStat2, ErrMsg2); if (Failed()) return; + call AllocAry( InputFileData%WaveKinzi, InputFileData%NWaveKin, 'WaveKinzi' , ErrStat2, ErrMsg2); if (Failed()) return; + + ! WaveKinxi + call ParseAry ( FileInfo_In, CurLine, 'WaveKinxi.', InputFileData%WaveKinxi, InputFileData%NWaveKin, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveKinyi + call ParseAry ( FileInfo_In, CurLine, 'WaveKinyi.', InputFileData%WaveKinyi, InputFileData%NWaveKin, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + ! WaveKinzi + call ParseAry ( FileInfo_In, CurLine, 'WaveKinzi.', InputFileData%WaveKinzi, InputFileData%NWaveKin, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + + !------------------------------------------------------------------------------------------------- + ! Data section for OUTPUT CHANNELS + !------------------------------------------------------------------------------------------------- + + if ( InputFileData%Echo ) WRITE(UnEc, '(A)') trim(FileInfo_In%Lines(CurLine)) ! Write section break to echo + CurLine = CurLine + 1 + + ! OutList - list of requested parameters to output to a file + call AllocAry( InputFileData%OutList, MaxOutPts, 'InputFileData%OutList', ErrStat2, ErrMsg2 ) + if (Failed()) return; + + call ReadOutputListFromFileInfo( FileInfo_In, CurLine, InputFileData%OutList, InputFileData%NumOuts, ErrStat2, ErrMsg2, UnEc ) + if (Failed()) return; + +contains + !.............................. + logical function Failed() + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + Failed = ErrStat >= AbortErrLev + if (Failed) call Cleanup() + end function Failed + subroutine Cleanup() + if (allocated(tmpArray )) deallocate(tmpArray ) + if (allocated(tmpReArray)) deallocate(tmpReArray) + if (allocated(tmpVec1 )) deallocate(tmpVec1 ) + if (allocated(tmpVec2 )) deallocate(tmpVec2 ) + ! Cleanup the Echo file and global variables + if (UnEc > 0) close ( UnEc ) + end subroutine Cleanup + +end subroutine SeaSt_ParseInput + +!==================================================================================================== +subroutine SeaStateInput_ProcessInitData( InitInp, p, InputFileData, ErrStat, ErrMsg ) +! This private subroutine verifies the input required for HydroDyn is correctly specified. +!---------------------------------------------------------------------------------------------------- + + + ! Passed variables + + type(SeaSt_InitInputType), intent( in ) :: InitInp ! the SeaState data + type(SeaSt_ParameterType), intent( inout ) :: p ! the SeaState parameter data + type(SeaSt_InputFile), intent( inout ) :: InputFileData ! the SeaState input file data + integer, intent( out ) :: ErrStat ! returns a non-zero value when an error occurs + character(*), intent( out ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + integer :: I, count ! Generic loop counter index + integer :: J ! Generic loop counter index + integer :: K ! Generic loop counter index + character(1024) :: TmpPath ! Temporary storage for relative path name + real(ReKi) :: xpos, ypos, zpos + real(SiKi) :: TmpFreq + integer :: WaveModIn + + integer(IntKi) :: ErrStat2, IOS + character(ErrMsgLen) :: ErrMsg2 + character(*), parameter :: RoutineName = 'SeaStateInput_ProcessInitData' + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrStat2 = ErrID_None + ErrMsg = "" + ErrMsg2 = "" + + + !------------------------------------------------------------------------- + ! Check environmental conditions + !------------------------------------------------------------------------- + + + ! WtrDens - Water density. + + if ( InputFileData%Waves%WtrDens < 0.0 ) then + call SetErrStat( ErrID_Fatal,'WtrDens must not be negative.',ErrStat,ErrMsg,RoutineName) + return + end if + + + ! WtrDpth - Water depth + + ! First adjust water depth based on MSL2SWL values + InputFileData%Waves%WtrDpth = InputFileData%Waves%WtrDpth + InputFileData%MSL2SWL + + if ( InputFileData%Waves%WtrDpth <= 0.0 ) then + call SetErrStat( ErrID_Fatal,'WtrDpth + MSL2SWL must be greater than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! X_HalfWidth - Half-width of the domain in the X direction (m) + if ( InputFileData%X_HalfWidth <= 0.0_ReKi ) then + call SetErrStat( ErrID_Fatal,'X_HalfWidth must be greater than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! Y_HalfWidth - Half-width of the domain in the Y direction (m) + if ( InputFileData%Y_HalfWidth <= 0.0_ReKi ) then + call SetErrStat( ErrID_Fatal,'Y_HalfWidth must be greater than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! Z_Depth - Depth of the domain the Z direction (m) + + if ( ( InputFileData%Z_Depth <= 0.0_ReKi ) .or. ( InputFileData%Z_Depth > InputFileData%Waves%WtrDpth ) ) then + call SetErrStat( ErrID_Fatal,'Z_Depth must be greater than zero and less than or equal to the WtrDpth + MSL2SWL.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! NX - Number of nodes in half of the X-direction domain + if ( InputFileData%NX < 2 ) then + call SetErrStat( ErrID_Fatal,'NX must be greater than or equal to 2.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! NY - Number of nodes in half of the Y-direction domain + if ( InputFileData%NY < 2 ) then + call SetErrStat( ErrID_Fatal,'NY must be greater than or equal to 2.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! NZ - Number of nodes in the Z-direction domain + if ( InputFileData%NZ < 2 ) then + call SetErrStat( ErrID_Fatal,'NZ must be greater than or equal to 2.',ErrStat,ErrMsg,RoutineName) + return + end if + + + ! WaveMod - Wave kinematics model switch. + + if ( LEN_TRIM(InputFileData%Waves%WaveModChr) > 1 ) then + + if ( InputFileData%Waves%WaveModChr(1:2) == '1P' ) then ! The user wants to specify the phase in place of a random phase + + read (InputFileData%Waves%WaveModChr(3:),*,IOSTAT=IOS ) InputFileData%Waves%WavePhase + call CheckIOS ( IOS, "", 'WavePhase', NumType, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + if ( ErrStat >= AbortErrLev ) return + + WaveModIn = 1 + InputFileData%Waves%WaveMod = 10 ! Internally define WaveMod = 10 to mean regular waves with a specified (nonrandom) phase + InputFileData%Waves%WavePhase = InputFileData%Waves%WavePhase*D2R ! Convert the phase from degrees to radians + + else ! The user must have specified WaveMod incorrectly. + call SetErrStat( ErrID_Fatal,'WaveMod incorrectly specified',ErrStat,ErrMsg,RoutineName) + return + end if + + else + ! The line below only works for 1 digit reads + read( InputFileData%Waves%WaveModChr, *, IOSTAT=IOS ) InputFileData%Waves%WaveMod + call CheckIOS ( IOS, "", 'WaveMod', NumType, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + if ( ErrStat >= AbortErrLev ) return + + WaveModIn = InputFileData%Waves%WaveMod + + end if ! LEN_TRIM(InputFileData%Waves%WaveModChr) + + + if ( WaveModIn < 0 .OR. WaveModIn > 7 ) then + call SetErrStat( ErrID_Fatal,'WaveMod must be 0, 1, 1P#, 2, 3, 4, 5, 6, or 7',ErrStat,ErrMsg,RoutineName) + return + end if + + ! Linearization Checks + ! LIN-TODO: + !errors if: + !if ( & + ! (WaveModIn /= 0) .or. & + ! (InputFileData%Waves2%WvDiffQTFF /= .false.) .or. & + ! (InputFileData%Waves2%WvSumQTFF /= .false.) .or. & + ! (InputFileData%PotMod /= 0 .or. InputFileData%PotMod /=1) .or. & + ! (InputFileData%WAMIT%ExctnMod /=0 .or. InputFileData%WAMIT%ExctnMod /=2) .or. & + ! (InputFileData%WAMIT%RdtnMod /=0 .or. InputFileData%WAMIT%RdtnMod /=2) .or. & + ! (InputFileData%WAMIT2%MnDrift /=0) .or. & + ! (InputFileData%WAMIT2%NewmanApp /= 0) .or. & + ! (InputFileData%WAMIT2%SumQTF /= 0 ) ) then + ! + !end if + + + ! WaveStMod - Model switch for stretching incident wave kinematics to instantaneous free surface. + + ! TODO: We are only implementing WaveStMod = 0 (No stretching) at this point in time. 1 Mar 2013 GJH + ! All three methods of wave stretching tentatively implemented. + + IF ( InputFileData%Waves%WaveMod /= 0 .AND. InputFileData%Waves%WaveMod /= 6 ) THEN + IF ( (InputFileData%Waves%WaveStMod /= 0) .AND. (InputFileData%Waves%WaveStMod /= 1) .AND. & + (InputFileData%Waves%WaveStMod /= 2) .AND. (InputFileData%Waves%WaveStMod /= 3) ) THEN + CALL SetErrStat( ErrID_Fatal,'WaveStMod must be 0, 1, 2, or 3.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + ELSE ! Wave stretching is not supported when WaveMod = 0 or 6. + InputFileData%Waves%WaveStMod = 0_IntKi + END IF + + !if ( InputFileData%Waves%WaveMod /= 6 .AND. InputFileData%Morison%NMembers > 0 .AND. InputFileData%Waves%WaveMod > 0 ) then + ! + ! if ( ( InputFileData%Waves%WaveStMod /= 0 ) .AND. ( InputFileData%Waves%WaveStMod /= 1 ) .AND. & + ! ( InputFileData%Waves%WaveStMod /= 2 ) ) then ! (TODO: future version will support 3) .AND. ( InputFileData%Waves%WaveStMod /= 3 ) ) then + ! ErrMsg = ' WaveStMod must be 0, 1, or 2.' !, or 3.' + ! ErrStat = ErrID_Fatal + ! + ! return + ! end if + ! + ! !if ( ( InputFileData%Waves%WaveStMod /= 3 ) .AND. ( InputFileData%Waves%WaveMod == 5 ) ) then + ! ! ErrMsg = ' WaveStMod must be set to 3 when WaveMod is set to 5.' + ! ! ErrStat = ErrID_Fatal + ! ! + ! ! return + ! !end if + ! + ! + ! + !else !don't use this one + ! + ! ! NOTE: Do not read in WaveStMod for floating platforms since it is + ! ! inconsistent to use stretching (which is a nonlinear correction) for + ! ! the viscous drag term in Morison's equation while not accounting for + ! ! stretching in the diffraction and radiation problems (according to + ! ! Paul Sclavounos, there are such corrections). Instead, the viscous + ! ! drag term from Morison's equation is computed by integrating up to + ! ! the MSL, regardless of the instantaneous free surface elevation. + ! + ! InputFileData%Waves%WaveStMod = 0 + ! + !end if + + + ! WaveTMax - Analysis time for incident wave calculations. + + if ( InputFileData%Waves%WaveMod == 0 ) then ! .TRUE if we have incident waves. + + ! TODO: Issue warning if WaveTMax was not already 0.0 in this case. + ! Setting WaveTMax = 0 breaks interpolation. Should probably set it to just TMax instead. + ! if ( .NOT. EqualRealNos(InputFileData%Waves%WaveTMax, 0.0_DbKi) ) then + ! call WrScr( ' Setting WaveTMax to 0.0 since WaveMod = 0' ) + ! InputFileData%Waves%WaveTMax = 0.0 + ! end if + if ( .NOT. EqualRealNos(InputFileData%Waves%WaveTMax, InitInp%TMax) ) then + call WrScr( ' Setting WaveTMax to TMax since WaveMod = 0' ) + InputFileData%Waves%WaveTMax = InitInp%TMax + end if + if ( .NOT. EqualRealNos(InputFileData%Waves%WaveDir, 0.0_SiKi) ) then + call WrScr( ' Setting WaveDir to 0.0 since WaveMod = 0' ) + InputFileData%Waves%WaveDir = 0.0 + end if + elseif ( InputFileData%Waves%WaveMod == 5 ) then ! User wave elevation file reading in + if (InitInp%TMax > InputFileData%Waves%WaveTMax ) then + call SetErrstat( ErrID_Fatal, ' WaveTMax must be larger than the simulation time for user wave elevations (WaveMod == 5).',ErrStat,ErrMsg,RoutineName) + return + end if + else + if (InitInp%TMax > InputFileData%Waves%WaveTMax ) then + call WrScr( ' WaveTMax is less then the simulation time. Wave data will repeat every WaveTMax seconds.') + end if + end if + + + ! WaveDT - Time step for incident wave calculations + + if ( InputFileData%Waves%WaveMod > 0 ) then ! .TRUE if we have incident waves. + + if ( InputFileData%Waves%WaveDT <= 0.0 ) then + call SetErrStat( ErrID_Fatal,'WaveDT must be greater than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + ! When waveMod = 0, should also set WaveDT to InitInp%TMax to keep interpolation working. + ! Essentially just two time steps, t=0 and t=TMax + !InputFileData%Waves%WaveDT = 0.0 + InputFileData%Waves%WaveDT = InitInp%TMax + + end if + + + ! WaveHs - Significant wave height + + if ( ( InputFileData%Waves%WaveMod /= 0 ) .AND. ( InputFileData%Waves%WaveMod /= 4 ) .AND. ( InputFileData%Waves%WaveMod /= 5 ) ) then ! .TRUE. (when WaveMod = 1, 2, 3, or 10) if we have plane progressive (regular), JONSWAP/Pierson-Moskowitz spectrum (irregular) waves, or white-noise waves, but not user-defined or GH Bladed wave data. + + if ( InputFileData%Waves%WaveHs <= 0.0 ) then + call SetErrStat( ErrID_Fatal,'WaveHs must be greater than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + InputFileData%Waves%WaveHs = 0.0 + + end if + + + ! WaveTp - Peak spectral period. + ! We commented out the if else block due to a bug when WaveMod == 3, and then WaveTp is hence set to 0.0. See line 1092 of Waves.f90 (as of 11/24/2014) GJH + !if ( ( InputFileData%Waves%WaveMod == 1 ) .OR. ( InputFileData%Waves%WaveMod == 2 ) .OR. ( InputFileData%Waves%WaveMod == 10 ) ) then ! .TRUE. (when WaveMod = 1, 2, or 10) if we have plane progressive (regular), JONSWAP/Pierson-Moskowitz spectrum (irregular) waves. + + if ( InputFileData%Waves%WaveTp <= 0.0 ) then + call SetErrStat( ErrID_Fatal,'WaveTp must be greater than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! else + + ! InputFileData%Waves%WaveTp = 0.0 + + ! end if + + + ! WavePkShp - Peak shape parameter. + + call Conv2UC( InputFileData%Waves%WavePkShpChr ) ! Convert Line to upper case. + + if ( InputFileData%Waves%WaveMod == 2 ) then ! .TRUE if we have JONSWAP/Pierson-Moskowitz spectrum (irregular) waves, but not GH Bladed wave data. + + if ( TRIM(InputFileData%Waves%WavePkShpChr) == 'DEFAULT' ) then ! .TRUE. when one wants to use the default value of the peak shape parameter, conditioned on significant wave height and peak spectral period. + + InputFileData%Waves%WavePkShp = WavePkShpDefault ( InputFileData%Waves%WaveHs, InputFileData%Waves%WaveTp ) + + else ! The input must have been specified numerically. + + read (InputFileData%Waves%WavePkShpChr,*,IOSTAT=IOS) InputFileData%Waves%WavePkShp + call CheckIOS ( IOS, "", 'WavePkShp', NumType, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2,ErrStat,ErrMsg,RoutineName) + if ( ErrStat >= AbortErrLev ) return + + if ( ( InputFileData%Waves%WavePkShp < 1.0 ) .OR. ( InputFileData%Waves%WavePkShp > 7.0 ) ) then + call SetErrStat( ErrID_Fatal,'WavePkShp must be greater than or equal to 1 and less than or equal to 7.',ErrStat,ErrMsg,RoutineName) + return + end if + + end if + + else + + InputFileData%Waves%WavePkShp = 1.0 + + end if + + + ! WvLowCOff and WvHiCOff - Wave Cut-off frequency + + if ( InputFileData%Waves%WvLowCOff < 0 ) then + call SetErrStat( ErrID_Fatal,'WvLowCOff must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! Threshold upper cut-off based on sampling rate + if ( EqualRealNos(InputFileData%Waves%WaveDT, 0.0_DbKi) ) then + InputFileData%Waves%WvHiCOff = 10000.0; ! This is not going to be used because WaveDT is zero. + else + TmpFreq = REAL( Pi/InputFileData%Waves%WaveDT,SiKi) + if ( InputFileData%Waves%WvHiCOff > TmpFreq ) then + InputFileData%Waves%WvHiCOff = TmpFreq + call SetErrStat( ErrID_Info,'WvLowCOff adjusted to '//trim(num2lstr(TmpFreq))//' rad/s, based on WaveDT.',ErrStat,ErrMsg,RoutineName) + end if + end if + + if (InputFileData%Waves%WaveMod > 2 .and. InputFileData%Waves%WaveMod /= 6) then + if ( InputFileData%Waves%WvLowCOff >= InputFileData%Waves%WvHiCOff ) then + call SetErrSTat( ErrID_Fatal,'WvLowCOff must be less than WvHiCOff.',ErrStat,ErrMsg,RoutineName) + return + end if + end if + + ! WaveDir - Wave heading direction. + + if ( ( InputFileData%Waves%WaveMod > 0 ) .AND. ( InputFileData%Waves%WaveMod /= 6 ) ) then ! .TRUE if we have incident waves, but not user input wave data. + + if ( ( InputFileData%Waves%WaveDir <= -180.0 ) .OR. ( InputFileData%Waves%WaveDir > 180.0 ) ) then + call SetErrStat( ErrID_Fatal,'WaveDir must be greater than -180 and less than or equal to 180.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + InputFileData%Waves%WaveDir = 0.0 + + end if + + + ! Multi-directional waves + + ! Check the WaveDirMod value + if ( InputFileData%Waves%WaveDirMod < 0 .OR. InputFileData%Waves%WaveDirMod > 1 ) then + call SetErrStat( ErrID_Fatal,'WaveDirMod must be either 0 (No spreading) or 1 (COS2S spreading function)',ErrStat,ErrMsg,RoutineName) + return + end if + + ! Check if we are doing multidirectional waves or not. + ! We can only use multi directional waves on WaveMod=2,3,4 + InputFileData%Waves%WaveMultiDir = .FALSE. ! Set flag to false to start + if ( InputFileData%Waves%WaveMod >= 2 .AND. InputFileData%Waves%WaveMod <= 4 .AND. InputFileData%Waves%WaveDirMod == 1 ) then + InputFileData%Waves%WaveMultiDir = .TRUE. + elseif ( (InputFileData%Waves%WaveMod < 2 .OR. InputFileData%Waves%WaveMod >4) .AND. InputFileData%Waves%WaveDirMod == 1 ) then + call SetErrStat( ErrID_Warn,'WaveDirMod unused unless WaveMod == 2, 3, or 4. Ignoring WaveDirMod.',ErrStat,ErrMsg,RoutineName) + ENDIF + + + ! Check to see if the for some reason the wave direction spreading range is set to zero. If it is, + ! we don't have any spreading, so we will turn off the multidirectional waves. + if ( InputFileData%Waves%WaveMultiDir .AND. EqualRealNos( InputFileData%Waves%WaveDirRange, 0.0_SiKi ) ) then + call SetErrStat( ErrID_Warn,' WaveDirRange set to zero, so multidirectional waves are turned off.',ErrStat,ErrMsg,RoutineName) + InputFileData%Waves%WaveMultiDir = .FALSE. + ENDIF + + + + ! We check the following only if we set WaveMultiDir to true, otherwise ignore them and set them to zero + if ( InputFileData%Waves%WaveMultiDir ) then + + ! Check WaveDirSpread + if ( InputFileData%Waves%WaveDirSpread <= 0.0 ) then + + call SetErrStat( ErrID_Fatal,'WaveDirSpread cannot negative or zero.',ErrStat,ErrMsg,RoutineName) + return + + ENDIF + + + ! Check that the number of wave directions is a positive odd number. + ! -> If it is less than 0, error out. + ! -> If it is even, we will increment it by 1. + if ( InputFileData%Waves%WaveNDir <= 0_IntKi ) then + call SetErrStat( ErrID_Fatal,' WaveNDir must be an odd number greater than 0.',ErrStat,ErrMsg,RoutineName) + return + ENDIF + + ! Check that the value for WaveNDir is odd + if ( MODULO( InputFileData%Waves%WaveNDir, 2_IntKi) == 0_IntKi ) then + InputFileData%Waves%WaveNDir = InputFileData%Waves%WaveNDir + 1 + call SetErrStat( ErrID_Warn,'WaveNDir must be odd. Changing the value to '//Num2LStr(InputFileData%Waves%WaveNDir),ErrStat,ErrMsg,RoutineName) + ENDIF + + ! Now check that the WaveDirRange is less than 360 degrees (not sure why we would want that) + if ( InputFileData%Waves%WaveDirRange > 360.0_ReKi ) then + call SetErrStat( ErrID_Fatal,' WaveDirRange should be less than a full circle.',ErrStat,ErrMsg,RoutineName) + ENDIF + + else ! Set everything to zero if we aren't going to use it + + InputFileData%Waves%WaveNDir = 1 ! Only one direction set -- this shouldn't get used later anyhow + InputFileData%Waves%WaveDirRange = PiBy2 ! This is so that the constant C=1 in the COS2S function (it shouldn't get called, but in case it does) + InputFileData%Waves%WaveDirSpread = 0.0 + + end if + + + ! WaveSeed(1), !WaveSeed(2) + + if ( .NOT. ( ( InputFileData%Waves%WaveMod > 0 ) .AND. ( InputFileData%Waves%WaveMod /= 5 ) .AND. ( InputFileData%Waves%WaveMod /= 10 ) ) ) then !.TRUE. for plane progressive (regular) with random phase or irregular wave + + DO I = 1,2 + + InputFileData%Waves%WaveSeed(I) = 0 + + end DO !I + + end if + + + ! WvKinFile + + if ( InputFileData%Waves%WaveMod == 5 .OR. InputFileData%Waves%WaveMod == 6 .OR. InputFileData%Waves%WaveMod == 7) then ! .TRUE if we are to read user-supplied wave elevation or wave kinematics file(s). + + if ( LEN_TRIM( InputFileData%Waves%WvKinFile ) == 0 ) then + call SetErrStat( ErrID_Fatal,'WvKinFile must not be an empty string.',ErrStat,ErrMsg,RoutineName) + return + end if + + if ( PathIsRelative( InputFileData%Waves%WvKinFile ) ) then + call GetPath( TRIM(InitInp%InputFile), TmpPath ) + InputFileData%Waves%WvKinFile = TRIM(TmpPath)//TRIM(InputFileData%Waves%WvKinFile) + end if + + end if + + + !------------------------------------------------------------------------- + ! Check 2nd Order Waves section + !------------------------------------------------------------------------- + + + ! Difference frequency cutoffs + + ! WvLowCOffD and WvHiCOffD - Wave Cut-off frequency + if ( InputFileData%Waves2%WvLowCOffD < 0 ) then + call SetErrStat( ErrID_Fatal,'WvLowCOffD must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! Check that the order given makes sense. + if ( InputFileData%Waves2%WvLowCOffD >= InputFileData%Waves2%WvHiCOffD ) then + call SetErrStat( ErrID_Fatal,'WvLowCOffD must be less than WvHiCOffD.',ErrStat,ErrMsg,RoutineName) + return + end if + + + ! Sum frequency cutoffs + + ! WvLowCOffS and WvHiCOffD - Wave Cut-off frequency + if ( InputFileData%Waves2%WvLowCOffS < 0 ) then + call SetErrStat( ErrID_Fatal,'WvLowCOffS must be greater than or equal to zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! Check that the order given makes sense. + if ( InputFileData%Waves2%WvLowCOffS >= InputFileData%Waves2%WvHiCOffS ) then + call SetErrStat( ErrID_Fatal,'WvLowCOffS must be less than WvHiCOffS.',ErrStat,ErrMsg,RoutineName) + return + end if + + !------------------------------------------------------------------------- + ! Check Current section + !------------------------------------------------------------------------- + + + ! CurrMod - Current profile model switch + + if ( ( InputFileData%Current%CurrMod /= 0 ) .AND. ( InputFileData%Current%CurrMod /= 1 ) .AND. ( InputFileData%Current%CurrMod /= 2 ) ) then + call SetErrStat( ErrID_Fatal,'CurrMod must be 0, 1, or 2.',ErrStat,ErrMsg,RoutineName) + return + end if + + if ( ( InputFileData%Current%CurrMod /= 0 ) .AND. ( InputFileData%Waves%WaveMod == 6 ) ) then + call SetErrStat( ErrID_Fatal,'CurrMod must be set to 0 when WaveMod is set to 6: user-input wave data.',ErrStat,ErrMsg,RoutineName) + return + end if + + + ! CurrSSV0 - Sub-surface current velocity at still water level + + if ( InputFileData%Current%CurrMod == 1 ) then ! .TRUE if we have standard current. + + if ( InputFileData%Current%CurrSSV0 < 0.0 ) then + call SetErrStat( ErrID_Fatal,'CurrSSV0 must not be less than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + InputFileData%Current%CurrSSV0 = 0.0 + + end if + + + ! CurrSSDirChr - Sub-surface current heading direction + + if ( InputFileData%Current%CurrMod == 1 ) then ! .TRUE if we have standard current. + + + if ( TRIM(InputFileData%Current%CurrSSDirChr) == 'DEFAULT' ) then ! .TRUE. when one wants to use the default value of codirectionality between sub-surface current and incident wave propogation heading directions. + + if ( InputFileData%Waves%WaveMod == 0 ) then + call SetErrStat( ErrID_Fatal,'CurrSSDir must not be set to ''DEFAULT'' when WaveMod is set to 0.',ErrStat,ErrMsg,RoutineName) + return + end if + + InputFileData%Current%CurrSSDir = InputFileData%Waves%WaveDir + + else ! The input must have been specified numerically. + + read (InputFileData%Current%CurrSSDirChr,*,IOSTAT=IOS) InputFileData%Current%CurrSSDir + call CheckIOS ( IOS, "", 'CurrSSDir', NumType, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2,ErrStat,ErrMsg,RoutineName) + if ( ErrStat >= AbortErrLev ) return + + if ( ( InputFileData%Current%CurrSSDir <= -180.0 ) .OR. ( InputFileData%Current%CurrSSDir > 180.0 ) ) then + call SetErrStat( ErrID_Fatal,'CurrSSDir must be greater than -180 and less than or equal to 180.',ErrStat,ErrMsg,RoutineName) + return + end if + + end if + + + else + + InputFileData%Current%CurrSSDir = 0.0 + + end if + + + ! CurrNSRef - Near-surface current reference depth. + + if ( InputFileData%Current%CurrMod == 1 ) then ! .TRUE if we have standard current. + + if ( InputFileData%Current%CurrNSRef <= 0.0 ) then + call SetErrStat( ErrID_Fatal,'CurrNSRef must be greater than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + InputFileData%Current%CurrNSRef = 0.0 + + end if + + + + ! CurrNSV0 - Near-surface current velocity at still water level. + + if ( InputFileData%Current%CurrMod == 1 ) then ! .TRUE if we have standard current. + + if ( InputFileData%Current%CurrNSV0 < 0.0 ) then + call SetErrStat( ErrID_Fatal,'CurrNSV0 must not be less than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + InputFileData%Current%CurrNSV0 = 0.0 + + end if + + + ! CurrNSDir - Near-surface current heading direction. + + if ( InputFileData%Current%CurrMod == 1 ) then ! .TRUE if we have standard current. + + if ( ( InputFileData%Current%CurrNSDir <= -180.0 ) .OR. ( InputFileData%Current%CurrNSDir > 180.0 ) ) then + call SetErrStat( ErrID_Fatal,'CurrNSDir must be greater than -180 and less than or equal to 180.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + InputFileData%Current%CurrNSDir = 0.0 + + end if + + + ! CurrDIV - Depth-independent current velocity. + + if ( InputFileData%Current%CurrMod == 1 ) then ! .TRUE if we have standard current. + + if ( InputFileData%Current%CurrDIV < 0.0 ) then + call SetErrStat( ErrID_Fatal,'CurrDIV must not be less than zero.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + InputFileData%Current%CurrDIV = 0.0 + + end if + + + ! CurrDIDir - Depth-independent current heading direction. + + if ( InputFileData%Current%CurrMod == 1 ) then ! .TRUE if we have standard current. + + if ( ( InputFileData%Current%CurrDIDir <= -180.0 ) .OR. ( InputFileData%Current%CurrDIDir > 180.0 ) ) then + call SetErrStat( ErrID_Fatal,'CurrDIDir must be greater than -180 and less than or equal to 180.',ErrStat,ErrMsg,RoutineName) + return + end if + + else + + InputFileData%Current%CurrDIDir = 0.0 + + end if + + + !------------------------------------------------------------------------------------------------- + ! Data section for OUTPUT + !------------------------------------------------------------------------------------------------- + + + ! OutSwtch - output file switch + + if ( InputFileData%OutSwtch /= 1 .AND. InputFileData%OutSwtch /= 2 .AND. InputFileData%OutSwtch /= 3 ) then + call SetErrStat( ErrID_Fatal,'OutSwitch must be set to 1, 2, or 3.',ErrStat,ErrMsg,RoutineName) + return + end if + + !InputFileData%OutFmt + !InputFileData%OutSFmt + + ! Shift from MSL to SWL coordinate system + InputFileData%WaveKinzi(:) = InputFileData%WaveKinzi(:) - InputFileData%MSL2SWL + + + !---------------------------------------------------------- + ! Populate data in sub-types from parent or other module types + !---------------------------------------------------------- + + ! Current + ! For wave kinematic calculations, the effective water depth is the user input water depth (positive valued) + MSL2SWL (positive when SWL is above MSL). + InputFileData%Current%WtrDpth = InputFileData%Waves%WtrDpth ! already adjusted for the MSL2SWL. + + + ! Waves + InputFileData%Waves%Gravity = InitInp%Gravity + ! For wave kinematic calculations, the effective water depth is the user input water depth (positive valued) + MSL2SWL (positive when SWL is above MSL). + + + + +!TODO: This is now set with the grid points? GJH 7/11/21 + + p%NGrid(1) = InputFileData%NX*2-1 + p%NGrid(2) = InputFileData%NY*2-1 + p%NGrid(3) = InputFileData%NZ + p%NGridPts = p%NGrid(1) * p%NGrid(2) * p%NGrid(3) + InputFileData%Waves%NGrid = p%NGrid + InputFileData%Current%NGridPts = p%NGridPts + + call AllocAry( InputFileData%Current%WaveKinGridzi, p%NGridPts, 'WaveKinGridzi' , ErrStat2, ErrMsg2); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + if ( ErrStat >= AbortErrLev ) return + + + ! Establish the number and locations where the wave kinematics will be computed + InputFileData%Waves%NWaveKinGrid = p%NGridPts ! Number of grid points where the incident wave kinematics will be computed (-) + InputFileData%Waves%NWaveElevGrid = p%NGrid(1)*p%NGrid(2) ! Number of XY grid points where the wave elevations are computed + + if ( InputFileData%Waves%NWaveElevGrid < 0 ) then + call SetErrStat( ErrID_Fatal,'Number of nodes in the spatial discretization ('//trim(num2lstr(InputFileData%Waves%NWaveElevGrid))//') must not be negative.',ErrStat,ErrMsg,RoutineName) + return + end if + + call AllocAry( InputFileData%Waves%WaveKinGridxi, p%NGridPts, 'WaveKinGridxi' , ErrStat2, ErrMsg2); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call AllocAry( InputFileData%Waves%WaveKinGridyi, p%NGridPts, 'WaveKinGridyi' , ErrStat2, ErrMsg2); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call AllocAry( InputFileData%Waves%WaveKinGridzi, p%NGridPts, 'WaveKinGridzi' , ErrStat2, ErrMsg2); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + if ( ErrStat >= AbortErrLev ) return + + ! Generate grid points + p%X_HalfWidth = InputFileData%X_HalfWidth + p%Y_HalfWidth = InputFileData%Y_HalfWidth + p%Z_Depth = InputFileData%Z_Depth + p%deltaGrid(1) = InputFileData%X_HalfWidth/(InputFileData%NX-1) + p%deltaGrid(2)= InputFileData%Y_HalfWidth/(InputFileData%NY-1) + p%deltaGrid(3) = PI / ( 2*(InputFileData%NZ-1) ) + count = 1 + do k = 0, p%NGrid(3) - 1 + zpos = - ( 1.0 - cos( real((p%NGrid(3) - 1) - k, ReKi) * p%deltaGrid(3) ) ) * InputFileData%Z_Depth + do j = 0, p%NGrid(2)-1 + ypos = -InputFileData%Y_HalfWidth + p%deltaGrid(2)*j + do i= 0, p%NGrid(1)-1 + xpos = -InputFileData%X_HalfWidth + p%deltaGrid(1)*i + InputFileData%Waves%WaveKinGridxi(count) = xpos ! xi-coordinates for points where the incident wave kinematics will be computed; + InputFileData%Waves%WaveKinGridyi(count) = ypos ! yi-coordinates for points where the incident wave kinematics will be computed; + + InputFileData%Waves%WaveKinGridzi(count) = zpos ! zi-coordinates for points where the incident wave kinematics will be computed; + InputFileData%Current%WaveKinGridzi(count) = InputFileData%Waves%WaveKinGridzi(count) + + !if ( k == 0 ) then + ! InputFileData%Waves%WaveElevGridxi(count) = xpos ! xi-coordinates for points where the incident wave kinematics will be computed; + ! InputFileData%Waves%WaveElevGridyi(count) = ypos ! yi-coordinates for points where the incident wave kinematics will be computed; + !end if + count = count + 1 + end do + end do + end do + + ! Waves2 + + ! If we are using the Waves module, the node information must be copied over. + InputFileData%Waves2%NWaveKinGrid = InputFileData%Waves%NWaveKinGrid ! Number of points where the incident wave kinematics will be computed (-) + if ( InputFileData%Waves2%WvDiffQTFF .OR. InputFileData%Waves2%WvSumQTFF ) then + InputFileData%Waves2%WtrDens = InputFileData%Waves%WtrDens + InputFileData%Waves2%Gravity = InitInp%Gravity + InputFileData%Waves2%WtrDpth = InputFileData%Waves%WtrDpth + InputFileData%Waves2%WaveStMod = InputFileData%Waves%WaveStMod + InputFileData%Waves2%NGrid = p%NGrid + InputFileData%Waves2%NWaveElevGrid = InputFileData%Waves%NWaveElevGrid + + call AllocAry( InputFileData%Waves2%WaveKinGridxi, p%NGridPts, 'WaveKinGridxi' , ErrStat2, ErrMsg2); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call AllocAry( InputFileData%Waves2%WaveKinGridyi, p%NGridPts, 'WaveKinGridyi' , ErrStat2, ErrMsg2); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + call AllocAry( InputFileData%Waves2%WaveKinGridzi, p%NGridPts, 'WaveKinGridzi' , ErrStat2, ErrMsg2); call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + if ( ErrStat >= AbortErrLev ) return + + InputFileData%Waves2%WaveKinGridxi = InputFileData%Waves%WaveKinGridxi + InputFileData%Waves2%WaveKinGridyi = InputFileData%Waves%WaveKinGridyi + InputFileData%Waves2%WaveKinGridzi = InputFileData%Waves%WaveKinGridzi + ENDIF + +end subroutine SeaStateInput_ProcessInitData + +end module SeaState_Input diff --git a/modules/seastate/src/SeaState_Interp.f90 b/modules/seastate/src/SeaState_Interp.f90 new file mode 100644 index 0000000000..1b921bc40d --- /dev/null +++ b/modules/seastate/src/SeaState_Interp.f90 @@ -0,0 +1,715 @@ +!> This module is an interpolator for SeaState pointer arrays based on a 3D grid and time. +!! @note This module does not need to exactly conform to the FAST Modularization Framework standards. Three routines are required +!! though: +!! -- SeaSt_Interp_Init -- Load or create any wind data. Only called at the start of FAST. +!! -- SeaSt_Interp_CalcOutput -- This will be called at each timestep with a series of data points to give the wave kinematics. +!! -- SeaSt_Interp_End -- clear out any stored stuff. Only called at the end of FAST. +MODULE SeaState_Interp +!********************************************************************************************************************************** +! LICENSING +! Copyright (C) 2016 National Renewable Energy Laboratory +! +! This file is part of SeaState. +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +!********************************************************************************************************************************** + + USE NWTC_Library + USE SeaState_Interp_Types + + IMPLICIT NONE + PRIVATE + + TYPE(ProgDesc), PARAMETER :: SeaSt_Interp_Ver = ProgDesc( 'SeaSt_Interp', '', '' ) + + PUBLIC :: SeaSt_Interp_Init + PUBLIC :: SeaSt_Interp_End + PUBLIC :: SeaSt_Interp_3D + PUBLIC :: SeaSt_Interp_3D_Vec + PUBLIC :: SeaSt_Interp_3D_Vec6 + PUBLIC :: SeaSt_Interp_4D + PUBLIC :: SeaSt_Interp_4D_Vec + PUBLIC :: SeaSt_Interp_Setup + +CONTAINS + +!==================================================================================================== + +!---------------------------------------------------------------------------------------------------- +!> A subroutine to initialize the SeaState 4D interpolator module. +!---------------------------------------------------------------------------------------------------- +SUBROUTINE SeaSt_Interp_Init(InitInp, p, ErrStat, ErrMsg) + + + IMPLICIT NONE + + ! Passed Variables + + TYPE(SeaSt_Interp_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization + TYPE(SeaSt_Interp_ParameterType), INTENT( OUT) :: p !< Parameters + ! TYPE(SeaSt_Interp_InitOutputType), INTENT( OUT) :: InitOut !< Initial output + + ! REAL(DbKi), INTENT(IN ) :: Interval !< Do not change this!! + + + + ! Error handling + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< determines if an error has been encountered + CHARACTER(*), INTENT( OUT) :: ErrMsg !< A message about the error. See NWTC_Library info for ErrID_* levels. + + ! local variables + ! Put local variables used during initializing your wind here. DO NOT USE GLOBAL VARIABLES EVER! + ! INTEGER(IntKi) :: UnitWind ! Use this unit number if you need to read in a file. + + ! Temporary variables for error handling +! INTEGER(IntKi) :: ErrStat2 ! Temp variable for the error status +! CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary error message + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_Init' + + !------------------------------------------------------------------------------------------------- + ! Set the Error handling variables + !------------------------------------------------------------------------------------------------- + + ErrStat = ErrID_None + ErrMsg = "" + + + !------------------------------------------------------------------------------------------------- + ! Copy things from the InitData to the ParamData. + !------------------------------------------------------------------------------------------------- + p%n = InitInp%n ! number of points on the evenly-spaced grid (in each direction) + p%delta = InitInp%delta ! distance between consecutive grid points in each direction (s,m,m,m) + p%pZero = InitInp%pZero ! fixed location of first time-XYZ grid point (i.e., XYZ coordinates of m%V(:,1,1,1,:)) + p%Z_Depth = InitInp%Z_Depth + + + !------------------------------------------------------------------------------------------------- + ! Set the InitOutput information. Set any outputs here. + !------------------------------------------------------------------------------------------------- + + ! InitOut%Ver = SeaSt_Interp_Ver + + RETURN + +END SUBROUTINE SeaSt_Interp_Init + +!==================================================================================================== + + +subroutine SetCartesianXYIndex(p, pZero, delta, nMax, Indx_Lo, Indx_Hi, isopc, FirstWarn, ErrStat, ErrMsg) + REAL(ReKi), INTENT(IN ) :: p !< + REAL(ReKi), INTENT(IN ) :: pZero + REAL(ReKi), INTENT(IN ) :: delta + INTEGER(IntKi), INTENT(in ) :: nMax + INTEGER(IntKi), intent(inout) :: Indx_Lo + INTEGER(IntKi), intent(inout) :: Indx_Hi + real(SiKi), intent(inout) :: isopc + logical, intent(inout) :: FirstWarn + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + real(ReKi) :: Tmp + + ErrStat = ErrID_None + ErrMsg = "" + + isopc = -1.0 + Indx_Lo = 0 + Indx_Hi = 0 + + + Tmp = (p-pZero) / delta + Indx_Lo = INT( Tmp ) + 1 ! convert REAL to INTEGER, then add one since our grid indices start at 1, not 0 + isopc = 2.0_ReKi * (Tmp - REAL(Indx_Lo - 1, ReKi)) - 1.0_ReKi ! convert to value between -1 and 1 + + if ( Indx_Lo < 1 ) then + Indx_Lo = 1 + isopc = -1.0 + if (FirstWarn) then + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary. Warning will not be repeated though condition may persist.',ErrStat,ErrMsg,'SetCartesianXYIndex') !error out if time is outside the lower bounds + FirstWarn = .false. + end if + end if + + Indx_Hi = min( Indx_Lo + 1, nMax ) ! make sure it's a valid index, zero-based + + if ( Indx_Lo >= Indx_Hi ) then + ! Need to clamp to grid boundary + if (FirstWarn .and. Indx_Lo /= Indx_Hi) then ! don't warn if we are exactly at the boundary + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary. Warning will not be repeated though condition may persist.',ErrStat,ErrMsg,'SetCartesianXYIndex') !error out if time is outside the lower bounds + FirstWarn = .false. + end if + Indx_Lo = max(Indx_Hi - 1, 1) + isopc = 1.0 + end if + + + + !------------------------------------------------------------------------------------------------- + ! to verify that we don't extrapolate, make sure isopc is bound between -1 and 1 (effectively nearest neighbor) + !------------------------------------------------------------------------------------------------- + isopc = min( 1.0_SiKi, isopc ) + isopc = max(-1.0_SiKi, isopc ) + + +end subroutine SetCartesianXYIndex + +subroutine SetCartesianZIndex(p, z_depth, delta, nMax, Indx_Lo, Indx_Hi, isopc, FirstWarn, ErrStat, ErrMsg) + REAL(ReKi), INTENT(IN ) :: p !< time from the start of the simulation + REAL(ReKi), INTENT(IN ) :: z_depth + REAL(ReKi), INTENT(IN ) :: delta + INTEGER(IntKi), INTENT(in ) :: nMax + INTEGER(IntKi), intent(inout) :: Indx_Lo + INTEGER(IntKi), intent(inout) :: Indx_Hi + real(SiKi), intent(inout) :: isopc + logical, intent(inout) :: FirstWarn + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + real(ReKi) :: Tmp + + ErrStat = ErrID_None + ErrMsg = "" + + isopc = -1.0 + Indx_Lo = 0 + Indx_Hi = 0 + + + !Tmp = acos(-p / z_depth) / delta + Tmp = acos( max(-1.0_ReKi, min(1.0_ReKi, 1+(p / z_depth)) ) ) / delta + Tmp = nmax - 1 - Tmp + Indx_Lo = INT( Tmp ) + 1 ! convert REAL to INTEGER, then add one since our grid indices start at 1, not 0 + isopc = 2.0_ReKi * (Tmp - REAL(Indx_Lo - 1, ReKi)) - 1.0_ReKi ! convert to value between -1 and 1 + + if ( Indx_Lo < 1 ) then + Indx_Lo = 1 + isopc = -1.0 + if (FirstWarn) then + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary. Warning will not be repeated though condition may persist.',ErrStat,ErrMsg,'SetCartesianZIndex') !error out if z is outside the lower bounds + FirstWarn = .false. + end if + end if + + Indx_Hi = min( Indx_Lo + 1, nMax ) ! make sure it's a valid index, one-based + + if ( Indx_Lo >= Indx_Hi ) then + ! Need to clamp to grid boundary + if (FirstWarn .and. Indx_Lo /= Indx_Hi) then ! don't warn if we are exactly at the boundary + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary. Warning will not be repeated though condition may persist.',ErrStat,ErrMsg,'SetCartesianZIndex') !error out if z is outside the upper bounds + FirstWarn = .false. + end if + Indx_Lo = max(Indx_Hi - 1, 1) + isopc = 1.0 + end if + + + !------------------------------------------------------------------------------------------------- + ! to verify that we don't extrapolate, make sure isopc is bound between -1 and 1 (effectively nearest neighbor) + !------------------------------------------------------------------------------------------------- + isopc = min( 1.0_SiKi, isopc ) + isopc = max(-1.0_SiKi, isopc ) + + +end subroutine SetCartesianZIndex + +subroutine SetTimeIndex(Time, deltaT, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, ErrMsg) + REAL(DbKi), INTENT(IN ) :: Time !< time from the start of the simulation + REAL(ReKi), INTENT(IN ) :: deltaT + INTEGER(IntKi), INTENT(in ) :: nMax + INTEGER(IntKi), intent(inout) :: Indx_Lo + INTEGER(IntKi), intent(inout) :: Indx_Hi + real(SiKi), intent(inout) :: isopc + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + real(ReKi) :: Tmp + + ErrStat = ErrID_None + ErrMsg = "" + + isopc = -1.0 + Indx_Lo = 0 + Indx_Hi = 0 + if ( Time < 0.0_DbKi ) then + CALL SetErrStat(ErrID_Fatal,'Time value must be greater than or equal to zero!',ErrStat,ErrMsg,'SetTimeLoIndex') !error out if time is outside the lower bounds + RETURN + end if + +! NOTE: nMax is the total number of time values in the grid, since this is zero-based indexing, the max index is nMax-1 +! for example: in a time grid with 11 grid points, the indices run from 0,1,2,3,4,5,6,7,8,9,10 +! for the repeating waves feature, index 10 is the same as index 0, so if Indx_Lo = 10 then we want to +! wrap it back to index 0, if Indx_Lo = 11 we want to wrap back to index 1. + + Tmp = real( (Time/ real(deltaT,DbKi)) ,ReKi) + Tmp = MOD(Tmp,real((nMax), ReKi)) + Indx_Lo = INT( Tmp ) ! convert REAL to INTEGER + + isopc = 2.0_ReKi * (Tmp - REAL(Indx_Lo , ReKi)) - 1.0_ReKi ! convert to value between -1 and 1 + + !------------------------------------------------------------------------------------------------- + ! to verify that we don't extrapolate, make sure isopc is bound between -1 and 1 (effectively nearest neighbor) + !------------------------------------------------------------------------------------------------- + isopc = min( 1.0_SiKi, isopc ) + isopc = max(-1.0_SiKi, isopc ) + + Indx_Hi = min( Indx_Lo + 1, nMax ) ! make sure it's a valid index, zero-based + +end subroutine SetTimeIndex + + +!==================================================================================================== +!> This routine sets up interpolation of a 3-d or 4-d dataset. +!! This method is described here: http://rjwagner49.com/Mathematics/Interpolation.pdf +subroutine SeaSt_Interp_Setup( Time, Position, p, m, ErrStat, ErrMsg ) + + ! I/O variables + + REAL(DbKi), INTENT(IN ) :: Time !< time from the start of the simulation + REAL(ReKi), INTENT(IN ) :: Position(3) !< Array of XYZ coordinates, 3 + TYPE(SeaSt_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaSt_Interp_MiscVarType), INTENT(INOUT) :: m !< MiscVars + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_Setup' + + ! Local variables + + INTEGER(IntKi) :: i ! loop counter + + REAL(SiKi) :: isopc(4) ! isoparametric coordinates + + integer(IntKi) :: ErrStat2 + character(ErrMsgLen) :: ErrMsg2 + + ErrStat = ErrID_None + ErrMsg = "" + + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for time + !------------------------------------------------------------------------------------------------- + call SetTimeIndex(Time, p%delta(1), p%n(1), m%Indx_Lo(1), m%Indx_Hi(1), isopc(1), ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if time is outside the bounds + if (ErrStat >= AbortErrLev ) return + + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for XY position + !------------------------------------------------------------------------------------------------- + do i=2,3 ! x and y components + call SetCartesianXYIndex(Position(i-1), p%pZero(i), p%delta(i), p%n(i), m%Indx_Lo(i), m%Indx_Hi(i), isopc(i), m%FirstWarn_Clamp, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if x,y is outside the bounds + enddo + + + if (ErrStat >= AbortErrLev ) return + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for Z position + !------------------------------------------------------------------------------------------------- + i=4 ! z component + call SetCartesianZIndex(Position(i-1), p%Z_Depth, p%delta(i), p%n(i), m%Indx_Lo(i), m%Indx_Hi(i), isopc(i), m%FirstWarn_Clamp, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if z is outside the bounds + if (ErrStat >= AbortErrLev ) return + + !------------------------------------------------------------------------------------------------- + ! compute weighting factors + !------------------------------------------------------------------------------------------------- + + m%N4D( 1) = ( 1.0_SiKi - isopc(1) ) * ( 1.0_SiKi - isopc(2) ) * ( 1.0_SiKi - isopc(3) ) * ( 1.0_SiKi - isopc(4) ) + m%N4D( 2) = ( 1.0_SiKi - isopc(1) ) * ( 1.0_SiKi - isopc(2) ) * ( 1.0_SiKi - isopc(3) ) * ( 1.0_SiKi + isopc(4) ) + m%N4D( 3) = ( 1.0_SiKi - isopc(1) ) * ( 1.0_SiKi - isopc(2) ) * ( 1.0_SiKi + isopc(3) ) * ( 1.0_SiKi - isopc(4) ) + m%N4D( 4) = ( 1.0_SiKi - isopc(1) ) * ( 1.0_SiKi - isopc(2) ) * ( 1.0_SiKi + isopc(3) ) * ( 1.0_SiKi + isopc(4) ) + m%N4D( 5) = ( 1.0_SiKi - isopc(1) ) * ( 1.0_SiKi + isopc(2) ) * ( 1.0_SiKi - isopc(3) ) * ( 1.0_SiKi - isopc(4) ) + m%N4D( 6) = ( 1.0_SiKi - isopc(1) ) * ( 1.0_SiKi + isopc(2) ) * ( 1.0_SiKi - isopc(3) ) * ( 1.0_SiKi + isopc(4) ) + m%N4D( 7) = ( 1.0_SiKi - isopc(1) ) * ( 1.0_SiKi + isopc(2) ) * ( 1.0_SiKi + isopc(3) ) * ( 1.0_SiKi - isopc(4) ) + m%N4D( 8) = ( 1.0_SiKi - isopc(1) ) * ( 1.0_SiKi + isopc(2) ) * ( 1.0_SiKi + isopc(3) ) * ( 1.0_SiKi + isopc(4) ) + m%N4D( 9) = ( 1.0_SiKi + isopc(1) ) * ( 1.0_SiKi - isopc(2) ) * ( 1.0_SiKi - isopc(3) ) * ( 1.0_SiKi - isopc(4) ) + m%N4D(10) = ( 1.0_SiKi + isopc(1) ) * ( 1.0_SiKi - isopc(2) ) * ( 1.0_SiKi - isopc(3) ) * ( 1.0_SiKi + isopc(4) ) + m%N4D(11) = ( 1.0_SiKi + isopc(1) ) * ( 1.0_SiKi - isopc(2) ) * ( 1.0_SiKi + isopc(3) ) * ( 1.0_SiKi - isopc(4) ) + m%N4D(12) = ( 1.0_SiKi + isopc(1) ) * ( 1.0_SiKi - isopc(2) ) * ( 1.0_SiKi + isopc(3) ) * ( 1.0_SiKi + isopc(4) ) + m%N4D(13) = ( 1.0_SiKi + isopc(1) ) * ( 1.0_SiKi + isopc(2) ) * ( 1.0_SiKi - isopc(3) ) * ( 1.0_SiKi - isopc(4) ) + m%N4D(14) = ( 1.0_SiKi + isopc(1) ) * ( 1.0_SiKi + isopc(2) ) * ( 1.0_SiKi - isopc(3) ) * ( 1.0_SiKi + isopc(4) ) + m%N4D(15) = ( 1.0_SiKi + isopc(1) ) * ( 1.0_SiKi + isopc(2) ) * ( 1.0_SiKi + isopc(3) ) * ( 1.0_SiKi - isopc(4) ) + m%N4D(16) = ( 1.0_SiKi + isopc(1) ) * ( 1.0_SiKi + isopc(2) ) * ( 1.0_SiKi + isopc(3) ) * ( 1.0_SiKi + isopc(4) ) + m%N4D = m%N4D / REAL( SIZE(m%N4D), SiKi ) ! normalize + + +END Subroutine SeaSt_Interp_Setup + +!==================================================================================================== +!> This routine interpolates a 4-d dataset. +!! This method is described here: http://rjwagner49.com/Mathematics/Interpolation.pdf +FUNCTION SeaSt_Interp_4D( pKinXX, m, ErrStat, ErrMsg ) + + ! I/O variables + + real(SiKi), intent(in ) :: pKinXX(0:,:,:,:) + TYPE(SeaSt_Interp_MiscVarType), INTENT(IN ) :: m !< Parameters + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PointSetup' + Real(SiKi) :: SeaSt_Interp_4D + ! Local variables + + REAL(SiKi) :: u(16) ! size 2^n + + + SeaSt_Interp_4D = 0.0_SiKi + ErrStat = ErrID_None + ErrMsg = "" + + !------------------------------------------------------------------------------------------------- + ! interpolate + !------------------------------------------------------------------------------------------------- + + u( 1) = pKinXX( m%Indx_Lo(1), m%Indx_Lo(2), m%Indx_Lo(3), m%Indx_Lo(4) ) + u( 2) = pKinXX( m%Indx_Lo(1), m%Indx_Lo(2), m%Indx_Lo(3), m%Indx_Hi(4) ) + u( 3) = pKinXX( m%Indx_Lo(1), m%Indx_Lo(2), m%Indx_Hi(3), m%Indx_Lo(4) ) + u( 4) = pKinXX( m%Indx_Lo(1), m%Indx_Lo(2), m%Indx_Hi(3), m%Indx_Hi(4) ) + u( 5) = pKinXX( m%Indx_Lo(1), m%Indx_Hi(2), m%Indx_Lo(3), m%Indx_Lo(4) ) + u( 6) = pKinXX( m%Indx_Lo(1), m%Indx_Hi(2), m%Indx_Lo(3), m%Indx_Hi(4) ) + u( 7) = pKinXX( m%Indx_Lo(1), m%Indx_Hi(2), m%Indx_Hi(3), m%Indx_Lo(4) ) + u( 8) = pKinXX( m%Indx_Lo(1), m%Indx_Hi(2), m%Indx_Hi(3), m%Indx_Hi(4) ) + u( 9) = pKinXX( m%Indx_Hi(1), m%Indx_Lo(2), m%Indx_Lo(3), m%Indx_Lo(4) ) + u(10) = pKinXX( m%Indx_Hi(1), m%Indx_Lo(2), m%Indx_Lo(3), m%Indx_Hi(4) ) + u(11) = pKinXX( m%Indx_Hi(1), m%Indx_Lo(2), m%Indx_Hi(3), m%Indx_Lo(4) ) + u(12) = pKinXX( m%Indx_Hi(1), m%Indx_Lo(2), m%Indx_Hi(3), m%Indx_Hi(4) ) + u(13) = pKinXX( m%Indx_Hi(1), m%Indx_Hi(2), m%Indx_Lo(3), m%Indx_Lo(4) ) + u(14) = pKinXX( m%Indx_Hi(1), m%Indx_Hi(2), m%Indx_Lo(3), m%Indx_Hi(4) ) + u(15) = pKinXX( m%Indx_Hi(1), m%Indx_Hi(2), m%Indx_Hi(3), m%Indx_Lo(4) ) + u(16) = pKinXX( m%Indx_Hi(1), m%Indx_Hi(2), m%Indx_Hi(3), m%Indx_Hi(4) ) + + SeaSt_Interp_4D = SUM ( m%N4D * u ) + +END FUNCTION SeaSt_Interp_4D + +!==================================================================================================== +!> This routine interpolates a 4-d dataset. +!! This method is described here: http://rjwagner49.com/Mathematics/Interpolation.pdf +FUNCTION SeaSt_Interp_4D_Vec( pKinXX, m, ErrStat, ErrMsg ) + + ! I/O variables + + real(SiKi), intent(in ) :: pKinXX(0:,:,:,:,:) + TYPE(SeaSt_Interp_MiscVarType), INTENT(IN ) :: m !< Parameters + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PointSetup' + Real(SiKi) :: SeaSt_Interp_4D_Vec(3) + ! Local variables + + REAL(SiKi) :: u(16) ! size 2^n + integer(IntKi) :: iDir + + SeaSt_Interp_4D_Vec = 0.0_SiKi + ErrStat = ErrID_None + ErrMsg = "" + + !------------------------------------------------------------------------------------------------- + ! interpolate + !------------------------------------------------------------------------------------------------- + do iDir = 1,3 + u( 1) = pKinXX( m%Indx_Lo(1), m%Indx_Lo(2), m%Indx_Lo(3), m%Indx_Lo(4), iDir ) + u( 2) = pKinXX( m%Indx_Lo(1), m%Indx_Lo(2), m%Indx_Lo(3), m%Indx_Hi(4), iDir ) + u( 3) = pKinXX( m%Indx_Lo(1), m%Indx_Lo(2), m%Indx_Hi(3), m%Indx_Lo(4), iDir ) + u( 4) = pKinXX( m%Indx_Lo(1), m%Indx_Lo(2), m%Indx_Hi(3), m%Indx_Hi(4), iDir ) + u( 5) = pKinXX( m%Indx_Lo(1), m%Indx_Hi(2), m%Indx_Lo(3), m%Indx_Lo(4), iDir ) + u( 6) = pKinXX( m%Indx_Lo(1), m%Indx_Hi(2), m%Indx_Lo(3), m%Indx_Hi(4), iDir ) + u( 7) = pKinXX( m%Indx_Lo(1), m%Indx_Hi(2), m%Indx_Hi(3), m%Indx_Lo(4), iDir ) + u( 8) = pKinXX( m%Indx_Lo(1), m%Indx_Hi(2), m%Indx_Hi(3), m%Indx_Hi(4), iDir ) + u( 9) = pKinXX( m%Indx_Hi(1), m%Indx_Lo(2), m%Indx_Lo(3), m%Indx_Lo(4), iDir ) + u(10) = pKinXX( m%Indx_Hi(1), m%Indx_Lo(2), m%Indx_Lo(3), m%Indx_Hi(4), iDir ) + u(11) = pKinXX( m%Indx_Hi(1), m%Indx_Lo(2), m%Indx_Hi(3), m%Indx_Lo(4), iDir ) + u(12) = pKinXX( m%Indx_Hi(1), m%Indx_Lo(2), m%Indx_Hi(3), m%Indx_Hi(4), iDir ) + u(13) = pKinXX( m%Indx_Hi(1), m%Indx_Hi(2), m%Indx_Lo(3), m%Indx_Lo(4), iDir ) + u(14) = pKinXX( m%Indx_Hi(1), m%Indx_Hi(2), m%Indx_Lo(3), m%Indx_Hi(4), iDir ) + u(15) = pKinXX( m%Indx_Hi(1), m%Indx_Hi(2), m%Indx_Hi(3), m%Indx_Lo(4), iDir ) + u(16) = pKinXX( m%Indx_Hi(1), m%Indx_Hi(2), m%Indx_Hi(3), m%Indx_Hi(4), iDir ) + + SeaSt_Interp_4D_Vec(iDir) = SUM ( m%N4D * u ) + end do +END FUNCTION SeaSt_Interp_4D_Vec + + !==================================================================================================== +!> This routine interpolates a 3-d dataset with index 1 = time (zero-based indexing), 2 = x-coordinate (1-based indexing), 3 = y-coordinate (1-based indexing) +!! This method is described here: http://rjwagner49.com/Mathematics/Interpolation.pdf +FUNCTION SeaSt_Interp_3D( Time, Position, pKinXX, p, FirstWarn_Clamp, ErrStat, ErrMsg ) + + ! I/O variables + REAL(DbKi), INTENT(IN ) :: Time !< time from the start of the simulation + REAL(ReKi), INTENT(IN ) :: Position(2) !< Array of XYZ coordinates, 3 + real(SiKi), intent(in ) :: pKinXX(0:,:,:) !< 3D Wave elevation data (SiKi for storage space reasons) + TYPE(SeaSt_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + logical, INTENT(INOUT) :: FirstWarn_Clamp !< first warning + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_3D' + Real(SiKi) :: SeaSt_Interp_3D + ! Local variables + + REAL(SiKi) :: u(8) ! size 2^n + real(ReKi) :: N3D(8) + integer(IntKi) :: Indx_Lo(3), Indx_Hi(3) + INTEGER(IntKi) :: i ! loop counter + REAL(SiKi) :: isopc(3) ! isoparametric coordinates + integer(IntKi) :: ErrStat2 + character(ErrMsgLen) :: ErrMsg2 + + SeaSt_Interp_3D = 0.0_SiKi + ErrStat = ErrID_None + ErrMsg = "" + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for time + !------------------------------------------------------------------------------------------------- + call SetTimeIndex(Time, p%delta(1), p%n(1), Indx_Lo(1), Indx_Hi(1), isopc(1), ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if time is outside the bounds + if (ErrStat >= AbortErrLev ) return + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for XY position + !------------------------------------------------------------------------------------------------- + do i=2,3 + call SetCartesianXYIndex(Position(i-1), p%pZero(i), p%delta(i), p%n(i), Indx_Lo(i), Indx_Hi(i), isopc(i), FirstWarn_Clamp, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if x,y is outside the bounds + end do + if (ErrStat >= AbortErrLev ) return + + + + N3D(1) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(2) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(3) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(4) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(5) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(6) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(7) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(8) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D = N3D / REAL( SIZE(N3D), ReKi ) ! normalize + + !------------------------------------------------------------------------------------------------- + ! interpolate + !------------------------------------------------------------------------------------------------- + + u(1) = pKinXX( Indx_Hi(1), Indx_Lo(2), Indx_Lo(3) ) + u(2) = pKinXX( Indx_Hi(1), Indx_Hi(2), Indx_Lo(3) ) + u(3) = pKinXX( Indx_Lo(1), Indx_Hi(2), Indx_Lo(3) ) + u(4) = pKinXX( Indx_Lo(1), Indx_Lo(2), Indx_Lo(3) ) + u(5) = pKinXX( Indx_Hi(1), Indx_Lo(2), Indx_Hi(3) ) + u(6) = pKinXX( Indx_Hi(1), Indx_Hi(2), Indx_Hi(3) ) + u(7) = pKinXX( Indx_Lo(1), Indx_Hi(2), Indx_Hi(3) ) + u(8) = pKinXX( Indx_Lo(1), Indx_Lo(2), Indx_Hi(3) ) + + SeaSt_Interp_3D = SUM ( N3D * u ) + +END FUNCTION SeaSt_Interp_3D + +FUNCTION SeaSt_Interp_3D_VEC ( Time, Position, pKinXX, p, FirstWarn_Clamp, ErrStat, ErrMsg ) + ! I/O variables + REAL(DbKi), INTENT(IN ) :: Time !< time from the start of the simulation + REAL(ReKi), INTENT(IN ) :: Position(2) !< Array of XYZ coordinates, 3 + real(SiKi), INTENT(in ) :: pKinXX(0:,:,:,:) !< 3D Wave excitation data (SiKi for storage space reasons) + TYPE(SeaSt_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + LOGICAL, INTENT(INOUT) :: FirstWarn_Clamp !< first warning + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_3D_VEC' + Real(SiKi) :: SeaSt_Interp_3D_VEC(3) + ! Local variables + + REAL(SiKi) :: u(8) ! size 2^n + real(ReKi) :: N3D(8) + integer(IntKi) :: Indx_Lo(3), Indx_Hi(3) + INTEGER(IntKi) :: i ! loop counter + REAL(SiKi) :: isopc(3) ! isoparametric coordinates + integer(IntKi) :: ErrStat2 + character(ErrMsgLen) :: ErrMsg2 + + SeaSt_Interp_3D_VEC = 0.0_SiKi + ErrStat = ErrID_None + ErrMsg = "" + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for time + !------------------------------------------------------------------------------------------------- + call SetTimeIndex(Time, p%delta(1), p%n(1), Indx_Lo(1), Indx_Hi(1), isopc(1), ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if time is outside the bounds + if (ErrStat >= AbortErrLev ) return + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for XY position + !------------------------------------------------------------------------------------------------- + do i=2,3 + call SetCartesianXYIndex(Position(i-1), p%pZero(i), p%delta(i), p%n(i), Indx_Lo(i), Indx_Hi(i), isopc(i), FirstWarn_Clamp, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if x,y is outside the bounds + end do + if (ErrStat >= AbortErrLev ) return + + + + N3D(1) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(2) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(3) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(4) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(5) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(6) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(7) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(8) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D = N3D / REAL( SIZE(N3D), ReKi ) ! normalize + + !------------------------------------------------------------------------------------------------- + ! interpolate + !------------------------------------------------------------------------------------------------- + do i = 1,3 + u(1) = pKinXX( Indx_Hi(1), Indx_Lo(2), Indx_Lo(3), i ) + u(2) = pKinXX( Indx_Hi(1), Indx_Hi(2), Indx_Lo(3), i ) + u(3) = pKinXX( Indx_Lo(1), Indx_Hi(2), Indx_Lo(3), i ) + u(4) = pKinXX( Indx_Lo(1), Indx_Lo(2), Indx_Lo(3), i ) + u(5) = pKinXX( Indx_Hi(1), Indx_Lo(2), Indx_Hi(3), i ) + u(6) = pKinXX( Indx_Hi(1), Indx_Hi(2), Indx_Hi(3), i ) + u(7) = pKinXX( Indx_Lo(1), Indx_Hi(2), Indx_Hi(3), i ) + u(8) = pKinXX( Indx_Lo(1), Indx_Lo(2), Indx_Hi(3), i ) + + SeaSt_Interp_3D_VEC(i) = SUM ( N3D * u ) + end do +END FUNCTION SeaSt_Interp_3D_VEC + +FUNCTION SeaSt_Interp_3D_VEC6 ( Time, Position, pKinXX, p, FirstWarn_Clamp, ErrStat, ErrMsg ) + ! I/O variables + REAL(DbKi), INTENT(IN ) :: Time !< time from the start of the simulation + REAL(ReKi), INTENT(IN ) :: Position(2) !< Array of XYZ coordinates, 3 + real(SiKi), INTENT(in ) :: pKinXX(0:,:,:,:) !< 3D Wave excitation data (SiKi for storage space reasons) + TYPE(SeaSt_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + LOGICAL, INTENT(INOUT) :: FirstWarn_Clamp !< first warning + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_3D' + Real(SiKi) :: SeaSt_Interp_3D_VEC6(6) + ! Local variables + + REAL(SiKi) :: u(8) ! size 2^n + real(ReKi) :: N3D(8) + integer(IntKi) :: Indx_Lo(3), Indx_Hi(3) + INTEGER(IntKi) :: i ! loop counter + REAL(SiKi) :: isopc(3) ! isoparametric coordinates + integer(IntKi) :: ErrStat2 + character(ErrMsgLen) :: ErrMsg2 + + SeaSt_Interp_3D_VEC6 = 0.0_SiKi + ErrStat = ErrID_None + ErrMsg = "" + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for time + !------------------------------------------------------------------------------------------------- + call SetTimeIndex(Time, p%delta(1), p%n(1), Indx_Lo(1), Indx_Hi(1), isopc(1), ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if time is outside the bounds + if (ErrStat >= AbortErrLev ) return + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for XY position + !------------------------------------------------------------------------------------------------- + do i=2,3 + call SetCartesianXYIndex(Position(i-1), p%pZero(i), p%delta(i), p%n(i), Indx_Lo(i), Indx_Hi(i), isopc(i), FirstWarn_Clamp, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if x,y is outside the bounds + end do + if (ErrStat >= AbortErrLev ) return + + + + N3D(1) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(2) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(3) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(4) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi - isopc(3) ) + N3D(5) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(6) = ( 1.0_ReKi + isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(7) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi + isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D(8) = ( 1.0_ReKi - isopc(1) )*( 1.0_ReKi - isopc(2) )*( 1.0_ReKi + isopc(3) ) + N3D = N3D / REAL( SIZE(N3D), ReKi ) ! normalize + + !------------------------------------------------------------------------------------------------- + ! interpolate + !------------------------------------------------------------------------------------------------- + do i = 1,6 + u(1) = pKinXX( Indx_Hi(1), Indx_Lo(2), Indx_Lo(3), i ) + u(2) = pKinXX( Indx_Hi(1), Indx_Hi(2), Indx_Lo(3), i ) + u(3) = pKinXX( Indx_Lo(1), Indx_Hi(2), Indx_Lo(3), i ) + u(4) = pKinXX( Indx_Lo(1), Indx_Lo(2), Indx_Lo(3), i ) + u(5) = pKinXX( Indx_Hi(1), Indx_Lo(2), Indx_Hi(3), i ) + u(6) = pKinXX( Indx_Hi(1), Indx_Hi(2), Indx_Hi(3), i ) + u(7) = pKinXX( Indx_Lo(1), Indx_Hi(2), Indx_Hi(3), i ) + u(8) = pKinXX( Indx_Lo(1), Indx_Lo(2), Indx_Hi(3), i ) + + SeaSt_Interp_3D_VEC6(i) = SUM ( N3D * u ) + end do +END FUNCTION SeaSt_Interp_3D_VEC6 +!---------------------------------------------------------------------------------------------------- +!> This routine deallocates any memory in the FDext module. +SUBROUTINE SeaSt_Interp_End( ParamData, MiscVars, ErrStat, ErrMsg) + + + IMPLICIT NONE + + CHARACTER(*), PARAMETER :: RoutineName="SeaSt_Interp_End" + + + ! Passed Variables + TYPE(SeaSt_Interp_ParameterType), INTENT(INOUT) :: ParamData !< Parameters + TYPE(SeaSt_Interp_MiscVarType), INTENT(INOUT) :: MiscVars !< Misc variables for optimization (not copied in glue code) + + + ! Error Handling + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< determines if an error has been encountered + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Message about errors + + + ! Local Variables + INTEGER(IntKi) :: TmpErrStat ! temporary error status + CHARACTER(ErrMsgLen) :: TmpErrMsg ! temporary error message + + + ErrMsg = '' + ErrStat = ErrID_None + + + + ! Destroy parameter data + + CALL SeaSt_Interp_DestroyParam( ParamData, TmpErrStat, TmpErrMsg ) + CALL SetErrStat( TmpErrStat, TmpErrMsg, ErrStat, ErrMsg, RoutineName ) + + + ! Destroy the misc data + + CALL SeaSt_Interp_DestroyMisc( MiscVars, TmpErrStat, TmpErrMsg ) + CALL SetErrStat( TmpErrStat, TmpErrMsg, ErrStat, ErrMsg, RoutineName ) + + +END SUBROUTINE SeaSt_Interp_End +!==================================================================================================== +END MODULE SeaState_Interp diff --git a/modules/seastate/src/SeaState_Interp.txt b/modules/seastate/src/SeaState_Interp.txt new file mode 100644 index 0000000000..43b005aa88 --- /dev/null +++ b/modules/seastate/src/SeaState_Interp.txt @@ -0,0 +1,42 @@ +################################################################################################################################### +# Registry for SeaState_Interp, creates MODULE SeaState_Interp_Types +# Module SeaState_Interp_Types contains all of the user-defined types needed in SeaState_Interp. It also contains copy, destroy, pack, and +# unpack routines associated with each defined data types. +################################################################################################################################### +# Entries are of the form +# keyword +################################################################################################################################### + +include Registry_NWTC_Library.txt + + +######################### + +typedef SeaState_Interp/SeaSt_Interp InitInputType IntKi n 4 - - "number of grid points in the t, x, y, and z directions" - +typedef ^ InitInputType ReKi delta 4 - - "size between 2 consecutive grid points in each grid direction (time, x, y, z)" "s,m,m,m" +typedef ^ InitInputType ReKi pZero 4 - - "fixed position of the time-X-Y-Z grid (i.e., XYZ coordinates of m%V(:,1,1,1,:))" "m" +typedef ^ InitInputType ReKi Z_Depth - - - "grid depth" m + +# Init Output +typedef ^ InitOutputType ProgDesc Ver - - - "Version information of this submodule" - + + +# ..... Misc/Optimization variables................................................................................................. +# Define any data that are used only for efficiency purposes (these variables are not associated with time): +# e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc. +typedef ^ MiscVarType SiKi N3D {8} - - "this is the 3-d velocity field for each wind component [{uvw},nx,ny,nz,nt]; it is stored as a miscVar instead of an input so that we don't have 4 copies of a very large field" - +typedef ^ MiscVarType SiKi N4D {16} - - "this is the 4-d velocity field for each wind component [{uvw},nx,ny,nz,nt]; it is stored as a miscVar instead of an input so that we don't have 4 copies of a very large field" - +typedef ^ MiscVarType integer Indx_Lo 4 - - "this is the 4-d velocity field for each wind component [{uvw},nx,ny,nz,nt]; it is stored as a miscVar instead of an input so that we don't have 4 copies of a very large field" - +typedef ^ MiscVarType integer Indx_Hi 4 - - "this is the 4-d velocity field for each wind component [{uvw},nx,ny,nz,nt]; it is stored as a miscVar instead of an input so that we don't have 4 copies of a very large field" - +typedef ^ MiscVarType logical FirstWarn_Clamp - .true. - "used to avoid too many 'Position has been clamped to the grid boundary' warning messages " - + +# ..... Parameters ................................................................................................................ +# Define parameters here: +# Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states: +typedef ^ ParameterType IntKi n 4 - - "number of evenly-spaced grid points in the t, x, y, and z directions" - +typedef ^ ParameterType ReKi delta 4 - - "size between 2 consecutive grid points in each grid direction" "s,m,m,m" +typedef ^ ParameterType ReKi pZero 4 - - "fixed position of the XYZ grid (i.e., XYZ coordinates of m%V(:,1,1,1,:))" "m" +typedef ^ ParameterType ReKi Z_Depth - - - "grid depth" m + + + diff --git a/modules/seastate/src/SeaState_Interp_Types.f90 b/modules/seastate/src/SeaState_Interp_Types.f90 new file mode 100644 index 0000000000..e7906d9d58 --- /dev/null +++ b/modules/seastate/src/SeaState_Interp_Types.f90 @@ -0,0 +1,827 @@ +!STARTOFREGISTRYGENERATEDFILE 'SeaState_Interp_Types.f90' +! +! WARNING This file is generated automatically by the FAST registry. +! Do not edit. Your changes to this file will be lost. +! +! FAST Registry +!********************************************************************************************************************************* +! SeaState_Interp_Types +!................................................................................................................................. +! This file is part of SeaState_Interp. +! +! Copyright (C) 2012-2016 National Renewable Energy Laboratory +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +! +! W A R N I N G : This file was automatically generated from the FAST registry. Changes made to this file may be lost. +! +!********************************************************************************************************************************* +!> This module contains the user-defined types needed in SeaState_Interp. It also contains copy, destroy, pack, and +!! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. +MODULE SeaState_Interp_Types +!--------------------------------------------------------------------------------------------------------------------------------- +USE NWTC_Library +IMPLICIT NONE +! ========= SeaSt_Interp_InitInputType ======= + TYPE, PUBLIC :: SeaSt_Interp_InitInputType + INTEGER(IntKi) , DIMENSION(1:4) :: n !< number of grid points in the t, x, y, and z directions [-] + REAL(ReKi) , DIMENSION(1:4) :: delta !< size between 2 consecutive grid points in each grid direction (time, x, y, z) [s,m,m,m] + REAL(ReKi) , DIMENSION(1:4) :: pZero !< fixed position of the time-X-Y-Z grid (i.e., XYZ coordinates of m%V(:,1,1,1,:)) [m] + REAL(ReKi) :: Z_Depth !< grid depth [m] + END TYPE SeaSt_Interp_InitInputType +! ======================= +! ========= SeaSt_Interp_InitOutputType ======= + TYPE, PUBLIC :: SeaSt_Interp_InitOutputType + TYPE(ProgDesc) :: Ver !< Version information of this submodule [-] + END TYPE SeaSt_Interp_InitOutputType +! ======================= +! ========= SeaSt_Interp_MiscVarType ======= + TYPE, PUBLIC :: SeaSt_Interp_MiscVarType + REAL(SiKi) , DIMENSION(1:8) :: N3D !< this is the 3-d velocity field for each wind component [{uvw},nx,ny,nz,nt]; it is stored as a miscVar instead of an input so that we don't have 4 copies of a very large field [-] + REAL(SiKi) , DIMENSION(1:16) :: N4D !< this is the 4-d velocity field for each wind component [{uvw},nx,ny,nz,nt]; it is stored as a miscVar instead of an input so that we don't have 4 copies of a very large field [-] + INTEGER(IntKi) , DIMENSION(1:4) :: Indx_Lo !< this is the 4-d velocity field for each wind component [{uvw},nx,ny,nz,nt]; it is stored as a miscVar instead of an input so that we don't have 4 copies of a very large field [-] + INTEGER(IntKi) , DIMENSION(1:4) :: Indx_Hi !< this is the 4-d velocity field for each wind component [{uvw},nx,ny,nz,nt]; it is stored as a miscVar instead of an input so that we don't have 4 copies of a very large field [-] + LOGICAL :: FirstWarn_Clamp = .true. !< used to avoid too many 'Position has been clamped to the grid boundary' warning messages [-] + END TYPE SeaSt_Interp_MiscVarType +! ======================= +! ========= SeaSt_Interp_ParameterType ======= + TYPE, PUBLIC :: SeaSt_Interp_ParameterType + INTEGER(IntKi) , DIMENSION(1:4) :: n !< number of evenly-spaced grid points in the t, x, y, and z directions [-] + REAL(ReKi) , DIMENSION(1:4) :: delta !< size between 2 consecutive grid points in each grid direction [s,m,m,m] + REAL(ReKi) , DIMENSION(1:4) :: pZero !< fixed position of the XYZ grid (i.e., XYZ coordinates of m%V(:,1,1,1,:)) [m] + REAL(ReKi) :: Z_Depth !< grid depth [m] + END TYPE SeaSt_Interp_ParameterType +! ======================= +CONTAINS + SUBROUTINE SeaSt_Interp_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_Interp_InitInputType), INTENT(IN) :: SrcInitInputData + TYPE(SeaSt_Interp_InitInputType), INTENT(INOUT) :: DstInitInputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_CopyInitInput' +! + ErrStat = ErrID_None + ErrMsg = "" + DstInitInputData%n = SrcInitInputData%n + DstInitInputData%delta = SrcInitInputData%delta + DstInitInputData%pZero = SrcInitInputData%pZero + DstInitInputData%Z_Depth = SrcInitInputData%Z_Depth + END SUBROUTINE SeaSt_Interp_CopyInitInput + + SUBROUTINE SeaSt_Interp_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_Interp_InitInputType), INTENT(INOUT) :: InitInputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_DestroyInitInput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE SeaSt_Interp_DestroyInitInput + + SUBROUTINE SeaSt_Interp_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_Interp_InitInputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PackInitInput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + SIZE(InData%n) ! n + Re_BufSz = Re_BufSz + SIZE(InData%delta) ! delta + Re_BufSz = Re_BufSz + SIZE(InData%pZero) ! pZero + Re_BufSz = Re_BufSz + 1 ! Z_Depth + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DO i1 = LBOUND(InData%n,1), UBOUND(InData%n,1) + IntKiBuf(Int_Xferred) = InData%n(i1) + Int_Xferred = Int_Xferred + 1 + END DO + DO i1 = LBOUND(InData%delta,1), UBOUND(InData%delta,1) + ReKiBuf(Re_Xferred) = InData%delta(i1) + Re_Xferred = Re_Xferred + 1 + END DO + DO i1 = LBOUND(InData%pZero,1), UBOUND(InData%pZero,1) + ReKiBuf(Re_Xferred) = InData%pZero(i1) + Re_Xferred = Re_Xferred + 1 + END DO + ReKiBuf(Re_Xferred) = InData%Z_Depth + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE SeaSt_Interp_PackInitInput + + SUBROUTINE SeaSt_Interp_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_Interp_InitInputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_UnPackInitInput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + i1_l = LBOUND(OutData%n,1) + i1_u = UBOUND(OutData%n,1) + DO i1 = LBOUND(OutData%n,1), UBOUND(OutData%n,1) + OutData%n(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + i1_l = LBOUND(OutData%delta,1) + i1_u = UBOUND(OutData%delta,1) + DO i1 = LBOUND(OutData%delta,1), UBOUND(OutData%delta,1) + OutData%delta(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + i1_l = LBOUND(OutData%pZero,1) + i1_u = UBOUND(OutData%pZero,1) + DO i1 = LBOUND(OutData%pZero,1), UBOUND(OutData%pZero,1) + OutData%pZero(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + OutData%Z_Depth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE SeaSt_Interp_UnPackInitInput + + SUBROUTINE SeaSt_Interp_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_Interp_InitOutputType), INTENT(IN) :: SrcInitOutputData + TYPE(SeaSt_Interp_InitOutputType), INTENT(INOUT) :: DstInitOutputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_CopyInitOutput' +! + ErrStat = ErrID_None + ErrMsg = "" + CALL NWTC_Library_Copyprogdesc( SrcInitOutputData%Ver, DstInitOutputData%Ver, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaSt_Interp_CopyInitOutput + + SUBROUTINE SeaSt_Interp_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_Interp_InitOutputType), INTENT(INOUT) :: InitOutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_DestroyInitOutput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + CALL NWTC_Library_Destroyprogdesc( InitOutputData%Ver, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + END SUBROUTINE SeaSt_Interp_DestroyInitOutput + + SUBROUTINE SeaSt_Interp_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_Interp_InitOutputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PackInitOutput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! Ver: size of buffers for each call to pack subtype + CALL NWTC_Library_Packprogdesc( Re_Buf, Db_Buf, Int_Buf, InData%Ver, ErrStat2, ErrMsg2, .TRUE. ) ! Ver + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Ver + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Ver + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Ver + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + CALL NWTC_Library_Packprogdesc( Re_Buf, Db_Buf, Int_Buf, InData%Ver, ErrStat2, ErrMsg2, OnlySize ) ! Ver + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END SUBROUTINE SeaSt_Interp_PackInitOutput + + SUBROUTINE SeaSt_Interp_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_Interp_InitOutputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_UnPackInitOutput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL NWTC_Library_Unpackprogdesc( Re_Buf, Db_Buf, Int_Buf, OutData%Ver, ErrStat2, ErrMsg2 ) ! Ver + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END SUBROUTINE SeaSt_Interp_UnPackInitOutput + + SUBROUTINE SeaSt_Interp_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_Interp_MiscVarType), INTENT(IN) :: SrcMiscData + TYPE(SeaSt_Interp_MiscVarType), INTENT(INOUT) :: DstMiscData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_CopyMisc' +! + ErrStat = ErrID_None + ErrMsg = "" + DstMiscData%N3D = SrcMiscData%N3D + DstMiscData%N4D = SrcMiscData%N4D + DstMiscData%Indx_Lo = SrcMiscData%Indx_Lo + DstMiscData%Indx_Hi = SrcMiscData%Indx_Hi + DstMiscData%FirstWarn_Clamp = SrcMiscData%FirstWarn_Clamp + END SUBROUTINE SeaSt_Interp_CopyMisc + + SUBROUTINE SeaSt_Interp_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_Interp_MiscVarType), INTENT(INOUT) :: MiscData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_DestroyMisc' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE SeaSt_Interp_DestroyMisc + + SUBROUTINE SeaSt_Interp_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_Interp_MiscVarType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PackMisc' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Re_BufSz = Re_BufSz + SIZE(InData%N3D) ! N3D + Re_BufSz = Re_BufSz + SIZE(InData%N4D) ! N4D + Int_BufSz = Int_BufSz + SIZE(InData%Indx_Lo) ! Indx_Lo + Int_BufSz = Int_BufSz + SIZE(InData%Indx_Hi) ! Indx_Hi + Int_BufSz = Int_BufSz + 1 ! FirstWarn_Clamp + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DO i1 = LBOUND(InData%N3D,1), UBOUND(InData%N3D,1) + ReKiBuf(Re_Xferred) = InData%N3D(i1) + Re_Xferred = Re_Xferred + 1 + END DO + DO i1 = LBOUND(InData%N4D,1), UBOUND(InData%N4D,1) + ReKiBuf(Re_Xferred) = InData%N4D(i1) + Re_Xferred = Re_Xferred + 1 + END DO + DO i1 = LBOUND(InData%Indx_Lo,1), UBOUND(InData%Indx_Lo,1) + IntKiBuf(Int_Xferred) = InData%Indx_Lo(i1) + Int_Xferred = Int_Xferred + 1 + END DO + DO i1 = LBOUND(InData%Indx_Hi,1), UBOUND(InData%Indx_Hi,1) + IntKiBuf(Int_Xferred) = InData%Indx_Hi(i1) + Int_Xferred = Int_Xferred + 1 + END DO + IntKiBuf(Int_Xferred) = TRANSFER(InData%FirstWarn_Clamp, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE SeaSt_Interp_PackMisc + + SUBROUTINE SeaSt_Interp_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_Interp_MiscVarType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_UnPackMisc' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + i1_l = LBOUND(OutData%N3D,1) + i1_u = UBOUND(OutData%N3D,1) + DO i1 = LBOUND(OutData%N3D,1), UBOUND(OutData%N3D,1) + OutData%N3D(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + i1_l = LBOUND(OutData%N4D,1) + i1_u = UBOUND(OutData%N4D,1) + DO i1 = LBOUND(OutData%N4D,1), UBOUND(OutData%N4D,1) + OutData%N4D(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + i1_l = LBOUND(OutData%Indx_Lo,1) + i1_u = UBOUND(OutData%Indx_Lo,1) + DO i1 = LBOUND(OutData%Indx_Lo,1), UBOUND(OutData%Indx_Lo,1) + OutData%Indx_Lo(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + i1_l = LBOUND(OutData%Indx_Hi,1) + i1_u = UBOUND(OutData%Indx_Hi,1) + DO i1 = LBOUND(OutData%Indx_Hi,1), UBOUND(OutData%Indx_Hi,1) + OutData%Indx_Hi(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + OutData%FirstWarn_Clamp = TRANSFER(IntKiBuf(Int_Xferred), OutData%FirstWarn_Clamp) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE SeaSt_Interp_UnPackMisc + + SUBROUTINE SeaSt_Interp_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_Interp_ParameterType), INTENT(IN) :: SrcParamData + TYPE(SeaSt_Interp_ParameterType), INTENT(INOUT) :: DstParamData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_CopyParam' +! + ErrStat = ErrID_None + ErrMsg = "" + DstParamData%n = SrcParamData%n + DstParamData%delta = SrcParamData%delta + DstParamData%pZero = SrcParamData%pZero + DstParamData%Z_Depth = SrcParamData%Z_Depth + END SUBROUTINE SeaSt_Interp_CopyParam + + SUBROUTINE SeaSt_Interp_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_Interp_ParameterType), INTENT(INOUT) :: ParamData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_DestroyParam' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE SeaSt_Interp_DestroyParam + + SUBROUTINE SeaSt_Interp_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_Interp_ParameterType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PackParam' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + SIZE(InData%n) ! n + Re_BufSz = Re_BufSz + SIZE(InData%delta) ! delta + Re_BufSz = Re_BufSz + SIZE(InData%pZero) ! pZero + Re_BufSz = Re_BufSz + 1 ! Z_Depth + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DO i1 = LBOUND(InData%n,1), UBOUND(InData%n,1) + IntKiBuf(Int_Xferred) = InData%n(i1) + Int_Xferred = Int_Xferred + 1 + END DO + DO i1 = LBOUND(InData%delta,1), UBOUND(InData%delta,1) + ReKiBuf(Re_Xferred) = InData%delta(i1) + Re_Xferred = Re_Xferred + 1 + END DO + DO i1 = LBOUND(InData%pZero,1), UBOUND(InData%pZero,1) + ReKiBuf(Re_Xferred) = InData%pZero(i1) + Re_Xferred = Re_Xferred + 1 + END DO + ReKiBuf(Re_Xferred) = InData%Z_Depth + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE SeaSt_Interp_PackParam + + SUBROUTINE SeaSt_Interp_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_Interp_ParameterType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_UnPackParam' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + i1_l = LBOUND(OutData%n,1) + i1_u = UBOUND(OutData%n,1) + DO i1 = LBOUND(OutData%n,1), UBOUND(OutData%n,1) + OutData%n(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + i1_l = LBOUND(OutData%delta,1) + i1_u = UBOUND(OutData%delta,1) + DO i1 = LBOUND(OutData%delta,1), UBOUND(OutData%delta,1) + OutData%delta(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + i1_l = LBOUND(OutData%pZero,1) + i1_u = UBOUND(OutData%pZero,1) + DO i1 = LBOUND(OutData%pZero,1), UBOUND(OutData%pZero,1) + OutData%pZero(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + OutData%Z_Depth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE SeaSt_Interp_UnPackParam + +END MODULE SeaState_Interp_Types +!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/SeaState_Output.f90 b/modules/seastate/src/SeaState_Output.f90 new file mode 100644 index 0000000000..5755317c60 --- /dev/null +++ b/modules/seastate/src/SeaState_Output.f90 @@ -0,0 +1,1125 @@ +!********************************************************************************************************************************** +! LICENSING +! Copyright (C) 2013-2015 National Renewable Energy Laboratory +! +! This file is part of SeaState. +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +!********************************************************************************************************************************** +MODULE SeaState_Output + + ! This MODULE stores variables used for output. + + USE NWTC_Library + USE SeaState_Types + USE Waves ! for WaveNumber + USE VersionInfo + + IMPLICIT NONE + + PRIVATE + + TYPE(ProgDesc), PUBLIC, PARAMETER :: SeaSt_ProgDesc = ProgDesc( 'SeaState', '', '' ) + +! =================================================================================================== +! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m" +! 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 07-Sep-2022 15:30:45. + + + ! Indices for computing output channels: + ! NOTES: + ! (1) These parameters are in the order stored in "OutListParameters.xlsx" + ! (2) Array AllOuts() must be dimensioned to the value of the largest output parameter + + ! Time: + + INTEGER(IntKi), PARAMETER :: Time = 0 + + + ! Wave Elevations: + + INTEGER(IntKi), PARAMETER :: Wave1Elev = 1 + INTEGER(IntKi), PARAMETER :: Wave2Elev = 2 + INTEGER(IntKi), PARAMETER :: Wave3Elev = 3 + INTEGER(IntKi), PARAMETER :: Wave4Elev = 4 + INTEGER(IntKi), PARAMETER :: Wave5Elev = 5 + INTEGER(IntKi), PARAMETER :: Wave6Elev = 6 + INTEGER(IntKi), PARAMETER :: Wave7Elev = 7 + INTEGER(IntKi), PARAMETER :: Wave8Elev = 8 + INTEGER(IntKi), PARAMETER :: Wave9Elev = 9 + INTEGER(IntKi), PARAMETER :: Wave1Elv1 = 10 + INTEGER(IntKi), PARAMETER :: Wave2Elv1 = 11 + INTEGER(IntKi), PARAMETER :: Wave3Elv1 = 12 + INTEGER(IntKi), PARAMETER :: Wave4Elv1 = 13 + INTEGER(IntKi), PARAMETER :: Wave5Elv1 = 14 + INTEGER(IntKi), PARAMETER :: Wave6Elv1 = 15 + INTEGER(IntKi), PARAMETER :: Wave7Elv1 = 16 + INTEGER(IntKi), PARAMETER :: Wave8Elv1 = 17 + INTEGER(IntKi), PARAMETER :: Wave9Elv1 = 18 + INTEGER(IntKi), PARAMETER :: Wave1Elv2 = 19 + INTEGER(IntKi), PARAMETER :: Wave2Elv2 = 20 + INTEGER(IntKi), PARAMETER :: Wave3Elv2 = 21 + INTEGER(IntKi), PARAMETER :: Wave4Elv2 = 22 + INTEGER(IntKi), PARAMETER :: Wave5Elv2 = 23 + INTEGER(IntKi), PARAMETER :: Wave6Elv2 = 24 + INTEGER(IntKi), PARAMETER :: Wave7Elv2 = 25 + INTEGER(IntKi), PARAMETER :: Wave8Elv2 = 26 + INTEGER(IntKi), PARAMETER :: Wave9Elv2 = 27 + + + ! Wave Kinematics: + + INTEGER(IntKi), PARAMETER :: FVel1xi = 28 + INTEGER(IntKi), PARAMETER :: FVel2xi = 29 + INTEGER(IntKi), PARAMETER :: FVel3xi = 30 + INTEGER(IntKi), PARAMETER :: FVel4xi = 31 + INTEGER(IntKi), PARAMETER :: FVel5xi = 32 + INTEGER(IntKi), PARAMETER :: FVel6xi = 33 + INTEGER(IntKi), PARAMETER :: FVel7xi = 34 + INTEGER(IntKi), PARAMETER :: FVel8xi = 35 + INTEGER(IntKi), PARAMETER :: FVel9xi = 36 + INTEGER(IntKi), PARAMETER :: FVel1yi = 37 + INTEGER(IntKi), PARAMETER :: FVel2yi = 38 + INTEGER(IntKi), PARAMETER :: FVel3yi = 39 + INTEGER(IntKi), PARAMETER :: FVel4yi = 40 + INTEGER(IntKi), PARAMETER :: FVel5yi = 41 + INTEGER(IntKi), PARAMETER :: FVel6yi = 42 + INTEGER(IntKi), PARAMETER :: FVel7yi = 43 + INTEGER(IntKi), PARAMETER :: FVel8yi = 44 + INTEGER(IntKi), PARAMETER :: FVel9yi = 45 + INTEGER(IntKi), PARAMETER :: FVel1zi = 46 + INTEGER(IntKi), PARAMETER :: FVel2zi = 47 + INTEGER(IntKi), PARAMETER :: FVel3zi = 48 + INTEGER(IntKi), PARAMETER :: FVel4zi = 49 + INTEGER(IntKi), PARAMETER :: FVel5zi = 50 + INTEGER(IntKi), PARAMETER :: FVel6zi = 51 + INTEGER(IntKi), PARAMETER :: FVel7zi = 52 + INTEGER(IntKi), PARAMETER :: FVel8zi = 53 + INTEGER(IntKi), PARAMETER :: FVel9zi = 54 + INTEGER(IntKi), PARAMETER :: FAcc1xi = 55 + INTEGER(IntKi), PARAMETER :: FAcc2xi = 56 + INTEGER(IntKi), PARAMETER :: FAcc3xi = 57 + INTEGER(IntKi), PARAMETER :: FAcc4xi = 58 + INTEGER(IntKi), PARAMETER :: FAcc5xi = 59 + INTEGER(IntKi), PARAMETER :: FAcc6xi = 60 + INTEGER(IntKi), PARAMETER :: FAcc7xi = 61 + INTEGER(IntKi), PARAMETER :: FAcc8xi = 62 + INTEGER(IntKi), PARAMETER :: FAcc9xi = 63 + INTEGER(IntKi), PARAMETER :: FAcc1yi = 64 + INTEGER(IntKi), PARAMETER :: FAcc2yi = 65 + INTEGER(IntKi), PARAMETER :: FAcc3yi = 66 + INTEGER(IntKi), PARAMETER :: FAcc4yi = 67 + INTEGER(IntKi), PARAMETER :: FAcc5yi = 68 + INTEGER(IntKi), PARAMETER :: FAcc6yi = 69 + INTEGER(IntKi), PARAMETER :: FAcc7yi = 70 + INTEGER(IntKi), PARAMETER :: FAcc8yi = 71 + INTEGER(IntKi), PARAMETER :: FAcc9yi = 72 + INTEGER(IntKi), PARAMETER :: FAcc1zi = 73 + INTEGER(IntKi), PARAMETER :: FAcc2zi = 74 + INTEGER(IntKi), PARAMETER :: FAcc3zi = 75 + INTEGER(IntKi), PARAMETER :: FAcc4zi = 76 + INTEGER(IntKi), PARAMETER :: FAcc5zi = 77 + INTEGER(IntKi), PARAMETER :: FAcc6zi = 78 + INTEGER(IntKi), PARAMETER :: FAcc7zi = 79 + INTEGER(IntKi), PARAMETER :: FAcc8zi = 80 + INTEGER(IntKi), PARAMETER :: FAcc9zi = 81 + INTEGER(IntKi), PARAMETER :: FDynP1 = 82 + INTEGER(IntKi), PARAMETER :: FDynP2 = 83 + INTEGER(IntKi), PARAMETER :: FDynP3 = 84 + INTEGER(IntKi), PARAMETER :: FDynP4 = 85 + INTEGER(IntKi), PARAMETER :: FDynP5 = 86 + INTEGER(IntKi), PARAMETER :: FDynP6 = 87 + INTEGER(IntKi), PARAMETER :: FDynP7 = 88 + INTEGER(IntKi), PARAMETER :: FDynP8 = 89 + INTEGER(IntKi), PARAMETER :: FDynP9 = 90 + INTEGER(IntKi), PARAMETER :: FAccMCF1xi = 91 + INTEGER(IntKi), PARAMETER :: FAccMCF2xi = 92 + INTEGER(IntKi), PARAMETER :: FAccMCF3xi = 93 + INTEGER(IntKi), PARAMETER :: FAccMCF4xi = 94 + INTEGER(IntKi), PARAMETER :: FAccMCF5xi = 95 + INTEGER(IntKi), PARAMETER :: FAccMCF6xi = 96 + INTEGER(IntKi), PARAMETER :: FAccMCF7xi = 97 + INTEGER(IntKi), PARAMETER :: FAccMCF8xi = 98 + INTEGER(IntKi), PARAMETER :: FAccMCF9xi = 99 + INTEGER(IntKi), PARAMETER :: FAccMCF1yi = 100 + INTEGER(IntKi), PARAMETER :: FAccMCF2yi = 101 + INTEGER(IntKi), PARAMETER :: FAccMCF3yi = 102 + INTEGER(IntKi), PARAMETER :: FAccMCF4yi = 103 + INTEGER(IntKi), PARAMETER :: FAccMCF5yi = 104 + INTEGER(IntKi), PARAMETER :: FAccMCF6yi = 105 + INTEGER(IntKi), PARAMETER :: FAccMCF7yi = 106 + INTEGER(IntKi), PARAMETER :: FAccMCF8yi = 107 + INTEGER(IntKi), PARAMETER :: FAccMCF9yi = 108 + INTEGER(IntKi), PARAMETER :: FAccMCF1zi = 109 + INTEGER(IntKi), PARAMETER :: FAccMCF2zi = 110 + INTEGER(IntKi), PARAMETER :: FAccMCF3zi = 111 + INTEGER(IntKi), PARAMETER :: FAccMCF4zi = 112 + INTEGER(IntKi), PARAMETER :: FAccMCF5zi = 113 + INTEGER(IntKi), PARAMETER :: FAccMCF6zi = 114 + INTEGER(IntKi), PARAMETER :: FAccMCF7zi = 115 + INTEGER(IntKi), PARAMETER :: FAccMCF8zi = 116 + INTEGER(IntKi), PARAMETER :: FAccMCF9zi = 117 + + + ! The maximum number of output channels which can be output by the code. + INTEGER(IntKi), PARAMETER, PUBLIC :: MaxOutPts = 117 + +!End of code generated by Matlab script Write_ChckOutLst +! =================================================================================================== + + + INTEGER, PARAMETER :: WaveElevi(9) = (/Wave1Elev,Wave2Elev,Wave3Elev,Wave4Elev,Wave5Elev,Wave6Elev,Wave7Elev,Wave8Elev,Wave9Elev/) + INTEGER, PARAMETER :: WaveElevi1(9) = (/Wave1Elv1,Wave2Elv1,Wave3Elv1,Wave4Elv1,Wave5Elv1,Wave6Elv1,Wave7Elv1,Wave8Elv1,Wave9Elv1/) + INTEGER, PARAMETER :: WaveElevi2(9) = (/Wave1Elv2,Wave2Elv2,Wave3Elv2,Wave4Elv2,Wave5Elv2,Wave6Elv2,Wave7Elv2,Wave8Elv2,Wave9Elv2/) + + INTEGER, PARAMETER :: FVel(3,9) = reshape((/FVel1xi,FVel1yi,FVel1zi, & + FVel2xi,FVel2yi,FVel2zi, & + FVel3xi,FVel3yi,FVel3zi, & + FVel4xi,FVel4yi,FVel4zi, & + FVel5xi,FVel5yi,FVel5zi, & + FVel6xi,FVel6yi,FVel6zi, & + FVel7xi,FVel7yi,FVel7zi, & + FVel8xi,FVel8yi,FVel8zi, & + FVel9xi,FVel9yi,FVel9zi/), & + (/3,9/)) + INTEGER, PARAMETER :: FAcc(3,9) = reshape((/FAcc1xi,FAcc1yi,FAcc1zi, & + FAcc2xi,FAcc2yi,FAcc2zi, & + FAcc3xi,FAcc3yi,FAcc3zi, & + FAcc4xi,FAcc4yi,FAcc4zi, & + FAcc5xi,FAcc5yi,FAcc5zi, & + FAcc6xi,FAcc6yi,FAcc6zi, & + FAcc7xi,FAcc7yi,FAcc7zi, & + FAcc8xi,FAcc8yi,FAcc8zi, & + FAcc9xi,FAcc9yi,FAcc9zi/), & + (/3,9/)) + INTEGER, PARAMETER :: FDynP(9) = (/FDynP1,FDynP2,FDynP3,FDynP4,FDynP5,FDynP6,FDynP7,FDynP8,FDynP9/) + INTEGER, PARAMETER :: FAccMCF(3,9) = reshape((/FAccMCF1xi,FAccMCF1yi,FAccMCF1zi, & + FAccMCF2xi,FAccMCF2yi,FAccMCF2zi, & + FAccMCF3xi,FAccMCF3yi,FAccMCF3zi, & + FAccMCF4xi,FAccMCF4yi,FAccMCF4zi, & + FAccMCF5xi,FAccMCF5yi,FAccMCF5zi, & + FAccMCF6xi,FAccMCF6yi,FAccMCF6zi, & + FAccMCF7xi,FAccMCF7yi,FAccMCF7zi, & + FAccMCF8xi,FAccMCF8yi,FAccMCF8zi, & + FAccMCF9xi,FAccMCF9yi,FAccMCF9zi/), & + (/3,9/)) + + + ! ..... Public Subroutines ................................................................................................... + PUBLIC :: SeaStOut_WrSummaryFile + PUBLIC :: SeaStOut_MapOutputs + PUBLIC :: SeaStOut_WriteOutputs + PUBLIC :: SeaStOut_OpenOutput + PUBLIC :: SeaStOut_CloseOutput + PUBLIC :: SeaStOut_Init + PUBLIC :: SeaStOut_WriteWvKinFiles + PUBLIC :: SeaStOut_WriteWaveElev0 + +CONTAINS + +!==================================================================================================== +SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, WaveDT, X_HalfWidth, Y_HalfWidth, & + Z_Depth, deltaGrid, NGrid, WaveElev1, WaveElev2, & + WaveVel, WaveAcc, WaveDynP, ErrStat, ErrMsg ) + + ! Passed variables + CHARACTER(*), INTENT( IN ) :: Rootname ! filename including full path, minus any file extension. + TYPE(ProgDesc), INTENT( IN ) :: SeaSt_Prog ! the name/version/date of the SeaState program + INTEGER, INTENT( IN ) :: NStepWave ! Number of time steps for the wave kinematics arrays + real(DbKi), intent( in ) :: WaveDT + real(ReKi), intent( in ) :: X_HalfWidth + real(ReKi), intent( in ) :: Y_HalfWidth + real(ReKi), intent( in ) :: Z_Depth + real(ReKi), intent( in ) :: deltaGrid(3) + INTEGER, INTENT( IN ) :: NGrid(3) ! Number of grid points for the wave kinematics arrays + REAL(SiKi), pointer, INTENT( IN ) :: WaveElev1 (:,:,: ) ! Instantaneous wave elevations at requested locations - 1st order + REAL(SiKi), pointer, INTENT( IN ) :: WaveElev2 (:,:,: ) ! Instantaneous wave elevations at requested locations - 2nd order + REAL(SiKi), pointer, INTENT( IN ) :: WaveVel (:,:,:,:,:) ! The wave velocities (time,node,component) + REAL(SiKi), pointer, INTENT( IN ) :: WaveAcc (:,:,:,:,:) ! The wave accelerations (time,node,component) + REAL(SiKi), pointer, INTENT( IN ) :: WaveDynP(:,:,:,:) ! The wave dynamic pressure (time,node) + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + INTEGER :: UnWv ! file unit for writing the various wave kinematics files + CHARACTER(1024) :: WvName ! complete filename for one of the output files + CHARACTER(5) :: extension(7) + INTEGER :: i, j, k, m, iFile + CHARACTER(64) :: Frmt, Sfrmt + CHARACTER(1), parameter :: Delim = " " + real(ReKi) :: x_gridPts(NGrid(1)), y_gridPts(NGrid(2)), z_gridPts(NGrid(3)) + ! Initialize ErrStat + ErrStat = ErrID_None + ErrMsg = "" + + extension = (/'.Vxi ','.Vyi ','.Vzi ','.Axi ','.Ayi ','.Azi ','.DynP'/) + !Frmt = '('//TRIM(Int2LStr(NNodes))//'(:,A,ES11.4e2))' + Frmt = '(A1,ES11.4e2)' + Sfrmt = '(A1,A11)' + + ! Create grid point locations + + do i = 0, NGrid(1)-1 + x_gridPts(i+1) = -X_HalfWidth + deltaGrid(1)*i + end do + do i = 0, NGrid(2)-1 + y_gridPts(i+1) = -Y_HalfWidth + deltaGrid(2)*i + end do + do i = 0, NGrid(3)-1 + z_gridPts(i+1) = - ( 1.0 - cos( real((NGrid(3) - 1) - i, ReKi) * deltaGrid(3) ) ) * Z_Depth + end do + + ! Write the increments from [0, NStepWave] even though for OpenFAST data, NStepWave = 0, but for arbitrary user data this may not be true. + ! As a result for WaveMod=5,6 we shouldn't assume periodic waves over the period WaveTMax + + DO iFile = 1,7 + + CALL GetNewUnit( UnWv ) + + WvName = TRIM(Rootname) // TRIM(extension(iFile)) + CALL OpenFOutFile ( UnWv, WvName, ErrStat, ErrMsg ) + IF (ErrStat >=AbortErrLev) RETURN + + call WriteWvKinHeader( UnWv, iFile, Delim, SeaSt_Prog, waveDT, -z_gridPts(1), NGrid, deltaGrid ) + + DO m= 0,NStepWave + DO k = 1, NGrid(3) + do j = 1, NGrid(2) + do i = 1, NGrid(1) + + !IF ( nodeInWater(i,j) == 0 ) THEN + ! WRITE(UnWv,Sfrmt,ADVANCE='no') Delim, '##########' + !ELSE + + SELECT CASE (iFile) + CASE (1) + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveVel (m,i,j,k,1) + CASE (2) + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveVel (m,i,j,k,2) + CASE (3) + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveVel (m,i,j,k,3) + CASE (4) + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveAcc (m,i,j,k,1) + CASE (5) + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveAcc (m,i,j,k,2) + CASE (6) + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveAcc (m,i,j,k,3) + CASE (7) + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveDynP(m,i,j,k ) + END SELECT + !END IF + END DO ! for i + WRITE (UnWv,'(A)', IOSTAT=ErrStat) ' ! All X grid locations at Y = '//TRIM(num2lstr(y_gridPts(j)))// & + ', Z = '//TRIM(num2lstr(z_gridPts(k)))// & + ', WaveTime = '//TRIM(num2lstr(waveDT*m)) ! write the line return + END DO ! for j + END DO ! for k + END DO ! for m + CLOSE( UnWv, IOSTAT=ErrStat ) + IF (ErrStat /= 0) THEN + ErrStat = ErrID_Fatal + ErrMsg = 'Problem closing wave kinematics file' + RETURN + END IF + END DO + + ! WaveElevation Grid + + CALL GetNewUnit( UnWv ) + + WvName = TRIM(Rootname) // '.Elev' + CALL OpenFOutFile ( UnWv, WvName, ErrStat, ErrMsg ) + IF (ErrStat >=AbortErrLev) RETURN + + + call WriteWvKinHeader( UnWv, 8, Delim, SeaSt_Prog, waveDT, -z_gridPts(1), NGrid, deltaGrid ) + + + DO m= 0,NStepWave + do j = 1, NGrid(2) + do i = 1, NGrid(1) + if ( associated(WaveElev2) ) then + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveElev1(m,i,j) + WaveElev2(m,i,j) + else + WRITE(UnWv,Frmt,ADVANCE='no') Delim, WaveElev1(m,i,j) + end if + end do + WRITE (UnWv,'()', IOSTAT=ErrStat) ! write the line return + end do + + END DO + + CLOSE( UnWv, IOSTAT=ErrStat ) + IF (ErrStat /= 0) THEN + ErrStat = ErrID_Fatal + ErrMsg = 'Problem closing wave elevations file' + RETURN + END IF + + contains + + subroutine WriteWvKinHeader( UnWv, fileType, Delim, SeaSt_Prog, waveDT, Z_Depth, NGrid, deltaGrid ) + ! Passed variables + INTEGER, INTENT( IN ) :: UnWv + integer, intent( in ) :: fileType + CHARACTER(*), intent( in ) :: Delim + TYPE(ProgDesc), INTENT( IN ) :: SeaSt_Prog ! the name/version/date of the SeaState program + real(DbKi), intent( in ) :: WaveDT + real(ReKi), intent( in ) :: Z_Depth + real(ReKi), intent( in ) :: deltaGrid(3) + INTEGER, INTENT( IN ) :: NGrid(3) ! Number of grid points for the wave kinematics arrays + + integer(IntKi) :: i + CHARACTER(64) :: Frmt, Frmt2 + + ! Write the summary file header + ! WRITE (UnWv,'(/,A/)', IOSTAT=ErrStat) 'This wave kinematics file was generated by '//TRIM( HD_Prog%Name )//& + WRITE (UnWv,'(A)', IOSTAT=ErrStat) 'This wave kinematics file was generated by '//TRIM( SeaSt_Prog%Name )//& + ' '//TRIM( SeaSt_Prog%Ver )//' on '//CurDate()//' at '//CurTime()//'.' + SELECT CASE (fileType) + CASE (1) + WRITE(UnWv, '(A)', IOSTAT=ErrStat) 'Fluid Velocity along the X-direction (m/s)' + CASE (2) + WRITE(UnWv, '(A)', IOSTAT=ErrStat) 'Fluid Velocity along the Y-direction (m/s)' + CASE (3) + WRITE(UnWv, '(A)', IOSTAT=ErrStat) 'Fluid Velocity along the Z-direction (m/s)' + CASE (4) + WRITE(UnWv, '(A)', IOSTAT=ErrStat) 'Fluid Acceleration along the X-direction (m/s^2)' + CASE (5) + WRITE(UnWv, '(A)', IOSTAT=ErrStat) 'Fluid Acceleration along the Y-direction (m/s^2)' + CASE (6) + WRITE(UnWv, '(A)', IOSTAT=ErrStat) 'Fluid Acceleration along the Z-direction (m/s^2)' + CASE (7) + WRITE(UnWv, '(A)', IOSTAT=ErrStat) 'Fluid Dynamic Pressure (Pa)' + CASE (8) + WRITE(UnWv, '(A)', IOSTAT=ErrStat) 'Wave Elevation (m)' + END SELECT + Frmt = '(A1,ES11.4e2,A)' + Frmt2 = '(A1,I11,A)' + write (UnWv,Frmt, IOSTAT=ErrStat) '!' , waveDT , ' - WaveDT (s)' + write (UnWv,Frmt2, IOSTAT=ErrStat) '!' , NGrid(1) , ' - Number of X grid points [NX*2 - 1]' + write (UnWv,Frmt2, IOSTAT=ErrStat) '!' , NGrid(2) , ' - Number of Y grid points [NY*2 - 1]' + write (UnWv,Frmt2, IOSTAT=ErrStat) '!' , NGrid(3) , ' - Number of Z grid points [NZ]' + write (UnWv,Frmt, IOSTAT=ErrStat) '!' , deltaGrid(1) , ' - X grid spacing (m) [dX]' + write (UnWv,Frmt, IOSTAT=ErrStat) '!' , deltaGrid(2) , ' - Y grid spacing (m) [dY]' + write (UnWv,Frmt, IOSTAT=ErrStat) '!' , Z_Depth , ' - Lowest Z Depth (m) [Z_Depth]' + write (UnWv,Frmt, IOSTAT=ErrStat) '!' , deltaGrid(3) , ' - Z grid spacing (radians) [dthetaZ, where Z coordinates are found using: Z[nZ] = ( COS( nZ*dthetaZ ) - 1 )*Z_Depth, where nZ = {NZ-1, NZ-2, ..., 1,0} and dthetaZ = pi/( 2*(NZ-1) ) and 0 < Z_Depth <= WtrDpth+MSL2SWL ]' + + Frmt = '(A1,'//TRIM(Int2LStr(NGrid(1)))//'(A1,ES11.4e2),A)' + write(UnWv,Frmt) '!', ( Delim, x_gridPts(i) , i=1,NGrid(1) ), ' - X-Locations (m)' + Frmt = '(A1,'//TRIM(Int2LStr(NGrid(2)))//'(A1,ES11.4e2),A)' + write(UnWv,Frmt) '!', ( Delim, y_gridPts(i) , i=1,NGrid(2) ), ' - Y-Locations (m)' + Frmt = '(A1,'//TRIM(Int2LStr(NGrid(3)))//'(A1,ES11.4e2),A)' + write(UnWv,Frmt) '!', ( Delim, z_gridPts(i) , i=1,NGrid(3) ), ' - Z-Locations (m)' + end subroutine WriteWvKinHeader + + +END SUBROUTINE SeaStOut_WriteWvKinFiles +subroutine SeaStOut_WriteWaveElev0( Rootname, NStepWave, NGrid, WaveElev1, WaveElev2, WaveTime, ErrStat, ErrMsg ) + + ! Passed variables + CHARACTER(*), INTENT( IN ) :: Rootname ! filename including full path, minus any file extension. + INTEGER, INTENT( IN ) :: NStepWave ! Number of time steps for the wave kinematics arrays + INTEGER, INTENT( IN ) :: NGrid(3) ! Number of grid points for the wave kinematics arrays + REAL(SiKi), pointer, INTENT( IN ) :: WaveElev1 (:,:,: ) ! Instantaneous wave elevations at requested locations - 1st order + REAL(SiKi), pointer, INTENT( IN ) :: WaveElev2 (:,:,: ) ! Instantaneous wave elevations at requested locations - 2nd order + REAL(SiKi), pointer, INTENT( IN ) :: WaveTime (: ) ! The time values for the wave kinematics (time) + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + INTEGER :: UnWv ! file unit for writing the various wave kinematics files + CHARACTER(1024) :: WvName ! complete filename for one of the output files + INTEGER :: i, j, m + CHARACTER(64) :: Frmt, Frmt2 + + ! Initialize ErrStat + ErrStat = ErrID_None + ErrMsg = "" + Frmt = '(F12.4,ES12.4e2)' + Frmt2 = '(2(A12))' + CALL GetNewUnit( UnWv ) + + + WvName = TRIM(Rootname) // '.Elev' + i = NGrid(1) / 2 + 1 + j = NGrid(2) / 2 + 1 + CALL OpenFOutFile ( UnWv, WvName, ErrStat, ErrMsg ) + IF (ErrStat >=AbortErrLev) RETURN + ! WRITE (UnWv,'(A)', IOSTAT=ErrStat) 'This wave elevation (0,0) file was generated by '//TRIM( SeaSt_Prog%Name )//& + ! ' '//TRIM( SeaSt_Prog%Ver )//' on '//CurDate()//' at '//CurTime()//'.' + WRITE (UnWv,Frmt2, IOSTAT=ErrStat) 'Time', 'WaveElev0' + ! Write the increments from [0, NStepWave] even though for OpenFAST data, NStepWave = 0, but for arbitrary user data this may not be true. + ! As a result for WaveMod=5,6 we shouldn't assume periodic waves over the period WaveTMax + DO m= 0,NStepWave + + if ( associated(WaveElev2) ) then + WRITE(UnWv,Frmt) WaveTime(m), WaveElev1(m,i,j) + WaveElev2(m,i,j) + else + WRITE(UnWv,Frmt) WaveTime(m), WaveElev1(m,i,j) + end if + END DO + + CLOSE( UnWv, IOSTAT=ErrStat ) + IF (ErrStat /= 0) THEN + ErrStat = ErrID_Fatal + ErrMsg = 'Problem closing wave elevations file' + RETURN + END IF +end subroutine SeaStOut_WriteWaveElev0 + +!==================================================================================================== +subroutine SeaStOut_MapOutputs( p, WaveElev, WaveElev1, WaveElev2, WaveVel, WaveAcc, WaveAccMCF, WaveDynP, AllOuts, ErrStat, ErrMsg ) +! This subroutine writes the data stored in the y variable to the correct indexed postions in WriteOutput +! This is called by SeaSt_CalcOutput() at each time step. +!---------------------------------------------------------------------------------------------------- + TYPE(SeaSt_ParameterType), intent( in ) :: p ! SeaState's parameter data + REAL(SiKi), intent( in ) :: WaveElev(:) ! Instantaneous total elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi), intent( in ) :: WaveElev1(:) ! Instantaneous first order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi), intent( in ) :: WaveElev2(:) ! Instantaneous second order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi), intent( in ) :: WaveVel(:,:) ! Instantaneous total elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi), intent( in ) :: WaveAcc(:,:) ! Instantaneous first order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi), intent( in ) :: WaveAccMCF(:,:) ! Instantaneous first order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(SiKi), intent( in ) :: WaveDynP(:) ! Instantaneous second order elevation of incident waves at each of the NWaveElev points where the incident wave elevations can be output (meters) + REAL(ReKi), intent( out ) :: AllOuts(MaxOutpts) + INTEGER(IntKi), intent( out ) :: ErrStat ! Error status of the operation + CHARACTER(*), intent( out ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + integer :: I +! integer(IntKi) :: ErrStat2 +! character(ErrMsgLen) :: ErrMsg2 + + ErrStat = ErrID_None + ErrMsg = "" + + ! Initialize all unused channels to zero (in case they don't get set, but are still requested) + AllOuts = 0.0_ReKi + + do I=1,p%NWaveElev + AllOuts(WaveElevi(I)) = WaveElev(I) + AllOuts(WaveElevi1(I))= WaveElev1(I) + AllOuts(WaveElevi2(I))= WaveElev2(I) + end do + + do I=1,p%NWaveKin + AllOuts(FVel(:,I)) = WaveVel(1:3,I) + AllOuts(FAcc(:,I))= WaveAcc(1:3,I) + AllOuts(FDynP(I))= WaveDynP(I) + AllOuts(FAccMCF(:,I))= WaveAccMCF(1:3,I) + end do + + +end subroutine SeaStOut_MapOutputs + +!==================================================================================================== +SUBROUTINE SeaStOut_WriteOutputs( Time, y, p, Decimate, ErrStat, ErrMsg ) +! This subroutine writes the data stored in WriteOutputs (and indexed in OutParam) to the file +! opened in SeaStOut_Init() +!---------------------------------------------------------------------------------------------------- + + ! Passed variables + REAL(DbKi), INTENT( IN ) :: Time + TYPE(SeaSt_OutputType), INTENT( INOUT ) :: y ! SeaState's output data + TYPE(SeaSt_ParameterType), INTENT( IN ) :: p ! SeaState parameter data + INTEGER, INTENT( INOUT ) :: Decimate ! Output decimatation counter + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + INTEGER :: I ! Generic loop counter + CHARACTER(200) :: Frmt ! a string to hold a format statement + + + IF (p%UnOutFile < 0 ) RETURN + + ! Initialize ErrStat and determine if it makes any sense to write output +!TODO: We should not have this check here, once per timestep! This should be resolved during initialization. GJH 7/7/2014 + IF ( .NOT. ALLOCATED( p%OutParam ) ) THEN + ErrStat = ErrID_Warn + ErrMsg = ' Cannot write output to file because there are not a valid output list.' + RETURN + ELSE + ErrStat = ErrID_None + ErrMsg = '' + END IF + + + ! Write the output parameters to the file + + !Frmt = '(F8.3,'//TRIM(Int2LStr(p%WAMIT%NumOuts+p%Morison%NumOuts))//'(:,A,'//TRIM( p%OutFmt )//'))' + !Frmt = '('//TRIM( p%OutFmt )//','//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutFmt )//'))' + + !WRITE(p%UnOutFile,Frmt) Time, ( p%Delim, y%WAMIT%WriteOutput(I), I=1,p%WAMIT%NumOuts), ( p%Delim, y%Morison%WriteOutput(I), I=1,p%Morison%NumOuts) + + IF ((Decimate .EQ. p%OutDec) .OR. (Decimate .EQ. 0)) THEN + + Decimate = 1 !reset counter +!TODO: Fix formatting + Frmt = '(F10.4)' + + WRITE(p%UnOutFile,Frmt,ADVANCE='no') Time + + IF ( p%NumOuts > 0 ) THEN + Frmt = '('//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutFmt )//'))' + WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, y%WriteOutput(I) , I=1,p%NumOuts ) + END IF + + WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) ! write the line return + + ELSE + Decimate = Decimate + 1 + ENDIF + + RETURN + +END SUBROUTINE SeaStOut_WriteOutputs + +!==================================================================================================== +SUBROUTINE SeaStOut_Init( SeaSt_ProgDesc, OutRootName, InputFileData, y, p, m, InitOut, ErrStat, ErrMsg ) +! This subroutine initialized the output module, checking if the output parameter list (OutList) +! contains valid names, and opening the output file if there are any requested outputs +! NOTE: This routine must be called only after any sub-modules OUT_Init() subroutines have been called. +!---------------------------------------------------------------------------------------------------- + + + + ! Passed variables + + TYPE(ProgDesc), INTENT( IN ) :: SeaSt_ProgDesc ! + CHARACTER(*), INTENT( IN ) :: OutRootName ! The name of the output file + TYPE(SeaSt_InputFile ), INTENT( IN ) :: InputFileData ! data needed to initialize the output module + TYPE(SeaSt_OutputType), INTENT( INOUT ) :: y ! This module's internal data + TYPE(SeaSt_ParameterType), INTENT( INOUT ) :: p + TYPE(SeaSt_MiscVarType), INTENT( INOUT ) :: m + TYPE(SeaSt_InitOutputType), INTENT( INOUT ) :: InitOut + INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + INTEGER :: I ! Generic loop counter + INTEGER :: J ! Generic loop counter + + + + + + !------------------------------------------------------------------------------------------------- + ! Initialize local variables + !------------------------------------------------------------------------------------------------- + + + ErrStat = ErrID_None + ErrMsg = "" + + + !------------------------------------------------------------------------------------------------- + ! Check that the variables in OutList are valid + !------------------------------------------------------------------------------------------------- + + CALL SetOutParam(InputFileData%OutList, p, ErrStat, ErrMsg ) + IF ( ErrStat >= AbortErrLev ) RETURN + + ! Aggregate the sub-module initialization outputs for the glue code + + m%LastOutTime = 0.0_DbKi + m%Decimate = 0 + p%OutDec = 1 !TODO: Remove this once the parameter has been added to the HD input file GJH 7/8/2014 + + + ! Allocate the aggregate arrays + + ALLOCATE ( InitOut%WriteOutputHdr ( p%NumOuts ) , STAT=ErrStat ) + IF ( ErrStat /= 0 ) THEN + ErrMsg = ' Error allocating memory for the WriteOutputHdr array.' + ErrStat = ErrID_Fatal + RETURN + END IF + + ALLOCATE ( InitOut%WriteOutputUnt ( p%NumOuts ) , STAT=ErrStat ) + IF ( ErrStat /= 0 ) THEN + ErrMsg = ' Error allocating memory for the WriteOutputUnt array.' + ErrStat = ErrID_Fatal + RETURN + END IF + + ALLOCATE ( y%WriteOutput ( p%NumOuts ) , STAT=ErrStat ) + IF ( ErrStat /= 0 ) THEN + ErrMsg = ' Error allocating memory for the WriteOutput array.' + ErrStat = ErrID_Fatal + RETURN + END IF + y%WriteOutput = 0.0_ReKi ! If there is an error at initialization, y%WriteOutput can be written in the SeaState_End() routine, so this needs some initial value. + + + ! Initialize the HD-level Hdr and Unt elements + DO I = 1,p%NumOuts + + InitOut%WriteOutputHdr(I) = TRIM( p%OutParam(I)%Name ) + InitOut%WriteOutputUnt(I) = TRIM( p%OutParam(I)%Units ) + + END DO + + + J = p%NumOuts + 1 + + + IF ( p%OutSwtch == 1 .OR. p%OutSwtch == 3 ) THEN + CALL SeaStOut_OpenOutput( SeaSt_ProgDesc, OutRootName, p, InitOut, ErrStat, ErrMsg ) + IF (ErrStat >= AbortErrLev ) RETURN + END IF + + + + RETURN + +END SUBROUTINE SeaStOUT_Init + +!==================================================================================================== +SUBROUTINE SeaStOut_OpenOutput( SeaSt_ProgDesc, OutRootName, p, InitOut, ErrStat, ErrMsg ) +! This subroutine initialized the output module, checking if the output parameter list (OutList) +! contains valid names, and opening the output file if there are any requested outputs +!---------------------------------------------------------------------------------------------------- + + + + ! Passed variables + + TYPE(ProgDesc) , INTENT( IN ) :: SeaSt_ProgDesc + CHARACTER(*), INTENT( IN ) :: OutRootName ! Root name for the output file + TYPE(SeaSt_ParameterType), INTENT( INOUT ) :: p + TYPE(SeaSt_InitOutPutType ), INTENT( IN ) :: InitOut ! + INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local variables + INTEGER :: I ! Generic loop counter +! INTEGER :: Indx ! Counts the current index into the WaveKinNd array + CHARACTER(1024) :: OutFileName ! The name of the output file including the full path. + CHARACTER(200) :: Frmt ! a string to hold a format statement + + !------------------------------------------------------------------------------------------------- + ! Initialize local variables + !------------------------------------------------------------------------------------------------- + ErrStat = ErrID_None + ErrMsg = "" + + + + !------------------------------------------------------------------------------------------------- + ! Open the output file, if necessary, and write the header + !------------------------------------------------------------------------------------------------- + p%UnOutFile = -1 + IF ( ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0 ) THEN ! Output has been requested so let's open an output file + + ! Open the file for output + OutFileName = TRIM(OutRootName)//'.out' + CALL GetNewUnit( p%UnOutFile ) + + CALL OpenFOutFile ( p%UnOutFile, OutFileName, ErrStat, ErrMsg ) + IF (ErrStat >=AbortErrLev) RETURN + + + ! Write the output file header + + WRITE (p%UnOutFile,'(/,A/)', IOSTAT=ErrStat) 'These predictions were generated by '//TRIM(SeaSt_ProgDesc%Name)//& + ' on '//CurDate()//' at '//CurTime()//'.' + + ! Write three empty lines + WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) + WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) + WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) + + ! Write the names of the output parameters: + Frmt = '(A10)' + WRITE(p%UnOutFile,Frmt,ADVANCE='no') TRIM( 'Time' ) + + IF (ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0) THEN + Frmt = '('//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' + WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%WriteOutputHdr(I) ), I=1,p%NumOuts ) !since p%OutSFmt is a user-specified format, we should probably add some error handling here... + END IF + + WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) ! write the line return + + + ! Write the units of the output parameters: + + + Frmt = '(A8)' + WRITE(p%UnOutFile,Frmt,ADVANCE='no') TRIM( '(sec)' ) + + IF (ALLOCATED( p%OutParam ) .AND. p%NumOuts > 0) THEN + Frmt = '('//TRIM(Int2LStr(p%NumOuts))//'(:,A,'//TRIM( p%OutSFmt )//'))' + WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, TRIM( InitOut%WriteOutputUnt(I) ), I=1,p%NumOuts ) !since p%OutSFmt is a user-specified format, we should probably add some error handling here... + END IF + + + WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) ! write the line return + + + + END IF ! there are any requested outputs + + RETURN + +END SUBROUTINE SeaStOut_OpenOutput + +!==================================================================================================== +! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m" +! 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 routine checks to see if any requested output channel names (stored in the OutList(:)) are invalid. It returns a +!! warning if any of the channels are not available outputs from the module. +!! It assigns the settings for OutParam(:) (i.e, the index, name, and units of the output channels, WriteOutput(:)). +!! 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 07-Sep-2022 16:06:37. +SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) +!.................................................................................................................................. + + IMPLICIT NONE + + ! Passed variables + + CHARACTER(ChanLen), INTENT(IN) :: OutList(:) !< The list out user-requested outputs + TYPE(SeaSt_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 + + LOGICAL :: InvalidOutput(0:MaxOutPts) ! This array determines if the output channel is valid for this configuration + CHARACTER(*), PARAMETER :: RoutineName = "SetOutParam" + + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(117) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "FACC1XI ","FACC1YI ","FACC1ZI ","FACC2XI ","FACC2YI ","FACC2ZI ","FACC3XI ", & + "FACC3YI ","FACC3ZI ","FACC4XI ","FACC4YI ","FACC4ZI ","FACC5XI ","FACC5YI ", & + "FACC5ZI ","FACC6XI ","FACC6YI ","FACC6ZI ","FACC7XI ","FACC7YI ","FACC7ZI ", & + "FACC8XI ","FACC8YI ","FACC8ZI ","FACC9XI ","FACC9YI ","FACC9ZI ","FACCMCF1XI", & + "FACCMCF1YI","FACCMCF1ZI","FACCMCF2XI","FACCMCF2YI","FACCMCF2ZI","FACCMCF3XI","FACCMCF3YI", & + "FACCMCF3ZI","FACCMCF4XI","FACCMCF4YI","FACCMCF4ZI","FACCMCF5XI","FACCMCF5YI","FACCMCF5ZI", & + "FACCMCF6XI","FACCMCF6YI","FACCMCF6ZI","FACCMCF7XI","FACCMCF7YI","FACCMCF7ZI","FACCMCF8XI", & + "FACCMCF8YI","FACCMCF8ZI","FACCMCF9XI","FACCMCF9YI","FACCMCF9ZI","FDYNP1 ","FDYNP2 ", & + "FDYNP3 ","FDYNP4 ","FDYNP5 ","FDYNP6 ","FDYNP7 ","FDYNP8 ","FDYNP9 ", & + "FVEL1XI ","FVEL1YI ","FVEL1ZI ","FVEL2XI ","FVEL2YI ","FVEL2ZI ","FVEL3XI ", & + "FVEL3YI ","FVEL3ZI ","FVEL4XI ","FVEL4YI ","FVEL4ZI ","FVEL5XI ","FVEL5YI ", & + "FVEL5ZI ","FVEL6XI ","FVEL6YI ","FVEL6ZI ","FVEL7XI ","FVEL7YI ","FVEL7ZI ", & + "FVEL8XI ","FVEL8YI ","FVEL8ZI ","FVEL9XI ","FVEL9YI ","FVEL9ZI ","WAVE1ELEV ", & + "WAVE1ELV1 ","WAVE1ELV2 ","WAVE2ELEV ","WAVE2ELV1 ","WAVE2ELV2 ","WAVE3ELEV ","WAVE3ELV1 ", & + "WAVE3ELV2 ","WAVE4ELEV ","WAVE4ELV1 ","WAVE4ELV2 ","WAVE5ELEV ","WAVE5ELV1 ","WAVE5ELV2 ", & + "WAVE6ELEV ","WAVE6ELV1 ","WAVE6ELV2 ","WAVE7ELEV ","WAVE7ELV1 ","WAVE7ELV2 ","WAVE8ELEV ", & + "WAVE8ELV1 ","WAVE8ELV2 ","WAVE9ELEV ","WAVE9ELV1 ","WAVE9ELV2 "/) + INTEGER(IntKi), PARAMETER :: ParamIndxAry(117) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + FAcc1xi , FAcc1yi , FAcc1zi , FAcc2xi , FAcc2yi , FAcc2zi , FAcc3xi , & + FAcc3yi , FAcc3zi , FAcc4xi , FAcc4yi , FAcc4zi , FAcc5xi , FAcc5yi , & + FAcc5zi , FAcc6xi , FAcc6yi , FAcc6zi , FAcc7xi , FAcc7yi , FAcc7zi , & + FAcc8xi , FAcc8yi , FAcc8zi , FAcc9xi , FAcc9yi , FAcc9zi , FAccMCF1xi , & + FAccMCF1yi , FAccMCF1zi , FAccMCF2xi , FAccMCF2yi , FAccMCF2zi , FAccMCF3xi , FAccMCF3yi , & + FAccMCF3zi , FAccMCF4xi , FAccMCF4yi , FAccMCF4zi , FAccMCF5xi , FAccMCF5yi , FAccMCF5zi , & + FAccMCF6xi , FAccMCF6yi , FAccMCF6zi , FAccMCF7xi , FAccMCF7yi , FAccMCF7zi , FAccMCF8xi , & + FAccMCF8yi , FAccMCF8zi , FAccMCF9xi , FAccMCF9yi , FAccMCF9zi , FDynP1 , FDynP2 , & + FDynP3 , FDynP4 , FDynP5 , FDynP6 , FDynP7 , FDynP8 , FDynP9 , & + FVel1xi , FVel1yi , FVel1zi , FVel2xi , FVel2yi , FVel2zi , FVel3xi , & + FVel3yi , FVel3zi , FVel4xi , FVel4yi , FVel4zi , FVel5xi , FVel5yi , & + FVel5zi , FVel6xi , FVel6yi , FVel6zi , FVel7xi , FVel7yi , FVel7zi , & + FVel8xi , FVel8yi , FVel8zi , FVel9xi , FVel9yi , FVel9zi , Wave1Elev , & + Wave1Elv1 , Wave1Elv2 , Wave2Elev , Wave2Elv1 , Wave2Elv2 , Wave3Elev , Wave3Elv1 , & + Wave3Elv2 , Wave4Elev , Wave4Elv1 , Wave4Elv2 , Wave5Elev , Wave5Elv1 , Wave5Elv2 , & + Wave6Elev , Wave6Elv1 , Wave6Elv2 , Wave7Elev , Wave7Elv1 , Wave7Elv2 , Wave8Elev , & + Wave8Elv1 , Wave8Elv2 , Wave9Elev , Wave9Elv1 , Wave9Elv2 /) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(117) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(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/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/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)","(Pa) ","(Pa) ", & + "(Pa) ","(Pa) ","(Pa) ","(Pa) ","(Pa) ","(Pa) ","(Pa) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ", & + "(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m/s) ","(m) ", & + "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(m) ","(m) ","(m) ","(m) ", & + "(m) ","(m) ","(m) ","(m) ","(m) "/) + + + ! Initialize values + ErrStat = ErrID_None + ErrMsg = "" + InvalidOutput = .FALSE. + + +! ..... Developer must add checking for invalid inputs here: ..... + + do I=p%NWaveElev+1,9 + InvalidOutput(WaveElevi(I)) = .true. + InvalidOutput(WaveElevi1(I))= .true. + InvalidOutput(WaveElevi2(I))= .true. + end do + + do I=p%NWaveKin+1,9 + InvalidOutput(FVel( :,I)) = .true. + InvalidOutput(FAcc( :,I)) = .true. + InvalidOutput(FDynP( I)) = .true. + InvalidOutput(FAccMCF(:,I)) = .true. + end do + +! ................. End of validity checking ................. + + + !------------------------------------------------------------------------------------------------- + ! Allocate and set index, name, and units for the output channels + ! If a selected output channel is not available in this module, set error flag. + !------------------------------------------------------------------------------------------------- + + ALLOCATE ( p%OutParam(0:p%NumOuts) , STAT=ErrStat2 ) + IF ( ErrStat2 /= 0_IntKi ) THEN + CALL SetErrStat( ErrID_Fatal,"Error allocating memory for the SeaState OutParam array.", ErrStat, ErrMsg, RoutineName ) + RETURN + ENDIF + + ! Set index, name, and units for the time output channel: + + p%OutParam(0)%Indx = Time + p%OutParam(0)%Name = "Time" ! OutParam(0) is the time channel by default. + p%OutParam(0)%Units = "(s)" + p%OutParam(0)%SignM = 1 + + + ! Set index, name, and units for all of the output channels. + ! If a selected output channel is not available by this module set ErrStat = ErrID_Warn. + + DO I = 1,p%NumOuts + + p%OutParam(I)%Name = OutList(I) + + Indx = FindValidChannelIndx(OutList(I), ValidParamAry, p%OutParam(I)%SignM) + + IF ( Indx > 0 ) THEN ! we found the channel name + IF ( InvalidOutput( ParamIndxAry(Indx) ) ) THEN ! but, it isn't valid for these settings + 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 + ELSE + p%OutParam(I)%Indx = ParamIndxAry(Indx) + p%OutParam(I)%Units = ParamUnitsAry(Indx) ! it's a valid output + END IF + ELSE ! this channel isn't valid + 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_Warn, 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 +!********************************************************************************************************************************** +!==================================================================================================== +SUBROUTINE SeaStOut_CloseOutput ( p, ErrStat, ErrMsg ) +! This function cleans up after running the SeaState output module. It closes the output file, +! releases memory, and resets the number of outputs requested to 0. +!---------------------------------------------------------------------------------------------------- + + ! Passed variables + + TYPE(SeaSt_ParameterType), INTENT( INOUT ) :: p ! parameter data for this instance of the SeaState module + INTEGER, INTENT( OUT ) :: ErrStat ! a non-zero value indicates an error occurred + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Internal variables + INTEGER :: ErrStat2 + + + !------------------------------------------------------------------------------------------------- + ! Initialize error information + !------------------------------------------------------------------------------------------------- + + + ErrStat = ErrID_None + ErrMsg = "" + + + ! Write the summary file header + IF ( p%UnOutFile > -1 ) THEN + ! WRITE (p%UnOutFile,'(/,A/)', IOSTAT=ErrStat) 'This output file was closed on '//CurDate()//' at '//CurTime()//'.' + + !------------------------------------------------------------------------------------------------- + ! Close our output file + !------------------------------------------------------------------------------------------------- + CLOSE( p%UnOutFile, IOSTAT = ErrStat2 ) + IF ( ErrStat2 /= 0 ) then + ErrStat = ErrID_Severe + ErrMsg = ' Error closing SeaState output file.' + END IF + + END IF + + RETURN + +END SUBROUTINE SeaStOut_CloseOutput +!==================================================================================================== + +SUBROUTINE SeaStOut_WrSummaryFile(InitInp, InputFileData, p, Waves_InitOut, ErrStat, ErrMsg ) + TYPE(SeaSt_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine. + TYPE(SeaSt_InputFile) , INTENT(IN ) :: InputFileData !< Data from input file + TYPE(SeaSt_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(Waves_InitOutputType), INTENT(IN ) :: Waves_InitOut !< Initialization Outputs from the Waves submodule initialization + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + ! Local variables + + CHARACTER(1024) :: SummaryName ! name of the SeaState summary file + INTEGER :: I ! Generic counters + REAL(SiKi) :: WaveNmbr ! Wavenumber of the current frequency component (1/meter) + + + INTEGER(IntKi) :: ErrStat2 ! local error status + CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message + CHARACTER(*), PARAMETER :: RoutineName = 'SeaStOut_WrSummaryFile' + + CHARACTER(64) :: Frmt + INTEGER(IntKi) :: UnSum + + ErrStat = ErrID_None + ErrMsg = "" + + + + IF ( .not. InputFileData%SeaStSum ) RETURN + + + SummaryName = trim(InitInp%OutRootName)//'.sum' + UnSum = -1 + CALL GetNewUnit( UnSum ) + + CALL OpenFOutFile ( UnSum, SummaryName, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF (ErrStat >=AbortErrLev) RETURN + + + ! Write the summary file header + + WRITE (UnSum,'(/,A/)', IOSTAT=ErrStat2) 'This summary file was generated by '//trim(SeaSt_ProgDesc%Name)//' on '//CurDate()//' at '//CurTime()//'.' + + WRITE( UnSum, '(A/)') trim(GetVersion(SeaSt_ProgDesc)) + IF (InputFileData%Waves%WaveMod /= 0 .and. InputFileData%Waves%WaveMod /= 6) THEN + + WRITE( UnSum, '(1X,A61,F8.2,A4/)' ) 'The Mean Sea Level to Still Water Level (MSL2SWL) Offset is :',InputFileData%MSL2SWL,' (m)' + WRITE( UnSum, '(1X,A15,F8.2,A8)' ) 'Water Density: ', InputFileData%Waves%WtrDens, '(kg/m^3)' + WRITE( UnSum, '(1X,A15,F8.2,A20,F8.2,A19)' ) 'Water Depth : ', InputFileData%Waves%WtrDpth - InputFileData%MSL2SWL, '(m) relative to MSL; ', & + InputFileData%Waves%WtrDpth, '(m) relative to SWL' + WRITE( UnSum, '(1X,A15,F8.2,A20,F8.2,A19/)' ) 'Grid Z_Depth : ', InputFileData%Z_Depth - InputFileData%MSL2SWL, '(m) relative to MSL; ', & + InputFileData%Z_Depth, '(m) relative to SWL' + end if + + Frmt = '(1X,ES18.4e2,2x,ES18.4e2,2x,ES18.4e2,2x,ES18.4e2)' + + ! Write Kinematics grid point locations + WRITE( UnSum, '(1X,A31/)' ) 'Wave Kinematics Grid Points (m)' + WRITE( UnSum, '(1X,A78)' ) ' Xi Yi Zi relative to MSL Z relative to SWL' + do i= 1, p%NGridPts + ! NOTE: The Waves%WaveKinxi, yi, zi arrays hold all the grid point locations + WRITE(UnSum,Frmt) InputFileData%Waves%WaveKinGridxi(i), InputFileData%Waves%WaveKinGridyi(i), InputFileData%Waves%WaveKinGridzi(i) + InputFileData%MSL2SWL, InputFileData%Waves%WaveKinGridzi(i) + end do + + ! ! Write User-requested Wave Kinematics locations + WRITE( UnSum, '(/)' ) + if (p%NWaveKin > 0) then + WRITE( UnSum, '(1X,A51/)' ) 'User-Requested Wave Kinematics Output Locations (m)' + ! WRITE( UnSum, '(/)' ) + WRITE( UnSum, '(2X,A84)' ) 'Index Xi Yi Zi relative to MSL Z relative to SWL' + Frmt = '(1X,I5, 2X,ES18.4e2,2x,ES18.4e2,2x,ES18.4e2,2x,ES18.4e2)' + do i= 1, p%NWaveKin + ! NOTE: The InputFileData%WaveKinxi, yi, zi arrays hold the User-request kinematics output locations + WRITE(UnSum,Frmt) i, p%WaveKinxi(i), p%WaveKinyi(i), p%WaveKinzi(i) + InputFileData%MSL2SWL, p%WaveKinzi(i) + end do + + else + WRITE( UnSum, '(1X,A50)' ) 'No User-Requested Wave Kinematics Output Channels' + end if + + ! Write User-requested Wave Elevations + WRITE( UnSum, '(/)' ) + if (p%NWaveElev > 0) then + WRITE( UnSum, '(1X,A50/)' ) 'User-Requested Wave Elevation Output Locations (m)' + ! WRITE( UnSum, '(/)' ) + WRITE( UnSum, '(2X,A25)' ) 'Index Xi Yi' + Frmt = '(1X,I5, 2X, ES11.4e2,2x,ES11.4e2)' + do i= 1, p%NWaveElev + WRITE(UnSum,Frmt) i, p%WaveElevxi(i), p%WaveElevyi(i) + end do + + else + WRITE( UnSum, '(1X,A50)' ) 'No User-Requested Wave Elevation Output Channels' + end if + if (p%NumOuts > 0) then + WRITE( UnSum, '(//1X,A/)' ) 'Requested Output Channels' + do i = 1, p%NumOuts + WRITE( UnSum, '(4X,A)' ) p%OutParam(I)%Name + end do + end if + + IF (InputFileData%Waves%WaveMod /= 6) THEN + ! Write wave kinematics at (0,0) + WRITE( UnSum, '(/)' ) + WRITE( UnSum, '(1X,A28/)' ) 'Wave Kinematics DFT at (0,0)' + ! WRITE( UnSum, '(/)' ) + WRITE( UnSum, '(1X,A10,2X,A14,2X,A14,2X,A14,2X,A19,2X,A19)' ) & + ' index ', ' k ', ' Omega ', ' Direction ', 'REAL(DFT{WaveElev})','IMAG(DFT{WaveElev})' + WRITE( UnSum, '(1X,A10,2X,A14,2X,A14,2X,A14,2X,A19,2X,A19)' ) & + ' (-) ', ' (1/m) ', ' (rad/s) ', ' (deg) ', ' (m) ',' (m) ' + + ! Write the data + DO I = -1*Waves_InitOut%NStepWave2+1,Waves_InitOut%NStepWave2 + WaveNmbr = WaveNumber ( I*Waves_InitOut%WaveDOmega, InitInp%Gravity, InputFileData%Waves%WtrDpth ) + WRITE( UnSum, '(1X,I10,2X,ES14.5,2X,ES14.5,2X,ES14.5,2X,ES14.5,7X,ES14.5)' ) I, WaveNmbr, I*Waves_InitOut%WaveDOmega, & + Waves_InitOut%WaveDirArr(ABS(I)), Waves_InitOut%WaveElevC0( 1,ABS(I ) ) , Waves_InitOut%WaveElevC0( 2, ABS(I ) )*SIGN(1,I) + END DO + END IF + + + ! Close the summary file + WRITE (UnSum,'(/,A/)', IOSTAT=ErrStat2) 'This summary file was closed on '//CurDate()//' at '//CurTime()//'.' + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Severe,'Problem writing to summary file.',ErrStat,ErrMsg,RoutineName) + END IF + + ! Close the file + + CLOSE( UnSum, IOSTAT=ErrStat2 ) + +END SUBROUTINE SeaStOut_WrSummaryFile + +!==================================================================================================== +END MODULE SeaState_Output diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 new file mode 100644 index 0000000000..472ba3f22e --- /dev/null +++ b/modules/seastate/src/SeaState_Types.f90 @@ -0,0 +1,6370 @@ +!STARTOFREGISTRYGENERATEDFILE 'SeaState_Types.f90' +! +! WARNING This file is generated automatically by the FAST registry. +! Do not edit. Your changes to this file will be lost. +! +! FAST Registry +!********************************************************************************************************************************* +! SeaState_Types +!................................................................................................................................. +! This file is part of SeaState. +! +! Copyright (C) 2012-2016 National Renewable Energy Laboratory +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +! +! W A R N I N G : This file was automatically generated from the FAST registry. Changes made to this file may be lost. +! +!********************************************************************************************************************************* +!> This module contains the user-defined types needed in SeaState. It also contains copy, destroy, pack, and +!! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. +MODULE SeaState_Types +!--------------------------------------------------------------------------------------------------------------------------------- +USE Current_Types +USE Waves_Types +USE Waves2_Types +USE SeaState_Interp_Types +USE NWTC_Library +IMPLICIT NONE +! ========= SeaSt_InputFile ======= + TYPE, PUBLIC :: SeaSt_InputFile + LOGICAL :: EchoFlag !< Echo the input file [-] + REAL(ReKi) :: MSL2SWL !< Mean Sea Level to Still Water Level offset [m] + REAL(ReKi) :: X_HalfWidth !< Half-width of the domain in the X direction [m] + REAL(ReKi) :: Y_HalfWidth !< Half-width of the domain in the Y direction [m] + REAL(ReKi) :: Z_Depth !< Depth of the domain the Z direction [m] + INTEGER(IntKi) :: NX !< Number of nodes in half of the X-direction domain [-] + INTEGER(IntKi) :: NY !< Number of nodes in half of the Y-direction domain [-] + INTEGER(IntKi) :: NZ !< Number of nodes in half of the Z-direction domain [-] + TYPE(Waves_InitInputType) :: Waves !< Initialization data for Waves module [-] + TYPE(Waves2_InitInputType) :: Waves2 !< Initialization data for Waves2 module [-] + TYPE(Current_InitInputType) :: Current !< Initialization data for Current module [-] + LOGICAL :: Echo !< Echo the input files to a file with the same name as the input but with a .echo extension [T/F] [-] + INTEGER(IntKi) :: NWaveElev !< Number of user-requested points where the incident wave elevations can be output [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElevxi !< xi-coordinates for points where the incident wave elevations can be output [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElevyi !< yi-coordinates for points where the incident wave elevations can be output [(meters)] + INTEGER(IntKi) :: NWaveKin !< Number of points where the incident wave kinematics will be computed [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinxi !< xi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinyi !< yi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinzi !< zi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] + INTEGER(IntKi) :: OutSwtch !< Output requested channels to: [1=SeaState.out 2=GlueCode.out 3=both files] [-] + LOGICAL :: OutAll !< Output all user-specified member and joint loads (only at each member end, not interior locations) [T/F] [-] + INTEGER(IntKi) :: NumOuts !< The number of outputs for this module as requested in the input file [-] + CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: OutList !< The user-requested output channel labels for this modules. This should really be dimensioned with MaxOutPts [-] + LOGICAL :: SeaStSum !< Generate a SeaState summary file [T/F] [-] + CHARACTER(20) :: OutFmt !< Output format for numerical results [-] + CHARACTER(20) :: OutSFmt !< Output format for header strings [-] + END TYPE SeaSt_InputFile +! ======================= +! ========= SeaSt_InitInputType ======= + TYPE, PUBLIC :: SeaSt_InitInputType + CHARACTER(1024) :: InputFile !< Supplied by Driver: full path and filename for the SeaState module [-] + LOGICAL :: UseInputFile = .TRUE. !< Supplied by Driver: .TRUE. if using a input file, .FALSE. if all inputs are being passed in by the caller [-] + TYPE(FileInfoType) :: PassedFileData !< If we don't use the input file, pass everything through this [-] + CHARACTER(1024) :: OutRootName !< Supplied by Driver: The name of the root file (without extension) including the full path [-] + REAL(ReKi) :: Gravity !< Supplied by Driver: Gravitational acceleration [(m/s^2)] + REAL(ReKi) :: defWtrDens !< Default water density from the driver; may be overwritten [(kg/m^3)] + REAL(ReKi) :: defWtrDpth !< Default water depth from the driver; may be overwritten [m] + REAL(ReKi) :: defMSL2SWL !< Default mean sea level to still water level from the driver; may be overwritten [m] + REAL(DbKi) :: TMax !< Supplied by Driver: The total simulation time [(sec)] + REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevXY !< Supplied by Driver: X-Y locations for WaveElevation output (for visualization). First dimension is the X (1) and Y (2) coordinate. Second dimension is the point number. [m,-] + INTEGER(IntKi) :: WaveFieldMod !< Wave field handling (-) (switch) 0: use individual SeaState inputs without adjustment, 1: adjust wave phases based on turbine offsets from farm origin [-] + REAL(ReKi) :: PtfmLocationX !< Supplied by Driver: X coordinate of platform location in the wave field [m] + REAL(ReKi) :: PtfmLocationY !< Supplied by Driver: Y coordinate of platform location in the wave field [m] + INTEGER(IntKi) :: WrWvKinMod = 0 !< 0,1, or 2 indicating whether we are going to write out kinematics files. [ignored if WaveMod = 6, if 1 or 2 then files are written using the outrootname] [-] + LOGICAL :: HasIce !< Supplied by Driver: Whether this simulation has ice loading (flag) [-] + LOGICAL :: Linearize = .FALSE. !< Flag that tells this module if the glue code wants to linearize. [-] + END TYPE SeaSt_InitInputType +! ======================= +! ========= SeaSt_InitOutputType ======= + TYPE, PUBLIC :: SeaSt_InitOutputType + CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: WriteOutputHdr !< The is the list of all HD-related output channel header strings (includes all sub-module channels) [-] + CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: WriteOutputUnt !< The is the list of all HD-related output channel unit strings (includes all sub-module channels) [-] + TYPE(ProgDesc) :: Ver !< Version of SeaState [-] + REAL(ReKi) :: WtrDens !< Water density, this is necessary to inform glue-code what the module is using for WtrDens (may not be the glue-code's default) [(kg/m^3)] + REAL(ReKi) :: WtrDpth !< Water depth, this is necessary to inform glue-code what the module is using for WtrDpth (may not be the glue-code's default) [(m)] + REAL(ReKi) :: MSL2SWL !< Offset between still-water level and mean sea level, this is necessary to inform glue-code what the module is using for MSL2SWL (may not be the glue-code's default) [(m)] + REAL(SiKi) , DIMENSION(:,:), POINTER :: WaveElevC0 => NULL() !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part [(meters)] + REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveElevC !< Discrete Fourier transform of the instantaneous elevation of incident waves at all grid points. First column is real part, second column is imaginary part [(meters)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveDirArr => NULL() !< Wave direction array. Each frequency has a unique direction of WaveNDir > 1 [(degrees)] + REAL(SiKi) :: WaveDirMin !< Minimum wave direction. [(degrees)] + REAL(SiKi) :: WaveDirMax !< Maximum wave direction. [(degrees)] + REAL(SiKi) :: WaveDir !< Incident wave propagation heading direction [(degrees)] + LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] + REAL(SiKi) :: WaveDOmega !< Frequency step for incident wave calculations [(rad/s)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAccMCF => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< Instantaneous dynamic pressure of incident waves , at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAccMCF0 => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev0 !< Instantaneous elevation time-series of incident waves at the platform reference point [(meters)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined [(sec)] + REAL(SiKi) :: RhoXg !< = WtrDens*Gravity [-] + INTEGER(IntKi) :: NStepWave !< Total number of frequency components = total number of time steps in the incident wave [-] + INTEGER(IntKi) :: NStepWave2 !< NStepWave / 2 [-] + INTEGER(IntKi) :: WaveMod !< Incident wave kinematics model {0: none=still water, 1: plane progressive (regular), 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: white-noise spectrum, 4: user-defind spectrum from routine UserWaveSpctrm (irregular), 5: GH BLADED } [-] + INTEGER(IntKi) :: WaveStMod !< Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} [-] + INTEGER(IntKi) :: WaveDirMod !< Directional wave spreading function {0: none, 1: COS2S} [only used if WaveMod=6] [-] + REAL(SiKi) :: WvLowCOff !< Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4] [(rad/s)] + REAL(SiKi) :: WvHiCOff !< High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4] [(rad/s)] + REAL(SiKi) :: WvLowCOffD !< Minimum frequency used in the difference methods [Ignored if all difference methods = 0] [(rad/s)] + REAL(SiKi) :: WvHiCOffD !< Maximum frequency used in the difference methods [Ignored if all difference methods = 0] [(rad/s)] + REAL(SiKi) :: WvLowCOffS !< Minimum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] + REAL(SiKi) :: WvHiCOffS !< Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] + LOGICAL :: InvalidWithSSExctn !< Whether SeaState configuration is invalid with HydroDyn's state-space excitation (ExctnMod=2) [(-)] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + REAL(SiKi) :: MCFD !< Diameter of MacCamy-Fuchs member [(meters)] + REAL(SiKi) , DIMENSION(:,:), ALLOCATABLE :: WaveElevSeries !< Wave elevation time-series at each of the points given by WaveElevXY. First dimension is the timestep. Second dimension is XY point number corresponding to second dimension of WaveElevXY. [(m)] + END TYPE SeaSt_InitOutputType +! ======================= +! ========= SeaSt_ContinuousStateType ======= + TYPE, PUBLIC :: SeaSt_ContinuousStateType + REAL(R8Ki) :: UnusedStates !< placeholder for states [-] + END TYPE SeaSt_ContinuousStateType +! ======================= +! ========= SeaSt_DiscreteStateType ======= + TYPE, PUBLIC :: SeaSt_DiscreteStateType + REAL(R8Ki) :: UnusedStates !< placeholder for states [-] + END TYPE SeaSt_DiscreteStateType +! ======================= +! ========= SeaSt_ConstraintStateType ======= + TYPE, PUBLIC :: SeaSt_ConstraintStateType + REAL(R8Ki) :: UnusedStates !< placeholder for states [-] + END TYPE SeaSt_ConstraintStateType +! ======================= +! ========= SeaSt_OtherStateType ======= + TYPE, PUBLIC :: SeaSt_OtherStateType + REAL(R8Ki) :: UnusedStates !< placeholder for states [-] + END TYPE SeaSt_OtherStateType +! ======================= +! ========= SeaSt_MiscVarType ======= + TYPE, PUBLIC :: SeaSt_MiscVarType + INTEGER(IntKi) :: Decimate !< The output decimation counter [-] + REAL(DbKi) :: LastOutTime !< Last time step which was written to the output file (sec) [-] + INTEGER(IntKi) :: LastIndWave !< The last index used in the wave kinematics arrays, used to optimize interpolation [-] + TYPE(SeaSt_Interp_MiscVarType) :: SeaSt_Interp_m !< misc var information from the SeaState Interpolation module [-] + END TYPE SeaSt_MiscVarType +! ======================= +! ========= SeaSt_ParameterType ======= + TYPE, PUBLIC :: SeaSt_ParameterType + TYPE(Waves2_ParameterType) :: Waves2 !< Parameter data for the Waves2 module [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Array of time samples, (sec) [-] + REAL(DbKi) :: WaveDT !< Wave DT [sec] + INTEGER(IntKi) :: NGridPts !< Number of data points in the wave kinematics grid [-] + INTEGER(IntKi) , DIMENSION(1:3) :: NGrid !< Number of grid entries in x, y, and z [-] + REAL(ReKi) , DIMENSION(1:3) :: deltaGrid !< delta between grid points in x, y, and theta (for z) [m,m,rad] + REAL(ReKi) :: X_HalfWidth !< Half-width of the domain in the X direction [m] + REAL(ReKi) :: Y_HalfWidth !< Half-width of the domain in the Y direction [m] + REAL(ReKi) :: Z_Depth !< Depth of the domain the Z direction [m] + INTEGER(IntKi) :: NStepWave !< Number of user-requested data points in the wave kinematics arrays [-] + INTEGER(IntKi) :: NWaveElev !< Number of wave elevation outputs [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElevxi !< xi-coordinates for points where the incident wave elevations can be output [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElevyi !< yi-coordinates for points where the incident wave elevations can be output [(meters)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< Instantaneous dynamic pressure of incident waves , at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAccMCF => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveDirArr => NULL() !< Wave direction array. Each frequency has a unique direction of WaveNDir > 1 [(degrees)] + REAL(SiKi) , DIMENSION(:,:), POINTER :: WaveElevC0 => NULL() !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part [(meters)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAccMCF0 => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin (grid) points where the incident wave kinematics will be computed [(m/s^2)] + INTEGER(IntKi) :: NWaveKin !< Number of points where the incident wave kinematics can be output [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinxi !< xi-coordinates for points where the incident wave kinematics can be output; these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinyi !< yi-coordinates for points where the incident wave kinematics can be output; these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinzi !< zi-coordinates for points where the incident wave kinematics can be output; these are relative to the mean sea level [(meters)] + REAL(ReKi) :: WtrDpth !< Water depth [(m)] + REAL(DbKi) :: DT !< Time step in seconds for integration of continuous states (if a fixed-step integrator is used) and update of discrete states [-] + INTEGER(IntKi) :: WaveStMod !< Wave stretching model [-] + TYPE(OutParmType) , DIMENSION(:), ALLOCATABLE :: OutParam !< [-] + INTEGER(IntKi) :: NumOuts !< Number of SeaState module-level outputs (not the total number including sub-modules [-] + INTEGER(IntKi) :: OutSwtch !< Output requested channels to: [1=SeaState.out 2=GlueCode.out 3=both files] [-] + CHARACTER(20) :: OutFmt !< Output format for numerical results [-] + CHARACTER(20) :: OutSFmt !< Output format for header strings [-] + CHARACTER(1) :: Delim !< Delimiter string for outputs, defaults to space [-] + INTEGER(IntKi) :: UnOutFile !< File unit for the SeaState outputs [-] + INTEGER(IntKi) :: OutDec !< Write every OutDec time steps [-] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + END TYPE SeaSt_ParameterType +! ======================= +! ========= SeaSt_InputType ======= + TYPE, PUBLIC :: SeaSt_InputType + REAL(SiKi) :: DummyInput !< Remove this variable if you have inputs [-] + END TYPE SeaSt_InputType +! ======================= +! ========= SeaSt_OutputType ======= + TYPE, PUBLIC :: SeaSt_OutputType + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WriteOutput !< Outputs to be written to the output file(s) [-] + END TYPE SeaSt_OutputType +! ======================= +CONTAINS + SUBROUTINE SeaSt_CopyInputFile( SrcInputFileData, DstInputFileData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_InputFile), INTENT(IN) :: SrcInputFileData + TYPE(SeaSt_InputFile), INTENT(INOUT) :: DstInputFileData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyInputFile' +! + ErrStat = ErrID_None + ErrMsg = "" + DstInputFileData%EchoFlag = SrcInputFileData%EchoFlag + DstInputFileData%MSL2SWL = SrcInputFileData%MSL2SWL + DstInputFileData%X_HalfWidth = SrcInputFileData%X_HalfWidth + DstInputFileData%Y_HalfWidth = SrcInputFileData%Y_HalfWidth + DstInputFileData%Z_Depth = SrcInputFileData%Z_Depth + DstInputFileData%NX = SrcInputFileData%NX + DstInputFileData%NY = SrcInputFileData%NY + DstInputFileData%NZ = SrcInputFileData%NZ + CALL Waves_CopyInitInput( SrcInputFileData%Waves, DstInputFileData%Waves, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL Waves2_CopyInitInput( SrcInputFileData%Waves2, DstInputFileData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL Current_CopyInitInput( SrcInputFileData%Current, DstInputFileData%Current, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + DstInputFileData%Echo = SrcInputFileData%Echo + DstInputFileData%NWaveElev = SrcInputFileData%NWaveElev +IF (ALLOCATED(SrcInputFileData%WaveElevxi)) THEN + i1_l = LBOUND(SrcInputFileData%WaveElevxi,1) + i1_u = UBOUND(SrcInputFileData%WaveElevxi,1) + IF (.NOT. ALLOCATED(DstInputFileData%WaveElevxi)) THEN + ALLOCATE(DstInputFileData%WaveElevxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInputFileData%WaveElevxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInputFileData%WaveElevxi = SrcInputFileData%WaveElevxi +ENDIF +IF (ALLOCATED(SrcInputFileData%WaveElevyi)) THEN + i1_l = LBOUND(SrcInputFileData%WaveElevyi,1) + i1_u = UBOUND(SrcInputFileData%WaveElevyi,1) + IF (.NOT. ALLOCATED(DstInputFileData%WaveElevyi)) THEN + ALLOCATE(DstInputFileData%WaveElevyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInputFileData%WaveElevyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInputFileData%WaveElevyi = SrcInputFileData%WaveElevyi +ENDIF + DstInputFileData%NWaveKin = SrcInputFileData%NWaveKin +IF (ALLOCATED(SrcInputFileData%WaveKinxi)) THEN + i1_l = LBOUND(SrcInputFileData%WaveKinxi,1) + i1_u = UBOUND(SrcInputFileData%WaveKinxi,1) + IF (.NOT. ALLOCATED(DstInputFileData%WaveKinxi)) THEN + ALLOCATE(DstInputFileData%WaveKinxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInputFileData%WaveKinxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInputFileData%WaveKinxi = SrcInputFileData%WaveKinxi +ENDIF +IF (ALLOCATED(SrcInputFileData%WaveKinyi)) THEN + i1_l = LBOUND(SrcInputFileData%WaveKinyi,1) + i1_u = UBOUND(SrcInputFileData%WaveKinyi,1) + IF (.NOT. ALLOCATED(DstInputFileData%WaveKinyi)) THEN + ALLOCATE(DstInputFileData%WaveKinyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInputFileData%WaveKinyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInputFileData%WaveKinyi = SrcInputFileData%WaveKinyi +ENDIF +IF (ALLOCATED(SrcInputFileData%WaveKinzi)) THEN + i1_l = LBOUND(SrcInputFileData%WaveKinzi,1) + i1_u = UBOUND(SrcInputFileData%WaveKinzi,1) + IF (.NOT. ALLOCATED(DstInputFileData%WaveKinzi)) THEN + ALLOCATE(DstInputFileData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInputFileData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInputFileData%WaveKinzi = SrcInputFileData%WaveKinzi +ENDIF + DstInputFileData%OutSwtch = SrcInputFileData%OutSwtch + DstInputFileData%OutAll = SrcInputFileData%OutAll + DstInputFileData%NumOuts = SrcInputFileData%NumOuts +IF (ALLOCATED(SrcInputFileData%OutList)) THEN + i1_l = LBOUND(SrcInputFileData%OutList,1) + i1_u = UBOUND(SrcInputFileData%OutList,1) + IF (.NOT. ALLOCATED(DstInputFileData%OutList)) THEN + ALLOCATE(DstInputFileData%OutList(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInputFileData%OutList.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInputFileData%OutList = SrcInputFileData%OutList +ENDIF + DstInputFileData%SeaStSum = SrcInputFileData%SeaStSum + DstInputFileData%OutFmt = SrcInputFileData%OutFmt + DstInputFileData%OutSFmt = SrcInputFileData%OutSFmt + END SUBROUTINE SeaSt_CopyInputFile + + SUBROUTINE SeaSt_DestroyInputFile( InputFileData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_InputFile), INTENT(INOUT) :: InputFileData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyInputFile' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + CALL Waves_DestroyInitInput( InputFileData%Waves, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Waves2_DestroyInitInput( InputFileData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + CALL Current_DestroyInitInput( InputFileData%Current, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(InputFileData%WaveElevxi)) THEN + DEALLOCATE(InputFileData%WaveElevxi) +ENDIF +IF (ALLOCATED(InputFileData%WaveElevyi)) THEN + DEALLOCATE(InputFileData%WaveElevyi) +ENDIF +IF (ALLOCATED(InputFileData%WaveKinxi)) THEN + DEALLOCATE(InputFileData%WaveKinxi) +ENDIF +IF (ALLOCATED(InputFileData%WaveKinyi)) THEN + DEALLOCATE(InputFileData%WaveKinyi) +ENDIF +IF (ALLOCATED(InputFileData%WaveKinzi)) THEN + DEALLOCATE(InputFileData%WaveKinzi) +ENDIF +IF (ALLOCATED(InputFileData%OutList)) THEN + DEALLOCATE(InputFileData%OutList) +ENDIF + END SUBROUTINE SeaSt_DestroyInputFile + + SUBROUTINE SeaSt_PackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_InputFile), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackInputFile' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1 ! EchoFlag + Re_BufSz = Re_BufSz + 1 ! MSL2SWL + Re_BufSz = Re_BufSz + 1 ! X_HalfWidth + Re_BufSz = Re_BufSz + 1 ! Y_HalfWidth + Re_BufSz = Re_BufSz + 1 ! Z_Depth + Int_BufSz = Int_BufSz + 1 ! NX + Int_BufSz = Int_BufSz + 1 ! NY + Int_BufSz = Int_BufSz + 1 ! NZ + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! Waves: size of buffers for each call to pack subtype + CALL Waves_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Waves, ErrStat2, ErrMsg2, .TRUE. ) ! Waves + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Waves + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Waves + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Waves + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype + CALL Waves2_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Waves2 + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Waves2 + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Waves2 + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 3 ! Current: size of buffers for each call to pack subtype + CALL Current_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Current, ErrStat2, ErrMsg2, .TRUE. ) ! Current + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Current + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Current + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Current + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 1 ! Echo + Int_BufSz = Int_BufSz + 1 ! NWaveElev + Int_BufSz = Int_BufSz + 1 ! WaveElevxi allocated yes/no + IF ( ALLOCATED(InData%WaveElevxi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElevxi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevxi) ! WaveElevxi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevyi allocated yes/no + IF ( ALLOCATED(InData%WaveElevyi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElevyi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevyi) ! WaveElevyi + END IF + Int_BufSz = Int_BufSz + 1 ! NWaveKin + Int_BufSz = Int_BufSz + 1 ! WaveKinxi allocated yes/no + IF ( ALLOCATED(InData%WaveKinxi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinxi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinxi) ! WaveKinxi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveKinyi allocated yes/no + IF ( ALLOCATED(InData%WaveKinyi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinyi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinyi) ! WaveKinyi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveKinzi allocated yes/no + IF ( ALLOCATED(InData%WaveKinzi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinzi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinzi) ! WaveKinzi + END IF + Int_BufSz = Int_BufSz + 1 ! OutSwtch + Int_BufSz = Int_BufSz + 1 ! OutAll + Int_BufSz = Int_BufSz + 1 ! NumOuts + Int_BufSz = Int_BufSz + 1 ! OutList allocated yes/no + IF ( ALLOCATED(InData%OutList) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! OutList upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%OutList)*LEN(InData%OutList) ! OutList + END IF + Int_BufSz = Int_BufSz + 1 ! SeaStSum + Int_BufSz = Int_BufSz + 1*LEN(InData%OutFmt) ! OutFmt + Int_BufSz = Int_BufSz + 1*LEN(InData%OutSFmt) ! OutSFmt + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + IntKiBuf(Int_Xferred) = TRANSFER(InData%EchoFlag, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%MSL2SWL + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%X_HalfWidth + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%Y_HalfWidth + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%Z_Depth + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NX + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NY + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NZ + Int_Xferred = Int_Xferred + 1 + CALL Waves_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Waves, ErrStat2, ErrMsg2, OnlySize ) ! Waves + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + CALL Waves2_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + CALL Current_PackInitInput( Re_Buf, Db_Buf, Int_Buf, InData%Current, ErrStat2, ErrMsg2, OnlySize ) ! Current + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IntKiBuf(Int_Xferred) = TRANSFER(InData%Echo, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NWaveElev + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveElevxi) ) 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%WaveElevxi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevxi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElevxi,1), UBOUND(InData%WaveElevxi,1) + ReKiBuf(Re_Xferred) = InData%WaveElevxi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElevyi) ) 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%WaveElevyi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevyi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElevyi,1), UBOUND(InData%WaveElevyi,1) + ReKiBuf(Re_Xferred) = InData%WaveElevyi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IntKiBuf(Int_Xferred) = InData%NWaveKin + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveKinxi) ) 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%WaveKinxi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinxi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinxi,1), UBOUND(InData%WaveKinxi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinxi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveKinyi) ) 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%WaveKinyi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinyi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinyi,1), UBOUND(InData%WaveKinyi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinyi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveKinzi) ) 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%WaveKinzi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinzi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinzi,1), UBOUND(InData%WaveKinzi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinzi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IntKiBuf(Int_Xferred) = InData%OutSwtch + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%OutAll, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NumOuts + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%OutList) ) 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%OutList,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%OutList,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%OutList,1), UBOUND(InData%OutList,1) + DO I = 1, LEN(InData%OutList) + IntKiBuf(Int_Xferred) = ICHAR(InData%OutList(i1)(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + IntKiBuf(Int_Xferred) = TRANSFER(InData%SeaStSum, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(InData%OutFmt) + IntKiBuf(Int_Xferred) = ICHAR(InData%OutFmt(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(InData%OutSFmt) + IntKiBuf(Int_Xferred) = ICHAR(InData%OutSFmt(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END SUBROUTINE SeaSt_PackInputFile + + SUBROUTINE SeaSt_UnPackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_InputFile), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackInputFile' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%EchoFlag = TRANSFER(IntKiBuf(Int_Xferred), OutData%EchoFlag) + Int_Xferred = Int_Xferred + 1 + OutData%MSL2SWL = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%X_HalfWidth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%Y_HalfWidth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%Z_Depth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%NX = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NY = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NZ = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL Waves_UnpackInitInput( Re_Buf, Db_Buf, Int_Buf, OutData%Waves, ErrStat2, ErrMsg2 ) ! Waves + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL Waves2_UnpackInitInput( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL Current_UnpackInitInput( Re_Buf, Db_Buf, Int_Buf, OutData%Current, ErrStat2, ErrMsg2 ) ! Current + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + OutData%Echo = TRANSFER(IntKiBuf(Int_Xferred), OutData%Echo) + Int_Xferred = Int_Xferred + 1 + OutData%NWaveElev = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevxi 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%WaveElevxi)) DEALLOCATE(OutData%WaveElevxi) + ALLOCATE(OutData%WaveElevxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElevxi,1), UBOUND(OutData%WaveElevxi,1) + OutData%WaveElevxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevyi 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%WaveElevyi)) DEALLOCATE(OutData%WaveElevyi) + ALLOCATE(OutData%WaveElevyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElevyi,1), UBOUND(OutData%WaveElevyi,1) + OutData%WaveElevyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%NWaveKin = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinxi 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%WaveKinxi)) DEALLOCATE(OutData%WaveKinxi) + ALLOCATE(OutData%WaveKinxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinxi,1), UBOUND(OutData%WaveKinxi,1) + OutData%WaveKinxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinyi 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%WaveKinyi)) DEALLOCATE(OutData%WaveKinyi) + ALLOCATE(OutData%WaveKinyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinyi,1), UBOUND(OutData%WaveKinyi,1) + OutData%WaveKinyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinzi 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%WaveKinzi)) DEALLOCATE(OutData%WaveKinzi) + ALLOCATE(OutData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinzi,1), UBOUND(OutData%WaveKinzi,1) + OutData%WaveKinzi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%OutSwtch = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%OutAll = TRANSFER(IntKiBuf(Int_Xferred), OutData%OutAll) + Int_Xferred = Int_Xferred + 1 + OutData%NumOuts = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! OutList 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%OutList)) DEALLOCATE(OutData%OutList) + ALLOCATE(OutData%OutList(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%OutList.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%OutList,1), UBOUND(OutData%OutList,1) + DO I = 1, LEN(OutData%OutList) + OutData%OutList(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + OutData%SeaStSum = TRANSFER(IntKiBuf(Int_Xferred), OutData%SeaStSum) + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(OutData%OutFmt) + OutData%OutFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(OutData%OutSFmt) + OutData%OutSFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END SUBROUTINE SeaSt_UnPackInputFile + + SUBROUTINE SeaSt_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_InitInputType), INTENT(IN) :: SrcInitInputData + TYPE(SeaSt_InitInputType), INTENT(INOUT) :: DstInitInputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyInitInput' +! + ErrStat = ErrID_None + ErrMsg = "" + DstInitInputData%InputFile = SrcInitInputData%InputFile + DstInitInputData%UseInputFile = SrcInitInputData%UseInputFile + CALL NWTC_Library_Copyfileinfotype( SrcInitInputData%PassedFileData, DstInitInputData%PassedFileData, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + DstInitInputData%OutRootName = SrcInitInputData%OutRootName + DstInitInputData%Gravity = SrcInitInputData%Gravity + DstInitInputData%defWtrDens = SrcInitInputData%defWtrDens + DstInitInputData%defWtrDpth = SrcInitInputData%defWtrDpth + DstInitInputData%defMSL2SWL = SrcInitInputData%defMSL2SWL + DstInitInputData%TMax = SrcInitInputData%TMax +IF (ALLOCATED(SrcInitInputData%WaveElevXY)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElevXY,1) + i1_u = UBOUND(SrcInitInputData%WaveElevXY,1) + i2_l = LBOUND(SrcInitInputData%WaveElevXY,2) + i2_u = UBOUND(SrcInitInputData%WaveElevXY,2) + IF (.NOT. ALLOCATED(DstInitInputData%WaveElevXY)) THEN + ALLOCATE(DstInitInputData%WaveElevXY(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevXY.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElevXY = SrcInitInputData%WaveElevXY +ENDIF + DstInitInputData%WaveFieldMod = SrcInitInputData%WaveFieldMod + DstInitInputData%PtfmLocationX = SrcInitInputData%PtfmLocationX + DstInitInputData%PtfmLocationY = SrcInitInputData%PtfmLocationY + DstInitInputData%WrWvKinMod = SrcInitInputData%WrWvKinMod + DstInitInputData%HasIce = SrcInitInputData%HasIce + DstInitInputData%Linearize = SrcInitInputData%Linearize + END SUBROUTINE SeaSt_CopyInitInput + + SUBROUTINE SeaSt_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_InitInputType), INTENT(INOUT) :: InitInputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyInitInput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + CALL NWTC_Library_Destroyfileinfotype( InitInputData%PassedFileData, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(InitInputData%WaveElevXY)) THEN + DEALLOCATE(InitInputData%WaveElevXY) +ENDIF + END SUBROUTINE SeaSt_DestroyInitInput + + SUBROUTINE SeaSt_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_InitInputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackInitInput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1*LEN(InData%InputFile) ! InputFile + Int_BufSz = Int_BufSz + 1 ! UseInputFile + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! PassedFileData: size of buffers for each call to pack subtype + CALL NWTC_Library_Packfileinfotype( Re_Buf, Db_Buf, Int_Buf, InData%PassedFileData, ErrStat2, ErrMsg2, .TRUE. ) ! PassedFileData + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! PassedFileData + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! PassedFileData + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! PassedFileData + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 1*LEN(InData%OutRootName) ! OutRootName + Re_BufSz = Re_BufSz + 1 ! Gravity + Re_BufSz = Re_BufSz + 1 ! defWtrDens + Re_BufSz = Re_BufSz + 1 ! defWtrDpth + Re_BufSz = Re_BufSz + 1 ! defMSL2SWL + Db_BufSz = Db_BufSz + 1 ! TMax + Int_BufSz = Int_BufSz + 1 ! WaveElevXY allocated yes/no + IF ( ALLOCATED(InData%WaveElevXY) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! WaveElevXY upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevXY) ! WaveElevXY + END IF + Int_BufSz = Int_BufSz + 1 ! WaveFieldMod + Re_BufSz = Re_BufSz + 1 ! PtfmLocationX + Re_BufSz = Re_BufSz + 1 ! PtfmLocationY + Int_BufSz = Int_BufSz + 1 ! WrWvKinMod + Int_BufSz = Int_BufSz + 1 ! HasIce + Int_BufSz = Int_BufSz + 1 ! Linearize + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DO I = 1, LEN(InData%InputFile) + IntKiBuf(Int_Xferred) = ICHAR(InData%InputFile(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + IntKiBuf(Int_Xferred) = TRANSFER(InData%UseInputFile, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + CALL NWTC_Library_Packfileinfotype( Re_Buf, Db_Buf, Int_Buf, InData%PassedFileData, ErrStat2, ErrMsg2, OnlySize ) ! PassedFileData + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + DO I = 1, LEN(InData%OutRootName) + IntKiBuf(Int_Xferred) = ICHAR(InData%OutRootName(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + ReKiBuf(Re_Xferred) = InData%Gravity + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%defWtrDens + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%defWtrDpth + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%defMSL2SWL + Re_Xferred = Re_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%TMax + Db_Xferred = Db_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveElevXY) ) 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%WaveElevXY,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevXY,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%WaveElevXY,2), UBOUND(InData%WaveElevXY,2) + DO i1 = LBOUND(InData%WaveElevXY,1), UBOUND(InData%WaveElevXY,1) + ReKiBuf(Re_Xferred) = InData%WaveElevXY(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IntKiBuf(Int_Xferred) = InData%WaveFieldMod + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%PtfmLocationX + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%PtfmLocationY + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WrWvKinMod + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%HasIce, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%Linearize, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE SeaSt_PackInitInput + + SUBROUTINE SeaSt_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_InitInputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackInitInput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + DO I = 1, LEN(OutData%InputFile) + OutData%InputFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%UseInputFile = TRANSFER(IntKiBuf(Int_Xferred), OutData%UseInputFile) + Int_Xferred = Int_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL NWTC_Library_Unpackfileinfotype( Re_Buf, Db_Buf, Int_Buf, OutData%PassedFileData, ErrStat2, ErrMsg2 ) ! PassedFileData + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + DO I = 1, LEN(OutData%OutRootName) + OutData%OutRootName(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%Gravity = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%defWtrDens = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%defWtrDpth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%defMSL2SWL = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%TMax = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevXY 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveElevXY)) DEALLOCATE(OutData%WaveElevXY) + ALLOCATE(OutData%WaveElevXY(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevXY.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%WaveElevXY,2), UBOUND(OutData%WaveElevXY,2) + DO i1 = LBOUND(OutData%WaveElevXY,1), UBOUND(OutData%WaveElevXY,1) + OutData%WaveElevXY(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + OutData%WaveFieldMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%PtfmLocationX = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%PtfmLocationY = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%WrWvKinMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%HasIce = TRANSFER(IntKiBuf(Int_Xferred), OutData%HasIce) + Int_Xferred = Int_Xferred + 1 + OutData%Linearize = TRANSFER(IntKiBuf(Int_Xferred), OutData%Linearize) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE SeaSt_UnPackInitInput + + SUBROUTINE SeaSt_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_InitOutputType), INTENT(IN) :: SrcInitOutputData + TYPE(SeaSt_InitOutputType), INTENT(INOUT) :: DstInitOutputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyInitOutput' +! + ErrStat = ErrID_None + ErrMsg = "" +IF (ALLOCATED(SrcInitOutputData%WriteOutputHdr)) THEN + i1_l = LBOUND(SrcInitOutputData%WriteOutputHdr,1) + i1_u = UBOUND(SrcInitOutputData%WriteOutputHdr,1) + IF (.NOT. ALLOCATED(DstInitOutputData%WriteOutputHdr)) THEN + ALLOCATE(DstInitOutputData%WriteOutputHdr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WriteOutputHdr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WriteOutputHdr = SrcInitOutputData%WriteOutputHdr +ENDIF +IF (ALLOCATED(SrcInitOutputData%WriteOutputUnt)) THEN + i1_l = LBOUND(SrcInitOutputData%WriteOutputUnt,1) + i1_u = UBOUND(SrcInitOutputData%WriteOutputUnt,1) + IF (.NOT. ALLOCATED(DstInitOutputData%WriteOutputUnt)) THEN + ALLOCATE(DstInitOutputData%WriteOutputUnt(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WriteOutputUnt.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WriteOutputUnt = SrcInitOutputData%WriteOutputUnt +ENDIF + CALL NWTC_Library_Copyprogdesc( SrcInitOutputData%Ver, DstInitOutputData%Ver, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + DstInitOutputData%WtrDens = SrcInitOutputData%WtrDens + DstInitOutputData%WtrDpth = SrcInitOutputData%WtrDpth + DstInitOutputData%MSL2SWL = SrcInitOutputData%MSL2SWL +IF (ASSOCIATED(SrcInitOutputData%WaveElevC0)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElevC0,1) + i1_u = UBOUND(SrcInitOutputData%WaveElevC0,1) + i2_l = LBOUND(SrcInitOutputData%WaveElevC0,2) + i2_u = UBOUND(SrcInitOutputData%WaveElevC0,2) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveElevC0)) THEN + ALLOCATE(DstInitOutputData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElevC0 = SrcInitOutputData%WaveElevC0 +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveElevC)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElevC,1) + i1_u = UBOUND(SrcInitOutputData%WaveElevC,1) + i2_l = LBOUND(SrcInitOutputData%WaveElevC,2) + i2_u = UBOUND(SrcInitOutputData%WaveElevC,2) + i3_l = LBOUND(SrcInitOutputData%WaveElevC,3) + i3_u = UBOUND(SrcInitOutputData%WaveElevC,3) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveElevC)) THEN + ALLOCATE(DstInitOutputData%WaveElevC(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevC.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElevC = SrcInitOutputData%WaveElevC +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveDirArr)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveDirArr,1) + i1_u = UBOUND(SrcInitOutputData%WaveDirArr,1) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveDirArr)) THEN + ALLOCATE(DstInitOutputData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveDirArr = SrcInitOutputData%WaveDirArr +ENDIF + DstInitOutputData%WaveDirMin = SrcInitOutputData%WaveDirMin + DstInitOutputData%WaveDirMax = SrcInitOutputData%WaveDirMax + DstInitOutputData%WaveDir = SrcInitOutputData%WaveDir + DstInitOutputData%WaveMultiDir = SrcInitOutputData%WaveMultiDir + DstInitOutputData%WaveDOmega = SrcInitOutputData%WaveDOmega +IF (ASSOCIATED(SrcInitOutputData%WaveDynP)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveDynP,1) + i1_u = UBOUND(SrcInitOutputData%WaveDynP,1) + i2_l = LBOUND(SrcInitOutputData%WaveDynP,2) + i2_u = UBOUND(SrcInitOutputData%WaveDynP,2) + i3_l = LBOUND(SrcInitOutputData%WaveDynP,3) + i3_u = UBOUND(SrcInitOutputData%WaveDynP,3) + i4_l = LBOUND(SrcInitOutputData%WaveDynP,4) + i4_u = UBOUND(SrcInitOutputData%WaveDynP,4) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveDynP)) THEN + ALLOCATE(DstInitOutputData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveDynP = SrcInitOutputData%WaveDynP +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveAcc)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveAcc,1) + i1_u = UBOUND(SrcInitOutputData%WaveAcc,1) + i2_l = LBOUND(SrcInitOutputData%WaveAcc,2) + i2_u = UBOUND(SrcInitOutputData%WaveAcc,2) + i3_l = LBOUND(SrcInitOutputData%WaveAcc,3) + i3_u = UBOUND(SrcInitOutputData%WaveAcc,3) + i4_l = LBOUND(SrcInitOutputData%WaveAcc,4) + i4_u = UBOUND(SrcInitOutputData%WaveAcc,4) + i5_l = LBOUND(SrcInitOutputData%WaveAcc,5) + i5_u = UBOUND(SrcInitOutputData%WaveAcc,5) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveAcc)) THEN + ALLOCATE(DstInitOutputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveAcc = SrcInitOutputData%WaveAcc +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveAccMCF)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveAccMCF,1) + i1_u = UBOUND(SrcInitOutputData%WaveAccMCF,1) + i2_l = LBOUND(SrcInitOutputData%WaveAccMCF,2) + i2_u = UBOUND(SrcInitOutputData%WaveAccMCF,2) + i3_l = LBOUND(SrcInitOutputData%WaveAccMCF,3) + i3_u = UBOUND(SrcInitOutputData%WaveAccMCF,3) + i4_l = LBOUND(SrcInitOutputData%WaveAccMCF,4) + i4_u = UBOUND(SrcInitOutputData%WaveAccMCF,4) + i5_l = LBOUND(SrcInitOutputData%WaveAccMCF,5) + i5_u = UBOUND(SrcInitOutputData%WaveAccMCF,5) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveAccMCF)) THEN + ALLOCATE(DstInitOutputData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveAccMCF = SrcInitOutputData%WaveAccMCF +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveVel)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveVel,1) + i1_u = UBOUND(SrcInitOutputData%WaveVel,1) + i2_l = LBOUND(SrcInitOutputData%WaveVel,2) + i2_u = UBOUND(SrcInitOutputData%WaveVel,2) + i3_l = LBOUND(SrcInitOutputData%WaveVel,3) + i3_u = UBOUND(SrcInitOutputData%WaveVel,3) + i4_l = LBOUND(SrcInitOutputData%WaveVel,4) + i4_u = UBOUND(SrcInitOutputData%WaveVel,4) + i5_l = LBOUND(SrcInitOutputData%WaveVel,5) + i5_u = UBOUND(SrcInitOutputData%WaveVel,5) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveVel)) THEN + ALLOCATE(DstInitOutputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveVel = SrcInitOutputData%WaveVel +ENDIF +IF (ASSOCIATED(SrcInitOutputData%PWaveDynP0)) THEN + i1_l = LBOUND(SrcInitOutputData%PWaveDynP0,1) + i1_u = UBOUND(SrcInitOutputData%PWaveDynP0,1) + i2_l = LBOUND(SrcInitOutputData%PWaveDynP0,2) + i2_u = UBOUND(SrcInitOutputData%PWaveDynP0,2) + i3_l = LBOUND(SrcInitOutputData%PWaveDynP0,3) + i3_u = UBOUND(SrcInitOutputData%PWaveDynP0,3) + IF (.NOT. ASSOCIATED(DstInitOutputData%PWaveDynP0)) THEN + ALLOCATE(DstInitOutputData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%PWaveDynP0 = SrcInitOutputData%PWaveDynP0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%PWaveAcc0)) THEN + i1_l = LBOUND(SrcInitOutputData%PWaveAcc0,1) + i1_u = UBOUND(SrcInitOutputData%PWaveAcc0,1) + i2_l = LBOUND(SrcInitOutputData%PWaveAcc0,2) + i2_u = UBOUND(SrcInitOutputData%PWaveAcc0,2) + i3_l = LBOUND(SrcInitOutputData%PWaveAcc0,3) + i3_u = UBOUND(SrcInitOutputData%PWaveAcc0,3) + i4_l = LBOUND(SrcInitOutputData%PWaveAcc0,4) + i4_u = UBOUND(SrcInitOutputData%PWaveAcc0,4) + IF (.NOT. ASSOCIATED(DstInitOutputData%PWaveAcc0)) THEN + ALLOCATE(DstInitOutputData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%PWaveAcc0 = SrcInitOutputData%PWaveAcc0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%PWaveAccMCF0)) THEN + i1_l = LBOUND(SrcInitOutputData%PWaveAccMCF0,1) + i1_u = UBOUND(SrcInitOutputData%PWaveAccMCF0,1) + i2_l = LBOUND(SrcInitOutputData%PWaveAccMCF0,2) + i2_u = UBOUND(SrcInitOutputData%PWaveAccMCF0,2) + i3_l = LBOUND(SrcInitOutputData%PWaveAccMCF0,3) + i3_u = UBOUND(SrcInitOutputData%PWaveAccMCF0,3) + i4_l = LBOUND(SrcInitOutputData%PWaveAccMCF0,4) + i4_u = UBOUND(SrcInitOutputData%PWaveAccMCF0,4) + IF (.NOT. ASSOCIATED(DstInitOutputData%PWaveAccMCF0)) THEN + ALLOCATE(DstInitOutputData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%PWaveAccMCF0 = SrcInitOutputData%PWaveAccMCF0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%PWaveVel0)) THEN + i1_l = LBOUND(SrcInitOutputData%PWaveVel0,1) + i1_u = UBOUND(SrcInitOutputData%PWaveVel0,1) + i2_l = LBOUND(SrcInitOutputData%PWaveVel0,2) + i2_u = UBOUND(SrcInitOutputData%PWaveVel0,2) + i3_l = LBOUND(SrcInitOutputData%PWaveVel0,3) + i3_u = UBOUND(SrcInitOutputData%PWaveVel0,3) + i4_l = LBOUND(SrcInitOutputData%PWaveVel0,4) + i4_u = UBOUND(SrcInitOutputData%PWaveVel0,4) + IF (.NOT. ASSOCIATED(DstInitOutputData%PWaveVel0)) THEN + ALLOCATE(DstInitOutputData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%PWaveVel0 = SrcInitOutputData%PWaveVel0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveElev1)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElev1,1) + i1_u = UBOUND(SrcInitOutputData%WaveElev1,1) + i2_l = LBOUND(SrcInitOutputData%WaveElev1,2) + i2_u = UBOUND(SrcInitOutputData%WaveElev1,2) + i3_l = LBOUND(SrcInitOutputData%WaveElev1,3) + i3_u = UBOUND(SrcInitOutputData%WaveElev1,3) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveElev1)) THEN + ALLOCATE(DstInitOutputData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElev1 = SrcInitOutputData%WaveElev1 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveElev2)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElev2,1) + i1_u = UBOUND(SrcInitOutputData%WaveElev2,1) + i2_l = LBOUND(SrcInitOutputData%WaveElev2,2) + i2_u = UBOUND(SrcInitOutputData%WaveElev2,2) + i3_l = LBOUND(SrcInitOutputData%WaveElev2,3) + i3_u = UBOUND(SrcInitOutputData%WaveElev2,3) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveElev2)) THEN + ALLOCATE(DstInitOutputData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElev2 = SrcInitOutputData%WaveElev2 +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveElev0)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElev0,1) + i1_u = UBOUND(SrcInitOutputData%WaveElev0,1) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveElev0)) THEN + ALLOCATE(DstInitOutputData%WaveElev0(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElev0 = SrcInitOutputData%WaveElev0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveTime)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveTime,1) + i1_u = UBOUND(SrcInitOutputData%WaveTime,1) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveTime)) THEN + ALLOCATE(DstInitOutputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveTime = SrcInitOutputData%WaveTime +ENDIF + DstInitOutputData%RhoXg = SrcInitOutputData%RhoXg + DstInitOutputData%NStepWave = SrcInitOutputData%NStepWave + DstInitOutputData%NStepWave2 = SrcInitOutputData%NStepWave2 + DstInitOutputData%WaveMod = SrcInitOutputData%WaveMod + DstInitOutputData%WaveStMod = SrcInitOutputData%WaveStMod + DstInitOutputData%WaveDirMod = SrcInitOutputData%WaveDirMod + DstInitOutputData%WvLowCOff = SrcInitOutputData%WvLowCOff + DstInitOutputData%WvHiCOff = SrcInitOutputData%WvHiCOff + DstInitOutputData%WvLowCOffD = SrcInitOutputData%WvLowCOffD + DstInitOutputData%WvHiCOffD = SrcInitOutputData%WvHiCOffD + DstInitOutputData%WvLowCOffS = SrcInitOutputData%WvLowCOffS + DstInitOutputData%WvHiCOffS = SrcInitOutputData%WvHiCOffS + DstInitOutputData%InvalidWithSSExctn = SrcInitOutputData%InvalidWithSSExctn + CALL SeaSt_Interp_CopyParam( SrcInitOutputData%SeaSt_Interp_p, DstInitOutputData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + DstInitOutputData%MCFD = SrcInitOutputData%MCFD +IF (ALLOCATED(SrcInitOutputData%WaveElevSeries)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElevSeries,1) + i1_u = UBOUND(SrcInitOutputData%WaveElevSeries,1) + i2_l = LBOUND(SrcInitOutputData%WaveElevSeries,2) + i2_u = UBOUND(SrcInitOutputData%WaveElevSeries,2) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveElevSeries)) THEN + ALLOCATE(DstInitOutputData%WaveElevSeries(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevSeries.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElevSeries = SrcInitOutputData%WaveElevSeries +ENDIF + END SUBROUTINE SeaSt_CopyInitOutput + + SUBROUTINE SeaSt_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_InitOutputType), INTENT(INOUT) :: InitOutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyInitOutput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +IF (ALLOCATED(InitOutputData%WriteOutputHdr)) THEN + DEALLOCATE(InitOutputData%WriteOutputHdr) +ENDIF +IF (ALLOCATED(InitOutputData%WriteOutputUnt)) THEN + DEALLOCATE(InitOutputData%WriteOutputUnt) +ENDIF + CALL NWTC_Library_Destroyprogdesc( InitOutputData%Ver, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ASSOCIATED(InitOutputData%WaveElevC0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveElevC0) + InitOutputData%WaveElevC0 => NULL() +ENDIF +IF (ALLOCATED(InitOutputData%WaveElevC)) THEN + DEALLOCATE(InitOutputData%WaveElevC) +ENDIF +IF (ASSOCIATED(InitOutputData%WaveDirArr)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveDirArr) + InitOutputData%WaveDirArr => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveDynP)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveDynP) + InitOutputData%WaveDynP => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveAcc)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveAcc) + InitOutputData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveAccMCF)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveAccMCF) + InitOutputData%WaveAccMCF => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveVel)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveVel) + InitOutputData%WaveVel => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveDynP0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%PWaveDynP0) + InitOutputData%PWaveDynP0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveAcc0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%PWaveAcc0) + InitOutputData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveAccMCF0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%PWaveAccMCF0) + InitOutputData%PWaveAccMCF0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveVel0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%PWaveVel0) + InitOutputData%PWaveVel0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveElev1)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveElev1) + InitOutputData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveElev2)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveElev2) + InitOutputData%WaveElev2 => NULL() +ENDIF +IF (ALLOCATED(InitOutputData%WaveElev0)) THEN + DEALLOCATE(InitOutputData%WaveElev0) +ENDIF +IF (ASSOCIATED(InitOutputData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveTime) + InitOutputData%WaveTime => NULL() +ENDIF + CALL SeaSt_Interp_DestroyParam( InitOutputData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ALLOCATED(InitOutputData%WaveElevSeries)) THEN + DEALLOCATE(InitOutputData%WaveElevSeries) +ENDIF + END SUBROUTINE SeaSt_DestroyInitOutput + + SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_InitOutputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackInitOutput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1 ! WriteOutputHdr allocated yes/no + IF ( ALLOCATED(InData%WriteOutputHdr) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WriteOutputHdr upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%WriteOutputHdr)*LEN(InData%WriteOutputHdr) ! WriteOutputHdr + END IF + Int_BufSz = Int_BufSz + 1 ! WriteOutputUnt allocated yes/no + IF ( ALLOCATED(InData%WriteOutputUnt) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WriteOutputUnt upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%WriteOutputUnt)*LEN(InData%WriteOutputUnt) ! WriteOutputUnt + END IF + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! Ver: size of buffers for each call to pack subtype + CALL NWTC_Library_Packprogdesc( Re_Buf, Db_Buf, Int_Buf, InData%Ver, ErrStat2, ErrMsg2, .TRUE. ) ! Ver + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Ver + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Ver + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Ver + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Re_BufSz = Re_BufSz + 1 ! WtrDens + Re_BufSz = Re_BufSz + 1 ! WtrDpth + Re_BufSz = Re_BufSz + 1 ! MSL2SWL + Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no + IF ( ASSOCIATED(InData%WaveElevC0) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevC allocated yes/no + IF ( ALLOCATED(InData%WaveElevC) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElevC upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC) ! WaveElevC + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no + IF ( ASSOCIATED(InData%WaveDirArr) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr + END IF + Re_BufSz = Re_BufSz + 1 ! WaveDirMin + Re_BufSz = Re_BufSz + 1 ! WaveDirMax + Re_BufSz = Re_BufSz + 1 ! WaveDir + Int_BufSz = Int_BufSz + 1 ! WaveMultiDir + Re_BufSz = Re_BufSz + 1 ! WaveDOmega + Int_BufSz = Int_BufSz + 1 ! WaveDynP allocated yes/no + IF ( ASSOCIATED(InData%WaveDynP) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveDynP upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP) ! WaveDynP + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no + IF ( ASSOCIATED(InData%WaveAcc) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAcc upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAccMCF allocated yes/no + IF ( ASSOCIATED(InData%WaveAccMCF) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAccMCF upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAccMCF) ! WaveAccMCF + END IF + Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no + IF ( ASSOCIATED(InData%WaveVel) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveVel upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveDynP0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveDynP0) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! PWaveDynP0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveDynP0) ! PWaveDynP0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAcc0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAcc0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAcc0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAcc0) ! PWaveAcc0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAccMCF0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAccMCF0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAccMCF0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAccMCF0) ! PWaveAccMCF0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveVel0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveVel0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveVel0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveVel0) ! PWaveVel0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev2) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev0 allocated yes/no + IF ( ALLOCATED(InData%WaveElev0) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElev0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev0) ! WaveElev0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no + IF ( ASSOCIATED(InData%WaveTime) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime + END IF + Re_BufSz = Re_BufSz + 1 ! RhoXg + Int_BufSz = Int_BufSz + 1 ! NStepWave + Int_BufSz = Int_BufSz + 1 ! NStepWave2 + Int_BufSz = Int_BufSz + 1 ! WaveMod + Int_BufSz = Int_BufSz + 1 ! WaveStMod + Int_BufSz = Int_BufSz + 1 ! WaveDirMod + Re_BufSz = Re_BufSz + 1 ! WvLowCOff + Re_BufSz = Re_BufSz + 1 ! WvHiCOff + Re_BufSz = Re_BufSz + 1 ! WvLowCOffD + Re_BufSz = Re_BufSz + 1 ! WvHiCOffD + Re_BufSz = Re_BufSz + 1 ! WvLowCOffS + Re_BufSz = Re_BufSz + 1 ! WvHiCOffS + Int_BufSz = Int_BufSz + 1 ! InvalidWithSSExctn + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Re_BufSz = Re_BufSz + 1 ! MCFD + Int_BufSz = Int_BufSz + 1 ! WaveElevSeries allocated yes/no + IF ( ALLOCATED(InData%WaveElevSeries) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! WaveElevSeries upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevSeries) ! WaveElevSeries + END IF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + IF ( .NOT. ALLOCATED(InData%WriteOutputHdr) ) 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%WriteOutputHdr,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WriteOutputHdr,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WriteOutputHdr,1), UBOUND(InData%WriteOutputHdr,1) + DO I = 1, LEN(InData%WriteOutputHdr) + IntKiBuf(Int_Xferred) = ICHAR(InData%WriteOutputHdr(i1)(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WriteOutputUnt) ) 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%WriteOutputUnt,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WriteOutputUnt,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WriteOutputUnt,1), UBOUND(InData%WriteOutputUnt,1) + DO I = 1, LEN(InData%WriteOutputUnt) + IntKiBuf(Int_Xferred) = ICHAR(InData%WriteOutputUnt(i1)(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + CALL NWTC_Library_Packprogdesc( Re_Buf, Db_Buf, Int_Buf, InData%Ver, ErrStat2, ErrMsg2, OnlySize ) ! Ver + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + ReKiBuf(Re_Xferred) = InData%WtrDens + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WtrDpth + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%MSL2SWL + Re_Xferred = Re_Xferred + 1 + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) 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%WaveElevC0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%WaveElevC0,2), UBOUND(InData%WaveElevC0,2) + DO i1 = LBOUND(InData%WaveElevC0,1), UBOUND(InData%WaveElevC0,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC0(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElevC) ) 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%WaveElevC,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElevC,3), UBOUND(InData%WaveElevC,3) + DO i2 = LBOUND(InData%WaveElevC,2), UBOUND(InData%WaveElevC,2) + DO i1 = LBOUND(InData%WaveElevC,1), UBOUND(InData%WaveElevC,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveDirArr) ) 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%WaveDirArr,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDirArr,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveDirArr,1), UBOUND(InData%WaveDirArr,1) + ReKiBuf(Re_Xferred) = InData%WaveDirArr(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + ReKiBuf(Re_Xferred) = InData%WaveDirMin + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDirMax + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDir + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDOmega + Re_Xferred = Re_Xferred + 1 + IF ( .NOT. ASSOCIATED(InData%WaveDynP) ) 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%WaveDynP,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%WaveDynP,4), UBOUND(InData%WaveDynP,4) + DO i3 = LBOUND(InData%WaveDynP,3), UBOUND(InData%WaveDynP,3) + DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) + DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAcc) ) 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%WaveAcc,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAcc,5), UBOUND(InData%WaveAcc,5) + DO i4 = LBOUND(InData%WaveAcc,4), UBOUND(InData%WaveAcc,4) + DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) + DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) + DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAccMCF) ) 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%WaveAccMCF,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAccMCF,5), UBOUND(InData%WaveAccMCF,5) + DO i4 = LBOUND(InData%WaveAccMCF,4), UBOUND(InData%WaveAccMCF,4) + DO i3 = LBOUND(InData%WaveAccMCF,3), UBOUND(InData%WaveAccMCF,3) + DO i2 = LBOUND(InData%WaveAccMCF,2), UBOUND(InData%WaveAccMCF,2) + DO i1 = LBOUND(InData%WaveAccMCF,1), UBOUND(InData%WaveAccMCF,1) + ReKiBuf(Re_Xferred) = InData%WaveAccMCF(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveVel) ) 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%WaveVel,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveVel,5), UBOUND(InData%WaveVel,5) + DO i4 = LBOUND(InData%WaveVel,4), UBOUND(InData%WaveVel,4) + DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) + DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) + DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) + ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveDynP0) ) 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%PWaveDynP0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%PWaveDynP0,3), UBOUND(InData%PWaveDynP0,3) + DO i2 = LBOUND(InData%PWaveDynP0,2), UBOUND(InData%PWaveDynP0,2) + DO i1 = LBOUND(InData%PWaveDynP0,1), UBOUND(InData%PWaveDynP0,1) + ReKiBuf(Re_Xferred) = InData%PWaveDynP0(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAcc0) ) 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%PWaveAcc0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAcc0,4), UBOUND(InData%PWaveAcc0,4) + DO i3 = LBOUND(InData%PWaveAcc0,3), UBOUND(InData%PWaveAcc0,3) + DO i2 = LBOUND(InData%PWaveAcc0,2), UBOUND(InData%PWaveAcc0,2) + DO i1 = LBOUND(InData%PWaveAcc0,1), UBOUND(InData%PWaveAcc0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAcc0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAccMCF0) ) 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%PWaveAccMCF0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAccMCF0,4), UBOUND(InData%PWaveAccMCF0,4) + DO i3 = LBOUND(InData%PWaveAccMCF0,3), UBOUND(InData%PWaveAccMCF0,3) + DO i2 = LBOUND(InData%PWaveAccMCF0,2), UBOUND(InData%PWaveAccMCF0,2) + DO i1 = LBOUND(InData%PWaveAccMCF0,1), UBOUND(InData%PWaveAccMCF0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAccMCF0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveVel0) ) 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%PWaveVel0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveVel0,4), UBOUND(InData%PWaveVel0,4) + DO i3 = LBOUND(InData%PWaveVel0,3), UBOUND(InData%PWaveVel0,3) + DO i2 = LBOUND(InData%PWaveVel0,2), UBOUND(InData%PWaveVel0,2) + DO i1 = LBOUND(InData%PWaveVel0,1), UBOUND(InData%PWaveVel0,1) + ReKiBuf(Re_Xferred) = InData%PWaveVel0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElev1) ) 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%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev1,3), UBOUND(InData%WaveElev1,3) + DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElev2) ) 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%WaveElev2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev2,3), UBOUND(InData%WaveElev2,3) + DO i2 = LBOUND(InData%WaveElev2,2), UBOUND(InData%WaveElev2,2) + DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) + ReKiBuf(Re_Xferred) = InData%WaveElev2(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElev0) ) 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%WaveElev0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev0,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElev0,1), UBOUND(InData%WaveElev0,1) + ReKiBuf(Re_Xferred) = InData%WaveElev0(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) 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%WaveTime,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) + ReKiBuf(Re_Xferred) = InData%WaveTime(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + ReKiBuf(Re_Xferred) = InData%RhoXg + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave2 + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveMod + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveStMod + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveDirMod + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvLowCOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvLowCOffD + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOffD + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvLowCOffS + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOffS + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%InvalidWithSSExctn, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + ReKiBuf(Re_Xferred) = InData%MCFD + Re_Xferred = Re_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveElevSeries) ) 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%WaveElevSeries,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevSeries,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevSeries,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevSeries,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%WaveElevSeries,2), UBOUND(InData%WaveElevSeries,2) + DO i1 = LBOUND(InData%WaveElevSeries,1), UBOUND(InData%WaveElevSeries,1) + ReKiBuf(Re_Xferred) = InData%WaveElevSeries(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + END SUBROUTINE SeaSt_PackInitOutput + + SUBROUTINE SeaSt_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_InitOutputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackInitOutput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WriteOutputHdr 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%WriteOutputHdr)) DEALLOCATE(OutData%WriteOutputHdr) + ALLOCATE(OutData%WriteOutputHdr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WriteOutputHdr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WriteOutputHdr,1), UBOUND(OutData%WriteOutputHdr,1) + DO I = 1, LEN(OutData%WriteOutputHdr) + OutData%WriteOutputHdr(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WriteOutputUnt 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%WriteOutputUnt)) DEALLOCATE(OutData%WriteOutputUnt) + ALLOCATE(OutData%WriteOutputUnt(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WriteOutputUnt.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WriteOutputUnt,1), UBOUND(OutData%WriteOutputUnt,1) + DO I = 1, LEN(OutData%WriteOutputUnt) + OutData%WriteOutputUnt(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + END DO + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL NWTC_Library_Unpackprogdesc( Re_Buf, Db_Buf, Int_Buf, OutData%Ver, ErrStat2, ErrMsg2 ) ! Ver + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + OutData%WtrDens = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%WtrDpth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%MSL2SWL = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) + ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%WaveElevC0,2), UBOUND(OutData%WaveElevC0,2) + DO i1 = LBOUND(OutData%WaveElevC0,1), UBOUND(OutData%WaveElevC0,1) + OutData%WaveElevC0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveElevC)) DEALLOCATE(OutData%WaveElevC) + ALLOCATE(OutData%WaveElevC(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElevC,3), UBOUND(OutData%WaveElevC,3) + DO i2 = LBOUND(OutData%WaveElevC,2), UBOUND(OutData%WaveElevC,2) + DO i1 = LBOUND(OutData%WaveElevC,1), UBOUND(OutData%WaveElevC,1) + OutData%WaveElevC(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDirArr 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 (ASSOCIATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) + ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveDirArr,1), UBOUND(OutData%WaveDirArr,1) + OutData%WaveDirArr(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%WaveDirMin = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveDirMax = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveDir = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveMultiDir = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveMultiDir) + Int_Xferred = Int_Xferred + 1 + OutData%WaveDOmega = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) + ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveDynP,4), UBOUND(OutData%WaveDynP,4) + DO i3 = LBOUND(OutData%WaveDynP,3), UBOUND(OutData%WaveDynP,3) + DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) + DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) + OutData%WaveDynP(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) + ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAcc,5), UBOUND(OutData%WaveAcc,5) + DO i4 = LBOUND(OutData%WaveAcc,4), UBOUND(OutData%WaveAcc,4) + DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) + DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) + DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) + OutData%WaveAcc(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAccMCF 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAccMCF)) DEALLOCATE(OutData%WaveAccMCF) + ALLOCATE(OutData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAccMCF,5), UBOUND(OutData%WaveAccMCF,5) + DO i4 = LBOUND(OutData%WaveAccMCF,4), UBOUND(OutData%WaveAccMCF,4) + DO i3 = LBOUND(OutData%WaveAccMCF,3), UBOUND(OutData%WaveAccMCF,3) + DO i2 = LBOUND(OutData%WaveAccMCF,2), UBOUND(OutData%WaveAccMCF,2) + DO i1 = LBOUND(OutData%WaveAccMCF,1), UBOUND(OutData%WaveAccMCF,1) + OutData%WaveAccMCF(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) + ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveVel,5), UBOUND(OutData%WaveVel,5) + DO i4 = LBOUND(OutData%WaveVel,4), UBOUND(OutData%WaveVel,4) + DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) + DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) + DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) + OutData%WaveVel(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveDynP0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveDynP0)) DEALLOCATE(OutData%PWaveDynP0) + ALLOCATE(OutData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%PWaveDynP0,3), UBOUND(OutData%PWaveDynP0,3) + DO i2 = LBOUND(OutData%PWaveDynP0,2), UBOUND(OutData%PWaveDynP0,2) + DO i1 = LBOUND(OutData%PWaveDynP0,1), UBOUND(OutData%PWaveDynP0,1) + OutData%PWaveDynP0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAcc0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAcc0)) DEALLOCATE(OutData%PWaveAcc0) + ALLOCATE(OutData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAcc0,4), UBOUND(OutData%PWaveAcc0,4) + DO i3 = LBOUND(OutData%PWaveAcc0,3), UBOUND(OutData%PWaveAcc0,3) + DO i2 = LBOUND(OutData%PWaveAcc0,2), UBOUND(OutData%PWaveAcc0,2) + DO i1 = LBOUND(OutData%PWaveAcc0,1), UBOUND(OutData%PWaveAcc0,1) + OutData%PWaveAcc0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAccMCF0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAccMCF0)) DEALLOCATE(OutData%PWaveAccMCF0) + ALLOCATE(OutData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAccMCF0,4), UBOUND(OutData%PWaveAccMCF0,4) + DO i3 = LBOUND(OutData%PWaveAccMCF0,3), UBOUND(OutData%PWaveAccMCF0,3) + DO i2 = LBOUND(OutData%PWaveAccMCF0,2), UBOUND(OutData%PWaveAccMCF0,2) + DO i1 = LBOUND(OutData%PWaveAccMCF0,1), UBOUND(OutData%PWaveAccMCF0,1) + OutData%PWaveAccMCF0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveVel0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveVel0)) DEALLOCATE(OutData%PWaveVel0) + ALLOCATE(OutData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveVel0,4), UBOUND(OutData%PWaveVel0,4) + DO i3 = LBOUND(OutData%PWaveVel0,3), UBOUND(OutData%PWaveVel0,3) + DO i2 = LBOUND(OutData%PWaveVel0,2), UBOUND(OutData%PWaveVel0,2) + DO i1 = LBOUND(OutData%PWaveVel0,1), UBOUND(OutData%PWaveVel0,1) + OutData%PWaveVel0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev1,3), UBOUND(OutData%WaveElev1,3) + DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) + ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev2,3), UBOUND(OutData%WaveElev2,3) + DO i2 = LBOUND(OutData%WaveElev2,2), UBOUND(OutData%WaveElev2,2) + DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) + OutData%WaveElev2(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev0 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%WaveElev0)) DEALLOCATE(OutData%WaveElev0) + ALLOCATE(OutData%WaveElev0(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElev0,1), UBOUND(OutData%WaveElev0,1) + OutData%WaveElev0(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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 (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) + OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%RhoXg = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%NStepWave = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NStepWave2 = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveStMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveDirMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WvLowCOff = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOff = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvLowCOffD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOffD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvLowCOffS = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOffS = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%InvalidWithSSExctn = TRANSFER(IntKiBuf(Int_Xferred), OutData%InvalidWithSSExctn) + Int_Xferred = Int_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + OutData%MCFD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevSeries 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveElevSeries)) DEALLOCATE(OutData%WaveElevSeries) + ALLOCATE(OutData%WaveElevSeries(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevSeries.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%WaveElevSeries,2), UBOUND(OutData%WaveElevSeries,2) + DO i1 = LBOUND(OutData%WaveElevSeries,1), UBOUND(OutData%WaveElevSeries,1) + OutData%WaveElevSeries(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + END SUBROUTINE SeaSt_UnPackInitOutput + + SUBROUTINE SeaSt_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_ContinuousStateType), INTENT(IN) :: SrcContStateData + TYPE(SeaSt_ContinuousStateType), INTENT(INOUT) :: DstContStateData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyContState' +! + ErrStat = ErrID_None + ErrMsg = "" + DstContStateData%UnusedStates = SrcContStateData%UnusedStates + END SUBROUTINE SeaSt_CopyContState + + SUBROUTINE SeaSt_DestroyContState( ContStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_ContinuousStateType), INTENT(INOUT) :: ContStateData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyContState' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE SeaSt_DestroyContState + + SUBROUTINE SeaSt_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_ContinuousStateType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackContState' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Db_BufSz = Db_BufSz + 1 ! UnusedStates + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DbKiBuf(Db_Xferred) = InData%UnusedStates + Db_Xferred = Db_Xferred + 1 + END SUBROUTINE SeaSt_PackContState + + SUBROUTINE SeaSt_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_ContinuousStateType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackContState' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%UnusedStates = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + END SUBROUTINE SeaSt_UnPackContState + + SUBROUTINE SeaSt_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_DiscreteStateType), INTENT(IN) :: SrcDiscStateData + TYPE(SeaSt_DiscreteStateType), INTENT(INOUT) :: DstDiscStateData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyDiscState' +! + ErrStat = ErrID_None + ErrMsg = "" + DstDiscStateData%UnusedStates = SrcDiscStateData%UnusedStates + END SUBROUTINE SeaSt_CopyDiscState + + SUBROUTINE SeaSt_DestroyDiscState( DiscStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_DiscreteStateType), INTENT(INOUT) :: DiscStateData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyDiscState' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE SeaSt_DestroyDiscState + + SUBROUTINE SeaSt_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_DiscreteStateType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackDiscState' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Db_BufSz = Db_BufSz + 1 ! UnusedStates + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DbKiBuf(Db_Xferred) = InData%UnusedStates + Db_Xferred = Db_Xferred + 1 + END SUBROUTINE SeaSt_PackDiscState + + SUBROUTINE SeaSt_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_DiscreteStateType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackDiscState' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%UnusedStates = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + END SUBROUTINE SeaSt_UnPackDiscState + + SUBROUTINE SeaSt_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_ConstraintStateType), INTENT(IN) :: SrcConstrStateData + TYPE(SeaSt_ConstraintStateType), INTENT(INOUT) :: DstConstrStateData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyConstrState' +! + ErrStat = ErrID_None + ErrMsg = "" + DstConstrStateData%UnusedStates = SrcConstrStateData%UnusedStates + END SUBROUTINE SeaSt_CopyConstrState + + SUBROUTINE SeaSt_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_ConstraintStateType), INTENT(INOUT) :: ConstrStateData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyConstrState' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE SeaSt_DestroyConstrState + + SUBROUTINE SeaSt_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_ConstraintStateType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackConstrState' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Db_BufSz = Db_BufSz + 1 ! UnusedStates + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DbKiBuf(Db_Xferred) = InData%UnusedStates + Db_Xferred = Db_Xferred + 1 + END SUBROUTINE SeaSt_PackConstrState + + SUBROUTINE SeaSt_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_ConstraintStateType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackConstrState' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%UnusedStates = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + END SUBROUTINE SeaSt_UnPackConstrState + + SUBROUTINE SeaSt_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_OtherStateType), INTENT(IN) :: SrcOtherStateData + TYPE(SeaSt_OtherStateType), INTENT(INOUT) :: DstOtherStateData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyOtherState' +! + ErrStat = ErrID_None + ErrMsg = "" + DstOtherStateData%UnusedStates = SrcOtherStateData%UnusedStates + END SUBROUTINE SeaSt_CopyOtherState + + SUBROUTINE SeaSt_DestroyOtherState( OtherStateData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_OtherStateType), INTENT(INOUT) :: OtherStateData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyOtherState' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE SeaSt_DestroyOtherState + + SUBROUTINE SeaSt_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_OtherStateType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackOtherState' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Db_BufSz = Db_BufSz + 1 ! UnusedStates + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DbKiBuf(Db_Xferred) = InData%UnusedStates + Db_Xferred = Db_Xferred + 1 + END SUBROUTINE SeaSt_PackOtherState + + SUBROUTINE SeaSt_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_OtherStateType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackOtherState' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%UnusedStates = REAL(DbKiBuf(Db_Xferred), R8Ki) + Db_Xferred = Db_Xferred + 1 + END SUBROUTINE SeaSt_UnPackOtherState + + SUBROUTINE SeaSt_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_MiscVarType), INTENT(IN) :: SrcMiscData + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: DstMiscData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyMisc' +! + ErrStat = ErrID_None + ErrMsg = "" + DstMiscData%Decimate = SrcMiscData%Decimate + DstMiscData%LastOutTime = SrcMiscData%LastOutTime + DstMiscData%LastIndWave = SrcMiscData%LastIndWave + CALL SeaSt_Interp_CopyMisc( SrcMiscData%SeaSt_Interp_m, DstMiscData%SeaSt_Interp_m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaSt_CopyMisc + + SUBROUTINE SeaSt_DestroyMisc( MiscData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: MiscData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyMisc' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + CALL SeaSt_Interp_DestroyMisc( MiscData%SeaSt_Interp_m, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + END SUBROUTINE SeaSt_DestroyMisc + + SUBROUTINE SeaSt_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_MiscVarType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackMisc' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1 ! Decimate + Db_BufSz = Db_BufSz + 1 ! LastOutTime + Int_BufSz = Int_BufSz + 1 ! LastIndWave + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_m: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_m, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_m + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_m + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_m + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + IntKiBuf(Int_Xferred) = InData%Decimate + Int_Xferred = Int_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%LastOutTime + Db_Xferred = Db_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%LastIndWave + Int_Xferred = Int_Xferred + 1 + CALL SeaSt_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_m, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END SUBROUTINE SeaSt_PackMisc + + SUBROUTINE SeaSt_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackMisc' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%Decimate = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%LastOutTime = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + OutData%LastIndWave = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_m, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END SUBROUTINE SeaSt_UnPackMisc + + SUBROUTINE SeaSt_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_ParameterType), INTENT(IN) :: SrcParamData + TYPE(SeaSt_ParameterType), INTENT(INOUT) :: DstParamData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyParam' +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_CopyParam( SrcParamData%Waves2, DstParamData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +IF (ASSOCIATED(SrcParamData%WaveTime)) THEN + i1_l = LBOUND(SrcParamData%WaveTime,1) + i1_u = UBOUND(SrcParamData%WaveTime,1) + IF (.NOT. ASSOCIATED(DstParamData%WaveTime)) THEN + ALLOCATE(DstParamData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveTime = SrcParamData%WaveTime +ENDIF + DstParamData%WaveDT = SrcParamData%WaveDT + DstParamData%NGridPts = SrcParamData%NGridPts + DstParamData%NGrid = SrcParamData%NGrid + DstParamData%deltaGrid = SrcParamData%deltaGrid + DstParamData%X_HalfWidth = SrcParamData%X_HalfWidth + DstParamData%Y_HalfWidth = SrcParamData%Y_HalfWidth + DstParamData%Z_Depth = SrcParamData%Z_Depth + DstParamData%NStepWave = SrcParamData%NStepWave + DstParamData%NWaveElev = SrcParamData%NWaveElev +IF (ALLOCATED(SrcParamData%WaveElevxi)) THEN + i1_l = LBOUND(SrcParamData%WaveElevxi,1) + i1_u = UBOUND(SrcParamData%WaveElevxi,1) + IF (.NOT. ALLOCATED(DstParamData%WaveElevxi)) THEN + ALLOCATE(DstParamData%WaveElevxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElevxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElevxi = SrcParamData%WaveElevxi +ENDIF +IF (ALLOCATED(SrcParamData%WaveElevyi)) THEN + i1_l = LBOUND(SrcParamData%WaveElevyi,1) + i1_u = UBOUND(SrcParamData%WaveElevyi,1) + IF (.NOT. ALLOCATED(DstParamData%WaveElevyi)) THEN + ALLOCATE(DstParamData%WaveElevyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElevyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElevyi = SrcParamData%WaveElevyi +ENDIF +IF (ASSOCIATED(SrcParamData%WaveElev1)) THEN + i1_l = LBOUND(SrcParamData%WaveElev1,1) + i1_u = UBOUND(SrcParamData%WaveElev1,1) + i2_l = LBOUND(SrcParamData%WaveElev1,2) + i2_u = UBOUND(SrcParamData%WaveElev1,2) + i3_l = LBOUND(SrcParamData%WaveElev1,3) + i3_u = UBOUND(SrcParamData%WaveElev1,3) + IF (.NOT. ASSOCIATED(DstParamData%WaveElev1)) THEN + ALLOCATE(DstParamData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElev1 = SrcParamData%WaveElev1 +ENDIF +IF (ASSOCIATED(SrcParamData%WaveElev2)) THEN + i1_l = LBOUND(SrcParamData%WaveElev2,1) + i1_u = UBOUND(SrcParamData%WaveElev2,1) + i2_l = LBOUND(SrcParamData%WaveElev2,2) + i2_u = UBOUND(SrcParamData%WaveElev2,2) + i3_l = LBOUND(SrcParamData%WaveElev2,3) + i3_u = UBOUND(SrcParamData%WaveElev2,3) + IF (.NOT. ASSOCIATED(DstParamData%WaveElev2)) THEN + ALLOCATE(DstParamData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElev2 = SrcParamData%WaveElev2 +ENDIF +IF (ASSOCIATED(SrcParamData%PWaveDynP0)) THEN + i1_l = LBOUND(SrcParamData%PWaveDynP0,1) + i1_u = UBOUND(SrcParamData%PWaveDynP0,1) + i2_l = LBOUND(SrcParamData%PWaveDynP0,2) + i2_u = UBOUND(SrcParamData%PWaveDynP0,2) + i3_l = LBOUND(SrcParamData%PWaveDynP0,3) + i3_u = UBOUND(SrcParamData%PWaveDynP0,3) + IF (.NOT. ASSOCIATED(DstParamData%PWaveDynP0)) THEN + ALLOCATE(DstParamData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%PWaveDynP0 = SrcParamData%PWaveDynP0 +ENDIF +IF (ASSOCIATED(SrcParamData%WaveDynP)) THEN + i1_l = LBOUND(SrcParamData%WaveDynP,1) + i1_u = UBOUND(SrcParamData%WaveDynP,1) + i2_l = LBOUND(SrcParamData%WaveDynP,2) + i2_u = UBOUND(SrcParamData%WaveDynP,2) + i3_l = LBOUND(SrcParamData%WaveDynP,3) + i3_u = UBOUND(SrcParamData%WaveDynP,3) + i4_l = LBOUND(SrcParamData%WaveDynP,4) + i4_u = UBOUND(SrcParamData%WaveDynP,4) + IF (.NOT. ASSOCIATED(DstParamData%WaveDynP)) THEN + ALLOCATE(DstParamData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveDynP.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveDynP = SrcParamData%WaveDynP +ENDIF +IF (ASSOCIATED(SrcParamData%WaveAcc)) THEN + i1_l = LBOUND(SrcParamData%WaveAcc,1) + i1_u = UBOUND(SrcParamData%WaveAcc,1) + i2_l = LBOUND(SrcParamData%WaveAcc,2) + i2_u = UBOUND(SrcParamData%WaveAcc,2) + i3_l = LBOUND(SrcParamData%WaveAcc,3) + i3_u = UBOUND(SrcParamData%WaveAcc,3) + i4_l = LBOUND(SrcParamData%WaveAcc,4) + i4_u = UBOUND(SrcParamData%WaveAcc,4) + i5_l = LBOUND(SrcParamData%WaveAcc,5) + i5_u = UBOUND(SrcParamData%WaveAcc,5) + IF (.NOT. ASSOCIATED(DstParamData%WaveAcc)) THEN + ALLOCATE(DstParamData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveAcc = SrcParamData%WaveAcc +ENDIF +IF (ASSOCIATED(SrcParamData%PWaveAcc0)) THEN + i1_l = LBOUND(SrcParamData%PWaveAcc0,1) + i1_u = UBOUND(SrcParamData%PWaveAcc0,1) + i2_l = LBOUND(SrcParamData%PWaveAcc0,2) + i2_u = UBOUND(SrcParamData%PWaveAcc0,2) + i3_l = LBOUND(SrcParamData%PWaveAcc0,3) + i3_u = UBOUND(SrcParamData%PWaveAcc0,3) + i4_l = LBOUND(SrcParamData%PWaveAcc0,4) + i4_u = UBOUND(SrcParamData%PWaveAcc0,4) + IF (.NOT. ASSOCIATED(DstParamData%PWaveAcc0)) THEN + ALLOCATE(DstParamData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%PWaveAcc0 = SrcParamData%PWaveAcc0 +ENDIF +IF (ASSOCIATED(SrcParamData%WaveVel)) THEN + i1_l = LBOUND(SrcParamData%WaveVel,1) + i1_u = UBOUND(SrcParamData%WaveVel,1) + i2_l = LBOUND(SrcParamData%WaveVel,2) + i2_u = UBOUND(SrcParamData%WaveVel,2) + i3_l = LBOUND(SrcParamData%WaveVel,3) + i3_u = UBOUND(SrcParamData%WaveVel,3) + i4_l = LBOUND(SrcParamData%WaveVel,4) + i4_u = UBOUND(SrcParamData%WaveVel,4) + i5_l = LBOUND(SrcParamData%WaveVel,5) + i5_u = UBOUND(SrcParamData%WaveVel,5) + IF (.NOT. ASSOCIATED(DstParamData%WaveVel)) THEN + ALLOCATE(DstParamData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveVel.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveVel = SrcParamData%WaveVel +ENDIF +IF (ASSOCIATED(SrcParamData%PWaveVel0)) THEN + i1_l = LBOUND(SrcParamData%PWaveVel0,1) + i1_u = UBOUND(SrcParamData%PWaveVel0,1) + i2_l = LBOUND(SrcParamData%PWaveVel0,2) + i2_u = UBOUND(SrcParamData%PWaveVel0,2) + i3_l = LBOUND(SrcParamData%PWaveVel0,3) + i3_u = UBOUND(SrcParamData%PWaveVel0,3) + i4_l = LBOUND(SrcParamData%PWaveVel0,4) + i4_u = UBOUND(SrcParamData%PWaveVel0,4) + IF (.NOT. ASSOCIATED(DstParamData%PWaveVel0)) THEN + ALLOCATE(DstParamData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%PWaveVel0 = SrcParamData%PWaveVel0 +ENDIF +IF (ASSOCIATED(SrcParamData%WaveAccMCF)) THEN + i1_l = LBOUND(SrcParamData%WaveAccMCF,1) + i1_u = UBOUND(SrcParamData%WaveAccMCF,1) + i2_l = LBOUND(SrcParamData%WaveAccMCF,2) + i2_u = UBOUND(SrcParamData%WaveAccMCF,2) + i3_l = LBOUND(SrcParamData%WaveAccMCF,3) + i3_u = UBOUND(SrcParamData%WaveAccMCF,3) + i4_l = LBOUND(SrcParamData%WaveAccMCF,4) + i4_u = UBOUND(SrcParamData%WaveAccMCF,4) + i5_l = LBOUND(SrcParamData%WaveAccMCF,5) + i5_u = UBOUND(SrcParamData%WaveAccMCF,5) + IF (.NOT. ASSOCIATED(DstParamData%WaveAccMCF)) THEN + ALLOCATE(DstParamData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveAccMCF = SrcParamData%WaveAccMCF +ENDIF +IF (ASSOCIATED(SrcParamData%WaveDirArr)) THEN + i1_l = LBOUND(SrcParamData%WaveDirArr,1) + i1_u = UBOUND(SrcParamData%WaveDirArr,1) + IF (.NOT. ASSOCIATED(DstParamData%WaveDirArr)) THEN + ALLOCATE(DstParamData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveDirArr = SrcParamData%WaveDirArr +ENDIF +IF (ASSOCIATED(SrcParamData%WaveElevC0)) THEN + i1_l = LBOUND(SrcParamData%WaveElevC0,1) + i1_u = UBOUND(SrcParamData%WaveElevC0,1) + i2_l = LBOUND(SrcParamData%WaveElevC0,2) + i2_u = UBOUND(SrcParamData%WaveElevC0,2) + IF (.NOT. ASSOCIATED(DstParamData%WaveElevC0)) THEN + ALLOCATE(DstParamData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElevC0 = SrcParamData%WaveElevC0 +ENDIF +IF (ASSOCIATED(SrcParamData%PWaveAccMCF0)) THEN + i1_l = LBOUND(SrcParamData%PWaveAccMCF0,1) + i1_u = UBOUND(SrcParamData%PWaveAccMCF0,1) + i2_l = LBOUND(SrcParamData%PWaveAccMCF0,2) + i2_u = UBOUND(SrcParamData%PWaveAccMCF0,2) + i3_l = LBOUND(SrcParamData%PWaveAccMCF0,3) + i3_u = UBOUND(SrcParamData%PWaveAccMCF0,3) + i4_l = LBOUND(SrcParamData%PWaveAccMCF0,4) + i4_u = UBOUND(SrcParamData%PWaveAccMCF0,4) + IF (.NOT. ASSOCIATED(DstParamData%PWaveAccMCF0)) THEN + ALLOCATE(DstParamData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%PWaveAccMCF0 = SrcParamData%PWaveAccMCF0 +ENDIF + DstParamData%NWaveKin = SrcParamData%NWaveKin +IF (ALLOCATED(SrcParamData%WaveKinxi)) THEN + i1_l = LBOUND(SrcParamData%WaveKinxi,1) + i1_u = UBOUND(SrcParamData%WaveKinxi,1) + IF (.NOT. ALLOCATED(DstParamData%WaveKinxi)) THEN + ALLOCATE(DstParamData%WaveKinxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveKinxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveKinxi = SrcParamData%WaveKinxi +ENDIF +IF (ALLOCATED(SrcParamData%WaveKinyi)) THEN + i1_l = LBOUND(SrcParamData%WaveKinyi,1) + i1_u = UBOUND(SrcParamData%WaveKinyi,1) + IF (.NOT. ALLOCATED(DstParamData%WaveKinyi)) THEN + ALLOCATE(DstParamData%WaveKinyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveKinyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveKinyi = SrcParamData%WaveKinyi +ENDIF +IF (ALLOCATED(SrcParamData%WaveKinzi)) THEN + i1_l = LBOUND(SrcParamData%WaveKinzi,1) + i1_u = UBOUND(SrcParamData%WaveKinzi,1) + IF (.NOT. ALLOCATED(DstParamData%WaveKinzi)) THEN + ALLOCATE(DstParamData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveKinzi = SrcParamData%WaveKinzi +ENDIF + DstParamData%WtrDpth = SrcParamData%WtrDpth + DstParamData%DT = SrcParamData%DT + DstParamData%WaveStMod = SrcParamData%WaveStMod +IF (ALLOCATED(SrcParamData%OutParam)) THEN + i1_l = LBOUND(SrcParamData%OutParam,1) + i1_u = UBOUND(SrcParamData%OutParam,1) + IF (.NOT. ALLOCATED(DstParamData%OutParam)) THEN + ALLOCATE(DstParamData%OutParam(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstParamData%OutParam.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DO i1 = LBOUND(SrcParamData%OutParam,1), UBOUND(SrcParamData%OutParam,1) + CALL NWTC_Library_Copyoutparmtype( SrcParamData%OutParam(i1), DstParamData%OutParam(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO +ENDIF + DstParamData%NumOuts = SrcParamData%NumOuts + DstParamData%OutSwtch = SrcParamData%OutSwtch + DstParamData%OutFmt = SrcParamData%OutFmt + DstParamData%OutSFmt = SrcParamData%OutSFmt + DstParamData%Delim = SrcParamData%Delim + DstParamData%UnOutFile = SrcParamData%UnOutFile + DstParamData%OutDec = SrcParamData%OutDec + CALL SeaSt_Interp_CopyParam( SrcParamData%SeaSt_Interp_p, DstParamData%SeaSt_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaSt_CopyParam + + SUBROUTINE SeaSt_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_ParameterType), INTENT(INOUT) :: ParamData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyParam' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + CALL Waves2_DestroyParam( ParamData%Waves2, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +IF (ASSOCIATED(ParamData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveTime) + ParamData%WaveTime => NULL() +ENDIF +IF (ALLOCATED(ParamData%WaveElevxi)) THEN + DEALLOCATE(ParamData%WaveElevxi) +ENDIF +IF (ALLOCATED(ParamData%WaveElevyi)) THEN + DEALLOCATE(ParamData%WaveElevyi) +ENDIF +IF (ASSOCIATED(ParamData%WaveElev1)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveElev1) + ParamData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveElev2)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveElev2) + ParamData%WaveElev2 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveDynP0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%PWaveDynP0) + ParamData%PWaveDynP0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveDynP)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveDynP) + ParamData%WaveDynP => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveAcc)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveAcc) + ParamData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveAcc0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%PWaveAcc0) + ParamData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveVel)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveVel) + ParamData%WaveVel => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveVel0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%PWaveVel0) + ParamData%PWaveVel0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveAccMCF)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveAccMCF) + ParamData%WaveAccMCF => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveDirArr)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveDirArr) + ParamData%WaveDirArr => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveElevC0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%WaveElevC0) + ParamData%WaveElevC0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveAccMCF0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(ParamData%PWaveAccMCF0) + ParamData%PWaveAccMCF0 => NULL() +ENDIF +IF (ALLOCATED(ParamData%WaveKinxi)) THEN + DEALLOCATE(ParamData%WaveKinxi) +ENDIF +IF (ALLOCATED(ParamData%WaveKinyi)) THEN + DEALLOCATE(ParamData%WaveKinyi) +ENDIF +IF (ALLOCATED(ParamData%WaveKinzi)) THEN + DEALLOCATE(ParamData%WaveKinzi) +ENDIF +IF (ALLOCATED(ParamData%OutParam)) THEN +DO i1 = LBOUND(ParamData%OutParam,1), UBOUND(ParamData%OutParam,1) + CALL NWTC_Library_Destroyoutparmtype( ParamData%OutParam(i1), ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) +ENDDO + DEALLOCATE(ParamData%OutParam) +ENDIF + CALL SeaSt_Interp_DestroyParam( ParamData%SeaSt_Interp_p, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + END SUBROUTINE SeaSt_DestroyParam + + SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_ParameterType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackParam' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! Waves2: size of buffers for each call to pack subtype + CALL Waves2_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, .TRUE. ) ! Waves2 + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Waves2 + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Waves2 + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Waves2 + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no + IF ( ASSOCIATED(InData%WaveTime) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime + END IF + Db_BufSz = Db_BufSz + 1 ! WaveDT + Int_BufSz = Int_BufSz + 1 ! NGridPts + Int_BufSz = Int_BufSz + SIZE(InData%NGrid) ! NGrid + Re_BufSz = Re_BufSz + SIZE(InData%deltaGrid) ! deltaGrid + Re_BufSz = Re_BufSz + 1 ! X_HalfWidth + Re_BufSz = Re_BufSz + 1 ! Y_HalfWidth + Re_BufSz = Re_BufSz + 1 ! Z_Depth + Int_BufSz = Int_BufSz + 1 ! NStepWave + Int_BufSz = Int_BufSz + 1 ! NWaveElev + Int_BufSz = Int_BufSz + 1 ! WaveElevxi allocated yes/no + IF ( ALLOCATED(InData%WaveElevxi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElevxi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevxi) ! WaveElevxi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevyi allocated yes/no + IF ( ALLOCATED(InData%WaveElevyi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElevyi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevyi) ! WaveElevyi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev1 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev1) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev1) ! WaveElev1 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev2) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveDynP0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveDynP0) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! PWaveDynP0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveDynP0) ! PWaveDynP0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDynP allocated yes/no + IF ( ASSOCIATED(InData%WaveDynP) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveDynP upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP) ! WaveDynP + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no + IF ( ASSOCIATED(InData%WaveAcc) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAcc upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAcc0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAcc0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAcc0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAcc0) ! PWaveAcc0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no + IF ( ASSOCIATED(InData%WaveVel) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveVel upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveVel0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveVel0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveVel0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveVel0) ! PWaveVel0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAccMCF allocated yes/no + IF ( ASSOCIATED(InData%WaveAccMCF) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAccMCF upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAccMCF) ! WaveAccMCF + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no + IF ( ASSOCIATED(InData%WaveDirArr) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no + IF ( ASSOCIATED(InData%WaveElevC0) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAccMCF0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAccMCF0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAccMCF0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAccMCF0) ! PWaveAccMCF0 + END IF + Int_BufSz = Int_BufSz + 1 ! NWaveKin + Int_BufSz = Int_BufSz + 1 ! WaveKinxi allocated yes/no + IF ( ALLOCATED(InData%WaveKinxi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinxi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinxi) ! WaveKinxi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveKinyi allocated yes/no + IF ( ALLOCATED(InData%WaveKinyi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinyi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinyi) ! WaveKinyi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveKinzi allocated yes/no + IF ( ALLOCATED(InData%WaveKinzi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinzi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinzi) ! WaveKinzi + END IF + Re_BufSz = Re_BufSz + 1 ! WtrDpth + Db_BufSz = Db_BufSz + 1 ! DT + Int_BufSz = Int_BufSz + 1 ! WaveStMod + Int_BufSz = Int_BufSz + 1 ! OutParam allocated yes/no + IF ( ALLOCATED(InData%OutParam) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! OutParam upper/lower bounds for each dimension + DO i1 = LBOUND(InData%OutParam,1), UBOUND(InData%OutParam,1) + Int_BufSz = Int_BufSz + 3 ! OutParam: size of buffers for each call to pack subtype + CALL NWTC_Library_Packoutparmtype( Re_Buf, Db_Buf, Int_Buf, InData%OutParam(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OutParam + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! OutParam + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! OutParam + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! OutParam + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + END DO + END IF + Int_BufSz = Int_BufSz + 1 ! NumOuts + Int_BufSz = Int_BufSz + 1 ! OutSwtch + Int_BufSz = Int_BufSz + 1*LEN(InData%OutFmt) ! OutFmt + Int_BufSz = Int_BufSz + 1*LEN(InData%OutSFmt) ! OutSFmt + Int_BufSz = Int_BufSz + 1*LEN(InData%Delim) ! Delim + Int_BufSz = Int_BufSz + 1 ! UnOutFile + Int_BufSz = Int_BufSz + 1 ! OutDec + Int_BufSz = Int_BufSz + 3 ! SeaSt_Interp_p: size of buffers for each call to pack subtype + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! SeaSt_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! SeaSt_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + CALL Waves2_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Waves2, ErrStat2, ErrMsg2, OnlySize ) ! Waves2 + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) 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%WaveTime,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) + ReKiBuf(Re_Xferred) = InData%WaveTime(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + DbKiBuf(Db_Xferred) = InData%WaveDT + Db_Xferred = Db_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NGridPts + Int_Xferred = Int_Xferred + 1 + DO i1 = LBOUND(InData%NGrid,1), UBOUND(InData%NGrid,1) + IntKiBuf(Int_Xferred) = InData%NGrid(i1) + Int_Xferred = Int_Xferred + 1 + END DO + DO i1 = LBOUND(InData%deltaGrid,1), UBOUND(InData%deltaGrid,1) + ReKiBuf(Re_Xferred) = InData%deltaGrid(i1) + Re_Xferred = Re_Xferred + 1 + END DO + ReKiBuf(Re_Xferred) = InData%X_HalfWidth + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%Y_HalfWidth + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%Z_Depth + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NWaveElev + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveElevxi) ) 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%WaveElevxi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevxi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElevxi,1), UBOUND(InData%WaveElevxi,1) + ReKiBuf(Re_Xferred) = InData%WaveElevxi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElevyi) ) 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%WaveElevyi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevyi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElevyi,1), UBOUND(InData%WaveElevyi,1) + ReKiBuf(Re_Xferred) = InData%WaveElevyi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElev1) ) 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%WaveElev1,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev1,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev1,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev1,3), UBOUND(InData%WaveElev1,3) + DO i2 = LBOUND(InData%WaveElev1,2), UBOUND(InData%WaveElev1,2) + DO i1 = LBOUND(InData%WaveElev1,1), UBOUND(InData%WaveElev1,1) + ReKiBuf(Re_Xferred) = InData%WaveElev1(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElev2) ) 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%WaveElev2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev2,3), UBOUND(InData%WaveElev2,3) + DO i2 = LBOUND(InData%WaveElev2,2), UBOUND(InData%WaveElev2,2) + DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) + ReKiBuf(Re_Xferred) = InData%WaveElev2(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveDynP0) ) 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%PWaveDynP0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%PWaveDynP0,3), UBOUND(InData%PWaveDynP0,3) + DO i2 = LBOUND(InData%PWaveDynP0,2), UBOUND(InData%PWaveDynP0,2) + DO i1 = LBOUND(InData%PWaveDynP0,1), UBOUND(InData%PWaveDynP0,1) + ReKiBuf(Re_Xferred) = InData%PWaveDynP0(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveDynP) ) 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%WaveDynP,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%WaveDynP,4), UBOUND(InData%WaveDynP,4) + DO i3 = LBOUND(InData%WaveDynP,3), UBOUND(InData%WaveDynP,3) + DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) + DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAcc) ) 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%WaveAcc,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAcc,5), UBOUND(InData%WaveAcc,5) + DO i4 = LBOUND(InData%WaveAcc,4), UBOUND(InData%WaveAcc,4) + DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) + DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) + DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAcc0) ) 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%PWaveAcc0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAcc0,4), UBOUND(InData%PWaveAcc0,4) + DO i3 = LBOUND(InData%PWaveAcc0,3), UBOUND(InData%PWaveAcc0,3) + DO i2 = LBOUND(InData%PWaveAcc0,2), UBOUND(InData%PWaveAcc0,2) + DO i1 = LBOUND(InData%PWaveAcc0,1), UBOUND(InData%PWaveAcc0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAcc0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveVel) ) 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%WaveVel,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveVel,5), UBOUND(InData%WaveVel,5) + DO i4 = LBOUND(InData%WaveVel,4), UBOUND(InData%WaveVel,4) + DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) + DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) + DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) + ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveVel0) ) 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%PWaveVel0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveVel0,4), UBOUND(InData%PWaveVel0,4) + DO i3 = LBOUND(InData%PWaveVel0,3), UBOUND(InData%PWaveVel0,3) + DO i2 = LBOUND(InData%PWaveVel0,2), UBOUND(InData%PWaveVel0,2) + DO i1 = LBOUND(InData%PWaveVel0,1), UBOUND(InData%PWaveVel0,1) + ReKiBuf(Re_Xferred) = InData%PWaveVel0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAccMCF) ) 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%WaveAccMCF,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAccMCF,5), UBOUND(InData%WaveAccMCF,5) + DO i4 = LBOUND(InData%WaveAccMCF,4), UBOUND(InData%WaveAccMCF,4) + DO i3 = LBOUND(InData%WaveAccMCF,3), UBOUND(InData%WaveAccMCF,3) + DO i2 = LBOUND(InData%WaveAccMCF,2), UBOUND(InData%WaveAccMCF,2) + DO i1 = LBOUND(InData%WaveAccMCF,1), UBOUND(InData%WaveAccMCF,1) + ReKiBuf(Re_Xferred) = InData%WaveAccMCF(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveDirArr) ) 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%WaveDirArr,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDirArr,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveDirArr,1), UBOUND(InData%WaveDirArr,1) + ReKiBuf(Re_Xferred) = InData%WaveDirArr(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) 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%WaveElevC0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%WaveElevC0,2), UBOUND(InData%WaveElevC0,2) + DO i1 = LBOUND(InData%WaveElevC0,1), UBOUND(InData%WaveElevC0,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC0(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAccMCF0) ) 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%PWaveAccMCF0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAccMCF0,4), UBOUND(InData%PWaveAccMCF0,4) + DO i3 = LBOUND(InData%PWaveAccMCF0,3), UBOUND(InData%PWaveAccMCF0,3) + DO i2 = LBOUND(InData%PWaveAccMCF0,2), UBOUND(InData%PWaveAccMCF0,2) + DO i1 = LBOUND(InData%PWaveAccMCF0,1), UBOUND(InData%PWaveAccMCF0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAccMCF0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IntKiBuf(Int_Xferred) = InData%NWaveKin + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveKinxi) ) 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%WaveKinxi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinxi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinxi,1), UBOUND(InData%WaveKinxi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinxi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveKinyi) ) 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%WaveKinyi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinyi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinyi,1), UBOUND(InData%WaveKinyi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinyi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveKinzi) ) 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%WaveKinzi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinzi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinzi,1), UBOUND(InData%WaveKinzi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinzi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + ReKiBuf(Re_Xferred) = InData%WtrDpth + Re_Xferred = Re_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%DT + Db_Xferred = Db_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveStMod + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%OutParam) ) 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%OutParam,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%OutParam,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%OutParam,1), UBOUND(InData%OutParam,1) + CALL NWTC_Library_Packoutparmtype( Re_Buf, Db_Buf, Int_Buf, InData%OutParam(i1), ErrStat2, ErrMsg2, OnlySize ) ! OutParam + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END DO + END IF + IntKiBuf(Int_Xferred) = InData%NumOuts + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%OutSwtch + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(InData%OutFmt) + IntKiBuf(Int_Xferred) = ICHAR(InData%OutFmt(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(InData%OutSFmt) + IntKiBuf(Int_Xferred) = ICHAR(InData%OutSFmt(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(InData%Delim) + IntKiBuf(Int_Xferred) = ICHAR(InData%Delim(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + IntKiBuf(Int_Xferred) = InData%UnOutFile + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%OutDec + Int_Xferred = Int_Xferred + 1 + CALL SeaSt_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%SeaSt_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + END SUBROUTINE SeaSt_PackParam + + SUBROUTINE SeaSt_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_ParameterType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackParam' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL Waves2_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%Waves2, ErrStat2, ErrMsg2 ) ! Waves2 + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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 (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) + OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%WaveDT = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + OutData%NGridPts = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + i1_l = LBOUND(OutData%NGrid,1) + i1_u = UBOUND(OutData%NGrid,1) + DO i1 = LBOUND(OutData%NGrid,1), UBOUND(OutData%NGrid,1) + OutData%NGrid(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + i1_l = LBOUND(OutData%deltaGrid,1) + i1_u = UBOUND(OutData%deltaGrid,1) + DO i1 = LBOUND(OutData%deltaGrid,1), UBOUND(OutData%deltaGrid,1) + OutData%deltaGrid(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + OutData%X_HalfWidth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%Y_HalfWidth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%Z_Depth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%NStepWave = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NWaveElev = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevxi 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%WaveElevxi)) DEALLOCATE(OutData%WaveElevxi) + ALLOCATE(OutData%WaveElevxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElevxi,1), UBOUND(OutData%WaveElevxi,1) + OutData%WaveElevxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevyi 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%WaveElevyi)) DEALLOCATE(OutData%WaveElevyi) + ALLOCATE(OutData%WaveElevyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElevyi,1), UBOUND(OutData%WaveElevyi,1) + OutData%WaveElevyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev1 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev1)) DEALLOCATE(OutData%WaveElev1) + ALLOCATE(OutData%WaveElev1(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev1.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev1,3), UBOUND(OutData%WaveElev1,3) + DO i2 = LBOUND(OutData%WaveElev1,2), UBOUND(OutData%WaveElev1,2) + DO i1 = LBOUND(OutData%WaveElev1,1), UBOUND(OutData%WaveElev1,1) + OutData%WaveElev1(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) + ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev2,3), UBOUND(OutData%WaveElev2,3) + DO i2 = LBOUND(OutData%WaveElev2,2), UBOUND(OutData%WaveElev2,2) + DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) + OutData%WaveElev2(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveDynP0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveDynP0)) DEALLOCATE(OutData%PWaveDynP0) + ALLOCATE(OutData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%PWaveDynP0,3), UBOUND(OutData%PWaveDynP0,3) + DO i2 = LBOUND(OutData%PWaveDynP0,2), UBOUND(OutData%PWaveDynP0,2) + DO i1 = LBOUND(OutData%PWaveDynP0,1), UBOUND(OutData%PWaveDynP0,1) + OutData%PWaveDynP0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) + ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveDynP,4), UBOUND(OutData%WaveDynP,4) + DO i3 = LBOUND(OutData%WaveDynP,3), UBOUND(OutData%WaveDynP,3) + DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) + DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) + OutData%WaveDynP(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) + ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAcc,5), UBOUND(OutData%WaveAcc,5) + DO i4 = LBOUND(OutData%WaveAcc,4), UBOUND(OutData%WaveAcc,4) + DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) + DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) + DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) + OutData%WaveAcc(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAcc0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAcc0)) DEALLOCATE(OutData%PWaveAcc0) + ALLOCATE(OutData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAcc0,4), UBOUND(OutData%PWaveAcc0,4) + DO i3 = LBOUND(OutData%PWaveAcc0,3), UBOUND(OutData%PWaveAcc0,3) + DO i2 = LBOUND(OutData%PWaveAcc0,2), UBOUND(OutData%PWaveAcc0,2) + DO i1 = LBOUND(OutData%PWaveAcc0,1), UBOUND(OutData%PWaveAcc0,1) + OutData%PWaveAcc0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) + ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveVel,5), UBOUND(OutData%WaveVel,5) + DO i4 = LBOUND(OutData%WaveVel,4), UBOUND(OutData%WaveVel,4) + DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) + DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) + DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) + OutData%WaveVel(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveVel0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveVel0)) DEALLOCATE(OutData%PWaveVel0) + ALLOCATE(OutData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveVel0,4), UBOUND(OutData%PWaveVel0,4) + DO i3 = LBOUND(OutData%PWaveVel0,3), UBOUND(OutData%PWaveVel0,3) + DO i2 = LBOUND(OutData%PWaveVel0,2), UBOUND(OutData%PWaveVel0,2) + DO i1 = LBOUND(OutData%PWaveVel0,1), UBOUND(OutData%PWaveVel0,1) + OutData%PWaveVel0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAccMCF 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAccMCF)) DEALLOCATE(OutData%WaveAccMCF) + ALLOCATE(OutData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAccMCF,5), UBOUND(OutData%WaveAccMCF,5) + DO i4 = LBOUND(OutData%WaveAccMCF,4), UBOUND(OutData%WaveAccMCF,4) + DO i3 = LBOUND(OutData%WaveAccMCF,3), UBOUND(OutData%WaveAccMCF,3) + DO i2 = LBOUND(OutData%WaveAccMCF,2), UBOUND(OutData%WaveAccMCF,2) + DO i1 = LBOUND(OutData%WaveAccMCF,1), UBOUND(OutData%WaveAccMCF,1) + OutData%WaveAccMCF(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDirArr 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 (ASSOCIATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) + ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveDirArr,1), UBOUND(OutData%WaveDirArr,1) + OutData%WaveDirArr(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) + ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%WaveElevC0,2), UBOUND(OutData%WaveElevC0,2) + DO i1 = LBOUND(OutData%WaveElevC0,1), UBOUND(OutData%WaveElevC0,1) + OutData%WaveElevC0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAccMCF0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAccMCF0)) DEALLOCATE(OutData%PWaveAccMCF0) + ALLOCATE(OutData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAccMCF0,4), UBOUND(OutData%PWaveAccMCF0,4) + DO i3 = LBOUND(OutData%PWaveAccMCF0,3), UBOUND(OutData%PWaveAccMCF0,3) + DO i2 = LBOUND(OutData%PWaveAccMCF0,2), UBOUND(OutData%PWaveAccMCF0,2) + DO i1 = LBOUND(OutData%PWaveAccMCF0,1), UBOUND(OutData%PWaveAccMCF0,1) + OutData%PWaveAccMCF0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + OutData%NWaveKin = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinxi 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%WaveKinxi)) DEALLOCATE(OutData%WaveKinxi) + ALLOCATE(OutData%WaveKinxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinxi,1), UBOUND(OutData%WaveKinxi,1) + OutData%WaveKinxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinyi 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%WaveKinyi)) DEALLOCATE(OutData%WaveKinyi) + ALLOCATE(OutData%WaveKinyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinyi,1), UBOUND(OutData%WaveKinyi,1) + OutData%WaveKinyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinzi 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%WaveKinzi)) DEALLOCATE(OutData%WaveKinzi) + ALLOCATE(OutData%WaveKinzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinzi,1), UBOUND(OutData%WaveKinzi,1) + OutData%WaveKinzi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%WtrDpth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%DT = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + OutData%WaveStMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! OutParam 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%OutParam)) DEALLOCATE(OutData%OutParam) + ALLOCATE(OutData%OutParam(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%OutParam.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%OutParam,1), UBOUND(OutData%OutParam,1) + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL NWTC_Library_Unpackoutparmtype( Re_Buf, Db_Buf, Int_Buf, OutData%OutParam(i1), ErrStat2, ErrMsg2 ) ! OutParam + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END DO + END IF + OutData%NumOuts = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%OutSwtch = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(OutData%OutFmt) + OutData%OutFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(OutData%OutSFmt) + OutData%OutSFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(OutData%Delim) + OutData%Delim(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%UnOutFile = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%OutDec = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL SeaSt_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%SeaSt_Interp_p, ErrStat2, ErrMsg2 ) ! SeaSt_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + END SUBROUTINE SeaSt_UnPackParam + + SUBROUTINE SeaSt_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_InputType), INTENT(IN) :: SrcInputData + TYPE(SeaSt_InputType), INTENT(INOUT) :: DstInputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyInput' +! + ErrStat = ErrID_None + ErrMsg = "" + DstInputData%DummyInput = SrcInputData%DummyInput + END SUBROUTINE SeaSt_CopyInput + + SUBROUTINE SeaSt_DestroyInput( InputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_InputType), INTENT(INOUT) :: InputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyInput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE SeaSt_DestroyInput + + SUBROUTINE SeaSt_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_InputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackInput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Re_BufSz = Re_BufSz + 1 ! DummyInput + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + ReKiBuf(Re_Xferred) = InData%DummyInput + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE SeaSt_PackInput + + SUBROUTINE SeaSt_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_InputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackInput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%DummyInput = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE SeaSt_UnPackInput + + SUBROUTINE SeaSt_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaSt_OutputType), INTENT(IN) :: SrcOutputData + TYPE(SeaSt_OutputType), INTENT(INOUT) :: DstOutputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyOutput' +! + ErrStat = ErrID_None + ErrMsg = "" +IF (ALLOCATED(SrcOutputData%WriteOutput)) THEN + i1_l = LBOUND(SrcOutputData%WriteOutput,1) + i1_u = UBOUND(SrcOutputData%WriteOutput,1) + IF (.NOT. ALLOCATED(DstOutputData%WriteOutput)) THEN + ALLOCATE(DstOutputData%WriteOutput(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstOutputData%WriteOutput.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstOutputData%WriteOutput = SrcOutputData%WriteOutput +ENDIF + END SUBROUTINE SeaSt_CopyOutput + + SUBROUTINE SeaSt_DestroyOutput( OutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(SeaSt_OutputType), INTENT(INOUT) :: OutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyOutput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +IF (ALLOCATED(OutputData%WriteOutput)) THEN + DEALLOCATE(OutputData%WriteOutput) +ENDIF + END SUBROUTINE SeaSt_DestroyOutput + + SUBROUTINE SeaSt_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(SeaSt_OutputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackOutput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1 ! WriteOutput allocated yes/no + IF ( ALLOCATED(InData%WriteOutput) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WriteOutput upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WriteOutput) ! WriteOutput + END IF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + IF ( .NOT. ALLOCATED(InData%WriteOutput) ) 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%WriteOutput,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WriteOutput,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WriteOutput,1), UBOUND(InData%WriteOutput,1) + ReKiBuf(Re_Xferred) = InData%WriteOutput(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + END SUBROUTINE SeaSt_PackOutput + + SUBROUTINE SeaSt_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(SeaSt_OutputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackOutput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WriteOutput 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%WriteOutput)) DEALLOCATE(OutData%WriteOutput) + ALLOCATE(OutData%WriteOutput(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WriteOutput.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WriteOutput,1), UBOUND(OutData%WriteOutput,1) + OutData%WriteOutput(i1) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + END SUBROUTINE SeaSt_UnPackOutput + +END MODULE SeaState_Types +!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/UserWaves.f90 b/modules/seastate/src/UserWaves.f90 new file mode 100644 index 0000000000..0088d2850d --- /dev/null +++ b/modules/seastate/src/UserWaves.f90 @@ -0,0 +1,1261 @@ +MODULE UserWaves + + USE Waves_Types + USE NWTC_Library + USE NWTC_FFTPACK + + IMPLICIT NONE + PRIVATE + + PUBLIC :: UserWaves_Init + PUBLIC :: UserWaveElevations_Init + PUBLIC :: UserWaveComponents_Init + PUBLIC :: Initial_InitOut_Arrays + + + ! Data type for reading in wave elevation data from a file. + TYPE :: WaveElevInputDataFile + REAL(DbKi) :: WaveDT !< time step size + INTEGER(IntKi) :: NStepWave !< Number of wave elevation steps + REAL(SiKi) :: WaveTMax !< Maximum time + REAL(SiKi), ALLOCATABLE :: WaveElev(:) !< Wave elevation at each timestep (m) + REAL(SiKi), ALLOCATABLE :: WaveTime(:) !< Timestamp of each wave elevation (s) + CHARACTER(1024) :: FileName !< Name of the file + END TYPE WaveElevInputDataFile + + ! Data type for reading in wave component data from a file. + TYPE :: WaveCompInputDataFile + INTEGER(IntKi) :: NCompWave !< Number of wave components + REAL(SiKi), ALLOCATABLE :: WaveAngFreq(:) !< Wave angular frequency of each component (rad/s) + REAL(SiKi), ALLOCATABLE :: WaveAmp(:) !< Wave height of each component (m) + REAL(SiKi), ALLOCATABLE :: WaveDir(:) !< Wave direction of each component (rad) + REAL(SiKi), ALLOCATABLE :: WavePhase(:) !< Wave phase of each component (rad) + CHARACTER(1024) :: FileName !< Name of the file + END TYPE WaveCompInputDataFile + + + CONTAINS + +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE Initial_InitOut_Arrays(InitOut, InitInp, WaveDT, ErrStat, ErrMsg) + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Initialization output data + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Initialization input data + REAL(DbKi), INTENT(IN ) :: WaveDT ! Value of wave dt, used for filling WaveTime + INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None + ! Local Variables + INTEGER(IntKi) :: i ! loop counter + INTEGER(IntKi) :: ErrStat2 ! Temporary error status +! CHARACTER(ErrMsgLen) :: ErrMsg2 + character(*), parameter :: RoutineName = 'Initial_InitOut_Arrays' + + + ErrStat = ErrID_None + ErrMsg = "" + + ! Allocatable arrays: + ALLOCATE ( InitOut%WaveElev0 ( 0:InitOut%NStepWave ), STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev0.', ErrStat, ErrMsg, RoutineName) + ALLOCATE ( InitOut%WaveElevC (2, 0:InitOut%NStepWave2, InitInp%NGrid(1)*InitInp%NGrid(2) ), STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevC.', ErrStat,ErrMsg,RoutineName) +! ALLOCATE ( InitOut%nodeInWater( 0:InitOut%NStepWave, InitInp%NWaveKinGrid ), STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%nodeInWater.',ErrStat,ErrMsg,RoutineName) + + ! Pointers: + ALLOCATE ( InitOut%WaveTime ( 0:InitOut%NStepWave ) , STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveTime.', ErrStat, ErrMsg, RoutineName) + ALLOCATE ( InitOut%WaveElevC0 (2, 0:InitOut%NStepWave2 ) , STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevC0.',ErrStat, ErrMsg, RoutineName) + ALLOCATE ( InitOut%WaveDirArr ( 0:InitOut%NStepWave2 ) , STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDirArr.',ErrStat, ErrMsg, RoutineName) + + ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ), STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev.', ErrStat,ErrMsg,RoutineName) + ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP.', ErrStat,ErrMsg,RoutineName) + ALLOCATE ( InitOut%WaveVel (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel.', ErrStat,ErrMsg,RoutineName) + ALLOCATE ( InitOut%WaveAcc (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStat2 ); IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc.', ErrStat,ErrMsg,RoutineName) + + + if (ErrStat >= AbortErrLev) return + + !---------------------------------------- + ! Initialize the arrays we just allocated + !---------------------------------------- + + ! Calculate the array of simulation times at which the instantaneous + ! elevation of, velocity of, acceleration of, and loads associated with + ! the incident waves are to be determined: + DO I = 0,InitOut%NStepWave ! Loop through all time steps + InitOut%WaveTime(I) = I * WaveDT + END DO ! I - All time steps + + InitOut%WaveElev0 = 0.0 + InitOut%WaveElevC = 0.0 + + InitOut%WaveElevC0 = 0.0 + InitOut%WaveElev = 0.0 + InitOut%WaveDynP = 0.0 + InitOut%WaveVel = 0.0 + InitOut%WaveAcc = 0.0 + InitOut%WaveDirArr = 0.0 + + !DO I = 1,InitInp%NWaveKinGrid ! Loop through all points where the incident wave kinematics will be computed without stretching + ! ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinGridzi and WtrDpth have already been adjusted using MSL2SWL + ! IF ( InitInp%WaveKinGridzi(i) >= -InitInp%WtrDpth .AND. InitInp%WaveKinGridzi(i) <= 0 ) THEN + ! InitOut%nodeInWater(:, i) = 1 + ! ELSE + ! InitOut%nodeInWater(:, i) = 0 + ! END IF + !END DO + + ! scalars (adjusted later, if necessary) + InitOut%WaveDirMin = 0.0 + InitOut%WaveDirMax = 0.0 + InitOut%WaveNDir = 1 + +END SUBROUTINE Initial_InitOut_Arrays + +!----------------------------------------------------------------------------------------------------------------------! +! ! +! WaveMod = 5 ! +! ! +!----------------------------------------------------------------------------------------------------------------------! + +!----------------------------------------------------------------------------------------------------------------------- +!> This subroutine reads in the wave elevations from a file and reconstructs the frequency information. +!! +!! FILE Format: +!! Header info: +!! This file may have header lines. These can be any number of lines at the beginning of the file that +!! start with non-numeric data. The Value of WaveDT is calculated using the first and last rows of data, +!! and the number of timesteps. The Number of timesteps is calculated as the number of lines of data, minus 1. +!! +!! column headings --> column 1 = time (s), column 2 = elevation (m) +!! +!! +SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) + + IMPLICIT NONE + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine + TYPE(WaveElevInputDataFile), INTENT( OUT) :: WaveElevData !< Wave elevation file data, after changing NStepWave + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error Status at return + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + ! Variables for reading in the wave elevation + REAL(SiKi) :: TmpWaveElevRow(2) !< row read in from the wave elevation input file + + ! Local Variables + CHARACTER(MaxFileInfoLineLen) :: TextLine !< One line of text read from the file + INTEGER(IntKi) :: LineLen !< The length of the line read in + INTEGER(IntKi) :: I !< Generic counter integer + INTEGER(IntKi) :: NumDataColumns !< Number of columns of data found in the file + INTEGER(IntKi) :: NumHeaderLines !< Number of header lines in the file. + INTEGER(IntKi) :: WaveElevUnit !< Unit number for the ElevFileName + INTEGER(IntKi) :: ErrStatTmp !< Temporarary error status for procesing + CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message for processing + CHARACTER(*), PARAMETER :: RoutineName = 'WaveElev_ReadFile' + + ! Initialize the error handling + ErrStat = ErrID_None + ErrMsg = "" + + ! Get a unit number for reading in the file + CALL GetNewUnit( WaveElevUnit ) + + ! Assemble the filename for the wave elevation data. + WaveElevData%FileName = TRIM(InitInp%WvKinFile)//'.Elev' + + ! Open the file containing the wave elevation timeseries + CALL OpenFInpFile( WaveElevUnit, WaveElevData%FileName, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat,ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) THEN + CLOSE ( WaveElevUnit ) + CALL CleanUp() + RETURN + END IF + + ! Find out how the data is formatted + CALL GetFileLength(WaveElevUnit, TRIM(WaveElevData%Filename), NumDataColumns, WaveElevData%NStepWave, NumHeaderLines, ErrStatTmp, ErrMsgTmp) + CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat,ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) THEN + CLOSE ( WaveElevUnit ) + CALL CleanUp() + RETURN + END IF + + ! Check that we read in two columns + IF ( NumDataColumns /= 2_IntKi ) THEN + CALL SetErrStat( ErrID_Fatal, ' Wave elevation files should contain only two columns of data: Time (s) and Elevation (m). '// & + 'Found '//TRIM(Num2LStr(NumDataColumns))//' of data in '//TRIM(WaveElevData%FileName)//'.', ErrStat, ErrMsg, RoutineName) + CLOSE ( WaveElevUnit ) + CALL CleanUp() + RETURN + END IF + + ! Check that we have at least two time steps + IF ( WaveElevData%NStepWave < 2 ) THEN + CALL SetErrStat( ErrID_Fatal, ' The file '//TRIM(WaveElevData%Filename)//' contains only '//TRIM(Num2LStr(WaveElevData%NStepWave))// & + ' lines of data. This does not appear to be a useful wave elevation file.', ErrStat, ErrMsg, RoutineName) + CLOSE ( WaveElevUnit ) + CALL CleanUp + RETURN + END IF + + ! Adjust the number of steps since we index from zero + WaveElevData%NStepWave = WaveElevData%NStepWave - 1_IntKi + + ! Even though for OpenFAST data, NStepWave time increment data equals the 0 time increment data, + ! we cannot assume that is true for arbitrary user data. Therefore, we read the entire [0, NStepWave] data from file. + ! As a result for WaveMod=5,6 we shouldn't assume periodic waves over the period WaveTMax + + !-------------------------------------------------- + ! Read in the data + !-------------------------------------------------- + + ! Allocate the array to store the time series + ALLOCATE ( WaveElevData%WaveTime(0:WaveElevData%NStepWave), STAT = ErrStatTmp ) + IF ( ErrStatTmp /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating space for user WaveTime array.', ErrStat, ErrMsg, RoutineName ) + CLOSE ( WaveElevUnit ) + CALL CleanUp() + RETURN + END IF + + ! Allocate the array to store the elevation series + ALLOCATE ( WaveElevData%WaveElev(0:WaveElevData%NStepWave), STAT = ErrStatTmp ) + IF ( ErrStatTmp /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating space for user WaveElev array.', ErrStat, ErrMsg, RoutineName ) + CLOSE ( WaveElevUnit ) + CALL CleanUp() + RETURN + END IF + + ! Read and discard the header lines + DO I=1,NumHeaderLines + CALL ReadLine( WaveElevUnit, '', TextLine, LineLen, ErrStatTmp ) + ENDDO + + ! Read in all the data + DO I=0,WaveElevData%NStepWave + CALL ReadAry( WaveElevUnit, WaveElevData%FileName, TmpWaveElevRow(1:2), 2, 'TmpWaveElevRow','Temporary variable holding the time and wave elevation pair', & + ErrStatTmp,ErrMsgTmp ) + IF ( ErrStatTmp /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error in reading in value from the file: line number '//TRIM(Num2LStr(I))//'. Expecting a total of '// & + TRIM(Num2LStr(WaveElevData%NStepWave))//' rows of data.', ErrStat, ErrMsg, RoutineName ) + CLOSE ( WaveElevUnit ) + CALL CleanUp() + RETURN + END IF + + ! Copy the data to the appropriate places + WaveElevData%WaveTime(I) = TmpWaveElevRow(1) + WaveElevData%WaveElev(I) = TmpWaveElevRow(2) + + ENDDO + + CALL WrScr( ' Read in '//TRIM(Num2LStr(I))//' lines of wave elevation data from '//TRIM(WaveElevData%FileName)//'.' ) + + CLOSE( WaveElevUnit ) + + ! We are going to be a little bit lazy here and blindly assume that the time is correct in the file + ! and that the timesteps are uniform throughout the file (if this isn't true, that isn't the problem + ! of the programmer, rather of the user). + + ! Set the value for WaveTMax using the difference betwee the last value read in and the fist + WaveElevData%WaveTMax = WaveElevData%WaveTime(WaveElevData%NStepWave) - WaveElevData%WaveTime(0) + + ! Set the value for WaveDT using the number of steps read in and the difference from first and last + WaveElevData%WaveDT = REAL( WaveElevData%WaveTMax / WaveElevData%NStepWave, DbKi ) + + CONTAINS + + SUBROUTINE CleanUp + IF (ALLOCATED( WaveElevData%WaveElev )) DEALLOCATE( WaveElevData%WaveElev, STAT=ErrStatTmp) + IF (ALLOCATED( WaveElevData%WaveTime )) DEALLOCATE( WaveElevData%WaveTime, STAT=ErrStatTmp) + END SUBROUTINE CleanUp + +END SUBROUTINE WaveElev_ReadFile + +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine initializes the wave kinematics based a set of user-supplied wave elevations +!! +!! NOTE: WaveDT in file must match given WaveDT in HydroDyn input file +!! Final timestep must match given WaveTMax in HydroDyn input file +!! NOTE: Wave frequency cutoffs can are applied to the read in wave elevation time series +!! +SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) +!---------------------------------------------------------------------------------------------------------------------------------- + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut !< Initialization outputs + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + ! Local Variables + TYPE(WaveElevInputDataFile) :: WaveElevData !< Wave elevation file data after changing NStepWave + REAL(SiKi), ALLOCATABLE :: TmpFFTWaveElev(:) !< Data for the FFT calculation + TYPE(FFT_DataType) :: FFT_Data !< the instance of the FFT module we're using + INTEGER(IntKi) :: I !< Generic counter + + ! Temporary error handling variables + INTEGER(IntKi) :: ErrStatTmp !< Temporarary error status for procesing + CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message for processing + CHARACTER(*), PARAMETER :: RoutineName = 'UserWaveElevations_Init' + + ! Data verification: WaveDT in the HD file and in the .Elev file may be slightly different. We will allow + ! some slight differences due to rounding. If necessary, we could change this to a percentage allowable in the future. + REAL(SiKi), PARAMETER :: WaveDT_Tol = 0.001_SiKi !< Allowable difference in WaveDT values + + ! set error status information + ErrStat = ErrID_None + ErrMsg = '' + + ! Statement to user + CALL WrScr1 ( ' Reading in wave elevation data from wave kinematics files with root name "'//TRIM(InitInp%WvKinFile)//'".' ) + + ! Read in the wave elevation data + CALL WaveElev_ReadFile (InitInp, WaveElevData, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + ! Check that the file timestep is the same as the HD file, and check that the WaveTMax value of the file is larger than that of HD. + IF ( InitInp%WaveTMax > WaveElevData%WaveTMax ) THEN + CALL SetErrStat(ErrID_Fatal,' SeaState requires a minimum of '//TRIM(Num2LStr(InitInp%WaveTMax))//', but '//TRIM(WaveElevData%FileName)// & + ' only contains a maximum time of '//TRIM(Num2LStr(WaveElevData%WaveTMax))//' (last line).',ErrStat,ErrMsg,RoutineName) + ENDIF + + ! Check that the values of WaveDT are the same or similar enough + IF ( ABS(InitInp%WaveDT - WaveElevData%WaveDT) > WaveDT_Tol ) THEN + CALL SetErrStat(ErrID_Fatal,' WaveDT from SeaState ('//TRIM(Num2LStr(InitInp%WaveDT))//') and timestep size in wave elevation file '// & + TRIM(WaveElevData%FileName)//' (WaveDT = '//TRIM(Num2LStr(WaveElevData%WaveDT))//') do not match. These need to be within '// & + TRIM(Num2LStr(WaveDT_Tol))//' seconds of each other.',ErrStat,ErrMsg,RoutineName) + ENDIF + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + !>>>>>> COMPUTE INITOUT SCALARS InitOut%NStepWave, InitOut%NStepWave2, InitOut%WaveTMax, and InitOut%WaveDOmega for WAVEMOD = 5 + ! Set new value for NStepWave so that the FFT algorithms are efficient. We will use the values passed in rather than what is read from the file + ! NOTE: This method is what is used in the VariousWaves_Init routine in Waves.f90 + InitOut%NStepWave = CEILING ( InitInp%WaveTMax/InitInp%WaveDT ) ! Set NStepWave to an even integer + IF ( MOD(InitOut%NStepWave,2) == 1 ) InitOut%NStepWave = InitOut%NStepWave + 1 ! larger or equal to WaveTMax/WaveDT. + InitOut%NStepWave2 = MAX( InitOut%NStepWave/2, 1 ) ! Make sure that NStepWave is an even product of small factors (PSF) that is + InitOut%NStepWave = 2*PSF ( InitOut%NStepWave2, 9 ) ! greater or equal to WaveTMax/WaveDT to ensure that the FFT is efficient. + InitOut%NStepWave2 = InitOut%NStepWave/2 ! Update the value of NStepWave2 based on the value needed for NStepWave. + InitOut%WaveTMax = InitOut%NStepWave*InitInp%WaveDT ! Update the value of WaveTMax based on the value needed for NStepWave. + InitOut%WaveDOmega = TwoPi/InitInp%WaveTMax ! Compute the frequency step for incident wave calculations. + + ! >>> Allocate and initialize (set to 0) InitOut arrays + call Initial_InitOut_Arrays(InitOut, InitInp, InitInp%WaveDT, ErrStatTmp, ErrMsgTmp); CALL SetErrStat(ErrStatTmp,ErrMsgTmp, ErrStat,ErrMsg,RoutineName) + !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + + ! Give warning if the number of timesteps changed + IF ( WaveElevData%NStepWave /= InitOut%NStepWave ) THEN + CALL SetErrStat(ErrID_Warn, ' Changed number of timesteps from '//TRIM(Num2LStr(WaveElevData%NStepWave))//' to '// & + TRIM(Num2LStr(InitOut%NStepWave))//' in order to calculate the frequency information from the wave elevations. '// & + 'Wave elevations during additional time are padded with zero wave elevation.',ErrStat,ErrMsg,RoutineName) + ENDIF + + ! Allocate array to hold the wave elevations for calculation of FFT. + ALLOCATE ( TmpFFTWaveElev( 0:InitOut%NStepWave-1 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpFFTWaveElev.',ErrStat,ErrMsg,RoutineName) + + ! Now check if all the allocations worked properly + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + ! Set the values + TmpFFTWaveElev = 0.0_SiKi + + ! Copy values over + DO I=0,MIN(WaveElevData%NStepWave,InitOut%NStepWave-1) + TmpFFTWaveElev(I) = WaveElevData%WaveElev(I) + ENDDO + + ! Initialize the FFT + CALL InitFFT ( InitOut%NStepWave, FFT_Data, .FALSE., ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while initializing the FFT.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + ! Apply the forward FFT to get the real and imaginary parts of the frequency information. + CALL ApplyFFT_f ( TmpFFTWaveElev(:), FFT_Data, ErrStatTmp ) ! Note that the TmpFFTWaveElev now contains the real and imaginary bits. + CALL SetErrStat(ErrStatTmp,'Error occured while applying the forwards FFT to TmpFFTWaveElev array.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + ! Copy the resulting TmpFFTWaveElev(:) data over to the InitOut%WaveElevC0 array + DO I=1,InitOut%NStepWave2-1 + InitOut%WaveElevC0 (1,I) = TmpFFTWaveElev(2*I-1) + InitOut%WaveElevC0 (2,I) = TmpFFTWaveElev(2*I) + ENDDO + InitOut%WaveElevC0(:,InitOut%NStepWave2) = 0.0_SiKi + + CALL ExitFFT(FFT_Data, ErrStatTmp) + CALL SetErrStat(ErrStatTmp,'Error occured while cleaning up after the FFTs.', ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + CALL CleanUp() + + CONTAINS + + SUBROUTINE CleanUp + + IF (ALLOCATED( WaveElevData%WaveElev )) DEALLOCATE( WaveElevData%WaveElev, STAT=ErrStatTmp) + IF (ALLOCATED( WaveElevData%WaveTime )) DEALLOCATE( WaveElevData%WaveTime, STAT=ErrStatTmp) + IF (ALLOCATED( TmpFFTWaveElev )) DEALLOCATE( TmpFFTWaveElev, STAT=ErrStatTmp) + + END SUBROUTINE CleanUp + +END SUBROUTINE UserWaveElevations_Init + +!----------------------------------------------------------------------------------------------------------------------! +! ! +! WaveMod = 6 ! +! ! +!----------------------------------------------------------------------------------------------------------------------! + +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) +! This routine initializes the wave kinematics based on user-supplied data +!---------------------------------------------------------------------------------------------------------------------------------- + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Initialization outputs + INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + INTEGER :: UnWv ! file unit for writing the various wave kinematics files + CHARACTER(1024) :: FileName ! complete filename for one of the output files + INTEGER :: i, j, k, m, icount ! Generic index + INTEGER :: iFile ! Generic index + CHARACTER(10) :: Delim + CHARACTER(64), ALLOCATABLE :: WaveDataStr(:) + REAL(SiKi) :: WaveData + + ! Temporary error handling variables + INTEGER(IntKi) :: ErrStatTmp ! Temporarary error status for procesing + CHARACTER(ErrMsgLen) :: ErrMsgTmp ! Temporary error message for processing + LOGICAL :: isNumeric + CHARACTER(*), PARAMETER :: RoutineName = 'UserWaves_Init' + CHARACTER(5) :: extension(7) + + ! Initialize ErrStat + ErrStat = ErrID_None + ErrMsg = "" + + extension = (/'.Vxi ','.Vyi ','.Vzi ','.Axi ','.Ayi ','.Azi ','.DynP'/) + Delim = '' + + + ! Tell our nice users what is about to happen that may take a while: + + CALL WrScr1 ( ' Reading in wave data from wave kinematics files with root name "'//TRIM(InitInp%WvKinFile)//'".' ) + + + + !>>>>>> COMPUTE INITOUT SCALARS InitOut%NStepWave, InitOut%NStepWave2, InitOut%WaveTMax, and InitOut%WaveDOmega for WAVEMOD = 6 + ! Perform some initialization computations including calculating the + ! total number of time steps in the incident wave and ALLOCATing the + ! arrays; initialize the unneeded values to zero: + InitOut%NStepWave = CEILING ( InitInp%WaveTMax/InitInp%WaveDT ) ! Set NStepWave to an even integer + IF (.NOT. (EqualRealNos( REAL(InitInp%WaveTMax, SiKi) - REAL(InitOut%NStepWave*InitInp%WaveDT, SiKi), 0.0_SiKi ) ) ) THEN + ErrMsg = 'For WaveMod = 5 or 6, WaveTMax must be a multiple of WaveDT' + ErrStat = ErrID_Fatal + RETURN + END IF + + InitOut%NStepWave2 = InitOut%NStepWave/2 + InitOut%WaveTMax = InitInp%WaveTMax ! bjj added this + InitOut%WaveDOmega = TwoPi/InitInp%WaveTMax ! bjj added this + + ! >>> Allocate and initialize (set to 0) InitOut arrays + call Initial_InitOut_Arrays(InitOut, InitInp, InitInp%WaveDT, ErrStatTmp, ErrMsgTmp); CALL SetErrStat(ErrStatTmp,ErrMsgTmp, ErrStat,ErrMsg,RoutineName) + !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + ALLOCATE ( WaveDataStr ( InitInp%NGrid(1) ) , STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDataStr.', ErrStat,ErrMsg,RoutineName) + + + + ! Now check if all the allocations worked properly + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + + ! Even though for OpenFAST data, NStepWave time increment data equals the 0 time increment data, + ! we cannot assume that is true for arbitrary user data. Therefore, we read the entire [0, NStepWave] data from file. + ! As a result for WaveMod=5,6 we shouldn't assume periodic waves over the period WaveTMax + + + ! Read the first file and set the initial values of the + DO iFile = 1,7 + CALL GetNewUnit( UnWv ) + + FileName = TRIM(InitInp%WvKinFile) // TRIM(extension(iFile)) + + CALL OpenFInpFile ( UnWv, FileName, ErrStatTmp, ErrMsgTmp ) + IF ( ErrStatTmp /= 0 ) THEN + ErrMsgTmp = 'Failed to open wave kinematics file, ' // TRIM(FileName) + CALL SetErrStat( ErrID_Fatal, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) + RETURN + END IF + + do i = 1, 13 + CALL ReadCom( UnWv, FileName, 'HydroDyn wave kinematics file header line', ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) + IF (ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + end do + + DO m = 0,InitOut%NStepWave + icount = 1 + do k = 1, InitInp%NGrid(3) + do j = 1, InitInp%NGrid(2) + ! Extract fields from current line + IF (.not. ExtractFields(UnWv, WaveDataStr(:), InitInp%NGrid(1))) THEN + call Cleanup() + RETURN + END IF + DO i = 1, InitInp%NGrid(1) + + isNumeric = is_numeric(WaveDataStr(i), WaveData) + IF (.NOT. isNumeric ) THEN + WaveData = 0.0 + END IF + + SELECT CASE (iFile) + CASE (1) + InitOut%WaveVel (m,i,j,k,1) = WaveData + CASE (2) + InitOut%WaveVel (m,i,j,k,2) = WaveData + CASE (3) + InitOut%WaveVel (m,i,j,k,3) = WaveData + CASE (4) + InitOut%WaveAcc (m,i,j,k,1) = WaveData + CASE (5) + InitOut%WaveAcc (m,i,j,k,2) = WaveData + CASE (6) + InitOut%WaveAcc (m,i,j,k,3) = WaveData + CASE (7) + InitOut%WaveDynP(m,i,j,k ) = WaveData + END SELECT + icount = icount + 1 + END DO + end do + end do + END DO + end do + + ! WaveElev + CALL GetNewUnit( UnWv ) + + FileName = TRIM(InitInp%WvKinFile) // '.Elev' + + CALL OpenFInpFile ( UnWv, FileName, ErrStatTmp, ErrMsgTmp ) + IF ( ErrStatTmp /= 0 ) THEN + ErrMsgTmp = 'Failed to open wave elevation file, ' // TRIM(FileName) + CALL SetErrStat( ErrID_Fatal, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) + RETURN + END IF + + do i = 1, 13 + CALL ReadCom( UnWv, FileName, 'HydroDyn wave elevation file header line', ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName ) + IF (ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + end do + + DO m = 0,InitOut%NStepWave + do j = 1, InitInp%NGrid(2) + ! Extract fields from current line + IF (.not. ExtractFields(UnWv, WaveDataStr(:), InitInp%NGrid(1))) THEN + call Cleanup() + RETURN + END IF + DO i = 1, InitInp%NGrid(1) + + isNumeric = is_numeric(WaveDataStr(i), WaveData) + IF (.NOT. isNumeric ) THEN + InitOut%WaveElev(m,i,j ) = 0.0 + ELSE + InitOut%WaveElev(m,i,j ) = WaveData + END IF + END DO + end do + + END DO + + CALL CleanUp( ) + + + + +CONTAINS + + !> Sub function to extract n fields on the current line of the file unit FU + FUNCTION ExtractFields(FU, s, n) result(OK) + ! Arguments + INTEGER, INTENT(IN) :: FU !< Unit name + INTEGER, INTENT(IN) :: n !< Number of fields + CHARACTER(*), INTENT(OUT) :: s(n) !< Fields + LOGICAL :: OK + ! Local var + CHARACTER(MaxFileInfoLineLen*64) :: TextLine !< One line of text read from the file : length should be > n*(1+length(s(1))) + OK=.TRUE. + + ! Read line + READ(FU, FMT='(A)', IOSTAT=ErrStat) TextLine + IF (ErrStat/=0) THEN + ErrStat = ErrID_Fatal + WRITE(ErrMsg,'(A,I0,A,I0,A)') 'Failed to read line ',I+2,' (out of ',InitOut%NStepWave+1,' expected lines) in file '//TRIM(FileName)//& + & '. Check that the number of lines (without header) is equal to WaveTMax/WaveDT. ' + OK=.FALSE. + RETURN + END IF + + ! Extract fields (ReadCAryFromStr is in NWTC_IO) + CALL ReadCAryFromStr ( TextLine, s, n, 'line', 'junk', ErrStat, ErrMsgTmp ) + IF (ErrStat/=0) THEN + ErrStat = ErrID_Fatal + write(ErrMsg,'(A,I0,A,I0,A)') 'Failed to extract fields from line ',I+2,' in file '//TRIM(FileName)//'. '//& + & trim(ErrMsgTmp)//' Check that the number of columns is correct and matches the number of internal HydroDyn nodes.'//& + &' (Typically twice the number of joints).' + OK=.FALSE. + RETURN + END IF + END FUNCTION ExtractFields + + SUBROUTINE CleanUp( ) + + IF (ALLOCATED( WaveDataStr )) DEALLOCATE( WaveDataStr, STAT=ErrStatTmp) + CLOSE(UnWv) + RETURN + END SUBROUTINE CleanUp + +END SUBROUTINE UserWaves_Init + + +!----------------------------------------------------------------------------------------------------------------------! +! ! +! WaveMod = 7 ! +! ! +!----------------------------------------------------------------------------------------------------------------------! + +!----------------------------------------------------------------------------------------------------------------------- +!> This subroutine reads in the wave components from a file and reconstructs the frequency information. +SUBROUTINE WaveComp_ReadFile ( InitInp, InitOut, WaveCompData, ErrStat, ErrMsg ) + + IMPLICIT NONE + TYPE(Waves_InitInputType), INTENT(INOUT) :: InitInp !< Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut !< Output data for initialization routine + TYPE(WaveCompInputDataFile), INTENT( OUT) :: WaveCompData !< Wave component file data + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error Status at return + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + ! Variables for reading in the wave components + REAL(SiKi) :: TmpWaveCompRow(4) !< row read in from the wave component input file + REAL(SiKi) :: WaveAngFreq + + + ! Local Variables + CHARACTER(MaxFileInfoLineLen) :: TextLine !< One line of text read from the file + INTEGER(IntKi) :: LineLen !< The length of the line read in + INTEGER(IntKi) :: I !< Generic counter integer + INTEGER(IntKi) :: NumDataColumns !< Number of columns of data found in the file + INTEGER(IntKi) :: NumHeaderLines !< Number of header lines in the file. + INTEGER(IntKi) :: WaveCompUnit !< Unit number for the CompFileName + INTEGER(IntKi) :: ErrStatTmp !< Temporarary error status for procesing + CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message for processing + CHARACTER(*), PARAMETER :: RoutineName = 'WaveComp_ReadFile' + REAL(SiKi), PARAMETER :: WaveDOmega_RelTol = 0.001_SiKi !< Allowable relative difference in WaveDOmega values + REAL(SiKi) :: OmegaRatio + + CHARACTER(1024) :: StrRead !< String containing the first word read in + REAL(SiKi) :: RealRead !< Returns value of the number (if there was one), or NaN (as set by NWTC_Num) if there wasn't + INTEGER(IntKi) :: TmpIOErrStat !< Temporary error status for the internal read of the first word to a real number + LOGICAL :: IsRealNum !< Flag indicating if the first word on the line was a real number + + LOGICAL :: USESEAFormat + + CHARACTER(24) :: Words(20) !< Array of words we extract from a line. We shouldn't have more than 20. + + ! Initialize the error handling + ErrStat = ErrID_None + ErrMsg = "" + + ! Get a unit number for reading in the file + CALL GetNewUnit( WaveCompUnit ) + + ! Assemble the filename for the wave component data. + WaveCompData%FileName = TRIM(InitInp%WvKinFile) + + ! Open the file containing the list of wave components + CALL OpenFInpFile( WaveCompUnit, WaveCompData%FileName, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat,ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) THEN + CALL CleanUpError() + RETURN + END IF + + ! Find out how the data is formatted + CALL GetFileLength(WaveCompUnit, TRIM(WaveCompData%Filename), NumDataColumns, WaveCompData%NCompWave, NumHeaderLines, ErrStatTmp, ErrMsgTmp) + CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat,ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) THEN + CALL CleanUpError() + RETURN + END IF + + ! Find out which format the file uses - OpenFAST or SEA + CALL ReadLine( WaveCompUnit, '', TextLine, LineLen, ErrStatTmp ) + IF (ErrStatTmp /= ErrID_None) THEN + CALL SetErrStat( ErrID_Fatal, 'Error reading the first line of ' // TRIM(WaveCompData%FileName), ErrStat, ErrMsg, RoutineName) + CALL CleanUpError() + RETURN + END IF + If (TextLine(1:28) == 'source: SEAFileGenerator.exe') THEN + CALL WrScr1 ( ' Reading "'//TRIM(InitInp%WvKinFile)//'" following the .SEA format: Wave Frequency (Hz), Wave Amplitude (m), Wave Direction (rad), Wave Phase (rad).' ) + UseSEAFormat = .TRUE. + ErrStatTmp = ErrID_None + + ! Go through the SEA headerlines + DO I = 2,NumHeaderLines + CALL ReadLine( WaveCompUnit, '', TextLine, LineLen, ErrStatTmp ) + CALL GetWords( TextLine, Words, SIZE(Words) ) + + ! Make sure the wave direction convention is not nautial, which is not supported + IF (TRIM(Words(1)) == 'dconv:' .AND. TRIM(Words(2)) == 'naut') THEN + CALL SetErrStat( ErrID_Fatal, 'Nautical (naut) convention for wave direction is not supported. Must use cartesian (cart) convention.', ErrStat, ErrMsg, RoutineName) + CALL CleanUpError() + RETURN + END IF + + ! Override WaveTMax from SeaState input with the "duration" specified in the SEA file header if available + IF (TRIM(Words(1)) == 'duration: ') THEN + CALL ReadRealNumberFromString( Words(2), RealRead, StrRead, IsRealNum, ErrStatTmp, ErrMsgTmp, TmpIOErrStat ) + IF ( IsRealNum ) THEN + InitInp%WaveTMax = RealRead + CALL WrScr1(' WaveTMax overriden based on "' //TRIM(WaveCompData%FileName)// '" to ' // TRIM(Num2Lstr(InitInp%WaveTMax)) // ' sec.' ) + END IF + END IF + END DO + + ELSE + UseSEAFormat = .FALSE. + CALL WrScr1 ( ' Reading "'//TRIM(InitInp%WvKinFile)//'" following the OpenFAST format: Wave Angular Frequency (rad/s), Wave Height (m), Wave Direction (deg), Wave Phase (deg).' ) + END IF + REWIND( WaveCompUnit ) + + ! Check that we read in four columns + IF ( NumDataColumns /= 4_IntKi ) THEN + CALL SetErrStat( ErrID_Fatal, ' Wave component files should contain four columns of data: (angular) frequency, wave height/amplitude, wave direction, wave phase. '// & + 'Found '//TRIM(Num2LStr(NumDataColumns))//' of data in "'//TRIM(WaveCompData%FileName)//'".', ErrStat, ErrMsg, RoutineName) + CALL CleanUpError() + RETURN + END IF + + ! Compute the frequency step for incident wave calculations. + InitOut%WaveDOmega = TwoPi/InitInp%WaveTMax + + !-------------------------------------------------- + ! Read in the data + !-------------------------------------------------- + + ! Allocate the array to store the wave components + ALLOCATE ( WaveCompData%WaveAngFreq(WaveCompData%NCompWave), STAT = ErrStatTmp ) + IF ( ErrStatTmp /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating space for user WaveAngFreq array.', ErrStat, ErrMsg, RoutineName ) + CALL CleanUpError() + RETURN + END IF + + ALLOCATE ( WaveCompData%WaveAmp(WaveCompData%NCompWave), STAT = ErrStatTmp ) + IF ( ErrStatTmp /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating space for user WaveAmp array.', ErrStat, ErrMsg, RoutineName ) + CALL CleanUpError() + RETURN + END IF + + ALLOCATE ( WaveCompData%WaveDir(WaveCompData%NCompWave), STAT = ErrStatTmp ) + IF ( ErrStatTmp /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating space for user WaveDir array.', ErrStat, ErrMsg, RoutineName ) + CALL CleanUpError() + RETURN + END IF + + ALLOCATE ( WaveCompData%WavePhase(WaveCompData%NCompWave), STAT = ErrStatTmp ) + IF ( ErrStatTmp /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error allocating space for user WavePhase array.', ErrStat, ErrMsg, RoutineName ) + CALL CleanUpError() + RETURN + END IF + + ! Read and discard the header lines + DO I=1,NumHeaderLines + CALL ReadLine( WaveCompUnit, '', TextLine, LineLen, ErrStatTmp ) + ENDDO + + + ! Read in all the data + DO I=1,WaveCompData%NCompWave + CALL ReadAry( WaveCompUnit, WaveCompData%FileName, TmpWaveCompRow(1:4), 4, 'TmpWaveCompRow','Temporary variable holding the wave component information', & + ErrStatTmp,ErrMsgTmp ) + IF ( ErrStatTmp /= 0 ) THEN + CALL SetErrStat( ErrID_Fatal, 'Error in reading in value from the file: line number '//TRIM(Num2LStr(I))//'. Expecting a total of '// & + TRIM(Num2LStr(WaveCompData%NCompWave))//' rows of data.', ErrStat, ErrMsg, RoutineName ) + CALL CleanUpError() + RETURN + END IF + + WaveAngFreq = TmpWaveCompRow(1) + IF (UseSEAFormat) THEN + WaveAngFreq = TwoPi * WaveAngFreq + END IF + + ! Check if the frequency is valid + OmegaRatio = WaveAngFreq/InitOut%WaveDOmega + IF (ABS(OmegaRatio - REAL(NINT(OmegaRatio),SiKi))>WaveDOmega_RelTol) THEN + CALL SetErrStat( ErrID_Fatal, 'The wave frequency on line number '//TRIM(Num2LStr(I))//' is not an integer multiple of the frequency resolution given by 1/WaveTMax.', ErrStat, ErrMsg, RoutineName ) + CALL CleanUpError() + RETURN + ELSE IF (WaveAngFreq <= 0.0_ReKi) THEN + CALL SetErrStat( ErrID_Fatal, 'The wave frequency on line number '//TRIM(Num2LStr(I))//' is less than or equal to zero. All frequency must be positive.', ErrStat, ErrMsg, RoutineName ) + CALL CleanUpError() + RETURN + END IF + + ! Copy the data to the appropriate places + IF (UseSEAFormat) THEN ! SEA format - Frequency (Hz), Amplitude (m), Direction (rad), Phase (rad) + WaveCompData%WaveAngFreq(I) = TmpWaveCompRow(1) * TwoPi ! Convert to angular frequency + WaveCompData%WaveAmp(I) = TmpWaveCompRow(2) ! Already wave amplitude + WaveCompData%WaveDir(I) = TmpWaveCompRow(3) * 180_ReKi/PI ! Convert to degrees + WaveCompData%WavePhase(I) = TmpWaveCompRow(4) ! Aleady in radians + ELSE ! OpenFAST format - Angular Frequency (rad/s), Wave Height (m), Direction (deg), Phase (deg) + WaveCompData%WaveAngFreq(I) = TmpWaveCompRow(1) ! Already angular frequency + WaveCompData%WaveAmp(I) = TmpWaveCompRow(2) * 0.5_ReKi ! Convert wave height to wave amplitude + WaveCompData%WaveDir(I) = TmpWaveCompRow(3) ! Already in degrees + WaveCompData%WavePhase(I) = TmpWaveCompRow(4) * PI/180_ReKi ! Convert to radians + END IF + + ENDDO + + CALL WrScr( ' Read in '//TRIM(Num2LStr(I))//' lines of wave component data from '//TRIM(WaveCompData%FileName)//'.' ) + + + CLOSE( WaveCompUnit ) + + CONTAINS + + SUBROUTINE CleanUpError + + CLOSE ( WaveCompUnit ) + + IF (ALLOCATED( WaveCompData%WaveAngFreq )) DEALLOCATE( WaveCompData%WaveAngFreq, STAT=ErrStatTmp) + IF (ALLOCATED( WaveCompData%WaveAmp )) DEALLOCATE( WaveCompData%WaveAmp, STAT=ErrStatTmp) + IF (ALLOCATED( WaveCompData%WaveDir )) DEALLOCATE( WaveCompData%WaveDir, STAT=ErrStatTmp) + IF (ALLOCATED( WaveCompData%WavePhase )) DEALLOCATE( WaveCompData%WavePhase, STAT=ErrStatTmp) + + END SUBROUTINE CleanUpError +END SUBROUTINE WaveComp_ReadFile + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine initializes the wave kinematics based a set of user-supplied wave frequency components +!! +!! NOTE: WaveDT in file must match given WaveDT in HydroDyn input file +!! Final timestep must match given WaveTMax in HydroDyn input file +!! NOTE: Wave frequency cutoffs can are applied to the read in wave elevation time series +!! +SUBROUTINE UserWaveComponents_Init ( InitInp, InitOut, ErrStat, ErrMsg ) +!---------------------------------------------------------------------------------------------------------------------------------- + TYPE(Waves_InitInputType), INTENT(INOUT) :: InitInp !< Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut !< Initialization outputs + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + ! Local Variables + TYPE(WaveCompInputDataFile) :: WaveCompData !< Wave elevation file data after changing NStepWave + REAL(SiKi) :: MaxWaveAngFreq !< Maximum wave angular frequency in the user wave component file + INTEGER(IntKi) :: I,J !< Generic counter + LOGICAL, ALLOCATABLE :: IsSpecified(:) !< If frequency component is already specified + + ! Temporary error handling variables + INTEGER(IntKi) :: ErrStatTmp !< Temporarary error status for procesing + CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message for processing + CHARACTER(*), PARAMETER :: RoutineName = 'UserWaveComponents_Init' + + ! set error status information + ErrStat = ErrID_None + ErrMsg = '' + + ! Statement to user + CALL WrScr1 ( ' Reading in wave component data from wave kinematics files with root name "'//TRIM(InitInp%WvKinFile)//'".' ) + + ! Read in the wave component data + CALL WaveComp_ReadFile (InitInp, InitOut, WaveCompData, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + !>>>>>> COMPUTE INITOUT SCALARS InitOut%NStepWave, InitOut%NStepWave2, InitOut%WaveTMax, and InitOut%WaveDOmega for WAVEMOD = 7 + MaxWaveAngFreq = MAXVAL(WaveCompData%WaveAngFreq) + ! NStepWave2 should be large enough to accommodate the highest user frequency component and + ! produce a time step no larger than the user WaveDT. + InitOut%NStepWave2 = MAX( NINT(MaxWaveAngFreq / InitOut%WaveDOmega) + 1_IntKi, & + CEILING(TwoPi/(InitInp%WaveDt*InitOut%WaveDOmega)) ) + InitOut%NStepWave2 = PSF ( InitOut%NStepWave2, 9 ) ! Make sure NStepWave2 is a product of small factors (PSF) greater or equal to what's required by the user input + InitOut%NStepWave = InitOut%NStepWave2 * 2_IntKi ! NStepWave is guaranteed to be even + InitOut%WaveTMax = InitInp%WaveTMax ! Copy over WaveTMax. + + ! Note that InitOut%WaveDOmega is computed in WaveComp_ReadFile: + !InitOut%WaveDOmega = TwoPi/InitInp%WaveTMax + + + !BJJ: Note that this is changing an InitInp value. This seems dangerous... check that this isn't an issue elsewhere + InitInp%WaveDT = InitOut%WaveTMax / InitOut%NStepWave ! Update the value of WaveDT based on the value needed for NStepWave. + CALL WrScr1 (' Setting WaveDT to ' // TRIM(Num2Lstr(InitInp%WaveDt)) // ' sec.') + + + ! >>> Allocate and initialize (set to 0) InitOut arrays + call Initial_InitOut_Arrays(InitOut, InitInp, InitInp%WaveDT, ErrStatTmp, ErrMsgTmp); CALL SetErrStat(ErrStatTmp,ErrMsgTmp, ErrStat,ErrMsg,RoutineName) + !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + ALLOCATE ( IsSpecified( 0:InitOut%NStepWave2 ), STAT = ErrStatTmp) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array IsSpecified.',ErrStat,ErrMsg,RoutineName) + + ! Now check if all the allocations worked properly + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + ! Set the values + IsSpecified(:) = .FALSE. + + ! Copy the wave frequency component information to the InitOut%WaveElevC0 array + DO I=1,WaveCompData%NCompWave + J = NINT(WaveCompData%WaveAngFreq(I)/InitOut%WaveDOmega) + IF ( .NOT. IsSpecified(J) ) THEN + IsSpecified(J) = .TRUE. + InitOut%WaveElevC0(1,J) = WaveCompData%WaveAmp(I) * COS(WaveCompData%WavePhase(I)) * InitOut%NStepWave2 + InitOut%WaveElevC0(2,J) = WaveCompData%WaveAmp(I) * SIN(WaveCompData%WavePhase(I)) * InitOut%NStepWave2 + InitOut%WaveDirArr(J) = WaveCompData%WaveDir(I) + ELSE + CALL SetErrStat(ErrID_Fatal,'Wave component with angular frequency ' //TRIM( Num2Lstr( WaveCompData%WaveAngFreq(I) ) )// & + ' is listed twice in ' //TRIM(InitInp%WvKinFile)// '.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + END IF + END DO + ! Make sure the DC and Nyquist components are zero - should be redundant + InitOut%WaveElevC0(:,0 ) = 0.0_SiKi + InitOut%WaveElevC0(:,InitOut%NStepWave2) = 0.0_SiKi + + CALL CleanUp() + + CONTAINS + + SUBROUTINE CleanUp + + IF (ALLOCATED( WaveCompData%WaveAngFreq )) DEALLOCATE( WaveCompData%WaveAngFreq, STAT=ErrStatTmp) + IF (ALLOCATED( WaveCompData%WaveAmp )) DEALLOCATE( WaveCompData%WaveAmp, STAT=ErrStatTmp) + IF (ALLOCATED( WaveCompData%WaveDir )) DEALLOCATE( WaveCompData%WaveDir, STAT=ErrStatTmp) + IF (ALLOCATED( WaveCompData%WavePhase )) DEALLOCATE( WaveCompData%WavePhase, STAT=ErrStatTmp) + IF (ALLOCATED( IsSpecified )) DEALLOCATE( IsSpecified, STAT=ErrStatTmp) + + END SUBROUTINE CleanUp + +END SUBROUTINE UserWaveComponents_Init + + + +!----------------------------------------------------------------------------------------------------------------------! +! ! +! Shared Private Utility Functions and Subroutines ! +! ! +!----------------------------------------------------------------------------------------------------------------------! + +!------------------------------------------------------------------------------------------------------------------------------- +!> This subroutine looks at a file that has been opened and finds out how many header lines there are, how many periods +!! (frequencies) there are (first only if there are paired periods for second order), and how many lines of data there are in +!! the file. +!! +!! A few things are assumed about the file: +!! 1. Any header lines are the first thing in the file. +!! 2. No text appears anyplace other than in the file header lines. +!! 3. The datalines only contain numbers that can be read in as reals. +!! +!! Limitations: +!! 1. only handles up to 20 words (columns) on a line +!! 2. empty lines are considered text lines +!! 3. All data rows must contain the same number of columns +!! +!! +SUBROUTINE GetFileLength(UnitDataFile, Filename, NumDataColumns, NumDataLines, NumHeaderLines, ErrStat, ErrMsg) + + IMPLICIT NONE + + ! Passed variables + INTEGER(IntKi), INTENT(IN ) :: UnitDataFile !< Unit number of the file we are looking at. + CHARACTER(*), INTENT(IN ) :: Filename !< The name of the file we are looking at. + INTEGER(IntKi), INTENT( OUT) :: NumDataColumns !< The number of columns in the data file. + INTEGER(IntKi), INTENT( OUT) :: NumDataLines !< Number of lines containing data + INTEGER(IntKi), INTENT( OUT) :: NumHeaderLines !< Number of header lines at the start of the file + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error Message to return (empty if all good) + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Status flag if there were any problems (ErrID_None if all good) + + ! Local Variables + CHARACTER(2048) :: ErrMsgTmp !< Temporary message variable. Used in calls. + INTEGER(IntKi) :: ErrStatTmp !< Temporary error status. Used in calls. + INTEGER(IntKi) :: LclErrStat !< Temporary error status. Used locally to indicate when we have reached the end of the file. + INTEGER(IntKi) :: TmpIOErrStat !< Temporary error status for the internal read of the first word to a real number + LOGICAL :: IsRealNum !< Flag indicating if the first word on the line was a real number + + CHARACTER(MaxFileInfoLineLen*4) :: TextLine !< One line of text read from the file + INTEGER(IntKi) :: LineLen !< The length of the line read in + CHARACTER(MaxFileInfoLineLen) :: StrRead !< String containing the first word read in + REAL(SiKi) :: RealRead !< Returns value of the number (if there was one), or NaN (as set by NWTC_Num) if there wasn't + CHARACTER(24) :: Words(20) !< Array of words we extract from a line. We shouldn't have more than 20. + INTEGER(IntKi) :: i !< simple integer counter + INTEGER(IntKi) :: LineNumber !< the line I am on + LOGICAL :: LineHasText !< Flag indicating if the line I just read has text. If so, it is a header line. + LOGICAL :: HaveReadData !< Flag indicating if I have started reading data. + INTEGER(IntKi) :: NumWords !< Number of words on a line + INTEGER(IntKi) :: FirstDataLineNum !< Line number of the first row of data in the file + CHARACTER(*), PARAMETER :: RoutineName = 'GetFileLength' + + ! Initialize the error handling + ErrStat = ErrID_None + ErrStatTmp = ErrID_None + LclErrStat = ErrID_None + ErrMsg = '' + ErrMsgTmp = '' + + + ! Set some of the flags and counters + HaveReadData = .FALSE. + NumDataColumns = 0 + NumHeaderLines = 0 + NumDataLines = 0 + LineNumber = 0 + + ! Just in case we were handed a file that we are part way through reading (should never be true), rewind to the start + REWIND( UnitDataFile ) + + !------------------------------------ + !> The variable LclErrStat is used to indicate when we have reached the end of the file or had an error from + !! ReadLine. Until that occurs, we read each line, and decide if it contained any non-numeric data. The + !! first group of lines containing non-numeric data is considered the header. The first line of all numeric + !! data is considered the start of the data section. Any non-numeric containing found within the data section + !! will be considered as an invalid file format at which point we will return a fatal error from this routine. + + DO WHILE ( LclErrStat == ErrID_None ) + + !> Reset the indicator flag for the non-numeric content + LineHasText = .FALSE. + + !> Read in a single line from the file + CALL ReadLine( UnitDataFile, '', TextLine, LineLen, LclErrStat ) + + !> If there was an error in reading the file, then exit. + !! Possible causes: reading beyond end of file in which case we are done so don't process it. + IF ( LclErrStat /= ErrID_None ) EXIT + + !> Increment the line counter. + LineNumber = LineNumber + 1 + + !> Read all the words on the line into the array called 'Words'. Only the first words will be encountered + !! will be stored. The others are empty (i.e. only three words on the line, so the remaining 17 are empty). + CALL GetWords( TextLine, Words, SIZE(Words), NumWords ) + + !> Now cycle through the first 'NumWords' of non-empty values stored in 'Words'. Words should contain + !! everything that is on the line. The subroutine ReadRealNumberFromString will set a flag 'IsRealNum' + !! when the value in Words(i) can be read as a real(SiKi). 'StrRead' will contain the string equivalent. + DO i=1,NumWords + CALL ReadRealNumberFromString( Words(i), RealRead, StrRead, IsRealNum, ErrStatTmp, ErrMsgTmp, TmpIOErrStat ) + IF ( .NOT. IsRealNum) THEN + LineHasText = .TRUE. + END IF + END DO + + !> If all the words on that line had no text in them, then it must have been a line of data. + !! If not, then we have either a header line, which is ok, or a line containing text in the middle of the + !! the data section, which is not good (the flag HaveReadData tells us which case this is). + IF ( LineHasText ) THEN + IF ( HaveReadData ) THEN ! Uh oh, we have already read a line of data before now, so there is a problem + CALL SetErrStat( ErrID_Fatal, ' Found text on line '//TRIM(Num2LStr(LineNumber))//' of '//TRIM(FileName)// & + ' when real numbers were expected. There may be a problem with the file.', ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + RETURN + END IF + ELSE + NumHeaderLines = NumHeaderLines + 1 + END IF + ELSE ! No text, must be data line + NumDataLines = NumDataLines + 1 + ! If this is the first row of data, then store the number of words that were on the line + IF ( .NOT. HaveReadData ) THEN + ! If this is the first line of data, keep some relevant info about it and the number of columns in it + HaveReadData = .TRUE. + FirstDataLineNum = LineNumber ! Keep the line number of the first row of data (for error reporting) + NumDataColumns = NumWords + ELSE + ! Make sure that the number columns on the row matches the number of columnns on the first row of data. + IF ( NumWords /= NumDataColumns ) THEN + CALL SetErrStat( ErrID_Fatal, ' Error in data file: '//TRIM(Filename)//'.'// & + ' The number of data columns on line '//TRIM(Num2LStr(LineNumber))// & + '('//TRIM(Num2LStr(NumWords))//' columns) is different than the number of columns on first row of data '// & + ' (line: '//TRIM(Num2LStr(FirstDataLineNum))//', '//TRIM(Num2LStr(NumDataColumns))//' columns).', & + ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + RETURN + END IF + END IF + END IF + END IF + END DO + REWIND( UnitDataFile ) +END SUBROUTINE GetFileLength + + +!------------------------------------------------------------------------------- +!> This subroutine takes a line of text that is passed in and reads the first +!! word to see if it is a number. An internal read is used to do this. If +!! it is a number, it is started in ValueRead and returned. The flag IsRealNum +!! is set to true. Otherwise, ValueRead is set to NaN (value from the NWTC_Num) +!! and the flag is set to false. +!! +!! The IsRealNum flag is set to indicate if we actually have a real number or +!! not. After calling this routine, a simple if statement can be used: +!! +!! @code +!! IF (IsRealNum) THEN +!! ! do something +!! ELSE +!! ! do something else +!! ENDIF +!! @endcode +!! +!------------------------------------------------------------------------------- +SUBROUTINE ReadRealNumberFromString(StringToParse, ValueRead, StrRead, IsRealNum, ErrStat, ErrMsg, IOErrStat) + + CHARACTER(*), INTENT(IN ) :: StringToParse !< The string we were handed. + REAL(SiKi), INTENT( OUT) :: ValueRead !< The variable being read. Returns as NaN (library defined) if not a Real. + CHARACTER(*), INTENT( OUT) :: StrRead !< A string containing what was read from the ReadNum routine. + LOGICAL, INTENT( OUT) :: IsRealNum !< Flag indicating if we successfully read a Real + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< ErrID level returned from ReadNum + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message including message from ReadNum + INTEGER(IntKi), INTENT( OUT) :: IOErrStat !< Error status from the internal read. Useful for diagnostics. + + ! Initialize some things + ErrStat = ErrID_None + ErrMsg = '' + + ! ReadNum returns a string contained in StrRead. So, we now try to do an internal read to VarRead and then trap errors. + READ(StringToParse,*,IOSTAT=IOErrStat) StrRead + READ(StringToParse,*,IOSTAT=IOErrStat) ValueRead + + ! If IOErrStat==0, then we have a real number, anything else is a problem. + IF (IOErrStat==0) THEN + IsRealNum = .TRUE. + ELSE + IsRealNum = .FALSE. + ValueRead = NaN ! This is NaN as defined in the NWTC_Num. + ErrMsg = 'Not a real number. '//TRIM(ErrMsg)//NewLine + ErrSTat = ErrID_Severe + END IF + + RETURN +END SUBROUTINE ReadRealNumberFromString + +!------------------------------------------------------------------------------------------------------------------------------- +!------------------------------------------------------------------------------- +!> This subroutine works with the ReadNum routine from the library. ReadNum is +!! called to read a word from the input file. An internal read is then done to +!! convert the string to a number that is stored in VarRead and returned. +!! +!! The IsRealNum flag is set to indicate if we actually have a real number or +!! not. After calling this routine, a simple if statement can be used: +!! +!! @code +!! IF (ISRealNum) THEN +!! ! do something +!! ELSE +!! ! do something else +!! ENDIF +!! @endcode +!! +!------------------------------------------------------------------------------- +SUBROUTINE ReadRealNumber(UnitNum, FileName, VarName, VarRead, StrRead, IsRealNum, ErrStat, ErrMsg, IOErrStat) + + INTEGER(IntKi), INTENT(IN ) :: UnitNum !< The unit number of the file being read + CHARACTER(*), INTENT(IN ) :: FileName !< The name of the file being read. Used in the ErrMsg from ReadNum (Library routine). + CHARACTER(*), INTENT(IN ) :: VarName !< The variable we are reading. Used in the ErrMsg from ReadNum (Library routine)'. + REAL(SiKi), INTENT( OUT) :: VarRead !< The variable being read. Returns as NaN (library defined) if not a Real. + CHARACTER(*), INTENT( OUT) :: StrRead !< A string containing what was read from the ReadNum routine. + LOGICAL, INTENT( OUT) :: IsRealNum !< Flag indicating if we successfully read a Real + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< ErrID level returned from ReadNum + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message including message from ReadNum + INTEGER(IntKi), INTENT( OUT) :: IOErrStat !< Error status from the internal read. Useful for diagnostics. + + ! Local vars + INTEGER(IntKi) :: ErrStatTmp + CHARACTER(2048) :: ErrMsgTmp + + ! Initialize some things + ErrStat = ErrID_None + ErrMsg = '' + + ! Now call the ReadNum routine to get the number + ! If it is a word that does not start with T or F, then ReadNum won't give any errors. + CALL ReadNum( UnitNum, FileName, StrRead, VarName, ErrStatTmp, ErrMsgTmp) + + ! ReadNum returns a string contained in StrRead. So, we now try to do an internal read to VarRead and then trap errors. + READ(StrRead,*,IOSTAT=IOErrStat) VarRead + + ! If IOErrStat==0, then we have a real number, anything else is a problem. + IF (IOErrStat==0) THEN + IsRealNum = .TRUE. + ELSE + IsRealNum = .FALSE. + VarRead = NaN ! This is NaN as defined in the NWTC_Num. + ErrMsg = 'Not a real number. '//TRIM(ErrMsgTmp)//NewLine + ErrStat = ErrStatTmp ! The ErrStatTmp returned by the ReadNum routine is an ErrID level. + END IF + + RETURN +END SUBROUTINE ReadRealNumber + + +FUNCTION is_numeric(string, x) + IMPLICIT NONE + CHARACTER(len=*), INTENT(IN) :: string + REAL(SiKi), INTENT(OUT) :: x + LOGICAL :: is_numeric + + INTEGER :: e,n + CHARACTER(len=12) :: fmt + x = 0.0_SiKi + n=LEN_TRIM(string) + WRITE(fmt,'("(F",I0,".0)")') n + READ(string,fmt,IOSTAT=e) x + is_numeric = e == 0 +END FUNCTION is_numeric + +END MODULE UserWaves diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 new file mode 100644 index 0000000000..7fad44dc63 --- /dev/null +++ b/modules/seastate/src/Waves.f90 @@ -0,0 +1,2487 @@ +!********************************************************************************************************************************** +! The Waves and Waves_Types modules make up a template for creating user-defined calculations in the FAST Modularization +! Framework. Waves_Types will be auto-generated based on a description of the variables for the module. +!.................................................................................................................................. +! LICENSING +! Copyright (C) 2013-2015 National Renewable Energy Laboratory +! +! This file is part of Waves. +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +!********************************************************************************************************************************** +MODULE Waves + + USE Waves_Types + USE UserWaves + USE NWTC_Library + USE NWTC_FFTPACK + USE NWTC_RandomNumber + + IMPLICIT NONE + + PRIVATE + + TYPE(ProgDesc), PARAMETER :: Waves_ProgDesc = ProgDesc( 'Waves', '', '' ) + + COMPLEX(SiKi), PARAMETER, PUBLIC :: ImagNmbr = (0.0_SiKi,1.0_SiKi) ! The imaginary number, SQRT(-1.0) + + + ! ..... Public Subroutines ................................................................................................... + PUBLIC :: WavePkShpDefault ! Return the default value of the peak shape parameter of the incident wave spectrum + PUBLIC :: Waves_Init ! Initialization routine + + + PRIVATE:: WheelerStretching ! This FUNCTION applies the principle of Wheeler stretching to (1-Forward) find the elevation where the wave kinematics are to be applied using Wheeler stretching or (2-Backword) + PRIVATE:: BoxMuller + PRIVATE:: JONSWAP + PUBLIC :: WaveNumber + PRIVATE:: UserWaveSpctrm + PRIVATE:: StillWaterWaves_Init + PRIVATE:: VariousWaves_Init + ! PRIVATE:: WhiteNoiseWaves_Init + +CONTAINS + +!======================================================================= + + FUNCTION WavePkShpDefault ( Hs, Tp ) + + + ! This FUNCTION is used to return the default value of the peak shape + ! parameter of the incident wave spectrum, conditioned on significant + ! wave height and peak spectral period. + ! + ! There are several different versions of the JONSWAP spectrum + ! formula. This version is based on the one documented in the + ! IEC61400-3 wind turbine design standard for offshore wind turbines. + + + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(SiKi), INTENT(IN ) :: Hs ! Significant wave height (meters) + REAL(SiKi), INTENT(IN ) :: Tp ! Peak spectral period (sec) + REAL(SiKi) :: WavePkShpDefault ! This function = default value of the peak shape parameter of the incident wave spectrum conditioned on significant wave height and peak spectral period (-) + + + ! Local Variables: + + REAL(SiKi) :: TpOvrSqrtHs ! = Tp/SQRT(Hs) (s/SQRT(m)) + + + + ! Compute the default peak shape parameter of the incident wave spectrum, + ! conditioned on significant wave height and peak spectral period: + + TpOvrSqrtHs = Tp/SQRT(Hs) + + IF ( TpOvrSqrtHs <= 3.6 ) THEN + WavePkShpDefault = 5.0 + ELSEIF ( TpOvrSqrtHs >= 5.0 ) THEN + WavePkShpDefault = 1.0 + ELSE + WavePkShpDefault = EXP( 5.75 - 1.15*TpOvrSqrtHs ) + END IF + + + + RETURN + END FUNCTION WavePkShpDefault + +!======================================================================= + FUNCTION BoxMuller ( RNGType, NDAmp, Phase ) + + ! This FUNCTION uses the Box-Muller method to turn two uniformly + ! distributed randoms into two unit normal randoms, which are + ! returned as real and imaginary components. + + IMPLICIT NONE + + COMPLEX(SiKi) :: BoxMuller ! This function + + ! Passed Variables: + + INTEGER, INTENT(IN) :: RNGType + LOGICAL, INTENT(IN) :: NDAmp ! Flag for normally-distributed amplitudes + REAL(SiKi), INTENT(IN), OPTIONAL :: Phase ! Optional phase to override random phase (radians) + + ! Local Variables: + + REAL(SiKi) :: C1 ! Intermediate variable + REAL(SiKi) :: C2 ! Intermediate variable + REAL(SiKi) :: U1(1) ! First uniformly distributed random + REAL(SiKi) :: U2(1) ! Second uniformly distributed random + + ! Compute the two uniformly distributed randoms: + ! NOTE: The first random, U1, cannot be zero else the LOG() function + ! below will blow up; there is no restriction on the value of the + ! second random, U2. + + U1 = 0.0 + DO WHILE ( U1(1) == 0.0 ) + CALL UniformRandomNumbers(RNGType, U1) + END DO + CALL UniformRandomNumbers(RNGType, U2) + + ! Compute intermediate variables: + + IF ( NDAmp ) THEN ! Normally-distributed amplitudes + C1 = SQRT( -2.0*LOG(U1(1)) ) + ELSE ! Constant amplitudes (ignore U1); therefore, C1 = SQRT( 2.0 ) = MEAN( SQRT( -2.0*LOG(U1) ) for a uniform distribution of U1 between 0 and 1 + C1 = SQRT( 2.0 ) + END IF + + IF ( PRESENT( Phase ) ) THEN ! Specified phase to replace random phase (ignore U2) + C2 = Phase + ELSE ! Uniformly-distributed phase + C2 = TwoPi*U2(1) + END IF + + ! Compute the unit normal randoms: + + BoxMuller = CMPLX( C1*COS(C2), C1*SIN(C2) ) + + RETURN + END FUNCTION BoxMuller +!======================================================================= + FUNCTION JONSWAP ( Omega, Hs, Tp, Gamma ) + + + ! This FUNCTION computes the JOint North Sea WAve Project + ! (JONSWAP) representation of the one-sided power spectral density + ! or wave spectrum given the frequency, Omega, peak shape + ! parameter, Gamma, significant wave height, Hs, and peak spectral + ! period, Tp, as inputs. If the value of Gamma is 1.0, the + ! Pierson-Moskowitz wave spectrum is returned. + ! + ! There are several different versions of the JONSWAP spectrum + ! formula. This version is based on the one documented in the + ! IEC61400-3 wind turbine design standard for offshore wind + ! turbines. + + + + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(SiKi), INTENT(IN ) :: Gamma ! Peak shape parameter (-) + REAL(SiKi), INTENT(IN ) :: Hs ! Significant wave height (meters) + REAL(SiKi) :: JONSWAP ! This function = JONSWAP wave spectrum, S (m^2/(rad/s)) + REAL(SiKi), INTENT(IN ) :: Omega ! Wave frequency (rad/s) + REAL(SiKi), INTENT(IN ) :: Tp ! Peak spectral period (sec) + + + ! Local Variables: + + REAL(SiKi) :: Alpha ! Exponent on Gamma used in the spectral formulation (-) + REAL(SiKi) :: C ! Normalising factor used in the spectral formulation (-) + REAL(SiKi) :: f ! Wave frequency (Hz) + REAL(SiKi) :: fp ! Peak spectral frequency (Hz) + REAL(SiKi) :: fpOvrf4 ! (fp/f)^4 + REAL(SiKi) :: Sigma ! Scaling factor used in the spectral formulation (-) + + REAL(SiKi) :: Inv2Pi = 0.15915494 + + ! Compute the JONSWAP wave spectrum, unless Omega is zero, in which case, + ! return zero: + + IF ( EqualRealNos(Omega, 0.0_SiKi) ) THEN ! When .TRUE., the formulation below is ill-conditioned; thus, the known value of zero is returned. + + + JONSWAP = 0.0 + + + ELSE ! Omega > 0.0; forumulate the JONSWAP spectrum. + + + ! Compute the wave frequency and peak spectral frequency in Hz: + + f = Inv2Pi*Omega + fp = 1/Tp + fpOvrf4 = (fp/f)**4 + + + ! Compute the normalising factor: + + C = 1.0 - ( 0.287*LOG(GAMMA) ) + + + ! Compute Alpha: + + IF ( f <= fp ) THEN + Sigma = 0.07 + ELSE + Sigma = 0.09 + END IF + +!bjj: Alpha = EXP( ( -0.5*( ( (f/fp) - 1.0 )/Sigma )**2 ) ) + Alpha = EXP( ( -0.5*( ( (f*Tp) - 1.0 )/Sigma )**2 ) ) !this works even if Tp is 0 (but using f/fp doesn't) + + + ! Compute the wave spectrum: + + JONSWAP = Inv2Pi*C*( 0.3125*Hs*Hs*fpOvrf4/f )*EXP( ( -1.25*fpOvrf4 ) )*( GAMMA**Alpha ) + + + END IF + + + + RETURN + END FUNCTION JONSWAP + !======================================================================= +!JASON: MOVE THIS USER-DEFINED ROUTINE (UserWaveSpctrm) TO THE UserSubs.f90 OF HydroDyn WHEN THE PLATFORM LOADING FUNCTIONALITY HAS BEEN DOCUMENTED!!!!! + SUBROUTINE UserWaveSpctrm ( Omega, WaveDir, DirRoot, WaveS1Sdd ) + + + ! This is a dummy routine for holding the place of a user-specified + ! wave spectrum. Modify this code to create your own spectrum. + + + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(SiKi), INTENT(IN ) :: Omega ! Wave frequency, rad/s. + REAL(SiKi), INTENT(IN ) :: WaveDir ! Incident wave propagation heading direction, degrees + REAL(SiKi), INTENT(OUT) :: WaveS1Sdd ! One-sided power spectral density of the wave spectrum per unit time for the current frequency component and heading direction, m^2/(rad/s). + + CHARACTER(*), 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. + + + + WaveS1Sdd = 0.0 + + + + RETURN + END SUBROUTINE UserWaveSpctrm + !======================================================================= + FUNCTION WaveNumber ( Omega, g, h ) + + + ! This FUNCTION solves the finite depth dispersion relationship: + ! + ! k*tanh(k*h)=(Omega^2)/g + ! + ! for k, the wavenumber (WaveNumber) given the frequency, Omega, + ! gravitational constant, g, and water depth, h, as inputs. A + ! high order initial guess is used in conjunction with a quadratic + ! Newton's method for the solution with seven significant digits + ! accuracy using only one iteration pass. The method is due to + ! Professor J.N. Newman of M.I.T. as found in routine EIGVAL of + ! the SWIM-MOTION-LINES (SML) software package in source file + ! Solve.f of the SWIM module. + + + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(ReKi), INTENT(IN ) :: g ! Gravitational acceleration (m/s^2) + REAL(ReKi), INTENT(IN ) :: h ! Water depth (meters) + REAL(SiKi), INTENT(IN ) :: Omega ! Wave frequency (rad/s) + REAL(SiKi) :: WaveNumber ! This function = wavenumber, k (1/m) + + + ! Local Variables: + + REAL(SiKi) :: A ! A temporary variable used in the solution. + REAL(SiKi) :: B ! A temporary variable used in the solution. + REAL(SiKi) :: C ! A temporary variable used in the solution. + REAL(SiKi) :: C2 ! A temporary variable used in the solution. + REAL(SiKi) :: CC ! A temporary variable used in the solution. + REAL(SiKi) :: E2 ! A temporary variable used in the solution. + REAL(SiKi) :: X0 ! A temporary variable used in the solution. + + + + ! Compute the wavenumber, unless Omega is zero, in which case, return + ! zero: + + IF ( Omega == 0.0 ) THEN ! When .TRUE., the formulation below is ill-conditioned; thus, the known value of zero is returned. + + + WaveNumber = 0.0 + + + ELSE ! Omega > 0.0; solve for the wavenumber as usual. + + + C = Omega*Omega*REAL(h,SiKi)/REAL(g,SiKi) + CC = C*C + + + ! Find X0: + + IF ( C <= 2.0 ) THEN + + X0 = SQRT(C)*( 1.0 + C*( 0.169 + (0.031*C) ) ) + + ELSE + + E2 = EXP(-2.0*C) + + X0 = C*( 1.0 + ( E2*( 2.0 - (12.0*E2) ) ) ) + + END IF + + + ! Find the WaveNumber: + + IF ( C <= 4.8 ) THEN + + C2 = CC - X0*X0 + A = 1.0/( C - C2 ) + B = A*( ( 0.5*LOG( ( X0 + C )/( X0 - C ) ) ) - X0 ) + + WaveNumber = ( X0 - ( B*C2*( 1.0 + (A*B*C*X0) ) ) )/REAL(h,SiKi) + + ELSE + + WaveNumber = X0/REAL(h,SiKi) + + END IF + + + END IF + + + + RETURN + END FUNCTION WaveNumber + + !======================================================================= + FUNCTION COSHNumOvrCOSHDen ( k, h, z ) + + + ! This FUNCTION computes the shallow water hyperbolic numerator + ! over denominator term in the wave kinematics expressions: + ! + ! COSH( k*( z + h ) )/COSH( k*h ) + ! + ! given the wave number, k, water depth, h, and elevation z, as + ! inputs. + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(SiKi) :: COSHNumOvrCOSHDen ! This function = COSH( k*( z + h ) )/COSH( k*h ) (-) + REAL(ReKi), INTENT(IN ) :: h ! Water depth ( h > 0 ) (meters) + REAL(SiKi), INTENT(IN ) :: k ! Wave number ( k >= 0 ) (1/m) + REAL(SiKi), INTENT(IN ) :: z ! Elevation (-h <= z <= 0 ) (meters) + + + + ! Compute the hyperbolic numerator over denominator: + + IF ( k*h > 89.4_SiKi ) THEN ! When .TRUE., the shallow water formulation will trigger a floating point overflow error; however, COSH( k*( z + h ) )/COSH( k*h ) = EXP( k*z ) + EXP( -k*( z + 2*h ) ) for large k*h. This equals the deep water formulation, EXP( k*z ), except near z = -h, because h > 14.23*wavelength (since k = 2*Pi/wavelength) in this case. + + COSHNumOvrCOSHDen = EXP( k*z ) + EXP( -k*( z + 2.0_SiKi*REAL(h,SiKi) ) ) + + ELSE ! 0 < k*h <= 89.4; use the shallow water formulation. + + COSHNumOvrCOSHDen =REAL( COSH( k*( z + REAL(h,SiKi) ) ),R8Ki)/COSH( k*REAL(h,SiKi) ) + + END IF + + + + RETURN + END FUNCTION COSHNumOvrCOSHDen +!======================================================================= + FUNCTION COSHNumOvrSINHDen ( k, h, z ) + + + ! This FUNCTION computes the shallow water hyperbolic numerator + ! over denominator term in the wave kinematics expressions: + ! + ! COSH( k*( z + h ) )/SINH( k*h ) + ! + ! given the wave number, k, water depth, h, and elevation z, as + ! inputs. + + + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(SiKi) :: COSHNumOvrSINHDen ! This function = COSH( k*( z + h ) )/SINH( k*h ) (-) + REAL(ReKi), INTENT(IN ) :: h ! Water depth ( h > 0 ) (meters) + REAL(SiKi), INTENT(IN ) :: k ! Wave number ( k >= 0 ) (1/m) + REAL(SiKi), INTENT(IN ) :: z ! Elevation (-h <= z <= 0 ) (meters) + + + + ! Compute the hyperbolic numerator over denominator: + + + IF ( k < EPSILON(0.0_SiKi) ) THEN ! When .TRUE., the shallow water formulation is ill-conditioned; thus, HUGE(k) is returned to approximate the known value of infinity. + + COSHNumOvrSINHDen = HUGE( k ) + + ELSEIF ( k*REAL(h,SiKi) > 89.4_SiKi ) THEN ! When .TRUE., the shallow water formulation will trigger a floating point overflow error; however, COSH( k*( z + h ) )/SINH( k*h ) = EXP( k*z ) + EXP( -k*( z + 2*h ) ) for large k*h. This equals the deep water formulation, EXP( k*z ), except near z = -h, because h > 14.23*wavelength (since k = 2*Pi/wavelength) in this case. + + COSHNumOvrSINHDen = EXP( k*z ) + EXP( -k*( z + 2*REAL(h,SiKi) ) ) + + ELSE ! 0 < k*h <= 89.4; use the shallow water formulation. + + COSHNumOvrSINHDen = COSH( k*( z + REAL(h,SiKi) ) )/SINH( k*REAL(h,SiKi) ) + + END IF + + + + RETURN + END FUNCTION COSHNumOvrSINHDen +!======================================================================= + FUNCTION COTH ( X ) + + + ! This FUNCTION computes the hyperbolic cotangent, + ! COSH(X)/SINH(X). + + + USE Precision + + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(SiKi) :: COTH ! This function = COSH( X )/SINH( X ) (-) + REAL(SiKi), INTENT(IN ) :: X ! The argument (-) + + + + ! Compute the hyperbolic cotangent: + + IF ( X == 0.0_SiKi ) THEN ! When .TRUE., the formulation below is ill-conditioned; thus, HUGE(X) is returned to approximate the known value of infinity. + + COTH = HUGE( X ) + + ELSE ! X /= 0.0; use the numerically-stable computation of COTH(X) by means of TANH(X). + + COTH = 1.0_SiKi/TANH( X ) ! = COSH( X )/SINH( X ) + + END IF + + + + RETURN + END FUNCTION COTH + + !======================================================================= + FUNCTION SINHNumOvrSINHDen ( k, h, z ) + + + ! This FUNCTION computes the shallow water hyperbolic numerator + ! over denominator term in the wave kinematics expressions: + ! + ! SINH( k*( z + h ) )/SINH( k*h ) + ! + ! given the wave number, k, water depth, h, and elevation z, as + ! inputs. + + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(SiKi) :: SINHNumOvrSINHDen ! This function = SINH( k*( z + h ) )/SINH( k*h ) (-) + REAL(ReKi), INTENT(IN ) :: h ! Water depth ( h > 0 ) (meters) + REAL(SiKi), INTENT(IN ) :: k ! Wave number ( k >= 0 ) (1/m) + REAL(SiKi), INTENT(IN ) :: z ! Elevation (-h <= z <= 0 ) (meters) + + + + ! Compute the hyperbolic numerator over denominator: + + IF ( k == 0.0_SiKi ) THEN ! When .TRUE., the shallow water formulation is ill-conditioned; thus, the known value of unity is returned. + + SINHNumOvrSINHDen = 1.0 + + ELSEIF ( k*REAL(h,SiKi) > 89.4_SiKi ) THEN ! When .TRUE., the shallow water formulation will trigger a floating point overflow error; however, SINH( k*( z + h ) )/SINH( k*h ) = EXP( k*z ) - EXP( -k*( z + 2*h ) ) for large k*h. This equals the deep water formulation, EXP( k*z ), except near z = -h, because h > 14.23*wavelength (since k = 2*Pi/wavelength) in this case. + + SINHNumOvrSINHDen = EXP( k*z ) - EXP( -k*( z + 2.0_SiKi*h ) ) + + ELSE ! 0 < k*h <= 89.4; use the shallow water formulation. + + SINHNumOvrSINHDen = SINH( k*( z + REAL(h,SiKi) ) )/SINH( k*REAL(h,SiKi) ) + + END IF + + + + RETURN + END FUNCTION SINHNumOvrSINHDen + + +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) +! This routine initializes the waves data for WaveMod = 0 , or still water waves option +!---------------------------------------------------------------------------------------------------------------------------------- + + + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Initialization output data + INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None + ! Local Variables + INTEGER :: I, J,k, count ! Generic index + INTEGER(IntKi) :: ErrStatTmp ! Temporary error status + CHARACTER(ErrMsgLen) :: ErrMsgTmp ! Temporary error message + character(*), parameter :: RoutineName = 'StillWaterWaves_Init' + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + + ! Initialize everything to zero: + + !>>>>>> COMPUTE INITOUT SCALARS InitOut%NStepWave, InitOut%NStepWave2, InitOut%WaveTMax, and InitOut%WaveDOmega for WAVEMOD = 0 + InitOut%NStepWave = 2 ! We must have at least two elements in order to interpolate later on + InitOut%NStepWave2 = 1 + InitOut%WaveTMax = InitInp%WaveTMax ! bjj added this... I don't think it was set anywhere for this wavemod. + InitOut%WaveDOmega = 0.0 + + ! >>> Allocate and initialize (set to 0) InitOut arrays + call Initial_InitOut_Arrays(InitOut, InitInp, 1.0_DbKi, ErrStatTmp, ErrMsgTmp); CALL SetErrStat(ErrStatTmp,ErrMsgTmp, ErrStat,ErrMsg,RoutineName) + !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + IF ( ErrStat >= AbortErrLev ) RETURN + + + ! Add the current velocities to the wave velocities: + count = 0 + + !DO J = 1,InitInp%NWaveKinGrid ! Loop through all points where the incident wave kinematics will be computed + do k = 1, InitInp%NGrid(3) + do j = 1, InitInp%NGrid(2) + do i = 1, InitInp%NGrid(1) + count = count + 1 + InitOut%WaveVel(:,i,j,k,1) = InitInp%CurrVxi(count) ! xi-direction + InitOut%WaveVel(:,i,j,k,2) = InitInp%CurrVyi(count) ! yi-direction + end do + end do + end do + + ! END DO ! J - All points where the incident wave kinematics will be computed + +END SUBROUTINE StillWaterWaves_Init + + +!---------------------------------------------------------------------------------------------------------------------------------- +SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) +! Compute the wave kinematics and related information for Plane progressive (regular) wave, JONSWAP/Pierson-Moskowitz spectrum +! (irregular) wave, or user-defined spectrum (irregular) wave. +!---------------------------------------------------------------------------------------------------------------------------------- + + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Output data + INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + + + ! Local Variables + COMPLEX(SiKi) :: ImagOmega ! = ImagNmbr*Omega (rad/s) + COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0HxiPz0 (:,:) ! Partial derivative of WaveAccC0Hxi(:) with respect to zi at zi = 0 (1/s^2) + COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0HyiPz0 (:,:) ! Partial derivative of WaveAccC0Hyi(:) with respect to zi at zi = 0 (1/s^2) + COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0VPz0 (:,:) ! Partial derivative of WaveAccC0V (:) with respect to zi at zi = 0 (1/s^2) + COMPLEX(SiKi), ALLOCATABLE :: PWaveDynPC0BPz0(:,:) ! Partial derivative of WaveDynPC0B (:) with respect to zi at zi = 0 (N/m ) + COMPLEX(SiKi), ALLOCATABLE :: PWaveVelC0HxiPz0 (:,:) ! Partial derivative of WaveVelC0Hxi(:) with respect to zi at zi = 0 (1/s ) + COMPLEX(SiKi), ALLOCATABLE :: PWaveVelC0HyiPz0 (:,:) ! Partial derivative of WaveVelC0Hyi(:) with respect to zi at zi = 0 (1/s ) + COMPLEX(SiKi), ALLOCATABLE :: PWaveVelC0VPz0 (:,:) ! Partial derivative of WaveVelC0V (:) with respect to zi at zi = 0 (1/s ) + COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0Hxi(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0Hyi(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0V(:,:) ! Discrete Fourier transform of the instantaneous vertical acceleration of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + COMPLEX(SiKi), ALLOCATABLE :: WaveDynPC0(:,:) ! Discrete Fourier transform of the instantaneous dynamic pressure of incident waves before applying stretching at the zi-coordinates for points (N/m^2) + COMPLEX(SiKi), ALLOCATABLE :: WaveVelC0Hxi(:,:) ! Discrete Fourier transform of the instantaneous horizontal velocity of incident waves before applying stretching at the zi-coordinates for points (m/s) + COMPLEX(SiKi), ALLOCATABLE :: WaveVelC0Hyi(:,:) ! Discrete Fourier transform of the instantaneous horizontal velocity in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s) + COMPLEX(SiKi), ALLOCATABLE :: WaveVelC0V(:,:) ! Discrete Fourier transform of the instantaneous vertical velocity in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s) + + REAL(SiKi), ALLOCATABLE :: CosWaveDir(:) ! COS( WaveDirArr(I) ) -- Each wave frequency has a unique wave direction. + REAL(SiKi), ALLOCATABLE :: GHWaveAcc (:,:) ! Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the GHNWvDpth vertical locations in GH Bladed wave data files (m/s^2) + REAL(SiKi), ALLOCATABLE :: GHWaveDynP(: ) ! Instantaneous dynamic pressure of incident waves at each of the GHNWvDpth vertical locations in GH Bladed wave data files (N/m^2) + + REAL(SiKi), ALLOCATABLE :: GHWaveVel (:,:) ! Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the GHNWvDpth vertical locations in GH Bladed wave data files (m/s ) + REAL(SiKi), ALLOCATABLE :: GHWvDpth (:) ! Vertical locations in GH Bladed wave data files. + + REAL(SiKi), ALLOCATABLE :: PWaveAcc0HxiPz0(:,:) ! Partial derivative of WaveAcc0Hxi(:) with respect to zi at zi = 0 (1/s^2) + REAL(SiKi), ALLOCATABLE :: PWaveAcc0HyiPz0(:,:) ! Partial derivative of WaveAcc0Hyi(:) with respect to zi at zi = 0 (1/s^2) + REAL(SiKi), ALLOCATABLE :: PWaveAcc0VPz0 (:,:) ! Partial derivative of WaveAcc0V (:) with respect to zi at zi = 0 (1/s^2) + REAL(SiKi), ALLOCATABLE :: PWaveDynP0BPz0 (:,:) ! Partial derivative of WaveDynP0B (:) with respect to zi at zi = 0 (N/m ) + REAL(SiKi), ALLOCATABLE :: PWaveVel0HxiPz0(:,:) ! Partial derivative of WaveVel0Hxi(:) with respect to zi at zi = 0 (1/s ) + REAL(SiKi), ALLOCATABLE :: PWaveVel0HyiPz0(:,:) ! Partial derivative of WaveVel0Hyi(:) with respect to zi at zi = 0 (1/s ) + REAL(SiKi), ALLOCATABLE :: PWaveVel0VPz0 (:,:) ! Partial derivative of WaveVel0V (:) with respect to zi at zi = 0 (1/s ) + + REAL(SiKi), ALLOCATABLE :: SinWaveDir (:) ! SIN( WaveDirArr(I) ) + REAL(SiKi), ALLOCATABLE :: WaveAcc0Hxi (:,:) ! Instantaneous horizontal acceleration in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + REAL(SiKi), ALLOCATABLE :: WaveAcc0Hyi (:,:) ! Instantaneous horizontal acceleration in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + + REAL(SiKi), ALLOCATABLE :: WaveAcc0V (:,:) ! Instantaneous vertical acceleration of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + + REAL(SiKi), ALLOCATABLE :: WaveDynP0B(:,:) ! Instantaneous dynamic pressure of incident waves before applying stretching at the zi-coordinates for points (N/m^2) + + COMPLEX(SiKi) :: WaveElevxiPrime0 + REAL(SiKi), ALLOCATABLE :: WaveKinzi0Prime(:) ! zi-coordinates for points where the incident wave kinematics will be computed before applying stretching; these are relative to the mean see level (meters) + INTEGER , ALLOCATABLE :: WaveKinPrimeMap(:) + REAL(SiKi) :: WaveNmbr ! Wavenumber of the current frequency component (1/meter) + REAL(SiKi), ALLOCATABLE :: WaveVel0Hxi (:,:) ! Instantaneous xi-direction velocity of incident waves before applying stretching at the zi-coordinates for points (m/s ) + REAL(SiKi), ALLOCATABLE :: WaveVel0Hyi (:,:) ! Instantaneous yi-direction velocity of incident waves before applying stretching at the zi-coordinates for points (m/s ) + REAL(SiKi), ALLOCATABLE :: WaveVel0V (:,:) ! Instantaneous vertical velocity of incident waves before applying stretching at the zi-coordinates for points (m/s ) + INTEGER :: I,count ! Generic index + INTEGER :: J ! Generic index + INTEGER :: K ! Generic index + INTEGER :: NWaveKin0Prime ! Number of points where the incident wave kinematics will be computed before applying stretching to the instantaneous free surface (-) + integer :: primeCount ! Counter for locations before applying stretching + COMPLEX(SiKi) :: tmpComplex ! A temporary varible to hold the complex value of the wave elevation before storing it into a REAL array + COMPLEX(SiKi),ALLOCATABLE :: tmpComplexArr(:) ! A temporary array (0:NStepWave2-1) for FFT use. + TYPE(FFT_DataType) :: FFT_Data ! the instance of the FFT module we're using + + REAL(SiKi), ALLOCATABLE :: WaveS1SddArr(:) !< One-sided power spectral density of the wave spectrum at all non-negative frequencies (m^2/(rad/s)) + REAL(SiKi), ALLOCATABLE :: OmegaArr(:) !< Array of all non-negative angular frequencies (rad/s) + + ! Variables for MacCamy-Fuchs model + REAL(SiKi) :: ka + REAL(SiKi) :: JPrime + REAL(SiKi) :: YPrime + REAL(SiKi) :: HPrime + REAL(SiKi) :: MCFC + COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0HxiMCF(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0HyiMCF(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + COMPLEX(SiKi), ALLOCATABLE :: WaveAccC0VMCF(:,:) ! Discrete Fourier transform of the instantaneous vertical acceleration of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0HxiMCFPz0(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0HyiMCFPz0(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + COMPLEX(SiKi), ALLOCATABLE :: PWaveAccC0VMCFPz0(:,:) ! Discrete Fourier transform of the instantaneous vertical acceleration of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + REAL(SiKi), ALLOCATABLE :: WaveAcc0HxiMCF(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + REAL(SiKi), ALLOCATABLE :: WaveAcc0HyiMCF(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + REAL(SiKi), ALLOCATABLE :: WaveAcc0VMCF(:,:) ! Discrete Fourier transform of the instantaneous vertical acceleration of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + REAL(SiKi), ALLOCATABLE :: PWaveAcc0HxiMCFPz0(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in x-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + REAL(SiKi), ALLOCATABLE :: PWaveAcc0HyiMCFPz0(:,:) ! Discrete Fourier transform of the instantaneous horizontal acceleration in y-direction of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + REAL(SiKi), ALLOCATABLE :: PWaveAcc0VMCFPz0(:,:) ! Discrete Fourier transform of the instantaneous vertical acceleration of incident waves before applying stretching at the zi-coordinates for points (m/s^2) + + + ! Variables for error handling + INTEGER(IntKi) :: ErrStatTmp !< Temporary error status + CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message + character(*), parameter :: RoutineName = 'VariousWaves_Init' + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + ! Tell our users what is about to happen that may take a while: + CALL WrScr ( ' Generating incident wave kinematics and current time history.' ) + + + + ! Determine the number of, NWaveKin0Prime, and the zi-coordinates for, + ! WaveKinzi0Prime(:), points where the incident wave kinematics will be + ! computed before applying stretching to the instantaneous free surface. + ! The locations are relative to the mean see level. + + NWaveKin0Prime = 0 + DO J = 1,InitInp%NWaveKinGrid ! Loop through all mesh points where the incident wave kinematics will be computed + ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinGridzi and WtrDpth have already been adjusted using MSL2SWL + IF ( InitInp%WaveKinGridzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinGridzi(J) <= 0 ) THEN + NWaveKin0Prime = NWaveKin0Prime + 1 + END IF + END DO ! J - All Morison nodes where the incident wave kinematics will be computed + + + + ! ALLOCATE the WaveKinzi0Prime(:) array and compute its elements here: + + ALLOCATE ( WaveKinzi0Prime(NWaveKin0Prime) , STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinzi0Prime.',ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveKinPrimeMap(NWaveKin0Prime) , STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinPrimeMap.',ErrStat,ErrMsg,RoutineName) + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + + I = 1 + + DO J = 1,InitInp%NWaveKinGrid ! Loop through all points where the incident wave kinematics will be computed without stretching + ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinGridzi and WtrDpth have already been adjusted using MSL2SWL + IF ( InitInp%WaveKinGridzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinGridzi(J) <= 0 ) THEN + + WaveKinzi0Prime(I) = InitInp%WaveKinGridzi(J) + WaveKinPrimeMap(I) = J + I = I + 1 + + END IF + + END DO ! J - All points where the incident wave kinematics will be computed without stretching + + + + ! Perform some initialization computations including calculating the total number of frequency + ! components = total number of time steps in the incident wave, + ! calculating the frequency step, calculating the index of the frequency + ! component nearest to WaveTp, and ALLOCATing the arrays: + ! NOTE: WaveDOmega = 2*Pi/WaveTMax since, in the FFT: + ! Omega = (K-1)*WaveDOmega + ! Time = (J-1)*WaveDT + ! and therefore: + ! Omega*Time = (K-1)*(J-1)*WaveDOmega*WaveDT + ! = (K-1)*(J-1)*2*Pi/NStepWave [see NWTC_FFTPACK] + ! or: + ! WaveDOmega = 2*Pi/(NStepWave*WaveDT) + ! = 2*Pi/WaveTMax + + + + + ! Set new value for NStepWave so that the FFT algorithms are efficient. Note that if this method is changed, the method + ! used to calculate the number of multidirectional wave directions (WaveNDir) and the UserWaveElevations_Init subroutine + ! will need to be updated. + + !>>>>>> COMPUTE INITOUT SCALARS InitOut%NStepWave, InitOut%NStepWave2, InitOut%WaveTMax, and InitOut%WaveDOmega for WAVEMOD = 1,2,3,4,10 (5 and 7 also call this routine, but have been set already) + ! NOTE: For WaveMod = 5, NStepWave and several other things were already set in the UserWaveElevations_Init routine + ! using file information (an FFT was performed there, so the information was needed before now). + ! Same with WaveMod = 7. With WaveMod = 7, WaveDirArr is also populated in UserWaveComponents_Init routine. + ! Need to make sure the wave-direction in formation is not overwritten later. + IF (InitInp%WaveMod /= 5 .AND. InitInp%WaveMod /= 7) THEN + InitOut%NStepWave = CEILING ( InitInp%WaveTMax/InitInp%WaveDT ) ! Set NStepWave to an even integer ... + IF ( MOD(InitOut%NStepWave,2) == 1 ) InitOut%NStepWave = InitOut%NStepWave + 1 ! ... larger or equal to WaveTMax/WaveDT. + + InitOut%NStepWave2 = MAX( InitOut%NStepWave/2, 1 ) ! Make sure that NStepWave is an even product of small factors (PSF) that is + InitOut%NStepWave = 2 * PSF( InitOut%NStepWave2, 9 ) ! greater or equal to WaveTMax/WaveDT to ensure that the FFT is efficient. + + InitOut%NStepWave2 = InitOut%NStepWave/2 ! Update the value of NStepWave2 based on the value needed for NStepWave. + InitOut%WaveTMax = InitOut%NStepWave*InitInp%WaveDT ! Update the value of WaveTMax based on the value needed for NStepWave. + InitOut%WaveDOmega = TwoPi/InitOut%WaveTMax ! Compute the frequency step for incident wave calculations. + + ! >>> Allocate and initialize (set to 0) InitOut arrays + call Initial_InitOut_Arrays(InitOut, InitInp, InitInp%WaveDT, ErrStatTmp, ErrMsgTmp); CALL SetErrStat(ErrStatTmp,ErrMsgTmp, ErrStat,ErrMsg,RoutineName) + ENDIF + !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< + + + ! Allocate all the arrays we need. + ALLOCATE ( tmpComplexArr(0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array tmpComplexArr.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveDynPC0 (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynPC0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveVelC0Hxi (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVelC0Hxi.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveVelC0Hyi (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVelC0Hyi.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveVelC0V (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVelC0V.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAccC0Hxi (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0Hxi.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAccC0Hyi (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0Hyi.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAccC0V (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0V.', ErrStat,ErrMsg,RoutineName) + + + ALLOCATE ( WaveDynP0B (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP0B.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveVel0Hxi (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel0Hxi.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveVel0Hyi (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel0Hyi.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveVel0V (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel0V.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAcc0Hxi (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0Hxi.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAcc0Hyi (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0Hyi.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAcc0V (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0V.', ErrStat,ErrMsg,RoutineName) + + + IF (InitInp%MCFD > 0.0_SiKi) THEN ! MacCamy-Fuchs model + + ALLOCATE ( WaveAccC0HxiMCF(0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0HxiMCF.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAccC0HyiMCF(0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0HyiMCF.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAccC0VMCF (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0VMCF.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAcc0HxiMCF (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0HxiMCF.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAcc0HyiMCF (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0HyiMCF.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( WaveAcc0VMCF (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0VMCF.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%WaveAccMCF (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAccMCF.', ErrStat,ErrMsg,RoutineName) + END IF + + + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation Wave Stretching + + ALLOCATE ( PWaveDynPC0BPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveDynPC0BPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveVelC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0HxiPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveVelC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0HyiPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveVelC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0VPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAccC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HxiPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAccC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HyiPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAccC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0VPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveDynP0BPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveDynP0BPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveVel0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0HxiPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveVel0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0HyiPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveVel0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0Pz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAcc0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HxiPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAcc0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HyiPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAcc0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0VPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%PWaveDynP0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveDynP0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%PWaveVel0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),3), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveVel0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%PWaveAcc0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),3), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveAcc0.', ErrStat,ErrMsg,RoutineName) + + IF (InitInp%MCFD > 0.0_ReKi) THEN ! MacCamy-Fuchs model + + ALLOCATE ( PWaveAccC0HxiMCFPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HxiMCFPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAccC0HyiMCFPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HyiMCFPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAccC0VMCFPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0VMCFPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAcc0HxiMCFPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HxiMCFPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAcc0HyiMCFPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HyiMCFPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( PWaveAcc0VMCFPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElevGrid), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0VMCFPz0.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%PWaveAccMCF0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),3), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveAccMCF0.', ErrStat,ErrMsg,RoutineName) + + END IF + + END IF + +! END TODO SECTION + + + ! Arrays for the Sin and Cos of the wave direction for each frequency. Used in calculating wave elevation, velocity, acceleration etc. + ALLOCATE ( CosWaveDir( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array CosWaveDir.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( SinWaveDir( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array SinWaveDir.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( OmegaArr( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array OmegaArr.', ErrStat,ErrMsg,RoutineName) + + + ! Arrays for the constrained wave + ALLOCATE ( WaveS1SddArr( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveS1SddArr.', ErrStat,ErrMsg,RoutineName) + + ! Now check if all the allocations worked properly + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + + + ! Compute the positive-frequency components (including zero) of the discrete + ! Fourier transforms of the wave kinematics: + DO I = 0,InitOut%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transforms + OmegaArr(I) = I*InitOut%WaveDOmega + END DO + + call Get_1Spsd_and_WaveElevC0(InitInp, InitOut, OmegaArr, WaveS1SddArr) + + + !> # Multi Directional Waves + call CalculateWaveDirection(InitInp, InitOut, ErrStatTmp, ErrMsgTmp) + call SetErrStat(ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + ! Store the minimum and maximum wave directions + InitOut%WaveDirMin = MINVAL(InitOut%WaveDirArr) + InitOut%WaveDirMax = MAXVAL(InitOut%WaveDirArr) + + + ! Set the CosWaveDir and SinWaveDir arrays + CosWaveDir=COS(D2R*InitOut%WaveDirArr) + SinWaveDir=SIN(D2R*InitOut%WaveDirArr) + + + ! make sure this is called before calling ConstrainedNewWaves + CALL InitFFT ( InitOut%NStepWave, FFT_Data, .TRUE., ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while initializing the FFT.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + !-------------------------------------------------------------------------------- + !=== Constrained New Waves === + ! Modify the wave components to implement the constrained wave + ! Only do this if WaveMod = 2 (JONSWAP/Pierson-Moskowitz Spectrum) and ConstWaveMod > 0 + IF ( InitInp%WaveMod == 2 .AND. InitInp%ConstWaveMod > 0) THEN + ! adjust InitOut%WaveElevC0 for constrained wave: + call ConstrainedNewWaves(InitInp, InitOut, OmegaArr, WaveS1SddArr, CosWaveDir, SinWaveDir, FFT_Data, ErrStatTmp, ErrMsgTmp) + call SetErrStat(ErrStatTmp,ErrMsgTmp, ErrStat,ErrMsg,RoutineName) + if (ErrStat >= AbortErrLev) then + call cleanup() + return + end if + ENDIF + ! End of Constrained Wave + + !-------------------------------------------------------------------------------- + !> ## Phase shift the discrete Fourier transform of wave elevations at the WRP + !> This changes the phasing of all wave kinematics and loads to reflect the turbine's + !! location in the larger farm, in the case of FAST.Farm simulations, based on + !! specified PtfmLocationX and PtfmLocationY. + + IF (InitInp%WaveFieldMod == 2) THEN ! case 2: adjust wave phases based on turbine offsets from farm origin + + CALL WrScr ( ' Adjusting incident wave kinematics for turbine offset from array origin.' ) + + DO I = 0,InitOut%NStepWave2 + + tmpComplex = CMPLX( InitOut%WaveElevC0(1,I), InitOut%WaveElevC0(2,I)) + + ! some redundant calculations with later, but insignificant + WaveNmbr = WaveNumber ( OmegaArr(I), InitInp%Gravity, InitInp%WtrDpth ) + + ! apply the phase shift + tmpComplex = tmpComplex * EXP( -ImagNmbr*WaveNmbr*( InitInp%PtfmLocationX*CosWaveDir(I) + InitInp%PtfmLocationY*SinWaveDir(I) )) + + ! put shifted complex amplitudes back into the array for use in the remainder of this module and other modules (Waves2, WAMIT, WAMIT2) + InitOut%WaveElevC0 (1,I) = REAL( tmpComplex) + InitOut%WaveElevC0 (2,I) = AIMAG(tmpComplex) + + END DO + END IF + + + !-------------------------------------------------------------------------------- + !> ## Compute IFFTs + !> Compute the discrete Fourier transform of the instantaneous elevation of + !! incident waves at each desired point on the still water level plane + !! where it can be output: + + DO I = 0,InitOut%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transforms + + + ! Set tmpComplex to the Ith element of the WAveElevC0 array + + tmpComplex = CMPLX( InitOut%WaveElevC0(1,I), InitOut%WaveElevC0(2,I)) + + + ! Compute the frequency of this component and its imaginary value: + + ImagOmega = ImagNmbr*OmegaArr(I) + + ! Compute the wavenumber: + + WaveNmbr = WaveNumber ( OmegaArr(I), InitInp%Gravity, InitInp%WtrDpth ) + + ! Wavenumber-dependent acceleration scaling for MacCamy-Fuchs model + MCFC = 0.0_ReKi + IF (InitInp%MCFD > 0.0_SiKi .AND. I>0_IntKi) THEN + ka = 0.5_ReKi * WaveNmbr * InitInp%MCFD + JPrime = BESSEL_JN(1,ka) / ka - BESSEL_JN(2,ka) + YPrime = BESSEL_YN(1,ka) / ka - BESSEL_YN(2,ka) + HPrime = SQRT(JPrime*JPrime + YPrime*YPrime) + MCFC = 4.0_ReKi/( PI * ka * ka * HPrime ) + END IF + + ! Compute the discrete Fourier transform of the incident wave kinematics + ! before applying stretching at the zi-coordinates for the WAMIT reference point, and all + ! points where are Morison loads will be calculated. + + DO J = 1,NWaveKin0Prime ! Loop through all points where the incident wave kinematics will be computed without stretching + + WaveElevxiPrime0 = EXP( -ImagNmbr*WaveNmbr*( InitInp%WaveKinGridxi(WaveKinPrimeMap(J))*CosWaveDir(I) + & + InitInp%WaveKinGridyi(WaveKinPrimeMap(J))*SinWaveDir(I) )) + + WaveDynPC0 (I,J) = InitOut%RhoXg*tmpComplex*WaveElevxiPrime0 * COSHNumOvrCOSHDen ( WaveNmbr, InitInp%WtrDpth, WaveKinzi0Prime(J) ) + + WaveVelC0Hxi (I,J) = CosWaveDir(I)*OmegaArr(I)*tmpComplex* WaveElevxiPrime0 * COSHNumOvrSINHDen ( WaveNmbr, InitInp%WtrDpth, WaveKinzi0Prime(J) ) + WaveVelC0Hyi (I,J) = SinWaveDir(I)*OmegaArr(I)*tmpComplex* WaveElevxiPrime0 * COSHNumOvrSINHDen ( WaveNmbr, InitInp%WtrDpth, WaveKinzi0Prime(J) ) + + WaveVelC0V (I,J) = ImagOmega*tmpComplex* WaveElevxiPrime0 * SINHNumOvrSINHDen ( WaveNmbr, InitInp%WtrDpth, WaveKinzi0Prime(J) ) + WaveAccC0Hxi (I,J) = ImagOmega* WaveVelC0Hxi (I,J) + + WaveAccC0Hyi (I,J) = ImagOmega* WaveVelC0Hyi (I,J) + WaveAccC0V (I,J) = ImagOmega* WaveVelC0V (I,J) + + IF (InitInp%MCFD > 0.0_SiKi) THEN + WaveAccC0HxiMCF(I,J) = WaveAccC0Hxi(I,J) * MCFC + WaveAccC0HyiMCF(I,J) = WaveAccC0Hyi(I,J) * MCFC + WaveAccC0VMCF(I,J) = WaveAccC0V(I,J) * MCFC + END IF + + + END DO ! J - All points where the incident wave kinematics will be computed without stretching + + !=================================== + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation wave stretching + DO J = 1,InitInp%NWaveElevGrid ! Loop through all points on the SWL + WaveElevxiPrime0 = EXP( -ImagNmbr*WaveNmbr*( InitInp%WaveKinGridxi(J)*CosWaveDir(I) + & + InitInp%WaveKinGridyi(J)*SinWaveDir(I) )) + ! Partial derivatives at zi = 0 + PWaveDynPC0BPz0 (I,J) = InitOut%RhoXg* tmpComplex*WaveElevxiPrime0*WaveNmbr*TANH ( WaveNmbr*InitInp%WtrDpth ) + PWaveVelC0HxiPz0(I,J) = CosWaveDir(I)*OmegaArr(I)*tmpComplex*WaveElevxiPrime0*WaveNmbr + PWaveVelC0HyiPz0(I,J) = SinWaveDir(I)*OmegaArr(I)*tmpComplex*WaveElevxiPrime0*WaveNmbr + + IF (I == 0_IntKi) THEN ! Zero frequency component - Need to avoid division by zero. + PWaveVelC0VPz0 (I,J) = 0.0_ReKi + ELSE + PWaveVelC0VPz0 (I,J) = ImagOmega*tmpComplex*WaveElevxiPrime0*WaveNmbr/TANH ( WaveNmbr*InitInp%WtrDpth ) + END IF + + PWaveAccC0HxiPz0(I,J) = ImagOmega*PWaveVelC0HxiPz0(I,J) + PWaveAccC0HyiPz0(I,J) = ImagOmega*PWaveVelC0HyiPz0(I,J) + PWaveAccC0VPz0 (I,J) = ImagOmega*PWaveVelC0VPz0 (I,J) + + + IF (InitInp%MCFD > 0.0_SiKi) THEN + PWaveAccC0HxiMCFPz0(I,J) = PWaveAccC0HxiPz0(I,J) * MCFC + PWaveAccC0HyiMCFPz0(I,J) = PWaveAccC0HyiPz0(I,J) * MCFC + PWaveAccC0VMCFPz0(I,J) = PWaveAccC0VPz0(I,J) * MCFC + END IF + + END DO ! J - All points where the incident wave kinematics will be computed without stretching + END IF + !=================================== + + END DO ! I - The positive frequency components (including zero) of the discrete Fourier transforms + + ! Calculate the array of simulation times at which the instantaneous + ! elevation of, velocity of, acceleration of, and loads associated with + ! the incident waves are to be determined: + DO I = 0,InitOut%NStepWave ! Loop through all time steps + InitOut%WaveTime(I) = I*REAL(InitInp%WaveDT,SiKi) + END DO ! I - All time steps + + + DO I = 0,InitOut%NStepWave2 ! Loop through the positive frequency components (including zero) of the discrete Fourier transform + tmpComplexArr(I) = CMPLX(InitOut%WaveElevC0(1,I), InitOut%WaveElevC0(2,I)) + END DO + + ! Compute the inverse discrete Fourier transforms to find the time-domain + ! representations of the wave kinematics without stretcing: + + CALL ApplyFFT_cx ( InitOut%WaveElev0 (0:InitOut%NStepWave-1), tmpComplexArr (: ), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveElev0.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF +!NOTE: For all grid points + DO k = 1,InitInp%NWaveElevGrid ! Loop through all points where the incident wave elevations are to be computed (normally all the XY grid points) + ! This subroutine call applies the FFT at the correct location. + i = mod(k-1, InitInp%NGrid(1)) + 1 + j = (k-1) / InitInp%NGrid(1) + 1 + ! note that this subroutine resets tmpComplexArr + CALL WaveElevTimeSeriesAtXY( InitInp%WaveKinGridxi(k), InitInp%WaveKinGridyi(k), InitOut%WaveElev(:,i,j), InitOut%WaveElevC(:,:,k), tmpComplexArr, ErrStatTmp, ErrMsgTmp ) ! Note this sets tmpComplexArr + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + END DO ! J - All points where the incident wave elevations can be output + + + + + ! User requested data points -- Do all the FFT calls first, then return if something failed. + DO J = 1,NWaveKin0Prime ! Loop through all points where the incident wave kinematics will be computed without stretching + CALL ApplyFFT_cx ( WaveDynP0B (:,J), WaveDynPC0 (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveDynP0B.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( WaveVel0Hxi (:,J), WaveVelC0Hxi (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveVel0Hxi.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( WaveVel0Hyi (:,J), WaveVelC0Hyi (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveVel0Hyi.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( WaveVel0V (:,J), WaveVelC0V (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveVel0V.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( WaveAcc0Hxi (:,J), WaveAccC0Hxi (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0Hxi.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( WaveAcc0Hyi (:,J), WaveAccC0Hyi (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0Hyi.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( WaveAcc0V (:,J), WaveAccC0V (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0V.', ErrStat,ErrMsg,RoutineName) + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + END DO ! J - All points where the incident wave kinematics will be computed without stretching + + IF (InitInp%MCFD > 0.0_SiKi) THEN + DO J = 1,NWaveKin0Prime ! Loop through all points where the incident wave kinematics will be computed without stretching + CALL ApplyFFT_cx ( WaveAcc0HxiMCF (:,J), WaveAccC0HxiMCF (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0HxiMCF.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( WaveAcc0HyiMCF (:,J), WaveAccC0HyiMCF (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0HyiMCF.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( WaveAcc0VMCF (:,J), WaveAccC0VMCF (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0VMCF.', ErrStat,ErrMsg,RoutineName) + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + END DO + END IF + + !=================================== + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation Wave Stretching + DO J = 1,InitInp%NWaveElevGrid ! Loop through all points on the SWL where z-partial derivatives will be computed for extrapolated stretching + ! FFT's of the partial derivatives + CALL ApplyFFT_cx ( PWaveDynP0BPz0(:,J ), PWaveDynPC0BPz0(:,J ), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveDynP0BPz0.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( PWaveVel0HxiPz0 (:,J ), PWaveVelC0HxiPz0( :,J ),FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveVel0HxiPz0.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( PWaveVel0HyiPz0 (:,J ), PWaveVelC0HyiPz0( :,J ),FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveVel0HyiPz0.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( PWaveVel0VPz0 (:,J ), PWaveVelC0VPz0 (:,J ), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveVel0VPz0.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( PWaveAcc0HxiPz0 (:,J ), PWaveAccC0HxiPz0(:,J ),FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0HxiPz0.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( PWaveAcc0HyiPz0 (:,J ), PWaveAccC0HyiPz0(:,J ),FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0HyiPz0.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( PWaveAcc0VPz0 (:,J ), PWaveAccC0VPz0( :,J ), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0VPz0.', ErrStat,ErrMsg,RoutineName) + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + END DO ! J - All points where the incident wave kinematics will be computed without stretching + + IF (InitInp%MCFD > 0.0_SiKi) THEN ! MacCamy-Fuchs scaled acceleration field + DO J = 1,InitInp%NWaveElevGrid + + CALL ApplyFFT_cx ( PWaveAcc0HxiMCFPz0 (:,J ), PWaveAccC0HxiMCFPz0(:,J ),FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0HxiMCFPz0.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( PWaveAcc0HyiMCFPz0 (:,J ), PWaveAccC0HyiMCFPz0(:,J ),FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0HyiMCFPz0.', ErrStat,ErrMsg,RoutineName) + + CALL ApplyFFT_cx ( PWaveAcc0VMCFPz0 (:,J ), PWaveAccC0VMCFPz0( :,J ), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0VMCFPz0.', ErrStat,ErrMsg,RoutineName) + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + END DO + END IF + + END IF +!=================================== + + + CALL ExitFFT(FFT_Data, ErrStatTmp) + CALL SetErrStat(ErrStatTmp,'Error occured while cleaning up after the FFTs.', ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + + + ! Add the current velocities to the wave velocities: + ! NOTE: Both the horizontal velocities and the partial derivative of the + ! horizontal velocities with respect to zi at zi = 0 are found here. + ! + ! NOTE: The current module must be called prior to the waves module. If that was not done, then we + ! don't have a current to add to the wave velocity. So, check if the current velocity components + ! exist. + + + ! If there is a current, we need to add that (the current module was called prior to calling this module + + IF(ALLOCATED(InitInp%CurrVxi)) THEN + + DO J = 1,NWaveKin0Prime ! Loop through all points where the incident wave kinematics will be computed without stretching + + WaveVel0Hxi (:,J) = WaveVel0Hxi (:,J) + InitInp%CurrVxi(WaveKinPrimeMap(J)) ! xi-direction + WaveVel0Hyi (:,J) = WaveVel0Hyi (:,J) + InitInp%CurrVyi(WaveKinPrimeMap(J)) ! yi-direction + + END DO ! J - All points where the incident wave kinematics will be computed without stretching + + ! Commented out - We do not extrapolate the current profile with extrapolated wave stretching + !PWaveVel0HxiPz0(: ) = PWaveVel0HxiPz0(: ) + InitInp%PCurrVxiPz0 ! xi-direction + !PWaveVel0HyiPz0(: ) = PWaveVel0HyiPz0(: ) + InitInp%PCurrVyiPz0 ! yi-direction + + ENDIF + + + ! Apply stretching to obtain the wave kinematics, WaveDynP0, WaveVel0, and + ! WaveAcc0, at the desired locations from the wave kinematics at + ! alternative locations, WaveDynP0B, WaveVel0Hxi, WaveVel0Hyi, WaveVel0V, + ! WaveAcc0Hxi, WaveAcc0Hyi, WaveAcc0V, if the elevation of the point defined by + ! WaveKinGridzi(J) lies between the seabed and the instantaneous free + ! surface, else set WaveDynP0, WaveVel0, and WaveAcc0 to zero. This + ! depends on which incident wave kinematics stretching method is being + ! used: + + ! SELECT CASE ( InitInp%WaveStMod ) ! Which model are we using to extrapolate the incident wave kinematics to the instantaneous free surface? + + ! CASE ( 0 ) ! None=no stretching. + + + ! Since we have no stretching, the wave kinematics between the seabed and + ! the mean sea level are left unchanged; below the seabed or above the + ! mean sea level, the wave kinematics are zero: + + ! InitOut%PWaveDynP0(:,:,:,:) = 0.0 + ! InitOut%PWaveVel0 (:,:,:,:,:) = 0.0 + ! InitOut%PWaveAcc0 (:,:,:,:,:) = 0.0 + + primeCount = 1 + count = 1 + !DO J = 1,InitInp%NWaveKinGrid ! Loop through all points where the incident wave kinematics will be computed + do k = 1, InitInp%NGrid(3) + do j = 1, InitInp%NGrid(2) + do i = 1, InitInp%NGrid(1) + + ! ii = mod(count-1, InitInp%NGrid(1)) + 1 + ! jj = mod( (count-1) /InitInp%NGrid(1), InitInp%NGrid(2) ) + 1 + ! kk = (count-1) / (InitInp%NGrid(1)*InitInp%NGrid(2)) + 1 + + IF ( ( InitInp%WaveKinGridzi(count) < -InitInp%WtrDpth ) .OR. ( InitInp%WaveKinGridzi(count) > 0.0 ) ) THEN + ! .TRUE. if the elevation of the point defined by WaveKinGridzi(J) lies below the seabed or above mean sea level (exclusive) + ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinGridzi and WtrDpth have already been adjusted using MSL2SWL + + InitOut%WaveDynP(:,i,j,k ) = 0.0 + InitOut%WaveVel (:,i,j,k,:) = 0.0 + InitOut%WaveAcc (:,i,j,k,:) = 0.0 + + ELSE + ! The elevation of the point defined by WaveKinGridzi(J) must lie between the seabed and the mean sea level (inclusive) + + InitOut%WaveDynP(0:InitOut%NStepWave-1,i,j,k ) = WaveDynP0B( 0:InitOut%NStepWave-1,primeCount) + InitOut%WaveVel (0:InitOut%NStepWave-1,i,j,k,1) = WaveVel0Hxi(0:InitOut%NStepWave-1,primeCount) + InitOut%WaveVel (0:InitOut%NStepWave-1,i,j,k,2) = WaveVel0Hyi(0:InitOut%NStepWave-1,primeCount) + InitOut%WaveVel (0:InitOut%NStepWave-1,i,j,k,3) = WaveVel0V( 0:InitOut%NStepWave-1,primeCount) + InitOut%WaveAcc (0:InitOut%NStepWave-1,i,j,k,1) = WaveAcc0Hxi(0:InitOut%NStepWave-1,primeCount) + InitOut%WaveAcc (0:InitOut%NStepWave-1,i,j,k,2) = WaveAcc0Hyi(0:InitOut%NStepWave-1,primeCount) + InitOut%WaveAcc (0:InitOut%NStepWave-1,i,j,k,3) = WaveAcc0V( 0:InitOut%NStepWave-1,primeCount) + primeCount = primeCount + 1 + END IF + count = count + 1 + end do + end do + end do + + ! MacCamy-Fuchs scaled fluid acceleration + IF (InitInp%MCFD > 0.0_SiKi) THEN + primeCount = 1 + count = 1 + do k = 1, InitInp%NGrid(3) + do j = 1, InitInp%NGrid(2) + do i = 1, InitInp%NGrid(1) + IF ( ( InitInp%WaveKinGridzi(count) < -InitInp%WtrDpth ) .OR. ( InitInp%WaveKinGridzi(count) > 0.0 ) ) THEN + ! .TRUE. if the elevation of the point defined by WaveKinGridzi(J) lies below the seabed or above mean sea level (exclusive) + ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinGridzi and WtrDpth have already been adjusted using MSL2SWL + InitOut%WaveAccMCF(:,i,j,k,:) = 0.0 + ELSE + ! The elevation of the point defined by WaveKinGridzi(J) must lie between the seabed and the mean sea level (inclusive) + InitOut%WaveAccMCF (0:InitOut%NStepWave-1,i,j,k,1) = WaveAcc0HxiMCF(0:InitOut%NStepWave-1,primeCount) + InitOut%WaveAccMCF (0:InitOut%NStepWave-1,i,j,k,2) = WaveAcc0HyiMCF(0:InitOut%NStepWave-1,primeCount) + InitOut%WaveAccMCF (0:InitOut%NStepWave-1,i,j,k,3) = WaveAcc0VMCF( 0:InitOut%NStepWave-1,primeCount) + primeCount = primeCount + 1 + END IF + count = count + 1 + end do + end do + end do + END IF + + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation Wave Stretching + + primeCount = 1 + DO j = 1, InitInp%NGrid(2) ! Loop through all points on the SWL where partial derivatives about z were computed + DO i = 1, InitInp%NGrid(1) + InitOut%PWaveDynP0(0:InitOut%NStepWave-1,i,j ) = PWaveDynP0BPz0( 0:InitOut%NStepWave-1,primeCount) + InitOut%PWaveVel0 (0:InitOut%NStepWave-1,i,j,1) = PWaveVel0HxiPz0(0:InitOut%NStepWave-1,primeCount) + InitOut%PWaveVel0 (0:InitOut%NStepWave-1,i,j,2) = PWaveVel0HyiPz0(0:InitOut%NStepWave-1,primeCount) + InitOut%PWaveVel0 (0:InitOut%NStepWave-1,i,j,3) = PWaveVel0VPz0( 0:InitOut%NStepWave-1,primeCount) + InitOut%PWaveAcc0 (0:InitOut%NStepWave-1,i,j,1) = pWaveAcc0HxiPz0(0:InitOut%NStepWave-1,primeCount) + InitOut%PWaveAcc0 (0:InitOut%NStepWave-1,i,j,2) = pWaveAcc0HyiPz0(0:InitOut%NStepWave-1,primeCount) + InitOut%PWaveAcc0 (0:InitOut%NStepWave-1,i,j,3) = PWaveAcc0VPz0( 0:InitOut%NStepWave-1,primeCount) + primeCount = primeCount + 1 + END DO + END DO + + IF (InitInp%MCFD > 0.0_SiKi) THEN + primeCount = 1 + DO j = 1, InitInp%NGrid(2) ! Loop through all points on the SWL where partial derivatives about z were computed + DO i = 1, InitInp%NGrid(1) + InitOut%PWaveAccMCF0 (0:InitOut%NStepWave-1,i,j,1) = pWaveAcc0HxiMCFPz0(0:InitOut%NStepWave-1,primeCount) + InitOut%PWaveAccMCF0 (0:InitOut%NStepWave-1,i,j,2) = pWaveAcc0HyiMCFPz0(0:InitOut%NStepWave-1,primeCount) + InitOut%PWaveAccMCF0 (0:InitOut%NStepWave-1,i,j,3) = PWaveAcc0VMCFPz0( 0:InitOut%NStepWave-1,primeCount) + primeCount = primeCount + 1 + END DO + END DO + END IF + + END IF + + + ! END DO ! J - All points where the incident wave kinematics will be computed + + ! CASE ( 1 ) ! Vertical stretching. + + + ! Vertical stretching says that the wave kinematics above the mean sea level + ! equal the wave kinematics at the mean sea level. The wave kinematics + ! below the mean sea level are left unchanged: + + + + + + ! CASE ( 2 ) ! Extrapolation stretching. + + + ! Extrapolation stretching uses a linear Taylor expansion of the wave + ! kinematics (and their partial derivatives with respect to z) at the mean + ! sea level to find the wave kinematics above the mean sea level. The + ! wave kinematics below the mean sea level are left unchanged: + + + + + + ! CASE ( 3 ) ! Wheeler stretching. + + + ! Wheeler stretching says that wave kinematics calculated using Airy theory + ! at the mean sea level should actually be applied at the instantaneous + ! free surface and that Airy wave kinematics computed at locations between + ! the seabed and the mean sea level should be shifted vertically to new + ! locations in proportion to their elevation above the seabed. + ! + ! Computing the wave kinematics with Wheeler stretching requires that first + ! say that the wave kinematics we computed at the elevations defined by + ! the WaveKinzi0Prime(:) array are actual applied at the elevations found + ! by stretching the elevations in the WaveKinzi0Prime(:) array using the + ! instantaneous wave elevation--these new elevations are stored in the + ! WaveKinzi0St(:) array. Next, we interpolate the wave kinematics + ! computed without stretching to the desired elevations (defined in the + ! WaveKinGridzi(:) array) using the WaveKinzi0St(:) array: + + + + + ! ENDSELECT + + ! Set the ending timestep to the same as the first timestep + InitOut%WaveElev0 (InitOut%NStepWave) = InitOut%WaveElev0 (0 ) + InitOut%WaveDynP (InitOut%NStepWave,:,:,: ) = InitOut%WaveDynP (0,:,:,: ) + InitOut%WaveVel (InitOut%NStepWave,:,:,:,:) = InitOut%WaveVel (0,:,:,:,:) + InitOut%WaveAcc (InitOut%NStepWave,:,:,:,:) = InitOut%WaveAcc (0,:,:,:,:) + IF (InitInp%MCFD > 0.0_SiKi) THEN + InitOut%WaveAccMCF (InitOut%NStepWave,:,:,:,:) = InitOut%WaveAccMCF(0,:,:,:,:) + END IF + + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation Wave Stretching + InitOut%PWaveDynP0(InitOut%NStepWave,:,: ) = InitOut%PWaveDynP0(0,:,: ) + InitOut%PWaveVel0 (InitOut%NStepWave,:,:,:) = InitOut%PWaveVel0 (0,:,:,:) + InitOut%PWaveAcc0 (InitOut%NStepWave,:,:,:) = InitOut%PWaveAcc0 (0,:,:,:) + IF (InitInp%MCFD > 0.0_SiKi) THEN + InitOut%PWaveAccMCF0 (InitOut%NStepWave,:,:,:) = InitOut%PWaveAccMCF0(0,:,:,:) + END IF + END IF + + CALL CleanUp ( ) + + +CONTAINS + +!-------------------------------------------------------------------------------- + SUBROUTINE WaveElevTimeSeriesAtXY(Xcoord,Ycoord, WaveElevAtXY, WaveElevCAtXY, tmpComplexArr, ErrStatLcl, ErrMsgLcl ) + + REAL(SiKi), INTENT(IN ) :: Xcoord + REAL(SiKi), INTENT(IN ) :: Ycoord + REAL(SiKi), INTENT( OUT) :: WaveElevAtXY(0:InitOut%NStepWave) + real(SiKi), INTENT( OUT) :: WaveElevCAtXY(2,0:InitOut%NStepWave2) + COMPLEX(SiKi), INTENT(INOUT) :: tmpComplexArr(0:InitOut%NStepWave2) ! A temporary array (0:NStepWave2-1) for FFT use. + INTEGER(IntKi), INTENT( OUT) :: ErrStatLcl + CHARACTER(*), INTENT( OUT) :: ErrMsgLcl + + integer :: i + REAL(SiKi) :: WaveNmbr ! Wavenumber of the current frequency component (1/meter) + INTEGER(IntKi) :: ErrStatLcl2 + + ! note that InitOut, InitInp, FFT_Data, CosWaveDir and SinWaveDir are used here, but their values are not changed + ErrStatLcl = ErrID_None + ErrMsgLcl = "" + + ! Zero out the temporary array. + tmpComplexArr = CMPLX(0.0_SiKi,0.0_SiKi) + + ! Loop through the positive frequency components (including zero). + DO I = 0,InitOut%NStepWave2 + + WaveNmbr = WaveNumber ( OmegaArr(I), InitInp%Gravity, InitInp%WtrDpth ) + tmpComplexArr(I) = CMPLX( InitOut%WaveElevC0(1,I), InitOut%WaveElevC0(2,I)) * & + EXP( -ImagNmbr*WaveNmbr*( Xcoord*CosWaveDir(I)+ & + Ycoord*SinWaveDir(I) ) ) + ENDDO + + CALL ApplyFFT_cx ( WaveElevAtXY(0:InitOut%NStepWave-1), tmpComplexArr, FFT_Data, ErrStatLcl2 ) + CALL SetErrStat(ErrStatLcl2,'Error occured while applying the FFT.',ErrStatLcl,ErrMsgLcl,'WaveElevTimeSeriesAtXY') + + WaveElevCAtXY( 1,: ) = REAL(tmpComplexArr(:)) + WaveElevCAtXY( 2,: ) = AIMAG(tmpComplexArr(:)) + + ! Append first datpoint as the last as aid for repeated wave data + WaveElevAtXY(InitOut%NStepWave) = WaveElevAtXY(0) + + END SUBROUTINE WaveElevTimeSeriesAtXY + +!-------------------------------------------------------------------------------- + SUBROUTINE CleanUp( ) + + IF (ALLOCATED( WaveKinPrimeMap )) DEALLOCATE( WaveKinPrimeMap, STAT=ErrStatTmp) + IF (ALLOCATED( WaveKinzi0Prime )) DEALLOCATE( WaveKinzi0Prime, STAT=ErrStatTmp) + IF (ALLOCATED( GHWaveAcc )) DEALLOCATE( GHWaveAcc, STAT=ErrStatTmp) + IF (ALLOCATED( GHWaveDynP )) DEALLOCATE( GHWaveDynP, STAT=ErrStatTmp) + IF (ALLOCATED( GHWaveVel )) DEALLOCATE( GHWaveVel, STAT=ErrStatTmp) + IF (ALLOCATED( GHWvDpth )) DEALLOCATE( GHWvDpth, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAcc0HxiPz0 )) DEALLOCATE( PWaveAcc0HxiPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAcc0HyiPz0 )) DEALLOCATE( PWaveAcc0HyiPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAcc0VPz0 )) DEALLOCATE( PWaveAcc0VPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAccC0HxiPz0 )) DEALLOCATE( PWaveAccC0HxiPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAccC0HyiPz0 )) DEALLOCATE( PWaveAccC0HyiPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAccC0VPz0 )) DEALLOCATE( PWaveAccC0VPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveDynP0BPz0 )) DEALLOCATE( PWaveDynP0BPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveDynPC0BPz0 )) DEALLOCATE( PWaveDynPC0BPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveVel0HxiPz0 )) DEALLOCATE( PWaveVel0HxiPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveVel0HyiPz0 )) DEALLOCATE( PWaveVel0HyiPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveVel0VPz0 )) DEALLOCATE( PWaveVel0VPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveVelC0HxiPz0 )) DEALLOCATE( PWaveVelC0HxiPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveVelC0HyiPz0 )) DEALLOCATE( PWaveVelC0HyiPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveVelC0VPz0 )) DEALLOCATE( PWaveVelC0VPz0, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAcc0Hxi )) DEALLOCATE( WaveAcc0Hxi, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAcc0Hyi )) DEALLOCATE( WaveAcc0Hyi, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAcc0V )) DEALLOCATE( WaveAcc0V, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAccC0Hxi )) DEALLOCATE( WaveAccC0Hxi, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAccC0Hyi )) DEALLOCATE( WaveAccC0Hyi, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAccC0V )) DEALLOCATE( WaveAccC0V, STAT=ErrStatTmp) + IF (ALLOCATED( WaveDynP0B )) DEALLOCATE( WaveDynP0B, STAT=ErrStatTmp) + IF (ALLOCATED( WaveDynPC0 )) DEALLOCATE( WaveDynPC0, STAT=ErrStatTmp) + IF (ALLOCATED( WaveVel0Hxi )) DEALLOCATE( WaveVel0Hxi, STAT=ErrStatTmp) + IF (ALLOCATED( WaveVel0Hyi )) DEALLOCATE( WaveVel0Hyi, STAT=ErrStatTmp) + IF (ALLOCATED( WaveVel0V )) DEALLOCATE( WaveVel0V, STAT=ErrStatTmp) + IF (ALLOCATED( WaveVelC0Hxi )) DEALLOCATE( WaveVelC0Hxi, STAT=ErrStatTmp) + IF (ALLOCATED( WaveVelC0Hyi )) DEALLOCATE( WaveVelC0Hyi, STAT=ErrStatTmp) + IF (ALLOCATED( WaveVelC0V )) DEALLOCATE( WaveVelC0V, STAT=ErrStatTmp) + IF (ALLOCATED( tmpComplexArr )) DEALLOCATE( tmpComplexArr, STAT=ErrStatTmp) + + IF (ALLOCATED( WaveS1SddArr )) DEALLOCATE( WaveS1SddArr, STAT=ErrStatTmp) + IF (ALLOCATED( OmegaArr )) DEALLOCATE( OmegaArr, STAT=ErrStatTmp) + + IF (ALLOCATED( WaveAccC0HxiMCF )) DEALLOCATE( WaveAccC0HxiMCF, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAccC0HyiMCF )) DEALLOCATE( WaveAccC0HyiMCF, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAccC0VMCF )) DEALLOCATE( WaveAccC0VMCF, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAcc0HxiMCF )) DEALLOCATE( WaveAcc0HxiMCF, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAcc0HyiMCF )) DEALLOCATE( WaveAcc0HyiMCF, STAT=ErrStatTmp) + IF (ALLOCATED( WaveAcc0VMCF )) DEALLOCATE( WaveAcc0VMCF, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAccC0HxiMCFPz0 )) DEALLOCATE( PWaveAccC0HxiMCFPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAccC0HyiMCFPz0 )) DEALLOCATE( PWaveAccC0HyiMCFPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAccC0VMCFPz0 )) DEALLOCATE( PWaveAccC0VMCFPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAcc0HxiMCFPz0 )) DEALLOCATE( PWaveAcc0HxiMCFPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAcc0HyiMCFPz0 )) DEALLOCATE( PWaveAcc0HyiMCFPz0, STAT=ErrStatTmp) + IF (ALLOCATED( PWaveAcc0VMCFPz0 )) DEALLOCATE( PWaveAcc0VMCFPz0, STAT=ErrStatTmp) + + + RETURN + + END SUBROUTINE CleanUp + + +END SUBROUTINE VariousWaves_Init + + + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine is called at the start of the simulation to perform initialization steps. +!! The initial states and initial guess for the input are defined. +SUBROUTINE Waves_Init( InitInp, InitOut, ErrStat, ErrMsg ) +!.................................................................................................................................. + + TYPE(Waves_InitInputType), INTENT(INOUT) :: InitInp !< Input data for initialization routine !NOTE: We are making this INOUT because UserWaveComponents_Init changes the value of InitInp%WaveDT + TYPE(Waves_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + + ! Local Variables: + INTEGER(IntKi) :: ErrStatTmp ! Temporary error status for processing + CHARACTER(ErrMsgLen) :: ErrMsgTmp ! Temporary error message for procesing +! REAL(ReKi), ALLOCATABLE :: tmpWaveKinzi(:) + +! TYPE(FFT_DataType) :: FFT_Data ! the instance of the FFT module we're using + + + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrStatTmp = ErrID_None + ErrMsg = "" + ErrMsgTmp = "" + + + ! Initialize the pRNG + CALL RandNum_Init(InitInp%RNG, ErrStat, ErrMsg) + IF ( ErrStat >= AbortErrLev ) RETURN + + ! Define initialization-routine output here: + + !InitOut%WriteOutputHdr = (/ 'Time', 'Column2' /) + !InitOut%WriteOutputUnt = (/ '(s)', '(-)' /) + + InitOut%RhoXg = InitInp%WtrDens*InitInp%Gravity + + + + + ! Initialize the variables associated with the incident wave: + + SELECT CASE ( InitInp%WaveMod ) ! Which incident wave kinematics model are we using? + + + CASE ( 0 ) ! None=still water. + + CALL StillWaterWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') + IF ( ErrStat >= AbortErrLev ) RETURN + + + + CASE ( 1, 2, 3, 4, 10 ) ! 1, 10: Plane progressive (regular) wave, 2: JONSWAP/Pierson-Moskowitz spectrum (irregular) wave, 3: white-noise, or 4: user-defined spectrum (irregular) wave. + + ! Now call the init with all the zi locations for the Morrison member nodes + CALL VariousWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') + IF ( ErrStat >= AbortErrLev ) RETURN + + + CASE ( 5 ) ! User-supplied wave elevation time history; HD derives full wave kinematics from this elevation time series data. + + ! Get the wave frequency information from the file (by FFT of the elevation) + CALL UserWaveElevations_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') + IF ( ErrStat >= AbortErrLev ) RETURN + + ! Now call VariousWaves to continue using the wave elevation and derived frequency information from the file + CALL VariousWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') + IF ( ErrStat >= AbortErrLev ) RETURN + + + CASE ( 6 ) ! User-supplied wave kinematics data. + + CALL UserWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') + IF ( ErrStat >= AbortErrLev ) RETURN + + CASE ( 7 ) + + ! Get the wave frequency information from the file (by reading in wave frequency components) + CALL UserWaveComponents_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') + IF ( ErrStat >= AbortErrLev ) RETURN + + ! Now call VariousWaves to continue using the wave frequency information from the file + CALL VariousWaves_Init( InitInp, InitOut, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') + IF ( ErrStat >= AbortErrLev ) RETURN + + ENDSELECT + +END SUBROUTINE Waves_Init + + + +!======================================================================= +FUNCTION WheelerStretching ( zOrzPrime, Zeta, h, ForwardOrBackward, ErrStat, ErrMsg ) + + + ! This FUNCTION applies the principle of Wheeler stretching to + ! (1-Forward) find the elevation where the wave kinematics are to + ! be applied using Wheeler stretching or (2-Backword) find the + ! elevation where the wave kinematics are computed before applying + ! Wheeler stretching. Wheeler stretching says that wave + ! kinematics calculated using Airy theory at the mean sea level + ! should actually be applied at the instantaneous free surface and + ! that Airy wave kinematics computed at locations between the + ! seabed and the mean sea level should be shifted vertically to + ! new locations in proportion to their elevation above the seabed + ! as follows: + ! + ! Forward: z(zPrime,Zeta,h) = ( 1 + Zeta/h )*zPrime + Zeta + ! + ! or equivalently: + ! + ! Backword: zPrime(z,Zeta,h) = ( z - Zeta )/( 1 + Zeta/h ) + ! + ! where, + ! Zeta = instantaneous elevation of incident waves + ! h = water depth + ! z = elevations where the wave kinematics are to be + ! applied using Wheeler stretching + ! zPrime = elevations where the wave kinematics are computed + ! before applying Wheeler stretching + + + + IMPLICIT NONE + + + ! Passed Variables: + + REAL(ReKi), INTENT(IN ) :: h ! Water depth (meters) + REAL(SiKi) :: WheelerStretching ! This function = zPrime [forward] or z [backward] (meters) + REAL(SiKi), INTENT(IN ) :: Zeta ! Instantaneous elevation of incident waves (meters) + REAL(SiKi), INTENT(IN ) :: zOrzPrime ! Elevations where the wave kinematics are to be applied using Wheeler stretching, z, [forward] or elevations where the wave kinematics are computed before applying Wheeler stretching, zPrime, [backward] (meters) + CHARACTER(1), INTENT(IN ) :: ForwardOrBackWard ! A string holding the direction ('F'=Forward, 'B'=Backward) for applying Wheeler stretching. + INTEGER(IntKi), INTENT(OUT) :: ErrStat ! Error status of the operation + CHARACTER(*), INTENT(OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + ! Apply Wheeler stretching, depending on the direction: + + SELECT CASE ( ForwardOrBackWard ) + + CASE ( 'F' ) ! Forward + + WheelerStretching = ( 1.0 + Zeta/REAL(h,SiKi) )*zOrzPrime + Zeta + + + CASE ( 'B' ) ! Backward + + WheelerStretching = ( zOrzPrime - Zeta )/( 1.0 + Zeta/REAL(h,SiKi) ) + + + CASE DEFAULT + + WheelerStretching = 0.0_SiKi + + ErrMsg = 'The last argument in routine WheelerStretching() must be ''F'' or ''B''.' + ErrStat = ErrID_Fatal + RETURN + + + END SELECT + + + + RETURN +END FUNCTION WheelerStretching + +!------------------------------------------------------------------------------------------------------------------------ +SUBROUTINE CalculateWaveNDir(InitInp, InitOut, ErrStat, ErrMsg) + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Output data + INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + INTEGER(IntKi) :: I ! loop counter + INTEGER(IntKi) :: WaveNDirMax !< Maximum value we can change WaveNDir to (relative to original value passed in). Used in finding new WaveNDir value. + + INTEGER(IntKi) :: ErrStatTmp !< Temporary error status + CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message + character(*), parameter :: RoutineName = 'CalculateWaveNDir' + + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + + WaveNDirMax = CEILING(InitInp%WaveNDir*1.25_SiKi) ! Value we allow WaveNDir to reach before aborting + InitOut%WaveNDir = InitInp%WaveNDir + + ! Check that the number of wave directions is a positive odd number. In theory this has been + ! done before the Waves module was called. We repeat it here in the event that the Waves module + ! gets used in some other code. + ! -> If it is less than 0, error out. + ! -> If it is even, we will increment it by 1. + IF ( InitOut%WaveNDir <= 0_IntKi ) THEN + CALL SetErrStat(ErrID_Fatal,'WaveNDir must be an odd number greater than 0.',ErrStat,ErrMsg,RoutineName) + RETURN + END IF + + IF ( MODULO( InitOut%WaveNDir, 2_IntKi) == 0_IntKi ) THEN + InitOut%WaveNDir = InitOut%WaveNDir + 1 + CALL SetErrStat(ErrID_Warn,'WaveNDir must be odd. Changing the value to '//TRIM(Num2LStr(InitOut%WaveNDir)),ErrStat,ErrMsg,RoutineName) + END IF + + + ErrStatTmp = ErrID_None + ErrMsgTmp = "" + + DO WHILE ( .NOT. EqualRealNos( REAL(InitOut%NStepWave2/InitOut%WaveNDir), REAL(InitOut%NStepWave2)/REAL(InitOut%WaveNDir) )) + + IF (InitOut%WaveNDir > WaveNDirMax ) THEN + ErrMsgTmp = 'Could not find value for WaveNDir between '//TRIM(Num2LStr(InitInp%WaveNDir))//' and '// & + TRIM(Num2LStr(WaveNDirMax))//' such that an equal number of frequencies are assigned to each direction.' + ErrStatTmp = ErrID_Fatal + EXIT + ELSE + InitOut%WaveNDir = InitOut%WaveNDir + 2 + ErrMsgTmp = 'Changed WaveNDir from '//TRIM(Num2LStr(InitInp%WaveNDir))//' to '// TRIM(Num2LStr(InitOut%WaveNDir))// & + ' so that an equal number of frequencies are assigned to each direction.' + ErrStatTmp = ErrID_Warn + END IF + + END DO + + CALL SetErrStat(ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, RoutineName) + + + IF (ErrStat == ErrID_Fatal) THEN + + ! If we exited because we hit a limit (in which case the condition is not satisfied), then we cannot continue. + ! We warn the user that a value for WaveNDir was not found, and that they should try a different value, or try + ! a different value for WaveTMax. The reason for suggesting the latter is that NStepWave is derived from + ! WaveTMax and adjusted until it is a product of smallish numbers (most likely even, but not necessarily so). + ! So, there is a very small possibility then that NStepWave2 is a prime number, in which case we won't find a + ! value for WaveNDir, so we suggest that the user change WaveTMax. To make this a little easier for the user, + ! we will report the first 5 possible values for WaveNDir between their requested value and 1/4 of NStepWave2, + ! if there are any. + + + ! Now check for the possible values of WaveNDir (up to I=5) so that we can tell the user about it. + I = 0 + ErrMsgTmp = 'The next values of WaveNDir that work with the selected values for WaveTMax and WaveDT:' + DO WHILE ( InitOut%WaveNDir <= INT(InitOut%NStepWave2/4.0) ) + IF ( EqualRealNos(REAL(InitOut%NStepWave2/InitOut%WaveNDir), & + REAL(InitOut%NStepWave2)/REAL(InitOut%WaveNDir) )) THEN + ErrMsgTmp = TRIM(ErrMsgTmp)//" "//TRIM(Num2LStr(InitOut%WaveNDir)) + I = I + 1 + IF (I >= 5) EXIT ! limit the number of choices for WaveNDir that are printed + END IF + + InitOut%WaveNDir = InitOut%WaveNDir + 2 + END DO + + ! If there were no additional values for WaveNDir found, I will be 0, so we rewrite the error message. + IF ( I == 0 ) THEN + ErrMsgTmp = 'There are no values for WaveNDir between '//TRIM(Num2LStr(WaveNDirMax))//' and '// & + TRIM(Num2LStr(INT(InitOut%NStepWave2/4.0)))//' (4 frequencies per wave direction)'// & + ' that will work with the selected values for WaveTMax ('//TRIM(Num2Lstr(InitOut%WaveTMax))// & + ') and WaveDT ('//TRIM(Num2LStr(InitInp%WaveDT))//'). Change either WaveTMax or WaveDT.' + ELSE + ErrMsgTmp = TRIM(ErrMsgTmp)//'.' + ENDIF + + ! Append the message about the possible values for WaveNDir (if any were found) and set the error status before + ! returning to the calling program. + CALL SetErrStat(ErrID_Fatal,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) + RETURN + END IF + +END SUBROUTINE CalculateWaveNDir +!------------------------------------------------------------------------------------------------------------------------ +SUBROUTINE CalculateWaveDirection(InitInp, InitOut, ErrStat, ErrMsg ) +! Compute the wave direction array, InitOut%WaveDirArr +!---------------------------------------------------------------------------------------------------------------------------------- + + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Output data + INTEGER(IntKi), INTENT( OUT) :: ErrStat ! Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + ! Local Variables + REAL(SiKi), ALLOCATABLE :: WvTheta(:) !< Final set of wave directions (degrees) + REAL(SiKi), ALLOCATABLE :: WvSpreadThetaIdx(:) !< Indices for wave directions + INTEGER(IntKi) :: WvSpreadFreqPerDir !< Number of wave frequencies per direction + INTEGER :: I ! Generic index + INTEGER :: J ! Generic index + INTEGER :: K ! Generic index + INTEGER :: LastInd ! Index into the arrays saved from the last call as a starting point for this call + + ! Variables for error handling + INTEGER(IntKi) :: ErrStatTmp !< Temporary error status + CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message + character(*), parameter :: RoutineName = 'CalculateWaveDirection' + + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + + IF (InitInp%WaveMod == 7) THEN ! wavemod 0 and 6 aren't called from this routine, but they fall into this case, too + + RETURN + !InitOut%WaveDirArr set in UserWaveComponents_Init for WaveMod 7 + !InitOut%WaveDirArr = 0, set in Initial_InitOut_Arrays for WaveMod 0 and 6 + + ELSEIF(.not. InitInp%WaveMultiDir .or. InitInp%WaveNDir <= 1) THEN ! we have a single wave direction + + InitOut%WaveDirArr = InitInp%WaveDir + + ELSE ! multi directional waves + + !-------------------------------------------------------------------------------- + !> # Multi Directional Waves + !> ## Adjust WaveNDir + !! + !! If multi-directional waves will be used, the value of WaveNDir may need to be adjusted. The reason is that + !! for the equal energy approach used here, the following condition must be met: + !! + !! CONDITION: (NStepWave2) / WaveNDir must be an integer + !! + !! If this is true, then an equal number of frequencies is assigned to each of the WaveNDir directions which + !! gives the proper wave direction distribution function. Otherwise, the energy distribution by direction + !! will not be correct. + !! + !! _WaveNDir_ could not be adjusted before _NStepWave2_ was finalized above. + !! + !! @note Use the value of WaveNDir stored in InitOut since InitInp cannot be changed. + !! + !! @note Originally, the criteria had been that (NStepWave2 - 1) / WaveNDir is an integer. This criteria + !! was relaxed by setting the direction for OmegaArr(I) = 0 (which has no amplitude) since it was found that + !! (NStepWave2 - 1) is often a prime number due to how NStepWave is calculated above to be a product + !! of smallish numbers. + + ! this sets InitOut%WaveNDir: + call CalculateWaveNDir(InitInp, InitOut, ErrStatTmp, ErrMsgTmp) + call SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) + if (ErrStat >= AbortErrLev) then + call Cleanup() + return + end if + + + ! This allocates and sets WvTheta: + call CalculateWaveSpreading(InitInp, InitOut, WvTheta, ErrStatTmp, ErrMsgTmp) + call SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) + if (ErrStat >= AbortErrLev) then + call Cleanup() + return + end if + + + !> ## Assign Wave directions + !! For the equal energy approach to the multi-directional waves, we need to use the random number generator to + !! select which direction each wave frequency is assigned to. We also require that the phase and amplitudes + !! assigned to each frequency are the same regardless of whether or not multiple directions are used, we must + !! first finish assigning all the amplitudes and phases before using the random number generator again. For this + !! reason, the above do loop is completed, the multiple wave directions are computed, and then we run through the + !! all wave frequencies again to set up the remaining pieces. If we did not do this, we would change the seed + !! used by the random number generator before selecting the next amplitude and phase pair. + !! + !! The wave directions are assigned in groups of _WaveNDir_ frequencies such that each frequency is assigned to + !! one of the _WaveNDir_ unique wave directions. Each wave direction is used only once within each group of + !! frequencies. + !! + + + ! Allocate the index array for each group of frequencies. This array is used to randomize the directions + ! within each WaveNDir sized group of frequencies. This is a REAL array used to hold the random numbers. + ALLOCATE( WvSpreadThetaIdx(1:InitOut%WaveNDir), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) THEN + CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvSpreadThetaIdx while assigning wave directions.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + END IF + + + ! K should be exactly NStepWave2 when done assigning directions. The the Omega = 0 has + ! no amplitude, but gets a direction anyhow (to simplify the calculation of WaveNDir). + WvSpreadFreqPerDir = (InitOut%NStepWave2)/InitOut%WaveNDir + K = 0 + ! Work through the frequencies in groups of directions. + DO I = 1,WvSpreadFreqPerDir + + ! Populate the array with random numbers + CALL UniformRandomNumbers(InitInp%RNG%pRNG, WvSpreadThetaIdx) + + DO J = 1, InitOut%WaveNDir + + ! Find the index lowest value in the WvSpreadThetaIdx array. This is the index to + ! use for this wave direction. + LastInd = MINLOC( WvSpreadThetaIdx, DIM=1 ) + + ! Assign the direction for this frequency piece to the LastInd value. + InitOut%WaveDirArr(K) = WvTheta( LastInd ) + + ! Now make that element in the WvSpreadThetaIdx really big so we don't pick it again + WvSpreadThetaIdx( LastInd ) = HUGE(1.0_SiKi) + + K = K + 1 ! Increment the frequency index + + ENDDO + ENDDO + + ! Filling last value since it is not reached by the loop above + CALL UniformRandomNumbers(InitInp%RNG%pRNG, WvSpreadThetaIdx) + LastInd = MINLOC( WvSpreadThetaIdx, DIM=1 ) + InitOut%WaveDirArr(K) = WvTheta( LastInd ) + + ! Perform a quick sanity check. We should have assigned all wave frequencies a direction, so K should be + ! K = NStepWave2 (K is incrimented afterwards). + IF ( K /= (InitOut%NStepWave2 ) ) THEN + CALL SetErrStat(ErrID_Fatal, 'Something went wrong while assigning wave directions.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + END IF + + ENDIF ! Multi-directional waves in use. + + + CALL Cleanup() + +CONTAINS + SUBROUTINE Cleanup() + + IF(ALLOCATED( WvSpreadThetaIdx )) DEALLOCATE( WvSpreadThetaIdx ) + IF(ALLOCATED( WvTheta )) DEALLOCATE( WvTheta ) + + END SUBROUTINE Cleanup + +END SUBROUTINE CalculateWaveDirection +!------------------------------------------------------------------------------------------------------------------------ +SUBROUTINE CalculateWaveSpreading(InitInp, InitOut, WvTheta, ErrStat, ErrMsg ) +! Compute the wave direction array +!---------------------------------------------------------------------------------------------------------------------------------- + + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut !< Output data + REAL(SiKi), ALLOCATABLE, INTENT( OUT) :: WvTheta(:) !< Final set of wave directions (degrees) + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + INTEGER(IntKi) :: i !< loop counter + INTEGER(IntKi) :: LastInd !< last index found (for faster finding of next index) + INTEGER(IntKi) :: WvSpreadNDir !< Number of wave spreading directions for intermediate calculations. Set later to be MAX(15*InitOut%WaveNDir,1000) + REAL(SiKi), ALLOCATABLE :: WvSpreadCos2SArr(:) !< Wave spreading function results array. Used in equal energy wave spreading function. + REAL(SiKi) :: WvSpreadCos2SConst !< Normalization constant for wave spreading function. + REAL(SiKi), ALLOCATABLE :: WvSpreadIntegral(:) !< Cumulative integral of the wave spreading function. Used in finding equal energy wave directions. + REAL(SiKi) :: WvSpreadDTheta !< Wave direction step size for intermediate calculations. Used in finding equal energy wave directions. + REAL(SiKi), ALLOCATABLE :: WvSpreadThetas(:) !< Wave direction used in calculations and interpolations + REAL(SiKi) :: WvSpreadIntegralTmp !< Temporary variable for the interpolation + + ! Variables for error handling + INTEGER(IntKi) :: ErrStatTmp !< Temporary error status + character(*), parameter :: RoutineName = 'CalculateWaveSpreading' + + + ErrStat = ErrID_None + ErrMsg = "" + + !> ## Calculate the wave directions based on an equal energy approach. + !! + !! All the angles are supplied in degrees and are converted as needed. For the cosine function, + !! we could convert degrees to radians, but the conversion constant cancels out. + !! + !! | Variable | Fortran Name | Location | Units | Description | + !! | :----------------: | :-------------------: | :-------: | :--------: | :----------------------------------------------------- | + !! | \f$\bar\theta\f$ | _WaveDir_ | _InitInp_ | (degrees) | Mean direction heading (_WaveDir_) | + !! | \f$\Theta\f$ | _WaveNDir_ | _InitOut_ | (-) | Number of wave directions | + !! | \f$\delta\theta\f$ | _WaveDirRange_ | _InitInp_ | (degrees) | Full range of spreading function | + !! | \f$S\f$ | _WaveDirSpread_ | _InitInp_ | (-) | The spreading coefficient | + !! | | _WvSpreadNDir_ | local | (-) | Number of angles discretizing the spreading function | + !! | \f$C\f$ | _WvSpreadCos2SConst_ | local | (1/degrees) | The normalization coefficient | + !! | | _WvTheta_ | local | (degrees) | The interpolated wave directions to assign to | + !! | \f$\theta_i\f$ | _WvSpreadThetas_ | local | (degrees) | Array of wave directions associated with _WvSpreadIntegral_ | + !! | | _D2R_ | global | (rad/degree) | Constant from library to convert degrees to radians | + !! + !! The equal energy approach is used to set the wave directions such that each direction has the same + !! number of frequencies. To ensure that direction spreading function (Cosine^2S in this case) has + !! the correct overal energy distribution shape, the wave directions are adjusted. The spacing between + !! directions is closer near the central direction than in the tails of the spreading function. The + !! method distributes the wave directions so that the energy integral between wave directions is kept + !! constant. The following steps are taken: + !! + !! 1. Discretize the spreading function over the range _InitInp%WaveDirRange_ into _WvSpreadNDir_. + !! + !! 2. Calculate the spreading function, _WvSpreadCos2SArr_, in the range.\n + !! \f$ D(\theta) = C \left| \cos\left(\frac{\pi (\theta-\bar\theta)}{\delta\theta}\right)\right|^{2S} \f$\n + !! where\n + !! \f$ C = \frac{\sqrt{\pi} \: \Gamma(S+1)}{\delta\theta \: \Gamma(S+1/2)} \f$, + !! and + !! \f$ \Gamma \f$ is the gamma function. + !! + !! 3. Calculate the integral of WvSpreadCos2SArr up to the current angle, and save it as + !! WvSpreadIntegral. The integral can be written as:\n + !! \f$P(\theta) = \int\limits^{\theta}_{\bar\theta - \delta\theta/2} D(\theta') \: \mathrm{d}\theta'\f$ + !! + !! 4. Do a sanity check on the result of \f$P(\theta)\f$ over the range. + !! + !! 5. Divide the integrated area of _WvSpreadCos2SArr_ into _InitOut%WaveNDir_ directions (the final number + !! of wave directions that was solved for above). To do this, simply find the _1/WaveNDir_ values + !! of the integral and interpolate to find the values of the _WvSpreadThetas_ that match. These are the + !! new wave directions to use. These results are stored in the array _WvTheta_. + !! + !! 6. Cleanup + !! + + !> ### Code Implementation order + !! 1. Discretize the spreading function range and calculate the values of the wave spreading function + + ! Now that we have the value for _WaveNDir_ found above, we set the value of _WvSpreadNDir_ to be 15x as + ! large, or 1000 (whichever is larger). WvSpreadNDir is used only in discretization for later + ! interpolation of actual wave directions. + WvSpreadNDir = MAX(15*InitOut%WaveNDir,1000) + WvSpreadDTheta = InitInp%WaveDirRange/REAL(WvSpreadNDir,SiKi) + + ! Calculate the normalization constant for the wave spreading. + IF ( InitInp%WaveDirSpread < 25.0_SiKi ) THEN ! Use exact expression + WvSpreadCos2SConst = sqrt(Pi) * (NWTC_GAMMA(InitInp%WaveDirSpread + 1.0_SiKi))/(InitInp%WaveDirRange * NWTC_GAMMA(InitInp%WaveDirSpread + 0.5_SiKi)) + ELSE ! Use asymptotic approximation for large argument + WvSpreadCos2SConst = sqrt(Pi*InitInp%WaveDirSpread)*(1.0_SiKi+0.125_SiKi/InitInp%WaveDirSpread)/InitInp%WaveDirRange + ENDIF + + ! Allocate arrays to use for storing the intermediate values + ALLOCATE( WvSpreadCos2SArr(0:WvSpreadNDir), STAT=ErrStatTmp ); IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvSpreadCos2SArr.', ErrStat,ErrMsg,RoutineName) + ALLOCATE( WvSpreadIntegral(0:WvSpreadNDir), STAT=ErrStatTmp ); IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvSpreadIntegral.', ErrStat,ErrMsg,RoutineName) + ALLOCATE( WvSpreadThetas( 0:WvSpreadNDir), STAT=ErrStatTmp ); IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvSpreadThetas.', ErrStat,ErrMsg,RoutineName) + ALLOCATE( WvTheta(1:InitOut%WaveNDir), STAT=ErrStatTmp ); IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WvTheta.', ErrStat,ErrMsg,RoutineName) + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + !> 2. Calculate the spreading function as a function of angle. Step through all _WvSpreadNDir_ steps. + DO I=0,WvSpreadNDir + ! The current angle as we step through the range + WvSpreadThetas(I) = I*WvSpreadDTheta + InitInp%WaveDir - InitInp%WaveDirRange/(2.0_SiKi) + + ! Calculate the wave spreading for the current value of WvSpreadThetas + WvSpreadCos2SArr(I) = WvSpreadCos2SConst*abs( cos(Pi*(WvSpreadThetas(I)-InitInp%WaveDir)/InitInp%WaveDirRange) ) **(2*InitInp%WaveDirSpread) + + !> 3. Calculate the integral of the spreading function up to the current angle and save it. + ! Remember that the first element can't refer to one before it. + IF (I == 0) THEN + WvSpreadIntegral(I) = WvSpreadCos2SArr(I) * WvSpreadDTheta + ELSE + WvSpreadIntegral(I) = WvSpreadCos2SArr(I) * WvSpreadDTheta + WvSpreadIntegral(I-1) + END IF + ENDDO + + + !> 4. Perform a quick sanity check. The last value of the integral table should be 1.0 exactly. + !! We will allow for a 1% deviation. If for some reason an error occurs, it may be due to the + !! GAMMA function calculation for the normalization constant, _WvSpreadCos2SConst_. + IF ( WvSpreadIntegral(WvSpreadNDir) < 0.99_SiKi .OR. WvSpreadIntegral(WvSpreadNDir) > 1.01_SiKi ) THEN + CALL SetErrStat(ErrID_Fatal,' Something went wrong in evaluating the multidirectional wave spreading function. '// & + 'Integral is '//TRIM(Num2LStr(WvSpreadIntegral(WvSpreadNDir))),ErrStat,ErrMsg,RoutineName) + call Cleanup() + RETURN + END IF + + + !> 5. Set the wave directions using the results from the integral. + ! We will use the variable LastInd as a simple index for figuring out where in the array we are. First set to 0 + LastInd = 0_IntKi + DO I=1,InitOut%WaveNDir + WvSpreadIntegralTmp = (REAL(I)-0.5_SiKi)/REAL(InitOut%WaveNDir) + WvTheta(I) = InterpStp( WvSpreadIntegralTmp, WvSpreadIntegral, WvSpreadThetas, LastInd, WvSpreadNDir ) + ENDDO ! I=1,InitOut%WaveNDir + + + !> 6. Done with equal energy wavedirection calculations. Deallocate the arrays used during calculations. + + CALL CleanUp() + + +contains + subroutine Cleanup() + IF(ALLOCATED( WvSpreadCos2SArr )) DEALLOCATE( WvSpreadCos2SArr, STAT=ErrStatTmp ) + IF(ALLOCATED( WvSpreadIntegral )) DEALLOCATE( WvSpreadIntegral, STAT=ErrStatTmp ) + IF(ALLOCATED( WvSpreadThetas )) DEALLOCATE( WvSpreadThetas, STAT=ErrStatTmp ) + end subroutine Cleanup + +END SUBROUTINE CalculateWaveSpreading +!------------------------------------------------------------------------------------------------------------------------ +!> sets WaveS1SddArr(:) and InitOut%WaveElevC0 +SUBROUTINE Get_1Spsd_and_WaveElevC0(InitInp, InitOut, OmegaArr, WaveS1SddArr) + + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Output data + REAL(SiKi), INTENT(IN ) :: OmegaArr(0:InitOut%NStepWave2) !< Array of all non-negative angular frequencies (rad/s) + REAL(SiKi), INTENT( OUT) :: WaveS1SddArr(0:InitOut%NStepWave2) !< One-sided power spectral density of the wave spectrum at all non-negative frequencies (m^2/(rad/s)) + + COMPLEX(SiKi) :: WGNC(0:InitOut%NStepWave2) ! Discrete Fourier transform of the realization of a White Gaussian Noise (WGN) time series process with unit variance for the current frequency component (-) + INTEGER :: I ! Loop counter + INTEGER :: I_WaveTp ! The index of the frequency component nearest to WaveTp + REAL(SiKi) :: SQRTNStepWave2 ! SQRT( NStepWave/2 ) + COMPLEX(SiKi) :: tmpComplex ! A temporary varible to hold the complex value of the wave elevation before storing it into a REAL array + REAL(SiKi) :: WaveS2Sdd ! Two-sided power spectral density of the wave spectrum per unit time for the current frequency component (m^2/(rad/s)) + + + IF ( InitInp%WaveMod == 5 .OR. InitInp%WaveMod == 7) THEN ! Wave elevation or frequency component data read in + + DO I = 0,InitOut%NStepWave2 + + ! Apply limits to the existing WaveElevC0 arrays if outside frequency range + IF ( OmegaArr(I) < InitInp%WvLowCOff .OR. OmegaArr(I) > InitInp%WvHiCOff ) THEN + InitOut%WaveElevC0(:,I) = 0.0_SiKi + ENDIF + + END DO + + WaveS1SddArr = 0 ! unused here + RETURN + + END IF + + + I_WaveTp = NINT ( TwoPi/(InitOut%WaveDOmega*InitInp%WaveTp) ) ! Compute the index of the frequency component nearest to WaveTp. Note, we don't check if it's a valid index into the arrays + + ! Compute the discrete Fourier transform of the realization of a White + ! Gaussian Noise (WGN) time series process with unit variance: + + ! --------------------------------- + ! Set White Gaussian Noise with unit variance + ! + ! NOTE: For the time series process to be real with zero mean, the values at + ! OmegaArr(I) == 0.0 and OmegaArr(I) == NStepWave2*WaveDOmega (= WaveOmegaMax) + ! must be zero. + !--------------------------------- + ! I == 1 or InitOut%NStepWave2 if ( OmegaArr(I) == 0.0 ) or ( OmegaArr(I) == NStepWave2*WaveDOmega (= WaveOmegaMax) ) + WGNC(1) = (0.0,0.0) + WGNC(InitOut%NStepWave2) = (0.0,0.0) + + IF ( InitInp%WaveMod == 10 ) THEN ! .TRUE. for plane progressive (regular) waves with a specified phase + DO I = 0,InitOut%NStepWave2-1 ! Loop through the positive frequency components (including zero) of the discrete Fourier transforms + IF (I==1) CYCLE + + WGNC(I) = BoxMuller ( InitInp%RNG%pRNG, InitInp%WaveNDAmp, InitInp%WavePhase ) + END DO + ELSE ! All other OmegaArr(I) + DO I = 0,InitOut%NStepWave2-1 ! Loop through the positive frequency components (including zero) of the discrete Fourier transforms + IF (I==1) CYCLE + + WGNC(I) = BoxMuller ( InitInp%RNG%pRNG, InitInp%WaveNDAmp ) + END DO + END IF + + !------------------------------------ + ! For (WaveMod=1 plane progressive (regular); and WaveMod=10 plane progressive (regular) waves with a specified phase) + ! adjust WGNC and set PSD at specified frequency + !------------------------------------ + IF (InitInp%WaveMod == 10 .or. InitInp%WaveMod == 1) THEN + WaveS1SddArr = 0.0 + + IF (I_WaveTp < InitOut%NStepWave2 .and. (I_WaveTp > 1 .or. I_WaveTp == 0) ) THEN + + ! This scaling of WGNC is used to ensure that the Box-Muller method is only providing a random phase, + ! not a magnitude change, at the frequency of the plane progressive wave. The SQRT(2.0) is used to + ! ensure that the time series WGN process has unit variance (i.e. sinusoidal with amplitude SQRT(2.0)). + ! + ! NOTE: the denominator here will never equal zero since U1 cannot equal 1.0, and thus, C1 cannot be 0.0 in the Box-Muller method. + + WGNC(I_WaveTp) = WGNC(I_WaveTp) * ( SQRT(2.0_SiKi) / ABS(WGNC(I_WaveTp)) ) + + ! Plane progressive (regular) wave; the wave spectrum is an impulse function centered on frequency component closest to WaveTp. + WaveS1SddArr(I_WaveTp) = 0.5_SiKi * (InitInp%WaveHs/2.0_SiKi)**2 / InitOut%WaveDOmega + + END IF + ELSE + + DO I = 0,InitOut%NStepWave2 + + IF ( OmegaArr(I) < InitInp%WvLowCOff .OR. OmegaArr(I) > InitInp%WvHiCOff ) THEN ! .TRUE. if OmegaArr(I) is above or below the cut-off frequency + ! Zero-out the wave spectrum above the cut-off frequency. We must cut-off the frequency in order to + ! void nonphysical wave forces. Waves that have wavelengths much smaller than the platform diameter + ! (high frequency) do not contribute to the net force because regions of positive and negative + ! velocity/acceleration are experienced by the platform at the same time and cancel out. + + WaveS1SddArr(I) = 0.0 + + ELSE + + SELECT CASE ( InitInp%WaveMod ) ! Which incident wave kinematics model are we using? + CASE ( 2 ) ! JONSWAP/Pierson-Moskowitz spectrum (irregular) wave. + WaveS1SddArr(I) = JONSWAP ( OmegaArr(I), InitInp%WaveHs, InitInp%WaveTp, InitInp%WavePkShp ) + CASE ( 3 ) ! White-noise + WaveS1SddArr(I) = InitInp%WaveHs * InitInp%WaveHs / ( 16.0 * (InitInp%WvHiCOff - InitInp%WvLowCOff) ) + CASE ( 4 ) ! User-defined spectrum (irregular) wave. + CALL UserWaveSpctrm ( OmegaArr(I), InitInp%WaveDir, InitInp%DirRoot, WaveS1SddArr(I) ) + ENDSELECT + + END IF + + END DO + + + END IF + + + ! --------------------------------- + ! Compute the one-sided power spectral density of the wave spectrum per unit + ! time; zero-out the wave spectrum above the cut-off frequency: + !--------------------------------- + SQRTNStepWave2 = SQRT( REAL( InitOut%NStepWave2, SiKi ) ) ! Compute SQRT( NStepWave/2 ). + + DO I = 0,InitOut%NStepWave2 + ! Compute the two-sided power spectral density of the wave spectrum per unit + ! time: + + WaveS2Sdd = 0.5_SiKi*WaveS1SddArr(I) + + ! Compute the discrete Fourier transform of the instantaneous elevation of + ! incident waves at the WAMIT reference point: + tmpComplex = SQRTNStepWave2 * WGNC(I) *SQRT( TwoPi_R4 * WaveS2Sdd / REAL(InitInp%WaveDT,SiKi) ) + InitOut%WaveElevC0 (1,I) = REAL( tmpComplex) + InitOut%WaveElevC0 (2,I) = AIMAG(tmpComplex) + + END DO ! I - The positive frequency components (including zero) of the discrete Fourier transforms + +END SUBROUTINE Get_1Spsd_and_WaveElevC0 +!------------------------------------------------------------------------------------------------------------------------ +!> update InitOut%WaveElevC0; call InitFFT before calling this routine! +SUBROUTINE ConstrainedNewWaves(InitInp, InitOut, OmegaArr, WaveS1SddArr, CosWaveDir, SinWaveDir, FFT_Data, ErrStat, ErrMsg) + + TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp ! Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOut ! Output data + REAL(SiKi), INTENT(IN ) :: OmegaArr(0:InitOut%NStepWave2) !< Array of all non-negative angular frequencies (rad/s) + REAL(SiKi), INTENT(IN ) :: WaveS1SddArr(0:InitOut%NStepWave2) !< One-sided power spectral density of the wave spectrum at all non-negative frequencies (m^2/(rad/s)) + REAL(SiKi), INTENT(IN ) :: CosWaveDir(0:InitOut%NStepWave2) !< COS( WaveDirArr(I) ) -- Each wave frequency has a unique wave direction + REAL(SiKi), INTENT(IN ) :: SinWaveDir(0:InitOut%NStepWave2) !< SIN( WaveDirArr(I) ) -- Each wave frequency has a unique wave direction + TYPE(FFT_DataType), INTENT(IN ) :: FFT_Data !< data for FFT computations, already initialized + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< error level/status + CHARACTER(ErrMsgLen), INTENT( OUT) :: ErrMsg !< error message + + + REAL(SiKi) :: WaveNmbr ! Wavenumber of the current frequency component (1/meter) + INTEGER :: I ! Generic index + + ! Variables for constrained wave + REAL(SiKi) :: WaveElevC0ReSum !< Sum of the wave DFT amplitudes (real part) across all frequencies (m) + REAL(SiKi) :: WaveElevC0ImOmegaSum !< Sum of the wave DFT amplitudes (imaginary part) times the angular frequency across all frequencies (m(rad/s)) + REAL(SiKi) :: Crest !< Crest elevation measured from SWL (m) + REAL(SiKi) :: CrestHeight !< Crest height measured from the crest to the preceding or following trough (m) + REAL(SiKi) :: CrestHeight1 !< Crest height with purturbed crest elevation (m) + REAL(SiKi) :: CrestHeightError !< Error in crest height relative to the specified crest height (m) + REAL(SiKi) :: ConstWavePhase !< Phase adjustment to wave DFT amplitudes due to constrained wave (m) + REAL(SiKi) :: Trough !< The trough preceding or following the crest, whichever is lower (m) + REAL(SiKi) :: m0 !< Zeroth spectral moment of the wave spectrum (m^2) + REAL(SiKi) :: m2 !< First spectral moment of the wave spectrum (m^2(rad/s)^2) + REAL(SiKi) :: CrestHeightTol = 1.0E-3 !< Relative tolerance for the crest height when ConstWaveMod = 2 + INTEGER(IntKi) :: NStepTp !< Number of time steps per peak period when waveMod = 2 (-) + INTEGER(IntKi) :: Iter !< Number of iterations when trying to meet the prescribed crest height (-) + INTEGER(IntKi) :: MaxCrestIter = 20 !< Maximum number of iterations when trying to meet the prescribed crest height (-) + + REAL(SiKi) :: tmpArr(0:InitOut%NStepWave2) !< A temporary array of real numbers of constrained wave (-) + COMPLEX(SiKi) :: tmpComplexArr(0:InitOut%NStepWave2) !< A temporary array for FFT use + + COMPLEX(SiKi) :: tmpComplex ! A temporary varible to hold the complex value of the wave elevation before storing it into a REAL array + + INTEGER(IntKi) :: ErrStatTmp !< error level/status +! CHARACTER(ErrMsgLen) :: ErrMsgTmp !< error message + CHARACTER(*), PARAMETER :: RoutineName = 'ConstrainedNewWaves' + + + ErrStat = ErrID_None + ErrMsg = "" + + !=== Constrained New Waves === + ! Modify the wave components to implement the constrained wave + + ! Compute the relevant sums + m0 = InitOut%WaveDOmega * SUM(WaveS1SddArr) + m2 = InitOut%WaveDOmega * SUM(WaveS1SddArr*OmegaArr*OmegaArr) + WaveElevC0ReSum = SUM(InitOut%WaveElevC0(1,:))/m0 + WaveElevC0ImOmegaSum = SUM(InitOut%WaveElevC0(2,:) * OmegaArr)/m2 + ! Apply the part of the modification that is independent from the crest elevation + InitOut%WaveElevC0(1,:) = InitOut%WaveElevC0(1,:) - WaveElevC0ReSum * WaveS1SddArr * InitOut%WaveDOmega + InitOut%WaveElevC0(2,:) = InitOut%WaveElevC0(2,:) - WaveElevC0ImOmegaSum * OmegaArr * WaveS1SddArr * InitOut%WaveDOmega + + Crest = 0.5_SiKi * InitInp%CrestHmax ! Set crest elevation to half of crest height + tmpArr = InitOut%NStepWave2/m0 * InitOut%WaveDOmega * WaveS1SddArr + + IF (InitInp%ConstWaveMod == 1) THEN ! Crest elevation prescribed + + ! Apply the remaining part of the modification proportional to crest elevation + InitOut%WaveElevC0(1,:) = InitOut%WaveElevC0(1,:) + Crest * tmpArr + + ELSE IF (InitInp%ConstWaveMod == 2) THEN ! Crest height prescribed - Need to interate + + NStepTp = CEILING(InitInp%WaveTp/InitInp%WaveDT) + + Iter = 0 + CrestHeightError = InitInp%CrestHmax + DO WHILE(CrestHeightError>CrestHeightTol .AND. Iter<=MaxCrestIter) + Iter = Iter + 1 + + ! Compute the crest height based on the current guess of crest elevation + tmpComplexArr = CMPLX( InitOut%WaveElevC0(1,:) + Crest * tmpArr, & + InitOut%WaveElevC0(2,:)) + CALL ApplyFFT_cx ( InitOut%WaveElev0 (0:InitOut%NStepWave-1), tmpComplexArr (: ), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveElev0.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) RETURN + + ! Find the preceding or following trough, whichever is lower + Trough = MIN(MINVAL(InitOut%WaveElev0(1:MIN(NStepTp,InitOut%NStepWave-1))), & + MINVAL(InitOut%WaveElev0(MAX(InitOut%NStepWave-NStepTp,0):InitOut%NStepWave-1))) + CrestHeight = Crest-Trough + CrestHeightError = ABS(CrestHeight - InitInp%CrestHmax) + ! print *, CrestHeight + + If (CrestHeightError>CrestHeightTol) THEN ! If crest height tolerance is not satisfied + ! Compute the crest height based on a slightly nudged crest elevation + tmpComplexArr = CMPLX( InitOut%WaveElevC0(1,:) + (Crest+CrestHeightTol) * tmpArr, & + InitOut%WaveElevC0(2,:)) + CALL ApplyFFT_cx ( InitOut%WaveElev0 (0:InitOut%NStepWave-1), tmpComplexArr (: ), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveElev0.',ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) RETURN + + + ! Find the preceding or following trough, whichever is lower + Trough = MIN(MINVAL(InitOut%WaveElev0(1:MIN(NStepTp,InitOut%NStepWave-1))), & + MINVAL(InitOut%WaveElev0(MAX(InitOut%NStepWave-NStepTp,0):InitOut%NStepWave-1))) + CrestHeight1 = Crest+CrestHeightTol-Trough + ! Update crest elevation with Newton-Raphson Method + Crest = Crest - (CrestHeight-InitInp%CrestHmax)*CrestHeightTol/(CrestHeight1-CrestHeight) + ENDIF + END DO + + ! Apply the remaining part of the modification based on the final crest elevation + InitOut%WaveElevC0(1,:) = InitOut%WaveElevC0(1,:) + Crest * tmpArr + ENDIF + + ! Modify the wave phase so that the crest shows up at the right place and the right time + DO I = 1,InitOut%NStepWave2-1 + WaveNmbr = WaveNumber ( OmegaArr(I), InitInp%Gravity, InitInp%WtrDpth ) + ConstWavePhase = WaveNmbr*(CosWaveDir(I)*InitInp%CrestXi + & + SinWaveDir(I)*InitInp%CrestYi) - & + OmegaArr(I)*InitInp%CrestTime + tmpComplex = CMPLX( InitOut%WaveElevC0(1,I) , InitOut%WaveElevC0(2,I) ) + tmpComplex = tmpComplex * CMPLX( cos(ConstWavePhase), sin(ConstWavePhase) ) + InitOut%WaveElevC0(1,I) = REAL(tmpComplex) + InitOut%WaveElevC0(2,I) = AIMAG(tmpComplex) + END DO + +END SUBROUTINE ConstrainedNewWaves +!------------------------------------------------------------------------------------------------------------------------ +END MODULE Waves +!********************************************************************************************************************************** diff --git a/modules/hydrodyn/src/Waves.txt b/modules/seastate/src/Waves.txt similarity index 54% rename from modules/hydrodyn/src/Waves.txt rename to modules/seastate/src/Waves.txt index 5469e8b88f..4c8f94d42f 100644 --- a/modules/hydrodyn/src/Waves.txt +++ b/modules/seastate/src/Waves.txt @@ -21,10 +21,8 @@ include Registry_NWTC_Library.txt typedef Waves/Waves InitInputType CHARACTER(1024) InputFile - - - "Name of the input file" - typedef ^ ^ CHARACTER(1024) DirRoot - - - "The name of the root file including the full path. 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." - typedef ^ ^ CHARACTER(1024) WvKinFile - - - "The root name of user input wave kinematics files" - -typedef ^ ^ LOGICAL WriteWvKin - - - "Flag indicating whether we are going to write out kinematics files. [Must be FALSE if WaveMod = 5 or 6, if TRUE then WvKinFile must have a string value and this is the rootname for all the output files]" - -typedef ^ ^ INTEGER UnSum - - - "The unit number for the HydroDyn summary file" - typedef ^ ^ ReKi Gravity - - - "Gravitational acceleration" (m/s^2) -typedef ^ ^ ReKi MSL2SWL - - - "Offset between still-water level and mean sea level [positive upward; must be zero if using WAMIT]" (meters) +typedef ^ ^ integer nGrid 3 - - "Grid dimensions" typedef ^ ^ SiKi WvLowCOff - - - "Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4]" (rad/s) typedef ^ ^ SiKi WvHiCOff - - - "High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4]" (rad/s) typedef ^ ^ SiKi WaveDir - - - "Mean incident wave propagation heading direction" (degrees) @@ -45,98 +43,50 @@ typedef ^ ^ INTEGER WaveSeed typedef ^ ^ INTEGER WaveStMod - - - "Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching}" - typedef ^ ^ DbKi WaveTMax - - - "Analysis time for incident wave calculations; the actual analysis time may be larger than this value in order for the maintain an effecient FFT" (sec) typedef ^ ^ SiKi WaveTp - - - "Peak spectral period of incident waves" (sec) -typedef ^ ^ SiKi WtrDens - - - "Water density" (kg/m^3) -typedef ^ ^ SiKi WtrDpth - - - "Water depth" (meters) -typedef ^ ^ INTEGER NWaveElev - - - "Number of points where the incident wave elevations can be output" - -typedef ^ ^ SiKi WaveElevxi {:} - - "xi-coordinates for points where the incident wave elevations can be output" (meters) -typedef ^ ^ SiKi WaveElevyi {:} - - "yi-coordinates for points where the incident wave elevations can be output" (meters) -typedef ^ ^ SiKi WaveElevXY {:}{:} - - "Supplied by Driver: X-Y locations for WaveElevation output (for visualization). Index 1 corresponds to X or Y coordinate. Index 2 corresponds to point number." - -typedef ^ ^ ReKi PtfmLocationX - - - "Copy of X coordinate of platform location in the wave field, used to offset/phase-shift all wave kinematics to account for location in the farm" "m" -typedef ^ ^ ReKi PtfmLocationY - - - "Copy of Y coordinate of platform location in the wave field, used to offset/phase-shift all wave kinematics to account for location in the farm" "m" -typedef ^ ^ INTEGER WaveFieldMod - - - "Wave field handling (-) (switch) 0: use individual HydroDyn inputs without adjustment, 1: adjust wave phases based on turbine offsets from farm origin" - -typedef ^ ^ INTEGER NWaveKin - - - "Number of points where the incident wave kinematics will be computed" - -typedef ^ ^ SiKi WaveKinxi {:} - - "xi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) -typedef ^ ^ SiKi WaveKinyi {:} - - "yi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) -typedef ^ ^ SiKi WaveKinzi {:} - - "zi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) +typedef ^ ^ ReKi WtrDens - - - "Water density" (kg/m^3) +typedef ^ ^ ReKi WtrDpth - - - "Water depth" (meters) +typedef ^ ^ INTEGER NWaveElevGrid - - - "Number of grid points where the incident wave elevations are computed (the XY grid point locations)" - +typedef ^ ^ INTEGER NWaveKinGrid - - - "Number of grid points where the incident wave kinematics will be computed" - +typedef ^ ^ SiKi WaveKinGridxi {:} - - "xi-coordinates for grid points where the incident wave kinematics will be computed (grid points); these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinGridyi {:} - - "yi-coordinates for grid points where the incident wave kinematics will be computed (grid points); these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinGridzi {:} - - "zi-coordinates for grid points where the incident wave kinematics will be computed (grid points); these are relative to the mean sea level" (meters) typedef ^ ^ SiKi CurrVxi {:} - - "xi-component of the current velocity at elevation i" (m/s) typedef ^ ^ SiKi CurrVyi {:} - - "yi-component of the current velocity at elevation i" (m/s) typedef ^ ^ SiKi PCurrVxiPz0 - - - "xi-component of the partial derivative of the current velocity at elevation near mean sea level" (m/s) typedef ^ ^ SiKi PCurrVyiPz0 - - - "yi-component of the partial derivative of the current velocity at elevation near mean sea level" (m/s) -typedef ^ ^ NWTC_RandomNumber_ParameterType RNG - - - "Parameters for the pseudo random number generator" - - +typedef ^ ^ NWTC_RandomNumber_ParameterType RNG - - - "Parameters for the pseudo random number generator" - +typedef ^ ^ INTEGER ConstWaveMod - - - "Mode of the constrained wave" - +typedef ^ ^ SiKi CrestHmax - - - "crest height or double the crest elevation" m +typedef ^ ^ SiKi CrestTime - - - "time of the wave crest" sec +typedef ^ ^ SiKi CrestXi - - - "xi-coordinate for the wave crest" m +typedef ^ ^ SiKi CrestYi - - - "yi-coordinate for the wave crest" m +typedef ^ ^ SiKi MCFD - - - "Diameter of members that will use the MacCamy-Fuchs diffraction model" +typedef ^ ^ INTEGER WaveFieldMod - - - "Wave field handling (-) (switch) 0: use individual SeaState inputs without adjustment, 1: adjust wave phases based on turbine offsets from farm origin" - +typedef ^ ^ ReKi PtfmLocationX - - - "Supplied by Driver: X coordinate of platform location in the wave field" "m" +typedef ^ ^ ReKi PtfmLocationY - - - "Supplied by Driver: Y coordinate of platform location in the wave field" "m" # Define outputs from the initialization routine here: # -typedef ^ InitOutputType SiKi WaveElevC0 {:}{:} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part" (meters) -typedef ^ ^ SiKi WaveDirArr {:} - - "Wave direction array. Each frequency has a unique direction of WaveNDir > 1" (degrees) +typedef ^ InitOutputType SiKi WaveElevC0 {*}{*} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part" (meters) +typedef ^ InitOutputType SiKi WaveElevC {:}{:}{:} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at all grid points. First column is real part, second column is imaginary part" (meters) +typedef ^ ^ SiKi WaveDirArr {*} - - "Wave direction array. Each frequency has a unique direction of WaveNDir > 1" (degrees) typedef ^ ^ SiKi WaveDirMin - - - "Minimum wave direction." (degrees) typedef ^ ^ SiKi WaveDirMax - - - "Maximum wave direction." (degrees) -typedef ^ ^ SiKi WaveDir - - - "Incident wave propagation heading direction" (degrees) typedef ^ ^ INTEGER WaveNDir - - - "Number of wave directions [only used if WaveDirMod = 1] [Must be an odd number -- will be adjusted within the waves module]" (-) -typedef ^ ^ LOGICAL WaveMultiDir - - - "Indicates the waves are multidirectional -- set by HydroDyn_Input" - typedef ^ ^ SiKi WaveDOmega - - - "Frequency step for incident wave calculations" (rad/s) -typedef ^ ^ SiKi WaveKinzi {:} - - "zi-coordinates for points where the incident wave kinematics will be computed; these are relative to the mean see level" (meters) -typedef ^ ^ SiKi PWaveDynP0 {:}{:} - - "Instantaneous dynamic pressure of incident waves , at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed" (N/m^2) -typedef ^ ^ SiKi WaveDynP {:}{:} - - "Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed" (N/m^2) -typedef ^ ^ SiKi WaveAcc {:}{:}{:} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) -typedef ^ ^ SiKi PWaveAcc0 {:}{:}{:} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed" (m/s^2) -typedef ^ ^ SiKi WaveVel {:}{:}{:} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) -typedef ^ ^ SiKi PWaveVel0 {:}{:}{:} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKin points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) -typedef ^ ^ SiKi WaveElev {:}{:} - - "Instantaneous elevation time-series of incident waves at each of the NWaveElev points where the incident wave elevations can be output" (meters) +typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (N/m^2) +typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi WaveAccMCF {*}{*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKinGrid points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) +typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "Instantaneous dynamic pressure of incident waves , at the location (xi,yi,0), at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (N/m^2) +typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi PWaveAccMCF0 {*}{*}{*}{*} - - "Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKinGrid points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) +typedef ^ ^ SiKi WaveElev {*}{*}{*} - - "Instantaneous elevation time-series of incident waves at each of the XY grid points" (meters) typedef ^ ^ SiKi WaveElev0 {:} - - "Instantaneous elevation time-series of incident waves at the platform reference point" (meters) - -typedef ^ ^ SiKi WaveElevMD {:}{:} - - "Instantaneous elevation time-series of incident waves at hard coded grid for temporary use in MoorDyn" (m) - -typedef ^ ^ SiKi WaveElevSeries {:}{:} - - "Instantaneous elevation time-series at each of the points given by WaveElevXY. Used for making movies of the waves. First index is the timestep. Second index is XY point number corresponding to second index of WaveElevXY." (m) - -typedef ^ ^ SiKi WaveTime {:} - - "Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined" (sec) +typedef ^ ^ SiKi WaveTime {*} - - "Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined" (sec) typedef ^ ^ DbKi WaveTMax - - - "Analysis time for incident wave calculations; the actual analysis time may be larger than this value in order for the maintain an effecient FFT" (sec) -typedef ^ ^ INTEGER nodeInWater {:}{:} - - "Logical flag indicating if the node at the given time step is in the water, and hence needs to have hydrodynamic forces calculated" - typedef ^ ^ SiKi RhoXg - - - "= WtrDens*Gravity" - typedef ^ ^ INTEGER NStepWave - - - "Total number of frequency components = total number of time steps in the incident wave" - typedef ^ ^ INTEGER NStepWave2 - - - "NStepWave / 2" - - -# ..... States .................................................................................................................... -# Define continuous (differentiable) states here: -typedef ^ ContinuousStateType SiKi DummyContState - - - "Remove this variable if you have continuous states" - - - -# Define discrete (nondifferentiable) states here: -typedef ^ DiscreteStateType SiKi DummyDiscState - - - "Remove this variable if you have discrete states" - - - -# Define constraint states here: -typedef ^ ConstraintStateType SiKi DummyConstrState - - - "Remove this variable if you have constraint states" - - - -# Define any other states, including integer or logical states here: -typedef ^ OtherStateType INTEGER DummyOtherState - - - "Remove this variable if you have other states" - - -# ..... Misc/Optimization variables................................................................................................. -# Define any data that are used only for efficiency purposes (these variables are not associated with time): -# e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc. -typedef ^ MiscVarType INTEGER DummyMiscVar - - - "Remove this variable if you have misc/optimization variables" - - - -# ..... Parameters ................................................................................................................ -# Define parameters here: -# Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states: -typedef ^ ParameterType DbKi DT - - - "Time step for continuous state integration & discrete state update" seconds -typedef ^ ^ DbKi WaveTMax - - - "Analysis time for incident wave calculations; the actual analysis time may be larger than this value in order for the maintain an effecient FFT" (sec) -typedef ^ ^ INTEGER NStepWave - - - "Total number of frequency components = total number of time steps in the incident wave" - -typedef ^ ^ INTEGER WaveNDir - - - "Number of wave directions [only used if WaveDirMod = 1] [Must be an odd number -- will be adjusted within the waves module]" (-) -typedef ^ ^ LOGICAL WaveMultiDir - - - "Indicates the waves are multidirectional -- set by HydroDyn_Input" - - - -# ..... Inputs .................................................................................................................... -# Define inputs that are contained on the mesh here: -#typedef ^ InputType MeshType MeshedInput - - - "Meshed input data" - - -# Define inputs that are not on this mesh here: -typedef ^ InputType SiKi DummyInput - - - "Remove this variable if you have input data" - - - -# ..... Outputs ................................................................................................................... -# Define outputs that are not on this mesh here: -typedef ^ OutputType SiKi DummyOutput - - - "Remove this variable if you have output data" - diff --git a/modules/hydrodyn/src/Waves2.f90 b/modules/seastate/src/Waves2.f90 similarity index 78% rename from modules/hydrodyn/src/Waves2.f90 rename to modules/seastate/src/Waves2.f90 index 743e87708f..c72629c228 100644 --- a/modules/hydrodyn/src/Waves2.f90 +++ b/modules/seastate/src/Waves2.f90 @@ -33,11 +33,9 @@ MODULE Waves2 !! USE Waves2_Types -! USE WAMIT_Interp - USE Waves2_Output USE NWTC_Library USE NWTC_FFTPACK - USE Waves, ONLY : WaveNumber + USE Waves, ONLY : WaveNumber, ImagNmbr IMPLICIT NONE @@ -53,15 +51,6 @@ MODULE Waves2 ! ..... Public Subroutines ................................................................................................... PUBLIC :: Waves2_Init !< Initialization routine - PUBLIC :: Waves2_End !< Ending routine (includes clean up) - - PUBLIC :: Waves2_UpdateStates !< Loose coupling routine for solving for constraint states, integrating - !! continuous states, and updating discrete states - PUBLIC :: Waves2_CalcOutput !< Routine for computing outputs - - PUBLIC :: Waves2_CalcConstrStateResidual !< Tight coupling routine for returning the constraint state residual - PUBLIC :: Waves2_CalcContStateDeriv !< Tight coupling routine for computing derivatives of continuous states - PUBLIC :: Waves2_UpdateDiscState !< Tight coupling routine for updating discrete states CONTAINS @@ -69,30 +58,20 @@ MODULE Waves2 !> @brief !! This routine is called at the start of the simulation to perform initialization steps. !! The parameters that are set here are not changed during the simulation. -!! The initial states and initial guess for the input are defined. -SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, InitOut, ErrStat, ErrMsg ) +SUBROUTINE Waves2_Init( InitInp, p, InitOut, ErrStat, ErrMsg ) !.................................................................................................................................. TYPE(Waves2_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine - TYPE(Waves2_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined TYPE(Waves2_ParameterType), INTENT( OUT) :: p !< Parameters - TYPE(Waves2_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states - TYPE(Waves2_DiscreteStateType), INTENT( OUT) :: xd !< Initial discrete states - TYPE(Waves2_ConstraintStateType), INTENT( OUT) :: z !< Initial guess of the constraint states - TYPE(Waves2_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states - TYPE(Waves2_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; only the output mesh is initialized) - TYPE(Waves2_MiscVarType), INTENT( OUT) :: misc !< Misc/optimization variables - REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: don't change it from the glue code provided value. TYPE(Waves2_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None ! Local Variables - COMPLEX(SiKi) :: ImagNmbr = (0.0,1.0) !< The imaginary number, \f$ \sqrt{-1.0} \f$ - - INTEGER(IntKi) :: I !< Generic counter - INTEGER(IntKi) :: J !< Generic counter + INTEGER(IntKi) :: I,ii !< Generic counters + INTEGER(IntKi) :: J, jj,k,kk !< Generic counters + integer(IntKi) :: masterCount !< Counter from 1 to NWaveKinGrid INTEGER(IntKi) :: n !< Generic counter for calculations INTEGER(IntKi) :: m !< Generic counter for calculations INTEGER(IntKi) :: mu_minus !< Generic counter for difference kinematics calculations @@ -204,7 +183,7 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Temporary error trapping variables INTEGER(IntKi) :: ErrStatTmp !< Temporary variable for holding the error status returned from a CALL statement CHARACTER(2048) :: ErrMsgTmp !< Temporary variable for holding the error message returned from a CALL statement - + character(*), parameter :: RoutineName = 'Waves2_Init' ! Subroutine contents @@ -215,13 +194,6 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ErrMsg = "" ErrMsgTmp = "" - ! Initialize the data storage - misc%LastIndWave = 1_IntKi - - ! Initialize the NWTC Subroutine Library and display the information about this module. - - CALL NWTC_Init( ) - !----------------------------------------------------------------------------- !> Before attempting to do any real calculations, we first check what was @@ -245,8 +217,8 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, IF ( ( InitInp%WvHiCOffD < InitInp%WvLowCOffD ) .OR. ( InitInp%WvLowCOffD < 0.0 ) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming Error in call to Waves2_Init: '//NewLine// & ' WvHiCOffD must be larger than WvLowCOffD. Both must be positive.'// & - ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, 'Waves2_Init') - CALL CleanUp + ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, RoutineName) + CALL CleanUp() RETURN END IF END IF @@ -258,7 +230,7 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, IF ( ( InitInp%WvHiCOffS < InitInp%WvLowCOffS ) .OR. ( InitInp%WvLowCOffS < 0.0 ) ) THEN CALL SetErrStat( ErrID_Fatal, ' Programming Error in call to Waves2_Init: '//NewLine// & ' WvHiCOffS must be larger than WvLowCOffS. Both must be positive.'// & - ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, 'Waves2_Init') + ' --> This should have been checked by the calling program.', ErrStat, ErrMsg, RoutineName) CALL CleanUp RETURN END IF @@ -278,7 +250,7 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ' --> Expected array for WaveElevC0 to be of size 2x'//TRIM(Num2LStr(InitInp%NStepWave2 + 1))// & ' (2x(NStepWave2+1)), but instead received array of size '// & TRIM(Num2LStr(SIZE(InitInp%WaveElevC0,1)))//'x'//TRIM(Num2LStr(SIZE(InitInp%WaveElevC0,2)))//'.', & - ErrStat, ErrMsg, 'Waves2_Init') + ErrStat, ErrMsg, RoutineName) CALL CleanUp RETURN END IF @@ -291,7 +263,7 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ' --> Expected array for WaveTime to be of size '//TRIM(Num2LStr(InitInp%NStepWave + 1))// & ' (NStepWave+1), but instead received array of size '// & TRIM(Num2LStr(SIZE(InitInp%WaveTime)))//'.', & - ErrStat, ErrMsg, 'Waves2_Init') + ErrStat, ErrMsg, RoutineName) CALL CleanUp RETURN END IF @@ -301,23 +273,6 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Now copy over things to parameters... !-------------------------------------------------------------------------------- - ! Wave information we need to keep - - p%NWaveElev = InitInp%NWaveElev - p%NStepWave = InitInp%NStepWave - p%NStepWave2 = InitInp%NStepWave2 - - - ! Time related information - - p%DT = Interval ! Timestep from calling program - - - ! Allocate array for the WaveTime information -- array of times to generate output for. NOTE: can't use MOVE_ALLOC since InitInp is intent in. - CALL AllocAry( p%WaveTime, SIZE(InitInp%WaveTime,DIM=1), 'array to hold WaveTime', ErrStatTmp, ErrMsgTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveTime.',ErrStat,ErrMsg,'Waves2_Init') - p%WaveTime = InitInp%WaveTime - ! Difference QTF p%WvDiffQTFF = InitInp%WvDiffQTFF ! Flag for calculation @@ -325,22 +280,13 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, p%WvSumQTFF = InitInp%WvSumQTFF ! Flag for calculation - ! Initialize the channel outputs - p%NumOuts = InitInp%NumOuts - p%NumOutAll = InitInp%NumOutAll - - CALL Wvs2OUT_Init( InitInp, y, p, InitOut, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat( ErrStatTmp, ErrMsgTmp, ErrStat, ErrMsg, 'Waves2_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp - RETURN - END IF - - - ! The wave elevation information in frequency space -- we need to normalize this by NStepWave2 ALLOCATE ( WaveElevC0Norm(0:InitInp%NStepWave2) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElevC0Norm.',ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) then + CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElevC0Norm.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + END IF DO I=0,InitInp%NStepWave2 WaveElevC0Norm(I) = CMPLX( InitInp%WaveElevC0(1,I), InitInp%WaveElevC0(2,I), SiKi ) / REAL(InitInp%NStepWave2,SiKi) @@ -367,14 +313,14 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Since we have no stretching, NWaveKin0Prime and WaveKinzi0Prime(:) are ! equal to the number of, and the zi-coordinates for, the points in the - ! WaveKinzi(:) array between, and including, -WtrDpth and 0.0. + ! WaveKinGridzi(:) array between, and including, -WtrDpth and 0.0. ! Determine NWaveKin0Prime here: NWaveKin0Prime = 0 - DO J = 1,InitInp%NWaveKin ! Loop through all mesh points where the incident wave kinematics will be computed - ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinzi and WtrDpth have already been adjusted using MSL2SWL - IF ( InitInp%WaveKinzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinzi(J) <= 0 ) THEN + DO J = 1,InitInp%NWaveKinGrid ! Loop through all mesh points where the incident wave kinematics will be computed + ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinGridzi and WtrDpth have already been adjusted using MSL2SWL + IF ( InitInp%WaveKinGridzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinGridzi(J) <= 0 ) THEN NWaveKin0Prime = NWaveKin0Prime + 1 END IF END DO ! J - All Morison nodes where the incident wave kinematics will be computed @@ -384,10 +330,10 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! ALLOCATE the WaveKinzi0Prime(:) array and compute its elements here: ALLOCATE ( WaveKinzi0Prime(NWaveKin0Prime) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinzi0Prime.',ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinzi0Prime.',ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveKinPrimeMap(NWaveKin0Prime) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinPrimeMap.',ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinPrimeMap.',ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -397,11 +343,11 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, I = 1 - DO J = 1,InitInp%NWaveKin ! Loop through all points where the incident wave kinematics will be computed without stretching - ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinzi and WtrDpth have already been adjusted using MSL2SWL - IF ( InitInp%WaveKinzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinzi(J) <= 0 ) THEN + DO J = 1,InitInp%NWaveKinGrid ! Loop through all points where the incident wave kinematics will be computed without stretching + ! NOTE: We test to 0 instead of MSL2SWL because the locations of WaveKinGridzi and WtrDpth have already been adjusted using MSL2SWL + IF ( InitInp%WaveKinGridzi(J) >= -InitInp%WtrDpth .AND. InitInp%WaveKinGridzi(J) <= 0 ) THEN - WaveKinzi0Prime(I) = InitInp%WaveKinzi(J) + WaveKinzi0Prime(I) = InitInp%WaveKinGridzi(J) WaveKinPrimeMap(I) = J I = I + 1 @@ -412,14 +358,14 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !CASE ( 1, 2 ) ! Vertical stretching or extrapolation stretching. - ! CALL SetErrStat(ErrID_Fatal,' Vertical and extrapolation stretching not supported in second order calculations.',ErrStat,ErrMsg,'Waves2_Init') + ! CALL SetErrStat(ErrID_Fatal,' Vertical and extrapolation stretching not supported in second order calculations.',ErrStat,ErrMsg,RoutineName) ! ! !CASE ( 3 ) ! Wheeler stretching. - ! CALL SetErrStat(ErrID_Fatal,' Wheeler stretching not supported in second order calculations.',ErrStat,ErrMsg,'Waves2_Init') + ! CALL SetErrStat(ErrID_Fatal,' Wheeler stretching not supported in second order calculations.',ErrStat,ErrMsg,RoutineName) ! !CASE DEFAULT - ! CALL SetErrStat(ErrID_Fatal,' Stretching is not supported in the second order waves kinematics calculations.',ErrStat,ErrMsg,'Waves2_Init') + ! CALL SetErrStat(ErrID_Fatal,' Stretching is not supported in the second order waves kinematics calculations.',ErrStat,ErrMsg,RoutineName) ! ! !ENDSELECT @@ -437,27 +383,26 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Setup the output arrays !-------------------------------------------------------------------------------- - - ALLOCATE ( p%WaveElev2 (0:InitInp%NStepWave,InitInp%NWaveElev ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveElev2.', ErrStat,ErrMsg,'Waves2_Init') - - ALLOCATE ( InitOut%WaveVel2D (0:InitInp%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel2D.', ErrStat,ErrMsg,'Waves2_Init') - - ALLOCATE ( InitOut%WaveAcc2D (0:InitInp%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc2D.', ErrStat,ErrMsg,'Waves2_Init') - - ALLOCATE ( InitOut%WaveDynP2D (0:InitInp%NStepWave,InitInp%NWaveKin ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP2D.', ErrStat,ErrMsg,'Waves2_Init') - - ALLOCATE ( InitOut%WaveVel2S (0:InitInp%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel2S.', ErrStat,ErrMsg,'Waves2_Init') - - ALLOCATE ( InitOut%WaveAcc2S (0:InitInp%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc2S.', ErrStat,ErrMsg,'Waves2_Init') - - ALLOCATE ( InitOut%WaveDynP2S (0:InitInp%NStepWave,InitInp%NWaveKin ), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP2S.', ErrStat,ErrMsg,'Waves2_Init') + ALLOCATE ( InitOut%WaveElev2 (0:InitInp%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ) , STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev2.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%WaveVel2D (0:InitInp%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel2D.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%WaveAcc2D (0:InitInp%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc2D.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%WaveDynP2D (0:InitInp%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP2D.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%WaveVel2S (0:InitInp%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveVel2S.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%WaveAcc2S (0:InitInp%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc2S.', ErrStat,ErrMsg,RoutineName) + + ALLOCATE ( InitOut%WaveDynP2S (0:InitInp%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP2S.', ErrStat,ErrMsg,RoutineName) ! Now check if all the allocations worked properly IF ( ErrStat >= AbortErrLev ) THEN @@ -467,49 +412,40 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !Initialize the output arrays to zero. We will only fill it in for the points we calculate. - p%WaveElev2 = 0.0_SiKi + InitOut%WaveElev2 = 0.0_SiKi InitOut%WaveVel2D = 0.0_SiKi InitOut%WaveAcc2D = 0.0_SiKi InitOut%WaveDynP2D = 0.0_SiKi - InitOut%WaveVel2S = 0.0_SiKi - InitOut%WaveAcc2S = 0.0_SiKi - InitOut%WaveDynP2S = 0.0_SiKi - + InitOut%WaveVel2S = 0.0_SiKi + InitOut%WaveAcc2S = 0.0_SiKi + InitOut%WaveDynP2S = 0.0_SiKi - ! For creating animations of the sea surface, the WaveElevXY array is passed in with a series of x,y coordinates - ! (index 1). The second index corresponds to the number of points passed in. A two dimensional time series - ! is created with the first index corresponding to the timestep, and second index corresponding to the second - ! index of the WaveElevXY array. - IF ( ALLOCATED(InitInp%WaveElevXY)) THEN - ALLOCATE ( InitOut%WaveElevSeries2 (0:InitInp%NStepWave, 1:SIZE(InitInp%WaveElevXY, DIM=2)) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) THEN - CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevSeries2.',ErrStat,ErrMsg,'Waves2_Init') - CALL CleanUp() - RETURN - END IF - ENDIF ! For calculating the 2nd-order wave elevation corrections, we need a temporary array to hold the information. ALLOCATE ( TmpTimeSeries(0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpTimeSeries.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpTimeSeries.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( TmpTimeSeries2(0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpTimeSeries2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpTimeSeries2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( TmpFreqSeries(0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpFreqSeries.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpFreqSeries.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( TmpFreqSeries2(0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpFreqSeries2.', ErrStat,ErrMsg,'Waves2_Init') - + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array TmpFreqSeries2.', ErrStat,ErrMsg,RoutineName) + ! Now check if all the allocations worked properly + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF !-------------------------------------------------------------------------------- ! Setup the FFT working arrays !-------------------------------------------------------------------------------- CALL InitFFT ( InitInp%NStepWave, FFT_Data, .FALSE., ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while initializing the FFT.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while initializing the FFT.',ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN @@ -545,21 +481,21 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Frequency space arrays: ALLOCATE ( WaveVel2xCDiff (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xCDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xCDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2yCDiff (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2yCDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2yCDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2zCDiff (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zCDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zCDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2xCDiff (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xCDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xCDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2yCDiff (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2yCDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2yCDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2zCDiff (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zCDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zCDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveDynP2CDiff (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2CDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2CDiff.', ErrStat,ErrMsg,RoutineName) ! Now check if all the allocations worked properly IF ( ErrStat >= AbortErrLev ) THEN @@ -570,21 +506,21 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Time domain arrays: ALLOCATE ( WaveVel2xDiff (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2yDiff (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2yDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2yDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2zDiff (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2xDiff (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2yDiff (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2yDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2yDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2zDiff (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zDiff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zDiff.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveDynP2Diff (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2Diff.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2Diff.', ErrStat,ErrMsg,RoutineName) ! Now check if all the allocations worked properly IF ( ErrStat >= AbortErrLev ) THEN @@ -597,40 +533,27 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !-------------------------------------------------------------------------------- !> ## Calculate the surface elevation corrections ## !! - !! For each (x,y) coordinate that a wave elevation is requested at (both from the - !! (WaveElevxi,WaveElevyi) pairs, and the WaveElevXY pairs), a call is made to the + !! For each (x,y) coordinate that a wave elevation is requested at, a call is made to the !! subroutine waves2::waveelevtimeseriesatxy_diff to calculate the full time series for !! that point. The results are added to the wave elevation results from the sum !! frequency calculations later in the code. !-------------------------------------------------------------------------------- ! Step through the requested points - DO I=1,InitInp%NWaveElev - CALL WaveElevTimeSeriesAtXY_Diff(InitInp%WaveElevxi(I), InitInp%WaveElevyi(I), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStat,ErrMsg,'Waves2_Init') + DO k = 1,InitInp%NWaveElevGrid ! Loop through all points where the incident wave elevations are to be computed (normally all the XY grid points) + ! This subroutine call applies the FFT at the correct location. + i = mod(k-1, InitInp%NGrid(1)) + 1 + j = (k-1) / InitInp%NGrid(1) + 1 + CALL WaveElevTimeSeriesAtXY_Diff(InitInp%WaveKinGridxi(k), InitInp%WaveKinGridyi(k), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev2.',ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN END IF - p%WaveElev2(:,I) = TmpTimeSeries(:) + InitOut%WaveElev2(:,I,J) = TmpTimeSeries(:) ENDDO ! Wave elevation points requested - ! Calculate the wave elevation at all points requested in the array WaveElevXY - IF ( ALLOCATED(InitInp%WaveElevXY) ) THEN - DO I = 1,SIZE(InitInp%WaveElevXY, DIM=2) - ! This subroutine call applies the FFT at the correct location. - CALL WaveElevTimeSeriesAtXY_Diff( InitInp%WaveElevXY(1,I), InitInp%WaveElevXY(2,I), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves2_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - InitOut%WaveElevSeries2(:,I) = TmpTimeSeries(:) - ENDDO - ENDIF - - !-------------------------------------------------------------------------------- !> ## Calculate the second order velocity, acceleration, and pressure corrections for all joints below surface. ## @@ -639,7 +562,7 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! NWaveKin0Prime loop start DO I=1,NWaveKin0Prime - + masterCount = WaveKinPrimeMap(I) ! Reset the \f$ H_{\mu^-} \f$ terms to zero before calculating. WaveVel2xCDiff = CMPLX(0.0_SiKi, 0.0_SiKi, SiKi) @@ -683,8 +606,8 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !! + \left( |\vec{k_n}| \sin \theta_n - |\vec{k_m}| sin \theta_m \right) ~ y \right] \right) \f$ WaveElevxyPrime0 = exp( - ImagNmbr & - * ( ( k_n * COS( D2R_S*InitInp%WaveDirArr(n) ) - k_m * COS( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinxi(WaveKinPrimeMap(I)) & - + ( k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) - k_m * SIN( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinyi(WaveKinPrimeMap(I)) )) + * ( ( k_n * COS( D2R_S*InitInp%WaveDirArr(n) ) - k_m * COS( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinGridxi(masterCount) & + + ( k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) - k_m * SIN( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinGridyi(masterCount) )) ! Get value for \f$ B^- \f$ for the n,m index pair @@ -766,21 +689,21 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !> ### Apply the inverse FFT to each of the components to get the time domain result ### !> * \f$ V(t) = 2 \operatorname{IFFT}\left[H^-\right] \f$ CALL ApplyFFT_cx( WaveVel2xDiff(:), WaveVel2xCDiff(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_x.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_x.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveVel2yDiff(:), WaveVel2yCDiff(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_y.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_y.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveVel2zDiff(:), WaveVel2zCDiff(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_z.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_z.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2xDiff(:), WaveAcc2xCDiff(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_x.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_x.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2yDiff(:), WaveAcc2yCDiff(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_y.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_y.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2zDiff(:), WaveAcc2zCDiff(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_z.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_z.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveDynP2Diff(:), WaveDynP2CDiff(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on DynP2.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on DynP2.',ErrStat,ErrMsg,RoutineName) @@ -791,32 +714,37 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Copy the results to the output - InitOut%WaveVel2D(:,WaveKinPrimeMap(I),1) = 2.0_SiKi * WaveVel2xDiff(:) ! x-component of velocity - InitOut%WaveVel2D(:,WaveKinPrimeMap(I),2) = 2.0_SiKi * WaveVel2yDiff(:) ! y-component of velocity - InitOut%WaveVel2D(:,WaveKinPrimeMap(I),3) = 2.0_SiKi * WaveVel2zDiff(:) ! z-component of velocity + ii = mod(masterCount-1, InitInp%NGrid(1)) + 1 + jj = mod( (masterCount-1) /InitInp%NGrid(1), InitInp%NGrid(2) ) + 1 + kk = (masterCount-1) / (InitInp%NGrid(1)*InitInp%NGrid(2)) + 1 + + InitOut%WaveVel2D(:,ii,jj,kk,1) = 2.0_SiKi * WaveVel2xDiff(:) ! x-component of velocity + InitOut%WaveVel2D(:,ii,jj,kk,2) = 2.0_SiKi * WaveVel2yDiff(:) ! y-component of velocity + InitOut%WaveVel2D(:,ii,jj,kk,3) = 2.0_SiKi * WaveVel2zDiff(:) ! z-component of velocity - InitOut%WaveAcc2D(:,WaveKinPrimeMap(I),1) = 2.0_SiKi * WaveAcc2xDiff(:) ! x-component of acceleration - InitOut%WaveAcc2D(:,WaveKinPrimeMap(I),2) = 2.0_SiKi * WaveAcc2yDiff(:) ! y-component of acceleration - InitOut%WaveAcc2D(:,WaveKinPrimeMap(I),3) = 2.0_SiKi * WaveAcc2zDiff(:) ! z-component of acceleration + InitOut%WaveAcc2D(:,ii,jj,kk,1) = 2.0_SiKi * WaveAcc2xDiff(:) ! x-component of acceleration + InitOut%WaveAcc2D(:,ii,jj,kk,2) = 2.0_SiKi * WaveAcc2yDiff(:) ! y-component of acceleration + InitOut%WaveAcc2D(:,ii,jj,kk,3) = 2.0_SiKi * WaveAcc2zDiff(:) ! z-component of acceleration - InitOut%WaveDynP2D(:,WaveKinPrimeMap(I)) = 2.0_SiKi * WaveDynP2Diff(:) ! Dynamic pressure + InitOut%WaveDynP2D(:,ii,jj,kk) = 2.0_SiKi * WaveDynP2Diff(:) ! Dynamic pressure ! Copy the first point to the last to make it easier. - InitOut%WaveVel2D(InitInp%NStepWave,WaveKinPrimeMap(I),1) = WaveVel2xDiff(0) - InitOut%WaveVel2D(InitInp%NStepWave,WaveKinPrimeMap(I),2) = WaveVel2yDiff(0) - InitOut%WaveVel2D(InitInp%NStepWave,WaveKinPrimeMap(I),3) = WaveVel2zDiff(0) + ! TODO: Why don't these have the 2.0 multipler?? GJH 9/8/21 + InitOut%WaveVel2D(InitInp%NStepWave,ii,jj,kk,1) = WaveVel2xDiff(0) + InitOut%WaveVel2D(InitInp%NStepWave,ii,jj,kk,2) = WaveVel2yDiff(0) + InitOut%WaveVel2D(InitInp%NStepWave,ii,jj,kk,3) = WaveVel2zDiff(0) - InitOut%WaveAcc2D(InitInp%NStepWave,WaveKinPrimeMap(I),1) = WaveAcc2xDiff(0) - InitOut%WaveAcc2D(InitInp%NStepWave,WaveKinPrimeMap(I),2) = WaveAcc2yDiff(0) - InitOut%WaveAcc2D(InitInp%NStepWave,WaveKinPrimeMap(I),3) = WaveAcc2zDiff(0) + InitOut%WaveAcc2D(InitInp%NStepWave,ii,jj,kk,1) = WaveAcc2xDiff(0) + InitOut%WaveAcc2D(InitInp%NStepWave,ii,jj,kk,2) = WaveAcc2yDiff(0) + InitOut%WaveAcc2D(InitInp%NStepWave,ii,jj,kk,3) = WaveAcc2zDiff(0) - InitOut%WaveDynP2D(InitInp%NStepWave,WaveKinPrimeMap(I)) = WaveDynP2Diff(0) + InitOut%WaveDynP2D(InitInp%NStepWave,ii,jj,kk) = WaveDynP2Diff(0) ENDDO ! I=1,NWaveKin0Prime loop end - + ! Deallocate working arrays. IF (ALLOCATED(WaveVel2xCDiff)) DEALLOCATE(WaveVel2xCDiff, STAT=ErrStatTmp) IF (ALLOCATED(WaveVel2yCDiff)) DEALLOCATE(WaveVel2yCDiff, STAT=ErrStatTmp) @@ -878,39 +806,39 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Frequency space arrays: Term 1 (n=m term) ALLOCATE ( WaveVel2xCSumT1 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xCSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xCSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2yCSumT1 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2yCSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2yCSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2zCSumT1 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zCSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zCSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2xCSumT1 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xCSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xCSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2yCSumT1 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2yCSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2yCSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2zCSumT1 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zCSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zCSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveDynP2CSumT1 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2CSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2CSumT1.', ErrStat,ErrMsg,RoutineName) ! Term 2 (n/=m term) ALLOCATE ( WaveVel2xCSumT2 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xCSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xCSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2yCSumT2 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2yCSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2yCSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2zCSumT2 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zCSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zCSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2xCSumT2 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xCSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xCSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2yCSumT2 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2yCSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2yCSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2zCSumT2 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zCSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zCSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveDynP2CSumT2 (0:InitInp%NStepWave2), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2CSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2CSumT2.', ErrStat,ErrMsg,RoutineName) ! Now check if all the allocations worked properly IF ( ErrStat >= AbortErrLev ) THEN @@ -922,39 +850,39 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Time domain arrays: Term 1 (n=m term) ALLOCATE ( WaveVel2xSumT1 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2ySumT1 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2ySumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2ySumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2zSumT1 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2xSumT1 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2ySumT1 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2ySumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2ySumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2zSumT1 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zSumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zSumT1.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveDynP2SumT1 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2SumT1.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2SumT1.', ErrStat,ErrMsg,RoutineName) ! Term 2 (n/=m term) ALLOCATE ( WaveVel2xSumT2 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2xSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2ySumT2 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2ySumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2ySumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveVel2zSumT2 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveVel2zSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2xSumT2 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2xSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2ySumT2 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2ySumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2ySumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveAcc2zSumT2 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zSumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc2zSumT2.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( WaveDynP2SumT2 (0:InitInp%NStepWave), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2SumT2.', ErrStat,ErrMsg,'Waves2_Init') + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveDynP2SumT2.', ErrStat,ErrMsg,RoutineName) ! Now check if all the allocations worked properly IF ( ErrStat >= AbortErrLev ) THEN @@ -968,49 +896,33 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !-------------------------------------------------------------------------------- !> ## Calculate the surface elevation corrections ## !! - !! For each (x,y) coordinate that a wave elevation is requested at (both from the - !! (WaveElevxi,WaveElevyi) pairs, and the WaveElevXY pairs), a call is made to the + !! For each (x,y) coordinate that a wave elevation is requested at, a call is made to the !! subroutine waves2::waveelevtimeseriesatxy_sum to calculate the full time series for !! that point. The results are added to the wave elevation results from the diff !! frequency calculations earlier in the code. !-------------------------------------------------------------------------------- - +!NOTE: This is all grid points ! Step through the requested points - DO I=1,InitInp%NWaveElev - CALL WaveElevTimeSeriesAtXY_Sum(InitInp%WaveElevxi(I), InitInp%WaveElevyi(I), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStat,ErrMsg,'Waves2_Init') + DO k = 1,InitInp%NWaveElevGrid ! Loop through all points where the incident wave elevations are to be computed (normally all the XY grid points) + ! This subroutine call applies the FFT at the correct location. + i = mod(k-1, InitInp%NGrid(1)) + 1 + j = (k-1) / InitInp%NGrid(1) + 1 + CALL WaveElevTimeSeriesAtXY_Sum(InitInp%WaveKinGridxi(k), InitInp%WaveKinGridyi(k), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev2.',ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN END IF ! Add to the series since the difference is already included - p%WaveElev2(:,I) = p%WaveElev2(:,I) + TmpTimeSeries(:) + InitOut%WaveElev2(:,I,J) = InitOut%WaveElev2(:,I,J) + TmpTimeSeries(:) ENDDO ! Wave elevation points requested - - ! Calculate the wave elevation at all points requested in the array WaveElevXY - IF ( ALLOCATED(InitInp%WaveElevXY) ) THEN - DO I = 1,SIZE(InitInp%WaveElevXY, DIM=2) - ! This subroutine call applies the FFT at the correct location. - CALL WaveElevTimeSeriesAtXY_Sum( InitInp%WaveElevXY(1,I), InitInp%WaveElevXY(2,I), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) - CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves2_Init') - IF ( ErrStat >= AbortErrLev ) THEN - CALL CleanUp() - RETURN - END IF - ! Add to the series since the difference is already included - InitOut%WaveElevSeries2(:,I) = InitOut%WaveElevSeries2(:,I) + TmpTimeSeries(:) - ENDDO - ENDIF - - - !-------------------------------------------------------------------------------- !> ## Calculate the second order velocity, acceleration, and pressure corrections for all joints below surface. ## !-------------------------------------------------------------------------------- ! NWaveKin0Prime loop start DO I=1,NWaveKin0Prime - + masterCount = WaveKinPrimeMap(I) ! Reset the \f$ H_{\mu^+} \f$ terms to zero before calculating. WaveVel2xCSumT1 = CMPLX(0.0_SiKi, 0.0_SiKi, SiKi) @@ -1069,8 +981,8 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !! + |\vec{k_n}| \sin \theta_n ~ y \right] \right) \f$ WaveElevxyPrime0 = exp( - ImagNmbr & - * ( 2.0_SiKi * k_n * COS( D2R_S*InitInp%WaveDirArr(n) ) * InitInp%WaveKinxi(WaveKinPrimeMap(I)) & - + 2.0_SiKi * k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) * InitInp%WaveKinyi(WaveKinPrimeMap(I)) )) + * ( 2.0_SiKi * k_n * COS( D2R_S*InitInp%WaveDirArr(n) ) * InitInp%WaveKinGridxi(masterCount) & + + 2.0_SiKi * k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) * InitInp%WaveKinGridyi(masterCount) )) ! Get value for \f$ B+ \f$ for the n,m index pair @@ -1171,8 +1083,8 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !! + \left( |\vec{k_n}| \sin \theta_n + |\vec{k_m}| sin \theta_m \right) ~ y \right] \right) \f$ WaveElevxyPrime0 = exp( - ImagNmbr & - * ( ( k_n * COS( D2R_S*InitInp%WaveDirArr(n) ) + k_m * COS( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinxi(WaveKinPrimeMap(I)) & - + ( k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) + k_m * SIN( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinyi(WaveKinPrimeMap(I)) )) + * ( ( k_n * COS( D2R_S*InitInp%WaveDirArr(n) ) + k_m * COS( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinGridxi(masterCount) & + + ( k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) + k_m * SIN( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinGridyi(masterCount) )) ! Get value for \f$ B+ \f$ for the n,m index pair @@ -1262,38 +1174,38 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !> * \f$ V^{(2)+}(t) = \operatorname{IFFT}\left[K^+\right] !! + 2\operatorname{IFFT}\left[H^+\right] \f$ CALL ApplyFFT_cx( WaveVel2xSumT1(:), WaveVel2xCSumT1(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_x.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_x.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveVel2ySumT1(:), WaveVel2yCSumT1(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_y.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_y.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveVel2zSumT1(:), WaveVel2zCSumT1(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_z.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_z.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2xSumT1(:), WaveAcc2xCSumT1(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_x.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_x.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2ySumT1(:), WaveAcc2yCSumT1(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_y.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_y.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2zSumT1(:), WaveAcc2zCSumT1(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_z.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_z.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveDynP2SumT1(:), WaveDynP2CSumT1(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on DynP2.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on DynP2.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveVel2xSumT2(:), WaveVel2xCSumT2(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_x.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_x.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveVel2ySumT2(:), WaveVel2yCSumT2(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_y.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_y.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveVel2zSumT2(:), WaveVel2zCSumT2(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_z.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on V_z.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2xSumT2(:), WaveAcc2xCSumT2(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_x.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_x.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2ySumT2(:), WaveAcc2yCSumT2(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_y.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_y.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveAcc2zSumT2(:), WaveAcc2zCSumT2(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_z.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on Acc_z.',ErrStat,ErrMsg,RoutineName) CALL ApplyFFT_cx( WaveDynP2SumT2(:), WaveDynP2CSumT2(:), FFT_Data, ErrStatTmp ) - CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on DynP2.',ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT on DynP2.',ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -1302,21 +1214,25 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! Add the results to the output - InitOut%WaveVel2S(:,WaveKinPrimeMap(I),1) = WaveVel2xSumT1(:) + 2.0_SiKi * WaveVel2xSumT2(:) ! x-component of velocity - InitOut%WaveVel2S(:,WaveKinPrimeMap(I),2) = WaveVel2ySumT1(:) + 2.0_SiKi * WaveVel2ySumT2(:) ! y-component of velocity - InitOut%WaveVel2S(:,WaveKinPrimeMap(I),3) = WaveVel2zSumT1(:) + 2.0_SiKi * WaveVel2zSumT2(:) ! z-component of velocity + ii = mod(masterCount-1, InitInp%NGrid(1)) + 1 + jj = mod( (masterCount-1) /InitInp%NGrid(1), InitInp%NGrid(2) ) + 1 + kk = (masterCount-1) / (InitInp%NGrid(1)*InitInp%NGrid(2)) + 1 + + InitOut%WaveVel2S(:,ii,jj,kk,1) = WaveVel2xSumT1(:) + 2.0_SiKi * WaveVel2xSumT2(:) ! x-component of velocity + InitOut%WaveVel2S(:,ii,jj,kk,2) = WaveVel2ySumT1(:) + 2.0_SiKi * WaveVel2ySumT2(:) ! y-component of velocity + InitOut%WaveVel2S(:,ii,jj,kk,3) = WaveVel2zSumT1(:) + 2.0_SiKi * WaveVel2zSumT2(:) ! z-component of velocity - InitOut%WaveAcc2S(:,WaveKinPrimeMap(I),1) = WaveAcc2xSumT1(:) + 2.0_SiKi * WaveAcc2xSumT2(:) ! x-component of acceleration - InitOut%WaveAcc2S(:,WaveKinPrimeMap(I),2) = WaveAcc2ySumT1(:) + 2.0_SiKi * WaveAcc2ySumT2(:) ! y-component of acceleration - InitOut%WaveAcc2S(:,WaveKinPrimeMap(I),3) = WaveAcc2zSumT1(:) + 2.0_SiKi * WaveAcc2zSumT2(:) ! z-component of acceleration + InitOut%WaveAcc2S(:,ii,jj,kk,1) = WaveAcc2xSumT1(:) + 2.0_SiKi * WaveAcc2xSumT2(:) ! x-component of acceleration + InitOut%WaveAcc2S(:,ii,jj,kk,2) = WaveAcc2ySumT1(:) + 2.0_SiKi * WaveAcc2ySumT2(:) ! y-component of acceleration + InitOut%WaveAcc2S(:,ii,jj,kk,3) = WaveAcc2zSumT1(:) + 2.0_SiKi * WaveAcc2zSumT2(:) ! z-component of acceleration - InitOut%WaveDynP2S(:,WaveKinPrimeMap(I)) = WaveDynP2SumT1(:) + 2.0_SiKi * WaveDynP2SumT2(:) ! Dynamic pressure + InitOut%WaveDynP2S(:,ii,jj,kk) = WaveDynP2SumT1(:) + 2.0_SiKi * WaveDynP2SumT2(:) ! Dynamic pressure ! Copy the first point to the last to make it easier. - InitOut%WaveVel2S(InitInp%NStepWave,WaveKinPrimeMap(I),:) = InitOut%WaveVel2S(0,WaveKinPrimeMap(I),:) - InitOut%WaveAcc2S(InitInp%NStepWave,WaveKinPrimeMap(I),:) = InitOut%WaveAcc2S(0,WaveKinPrimeMap(I),:) - InitOut%WaveDynP2S(InitInp%NStepWave,WaveKinPrimeMap(I)) = InitOut%WaveDynP2S(0,WaveKinPrimeMap(I)) + InitOut%WaveVel2S(InitInp%NStepWave,ii,jj,kk,:) = InitOut%WaveVel2S(0,ii,jj,kk,:) + InitOut%WaveAcc2S(InitInp%NStepWave,ii,jj,kk,:) = InitOut%WaveAcc2S(0,ii,jj,kk,:) + InitOut%WaveDynP2S(InitInp%NStepWave,ii,jj,kk) = InitOut%WaveDynP2S(0,ii,jj,kk) ENDDO ! I=1,NWaveKin0Prime loop end @@ -1370,7 +1286,7 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, CALL ExitFFT(FFT_Data, ErrStatTmp) - CALL SetErrStat(ErrStatTmp,'Error occured while cleaning up after the FFTs.', ErrStat,ErrMsg,'Waves2_Init') + CALL SetErrStat(ErrStatTmp,'Error occured while cleaning up after the FFTs.', ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN @@ -1383,14 +1299,6 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, IF (ALLOCATED(TmpFreqSeries)) DEALLOCATE(TmpFreqSeries, STAT=ErrStatTmp) IF (ALLOCATED(TmpFreqSeries2)) DEALLOCATE(TmpFreqSeries2, STAT=ErrStatTmp) - - ! initialize dummy variables for the framework, so that compilers don't complain that the INTENT(OUT) variables have not been set: - u%DummyInput = 0.0_SiKi - x%DummyContState = 0.0_SiKi - xd%DummyDiscState = 0.0_SiKi - z%DummyConstrState = 0.0_SiKi - OtherState%DummyOtherState = 0_IntKi - RETURN @@ -2151,282 +2059,6 @@ END SUBROUTINE Waves2_Init - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is called at the end of the simulation. The purpose of this routine is to destroy any data that is leftover. If -!! we don't do this, we may leave memory tied up after the simulation ends. -!! To destroy the data, we call several routines that are generated by the FAST registry, so any issues with the destroy routines -!! should be addressed by the registry.exe which generates the Waves2_Types.f90 file. -!! -SUBROUTINE Waves2_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - TYPE(Waves2_InputType), INTENT(INOUT) :: u !< System inputs - TYPE(Waves2_ParameterType), INTENT(INOUT) :: p !< Parameters - TYPE(Waves2_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states - TYPE(Waves2_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states - TYPE(Waves2_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states - TYPE(Waves2_OtherStateType), INTENT(INOUT) :: OtherState !< Other states - TYPE(Waves2_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - - !> Place any last minute operations or calculations here. For Waves2, most calculations all performed - !! during the initialization, so there are no final calculations that need to be performed. - - - ! Close files here. The Waves2 module does not open any files, so there should be nothing to close. - - - !> Destroy the input data: - - CALL Waves2_DestroyInput( u, ErrStat, ErrMsg ) - - - !> Destroy the parameter data: - - CALL Waves2_DestroyParam( p, ErrStat, ErrMsg ) - - - !> Destroy the state data: - - CALL Waves2_DestroyContState( x, ErrStat, ErrMsg ) - CALL Waves2_DestroyDiscState( xd, ErrStat, ErrMsg ) - CALL Waves2_DestroyConstrState( z, ErrStat, ErrMsg ) - CALL Waves2_DestroyOtherState( OtherState, ErrStat, ErrMsg ) - - - !> Destroy the output data: - - CALL Waves2_DestroyOutput( y, ErrStat, ErrMsg ) - - -END SUBROUTINE Waves2_End - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> Loose coupling routine for solving constraint states, integrating continuous states, and updating discrete states. -!> Continuous, constraint, discrete, and other states are updated to values at t + Interval. -SUBROUTINE Waves2_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: t !< Current simulation time in seconds - INTEGER(IntKi), INTENT(IN ) :: n !< Current step of the simulation: t = n*Interval - TYPE(Waves2_InputType), INTENT(IN ) :: Inputs(:) !< Inputs at InputTimes - REAL(DbKi), INTENT(IN ) :: InputTimes(:) !< Times in seconds associated with Inputs - TYPE(Waves2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Waves2_ContinuousStateType), INTENT(INOUT) :: x !< Input: Continuous states at t; - !!Output: Continuous states at t + Interval - TYPE(Waves2_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at t; - !!Output: Discrete states at t + Interval - TYPE(Waves2_ConstraintStateType), INTENT(INOUT) :: z !< Input: Constraint states at t; - !!Output: Constraint states at t + Interval - TYPE(Waves2_OtherStateType), INTENT(INOUT) :: OtherState !< Input: Other states at t; - !!Output: Other states at t + Interval - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "Warning: No States to update in Waves2 module. *Waves2_UpdateStates was called*" - - -END SUBROUTINE Waves2_UpdateStates - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> Routine for computing outputs, used in both loose and tight coupling. -!! The Waves2 module second order wave kinematic corrections are processed at initialization and passed to other modules (such as -!! Morrison) for processing. As a result, there is nothing that needs to be calculated by the CalcOutput routine other than the -!! WriteOutput values at each timestep. -SUBROUTINE Waves2_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(Waves2_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Waves2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Waves2_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(Waves2_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(Waves2_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(Waves2_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(Waves2_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh - !! connectivity information does not have to be recalculated) - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - - ! Local Variables: - INTEGER(IntKi) :: I ! Generic index - REAL(SiKi) :: WaveElev2Temp(p%NWaveElev) - REAL(ReKi) :: AllOuts(MaxWaves2Outputs) - - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "" - - - - - ! Abort if the Waves2 module did not calculate anything - - IF ( .NOT. ALLOCATED ( p%WaveElev2 ) ) RETURN - IF ( p%NumOuts < 1 ) RETURN - - - DO I=1,p%NWaveElev - WaveElev2Temp(I) = InterpWrappedStpReal ( REAL(Time, SiKi), p%WaveTime(:), p%WaveElev2(:,I), & - m%LastIndWave, p%NStepWave + 1 ) - ENDDO - - ! Map the calculated results into the AllOuts Array - CALL Wvs2Out_MapOutputs(Time, y, p%NWaveElev, WaveElev2Temp, AllOuts, ErrStat, ErrMsg) - - - - ! Put the output data in the OutData array - DO I = 1,p%NumOuts - y%WriteOutput(I) = p%OutParam(I)%SignM * AllOuts( p%OutParam(I)%Indx ) - END DO - - - -END SUBROUTINE Waves2_CalcOutput - - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is required for the FAST framework, but is not actually needed for this module. -!! In the framework, this routine calculates the derivative of the continuous states. -!! As this routine is not necessary in the Waves2 module, it simply issues a warning and returns. -!! @note A few values will be set so that compilers are happy, but nothing of value is done. -SUBROUTINE Waves2_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(Waves2_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Waves2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Waves2_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(Waves2_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(Waves2_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(Waves2_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - TYPE(Waves2_ContinuousStateType), INTENT( OUT) :: dxdt !< Continuous state derivatives at Time - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "Warning: No States to take derivative of in Waves2 module. *Waves2::CalcContStateDeriv was called. It "// & - "is not necessary in the Waves2 module, so it does nothing.*" - - - ! Compute the first time derivatives of the continuous states here: None to calculate, so no code here. - - ! Dummy output value for dxdt -- this is only here to prevent the compiler from complaining. - dxdt%DummyContState = 0.0_SiKi - - -END SUBROUTINE Waves2_CalcContStateDeriv - - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is required for the FAST framework, but is not actually needed for this module. -!! In the framework, this routine is used to update discrete states, by -!! So, this routine will simply issue a warning and return. -SUBROUTINE Waves2_UpdateDiscState( Time, n, u, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - INTEGER(IntKi), INTENT(IN ) :: n !< Current step of the simulation: t = n*Interval - TYPE(Waves2_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Waves2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Waves2_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(Waves2_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at Time; - !! Output: Discrete states at Time + Interval - TYPE(Waves2_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(Waves2_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "Warning: No Discrete States to update in Waves2 module. *Waves2::UpdateDiscState was called. It is not "// & - "necessary in the Waves2 module, so it does nothing.*" - - ! Code to update the discrete states would live here, but there are no discrete states to update, hence no code. - - -END SUBROUTINE Waves2_UpdateDiscState - - - - -!---------------------------------------------------------------------------------------------------------------------------------- -!> This routine is required for the FAST framework, but is not actually needed for this module. -!! In the framework, this is a tight coupling routine for solving for the residual of the constraint state equations -!! So, this routine will simply issue a warning and return. -!! @note A few values will be set so that compilers are happy, but nothing of value is done. -SUBROUTINE Waves2_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m, z_residual, ErrStat, ErrMsg ) -!.................................................................................................................................. - - REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds - TYPE(Waves2_InputType), INTENT(IN ) :: u !< Inputs at Time - TYPE(Waves2_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(Waves2_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(Waves2_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(Waves2_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time (possibly a guess) - TYPE(Waves2_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(Waves2_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables - TYPE(Waves2_ConstraintStateType), INTENT( OUT) :: z_residual !< Residual of the constraint state equations using - !! the input values described above - INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation - CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Initialize ErrStat - - ErrStat = ErrID_None - ErrMsg = "Warning: No States in Waves2 module. *Waves2::CalcConstrStateResidual was called. It is not needed in "//& - "the Waves2 module, so it does nothing useful." - - - - ! Solve for the constraint states here: Since there are no constraint states to solve for in Waves2, there is no code here. - - z_residual%DummyConstrState = 0.0_SiKi ! This exists just so that we can make the compiler happy. - -END SUBROUTINE Waves2_CalcConstrStateResidual - - - !---------------------------------------------------------------------------------------------------------------------------------- END MODULE Waves2 diff --git a/modules/seastate/src/Waves2.txt b/modules/seastate/src/Waves2.txt new file mode 100644 index 0000000000..74899068d3 --- /dev/null +++ b/modules/seastate/src/Waves2.txt @@ -0,0 +1,69 @@ +################################################################################################################################### +# Registry for Waves2 in the FAST Modularization Framework +# This Registry file is used to create MODULE Waves2_Types which contains all of the user-defined types needed in Waves2. +# It also contains copy, destroy, pack, and unpack routines associated with each defined data types. +# See NWTC Programmer's Handbook for further information on the format/contents of this file. +# +# Entries are of the form +# +# +# Use ^ as a shortcut for the value in the same column from the previous line. +################################################################################################################################### + +# ...... Include files (definitions from NWTC Library) ............................................................................ +# make sure that the file name does not have any trailing white spaces! +include Registry_NWTC_Library.txt + +# ..... Initialization data ....................................................................................................... +# Define inputs that the initialization routine may need here: +# e.g., the name of the input file, the file root name,etc. +# +typedef Waves2/Waves2 InitInputType ReKi Gravity - - - "Gravitational acceleration" (m/s^2) +typedef ^ ^ ReKi WtrDens - - - "Water density" (kg/m^3) +typedef ^ ^ ReKi WtrDpth - - - "Water depth" (meters) + +typedef ^ ^ INTEGER NStepWave - - - "Total number of frequency components = total number of time steps in the incident wave" - +typedef ^ ^ INTEGER NStepWave2 - - - "NStepWave / 2" - +typedef ^ ^ SiKi WaveDOmega - - - "Frequency step for incident wave calculations" (rad/s) + +typedef ^ ^ INTEGER WaveStMod - - - "Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching}" - + +typedef ^ ^ LOGICAL WaveMultiDir - - - "Indicates the waves are multidirectional -- set by HydroDyn_Input" - +typedef ^ ^ SiKi WaveDirArr {*} - - "Wave direction array. Each frequency has a unique direction of WaveNDir > 1" (degrees) +typedef ^ ^ SiKi WaveElevC0 {*}{*} - - "Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part" (meters) +typedef ^ ^ SiKi WaveTime {*} - - "Simulation times at which the instantaneous second order loads associated with the incident waves are determined" sec + +typedef ^ ^ integer nGrid 3 - - "Grid dimensions" +typedef ^ ^ INTEGER NWaveElevGrid - - - "Number of grid points where the incident wave elevations can be output" - +typedef ^ ^ INTEGER NWaveKinGrid - - - "Number of grid points where the incident wave kinematics will be computed" - +typedef ^ ^ SiKi WaveKinGridxi {:} - - "xi-coordinates for grid points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinGridyi {:} - - "yi-coordinates for grid points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinGridzi {:} - - "zi-coordinates for grid points where the incident wave kinematics will be computed; these are relative to the mean sea level" (meters) + +typedef ^ ^ LOGICAL WvDiffQTFF - - - "Full difference QTF second order forces flag" (-) +typedef ^ ^ LOGICAL WvSumQTFF - - - "Full sum QTF second order forces flag" (-) + +typedef ^ ^ SiKi WvLowCOffD - - - "Minimum frequency used in the difference methods [Ignored if all difference methods = 0]" (rad/s) +typedef ^ ^ SiKi WvHiCOffD - - - "Maximum frequency used in the difference methods [Ignored if all difference methods = 0]" (rad/s) +typedef ^ ^ SiKi WvLowCOffS - - - "Minimum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) +typedef ^ ^ SiKi WvHiCOffS - - - "Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0]" (rad/s) + + +# Define outputs from the initialization routine here: +# +typedef ^ InitOutputType SiKi WaveAcc2D {:}{:}{:}{:}{:} - - "Instantaneous 2nd-order difference frequency correction for the acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi WaveDynP2D {:}{:}{:}{:} - - "Instantaneous 2nd-order difference frequency correction for the dynamic pressure of incident waves , at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (N/m^2) +typedef ^ ^ SiKi WaveAcc2S {:}{:}{:}{:}{:} - - "Instantaneous 2nd-order sum frequency correction for the acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (m/s^2) +typedef ^ ^ SiKi WaveDynP2S {:}{:}{:}{:} - - "Instantaneous 2nd-order sum frequency correction for the dynamic pressure of incident waves , at each of the NWaveKinGrid points where the incident wave kinematics will be computed" (N/m^2) +typedef ^ ^ SiKi WaveVel2D {:}{:}{:}{:}{:} - - "Instantaneous 2nd-order difference frequency correction for the velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKinGrid points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) +typedef ^ ^ SiKi WaveVel2S {:}{:}{:}{:}{:} - - "Instantaneous 2nd-order sum frequency correction for the velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKinGrid points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.)" (m/s) +typedef ^ InitOutputType SiKi WaveElev2 {*}{*}{*} - - "Instantaneous elevation time-series of incident waves at each of the NWaveElevGrid points where the incident wave elevations can be output" (meters) + + + +# ..... Parameters ................................................................................................................ +# Define parameters here: +# Time step for integration of continuous states (if a fixed-step integrator is used) and update of discrete states: +typedef ^ ParameterType LOGICAL WvDiffQTFF - - - "Full difference QTF second order forces flag" (-) +typedef ^ ParameterType LOGICAL WvSumQTFF - - - "Full sum QTF second order forces flag" (-) + diff --git a/modules/seastate/src/Waves2_Types.f90 b/modules/seastate/src/Waves2_Types.f90 new file mode 100644 index 0000000000..10dcf8c2a1 --- /dev/null +++ b/modules/seastate/src/Waves2_Types.f90 @@ -0,0 +1,1612 @@ +!STARTOFREGISTRYGENERATEDFILE 'Waves2_Types.f90' +! +! WARNING This file is generated automatically by the FAST registry. +! Do not edit. Your changes to this file will be lost. +! +! FAST Registry +!********************************************************************************************************************************* +! Waves2_Types +!................................................................................................................................. +! This file is part of Waves2. +! +! Copyright (C) 2012-2016 National Renewable Energy Laboratory +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +! +! W A R N I N G : This file was automatically generated from the FAST registry. Changes made to this file may be lost. +! +!********************************************************************************************************************************* +!> This module contains the user-defined types needed in Waves2. It also contains copy, destroy, pack, and +!! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. +MODULE Waves2_Types +!--------------------------------------------------------------------------------------------------------------------------------- +USE NWTC_Library +IMPLICIT NONE +! ========= Waves2_InitInputType ======= + TYPE, PUBLIC :: Waves2_InitInputType + REAL(ReKi) :: Gravity !< Gravitational acceleration [(m/s^2)] + REAL(ReKi) :: WtrDens !< Water density [(kg/m^3)] + REAL(ReKi) :: WtrDpth !< Water depth [(meters)] + INTEGER(IntKi) :: NStepWave !< Total number of frequency components = total number of time steps in the incident wave [-] + INTEGER(IntKi) :: NStepWave2 !< NStepWave / 2 [-] + REAL(SiKi) :: WaveDOmega !< Frequency step for incident wave calculations [(rad/s)] + INTEGER(IntKi) :: WaveStMod !< Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} [-] + LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveDirArr => NULL() !< Wave direction array. Each frequency has a unique direction of WaveNDir > 1 [(degrees)] + REAL(SiKi) , DIMENSION(:,:), POINTER :: WaveElevC0 => NULL() !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part [(meters)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Simulation times at which the instantaneous second order loads associated with the incident waves are determined [sec] + INTEGER(IntKi) , DIMENSION(1:3) :: nGrid !< Grid dimensions [-] + INTEGER(IntKi) :: NWaveElevGrid !< Number of grid points where the incident wave elevations can be output [-] + INTEGER(IntKi) :: NWaveKinGrid !< Number of grid points where the incident wave kinematics will be computed [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinGridxi !< xi-coordinates for grid points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinGridyi !< yi-coordinates for grid points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinGridzi !< zi-coordinates for grid points where the incident wave kinematics will be computed; these are relative to the mean sea level [(meters)] + LOGICAL :: WvDiffQTFF !< Full difference QTF second order forces flag [(-)] + LOGICAL :: WvSumQTFF !< Full sum QTF second order forces flag [(-)] + REAL(SiKi) :: WvLowCOffD !< Minimum frequency used in the difference methods [Ignored if all difference methods = 0] [(rad/s)] + REAL(SiKi) :: WvHiCOffD !< Maximum frequency used in the difference methods [Ignored if all difference methods = 0] [(rad/s)] + REAL(SiKi) :: WvLowCOffS !< Minimum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] + REAL(SiKi) :: WvHiCOffS !< Maximum frequency used in the sum-QTF method [Ignored if SumQTF = 0] [(rad/s)] + END TYPE Waves2_InitInputType +! ======================= +! ========= Waves2_InitOutputType ======= + TYPE, PUBLIC :: Waves2_InitOutputType + REAL(SiKi) , DIMENSION(:,:,:,:,:), ALLOCATABLE :: WaveAcc2D !< Instantaneous 2nd-order difference frequency correction for the acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), ALLOCATABLE :: WaveDynP2D !< Instantaneous 2nd-order difference frequency correction for the dynamic pressure of incident waves , at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), ALLOCATABLE :: WaveAcc2S !< Instantaneous 2nd-order sum frequency correction for the acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), ALLOCATABLE :: WaveDynP2S !< Instantaneous 2nd-order sum frequency correction for the dynamic pressure of incident waves , at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), ALLOCATABLE :: WaveVel2D !< Instantaneous 2nd-order difference frequency correction for the velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKinGrid points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), ALLOCATABLE :: WaveVel2S !< Instantaneous 2nd-order sum frequency correction for the velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at each of the NWaveKinGrid points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Instantaneous elevation time-series of incident waves at each of the NWaveElevGrid points where the incident wave elevations can be output [(meters)] + END TYPE Waves2_InitOutputType +! ======================= +! ========= Waves2_ParameterType ======= + TYPE, PUBLIC :: Waves2_ParameterType + LOGICAL :: WvDiffQTFF !< Full difference QTF second order forces flag [(-)] + LOGICAL :: WvSumQTFF !< Full sum QTF second order forces flag [(-)] + END TYPE Waves2_ParameterType +! ======================= +CONTAINS + SUBROUTINE Waves2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(Waves2_InitInputType), INTENT(IN) :: SrcInitInputData + TYPE(Waves2_InitInputType), INTENT(INOUT) :: DstInitInputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyInitInput' +! + ErrStat = ErrID_None + ErrMsg = "" + DstInitInputData%Gravity = SrcInitInputData%Gravity + DstInitInputData%WtrDens = SrcInitInputData%WtrDens + DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth + DstInitInputData%NStepWave = SrcInitInputData%NStepWave + DstInitInputData%NStepWave2 = SrcInitInputData%NStepWave2 + DstInitInputData%WaveDOmega = SrcInitInputData%WaveDOmega + DstInitInputData%WaveStMod = SrcInitInputData%WaveStMod + DstInitInputData%WaveMultiDir = SrcInitInputData%WaveMultiDir +IF (ASSOCIATED(SrcInitInputData%WaveDirArr)) THEN + i1_l = LBOUND(SrcInitInputData%WaveDirArr,1) + i1_u = UBOUND(SrcInitInputData%WaveDirArr,1) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveDirArr)) THEN + ALLOCATE(DstInitInputData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveDirArr = SrcInitInputData%WaveDirArr +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveElevC0)) THEN + i1_l = LBOUND(SrcInitInputData%WaveElevC0,1) + i1_u = UBOUND(SrcInitInputData%WaveElevC0,1) + i2_l = LBOUND(SrcInitInputData%WaveElevC0,2) + i2_u = UBOUND(SrcInitInputData%WaveElevC0,2) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElevC0)) THEN + ALLOCATE(DstInitInputData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElevC0 = SrcInitInputData%WaveElevC0 +ENDIF +IF (ASSOCIATED(SrcInitInputData%WaveTime)) THEN + i1_l = LBOUND(SrcInitInputData%WaveTime,1) + i1_u = UBOUND(SrcInitInputData%WaveTime,1) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveTime)) THEN + ALLOCATE(DstInitInputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveTime = SrcInitInputData%WaveTime +ENDIF + DstInitInputData%nGrid = SrcInitInputData%nGrid + DstInitInputData%NWaveElevGrid = SrcInitInputData%NWaveElevGrid + DstInitInputData%NWaveKinGrid = SrcInitInputData%NWaveKinGrid +IF (ALLOCATED(SrcInitInputData%WaveKinGridxi)) THEN + i1_l = LBOUND(SrcInitInputData%WaveKinGridxi,1) + i1_u = UBOUND(SrcInitInputData%WaveKinGridxi,1) + IF (.NOT. ALLOCATED(DstInitInputData%WaveKinGridxi)) THEN + ALLOCATE(DstInitInputData%WaveKinGridxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinGridxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveKinGridxi = SrcInitInputData%WaveKinGridxi +ENDIF +IF (ALLOCATED(SrcInitInputData%WaveKinGridyi)) THEN + i1_l = LBOUND(SrcInitInputData%WaveKinGridyi,1) + i1_u = UBOUND(SrcInitInputData%WaveKinGridyi,1) + IF (.NOT. ALLOCATED(DstInitInputData%WaveKinGridyi)) THEN + ALLOCATE(DstInitInputData%WaveKinGridyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinGridyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveKinGridyi = SrcInitInputData%WaveKinGridyi +ENDIF +IF (ALLOCATED(SrcInitInputData%WaveKinGridzi)) THEN + i1_l = LBOUND(SrcInitInputData%WaveKinGridzi,1) + i1_u = UBOUND(SrcInitInputData%WaveKinGridzi,1) + IF (.NOT. ALLOCATED(DstInitInputData%WaveKinGridzi)) THEN + ALLOCATE(DstInitInputData%WaveKinGridzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinGridzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveKinGridzi = SrcInitInputData%WaveKinGridzi +ENDIF + DstInitInputData%WvDiffQTFF = SrcInitInputData%WvDiffQTFF + DstInitInputData%WvSumQTFF = SrcInitInputData%WvSumQTFF + DstInitInputData%WvLowCOffD = SrcInitInputData%WvLowCOffD + DstInitInputData%WvHiCOffD = SrcInitInputData%WvHiCOffD + DstInitInputData%WvLowCOffS = SrcInitInputData%WvLowCOffS + DstInitInputData%WvHiCOffS = SrcInitInputData%WvHiCOffS + END SUBROUTINE Waves2_CopyInitInput + + SUBROUTINE Waves2_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(Waves2_InitInputType), INTENT(INOUT) :: InitInputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyInitInput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +IF (ASSOCIATED(InitInputData%WaveDirArr)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveDirArr) + InitInputData%WaveDirArr => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveElevC0) + InitInputData%WaveElevC0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() +ENDIF +IF (ALLOCATED(InitInputData%WaveKinGridxi)) THEN + DEALLOCATE(InitInputData%WaveKinGridxi) +ENDIF +IF (ALLOCATED(InitInputData%WaveKinGridyi)) THEN + DEALLOCATE(InitInputData%WaveKinGridyi) +ENDIF +IF (ALLOCATED(InitInputData%WaveKinGridzi)) THEN + DEALLOCATE(InitInputData%WaveKinGridzi) +ENDIF + END SUBROUTINE Waves2_DestroyInitInput + + SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(Waves2_InitInputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackInitInput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Re_BufSz = Re_BufSz + 1 ! Gravity + Re_BufSz = Re_BufSz + 1 ! WtrDens + Re_BufSz = Re_BufSz + 1 ! WtrDpth + Int_BufSz = Int_BufSz + 1 ! NStepWave + Int_BufSz = Int_BufSz + 1 ! NStepWave2 + Re_BufSz = Re_BufSz + 1 ! WaveDOmega + Int_BufSz = Int_BufSz + 1 ! WaveStMod + Int_BufSz = Int_BufSz + 1 ! WaveMultiDir + Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no + IF ( ASSOCIATED(InData%WaveDirArr) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no + IF ( ASSOCIATED(InData%WaveElevC0) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no + IF ( ASSOCIATED(InData%WaveTime) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime + END IF + Int_BufSz = Int_BufSz + SIZE(InData%nGrid) ! nGrid + Int_BufSz = Int_BufSz + 1 ! NWaveElevGrid + Int_BufSz = Int_BufSz + 1 ! NWaveKinGrid + Int_BufSz = Int_BufSz + 1 ! WaveKinGridxi allocated yes/no + IF ( ALLOCATED(InData%WaveKinGridxi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinGridxi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinGridxi) ! WaveKinGridxi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveKinGridyi allocated yes/no + IF ( ALLOCATED(InData%WaveKinGridyi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinGridyi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinGridyi) ! WaveKinGridyi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveKinGridzi allocated yes/no + IF ( ALLOCATED(InData%WaveKinGridzi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinGridzi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinGridzi) ! WaveKinGridzi + END IF + Int_BufSz = Int_BufSz + 1 ! WvDiffQTFF + Int_BufSz = Int_BufSz + 1 ! WvSumQTFF + Re_BufSz = Re_BufSz + 1 ! WvLowCOffD + Re_BufSz = Re_BufSz + 1 ! WvHiCOffD + Re_BufSz = Re_BufSz + 1 ! WvLowCOffS + Re_BufSz = Re_BufSz + 1 ! WvHiCOffS + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + ReKiBuf(Re_Xferred) = InData%Gravity + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WtrDens + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WtrDpth + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave2 + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDOmega + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveStMod + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ASSOCIATED(InData%WaveDirArr) ) 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%WaveDirArr,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDirArr,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveDirArr,1), UBOUND(InData%WaveDirArr,1) + ReKiBuf(Re_Xferred) = InData%WaveDirArr(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) 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%WaveElevC0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%WaveElevC0,2), UBOUND(InData%WaveElevC0,2) + DO i1 = LBOUND(InData%WaveElevC0,1), UBOUND(InData%WaveElevC0,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC0(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) 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%WaveTime,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) + ReKiBuf(Re_Xferred) = InData%WaveTime(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + DO i1 = LBOUND(InData%nGrid,1), UBOUND(InData%nGrid,1) + IntKiBuf(Int_Xferred) = InData%nGrid(i1) + Int_Xferred = Int_Xferred + 1 + END DO + IntKiBuf(Int_Xferred) = InData%NWaveElevGrid + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NWaveKinGrid + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveKinGridxi) ) 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%WaveKinGridxi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinGridxi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinGridxi,1), UBOUND(InData%WaveKinGridxi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinGridxi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveKinGridyi) ) 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%WaveKinGridyi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinGridyi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinGridyi,1), UBOUND(InData%WaveKinGridyi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinGridyi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveKinGridzi) ) 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%WaveKinGridzi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinGridzi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinGridzi,1), UBOUND(InData%WaveKinGridzi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinGridzi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IntKiBuf(Int_Xferred) = TRANSFER(InData%WvDiffQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%WvSumQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvLowCOffD + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOffD + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvLowCOffS + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOffS + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE Waves2_PackInitInput + + SUBROUTINE Waves2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(Waves2_InitInputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackInitInput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%Gravity = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%WtrDens = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%WtrDpth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%NStepWave = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NStepWave2 = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveDOmega = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveStMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveMultiDir = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveMultiDir) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDirArr 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 (ASSOCIATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) + ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveDirArr,1), UBOUND(OutData%WaveDirArr,1) + OutData%WaveDirArr(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) + ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%WaveElevC0,2), UBOUND(OutData%WaveElevC0,2) + DO i1 = LBOUND(OutData%WaveElevC0,1), UBOUND(OutData%WaveElevC0,1) + OutData%WaveElevC0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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 (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) + OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + i1_l = LBOUND(OutData%nGrid,1) + i1_u = UBOUND(OutData%nGrid,1) + DO i1 = LBOUND(OutData%nGrid,1), UBOUND(OutData%nGrid,1) + OutData%nGrid(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + OutData%NWaveElevGrid = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NWaveKinGrid = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinGridxi 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%WaveKinGridxi)) DEALLOCATE(OutData%WaveKinGridxi) + ALLOCATE(OutData%WaveKinGridxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinGridxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinGridxi,1), UBOUND(OutData%WaveKinGridxi,1) + OutData%WaveKinGridxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinGridyi 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%WaveKinGridyi)) DEALLOCATE(OutData%WaveKinGridyi) + ALLOCATE(OutData%WaveKinGridyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinGridyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinGridyi,1), UBOUND(OutData%WaveKinGridyi,1) + OutData%WaveKinGridyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinGridzi 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%WaveKinGridzi)) DEALLOCATE(OutData%WaveKinGridzi) + ALLOCATE(OutData%WaveKinGridzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinGridzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinGridzi,1), UBOUND(OutData%WaveKinGridzi,1) + OutData%WaveKinGridzi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%WvDiffQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%WvDiffQTFF) + Int_Xferred = Int_Xferred + 1 + OutData%WvSumQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%WvSumQTFF) + Int_Xferred = Int_Xferred + 1 + OutData%WvLowCOffD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOffD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvLowCOffS = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOffS = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE Waves2_UnPackInitInput + + SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(Waves2_InitOutputType), INTENT(IN) :: SrcInitOutputData + TYPE(Waves2_InitOutputType), INTENT(INOUT) :: DstInitOutputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyInitOutput' +! + ErrStat = ErrID_None + ErrMsg = "" +IF (ALLOCATED(SrcInitOutputData%WaveAcc2D)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveAcc2D,1) + i1_u = UBOUND(SrcInitOutputData%WaveAcc2D,1) + i2_l = LBOUND(SrcInitOutputData%WaveAcc2D,2) + i2_u = UBOUND(SrcInitOutputData%WaveAcc2D,2) + i3_l = LBOUND(SrcInitOutputData%WaveAcc2D,3) + i3_u = UBOUND(SrcInitOutputData%WaveAcc2D,3) + i4_l = LBOUND(SrcInitOutputData%WaveAcc2D,4) + i4_u = UBOUND(SrcInitOutputData%WaveAcc2D,4) + i5_l = LBOUND(SrcInitOutputData%WaveAcc2D,5) + i5_u = UBOUND(SrcInitOutputData%WaveAcc2D,5) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc2D)) THEN + ALLOCATE(DstInitOutputData%WaveAcc2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc2D.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveAcc2D = SrcInitOutputData%WaveAcc2D +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveDynP2D)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveDynP2D,1) + i1_u = UBOUND(SrcInitOutputData%WaveDynP2D,1) + i2_l = LBOUND(SrcInitOutputData%WaveDynP2D,2) + i2_u = UBOUND(SrcInitOutputData%WaveDynP2D,2) + i3_l = LBOUND(SrcInitOutputData%WaveDynP2D,3) + i3_u = UBOUND(SrcInitOutputData%WaveDynP2D,3) + i4_l = LBOUND(SrcInitOutputData%WaveDynP2D,4) + i4_u = UBOUND(SrcInitOutputData%WaveDynP2D,4) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP2D)) THEN + ALLOCATE(DstInitOutputData%WaveDynP2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP2D.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveDynP2D = SrcInitOutputData%WaveDynP2D +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveAcc2S)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveAcc2S,1) + i1_u = UBOUND(SrcInitOutputData%WaveAcc2S,1) + i2_l = LBOUND(SrcInitOutputData%WaveAcc2S,2) + i2_u = UBOUND(SrcInitOutputData%WaveAcc2S,2) + i3_l = LBOUND(SrcInitOutputData%WaveAcc2S,3) + i3_u = UBOUND(SrcInitOutputData%WaveAcc2S,3) + i4_l = LBOUND(SrcInitOutputData%WaveAcc2S,4) + i4_u = UBOUND(SrcInitOutputData%WaveAcc2S,4) + i5_l = LBOUND(SrcInitOutputData%WaveAcc2S,5) + i5_u = UBOUND(SrcInitOutputData%WaveAcc2S,5) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc2S)) THEN + ALLOCATE(DstInitOutputData%WaveAcc2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc2S.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveAcc2S = SrcInitOutputData%WaveAcc2S +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveDynP2S)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveDynP2S,1) + i1_u = UBOUND(SrcInitOutputData%WaveDynP2S,1) + i2_l = LBOUND(SrcInitOutputData%WaveDynP2S,2) + i2_u = UBOUND(SrcInitOutputData%WaveDynP2S,2) + i3_l = LBOUND(SrcInitOutputData%WaveDynP2S,3) + i3_u = UBOUND(SrcInitOutputData%WaveDynP2S,3) + i4_l = LBOUND(SrcInitOutputData%WaveDynP2S,4) + i4_u = UBOUND(SrcInitOutputData%WaveDynP2S,4) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP2S)) THEN + ALLOCATE(DstInitOutputData%WaveDynP2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP2S.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveDynP2S = SrcInitOutputData%WaveDynP2S +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveVel2D)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveVel2D,1) + i1_u = UBOUND(SrcInitOutputData%WaveVel2D,1) + i2_l = LBOUND(SrcInitOutputData%WaveVel2D,2) + i2_u = UBOUND(SrcInitOutputData%WaveVel2D,2) + i3_l = LBOUND(SrcInitOutputData%WaveVel2D,3) + i3_u = UBOUND(SrcInitOutputData%WaveVel2D,3) + i4_l = LBOUND(SrcInitOutputData%WaveVel2D,4) + i4_u = UBOUND(SrcInitOutputData%WaveVel2D,4) + i5_l = LBOUND(SrcInitOutputData%WaveVel2D,5) + i5_u = UBOUND(SrcInitOutputData%WaveVel2D,5) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel2D)) THEN + ALLOCATE(DstInitOutputData%WaveVel2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel2D.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveVel2D = SrcInitOutputData%WaveVel2D +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveVel2S)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveVel2S,1) + i1_u = UBOUND(SrcInitOutputData%WaveVel2S,1) + i2_l = LBOUND(SrcInitOutputData%WaveVel2S,2) + i2_u = UBOUND(SrcInitOutputData%WaveVel2S,2) + i3_l = LBOUND(SrcInitOutputData%WaveVel2S,3) + i3_u = UBOUND(SrcInitOutputData%WaveVel2S,3) + i4_l = LBOUND(SrcInitOutputData%WaveVel2S,4) + i4_u = UBOUND(SrcInitOutputData%WaveVel2S,4) + i5_l = LBOUND(SrcInitOutputData%WaveVel2S,5) + i5_u = UBOUND(SrcInitOutputData%WaveVel2S,5) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel2S)) THEN + ALLOCATE(DstInitOutputData%WaveVel2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel2S.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveVel2S = SrcInitOutputData%WaveVel2S +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveElev2)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElev2,1) + i1_u = UBOUND(SrcInitOutputData%WaveElev2,1) + i2_l = LBOUND(SrcInitOutputData%WaveElev2,2) + i2_u = UBOUND(SrcInitOutputData%WaveElev2,2) + i3_l = LBOUND(SrcInitOutputData%WaveElev2,3) + i3_u = UBOUND(SrcInitOutputData%WaveElev2,3) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveElev2)) THEN + ALLOCATE(DstInitOutputData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElev2 = SrcInitOutputData%WaveElev2 +ENDIF + END SUBROUTINE Waves2_CopyInitOutput + + SUBROUTINE Waves2_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(Waves2_InitOutputType), INTENT(INOUT) :: InitOutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyInitOutput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +IF (ALLOCATED(InitOutputData%WaveAcc2D)) THEN + DEALLOCATE(InitOutputData%WaveAcc2D) +ENDIF +IF (ALLOCATED(InitOutputData%WaveDynP2D)) THEN + DEALLOCATE(InitOutputData%WaveDynP2D) +ENDIF +IF (ALLOCATED(InitOutputData%WaveAcc2S)) THEN + DEALLOCATE(InitOutputData%WaveAcc2S) +ENDIF +IF (ALLOCATED(InitOutputData%WaveDynP2S)) THEN + DEALLOCATE(InitOutputData%WaveDynP2S) +ENDIF +IF (ALLOCATED(InitOutputData%WaveVel2D)) THEN + DEALLOCATE(InitOutputData%WaveVel2D) +ENDIF +IF (ALLOCATED(InitOutputData%WaveVel2S)) THEN + DEALLOCATE(InitOutputData%WaveVel2S) +ENDIF +IF (ASSOCIATED(InitOutputData%WaveElev2)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveElev2) + InitOutputData%WaveElev2 => NULL() +ENDIF + END SUBROUTINE Waves2_DestroyInitOutput + + SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(Waves2_InitOutputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackInitOutput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1 ! WaveAcc2D allocated yes/no + IF ( ALLOCATED(InData%WaveAcc2D) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAcc2D upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc2D) ! WaveAcc2D + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDynP2D allocated yes/no + IF ( ALLOCATED(InData%WaveDynP2D) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveDynP2D upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP2D) ! WaveDynP2D + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAcc2S allocated yes/no + IF ( ALLOCATED(InData%WaveAcc2S) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAcc2S upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc2S) ! WaveAcc2S + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDynP2S allocated yes/no + IF ( ALLOCATED(InData%WaveDynP2S) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveDynP2S upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP2S) ! WaveDynP2S + END IF + Int_BufSz = Int_BufSz + 1 ! WaveVel2D allocated yes/no + IF ( ALLOCATED(InData%WaveVel2D) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveVel2D upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveVel2D) ! WaveVel2D + END IF + Int_BufSz = Int_BufSz + 1 ! WaveVel2S allocated yes/no + IF ( ALLOCATED(InData%WaveVel2S) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveVel2S upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveVel2S) ! WaveVel2S + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no + IF ( ASSOCIATED(InData%WaveElev2) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev2 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev2) ! WaveElev2 + END IF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + IF ( .NOT. ALLOCATED(InData%WaveAcc2D) ) 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%WaveAcc2D,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2D,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2D,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2D,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2D,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAcc2D,5), UBOUND(InData%WaveAcc2D,5) + DO i4 = LBOUND(InData%WaveAcc2D,4), UBOUND(InData%WaveAcc2D,4) + DO i3 = LBOUND(InData%WaveAcc2D,3), UBOUND(InData%WaveAcc2D,3) + DO i2 = LBOUND(InData%WaveAcc2D,2), UBOUND(InData%WaveAcc2D,2) + DO i1 = LBOUND(InData%WaveAcc2D,1), UBOUND(InData%WaveAcc2D,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc2D(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveDynP2D) ) 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%WaveDynP2D,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2D,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2D,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2D,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2D,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2D,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2D,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2D,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%WaveDynP2D,4), UBOUND(InData%WaveDynP2D,4) + DO i3 = LBOUND(InData%WaveDynP2D,3), UBOUND(InData%WaveDynP2D,3) + DO i2 = LBOUND(InData%WaveDynP2D,2), UBOUND(InData%WaveDynP2D,2) + DO i1 = LBOUND(InData%WaveDynP2D,1), UBOUND(InData%WaveDynP2D,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP2D(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveAcc2S) ) 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%WaveAcc2S,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2S,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2S,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2S,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc2S,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2S,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAcc2S,5), UBOUND(InData%WaveAcc2S,5) + DO i4 = LBOUND(InData%WaveAcc2S,4), UBOUND(InData%WaveAcc2S,4) + DO i3 = LBOUND(InData%WaveAcc2S,3), UBOUND(InData%WaveAcc2S,3) + DO i2 = LBOUND(InData%WaveAcc2S,2), UBOUND(InData%WaveAcc2S,2) + DO i1 = LBOUND(InData%WaveAcc2S,1), UBOUND(InData%WaveAcc2S,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc2S(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveDynP2S) ) 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%WaveDynP2S,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2S,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2S,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2S,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2S,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2S,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP2S,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP2S,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%WaveDynP2S,4), UBOUND(InData%WaveDynP2S,4) + DO i3 = LBOUND(InData%WaveDynP2S,3), UBOUND(InData%WaveDynP2S,3) + DO i2 = LBOUND(InData%WaveDynP2S,2), UBOUND(InData%WaveDynP2S,2) + DO i1 = LBOUND(InData%WaveDynP2S,1), UBOUND(InData%WaveDynP2S,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP2S(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveVel2D) ) 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%WaveVel2D,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2D,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2D,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2D,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2D,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2D,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveVel2D,5), UBOUND(InData%WaveVel2D,5) + DO i4 = LBOUND(InData%WaveVel2D,4), UBOUND(InData%WaveVel2D,4) + DO i3 = LBOUND(InData%WaveVel2D,3), UBOUND(InData%WaveVel2D,3) + DO i2 = LBOUND(InData%WaveVel2D,2), UBOUND(InData%WaveVel2D,2) + DO i1 = LBOUND(InData%WaveVel2D,1), UBOUND(InData%WaveVel2D,1) + ReKiBuf(Re_Xferred) = InData%WaveVel2D(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveVel2S) ) 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%WaveVel2S,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveVel2S,5), UBOUND(InData%WaveVel2S,5) + DO i4 = LBOUND(InData%WaveVel2S,4), UBOUND(InData%WaveVel2S,4) + DO i3 = LBOUND(InData%WaveVel2S,3), UBOUND(InData%WaveVel2S,3) + DO i2 = LBOUND(InData%WaveVel2S,2), UBOUND(InData%WaveVel2S,2) + DO i1 = LBOUND(InData%WaveVel2S,1), UBOUND(InData%WaveVel2S,1) + ReKiBuf(Re_Xferred) = InData%WaveVel2S(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElev2) ) 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%WaveElev2,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev2,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev2,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev2,3), UBOUND(InData%WaveElev2,3) + DO i2 = LBOUND(InData%WaveElev2,2), UBOUND(InData%WaveElev2,2) + DO i1 = LBOUND(InData%WaveElev2,1), UBOUND(InData%WaveElev2,1) + ReKiBuf(Re_Xferred) = InData%WaveElev2(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + END SUBROUTINE Waves2_PackInitOutput + + SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(Waves2_InitOutputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackInitOutput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc2D 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveAcc2D)) DEALLOCATE(OutData%WaveAcc2D) + ALLOCATE(OutData%WaveAcc2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc2D.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAcc2D,5), UBOUND(OutData%WaveAcc2D,5) + DO i4 = LBOUND(OutData%WaveAcc2D,4), UBOUND(OutData%WaveAcc2D,4) + DO i3 = LBOUND(OutData%WaveAcc2D,3), UBOUND(OutData%WaveAcc2D,3) + DO i2 = LBOUND(OutData%WaveAcc2D,2), UBOUND(OutData%WaveAcc2D,2) + DO i1 = LBOUND(OutData%WaveAcc2D,1), UBOUND(OutData%WaveAcc2D,1) + OutData%WaveAcc2D(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP2D 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveDynP2D)) DEALLOCATE(OutData%WaveDynP2D) + ALLOCATE(OutData%WaveDynP2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP2D.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveDynP2D,4), UBOUND(OutData%WaveDynP2D,4) + DO i3 = LBOUND(OutData%WaveDynP2D,3), UBOUND(OutData%WaveDynP2D,3) + DO i2 = LBOUND(OutData%WaveDynP2D,2), UBOUND(OutData%WaveDynP2D,2) + DO i1 = LBOUND(OutData%WaveDynP2D,1), UBOUND(OutData%WaveDynP2D,1) + OutData%WaveDynP2D(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc2S 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveAcc2S)) DEALLOCATE(OutData%WaveAcc2S) + ALLOCATE(OutData%WaveAcc2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc2S.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAcc2S,5), UBOUND(OutData%WaveAcc2S,5) + DO i4 = LBOUND(OutData%WaveAcc2S,4), UBOUND(OutData%WaveAcc2S,4) + DO i3 = LBOUND(OutData%WaveAcc2S,3), UBOUND(OutData%WaveAcc2S,3) + DO i2 = LBOUND(OutData%WaveAcc2S,2), UBOUND(OutData%WaveAcc2S,2) + DO i1 = LBOUND(OutData%WaveAcc2S,1), UBOUND(OutData%WaveAcc2S,1) + OutData%WaveAcc2S(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP2S 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveDynP2S)) DEALLOCATE(OutData%WaveDynP2S) + ALLOCATE(OutData%WaveDynP2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP2S.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveDynP2S,4), UBOUND(OutData%WaveDynP2S,4) + DO i3 = LBOUND(OutData%WaveDynP2S,3), UBOUND(OutData%WaveDynP2S,3) + DO i2 = LBOUND(OutData%WaveDynP2S,2), UBOUND(OutData%WaveDynP2S,2) + DO i1 = LBOUND(OutData%WaveDynP2S,1), UBOUND(OutData%WaveDynP2S,1) + OutData%WaveDynP2S(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel2D 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveVel2D)) DEALLOCATE(OutData%WaveVel2D) + ALLOCATE(OutData%WaveVel2D(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel2D.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveVel2D,5), UBOUND(OutData%WaveVel2D,5) + DO i4 = LBOUND(OutData%WaveVel2D,4), UBOUND(OutData%WaveVel2D,4) + DO i3 = LBOUND(OutData%WaveVel2D,3), UBOUND(OutData%WaveVel2D,3) + DO i2 = LBOUND(OutData%WaveVel2D,2), UBOUND(OutData%WaveVel2D,2) + DO i1 = LBOUND(OutData%WaveVel2D,1), UBOUND(OutData%WaveVel2D,1) + OutData%WaveVel2D(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel2S 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveVel2S)) DEALLOCATE(OutData%WaveVel2S) + ALLOCATE(OutData%WaveVel2S(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel2S.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveVel2S,5), UBOUND(OutData%WaveVel2S,5) + DO i4 = LBOUND(OutData%WaveVel2S,4), UBOUND(OutData%WaveVel2S,4) + DO i3 = LBOUND(OutData%WaveVel2S,3), UBOUND(OutData%WaveVel2S,3) + DO i2 = LBOUND(OutData%WaveVel2S,2), UBOUND(OutData%WaveVel2S,2) + DO i1 = LBOUND(OutData%WaveVel2S,1), UBOUND(OutData%WaveVel2S,1) + OutData%WaveVel2S(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev2 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) + ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev2.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev2,3), UBOUND(OutData%WaveElev2,3) + DO i2 = LBOUND(OutData%WaveElev2,2), UBOUND(OutData%WaveElev2,2) + DO i1 = LBOUND(OutData%WaveElev2,1), UBOUND(OutData%WaveElev2,1) + OutData%WaveElev2(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + END SUBROUTINE Waves2_UnPackInitOutput + + SUBROUTINE Waves2_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) + TYPE(Waves2_ParameterType), INTENT(IN) :: SrcParamData + TYPE(Waves2_ParameterType), INTENT(INOUT) :: DstParamData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_CopyParam' +! + ErrStat = ErrID_None + ErrMsg = "" + DstParamData%WvDiffQTFF = SrcParamData%WvDiffQTFF + DstParamData%WvSumQTFF = SrcParamData%WvSumQTFF + END SUBROUTINE Waves2_CopyParam + + SUBROUTINE Waves2_DestroyParam( ParamData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(Waves2_ParameterType), INTENT(INOUT) :: ParamData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_DestroyParam' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + + END SUBROUTINE Waves2_DestroyParam + + SUBROUTINE Waves2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(Waves2_ParameterType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_PackParam' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1 ! WvDiffQTFF + Int_BufSz = Int_BufSz + 1 ! WvSumQTFF + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + IntKiBuf(Int_Xferred) = TRANSFER(InData%WvDiffQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%WvSumQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE Waves2_PackParam + + SUBROUTINE Waves2_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(Waves2_ParameterType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves2_UnPackParam' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + OutData%WvDiffQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%WvDiffQTFF) + Int_Xferred = Int_Xferred + 1 + OutData%WvSumQTFF = TRANSFER(IntKiBuf(Int_Xferred), OutData%WvSumQTFF) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE Waves2_UnPackParam + +END MODULE Waves2_Types +!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 new file mode 100644 index 0000000000..e305d6f2f5 --- /dev/null +++ b/modules/seastate/src/Waves_Types.f90 @@ -0,0 +1,2210 @@ +!STARTOFREGISTRYGENERATEDFILE 'Waves_Types.f90' +! +! WARNING This file is generated automatically by the FAST registry. +! Do not edit. Your changes to this file will be lost. +! +! FAST Registry +!********************************************************************************************************************************* +! Waves_Types +!................................................................................................................................. +! This file is part of Waves. +! +! Copyright (C) 2012-2016 National Renewable Energy Laboratory +! +! Licensed under the Apache License, Version 2.0 (the "License"); +! you may not use this file except in compliance with the License. +! You may obtain a copy of the License at +! +! http://www.apache.org/licenses/LICENSE-2.0 +! +! Unless required by applicable law or agreed to in writing, software +! distributed under the License is distributed on an "AS IS" BASIS, +! WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +! See the License for the specific language governing permissions and +! limitations under the License. +! +! +! W A R N I N G : This file was automatically generated from the FAST registry. Changes made to this file may be lost. +! +!********************************************************************************************************************************* +!> This module contains the user-defined types needed in Waves. It also contains copy, destroy, pack, and +!! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. +MODULE Waves_Types +!--------------------------------------------------------------------------------------------------------------------------------- +USE NWTC_Library +IMPLICIT NONE +! ========= Waves_InitInputType ======= + TYPE, PUBLIC :: Waves_InitInputType + CHARACTER(1024) :: InputFile !< Name of the input file [-] + CHARACTER(1024) :: DirRoot !< The name of the root file including the full path. 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. [-] + CHARACTER(1024) :: WvKinFile !< The root name of user input wave kinematics files [-] + REAL(ReKi) :: Gravity !< Gravitational acceleration [(m/s^2)] + INTEGER(IntKi) , DIMENSION(1:3) :: nGrid !< Grid dimensions [-] + REAL(SiKi) :: WvLowCOff !< Low cut-off frequency or lower frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4] [(rad/s)] + REAL(SiKi) :: WvHiCOff !< High cut-off frequency or upper frequency limit of the wave spectrum beyond which the wave spectrum is zeroed. [used only when WaveMod=2,3,4] [(rad/s)] + REAL(SiKi) :: WaveDir !< Mean incident wave propagation heading direction [(degrees)] + INTEGER(IntKi) :: WaveNDir !< Number of wave directions [only used if WaveDirMod = 1] [Must be an odd number -- will be adjusted within the waves module] [(-)] + LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] + INTEGER(IntKi) :: WaveDirMod !< Directional wave spreading function {0: none, 1: COS2S} [only used if WaveMod=6] [-] + REAL(SiKi) :: WaveDirSpread !< Spreading coefficient [WaveMod=2,3,4 and WaveDirMod=1] [-] + REAL(SiKi) :: WaveDirRange !< Range of wave directions (full range: WaveDir +/- WaveDirRange/2) [only used if WaveMod=6] [(degrees)] + REAL(DbKi) :: WaveDT !< Time step for incident wave calculations [(sec)] + REAL(SiKi) :: WaveHs !< Significant wave height of incident waves [(meters)] + INTEGER(IntKi) :: WaveMod !< Incident wave kinematics model {0: none=still water, 1: plane progressive (regular), 2: JONSWAP/Pierson-Moskowitz spectrum (irregular), 3: white-noise spectrum, 4: user-defind spectrum from routine UserWaveSpctrm (irregular), 5: GH BLADED } [-] + CHARACTER(80) :: WaveModChr !< String to temporarially hold the value of the wave kinematics input line [-] + LOGICAL :: WaveNDAmp !< Flag for normally-distributed amplitudes in incident waves spectrum [flag] [-] + REAL(SiKi) :: WavePhase !< Specified phase for regular waves [(radians)] + REAL(SiKi) :: WavePkShp !< Peak shape parameter of incident wave spectrum [1.0 for Pierson-Moskowitz] [-] + CHARACTER(80) :: WavePkShpChr !< String to temporarially hold value of peak shape parameter input line [-] + INTEGER(IntKi) , DIMENSION(1:2) :: WaveSeed !< Random seeds of incident waves [-2147483648 to 2147483647] [-] + INTEGER(IntKi) :: WaveStMod !< Model for stretching incident wave kinematics to instantaneous free surface {0: none=no stretching, 1: vertical stretching, 2: extrapolation stretching, 3: Wheeler stretching} [-] + REAL(DbKi) :: WaveTMax !< Analysis time for incident wave calculations; the actual analysis time may be larger than this value in order for the maintain an effecient FFT [(sec)] + REAL(SiKi) :: WaveTp !< Peak spectral period of incident waves [(sec)] + REAL(ReKi) :: WtrDens !< Water density [(kg/m^3)] + REAL(ReKi) :: WtrDpth !< Water depth [(meters)] + INTEGER(IntKi) :: NWaveElevGrid !< Number of grid points where the incident wave elevations are computed (the XY grid point locations) [-] + INTEGER(IntKi) :: NWaveKinGrid !< Number of grid points where the incident wave kinematics will be computed [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinGridxi !< xi-coordinates for grid points where the incident wave kinematics will be computed (grid points); these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinGridyi !< yi-coordinates for grid points where the incident wave kinematics will be computed (grid points); these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinGridzi !< zi-coordinates for grid points where the incident wave kinematics will be computed (grid points); these are relative to the mean sea level [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: CurrVxi !< xi-component of the current velocity at elevation i [(m/s)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: CurrVyi !< yi-component of the current velocity at elevation i [(m/s)] + REAL(SiKi) :: PCurrVxiPz0 !< xi-component of the partial derivative of the current velocity at elevation near mean sea level [(m/s)] + REAL(SiKi) :: PCurrVyiPz0 !< yi-component of the partial derivative of the current velocity at elevation near mean sea level [(m/s)] + TYPE(NWTC_RandomNumber_ParameterType) :: RNG !< Parameters for the pseudo random number generator [-] + INTEGER(IntKi) :: ConstWaveMod !< Mode of the constrained wave [-] + REAL(SiKi) :: CrestHmax !< crest height or double the crest elevation [m] + REAL(SiKi) :: CrestTime !< time of the wave crest [sec] + REAL(SiKi) :: CrestXi !< xi-coordinate for the wave crest [m] + REAL(SiKi) :: CrestYi !< yi-coordinate for the wave crest [m] + REAL(SiKi) :: MCFD !< Diameter of members that will use the MacCamy-Fuchs diffraction model [-] + INTEGER(IntKi) :: WaveFieldMod !< Wave field handling (-) (switch) 0: use individual SeaState inputs without adjustment, 1: adjust wave phases based on turbine offsets from farm origin [-] + REAL(ReKi) :: PtfmLocationX !< Supplied by Driver: X coordinate of platform location in the wave field [m] + REAL(ReKi) :: PtfmLocationY !< Supplied by Driver: Y coordinate of platform location in the wave field [m] + END TYPE Waves_InitInputType +! ======================= +! ========= Waves_InitOutputType ======= + TYPE, PUBLIC :: Waves_InitOutputType + REAL(SiKi) , DIMENSION(:,:), POINTER :: WaveElevC0 => NULL() !< Discrete Fourier transform of the instantaneous elevation of incident waves at the platform reference point. First column is real part, second column is imaginary part [(meters)] + REAL(SiKi) , DIMENSION(:,:,:), ALLOCATABLE :: WaveElevC !< Discrete Fourier transform of the instantaneous elevation of incident waves at all grid points. First column is real part, second column is imaginary part [(meters)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveDirArr => NULL() !< Wave direction array. Each frequency has a unique direction of WaveNDir > 1 [(degrees)] + REAL(SiKi) :: WaveDirMin !< Minimum wave direction. [(degrees)] + REAL(SiKi) :: WaveDirMax !< Maximum wave direction. [(degrees)] + INTEGER(IntKi) :: WaveNDir !< Number of wave directions [only used if WaveDirMod = 1] [Must be an odd number -- will be adjusted within the waves module] [(-)] + REAL(SiKi) :: WaveDOmega !< Frequency step for incident wave calculations [(rad/s)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< Instantaneous dynamic pressure of incident waves , accounting for stretching, at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAccMCF => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, accounting for stretching, at each of the NWaveKinGrid points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< Instantaneous dynamic pressure of incident waves , at the location (xi,yi,0), at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(N/m^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAccMCF0 => NULL() !< Instantaneous acceleration of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKinGrid points where the incident wave kinematics will be computed [(m/s^2)] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< Instantaneous velocity of incident waves in the xi- (1), yi- (2), and zi- (3) directions, respectively, at the location (xi,yi,0), at each of the NWaveKinGrid points where the incident wave kinematics will be computed (The values include both the velocity of incident waves and the velocity of current.) [(m/s)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev => NULL() !< Instantaneous elevation time-series of incident waves at each of the XY grid points [(meters)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveElev0 !< Instantaneous elevation time-series of incident waves at the platform reference point [(meters)] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined [(sec)] + REAL(DbKi) :: WaveTMax !< Analysis time for incident wave calculations; the actual analysis time may be larger than this value in order for the maintain an effecient FFT [(sec)] + REAL(SiKi) :: RhoXg !< = WtrDens*Gravity [-] + INTEGER(IntKi) :: NStepWave !< Total number of frequency components = total number of time steps in the incident wave [-] + INTEGER(IntKi) :: NStepWave2 !< NStepWave / 2 [-] + END TYPE Waves_InitOutputType +! ======================= +CONTAINS + SUBROUTINE Waves_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(Waves_InitInputType), INTENT(IN) :: SrcInitInputData + TYPE(Waves_InitInputType), INTENT(INOUT) :: DstInitInputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyInitInput' +! + ErrStat = ErrID_None + ErrMsg = "" + DstInitInputData%InputFile = SrcInitInputData%InputFile + DstInitInputData%DirRoot = SrcInitInputData%DirRoot + DstInitInputData%WvKinFile = SrcInitInputData%WvKinFile + DstInitInputData%Gravity = SrcInitInputData%Gravity + DstInitInputData%nGrid = SrcInitInputData%nGrid + DstInitInputData%WvLowCOff = SrcInitInputData%WvLowCOff + DstInitInputData%WvHiCOff = SrcInitInputData%WvHiCOff + DstInitInputData%WaveDir = SrcInitInputData%WaveDir + DstInitInputData%WaveNDir = SrcInitInputData%WaveNDir + DstInitInputData%WaveMultiDir = SrcInitInputData%WaveMultiDir + DstInitInputData%WaveDirMod = SrcInitInputData%WaveDirMod + DstInitInputData%WaveDirSpread = SrcInitInputData%WaveDirSpread + DstInitInputData%WaveDirRange = SrcInitInputData%WaveDirRange + DstInitInputData%WaveDT = SrcInitInputData%WaveDT + DstInitInputData%WaveHs = SrcInitInputData%WaveHs + DstInitInputData%WaveMod = SrcInitInputData%WaveMod + DstInitInputData%WaveModChr = SrcInitInputData%WaveModChr + DstInitInputData%WaveNDAmp = SrcInitInputData%WaveNDAmp + DstInitInputData%WavePhase = SrcInitInputData%WavePhase + DstInitInputData%WavePkShp = SrcInitInputData%WavePkShp + DstInitInputData%WavePkShpChr = SrcInitInputData%WavePkShpChr + DstInitInputData%WaveSeed = SrcInitInputData%WaveSeed + DstInitInputData%WaveStMod = SrcInitInputData%WaveStMod + DstInitInputData%WaveTMax = SrcInitInputData%WaveTMax + DstInitInputData%WaveTp = SrcInitInputData%WaveTp + DstInitInputData%WtrDens = SrcInitInputData%WtrDens + DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth + DstInitInputData%NWaveElevGrid = SrcInitInputData%NWaveElevGrid + DstInitInputData%NWaveKinGrid = SrcInitInputData%NWaveKinGrid +IF (ALLOCATED(SrcInitInputData%WaveKinGridxi)) THEN + i1_l = LBOUND(SrcInitInputData%WaveKinGridxi,1) + i1_u = UBOUND(SrcInitInputData%WaveKinGridxi,1) + IF (.NOT. ALLOCATED(DstInitInputData%WaveKinGridxi)) THEN + ALLOCATE(DstInitInputData%WaveKinGridxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinGridxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveKinGridxi = SrcInitInputData%WaveKinGridxi +ENDIF +IF (ALLOCATED(SrcInitInputData%WaveKinGridyi)) THEN + i1_l = LBOUND(SrcInitInputData%WaveKinGridyi,1) + i1_u = UBOUND(SrcInitInputData%WaveKinGridyi,1) + IF (.NOT. ALLOCATED(DstInitInputData%WaveKinGridyi)) THEN + ALLOCATE(DstInitInputData%WaveKinGridyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinGridyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveKinGridyi = SrcInitInputData%WaveKinGridyi +ENDIF +IF (ALLOCATED(SrcInitInputData%WaveKinGridzi)) THEN + i1_l = LBOUND(SrcInitInputData%WaveKinGridzi,1) + i1_u = UBOUND(SrcInitInputData%WaveKinGridzi,1) + IF (.NOT. ALLOCATED(DstInitInputData%WaveKinGridzi)) THEN + ALLOCATE(DstInitInputData%WaveKinGridzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinGridzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveKinGridzi = SrcInitInputData%WaveKinGridzi +ENDIF +IF (ALLOCATED(SrcInitInputData%CurrVxi)) THEN + i1_l = LBOUND(SrcInitInputData%CurrVxi,1) + i1_u = UBOUND(SrcInitInputData%CurrVxi,1) + IF (.NOT. ALLOCATED(DstInitInputData%CurrVxi)) THEN + ALLOCATE(DstInitInputData%CurrVxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%CurrVxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%CurrVxi = SrcInitInputData%CurrVxi +ENDIF +IF (ALLOCATED(SrcInitInputData%CurrVyi)) THEN + i1_l = LBOUND(SrcInitInputData%CurrVyi,1) + i1_u = UBOUND(SrcInitInputData%CurrVyi,1) + IF (.NOT. ALLOCATED(DstInitInputData%CurrVyi)) THEN + ALLOCATE(DstInitInputData%CurrVyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%CurrVyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%CurrVyi = SrcInitInputData%CurrVyi +ENDIF + DstInitInputData%PCurrVxiPz0 = SrcInitInputData%PCurrVxiPz0 + DstInitInputData%PCurrVyiPz0 = SrcInitInputData%PCurrVyiPz0 + CALL NWTC_Library_Copynwtc_randomnumber_parametertype( SrcInitInputData%RNG, DstInitInputData%RNG, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + DstInitInputData%ConstWaveMod = SrcInitInputData%ConstWaveMod + DstInitInputData%CrestHmax = SrcInitInputData%CrestHmax + DstInitInputData%CrestTime = SrcInitInputData%CrestTime + DstInitInputData%CrestXi = SrcInitInputData%CrestXi + DstInitInputData%CrestYi = SrcInitInputData%CrestYi + DstInitInputData%MCFD = SrcInitInputData%MCFD + DstInitInputData%WaveFieldMod = SrcInitInputData%WaveFieldMod + DstInitInputData%PtfmLocationX = SrcInitInputData%PtfmLocationX + DstInitInputData%PtfmLocationY = SrcInitInputData%PtfmLocationY + END SUBROUTINE Waves_CopyInitInput + + SUBROUTINE Waves_DestroyInitInput( InitInputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(Waves_InitInputType), INTENT(INOUT) :: InitInputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyInitInput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +IF (ALLOCATED(InitInputData%WaveKinGridxi)) THEN + DEALLOCATE(InitInputData%WaveKinGridxi) +ENDIF +IF (ALLOCATED(InitInputData%WaveKinGridyi)) THEN + DEALLOCATE(InitInputData%WaveKinGridyi) +ENDIF +IF (ALLOCATED(InitInputData%WaveKinGridzi)) THEN + DEALLOCATE(InitInputData%WaveKinGridzi) +ENDIF +IF (ALLOCATED(InitInputData%CurrVxi)) THEN + DEALLOCATE(InitInputData%CurrVxi) +ENDIF +IF (ALLOCATED(InitInputData%CurrVyi)) THEN + DEALLOCATE(InitInputData%CurrVyi) +ENDIF + CALL NWTC_Library_Destroynwtc_randomnumber_parametertype( InitInputData%RNG, ErrStat2, ErrMsg2, DEALLOCATEpointers_local ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + END SUBROUTINE Waves_DestroyInitInput + + SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(Waves_InitInputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackInitInput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1*LEN(InData%InputFile) ! InputFile + Int_BufSz = Int_BufSz + 1*LEN(InData%DirRoot) ! DirRoot + Int_BufSz = Int_BufSz + 1*LEN(InData%WvKinFile) ! WvKinFile + Re_BufSz = Re_BufSz + 1 ! Gravity + Int_BufSz = Int_BufSz + SIZE(InData%nGrid) ! nGrid + Re_BufSz = Re_BufSz + 1 ! WvLowCOff + Re_BufSz = Re_BufSz + 1 ! WvHiCOff + Re_BufSz = Re_BufSz + 1 ! WaveDir + Int_BufSz = Int_BufSz + 1 ! WaveNDir + Int_BufSz = Int_BufSz + 1 ! WaveMultiDir + Int_BufSz = Int_BufSz + 1 ! WaveDirMod + Re_BufSz = Re_BufSz + 1 ! WaveDirSpread + Re_BufSz = Re_BufSz + 1 ! WaveDirRange + Db_BufSz = Db_BufSz + 1 ! WaveDT + Re_BufSz = Re_BufSz + 1 ! WaveHs + Int_BufSz = Int_BufSz + 1 ! WaveMod + Int_BufSz = Int_BufSz + 1*LEN(InData%WaveModChr) ! WaveModChr + Int_BufSz = Int_BufSz + 1 ! WaveNDAmp + Re_BufSz = Re_BufSz + 1 ! WavePhase + Re_BufSz = Re_BufSz + 1 ! WavePkShp + Int_BufSz = Int_BufSz + 1*LEN(InData%WavePkShpChr) ! WavePkShpChr + Int_BufSz = Int_BufSz + SIZE(InData%WaveSeed) ! WaveSeed + Int_BufSz = Int_BufSz + 1 ! WaveStMod + Db_BufSz = Db_BufSz + 1 ! WaveTMax + Re_BufSz = Re_BufSz + 1 ! WaveTp + Re_BufSz = Re_BufSz + 1 ! WtrDens + Re_BufSz = Re_BufSz + 1 ! WtrDpth + Int_BufSz = Int_BufSz + 1 ! NWaveElevGrid + Int_BufSz = Int_BufSz + 1 ! NWaveKinGrid + Int_BufSz = Int_BufSz + 1 ! WaveKinGridxi allocated yes/no + IF ( ALLOCATED(InData%WaveKinGridxi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinGridxi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinGridxi) ! WaveKinGridxi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveKinGridyi allocated yes/no + IF ( ALLOCATED(InData%WaveKinGridyi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinGridyi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinGridyi) ! WaveKinGridyi + END IF + Int_BufSz = Int_BufSz + 1 ! WaveKinGridzi allocated yes/no + IF ( ALLOCATED(InData%WaveKinGridzi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveKinGridzi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveKinGridzi) ! WaveKinGridzi + END IF + Int_BufSz = Int_BufSz + 1 ! CurrVxi allocated yes/no + IF ( ALLOCATED(InData%CurrVxi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! CurrVxi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%CurrVxi) ! CurrVxi + END IF + Int_BufSz = Int_BufSz + 1 ! CurrVyi allocated yes/no + IF ( ALLOCATED(InData%CurrVyi) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! CurrVyi upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%CurrVyi) ! CurrVyi + END IF + Re_BufSz = Re_BufSz + 1 ! PCurrVxiPz0 + Re_BufSz = Re_BufSz + 1 ! PCurrVyiPz0 + ! Allocate buffers for subtypes, if any (we'll get sizes from these) + Int_BufSz = Int_BufSz + 3 ! RNG: size of buffers for each call to pack subtype + CALL NWTC_Library_Packnwtc_randomnumber_parametertype( Re_Buf, Db_Buf, Int_Buf, InData%RNG, ErrStat2, ErrMsg2, .TRUE. ) ! RNG + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! RNG + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! RNG + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! RNG + Int_BufSz = Int_BufSz + SIZE( Int_Buf ) + DEALLOCATE(Int_Buf) + END IF + Int_BufSz = Int_BufSz + 1 ! ConstWaveMod + Re_BufSz = Re_BufSz + 1 ! CrestHmax + Re_BufSz = Re_BufSz + 1 ! CrestTime + Re_BufSz = Re_BufSz + 1 ! CrestXi + Re_BufSz = Re_BufSz + 1 ! CrestYi + Re_BufSz = Re_BufSz + 1 ! MCFD + Int_BufSz = Int_BufSz + 1 ! WaveFieldMod + Re_BufSz = Re_BufSz + 1 ! PtfmLocationX + Re_BufSz = Re_BufSz + 1 ! PtfmLocationY + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + DO I = 1, LEN(InData%InputFile) + IntKiBuf(Int_Xferred) = ICHAR(InData%InputFile(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(InData%DirRoot) + IntKiBuf(Int_Xferred) = ICHAR(InData%DirRoot(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(InData%WvKinFile) + IntKiBuf(Int_Xferred) = ICHAR(InData%WvKinFile(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + ReKiBuf(Re_Xferred) = InData%Gravity + Re_Xferred = Re_Xferred + 1 + DO i1 = LBOUND(InData%nGrid,1), UBOUND(InData%nGrid,1) + IntKiBuf(Int_Xferred) = InData%nGrid(i1) + Int_Xferred = Int_Xferred + 1 + END DO + ReKiBuf(Re_Xferred) = InData%WvLowCOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WvHiCOff + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDir + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveNDir + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveMultiDir, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveDirMod + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDirSpread + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDirRange + Re_Xferred = Re_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%WaveDT + Db_Xferred = Db_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveHs + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveMod + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(InData%WaveModChr) + IntKiBuf(Int_Xferred) = ICHAR(InData%WaveModChr(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + IntKiBuf(Int_Xferred) = TRANSFER(InData%WaveNDAmp, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WavePhase + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WavePkShp + Re_Xferred = Re_Xferred + 1 + DO I = 1, LEN(InData%WavePkShpChr) + IntKiBuf(Int_Xferred) = ICHAR(InData%WavePkShpChr(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO i1 = LBOUND(InData%WaveSeed,1), UBOUND(InData%WaveSeed,1) + IntKiBuf(Int_Xferred) = InData%WaveSeed(i1) + Int_Xferred = Int_Xferred + 1 + END DO + IntKiBuf(Int_Xferred) = InData%WaveStMod + Int_Xferred = Int_Xferred + 1 + DbKiBuf(Db_Xferred) = InData%WaveTMax + Db_Xferred = Db_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveTp + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WtrDens + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WtrDpth + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NWaveElevGrid + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NWaveKinGrid + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%WaveKinGridxi) ) 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%WaveKinGridxi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinGridxi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinGridxi,1), UBOUND(InData%WaveKinGridxi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinGridxi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveKinGridyi) ) 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%WaveKinGridyi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinGridyi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinGridyi,1), UBOUND(InData%WaveKinGridyi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinGridyi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveKinGridzi) ) 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%WaveKinGridzi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveKinGridzi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveKinGridzi,1), UBOUND(InData%WaveKinGridzi,1) + ReKiBuf(Re_Xferred) = InData%WaveKinGridzi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%CurrVxi) ) 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%CurrVxi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%CurrVxi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%CurrVxi,1), UBOUND(InData%CurrVxi,1) + ReKiBuf(Re_Xferred) = InData%CurrVxi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ALLOCATED(InData%CurrVyi) ) 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%CurrVyi,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%CurrVyi,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%CurrVyi,1), UBOUND(InData%CurrVyi,1) + ReKiBuf(Re_Xferred) = InData%CurrVyi(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + ReKiBuf(Re_Xferred) = InData%PCurrVxiPz0 + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%PCurrVyiPz0 + Re_Xferred = Re_Xferred + 1 + CALL NWTC_Library_Packnwtc_randomnumber_parametertype( Re_Buf, Db_Buf, Int_Buf, InData%RNG, ErrStat2, ErrMsg2, OnlySize ) ! RNG + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Re_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Re_Buf) > 0) ReKiBuf( Re_Xferred:Re_Xferred+SIZE(Re_Buf)-1 ) = Re_Buf + Re_Xferred = Re_Xferred + SIZE(Re_Buf) + DEALLOCATE(Re_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Db_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Db_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Db_Buf) > 0) DbKiBuf( Db_Xferred:Db_Xferred+SIZE(Db_Buf)-1 ) = Db_Buf + Db_Xferred = Db_Xferred + SIZE(Db_Buf) + DEALLOCATE(Db_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IF(ALLOCATED(Int_Buf)) THEN + IntKiBuf( Int_Xferred ) = SIZE(Int_Buf); Int_Xferred = Int_Xferred + 1 + IF (SIZE(Int_Buf) > 0) IntKiBuf( Int_Xferred:Int_Xferred+SIZE(Int_Buf)-1 ) = Int_Buf + Int_Xferred = Int_Xferred + SIZE(Int_Buf) + DEALLOCATE(Int_Buf) + ELSE + IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 + ENDIF + IntKiBuf(Int_Xferred) = InData%ConstWaveMod + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CrestHmax + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CrestTime + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CrestXi + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%CrestYi + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%MCFD + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveFieldMod + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%PtfmLocationX + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%PtfmLocationY + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE Waves_PackInitInput + + SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(Waves_InitInputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackInitInput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + DO I = 1, LEN(OutData%InputFile) + OutData%InputFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(OutData%DirRoot) + OutData%DirRoot(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + DO I = 1, LEN(OutData%WvKinFile) + OutData%WvKinFile(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%Gravity = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + i1_l = LBOUND(OutData%nGrid,1) + i1_u = UBOUND(OutData%nGrid,1) + DO i1 = LBOUND(OutData%nGrid,1), UBOUND(OutData%nGrid,1) + OutData%nGrid(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + OutData%WvLowCOff = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WvHiCOff = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveDir = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveNDir = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveMultiDir = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveMultiDir) + Int_Xferred = Int_Xferred + 1 + OutData%WaveDirMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveDirSpread = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveDirRange = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveDT = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + OutData%WaveHs = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + DO I = 1, LEN(OutData%WaveModChr) + OutData%WaveModChr(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + OutData%WaveNDAmp = TRANSFER(IntKiBuf(Int_Xferred), OutData%WaveNDAmp) + Int_Xferred = Int_Xferred + 1 + OutData%WavePhase = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WavePkShp = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + DO I = 1, LEN(OutData%WavePkShpChr) + OutData%WavePkShpChr(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + i1_l = LBOUND(OutData%WaveSeed,1) + i1_u = UBOUND(OutData%WaveSeed,1) + DO i1 = LBOUND(OutData%WaveSeed,1), UBOUND(OutData%WaveSeed,1) + OutData%WaveSeed(i1) = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END DO + OutData%WaveStMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveTMax = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + OutData%WaveTp = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WtrDens = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%WtrDpth = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%NWaveElevGrid = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NWaveKinGrid = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinGridxi 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%WaveKinGridxi)) DEALLOCATE(OutData%WaveKinGridxi) + ALLOCATE(OutData%WaveKinGridxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinGridxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinGridxi,1), UBOUND(OutData%WaveKinGridxi,1) + OutData%WaveKinGridxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinGridyi 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%WaveKinGridyi)) DEALLOCATE(OutData%WaveKinGridyi) + ALLOCATE(OutData%WaveKinGridyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinGridyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinGridyi,1), UBOUND(OutData%WaveKinGridyi,1) + OutData%WaveKinGridyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveKinGridzi 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%WaveKinGridzi)) DEALLOCATE(OutData%WaveKinGridzi) + ALLOCATE(OutData%WaveKinGridzi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinGridzi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveKinGridzi,1), UBOUND(OutData%WaveKinGridzi,1) + OutData%WaveKinGridzi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CurrVxi 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%CurrVxi)) DEALLOCATE(OutData%CurrVxi) + ALLOCATE(OutData%CurrVxi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%CurrVxi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%CurrVxi,1), UBOUND(OutData%CurrVxi,1) + OutData%CurrVxi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! CurrVyi 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%CurrVyi)) DEALLOCATE(OutData%CurrVyi) + ALLOCATE(OutData%CurrVyi(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%CurrVyi.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%CurrVyi,1), UBOUND(OutData%CurrVyi,1) + OutData%CurrVyi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%PCurrVxiPz0 = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%PCurrVyiPz0 = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Re_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Re_Buf = ReKiBuf( Re_Xferred:Re_Xferred+Buf_size-1 ) + Re_Xferred = Re_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Db_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Db_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Db_Buf = DbKiBuf( Db_Xferred:Db_Xferred+Buf_size-1 ) + Db_Xferred = Db_Xferred + Buf_size + END IF + Buf_size=IntKiBuf( Int_Xferred ) + Int_Xferred = Int_Xferred + 1 + IF(Buf_size > 0) THEN + ALLOCATE(Int_Buf(Buf_size),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating Int_Buf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) + Int_Xferred = Int_Xferred + Buf_size + END IF + CALL NWTC_Library_Unpacknwtc_randomnumber_parametertype( Re_Buf, Db_Buf, Int_Buf, OutData%RNG, ErrStat2, ErrMsg2 ) ! RNG + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) + IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) + IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) + OutData%ConstWaveMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%CrestHmax = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CrestTime = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CrestXi = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%CrestYi = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%MCFD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveFieldMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%PtfmLocationX = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%PtfmLocationY = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE Waves_UnPackInitInput + + SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(Waves_InitOutputType), INTENT(IN) :: SrcInitOutputData + TYPE(Waves_InitOutputType), INTENT(INOUT) :: DstInitOutputData + INTEGER(IntKi), INTENT(IN ) :: CtrlCode + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg +! Local + INTEGER(IntKi) :: i,j,k + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves_CopyInitOutput' +! + ErrStat = ErrID_None + ErrMsg = "" +IF (ASSOCIATED(SrcInitOutputData%WaveElevC0)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElevC0,1) + i1_u = UBOUND(SrcInitOutputData%WaveElevC0,1) + i2_l = LBOUND(SrcInitOutputData%WaveElevC0,2) + i2_u = UBOUND(SrcInitOutputData%WaveElevC0,2) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveElevC0)) THEN + ALLOCATE(DstInitOutputData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElevC0 = SrcInitOutputData%WaveElevC0 +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveElevC)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElevC,1) + i1_u = UBOUND(SrcInitOutputData%WaveElevC,1) + i2_l = LBOUND(SrcInitOutputData%WaveElevC,2) + i2_u = UBOUND(SrcInitOutputData%WaveElevC,2) + i3_l = LBOUND(SrcInitOutputData%WaveElevC,3) + i3_u = UBOUND(SrcInitOutputData%WaveElevC,3) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveElevC)) THEN + ALLOCATE(DstInitOutputData%WaveElevC(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElevC.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElevC = SrcInitOutputData%WaveElevC +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveDirArr)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveDirArr,1) + i1_u = UBOUND(SrcInitOutputData%WaveDirArr,1) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveDirArr)) THEN + ALLOCATE(DstInitOutputData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveDirArr = SrcInitOutputData%WaveDirArr +ENDIF + DstInitOutputData%WaveDirMin = SrcInitOutputData%WaveDirMin + DstInitOutputData%WaveDirMax = SrcInitOutputData%WaveDirMax + DstInitOutputData%WaveNDir = SrcInitOutputData%WaveNDir + DstInitOutputData%WaveDOmega = SrcInitOutputData%WaveDOmega +IF (ASSOCIATED(SrcInitOutputData%WaveDynP)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveDynP,1) + i1_u = UBOUND(SrcInitOutputData%WaveDynP,1) + i2_l = LBOUND(SrcInitOutputData%WaveDynP,2) + i2_u = UBOUND(SrcInitOutputData%WaveDynP,2) + i3_l = LBOUND(SrcInitOutputData%WaveDynP,3) + i3_u = UBOUND(SrcInitOutputData%WaveDynP,3) + i4_l = LBOUND(SrcInitOutputData%WaveDynP,4) + i4_u = UBOUND(SrcInitOutputData%WaveDynP,4) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveDynP)) THEN + ALLOCATE(DstInitOutputData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveDynP.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveDynP = SrcInitOutputData%WaveDynP +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveAcc)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveAcc,1) + i1_u = UBOUND(SrcInitOutputData%WaveAcc,1) + i2_l = LBOUND(SrcInitOutputData%WaveAcc,2) + i2_u = UBOUND(SrcInitOutputData%WaveAcc,2) + i3_l = LBOUND(SrcInitOutputData%WaveAcc,3) + i3_u = UBOUND(SrcInitOutputData%WaveAcc,3) + i4_l = LBOUND(SrcInitOutputData%WaveAcc,4) + i4_u = UBOUND(SrcInitOutputData%WaveAcc,4) + i5_l = LBOUND(SrcInitOutputData%WaveAcc,5) + i5_u = UBOUND(SrcInitOutputData%WaveAcc,5) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveAcc)) THEN + ALLOCATE(DstInitOutputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveAcc = SrcInitOutputData%WaveAcc +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveAccMCF)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveAccMCF,1) + i1_u = UBOUND(SrcInitOutputData%WaveAccMCF,1) + i2_l = LBOUND(SrcInitOutputData%WaveAccMCF,2) + i2_u = UBOUND(SrcInitOutputData%WaveAccMCF,2) + i3_l = LBOUND(SrcInitOutputData%WaveAccMCF,3) + i3_u = UBOUND(SrcInitOutputData%WaveAccMCF,3) + i4_l = LBOUND(SrcInitOutputData%WaveAccMCF,4) + i4_u = UBOUND(SrcInitOutputData%WaveAccMCF,4) + i5_l = LBOUND(SrcInitOutputData%WaveAccMCF,5) + i5_u = UBOUND(SrcInitOutputData%WaveAccMCF,5) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveAccMCF)) THEN + ALLOCATE(DstInitOutputData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveAccMCF = SrcInitOutputData%WaveAccMCF +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveVel)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveVel,1) + i1_u = UBOUND(SrcInitOutputData%WaveVel,1) + i2_l = LBOUND(SrcInitOutputData%WaveVel,2) + i2_u = UBOUND(SrcInitOutputData%WaveVel,2) + i3_l = LBOUND(SrcInitOutputData%WaveVel,3) + i3_u = UBOUND(SrcInitOutputData%WaveVel,3) + i4_l = LBOUND(SrcInitOutputData%WaveVel,4) + i4_u = UBOUND(SrcInitOutputData%WaveVel,4) + i5_l = LBOUND(SrcInitOutputData%WaveVel,5) + i5_u = UBOUND(SrcInitOutputData%WaveVel,5) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveVel)) THEN + ALLOCATE(DstInitOutputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveVel.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveVel = SrcInitOutputData%WaveVel +ENDIF +IF (ASSOCIATED(SrcInitOutputData%PWaveDynP0)) THEN + i1_l = LBOUND(SrcInitOutputData%PWaveDynP0,1) + i1_u = UBOUND(SrcInitOutputData%PWaveDynP0,1) + i2_l = LBOUND(SrcInitOutputData%PWaveDynP0,2) + i2_u = UBOUND(SrcInitOutputData%PWaveDynP0,2) + i3_l = LBOUND(SrcInitOutputData%PWaveDynP0,3) + i3_u = UBOUND(SrcInitOutputData%PWaveDynP0,3) + IF (.NOT. ASSOCIATED(DstInitOutputData%PWaveDynP0)) THEN + ALLOCATE(DstInitOutputData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%PWaveDynP0 = SrcInitOutputData%PWaveDynP0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%PWaveAcc0)) THEN + i1_l = LBOUND(SrcInitOutputData%PWaveAcc0,1) + i1_u = UBOUND(SrcInitOutputData%PWaveAcc0,1) + i2_l = LBOUND(SrcInitOutputData%PWaveAcc0,2) + i2_u = UBOUND(SrcInitOutputData%PWaveAcc0,2) + i3_l = LBOUND(SrcInitOutputData%PWaveAcc0,3) + i3_u = UBOUND(SrcInitOutputData%PWaveAcc0,3) + i4_l = LBOUND(SrcInitOutputData%PWaveAcc0,4) + i4_u = UBOUND(SrcInitOutputData%PWaveAcc0,4) + IF (.NOT. ASSOCIATED(DstInitOutputData%PWaveAcc0)) THEN + ALLOCATE(DstInitOutputData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%PWaveAcc0 = SrcInitOutputData%PWaveAcc0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%PWaveAccMCF0)) THEN + i1_l = LBOUND(SrcInitOutputData%PWaveAccMCF0,1) + i1_u = UBOUND(SrcInitOutputData%PWaveAccMCF0,1) + i2_l = LBOUND(SrcInitOutputData%PWaveAccMCF0,2) + i2_u = UBOUND(SrcInitOutputData%PWaveAccMCF0,2) + i3_l = LBOUND(SrcInitOutputData%PWaveAccMCF0,3) + i3_u = UBOUND(SrcInitOutputData%PWaveAccMCF0,3) + i4_l = LBOUND(SrcInitOutputData%PWaveAccMCF0,4) + i4_u = UBOUND(SrcInitOutputData%PWaveAccMCF0,4) + IF (.NOT. ASSOCIATED(DstInitOutputData%PWaveAccMCF0)) THEN + ALLOCATE(DstInitOutputData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%PWaveAccMCF0 = SrcInitOutputData%PWaveAccMCF0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%PWaveVel0)) THEN + i1_l = LBOUND(SrcInitOutputData%PWaveVel0,1) + i1_u = UBOUND(SrcInitOutputData%PWaveVel0,1) + i2_l = LBOUND(SrcInitOutputData%PWaveVel0,2) + i2_u = UBOUND(SrcInitOutputData%PWaveVel0,2) + i3_l = LBOUND(SrcInitOutputData%PWaveVel0,3) + i3_u = UBOUND(SrcInitOutputData%PWaveVel0,3) + i4_l = LBOUND(SrcInitOutputData%PWaveVel0,4) + i4_u = UBOUND(SrcInitOutputData%PWaveVel0,4) + IF (.NOT. ASSOCIATED(DstInitOutputData%PWaveVel0)) THEN + ALLOCATE(DstInitOutputData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%PWaveVel0 = SrcInitOutputData%PWaveVel0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveElev)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElev,1) + i1_u = UBOUND(SrcInitOutputData%WaveElev,1) + i2_l = LBOUND(SrcInitOutputData%WaveElev,2) + i2_u = UBOUND(SrcInitOutputData%WaveElev,2) + i3_l = LBOUND(SrcInitOutputData%WaveElev,3) + i3_u = UBOUND(SrcInitOutputData%WaveElev,3) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveElev)) THEN + ALLOCATE(DstInitOutputData%WaveElev(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElev = SrcInitOutputData%WaveElev +ENDIF +IF (ALLOCATED(SrcInitOutputData%WaveElev0)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveElev0,1) + i1_u = UBOUND(SrcInitOutputData%WaveElev0,1) + IF (.NOT. ALLOCATED(DstInitOutputData%WaveElev0)) THEN + ALLOCATE(DstInitOutputData%WaveElev0(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveElev0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveElev0 = SrcInitOutputData%WaveElev0 +ENDIF +IF (ASSOCIATED(SrcInitOutputData%WaveTime)) THEN + i1_l = LBOUND(SrcInitOutputData%WaveTime,1) + i1_u = UBOUND(SrcInitOutputData%WaveTime,1) + IF (.NOT. ASSOCIATED(DstInitOutputData%WaveTime)) THEN + ALLOCATE(DstInitOutputData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitOutputData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitOutputData%WaveTime = SrcInitOutputData%WaveTime +ENDIF + DstInitOutputData%WaveTMax = SrcInitOutputData%WaveTMax + DstInitOutputData%RhoXg = SrcInitOutputData%RhoXg + DstInitOutputData%NStepWave = SrcInitOutputData%NStepWave + DstInitOutputData%NStepWave2 = SrcInitOutputData%NStepWave2 + END SUBROUTINE Waves_CopyInitOutput + + SUBROUTINE Waves_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg, DEALLOCATEpointers ) + TYPE(Waves_InitOutputType), INTENT(INOUT) :: InitOutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL,INTENT(IN ) :: DEALLOCATEpointers + + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 + LOGICAL :: DEALLOCATEpointers_local + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves_DestroyInitOutput' + + ErrStat = ErrID_None + ErrMsg = "" + + IF (PRESENT(DEALLOCATEpointers)) THEN + DEALLOCATEpointers_local = DEALLOCATEpointers + ELSE + DEALLOCATEpointers_local = .true. + END IF + +IF (ASSOCIATED(InitOutputData%WaveElevC0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveElevC0) + InitOutputData%WaveElevC0 => NULL() +ENDIF +IF (ALLOCATED(InitOutputData%WaveElevC)) THEN + DEALLOCATE(InitOutputData%WaveElevC) +ENDIF +IF (ASSOCIATED(InitOutputData%WaveDirArr)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveDirArr) + InitOutputData%WaveDirArr => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveDynP)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveDynP) + InitOutputData%WaveDynP => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveAcc)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveAcc) + InitOutputData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveAccMCF)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveAccMCF) + InitOutputData%WaveAccMCF => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveVel)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveVel) + InitOutputData%WaveVel => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveDynP0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%PWaveDynP0) + InitOutputData%PWaveDynP0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveAcc0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%PWaveAcc0) + InitOutputData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveAccMCF0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%PWaveAccMCF0) + InitOutputData%PWaveAccMCF0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveVel0)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%PWaveVel0) + InitOutputData%PWaveVel0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveElev)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveElev) + InitOutputData%WaveElev => NULL() +ENDIF +IF (ALLOCATED(InitOutputData%WaveElev0)) THEN + DEALLOCATE(InitOutputData%WaveElev0) +ENDIF +IF (ASSOCIATED(InitOutputData%WaveTime)) THEN + IF (DEALLOCATEpointers_local) & + DEALLOCATE(InitOutputData%WaveTime) + InitOutputData%WaveTime => NULL() +ENDIF + END SUBROUTINE Waves_DestroyInitOutput + + SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + REAL(ReKi), ALLOCATABLE, INTENT( OUT) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT( OUT) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT( OUT) :: IntKiBuf(:) + TYPE(Waves_InitOutputType), INTENT(IN) :: InData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly + ! Local variables + INTEGER(IntKi) :: Re_BufSz + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_BufSz + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_BufSz + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i,i1,i2,i3,i4,i5 + LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves_PackInitOutput' + ! buffers to store subtypes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + + OnlySize = .FALSE. + IF ( PRESENT(SizeOnly) ) THEN + OnlySize = SizeOnly + ENDIF + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_BufSz = 0 + Db_BufSz = 0 + Int_BufSz = 0 + Int_BufSz = Int_BufSz + 1 ! WaveElevC0 allocated yes/no + IF ( ASSOCIATED(InData%WaveElevC0) ) THEN + Int_BufSz = Int_BufSz + 2*2 ! WaveElevC0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC0) ! WaveElevC0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElevC allocated yes/no + IF ( ALLOCATED(InData%WaveElevC) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElevC upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElevC) ! WaveElevC + END IF + Int_BufSz = Int_BufSz + 1 ! WaveDirArr allocated yes/no + IF ( ASSOCIATED(InData%WaveDirArr) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveDirArr upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDirArr) ! WaveDirArr + END IF + Re_BufSz = Re_BufSz + 1 ! WaveDirMin + Re_BufSz = Re_BufSz + 1 ! WaveDirMax + Int_BufSz = Int_BufSz + 1 ! WaveNDir + Re_BufSz = Re_BufSz + 1 ! WaveDOmega + Int_BufSz = Int_BufSz + 1 ! WaveDynP allocated yes/no + IF ( ASSOCIATED(InData%WaveDynP) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! WaveDynP upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveDynP) ! WaveDynP + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAcc allocated yes/no + IF ( ASSOCIATED(InData%WaveAcc) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAcc upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAcc) ! WaveAcc + END IF + Int_BufSz = Int_BufSz + 1 ! WaveAccMCF allocated yes/no + IF ( ASSOCIATED(InData%WaveAccMCF) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveAccMCF upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveAccMCF) ! WaveAccMCF + END IF + Int_BufSz = Int_BufSz + 1 ! WaveVel allocated yes/no + IF ( ASSOCIATED(InData%WaveVel) ) THEN + Int_BufSz = Int_BufSz + 2*5 ! WaveVel upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveVel) ! WaveVel + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveDynP0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveDynP0) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! PWaveDynP0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveDynP0) ! PWaveDynP0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAcc0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAcc0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAcc0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAcc0) ! PWaveAcc0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveAccMCF0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveAccMCF0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveAccMCF0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveAccMCF0) ! PWaveAccMCF0 + END IF + Int_BufSz = Int_BufSz + 1 ! PWaveVel0 allocated yes/no + IF ( ASSOCIATED(InData%PWaveVel0) ) THEN + Int_BufSz = Int_BufSz + 2*4 ! PWaveVel0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%PWaveVel0) ! PWaveVel0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev allocated yes/no + IF ( ASSOCIATED(InData%WaveElev) ) THEN + Int_BufSz = Int_BufSz + 2*3 ! WaveElev upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev) ! WaveElev + END IF + Int_BufSz = Int_BufSz + 1 ! WaveElev0 allocated yes/no + IF ( ALLOCATED(InData%WaveElev0) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveElev0 upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveElev0) ! WaveElev0 + END IF + Int_BufSz = Int_BufSz + 1 ! WaveTime allocated yes/no + IF ( ASSOCIATED(InData%WaveTime) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension + Re_BufSz = Re_BufSz + SIZE(InData%WaveTime) ! WaveTime + END IF + Db_BufSz = Db_BufSz + 1 ! WaveTMax + Re_BufSz = Re_BufSz + 1 ! RhoXg + Int_BufSz = Int_BufSz + 1 ! NStepWave + Int_BufSz = Int_BufSz + 1 ! NStepWave2 + IF ( Re_BufSz .GT. 0 ) THEN + ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating ReKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Db_BufSz .GT. 0 ) THEN + ALLOCATE( DbKiBuf( Db_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DbKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF ( Int_BufSz .GT. 0 ) THEN + ALLOCATE( IntKiBuf( Int_BufSz ), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating IntKiBuf.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + IF(OnlySize) RETURN ! return early if only trying to allocate buffers (not pack them) + + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) 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%WaveElevC0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,2) + Int_Xferred = Int_Xferred + 2 + + DO i2 = LBOUND(InData%WaveElevC0,2), UBOUND(InData%WaveElevC0,2) + DO i1 = LBOUND(InData%WaveElevC0,1), UBOUND(InData%WaveElevC0,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC0(i1,i2) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElevC) ) 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%WaveElevC,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElevC,3), UBOUND(InData%WaveElevC,3) + DO i2 = LBOUND(InData%WaveElevC,2), UBOUND(InData%WaveElevC,2) + DO i1 = LBOUND(InData%WaveElevC,1), UBOUND(InData%WaveElevC,1) + ReKiBuf(Re_Xferred) = InData%WaveElevC(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveDirArr) ) 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%WaveDirArr,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDirArr,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveDirArr,1), UBOUND(InData%WaveDirArr,1) + ReKiBuf(Re_Xferred) = InData%WaveDirArr(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + ReKiBuf(Re_Xferred) = InData%WaveDirMin + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDirMax + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%WaveNDir + Int_Xferred = Int_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%WaveDOmega + Re_Xferred = Re_Xferred + 1 + IF ( .NOT. ASSOCIATED(InData%WaveDynP) ) 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%WaveDynP,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDynP,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDynP,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%WaveDynP,4), UBOUND(InData%WaveDynP,4) + DO i3 = LBOUND(InData%WaveDynP,3), UBOUND(InData%WaveDynP,3) + DO i2 = LBOUND(InData%WaveDynP,2), UBOUND(InData%WaveDynP,2) + DO i1 = LBOUND(InData%WaveDynP,1), UBOUND(InData%WaveDynP,1) + ReKiBuf(Re_Xferred) = InData%WaveDynP(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAcc) ) 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%WaveAcc,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAcc,5), UBOUND(InData%WaveAcc,5) + DO i4 = LBOUND(InData%WaveAcc,4), UBOUND(InData%WaveAcc,4) + DO i3 = LBOUND(InData%WaveAcc,3), UBOUND(InData%WaveAcc,3) + DO i2 = LBOUND(InData%WaveAcc,2), UBOUND(InData%WaveAcc,2) + DO i1 = LBOUND(InData%WaveAcc,1), UBOUND(InData%WaveAcc,1) + ReKiBuf(Re_Xferred) = InData%WaveAcc(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveAccMCF) ) 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%WaveAccMCF,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAccMCF,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAccMCF,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveAccMCF,5), UBOUND(InData%WaveAccMCF,5) + DO i4 = LBOUND(InData%WaveAccMCF,4), UBOUND(InData%WaveAccMCF,4) + DO i3 = LBOUND(InData%WaveAccMCF,3), UBOUND(InData%WaveAccMCF,3) + DO i2 = LBOUND(InData%WaveAccMCF,2), UBOUND(InData%WaveAccMCF,2) + DO i1 = LBOUND(InData%WaveAccMCF,1), UBOUND(InData%WaveAccMCF,1) + ReKiBuf(Re_Xferred) = InData%WaveAccMCF(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveVel) ) 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%WaveVel,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,4) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,5) + Int_Xferred = Int_Xferred + 2 + + DO i5 = LBOUND(InData%WaveVel,5), UBOUND(InData%WaveVel,5) + DO i4 = LBOUND(InData%WaveVel,4), UBOUND(InData%WaveVel,4) + DO i3 = LBOUND(InData%WaveVel,3), UBOUND(InData%WaveVel,3) + DO i2 = LBOUND(InData%WaveVel,2), UBOUND(InData%WaveVel,2) + DO i1 = LBOUND(InData%WaveVel,1), UBOUND(InData%WaveVel,1) + ReKiBuf(Re_Xferred) = InData%WaveVel(i1,i2,i3,i4,i5) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveDynP0) ) 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%PWaveDynP0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveDynP0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveDynP0,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%PWaveDynP0,3), UBOUND(InData%PWaveDynP0,3) + DO i2 = LBOUND(InData%PWaveDynP0,2), UBOUND(InData%PWaveDynP0,2) + DO i1 = LBOUND(InData%PWaveDynP0,1), UBOUND(InData%PWaveDynP0,1) + ReKiBuf(Re_Xferred) = InData%PWaveDynP0(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAcc0) ) 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%PWaveAcc0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAcc0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAcc0,4), UBOUND(InData%PWaveAcc0,4) + DO i3 = LBOUND(InData%PWaveAcc0,3), UBOUND(InData%PWaveAcc0,3) + DO i2 = LBOUND(InData%PWaveAcc0,2), UBOUND(InData%PWaveAcc0,2) + DO i1 = LBOUND(InData%PWaveAcc0,1), UBOUND(InData%PWaveAcc0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAcc0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveAccMCF0) ) 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%PWaveAccMCF0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveAccMCF0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAccMCF0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveAccMCF0,4), UBOUND(InData%PWaveAccMCF0,4) + DO i3 = LBOUND(InData%PWaveAccMCF0,3), UBOUND(InData%PWaveAccMCF0,3) + DO i2 = LBOUND(InData%PWaveAccMCF0,2), UBOUND(InData%PWaveAccMCF0,2) + DO i1 = LBOUND(InData%PWaveAccMCF0,1), UBOUND(InData%PWaveAccMCF0,1) + ReKiBuf(Re_Xferred) = InData%PWaveAccMCF0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%PWaveVel0) ) 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%PWaveVel0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,3) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%PWaveVel0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,4) + Int_Xferred = Int_Xferred + 2 + + DO i4 = LBOUND(InData%PWaveVel0,4), UBOUND(InData%PWaveVel0,4) + DO i3 = LBOUND(InData%PWaveVel0,3), UBOUND(InData%PWaveVel0,3) + DO i2 = LBOUND(InData%PWaveVel0,2), UBOUND(InData%PWaveVel0,2) + DO i1 = LBOUND(InData%PWaveVel0,1), UBOUND(InData%PWaveVel0,1) + ReKiBuf(Re_Xferred) = InData%PWaveVel0(i1,i2,i3,i4) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveElev) ) 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%WaveElev,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,1) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev,2) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,2) + Int_Xferred = Int_Xferred + 2 + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,3) + Int_Xferred = Int_Xferred + 2 + + DO i3 = LBOUND(InData%WaveElev,3), UBOUND(InData%WaveElev,3) + DO i2 = LBOUND(InData%WaveElev,2), UBOUND(InData%WaveElev,2) + DO i1 = LBOUND(InData%WaveElev,1), UBOUND(InData%WaveElev,1) + ReKiBuf(Re_Xferred) = InData%WaveElev(i1,i2,i3) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( .NOT. ALLOCATED(InData%WaveElev0) ) 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%WaveElev0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev0,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveElev0,1), UBOUND(InData%WaveElev0,1) + ReKiBuf(Re_Xferred) = InData%WaveElev0(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) 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%WaveTime,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveTime,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%WaveTime,1), UBOUND(InData%WaveTime,1) + ReKiBuf(Re_Xferred) = InData%WaveTime(i1) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + DbKiBuf(Db_Xferred) = InData%WaveTMax + Db_Xferred = Db_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%RhoXg + Re_Xferred = Re_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%NStepWave2 + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE Waves_PackInitOutput + + SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + REAL(ReKi), ALLOCATABLE, INTENT(IN ) :: ReKiBuf(:) + REAL(DbKi), ALLOCATABLE, INTENT(IN ) :: DbKiBuf(:) + INTEGER(IntKi), ALLOCATABLE, INTENT(IN ) :: IntKiBuf(:) + TYPE(Waves_InitOutputType), INTENT(INOUT) :: OutData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + ! Local variables + INTEGER(IntKi) :: Buf_size + INTEGER(IntKi) :: Re_Xferred + INTEGER(IntKi) :: Db_Xferred + INTEGER(IntKi) :: Int_Xferred + INTEGER(IntKi) :: i + INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 + INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 + INTEGER(IntKi) :: i3, i3_l, i3_u ! bounds (upper/lower) for an array dimension 3 + INTEGER(IntKi) :: i4, i4_l, i4_u ! bounds (upper/lower) for an array dimension 4 + INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 + INTEGER(IntKi) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'Waves_UnPackInitOutput' + ! buffers to store meshes, if any + REAL(ReKi), ALLOCATABLE :: Re_Buf(:) + REAL(DbKi), ALLOCATABLE :: Db_Buf(:) + INTEGER(IntKi), ALLOCATABLE :: Int_Buf(:) + ! + ErrStat = ErrID_None + ErrMsg = "" + Re_Xferred = 1 + Db_Xferred = 1 + Int_Xferred = 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElevC0)) DEALLOCATE(OutData%WaveElevC0) + ALLOCATE(OutData%WaveElevC0(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i2 = LBOUND(OutData%WaveElevC0,2), UBOUND(OutData%WaveElevC0,2) + DO i1 = LBOUND(OutData%WaveElevC0,1), UBOUND(OutData%WaveElevC0,1) + OutData%WaveElevC0(i1,i2) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevC 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ALLOCATED(OutData%WaveElevC)) DEALLOCATE(OutData%WaveElevC) + ALLOCATE(OutData%WaveElevC(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElevC.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElevC,3), UBOUND(OutData%WaveElevC,3) + DO i2 = LBOUND(OutData%WaveElevC,2), UBOUND(OutData%WaveElevC,2) + DO i1 = LBOUND(OutData%WaveElevC,1), UBOUND(OutData%WaveElevC,1) + OutData%WaveElevC(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDirArr 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 (ASSOCIATED(OutData%WaveDirArr)) DEALLOCATE(OutData%WaveDirArr) + ALLOCATE(OutData%WaveDirArr(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDirArr.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveDirArr,1), UBOUND(OutData%WaveDirArr,1) + OutData%WaveDirArr(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%WaveDirMin = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveDirMax = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%WaveNDir = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%WaveDOmega = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveDynP)) DEALLOCATE(OutData%WaveDynP) + ALLOCATE(OutData%WaveDynP(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%WaveDynP,4), UBOUND(OutData%WaveDynP,4) + DO i3 = LBOUND(OutData%WaveDynP,3), UBOUND(OutData%WaveDynP,3) + DO i2 = LBOUND(OutData%WaveDynP,2), UBOUND(OutData%WaveDynP,2) + DO i1 = LBOUND(OutData%WaveDynP,1), UBOUND(OutData%WaveDynP,1) + OutData%WaveDynP(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAcc 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAcc)) DEALLOCATE(OutData%WaveAcc) + ALLOCATE(OutData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAcc,5), UBOUND(OutData%WaveAcc,5) + DO i4 = LBOUND(OutData%WaveAcc,4), UBOUND(OutData%WaveAcc,4) + DO i3 = LBOUND(OutData%WaveAcc,3), UBOUND(OutData%WaveAcc,3) + DO i2 = LBOUND(OutData%WaveAcc,2), UBOUND(OutData%WaveAcc,2) + DO i1 = LBOUND(OutData%WaveAcc,1), UBOUND(OutData%WaveAcc,1) + OutData%WaveAcc(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveAccMCF 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveAccMCF)) DEALLOCATE(OutData%WaveAccMCF) + ALLOCATE(OutData%WaveAccMCF(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAccMCF.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveAccMCF,5), UBOUND(OutData%WaveAccMCF,5) + DO i4 = LBOUND(OutData%WaveAccMCF,4), UBOUND(OutData%WaveAccMCF,4) + DO i3 = LBOUND(OutData%WaveAccMCF,3), UBOUND(OutData%WaveAccMCF,3) + DO i2 = LBOUND(OutData%WaveAccMCF,2), UBOUND(OutData%WaveAccMCF,2) + DO i1 = LBOUND(OutData%WaveAccMCF,1), UBOUND(OutData%WaveAccMCF,1) + OutData%WaveAccMCF(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i5_l = IntKiBuf( Int_Xferred ) + i5_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveVel)) DEALLOCATE(OutData%WaveVel) + ALLOCATE(OutData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u,i5_l:i5_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i5 = LBOUND(OutData%WaveVel,5), UBOUND(OutData%WaveVel,5) + DO i4 = LBOUND(OutData%WaveVel,4), UBOUND(OutData%WaveVel,4) + DO i3 = LBOUND(OutData%WaveVel,3), UBOUND(OutData%WaveVel,3) + DO i2 = LBOUND(OutData%WaveVel,2), UBOUND(OutData%WaveVel,2) + DO i1 = LBOUND(OutData%WaveVel,1), UBOUND(OutData%WaveVel,1) + OutData%WaveVel(i1,i2,i3,i4,i5) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveDynP0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveDynP0)) DEALLOCATE(OutData%PWaveDynP0) + ALLOCATE(OutData%PWaveDynP0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveDynP0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%PWaveDynP0,3), UBOUND(OutData%PWaveDynP0,3) + DO i2 = LBOUND(OutData%PWaveDynP0,2), UBOUND(OutData%PWaveDynP0,2) + DO i1 = LBOUND(OutData%PWaveDynP0,1), UBOUND(OutData%PWaveDynP0,1) + OutData%PWaveDynP0(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAcc0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAcc0)) DEALLOCATE(OutData%PWaveAcc0) + ALLOCATE(OutData%PWaveAcc0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAcc0,4), UBOUND(OutData%PWaveAcc0,4) + DO i3 = LBOUND(OutData%PWaveAcc0,3), UBOUND(OutData%PWaveAcc0,3) + DO i2 = LBOUND(OutData%PWaveAcc0,2), UBOUND(OutData%PWaveAcc0,2) + DO i1 = LBOUND(OutData%PWaveAcc0,1), UBOUND(OutData%PWaveAcc0,1) + OutData%PWaveAcc0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveAccMCF0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveAccMCF0)) DEALLOCATE(OutData%PWaveAccMCF0) + ALLOCATE(OutData%PWaveAccMCF0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveAccMCF0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveAccMCF0,4), UBOUND(OutData%PWaveAccMCF0,4) + DO i3 = LBOUND(OutData%PWaveAccMCF0,3), UBOUND(OutData%PWaveAccMCF0,3) + DO i2 = LBOUND(OutData%PWaveAccMCF0,2), UBOUND(OutData%PWaveAccMCF0,2) + DO i1 = LBOUND(OutData%PWaveAccMCF0,1), UBOUND(OutData%PWaveAccMCF0,1) + OutData%PWaveAccMCF0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveVel0 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%PWaveVel0)) DEALLOCATE(OutData%PWaveVel0) + ALLOCATE(OutData%PWaveVel0(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u,i4_l:i4_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i4 = LBOUND(OutData%PWaveVel0,4), UBOUND(OutData%PWaveVel0,4) + DO i3 = LBOUND(OutData%PWaveVel0,3), UBOUND(OutData%PWaveVel0,3) + DO i2 = LBOUND(OutData%PWaveVel0,2), UBOUND(OutData%PWaveVel0,2) + DO i1 = LBOUND(OutData%PWaveVel0,1), UBOUND(OutData%PWaveVel0,1) + OutData%PWaveVel0(i1,i2,i3,i4) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev 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 + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) + Int_Xferred = Int_Xferred + 2 + IF (ASSOCIATED(OutData%WaveElev)) DEALLOCATE(OutData%WaveElev) + ALLOCATE(OutData%WaveElev(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i3 = LBOUND(OutData%WaveElev,3), UBOUND(OutData%WaveElev,3) + DO i2 = LBOUND(OutData%WaveElev,2), UBOUND(OutData%WaveElev,2) + DO i1 = LBOUND(OutData%WaveElev,1), UBOUND(OutData%WaveElev,1) + OutData%WaveElev(i1,i2,i3) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END DO + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev0 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%WaveElev0)) DEALLOCATE(OutData%WaveElev0) + ALLOCATE(OutData%WaveElev0(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveElev0,1), UBOUND(OutData%WaveElev0,1) + OutData%WaveElev0(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime 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 (ASSOCIATED(OutData%WaveTime)) DEALLOCATE(OutData%WaveTime) + ALLOCATE(OutData%WaveTime(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveTime.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%WaveTime,1), UBOUND(OutData%WaveTime,1) + OutData%WaveTime(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + END DO + END IF + OutData%WaveTMax = DbKiBuf(Db_Xferred) + Db_Xferred = Db_Xferred + 1 + OutData%RhoXg = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 + OutData%NStepWave = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + OutData%NStepWave2 = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + END SUBROUTINE Waves_UnPackInitOutput + +END MODULE Waves_Types +!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/subdyn/src/SD_FEM.f90 b/modules/subdyn/src/SD_FEM.f90 index 7d300e83bb..97e1abe64a 100644 --- a/modules/subdyn/src/SD_FEM.f90 +++ b/modules/subdyn/src/SD_FEM.f90 @@ -972,7 +972,7 @@ SUBROUTINE SetElementProperties(Init, p, ErrStat, ErrMsg) p%ElemProps(i)%YoungE = Init%PropsC(P1, 2)/1 ! Young's modulus, E=EA/A [N/m^2] p%ElemProps(i)%Rho = Init%PropsC(P1, 3) ! Material density [kg/m3] p%ElemProps(i)%T0 = Init%PropsC(P1, 4) ! Pretension force [N] - p%ElemProps(i)%D = min(sqrt(1/Pi)*4, L*0.05) ! For plotting only + p%ElemProps(i)%D = min(sqrt(1/Pi)*4, L*0.05_ReKi) ! For plotting only else if (eType==idMemberRigid) then if (DEV_VERSION) then @@ -980,7 +980,7 @@ SUBROUTINE SetElementProperties(Init, p, ErrStat, ErrMsg) endif p%ElemProps(i)%Area = 1 ! Arbitrary set to 1 p%ElemProps(i)%Rho = Init%PropsR(P1, 2) - p%ElemProps(i)%D = min(sqrt(1/Pi)*4, L*0.05) ! For plotting only + p%ElemProps(i)%D = min(sqrt(1/Pi)*4, L*0.05_ReKi) ! For plotting only else ! Should not happen diff --git a/modules/subdyn/src/SubDyn.f90 b/modules/subdyn/src/SubDyn.f90 index 91651ff8fd..1258379d05 100644 --- a/modules/subdyn/src/SubDyn.f90 +++ b/modules/subdyn/src/SubDyn.f90 @@ -1352,7 +1352,7 @@ SUBROUTINE SD_Input(SDInputFile, Init, p, ErrStat,ErrMsg) CALL ReadCom ( UnIn, SDInputFile, ' Member Output List SECTION ',ErrStat2, ErrMsg2, UnEc ); if(Failed()) return CALL ReadIVar( UnIn, SDInputFile, p%NMOutputs, 'NMOutputs', 'Number of Members whose output must go into OutJckF and/or FAST .out',ErrStat2, ErrMsg2, UnEc ) if (Failed()) return -IF (Check ( (p%NMOutputs < 0) .OR. (p%NMOutputs > p%NMembers) .OR. (p%NMOutputs > 9), 'NMOutputs must be >=0 and <= minimim(NMembers,9)')) return +IF (Check ( (p%NMOutputs < 0) .OR. (p%NMOutputs > p%NMembers) .OR. (p%NMOutputs > 99), 'NMOutputs must be >=0 and <= minimim(NMembers,99)')) return CALL ReadCom( UnIn, SDInputFile, ' Output Member Headers',ErrStat2, ErrMsg2, UnEc) ; if(Failed()) return CALL ReadCom( UnIn, SDInputFile, ' Output Member Units' ,ErrStat2, ErrMsg2, UnEc) ; if(Failed()) return diff --git a/modules/subdyn/src/SubDyn_Output.f90 b/modules/subdyn/src/SubDyn_Output.f90 index 7f40b0c9d2..769caf5ec0 100644 --- a/modules/subdyn/src/SubDyn_Output.f90 +++ b/modules/subdyn/src/SubDyn_Output.f90 @@ -21,13 +21,13 @@ MODULE SubDyn_Output USE NWTC_Library USE SubDyn_Types USE SD_FEM - USE SubDyn_Output_Params, only: MNfmKe, MNfmMe, MNTDss, MNRDe, MNTRAe, IntfSS, IntfTRss, IntfTRAss, ReactSS + USE SubDyn_Output_Params, only: MNfmKe, MNfmMe, MNTDss, MNRDe, MNTRAe, IntfSS, IntfTRss, IntfTRAss, ReactSS, OutStrLenM1 USE SubDyn_Output_Params, only: ParamIndxAry, ParamUnitsAry, ValidParamAry, SSqm01, SSqmd01, SSqmdd01 IMPLICIT NONE ! The maximum number of output channels which can be output by the code. - INTEGER(IntKi),PUBLIC, PARAMETER :: MaxOutPts = 2265 + INTEGER(IntKi),PUBLIC, PARAMETER :: MaxOutPts = 21705 PRIVATE ! ..... Public Subroutines ................................................................................................... @@ -702,7 +702,7 @@ SUBROUTINE SDOut_ChkOutLst( OutList, p, ErrStat, ErrMsg ) InvalidOutput(SSqmdd01+k-1) = .true. END DO - DO I=1,9 + DO I=1,99 !I know el # and whether it is 1st node or second node if (I <= p%NMOutputs) then INDX=p%MOutLst(I)%NOutCnt+1 @@ -757,22 +757,27 @@ SUBROUTINE SDOut_ChkOutLst( OutList, p, ErrStat, ErrMsg ) p%OutParam(I)%SignM = -1 ! ex, '-TipDxc1' causes the sign of TipDxc1 to be switched. OutListTmp = OutListTmp(2:) ELSE IF ( INDEX( 'mM', OutListTmp(1:1) ) > 0 ) THEN ! We'll assume this is a variable name for now, (if not, we will check later if OutListTmp(2:) is also a variable name) - CheckOutListAgain = .TRUE. + CheckOutListAgain = .TRUE. p%OutParam(I)%SignM = 1 ELSE p%OutParam(I)%SignM = 1 END IF + if ( INDEX( 'mM', OutListTmp(1:1) ) > 0 .and. INDEX( '0123456789', OutListTmp(2:2) ) > 0 .and. INDEX( 'nN', OutListTmp(3:3) ) > 0 ) then ! an old-style output without the leading zero on the member number + OutListTmp = OutListTmp(1:1)//'0'//OutListTmp(2:) + CheckOutListAgain = .FALSE. + end if + CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) + Indx = IndexCharAry( OutListTmp(1:OutStrLenM1), ValidParamAry ) IF ( CheckOutListAgain .AND. Indx < 1 ) THEN ! Let's assume that "M" really meant "minus" and then test again p%OutParam(I)%SignM = -1 ! ex, 'MTipDxc1' causes the sign of TipDxc1 to be switched. OutListTmp = OutListTmp(2:) - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) + Indx = IndexCharAry( OutListTmp(1:10), ValidParamAry ) END IF IF ( Indx > 0 ) THEN diff --git a/modules/subdyn/src/SubDyn_Output_Params.f90 b/modules/subdyn/src/SubDyn_Output_Params.f90 index 4844a51f18..f530c38508 100644 --- a/modules/subdyn/src/SubDyn_Output_Params.f90 +++ b/modules/subdyn/src/SubDyn_Output_Params.f90 @@ -1,3723 +1,32944 @@ module SubDyn_Output_Params use NWTC_Library - ! Indices for computing output channels: - ! NOTES: - ! (1) These parameters are in the order stored in "OutListParameters.xlsx" - ! (2) Array AllOuts() must be dimensioned to the value of the largest output parameter IMPLICIT NONE PUBLIC - ! Time: - INTEGER, PARAMETER :: Time = 0 +! =================================================================================================== +! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m" +! 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 12-Jul-2022 14:06:59. + + + ! Indices for computing output channels: + ! NOTES: + ! (1) These parameters are in the order stored in "GetSubDynOutListParameters.m" + ! (2) Array AllOuts() must be dimensioned to the value of the largest output parameter + + ! Time: - ! Member Forces: + INTEGER(IntKi), PARAMETER :: Time = 0 - INTEGER(IntKi), PARAMETER :: M1N1FKxe = 1 - INTEGER(IntKi), PARAMETER :: M1N2FKxe = 2 - INTEGER(IntKi), PARAMETER :: M1N3FKxe = 3 - INTEGER(IntKi), PARAMETER :: M1N4FKxe = 4 - INTEGER(IntKi), PARAMETER :: M1N5FKxe = 5 - INTEGER(IntKi), PARAMETER :: M1N6FKxe = 6 - INTEGER(IntKi), PARAMETER :: M1N7FKxe = 7 - INTEGER(IntKi), PARAMETER :: M1N8FKxe = 8 - INTEGER(IntKi), PARAMETER :: M1N9FKxe = 9 - INTEGER(IntKi), PARAMETER :: M2N1FKxe = 10 - INTEGER(IntKi), PARAMETER :: M2N2FKxe = 11 - INTEGER(IntKi), PARAMETER :: M2N3FKxe = 12 - INTEGER(IntKi), PARAMETER :: M2N4FKxe = 13 - INTEGER(IntKi), PARAMETER :: M2N5FKxe = 14 - INTEGER(IntKi), PARAMETER :: M2N6FKxe = 15 - INTEGER(IntKi), PARAMETER :: M2N7FKxe = 16 - INTEGER(IntKi), PARAMETER :: M2N8FKxe = 17 - INTEGER(IntKi), PARAMETER :: M2N9FKxe = 18 - INTEGER(IntKi), PARAMETER :: M3N1FKxe = 19 - INTEGER(IntKi), PARAMETER :: M3N2FKxe = 20 - INTEGER(IntKi), PARAMETER :: M3N3FKxe = 21 - INTEGER(IntKi), PARAMETER :: M3N4FKxe = 22 - INTEGER(IntKi), PARAMETER :: M3N5FKxe = 23 - INTEGER(IntKi), PARAMETER :: M3N6FKxe = 24 - INTEGER(IntKi), PARAMETER :: M3N7FKxe = 25 - INTEGER(IntKi), PARAMETER :: M3N8FKxe = 26 - INTEGER(IntKi), PARAMETER :: M3N9FKxe = 27 - INTEGER(IntKi), PARAMETER :: M4N1FKxe = 28 - INTEGER(IntKi), PARAMETER :: M4N2FKxe = 29 - INTEGER(IntKi), PARAMETER :: M4N3FKxe = 30 - INTEGER(IntKi), PARAMETER :: M4N4FKxe = 31 - INTEGER(IntKi), PARAMETER :: M4N5FKxe = 32 - INTEGER(IntKi), PARAMETER :: M4N6FKxe = 33 - INTEGER(IntKi), PARAMETER :: M4N7FKxe = 34 - INTEGER(IntKi), PARAMETER :: M4N8FKxe = 35 - INTEGER(IntKi), PARAMETER :: M4N9FKxe = 36 - INTEGER(IntKi), PARAMETER :: M5N1FKxe = 37 - INTEGER(IntKi), PARAMETER :: M5N2FKxe = 38 - INTEGER(IntKi), PARAMETER :: M5N3FKxe = 39 - INTEGER(IntKi), PARAMETER :: M5N4FKxe = 40 - INTEGER(IntKi), PARAMETER :: M5N5FKxe = 41 - INTEGER(IntKi), PARAMETER :: M5N6FKxe = 42 - INTEGER(IntKi), PARAMETER :: M5N7FKxe = 43 - INTEGER(IntKi), PARAMETER :: M5N8FKxe = 44 - INTEGER(IntKi), PARAMETER :: M5N9FKxe = 45 - INTEGER(IntKi), PARAMETER :: M6N1FKxe = 46 - INTEGER(IntKi), PARAMETER :: M6N2FKxe = 47 - INTEGER(IntKi), PARAMETER :: M6N3FKxe = 48 - INTEGER(IntKi), PARAMETER :: M6N4FKxe = 49 - INTEGER(IntKi), PARAMETER :: M6N5FKxe = 50 - INTEGER(IntKi), PARAMETER :: M6N6FKxe = 51 - INTEGER(IntKi), PARAMETER :: M6N7FKxe = 52 - INTEGER(IntKi), PARAMETER :: M6N8FKxe = 53 - INTEGER(IntKi), PARAMETER :: M6N9FKxe = 54 - INTEGER(IntKi), PARAMETER :: M7N1FKxe = 55 - INTEGER(IntKi), PARAMETER :: M7N2FKxe = 56 - INTEGER(IntKi), PARAMETER :: M7N3FKxe = 57 - INTEGER(IntKi), PARAMETER :: M7N4FKxe = 58 - INTEGER(IntKi), PARAMETER :: M7N5FKxe = 59 - INTEGER(IntKi), PARAMETER :: M7N6FKxe = 60 - INTEGER(IntKi), PARAMETER :: M7N7FKxe = 61 - INTEGER(IntKi), PARAMETER :: M7N8FKxe = 62 - INTEGER(IntKi), PARAMETER :: M7N9FKxe = 63 - INTEGER(IntKi), PARAMETER :: M8N1FKxe = 64 - INTEGER(IntKi), PARAMETER :: M8N2FKxe = 65 - INTEGER(IntKi), PARAMETER :: M8N3FKxe = 66 - INTEGER(IntKi), PARAMETER :: M8N4FKxe = 67 - INTEGER(IntKi), PARAMETER :: M8N5FKxe = 68 - INTEGER(IntKi), PARAMETER :: M8N6FKxe = 69 - INTEGER(IntKi), PARAMETER :: M8N7FKxe = 70 - INTEGER(IntKi), PARAMETER :: M8N8FKxe = 71 - INTEGER(IntKi), PARAMETER :: M8N9FKxe = 72 - INTEGER(IntKi), PARAMETER :: M9N1FKxe = 73 - INTEGER(IntKi), PARAMETER :: M9N2FKxe = 74 - INTEGER(IntKi), PARAMETER :: M9N3FKxe = 75 - INTEGER(IntKi), PARAMETER :: M9N4FKxe = 76 - INTEGER(IntKi), PARAMETER :: M9N5FKxe = 77 - INTEGER(IntKi), PARAMETER :: M9N6FKxe = 78 - INTEGER(IntKi), PARAMETER :: M9N7FKxe = 79 - INTEGER(IntKi), PARAMETER :: M9N8FKxe = 80 - INTEGER(IntKi), PARAMETER :: M9N9FKxe = 81 - INTEGER(IntKi), PARAMETER :: M1N1FKye = 82 - INTEGER(IntKi), PARAMETER :: M1N2FKye = 83 - INTEGER(IntKi), PARAMETER :: M1N3FKye = 84 - INTEGER(IntKi), PARAMETER :: M1N4FKye = 85 - INTEGER(IntKi), PARAMETER :: M1N5FKye = 86 - INTEGER(IntKi), PARAMETER :: M1N6FKye = 87 - INTEGER(IntKi), PARAMETER :: M1N7FKye = 88 - INTEGER(IntKi), PARAMETER :: M1N8FKye = 89 - INTEGER(IntKi), PARAMETER :: M1N9FKye = 90 - INTEGER(IntKi), PARAMETER :: M2N1FKye = 91 - INTEGER(IntKi), PARAMETER :: M2N2FKye = 92 - INTEGER(IntKi), PARAMETER :: M2N3FKye = 93 - INTEGER(IntKi), PARAMETER :: M2N4FKye = 94 - INTEGER(IntKi), PARAMETER :: M2N5FKye = 95 - INTEGER(IntKi), PARAMETER :: M2N6FKye = 96 - INTEGER(IntKi), PARAMETER :: M2N7FKye = 97 - INTEGER(IntKi), PARAMETER :: M2N8FKye = 98 - INTEGER(IntKi), PARAMETER :: M2N9FKye = 99 - INTEGER(IntKi), PARAMETER :: M3N1FKye = 100 - INTEGER(IntKi), PARAMETER :: M3N2FKye = 101 - INTEGER(IntKi), PARAMETER :: M3N3FKye = 102 - INTEGER(IntKi), PARAMETER :: M3N4FKye = 103 - INTEGER(IntKi), PARAMETER :: M3N5FKye = 104 - INTEGER(IntKi), PARAMETER :: M3N6FKye = 105 - INTEGER(IntKi), PARAMETER :: M3N7FKye = 106 - INTEGER(IntKi), PARAMETER :: M3N8FKye = 107 - INTEGER(IntKi), PARAMETER :: M3N9FKye = 108 - INTEGER(IntKi), PARAMETER :: M4N1FKye = 109 - INTEGER(IntKi), PARAMETER :: M4N2FKye = 110 - INTEGER(IntKi), PARAMETER :: M4N3FKye = 111 - INTEGER(IntKi), PARAMETER :: M4N4FKye = 112 - INTEGER(IntKi), PARAMETER :: M4N5FKye = 113 - INTEGER(IntKi), PARAMETER :: M4N6FKye = 114 - INTEGER(IntKi), PARAMETER :: M4N7FKye = 115 - INTEGER(IntKi), PARAMETER :: M4N8FKye = 116 - INTEGER(IntKi), PARAMETER :: M4N9FKye = 117 - INTEGER(IntKi), PARAMETER :: M5N1FKye = 118 - INTEGER(IntKi), PARAMETER :: M5N2FKye = 119 - INTEGER(IntKi), PARAMETER :: M5N3FKye = 120 - INTEGER(IntKi), PARAMETER :: M5N4FKye = 121 - INTEGER(IntKi), PARAMETER :: M5N5FKye = 122 - INTEGER(IntKi), PARAMETER :: M5N6FKye = 123 - INTEGER(IntKi), PARAMETER :: M5N7FKye = 124 - INTEGER(IntKi), PARAMETER :: M5N8FKye = 125 - INTEGER(IntKi), PARAMETER :: M5N9FKye = 126 - INTEGER(IntKi), PARAMETER :: M6N1FKye = 127 - INTEGER(IntKi), PARAMETER :: M6N2FKye = 128 - INTEGER(IntKi), PARAMETER :: M6N3FKye = 129 - INTEGER(IntKi), PARAMETER :: M6N4FKye = 130 - INTEGER(IntKi), PARAMETER :: M6N5FKye = 131 - INTEGER(IntKi), PARAMETER :: M6N6FKye = 132 - INTEGER(IntKi), PARAMETER :: M6N7FKye = 133 - INTEGER(IntKi), PARAMETER :: M6N8FKye = 134 - INTEGER(IntKi), PARAMETER :: M6N9FKye = 135 - INTEGER(IntKi), PARAMETER :: M7N1FKye = 136 - INTEGER(IntKi), PARAMETER :: M7N2FKye = 137 - INTEGER(IntKi), PARAMETER :: M7N3FKye = 138 - INTEGER(IntKi), PARAMETER :: M7N4FKye = 139 - INTEGER(IntKi), PARAMETER :: M7N5FKye = 140 - INTEGER(IntKi), PARAMETER :: M7N6FKye = 141 - INTEGER(IntKi), PARAMETER :: M7N7FKye = 142 - INTEGER(IntKi), PARAMETER :: M7N8FKye = 143 - INTEGER(IntKi), PARAMETER :: M7N9FKye = 144 - INTEGER(IntKi), PARAMETER :: M8N1FKye = 145 - INTEGER(IntKi), PARAMETER :: M8N2FKye = 146 - INTEGER(IntKi), PARAMETER :: M8N3FKye = 147 - INTEGER(IntKi), PARAMETER :: M8N4FKye = 148 - INTEGER(IntKi), PARAMETER :: M8N5FKye = 149 - INTEGER(IntKi), PARAMETER :: M8N6FKye = 150 - INTEGER(IntKi), PARAMETER :: M8N7FKye = 151 - INTEGER(IntKi), PARAMETER :: M8N8FKye = 152 - INTEGER(IntKi), PARAMETER :: M8N9FKye = 153 - INTEGER(IntKi), PARAMETER :: M9N1FKye = 154 - INTEGER(IntKi), PARAMETER :: M9N2FKye = 155 - INTEGER(IntKi), PARAMETER :: M9N3FKye = 156 - INTEGER(IntKi), PARAMETER :: M9N4FKye = 157 - INTEGER(IntKi), PARAMETER :: M9N5FKye = 158 - INTEGER(IntKi), PARAMETER :: M9N6FKye = 159 - INTEGER(IntKi), PARAMETER :: M9N7FKye = 160 - INTEGER(IntKi), PARAMETER :: M9N8FKye = 161 - INTEGER(IntKi), PARAMETER :: M9N9FKye = 162 - INTEGER(IntKi), PARAMETER :: M1N1FKze = 163 - INTEGER(IntKi), PARAMETER :: M1N2FKze = 164 - INTEGER(IntKi), PARAMETER :: M1N3FKze = 165 - INTEGER(IntKi), PARAMETER :: M1N4FKze = 166 - INTEGER(IntKi), PARAMETER :: M1N5FKze = 167 - INTEGER(IntKi), PARAMETER :: M1N6FKze = 168 - INTEGER(IntKi), PARAMETER :: M1N7FKze = 169 - INTEGER(IntKi), PARAMETER :: M1N8FKze = 170 - INTEGER(IntKi), PARAMETER :: M1N9FKze = 171 - INTEGER(IntKi), PARAMETER :: M2N1FKze = 172 - INTEGER(IntKi), PARAMETER :: M2N2FKze = 173 - INTEGER(IntKi), PARAMETER :: M2N3FKze = 174 - INTEGER(IntKi), PARAMETER :: M2N4FKze = 175 - INTEGER(IntKi), PARAMETER :: M2N5FKze = 176 - INTEGER(IntKi), PARAMETER :: M2N6FKze = 177 - INTEGER(IntKi), PARAMETER :: M2N7FKze = 178 - INTEGER(IntKi), PARAMETER :: M2N8FKze = 179 - INTEGER(IntKi), PARAMETER :: M2N9FKze = 180 - INTEGER(IntKi), PARAMETER :: M3N1FKze = 181 - INTEGER(IntKi), PARAMETER :: M3N2FKze = 182 - INTEGER(IntKi), PARAMETER :: M3N3FKze = 183 - INTEGER(IntKi), PARAMETER :: M3N4FKze = 184 - INTEGER(IntKi), PARAMETER :: M3N5FKze = 185 - INTEGER(IntKi), PARAMETER :: M3N6FKze = 186 - INTEGER(IntKi), PARAMETER :: M3N7FKze = 187 - INTEGER(IntKi), PARAMETER :: M3N8FKze = 188 - INTEGER(IntKi), PARAMETER :: M3N9FKze = 189 - INTEGER(IntKi), PARAMETER :: M4N1FKze = 190 - INTEGER(IntKi), PARAMETER :: M4N2FKze = 191 - INTEGER(IntKi), PARAMETER :: M4N3FKze = 192 - INTEGER(IntKi), PARAMETER :: M4N4FKze = 193 - INTEGER(IntKi), PARAMETER :: M4N5FKze = 194 - INTEGER(IntKi), PARAMETER :: M4N6FKze = 195 - INTEGER(IntKi), PARAMETER :: M4N7FKze = 196 - INTEGER(IntKi), PARAMETER :: M4N8FKze = 197 - INTEGER(IntKi), PARAMETER :: M4N9FKze = 198 - INTEGER(IntKi), PARAMETER :: M5N1FKze = 199 - INTEGER(IntKi), PARAMETER :: M5N2FKze = 200 - INTEGER(IntKi), PARAMETER :: M5N3FKze = 201 - INTEGER(IntKi), PARAMETER :: M5N4FKze = 202 - INTEGER(IntKi), PARAMETER :: M5N5FKze = 203 - INTEGER(IntKi), PARAMETER :: M5N6FKze = 204 - INTEGER(IntKi), PARAMETER :: M5N7FKze = 205 - INTEGER(IntKi), PARAMETER :: M5N8FKze = 206 - INTEGER(IntKi), PARAMETER :: M5N9FKze = 207 - INTEGER(IntKi), PARAMETER :: M6N1FKze = 208 - INTEGER(IntKi), PARAMETER :: M6N2FKze = 209 - INTEGER(IntKi), PARAMETER :: M6N3FKze = 210 - INTEGER(IntKi), PARAMETER :: M6N4FKze = 211 - INTEGER(IntKi), PARAMETER :: M6N5FKze = 212 - INTEGER(IntKi), PARAMETER :: M6N6FKze = 213 - INTEGER(IntKi), PARAMETER :: M6N7FKze = 214 - INTEGER(IntKi), PARAMETER :: M6N8FKze = 215 - INTEGER(IntKi), PARAMETER :: M6N9FKze = 216 - INTEGER(IntKi), PARAMETER :: M7N1FKze = 217 - INTEGER(IntKi), PARAMETER :: M7N2FKze = 218 - INTEGER(IntKi), PARAMETER :: M7N3FKze = 219 - INTEGER(IntKi), PARAMETER :: M7N4FKze = 220 - INTEGER(IntKi), PARAMETER :: M7N5FKze = 221 - INTEGER(IntKi), PARAMETER :: M7N6FKze = 222 - INTEGER(IntKi), PARAMETER :: M7N7FKze = 223 - INTEGER(IntKi), PARAMETER :: M7N8FKze = 224 - INTEGER(IntKi), PARAMETER :: M7N9FKze = 225 - INTEGER(IntKi), PARAMETER :: M8N1FKze = 226 - INTEGER(IntKi), PARAMETER :: M8N2FKze = 227 - INTEGER(IntKi), PARAMETER :: M8N3FKze = 228 - INTEGER(IntKi), PARAMETER :: M8N4FKze = 229 - INTEGER(IntKi), PARAMETER :: M8N5FKze = 230 - INTEGER(IntKi), PARAMETER :: M8N6FKze = 231 - INTEGER(IntKi), PARAMETER :: M8N7FKze = 232 - INTEGER(IntKi), PARAMETER :: M8N8FKze = 233 - INTEGER(IntKi), PARAMETER :: M8N9FKze = 234 - INTEGER(IntKi), PARAMETER :: M9N1FKze = 235 - INTEGER(IntKi), PARAMETER :: M9N2FKze = 236 - INTEGER(IntKi), PARAMETER :: M9N3FKze = 237 - INTEGER(IntKi), PARAMETER :: M9N4FKze = 238 - INTEGER(IntKi), PARAMETER :: M9N5FKze = 239 - INTEGER(IntKi), PARAMETER :: M9N6FKze = 240 - INTEGER(IntKi), PARAMETER :: M9N7FKze = 241 - INTEGER(IntKi), PARAMETER :: M9N8FKze = 242 - INTEGER(IntKi), PARAMETER :: M9N9FKze = 243 - INTEGER(IntKi), PARAMETER :: M1N1FMxe = 244 - INTEGER(IntKi), PARAMETER :: M1N2FMxe = 245 - INTEGER(IntKi), PARAMETER :: M1N3FMxe = 246 - INTEGER(IntKi), PARAMETER :: M1N4FMxe = 247 - INTEGER(IntKi), PARAMETER :: M1N5FMxe = 248 - INTEGER(IntKi), PARAMETER :: M1N6FMxe = 249 - INTEGER(IntKi), PARAMETER :: M1N7FMxe = 250 - INTEGER(IntKi), PARAMETER :: M1N8FMxe = 251 - INTEGER(IntKi), PARAMETER :: M1N9FMxe = 252 - INTEGER(IntKi), PARAMETER :: M2N1FMxe = 253 - INTEGER(IntKi), PARAMETER :: M2N2FMxe = 254 - INTEGER(IntKi), PARAMETER :: M2N3FMxe = 255 - INTEGER(IntKi), PARAMETER :: M2N4FMxe = 256 - INTEGER(IntKi), PARAMETER :: M2N5FMxe = 257 - INTEGER(IntKi), PARAMETER :: M2N6FMxe = 258 - INTEGER(IntKi), PARAMETER :: M2N7FMxe = 259 - INTEGER(IntKi), PARAMETER :: M2N8FMxe = 260 - INTEGER(IntKi), PARAMETER :: M2N9FMxe = 261 - INTEGER(IntKi), PARAMETER :: M3N1FMxe = 262 - INTEGER(IntKi), PARAMETER :: M3N2FMxe = 263 - INTEGER(IntKi), PARAMETER :: M3N3FMxe = 264 - INTEGER(IntKi), PARAMETER :: M3N4FMxe = 265 - INTEGER(IntKi), PARAMETER :: M3N5FMxe = 266 - INTEGER(IntKi), PARAMETER :: M3N6FMxe = 267 - INTEGER(IntKi), PARAMETER :: M3N7FMxe = 268 - INTEGER(IntKi), PARAMETER :: M3N8FMxe = 269 - INTEGER(IntKi), PARAMETER :: M3N9FMxe = 270 - INTEGER(IntKi), PARAMETER :: M4N1FMxe = 271 - INTEGER(IntKi), PARAMETER :: M4N2FMxe = 272 - INTEGER(IntKi), PARAMETER :: M4N3FMxe = 273 - INTEGER(IntKi), PARAMETER :: M4N4FMxe = 274 - INTEGER(IntKi), PARAMETER :: M4N5FMxe = 275 - INTEGER(IntKi), PARAMETER :: M4N6FMxe = 276 - INTEGER(IntKi), PARAMETER :: M4N7FMxe = 277 - INTEGER(IntKi), PARAMETER :: M4N8FMxe = 278 - INTEGER(IntKi), PARAMETER :: M4N9FMxe = 279 - INTEGER(IntKi), PARAMETER :: M5N1FMxe = 280 - INTEGER(IntKi), PARAMETER :: M5N2FMxe = 281 - INTEGER(IntKi), PARAMETER :: M5N3FMxe = 282 - INTEGER(IntKi), PARAMETER :: M5N4FMxe = 283 - INTEGER(IntKi), PARAMETER :: M5N5FMxe = 284 - INTEGER(IntKi), PARAMETER :: M5N6FMxe = 285 - INTEGER(IntKi), PARAMETER :: M5N7FMxe = 286 - INTEGER(IntKi), PARAMETER :: M5N8FMxe = 287 - INTEGER(IntKi), PARAMETER :: M5N9FMxe = 288 - INTEGER(IntKi), PARAMETER :: M6N1FMxe = 289 - INTEGER(IntKi), PARAMETER :: M6N2FMxe = 290 - INTEGER(IntKi), PARAMETER :: M6N3FMxe = 291 - INTEGER(IntKi), PARAMETER :: M6N4FMxe = 292 - INTEGER(IntKi), PARAMETER :: M6N5FMxe = 293 - INTEGER(IntKi), PARAMETER :: M6N6FMxe = 294 - INTEGER(IntKi), PARAMETER :: M6N7FMxe = 295 - INTEGER(IntKi), PARAMETER :: M6N8FMxe = 296 - INTEGER(IntKi), PARAMETER :: M6N9FMxe = 297 - INTEGER(IntKi), PARAMETER :: M7N1FMxe = 298 - INTEGER(IntKi), PARAMETER :: M7N2FMxe = 299 - INTEGER(IntKi), PARAMETER :: M7N3FMxe = 300 - INTEGER(IntKi), PARAMETER :: M7N4FMxe = 301 - INTEGER(IntKi), PARAMETER :: M7N5FMxe = 302 - INTEGER(IntKi), PARAMETER :: M7N6FMxe = 303 - INTEGER(IntKi), PARAMETER :: M7N7FMxe = 304 - INTEGER(IntKi), PARAMETER :: M7N8FMxe = 305 - INTEGER(IntKi), PARAMETER :: M7N9FMxe = 306 - INTEGER(IntKi), PARAMETER :: M8N1FMxe = 307 - INTEGER(IntKi), PARAMETER :: M8N2FMxe = 308 - INTEGER(IntKi), PARAMETER :: M8N3FMxe = 309 - INTEGER(IntKi), PARAMETER :: M8N4FMxe = 310 - INTEGER(IntKi), PARAMETER :: M8N5FMxe = 311 - INTEGER(IntKi), PARAMETER :: M8N6FMxe = 312 - INTEGER(IntKi), PARAMETER :: M8N7FMxe = 313 - INTEGER(IntKi), PARAMETER :: M8N8FMxe = 314 - INTEGER(IntKi), PARAMETER :: M8N9FMxe = 315 - INTEGER(IntKi), PARAMETER :: M9N1FMxe = 316 - INTEGER(IntKi), PARAMETER :: M9N2FMxe = 317 - INTEGER(IntKi), PARAMETER :: M9N3FMxe = 318 - INTEGER(IntKi), PARAMETER :: M9N4FMxe = 319 - INTEGER(IntKi), PARAMETER :: M9N5FMxe = 320 - INTEGER(IntKi), PARAMETER :: M9N6FMxe = 321 - INTEGER(IntKi), PARAMETER :: M9N7FMxe = 322 - INTEGER(IntKi), PARAMETER :: M9N8FMxe = 323 - INTEGER(IntKi), PARAMETER :: M9N9FMxe = 324 - INTEGER(IntKi), PARAMETER :: M1N1FMye = 325 - INTEGER(IntKi), PARAMETER :: M1N2FMye = 326 - INTEGER(IntKi), PARAMETER :: M1N3FMye = 327 - INTEGER(IntKi), PARAMETER :: M1N4FMye = 328 - INTEGER(IntKi), PARAMETER :: M1N5FMye = 329 - INTEGER(IntKi), PARAMETER :: M1N6FMye = 330 - INTEGER(IntKi), PARAMETER :: M1N7FMye = 331 - INTEGER(IntKi), PARAMETER :: M1N8FMye = 332 - INTEGER(IntKi), PARAMETER :: M1N9FMye = 333 - INTEGER(IntKi), PARAMETER :: M2N1FMye = 334 - INTEGER(IntKi), PARAMETER :: M2N2FMye = 335 - INTEGER(IntKi), PARAMETER :: M2N3FMye = 336 - INTEGER(IntKi), PARAMETER :: M2N4FMye = 337 - INTEGER(IntKi), PARAMETER :: M2N5FMye = 338 - INTEGER(IntKi), PARAMETER :: M2N6FMye = 339 - INTEGER(IntKi), PARAMETER :: M2N7FMye = 340 - INTEGER(IntKi), PARAMETER :: M2N8FMye = 341 - INTEGER(IntKi), PARAMETER :: M2N9FMye = 342 - INTEGER(IntKi), PARAMETER :: M3N1FMye = 343 - INTEGER(IntKi), PARAMETER :: M3N2FMye = 344 - INTEGER(IntKi), PARAMETER :: M3N3FMye = 345 - INTEGER(IntKi), PARAMETER :: M3N4FMye = 346 - INTEGER(IntKi), PARAMETER :: M3N5FMye = 347 - INTEGER(IntKi), PARAMETER :: M3N6FMye = 348 - INTEGER(IntKi), PARAMETER :: M3N7FMye = 349 - INTEGER(IntKi), PARAMETER :: M3N8FMye = 350 - INTEGER(IntKi), PARAMETER :: M3N9FMye = 351 - INTEGER(IntKi), PARAMETER :: M4N1FMye = 352 - INTEGER(IntKi), PARAMETER :: M4N2FMye = 353 - INTEGER(IntKi), PARAMETER :: M4N3FMye = 354 - INTEGER(IntKi), PARAMETER :: M4N4FMye = 355 - INTEGER(IntKi), PARAMETER :: M4N5FMye = 356 - INTEGER(IntKi), PARAMETER :: M4N6FMye = 357 - INTEGER(IntKi), PARAMETER :: M4N7FMye = 358 - INTEGER(IntKi), PARAMETER :: M4N8FMye = 359 - INTEGER(IntKi), PARAMETER :: M4N9FMye = 360 - INTEGER(IntKi), PARAMETER :: M5N1FMye = 361 - INTEGER(IntKi), PARAMETER :: M5N2FMye = 362 - INTEGER(IntKi), PARAMETER :: M5N3FMye = 363 - INTEGER(IntKi), PARAMETER :: M5N4FMye = 364 - INTEGER(IntKi), PARAMETER :: M5N5FMye = 365 - INTEGER(IntKi), PARAMETER :: M5N6FMye = 366 - INTEGER(IntKi), PARAMETER :: M5N7FMye = 367 - INTEGER(IntKi), PARAMETER :: M5N8FMye = 368 - INTEGER(IntKi), PARAMETER :: M5N9FMye = 369 - INTEGER(IntKi), PARAMETER :: M6N1FMye = 370 - INTEGER(IntKi), PARAMETER :: M6N2FMye = 371 - INTEGER(IntKi), PARAMETER :: M6N3FMye = 372 - INTEGER(IntKi), PARAMETER :: M6N4FMye = 373 - INTEGER(IntKi), PARAMETER :: M6N5FMye = 374 - INTEGER(IntKi), PARAMETER :: M6N6FMye = 375 - INTEGER(IntKi), PARAMETER :: M6N7FMye = 376 - INTEGER(IntKi), PARAMETER :: M6N8FMye = 377 - INTEGER(IntKi), PARAMETER :: M6N9FMye = 378 - INTEGER(IntKi), PARAMETER :: M7N1FMye = 379 - INTEGER(IntKi), PARAMETER :: M7N2FMye = 380 - INTEGER(IntKi), PARAMETER :: M7N3FMye = 381 - INTEGER(IntKi), PARAMETER :: M7N4FMye = 382 - INTEGER(IntKi), PARAMETER :: M7N5FMye = 383 - INTEGER(IntKi), PARAMETER :: M7N6FMye = 384 - INTEGER(IntKi), PARAMETER :: M7N7FMye = 385 - INTEGER(IntKi), PARAMETER :: M7N8FMye = 386 - INTEGER(IntKi), PARAMETER :: M7N9FMye = 387 - INTEGER(IntKi), PARAMETER :: M8N1FMye = 388 - INTEGER(IntKi), PARAMETER :: M8N2FMye = 389 - INTEGER(IntKi), PARAMETER :: M8N3FMye = 390 - INTEGER(IntKi), PARAMETER :: M8N4FMye = 391 - INTEGER(IntKi), PARAMETER :: M8N5FMye = 392 - INTEGER(IntKi), PARAMETER :: M8N6FMye = 393 - INTEGER(IntKi), PARAMETER :: M8N7FMye = 394 - INTEGER(IntKi), PARAMETER :: M8N8FMye = 395 - INTEGER(IntKi), PARAMETER :: M8N9FMye = 396 - INTEGER(IntKi), PARAMETER :: M9N1FMye = 397 - INTEGER(IntKi), PARAMETER :: M9N2FMye = 398 - INTEGER(IntKi), PARAMETER :: M9N3FMye = 399 - INTEGER(IntKi), PARAMETER :: M9N4FMye = 400 - INTEGER(IntKi), PARAMETER :: M9N5FMye = 401 - INTEGER(IntKi), PARAMETER :: M9N6FMye = 402 - INTEGER(IntKi), PARAMETER :: M9N7FMye = 403 - INTEGER(IntKi), PARAMETER :: M9N8FMye = 404 - INTEGER(IntKi), PARAMETER :: M9N9FMye = 405 - INTEGER(IntKi), PARAMETER :: M1N1FMze = 406 - INTEGER(IntKi), PARAMETER :: M1N2FMze = 407 - INTEGER(IntKi), PARAMETER :: M1N3FMze = 408 - INTEGER(IntKi), PARAMETER :: M1N4FMze = 409 - INTEGER(IntKi), PARAMETER :: M1N5FMze = 410 - INTEGER(IntKi), PARAMETER :: M1N6FMze = 411 - INTEGER(IntKi), PARAMETER :: M1N7FMze = 412 - INTEGER(IntKi), PARAMETER :: M1N8FMze = 413 - INTEGER(IntKi), PARAMETER :: M1N9FMze = 414 - INTEGER(IntKi), PARAMETER :: M2N1FMze = 415 - INTEGER(IntKi), PARAMETER :: M2N2FMze = 416 - INTEGER(IntKi), PARAMETER :: M2N3FMze = 417 - INTEGER(IntKi), PARAMETER :: M2N4FMze = 418 - INTEGER(IntKi), PARAMETER :: M2N5FMze = 419 - INTEGER(IntKi), PARAMETER :: M2N6FMze = 420 - INTEGER(IntKi), PARAMETER :: M2N7FMze = 421 - INTEGER(IntKi), PARAMETER :: M2N8FMze = 422 - INTEGER(IntKi), PARAMETER :: M2N9FMze = 423 - INTEGER(IntKi), PARAMETER :: M3N1FMze = 424 - INTEGER(IntKi), PARAMETER :: M3N2FMze = 425 - INTEGER(IntKi), PARAMETER :: M3N3FMze = 426 - INTEGER(IntKi), PARAMETER :: M3N4FMze = 427 - INTEGER(IntKi), PARAMETER :: M3N5FMze = 428 - INTEGER(IntKi), PARAMETER :: M3N6FMze = 429 - INTEGER(IntKi), PARAMETER :: M3N7FMze = 430 - INTEGER(IntKi), PARAMETER :: M3N8FMze = 431 - INTEGER(IntKi), PARAMETER :: M3N9FMze = 432 - INTEGER(IntKi), PARAMETER :: M4N1FMze = 433 - INTEGER(IntKi), PARAMETER :: M4N2FMze = 434 - INTEGER(IntKi), PARAMETER :: M4N3FMze = 435 - INTEGER(IntKi), PARAMETER :: M4N4FMze = 436 - INTEGER(IntKi), PARAMETER :: M4N5FMze = 437 - INTEGER(IntKi), PARAMETER :: M4N6FMze = 438 - INTEGER(IntKi), PARAMETER :: M4N7FMze = 439 - INTEGER(IntKi), PARAMETER :: M4N8FMze = 440 - INTEGER(IntKi), PARAMETER :: M4N9FMze = 441 - INTEGER(IntKi), PARAMETER :: M5N1FMze = 442 - INTEGER(IntKi), PARAMETER :: M5N2FMze = 443 - INTEGER(IntKi), PARAMETER :: M5N3FMze = 444 - INTEGER(IntKi), PARAMETER :: M5N4FMze = 445 - INTEGER(IntKi), PARAMETER :: M5N5FMze = 446 - INTEGER(IntKi), PARAMETER :: M5N6FMze = 447 - INTEGER(IntKi), PARAMETER :: M5N7FMze = 448 - INTEGER(IntKi), PARAMETER :: M5N8FMze = 449 - INTEGER(IntKi), PARAMETER :: M5N9FMze = 450 - INTEGER(IntKi), PARAMETER :: M6N1FMze = 451 - INTEGER(IntKi), PARAMETER :: M6N2FMze = 452 - INTEGER(IntKi), PARAMETER :: M6N3FMze = 453 - INTEGER(IntKi), PARAMETER :: M6N4FMze = 454 - INTEGER(IntKi), PARAMETER :: M6N5FMze = 455 - INTEGER(IntKi), PARAMETER :: M6N6FMze = 456 - INTEGER(IntKi), PARAMETER :: M6N7FMze = 457 - INTEGER(IntKi), PARAMETER :: M6N8FMze = 458 - INTEGER(IntKi), PARAMETER :: M6N9FMze = 459 - INTEGER(IntKi), PARAMETER :: M7N1FMze = 460 - INTEGER(IntKi), PARAMETER :: M7N2FMze = 461 - INTEGER(IntKi), PARAMETER :: M7N3FMze = 462 - INTEGER(IntKi), PARAMETER :: M7N4FMze = 463 - INTEGER(IntKi), PARAMETER :: M7N5FMze = 464 - INTEGER(IntKi), PARAMETER :: M7N6FMze = 465 - INTEGER(IntKi), PARAMETER :: M7N7FMze = 466 - INTEGER(IntKi), PARAMETER :: M7N8FMze = 467 - INTEGER(IntKi), PARAMETER :: M7N9FMze = 468 - INTEGER(IntKi), PARAMETER :: M8N1FMze = 469 - INTEGER(IntKi), PARAMETER :: M8N2FMze = 470 - INTEGER(IntKi), PARAMETER :: M8N3FMze = 471 - INTEGER(IntKi), PARAMETER :: M8N4FMze = 472 - INTEGER(IntKi), PARAMETER :: M8N5FMze = 473 - INTEGER(IntKi), PARAMETER :: M8N6FMze = 474 - INTEGER(IntKi), PARAMETER :: M8N7FMze = 475 - INTEGER(IntKi), PARAMETER :: M8N8FMze = 476 - INTEGER(IntKi), PARAMETER :: M8N9FMze = 477 - INTEGER(IntKi), PARAMETER :: M9N1FMze = 478 - INTEGER(IntKi), PARAMETER :: M9N2FMze = 479 - INTEGER(IntKi), PARAMETER :: M9N3FMze = 480 - INTEGER(IntKi), PARAMETER :: M9N4FMze = 481 - INTEGER(IntKi), PARAMETER :: M9N5FMze = 482 - INTEGER(IntKi), PARAMETER :: M9N6FMze = 483 - INTEGER(IntKi), PARAMETER :: M9N7FMze = 484 - INTEGER(IntKi), PARAMETER :: M9N8FMze = 485 - INTEGER(IntKi), PARAMETER :: M9N9FMze = 486 - INTEGER(IntKi), PARAMETER :: M1N1MKxe = 487 - INTEGER(IntKi), PARAMETER :: M1N2MKxe = 488 - INTEGER(IntKi), PARAMETER :: M1N3MKxe = 489 - INTEGER(IntKi), PARAMETER :: M1N4MKxe = 490 - INTEGER(IntKi), PARAMETER :: M1N5MKxe = 491 - INTEGER(IntKi), PARAMETER :: M1N6MKxe = 492 - INTEGER(IntKi), PARAMETER :: M1N7MKxe = 493 - INTEGER(IntKi), PARAMETER :: M1N8MKxe = 494 - INTEGER(IntKi), PARAMETER :: M1N9MKxe = 495 - INTEGER(IntKi), PARAMETER :: M2N1MKxe = 496 - INTEGER(IntKi), PARAMETER :: M2N2MKxe = 497 - INTEGER(IntKi), PARAMETER :: M2N3MKxe = 498 - INTEGER(IntKi), PARAMETER :: M2N4MKxe = 499 - INTEGER(IntKi), PARAMETER :: M2N5MKxe = 500 - INTEGER(IntKi), PARAMETER :: M2N6MKxe = 501 - INTEGER(IntKi), PARAMETER :: M2N7MKxe = 502 - INTEGER(IntKi), PARAMETER :: M2N8MKxe = 503 - INTEGER(IntKi), PARAMETER :: M2N9MKxe = 504 - INTEGER(IntKi), PARAMETER :: M3N1MKxe = 505 - INTEGER(IntKi), PARAMETER :: M3N2MKxe = 506 - INTEGER(IntKi), PARAMETER :: M3N3MKxe = 507 - INTEGER(IntKi), PARAMETER :: M3N4MKxe = 508 - INTEGER(IntKi), PARAMETER :: M3N5MKxe = 509 - INTEGER(IntKi), PARAMETER :: M3N6MKxe = 510 - INTEGER(IntKi), PARAMETER :: M3N7MKxe = 511 - INTEGER(IntKi), PARAMETER :: M3N8MKxe = 512 - INTEGER(IntKi), PARAMETER :: M3N9MKxe = 513 - INTEGER(IntKi), PARAMETER :: M4N1MKxe = 514 - INTEGER(IntKi), PARAMETER :: M4N2MKxe = 515 - INTEGER(IntKi), PARAMETER :: M4N3MKxe = 516 - INTEGER(IntKi), PARAMETER :: M4N4MKxe = 517 - INTEGER(IntKi), PARAMETER :: M4N5MKxe = 518 - INTEGER(IntKi), PARAMETER :: M4N6MKxe = 519 - INTEGER(IntKi), PARAMETER :: M4N7MKxe = 520 - INTEGER(IntKi), PARAMETER :: M4N8MKxe = 521 - INTEGER(IntKi), PARAMETER :: M4N9MKxe = 522 - INTEGER(IntKi), PARAMETER :: M5N1MKxe = 523 - INTEGER(IntKi), PARAMETER :: M5N2MKxe = 524 - INTEGER(IntKi), PARAMETER :: M5N3MKxe = 525 - INTEGER(IntKi), PARAMETER :: M5N4MKxe = 526 - INTEGER(IntKi), PARAMETER :: M5N5MKxe = 527 - INTEGER(IntKi), PARAMETER :: M5N6MKxe = 528 - INTEGER(IntKi), PARAMETER :: M5N7MKxe = 529 - INTEGER(IntKi), PARAMETER :: M5N8MKxe = 530 - INTEGER(IntKi), PARAMETER :: M5N9MKxe = 531 - INTEGER(IntKi), PARAMETER :: M6N1MKxe = 532 - INTEGER(IntKi), PARAMETER :: M6N2MKxe = 533 - INTEGER(IntKi), PARAMETER :: M6N3MKxe = 534 - INTEGER(IntKi), PARAMETER :: M6N4MKxe = 535 - INTEGER(IntKi), PARAMETER :: M6N5MKxe = 536 - INTEGER(IntKi), PARAMETER :: M6N6MKxe = 537 - INTEGER(IntKi), PARAMETER :: M6N7MKxe = 538 - INTEGER(IntKi), PARAMETER :: M6N8MKxe = 539 - INTEGER(IntKi), PARAMETER :: M6N9MKxe = 540 - INTEGER(IntKi), PARAMETER :: M7N1MKxe = 541 - INTEGER(IntKi), PARAMETER :: M7N2MKxe = 542 - INTEGER(IntKi), PARAMETER :: M7N3MKxe = 543 - INTEGER(IntKi), PARAMETER :: M7N4MKxe = 544 - INTEGER(IntKi), PARAMETER :: M7N5MKxe = 545 - INTEGER(IntKi), PARAMETER :: M7N6MKxe = 546 - INTEGER(IntKi), PARAMETER :: M7N7MKxe = 547 - INTEGER(IntKi), PARAMETER :: M7N8MKxe = 548 - INTEGER(IntKi), PARAMETER :: M7N9MKxe = 549 - INTEGER(IntKi), PARAMETER :: M8N1MKxe = 550 - INTEGER(IntKi), PARAMETER :: M8N2MKxe = 551 - INTEGER(IntKi), PARAMETER :: M8N3MKxe = 552 - INTEGER(IntKi), PARAMETER :: M8N4MKxe = 553 - INTEGER(IntKi), PARAMETER :: M8N5MKxe = 554 - INTEGER(IntKi), PARAMETER :: M8N6MKxe = 555 - INTEGER(IntKi), PARAMETER :: M8N7MKxe = 556 - INTEGER(IntKi), PARAMETER :: M8N8MKxe = 557 - INTEGER(IntKi), PARAMETER :: M8N9MKxe = 558 - INTEGER(IntKi), PARAMETER :: M9N1MKxe = 559 - INTEGER(IntKi), PARAMETER :: M9N2MKxe = 560 - INTEGER(IntKi), PARAMETER :: M9N3MKxe = 561 - INTEGER(IntKi), PARAMETER :: M9N4MKxe = 562 - INTEGER(IntKi), PARAMETER :: M9N5MKxe = 563 - INTEGER(IntKi), PARAMETER :: M9N6MKxe = 564 - INTEGER(IntKi), PARAMETER :: M9N7MKxe = 565 - INTEGER(IntKi), PARAMETER :: M9N8MKxe = 566 - INTEGER(IntKi), PARAMETER :: M9N9MKxe = 567 - INTEGER(IntKi), PARAMETER :: M1N1MKye = 568 - INTEGER(IntKi), PARAMETER :: M1N2MKye = 569 - INTEGER(IntKi), PARAMETER :: M1N3MKye = 570 - INTEGER(IntKi), PARAMETER :: M1N4MKye = 571 - INTEGER(IntKi), PARAMETER :: M1N5MKye = 572 - INTEGER(IntKi), PARAMETER :: M1N6MKye = 573 - INTEGER(IntKi), PARAMETER :: M1N7MKye = 574 - INTEGER(IntKi), PARAMETER :: M1N8MKye = 575 - INTEGER(IntKi), PARAMETER :: M1N9MKye = 576 - INTEGER(IntKi), PARAMETER :: M2N1MKye = 577 - INTEGER(IntKi), PARAMETER :: M2N2MKye = 578 - INTEGER(IntKi), PARAMETER :: M2N3MKye = 579 - INTEGER(IntKi), PARAMETER :: M2N4MKye = 580 - INTEGER(IntKi), PARAMETER :: M2N5MKye = 581 - INTEGER(IntKi), PARAMETER :: M2N6MKye = 582 - INTEGER(IntKi), PARAMETER :: M2N7MKye = 583 - INTEGER(IntKi), PARAMETER :: M2N8MKye = 584 - INTEGER(IntKi), PARAMETER :: M2N9MKye = 585 - INTEGER(IntKi), PARAMETER :: M3N1MKye = 586 - INTEGER(IntKi), PARAMETER :: M3N2MKye = 587 - INTEGER(IntKi), PARAMETER :: M3N3MKye = 588 - INTEGER(IntKi), PARAMETER :: M3N4MKye = 589 - INTEGER(IntKi), PARAMETER :: M3N5MKye = 590 - INTEGER(IntKi), PARAMETER :: M3N6MKye = 591 - INTEGER(IntKi), PARAMETER :: M3N7MKye = 592 - INTEGER(IntKi), PARAMETER :: M3N8MKye = 593 - INTEGER(IntKi), PARAMETER :: M3N9MKye = 594 - INTEGER(IntKi), PARAMETER :: M4N1MKye = 595 - INTEGER(IntKi), PARAMETER :: M4N2MKye = 596 - INTEGER(IntKi), PARAMETER :: M4N3MKye = 597 - INTEGER(IntKi), PARAMETER :: M4N4MKye = 598 - INTEGER(IntKi), PARAMETER :: M4N5MKye = 599 - INTEGER(IntKi), PARAMETER :: M4N6MKye = 600 - INTEGER(IntKi), PARAMETER :: M4N7MKye = 601 - INTEGER(IntKi), PARAMETER :: M4N8MKye = 602 - INTEGER(IntKi), PARAMETER :: M4N9MKye = 603 - INTEGER(IntKi), PARAMETER :: M5N1MKye = 604 - INTEGER(IntKi), PARAMETER :: M5N2MKye = 605 - INTEGER(IntKi), PARAMETER :: M5N3MKye = 606 - INTEGER(IntKi), PARAMETER :: M5N4MKye = 607 - INTEGER(IntKi), PARAMETER :: M5N5MKye = 608 - INTEGER(IntKi), PARAMETER :: M5N6MKye = 609 - INTEGER(IntKi), PARAMETER :: M5N7MKye = 610 - INTEGER(IntKi), PARAMETER :: M5N8MKye = 611 - INTEGER(IntKi), PARAMETER :: M5N9MKye = 612 - INTEGER(IntKi), PARAMETER :: M6N1MKye = 613 - INTEGER(IntKi), PARAMETER :: M6N2MKye = 614 - INTEGER(IntKi), PARAMETER :: M6N3MKye = 615 - INTEGER(IntKi), PARAMETER :: M6N4MKye = 616 - INTEGER(IntKi), PARAMETER :: M6N5MKye = 617 - INTEGER(IntKi), PARAMETER :: M6N6MKye = 618 - INTEGER(IntKi), PARAMETER :: M6N7MKye = 619 - INTEGER(IntKi), PARAMETER :: M6N8MKye = 620 - INTEGER(IntKi), PARAMETER :: M6N9MKye = 621 - INTEGER(IntKi), PARAMETER :: M7N1MKye = 622 - INTEGER(IntKi), PARAMETER :: M7N2MKye = 623 - INTEGER(IntKi), PARAMETER :: M7N3MKye = 624 - INTEGER(IntKi), PARAMETER :: M7N4MKye = 625 - INTEGER(IntKi), PARAMETER :: M7N5MKye = 626 - INTEGER(IntKi), PARAMETER :: M7N6MKye = 627 - INTEGER(IntKi), PARAMETER :: M7N7MKye = 628 - INTEGER(IntKi), PARAMETER :: M7N8MKye = 629 - INTEGER(IntKi), PARAMETER :: M7N9MKye = 630 - INTEGER(IntKi), PARAMETER :: M8N1MKye = 631 - INTEGER(IntKi), PARAMETER :: M8N2MKye = 632 - INTEGER(IntKi), PARAMETER :: M8N3MKye = 633 - INTEGER(IntKi), PARAMETER :: M8N4MKye = 634 - INTEGER(IntKi), PARAMETER :: M8N5MKye = 635 - INTEGER(IntKi), PARAMETER :: M8N6MKye = 636 - INTEGER(IntKi), PARAMETER :: M8N7MKye = 637 - INTEGER(IntKi), PARAMETER :: M8N8MKye = 638 - INTEGER(IntKi), PARAMETER :: M8N9MKye = 639 - INTEGER(IntKi), PARAMETER :: M9N1MKye = 640 - INTEGER(IntKi), PARAMETER :: M9N2MKye = 641 - INTEGER(IntKi), PARAMETER :: M9N3MKye = 642 - INTEGER(IntKi), PARAMETER :: M9N4MKye = 643 - INTEGER(IntKi), PARAMETER :: M9N5MKye = 644 - INTEGER(IntKi), PARAMETER :: M9N6MKye = 645 - INTEGER(IntKi), PARAMETER :: M9N7MKye = 646 - INTEGER(IntKi), PARAMETER :: M9N8MKye = 647 - INTEGER(IntKi), PARAMETER :: M9N9MKye = 648 - INTEGER(IntKi), PARAMETER :: M1N1MKze = 649 - INTEGER(IntKi), PARAMETER :: M1N2MKze = 650 - INTEGER(IntKi), PARAMETER :: M1N3MKze = 651 - INTEGER(IntKi), PARAMETER :: M1N4MKze = 652 - INTEGER(IntKi), PARAMETER :: M1N5MKze = 653 - INTEGER(IntKi), PARAMETER :: M1N6MKze = 654 - INTEGER(IntKi), PARAMETER :: M1N7MKze = 655 - INTEGER(IntKi), PARAMETER :: M1N8MKze = 656 - INTEGER(IntKi), PARAMETER :: M1N9MKze = 657 - INTEGER(IntKi), PARAMETER :: M2N1MKze = 658 - INTEGER(IntKi), PARAMETER :: M2N2MKze = 659 - INTEGER(IntKi), PARAMETER :: M2N3MKze = 660 - INTEGER(IntKi), PARAMETER :: M2N4MKze = 661 - INTEGER(IntKi), PARAMETER :: M2N5MKze = 662 - INTEGER(IntKi), PARAMETER :: M2N6MKze = 663 - INTEGER(IntKi), PARAMETER :: M2N7MKze = 664 - INTEGER(IntKi), PARAMETER :: M2N8MKze = 665 - INTEGER(IntKi), PARAMETER :: M2N9MKze = 666 - INTEGER(IntKi), PARAMETER :: M3N1MKze = 667 - INTEGER(IntKi), PARAMETER :: M3N2MKze = 668 - INTEGER(IntKi), PARAMETER :: M3N3MKze = 669 - INTEGER(IntKi), PARAMETER :: M3N4MKze = 670 - INTEGER(IntKi), PARAMETER :: M3N5MKze = 671 - INTEGER(IntKi), PARAMETER :: M3N6MKze = 672 - INTEGER(IntKi), PARAMETER :: M3N7MKze = 673 - INTEGER(IntKi), PARAMETER :: M3N8MKze = 674 - INTEGER(IntKi), PARAMETER :: M3N9MKze = 675 - INTEGER(IntKi), PARAMETER :: M4N1MKze = 676 - INTEGER(IntKi), PARAMETER :: M4N2MKze = 677 - INTEGER(IntKi), PARAMETER :: M4N3MKze = 678 - INTEGER(IntKi), PARAMETER :: M4N4MKze = 679 - INTEGER(IntKi), PARAMETER :: M4N5MKze = 680 - INTEGER(IntKi), PARAMETER :: M4N6MKze = 681 - INTEGER(IntKi), PARAMETER :: M4N7MKze = 682 - INTEGER(IntKi), PARAMETER :: M4N8MKze = 683 - INTEGER(IntKi), PARAMETER :: M4N9MKze = 684 - INTEGER(IntKi), PARAMETER :: M5N1MKze = 685 - INTEGER(IntKi), PARAMETER :: M5N2MKze = 686 - INTEGER(IntKi), PARAMETER :: M5N3MKze = 687 - INTEGER(IntKi), PARAMETER :: M5N4MKze = 688 - INTEGER(IntKi), PARAMETER :: M5N5MKze = 689 - INTEGER(IntKi), PARAMETER :: M5N6MKze = 690 - INTEGER(IntKi), PARAMETER :: M5N7MKze = 691 - INTEGER(IntKi), PARAMETER :: M5N8MKze = 692 - INTEGER(IntKi), PARAMETER :: M5N9MKze = 693 - INTEGER(IntKi), PARAMETER :: M6N1MKze = 694 - INTEGER(IntKi), PARAMETER :: M6N2MKze = 695 - INTEGER(IntKi), PARAMETER :: M6N3MKze = 696 - INTEGER(IntKi), PARAMETER :: M6N4MKze = 697 - INTEGER(IntKi), PARAMETER :: M6N5MKze = 698 - INTEGER(IntKi), PARAMETER :: M6N6MKze = 699 - INTEGER(IntKi), PARAMETER :: M6N7MKze = 700 - INTEGER(IntKi), PARAMETER :: M6N8MKze = 701 - INTEGER(IntKi), PARAMETER :: M6N9MKze = 702 - INTEGER(IntKi), PARAMETER :: M7N1MKze = 703 - INTEGER(IntKi), PARAMETER :: M7N2MKze = 704 - INTEGER(IntKi), PARAMETER :: M7N3MKze = 705 - INTEGER(IntKi), PARAMETER :: M7N4MKze = 706 - INTEGER(IntKi), PARAMETER :: M7N5MKze = 707 - INTEGER(IntKi), PARAMETER :: M7N6MKze = 708 - INTEGER(IntKi), PARAMETER :: M7N7MKze = 709 - INTEGER(IntKi), PARAMETER :: M7N8MKze = 710 - INTEGER(IntKi), PARAMETER :: M7N9MKze = 711 - INTEGER(IntKi), PARAMETER :: M8N1MKze = 712 - INTEGER(IntKi), PARAMETER :: M8N2MKze = 713 - INTEGER(IntKi), PARAMETER :: M8N3MKze = 714 - INTEGER(IntKi), PARAMETER :: M8N4MKze = 715 - INTEGER(IntKi), PARAMETER :: M8N5MKze = 716 - INTEGER(IntKi), PARAMETER :: M8N6MKze = 717 - INTEGER(IntKi), PARAMETER :: M8N7MKze = 718 - INTEGER(IntKi), PARAMETER :: M8N8MKze = 719 - INTEGER(IntKi), PARAMETER :: M8N9MKze = 720 - INTEGER(IntKi), PARAMETER :: M9N1MKze = 721 - INTEGER(IntKi), PARAMETER :: M9N2MKze = 722 - INTEGER(IntKi), PARAMETER :: M9N3MKze = 723 - INTEGER(IntKi), PARAMETER :: M9N4MKze = 724 - INTEGER(IntKi), PARAMETER :: M9N5MKze = 725 - INTEGER(IntKi), PARAMETER :: M9N6MKze = 726 - INTEGER(IntKi), PARAMETER :: M9N7MKze = 727 - INTEGER(IntKi), PARAMETER :: M9N8MKze = 728 - INTEGER(IntKi), PARAMETER :: M9N9MKze = 729 - INTEGER(IntKi), PARAMETER :: M1N1MMxe = 730 - INTEGER(IntKi), PARAMETER :: M1N2MMxe = 731 - INTEGER(IntKi), PARAMETER :: M1N3MMxe = 732 - INTEGER(IntKi), PARAMETER :: M1N4MMxe = 733 - INTEGER(IntKi), PARAMETER :: M1N5MMxe = 734 - INTEGER(IntKi), PARAMETER :: M1N6MMxe = 735 - INTEGER(IntKi), PARAMETER :: M1N7MMxe = 736 - INTEGER(IntKi), PARAMETER :: M1N8MMxe = 737 - INTEGER(IntKi), PARAMETER :: M1N9MMxe = 738 - INTEGER(IntKi), PARAMETER :: M2N1MMxe = 739 - INTEGER(IntKi), PARAMETER :: M2N2MMxe = 740 - INTEGER(IntKi), PARAMETER :: M2N3MMxe = 741 - INTEGER(IntKi), PARAMETER :: M2N4MMxe = 742 - INTEGER(IntKi), PARAMETER :: M2N5MMxe = 743 - INTEGER(IntKi), PARAMETER :: M2N6MMxe = 744 - INTEGER(IntKi), PARAMETER :: M2N7MMxe = 745 - INTEGER(IntKi), PARAMETER :: M2N8MMxe = 746 - INTEGER(IntKi), PARAMETER :: M2N9MMxe = 747 - INTEGER(IntKi), PARAMETER :: M3N1MMxe = 748 - INTEGER(IntKi), PARAMETER :: M3N2MMxe = 749 - INTEGER(IntKi), PARAMETER :: M3N3MMxe = 750 - INTEGER(IntKi), PARAMETER :: M3N4MMxe = 751 - INTEGER(IntKi), PARAMETER :: M3N5MMxe = 752 - INTEGER(IntKi), PARAMETER :: M3N6MMxe = 753 - INTEGER(IntKi), PARAMETER :: M3N7MMxe = 754 - INTEGER(IntKi), PARAMETER :: M3N8MMxe = 755 - INTEGER(IntKi), PARAMETER :: M3N9MMxe = 756 - INTEGER(IntKi), PARAMETER :: M4N1MMxe = 757 - INTEGER(IntKi), PARAMETER :: M4N2MMxe = 758 - INTEGER(IntKi), PARAMETER :: M4N3MMxe = 759 - INTEGER(IntKi), PARAMETER :: M4N4MMxe = 760 - INTEGER(IntKi), PARAMETER :: M4N5MMxe = 761 - INTEGER(IntKi), PARAMETER :: M4N6MMxe = 762 - INTEGER(IntKi), PARAMETER :: M4N7MMxe = 763 - INTEGER(IntKi), PARAMETER :: M4N8MMxe = 764 - INTEGER(IntKi), PARAMETER :: M4N9MMxe = 765 - INTEGER(IntKi), PARAMETER :: M5N1MMxe = 766 - INTEGER(IntKi), PARAMETER :: M5N2MMxe = 767 - INTEGER(IntKi), PARAMETER :: M5N3MMxe = 768 - INTEGER(IntKi), PARAMETER :: M5N4MMxe = 769 - INTEGER(IntKi), PARAMETER :: M5N5MMxe = 770 - INTEGER(IntKi), PARAMETER :: M5N6MMxe = 771 - INTEGER(IntKi), PARAMETER :: M5N7MMxe = 772 - INTEGER(IntKi), PARAMETER :: M5N8MMxe = 773 - INTEGER(IntKi), PARAMETER :: M5N9MMxe = 774 - INTEGER(IntKi), PARAMETER :: M6N1MMxe = 775 - INTEGER(IntKi), PARAMETER :: M6N2MMxe = 776 - INTEGER(IntKi), PARAMETER :: M6N3MMxe = 777 - INTEGER(IntKi), PARAMETER :: M6N4MMxe = 778 - INTEGER(IntKi), PARAMETER :: M6N5MMxe = 779 - INTEGER(IntKi), PARAMETER :: M6N6MMxe = 780 - INTEGER(IntKi), PARAMETER :: M6N7MMxe = 781 - INTEGER(IntKi), PARAMETER :: M6N8MMxe = 782 - INTEGER(IntKi), PARAMETER :: M6N9MMxe = 783 - INTEGER(IntKi), PARAMETER :: M7N1MMxe = 784 - INTEGER(IntKi), PARAMETER :: M7N2MMxe = 785 - INTEGER(IntKi), PARAMETER :: M7N3MMxe = 786 - INTEGER(IntKi), PARAMETER :: M7N4MMxe = 787 - INTEGER(IntKi), PARAMETER :: M7N5MMxe = 788 - INTEGER(IntKi), PARAMETER :: M7N6MMxe = 789 - INTEGER(IntKi), PARAMETER :: M7N7MMxe = 790 - INTEGER(IntKi), PARAMETER :: M7N8MMxe = 791 - INTEGER(IntKi), PARAMETER :: M7N9MMxe = 792 - INTEGER(IntKi), PARAMETER :: M8N1MMxe = 793 - INTEGER(IntKi), PARAMETER :: M8N2MMxe = 794 - INTEGER(IntKi), PARAMETER :: M8N3MMxe = 795 - INTEGER(IntKi), PARAMETER :: M8N4MMxe = 796 - INTEGER(IntKi), PARAMETER :: M8N5MMxe = 797 - INTEGER(IntKi), PARAMETER :: M8N6MMxe = 798 - INTEGER(IntKi), PARAMETER :: M8N7MMxe = 799 - INTEGER(IntKi), PARAMETER :: M8N8MMxe = 800 - INTEGER(IntKi), PARAMETER :: M8N9MMxe = 801 - INTEGER(IntKi), PARAMETER :: M9N1MMxe = 802 - INTEGER(IntKi), PARAMETER :: M9N2MMxe = 803 - INTEGER(IntKi), PARAMETER :: M9N3MMxe = 804 - INTEGER(IntKi), PARAMETER :: M9N4MMxe = 805 - INTEGER(IntKi), PARAMETER :: M9N5MMxe = 806 - INTEGER(IntKi), PARAMETER :: M9N6MMxe = 807 - INTEGER(IntKi), PARAMETER :: M9N7MMxe = 808 - INTEGER(IntKi), PARAMETER :: M9N8MMxe = 809 - INTEGER(IntKi), PARAMETER :: M9N9MMxe = 810 - INTEGER(IntKi), PARAMETER :: M1N1MMye = 811 - INTEGER(IntKi), PARAMETER :: M1N2MMye = 812 - INTEGER(IntKi), PARAMETER :: M1N3MMye = 813 - INTEGER(IntKi), PARAMETER :: M1N4MMye = 814 - INTEGER(IntKi), PARAMETER :: M1N5MMye = 815 - INTEGER(IntKi), PARAMETER :: M1N6MMye = 816 - INTEGER(IntKi), PARAMETER :: M1N7MMye = 817 - INTEGER(IntKi), PARAMETER :: M1N8MMye = 818 - INTEGER(IntKi), PARAMETER :: M1N9MMye = 819 - INTEGER(IntKi), PARAMETER :: M2N1MMye = 820 - INTEGER(IntKi), PARAMETER :: M2N2MMye = 821 - INTEGER(IntKi), PARAMETER :: M2N3MMye = 822 - INTEGER(IntKi), PARAMETER :: M2N4MMye = 823 - INTEGER(IntKi), PARAMETER :: M2N5MMye = 824 - INTEGER(IntKi), PARAMETER :: M2N6MMye = 825 - INTEGER(IntKi), PARAMETER :: M2N7MMye = 826 - INTEGER(IntKi), PARAMETER :: M2N8MMye = 827 - INTEGER(IntKi), PARAMETER :: M2N9MMye = 828 - INTEGER(IntKi), PARAMETER :: M3N1MMye = 829 - INTEGER(IntKi), PARAMETER :: M3N2MMye = 830 - INTEGER(IntKi), PARAMETER :: M3N3MMye = 831 - INTEGER(IntKi), PARAMETER :: M3N4MMye = 832 - INTEGER(IntKi), PARAMETER :: M3N5MMye = 833 - INTEGER(IntKi), PARAMETER :: M3N6MMye = 834 - INTEGER(IntKi), PARAMETER :: M3N7MMye = 835 - INTEGER(IntKi), PARAMETER :: M3N8MMye = 836 - INTEGER(IntKi), PARAMETER :: M3N9MMye = 837 - INTEGER(IntKi), PARAMETER :: M4N1MMye = 838 - INTEGER(IntKi), PARAMETER :: M4N2MMye = 839 - INTEGER(IntKi), PARAMETER :: M4N3MMye = 840 - INTEGER(IntKi), PARAMETER :: M4N4MMye = 841 - INTEGER(IntKi), PARAMETER :: M4N5MMye = 842 - INTEGER(IntKi), PARAMETER :: M4N6MMye = 843 - INTEGER(IntKi), PARAMETER :: M4N7MMye = 844 - INTEGER(IntKi), PARAMETER :: M4N8MMye = 845 - INTEGER(IntKi), PARAMETER :: M4N9MMye = 846 - INTEGER(IntKi), PARAMETER :: M5N1MMye = 847 - INTEGER(IntKi), PARAMETER :: M5N2MMye = 848 - INTEGER(IntKi), PARAMETER :: M5N3MMye = 849 - INTEGER(IntKi), PARAMETER :: M5N4MMye = 850 - INTEGER(IntKi), PARAMETER :: M5N5MMye = 851 - INTEGER(IntKi), PARAMETER :: M5N6MMye = 852 - INTEGER(IntKi), PARAMETER :: M5N7MMye = 853 - INTEGER(IntKi), PARAMETER :: M5N8MMye = 854 - INTEGER(IntKi), PARAMETER :: M5N9MMye = 855 - INTEGER(IntKi), PARAMETER :: M6N1MMye = 856 - INTEGER(IntKi), PARAMETER :: M6N2MMye = 857 - INTEGER(IntKi), PARAMETER :: M6N3MMye = 858 - INTEGER(IntKi), PARAMETER :: M6N4MMye = 859 - INTEGER(IntKi), PARAMETER :: M6N5MMye = 860 - INTEGER(IntKi), PARAMETER :: M6N6MMye = 861 - INTEGER(IntKi), PARAMETER :: M6N7MMye = 862 - INTEGER(IntKi), PARAMETER :: M6N8MMye = 863 - INTEGER(IntKi), PARAMETER :: M6N9MMye = 864 - INTEGER(IntKi), PARAMETER :: M7N1MMye = 865 - INTEGER(IntKi), PARAMETER :: M7N2MMye = 866 - INTEGER(IntKi), PARAMETER :: M7N3MMye = 867 - INTEGER(IntKi), PARAMETER :: M7N4MMye = 868 - INTEGER(IntKi), PARAMETER :: M7N5MMye = 869 - INTEGER(IntKi), PARAMETER :: M7N6MMye = 870 - INTEGER(IntKi), PARAMETER :: M7N7MMye = 871 - INTEGER(IntKi), PARAMETER :: M7N8MMye = 872 - INTEGER(IntKi), PARAMETER :: M7N9MMye = 873 - INTEGER(IntKi), PARAMETER :: M8N1MMye = 874 - INTEGER(IntKi), PARAMETER :: M8N2MMye = 875 - INTEGER(IntKi), PARAMETER :: M8N3MMye = 876 - INTEGER(IntKi), PARAMETER :: M8N4MMye = 877 - INTEGER(IntKi), PARAMETER :: M8N5MMye = 878 - INTEGER(IntKi), PARAMETER :: M8N6MMye = 879 - INTEGER(IntKi), PARAMETER :: M8N7MMye = 880 - INTEGER(IntKi), PARAMETER :: M8N8MMye = 881 - INTEGER(IntKi), PARAMETER :: M8N9MMye = 882 - INTEGER(IntKi), PARAMETER :: M9N1MMye = 883 - INTEGER(IntKi), PARAMETER :: M9N2MMye = 884 - INTEGER(IntKi), PARAMETER :: M9N3MMye = 885 - INTEGER(IntKi), PARAMETER :: M9N4MMye = 886 - INTEGER(IntKi), PARAMETER :: M9N5MMye = 887 - INTEGER(IntKi), PARAMETER :: M9N6MMye = 888 - INTEGER(IntKi), PARAMETER :: M9N7MMye = 889 - INTEGER(IntKi), PARAMETER :: M9N8MMye = 890 - INTEGER(IntKi), PARAMETER :: M9N9MMye = 891 - INTEGER(IntKi), PARAMETER :: M1N1MMze = 892 - INTEGER(IntKi), PARAMETER :: M1N2MMze = 893 - INTEGER(IntKi), PARAMETER :: M1N3MMze = 894 - INTEGER(IntKi), PARAMETER :: M1N4MMze = 895 - INTEGER(IntKi), PARAMETER :: M1N5MMze = 896 - INTEGER(IntKi), PARAMETER :: M1N6MMze = 897 - INTEGER(IntKi), PARAMETER :: M1N7MMze = 898 - INTEGER(IntKi), PARAMETER :: M1N8MMze = 899 - INTEGER(IntKi), PARAMETER :: M1N9MMze = 900 - INTEGER(IntKi), PARAMETER :: M2N1MMze = 901 - INTEGER(IntKi), PARAMETER :: M2N2MMze = 902 - INTEGER(IntKi), PARAMETER :: M2N3MMze = 903 - INTEGER(IntKi), PARAMETER :: M2N4MMze = 904 - INTEGER(IntKi), PARAMETER :: M2N5MMze = 905 - INTEGER(IntKi), PARAMETER :: M2N6MMze = 906 - INTEGER(IntKi), PARAMETER :: M2N7MMze = 907 - INTEGER(IntKi), PARAMETER :: M2N8MMze = 908 - INTEGER(IntKi), PARAMETER :: M2N9MMze = 909 - INTEGER(IntKi), PARAMETER :: M3N1MMze = 910 - INTEGER(IntKi), PARAMETER :: M3N2MMze = 911 - INTEGER(IntKi), PARAMETER :: M3N3MMze = 912 - INTEGER(IntKi), PARAMETER :: M3N4MMze = 913 - INTEGER(IntKi), PARAMETER :: M3N5MMze = 914 - INTEGER(IntKi), PARAMETER :: M3N6MMze = 915 - INTEGER(IntKi), PARAMETER :: M3N7MMze = 916 - INTEGER(IntKi), PARAMETER :: M3N8MMze = 917 - INTEGER(IntKi), PARAMETER :: M3N9MMze = 918 - INTEGER(IntKi), PARAMETER :: M4N1MMze = 919 - INTEGER(IntKi), PARAMETER :: M4N2MMze = 920 - INTEGER(IntKi), PARAMETER :: M4N3MMze = 921 - INTEGER(IntKi), PARAMETER :: M4N4MMze = 922 - INTEGER(IntKi), PARAMETER :: M4N5MMze = 923 - INTEGER(IntKi), PARAMETER :: M4N6MMze = 924 - INTEGER(IntKi), PARAMETER :: M4N7MMze = 925 - INTEGER(IntKi), PARAMETER :: M4N8MMze = 926 - INTEGER(IntKi), PARAMETER :: M4N9MMze = 927 - INTEGER(IntKi), PARAMETER :: M5N1MMze = 928 - INTEGER(IntKi), PARAMETER :: M5N2MMze = 929 - INTEGER(IntKi), PARAMETER :: M5N3MMze = 930 - INTEGER(IntKi), PARAMETER :: M5N4MMze = 931 - INTEGER(IntKi), PARAMETER :: M5N5MMze = 932 - INTEGER(IntKi), PARAMETER :: M5N6MMze = 933 - INTEGER(IntKi), PARAMETER :: M5N7MMze = 934 - INTEGER(IntKi), PARAMETER :: M5N8MMze = 935 - INTEGER(IntKi), PARAMETER :: M5N9MMze = 936 - INTEGER(IntKi), PARAMETER :: M6N1MMze = 937 - INTEGER(IntKi), PARAMETER :: M6N2MMze = 938 - INTEGER(IntKi), PARAMETER :: M6N3MMze = 939 - INTEGER(IntKi), PARAMETER :: M6N4MMze = 940 - INTEGER(IntKi), PARAMETER :: M6N5MMze = 941 - INTEGER(IntKi), PARAMETER :: M6N6MMze = 942 - INTEGER(IntKi), PARAMETER :: M6N7MMze = 943 - INTEGER(IntKi), PARAMETER :: M6N8MMze = 944 - INTEGER(IntKi), PARAMETER :: M6N9MMze = 945 - INTEGER(IntKi), PARAMETER :: M7N1MMze = 946 - INTEGER(IntKi), PARAMETER :: M7N2MMze = 947 - INTEGER(IntKi), PARAMETER :: M7N3MMze = 948 - INTEGER(IntKi), PARAMETER :: M7N4MMze = 949 - INTEGER(IntKi), PARAMETER :: M7N5MMze = 950 - INTEGER(IntKi), PARAMETER :: M7N6MMze = 951 - INTEGER(IntKi), PARAMETER :: M7N7MMze = 952 - INTEGER(IntKi), PARAMETER :: M7N8MMze = 953 - INTEGER(IntKi), PARAMETER :: M7N9MMze = 954 - INTEGER(IntKi), PARAMETER :: M8N1MMze = 955 - INTEGER(IntKi), PARAMETER :: M8N2MMze = 956 - INTEGER(IntKi), PARAMETER :: M8N3MMze = 957 - INTEGER(IntKi), PARAMETER :: M8N4MMze = 958 - INTEGER(IntKi), PARAMETER :: M8N5MMze = 959 - INTEGER(IntKi), PARAMETER :: M8N6MMze = 960 - INTEGER(IntKi), PARAMETER :: M8N7MMze = 961 - INTEGER(IntKi), PARAMETER :: M8N8MMze = 962 - INTEGER(IntKi), PARAMETER :: M8N9MMze = 963 - INTEGER(IntKi), PARAMETER :: M9N1MMze = 964 - INTEGER(IntKi), PARAMETER :: M9N2MMze = 965 - INTEGER(IntKi), PARAMETER :: M9N3MMze = 966 - INTEGER(IntKi), PARAMETER :: M9N4MMze = 967 - INTEGER(IntKi), PARAMETER :: M9N5MMze = 968 - INTEGER(IntKi), PARAMETER :: M9N6MMze = 969 - INTEGER(IntKi), PARAMETER :: M9N7MMze = 970 - INTEGER(IntKi), PARAMETER :: M9N8MMze = 971 - INTEGER(IntKi), PARAMETER :: M9N9MMze = 972 + ! Member Forces: - ! Displacements: + INTEGER(IntKi), PARAMETER :: M01N1FKxe = 1 + INTEGER(IntKi), PARAMETER :: M01N2FKxe = 2 + INTEGER(IntKi), PARAMETER :: M01N3FKxe = 3 + INTEGER(IntKi), PARAMETER :: M01N4FKxe = 4 + INTEGER(IntKi), PARAMETER :: M01N5FKxe = 5 + INTEGER(IntKi), PARAMETER :: M01N6FKxe = 6 + INTEGER(IntKi), PARAMETER :: M01N7FKxe = 7 + INTEGER(IntKi), PARAMETER :: M01N8FKxe = 8 + INTEGER(IntKi), PARAMETER :: M01N9FKxe = 9 + INTEGER(IntKi), PARAMETER :: M02N1FKxe = 10 + INTEGER(IntKi), PARAMETER :: M02N2FKxe = 11 + INTEGER(IntKi), PARAMETER :: M02N3FKxe = 12 + INTEGER(IntKi), PARAMETER :: M02N4FKxe = 13 + INTEGER(IntKi), PARAMETER :: M02N5FKxe = 14 + INTEGER(IntKi), PARAMETER :: M02N6FKxe = 15 + INTEGER(IntKi), PARAMETER :: M02N7FKxe = 16 + INTEGER(IntKi), PARAMETER :: M02N8FKxe = 17 + INTEGER(IntKi), PARAMETER :: M02N9FKxe = 18 + INTEGER(IntKi), PARAMETER :: M03N1FKxe = 19 + INTEGER(IntKi), PARAMETER :: M03N2FKxe = 20 + INTEGER(IntKi), PARAMETER :: M03N3FKxe = 21 + INTEGER(IntKi), PARAMETER :: M03N4FKxe = 22 + INTEGER(IntKi), PARAMETER :: M03N5FKxe = 23 + INTEGER(IntKi), PARAMETER :: M03N6FKxe = 24 + INTEGER(IntKi), PARAMETER :: M03N7FKxe = 25 + INTEGER(IntKi), PARAMETER :: M03N8FKxe = 26 + INTEGER(IntKi), PARAMETER :: M03N9FKxe = 27 + INTEGER(IntKi), PARAMETER :: M04N1FKxe = 28 + INTEGER(IntKi), PARAMETER :: M04N2FKxe = 29 + INTEGER(IntKi), PARAMETER :: M04N3FKxe = 30 + INTEGER(IntKi), PARAMETER :: M04N4FKxe = 31 + INTEGER(IntKi), PARAMETER :: M04N5FKxe = 32 + INTEGER(IntKi), PARAMETER :: M04N6FKxe = 33 + INTEGER(IntKi), PARAMETER :: M04N7FKxe = 34 + INTEGER(IntKi), PARAMETER :: M04N8FKxe = 35 + INTEGER(IntKi), PARAMETER :: M04N9FKxe = 36 + INTEGER(IntKi), PARAMETER :: M05N1FKxe = 37 + INTEGER(IntKi), PARAMETER :: M05N2FKxe = 38 + INTEGER(IntKi), PARAMETER :: M05N3FKxe = 39 + INTEGER(IntKi), PARAMETER :: M05N4FKxe = 40 + INTEGER(IntKi), PARAMETER :: M05N5FKxe = 41 + INTEGER(IntKi), PARAMETER :: M05N6FKxe = 42 + INTEGER(IntKi), PARAMETER :: M05N7FKxe = 43 + INTEGER(IntKi), PARAMETER :: M05N8FKxe = 44 + INTEGER(IntKi), PARAMETER :: M05N9FKxe = 45 + INTEGER(IntKi), PARAMETER :: M06N1FKxe = 46 + INTEGER(IntKi), PARAMETER :: M06N2FKxe = 47 + INTEGER(IntKi), PARAMETER :: M06N3FKxe = 48 + INTEGER(IntKi), PARAMETER :: M06N4FKxe = 49 + INTEGER(IntKi), PARAMETER :: M06N5FKxe = 50 + INTEGER(IntKi), PARAMETER :: M06N6FKxe = 51 + INTEGER(IntKi), PARAMETER :: M06N7FKxe = 52 + INTEGER(IntKi), PARAMETER :: M06N8FKxe = 53 + INTEGER(IntKi), PARAMETER :: M06N9FKxe = 54 + INTEGER(IntKi), PARAMETER :: M07N1FKxe = 55 + INTEGER(IntKi), PARAMETER :: M07N2FKxe = 56 + INTEGER(IntKi), PARAMETER :: M07N3FKxe = 57 + INTEGER(IntKi), PARAMETER :: M07N4FKxe = 58 + INTEGER(IntKi), PARAMETER :: M07N5FKxe = 59 + INTEGER(IntKi), PARAMETER :: M07N6FKxe = 60 + INTEGER(IntKi), PARAMETER :: M07N7FKxe = 61 + INTEGER(IntKi), PARAMETER :: M07N8FKxe = 62 + INTEGER(IntKi), PARAMETER :: M07N9FKxe = 63 + INTEGER(IntKi), PARAMETER :: M08N1FKxe = 64 + INTEGER(IntKi), PARAMETER :: M08N2FKxe = 65 + INTEGER(IntKi), PARAMETER :: M08N3FKxe = 66 + INTEGER(IntKi), PARAMETER :: M08N4FKxe = 67 + INTEGER(IntKi), PARAMETER :: M08N5FKxe = 68 + INTEGER(IntKi), PARAMETER :: M08N6FKxe = 69 + INTEGER(IntKi), PARAMETER :: M08N7FKxe = 70 + INTEGER(IntKi), PARAMETER :: M08N8FKxe = 71 + INTEGER(IntKi), PARAMETER :: M08N9FKxe = 72 + INTEGER(IntKi), PARAMETER :: M09N1FKxe = 73 + INTEGER(IntKi), PARAMETER :: M09N2FKxe = 74 + INTEGER(IntKi), PARAMETER :: M09N3FKxe = 75 + INTEGER(IntKi), PARAMETER :: M09N4FKxe = 76 + INTEGER(IntKi), PARAMETER :: M09N5FKxe = 77 + INTEGER(IntKi), PARAMETER :: M09N6FKxe = 78 + INTEGER(IntKi), PARAMETER :: M09N7FKxe = 79 + INTEGER(IntKi), PARAMETER :: M09N8FKxe = 80 + INTEGER(IntKi), PARAMETER :: M09N9FKxe = 81 + INTEGER(IntKi), PARAMETER :: M10N1FKxe = 82 + INTEGER(IntKi), PARAMETER :: M10N2FKxe = 83 + INTEGER(IntKi), PARAMETER :: M10N3FKxe = 84 + INTEGER(IntKi), PARAMETER :: M10N4FKxe = 85 + INTEGER(IntKi), PARAMETER :: M10N5FKxe = 86 + INTEGER(IntKi), PARAMETER :: M10N6FKxe = 87 + INTEGER(IntKi), PARAMETER :: M10N7FKxe = 88 + INTEGER(IntKi), PARAMETER :: M10N8FKxe = 89 + INTEGER(IntKi), PARAMETER :: M10N9FKxe = 90 + INTEGER(IntKi), PARAMETER :: M11N1FKxe = 91 + INTEGER(IntKi), PARAMETER :: M11N2FKxe = 92 + INTEGER(IntKi), PARAMETER :: M11N3FKxe = 93 + INTEGER(IntKi), PARAMETER :: M11N4FKxe = 94 + INTEGER(IntKi), PARAMETER :: M11N5FKxe = 95 + INTEGER(IntKi), PARAMETER :: M11N6FKxe = 96 + INTEGER(IntKi), PARAMETER :: M11N7FKxe = 97 + INTEGER(IntKi), PARAMETER :: M11N8FKxe = 98 + INTEGER(IntKi), PARAMETER :: M11N9FKxe = 99 + INTEGER(IntKi), PARAMETER :: M12N1FKxe = 100 + INTEGER(IntKi), PARAMETER :: M12N2FKxe = 101 + INTEGER(IntKi), PARAMETER :: M12N3FKxe = 102 + INTEGER(IntKi), PARAMETER :: M12N4FKxe = 103 + INTEGER(IntKi), PARAMETER :: M12N5FKxe = 104 + INTEGER(IntKi), PARAMETER :: M12N6FKxe = 105 + INTEGER(IntKi), PARAMETER :: M12N7FKxe = 106 + INTEGER(IntKi), PARAMETER :: M12N8FKxe = 107 + INTEGER(IntKi), PARAMETER :: M12N9FKxe = 108 + INTEGER(IntKi), PARAMETER :: M13N1FKxe = 109 + INTEGER(IntKi), PARAMETER :: M13N2FKxe = 110 + INTEGER(IntKi), PARAMETER :: M13N3FKxe = 111 + INTEGER(IntKi), PARAMETER :: M13N4FKxe = 112 + INTEGER(IntKi), PARAMETER :: M13N5FKxe = 113 + INTEGER(IntKi), PARAMETER :: M13N6FKxe = 114 + INTEGER(IntKi), PARAMETER :: M13N7FKxe = 115 + INTEGER(IntKi), PARAMETER :: M13N8FKxe = 116 + INTEGER(IntKi), PARAMETER :: M13N9FKxe = 117 + INTEGER(IntKi), PARAMETER :: M14N1FKxe = 118 + INTEGER(IntKi), PARAMETER :: M14N2FKxe = 119 + INTEGER(IntKi), PARAMETER :: M14N3FKxe = 120 + INTEGER(IntKi), PARAMETER :: M14N4FKxe = 121 + INTEGER(IntKi), PARAMETER :: M14N5FKxe = 122 + INTEGER(IntKi), PARAMETER :: M14N6FKxe = 123 + INTEGER(IntKi), PARAMETER :: M14N7FKxe = 124 + INTEGER(IntKi), PARAMETER :: M14N8FKxe = 125 + INTEGER(IntKi), PARAMETER :: M14N9FKxe = 126 + INTEGER(IntKi), PARAMETER :: M15N1FKxe = 127 + INTEGER(IntKi), PARAMETER :: M15N2FKxe = 128 + INTEGER(IntKi), PARAMETER :: M15N3FKxe = 129 + INTEGER(IntKi), PARAMETER :: M15N4FKxe = 130 + INTEGER(IntKi), PARAMETER :: M15N5FKxe = 131 + INTEGER(IntKi), PARAMETER :: M15N6FKxe = 132 + INTEGER(IntKi), PARAMETER :: M15N7FKxe = 133 + INTEGER(IntKi), PARAMETER :: M15N8FKxe = 134 + INTEGER(IntKi), PARAMETER :: M15N9FKxe = 135 + INTEGER(IntKi), PARAMETER :: M16N1FKxe = 136 + INTEGER(IntKi), PARAMETER :: M16N2FKxe = 137 + INTEGER(IntKi), PARAMETER :: M16N3FKxe = 138 + INTEGER(IntKi), PARAMETER :: M16N4FKxe = 139 + INTEGER(IntKi), PARAMETER :: M16N5FKxe = 140 + INTEGER(IntKi), PARAMETER :: M16N6FKxe = 141 + INTEGER(IntKi), PARAMETER :: M16N7FKxe = 142 + INTEGER(IntKi), PARAMETER :: M16N8FKxe = 143 + INTEGER(IntKi), PARAMETER :: M16N9FKxe = 144 + INTEGER(IntKi), PARAMETER :: M17N1FKxe = 145 + INTEGER(IntKi), PARAMETER :: M17N2FKxe = 146 + INTEGER(IntKi), PARAMETER :: M17N3FKxe = 147 + INTEGER(IntKi), PARAMETER :: M17N4FKxe = 148 + INTEGER(IntKi), PARAMETER :: M17N5FKxe = 149 + INTEGER(IntKi), PARAMETER :: M17N6FKxe = 150 + INTEGER(IntKi), PARAMETER :: M17N7FKxe = 151 + INTEGER(IntKi), PARAMETER :: M17N8FKxe = 152 + INTEGER(IntKi), PARAMETER :: M17N9FKxe = 153 + INTEGER(IntKi), PARAMETER :: M18N1FKxe = 154 + INTEGER(IntKi), PARAMETER :: M18N2FKxe = 155 + INTEGER(IntKi), PARAMETER :: M18N3FKxe = 156 + INTEGER(IntKi), PARAMETER :: M18N4FKxe = 157 + INTEGER(IntKi), PARAMETER :: M18N5FKxe = 158 + INTEGER(IntKi), PARAMETER :: M18N6FKxe = 159 + INTEGER(IntKi), PARAMETER :: M18N7FKxe = 160 + INTEGER(IntKi), PARAMETER :: M18N8FKxe = 161 + INTEGER(IntKi), PARAMETER :: M18N9FKxe = 162 + INTEGER(IntKi), PARAMETER :: M19N1FKxe = 163 + INTEGER(IntKi), PARAMETER :: M19N2FKxe = 164 + INTEGER(IntKi), PARAMETER :: M19N3FKxe = 165 + INTEGER(IntKi), PARAMETER :: M19N4FKxe = 166 + INTEGER(IntKi), PARAMETER :: M19N5FKxe = 167 + INTEGER(IntKi), PARAMETER :: M19N6FKxe = 168 + INTEGER(IntKi), PARAMETER :: M19N7FKxe = 169 + INTEGER(IntKi), PARAMETER :: M19N8FKxe = 170 + INTEGER(IntKi), PARAMETER :: M19N9FKxe = 171 + INTEGER(IntKi), PARAMETER :: M20N1FKxe = 172 + INTEGER(IntKi), PARAMETER :: M20N2FKxe = 173 + INTEGER(IntKi), PARAMETER :: M20N3FKxe = 174 + INTEGER(IntKi), PARAMETER :: M20N4FKxe = 175 + INTEGER(IntKi), PARAMETER :: M20N5FKxe = 176 + INTEGER(IntKi), PARAMETER :: M20N6FKxe = 177 + INTEGER(IntKi), PARAMETER :: M20N7FKxe = 178 + INTEGER(IntKi), PARAMETER :: M20N8FKxe = 179 + INTEGER(IntKi), PARAMETER :: M20N9FKxe = 180 + INTEGER(IntKi), PARAMETER :: M21N1FKxe = 181 + INTEGER(IntKi), PARAMETER :: M21N2FKxe = 182 + INTEGER(IntKi), PARAMETER :: M21N3FKxe = 183 + INTEGER(IntKi), PARAMETER :: M21N4FKxe = 184 + INTEGER(IntKi), PARAMETER :: M21N5FKxe = 185 + INTEGER(IntKi), PARAMETER :: M21N6FKxe = 186 + INTEGER(IntKi), PARAMETER :: M21N7FKxe = 187 + INTEGER(IntKi), PARAMETER :: M21N8FKxe = 188 + INTEGER(IntKi), PARAMETER :: M21N9FKxe = 189 + INTEGER(IntKi), PARAMETER :: M22N1FKxe = 190 + INTEGER(IntKi), PARAMETER :: M22N2FKxe = 191 + INTEGER(IntKi), PARAMETER :: M22N3FKxe = 192 + INTEGER(IntKi), PARAMETER :: M22N4FKxe = 193 + INTEGER(IntKi), PARAMETER :: M22N5FKxe = 194 + INTEGER(IntKi), PARAMETER :: M22N6FKxe = 195 + INTEGER(IntKi), PARAMETER :: M22N7FKxe = 196 + INTEGER(IntKi), PARAMETER :: M22N8FKxe = 197 + INTEGER(IntKi), PARAMETER :: M22N9FKxe = 198 + INTEGER(IntKi), PARAMETER :: M23N1FKxe = 199 + INTEGER(IntKi), PARAMETER :: M23N2FKxe = 200 + INTEGER(IntKi), PARAMETER :: M23N3FKxe = 201 + INTEGER(IntKi), PARAMETER :: M23N4FKxe = 202 + INTEGER(IntKi), PARAMETER :: M23N5FKxe = 203 + INTEGER(IntKi), PARAMETER :: M23N6FKxe = 204 + INTEGER(IntKi), PARAMETER :: M23N7FKxe = 205 + INTEGER(IntKi), PARAMETER :: M23N8FKxe = 206 + INTEGER(IntKi), PARAMETER :: M23N9FKxe = 207 + INTEGER(IntKi), PARAMETER :: M24N1FKxe = 208 + INTEGER(IntKi), PARAMETER :: M24N2FKxe = 209 + INTEGER(IntKi), PARAMETER :: M24N3FKxe = 210 + INTEGER(IntKi), PARAMETER :: M24N4FKxe = 211 + INTEGER(IntKi), PARAMETER :: M24N5FKxe = 212 + INTEGER(IntKi), PARAMETER :: M24N6FKxe = 213 + INTEGER(IntKi), PARAMETER :: M24N7FKxe = 214 + INTEGER(IntKi), PARAMETER :: M24N8FKxe = 215 + INTEGER(IntKi), PARAMETER :: M24N9FKxe = 216 + INTEGER(IntKi), PARAMETER :: M25N1FKxe = 217 + INTEGER(IntKi), PARAMETER :: M25N2FKxe = 218 + INTEGER(IntKi), PARAMETER :: M25N3FKxe = 219 + INTEGER(IntKi), PARAMETER :: M25N4FKxe = 220 + INTEGER(IntKi), PARAMETER :: M25N5FKxe = 221 + INTEGER(IntKi), PARAMETER :: M25N6FKxe = 222 + INTEGER(IntKi), PARAMETER :: M25N7FKxe = 223 + INTEGER(IntKi), PARAMETER :: M25N8FKxe = 224 + INTEGER(IntKi), PARAMETER :: M25N9FKxe = 225 + INTEGER(IntKi), PARAMETER :: M26N1FKxe = 226 + INTEGER(IntKi), PARAMETER :: M26N2FKxe = 227 + INTEGER(IntKi), PARAMETER :: M26N3FKxe = 228 + INTEGER(IntKi), PARAMETER :: M26N4FKxe = 229 + INTEGER(IntKi), PARAMETER :: M26N5FKxe = 230 + INTEGER(IntKi), PARAMETER :: M26N6FKxe = 231 + INTEGER(IntKi), PARAMETER :: M26N7FKxe = 232 + INTEGER(IntKi), PARAMETER :: M26N8FKxe = 233 + INTEGER(IntKi), PARAMETER :: M26N9FKxe = 234 + INTEGER(IntKi), PARAMETER :: M27N1FKxe = 235 + INTEGER(IntKi), PARAMETER :: M27N2FKxe = 236 + INTEGER(IntKi), PARAMETER :: M27N3FKxe = 237 + INTEGER(IntKi), PARAMETER :: M27N4FKxe = 238 + INTEGER(IntKi), PARAMETER :: M27N5FKxe = 239 + INTEGER(IntKi), PARAMETER :: M27N6FKxe = 240 + INTEGER(IntKi), PARAMETER :: M27N7FKxe = 241 + INTEGER(IntKi), PARAMETER :: M27N8FKxe = 242 + INTEGER(IntKi), PARAMETER :: M27N9FKxe = 243 + INTEGER(IntKi), PARAMETER :: M28N1FKxe = 244 + INTEGER(IntKi), PARAMETER :: M28N2FKxe = 245 + INTEGER(IntKi), PARAMETER :: M28N3FKxe = 246 + INTEGER(IntKi), PARAMETER :: M28N4FKxe = 247 + INTEGER(IntKi), PARAMETER :: M28N5FKxe = 248 + INTEGER(IntKi), PARAMETER :: M28N6FKxe = 249 + INTEGER(IntKi), PARAMETER :: M28N7FKxe = 250 + INTEGER(IntKi), PARAMETER :: M28N8FKxe = 251 + INTEGER(IntKi), PARAMETER :: M28N9FKxe = 252 + INTEGER(IntKi), PARAMETER :: M29N1FKxe = 253 + INTEGER(IntKi), PARAMETER :: M29N2FKxe = 254 + INTEGER(IntKi), PARAMETER :: M29N3FKxe = 255 + INTEGER(IntKi), PARAMETER :: M29N4FKxe = 256 + INTEGER(IntKi), PARAMETER :: M29N5FKxe = 257 + INTEGER(IntKi), PARAMETER :: M29N6FKxe = 258 + INTEGER(IntKi), PARAMETER :: M29N7FKxe = 259 + INTEGER(IntKi), PARAMETER :: M29N8FKxe = 260 + INTEGER(IntKi), PARAMETER :: M29N9FKxe = 261 + INTEGER(IntKi), PARAMETER :: M30N1FKxe = 262 + INTEGER(IntKi), PARAMETER :: M30N2FKxe = 263 + INTEGER(IntKi), PARAMETER :: M30N3FKxe = 264 + INTEGER(IntKi), PARAMETER :: M30N4FKxe = 265 + INTEGER(IntKi), PARAMETER :: M30N5FKxe = 266 + INTEGER(IntKi), PARAMETER :: M30N6FKxe = 267 + INTEGER(IntKi), PARAMETER :: M30N7FKxe = 268 + INTEGER(IntKi), PARAMETER :: M30N8FKxe = 269 + INTEGER(IntKi), PARAMETER :: M30N9FKxe = 270 + INTEGER(IntKi), PARAMETER :: M31N1FKxe = 271 + INTEGER(IntKi), PARAMETER :: M31N2FKxe = 272 + INTEGER(IntKi), PARAMETER :: M31N3FKxe = 273 + INTEGER(IntKi), PARAMETER :: M31N4FKxe = 274 + INTEGER(IntKi), PARAMETER :: M31N5FKxe = 275 + INTEGER(IntKi), PARAMETER :: M31N6FKxe = 276 + INTEGER(IntKi), PARAMETER :: M31N7FKxe = 277 + INTEGER(IntKi), PARAMETER :: M31N8FKxe = 278 + INTEGER(IntKi), PARAMETER :: M31N9FKxe = 279 + INTEGER(IntKi), PARAMETER :: M32N1FKxe = 280 + INTEGER(IntKi), PARAMETER :: M32N2FKxe = 281 + INTEGER(IntKi), PARAMETER :: M32N3FKxe = 282 + INTEGER(IntKi), PARAMETER :: M32N4FKxe = 283 + INTEGER(IntKi), PARAMETER :: M32N5FKxe = 284 + INTEGER(IntKi), PARAMETER :: M32N6FKxe = 285 + INTEGER(IntKi), PARAMETER :: M32N7FKxe = 286 + INTEGER(IntKi), PARAMETER :: M32N8FKxe = 287 + INTEGER(IntKi), PARAMETER :: M32N9FKxe = 288 + INTEGER(IntKi), PARAMETER :: M33N1FKxe = 289 + INTEGER(IntKi), PARAMETER :: M33N2FKxe = 290 + INTEGER(IntKi), PARAMETER :: M33N3FKxe = 291 + INTEGER(IntKi), PARAMETER :: M33N4FKxe = 292 + INTEGER(IntKi), PARAMETER :: M33N5FKxe = 293 + INTEGER(IntKi), PARAMETER :: M33N6FKxe = 294 + INTEGER(IntKi), PARAMETER :: M33N7FKxe = 295 + INTEGER(IntKi), PARAMETER :: M33N8FKxe = 296 + INTEGER(IntKi), PARAMETER :: M33N9FKxe = 297 + INTEGER(IntKi), PARAMETER :: M34N1FKxe = 298 + INTEGER(IntKi), PARAMETER :: M34N2FKxe = 299 + INTEGER(IntKi), PARAMETER :: M34N3FKxe = 300 + INTEGER(IntKi), PARAMETER :: M34N4FKxe = 301 + INTEGER(IntKi), PARAMETER :: M34N5FKxe = 302 + INTEGER(IntKi), PARAMETER :: M34N6FKxe = 303 + INTEGER(IntKi), PARAMETER :: M34N7FKxe = 304 + INTEGER(IntKi), PARAMETER :: M34N8FKxe = 305 + INTEGER(IntKi), PARAMETER :: M34N9FKxe = 306 + INTEGER(IntKi), PARAMETER :: M35N1FKxe = 307 + INTEGER(IntKi), PARAMETER :: M35N2FKxe = 308 + INTEGER(IntKi), PARAMETER :: M35N3FKxe = 309 + INTEGER(IntKi), PARAMETER :: M35N4FKxe = 310 + INTEGER(IntKi), PARAMETER :: M35N5FKxe = 311 + INTEGER(IntKi), PARAMETER :: M35N6FKxe = 312 + INTEGER(IntKi), PARAMETER :: M35N7FKxe = 313 + INTEGER(IntKi), PARAMETER :: M35N8FKxe = 314 + INTEGER(IntKi), PARAMETER :: M35N9FKxe = 315 + INTEGER(IntKi), PARAMETER :: M36N1FKxe = 316 + INTEGER(IntKi), PARAMETER :: M36N2FKxe = 317 + INTEGER(IntKi), PARAMETER :: M36N3FKxe = 318 + INTEGER(IntKi), PARAMETER :: M36N4FKxe = 319 + INTEGER(IntKi), PARAMETER :: M36N5FKxe = 320 + INTEGER(IntKi), PARAMETER :: M36N6FKxe = 321 + INTEGER(IntKi), PARAMETER :: M36N7FKxe = 322 + INTEGER(IntKi), PARAMETER :: M36N8FKxe = 323 + INTEGER(IntKi), PARAMETER :: M36N9FKxe = 324 + INTEGER(IntKi), PARAMETER :: M37N1FKxe = 325 + INTEGER(IntKi), PARAMETER :: M37N2FKxe = 326 + INTEGER(IntKi), PARAMETER :: M37N3FKxe = 327 + INTEGER(IntKi), PARAMETER :: M37N4FKxe = 328 + INTEGER(IntKi), PARAMETER :: M37N5FKxe = 329 + INTEGER(IntKi), PARAMETER :: M37N6FKxe = 330 + INTEGER(IntKi), PARAMETER :: M37N7FKxe = 331 + INTEGER(IntKi), PARAMETER :: M37N8FKxe = 332 + INTEGER(IntKi), PARAMETER :: M37N9FKxe = 333 + INTEGER(IntKi), PARAMETER :: M38N1FKxe = 334 + INTEGER(IntKi), PARAMETER :: M38N2FKxe = 335 + INTEGER(IntKi), PARAMETER :: M38N3FKxe = 336 + INTEGER(IntKi), PARAMETER :: M38N4FKxe = 337 + INTEGER(IntKi), PARAMETER :: M38N5FKxe = 338 + INTEGER(IntKi), PARAMETER :: M38N6FKxe = 339 + INTEGER(IntKi), PARAMETER :: M38N7FKxe = 340 + INTEGER(IntKi), PARAMETER :: M38N8FKxe = 341 + INTEGER(IntKi), PARAMETER :: M38N9FKxe = 342 + INTEGER(IntKi), PARAMETER :: M39N1FKxe = 343 + INTEGER(IntKi), PARAMETER :: M39N2FKxe = 344 + INTEGER(IntKi), PARAMETER :: M39N3FKxe = 345 + INTEGER(IntKi), PARAMETER :: M39N4FKxe = 346 + INTEGER(IntKi), PARAMETER :: M39N5FKxe = 347 + INTEGER(IntKi), PARAMETER :: M39N6FKxe = 348 + INTEGER(IntKi), PARAMETER :: M39N7FKxe = 349 + INTEGER(IntKi), PARAMETER :: M39N8FKxe = 350 + INTEGER(IntKi), PARAMETER :: M39N9FKxe = 351 + INTEGER(IntKi), PARAMETER :: M40N1FKxe = 352 + INTEGER(IntKi), PARAMETER :: M40N2FKxe = 353 + INTEGER(IntKi), PARAMETER :: M40N3FKxe = 354 + INTEGER(IntKi), PARAMETER :: M40N4FKxe = 355 + INTEGER(IntKi), PARAMETER :: M40N5FKxe = 356 + INTEGER(IntKi), PARAMETER :: M40N6FKxe = 357 + INTEGER(IntKi), PARAMETER :: M40N7FKxe = 358 + INTEGER(IntKi), PARAMETER :: M40N8FKxe = 359 + INTEGER(IntKi), PARAMETER :: M40N9FKxe = 360 + INTEGER(IntKi), PARAMETER :: M41N1FKxe = 361 + INTEGER(IntKi), PARAMETER :: M41N2FKxe = 362 + INTEGER(IntKi), PARAMETER :: M41N3FKxe = 363 + INTEGER(IntKi), PARAMETER :: M41N4FKxe = 364 + INTEGER(IntKi), PARAMETER :: M41N5FKxe = 365 + INTEGER(IntKi), PARAMETER :: M41N6FKxe = 366 + INTEGER(IntKi), PARAMETER :: M41N7FKxe = 367 + INTEGER(IntKi), PARAMETER :: M41N8FKxe = 368 + INTEGER(IntKi), PARAMETER :: M41N9FKxe = 369 + INTEGER(IntKi), PARAMETER :: M42N1FKxe = 370 + INTEGER(IntKi), PARAMETER :: M42N2FKxe = 371 + INTEGER(IntKi), PARAMETER :: M42N3FKxe = 372 + INTEGER(IntKi), PARAMETER :: M42N4FKxe = 373 + INTEGER(IntKi), PARAMETER :: M42N5FKxe = 374 + INTEGER(IntKi), PARAMETER :: M42N6FKxe = 375 + INTEGER(IntKi), PARAMETER :: M42N7FKxe = 376 + INTEGER(IntKi), PARAMETER :: M42N8FKxe = 377 + INTEGER(IntKi), PARAMETER :: M42N9FKxe = 378 + INTEGER(IntKi), PARAMETER :: M43N1FKxe = 379 + INTEGER(IntKi), PARAMETER :: M43N2FKxe = 380 + INTEGER(IntKi), PARAMETER :: M43N3FKxe = 381 + INTEGER(IntKi), PARAMETER :: M43N4FKxe = 382 + INTEGER(IntKi), PARAMETER :: M43N5FKxe = 383 + INTEGER(IntKi), PARAMETER :: M43N6FKxe = 384 + INTEGER(IntKi), PARAMETER :: M43N7FKxe = 385 + INTEGER(IntKi), PARAMETER :: M43N8FKxe = 386 + INTEGER(IntKi), PARAMETER :: M43N9FKxe = 387 + INTEGER(IntKi), PARAMETER :: M44N1FKxe = 388 + INTEGER(IntKi), PARAMETER :: M44N2FKxe = 389 + INTEGER(IntKi), PARAMETER :: M44N3FKxe = 390 + INTEGER(IntKi), PARAMETER :: M44N4FKxe = 391 + INTEGER(IntKi), PARAMETER :: M44N5FKxe = 392 + INTEGER(IntKi), PARAMETER :: M44N6FKxe = 393 + INTEGER(IntKi), PARAMETER :: M44N7FKxe = 394 + INTEGER(IntKi), PARAMETER :: M44N8FKxe = 395 + INTEGER(IntKi), PARAMETER :: M44N9FKxe = 396 + INTEGER(IntKi), PARAMETER :: M45N1FKxe = 397 + INTEGER(IntKi), PARAMETER :: M45N2FKxe = 398 + INTEGER(IntKi), PARAMETER :: M45N3FKxe = 399 + INTEGER(IntKi), PARAMETER :: M45N4FKxe = 400 + INTEGER(IntKi), PARAMETER :: M45N5FKxe = 401 + INTEGER(IntKi), PARAMETER :: M45N6FKxe = 402 + INTEGER(IntKi), PARAMETER :: M45N7FKxe = 403 + INTEGER(IntKi), PARAMETER :: M45N8FKxe = 404 + INTEGER(IntKi), PARAMETER :: M45N9FKxe = 405 + INTEGER(IntKi), PARAMETER :: M46N1FKxe = 406 + INTEGER(IntKi), PARAMETER :: M46N2FKxe = 407 + INTEGER(IntKi), PARAMETER :: M46N3FKxe = 408 + INTEGER(IntKi), PARAMETER :: M46N4FKxe = 409 + INTEGER(IntKi), PARAMETER :: M46N5FKxe = 410 + INTEGER(IntKi), PARAMETER :: M46N6FKxe = 411 + INTEGER(IntKi), PARAMETER :: M46N7FKxe = 412 + INTEGER(IntKi), PARAMETER :: M46N8FKxe = 413 + INTEGER(IntKi), PARAMETER :: M46N9FKxe = 414 + INTEGER(IntKi), PARAMETER :: M47N1FKxe = 415 + INTEGER(IntKi), PARAMETER :: M47N2FKxe = 416 + INTEGER(IntKi), PARAMETER :: M47N3FKxe = 417 + INTEGER(IntKi), PARAMETER :: M47N4FKxe = 418 + INTEGER(IntKi), PARAMETER :: M47N5FKxe = 419 + INTEGER(IntKi), PARAMETER :: M47N6FKxe = 420 + INTEGER(IntKi), PARAMETER :: M47N7FKxe = 421 + INTEGER(IntKi), PARAMETER :: M47N8FKxe = 422 + INTEGER(IntKi), PARAMETER :: M47N9FKxe = 423 + INTEGER(IntKi), PARAMETER :: M48N1FKxe = 424 + INTEGER(IntKi), PARAMETER :: M48N2FKxe = 425 + INTEGER(IntKi), PARAMETER :: M48N3FKxe = 426 + INTEGER(IntKi), PARAMETER :: M48N4FKxe = 427 + INTEGER(IntKi), PARAMETER :: M48N5FKxe = 428 + INTEGER(IntKi), PARAMETER :: M48N6FKxe = 429 + INTEGER(IntKi), PARAMETER :: M48N7FKxe = 430 + INTEGER(IntKi), PARAMETER :: M48N8FKxe = 431 + INTEGER(IntKi), PARAMETER :: M48N9FKxe = 432 + INTEGER(IntKi), PARAMETER :: M49N1FKxe = 433 + INTEGER(IntKi), PARAMETER :: M49N2FKxe = 434 + INTEGER(IntKi), PARAMETER :: M49N3FKxe = 435 + INTEGER(IntKi), PARAMETER :: M49N4FKxe = 436 + INTEGER(IntKi), PARAMETER :: M49N5FKxe = 437 + INTEGER(IntKi), PARAMETER :: M49N6FKxe = 438 + INTEGER(IntKi), PARAMETER :: M49N7FKxe = 439 + INTEGER(IntKi), PARAMETER :: M49N8FKxe = 440 + INTEGER(IntKi), PARAMETER :: M49N9FKxe = 441 + INTEGER(IntKi), PARAMETER :: M50N1FKxe = 442 + INTEGER(IntKi), PARAMETER :: M50N2FKxe = 443 + INTEGER(IntKi), PARAMETER :: M50N3FKxe = 444 + INTEGER(IntKi), PARAMETER :: M50N4FKxe = 445 + INTEGER(IntKi), PARAMETER :: M50N5FKxe = 446 + INTEGER(IntKi), PARAMETER :: M50N6FKxe = 447 + INTEGER(IntKi), PARAMETER :: M50N7FKxe = 448 + INTEGER(IntKi), PARAMETER :: M50N8FKxe = 449 + INTEGER(IntKi), PARAMETER :: M50N9FKxe = 450 + INTEGER(IntKi), PARAMETER :: M51N1FKxe = 451 + INTEGER(IntKi), PARAMETER :: M51N2FKxe = 452 + INTEGER(IntKi), PARAMETER :: M51N3FKxe = 453 + INTEGER(IntKi), PARAMETER :: M51N4FKxe = 454 + INTEGER(IntKi), PARAMETER :: M51N5FKxe = 455 + INTEGER(IntKi), PARAMETER :: M51N6FKxe = 456 + INTEGER(IntKi), PARAMETER :: M51N7FKxe = 457 + INTEGER(IntKi), PARAMETER :: M51N8FKxe = 458 + INTEGER(IntKi), PARAMETER :: M51N9FKxe = 459 + INTEGER(IntKi), PARAMETER :: M52N1FKxe = 460 + INTEGER(IntKi), PARAMETER :: M52N2FKxe = 461 + INTEGER(IntKi), PARAMETER :: M52N3FKxe = 462 + INTEGER(IntKi), PARAMETER :: M52N4FKxe = 463 + INTEGER(IntKi), PARAMETER :: M52N5FKxe = 464 + INTEGER(IntKi), PARAMETER :: M52N6FKxe = 465 + INTEGER(IntKi), PARAMETER :: M52N7FKxe = 466 + INTEGER(IntKi), PARAMETER :: M52N8FKxe = 467 + INTEGER(IntKi), PARAMETER :: M52N9FKxe = 468 + INTEGER(IntKi), PARAMETER :: M53N1FKxe = 469 + INTEGER(IntKi), PARAMETER :: M53N2FKxe = 470 + INTEGER(IntKi), PARAMETER :: M53N3FKxe = 471 + INTEGER(IntKi), PARAMETER :: M53N4FKxe = 472 + INTEGER(IntKi), PARAMETER :: M53N5FKxe = 473 + INTEGER(IntKi), PARAMETER :: M53N6FKxe = 474 + INTEGER(IntKi), PARAMETER :: M53N7FKxe = 475 + INTEGER(IntKi), PARAMETER :: M53N8FKxe = 476 + INTEGER(IntKi), PARAMETER :: M53N9FKxe = 477 + INTEGER(IntKi), PARAMETER :: M54N1FKxe = 478 + INTEGER(IntKi), PARAMETER :: M54N2FKxe = 479 + INTEGER(IntKi), PARAMETER :: M54N3FKxe = 480 + INTEGER(IntKi), PARAMETER :: M54N4FKxe = 481 + INTEGER(IntKi), PARAMETER :: M54N5FKxe = 482 + INTEGER(IntKi), PARAMETER :: M54N6FKxe = 483 + INTEGER(IntKi), PARAMETER :: M54N7FKxe = 484 + INTEGER(IntKi), PARAMETER :: M54N8FKxe = 485 + INTEGER(IntKi), PARAMETER :: M54N9FKxe = 486 + INTEGER(IntKi), PARAMETER :: M55N1FKxe = 487 + INTEGER(IntKi), PARAMETER :: M55N2FKxe = 488 + INTEGER(IntKi), PARAMETER :: M55N3FKxe = 489 + INTEGER(IntKi), PARAMETER :: M55N4FKxe = 490 + INTEGER(IntKi), PARAMETER :: M55N5FKxe = 491 + INTEGER(IntKi), PARAMETER :: M55N6FKxe = 492 + INTEGER(IntKi), PARAMETER :: M55N7FKxe = 493 + INTEGER(IntKi), PARAMETER :: M55N8FKxe = 494 + INTEGER(IntKi), PARAMETER :: M55N9FKxe = 495 + INTEGER(IntKi), PARAMETER :: M56N1FKxe = 496 + INTEGER(IntKi), PARAMETER :: M56N2FKxe = 497 + INTEGER(IntKi), PARAMETER :: M56N3FKxe = 498 + INTEGER(IntKi), PARAMETER :: M56N4FKxe = 499 + INTEGER(IntKi), PARAMETER :: M56N5FKxe = 500 + INTEGER(IntKi), PARAMETER :: M56N6FKxe = 501 + INTEGER(IntKi), PARAMETER :: M56N7FKxe = 502 + INTEGER(IntKi), PARAMETER :: M56N8FKxe = 503 + INTEGER(IntKi), PARAMETER :: M56N9FKxe = 504 + INTEGER(IntKi), PARAMETER :: M57N1FKxe = 505 + INTEGER(IntKi), PARAMETER :: M57N2FKxe = 506 + INTEGER(IntKi), PARAMETER :: M57N3FKxe = 507 + INTEGER(IntKi), PARAMETER :: M57N4FKxe = 508 + INTEGER(IntKi), PARAMETER :: M57N5FKxe = 509 + INTEGER(IntKi), PARAMETER :: M57N6FKxe = 510 + INTEGER(IntKi), PARAMETER :: M57N7FKxe = 511 + INTEGER(IntKi), PARAMETER :: M57N8FKxe = 512 + INTEGER(IntKi), PARAMETER :: M57N9FKxe = 513 + INTEGER(IntKi), PARAMETER :: M58N1FKxe = 514 + INTEGER(IntKi), PARAMETER :: M58N2FKxe = 515 + INTEGER(IntKi), PARAMETER :: M58N3FKxe = 516 + INTEGER(IntKi), PARAMETER :: M58N4FKxe = 517 + INTEGER(IntKi), PARAMETER :: M58N5FKxe = 518 + INTEGER(IntKi), PARAMETER :: M58N6FKxe = 519 + INTEGER(IntKi), PARAMETER :: M58N7FKxe = 520 + INTEGER(IntKi), PARAMETER :: M58N8FKxe = 521 + INTEGER(IntKi), PARAMETER :: M58N9FKxe = 522 + INTEGER(IntKi), PARAMETER :: M59N1FKxe = 523 + INTEGER(IntKi), PARAMETER :: M59N2FKxe = 524 + INTEGER(IntKi), PARAMETER :: M59N3FKxe = 525 + INTEGER(IntKi), PARAMETER :: M59N4FKxe = 526 + INTEGER(IntKi), PARAMETER :: M59N5FKxe = 527 + INTEGER(IntKi), PARAMETER :: M59N6FKxe = 528 + INTEGER(IntKi), PARAMETER :: M59N7FKxe = 529 + INTEGER(IntKi), PARAMETER :: M59N8FKxe = 530 + INTEGER(IntKi), PARAMETER :: M59N9FKxe = 531 + INTEGER(IntKi), PARAMETER :: M60N1FKxe = 532 + INTEGER(IntKi), PARAMETER :: M60N2FKxe = 533 + INTEGER(IntKi), PARAMETER :: M60N3FKxe = 534 + INTEGER(IntKi), PARAMETER :: M60N4FKxe = 535 + INTEGER(IntKi), PARAMETER :: M60N5FKxe = 536 + INTEGER(IntKi), PARAMETER :: M60N6FKxe = 537 + INTEGER(IntKi), PARAMETER :: M60N7FKxe = 538 + INTEGER(IntKi), PARAMETER :: M60N8FKxe = 539 + INTEGER(IntKi), PARAMETER :: M60N9FKxe = 540 + INTEGER(IntKi), PARAMETER :: M61N1FKxe = 541 + INTEGER(IntKi), PARAMETER :: M61N2FKxe = 542 + INTEGER(IntKi), PARAMETER :: M61N3FKxe = 543 + INTEGER(IntKi), PARAMETER :: M61N4FKxe = 544 + INTEGER(IntKi), PARAMETER :: M61N5FKxe = 545 + INTEGER(IntKi), PARAMETER :: M61N6FKxe = 546 + INTEGER(IntKi), PARAMETER :: M61N7FKxe = 547 + INTEGER(IntKi), PARAMETER :: M61N8FKxe = 548 + INTEGER(IntKi), PARAMETER :: M61N9FKxe = 549 + INTEGER(IntKi), PARAMETER :: M62N1FKxe = 550 + INTEGER(IntKi), PARAMETER :: M62N2FKxe = 551 + INTEGER(IntKi), PARAMETER :: M62N3FKxe = 552 + INTEGER(IntKi), PARAMETER :: M62N4FKxe = 553 + INTEGER(IntKi), PARAMETER :: M62N5FKxe = 554 + INTEGER(IntKi), PARAMETER :: M62N6FKxe = 555 + INTEGER(IntKi), PARAMETER :: M62N7FKxe = 556 + INTEGER(IntKi), PARAMETER :: M62N8FKxe = 557 + INTEGER(IntKi), PARAMETER :: M62N9FKxe = 558 + INTEGER(IntKi), PARAMETER :: M63N1FKxe = 559 + INTEGER(IntKi), PARAMETER :: M63N2FKxe = 560 + INTEGER(IntKi), PARAMETER :: M63N3FKxe = 561 + INTEGER(IntKi), PARAMETER :: M63N4FKxe = 562 + INTEGER(IntKi), PARAMETER :: M63N5FKxe = 563 + INTEGER(IntKi), PARAMETER :: M63N6FKxe = 564 + INTEGER(IntKi), PARAMETER :: M63N7FKxe = 565 + INTEGER(IntKi), PARAMETER :: M63N8FKxe = 566 + INTEGER(IntKi), PARAMETER :: M63N9FKxe = 567 + INTEGER(IntKi), PARAMETER :: M64N1FKxe = 568 + INTEGER(IntKi), PARAMETER :: M64N2FKxe = 569 + INTEGER(IntKi), PARAMETER :: M64N3FKxe = 570 + INTEGER(IntKi), PARAMETER :: M64N4FKxe = 571 + INTEGER(IntKi), PARAMETER :: M64N5FKxe = 572 + INTEGER(IntKi), PARAMETER :: M64N6FKxe = 573 + INTEGER(IntKi), PARAMETER :: M64N7FKxe = 574 + INTEGER(IntKi), PARAMETER :: M64N8FKxe = 575 + INTEGER(IntKi), PARAMETER :: M64N9FKxe = 576 + INTEGER(IntKi), PARAMETER :: M65N1FKxe = 577 + INTEGER(IntKi), PARAMETER :: M65N2FKxe = 578 + INTEGER(IntKi), PARAMETER :: M65N3FKxe = 579 + INTEGER(IntKi), PARAMETER :: M65N4FKxe = 580 + INTEGER(IntKi), PARAMETER :: M65N5FKxe = 581 + INTEGER(IntKi), PARAMETER :: M65N6FKxe = 582 + INTEGER(IntKi), PARAMETER :: M65N7FKxe = 583 + INTEGER(IntKi), PARAMETER :: M65N8FKxe = 584 + INTEGER(IntKi), PARAMETER :: M65N9FKxe = 585 + INTEGER(IntKi), PARAMETER :: M66N1FKxe = 586 + INTEGER(IntKi), PARAMETER :: M66N2FKxe = 587 + INTEGER(IntKi), PARAMETER :: M66N3FKxe = 588 + INTEGER(IntKi), PARAMETER :: M66N4FKxe = 589 + INTEGER(IntKi), PARAMETER :: M66N5FKxe = 590 + INTEGER(IntKi), PARAMETER :: M66N6FKxe = 591 + INTEGER(IntKi), PARAMETER :: M66N7FKxe = 592 + INTEGER(IntKi), PARAMETER :: M66N8FKxe = 593 + INTEGER(IntKi), PARAMETER :: M66N9FKxe = 594 + INTEGER(IntKi), PARAMETER :: M67N1FKxe = 595 + INTEGER(IntKi), PARAMETER :: M67N2FKxe = 596 + INTEGER(IntKi), PARAMETER :: M67N3FKxe = 597 + INTEGER(IntKi), PARAMETER :: M67N4FKxe = 598 + INTEGER(IntKi), PARAMETER :: M67N5FKxe = 599 + INTEGER(IntKi), PARAMETER :: M67N6FKxe = 600 + INTEGER(IntKi), PARAMETER :: M67N7FKxe = 601 + INTEGER(IntKi), PARAMETER :: M67N8FKxe = 602 + INTEGER(IntKi), PARAMETER :: M67N9FKxe = 603 + INTEGER(IntKi), PARAMETER :: M68N1FKxe = 604 + INTEGER(IntKi), PARAMETER :: M68N2FKxe = 605 + INTEGER(IntKi), PARAMETER :: M68N3FKxe = 606 + INTEGER(IntKi), PARAMETER :: M68N4FKxe = 607 + INTEGER(IntKi), PARAMETER :: M68N5FKxe = 608 + INTEGER(IntKi), PARAMETER :: M68N6FKxe = 609 + INTEGER(IntKi), PARAMETER :: M68N7FKxe = 610 + INTEGER(IntKi), PARAMETER :: M68N8FKxe = 611 + INTEGER(IntKi), PARAMETER :: M68N9FKxe = 612 + INTEGER(IntKi), PARAMETER :: M69N1FKxe = 613 + INTEGER(IntKi), PARAMETER :: M69N2FKxe = 614 + INTEGER(IntKi), PARAMETER :: M69N3FKxe = 615 + INTEGER(IntKi), PARAMETER :: M69N4FKxe = 616 + INTEGER(IntKi), PARAMETER :: M69N5FKxe = 617 + INTEGER(IntKi), PARAMETER :: M69N6FKxe = 618 + INTEGER(IntKi), PARAMETER :: M69N7FKxe = 619 + INTEGER(IntKi), PARAMETER :: M69N8FKxe = 620 + INTEGER(IntKi), PARAMETER :: M69N9FKxe = 621 + INTEGER(IntKi), PARAMETER :: M70N1FKxe = 622 + INTEGER(IntKi), PARAMETER :: M70N2FKxe = 623 + INTEGER(IntKi), PARAMETER :: M70N3FKxe = 624 + INTEGER(IntKi), PARAMETER :: M70N4FKxe = 625 + INTEGER(IntKi), PARAMETER :: M70N5FKxe = 626 + INTEGER(IntKi), PARAMETER :: M70N6FKxe = 627 + INTEGER(IntKi), PARAMETER :: M70N7FKxe = 628 + INTEGER(IntKi), PARAMETER :: M70N8FKxe = 629 + INTEGER(IntKi), PARAMETER :: M70N9FKxe = 630 + INTEGER(IntKi), PARAMETER :: M71N1FKxe = 631 + INTEGER(IntKi), PARAMETER :: M71N2FKxe = 632 + INTEGER(IntKi), PARAMETER :: M71N3FKxe = 633 + INTEGER(IntKi), PARAMETER :: M71N4FKxe = 634 + INTEGER(IntKi), PARAMETER :: M71N5FKxe = 635 + INTEGER(IntKi), PARAMETER :: M71N6FKxe = 636 + INTEGER(IntKi), PARAMETER :: M71N7FKxe = 637 + INTEGER(IntKi), PARAMETER :: M71N8FKxe = 638 + INTEGER(IntKi), PARAMETER :: M71N9FKxe = 639 + INTEGER(IntKi), PARAMETER :: M72N1FKxe = 640 + INTEGER(IntKi), PARAMETER :: M72N2FKxe = 641 + INTEGER(IntKi), PARAMETER :: M72N3FKxe = 642 + INTEGER(IntKi), PARAMETER :: M72N4FKxe = 643 + INTEGER(IntKi), PARAMETER :: M72N5FKxe = 644 + INTEGER(IntKi), PARAMETER :: M72N6FKxe = 645 + INTEGER(IntKi), PARAMETER :: M72N7FKxe = 646 + INTEGER(IntKi), PARAMETER :: M72N8FKxe = 647 + INTEGER(IntKi), PARAMETER :: M72N9FKxe = 648 + INTEGER(IntKi), PARAMETER :: M73N1FKxe = 649 + INTEGER(IntKi), PARAMETER :: M73N2FKxe = 650 + INTEGER(IntKi), PARAMETER :: M73N3FKxe = 651 + INTEGER(IntKi), PARAMETER :: M73N4FKxe = 652 + INTEGER(IntKi), PARAMETER :: M73N5FKxe = 653 + INTEGER(IntKi), PARAMETER :: M73N6FKxe = 654 + INTEGER(IntKi), PARAMETER :: M73N7FKxe = 655 + INTEGER(IntKi), PARAMETER :: M73N8FKxe = 656 + INTEGER(IntKi), PARAMETER :: M73N9FKxe = 657 + INTEGER(IntKi), PARAMETER :: M74N1FKxe = 658 + INTEGER(IntKi), PARAMETER :: M74N2FKxe = 659 + INTEGER(IntKi), PARAMETER :: M74N3FKxe = 660 + INTEGER(IntKi), PARAMETER :: M74N4FKxe = 661 + INTEGER(IntKi), PARAMETER :: M74N5FKxe = 662 + INTEGER(IntKi), PARAMETER :: M74N6FKxe = 663 + INTEGER(IntKi), PARAMETER :: M74N7FKxe = 664 + INTEGER(IntKi), PARAMETER :: M74N8FKxe = 665 + INTEGER(IntKi), PARAMETER :: M74N9FKxe = 666 + INTEGER(IntKi), PARAMETER :: M75N1FKxe = 667 + INTEGER(IntKi), PARAMETER :: M75N2FKxe = 668 + INTEGER(IntKi), PARAMETER :: M75N3FKxe = 669 + INTEGER(IntKi), PARAMETER :: M75N4FKxe = 670 + INTEGER(IntKi), PARAMETER :: M75N5FKxe = 671 + INTEGER(IntKi), PARAMETER :: M75N6FKxe = 672 + INTEGER(IntKi), PARAMETER :: M75N7FKxe = 673 + INTEGER(IntKi), PARAMETER :: M75N8FKxe = 674 + INTEGER(IntKi), PARAMETER :: M75N9FKxe = 675 + INTEGER(IntKi), PARAMETER :: M76N1FKxe = 676 + INTEGER(IntKi), PARAMETER :: M76N2FKxe = 677 + INTEGER(IntKi), PARAMETER :: M76N3FKxe = 678 + INTEGER(IntKi), PARAMETER :: M76N4FKxe = 679 + INTEGER(IntKi), PARAMETER :: M76N5FKxe = 680 + INTEGER(IntKi), PARAMETER :: M76N6FKxe = 681 + INTEGER(IntKi), PARAMETER :: M76N7FKxe = 682 + INTEGER(IntKi), PARAMETER :: M76N8FKxe = 683 + INTEGER(IntKi), PARAMETER :: M76N9FKxe = 684 + INTEGER(IntKi), PARAMETER :: M77N1FKxe = 685 + INTEGER(IntKi), PARAMETER :: M77N2FKxe = 686 + INTEGER(IntKi), PARAMETER :: M77N3FKxe = 687 + INTEGER(IntKi), PARAMETER :: M77N4FKxe = 688 + INTEGER(IntKi), PARAMETER :: M77N5FKxe = 689 + INTEGER(IntKi), PARAMETER :: M77N6FKxe = 690 + INTEGER(IntKi), PARAMETER :: M77N7FKxe = 691 + INTEGER(IntKi), PARAMETER :: M77N8FKxe = 692 + INTEGER(IntKi), PARAMETER :: M77N9FKxe = 693 + INTEGER(IntKi), PARAMETER :: M78N1FKxe = 694 + INTEGER(IntKi), PARAMETER :: M78N2FKxe = 695 + INTEGER(IntKi), PARAMETER :: M78N3FKxe = 696 + INTEGER(IntKi), PARAMETER :: M78N4FKxe = 697 + INTEGER(IntKi), PARAMETER :: M78N5FKxe = 698 + INTEGER(IntKi), PARAMETER :: M78N6FKxe = 699 + INTEGER(IntKi), PARAMETER :: M78N7FKxe = 700 + INTEGER(IntKi), PARAMETER :: M78N8FKxe = 701 + INTEGER(IntKi), PARAMETER :: M78N9FKxe = 702 + INTEGER(IntKi), PARAMETER :: M79N1FKxe = 703 + INTEGER(IntKi), PARAMETER :: M79N2FKxe = 704 + INTEGER(IntKi), PARAMETER :: M79N3FKxe = 705 + INTEGER(IntKi), PARAMETER :: M79N4FKxe = 706 + INTEGER(IntKi), PARAMETER :: M79N5FKxe = 707 + INTEGER(IntKi), PARAMETER :: M79N6FKxe = 708 + INTEGER(IntKi), PARAMETER :: M79N7FKxe = 709 + INTEGER(IntKi), PARAMETER :: M79N8FKxe = 710 + INTEGER(IntKi), PARAMETER :: M79N9FKxe = 711 + INTEGER(IntKi), PARAMETER :: M80N1FKxe = 712 + INTEGER(IntKi), PARAMETER :: M80N2FKxe = 713 + INTEGER(IntKi), PARAMETER :: M80N3FKxe = 714 + INTEGER(IntKi), PARAMETER :: M80N4FKxe = 715 + INTEGER(IntKi), PARAMETER :: M80N5FKxe = 716 + INTEGER(IntKi), PARAMETER :: M80N6FKxe = 717 + INTEGER(IntKi), PARAMETER :: M80N7FKxe = 718 + INTEGER(IntKi), PARAMETER :: M80N8FKxe = 719 + INTEGER(IntKi), PARAMETER :: M80N9FKxe = 720 + INTEGER(IntKi), PARAMETER :: M81N1FKxe = 721 + INTEGER(IntKi), PARAMETER :: M81N2FKxe = 722 + INTEGER(IntKi), PARAMETER :: M81N3FKxe = 723 + INTEGER(IntKi), PARAMETER :: M81N4FKxe = 724 + INTEGER(IntKi), PARAMETER :: M81N5FKxe = 725 + INTEGER(IntKi), PARAMETER :: M81N6FKxe = 726 + INTEGER(IntKi), PARAMETER :: M81N7FKxe = 727 + INTEGER(IntKi), PARAMETER :: M81N8FKxe = 728 + INTEGER(IntKi), PARAMETER :: M81N9FKxe = 729 + INTEGER(IntKi), PARAMETER :: M82N1FKxe = 730 + INTEGER(IntKi), PARAMETER :: M82N2FKxe = 731 + INTEGER(IntKi), PARAMETER :: M82N3FKxe = 732 + INTEGER(IntKi), PARAMETER :: M82N4FKxe = 733 + INTEGER(IntKi), PARAMETER :: M82N5FKxe = 734 + INTEGER(IntKi), PARAMETER :: M82N6FKxe = 735 + INTEGER(IntKi), PARAMETER :: M82N7FKxe = 736 + INTEGER(IntKi), PARAMETER :: M82N8FKxe = 737 + INTEGER(IntKi), PARAMETER :: M82N9FKxe = 738 + INTEGER(IntKi), PARAMETER :: M83N1FKxe = 739 + INTEGER(IntKi), PARAMETER :: M83N2FKxe = 740 + INTEGER(IntKi), PARAMETER :: M83N3FKxe = 741 + INTEGER(IntKi), PARAMETER :: M83N4FKxe = 742 + INTEGER(IntKi), PARAMETER :: M83N5FKxe = 743 + INTEGER(IntKi), PARAMETER :: M83N6FKxe = 744 + INTEGER(IntKi), PARAMETER :: M83N7FKxe = 745 + INTEGER(IntKi), PARAMETER :: M83N8FKxe = 746 + INTEGER(IntKi), PARAMETER :: M83N9FKxe = 747 + INTEGER(IntKi), PARAMETER :: M84N1FKxe = 748 + INTEGER(IntKi), PARAMETER :: M84N2FKxe = 749 + INTEGER(IntKi), PARAMETER :: M84N3FKxe = 750 + INTEGER(IntKi), PARAMETER :: M84N4FKxe = 751 + INTEGER(IntKi), PARAMETER :: M84N5FKxe = 752 + INTEGER(IntKi), PARAMETER :: M84N6FKxe = 753 + INTEGER(IntKi), PARAMETER :: M84N7FKxe = 754 + INTEGER(IntKi), PARAMETER :: M84N8FKxe = 755 + INTEGER(IntKi), PARAMETER :: M84N9FKxe = 756 + INTEGER(IntKi), PARAMETER :: M85N1FKxe = 757 + INTEGER(IntKi), PARAMETER :: M85N2FKxe = 758 + INTEGER(IntKi), PARAMETER :: M85N3FKxe = 759 + INTEGER(IntKi), PARAMETER :: M85N4FKxe = 760 + INTEGER(IntKi), PARAMETER :: M85N5FKxe = 761 + INTEGER(IntKi), PARAMETER :: M85N6FKxe = 762 + INTEGER(IntKi), PARAMETER :: M85N7FKxe = 763 + INTEGER(IntKi), PARAMETER :: M85N8FKxe = 764 + INTEGER(IntKi), PARAMETER :: M85N9FKxe = 765 + INTEGER(IntKi), PARAMETER :: M86N1FKxe = 766 + INTEGER(IntKi), PARAMETER :: M86N2FKxe = 767 + INTEGER(IntKi), PARAMETER :: M86N3FKxe = 768 + INTEGER(IntKi), PARAMETER :: M86N4FKxe = 769 + INTEGER(IntKi), PARAMETER :: M86N5FKxe = 770 + INTEGER(IntKi), PARAMETER :: M86N6FKxe = 771 + INTEGER(IntKi), PARAMETER :: M86N7FKxe = 772 + INTEGER(IntKi), PARAMETER :: M86N8FKxe = 773 + INTEGER(IntKi), PARAMETER :: M86N9FKxe = 774 + INTEGER(IntKi), PARAMETER :: M87N1FKxe = 775 + INTEGER(IntKi), PARAMETER :: M87N2FKxe = 776 + INTEGER(IntKi), PARAMETER :: M87N3FKxe = 777 + INTEGER(IntKi), PARAMETER :: M87N4FKxe = 778 + INTEGER(IntKi), PARAMETER :: M87N5FKxe = 779 + INTEGER(IntKi), PARAMETER :: M87N6FKxe = 780 + INTEGER(IntKi), PARAMETER :: M87N7FKxe = 781 + INTEGER(IntKi), PARAMETER :: M87N8FKxe = 782 + INTEGER(IntKi), PARAMETER :: M87N9FKxe = 783 + INTEGER(IntKi), PARAMETER :: M88N1FKxe = 784 + INTEGER(IntKi), PARAMETER :: M88N2FKxe = 785 + INTEGER(IntKi), PARAMETER :: M88N3FKxe = 786 + INTEGER(IntKi), PARAMETER :: M88N4FKxe = 787 + INTEGER(IntKi), PARAMETER :: M88N5FKxe = 788 + INTEGER(IntKi), PARAMETER :: M88N6FKxe = 789 + INTEGER(IntKi), PARAMETER :: M88N7FKxe = 790 + INTEGER(IntKi), PARAMETER :: M88N8FKxe = 791 + INTEGER(IntKi), PARAMETER :: M88N9FKxe = 792 + INTEGER(IntKi), PARAMETER :: M89N1FKxe = 793 + INTEGER(IntKi), PARAMETER :: M89N2FKxe = 794 + INTEGER(IntKi), PARAMETER :: M89N3FKxe = 795 + INTEGER(IntKi), PARAMETER :: M89N4FKxe = 796 + INTEGER(IntKi), PARAMETER :: M89N5FKxe = 797 + INTEGER(IntKi), PARAMETER :: M89N6FKxe = 798 + INTEGER(IntKi), PARAMETER :: M89N7FKxe = 799 + INTEGER(IntKi), PARAMETER :: M89N8FKxe = 800 + INTEGER(IntKi), PARAMETER :: M89N9FKxe = 801 + INTEGER(IntKi), PARAMETER :: M90N1FKxe = 802 + INTEGER(IntKi), PARAMETER :: M90N2FKxe = 803 + INTEGER(IntKi), PARAMETER :: M90N3FKxe = 804 + INTEGER(IntKi), PARAMETER :: M90N4FKxe = 805 + INTEGER(IntKi), PARAMETER :: M90N5FKxe = 806 + INTEGER(IntKi), PARAMETER :: M90N6FKxe = 807 + INTEGER(IntKi), PARAMETER :: M90N7FKxe = 808 + INTEGER(IntKi), PARAMETER :: M90N8FKxe = 809 + INTEGER(IntKi), PARAMETER :: M90N9FKxe = 810 + INTEGER(IntKi), PARAMETER :: M91N1FKxe = 811 + INTEGER(IntKi), PARAMETER :: M91N2FKxe = 812 + INTEGER(IntKi), PARAMETER :: M91N3FKxe = 813 + INTEGER(IntKi), PARAMETER :: M91N4FKxe = 814 + INTEGER(IntKi), PARAMETER :: M91N5FKxe = 815 + INTEGER(IntKi), PARAMETER :: M91N6FKxe = 816 + INTEGER(IntKi), PARAMETER :: M91N7FKxe = 817 + INTEGER(IntKi), PARAMETER :: M91N8FKxe = 818 + INTEGER(IntKi), PARAMETER :: M91N9FKxe = 819 + INTEGER(IntKi), PARAMETER :: M92N1FKxe = 820 + INTEGER(IntKi), PARAMETER :: M92N2FKxe = 821 + INTEGER(IntKi), PARAMETER :: M92N3FKxe = 822 + INTEGER(IntKi), PARAMETER :: M92N4FKxe = 823 + INTEGER(IntKi), PARAMETER :: M92N5FKxe = 824 + INTEGER(IntKi), PARAMETER :: M92N6FKxe = 825 + INTEGER(IntKi), PARAMETER :: M92N7FKxe = 826 + INTEGER(IntKi), PARAMETER :: M92N8FKxe = 827 + INTEGER(IntKi), PARAMETER :: M92N9FKxe = 828 + INTEGER(IntKi), PARAMETER :: M93N1FKxe = 829 + INTEGER(IntKi), PARAMETER :: M93N2FKxe = 830 + INTEGER(IntKi), PARAMETER :: M93N3FKxe = 831 + INTEGER(IntKi), PARAMETER :: M93N4FKxe = 832 + INTEGER(IntKi), PARAMETER :: M93N5FKxe = 833 + INTEGER(IntKi), PARAMETER :: M93N6FKxe = 834 + INTEGER(IntKi), PARAMETER :: M93N7FKxe = 835 + INTEGER(IntKi), PARAMETER :: M93N8FKxe = 836 + INTEGER(IntKi), PARAMETER :: M93N9FKxe = 837 + INTEGER(IntKi), PARAMETER :: M94N1FKxe = 838 + INTEGER(IntKi), PARAMETER :: M94N2FKxe = 839 + INTEGER(IntKi), PARAMETER :: M94N3FKxe = 840 + INTEGER(IntKi), PARAMETER :: M94N4FKxe = 841 + INTEGER(IntKi), PARAMETER :: M94N5FKxe = 842 + INTEGER(IntKi), PARAMETER :: M94N6FKxe = 843 + INTEGER(IntKi), PARAMETER :: M94N7FKxe = 844 + INTEGER(IntKi), PARAMETER :: M94N8FKxe = 845 + INTEGER(IntKi), PARAMETER :: M94N9FKxe = 846 + INTEGER(IntKi), PARAMETER :: M95N1FKxe = 847 + INTEGER(IntKi), PARAMETER :: M95N2FKxe = 848 + INTEGER(IntKi), PARAMETER :: M95N3FKxe = 849 + INTEGER(IntKi), PARAMETER :: M95N4FKxe = 850 + INTEGER(IntKi), PARAMETER :: M95N5FKxe = 851 + INTEGER(IntKi), PARAMETER :: M95N6FKxe = 852 + INTEGER(IntKi), PARAMETER :: M95N7FKxe = 853 + INTEGER(IntKi), PARAMETER :: M95N8FKxe = 854 + INTEGER(IntKi), PARAMETER :: M95N9FKxe = 855 + INTEGER(IntKi), PARAMETER :: M96N1FKxe = 856 + INTEGER(IntKi), PARAMETER :: M96N2FKxe = 857 + INTEGER(IntKi), PARAMETER :: M96N3FKxe = 858 + INTEGER(IntKi), PARAMETER :: M96N4FKxe = 859 + INTEGER(IntKi), PARAMETER :: M96N5FKxe = 860 + INTEGER(IntKi), PARAMETER :: M96N6FKxe = 861 + INTEGER(IntKi), PARAMETER :: M96N7FKxe = 862 + INTEGER(IntKi), PARAMETER :: M96N8FKxe = 863 + INTEGER(IntKi), PARAMETER :: M96N9FKxe = 864 + INTEGER(IntKi), PARAMETER :: M97N1FKxe = 865 + INTEGER(IntKi), PARAMETER :: M97N2FKxe = 866 + INTEGER(IntKi), PARAMETER :: M97N3FKxe = 867 + INTEGER(IntKi), PARAMETER :: M97N4FKxe = 868 + INTEGER(IntKi), PARAMETER :: M97N5FKxe = 869 + INTEGER(IntKi), PARAMETER :: M97N6FKxe = 870 + INTEGER(IntKi), PARAMETER :: M97N7FKxe = 871 + INTEGER(IntKi), PARAMETER :: M97N8FKxe = 872 + INTEGER(IntKi), PARAMETER :: M97N9FKxe = 873 + INTEGER(IntKi), PARAMETER :: M98N1FKxe = 874 + INTEGER(IntKi), PARAMETER :: M98N2FKxe = 875 + INTEGER(IntKi), PARAMETER :: M98N3FKxe = 876 + INTEGER(IntKi), PARAMETER :: M98N4FKxe = 877 + INTEGER(IntKi), PARAMETER :: M98N5FKxe = 878 + INTEGER(IntKi), PARAMETER :: M98N6FKxe = 879 + INTEGER(IntKi), PARAMETER :: M98N7FKxe = 880 + INTEGER(IntKi), PARAMETER :: M98N8FKxe = 881 + INTEGER(IntKi), PARAMETER :: M98N9FKxe = 882 + INTEGER(IntKi), PARAMETER :: M99N1FKxe = 883 + INTEGER(IntKi), PARAMETER :: M99N2FKxe = 884 + INTEGER(IntKi), PARAMETER :: M99N3FKxe = 885 + INTEGER(IntKi), PARAMETER :: M99N4FKxe = 886 + INTEGER(IntKi), PARAMETER :: M99N5FKxe = 887 + INTEGER(IntKi), PARAMETER :: M99N6FKxe = 888 + INTEGER(IntKi), PARAMETER :: M99N7FKxe = 889 + INTEGER(IntKi), PARAMETER :: M99N8FKxe = 890 + INTEGER(IntKi), PARAMETER :: M99N9FKxe = 891 + INTEGER(IntKi), PARAMETER :: M01N1FKye = 892 + INTEGER(IntKi), PARAMETER :: M01N2FKye = 893 + INTEGER(IntKi), PARAMETER :: M01N3FKye = 894 + INTEGER(IntKi), PARAMETER :: M01N4FKye = 895 + INTEGER(IntKi), PARAMETER :: M01N5FKye = 896 + INTEGER(IntKi), PARAMETER :: M01N6FKye = 897 + INTEGER(IntKi), PARAMETER :: M01N7FKye = 898 + INTEGER(IntKi), PARAMETER :: M01N8FKye = 899 + INTEGER(IntKi), PARAMETER :: M01N9FKye = 900 + INTEGER(IntKi), PARAMETER :: M02N1FKye = 901 + INTEGER(IntKi), PARAMETER :: M02N2FKye = 902 + INTEGER(IntKi), PARAMETER :: M02N3FKye = 903 + INTEGER(IntKi), PARAMETER :: M02N4FKye = 904 + INTEGER(IntKi), PARAMETER :: M02N5FKye = 905 + INTEGER(IntKi), PARAMETER :: M02N6FKye = 906 + INTEGER(IntKi), PARAMETER :: M02N7FKye = 907 + INTEGER(IntKi), PARAMETER :: M02N8FKye = 908 + INTEGER(IntKi), PARAMETER :: M02N9FKye = 909 + INTEGER(IntKi), PARAMETER :: M03N1FKye = 910 + INTEGER(IntKi), PARAMETER :: M03N2FKye = 911 + INTEGER(IntKi), PARAMETER :: M03N3FKye = 912 + INTEGER(IntKi), PARAMETER :: M03N4FKye = 913 + INTEGER(IntKi), PARAMETER :: M03N5FKye = 914 + INTEGER(IntKi), PARAMETER :: M03N6FKye = 915 + INTEGER(IntKi), PARAMETER :: M03N7FKye = 916 + INTEGER(IntKi), PARAMETER :: M03N8FKye = 917 + INTEGER(IntKi), PARAMETER :: M03N9FKye = 918 + INTEGER(IntKi), PARAMETER :: M04N1FKye = 919 + INTEGER(IntKi), PARAMETER :: M04N2FKye = 920 + INTEGER(IntKi), PARAMETER :: M04N3FKye = 921 + INTEGER(IntKi), PARAMETER :: M04N4FKye = 922 + INTEGER(IntKi), PARAMETER :: M04N5FKye = 923 + INTEGER(IntKi), PARAMETER :: M04N6FKye = 924 + INTEGER(IntKi), PARAMETER :: M04N7FKye = 925 + INTEGER(IntKi), PARAMETER :: M04N8FKye = 926 + INTEGER(IntKi), PARAMETER :: M04N9FKye = 927 + INTEGER(IntKi), PARAMETER :: M05N1FKye = 928 + INTEGER(IntKi), PARAMETER :: M05N2FKye = 929 + INTEGER(IntKi), PARAMETER :: M05N3FKye = 930 + INTEGER(IntKi), PARAMETER :: M05N4FKye = 931 + INTEGER(IntKi), PARAMETER :: M05N5FKye = 932 + INTEGER(IntKi), PARAMETER :: M05N6FKye = 933 + INTEGER(IntKi), PARAMETER :: M05N7FKye = 934 + INTEGER(IntKi), PARAMETER :: M05N8FKye = 935 + INTEGER(IntKi), PARAMETER :: M05N9FKye = 936 + INTEGER(IntKi), PARAMETER :: M06N1FKye = 937 + INTEGER(IntKi), PARAMETER :: M06N2FKye = 938 + INTEGER(IntKi), PARAMETER :: M06N3FKye = 939 + INTEGER(IntKi), PARAMETER :: M06N4FKye = 940 + INTEGER(IntKi), PARAMETER :: M06N5FKye = 941 + INTEGER(IntKi), PARAMETER :: M06N6FKye = 942 + INTEGER(IntKi), PARAMETER :: M06N7FKye = 943 + INTEGER(IntKi), PARAMETER :: M06N8FKye = 944 + INTEGER(IntKi), PARAMETER :: M06N9FKye = 945 + INTEGER(IntKi), PARAMETER :: M07N1FKye = 946 + INTEGER(IntKi), PARAMETER :: M07N2FKye = 947 + INTEGER(IntKi), PARAMETER :: M07N3FKye = 948 + INTEGER(IntKi), PARAMETER :: M07N4FKye = 949 + INTEGER(IntKi), PARAMETER :: M07N5FKye = 950 + INTEGER(IntKi), PARAMETER :: M07N6FKye = 951 + INTEGER(IntKi), PARAMETER :: M07N7FKye = 952 + INTEGER(IntKi), PARAMETER :: M07N8FKye = 953 + INTEGER(IntKi), PARAMETER :: M07N9FKye = 954 + INTEGER(IntKi), PARAMETER :: M08N1FKye = 955 + INTEGER(IntKi), PARAMETER :: M08N2FKye = 956 + INTEGER(IntKi), PARAMETER :: M08N3FKye = 957 + INTEGER(IntKi), PARAMETER :: M08N4FKye = 958 + INTEGER(IntKi), PARAMETER :: M08N5FKye = 959 + INTEGER(IntKi), PARAMETER :: M08N6FKye = 960 + INTEGER(IntKi), PARAMETER :: M08N7FKye = 961 + INTEGER(IntKi), PARAMETER :: M08N8FKye = 962 + INTEGER(IntKi), PARAMETER :: M08N9FKye = 963 + INTEGER(IntKi), PARAMETER :: M09N1FKye = 964 + INTEGER(IntKi), PARAMETER :: M09N2FKye = 965 + INTEGER(IntKi), PARAMETER :: M09N3FKye = 966 + INTEGER(IntKi), PARAMETER :: M09N4FKye = 967 + INTEGER(IntKi), PARAMETER :: M09N5FKye = 968 + INTEGER(IntKi), PARAMETER :: M09N6FKye = 969 + INTEGER(IntKi), PARAMETER :: M09N7FKye = 970 + INTEGER(IntKi), PARAMETER :: M09N8FKye = 971 + INTEGER(IntKi), PARAMETER :: M09N9FKye = 972 + INTEGER(IntKi), PARAMETER :: M10N1FKye = 973 + INTEGER(IntKi), PARAMETER :: M10N2FKye = 974 + INTEGER(IntKi), PARAMETER :: M10N3FKye = 975 + INTEGER(IntKi), PARAMETER :: M10N4FKye = 976 + INTEGER(IntKi), PARAMETER :: M10N5FKye = 977 + INTEGER(IntKi), PARAMETER :: M10N6FKye = 978 + INTEGER(IntKi), PARAMETER :: M10N7FKye = 979 + INTEGER(IntKi), PARAMETER :: M10N8FKye = 980 + INTEGER(IntKi), PARAMETER :: M10N9FKye = 981 + INTEGER(IntKi), PARAMETER :: M11N1FKye = 982 + INTEGER(IntKi), PARAMETER :: M11N2FKye = 983 + INTEGER(IntKi), PARAMETER :: M11N3FKye = 984 + INTEGER(IntKi), PARAMETER :: M11N4FKye = 985 + INTEGER(IntKi), PARAMETER :: M11N5FKye = 986 + INTEGER(IntKi), PARAMETER :: M11N6FKye = 987 + INTEGER(IntKi), PARAMETER :: M11N7FKye = 988 + INTEGER(IntKi), PARAMETER :: M11N8FKye = 989 + INTEGER(IntKi), PARAMETER :: M11N9FKye = 990 + INTEGER(IntKi), PARAMETER :: M12N1FKye = 991 + INTEGER(IntKi), PARAMETER :: M12N2FKye = 992 + INTEGER(IntKi), PARAMETER :: M12N3FKye = 993 + INTEGER(IntKi), PARAMETER :: M12N4FKye = 994 + INTEGER(IntKi), PARAMETER :: M12N5FKye = 995 + INTEGER(IntKi), PARAMETER :: M12N6FKye = 996 + INTEGER(IntKi), PARAMETER :: M12N7FKye = 997 + INTEGER(IntKi), PARAMETER :: M12N8FKye = 998 + INTEGER(IntKi), PARAMETER :: M12N9FKye = 999 + INTEGER(IntKi), PARAMETER :: M13N1FKye = 1000 + INTEGER(IntKi), PARAMETER :: M13N2FKye = 1001 + INTEGER(IntKi), PARAMETER :: M13N3FKye = 1002 + INTEGER(IntKi), PARAMETER :: M13N4FKye = 1003 + INTEGER(IntKi), PARAMETER :: M13N5FKye = 1004 + INTEGER(IntKi), PARAMETER :: M13N6FKye = 1005 + INTEGER(IntKi), PARAMETER :: M13N7FKye = 1006 + INTEGER(IntKi), PARAMETER :: M13N8FKye = 1007 + INTEGER(IntKi), PARAMETER :: M13N9FKye = 1008 + INTEGER(IntKi), PARAMETER :: M14N1FKye = 1009 + INTEGER(IntKi), PARAMETER :: M14N2FKye = 1010 + INTEGER(IntKi), PARAMETER :: M14N3FKye = 1011 + INTEGER(IntKi), PARAMETER :: M14N4FKye = 1012 + INTEGER(IntKi), PARAMETER :: M14N5FKye = 1013 + INTEGER(IntKi), PARAMETER :: M14N6FKye = 1014 + INTEGER(IntKi), PARAMETER :: M14N7FKye = 1015 + INTEGER(IntKi), PARAMETER :: M14N8FKye = 1016 + INTEGER(IntKi), PARAMETER :: M14N9FKye = 1017 + INTEGER(IntKi), PARAMETER :: M15N1FKye = 1018 + INTEGER(IntKi), PARAMETER :: M15N2FKye = 1019 + INTEGER(IntKi), PARAMETER :: M15N3FKye = 1020 + INTEGER(IntKi), PARAMETER :: M15N4FKye = 1021 + INTEGER(IntKi), PARAMETER :: M15N5FKye = 1022 + INTEGER(IntKi), PARAMETER :: M15N6FKye = 1023 + INTEGER(IntKi), PARAMETER :: M15N7FKye = 1024 + INTEGER(IntKi), PARAMETER :: M15N8FKye = 1025 + INTEGER(IntKi), PARAMETER :: M15N9FKye = 1026 + INTEGER(IntKi), PARAMETER :: M16N1FKye = 1027 + INTEGER(IntKi), PARAMETER :: M16N2FKye = 1028 + INTEGER(IntKi), PARAMETER :: M16N3FKye = 1029 + INTEGER(IntKi), PARAMETER :: M16N4FKye = 1030 + INTEGER(IntKi), PARAMETER :: M16N5FKye = 1031 + INTEGER(IntKi), PARAMETER :: M16N6FKye = 1032 + INTEGER(IntKi), PARAMETER :: M16N7FKye = 1033 + INTEGER(IntKi), PARAMETER :: M16N8FKye = 1034 + INTEGER(IntKi), PARAMETER :: M16N9FKye = 1035 + INTEGER(IntKi), PARAMETER :: M17N1FKye = 1036 + INTEGER(IntKi), PARAMETER :: M17N2FKye = 1037 + INTEGER(IntKi), PARAMETER :: M17N3FKye = 1038 + INTEGER(IntKi), PARAMETER :: M17N4FKye = 1039 + INTEGER(IntKi), PARAMETER :: M17N5FKye = 1040 + INTEGER(IntKi), PARAMETER :: M17N6FKye = 1041 + INTEGER(IntKi), PARAMETER :: M17N7FKye = 1042 + INTEGER(IntKi), PARAMETER :: M17N8FKye = 1043 + INTEGER(IntKi), PARAMETER :: M17N9FKye = 1044 + INTEGER(IntKi), PARAMETER :: M18N1FKye = 1045 + INTEGER(IntKi), PARAMETER :: M18N2FKye = 1046 + INTEGER(IntKi), PARAMETER :: M18N3FKye = 1047 + INTEGER(IntKi), PARAMETER :: M18N4FKye = 1048 + INTEGER(IntKi), PARAMETER :: M18N5FKye = 1049 + INTEGER(IntKi), PARAMETER :: M18N6FKye = 1050 + INTEGER(IntKi), PARAMETER :: M18N7FKye = 1051 + INTEGER(IntKi), PARAMETER :: M18N8FKye = 1052 + INTEGER(IntKi), PARAMETER :: M18N9FKye = 1053 + INTEGER(IntKi), PARAMETER :: M19N1FKye = 1054 + INTEGER(IntKi), PARAMETER :: M19N2FKye = 1055 + INTEGER(IntKi), PARAMETER :: M19N3FKye = 1056 + INTEGER(IntKi), PARAMETER :: M19N4FKye = 1057 + INTEGER(IntKi), PARAMETER :: M19N5FKye = 1058 + INTEGER(IntKi), PARAMETER :: M19N6FKye = 1059 + INTEGER(IntKi), PARAMETER :: M19N7FKye = 1060 + INTEGER(IntKi), PARAMETER :: M19N8FKye = 1061 + INTEGER(IntKi), PARAMETER :: M19N9FKye = 1062 + INTEGER(IntKi), PARAMETER :: M20N1FKye = 1063 + INTEGER(IntKi), PARAMETER :: M20N2FKye = 1064 + INTEGER(IntKi), PARAMETER :: M20N3FKye = 1065 + INTEGER(IntKi), PARAMETER :: M20N4FKye = 1066 + INTEGER(IntKi), PARAMETER :: M20N5FKye = 1067 + INTEGER(IntKi), PARAMETER :: M20N6FKye = 1068 + INTEGER(IntKi), PARAMETER :: M20N7FKye = 1069 + INTEGER(IntKi), PARAMETER :: M20N8FKye = 1070 + INTEGER(IntKi), PARAMETER :: M20N9FKye = 1071 + INTEGER(IntKi), PARAMETER :: M21N1FKye = 1072 + INTEGER(IntKi), PARAMETER :: M21N2FKye = 1073 + INTEGER(IntKi), PARAMETER :: M21N3FKye = 1074 + INTEGER(IntKi), PARAMETER :: M21N4FKye = 1075 + INTEGER(IntKi), PARAMETER :: M21N5FKye = 1076 + INTEGER(IntKi), PARAMETER :: M21N6FKye = 1077 + INTEGER(IntKi), PARAMETER :: M21N7FKye = 1078 + INTEGER(IntKi), PARAMETER :: M21N8FKye = 1079 + INTEGER(IntKi), PARAMETER :: M21N9FKye = 1080 + INTEGER(IntKi), PARAMETER :: M22N1FKye = 1081 + INTEGER(IntKi), PARAMETER :: M22N2FKye = 1082 + INTEGER(IntKi), PARAMETER :: M22N3FKye = 1083 + INTEGER(IntKi), PARAMETER :: M22N4FKye = 1084 + INTEGER(IntKi), PARAMETER :: M22N5FKye = 1085 + INTEGER(IntKi), PARAMETER :: M22N6FKye = 1086 + INTEGER(IntKi), PARAMETER :: M22N7FKye = 1087 + INTEGER(IntKi), PARAMETER :: M22N8FKye = 1088 + INTEGER(IntKi), PARAMETER :: M22N9FKye = 1089 + INTEGER(IntKi), PARAMETER :: M23N1FKye = 1090 + INTEGER(IntKi), PARAMETER :: M23N2FKye = 1091 + INTEGER(IntKi), PARAMETER :: M23N3FKye = 1092 + INTEGER(IntKi), PARAMETER :: M23N4FKye = 1093 + INTEGER(IntKi), PARAMETER :: M23N5FKye = 1094 + INTEGER(IntKi), PARAMETER :: M23N6FKye = 1095 + INTEGER(IntKi), PARAMETER :: M23N7FKye = 1096 + INTEGER(IntKi), PARAMETER :: M23N8FKye = 1097 + INTEGER(IntKi), PARAMETER :: M23N9FKye = 1098 + INTEGER(IntKi), PARAMETER :: M24N1FKye = 1099 + INTEGER(IntKi), PARAMETER :: M24N2FKye = 1100 + INTEGER(IntKi), PARAMETER :: M24N3FKye = 1101 + INTEGER(IntKi), PARAMETER :: M24N4FKye = 1102 + INTEGER(IntKi), PARAMETER :: M24N5FKye = 1103 + INTEGER(IntKi), PARAMETER :: M24N6FKye = 1104 + INTEGER(IntKi), PARAMETER :: M24N7FKye = 1105 + INTEGER(IntKi), PARAMETER :: M24N8FKye = 1106 + INTEGER(IntKi), PARAMETER :: M24N9FKye = 1107 + INTEGER(IntKi), PARAMETER :: M25N1FKye = 1108 + INTEGER(IntKi), PARAMETER :: M25N2FKye = 1109 + INTEGER(IntKi), PARAMETER :: M25N3FKye = 1110 + INTEGER(IntKi), PARAMETER :: M25N4FKye = 1111 + INTEGER(IntKi), PARAMETER :: M25N5FKye = 1112 + INTEGER(IntKi), PARAMETER :: M25N6FKye = 1113 + INTEGER(IntKi), PARAMETER :: M25N7FKye = 1114 + INTEGER(IntKi), PARAMETER :: M25N8FKye = 1115 + INTEGER(IntKi), PARAMETER :: M25N9FKye = 1116 + INTEGER(IntKi), PARAMETER :: M26N1FKye = 1117 + INTEGER(IntKi), PARAMETER :: M26N2FKye = 1118 + INTEGER(IntKi), PARAMETER :: M26N3FKye = 1119 + INTEGER(IntKi), PARAMETER :: M26N4FKye = 1120 + INTEGER(IntKi), PARAMETER :: M26N5FKye = 1121 + INTEGER(IntKi), PARAMETER :: M26N6FKye = 1122 + INTEGER(IntKi), PARAMETER :: M26N7FKye = 1123 + INTEGER(IntKi), PARAMETER :: M26N8FKye = 1124 + INTEGER(IntKi), PARAMETER :: M26N9FKye = 1125 + INTEGER(IntKi), PARAMETER :: M27N1FKye = 1126 + INTEGER(IntKi), PARAMETER :: M27N2FKye = 1127 + INTEGER(IntKi), PARAMETER :: M27N3FKye = 1128 + INTEGER(IntKi), PARAMETER :: M27N4FKye = 1129 + INTEGER(IntKi), PARAMETER :: M27N5FKye = 1130 + INTEGER(IntKi), PARAMETER :: M27N6FKye = 1131 + INTEGER(IntKi), PARAMETER :: M27N7FKye = 1132 + INTEGER(IntKi), PARAMETER :: M27N8FKye = 1133 + INTEGER(IntKi), PARAMETER :: M27N9FKye = 1134 + INTEGER(IntKi), PARAMETER :: M28N1FKye = 1135 + INTEGER(IntKi), PARAMETER :: M28N2FKye = 1136 + INTEGER(IntKi), PARAMETER :: M28N3FKye = 1137 + INTEGER(IntKi), PARAMETER :: M28N4FKye = 1138 + INTEGER(IntKi), PARAMETER :: M28N5FKye = 1139 + INTEGER(IntKi), PARAMETER :: M28N6FKye = 1140 + INTEGER(IntKi), PARAMETER :: M28N7FKye = 1141 + INTEGER(IntKi), PARAMETER :: M28N8FKye = 1142 + INTEGER(IntKi), PARAMETER :: M28N9FKye = 1143 + INTEGER(IntKi), PARAMETER :: M29N1FKye = 1144 + INTEGER(IntKi), PARAMETER :: M29N2FKye = 1145 + INTEGER(IntKi), PARAMETER :: M29N3FKye = 1146 + INTEGER(IntKi), PARAMETER :: M29N4FKye = 1147 + INTEGER(IntKi), PARAMETER :: M29N5FKye = 1148 + INTEGER(IntKi), PARAMETER :: M29N6FKye = 1149 + INTEGER(IntKi), PARAMETER :: M29N7FKye = 1150 + INTEGER(IntKi), PARAMETER :: M29N8FKye = 1151 + INTEGER(IntKi), PARAMETER :: M29N9FKye = 1152 + INTEGER(IntKi), PARAMETER :: M30N1FKye = 1153 + INTEGER(IntKi), PARAMETER :: M30N2FKye = 1154 + INTEGER(IntKi), PARAMETER :: M30N3FKye = 1155 + INTEGER(IntKi), PARAMETER :: M30N4FKye = 1156 + INTEGER(IntKi), PARAMETER :: M30N5FKye = 1157 + INTEGER(IntKi), PARAMETER :: M30N6FKye = 1158 + INTEGER(IntKi), PARAMETER :: M30N7FKye = 1159 + INTEGER(IntKi), PARAMETER :: M30N8FKye = 1160 + INTEGER(IntKi), PARAMETER :: M30N9FKye = 1161 + INTEGER(IntKi), PARAMETER :: M31N1FKye = 1162 + INTEGER(IntKi), PARAMETER :: M31N2FKye = 1163 + INTEGER(IntKi), PARAMETER :: M31N3FKye = 1164 + INTEGER(IntKi), PARAMETER :: M31N4FKye = 1165 + INTEGER(IntKi), PARAMETER :: M31N5FKye = 1166 + INTEGER(IntKi), PARAMETER :: M31N6FKye = 1167 + INTEGER(IntKi), PARAMETER :: M31N7FKye = 1168 + INTEGER(IntKi), PARAMETER :: M31N8FKye = 1169 + INTEGER(IntKi), PARAMETER :: M31N9FKye = 1170 + INTEGER(IntKi), PARAMETER :: M32N1FKye = 1171 + INTEGER(IntKi), PARAMETER :: M32N2FKye = 1172 + INTEGER(IntKi), PARAMETER :: M32N3FKye = 1173 + INTEGER(IntKi), PARAMETER :: M32N4FKye = 1174 + INTEGER(IntKi), PARAMETER :: M32N5FKye = 1175 + INTEGER(IntKi), PARAMETER :: M32N6FKye = 1176 + INTEGER(IntKi), PARAMETER :: M32N7FKye = 1177 + INTEGER(IntKi), PARAMETER :: M32N8FKye = 1178 + INTEGER(IntKi), PARAMETER :: M32N9FKye = 1179 + INTEGER(IntKi), PARAMETER :: M33N1FKye = 1180 + INTEGER(IntKi), PARAMETER :: M33N2FKye = 1181 + INTEGER(IntKi), PARAMETER :: M33N3FKye = 1182 + INTEGER(IntKi), PARAMETER :: M33N4FKye = 1183 + INTEGER(IntKi), PARAMETER :: M33N5FKye = 1184 + INTEGER(IntKi), PARAMETER :: M33N6FKye = 1185 + INTEGER(IntKi), PARAMETER :: M33N7FKye = 1186 + INTEGER(IntKi), PARAMETER :: M33N8FKye = 1187 + INTEGER(IntKi), PARAMETER :: M33N9FKye = 1188 + INTEGER(IntKi), PARAMETER :: M34N1FKye = 1189 + INTEGER(IntKi), PARAMETER :: M34N2FKye = 1190 + INTEGER(IntKi), PARAMETER :: M34N3FKye = 1191 + INTEGER(IntKi), PARAMETER :: M34N4FKye = 1192 + INTEGER(IntKi), PARAMETER :: M34N5FKye = 1193 + INTEGER(IntKi), PARAMETER :: M34N6FKye = 1194 + INTEGER(IntKi), PARAMETER :: M34N7FKye = 1195 + INTEGER(IntKi), PARAMETER :: M34N8FKye = 1196 + INTEGER(IntKi), PARAMETER :: M34N9FKye = 1197 + INTEGER(IntKi), PARAMETER :: M35N1FKye = 1198 + INTEGER(IntKi), PARAMETER :: M35N2FKye = 1199 + INTEGER(IntKi), PARAMETER :: M35N3FKye = 1200 + INTEGER(IntKi), PARAMETER :: M35N4FKye = 1201 + INTEGER(IntKi), PARAMETER :: M35N5FKye = 1202 + INTEGER(IntKi), PARAMETER :: M35N6FKye = 1203 + INTEGER(IntKi), PARAMETER :: M35N7FKye = 1204 + INTEGER(IntKi), PARAMETER :: M35N8FKye = 1205 + INTEGER(IntKi), PARAMETER :: M35N9FKye = 1206 + INTEGER(IntKi), PARAMETER :: M36N1FKye = 1207 + INTEGER(IntKi), PARAMETER :: M36N2FKye = 1208 + INTEGER(IntKi), PARAMETER :: M36N3FKye = 1209 + INTEGER(IntKi), PARAMETER :: M36N4FKye = 1210 + INTEGER(IntKi), PARAMETER :: M36N5FKye = 1211 + INTEGER(IntKi), PARAMETER :: M36N6FKye = 1212 + INTEGER(IntKi), PARAMETER :: M36N7FKye = 1213 + INTEGER(IntKi), PARAMETER :: M36N8FKye = 1214 + INTEGER(IntKi), PARAMETER :: M36N9FKye = 1215 + INTEGER(IntKi), PARAMETER :: M37N1FKye = 1216 + INTEGER(IntKi), PARAMETER :: M37N2FKye = 1217 + INTEGER(IntKi), PARAMETER :: M37N3FKye = 1218 + INTEGER(IntKi), PARAMETER :: M37N4FKye = 1219 + INTEGER(IntKi), PARAMETER :: M37N5FKye = 1220 + INTEGER(IntKi), PARAMETER :: M37N6FKye = 1221 + INTEGER(IntKi), PARAMETER :: M37N7FKye = 1222 + INTEGER(IntKi), PARAMETER :: M37N8FKye = 1223 + INTEGER(IntKi), PARAMETER :: M37N9FKye = 1224 + INTEGER(IntKi), PARAMETER :: M38N1FKye = 1225 + INTEGER(IntKi), PARAMETER :: M38N2FKye = 1226 + INTEGER(IntKi), PARAMETER :: M38N3FKye = 1227 + INTEGER(IntKi), PARAMETER :: M38N4FKye = 1228 + INTEGER(IntKi), PARAMETER :: M38N5FKye = 1229 + INTEGER(IntKi), PARAMETER :: M38N6FKye = 1230 + INTEGER(IntKi), PARAMETER :: M38N7FKye = 1231 + INTEGER(IntKi), PARAMETER :: M38N8FKye = 1232 + INTEGER(IntKi), PARAMETER :: M38N9FKye = 1233 + INTEGER(IntKi), PARAMETER :: M39N1FKye = 1234 + INTEGER(IntKi), PARAMETER :: M39N2FKye = 1235 + INTEGER(IntKi), PARAMETER :: M39N3FKye = 1236 + INTEGER(IntKi), PARAMETER :: M39N4FKye = 1237 + INTEGER(IntKi), PARAMETER :: M39N5FKye = 1238 + INTEGER(IntKi), PARAMETER :: M39N6FKye = 1239 + INTEGER(IntKi), PARAMETER :: M39N7FKye = 1240 + INTEGER(IntKi), PARAMETER :: M39N8FKye = 1241 + INTEGER(IntKi), PARAMETER :: M39N9FKye = 1242 + INTEGER(IntKi), PARAMETER :: M40N1FKye = 1243 + INTEGER(IntKi), PARAMETER :: M40N2FKye = 1244 + INTEGER(IntKi), PARAMETER :: M40N3FKye = 1245 + INTEGER(IntKi), PARAMETER :: M40N4FKye = 1246 + INTEGER(IntKi), PARAMETER :: M40N5FKye = 1247 + INTEGER(IntKi), PARAMETER :: M40N6FKye = 1248 + INTEGER(IntKi), PARAMETER :: M40N7FKye = 1249 + INTEGER(IntKi), PARAMETER :: M40N8FKye = 1250 + INTEGER(IntKi), PARAMETER :: M40N9FKye = 1251 + INTEGER(IntKi), PARAMETER :: M41N1FKye = 1252 + INTEGER(IntKi), PARAMETER :: M41N2FKye = 1253 + INTEGER(IntKi), PARAMETER :: M41N3FKye = 1254 + INTEGER(IntKi), PARAMETER :: M41N4FKye = 1255 + INTEGER(IntKi), PARAMETER :: M41N5FKye = 1256 + INTEGER(IntKi), PARAMETER :: M41N6FKye = 1257 + INTEGER(IntKi), PARAMETER :: M41N7FKye = 1258 + INTEGER(IntKi), PARAMETER :: M41N8FKye = 1259 + INTEGER(IntKi), PARAMETER :: M41N9FKye = 1260 + INTEGER(IntKi), PARAMETER :: M42N1FKye = 1261 + INTEGER(IntKi), PARAMETER :: M42N2FKye = 1262 + INTEGER(IntKi), PARAMETER :: M42N3FKye = 1263 + INTEGER(IntKi), PARAMETER :: M42N4FKye = 1264 + INTEGER(IntKi), PARAMETER :: M42N5FKye = 1265 + INTEGER(IntKi), PARAMETER :: M42N6FKye = 1266 + INTEGER(IntKi), PARAMETER :: M42N7FKye = 1267 + INTEGER(IntKi), PARAMETER :: M42N8FKye = 1268 + INTEGER(IntKi), PARAMETER :: M42N9FKye = 1269 + INTEGER(IntKi), PARAMETER :: M43N1FKye = 1270 + INTEGER(IntKi), PARAMETER :: M43N2FKye = 1271 + INTEGER(IntKi), PARAMETER :: M43N3FKye = 1272 + INTEGER(IntKi), PARAMETER :: M43N4FKye = 1273 + INTEGER(IntKi), PARAMETER :: M43N5FKye = 1274 + INTEGER(IntKi), PARAMETER :: M43N6FKye = 1275 + INTEGER(IntKi), PARAMETER :: M43N7FKye = 1276 + INTEGER(IntKi), PARAMETER :: M43N8FKye = 1277 + INTEGER(IntKi), PARAMETER :: M43N9FKye = 1278 + INTEGER(IntKi), PARAMETER :: M44N1FKye = 1279 + INTEGER(IntKi), PARAMETER :: M44N2FKye = 1280 + INTEGER(IntKi), PARAMETER :: M44N3FKye = 1281 + INTEGER(IntKi), PARAMETER :: M44N4FKye = 1282 + INTEGER(IntKi), PARAMETER :: M44N5FKye = 1283 + INTEGER(IntKi), PARAMETER :: M44N6FKye = 1284 + INTEGER(IntKi), PARAMETER :: M44N7FKye = 1285 + INTEGER(IntKi), PARAMETER :: M44N8FKye = 1286 + INTEGER(IntKi), PARAMETER :: M44N9FKye = 1287 + INTEGER(IntKi), PARAMETER :: M45N1FKye = 1288 + INTEGER(IntKi), PARAMETER :: M45N2FKye = 1289 + INTEGER(IntKi), PARAMETER :: M45N3FKye = 1290 + INTEGER(IntKi), PARAMETER :: M45N4FKye = 1291 + INTEGER(IntKi), PARAMETER :: M45N5FKye = 1292 + INTEGER(IntKi), PARAMETER :: M45N6FKye = 1293 + INTEGER(IntKi), PARAMETER :: M45N7FKye = 1294 + INTEGER(IntKi), PARAMETER :: M45N8FKye = 1295 + INTEGER(IntKi), PARAMETER :: M45N9FKye = 1296 + INTEGER(IntKi), PARAMETER :: M46N1FKye = 1297 + INTEGER(IntKi), PARAMETER :: M46N2FKye = 1298 + INTEGER(IntKi), PARAMETER :: M46N3FKye = 1299 + INTEGER(IntKi), PARAMETER :: M46N4FKye = 1300 + INTEGER(IntKi), PARAMETER :: M46N5FKye = 1301 + INTEGER(IntKi), PARAMETER :: M46N6FKye = 1302 + INTEGER(IntKi), PARAMETER :: M46N7FKye = 1303 + INTEGER(IntKi), PARAMETER :: M46N8FKye = 1304 + INTEGER(IntKi), PARAMETER :: M46N9FKye = 1305 + INTEGER(IntKi), PARAMETER :: M47N1FKye = 1306 + INTEGER(IntKi), PARAMETER :: M47N2FKye = 1307 + INTEGER(IntKi), PARAMETER :: M47N3FKye = 1308 + INTEGER(IntKi), PARAMETER :: M47N4FKye = 1309 + INTEGER(IntKi), PARAMETER :: M47N5FKye = 1310 + INTEGER(IntKi), PARAMETER :: M47N6FKye = 1311 + INTEGER(IntKi), PARAMETER :: M47N7FKye = 1312 + INTEGER(IntKi), PARAMETER :: M47N8FKye = 1313 + INTEGER(IntKi), PARAMETER :: M47N9FKye = 1314 + INTEGER(IntKi), PARAMETER :: M48N1FKye = 1315 + INTEGER(IntKi), PARAMETER :: M48N2FKye = 1316 + INTEGER(IntKi), PARAMETER :: M48N3FKye = 1317 + INTEGER(IntKi), PARAMETER :: M48N4FKye = 1318 + INTEGER(IntKi), PARAMETER :: M48N5FKye = 1319 + INTEGER(IntKi), PARAMETER :: M48N6FKye = 1320 + INTEGER(IntKi), PARAMETER :: M48N7FKye = 1321 + INTEGER(IntKi), PARAMETER :: M48N8FKye = 1322 + INTEGER(IntKi), PARAMETER :: M48N9FKye = 1323 + INTEGER(IntKi), PARAMETER :: M49N1FKye = 1324 + INTEGER(IntKi), PARAMETER :: M49N2FKye = 1325 + INTEGER(IntKi), PARAMETER :: M49N3FKye = 1326 + INTEGER(IntKi), PARAMETER :: M49N4FKye = 1327 + INTEGER(IntKi), PARAMETER :: M49N5FKye = 1328 + INTEGER(IntKi), PARAMETER :: M49N6FKye = 1329 + INTEGER(IntKi), PARAMETER :: M49N7FKye = 1330 + INTEGER(IntKi), PARAMETER :: M49N8FKye = 1331 + INTEGER(IntKi), PARAMETER :: M49N9FKye = 1332 + INTEGER(IntKi), PARAMETER :: M50N1FKye = 1333 + INTEGER(IntKi), PARAMETER :: M50N2FKye = 1334 + INTEGER(IntKi), PARAMETER :: M50N3FKye = 1335 + INTEGER(IntKi), PARAMETER :: M50N4FKye = 1336 + INTEGER(IntKi), PARAMETER :: M50N5FKye = 1337 + INTEGER(IntKi), PARAMETER :: M50N6FKye = 1338 + INTEGER(IntKi), PARAMETER :: M50N7FKye = 1339 + INTEGER(IntKi), PARAMETER :: M50N8FKye = 1340 + INTEGER(IntKi), PARAMETER :: M50N9FKye = 1341 + INTEGER(IntKi), PARAMETER :: M51N1FKye = 1342 + INTEGER(IntKi), PARAMETER :: M51N2FKye = 1343 + INTEGER(IntKi), PARAMETER :: M51N3FKye = 1344 + INTEGER(IntKi), PARAMETER :: M51N4FKye = 1345 + INTEGER(IntKi), PARAMETER :: M51N5FKye = 1346 + INTEGER(IntKi), PARAMETER :: M51N6FKye = 1347 + INTEGER(IntKi), PARAMETER :: M51N7FKye = 1348 + INTEGER(IntKi), PARAMETER :: M51N8FKye = 1349 + INTEGER(IntKi), PARAMETER :: M51N9FKye = 1350 + INTEGER(IntKi), PARAMETER :: M52N1FKye = 1351 + INTEGER(IntKi), PARAMETER :: M52N2FKye = 1352 + INTEGER(IntKi), PARAMETER :: M52N3FKye = 1353 + INTEGER(IntKi), PARAMETER :: M52N4FKye = 1354 + INTEGER(IntKi), PARAMETER :: M52N5FKye = 1355 + INTEGER(IntKi), PARAMETER :: M52N6FKye = 1356 + INTEGER(IntKi), PARAMETER :: M52N7FKye = 1357 + INTEGER(IntKi), PARAMETER :: M52N8FKye = 1358 + INTEGER(IntKi), PARAMETER :: M52N9FKye = 1359 + INTEGER(IntKi), PARAMETER :: M53N1FKye = 1360 + INTEGER(IntKi), PARAMETER :: M53N2FKye = 1361 + INTEGER(IntKi), PARAMETER :: M53N3FKye = 1362 + INTEGER(IntKi), PARAMETER :: M53N4FKye = 1363 + INTEGER(IntKi), PARAMETER :: M53N5FKye = 1364 + INTEGER(IntKi), PARAMETER :: M53N6FKye = 1365 + INTEGER(IntKi), PARAMETER :: M53N7FKye = 1366 + INTEGER(IntKi), PARAMETER :: M53N8FKye = 1367 + INTEGER(IntKi), PARAMETER :: M53N9FKye = 1368 + INTEGER(IntKi), PARAMETER :: M54N1FKye = 1369 + INTEGER(IntKi), PARAMETER :: M54N2FKye = 1370 + INTEGER(IntKi), PARAMETER :: M54N3FKye = 1371 + INTEGER(IntKi), PARAMETER :: M54N4FKye = 1372 + INTEGER(IntKi), PARAMETER :: M54N5FKye = 1373 + INTEGER(IntKi), PARAMETER :: M54N6FKye = 1374 + INTEGER(IntKi), PARAMETER :: M54N7FKye = 1375 + INTEGER(IntKi), PARAMETER :: M54N8FKye = 1376 + INTEGER(IntKi), PARAMETER :: M54N9FKye = 1377 + INTEGER(IntKi), PARAMETER :: M55N1FKye = 1378 + INTEGER(IntKi), PARAMETER :: M55N2FKye = 1379 + INTEGER(IntKi), PARAMETER :: M55N3FKye = 1380 + INTEGER(IntKi), PARAMETER :: M55N4FKye = 1381 + INTEGER(IntKi), PARAMETER :: M55N5FKye = 1382 + INTEGER(IntKi), PARAMETER :: M55N6FKye = 1383 + INTEGER(IntKi), PARAMETER :: M55N7FKye = 1384 + INTEGER(IntKi), PARAMETER :: M55N8FKye = 1385 + INTEGER(IntKi), PARAMETER :: M55N9FKye = 1386 + INTEGER(IntKi), PARAMETER :: M56N1FKye = 1387 + INTEGER(IntKi), PARAMETER :: M56N2FKye = 1388 + INTEGER(IntKi), PARAMETER :: M56N3FKye = 1389 + INTEGER(IntKi), PARAMETER :: M56N4FKye = 1390 + INTEGER(IntKi), PARAMETER :: M56N5FKye = 1391 + INTEGER(IntKi), PARAMETER :: M56N6FKye = 1392 + INTEGER(IntKi), PARAMETER :: M56N7FKye = 1393 + INTEGER(IntKi), PARAMETER :: M56N8FKye = 1394 + INTEGER(IntKi), PARAMETER :: M56N9FKye = 1395 + INTEGER(IntKi), PARAMETER :: M57N1FKye = 1396 + INTEGER(IntKi), PARAMETER :: M57N2FKye = 1397 + INTEGER(IntKi), PARAMETER :: M57N3FKye = 1398 + INTEGER(IntKi), PARAMETER :: M57N4FKye = 1399 + INTEGER(IntKi), PARAMETER :: M57N5FKye = 1400 + INTEGER(IntKi), PARAMETER :: M57N6FKye = 1401 + INTEGER(IntKi), PARAMETER :: M57N7FKye = 1402 + INTEGER(IntKi), PARAMETER :: M57N8FKye = 1403 + INTEGER(IntKi), PARAMETER :: M57N9FKye = 1404 + INTEGER(IntKi), PARAMETER :: M58N1FKye = 1405 + INTEGER(IntKi), PARAMETER :: M58N2FKye = 1406 + INTEGER(IntKi), PARAMETER :: M58N3FKye = 1407 + INTEGER(IntKi), PARAMETER :: M58N4FKye = 1408 + INTEGER(IntKi), PARAMETER :: M58N5FKye = 1409 + INTEGER(IntKi), PARAMETER :: M58N6FKye = 1410 + INTEGER(IntKi), PARAMETER :: M58N7FKye = 1411 + INTEGER(IntKi), PARAMETER :: M58N8FKye = 1412 + INTEGER(IntKi), PARAMETER :: M58N9FKye = 1413 + INTEGER(IntKi), PARAMETER :: M59N1FKye = 1414 + INTEGER(IntKi), PARAMETER :: M59N2FKye = 1415 + INTEGER(IntKi), PARAMETER :: M59N3FKye = 1416 + INTEGER(IntKi), PARAMETER :: M59N4FKye = 1417 + INTEGER(IntKi), PARAMETER :: M59N5FKye = 1418 + INTEGER(IntKi), PARAMETER :: M59N6FKye = 1419 + INTEGER(IntKi), PARAMETER :: M59N7FKye = 1420 + INTEGER(IntKi), PARAMETER :: M59N8FKye = 1421 + INTEGER(IntKi), PARAMETER :: M59N9FKye = 1422 + INTEGER(IntKi), PARAMETER :: M60N1FKye = 1423 + INTEGER(IntKi), PARAMETER :: M60N2FKye = 1424 + INTEGER(IntKi), PARAMETER :: M60N3FKye = 1425 + INTEGER(IntKi), PARAMETER :: M60N4FKye = 1426 + INTEGER(IntKi), PARAMETER :: M60N5FKye = 1427 + INTEGER(IntKi), PARAMETER :: M60N6FKye = 1428 + INTEGER(IntKi), PARAMETER :: M60N7FKye = 1429 + INTEGER(IntKi), PARAMETER :: M60N8FKye = 1430 + INTEGER(IntKi), PARAMETER :: M60N9FKye = 1431 + INTEGER(IntKi), PARAMETER :: M61N1FKye = 1432 + INTEGER(IntKi), PARAMETER :: M61N2FKye = 1433 + INTEGER(IntKi), PARAMETER :: M61N3FKye = 1434 + INTEGER(IntKi), PARAMETER :: M61N4FKye = 1435 + INTEGER(IntKi), PARAMETER :: M61N5FKye = 1436 + INTEGER(IntKi), PARAMETER :: M61N6FKye = 1437 + INTEGER(IntKi), PARAMETER :: M61N7FKye = 1438 + INTEGER(IntKi), PARAMETER :: M61N8FKye = 1439 + INTEGER(IntKi), PARAMETER :: M61N9FKye = 1440 + INTEGER(IntKi), PARAMETER :: M62N1FKye = 1441 + INTEGER(IntKi), PARAMETER :: M62N2FKye = 1442 + INTEGER(IntKi), PARAMETER :: M62N3FKye = 1443 + INTEGER(IntKi), PARAMETER :: M62N4FKye = 1444 + INTEGER(IntKi), PARAMETER :: M62N5FKye = 1445 + INTEGER(IntKi), PARAMETER :: M62N6FKye = 1446 + INTEGER(IntKi), PARAMETER :: M62N7FKye = 1447 + INTEGER(IntKi), PARAMETER :: M62N8FKye = 1448 + INTEGER(IntKi), PARAMETER :: M62N9FKye = 1449 + INTEGER(IntKi), PARAMETER :: M63N1FKye = 1450 + INTEGER(IntKi), PARAMETER :: M63N2FKye = 1451 + INTEGER(IntKi), PARAMETER :: M63N3FKye = 1452 + INTEGER(IntKi), PARAMETER :: M63N4FKye = 1453 + INTEGER(IntKi), PARAMETER :: M63N5FKye = 1454 + INTEGER(IntKi), PARAMETER :: M63N6FKye = 1455 + INTEGER(IntKi), PARAMETER :: M63N7FKye = 1456 + INTEGER(IntKi), PARAMETER :: M63N8FKye = 1457 + INTEGER(IntKi), PARAMETER :: M63N9FKye = 1458 + INTEGER(IntKi), PARAMETER :: M64N1FKye = 1459 + INTEGER(IntKi), PARAMETER :: M64N2FKye = 1460 + INTEGER(IntKi), PARAMETER :: M64N3FKye = 1461 + INTEGER(IntKi), PARAMETER :: M64N4FKye = 1462 + INTEGER(IntKi), PARAMETER :: M64N5FKye = 1463 + INTEGER(IntKi), PARAMETER :: M64N6FKye = 1464 + INTEGER(IntKi), PARAMETER :: M64N7FKye = 1465 + INTEGER(IntKi), PARAMETER :: M64N8FKye = 1466 + INTEGER(IntKi), PARAMETER :: M64N9FKye = 1467 + INTEGER(IntKi), PARAMETER :: M65N1FKye = 1468 + INTEGER(IntKi), PARAMETER :: M65N2FKye = 1469 + INTEGER(IntKi), PARAMETER :: M65N3FKye = 1470 + INTEGER(IntKi), PARAMETER :: M65N4FKye = 1471 + INTEGER(IntKi), PARAMETER :: M65N5FKye = 1472 + INTEGER(IntKi), PARAMETER :: M65N6FKye = 1473 + INTEGER(IntKi), PARAMETER :: M65N7FKye = 1474 + INTEGER(IntKi), PARAMETER :: M65N8FKye = 1475 + INTEGER(IntKi), PARAMETER :: M65N9FKye = 1476 + INTEGER(IntKi), PARAMETER :: M66N1FKye = 1477 + INTEGER(IntKi), PARAMETER :: M66N2FKye = 1478 + INTEGER(IntKi), PARAMETER :: M66N3FKye = 1479 + INTEGER(IntKi), PARAMETER :: M66N4FKye = 1480 + INTEGER(IntKi), PARAMETER :: M66N5FKye = 1481 + INTEGER(IntKi), PARAMETER :: M66N6FKye = 1482 + INTEGER(IntKi), PARAMETER :: M66N7FKye = 1483 + INTEGER(IntKi), PARAMETER :: M66N8FKye = 1484 + INTEGER(IntKi), PARAMETER :: M66N9FKye = 1485 + INTEGER(IntKi), PARAMETER :: M67N1FKye = 1486 + INTEGER(IntKi), PARAMETER :: M67N2FKye = 1487 + INTEGER(IntKi), PARAMETER :: M67N3FKye = 1488 + INTEGER(IntKi), PARAMETER :: M67N4FKye = 1489 + INTEGER(IntKi), PARAMETER :: M67N5FKye = 1490 + INTEGER(IntKi), PARAMETER :: M67N6FKye = 1491 + INTEGER(IntKi), PARAMETER :: M67N7FKye = 1492 + INTEGER(IntKi), PARAMETER :: M67N8FKye = 1493 + INTEGER(IntKi), PARAMETER :: M67N9FKye = 1494 + INTEGER(IntKi), PARAMETER :: M68N1FKye = 1495 + INTEGER(IntKi), PARAMETER :: M68N2FKye = 1496 + INTEGER(IntKi), PARAMETER :: M68N3FKye = 1497 + INTEGER(IntKi), PARAMETER :: M68N4FKye = 1498 + INTEGER(IntKi), PARAMETER :: M68N5FKye = 1499 + INTEGER(IntKi), PARAMETER :: M68N6FKye = 1500 + INTEGER(IntKi), PARAMETER :: M68N7FKye = 1501 + INTEGER(IntKi), PARAMETER :: M68N8FKye = 1502 + INTEGER(IntKi), PARAMETER :: M68N9FKye = 1503 + INTEGER(IntKi), PARAMETER :: M69N1FKye = 1504 + INTEGER(IntKi), PARAMETER :: M69N2FKye = 1505 + INTEGER(IntKi), PARAMETER :: M69N3FKye = 1506 + INTEGER(IntKi), PARAMETER :: M69N4FKye = 1507 + INTEGER(IntKi), PARAMETER :: M69N5FKye = 1508 + INTEGER(IntKi), PARAMETER :: M69N6FKye = 1509 + INTEGER(IntKi), PARAMETER :: M69N7FKye = 1510 + INTEGER(IntKi), PARAMETER :: M69N8FKye = 1511 + INTEGER(IntKi), PARAMETER :: M69N9FKye = 1512 + INTEGER(IntKi), PARAMETER :: M70N1FKye = 1513 + INTEGER(IntKi), PARAMETER :: M70N2FKye = 1514 + INTEGER(IntKi), PARAMETER :: M70N3FKye = 1515 + INTEGER(IntKi), PARAMETER :: M70N4FKye = 1516 + INTEGER(IntKi), PARAMETER :: M70N5FKye = 1517 + INTEGER(IntKi), PARAMETER :: M70N6FKye = 1518 + INTEGER(IntKi), PARAMETER :: M70N7FKye = 1519 + INTEGER(IntKi), PARAMETER :: M70N8FKye = 1520 + INTEGER(IntKi), PARAMETER :: M70N9FKye = 1521 + INTEGER(IntKi), PARAMETER :: M71N1FKye = 1522 + INTEGER(IntKi), PARAMETER :: M71N2FKye = 1523 + INTEGER(IntKi), PARAMETER :: M71N3FKye = 1524 + INTEGER(IntKi), PARAMETER :: M71N4FKye = 1525 + INTEGER(IntKi), PARAMETER :: M71N5FKye = 1526 + INTEGER(IntKi), PARAMETER :: M71N6FKye = 1527 + INTEGER(IntKi), PARAMETER :: M71N7FKye = 1528 + INTEGER(IntKi), PARAMETER :: M71N8FKye = 1529 + INTEGER(IntKi), PARAMETER :: M71N9FKye = 1530 + INTEGER(IntKi), PARAMETER :: M72N1FKye = 1531 + INTEGER(IntKi), PARAMETER :: M72N2FKye = 1532 + INTEGER(IntKi), PARAMETER :: M72N3FKye = 1533 + INTEGER(IntKi), PARAMETER :: M72N4FKye = 1534 + INTEGER(IntKi), PARAMETER :: M72N5FKye = 1535 + INTEGER(IntKi), PARAMETER :: M72N6FKye = 1536 + INTEGER(IntKi), PARAMETER :: M72N7FKye = 1537 + INTEGER(IntKi), PARAMETER :: M72N8FKye = 1538 + INTEGER(IntKi), PARAMETER :: M72N9FKye = 1539 + INTEGER(IntKi), PARAMETER :: M73N1FKye = 1540 + INTEGER(IntKi), PARAMETER :: M73N2FKye = 1541 + INTEGER(IntKi), PARAMETER :: M73N3FKye = 1542 + INTEGER(IntKi), PARAMETER :: M73N4FKye = 1543 + INTEGER(IntKi), PARAMETER :: M73N5FKye = 1544 + INTEGER(IntKi), PARAMETER :: M73N6FKye = 1545 + INTEGER(IntKi), PARAMETER :: M73N7FKye = 1546 + INTEGER(IntKi), PARAMETER :: M73N8FKye = 1547 + INTEGER(IntKi), PARAMETER :: M73N9FKye = 1548 + INTEGER(IntKi), PARAMETER :: M74N1FKye = 1549 + INTEGER(IntKi), PARAMETER :: M74N2FKye = 1550 + INTEGER(IntKi), PARAMETER :: M74N3FKye = 1551 + INTEGER(IntKi), PARAMETER :: M74N4FKye = 1552 + INTEGER(IntKi), PARAMETER :: M74N5FKye = 1553 + INTEGER(IntKi), PARAMETER :: M74N6FKye = 1554 + INTEGER(IntKi), PARAMETER :: M74N7FKye = 1555 + INTEGER(IntKi), PARAMETER :: M74N8FKye = 1556 + INTEGER(IntKi), PARAMETER :: M74N9FKye = 1557 + INTEGER(IntKi), PARAMETER :: M75N1FKye = 1558 + INTEGER(IntKi), PARAMETER :: M75N2FKye = 1559 + INTEGER(IntKi), PARAMETER :: M75N3FKye = 1560 + INTEGER(IntKi), PARAMETER :: M75N4FKye = 1561 + INTEGER(IntKi), PARAMETER :: M75N5FKye = 1562 + INTEGER(IntKi), PARAMETER :: M75N6FKye = 1563 + INTEGER(IntKi), PARAMETER :: M75N7FKye = 1564 + INTEGER(IntKi), PARAMETER :: M75N8FKye = 1565 + INTEGER(IntKi), PARAMETER :: M75N9FKye = 1566 + INTEGER(IntKi), PARAMETER :: M76N1FKye = 1567 + INTEGER(IntKi), PARAMETER :: M76N2FKye = 1568 + INTEGER(IntKi), PARAMETER :: M76N3FKye = 1569 + INTEGER(IntKi), PARAMETER :: M76N4FKye = 1570 + INTEGER(IntKi), PARAMETER :: M76N5FKye = 1571 + INTEGER(IntKi), PARAMETER :: M76N6FKye = 1572 + INTEGER(IntKi), PARAMETER :: M76N7FKye = 1573 + INTEGER(IntKi), PARAMETER :: M76N8FKye = 1574 + INTEGER(IntKi), PARAMETER :: M76N9FKye = 1575 + INTEGER(IntKi), PARAMETER :: M77N1FKye = 1576 + INTEGER(IntKi), PARAMETER :: M77N2FKye = 1577 + INTEGER(IntKi), PARAMETER :: M77N3FKye = 1578 + INTEGER(IntKi), PARAMETER :: M77N4FKye = 1579 + INTEGER(IntKi), PARAMETER :: M77N5FKye = 1580 + INTEGER(IntKi), PARAMETER :: M77N6FKye = 1581 + INTEGER(IntKi), PARAMETER :: M77N7FKye = 1582 + INTEGER(IntKi), PARAMETER :: M77N8FKye = 1583 + INTEGER(IntKi), PARAMETER :: M77N9FKye = 1584 + INTEGER(IntKi), PARAMETER :: M78N1FKye = 1585 + INTEGER(IntKi), PARAMETER :: M78N2FKye = 1586 + INTEGER(IntKi), PARAMETER :: M78N3FKye = 1587 + INTEGER(IntKi), PARAMETER :: M78N4FKye = 1588 + INTEGER(IntKi), PARAMETER :: M78N5FKye = 1589 + INTEGER(IntKi), PARAMETER :: M78N6FKye = 1590 + INTEGER(IntKi), PARAMETER :: M78N7FKye = 1591 + INTEGER(IntKi), PARAMETER :: M78N8FKye = 1592 + INTEGER(IntKi), PARAMETER :: M78N9FKye = 1593 + INTEGER(IntKi), PARAMETER :: M79N1FKye = 1594 + INTEGER(IntKi), PARAMETER :: M79N2FKye = 1595 + INTEGER(IntKi), PARAMETER :: M79N3FKye = 1596 + INTEGER(IntKi), PARAMETER :: M79N4FKye = 1597 + INTEGER(IntKi), PARAMETER :: M79N5FKye = 1598 + INTEGER(IntKi), PARAMETER :: M79N6FKye = 1599 + INTEGER(IntKi), PARAMETER :: M79N7FKye = 1600 + INTEGER(IntKi), PARAMETER :: M79N8FKye = 1601 + INTEGER(IntKi), PARAMETER :: M79N9FKye = 1602 + INTEGER(IntKi), PARAMETER :: M80N1FKye = 1603 + INTEGER(IntKi), PARAMETER :: M80N2FKye = 1604 + INTEGER(IntKi), PARAMETER :: M80N3FKye = 1605 + INTEGER(IntKi), PARAMETER :: M80N4FKye = 1606 + INTEGER(IntKi), PARAMETER :: M80N5FKye = 1607 + INTEGER(IntKi), PARAMETER :: M80N6FKye = 1608 + INTEGER(IntKi), PARAMETER :: M80N7FKye = 1609 + INTEGER(IntKi), PARAMETER :: M80N8FKye = 1610 + INTEGER(IntKi), PARAMETER :: M80N9FKye = 1611 + INTEGER(IntKi), PARAMETER :: M81N1FKye = 1612 + INTEGER(IntKi), PARAMETER :: M81N2FKye = 1613 + INTEGER(IntKi), PARAMETER :: M81N3FKye = 1614 + INTEGER(IntKi), PARAMETER :: M81N4FKye = 1615 + INTEGER(IntKi), PARAMETER :: M81N5FKye = 1616 + INTEGER(IntKi), PARAMETER :: M81N6FKye = 1617 + INTEGER(IntKi), PARAMETER :: M81N7FKye = 1618 + INTEGER(IntKi), PARAMETER :: M81N8FKye = 1619 + INTEGER(IntKi), PARAMETER :: M81N9FKye = 1620 + INTEGER(IntKi), PARAMETER :: M82N1FKye = 1621 + INTEGER(IntKi), PARAMETER :: M82N2FKye = 1622 + INTEGER(IntKi), PARAMETER :: M82N3FKye = 1623 + INTEGER(IntKi), PARAMETER :: M82N4FKye = 1624 + INTEGER(IntKi), PARAMETER :: M82N5FKye = 1625 + INTEGER(IntKi), PARAMETER :: M82N6FKye = 1626 + INTEGER(IntKi), PARAMETER :: M82N7FKye = 1627 + INTEGER(IntKi), PARAMETER :: M82N8FKye = 1628 + INTEGER(IntKi), PARAMETER :: M82N9FKye = 1629 + INTEGER(IntKi), PARAMETER :: M83N1FKye = 1630 + INTEGER(IntKi), PARAMETER :: M83N2FKye = 1631 + INTEGER(IntKi), PARAMETER :: M83N3FKye = 1632 + INTEGER(IntKi), PARAMETER :: M83N4FKye = 1633 + INTEGER(IntKi), PARAMETER :: M83N5FKye = 1634 + INTEGER(IntKi), PARAMETER :: M83N6FKye = 1635 + INTEGER(IntKi), PARAMETER :: M83N7FKye = 1636 + INTEGER(IntKi), PARAMETER :: M83N8FKye = 1637 + INTEGER(IntKi), PARAMETER :: M83N9FKye = 1638 + INTEGER(IntKi), PARAMETER :: M84N1FKye = 1639 + INTEGER(IntKi), PARAMETER :: M84N2FKye = 1640 + INTEGER(IntKi), PARAMETER :: M84N3FKye = 1641 + INTEGER(IntKi), PARAMETER :: M84N4FKye = 1642 + INTEGER(IntKi), PARAMETER :: M84N5FKye = 1643 + INTEGER(IntKi), PARAMETER :: M84N6FKye = 1644 + INTEGER(IntKi), PARAMETER :: M84N7FKye = 1645 + INTEGER(IntKi), PARAMETER :: M84N8FKye = 1646 + INTEGER(IntKi), PARAMETER :: M84N9FKye = 1647 + INTEGER(IntKi), PARAMETER :: M85N1FKye = 1648 + INTEGER(IntKi), PARAMETER :: M85N2FKye = 1649 + INTEGER(IntKi), PARAMETER :: M85N3FKye = 1650 + INTEGER(IntKi), PARAMETER :: M85N4FKye = 1651 + INTEGER(IntKi), PARAMETER :: M85N5FKye = 1652 + INTEGER(IntKi), PARAMETER :: M85N6FKye = 1653 + INTEGER(IntKi), PARAMETER :: M85N7FKye = 1654 + INTEGER(IntKi), PARAMETER :: M85N8FKye = 1655 + INTEGER(IntKi), PARAMETER :: M85N9FKye = 1656 + INTEGER(IntKi), PARAMETER :: M86N1FKye = 1657 + INTEGER(IntKi), PARAMETER :: M86N2FKye = 1658 + INTEGER(IntKi), PARAMETER :: M86N3FKye = 1659 + INTEGER(IntKi), PARAMETER :: M86N4FKye = 1660 + INTEGER(IntKi), PARAMETER :: M86N5FKye = 1661 + INTEGER(IntKi), PARAMETER :: M86N6FKye = 1662 + INTEGER(IntKi), PARAMETER :: M86N7FKye = 1663 + INTEGER(IntKi), PARAMETER :: M86N8FKye = 1664 + INTEGER(IntKi), PARAMETER :: M86N9FKye = 1665 + INTEGER(IntKi), PARAMETER :: M87N1FKye = 1666 + INTEGER(IntKi), PARAMETER :: M87N2FKye = 1667 + INTEGER(IntKi), PARAMETER :: M87N3FKye = 1668 + INTEGER(IntKi), PARAMETER :: M87N4FKye = 1669 + INTEGER(IntKi), PARAMETER :: M87N5FKye = 1670 + INTEGER(IntKi), PARAMETER :: M87N6FKye = 1671 + INTEGER(IntKi), PARAMETER :: M87N7FKye = 1672 + INTEGER(IntKi), PARAMETER :: M87N8FKye = 1673 + INTEGER(IntKi), PARAMETER :: M87N9FKye = 1674 + INTEGER(IntKi), PARAMETER :: M88N1FKye = 1675 + INTEGER(IntKi), PARAMETER :: M88N2FKye = 1676 + INTEGER(IntKi), PARAMETER :: M88N3FKye = 1677 + INTEGER(IntKi), PARAMETER :: M88N4FKye = 1678 + INTEGER(IntKi), PARAMETER :: M88N5FKye = 1679 + INTEGER(IntKi), PARAMETER :: M88N6FKye = 1680 + INTEGER(IntKi), PARAMETER :: M88N7FKye = 1681 + INTEGER(IntKi), PARAMETER :: M88N8FKye = 1682 + INTEGER(IntKi), PARAMETER :: M88N9FKye = 1683 + INTEGER(IntKi), PARAMETER :: M89N1FKye = 1684 + INTEGER(IntKi), PARAMETER :: M89N2FKye = 1685 + INTEGER(IntKi), PARAMETER :: M89N3FKye = 1686 + INTEGER(IntKi), PARAMETER :: M89N4FKye = 1687 + INTEGER(IntKi), PARAMETER :: M89N5FKye = 1688 + INTEGER(IntKi), PARAMETER :: M89N6FKye = 1689 + INTEGER(IntKi), PARAMETER :: M89N7FKye = 1690 + INTEGER(IntKi), PARAMETER :: M89N8FKye = 1691 + INTEGER(IntKi), PARAMETER :: M89N9FKye = 1692 + INTEGER(IntKi), PARAMETER :: M90N1FKye = 1693 + INTEGER(IntKi), PARAMETER :: M90N2FKye = 1694 + INTEGER(IntKi), PARAMETER :: M90N3FKye = 1695 + INTEGER(IntKi), PARAMETER :: M90N4FKye = 1696 + INTEGER(IntKi), PARAMETER :: M90N5FKye = 1697 + INTEGER(IntKi), PARAMETER :: M90N6FKye = 1698 + INTEGER(IntKi), PARAMETER :: M90N7FKye = 1699 + INTEGER(IntKi), PARAMETER :: M90N8FKye = 1700 + INTEGER(IntKi), PARAMETER :: M90N9FKye = 1701 + INTEGER(IntKi), PARAMETER :: M91N1FKye = 1702 + INTEGER(IntKi), PARAMETER :: M91N2FKye = 1703 + INTEGER(IntKi), PARAMETER :: M91N3FKye = 1704 + INTEGER(IntKi), PARAMETER :: M91N4FKye = 1705 + INTEGER(IntKi), PARAMETER :: M91N5FKye = 1706 + INTEGER(IntKi), PARAMETER :: M91N6FKye = 1707 + INTEGER(IntKi), PARAMETER :: M91N7FKye = 1708 + INTEGER(IntKi), PARAMETER :: M91N8FKye = 1709 + INTEGER(IntKi), PARAMETER :: M91N9FKye = 1710 + INTEGER(IntKi), PARAMETER :: M92N1FKye = 1711 + INTEGER(IntKi), PARAMETER :: M92N2FKye = 1712 + INTEGER(IntKi), PARAMETER :: M92N3FKye = 1713 + INTEGER(IntKi), PARAMETER :: M92N4FKye = 1714 + INTEGER(IntKi), PARAMETER :: M92N5FKye = 1715 + INTEGER(IntKi), PARAMETER :: M92N6FKye = 1716 + INTEGER(IntKi), PARAMETER :: M92N7FKye = 1717 + INTEGER(IntKi), PARAMETER :: M92N8FKye = 1718 + INTEGER(IntKi), PARAMETER :: M92N9FKye = 1719 + INTEGER(IntKi), PARAMETER :: M93N1FKye = 1720 + INTEGER(IntKi), PARAMETER :: M93N2FKye = 1721 + INTEGER(IntKi), PARAMETER :: M93N3FKye = 1722 + INTEGER(IntKi), PARAMETER :: M93N4FKye = 1723 + INTEGER(IntKi), PARAMETER :: M93N5FKye = 1724 + INTEGER(IntKi), PARAMETER :: M93N6FKye = 1725 + INTEGER(IntKi), PARAMETER :: M93N7FKye = 1726 + INTEGER(IntKi), PARAMETER :: M93N8FKye = 1727 + INTEGER(IntKi), PARAMETER :: M93N9FKye = 1728 + INTEGER(IntKi), PARAMETER :: M94N1FKye = 1729 + INTEGER(IntKi), PARAMETER :: M94N2FKye = 1730 + INTEGER(IntKi), PARAMETER :: M94N3FKye = 1731 + INTEGER(IntKi), PARAMETER :: M94N4FKye = 1732 + INTEGER(IntKi), PARAMETER :: M94N5FKye = 1733 + INTEGER(IntKi), PARAMETER :: M94N6FKye = 1734 + INTEGER(IntKi), PARAMETER :: M94N7FKye = 1735 + INTEGER(IntKi), PARAMETER :: M94N8FKye = 1736 + INTEGER(IntKi), PARAMETER :: M94N9FKye = 1737 + INTEGER(IntKi), PARAMETER :: M95N1FKye = 1738 + INTEGER(IntKi), PARAMETER :: M95N2FKye = 1739 + INTEGER(IntKi), PARAMETER :: M95N3FKye = 1740 + INTEGER(IntKi), PARAMETER :: M95N4FKye = 1741 + INTEGER(IntKi), PARAMETER :: M95N5FKye = 1742 + INTEGER(IntKi), PARAMETER :: M95N6FKye = 1743 + INTEGER(IntKi), PARAMETER :: M95N7FKye = 1744 + INTEGER(IntKi), PARAMETER :: M95N8FKye = 1745 + INTEGER(IntKi), PARAMETER :: M95N9FKye = 1746 + INTEGER(IntKi), PARAMETER :: M96N1FKye = 1747 + INTEGER(IntKi), PARAMETER :: M96N2FKye = 1748 + INTEGER(IntKi), PARAMETER :: M96N3FKye = 1749 + INTEGER(IntKi), PARAMETER :: M96N4FKye = 1750 + INTEGER(IntKi), PARAMETER :: M96N5FKye = 1751 + INTEGER(IntKi), PARAMETER :: M96N6FKye = 1752 + INTEGER(IntKi), PARAMETER :: M96N7FKye = 1753 + INTEGER(IntKi), PARAMETER :: M96N8FKye = 1754 + INTEGER(IntKi), PARAMETER :: M96N9FKye = 1755 + INTEGER(IntKi), PARAMETER :: M97N1FKye = 1756 + INTEGER(IntKi), PARAMETER :: M97N2FKye = 1757 + INTEGER(IntKi), PARAMETER :: M97N3FKye = 1758 + INTEGER(IntKi), PARAMETER :: M97N4FKye = 1759 + INTEGER(IntKi), PARAMETER :: M97N5FKye = 1760 + INTEGER(IntKi), PARAMETER :: M97N6FKye = 1761 + INTEGER(IntKi), PARAMETER :: M97N7FKye = 1762 + INTEGER(IntKi), PARAMETER :: M97N8FKye = 1763 + INTEGER(IntKi), PARAMETER :: M97N9FKye = 1764 + INTEGER(IntKi), PARAMETER :: M98N1FKye = 1765 + INTEGER(IntKi), PARAMETER :: M98N2FKye = 1766 + INTEGER(IntKi), PARAMETER :: M98N3FKye = 1767 + INTEGER(IntKi), PARAMETER :: M98N4FKye = 1768 + INTEGER(IntKi), PARAMETER :: M98N5FKye = 1769 + INTEGER(IntKi), PARAMETER :: M98N6FKye = 1770 + INTEGER(IntKi), PARAMETER :: M98N7FKye = 1771 + INTEGER(IntKi), PARAMETER :: M98N8FKye = 1772 + INTEGER(IntKi), PARAMETER :: M98N9FKye = 1773 + INTEGER(IntKi), PARAMETER :: M99N1FKye = 1774 + INTEGER(IntKi), PARAMETER :: M99N2FKye = 1775 + INTEGER(IntKi), PARAMETER :: M99N3FKye = 1776 + INTEGER(IntKi), PARAMETER :: M99N4FKye = 1777 + INTEGER(IntKi), PARAMETER :: M99N5FKye = 1778 + INTEGER(IntKi), PARAMETER :: M99N6FKye = 1779 + INTEGER(IntKi), PARAMETER :: M99N7FKye = 1780 + INTEGER(IntKi), PARAMETER :: M99N8FKye = 1781 + INTEGER(IntKi), PARAMETER :: M99N9FKye = 1782 + INTEGER(IntKi), PARAMETER :: M01N1FKze = 1783 + INTEGER(IntKi), PARAMETER :: M01N2FKze = 1784 + INTEGER(IntKi), PARAMETER :: M01N3FKze = 1785 + INTEGER(IntKi), PARAMETER :: M01N4FKze = 1786 + INTEGER(IntKi), PARAMETER :: M01N5FKze = 1787 + INTEGER(IntKi), PARAMETER :: M01N6FKze = 1788 + INTEGER(IntKi), PARAMETER :: M01N7FKze = 1789 + INTEGER(IntKi), PARAMETER :: M01N8FKze = 1790 + INTEGER(IntKi), PARAMETER :: M01N9FKze = 1791 + INTEGER(IntKi), PARAMETER :: M02N1FKze = 1792 + INTEGER(IntKi), PARAMETER :: M02N2FKze = 1793 + INTEGER(IntKi), PARAMETER :: M02N3FKze = 1794 + INTEGER(IntKi), PARAMETER :: M02N4FKze = 1795 + INTEGER(IntKi), PARAMETER :: M02N5FKze = 1796 + INTEGER(IntKi), PARAMETER :: M02N6FKze = 1797 + INTEGER(IntKi), PARAMETER :: M02N7FKze = 1798 + INTEGER(IntKi), PARAMETER :: M02N8FKze = 1799 + INTEGER(IntKi), PARAMETER :: M02N9FKze = 1800 + INTEGER(IntKi), PARAMETER :: M03N1FKze = 1801 + INTEGER(IntKi), PARAMETER :: M03N2FKze = 1802 + INTEGER(IntKi), PARAMETER :: M03N3FKze = 1803 + INTEGER(IntKi), PARAMETER :: M03N4FKze = 1804 + INTEGER(IntKi), PARAMETER :: M03N5FKze = 1805 + INTEGER(IntKi), PARAMETER :: M03N6FKze = 1806 + INTEGER(IntKi), PARAMETER :: M03N7FKze = 1807 + INTEGER(IntKi), PARAMETER :: M03N8FKze = 1808 + INTEGER(IntKi), PARAMETER :: M03N9FKze = 1809 + INTEGER(IntKi), PARAMETER :: M04N1FKze = 1810 + INTEGER(IntKi), PARAMETER :: M04N2FKze = 1811 + INTEGER(IntKi), PARAMETER :: M04N3FKze = 1812 + INTEGER(IntKi), PARAMETER :: M04N4FKze = 1813 + INTEGER(IntKi), PARAMETER :: M04N5FKze = 1814 + INTEGER(IntKi), PARAMETER :: M04N6FKze = 1815 + INTEGER(IntKi), PARAMETER :: M04N7FKze = 1816 + INTEGER(IntKi), PARAMETER :: M04N8FKze = 1817 + INTEGER(IntKi), PARAMETER :: M04N9FKze = 1818 + INTEGER(IntKi), PARAMETER :: M05N1FKze = 1819 + INTEGER(IntKi), PARAMETER :: M05N2FKze = 1820 + INTEGER(IntKi), PARAMETER :: M05N3FKze = 1821 + INTEGER(IntKi), PARAMETER :: M05N4FKze = 1822 + INTEGER(IntKi), PARAMETER :: M05N5FKze = 1823 + INTEGER(IntKi), PARAMETER :: M05N6FKze = 1824 + INTEGER(IntKi), PARAMETER :: M05N7FKze = 1825 + INTEGER(IntKi), PARAMETER :: M05N8FKze = 1826 + INTEGER(IntKi), PARAMETER :: M05N9FKze = 1827 + INTEGER(IntKi), PARAMETER :: M06N1FKze = 1828 + INTEGER(IntKi), PARAMETER :: M06N2FKze = 1829 + INTEGER(IntKi), PARAMETER :: M06N3FKze = 1830 + INTEGER(IntKi), PARAMETER :: M06N4FKze = 1831 + INTEGER(IntKi), PARAMETER :: M06N5FKze = 1832 + INTEGER(IntKi), PARAMETER :: M06N6FKze = 1833 + INTEGER(IntKi), PARAMETER :: M06N7FKze = 1834 + INTEGER(IntKi), PARAMETER :: M06N8FKze = 1835 + INTEGER(IntKi), PARAMETER :: M06N9FKze = 1836 + INTEGER(IntKi), PARAMETER :: M07N1FKze = 1837 + INTEGER(IntKi), PARAMETER :: M07N2FKze = 1838 + INTEGER(IntKi), PARAMETER :: M07N3FKze = 1839 + INTEGER(IntKi), PARAMETER :: M07N4FKze = 1840 + INTEGER(IntKi), PARAMETER :: M07N5FKze = 1841 + INTEGER(IntKi), PARAMETER :: M07N6FKze = 1842 + INTEGER(IntKi), PARAMETER :: M07N7FKze = 1843 + INTEGER(IntKi), PARAMETER :: M07N8FKze = 1844 + INTEGER(IntKi), PARAMETER :: M07N9FKze = 1845 + INTEGER(IntKi), PARAMETER :: M08N1FKze = 1846 + INTEGER(IntKi), PARAMETER :: M08N2FKze = 1847 + INTEGER(IntKi), PARAMETER :: M08N3FKze = 1848 + INTEGER(IntKi), PARAMETER :: M08N4FKze = 1849 + INTEGER(IntKi), PARAMETER :: M08N5FKze = 1850 + INTEGER(IntKi), PARAMETER :: M08N6FKze = 1851 + INTEGER(IntKi), PARAMETER :: M08N7FKze = 1852 + INTEGER(IntKi), PARAMETER :: M08N8FKze = 1853 + INTEGER(IntKi), PARAMETER :: M08N9FKze = 1854 + INTEGER(IntKi), PARAMETER :: M09N1FKze = 1855 + INTEGER(IntKi), PARAMETER :: M09N2FKze = 1856 + INTEGER(IntKi), PARAMETER :: M09N3FKze = 1857 + INTEGER(IntKi), PARAMETER :: M09N4FKze = 1858 + INTEGER(IntKi), PARAMETER :: M09N5FKze = 1859 + INTEGER(IntKi), PARAMETER :: M09N6FKze = 1860 + INTEGER(IntKi), PARAMETER :: M09N7FKze = 1861 + INTEGER(IntKi), PARAMETER :: M09N8FKze = 1862 + INTEGER(IntKi), PARAMETER :: M09N9FKze = 1863 + INTEGER(IntKi), PARAMETER :: M10N1FKze = 1864 + INTEGER(IntKi), PARAMETER :: M10N2FKze = 1865 + INTEGER(IntKi), PARAMETER :: M10N3FKze = 1866 + INTEGER(IntKi), PARAMETER :: M10N4FKze = 1867 + INTEGER(IntKi), PARAMETER :: M10N5FKze = 1868 + INTEGER(IntKi), PARAMETER :: M10N6FKze = 1869 + INTEGER(IntKi), PARAMETER :: M10N7FKze = 1870 + INTEGER(IntKi), PARAMETER :: M10N8FKze = 1871 + INTEGER(IntKi), PARAMETER :: M10N9FKze = 1872 + INTEGER(IntKi), PARAMETER :: M11N1FKze = 1873 + INTEGER(IntKi), PARAMETER :: M11N2FKze = 1874 + INTEGER(IntKi), PARAMETER :: M11N3FKze = 1875 + INTEGER(IntKi), PARAMETER :: M11N4FKze = 1876 + INTEGER(IntKi), PARAMETER :: M11N5FKze = 1877 + INTEGER(IntKi), PARAMETER :: M11N6FKze = 1878 + INTEGER(IntKi), PARAMETER :: M11N7FKze = 1879 + INTEGER(IntKi), PARAMETER :: M11N8FKze = 1880 + INTEGER(IntKi), PARAMETER :: M11N9FKze = 1881 + INTEGER(IntKi), PARAMETER :: M12N1FKze = 1882 + INTEGER(IntKi), PARAMETER :: M12N2FKze = 1883 + INTEGER(IntKi), PARAMETER :: M12N3FKze = 1884 + INTEGER(IntKi), PARAMETER :: M12N4FKze = 1885 + INTEGER(IntKi), PARAMETER :: M12N5FKze = 1886 + INTEGER(IntKi), PARAMETER :: M12N6FKze = 1887 + INTEGER(IntKi), PARAMETER :: M12N7FKze = 1888 + INTEGER(IntKi), PARAMETER :: M12N8FKze = 1889 + INTEGER(IntKi), PARAMETER :: M12N9FKze = 1890 + INTEGER(IntKi), PARAMETER :: M13N1FKze = 1891 + INTEGER(IntKi), PARAMETER :: M13N2FKze = 1892 + INTEGER(IntKi), PARAMETER :: M13N3FKze = 1893 + INTEGER(IntKi), PARAMETER :: M13N4FKze = 1894 + INTEGER(IntKi), PARAMETER :: M13N5FKze = 1895 + INTEGER(IntKi), PARAMETER :: M13N6FKze = 1896 + INTEGER(IntKi), PARAMETER :: M13N7FKze = 1897 + INTEGER(IntKi), PARAMETER :: M13N8FKze = 1898 + INTEGER(IntKi), PARAMETER :: M13N9FKze = 1899 + INTEGER(IntKi), PARAMETER :: M14N1FKze = 1900 + INTEGER(IntKi), PARAMETER :: M14N2FKze = 1901 + INTEGER(IntKi), PARAMETER :: M14N3FKze = 1902 + INTEGER(IntKi), PARAMETER :: M14N4FKze = 1903 + INTEGER(IntKi), PARAMETER :: M14N5FKze = 1904 + INTEGER(IntKi), PARAMETER :: M14N6FKze = 1905 + INTEGER(IntKi), PARAMETER :: M14N7FKze = 1906 + INTEGER(IntKi), PARAMETER :: M14N8FKze = 1907 + INTEGER(IntKi), PARAMETER :: M14N9FKze = 1908 + INTEGER(IntKi), PARAMETER :: M15N1FKze = 1909 + INTEGER(IntKi), PARAMETER :: M15N2FKze = 1910 + INTEGER(IntKi), PARAMETER :: M15N3FKze = 1911 + INTEGER(IntKi), PARAMETER :: M15N4FKze = 1912 + INTEGER(IntKi), PARAMETER :: M15N5FKze = 1913 + INTEGER(IntKi), PARAMETER :: M15N6FKze = 1914 + INTEGER(IntKi), PARAMETER :: M15N7FKze = 1915 + INTEGER(IntKi), PARAMETER :: M15N8FKze = 1916 + INTEGER(IntKi), PARAMETER :: M15N9FKze = 1917 + INTEGER(IntKi), PARAMETER :: M16N1FKze = 1918 + INTEGER(IntKi), PARAMETER :: M16N2FKze = 1919 + INTEGER(IntKi), PARAMETER :: M16N3FKze = 1920 + INTEGER(IntKi), PARAMETER :: M16N4FKze = 1921 + INTEGER(IntKi), PARAMETER :: M16N5FKze = 1922 + INTEGER(IntKi), PARAMETER :: M16N6FKze = 1923 + INTEGER(IntKi), PARAMETER :: M16N7FKze = 1924 + INTEGER(IntKi), PARAMETER :: M16N8FKze = 1925 + INTEGER(IntKi), PARAMETER :: M16N9FKze = 1926 + INTEGER(IntKi), PARAMETER :: M17N1FKze = 1927 + INTEGER(IntKi), PARAMETER :: M17N2FKze = 1928 + INTEGER(IntKi), PARAMETER :: M17N3FKze = 1929 + INTEGER(IntKi), PARAMETER :: M17N4FKze = 1930 + INTEGER(IntKi), PARAMETER :: M17N5FKze = 1931 + INTEGER(IntKi), PARAMETER :: M17N6FKze = 1932 + INTEGER(IntKi), PARAMETER :: M17N7FKze = 1933 + INTEGER(IntKi), PARAMETER :: M17N8FKze = 1934 + INTEGER(IntKi), PARAMETER :: M17N9FKze = 1935 + INTEGER(IntKi), PARAMETER :: M18N1FKze = 1936 + INTEGER(IntKi), PARAMETER :: M18N2FKze = 1937 + INTEGER(IntKi), PARAMETER :: M18N3FKze = 1938 + INTEGER(IntKi), PARAMETER :: M18N4FKze = 1939 + INTEGER(IntKi), PARAMETER :: M18N5FKze = 1940 + INTEGER(IntKi), PARAMETER :: M18N6FKze = 1941 + INTEGER(IntKi), PARAMETER :: M18N7FKze = 1942 + INTEGER(IntKi), PARAMETER :: M18N8FKze = 1943 + INTEGER(IntKi), PARAMETER :: M18N9FKze = 1944 + INTEGER(IntKi), PARAMETER :: M19N1FKze = 1945 + INTEGER(IntKi), PARAMETER :: M19N2FKze = 1946 + INTEGER(IntKi), PARAMETER :: M19N3FKze = 1947 + INTEGER(IntKi), PARAMETER :: M19N4FKze = 1948 + INTEGER(IntKi), PARAMETER :: M19N5FKze = 1949 + INTEGER(IntKi), PARAMETER :: M19N6FKze = 1950 + INTEGER(IntKi), PARAMETER :: M19N7FKze = 1951 + INTEGER(IntKi), PARAMETER :: M19N8FKze = 1952 + INTEGER(IntKi), PARAMETER :: M19N9FKze = 1953 + INTEGER(IntKi), PARAMETER :: M20N1FKze = 1954 + INTEGER(IntKi), PARAMETER :: M20N2FKze = 1955 + INTEGER(IntKi), PARAMETER :: M20N3FKze = 1956 + INTEGER(IntKi), PARAMETER :: M20N4FKze = 1957 + INTEGER(IntKi), PARAMETER :: M20N5FKze = 1958 + INTEGER(IntKi), PARAMETER :: M20N6FKze = 1959 + INTEGER(IntKi), PARAMETER :: M20N7FKze = 1960 + INTEGER(IntKi), PARAMETER :: M20N8FKze = 1961 + INTEGER(IntKi), PARAMETER :: M20N9FKze = 1962 + INTEGER(IntKi), PARAMETER :: M21N1FKze = 1963 + INTEGER(IntKi), PARAMETER :: M21N2FKze = 1964 + INTEGER(IntKi), PARAMETER :: M21N3FKze = 1965 + INTEGER(IntKi), PARAMETER :: M21N4FKze = 1966 + INTEGER(IntKi), PARAMETER :: M21N5FKze = 1967 + INTEGER(IntKi), PARAMETER :: M21N6FKze = 1968 + INTEGER(IntKi), PARAMETER :: M21N7FKze = 1969 + INTEGER(IntKi), PARAMETER :: M21N8FKze = 1970 + INTEGER(IntKi), PARAMETER :: M21N9FKze = 1971 + INTEGER(IntKi), PARAMETER :: M22N1FKze = 1972 + INTEGER(IntKi), PARAMETER :: M22N2FKze = 1973 + INTEGER(IntKi), PARAMETER :: M22N3FKze = 1974 + INTEGER(IntKi), PARAMETER :: M22N4FKze = 1975 + INTEGER(IntKi), PARAMETER :: M22N5FKze = 1976 + INTEGER(IntKi), PARAMETER :: M22N6FKze = 1977 + INTEGER(IntKi), PARAMETER :: M22N7FKze = 1978 + INTEGER(IntKi), PARAMETER :: M22N8FKze = 1979 + INTEGER(IntKi), PARAMETER :: M22N9FKze = 1980 + INTEGER(IntKi), PARAMETER :: M23N1FKze = 1981 + INTEGER(IntKi), PARAMETER :: M23N2FKze = 1982 + INTEGER(IntKi), PARAMETER :: M23N3FKze = 1983 + INTEGER(IntKi), PARAMETER :: M23N4FKze = 1984 + INTEGER(IntKi), PARAMETER :: M23N5FKze = 1985 + INTEGER(IntKi), PARAMETER :: M23N6FKze = 1986 + INTEGER(IntKi), PARAMETER :: M23N7FKze = 1987 + INTEGER(IntKi), PARAMETER :: M23N8FKze = 1988 + INTEGER(IntKi), PARAMETER :: M23N9FKze = 1989 + INTEGER(IntKi), PARAMETER :: M24N1FKze = 1990 + INTEGER(IntKi), PARAMETER :: M24N2FKze = 1991 + INTEGER(IntKi), PARAMETER :: M24N3FKze = 1992 + INTEGER(IntKi), PARAMETER :: M24N4FKze = 1993 + INTEGER(IntKi), PARAMETER :: M24N5FKze = 1994 + INTEGER(IntKi), PARAMETER :: M24N6FKze = 1995 + INTEGER(IntKi), PARAMETER :: M24N7FKze = 1996 + INTEGER(IntKi), PARAMETER :: M24N8FKze = 1997 + INTEGER(IntKi), PARAMETER :: M24N9FKze = 1998 + INTEGER(IntKi), PARAMETER :: M25N1FKze = 1999 + INTEGER(IntKi), PARAMETER :: M25N2FKze = 2000 + INTEGER(IntKi), PARAMETER :: M25N3FKze = 2001 + INTEGER(IntKi), PARAMETER :: M25N4FKze = 2002 + INTEGER(IntKi), PARAMETER :: M25N5FKze = 2003 + INTEGER(IntKi), PARAMETER :: M25N6FKze = 2004 + INTEGER(IntKi), PARAMETER :: M25N7FKze = 2005 + INTEGER(IntKi), PARAMETER :: M25N8FKze = 2006 + INTEGER(IntKi), PARAMETER :: M25N9FKze = 2007 + INTEGER(IntKi), PARAMETER :: M26N1FKze = 2008 + INTEGER(IntKi), PARAMETER :: M26N2FKze = 2009 + INTEGER(IntKi), PARAMETER :: M26N3FKze = 2010 + INTEGER(IntKi), PARAMETER :: M26N4FKze = 2011 + INTEGER(IntKi), PARAMETER :: M26N5FKze = 2012 + INTEGER(IntKi), PARAMETER :: M26N6FKze = 2013 + INTEGER(IntKi), PARAMETER :: M26N7FKze = 2014 + INTEGER(IntKi), PARAMETER :: M26N8FKze = 2015 + INTEGER(IntKi), PARAMETER :: M26N9FKze = 2016 + INTEGER(IntKi), PARAMETER :: M27N1FKze = 2017 + INTEGER(IntKi), PARAMETER :: M27N2FKze = 2018 + INTEGER(IntKi), PARAMETER :: M27N3FKze = 2019 + INTEGER(IntKi), PARAMETER :: M27N4FKze = 2020 + INTEGER(IntKi), PARAMETER :: M27N5FKze = 2021 + INTEGER(IntKi), PARAMETER :: M27N6FKze = 2022 + INTEGER(IntKi), PARAMETER :: M27N7FKze = 2023 + INTEGER(IntKi), PARAMETER :: M27N8FKze = 2024 + INTEGER(IntKi), PARAMETER :: M27N9FKze = 2025 + INTEGER(IntKi), PARAMETER :: M28N1FKze = 2026 + INTEGER(IntKi), PARAMETER :: M28N2FKze = 2027 + INTEGER(IntKi), PARAMETER :: M28N3FKze = 2028 + INTEGER(IntKi), PARAMETER :: M28N4FKze = 2029 + INTEGER(IntKi), PARAMETER :: M28N5FKze = 2030 + INTEGER(IntKi), PARAMETER :: M28N6FKze = 2031 + INTEGER(IntKi), PARAMETER :: M28N7FKze = 2032 + INTEGER(IntKi), PARAMETER :: M28N8FKze = 2033 + INTEGER(IntKi), PARAMETER :: M28N9FKze = 2034 + INTEGER(IntKi), PARAMETER :: M29N1FKze = 2035 + INTEGER(IntKi), PARAMETER :: M29N2FKze = 2036 + INTEGER(IntKi), PARAMETER :: M29N3FKze = 2037 + INTEGER(IntKi), PARAMETER :: M29N4FKze = 2038 + INTEGER(IntKi), PARAMETER :: M29N5FKze = 2039 + INTEGER(IntKi), PARAMETER :: M29N6FKze = 2040 + INTEGER(IntKi), PARAMETER :: M29N7FKze = 2041 + INTEGER(IntKi), PARAMETER :: M29N8FKze = 2042 + INTEGER(IntKi), PARAMETER :: M29N9FKze = 2043 + INTEGER(IntKi), PARAMETER :: M30N1FKze = 2044 + INTEGER(IntKi), PARAMETER :: M30N2FKze = 2045 + INTEGER(IntKi), PARAMETER :: M30N3FKze = 2046 + INTEGER(IntKi), PARAMETER :: M30N4FKze = 2047 + INTEGER(IntKi), PARAMETER :: M30N5FKze = 2048 + INTEGER(IntKi), PARAMETER :: M30N6FKze = 2049 + INTEGER(IntKi), PARAMETER :: M30N7FKze = 2050 + INTEGER(IntKi), PARAMETER :: M30N8FKze = 2051 + INTEGER(IntKi), PARAMETER :: M30N9FKze = 2052 + INTEGER(IntKi), PARAMETER :: M31N1FKze = 2053 + INTEGER(IntKi), PARAMETER :: M31N2FKze = 2054 + INTEGER(IntKi), PARAMETER :: M31N3FKze = 2055 + INTEGER(IntKi), PARAMETER :: M31N4FKze = 2056 + INTEGER(IntKi), PARAMETER :: M31N5FKze = 2057 + INTEGER(IntKi), PARAMETER :: M31N6FKze = 2058 + INTEGER(IntKi), PARAMETER :: M31N7FKze = 2059 + INTEGER(IntKi), PARAMETER :: M31N8FKze = 2060 + INTEGER(IntKi), PARAMETER :: M31N9FKze = 2061 + INTEGER(IntKi), PARAMETER :: M32N1FKze = 2062 + INTEGER(IntKi), PARAMETER :: M32N2FKze = 2063 + INTEGER(IntKi), PARAMETER :: M32N3FKze = 2064 + INTEGER(IntKi), PARAMETER :: M32N4FKze = 2065 + INTEGER(IntKi), PARAMETER :: M32N5FKze = 2066 + INTEGER(IntKi), PARAMETER :: M32N6FKze = 2067 + INTEGER(IntKi), PARAMETER :: M32N7FKze = 2068 + INTEGER(IntKi), PARAMETER :: M32N8FKze = 2069 + INTEGER(IntKi), PARAMETER :: M32N9FKze = 2070 + INTEGER(IntKi), PARAMETER :: M33N1FKze = 2071 + INTEGER(IntKi), PARAMETER :: M33N2FKze = 2072 + INTEGER(IntKi), PARAMETER :: M33N3FKze = 2073 + INTEGER(IntKi), PARAMETER :: M33N4FKze = 2074 + INTEGER(IntKi), PARAMETER :: M33N5FKze = 2075 + INTEGER(IntKi), PARAMETER :: M33N6FKze = 2076 + INTEGER(IntKi), PARAMETER :: M33N7FKze = 2077 + INTEGER(IntKi), PARAMETER :: M33N8FKze = 2078 + INTEGER(IntKi), PARAMETER :: M33N9FKze = 2079 + INTEGER(IntKi), PARAMETER :: M34N1FKze = 2080 + INTEGER(IntKi), PARAMETER :: M34N2FKze = 2081 + INTEGER(IntKi), PARAMETER :: M34N3FKze = 2082 + INTEGER(IntKi), PARAMETER :: M34N4FKze = 2083 + INTEGER(IntKi), PARAMETER :: M34N5FKze = 2084 + INTEGER(IntKi), PARAMETER :: M34N6FKze = 2085 + INTEGER(IntKi), PARAMETER :: M34N7FKze = 2086 + INTEGER(IntKi), PARAMETER :: M34N8FKze = 2087 + INTEGER(IntKi), PARAMETER :: M34N9FKze = 2088 + INTEGER(IntKi), PARAMETER :: M35N1FKze = 2089 + INTEGER(IntKi), PARAMETER :: M35N2FKze = 2090 + INTEGER(IntKi), PARAMETER :: M35N3FKze = 2091 + INTEGER(IntKi), PARAMETER :: M35N4FKze = 2092 + INTEGER(IntKi), PARAMETER :: M35N5FKze = 2093 + INTEGER(IntKi), PARAMETER :: M35N6FKze = 2094 + INTEGER(IntKi), PARAMETER :: M35N7FKze = 2095 + INTEGER(IntKi), PARAMETER :: M35N8FKze = 2096 + INTEGER(IntKi), PARAMETER :: M35N9FKze = 2097 + INTEGER(IntKi), PARAMETER :: M36N1FKze = 2098 + INTEGER(IntKi), PARAMETER :: M36N2FKze = 2099 + INTEGER(IntKi), PARAMETER :: M36N3FKze = 2100 + INTEGER(IntKi), PARAMETER :: M36N4FKze = 2101 + INTEGER(IntKi), PARAMETER :: M36N5FKze = 2102 + INTEGER(IntKi), PARAMETER :: M36N6FKze = 2103 + INTEGER(IntKi), PARAMETER :: M36N7FKze = 2104 + INTEGER(IntKi), PARAMETER :: M36N8FKze = 2105 + INTEGER(IntKi), PARAMETER :: M36N9FKze = 2106 + INTEGER(IntKi), PARAMETER :: M37N1FKze = 2107 + INTEGER(IntKi), PARAMETER :: M37N2FKze = 2108 + INTEGER(IntKi), PARAMETER :: M37N3FKze = 2109 + INTEGER(IntKi), PARAMETER :: M37N4FKze = 2110 + INTEGER(IntKi), PARAMETER :: M37N5FKze = 2111 + INTEGER(IntKi), PARAMETER :: M37N6FKze = 2112 + INTEGER(IntKi), PARAMETER :: M37N7FKze = 2113 + INTEGER(IntKi), PARAMETER :: M37N8FKze = 2114 + INTEGER(IntKi), PARAMETER :: M37N9FKze = 2115 + INTEGER(IntKi), PARAMETER :: M38N1FKze = 2116 + INTEGER(IntKi), PARAMETER :: M38N2FKze = 2117 + INTEGER(IntKi), PARAMETER :: M38N3FKze = 2118 + INTEGER(IntKi), PARAMETER :: M38N4FKze = 2119 + INTEGER(IntKi), PARAMETER :: M38N5FKze = 2120 + INTEGER(IntKi), PARAMETER :: M38N6FKze = 2121 + INTEGER(IntKi), PARAMETER :: M38N7FKze = 2122 + INTEGER(IntKi), PARAMETER :: M38N8FKze = 2123 + INTEGER(IntKi), PARAMETER :: M38N9FKze = 2124 + INTEGER(IntKi), PARAMETER :: M39N1FKze = 2125 + INTEGER(IntKi), PARAMETER :: M39N2FKze = 2126 + INTEGER(IntKi), PARAMETER :: M39N3FKze = 2127 + INTEGER(IntKi), PARAMETER :: M39N4FKze = 2128 + INTEGER(IntKi), PARAMETER :: M39N5FKze = 2129 + INTEGER(IntKi), PARAMETER :: M39N6FKze = 2130 + INTEGER(IntKi), PARAMETER :: M39N7FKze = 2131 + INTEGER(IntKi), PARAMETER :: M39N8FKze = 2132 + INTEGER(IntKi), PARAMETER :: M39N9FKze = 2133 + INTEGER(IntKi), PARAMETER :: M40N1FKze = 2134 + INTEGER(IntKi), PARAMETER :: M40N2FKze = 2135 + INTEGER(IntKi), PARAMETER :: M40N3FKze = 2136 + INTEGER(IntKi), PARAMETER :: M40N4FKze = 2137 + INTEGER(IntKi), PARAMETER :: M40N5FKze = 2138 + INTEGER(IntKi), PARAMETER :: M40N6FKze = 2139 + INTEGER(IntKi), PARAMETER :: M40N7FKze = 2140 + INTEGER(IntKi), PARAMETER :: M40N8FKze = 2141 + INTEGER(IntKi), PARAMETER :: M40N9FKze = 2142 + INTEGER(IntKi), PARAMETER :: M41N1FKze = 2143 + INTEGER(IntKi), PARAMETER :: M41N2FKze = 2144 + INTEGER(IntKi), PARAMETER :: M41N3FKze = 2145 + INTEGER(IntKi), PARAMETER :: M41N4FKze = 2146 + INTEGER(IntKi), PARAMETER :: M41N5FKze = 2147 + INTEGER(IntKi), PARAMETER :: M41N6FKze = 2148 + INTEGER(IntKi), PARAMETER :: M41N7FKze = 2149 + INTEGER(IntKi), PARAMETER :: M41N8FKze = 2150 + INTEGER(IntKi), PARAMETER :: M41N9FKze = 2151 + INTEGER(IntKi), PARAMETER :: M42N1FKze = 2152 + INTEGER(IntKi), PARAMETER :: M42N2FKze = 2153 + INTEGER(IntKi), PARAMETER :: M42N3FKze = 2154 + INTEGER(IntKi), PARAMETER :: M42N4FKze = 2155 + INTEGER(IntKi), PARAMETER :: M42N5FKze = 2156 + INTEGER(IntKi), PARAMETER :: M42N6FKze = 2157 + INTEGER(IntKi), PARAMETER :: M42N7FKze = 2158 + INTEGER(IntKi), PARAMETER :: M42N8FKze = 2159 + INTEGER(IntKi), PARAMETER :: M42N9FKze = 2160 + INTEGER(IntKi), PARAMETER :: M43N1FKze = 2161 + INTEGER(IntKi), PARAMETER :: M43N2FKze = 2162 + INTEGER(IntKi), PARAMETER :: M43N3FKze = 2163 + INTEGER(IntKi), PARAMETER :: M43N4FKze = 2164 + INTEGER(IntKi), PARAMETER :: M43N5FKze = 2165 + INTEGER(IntKi), PARAMETER :: M43N6FKze = 2166 + INTEGER(IntKi), PARAMETER :: M43N7FKze = 2167 + INTEGER(IntKi), PARAMETER :: M43N8FKze = 2168 + INTEGER(IntKi), PARAMETER :: M43N9FKze = 2169 + INTEGER(IntKi), PARAMETER :: M44N1FKze = 2170 + INTEGER(IntKi), PARAMETER :: M44N2FKze = 2171 + INTEGER(IntKi), PARAMETER :: M44N3FKze = 2172 + INTEGER(IntKi), PARAMETER :: M44N4FKze = 2173 + INTEGER(IntKi), PARAMETER :: M44N5FKze = 2174 + INTEGER(IntKi), PARAMETER :: M44N6FKze = 2175 + INTEGER(IntKi), PARAMETER :: M44N7FKze = 2176 + INTEGER(IntKi), PARAMETER :: M44N8FKze = 2177 + INTEGER(IntKi), PARAMETER :: M44N9FKze = 2178 + INTEGER(IntKi), PARAMETER :: M45N1FKze = 2179 + INTEGER(IntKi), PARAMETER :: M45N2FKze = 2180 + INTEGER(IntKi), PARAMETER :: M45N3FKze = 2181 + INTEGER(IntKi), PARAMETER :: M45N4FKze = 2182 + INTEGER(IntKi), PARAMETER :: M45N5FKze = 2183 + INTEGER(IntKi), PARAMETER :: M45N6FKze = 2184 + INTEGER(IntKi), PARAMETER :: M45N7FKze = 2185 + INTEGER(IntKi), PARAMETER :: M45N8FKze = 2186 + INTEGER(IntKi), PARAMETER :: M45N9FKze = 2187 + INTEGER(IntKi), PARAMETER :: M46N1FKze = 2188 + INTEGER(IntKi), PARAMETER :: M46N2FKze = 2189 + INTEGER(IntKi), PARAMETER :: M46N3FKze = 2190 + INTEGER(IntKi), PARAMETER :: M46N4FKze = 2191 + INTEGER(IntKi), PARAMETER :: M46N5FKze = 2192 + INTEGER(IntKi), PARAMETER :: M46N6FKze = 2193 + INTEGER(IntKi), PARAMETER :: M46N7FKze = 2194 + INTEGER(IntKi), PARAMETER :: M46N8FKze = 2195 + INTEGER(IntKi), PARAMETER :: M46N9FKze = 2196 + INTEGER(IntKi), PARAMETER :: M47N1FKze = 2197 + INTEGER(IntKi), PARAMETER :: M47N2FKze = 2198 + INTEGER(IntKi), PARAMETER :: M47N3FKze = 2199 + INTEGER(IntKi), PARAMETER :: M47N4FKze = 2200 + INTEGER(IntKi), PARAMETER :: M47N5FKze = 2201 + INTEGER(IntKi), PARAMETER :: M47N6FKze = 2202 + INTEGER(IntKi), PARAMETER :: M47N7FKze = 2203 + INTEGER(IntKi), PARAMETER :: M47N8FKze = 2204 + INTEGER(IntKi), PARAMETER :: M47N9FKze = 2205 + INTEGER(IntKi), PARAMETER :: M48N1FKze = 2206 + INTEGER(IntKi), PARAMETER :: M48N2FKze = 2207 + INTEGER(IntKi), PARAMETER :: M48N3FKze = 2208 + INTEGER(IntKi), PARAMETER :: M48N4FKze = 2209 + INTEGER(IntKi), PARAMETER :: M48N5FKze = 2210 + INTEGER(IntKi), PARAMETER :: M48N6FKze = 2211 + INTEGER(IntKi), PARAMETER :: M48N7FKze = 2212 + INTEGER(IntKi), PARAMETER :: M48N8FKze = 2213 + INTEGER(IntKi), PARAMETER :: M48N9FKze = 2214 + INTEGER(IntKi), PARAMETER :: M49N1FKze = 2215 + INTEGER(IntKi), PARAMETER :: M49N2FKze = 2216 + INTEGER(IntKi), PARAMETER :: M49N3FKze = 2217 + INTEGER(IntKi), PARAMETER :: M49N4FKze = 2218 + INTEGER(IntKi), PARAMETER :: M49N5FKze = 2219 + INTEGER(IntKi), PARAMETER :: M49N6FKze = 2220 + INTEGER(IntKi), PARAMETER :: M49N7FKze = 2221 + INTEGER(IntKi), PARAMETER :: M49N8FKze = 2222 + INTEGER(IntKi), PARAMETER :: M49N9FKze = 2223 + INTEGER(IntKi), PARAMETER :: M50N1FKze = 2224 + INTEGER(IntKi), PARAMETER :: M50N2FKze = 2225 + INTEGER(IntKi), PARAMETER :: M50N3FKze = 2226 + INTEGER(IntKi), PARAMETER :: M50N4FKze = 2227 + INTEGER(IntKi), PARAMETER :: M50N5FKze = 2228 + INTEGER(IntKi), PARAMETER :: M50N6FKze = 2229 + INTEGER(IntKi), PARAMETER :: M50N7FKze = 2230 + INTEGER(IntKi), PARAMETER :: M50N8FKze = 2231 + INTEGER(IntKi), PARAMETER :: M50N9FKze = 2232 + INTEGER(IntKi), PARAMETER :: M51N1FKze = 2233 + INTEGER(IntKi), PARAMETER :: M51N2FKze = 2234 + INTEGER(IntKi), PARAMETER :: M51N3FKze = 2235 + INTEGER(IntKi), PARAMETER :: M51N4FKze = 2236 + INTEGER(IntKi), PARAMETER :: M51N5FKze = 2237 + INTEGER(IntKi), PARAMETER :: M51N6FKze = 2238 + INTEGER(IntKi), PARAMETER :: M51N7FKze = 2239 + INTEGER(IntKi), PARAMETER :: M51N8FKze = 2240 + INTEGER(IntKi), PARAMETER :: M51N9FKze = 2241 + INTEGER(IntKi), PARAMETER :: M52N1FKze = 2242 + INTEGER(IntKi), PARAMETER :: M52N2FKze = 2243 + INTEGER(IntKi), PARAMETER :: M52N3FKze = 2244 + INTEGER(IntKi), PARAMETER :: M52N4FKze = 2245 + INTEGER(IntKi), PARAMETER :: M52N5FKze = 2246 + INTEGER(IntKi), PARAMETER :: M52N6FKze = 2247 + INTEGER(IntKi), PARAMETER :: M52N7FKze = 2248 + INTEGER(IntKi), PARAMETER :: M52N8FKze = 2249 + INTEGER(IntKi), PARAMETER :: M52N9FKze = 2250 + INTEGER(IntKi), PARAMETER :: M53N1FKze = 2251 + INTEGER(IntKi), PARAMETER :: M53N2FKze = 2252 + INTEGER(IntKi), PARAMETER :: M53N3FKze = 2253 + INTEGER(IntKi), PARAMETER :: M53N4FKze = 2254 + INTEGER(IntKi), PARAMETER :: M53N5FKze = 2255 + INTEGER(IntKi), PARAMETER :: M53N6FKze = 2256 + INTEGER(IntKi), PARAMETER :: M53N7FKze = 2257 + INTEGER(IntKi), PARAMETER :: M53N8FKze = 2258 + INTEGER(IntKi), PARAMETER :: M53N9FKze = 2259 + INTEGER(IntKi), PARAMETER :: M54N1FKze = 2260 + INTEGER(IntKi), PARAMETER :: M54N2FKze = 2261 + INTEGER(IntKi), PARAMETER :: M54N3FKze = 2262 + INTEGER(IntKi), PARAMETER :: M54N4FKze = 2263 + INTEGER(IntKi), PARAMETER :: M54N5FKze = 2264 + INTEGER(IntKi), PARAMETER :: M54N6FKze = 2265 + INTEGER(IntKi), PARAMETER :: M54N7FKze = 2266 + INTEGER(IntKi), PARAMETER :: M54N8FKze = 2267 + INTEGER(IntKi), PARAMETER :: M54N9FKze = 2268 + INTEGER(IntKi), PARAMETER :: M55N1FKze = 2269 + INTEGER(IntKi), PARAMETER :: M55N2FKze = 2270 + INTEGER(IntKi), PARAMETER :: M55N3FKze = 2271 + INTEGER(IntKi), PARAMETER :: M55N4FKze = 2272 + INTEGER(IntKi), PARAMETER :: M55N5FKze = 2273 + INTEGER(IntKi), PARAMETER :: M55N6FKze = 2274 + INTEGER(IntKi), PARAMETER :: M55N7FKze = 2275 + INTEGER(IntKi), PARAMETER :: M55N8FKze = 2276 + INTEGER(IntKi), PARAMETER :: M55N9FKze = 2277 + INTEGER(IntKi), PARAMETER :: M56N1FKze = 2278 + INTEGER(IntKi), PARAMETER :: M56N2FKze = 2279 + INTEGER(IntKi), PARAMETER :: M56N3FKze = 2280 + INTEGER(IntKi), PARAMETER :: M56N4FKze = 2281 + INTEGER(IntKi), PARAMETER :: M56N5FKze = 2282 + INTEGER(IntKi), PARAMETER :: M56N6FKze = 2283 + INTEGER(IntKi), PARAMETER :: M56N7FKze = 2284 + INTEGER(IntKi), PARAMETER :: M56N8FKze = 2285 + INTEGER(IntKi), PARAMETER :: M56N9FKze = 2286 + INTEGER(IntKi), PARAMETER :: M57N1FKze = 2287 + INTEGER(IntKi), PARAMETER :: M57N2FKze = 2288 + INTEGER(IntKi), PARAMETER :: M57N3FKze = 2289 + INTEGER(IntKi), PARAMETER :: M57N4FKze = 2290 + INTEGER(IntKi), PARAMETER :: M57N5FKze = 2291 + INTEGER(IntKi), PARAMETER :: M57N6FKze = 2292 + INTEGER(IntKi), PARAMETER :: M57N7FKze = 2293 + INTEGER(IntKi), PARAMETER :: M57N8FKze = 2294 + INTEGER(IntKi), PARAMETER :: M57N9FKze = 2295 + INTEGER(IntKi), PARAMETER :: M58N1FKze = 2296 + INTEGER(IntKi), PARAMETER :: M58N2FKze = 2297 + INTEGER(IntKi), PARAMETER :: M58N3FKze = 2298 + INTEGER(IntKi), PARAMETER :: M58N4FKze = 2299 + INTEGER(IntKi), PARAMETER :: M58N5FKze = 2300 + INTEGER(IntKi), PARAMETER :: M58N6FKze = 2301 + INTEGER(IntKi), PARAMETER :: M58N7FKze = 2302 + INTEGER(IntKi), PARAMETER :: M58N8FKze = 2303 + INTEGER(IntKi), PARAMETER :: M58N9FKze = 2304 + INTEGER(IntKi), PARAMETER :: M59N1FKze = 2305 + INTEGER(IntKi), PARAMETER :: M59N2FKze = 2306 + INTEGER(IntKi), PARAMETER :: M59N3FKze = 2307 + INTEGER(IntKi), PARAMETER :: M59N4FKze = 2308 + INTEGER(IntKi), PARAMETER :: M59N5FKze = 2309 + INTEGER(IntKi), PARAMETER :: M59N6FKze = 2310 + INTEGER(IntKi), PARAMETER :: M59N7FKze = 2311 + INTEGER(IntKi), PARAMETER :: M59N8FKze = 2312 + INTEGER(IntKi), PARAMETER :: M59N9FKze = 2313 + INTEGER(IntKi), PARAMETER :: M60N1FKze = 2314 + INTEGER(IntKi), PARAMETER :: M60N2FKze = 2315 + INTEGER(IntKi), PARAMETER :: M60N3FKze = 2316 + INTEGER(IntKi), PARAMETER :: M60N4FKze = 2317 + INTEGER(IntKi), PARAMETER :: M60N5FKze = 2318 + INTEGER(IntKi), PARAMETER :: M60N6FKze = 2319 + INTEGER(IntKi), PARAMETER :: M60N7FKze = 2320 + INTEGER(IntKi), PARAMETER :: M60N8FKze = 2321 + INTEGER(IntKi), PARAMETER :: M60N9FKze = 2322 + INTEGER(IntKi), PARAMETER :: M61N1FKze = 2323 + INTEGER(IntKi), PARAMETER :: M61N2FKze = 2324 + INTEGER(IntKi), PARAMETER :: M61N3FKze = 2325 + INTEGER(IntKi), PARAMETER :: M61N4FKze = 2326 + INTEGER(IntKi), PARAMETER :: M61N5FKze = 2327 + INTEGER(IntKi), PARAMETER :: M61N6FKze = 2328 + INTEGER(IntKi), PARAMETER :: M61N7FKze = 2329 + INTEGER(IntKi), PARAMETER :: M61N8FKze = 2330 + INTEGER(IntKi), PARAMETER :: M61N9FKze = 2331 + INTEGER(IntKi), PARAMETER :: M62N1FKze = 2332 + INTEGER(IntKi), PARAMETER :: M62N2FKze = 2333 + INTEGER(IntKi), PARAMETER :: M62N3FKze = 2334 + INTEGER(IntKi), PARAMETER :: M62N4FKze = 2335 + INTEGER(IntKi), PARAMETER :: M62N5FKze = 2336 + INTEGER(IntKi), PARAMETER :: M62N6FKze = 2337 + INTEGER(IntKi), PARAMETER :: M62N7FKze = 2338 + INTEGER(IntKi), PARAMETER :: M62N8FKze = 2339 + INTEGER(IntKi), PARAMETER :: M62N9FKze = 2340 + INTEGER(IntKi), PARAMETER :: M63N1FKze = 2341 + INTEGER(IntKi), PARAMETER :: M63N2FKze = 2342 + INTEGER(IntKi), PARAMETER :: M63N3FKze = 2343 + INTEGER(IntKi), PARAMETER :: M63N4FKze = 2344 + INTEGER(IntKi), PARAMETER :: M63N5FKze = 2345 + INTEGER(IntKi), PARAMETER :: M63N6FKze = 2346 + INTEGER(IntKi), PARAMETER :: M63N7FKze = 2347 + INTEGER(IntKi), PARAMETER :: M63N8FKze = 2348 + INTEGER(IntKi), PARAMETER :: M63N9FKze = 2349 + INTEGER(IntKi), PARAMETER :: M64N1FKze = 2350 + INTEGER(IntKi), PARAMETER :: M64N2FKze = 2351 + INTEGER(IntKi), PARAMETER :: M64N3FKze = 2352 + INTEGER(IntKi), PARAMETER :: M64N4FKze = 2353 + INTEGER(IntKi), PARAMETER :: M64N5FKze = 2354 + INTEGER(IntKi), PARAMETER :: M64N6FKze = 2355 + INTEGER(IntKi), PARAMETER :: M64N7FKze = 2356 + INTEGER(IntKi), PARAMETER :: M64N8FKze = 2357 + INTEGER(IntKi), PARAMETER :: M64N9FKze = 2358 + INTEGER(IntKi), PARAMETER :: M65N1FKze = 2359 + INTEGER(IntKi), PARAMETER :: M65N2FKze = 2360 + INTEGER(IntKi), PARAMETER :: M65N3FKze = 2361 + INTEGER(IntKi), PARAMETER :: M65N4FKze = 2362 + INTEGER(IntKi), PARAMETER :: M65N5FKze = 2363 + INTEGER(IntKi), PARAMETER :: M65N6FKze = 2364 + INTEGER(IntKi), PARAMETER :: M65N7FKze = 2365 + INTEGER(IntKi), PARAMETER :: M65N8FKze = 2366 + INTEGER(IntKi), PARAMETER :: M65N9FKze = 2367 + INTEGER(IntKi), PARAMETER :: M66N1FKze = 2368 + INTEGER(IntKi), PARAMETER :: M66N2FKze = 2369 + INTEGER(IntKi), PARAMETER :: M66N3FKze = 2370 + INTEGER(IntKi), PARAMETER :: M66N4FKze = 2371 + INTEGER(IntKi), PARAMETER :: M66N5FKze = 2372 + INTEGER(IntKi), PARAMETER :: M66N6FKze = 2373 + INTEGER(IntKi), PARAMETER :: M66N7FKze = 2374 + INTEGER(IntKi), PARAMETER :: M66N8FKze = 2375 + INTEGER(IntKi), PARAMETER :: M66N9FKze = 2376 + INTEGER(IntKi), PARAMETER :: M67N1FKze = 2377 + INTEGER(IntKi), PARAMETER :: M67N2FKze = 2378 + INTEGER(IntKi), PARAMETER :: M67N3FKze = 2379 + INTEGER(IntKi), PARAMETER :: M67N4FKze = 2380 + INTEGER(IntKi), PARAMETER :: M67N5FKze = 2381 + INTEGER(IntKi), PARAMETER :: M67N6FKze = 2382 + INTEGER(IntKi), PARAMETER :: M67N7FKze = 2383 + INTEGER(IntKi), PARAMETER :: M67N8FKze = 2384 + INTEGER(IntKi), PARAMETER :: M67N9FKze = 2385 + INTEGER(IntKi), PARAMETER :: M68N1FKze = 2386 + INTEGER(IntKi), PARAMETER :: M68N2FKze = 2387 + INTEGER(IntKi), PARAMETER :: M68N3FKze = 2388 + INTEGER(IntKi), PARAMETER :: M68N4FKze = 2389 + INTEGER(IntKi), PARAMETER :: M68N5FKze = 2390 + INTEGER(IntKi), PARAMETER :: M68N6FKze = 2391 + INTEGER(IntKi), PARAMETER :: M68N7FKze = 2392 + INTEGER(IntKi), PARAMETER :: M68N8FKze = 2393 + INTEGER(IntKi), PARAMETER :: M68N9FKze = 2394 + INTEGER(IntKi), PARAMETER :: M69N1FKze = 2395 + INTEGER(IntKi), PARAMETER :: M69N2FKze = 2396 + INTEGER(IntKi), PARAMETER :: M69N3FKze = 2397 + INTEGER(IntKi), PARAMETER :: M69N4FKze = 2398 + INTEGER(IntKi), PARAMETER :: M69N5FKze = 2399 + INTEGER(IntKi), PARAMETER :: M69N6FKze = 2400 + INTEGER(IntKi), PARAMETER :: M69N7FKze = 2401 + INTEGER(IntKi), PARAMETER :: M69N8FKze = 2402 + INTEGER(IntKi), PARAMETER :: M69N9FKze = 2403 + INTEGER(IntKi), PARAMETER :: M70N1FKze = 2404 + INTEGER(IntKi), PARAMETER :: M70N2FKze = 2405 + INTEGER(IntKi), PARAMETER :: M70N3FKze = 2406 + INTEGER(IntKi), PARAMETER :: M70N4FKze = 2407 + INTEGER(IntKi), PARAMETER :: M70N5FKze = 2408 + INTEGER(IntKi), PARAMETER :: M70N6FKze = 2409 + INTEGER(IntKi), PARAMETER :: M70N7FKze = 2410 + INTEGER(IntKi), PARAMETER :: M70N8FKze = 2411 + INTEGER(IntKi), PARAMETER :: M70N9FKze = 2412 + INTEGER(IntKi), PARAMETER :: M71N1FKze = 2413 + INTEGER(IntKi), PARAMETER :: M71N2FKze = 2414 + INTEGER(IntKi), PARAMETER :: M71N3FKze = 2415 + INTEGER(IntKi), PARAMETER :: M71N4FKze = 2416 + INTEGER(IntKi), PARAMETER :: M71N5FKze = 2417 + INTEGER(IntKi), PARAMETER :: M71N6FKze = 2418 + INTEGER(IntKi), PARAMETER :: M71N7FKze = 2419 + INTEGER(IntKi), PARAMETER :: M71N8FKze = 2420 + INTEGER(IntKi), PARAMETER :: M71N9FKze = 2421 + INTEGER(IntKi), PARAMETER :: M72N1FKze = 2422 + INTEGER(IntKi), PARAMETER :: M72N2FKze = 2423 + INTEGER(IntKi), PARAMETER :: M72N3FKze = 2424 + INTEGER(IntKi), PARAMETER :: M72N4FKze = 2425 + INTEGER(IntKi), PARAMETER :: M72N5FKze = 2426 + INTEGER(IntKi), PARAMETER :: M72N6FKze = 2427 + INTEGER(IntKi), PARAMETER :: M72N7FKze = 2428 + INTEGER(IntKi), PARAMETER :: M72N8FKze = 2429 + INTEGER(IntKi), PARAMETER :: M72N9FKze = 2430 + INTEGER(IntKi), PARAMETER :: M73N1FKze = 2431 + INTEGER(IntKi), PARAMETER :: M73N2FKze = 2432 + INTEGER(IntKi), PARAMETER :: M73N3FKze = 2433 + INTEGER(IntKi), PARAMETER :: M73N4FKze = 2434 + INTEGER(IntKi), PARAMETER :: M73N5FKze = 2435 + INTEGER(IntKi), PARAMETER :: M73N6FKze = 2436 + INTEGER(IntKi), PARAMETER :: M73N7FKze = 2437 + INTEGER(IntKi), PARAMETER :: M73N8FKze = 2438 + INTEGER(IntKi), PARAMETER :: M73N9FKze = 2439 + INTEGER(IntKi), PARAMETER :: M74N1FKze = 2440 + INTEGER(IntKi), PARAMETER :: M74N2FKze = 2441 + INTEGER(IntKi), PARAMETER :: M74N3FKze = 2442 + INTEGER(IntKi), PARAMETER :: M74N4FKze = 2443 + INTEGER(IntKi), PARAMETER :: M74N5FKze = 2444 + INTEGER(IntKi), PARAMETER :: M74N6FKze = 2445 + INTEGER(IntKi), PARAMETER :: M74N7FKze = 2446 + INTEGER(IntKi), PARAMETER :: M74N8FKze = 2447 + INTEGER(IntKi), PARAMETER :: M74N9FKze = 2448 + INTEGER(IntKi), PARAMETER :: M75N1FKze = 2449 + INTEGER(IntKi), PARAMETER :: M75N2FKze = 2450 + INTEGER(IntKi), PARAMETER :: M75N3FKze = 2451 + INTEGER(IntKi), PARAMETER :: M75N4FKze = 2452 + INTEGER(IntKi), PARAMETER :: M75N5FKze = 2453 + INTEGER(IntKi), PARAMETER :: M75N6FKze = 2454 + INTEGER(IntKi), PARAMETER :: M75N7FKze = 2455 + INTEGER(IntKi), PARAMETER :: M75N8FKze = 2456 + INTEGER(IntKi), PARAMETER :: M75N9FKze = 2457 + INTEGER(IntKi), PARAMETER :: M76N1FKze = 2458 + INTEGER(IntKi), PARAMETER :: M76N2FKze = 2459 + INTEGER(IntKi), PARAMETER :: M76N3FKze = 2460 + INTEGER(IntKi), PARAMETER :: M76N4FKze = 2461 + INTEGER(IntKi), PARAMETER :: M76N5FKze = 2462 + INTEGER(IntKi), PARAMETER :: M76N6FKze = 2463 + INTEGER(IntKi), PARAMETER :: M76N7FKze = 2464 + INTEGER(IntKi), PARAMETER :: M76N8FKze = 2465 + INTEGER(IntKi), PARAMETER :: M76N9FKze = 2466 + INTEGER(IntKi), PARAMETER :: M77N1FKze = 2467 + INTEGER(IntKi), PARAMETER :: M77N2FKze = 2468 + INTEGER(IntKi), PARAMETER :: M77N3FKze = 2469 + INTEGER(IntKi), PARAMETER :: M77N4FKze = 2470 + INTEGER(IntKi), PARAMETER :: M77N5FKze = 2471 + INTEGER(IntKi), PARAMETER :: M77N6FKze = 2472 + INTEGER(IntKi), PARAMETER :: M77N7FKze = 2473 + INTEGER(IntKi), PARAMETER :: M77N8FKze = 2474 + INTEGER(IntKi), PARAMETER :: M77N9FKze = 2475 + INTEGER(IntKi), PARAMETER :: M78N1FKze = 2476 + INTEGER(IntKi), PARAMETER :: M78N2FKze = 2477 + INTEGER(IntKi), PARAMETER :: M78N3FKze = 2478 + INTEGER(IntKi), PARAMETER :: M78N4FKze = 2479 + INTEGER(IntKi), PARAMETER :: M78N5FKze = 2480 + INTEGER(IntKi), PARAMETER :: M78N6FKze = 2481 + INTEGER(IntKi), PARAMETER :: M78N7FKze = 2482 + INTEGER(IntKi), PARAMETER :: M78N8FKze = 2483 + INTEGER(IntKi), PARAMETER :: M78N9FKze = 2484 + INTEGER(IntKi), PARAMETER :: M79N1FKze = 2485 + INTEGER(IntKi), PARAMETER :: M79N2FKze = 2486 + INTEGER(IntKi), PARAMETER :: M79N3FKze = 2487 + INTEGER(IntKi), PARAMETER :: M79N4FKze = 2488 + INTEGER(IntKi), PARAMETER :: M79N5FKze = 2489 + INTEGER(IntKi), PARAMETER :: M79N6FKze = 2490 + INTEGER(IntKi), PARAMETER :: M79N7FKze = 2491 + INTEGER(IntKi), PARAMETER :: M79N8FKze = 2492 + INTEGER(IntKi), PARAMETER :: M79N9FKze = 2493 + INTEGER(IntKi), PARAMETER :: M80N1FKze = 2494 + INTEGER(IntKi), PARAMETER :: M80N2FKze = 2495 + INTEGER(IntKi), PARAMETER :: M80N3FKze = 2496 + INTEGER(IntKi), PARAMETER :: M80N4FKze = 2497 + INTEGER(IntKi), PARAMETER :: M80N5FKze = 2498 + INTEGER(IntKi), PARAMETER :: M80N6FKze = 2499 + INTEGER(IntKi), PARAMETER :: M80N7FKze = 2500 + INTEGER(IntKi), PARAMETER :: M80N8FKze = 2501 + INTEGER(IntKi), PARAMETER :: M80N9FKze = 2502 + INTEGER(IntKi), PARAMETER :: M81N1FKze = 2503 + INTEGER(IntKi), PARAMETER :: M81N2FKze = 2504 + INTEGER(IntKi), PARAMETER :: M81N3FKze = 2505 + INTEGER(IntKi), PARAMETER :: M81N4FKze = 2506 + INTEGER(IntKi), PARAMETER :: M81N5FKze = 2507 + INTEGER(IntKi), PARAMETER :: M81N6FKze = 2508 + INTEGER(IntKi), PARAMETER :: M81N7FKze = 2509 + INTEGER(IntKi), PARAMETER :: M81N8FKze = 2510 + INTEGER(IntKi), PARAMETER :: M81N9FKze = 2511 + INTEGER(IntKi), PARAMETER :: M82N1FKze = 2512 + INTEGER(IntKi), PARAMETER :: M82N2FKze = 2513 + INTEGER(IntKi), PARAMETER :: M82N3FKze = 2514 + INTEGER(IntKi), PARAMETER :: M82N4FKze = 2515 + INTEGER(IntKi), PARAMETER :: M82N5FKze = 2516 + INTEGER(IntKi), PARAMETER :: M82N6FKze = 2517 + INTEGER(IntKi), PARAMETER :: M82N7FKze = 2518 + INTEGER(IntKi), PARAMETER :: M82N8FKze = 2519 + INTEGER(IntKi), PARAMETER :: M82N9FKze = 2520 + INTEGER(IntKi), PARAMETER :: M83N1FKze = 2521 + INTEGER(IntKi), PARAMETER :: M83N2FKze = 2522 + INTEGER(IntKi), PARAMETER :: M83N3FKze = 2523 + INTEGER(IntKi), PARAMETER :: M83N4FKze = 2524 + INTEGER(IntKi), PARAMETER :: M83N5FKze = 2525 + INTEGER(IntKi), PARAMETER :: M83N6FKze = 2526 + INTEGER(IntKi), PARAMETER :: M83N7FKze = 2527 + INTEGER(IntKi), PARAMETER :: M83N8FKze = 2528 + INTEGER(IntKi), PARAMETER :: M83N9FKze = 2529 + INTEGER(IntKi), PARAMETER :: M84N1FKze = 2530 + INTEGER(IntKi), PARAMETER :: M84N2FKze = 2531 + INTEGER(IntKi), PARAMETER :: M84N3FKze = 2532 + INTEGER(IntKi), PARAMETER :: M84N4FKze = 2533 + INTEGER(IntKi), PARAMETER :: M84N5FKze = 2534 + INTEGER(IntKi), PARAMETER :: M84N6FKze = 2535 + INTEGER(IntKi), PARAMETER :: M84N7FKze = 2536 + INTEGER(IntKi), PARAMETER :: M84N8FKze = 2537 + INTEGER(IntKi), PARAMETER :: M84N9FKze = 2538 + INTEGER(IntKi), PARAMETER :: M85N1FKze = 2539 + INTEGER(IntKi), PARAMETER :: M85N2FKze = 2540 + INTEGER(IntKi), PARAMETER :: M85N3FKze = 2541 + INTEGER(IntKi), PARAMETER :: M85N4FKze = 2542 + INTEGER(IntKi), PARAMETER :: M85N5FKze = 2543 + INTEGER(IntKi), PARAMETER :: M85N6FKze = 2544 + INTEGER(IntKi), PARAMETER :: M85N7FKze = 2545 + INTEGER(IntKi), PARAMETER :: M85N8FKze = 2546 + INTEGER(IntKi), PARAMETER :: M85N9FKze = 2547 + INTEGER(IntKi), PARAMETER :: M86N1FKze = 2548 + INTEGER(IntKi), PARAMETER :: M86N2FKze = 2549 + INTEGER(IntKi), PARAMETER :: M86N3FKze = 2550 + INTEGER(IntKi), PARAMETER :: M86N4FKze = 2551 + INTEGER(IntKi), PARAMETER :: M86N5FKze = 2552 + INTEGER(IntKi), PARAMETER :: M86N6FKze = 2553 + INTEGER(IntKi), PARAMETER :: M86N7FKze = 2554 + INTEGER(IntKi), PARAMETER :: M86N8FKze = 2555 + INTEGER(IntKi), PARAMETER :: M86N9FKze = 2556 + INTEGER(IntKi), PARAMETER :: M87N1FKze = 2557 + INTEGER(IntKi), PARAMETER :: M87N2FKze = 2558 + INTEGER(IntKi), PARAMETER :: M87N3FKze = 2559 + INTEGER(IntKi), PARAMETER :: M87N4FKze = 2560 + INTEGER(IntKi), PARAMETER :: M87N5FKze = 2561 + INTEGER(IntKi), PARAMETER :: M87N6FKze = 2562 + INTEGER(IntKi), PARAMETER :: M87N7FKze = 2563 + INTEGER(IntKi), PARAMETER :: M87N8FKze = 2564 + INTEGER(IntKi), PARAMETER :: M87N9FKze = 2565 + INTEGER(IntKi), PARAMETER :: M88N1FKze = 2566 + INTEGER(IntKi), PARAMETER :: M88N2FKze = 2567 + INTEGER(IntKi), PARAMETER :: M88N3FKze = 2568 + INTEGER(IntKi), PARAMETER :: M88N4FKze = 2569 + INTEGER(IntKi), PARAMETER :: M88N5FKze = 2570 + INTEGER(IntKi), PARAMETER :: M88N6FKze = 2571 + INTEGER(IntKi), PARAMETER :: M88N7FKze = 2572 + INTEGER(IntKi), PARAMETER :: M88N8FKze = 2573 + INTEGER(IntKi), PARAMETER :: M88N9FKze = 2574 + INTEGER(IntKi), PARAMETER :: M89N1FKze = 2575 + INTEGER(IntKi), PARAMETER :: M89N2FKze = 2576 + INTEGER(IntKi), PARAMETER :: M89N3FKze = 2577 + INTEGER(IntKi), PARAMETER :: M89N4FKze = 2578 + INTEGER(IntKi), PARAMETER :: M89N5FKze = 2579 + INTEGER(IntKi), PARAMETER :: M89N6FKze = 2580 + INTEGER(IntKi), PARAMETER :: M89N7FKze = 2581 + INTEGER(IntKi), PARAMETER :: M89N8FKze = 2582 + INTEGER(IntKi), PARAMETER :: M89N9FKze = 2583 + INTEGER(IntKi), PARAMETER :: M90N1FKze = 2584 + INTEGER(IntKi), PARAMETER :: M90N2FKze = 2585 + INTEGER(IntKi), PARAMETER :: M90N3FKze = 2586 + INTEGER(IntKi), PARAMETER :: M90N4FKze = 2587 + INTEGER(IntKi), PARAMETER :: M90N5FKze = 2588 + INTEGER(IntKi), PARAMETER :: M90N6FKze = 2589 + INTEGER(IntKi), PARAMETER :: M90N7FKze = 2590 + INTEGER(IntKi), PARAMETER :: M90N8FKze = 2591 + INTEGER(IntKi), PARAMETER :: M90N9FKze = 2592 + INTEGER(IntKi), PARAMETER :: M91N1FKze = 2593 + INTEGER(IntKi), PARAMETER :: M91N2FKze = 2594 + INTEGER(IntKi), PARAMETER :: M91N3FKze = 2595 + INTEGER(IntKi), PARAMETER :: M91N4FKze = 2596 + INTEGER(IntKi), PARAMETER :: M91N5FKze = 2597 + INTEGER(IntKi), PARAMETER :: M91N6FKze = 2598 + INTEGER(IntKi), PARAMETER :: M91N7FKze = 2599 + INTEGER(IntKi), PARAMETER :: M91N8FKze = 2600 + INTEGER(IntKi), PARAMETER :: M91N9FKze = 2601 + INTEGER(IntKi), PARAMETER :: M92N1FKze = 2602 + INTEGER(IntKi), PARAMETER :: M92N2FKze = 2603 + INTEGER(IntKi), PARAMETER :: M92N3FKze = 2604 + INTEGER(IntKi), PARAMETER :: M92N4FKze = 2605 + INTEGER(IntKi), PARAMETER :: M92N5FKze = 2606 + INTEGER(IntKi), PARAMETER :: M92N6FKze = 2607 + INTEGER(IntKi), PARAMETER :: M92N7FKze = 2608 + INTEGER(IntKi), PARAMETER :: M92N8FKze = 2609 + INTEGER(IntKi), PARAMETER :: M92N9FKze = 2610 + INTEGER(IntKi), PARAMETER :: M93N1FKze = 2611 + INTEGER(IntKi), PARAMETER :: M93N2FKze = 2612 + INTEGER(IntKi), PARAMETER :: M93N3FKze = 2613 + INTEGER(IntKi), PARAMETER :: M93N4FKze = 2614 + INTEGER(IntKi), PARAMETER :: M93N5FKze = 2615 + INTEGER(IntKi), PARAMETER :: M93N6FKze = 2616 + INTEGER(IntKi), PARAMETER :: M93N7FKze = 2617 + INTEGER(IntKi), PARAMETER :: M93N8FKze = 2618 + INTEGER(IntKi), PARAMETER :: M93N9FKze = 2619 + INTEGER(IntKi), PARAMETER :: M94N1FKze = 2620 + INTEGER(IntKi), PARAMETER :: M94N2FKze = 2621 + INTEGER(IntKi), PARAMETER :: M94N3FKze = 2622 + INTEGER(IntKi), PARAMETER :: M94N4FKze = 2623 + INTEGER(IntKi), PARAMETER :: M94N5FKze = 2624 + INTEGER(IntKi), PARAMETER :: M94N6FKze = 2625 + INTEGER(IntKi), PARAMETER :: M94N7FKze = 2626 + INTEGER(IntKi), PARAMETER :: M94N8FKze = 2627 + INTEGER(IntKi), PARAMETER :: M94N9FKze = 2628 + INTEGER(IntKi), PARAMETER :: M95N1FKze = 2629 + INTEGER(IntKi), PARAMETER :: M95N2FKze = 2630 + INTEGER(IntKi), PARAMETER :: M95N3FKze = 2631 + INTEGER(IntKi), PARAMETER :: M95N4FKze = 2632 + INTEGER(IntKi), PARAMETER :: M95N5FKze = 2633 + INTEGER(IntKi), PARAMETER :: M95N6FKze = 2634 + INTEGER(IntKi), PARAMETER :: M95N7FKze = 2635 + INTEGER(IntKi), PARAMETER :: M95N8FKze = 2636 + INTEGER(IntKi), PARAMETER :: M95N9FKze = 2637 + INTEGER(IntKi), PARAMETER :: M96N1FKze = 2638 + INTEGER(IntKi), PARAMETER :: M96N2FKze = 2639 + INTEGER(IntKi), PARAMETER :: M96N3FKze = 2640 + INTEGER(IntKi), PARAMETER :: M96N4FKze = 2641 + INTEGER(IntKi), PARAMETER :: M96N5FKze = 2642 + INTEGER(IntKi), PARAMETER :: M96N6FKze = 2643 + INTEGER(IntKi), PARAMETER :: M96N7FKze = 2644 + INTEGER(IntKi), PARAMETER :: M96N8FKze = 2645 + INTEGER(IntKi), PARAMETER :: M96N9FKze = 2646 + INTEGER(IntKi), PARAMETER :: M97N1FKze = 2647 + INTEGER(IntKi), PARAMETER :: M97N2FKze = 2648 + INTEGER(IntKi), PARAMETER :: M97N3FKze = 2649 + INTEGER(IntKi), PARAMETER :: M97N4FKze = 2650 + INTEGER(IntKi), PARAMETER :: M97N5FKze = 2651 + INTEGER(IntKi), PARAMETER :: M97N6FKze = 2652 + INTEGER(IntKi), PARAMETER :: M97N7FKze = 2653 + INTEGER(IntKi), PARAMETER :: M97N8FKze = 2654 + INTEGER(IntKi), PARAMETER :: M97N9FKze = 2655 + INTEGER(IntKi), PARAMETER :: M98N1FKze = 2656 + INTEGER(IntKi), PARAMETER :: M98N2FKze = 2657 + INTEGER(IntKi), PARAMETER :: M98N3FKze = 2658 + INTEGER(IntKi), PARAMETER :: M98N4FKze = 2659 + INTEGER(IntKi), PARAMETER :: M98N5FKze = 2660 + INTEGER(IntKi), PARAMETER :: M98N6FKze = 2661 + INTEGER(IntKi), PARAMETER :: M98N7FKze = 2662 + INTEGER(IntKi), PARAMETER :: M98N8FKze = 2663 + INTEGER(IntKi), PARAMETER :: M98N9FKze = 2664 + INTEGER(IntKi), PARAMETER :: M99N1FKze = 2665 + INTEGER(IntKi), PARAMETER :: M99N2FKze = 2666 + INTEGER(IntKi), PARAMETER :: M99N3FKze = 2667 + INTEGER(IntKi), PARAMETER :: M99N4FKze = 2668 + INTEGER(IntKi), PARAMETER :: M99N5FKze = 2669 + INTEGER(IntKi), PARAMETER :: M99N6FKze = 2670 + INTEGER(IntKi), PARAMETER :: M99N7FKze = 2671 + INTEGER(IntKi), PARAMETER :: M99N8FKze = 2672 + INTEGER(IntKi), PARAMETER :: M99N9FKze = 2673 + INTEGER(IntKi), PARAMETER :: M01N1FMxe = 2674 + INTEGER(IntKi), PARAMETER :: M01N2FMxe = 2675 + INTEGER(IntKi), PARAMETER :: M01N3FMxe = 2676 + INTEGER(IntKi), PARAMETER :: M01N4FMxe = 2677 + INTEGER(IntKi), PARAMETER :: M01N5FMxe = 2678 + INTEGER(IntKi), PARAMETER :: M01N6FMxe = 2679 + INTEGER(IntKi), PARAMETER :: M01N7FMxe = 2680 + INTEGER(IntKi), PARAMETER :: M01N8FMxe = 2681 + INTEGER(IntKi), PARAMETER :: M01N9FMxe = 2682 + INTEGER(IntKi), PARAMETER :: M02N1FMxe = 2683 + INTEGER(IntKi), PARAMETER :: M02N2FMxe = 2684 + INTEGER(IntKi), PARAMETER :: M02N3FMxe = 2685 + INTEGER(IntKi), PARAMETER :: M02N4FMxe = 2686 + INTEGER(IntKi), PARAMETER :: M02N5FMxe = 2687 + INTEGER(IntKi), PARAMETER :: M02N6FMxe = 2688 + INTEGER(IntKi), PARAMETER :: M02N7FMxe = 2689 + INTEGER(IntKi), PARAMETER :: M02N8FMxe = 2690 + INTEGER(IntKi), PARAMETER :: M02N9FMxe = 2691 + INTEGER(IntKi), PARAMETER :: M03N1FMxe = 2692 + INTEGER(IntKi), PARAMETER :: M03N2FMxe = 2693 + INTEGER(IntKi), PARAMETER :: M03N3FMxe = 2694 + INTEGER(IntKi), PARAMETER :: M03N4FMxe = 2695 + INTEGER(IntKi), PARAMETER :: M03N5FMxe = 2696 + INTEGER(IntKi), PARAMETER :: M03N6FMxe = 2697 + INTEGER(IntKi), PARAMETER :: M03N7FMxe = 2698 + INTEGER(IntKi), PARAMETER :: M03N8FMxe = 2699 + INTEGER(IntKi), PARAMETER :: M03N9FMxe = 2700 + INTEGER(IntKi), PARAMETER :: M04N1FMxe = 2701 + INTEGER(IntKi), PARAMETER :: M04N2FMxe = 2702 + INTEGER(IntKi), PARAMETER :: M04N3FMxe = 2703 + INTEGER(IntKi), PARAMETER :: M04N4FMxe = 2704 + INTEGER(IntKi), PARAMETER :: M04N5FMxe = 2705 + INTEGER(IntKi), PARAMETER :: M04N6FMxe = 2706 + INTEGER(IntKi), PARAMETER :: M04N7FMxe = 2707 + INTEGER(IntKi), PARAMETER :: M04N8FMxe = 2708 + INTEGER(IntKi), PARAMETER :: M04N9FMxe = 2709 + INTEGER(IntKi), PARAMETER :: M05N1FMxe = 2710 + INTEGER(IntKi), PARAMETER :: M05N2FMxe = 2711 + INTEGER(IntKi), PARAMETER :: M05N3FMxe = 2712 + INTEGER(IntKi), PARAMETER :: M05N4FMxe = 2713 + INTEGER(IntKi), PARAMETER :: M05N5FMxe = 2714 + INTEGER(IntKi), PARAMETER :: M05N6FMxe = 2715 + INTEGER(IntKi), PARAMETER :: M05N7FMxe = 2716 + INTEGER(IntKi), PARAMETER :: M05N8FMxe = 2717 + INTEGER(IntKi), PARAMETER :: M05N9FMxe = 2718 + INTEGER(IntKi), PARAMETER :: M06N1FMxe = 2719 + INTEGER(IntKi), PARAMETER :: M06N2FMxe = 2720 + INTEGER(IntKi), PARAMETER :: M06N3FMxe = 2721 + INTEGER(IntKi), PARAMETER :: M06N4FMxe = 2722 + INTEGER(IntKi), PARAMETER :: M06N5FMxe = 2723 + INTEGER(IntKi), PARAMETER :: M06N6FMxe = 2724 + INTEGER(IntKi), PARAMETER :: M06N7FMxe = 2725 + INTEGER(IntKi), PARAMETER :: M06N8FMxe = 2726 + INTEGER(IntKi), PARAMETER :: M06N9FMxe = 2727 + INTEGER(IntKi), PARAMETER :: M07N1FMxe = 2728 + INTEGER(IntKi), PARAMETER :: M07N2FMxe = 2729 + INTEGER(IntKi), PARAMETER :: M07N3FMxe = 2730 + INTEGER(IntKi), PARAMETER :: M07N4FMxe = 2731 + INTEGER(IntKi), PARAMETER :: M07N5FMxe = 2732 + INTEGER(IntKi), PARAMETER :: M07N6FMxe = 2733 + INTEGER(IntKi), PARAMETER :: M07N7FMxe = 2734 + INTEGER(IntKi), PARAMETER :: M07N8FMxe = 2735 + INTEGER(IntKi), PARAMETER :: M07N9FMxe = 2736 + INTEGER(IntKi), PARAMETER :: M08N1FMxe = 2737 + INTEGER(IntKi), PARAMETER :: M08N2FMxe = 2738 + INTEGER(IntKi), PARAMETER :: M08N3FMxe = 2739 + INTEGER(IntKi), PARAMETER :: M08N4FMxe = 2740 + INTEGER(IntKi), PARAMETER :: M08N5FMxe = 2741 + INTEGER(IntKi), PARAMETER :: M08N6FMxe = 2742 + INTEGER(IntKi), PARAMETER :: M08N7FMxe = 2743 + INTEGER(IntKi), PARAMETER :: M08N8FMxe = 2744 + INTEGER(IntKi), PARAMETER :: M08N9FMxe = 2745 + INTEGER(IntKi), PARAMETER :: M09N1FMxe = 2746 + INTEGER(IntKi), PARAMETER :: M09N2FMxe = 2747 + INTEGER(IntKi), PARAMETER :: M09N3FMxe = 2748 + INTEGER(IntKi), PARAMETER :: M09N4FMxe = 2749 + INTEGER(IntKi), PARAMETER :: M09N5FMxe = 2750 + INTEGER(IntKi), PARAMETER :: M09N6FMxe = 2751 + INTEGER(IntKi), PARAMETER :: M09N7FMxe = 2752 + INTEGER(IntKi), PARAMETER :: M09N8FMxe = 2753 + INTEGER(IntKi), PARAMETER :: M09N9FMxe = 2754 + INTEGER(IntKi), PARAMETER :: M10N1FMxe = 2755 + INTEGER(IntKi), PARAMETER :: M10N2FMxe = 2756 + INTEGER(IntKi), PARAMETER :: M10N3FMxe = 2757 + INTEGER(IntKi), PARAMETER :: M10N4FMxe = 2758 + INTEGER(IntKi), PARAMETER :: M10N5FMxe = 2759 + INTEGER(IntKi), PARAMETER :: M10N6FMxe = 2760 + INTEGER(IntKi), PARAMETER :: M10N7FMxe = 2761 + INTEGER(IntKi), PARAMETER :: M10N8FMxe = 2762 + INTEGER(IntKi), PARAMETER :: M10N9FMxe = 2763 + INTEGER(IntKi), PARAMETER :: M11N1FMxe = 2764 + INTEGER(IntKi), PARAMETER :: M11N2FMxe = 2765 + INTEGER(IntKi), PARAMETER :: M11N3FMxe = 2766 + INTEGER(IntKi), PARAMETER :: M11N4FMxe = 2767 + INTEGER(IntKi), PARAMETER :: M11N5FMxe = 2768 + INTEGER(IntKi), PARAMETER :: M11N6FMxe = 2769 + INTEGER(IntKi), PARAMETER :: M11N7FMxe = 2770 + INTEGER(IntKi), PARAMETER :: M11N8FMxe = 2771 + INTEGER(IntKi), PARAMETER :: M11N9FMxe = 2772 + INTEGER(IntKi), PARAMETER :: M12N1FMxe = 2773 + INTEGER(IntKi), PARAMETER :: M12N2FMxe = 2774 + INTEGER(IntKi), PARAMETER :: M12N3FMxe = 2775 + INTEGER(IntKi), PARAMETER :: M12N4FMxe = 2776 + INTEGER(IntKi), PARAMETER :: M12N5FMxe = 2777 + INTEGER(IntKi), PARAMETER :: M12N6FMxe = 2778 + INTEGER(IntKi), PARAMETER :: M12N7FMxe = 2779 + INTEGER(IntKi), PARAMETER :: M12N8FMxe = 2780 + INTEGER(IntKi), PARAMETER :: M12N9FMxe = 2781 + INTEGER(IntKi), PARAMETER :: M13N1FMxe = 2782 + INTEGER(IntKi), PARAMETER :: M13N2FMxe = 2783 + INTEGER(IntKi), PARAMETER :: M13N3FMxe = 2784 + INTEGER(IntKi), PARAMETER :: M13N4FMxe = 2785 + INTEGER(IntKi), PARAMETER :: M13N5FMxe = 2786 + INTEGER(IntKi), PARAMETER :: M13N6FMxe = 2787 + INTEGER(IntKi), PARAMETER :: M13N7FMxe = 2788 + INTEGER(IntKi), PARAMETER :: M13N8FMxe = 2789 + INTEGER(IntKi), PARAMETER :: M13N9FMxe = 2790 + INTEGER(IntKi), PARAMETER :: M14N1FMxe = 2791 + INTEGER(IntKi), PARAMETER :: M14N2FMxe = 2792 + INTEGER(IntKi), PARAMETER :: M14N3FMxe = 2793 + INTEGER(IntKi), PARAMETER :: M14N4FMxe = 2794 + INTEGER(IntKi), PARAMETER :: M14N5FMxe = 2795 + INTEGER(IntKi), PARAMETER :: M14N6FMxe = 2796 + INTEGER(IntKi), PARAMETER :: M14N7FMxe = 2797 + INTEGER(IntKi), PARAMETER :: M14N8FMxe = 2798 + INTEGER(IntKi), PARAMETER :: M14N9FMxe = 2799 + INTEGER(IntKi), PARAMETER :: M15N1FMxe = 2800 + INTEGER(IntKi), PARAMETER :: M15N2FMxe = 2801 + INTEGER(IntKi), PARAMETER :: M15N3FMxe = 2802 + INTEGER(IntKi), PARAMETER :: M15N4FMxe = 2803 + INTEGER(IntKi), PARAMETER :: M15N5FMxe = 2804 + INTEGER(IntKi), PARAMETER :: M15N6FMxe = 2805 + INTEGER(IntKi), PARAMETER :: M15N7FMxe = 2806 + INTEGER(IntKi), PARAMETER :: M15N8FMxe = 2807 + INTEGER(IntKi), PARAMETER :: M15N9FMxe = 2808 + INTEGER(IntKi), PARAMETER :: M16N1FMxe = 2809 + INTEGER(IntKi), PARAMETER :: M16N2FMxe = 2810 + INTEGER(IntKi), PARAMETER :: M16N3FMxe = 2811 + INTEGER(IntKi), PARAMETER :: M16N4FMxe = 2812 + INTEGER(IntKi), PARAMETER :: M16N5FMxe = 2813 + INTEGER(IntKi), PARAMETER :: M16N6FMxe = 2814 + INTEGER(IntKi), PARAMETER :: M16N7FMxe = 2815 + INTEGER(IntKi), PARAMETER :: M16N8FMxe = 2816 + INTEGER(IntKi), PARAMETER :: M16N9FMxe = 2817 + INTEGER(IntKi), PARAMETER :: M17N1FMxe = 2818 + INTEGER(IntKi), PARAMETER :: M17N2FMxe = 2819 + INTEGER(IntKi), PARAMETER :: M17N3FMxe = 2820 + INTEGER(IntKi), PARAMETER :: M17N4FMxe = 2821 + INTEGER(IntKi), PARAMETER :: M17N5FMxe = 2822 + INTEGER(IntKi), PARAMETER :: M17N6FMxe = 2823 + INTEGER(IntKi), PARAMETER :: M17N7FMxe = 2824 + INTEGER(IntKi), PARAMETER :: M17N8FMxe = 2825 + INTEGER(IntKi), PARAMETER :: M17N9FMxe = 2826 + INTEGER(IntKi), PARAMETER :: M18N1FMxe = 2827 + INTEGER(IntKi), PARAMETER :: M18N2FMxe = 2828 + INTEGER(IntKi), PARAMETER :: M18N3FMxe = 2829 + INTEGER(IntKi), PARAMETER :: M18N4FMxe = 2830 + INTEGER(IntKi), PARAMETER :: M18N5FMxe = 2831 + INTEGER(IntKi), PARAMETER :: M18N6FMxe = 2832 + INTEGER(IntKi), PARAMETER :: M18N7FMxe = 2833 + INTEGER(IntKi), PARAMETER :: M18N8FMxe = 2834 + INTEGER(IntKi), PARAMETER :: M18N9FMxe = 2835 + INTEGER(IntKi), PARAMETER :: M19N1FMxe = 2836 + INTEGER(IntKi), PARAMETER :: M19N2FMxe = 2837 + INTEGER(IntKi), PARAMETER :: M19N3FMxe = 2838 + INTEGER(IntKi), PARAMETER :: M19N4FMxe = 2839 + INTEGER(IntKi), PARAMETER :: M19N5FMxe = 2840 + INTEGER(IntKi), PARAMETER :: M19N6FMxe = 2841 + INTEGER(IntKi), PARAMETER :: M19N7FMxe = 2842 + INTEGER(IntKi), PARAMETER :: M19N8FMxe = 2843 + INTEGER(IntKi), PARAMETER :: M19N9FMxe = 2844 + INTEGER(IntKi), PARAMETER :: M20N1FMxe = 2845 + INTEGER(IntKi), PARAMETER :: M20N2FMxe = 2846 + INTEGER(IntKi), PARAMETER :: M20N3FMxe = 2847 + INTEGER(IntKi), PARAMETER :: M20N4FMxe = 2848 + INTEGER(IntKi), PARAMETER :: M20N5FMxe = 2849 + INTEGER(IntKi), PARAMETER :: M20N6FMxe = 2850 + INTEGER(IntKi), PARAMETER :: M20N7FMxe = 2851 + INTEGER(IntKi), PARAMETER :: M20N8FMxe = 2852 + INTEGER(IntKi), PARAMETER :: M20N9FMxe = 2853 + INTEGER(IntKi), PARAMETER :: M21N1FMxe = 2854 + INTEGER(IntKi), PARAMETER :: M21N2FMxe = 2855 + INTEGER(IntKi), PARAMETER :: M21N3FMxe = 2856 + INTEGER(IntKi), PARAMETER :: M21N4FMxe = 2857 + INTEGER(IntKi), PARAMETER :: M21N5FMxe = 2858 + INTEGER(IntKi), PARAMETER :: M21N6FMxe = 2859 + INTEGER(IntKi), PARAMETER :: M21N7FMxe = 2860 + INTEGER(IntKi), PARAMETER :: M21N8FMxe = 2861 + INTEGER(IntKi), PARAMETER :: M21N9FMxe = 2862 + INTEGER(IntKi), PARAMETER :: M22N1FMxe = 2863 + INTEGER(IntKi), PARAMETER :: M22N2FMxe = 2864 + INTEGER(IntKi), PARAMETER :: M22N3FMxe = 2865 + INTEGER(IntKi), PARAMETER :: M22N4FMxe = 2866 + INTEGER(IntKi), PARAMETER :: M22N5FMxe = 2867 + INTEGER(IntKi), PARAMETER :: M22N6FMxe = 2868 + INTEGER(IntKi), PARAMETER :: M22N7FMxe = 2869 + INTEGER(IntKi), PARAMETER :: M22N8FMxe = 2870 + INTEGER(IntKi), PARAMETER :: M22N9FMxe = 2871 + INTEGER(IntKi), PARAMETER :: M23N1FMxe = 2872 + INTEGER(IntKi), PARAMETER :: M23N2FMxe = 2873 + INTEGER(IntKi), PARAMETER :: M23N3FMxe = 2874 + INTEGER(IntKi), PARAMETER :: M23N4FMxe = 2875 + INTEGER(IntKi), PARAMETER :: M23N5FMxe = 2876 + INTEGER(IntKi), PARAMETER :: M23N6FMxe = 2877 + INTEGER(IntKi), PARAMETER :: M23N7FMxe = 2878 + INTEGER(IntKi), PARAMETER :: M23N8FMxe = 2879 + INTEGER(IntKi), PARAMETER :: M23N9FMxe = 2880 + INTEGER(IntKi), PARAMETER :: M24N1FMxe = 2881 + INTEGER(IntKi), PARAMETER :: M24N2FMxe = 2882 + INTEGER(IntKi), PARAMETER :: M24N3FMxe = 2883 + INTEGER(IntKi), PARAMETER :: M24N4FMxe = 2884 + INTEGER(IntKi), PARAMETER :: M24N5FMxe = 2885 + INTEGER(IntKi), PARAMETER :: M24N6FMxe = 2886 + INTEGER(IntKi), PARAMETER :: M24N7FMxe = 2887 + INTEGER(IntKi), PARAMETER :: M24N8FMxe = 2888 + INTEGER(IntKi), PARAMETER :: M24N9FMxe = 2889 + INTEGER(IntKi), PARAMETER :: M25N1FMxe = 2890 + INTEGER(IntKi), PARAMETER :: M25N2FMxe = 2891 + INTEGER(IntKi), PARAMETER :: M25N3FMxe = 2892 + INTEGER(IntKi), PARAMETER :: M25N4FMxe = 2893 + INTEGER(IntKi), PARAMETER :: M25N5FMxe = 2894 + INTEGER(IntKi), PARAMETER :: M25N6FMxe = 2895 + INTEGER(IntKi), PARAMETER :: M25N7FMxe = 2896 + INTEGER(IntKi), PARAMETER :: M25N8FMxe = 2897 + INTEGER(IntKi), PARAMETER :: M25N9FMxe = 2898 + INTEGER(IntKi), PARAMETER :: M26N1FMxe = 2899 + INTEGER(IntKi), PARAMETER :: M26N2FMxe = 2900 + INTEGER(IntKi), PARAMETER :: M26N3FMxe = 2901 + INTEGER(IntKi), PARAMETER :: M26N4FMxe = 2902 + INTEGER(IntKi), PARAMETER :: M26N5FMxe = 2903 + INTEGER(IntKi), PARAMETER :: M26N6FMxe = 2904 + INTEGER(IntKi), PARAMETER :: M26N7FMxe = 2905 + INTEGER(IntKi), PARAMETER :: M26N8FMxe = 2906 + INTEGER(IntKi), PARAMETER :: M26N9FMxe = 2907 + INTEGER(IntKi), PARAMETER :: M27N1FMxe = 2908 + INTEGER(IntKi), PARAMETER :: M27N2FMxe = 2909 + INTEGER(IntKi), PARAMETER :: M27N3FMxe = 2910 + INTEGER(IntKi), PARAMETER :: M27N4FMxe = 2911 + INTEGER(IntKi), PARAMETER :: M27N5FMxe = 2912 + INTEGER(IntKi), PARAMETER :: M27N6FMxe = 2913 + INTEGER(IntKi), PARAMETER :: M27N7FMxe = 2914 + INTEGER(IntKi), PARAMETER :: M27N8FMxe = 2915 + INTEGER(IntKi), PARAMETER :: M27N9FMxe = 2916 + INTEGER(IntKi), PARAMETER :: M28N1FMxe = 2917 + INTEGER(IntKi), PARAMETER :: M28N2FMxe = 2918 + INTEGER(IntKi), PARAMETER :: M28N3FMxe = 2919 + INTEGER(IntKi), PARAMETER :: M28N4FMxe = 2920 + INTEGER(IntKi), PARAMETER :: M28N5FMxe = 2921 + INTEGER(IntKi), PARAMETER :: M28N6FMxe = 2922 + INTEGER(IntKi), PARAMETER :: M28N7FMxe = 2923 + INTEGER(IntKi), PARAMETER :: M28N8FMxe = 2924 + INTEGER(IntKi), PARAMETER :: M28N9FMxe = 2925 + INTEGER(IntKi), PARAMETER :: M29N1FMxe = 2926 + INTEGER(IntKi), PARAMETER :: M29N2FMxe = 2927 + INTEGER(IntKi), PARAMETER :: M29N3FMxe = 2928 + INTEGER(IntKi), PARAMETER :: M29N4FMxe = 2929 + INTEGER(IntKi), PARAMETER :: M29N5FMxe = 2930 + INTEGER(IntKi), PARAMETER :: M29N6FMxe = 2931 + INTEGER(IntKi), PARAMETER :: M29N7FMxe = 2932 + INTEGER(IntKi), PARAMETER :: M29N8FMxe = 2933 + INTEGER(IntKi), PARAMETER :: M29N9FMxe = 2934 + INTEGER(IntKi), PARAMETER :: M30N1FMxe = 2935 + INTEGER(IntKi), PARAMETER :: M30N2FMxe = 2936 + INTEGER(IntKi), PARAMETER :: M30N3FMxe = 2937 + INTEGER(IntKi), PARAMETER :: M30N4FMxe = 2938 + INTEGER(IntKi), PARAMETER :: M30N5FMxe = 2939 + INTEGER(IntKi), PARAMETER :: M30N6FMxe = 2940 + INTEGER(IntKi), PARAMETER :: M30N7FMxe = 2941 + INTEGER(IntKi), PARAMETER :: M30N8FMxe = 2942 + INTEGER(IntKi), PARAMETER :: M30N9FMxe = 2943 + INTEGER(IntKi), PARAMETER :: M31N1FMxe = 2944 + INTEGER(IntKi), PARAMETER :: M31N2FMxe = 2945 + INTEGER(IntKi), PARAMETER :: M31N3FMxe = 2946 + INTEGER(IntKi), PARAMETER :: M31N4FMxe = 2947 + INTEGER(IntKi), PARAMETER :: M31N5FMxe = 2948 + INTEGER(IntKi), PARAMETER :: M31N6FMxe = 2949 + INTEGER(IntKi), PARAMETER :: M31N7FMxe = 2950 + INTEGER(IntKi), PARAMETER :: M31N8FMxe = 2951 + INTEGER(IntKi), PARAMETER :: M31N9FMxe = 2952 + INTEGER(IntKi), PARAMETER :: M32N1FMxe = 2953 + INTEGER(IntKi), PARAMETER :: M32N2FMxe = 2954 + INTEGER(IntKi), PARAMETER :: M32N3FMxe = 2955 + INTEGER(IntKi), PARAMETER :: M32N4FMxe = 2956 + INTEGER(IntKi), PARAMETER :: M32N5FMxe = 2957 + INTEGER(IntKi), PARAMETER :: M32N6FMxe = 2958 + INTEGER(IntKi), PARAMETER :: M32N7FMxe = 2959 + INTEGER(IntKi), PARAMETER :: M32N8FMxe = 2960 + INTEGER(IntKi), PARAMETER :: M32N9FMxe = 2961 + INTEGER(IntKi), PARAMETER :: M33N1FMxe = 2962 + INTEGER(IntKi), PARAMETER :: M33N2FMxe = 2963 + INTEGER(IntKi), PARAMETER :: M33N3FMxe = 2964 + INTEGER(IntKi), PARAMETER :: M33N4FMxe = 2965 + INTEGER(IntKi), PARAMETER :: M33N5FMxe = 2966 + INTEGER(IntKi), PARAMETER :: M33N6FMxe = 2967 + INTEGER(IntKi), PARAMETER :: M33N7FMxe = 2968 + INTEGER(IntKi), PARAMETER :: M33N8FMxe = 2969 + INTEGER(IntKi), PARAMETER :: M33N9FMxe = 2970 + INTEGER(IntKi), PARAMETER :: M34N1FMxe = 2971 + INTEGER(IntKi), PARAMETER :: M34N2FMxe = 2972 + INTEGER(IntKi), PARAMETER :: M34N3FMxe = 2973 + INTEGER(IntKi), PARAMETER :: M34N4FMxe = 2974 + INTEGER(IntKi), PARAMETER :: M34N5FMxe = 2975 + INTEGER(IntKi), PARAMETER :: M34N6FMxe = 2976 + INTEGER(IntKi), PARAMETER :: M34N7FMxe = 2977 + INTEGER(IntKi), PARAMETER :: M34N8FMxe = 2978 + INTEGER(IntKi), PARAMETER :: M34N9FMxe = 2979 + INTEGER(IntKi), PARAMETER :: M35N1FMxe = 2980 + INTEGER(IntKi), PARAMETER :: M35N2FMxe = 2981 + INTEGER(IntKi), PARAMETER :: M35N3FMxe = 2982 + INTEGER(IntKi), PARAMETER :: M35N4FMxe = 2983 + INTEGER(IntKi), PARAMETER :: M35N5FMxe = 2984 + INTEGER(IntKi), PARAMETER :: M35N6FMxe = 2985 + INTEGER(IntKi), PARAMETER :: M35N7FMxe = 2986 + INTEGER(IntKi), PARAMETER :: M35N8FMxe = 2987 + INTEGER(IntKi), PARAMETER :: M35N9FMxe = 2988 + INTEGER(IntKi), PARAMETER :: M36N1FMxe = 2989 + INTEGER(IntKi), PARAMETER :: M36N2FMxe = 2990 + INTEGER(IntKi), PARAMETER :: M36N3FMxe = 2991 + INTEGER(IntKi), PARAMETER :: M36N4FMxe = 2992 + INTEGER(IntKi), PARAMETER :: M36N5FMxe = 2993 + INTEGER(IntKi), PARAMETER :: M36N6FMxe = 2994 + INTEGER(IntKi), PARAMETER :: M36N7FMxe = 2995 + INTEGER(IntKi), PARAMETER :: M36N8FMxe = 2996 + INTEGER(IntKi), PARAMETER :: M36N9FMxe = 2997 + INTEGER(IntKi), PARAMETER :: M37N1FMxe = 2998 + INTEGER(IntKi), PARAMETER :: M37N2FMxe = 2999 + INTEGER(IntKi), PARAMETER :: M37N3FMxe = 3000 + INTEGER(IntKi), PARAMETER :: M37N4FMxe = 3001 + INTEGER(IntKi), PARAMETER :: M37N5FMxe = 3002 + INTEGER(IntKi), PARAMETER :: M37N6FMxe = 3003 + INTEGER(IntKi), PARAMETER :: M37N7FMxe = 3004 + INTEGER(IntKi), PARAMETER :: M37N8FMxe = 3005 + INTEGER(IntKi), PARAMETER :: M37N9FMxe = 3006 + INTEGER(IntKi), PARAMETER :: M38N1FMxe = 3007 + INTEGER(IntKi), PARAMETER :: M38N2FMxe = 3008 + INTEGER(IntKi), PARAMETER :: M38N3FMxe = 3009 + INTEGER(IntKi), PARAMETER :: M38N4FMxe = 3010 + INTEGER(IntKi), PARAMETER :: M38N5FMxe = 3011 + INTEGER(IntKi), PARAMETER :: M38N6FMxe = 3012 + INTEGER(IntKi), PARAMETER :: M38N7FMxe = 3013 + INTEGER(IntKi), PARAMETER :: M38N8FMxe = 3014 + INTEGER(IntKi), PARAMETER :: M38N9FMxe = 3015 + INTEGER(IntKi), PARAMETER :: M39N1FMxe = 3016 + INTEGER(IntKi), PARAMETER :: M39N2FMxe = 3017 + INTEGER(IntKi), PARAMETER :: M39N3FMxe = 3018 + INTEGER(IntKi), PARAMETER :: M39N4FMxe = 3019 + INTEGER(IntKi), PARAMETER :: M39N5FMxe = 3020 + INTEGER(IntKi), PARAMETER :: M39N6FMxe = 3021 + INTEGER(IntKi), PARAMETER :: M39N7FMxe = 3022 + INTEGER(IntKi), PARAMETER :: M39N8FMxe = 3023 + INTEGER(IntKi), PARAMETER :: M39N9FMxe = 3024 + INTEGER(IntKi), PARAMETER :: M40N1FMxe = 3025 + INTEGER(IntKi), PARAMETER :: M40N2FMxe = 3026 + INTEGER(IntKi), PARAMETER :: M40N3FMxe = 3027 + INTEGER(IntKi), PARAMETER :: M40N4FMxe = 3028 + INTEGER(IntKi), PARAMETER :: M40N5FMxe = 3029 + INTEGER(IntKi), PARAMETER :: M40N6FMxe = 3030 + INTEGER(IntKi), PARAMETER :: M40N7FMxe = 3031 + INTEGER(IntKi), PARAMETER :: M40N8FMxe = 3032 + INTEGER(IntKi), PARAMETER :: M40N9FMxe = 3033 + INTEGER(IntKi), PARAMETER :: M41N1FMxe = 3034 + INTEGER(IntKi), PARAMETER :: M41N2FMxe = 3035 + INTEGER(IntKi), PARAMETER :: M41N3FMxe = 3036 + INTEGER(IntKi), PARAMETER :: M41N4FMxe = 3037 + INTEGER(IntKi), PARAMETER :: M41N5FMxe = 3038 + INTEGER(IntKi), PARAMETER :: M41N6FMxe = 3039 + INTEGER(IntKi), PARAMETER :: M41N7FMxe = 3040 + INTEGER(IntKi), PARAMETER :: M41N8FMxe = 3041 + INTEGER(IntKi), PARAMETER :: M41N9FMxe = 3042 + INTEGER(IntKi), PARAMETER :: M42N1FMxe = 3043 + INTEGER(IntKi), PARAMETER :: M42N2FMxe = 3044 + INTEGER(IntKi), PARAMETER :: M42N3FMxe = 3045 + INTEGER(IntKi), PARAMETER :: M42N4FMxe = 3046 + INTEGER(IntKi), PARAMETER :: M42N5FMxe = 3047 + INTEGER(IntKi), PARAMETER :: M42N6FMxe = 3048 + INTEGER(IntKi), PARAMETER :: M42N7FMxe = 3049 + INTEGER(IntKi), PARAMETER :: M42N8FMxe = 3050 + INTEGER(IntKi), PARAMETER :: M42N9FMxe = 3051 + INTEGER(IntKi), PARAMETER :: M43N1FMxe = 3052 + INTEGER(IntKi), PARAMETER :: M43N2FMxe = 3053 + INTEGER(IntKi), PARAMETER :: M43N3FMxe = 3054 + INTEGER(IntKi), PARAMETER :: M43N4FMxe = 3055 + INTEGER(IntKi), PARAMETER :: M43N5FMxe = 3056 + INTEGER(IntKi), PARAMETER :: M43N6FMxe = 3057 + INTEGER(IntKi), PARAMETER :: M43N7FMxe = 3058 + INTEGER(IntKi), PARAMETER :: M43N8FMxe = 3059 + INTEGER(IntKi), PARAMETER :: M43N9FMxe = 3060 + INTEGER(IntKi), PARAMETER :: M44N1FMxe = 3061 + INTEGER(IntKi), PARAMETER :: M44N2FMxe = 3062 + INTEGER(IntKi), PARAMETER :: M44N3FMxe = 3063 + INTEGER(IntKi), PARAMETER :: M44N4FMxe = 3064 + INTEGER(IntKi), PARAMETER :: M44N5FMxe = 3065 + INTEGER(IntKi), PARAMETER :: M44N6FMxe = 3066 + INTEGER(IntKi), PARAMETER :: M44N7FMxe = 3067 + INTEGER(IntKi), PARAMETER :: M44N8FMxe = 3068 + INTEGER(IntKi), PARAMETER :: M44N9FMxe = 3069 + INTEGER(IntKi), PARAMETER :: M45N1FMxe = 3070 + INTEGER(IntKi), PARAMETER :: M45N2FMxe = 3071 + INTEGER(IntKi), PARAMETER :: M45N3FMxe = 3072 + INTEGER(IntKi), PARAMETER :: M45N4FMxe = 3073 + INTEGER(IntKi), PARAMETER :: M45N5FMxe = 3074 + INTEGER(IntKi), PARAMETER :: M45N6FMxe = 3075 + INTEGER(IntKi), PARAMETER :: M45N7FMxe = 3076 + INTEGER(IntKi), PARAMETER :: M45N8FMxe = 3077 + INTEGER(IntKi), PARAMETER :: M45N9FMxe = 3078 + INTEGER(IntKi), PARAMETER :: M46N1FMxe = 3079 + INTEGER(IntKi), PARAMETER :: M46N2FMxe = 3080 + INTEGER(IntKi), PARAMETER :: M46N3FMxe = 3081 + INTEGER(IntKi), PARAMETER :: M46N4FMxe = 3082 + INTEGER(IntKi), PARAMETER :: M46N5FMxe = 3083 + INTEGER(IntKi), PARAMETER :: M46N6FMxe = 3084 + INTEGER(IntKi), PARAMETER :: M46N7FMxe = 3085 + INTEGER(IntKi), PARAMETER :: M46N8FMxe = 3086 + INTEGER(IntKi), PARAMETER :: M46N9FMxe = 3087 + INTEGER(IntKi), PARAMETER :: M47N1FMxe = 3088 + INTEGER(IntKi), PARAMETER :: M47N2FMxe = 3089 + INTEGER(IntKi), PARAMETER :: M47N3FMxe = 3090 + INTEGER(IntKi), PARAMETER :: M47N4FMxe = 3091 + INTEGER(IntKi), PARAMETER :: M47N5FMxe = 3092 + INTEGER(IntKi), PARAMETER :: M47N6FMxe = 3093 + INTEGER(IntKi), PARAMETER :: M47N7FMxe = 3094 + INTEGER(IntKi), PARAMETER :: M47N8FMxe = 3095 + INTEGER(IntKi), PARAMETER :: M47N9FMxe = 3096 + INTEGER(IntKi), PARAMETER :: M48N1FMxe = 3097 + INTEGER(IntKi), PARAMETER :: M48N2FMxe = 3098 + INTEGER(IntKi), PARAMETER :: M48N3FMxe = 3099 + INTEGER(IntKi), PARAMETER :: M48N4FMxe = 3100 + INTEGER(IntKi), PARAMETER :: M48N5FMxe = 3101 + INTEGER(IntKi), PARAMETER :: M48N6FMxe = 3102 + INTEGER(IntKi), PARAMETER :: M48N7FMxe = 3103 + INTEGER(IntKi), PARAMETER :: M48N8FMxe = 3104 + INTEGER(IntKi), PARAMETER :: M48N9FMxe = 3105 + INTEGER(IntKi), PARAMETER :: M49N1FMxe = 3106 + INTEGER(IntKi), PARAMETER :: M49N2FMxe = 3107 + INTEGER(IntKi), PARAMETER :: M49N3FMxe = 3108 + INTEGER(IntKi), PARAMETER :: M49N4FMxe = 3109 + INTEGER(IntKi), PARAMETER :: M49N5FMxe = 3110 + INTEGER(IntKi), PARAMETER :: M49N6FMxe = 3111 + INTEGER(IntKi), PARAMETER :: M49N7FMxe = 3112 + INTEGER(IntKi), PARAMETER :: M49N8FMxe = 3113 + INTEGER(IntKi), PARAMETER :: M49N9FMxe = 3114 + INTEGER(IntKi), PARAMETER :: M50N1FMxe = 3115 + INTEGER(IntKi), PARAMETER :: M50N2FMxe = 3116 + INTEGER(IntKi), PARAMETER :: M50N3FMxe = 3117 + INTEGER(IntKi), PARAMETER :: M50N4FMxe = 3118 + INTEGER(IntKi), PARAMETER :: M50N5FMxe = 3119 + INTEGER(IntKi), PARAMETER :: M50N6FMxe = 3120 + INTEGER(IntKi), PARAMETER :: M50N7FMxe = 3121 + INTEGER(IntKi), PARAMETER :: M50N8FMxe = 3122 + INTEGER(IntKi), PARAMETER :: M50N9FMxe = 3123 + INTEGER(IntKi), PARAMETER :: M51N1FMxe = 3124 + INTEGER(IntKi), PARAMETER :: M51N2FMxe = 3125 + INTEGER(IntKi), PARAMETER :: M51N3FMxe = 3126 + INTEGER(IntKi), PARAMETER :: M51N4FMxe = 3127 + INTEGER(IntKi), PARAMETER :: M51N5FMxe = 3128 + INTEGER(IntKi), PARAMETER :: M51N6FMxe = 3129 + INTEGER(IntKi), PARAMETER :: M51N7FMxe = 3130 + INTEGER(IntKi), PARAMETER :: M51N8FMxe = 3131 + INTEGER(IntKi), PARAMETER :: M51N9FMxe = 3132 + INTEGER(IntKi), PARAMETER :: M52N1FMxe = 3133 + INTEGER(IntKi), PARAMETER :: M52N2FMxe = 3134 + INTEGER(IntKi), PARAMETER :: M52N3FMxe = 3135 + INTEGER(IntKi), PARAMETER :: M52N4FMxe = 3136 + INTEGER(IntKi), PARAMETER :: M52N5FMxe = 3137 + INTEGER(IntKi), PARAMETER :: M52N6FMxe = 3138 + INTEGER(IntKi), PARAMETER :: M52N7FMxe = 3139 + INTEGER(IntKi), PARAMETER :: M52N8FMxe = 3140 + INTEGER(IntKi), PARAMETER :: M52N9FMxe = 3141 + INTEGER(IntKi), PARAMETER :: M53N1FMxe = 3142 + INTEGER(IntKi), PARAMETER :: M53N2FMxe = 3143 + INTEGER(IntKi), PARAMETER :: M53N3FMxe = 3144 + INTEGER(IntKi), PARAMETER :: M53N4FMxe = 3145 + INTEGER(IntKi), PARAMETER :: M53N5FMxe = 3146 + INTEGER(IntKi), PARAMETER :: M53N6FMxe = 3147 + INTEGER(IntKi), PARAMETER :: M53N7FMxe = 3148 + INTEGER(IntKi), PARAMETER :: M53N8FMxe = 3149 + INTEGER(IntKi), PARAMETER :: M53N9FMxe = 3150 + INTEGER(IntKi), PARAMETER :: M54N1FMxe = 3151 + INTEGER(IntKi), PARAMETER :: M54N2FMxe = 3152 + INTEGER(IntKi), PARAMETER :: M54N3FMxe = 3153 + INTEGER(IntKi), PARAMETER :: M54N4FMxe = 3154 + INTEGER(IntKi), PARAMETER :: M54N5FMxe = 3155 + INTEGER(IntKi), PARAMETER :: M54N6FMxe = 3156 + INTEGER(IntKi), PARAMETER :: M54N7FMxe = 3157 + INTEGER(IntKi), PARAMETER :: M54N8FMxe = 3158 + INTEGER(IntKi), PARAMETER :: M54N9FMxe = 3159 + INTEGER(IntKi), PARAMETER :: M55N1FMxe = 3160 + INTEGER(IntKi), PARAMETER :: M55N2FMxe = 3161 + INTEGER(IntKi), PARAMETER :: M55N3FMxe = 3162 + INTEGER(IntKi), PARAMETER :: M55N4FMxe = 3163 + INTEGER(IntKi), PARAMETER :: M55N5FMxe = 3164 + INTEGER(IntKi), PARAMETER :: M55N6FMxe = 3165 + INTEGER(IntKi), PARAMETER :: M55N7FMxe = 3166 + INTEGER(IntKi), PARAMETER :: M55N8FMxe = 3167 + INTEGER(IntKi), PARAMETER :: M55N9FMxe = 3168 + INTEGER(IntKi), PARAMETER :: M56N1FMxe = 3169 + INTEGER(IntKi), PARAMETER :: M56N2FMxe = 3170 + INTEGER(IntKi), PARAMETER :: M56N3FMxe = 3171 + INTEGER(IntKi), PARAMETER :: M56N4FMxe = 3172 + INTEGER(IntKi), PARAMETER :: M56N5FMxe = 3173 + INTEGER(IntKi), PARAMETER :: M56N6FMxe = 3174 + INTEGER(IntKi), PARAMETER :: M56N7FMxe = 3175 + INTEGER(IntKi), PARAMETER :: M56N8FMxe = 3176 + INTEGER(IntKi), PARAMETER :: M56N9FMxe = 3177 + INTEGER(IntKi), PARAMETER :: M57N1FMxe = 3178 + INTEGER(IntKi), PARAMETER :: M57N2FMxe = 3179 + INTEGER(IntKi), PARAMETER :: M57N3FMxe = 3180 + INTEGER(IntKi), PARAMETER :: M57N4FMxe = 3181 + INTEGER(IntKi), PARAMETER :: M57N5FMxe = 3182 + INTEGER(IntKi), PARAMETER :: M57N6FMxe = 3183 + INTEGER(IntKi), PARAMETER :: M57N7FMxe = 3184 + INTEGER(IntKi), PARAMETER :: M57N8FMxe = 3185 + INTEGER(IntKi), PARAMETER :: M57N9FMxe = 3186 + INTEGER(IntKi), PARAMETER :: M58N1FMxe = 3187 + INTEGER(IntKi), PARAMETER :: M58N2FMxe = 3188 + INTEGER(IntKi), PARAMETER :: M58N3FMxe = 3189 + INTEGER(IntKi), PARAMETER :: M58N4FMxe = 3190 + INTEGER(IntKi), PARAMETER :: M58N5FMxe = 3191 + INTEGER(IntKi), PARAMETER :: M58N6FMxe = 3192 + INTEGER(IntKi), PARAMETER :: M58N7FMxe = 3193 + INTEGER(IntKi), PARAMETER :: M58N8FMxe = 3194 + INTEGER(IntKi), PARAMETER :: M58N9FMxe = 3195 + INTEGER(IntKi), PARAMETER :: M59N1FMxe = 3196 + INTEGER(IntKi), PARAMETER :: M59N2FMxe = 3197 + INTEGER(IntKi), PARAMETER :: M59N3FMxe = 3198 + INTEGER(IntKi), PARAMETER :: M59N4FMxe = 3199 + INTEGER(IntKi), PARAMETER :: M59N5FMxe = 3200 + INTEGER(IntKi), PARAMETER :: M59N6FMxe = 3201 + INTEGER(IntKi), PARAMETER :: M59N7FMxe = 3202 + INTEGER(IntKi), PARAMETER :: M59N8FMxe = 3203 + INTEGER(IntKi), PARAMETER :: M59N9FMxe = 3204 + INTEGER(IntKi), PARAMETER :: M60N1FMxe = 3205 + INTEGER(IntKi), PARAMETER :: M60N2FMxe = 3206 + INTEGER(IntKi), PARAMETER :: M60N3FMxe = 3207 + INTEGER(IntKi), PARAMETER :: M60N4FMxe = 3208 + INTEGER(IntKi), PARAMETER :: M60N5FMxe = 3209 + INTEGER(IntKi), PARAMETER :: M60N6FMxe = 3210 + INTEGER(IntKi), PARAMETER :: M60N7FMxe = 3211 + INTEGER(IntKi), PARAMETER :: M60N8FMxe = 3212 + INTEGER(IntKi), PARAMETER :: M60N9FMxe = 3213 + INTEGER(IntKi), PARAMETER :: M61N1FMxe = 3214 + INTEGER(IntKi), PARAMETER :: M61N2FMxe = 3215 + INTEGER(IntKi), PARAMETER :: M61N3FMxe = 3216 + INTEGER(IntKi), PARAMETER :: M61N4FMxe = 3217 + INTEGER(IntKi), PARAMETER :: M61N5FMxe = 3218 + INTEGER(IntKi), PARAMETER :: M61N6FMxe = 3219 + INTEGER(IntKi), PARAMETER :: M61N7FMxe = 3220 + INTEGER(IntKi), PARAMETER :: M61N8FMxe = 3221 + INTEGER(IntKi), PARAMETER :: M61N9FMxe = 3222 + INTEGER(IntKi), PARAMETER :: M62N1FMxe = 3223 + INTEGER(IntKi), PARAMETER :: M62N2FMxe = 3224 + INTEGER(IntKi), PARAMETER :: M62N3FMxe = 3225 + INTEGER(IntKi), PARAMETER :: M62N4FMxe = 3226 + INTEGER(IntKi), PARAMETER :: M62N5FMxe = 3227 + INTEGER(IntKi), PARAMETER :: M62N6FMxe = 3228 + INTEGER(IntKi), PARAMETER :: M62N7FMxe = 3229 + INTEGER(IntKi), PARAMETER :: M62N8FMxe = 3230 + INTEGER(IntKi), PARAMETER :: M62N9FMxe = 3231 + INTEGER(IntKi), PARAMETER :: M63N1FMxe = 3232 + INTEGER(IntKi), PARAMETER :: M63N2FMxe = 3233 + INTEGER(IntKi), PARAMETER :: M63N3FMxe = 3234 + INTEGER(IntKi), PARAMETER :: M63N4FMxe = 3235 + INTEGER(IntKi), PARAMETER :: M63N5FMxe = 3236 + INTEGER(IntKi), PARAMETER :: M63N6FMxe = 3237 + INTEGER(IntKi), PARAMETER :: M63N7FMxe = 3238 + INTEGER(IntKi), PARAMETER :: M63N8FMxe = 3239 + INTEGER(IntKi), PARAMETER :: M63N9FMxe = 3240 + INTEGER(IntKi), PARAMETER :: M64N1FMxe = 3241 + INTEGER(IntKi), PARAMETER :: M64N2FMxe = 3242 + INTEGER(IntKi), PARAMETER :: M64N3FMxe = 3243 + INTEGER(IntKi), PARAMETER :: M64N4FMxe = 3244 + INTEGER(IntKi), PARAMETER :: M64N5FMxe = 3245 + INTEGER(IntKi), PARAMETER :: M64N6FMxe = 3246 + INTEGER(IntKi), PARAMETER :: M64N7FMxe = 3247 + INTEGER(IntKi), PARAMETER :: M64N8FMxe = 3248 + INTEGER(IntKi), PARAMETER :: M64N9FMxe = 3249 + INTEGER(IntKi), PARAMETER :: M65N1FMxe = 3250 + INTEGER(IntKi), PARAMETER :: M65N2FMxe = 3251 + INTEGER(IntKi), PARAMETER :: M65N3FMxe = 3252 + INTEGER(IntKi), PARAMETER :: M65N4FMxe = 3253 + INTEGER(IntKi), PARAMETER :: M65N5FMxe = 3254 + INTEGER(IntKi), PARAMETER :: M65N6FMxe = 3255 + INTEGER(IntKi), PARAMETER :: M65N7FMxe = 3256 + INTEGER(IntKi), PARAMETER :: M65N8FMxe = 3257 + INTEGER(IntKi), PARAMETER :: M65N9FMxe = 3258 + INTEGER(IntKi), PARAMETER :: M66N1FMxe = 3259 + INTEGER(IntKi), PARAMETER :: M66N2FMxe = 3260 + INTEGER(IntKi), PARAMETER :: M66N3FMxe = 3261 + INTEGER(IntKi), PARAMETER :: M66N4FMxe = 3262 + INTEGER(IntKi), PARAMETER :: M66N5FMxe = 3263 + INTEGER(IntKi), PARAMETER :: M66N6FMxe = 3264 + INTEGER(IntKi), PARAMETER :: M66N7FMxe = 3265 + INTEGER(IntKi), PARAMETER :: M66N8FMxe = 3266 + INTEGER(IntKi), PARAMETER :: M66N9FMxe = 3267 + INTEGER(IntKi), PARAMETER :: M67N1FMxe = 3268 + INTEGER(IntKi), PARAMETER :: M67N2FMxe = 3269 + INTEGER(IntKi), PARAMETER :: M67N3FMxe = 3270 + INTEGER(IntKi), PARAMETER :: M67N4FMxe = 3271 + INTEGER(IntKi), PARAMETER :: M67N5FMxe = 3272 + INTEGER(IntKi), PARAMETER :: M67N6FMxe = 3273 + INTEGER(IntKi), PARAMETER :: M67N7FMxe = 3274 + INTEGER(IntKi), PARAMETER :: M67N8FMxe = 3275 + INTEGER(IntKi), PARAMETER :: M67N9FMxe = 3276 + INTEGER(IntKi), PARAMETER :: M68N1FMxe = 3277 + INTEGER(IntKi), PARAMETER :: M68N2FMxe = 3278 + INTEGER(IntKi), PARAMETER :: M68N3FMxe = 3279 + INTEGER(IntKi), PARAMETER :: M68N4FMxe = 3280 + INTEGER(IntKi), PARAMETER :: M68N5FMxe = 3281 + INTEGER(IntKi), PARAMETER :: M68N6FMxe = 3282 + INTEGER(IntKi), PARAMETER :: M68N7FMxe = 3283 + INTEGER(IntKi), PARAMETER :: M68N8FMxe = 3284 + INTEGER(IntKi), PARAMETER :: M68N9FMxe = 3285 + INTEGER(IntKi), PARAMETER :: M69N1FMxe = 3286 + INTEGER(IntKi), PARAMETER :: M69N2FMxe = 3287 + INTEGER(IntKi), PARAMETER :: M69N3FMxe = 3288 + INTEGER(IntKi), PARAMETER :: M69N4FMxe = 3289 + INTEGER(IntKi), PARAMETER :: M69N5FMxe = 3290 + INTEGER(IntKi), PARAMETER :: M69N6FMxe = 3291 + INTEGER(IntKi), PARAMETER :: M69N7FMxe = 3292 + INTEGER(IntKi), PARAMETER :: M69N8FMxe = 3293 + INTEGER(IntKi), PARAMETER :: M69N9FMxe = 3294 + INTEGER(IntKi), PARAMETER :: M70N1FMxe = 3295 + INTEGER(IntKi), PARAMETER :: M70N2FMxe = 3296 + INTEGER(IntKi), PARAMETER :: M70N3FMxe = 3297 + INTEGER(IntKi), PARAMETER :: M70N4FMxe = 3298 + INTEGER(IntKi), PARAMETER :: M70N5FMxe = 3299 + INTEGER(IntKi), PARAMETER :: M70N6FMxe = 3300 + INTEGER(IntKi), PARAMETER :: M70N7FMxe = 3301 + INTEGER(IntKi), PARAMETER :: M70N8FMxe = 3302 + INTEGER(IntKi), PARAMETER :: M70N9FMxe = 3303 + INTEGER(IntKi), PARAMETER :: M71N1FMxe = 3304 + INTEGER(IntKi), PARAMETER :: M71N2FMxe = 3305 + INTEGER(IntKi), PARAMETER :: M71N3FMxe = 3306 + INTEGER(IntKi), PARAMETER :: M71N4FMxe = 3307 + INTEGER(IntKi), PARAMETER :: M71N5FMxe = 3308 + INTEGER(IntKi), PARAMETER :: M71N6FMxe = 3309 + INTEGER(IntKi), PARAMETER :: M71N7FMxe = 3310 + INTEGER(IntKi), PARAMETER :: M71N8FMxe = 3311 + INTEGER(IntKi), PARAMETER :: M71N9FMxe = 3312 + INTEGER(IntKi), PARAMETER :: M72N1FMxe = 3313 + INTEGER(IntKi), PARAMETER :: M72N2FMxe = 3314 + INTEGER(IntKi), PARAMETER :: M72N3FMxe = 3315 + INTEGER(IntKi), PARAMETER :: M72N4FMxe = 3316 + INTEGER(IntKi), PARAMETER :: M72N5FMxe = 3317 + INTEGER(IntKi), PARAMETER :: M72N6FMxe = 3318 + INTEGER(IntKi), PARAMETER :: M72N7FMxe = 3319 + INTEGER(IntKi), PARAMETER :: M72N8FMxe = 3320 + INTEGER(IntKi), PARAMETER :: M72N9FMxe = 3321 + INTEGER(IntKi), PARAMETER :: M73N1FMxe = 3322 + INTEGER(IntKi), PARAMETER :: M73N2FMxe = 3323 + INTEGER(IntKi), PARAMETER :: M73N3FMxe = 3324 + INTEGER(IntKi), PARAMETER :: M73N4FMxe = 3325 + INTEGER(IntKi), PARAMETER :: M73N5FMxe = 3326 + INTEGER(IntKi), PARAMETER :: M73N6FMxe = 3327 + INTEGER(IntKi), PARAMETER :: M73N7FMxe = 3328 + INTEGER(IntKi), PARAMETER :: M73N8FMxe = 3329 + INTEGER(IntKi), PARAMETER :: M73N9FMxe = 3330 + INTEGER(IntKi), PARAMETER :: M74N1FMxe = 3331 + INTEGER(IntKi), PARAMETER :: M74N2FMxe = 3332 + INTEGER(IntKi), PARAMETER :: M74N3FMxe = 3333 + INTEGER(IntKi), PARAMETER :: M74N4FMxe = 3334 + INTEGER(IntKi), PARAMETER :: M74N5FMxe = 3335 + INTEGER(IntKi), PARAMETER :: M74N6FMxe = 3336 + INTEGER(IntKi), PARAMETER :: M74N7FMxe = 3337 + INTEGER(IntKi), PARAMETER :: M74N8FMxe = 3338 + INTEGER(IntKi), PARAMETER :: M74N9FMxe = 3339 + INTEGER(IntKi), PARAMETER :: M75N1FMxe = 3340 + INTEGER(IntKi), PARAMETER :: M75N2FMxe = 3341 + INTEGER(IntKi), PARAMETER :: M75N3FMxe = 3342 + INTEGER(IntKi), PARAMETER :: M75N4FMxe = 3343 + INTEGER(IntKi), PARAMETER :: M75N5FMxe = 3344 + INTEGER(IntKi), PARAMETER :: M75N6FMxe = 3345 + INTEGER(IntKi), PARAMETER :: M75N7FMxe = 3346 + INTEGER(IntKi), PARAMETER :: M75N8FMxe = 3347 + INTEGER(IntKi), PARAMETER :: M75N9FMxe = 3348 + INTEGER(IntKi), PARAMETER :: M76N1FMxe = 3349 + INTEGER(IntKi), PARAMETER :: M76N2FMxe = 3350 + INTEGER(IntKi), PARAMETER :: M76N3FMxe = 3351 + INTEGER(IntKi), PARAMETER :: M76N4FMxe = 3352 + INTEGER(IntKi), PARAMETER :: M76N5FMxe = 3353 + INTEGER(IntKi), PARAMETER :: M76N6FMxe = 3354 + INTEGER(IntKi), PARAMETER :: M76N7FMxe = 3355 + INTEGER(IntKi), PARAMETER :: M76N8FMxe = 3356 + INTEGER(IntKi), PARAMETER :: M76N9FMxe = 3357 + INTEGER(IntKi), PARAMETER :: M77N1FMxe = 3358 + INTEGER(IntKi), PARAMETER :: M77N2FMxe = 3359 + INTEGER(IntKi), PARAMETER :: M77N3FMxe = 3360 + INTEGER(IntKi), PARAMETER :: M77N4FMxe = 3361 + INTEGER(IntKi), PARAMETER :: M77N5FMxe = 3362 + INTEGER(IntKi), PARAMETER :: M77N6FMxe = 3363 + INTEGER(IntKi), PARAMETER :: M77N7FMxe = 3364 + INTEGER(IntKi), PARAMETER :: M77N8FMxe = 3365 + INTEGER(IntKi), PARAMETER :: M77N9FMxe = 3366 + INTEGER(IntKi), PARAMETER :: M78N1FMxe = 3367 + INTEGER(IntKi), PARAMETER :: M78N2FMxe = 3368 + INTEGER(IntKi), PARAMETER :: M78N3FMxe = 3369 + INTEGER(IntKi), PARAMETER :: M78N4FMxe = 3370 + INTEGER(IntKi), PARAMETER :: M78N5FMxe = 3371 + INTEGER(IntKi), PARAMETER :: M78N6FMxe = 3372 + INTEGER(IntKi), PARAMETER :: M78N7FMxe = 3373 + INTEGER(IntKi), PARAMETER :: M78N8FMxe = 3374 + INTEGER(IntKi), PARAMETER :: M78N9FMxe = 3375 + INTEGER(IntKi), PARAMETER :: M79N1FMxe = 3376 + INTEGER(IntKi), PARAMETER :: M79N2FMxe = 3377 + INTEGER(IntKi), PARAMETER :: M79N3FMxe = 3378 + INTEGER(IntKi), PARAMETER :: M79N4FMxe = 3379 + INTEGER(IntKi), PARAMETER :: M79N5FMxe = 3380 + INTEGER(IntKi), PARAMETER :: M79N6FMxe = 3381 + INTEGER(IntKi), PARAMETER :: M79N7FMxe = 3382 + INTEGER(IntKi), PARAMETER :: M79N8FMxe = 3383 + INTEGER(IntKi), PARAMETER :: M79N9FMxe = 3384 + INTEGER(IntKi), PARAMETER :: M80N1FMxe = 3385 + INTEGER(IntKi), PARAMETER :: M80N2FMxe = 3386 + INTEGER(IntKi), PARAMETER :: M80N3FMxe = 3387 + INTEGER(IntKi), PARAMETER :: M80N4FMxe = 3388 + INTEGER(IntKi), PARAMETER :: M80N5FMxe = 3389 + INTEGER(IntKi), PARAMETER :: M80N6FMxe = 3390 + INTEGER(IntKi), PARAMETER :: M80N7FMxe = 3391 + INTEGER(IntKi), PARAMETER :: M80N8FMxe = 3392 + INTEGER(IntKi), PARAMETER :: M80N9FMxe = 3393 + INTEGER(IntKi), PARAMETER :: M81N1FMxe = 3394 + INTEGER(IntKi), PARAMETER :: M81N2FMxe = 3395 + INTEGER(IntKi), PARAMETER :: M81N3FMxe = 3396 + INTEGER(IntKi), PARAMETER :: M81N4FMxe = 3397 + INTEGER(IntKi), PARAMETER :: M81N5FMxe = 3398 + INTEGER(IntKi), PARAMETER :: M81N6FMxe = 3399 + INTEGER(IntKi), PARAMETER :: M81N7FMxe = 3400 + INTEGER(IntKi), PARAMETER :: M81N8FMxe = 3401 + INTEGER(IntKi), PARAMETER :: M81N9FMxe = 3402 + INTEGER(IntKi), PARAMETER :: M82N1FMxe = 3403 + INTEGER(IntKi), PARAMETER :: M82N2FMxe = 3404 + INTEGER(IntKi), PARAMETER :: M82N3FMxe = 3405 + INTEGER(IntKi), PARAMETER :: M82N4FMxe = 3406 + INTEGER(IntKi), PARAMETER :: M82N5FMxe = 3407 + INTEGER(IntKi), PARAMETER :: M82N6FMxe = 3408 + INTEGER(IntKi), PARAMETER :: M82N7FMxe = 3409 + INTEGER(IntKi), PARAMETER :: M82N8FMxe = 3410 + INTEGER(IntKi), PARAMETER :: M82N9FMxe = 3411 + INTEGER(IntKi), PARAMETER :: M83N1FMxe = 3412 + INTEGER(IntKi), PARAMETER :: M83N2FMxe = 3413 + INTEGER(IntKi), PARAMETER :: M83N3FMxe = 3414 + INTEGER(IntKi), PARAMETER :: M83N4FMxe = 3415 + INTEGER(IntKi), PARAMETER :: M83N5FMxe = 3416 + INTEGER(IntKi), PARAMETER :: M83N6FMxe = 3417 + INTEGER(IntKi), PARAMETER :: M83N7FMxe = 3418 + INTEGER(IntKi), PARAMETER :: M83N8FMxe = 3419 + INTEGER(IntKi), PARAMETER :: M83N9FMxe = 3420 + INTEGER(IntKi), PARAMETER :: M84N1FMxe = 3421 + INTEGER(IntKi), PARAMETER :: M84N2FMxe = 3422 + INTEGER(IntKi), PARAMETER :: M84N3FMxe = 3423 + INTEGER(IntKi), PARAMETER :: M84N4FMxe = 3424 + INTEGER(IntKi), PARAMETER :: M84N5FMxe = 3425 + INTEGER(IntKi), PARAMETER :: M84N6FMxe = 3426 + INTEGER(IntKi), PARAMETER :: M84N7FMxe = 3427 + INTEGER(IntKi), PARAMETER :: M84N8FMxe = 3428 + INTEGER(IntKi), PARAMETER :: M84N9FMxe = 3429 + INTEGER(IntKi), PARAMETER :: M85N1FMxe = 3430 + INTEGER(IntKi), PARAMETER :: M85N2FMxe = 3431 + INTEGER(IntKi), PARAMETER :: M85N3FMxe = 3432 + INTEGER(IntKi), PARAMETER :: M85N4FMxe = 3433 + INTEGER(IntKi), PARAMETER :: M85N5FMxe = 3434 + INTEGER(IntKi), PARAMETER :: M85N6FMxe = 3435 + INTEGER(IntKi), PARAMETER :: M85N7FMxe = 3436 + INTEGER(IntKi), PARAMETER :: M85N8FMxe = 3437 + INTEGER(IntKi), PARAMETER :: M85N9FMxe = 3438 + INTEGER(IntKi), PARAMETER :: M86N1FMxe = 3439 + INTEGER(IntKi), PARAMETER :: M86N2FMxe = 3440 + INTEGER(IntKi), PARAMETER :: M86N3FMxe = 3441 + INTEGER(IntKi), PARAMETER :: M86N4FMxe = 3442 + INTEGER(IntKi), PARAMETER :: M86N5FMxe = 3443 + INTEGER(IntKi), PARAMETER :: M86N6FMxe = 3444 + INTEGER(IntKi), PARAMETER :: M86N7FMxe = 3445 + INTEGER(IntKi), PARAMETER :: M86N8FMxe = 3446 + INTEGER(IntKi), PARAMETER :: M86N9FMxe = 3447 + INTEGER(IntKi), PARAMETER :: M87N1FMxe = 3448 + INTEGER(IntKi), PARAMETER :: M87N2FMxe = 3449 + INTEGER(IntKi), PARAMETER :: M87N3FMxe = 3450 + INTEGER(IntKi), PARAMETER :: M87N4FMxe = 3451 + INTEGER(IntKi), PARAMETER :: M87N5FMxe = 3452 + INTEGER(IntKi), PARAMETER :: M87N6FMxe = 3453 + INTEGER(IntKi), PARAMETER :: M87N7FMxe = 3454 + INTEGER(IntKi), PARAMETER :: M87N8FMxe = 3455 + INTEGER(IntKi), PARAMETER :: M87N9FMxe = 3456 + INTEGER(IntKi), PARAMETER :: M88N1FMxe = 3457 + INTEGER(IntKi), PARAMETER :: M88N2FMxe = 3458 + INTEGER(IntKi), PARAMETER :: M88N3FMxe = 3459 + INTEGER(IntKi), PARAMETER :: M88N4FMxe = 3460 + INTEGER(IntKi), PARAMETER :: M88N5FMxe = 3461 + INTEGER(IntKi), PARAMETER :: M88N6FMxe = 3462 + INTEGER(IntKi), PARAMETER :: M88N7FMxe = 3463 + INTEGER(IntKi), PARAMETER :: M88N8FMxe = 3464 + INTEGER(IntKi), PARAMETER :: M88N9FMxe = 3465 + INTEGER(IntKi), PARAMETER :: M89N1FMxe = 3466 + INTEGER(IntKi), PARAMETER :: M89N2FMxe = 3467 + INTEGER(IntKi), PARAMETER :: M89N3FMxe = 3468 + INTEGER(IntKi), PARAMETER :: M89N4FMxe = 3469 + INTEGER(IntKi), PARAMETER :: M89N5FMxe = 3470 + INTEGER(IntKi), PARAMETER :: M89N6FMxe = 3471 + INTEGER(IntKi), PARAMETER :: M89N7FMxe = 3472 + INTEGER(IntKi), PARAMETER :: M89N8FMxe = 3473 + INTEGER(IntKi), PARAMETER :: M89N9FMxe = 3474 + INTEGER(IntKi), PARAMETER :: M90N1FMxe = 3475 + INTEGER(IntKi), PARAMETER :: M90N2FMxe = 3476 + INTEGER(IntKi), PARAMETER :: M90N3FMxe = 3477 + INTEGER(IntKi), PARAMETER :: M90N4FMxe = 3478 + INTEGER(IntKi), PARAMETER :: M90N5FMxe = 3479 + INTEGER(IntKi), PARAMETER :: M90N6FMxe = 3480 + INTEGER(IntKi), PARAMETER :: M90N7FMxe = 3481 + INTEGER(IntKi), PARAMETER :: M90N8FMxe = 3482 + INTEGER(IntKi), PARAMETER :: M90N9FMxe = 3483 + INTEGER(IntKi), PARAMETER :: M91N1FMxe = 3484 + INTEGER(IntKi), PARAMETER :: M91N2FMxe = 3485 + INTEGER(IntKi), PARAMETER :: M91N3FMxe = 3486 + INTEGER(IntKi), PARAMETER :: M91N4FMxe = 3487 + INTEGER(IntKi), PARAMETER :: M91N5FMxe = 3488 + INTEGER(IntKi), PARAMETER :: M91N6FMxe = 3489 + INTEGER(IntKi), PARAMETER :: M91N7FMxe = 3490 + INTEGER(IntKi), PARAMETER :: M91N8FMxe = 3491 + INTEGER(IntKi), PARAMETER :: M91N9FMxe = 3492 + INTEGER(IntKi), PARAMETER :: M92N1FMxe = 3493 + INTEGER(IntKi), PARAMETER :: M92N2FMxe = 3494 + INTEGER(IntKi), PARAMETER :: M92N3FMxe = 3495 + INTEGER(IntKi), PARAMETER :: M92N4FMxe = 3496 + INTEGER(IntKi), PARAMETER :: M92N5FMxe = 3497 + INTEGER(IntKi), PARAMETER :: M92N6FMxe = 3498 + INTEGER(IntKi), PARAMETER :: M92N7FMxe = 3499 + INTEGER(IntKi), PARAMETER :: M92N8FMxe = 3500 + INTEGER(IntKi), PARAMETER :: M92N9FMxe = 3501 + INTEGER(IntKi), PARAMETER :: M93N1FMxe = 3502 + INTEGER(IntKi), PARAMETER :: M93N2FMxe = 3503 + INTEGER(IntKi), PARAMETER :: M93N3FMxe = 3504 + INTEGER(IntKi), PARAMETER :: M93N4FMxe = 3505 + INTEGER(IntKi), PARAMETER :: M93N5FMxe = 3506 + INTEGER(IntKi), PARAMETER :: M93N6FMxe = 3507 + INTEGER(IntKi), PARAMETER :: M93N7FMxe = 3508 + INTEGER(IntKi), PARAMETER :: M93N8FMxe = 3509 + INTEGER(IntKi), PARAMETER :: M93N9FMxe = 3510 + INTEGER(IntKi), PARAMETER :: M94N1FMxe = 3511 + INTEGER(IntKi), PARAMETER :: M94N2FMxe = 3512 + INTEGER(IntKi), PARAMETER :: M94N3FMxe = 3513 + INTEGER(IntKi), PARAMETER :: M94N4FMxe = 3514 + INTEGER(IntKi), PARAMETER :: M94N5FMxe = 3515 + INTEGER(IntKi), PARAMETER :: M94N6FMxe = 3516 + INTEGER(IntKi), PARAMETER :: M94N7FMxe = 3517 + INTEGER(IntKi), PARAMETER :: M94N8FMxe = 3518 + INTEGER(IntKi), PARAMETER :: M94N9FMxe = 3519 + INTEGER(IntKi), PARAMETER :: M95N1FMxe = 3520 + INTEGER(IntKi), PARAMETER :: M95N2FMxe = 3521 + INTEGER(IntKi), PARAMETER :: M95N3FMxe = 3522 + INTEGER(IntKi), PARAMETER :: M95N4FMxe = 3523 + INTEGER(IntKi), PARAMETER :: M95N5FMxe = 3524 + INTEGER(IntKi), PARAMETER :: M95N6FMxe = 3525 + INTEGER(IntKi), PARAMETER :: M95N7FMxe = 3526 + INTEGER(IntKi), PARAMETER :: M95N8FMxe = 3527 + INTEGER(IntKi), PARAMETER :: M95N9FMxe = 3528 + INTEGER(IntKi), PARAMETER :: M96N1FMxe = 3529 + INTEGER(IntKi), PARAMETER :: M96N2FMxe = 3530 + INTEGER(IntKi), PARAMETER :: M96N3FMxe = 3531 + INTEGER(IntKi), PARAMETER :: M96N4FMxe = 3532 + INTEGER(IntKi), PARAMETER :: M96N5FMxe = 3533 + INTEGER(IntKi), PARAMETER :: M96N6FMxe = 3534 + INTEGER(IntKi), PARAMETER :: M96N7FMxe = 3535 + INTEGER(IntKi), PARAMETER :: M96N8FMxe = 3536 + INTEGER(IntKi), PARAMETER :: M96N9FMxe = 3537 + INTEGER(IntKi), PARAMETER :: M97N1FMxe = 3538 + INTEGER(IntKi), PARAMETER :: M97N2FMxe = 3539 + INTEGER(IntKi), PARAMETER :: M97N3FMxe = 3540 + INTEGER(IntKi), PARAMETER :: M97N4FMxe = 3541 + INTEGER(IntKi), PARAMETER :: M97N5FMxe = 3542 + INTEGER(IntKi), PARAMETER :: M97N6FMxe = 3543 + INTEGER(IntKi), PARAMETER :: M97N7FMxe = 3544 + INTEGER(IntKi), PARAMETER :: M97N8FMxe = 3545 + INTEGER(IntKi), PARAMETER :: M97N9FMxe = 3546 + INTEGER(IntKi), PARAMETER :: M98N1FMxe = 3547 + INTEGER(IntKi), PARAMETER :: M98N2FMxe = 3548 + INTEGER(IntKi), PARAMETER :: M98N3FMxe = 3549 + INTEGER(IntKi), PARAMETER :: M98N4FMxe = 3550 + INTEGER(IntKi), PARAMETER :: M98N5FMxe = 3551 + INTEGER(IntKi), PARAMETER :: M98N6FMxe = 3552 + INTEGER(IntKi), PARAMETER :: M98N7FMxe = 3553 + INTEGER(IntKi), PARAMETER :: M98N8FMxe = 3554 + INTEGER(IntKi), PARAMETER :: M98N9FMxe = 3555 + INTEGER(IntKi), PARAMETER :: M99N1FMxe = 3556 + INTEGER(IntKi), PARAMETER :: M99N2FMxe = 3557 + INTEGER(IntKi), PARAMETER :: M99N3FMxe = 3558 + INTEGER(IntKi), PARAMETER :: M99N4FMxe = 3559 + INTEGER(IntKi), PARAMETER :: M99N5FMxe = 3560 + INTEGER(IntKi), PARAMETER :: M99N6FMxe = 3561 + INTEGER(IntKi), PARAMETER :: M99N7FMxe = 3562 + INTEGER(IntKi), PARAMETER :: M99N8FMxe = 3563 + INTEGER(IntKi), PARAMETER :: M99N9FMxe = 3564 + INTEGER(IntKi), PARAMETER :: M01N1FMye = 3565 + INTEGER(IntKi), PARAMETER :: M01N2FMye = 3566 + INTEGER(IntKi), PARAMETER :: M01N3FMye = 3567 + INTEGER(IntKi), PARAMETER :: M01N4FMye = 3568 + INTEGER(IntKi), PARAMETER :: M01N5FMye = 3569 + INTEGER(IntKi), PARAMETER :: M01N6FMye = 3570 + INTEGER(IntKi), PARAMETER :: M01N7FMye = 3571 + INTEGER(IntKi), PARAMETER :: M01N8FMye = 3572 + INTEGER(IntKi), PARAMETER :: M01N9FMye = 3573 + INTEGER(IntKi), PARAMETER :: M02N1FMye = 3574 + INTEGER(IntKi), PARAMETER :: M02N2FMye = 3575 + INTEGER(IntKi), PARAMETER :: M02N3FMye = 3576 + INTEGER(IntKi), PARAMETER :: M02N4FMye = 3577 + INTEGER(IntKi), PARAMETER :: M02N5FMye = 3578 + INTEGER(IntKi), PARAMETER :: M02N6FMye = 3579 + INTEGER(IntKi), PARAMETER :: M02N7FMye = 3580 + INTEGER(IntKi), PARAMETER :: M02N8FMye = 3581 + INTEGER(IntKi), PARAMETER :: M02N9FMye = 3582 + INTEGER(IntKi), PARAMETER :: M03N1FMye = 3583 + INTEGER(IntKi), PARAMETER :: M03N2FMye = 3584 + INTEGER(IntKi), PARAMETER :: M03N3FMye = 3585 + INTEGER(IntKi), PARAMETER :: M03N4FMye = 3586 + INTEGER(IntKi), PARAMETER :: M03N5FMye = 3587 + INTEGER(IntKi), PARAMETER :: M03N6FMye = 3588 + INTEGER(IntKi), PARAMETER :: M03N7FMye = 3589 + INTEGER(IntKi), PARAMETER :: M03N8FMye = 3590 + INTEGER(IntKi), PARAMETER :: M03N9FMye = 3591 + INTEGER(IntKi), PARAMETER :: M04N1FMye = 3592 + INTEGER(IntKi), PARAMETER :: M04N2FMye = 3593 + INTEGER(IntKi), PARAMETER :: M04N3FMye = 3594 + INTEGER(IntKi), PARAMETER :: M04N4FMye = 3595 + INTEGER(IntKi), PARAMETER :: M04N5FMye = 3596 + INTEGER(IntKi), PARAMETER :: M04N6FMye = 3597 + INTEGER(IntKi), PARAMETER :: M04N7FMye = 3598 + INTEGER(IntKi), PARAMETER :: M04N8FMye = 3599 + INTEGER(IntKi), PARAMETER :: M04N9FMye = 3600 + INTEGER(IntKi), PARAMETER :: M05N1FMye = 3601 + INTEGER(IntKi), PARAMETER :: M05N2FMye = 3602 + INTEGER(IntKi), PARAMETER :: M05N3FMye = 3603 + INTEGER(IntKi), PARAMETER :: M05N4FMye = 3604 + INTEGER(IntKi), PARAMETER :: M05N5FMye = 3605 + INTEGER(IntKi), PARAMETER :: M05N6FMye = 3606 + INTEGER(IntKi), PARAMETER :: M05N7FMye = 3607 + INTEGER(IntKi), PARAMETER :: M05N8FMye = 3608 + INTEGER(IntKi), PARAMETER :: M05N9FMye = 3609 + INTEGER(IntKi), PARAMETER :: M06N1FMye = 3610 + INTEGER(IntKi), PARAMETER :: M06N2FMye = 3611 + INTEGER(IntKi), PARAMETER :: M06N3FMye = 3612 + INTEGER(IntKi), PARAMETER :: M06N4FMye = 3613 + INTEGER(IntKi), PARAMETER :: M06N5FMye = 3614 + INTEGER(IntKi), PARAMETER :: M06N6FMye = 3615 + INTEGER(IntKi), PARAMETER :: M06N7FMye = 3616 + INTEGER(IntKi), PARAMETER :: M06N8FMye = 3617 + INTEGER(IntKi), PARAMETER :: M06N9FMye = 3618 + INTEGER(IntKi), PARAMETER :: M07N1FMye = 3619 + INTEGER(IntKi), PARAMETER :: M07N2FMye = 3620 + INTEGER(IntKi), PARAMETER :: M07N3FMye = 3621 + INTEGER(IntKi), PARAMETER :: M07N4FMye = 3622 + INTEGER(IntKi), PARAMETER :: M07N5FMye = 3623 + INTEGER(IntKi), PARAMETER :: M07N6FMye = 3624 + INTEGER(IntKi), PARAMETER :: M07N7FMye = 3625 + INTEGER(IntKi), PARAMETER :: M07N8FMye = 3626 + INTEGER(IntKi), PARAMETER :: M07N9FMye = 3627 + INTEGER(IntKi), PARAMETER :: M08N1FMye = 3628 + INTEGER(IntKi), PARAMETER :: M08N2FMye = 3629 + INTEGER(IntKi), PARAMETER :: M08N3FMye = 3630 + INTEGER(IntKi), PARAMETER :: M08N4FMye = 3631 + INTEGER(IntKi), PARAMETER :: M08N5FMye = 3632 + INTEGER(IntKi), PARAMETER :: M08N6FMye = 3633 + INTEGER(IntKi), PARAMETER :: M08N7FMye = 3634 + INTEGER(IntKi), PARAMETER :: M08N8FMye = 3635 + INTEGER(IntKi), PARAMETER :: M08N9FMye = 3636 + INTEGER(IntKi), PARAMETER :: M09N1FMye = 3637 + INTEGER(IntKi), PARAMETER :: M09N2FMye = 3638 + INTEGER(IntKi), PARAMETER :: M09N3FMye = 3639 + INTEGER(IntKi), PARAMETER :: M09N4FMye = 3640 + INTEGER(IntKi), PARAMETER :: M09N5FMye = 3641 + INTEGER(IntKi), PARAMETER :: M09N6FMye = 3642 + INTEGER(IntKi), PARAMETER :: M09N7FMye = 3643 + INTEGER(IntKi), PARAMETER :: M09N8FMye = 3644 + INTEGER(IntKi), PARAMETER :: M09N9FMye = 3645 + INTEGER(IntKi), PARAMETER :: M10N1FMye = 3646 + INTEGER(IntKi), PARAMETER :: M10N2FMye = 3647 + INTEGER(IntKi), PARAMETER :: M10N3FMye = 3648 + INTEGER(IntKi), PARAMETER :: M10N4FMye = 3649 + INTEGER(IntKi), PARAMETER :: M10N5FMye = 3650 + INTEGER(IntKi), PARAMETER :: M10N6FMye = 3651 + INTEGER(IntKi), PARAMETER :: M10N7FMye = 3652 + INTEGER(IntKi), PARAMETER :: M10N8FMye = 3653 + INTEGER(IntKi), PARAMETER :: M10N9FMye = 3654 + INTEGER(IntKi), PARAMETER :: M11N1FMye = 3655 + INTEGER(IntKi), PARAMETER :: M11N2FMye = 3656 + INTEGER(IntKi), PARAMETER :: M11N3FMye = 3657 + INTEGER(IntKi), PARAMETER :: M11N4FMye = 3658 + INTEGER(IntKi), PARAMETER :: M11N5FMye = 3659 + INTEGER(IntKi), PARAMETER :: M11N6FMye = 3660 + INTEGER(IntKi), PARAMETER :: M11N7FMye = 3661 + INTEGER(IntKi), PARAMETER :: M11N8FMye = 3662 + INTEGER(IntKi), PARAMETER :: M11N9FMye = 3663 + INTEGER(IntKi), PARAMETER :: M12N1FMye = 3664 + INTEGER(IntKi), PARAMETER :: M12N2FMye = 3665 + INTEGER(IntKi), PARAMETER :: M12N3FMye = 3666 + INTEGER(IntKi), PARAMETER :: M12N4FMye = 3667 + INTEGER(IntKi), PARAMETER :: M12N5FMye = 3668 + INTEGER(IntKi), PARAMETER :: M12N6FMye = 3669 + INTEGER(IntKi), PARAMETER :: M12N7FMye = 3670 + INTEGER(IntKi), PARAMETER :: M12N8FMye = 3671 + INTEGER(IntKi), PARAMETER :: M12N9FMye = 3672 + INTEGER(IntKi), PARAMETER :: M13N1FMye = 3673 + INTEGER(IntKi), PARAMETER :: M13N2FMye = 3674 + INTEGER(IntKi), PARAMETER :: M13N3FMye = 3675 + INTEGER(IntKi), PARAMETER :: M13N4FMye = 3676 + INTEGER(IntKi), PARAMETER :: M13N5FMye = 3677 + INTEGER(IntKi), PARAMETER :: M13N6FMye = 3678 + INTEGER(IntKi), PARAMETER :: M13N7FMye = 3679 + INTEGER(IntKi), PARAMETER :: M13N8FMye = 3680 + INTEGER(IntKi), PARAMETER :: M13N9FMye = 3681 + INTEGER(IntKi), PARAMETER :: M14N1FMye = 3682 + INTEGER(IntKi), PARAMETER :: M14N2FMye = 3683 + INTEGER(IntKi), PARAMETER :: M14N3FMye = 3684 + INTEGER(IntKi), PARAMETER :: M14N4FMye = 3685 + INTEGER(IntKi), PARAMETER :: M14N5FMye = 3686 + INTEGER(IntKi), PARAMETER :: M14N6FMye = 3687 + INTEGER(IntKi), PARAMETER :: M14N7FMye = 3688 + INTEGER(IntKi), PARAMETER :: M14N8FMye = 3689 + INTEGER(IntKi), PARAMETER :: M14N9FMye = 3690 + INTEGER(IntKi), PARAMETER :: M15N1FMye = 3691 + INTEGER(IntKi), PARAMETER :: M15N2FMye = 3692 + INTEGER(IntKi), PARAMETER :: M15N3FMye = 3693 + INTEGER(IntKi), PARAMETER :: M15N4FMye = 3694 + INTEGER(IntKi), PARAMETER :: M15N5FMye = 3695 + INTEGER(IntKi), PARAMETER :: M15N6FMye = 3696 + INTEGER(IntKi), PARAMETER :: M15N7FMye = 3697 + INTEGER(IntKi), PARAMETER :: M15N8FMye = 3698 + INTEGER(IntKi), PARAMETER :: M15N9FMye = 3699 + INTEGER(IntKi), PARAMETER :: M16N1FMye = 3700 + INTEGER(IntKi), PARAMETER :: M16N2FMye = 3701 + INTEGER(IntKi), PARAMETER :: M16N3FMye = 3702 + INTEGER(IntKi), PARAMETER :: M16N4FMye = 3703 + INTEGER(IntKi), PARAMETER :: M16N5FMye = 3704 + INTEGER(IntKi), PARAMETER :: M16N6FMye = 3705 + INTEGER(IntKi), PARAMETER :: M16N7FMye = 3706 + INTEGER(IntKi), PARAMETER :: M16N8FMye = 3707 + INTEGER(IntKi), PARAMETER :: M16N9FMye = 3708 + INTEGER(IntKi), PARAMETER :: M17N1FMye = 3709 + INTEGER(IntKi), PARAMETER :: M17N2FMye = 3710 + INTEGER(IntKi), PARAMETER :: M17N3FMye = 3711 + INTEGER(IntKi), PARAMETER :: M17N4FMye = 3712 + INTEGER(IntKi), PARAMETER :: M17N5FMye = 3713 + INTEGER(IntKi), PARAMETER :: M17N6FMye = 3714 + INTEGER(IntKi), PARAMETER :: M17N7FMye = 3715 + INTEGER(IntKi), PARAMETER :: M17N8FMye = 3716 + INTEGER(IntKi), PARAMETER :: M17N9FMye = 3717 + INTEGER(IntKi), PARAMETER :: M18N1FMye = 3718 + INTEGER(IntKi), PARAMETER :: M18N2FMye = 3719 + INTEGER(IntKi), PARAMETER :: M18N3FMye = 3720 + INTEGER(IntKi), PARAMETER :: M18N4FMye = 3721 + INTEGER(IntKi), PARAMETER :: M18N5FMye = 3722 + INTEGER(IntKi), PARAMETER :: M18N6FMye = 3723 + INTEGER(IntKi), PARAMETER :: M18N7FMye = 3724 + INTEGER(IntKi), PARAMETER :: M18N8FMye = 3725 + INTEGER(IntKi), PARAMETER :: M18N9FMye = 3726 + INTEGER(IntKi), PARAMETER :: M19N1FMye = 3727 + INTEGER(IntKi), PARAMETER :: M19N2FMye = 3728 + INTEGER(IntKi), PARAMETER :: M19N3FMye = 3729 + INTEGER(IntKi), PARAMETER :: M19N4FMye = 3730 + INTEGER(IntKi), PARAMETER :: M19N5FMye = 3731 + INTEGER(IntKi), PARAMETER :: M19N6FMye = 3732 + INTEGER(IntKi), PARAMETER :: M19N7FMye = 3733 + INTEGER(IntKi), PARAMETER :: M19N8FMye = 3734 + INTEGER(IntKi), PARAMETER :: M19N9FMye = 3735 + INTEGER(IntKi), PARAMETER :: M20N1FMye = 3736 + INTEGER(IntKi), PARAMETER :: M20N2FMye = 3737 + INTEGER(IntKi), PARAMETER :: M20N3FMye = 3738 + INTEGER(IntKi), PARAMETER :: M20N4FMye = 3739 + INTEGER(IntKi), PARAMETER :: M20N5FMye = 3740 + INTEGER(IntKi), PARAMETER :: M20N6FMye = 3741 + INTEGER(IntKi), PARAMETER :: M20N7FMye = 3742 + INTEGER(IntKi), PARAMETER :: M20N8FMye = 3743 + INTEGER(IntKi), PARAMETER :: M20N9FMye = 3744 + INTEGER(IntKi), PARAMETER :: M21N1FMye = 3745 + INTEGER(IntKi), PARAMETER :: M21N2FMye = 3746 + INTEGER(IntKi), PARAMETER :: M21N3FMye = 3747 + INTEGER(IntKi), PARAMETER :: M21N4FMye = 3748 + INTEGER(IntKi), PARAMETER :: M21N5FMye = 3749 + INTEGER(IntKi), PARAMETER :: M21N6FMye = 3750 + INTEGER(IntKi), PARAMETER :: M21N7FMye = 3751 + INTEGER(IntKi), PARAMETER :: M21N8FMye = 3752 + INTEGER(IntKi), PARAMETER :: M21N9FMye = 3753 + INTEGER(IntKi), PARAMETER :: M22N1FMye = 3754 + INTEGER(IntKi), PARAMETER :: M22N2FMye = 3755 + INTEGER(IntKi), PARAMETER :: M22N3FMye = 3756 + INTEGER(IntKi), PARAMETER :: M22N4FMye = 3757 + INTEGER(IntKi), PARAMETER :: M22N5FMye = 3758 + INTEGER(IntKi), PARAMETER :: M22N6FMye = 3759 + INTEGER(IntKi), PARAMETER :: M22N7FMye = 3760 + INTEGER(IntKi), PARAMETER :: M22N8FMye = 3761 + INTEGER(IntKi), PARAMETER :: M22N9FMye = 3762 + INTEGER(IntKi), PARAMETER :: M23N1FMye = 3763 + INTEGER(IntKi), PARAMETER :: M23N2FMye = 3764 + INTEGER(IntKi), PARAMETER :: M23N3FMye = 3765 + INTEGER(IntKi), PARAMETER :: M23N4FMye = 3766 + INTEGER(IntKi), PARAMETER :: M23N5FMye = 3767 + INTEGER(IntKi), PARAMETER :: M23N6FMye = 3768 + INTEGER(IntKi), PARAMETER :: M23N7FMye = 3769 + INTEGER(IntKi), PARAMETER :: M23N8FMye = 3770 + INTEGER(IntKi), PARAMETER :: M23N9FMye = 3771 + INTEGER(IntKi), PARAMETER :: M24N1FMye = 3772 + INTEGER(IntKi), PARAMETER :: M24N2FMye = 3773 + INTEGER(IntKi), PARAMETER :: M24N3FMye = 3774 + INTEGER(IntKi), PARAMETER :: M24N4FMye = 3775 + INTEGER(IntKi), PARAMETER :: M24N5FMye = 3776 + INTEGER(IntKi), PARAMETER :: M24N6FMye = 3777 + INTEGER(IntKi), PARAMETER :: M24N7FMye = 3778 + INTEGER(IntKi), PARAMETER :: M24N8FMye = 3779 + INTEGER(IntKi), PARAMETER :: M24N9FMye = 3780 + INTEGER(IntKi), PARAMETER :: M25N1FMye = 3781 + INTEGER(IntKi), PARAMETER :: M25N2FMye = 3782 + INTEGER(IntKi), PARAMETER :: M25N3FMye = 3783 + INTEGER(IntKi), PARAMETER :: M25N4FMye = 3784 + INTEGER(IntKi), PARAMETER :: M25N5FMye = 3785 + INTEGER(IntKi), PARAMETER :: M25N6FMye = 3786 + INTEGER(IntKi), PARAMETER :: M25N7FMye = 3787 + INTEGER(IntKi), PARAMETER :: M25N8FMye = 3788 + INTEGER(IntKi), PARAMETER :: M25N9FMye = 3789 + INTEGER(IntKi), PARAMETER :: M26N1FMye = 3790 + INTEGER(IntKi), PARAMETER :: M26N2FMye = 3791 + INTEGER(IntKi), PARAMETER :: M26N3FMye = 3792 + INTEGER(IntKi), PARAMETER :: M26N4FMye = 3793 + INTEGER(IntKi), PARAMETER :: M26N5FMye = 3794 + INTEGER(IntKi), PARAMETER :: M26N6FMye = 3795 + INTEGER(IntKi), PARAMETER :: M26N7FMye = 3796 + INTEGER(IntKi), PARAMETER :: M26N8FMye = 3797 + INTEGER(IntKi), PARAMETER :: M26N9FMye = 3798 + INTEGER(IntKi), PARAMETER :: M27N1FMye = 3799 + INTEGER(IntKi), PARAMETER :: M27N2FMye = 3800 + INTEGER(IntKi), PARAMETER :: M27N3FMye = 3801 + INTEGER(IntKi), PARAMETER :: M27N4FMye = 3802 + INTEGER(IntKi), PARAMETER :: M27N5FMye = 3803 + INTEGER(IntKi), PARAMETER :: M27N6FMye = 3804 + INTEGER(IntKi), PARAMETER :: M27N7FMye = 3805 + INTEGER(IntKi), PARAMETER :: M27N8FMye = 3806 + INTEGER(IntKi), PARAMETER :: M27N9FMye = 3807 + INTEGER(IntKi), PARAMETER :: M28N1FMye = 3808 + INTEGER(IntKi), PARAMETER :: M28N2FMye = 3809 + INTEGER(IntKi), PARAMETER :: M28N3FMye = 3810 + INTEGER(IntKi), PARAMETER :: M28N4FMye = 3811 + INTEGER(IntKi), PARAMETER :: M28N5FMye = 3812 + INTEGER(IntKi), PARAMETER :: M28N6FMye = 3813 + INTEGER(IntKi), PARAMETER :: M28N7FMye = 3814 + INTEGER(IntKi), PARAMETER :: M28N8FMye = 3815 + INTEGER(IntKi), PARAMETER :: M28N9FMye = 3816 + INTEGER(IntKi), PARAMETER :: M29N1FMye = 3817 + INTEGER(IntKi), PARAMETER :: M29N2FMye = 3818 + INTEGER(IntKi), PARAMETER :: M29N3FMye = 3819 + INTEGER(IntKi), PARAMETER :: M29N4FMye = 3820 + INTEGER(IntKi), PARAMETER :: M29N5FMye = 3821 + INTEGER(IntKi), PARAMETER :: M29N6FMye = 3822 + INTEGER(IntKi), PARAMETER :: M29N7FMye = 3823 + INTEGER(IntKi), PARAMETER :: M29N8FMye = 3824 + INTEGER(IntKi), PARAMETER :: M29N9FMye = 3825 + INTEGER(IntKi), PARAMETER :: M30N1FMye = 3826 + INTEGER(IntKi), PARAMETER :: M30N2FMye = 3827 + INTEGER(IntKi), PARAMETER :: M30N3FMye = 3828 + INTEGER(IntKi), PARAMETER :: M30N4FMye = 3829 + INTEGER(IntKi), PARAMETER :: M30N5FMye = 3830 + INTEGER(IntKi), PARAMETER :: M30N6FMye = 3831 + INTEGER(IntKi), PARAMETER :: M30N7FMye = 3832 + INTEGER(IntKi), PARAMETER :: M30N8FMye = 3833 + INTEGER(IntKi), PARAMETER :: M30N9FMye = 3834 + INTEGER(IntKi), PARAMETER :: M31N1FMye = 3835 + INTEGER(IntKi), PARAMETER :: M31N2FMye = 3836 + INTEGER(IntKi), PARAMETER :: M31N3FMye = 3837 + INTEGER(IntKi), PARAMETER :: M31N4FMye = 3838 + INTEGER(IntKi), PARAMETER :: M31N5FMye = 3839 + INTEGER(IntKi), PARAMETER :: M31N6FMye = 3840 + INTEGER(IntKi), PARAMETER :: M31N7FMye = 3841 + INTEGER(IntKi), PARAMETER :: M31N8FMye = 3842 + INTEGER(IntKi), PARAMETER :: M31N9FMye = 3843 + INTEGER(IntKi), PARAMETER :: M32N1FMye = 3844 + INTEGER(IntKi), PARAMETER :: M32N2FMye = 3845 + INTEGER(IntKi), PARAMETER :: M32N3FMye = 3846 + INTEGER(IntKi), PARAMETER :: M32N4FMye = 3847 + INTEGER(IntKi), PARAMETER :: M32N5FMye = 3848 + INTEGER(IntKi), PARAMETER :: M32N6FMye = 3849 + INTEGER(IntKi), PARAMETER :: M32N7FMye = 3850 + INTEGER(IntKi), PARAMETER :: M32N8FMye = 3851 + INTEGER(IntKi), PARAMETER :: M32N9FMye = 3852 + INTEGER(IntKi), PARAMETER :: M33N1FMye = 3853 + INTEGER(IntKi), PARAMETER :: M33N2FMye = 3854 + INTEGER(IntKi), PARAMETER :: M33N3FMye = 3855 + INTEGER(IntKi), PARAMETER :: M33N4FMye = 3856 + INTEGER(IntKi), PARAMETER :: M33N5FMye = 3857 + INTEGER(IntKi), PARAMETER :: M33N6FMye = 3858 + INTEGER(IntKi), PARAMETER :: M33N7FMye = 3859 + INTEGER(IntKi), PARAMETER :: M33N8FMye = 3860 + INTEGER(IntKi), PARAMETER :: M33N9FMye = 3861 + INTEGER(IntKi), PARAMETER :: M34N1FMye = 3862 + INTEGER(IntKi), PARAMETER :: M34N2FMye = 3863 + INTEGER(IntKi), PARAMETER :: M34N3FMye = 3864 + INTEGER(IntKi), PARAMETER :: M34N4FMye = 3865 + INTEGER(IntKi), PARAMETER :: M34N5FMye = 3866 + INTEGER(IntKi), PARAMETER :: M34N6FMye = 3867 + INTEGER(IntKi), PARAMETER :: M34N7FMye = 3868 + INTEGER(IntKi), PARAMETER :: M34N8FMye = 3869 + INTEGER(IntKi), PARAMETER :: M34N9FMye = 3870 + INTEGER(IntKi), PARAMETER :: M35N1FMye = 3871 + INTEGER(IntKi), PARAMETER :: M35N2FMye = 3872 + INTEGER(IntKi), PARAMETER :: M35N3FMye = 3873 + INTEGER(IntKi), PARAMETER :: M35N4FMye = 3874 + INTEGER(IntKi), PARAMETER :: M35N5FMye = 3875 + INTEGER(IntKi), PARAMETER :: M35N6FMye = 3876 + INTEGER(IntKi), PARAMETER :: M35N7FMye = 3877 + INTEGER(IntKi), PARAMETER :: M35N8FMye = 3878 + INTEGER(IntKi), PARAMETER :: M35N9FMye = 3879 + INTEGER(IntKi), PARAMETER :: M36N1FMye = 3880 + INTEGER(IntKi), PARAMETER :: M36N2FMye = 3881 + INTEGER(IntKi), PARAMETER :: M36N3FMye = 3882 + INTEGER(IntKi), PARAMETER :: M36N4FMye = 3883 + INTEGER(IntKi), PARAMETER :: M36N5FMye = 3884 + INTEGER(IntKi), PARAMETER :: M36N6FMye = 3885 + INTEGER(IntKi), PARAMETER :: M36N7FMye = 3886 + INTEGER(IntKi), PARAMETER :: M36N8FMye = 3887 + INTEGER(IntKi), PARAMETER :: M36N9FMye = 3888 + INTEGER(IntKi), PARAMETER :: M37N1FMye = 3889 + INTEGER(IntKi), PARAMETER :: M37N2FMye = 3890 + INTEGER(IntKi), PARAMETER :: M37N3FMye = 3891 + INTEGER(IntKi), PARAMETER :: M37N4FMye = 3892 + INTEGER(IntKi), PARAMETER :: M37N5FMye = 3893 + INTEGER(IntKi), PARAMETER :: M37N6FMye = 3894 + INTEGER(IntKi), PARAMETER :: M37N7FMye = 3895 + INTEGER(IntKi), PARAMETER :: M37N8FMye = 3896 + INTEGER(IntKi), PARAMETER :: M37N9FMye = 3897 + INTEGER(IntKi), PARAMETER :: M38N1FMye = 3898 + INTEGER(IntKi), PARAMETER :: M38N2FMye = 3899 + INTEGER(IntKi), PARAMETER :: M38N3FMye = 3900 + INTEGER(IntKi), PARAMETER :: M38N4FMye = 3901 + INTEGER(IntKi), PARAMETER :: M38N5FMye = 3902 + INTEGER(IntKi), PARAMETER :: M38N6FMye = 3903 + INTEGER(IntKi), PARAMETER :: M38N7FMye = 3904 + INTEGER(IntKi), PARAMETER :: M38N8FMye = 3905 + INTEGER(IntKi), PARAMETER :: M38N9FMye = 3906 + INTEGER(IntKi), PARAMETER :: M39N1FMye = 3907 + INTEGER(IntKi), PARAMETER :: M39N2FMye = 3908 + INTEGER(IntKi), PARAMETER :: M39N3FMye = 3909 + INTEGER(IntKi), PARAMETER :: M39N4FMye = 3910 + INTEGER(IntKi), PARAMETER :: M39N5FMye = 3911 + INTEGER(IntKi), PARAMETER :: M39N6FMye = 3912 + INTEGER(IntKi), PARAMETER :: M39N7FMye = 3913 + INTEGER(IntKi), PARAMETER :: M39N8FMye = 3914 + INTEGER(IntKi), PARAMETER :: M39N9FMye = 3915 + INTEGER(IntKi), PARAMETER :: M40N1FMye = 3916 + INTEGER(IntKi), PARAMETER :: M40N2FMye = 3917 + INTEGER(IntKi), PARAMETER :: M40N3FMye = 3918 + INTEGER(IntKi), PARAMETER :: M40N4FMye = 3919 + INTEGER(IntKi), PARAMETER :: M40N5FMye = 3920 + INTEGER(IntKi), PARAMETER :: M40N6FMye = 3921 + INTEGER(IntKi), PARAMETER :: M40N7FMye = 3922 + INTEGER(IntKi), PARAMETER :: M40N8FMye = 3923 + INTEGER(IntKi), PARAMETER :: M40N9FMye = 3924 + INTEGER(IntKi), PARAMETER :: M41N1FMye = 3925 + INTEGER(IntKi), PARAMETER :: M41N2FMye = 3926 + INTEGER(IntKi), PARAMETER :: M41N3FMye = 3927 + INTEGER(IntKi), PARAMETER :: M41N4FMye = 3928 + INTEGER(IntKi), PARAMETER :: M41N5FMye = 3929 + INTEGER(IntKi), PARAMETER :: M41N6FMye = 3930 + INTEGER(IntKi), PARAMETER :: M41N7FMye = 3931 + INTEGER(IntKi), PARAMETER :: M41N8FMye = 3932 + INTEGER(IntKi), PARAMETER :: M41N9FMye = 3933 + INTEGER(IntKi), PARAMETER :: M42N1FMye = 3934 + INTEGER(IntKi), PARAMETER :: M42N2FMye = 3935 + INTEGER(IntKi), PARAMETER :: M42N3FMye = 3936 + INTEGER(IntKi), PARAMETER :: M42N4FMye = 3937 + INTEGER(IntKi), PARAMETER :: M42N5FMye = 3938 + INTEGER(IntKi), PARAMETER :: M42N6FMye = 3939 + INTEGER(IntKi), PARAMETER :: M42N7FMye = 3940 + INTEGER(IntKi), PARAMETER :: M42N8FMye = 3941 + INTEGER(IntKi), PARAMETER :: M42N9FMye = 3942 + INTEGER(IntKi), PARAMETER :: M43N1FMye = 3943 + INTEGER(IntKi), PARAMETER :: M43N2FMye = 3944 + INTEGER(IntKi), PARAMETER :: M43N3FMye = 3945 + INTEGER(IntKi), PARAMETER :: M43N4FMye = 3946 + INTEGER(IntKi), PARAMETER :: M43N5FMye = 3947 + INTEGER(IntKi), PARAMETER :: M43N6FMye = 3948 + INTEGER(IntKi), PARAMETER :: M43N7FMye = 3949 + INTEGER(IntKi), PARAMETER :: M43N8FMye = 3950 + INTEGER(IntKi), PARAMETER :: M43N9FMye = 3951 + INTEGER(IntKi), PARAMETER :: M44N1FMye = 3952 + INTEGER(IntKi), PARAMETER :: M44N2FMye = 3953 + INTEGER(IntKi), PARAMETER :: M44N3FMye = 3954 + INTEGER(IntKi), PARAMETER :: M44N4FMye = 3955 + INTEGER(IntKi), PARAMETER :: M44N5FMye = 3956 + INTEGER(IntKi), PARAMETER :: M44N6FMye = 3957 + INTEGER(IntKi), PARAMETER :: M44N7FMye = 3958 + INTEGER(IntKi), PARAMETER :: M44N8FMye = 3959 + INTEGER(IntKi), PARAMETER :: M44N9FMye = 3960 + INTEGER(IntKi), PARAMETER :: M45N1FMye = 3961 + INTEGER(IntKi), PARAMETER :: M45N2FMye = 3962 + INTEGER(IntKi), PARAMETER :: M45N3FMye = 3963 + INTEGER(IntKi), PARAMETER :: M45N4FMye = 3964 + INTEGER(IntKi), PARAMETER :: M45N5FMye = 3965 + INTEGER(IntKi), PARAMETER :: M45N6FMye = 3966 + INTEGER(IntKi), PARAMETER :: M45N7FMye = 3967 + INTEGER(IntKi), PARAMETER :: M45N8FMye = 3968 + INTEGER(IntKi), PARAMETER :: M45N9FMye = 3969 + INTEGER(IntKi), PARAMETER :: M46N1FMye = 3970 + INTEGER(IntKi), PARAMETER :: M46N2FMye = 3971 + INTEGER(IntKi), PARAMETER :: M46N3FMye = 3972 + INTEGER(IntKi), PARAMETER :: M46N4FMye = 3973 + INTEGER(IntKi), PARAMETER :: M46N5FMye = 3974 + INTEGER(IntKi), PARAMETER :: M46N6FMye = 3975 + INTEGER(IntKi), PARAMETER :: M46N7FMye = 3976 + INTEGER(IntKi), PARAMETER :: M46N8FMye = 3977 + INTEGER(IntKi), PARAMETER :: M46N9FMye = 3978 + INTEGER(IntKi), PARAMETER :: M47N1FMye = 3979 + INTEGER(IntKi), PARAMETER :: M47N2FMye = 3980 + INTEGER(IntKi), PARAMETER :: M47N3FMye = 3981 + INTEGER(IntKi), PARAMETER :: M47N4FMye = 3982 + INTEGER(IntKi), PARAMETER :: M47N5FMye = 3983 + INTEGER(IntKi), PARAMETER :: M47N6FMye = 3984 + INTEGER(IntKi), PARAMETER :: M47N7FMye = 3985 + INTEGER(IntKi), PARAMETER :: M47N8FMye = 3986 + INTEGER(IntKi), PARAMETER :: M47N9FMye = 3987 + INTEGER(IntKi), PARAMETER :: M48N1FMye = 3988 + INTEGER(IntKi), PARAMETER :: M48N2FMye = 3989 + INTEGER(IntKi), PARAMETER :: M48N3FMye = 3990 + INTEGER(IntKi), PARAMETER :: M48N4FMye = 3991 + INTEGER(IntKi), PARAMETER :: M48N5FMye = 3992 + INTEGER(IntKi), PARAMETER :: M48N6FMye = 3993 + INTEGER(IntKi), PARAMETER :: M48N7FMye = 3994 + INTEGER(IntKi), PARAMETER :: M48N8FMye = 3995 + INTEGER(IntKi), PARAMETER :: M48N9FMye = 3996 + INTEGER(IntKi), PARAMETER :: M49N1FMye = 3997 + INTEGER(IntKi), PARAMETER :: M49N2FMye = 3998 + INTEGER(IntKi), PARAMETER :: M49N3FMye = 3999 + INTEGER(IntKi), PARAMETER :: M49N4FMye = 4000 + INTEGER(IntKi), PARAMETER :: M49N5FMye = 4001 + INTEGER(IntKi), PARAMETER :: M49N6FMye = 4002 + INTEGER(IntKi), PARAMETER :: M49N7FMye = 4003 + INTEGER(IntKi), PARAMETER :: M49N8FMye = 4004 + INTEGER(IntKi), PARAMETER :: M49N9FMye = 4005 + INTEGER(IntKi), PARAMETER :: M50N1FMye = 4006 + INTEGER(IntKi), PARAMETER :: M50N2FMye = 4007 + INTEGER(IntKi), PARAMETER :: M50N3FMye = 4008 + INTEGER(IntKi), PARAMETER :: M50N4FMye = 4009 + INTEGER(IntKi), PARAMETER :: M50N5FMye = 4010 + INTEGER(IntKi), PARAMETER :: M50N6FMye = 4011 + INTEGER(IntKi), PARAMETER :: M50N7FMye = 4012 + INTEGER(IntKi), PARAMETER :: M50N8FMye = 4013 + INTEGER(IntKi), PARAMETER :: M50N9FMye = 4014 + INTEGER(IntKi), PARAMETER :: M51N1FMye = 4015 + INTEGER(IntKi), PARAMETER :: M51N2FMye = 4016 + INTEGER(IntKi), PARAMETER :: M51N3FMye = 4017 + INTEGER(IntKi), PARAMETER :: M51N4FMye = 4018 + INTEGER(IntKi), PARAMETER :: M51N5FMye = 4019 + INTEGER(IntKi), PARAMETER :: M51N6FMye = 4020 + INTEGER(IntKi), PARAMETER :: M51N7FMye = 4021 + INTEGER(IntKi), PARAMETER :: M51N8FMye = 4022 + INTEGER(IntKi), PARAMETER :: M51N9FMye = 4023 + INTEGER(IntKi), PARAMETER :: M52N1FMye = 4024 + INTEGER(IntKi), PARAMETER :: M52N2FMye = 4025 + INTEGER(IntKi), PARAMETER :: M52N3FMye = 4026 + INTEGER(IntKi), PARAMETER :: M52N4FMye = 4027 + INTEGER(IntKi), PARAMETER :: M52N5FMye = 4028 + INTEGER(IntKi), PARAMETER :: M52N6FMye = 4029 + INTEGER(IntKi), PARAMETER :: M52N7FMye = 4030 + INTEGER(IntKi), PARAMETER :: M52N8FMye = 4031 + INTEGER(IntKi), PARAMETER :: M52N9FMye = 4032 + INTEGER(IntKi), PARAMETER :: M53N1FMye = 4033 + INTEGER(IntKi), PARAMETER :: M53N2FMye = 4034 + INTEGER(IntKi), PARAMETER :: M53N3FMye = 4035 + INTEGER(IntKi), PARAMETER :: M53N4FMye = 4036 + INTEGER(IntKi), PARAMETER :: M53N5FMye = 4037 + INTEGER(IntKi), PARAMETER :: M53N6FMye = 4038 + INTEGER(IntKi), PARAMETER :: M53N7FMye = 4039 + INTEGER(IntKi), PARAMETER :: M53N8FMye = 4040 + INTEGER(IntKi), PARAMETER :: M53N9FMye = 4041 + INTEGER(IntKi), PARAMETER :: M54N1FMye = 4042 + INTEGER(IntKi), PARAMETER :: M54N2FMye = 4043 + INTEGER(IntKi), PARAMETER :: M54N3FMye = 4044 + INTEGER(IntKi), PARAMETER :: M54N4FMye = 4045 + INTEGER(IntKi), PARAMETER :: M54N5FMye = 4046 + INTEGER(IntKi), PARAMETER :: M54N6FMye = 4047 + INTEGER(IntKi), PARAMETER :: M54N7FMye = 4048 + INTEGER(IntKi), PARAMETER :: M54N8FMye = 4049 + INTEGER(IntKi), PARAMETER :: M54N9FMye = 4050 + INTEGER(IntKi), PARAMETER :: M55N1FMye = 4051 + INTEGER(IntKi), PARAMETER :: M55N2FMye = 4052 + INTEGER(IntKi), PARAMETER :: M55N3FMye = 4053 + INTEGER(IntKi), PARAMETER :: M55N4FMye = 4054 + INTEGER(IntKi), PARAMETER :: M55N5FMye = 4055 + INTEGER(IntKi), PARAMETER :: M55N6FMye = 4056 + INTEGER(IntKi), PARAMETER :: M55N7FMye = 4057 + INTEGER(IntKi), PARAMETER :: M55N8FMye = 4058 + INTEGER(IntKi), PARAMETER :: M55N9FMye = 4059 + INTEGER(IntKi), PARAMETER :: M56N1FMye = 4060 + INTEGER(IntKi), PARAMETER :: M56N2FMye = 4061 + INTEGER(IntKi), PARAMETER :: M56N3FMye = 4062 + INTEGER(IntKi), PARAMETER :: M56N4FMye = 4063 + INTEGER(IntKi), PARAMETER :: M56N5FMye = 4064 + INTEGER(IntKi), PARAMETER :: M56N6FMye = 4065 + INTEGER(IntKi), PARAMETER :: M56N7FMye = 4066 + INTEGER(IntKi), PARAMETER :: M56N8FMye = 4067 + INTEGER(IntKi), PARAMETER :: M56N9FMye = 4068 + INTEGER(IntKi), PARAMETER :: M57N1FMye = 4069 + INTEGER(IntKi), PARAMETER :: M57N2FMye = 4070 + INTEGER(IntKi), PARAMETER :: M57N3FMye = 4071 + INTEGER(IntKi), PARAMETER :: M57N4FMye = 4072 + INTEGER(IntKi), PARAMETER :: M57N5FMye = 4073 + INTEGER(IntKi), PARAMETER :: M57N6FMye = 4074 + INTEGER(IntKi), PARAMETER :: M57N7FMye = 4075 + INTEGER(IntKi), PARAMETER :: M57N8FMye = 4076 + INTEGER(IntKi), PARAMETER :: M57N9FMye = 4077 + INTEGER(IntKi), PARAMETER :: M58N1FMye = 4078 + INTEGER(IntKi), PARAMETER :: M58N2FMye = 4079 + INTEGER(IntKi), PARAMETER :: M58N3FMye = 4080 + INTEGER(IntKi), PARAMETER :: M58N4FMye = 4081 + INTEGER(IntKi), PARAMETER :: M58N5FMye = 4082 + INTEGER(IntKi), PARAMETER :: M58N6FMye = 4083 + INTEGER(IntKi), PARAMETER :: M58N7FMye = 4084 + INTEGER(IntKi), PARAMETER :: M58N8FMye = 4085 + INTEGER(IntKi), PARAMETER :: M58N9FMye = 4086 + INTEGER(IntKi), PARAMETER :: M59N1FMye = 4087 + INTEGER(IntKi), PARAMETER :: M59N2FMye = 4088 + INTEGER(IntKi), PARAMETER :: M59N3FMye = 4089 + INTEGER(IntKi), PARAMETER :: M59N4FMye = 4090 + INTEGER(IntKi), PARAMETER :: M59N5FMye = 4091 + INTEGER(IntKi), PARAMETER :: M59N6FMye = 4092 + INTEGER(IntKi), PARAMETER :: M59N7FMye = 4093 + INTEGER(IntKi), PARAMETER :: M59N8FMye = 4094 + INTEGER(IntKi), PARAMETER :: M59N9FMye = 4095 + INTEGER(IntKi), PARAMETER :: M60N1FMye = 4096 + INTEGER(IntKi), PARAMETER :: M60N2FMye = 4097 + INTEGER(IntKi), PARAMETER :: M60N3FMye = 4098 + INTEGER(IntKi), PARAMETER :: M60N4FMye = 4099 + INTEGER(IntKi), PARAMETER :: M60N5FMye = 4100 + INTEGER(IntKi), PARAMETER :: M60N6FMye = 4101 + INTEGER(IntKi), PARAMETER :: M60N7FMye = 4102 + INTEGER(IntKi), PARAMETER :: M60N8FMye = 4103 + INTEGER(IntKi), PARAMETER :: M60N9FMye = 4104 + INTEGER(IntKi), PARAMETER :: M61N1FMye = 4105 + INTEGER(IntKi), PARAMETER :: M61N2FMye = 4106 + INTEGER(IntKi), PARAMETER :: M61N3FMye = 4107 + INTEGER(IntKi), PARAMETER :: M61N4FMye = 4108 + INTEGER(IntKi), PARAMETER :: M61N5FMye = 4109 + INTEGER(IntKi), PARAMETER :: M61N6FMye = 4110 + INTEGER(IntKi), PARAMETER :: M61N7FMye = 4111 + INTEGER(IntKi), PARAMETER :: M61N8FMye = 4112 + INTEGER(IntKi), PARAMETER :: M61N9FMye = 4113 + INTEGER(IntKi), PARAMETER :: M62N1FMye = 4114 + INTEGER(IntKi), PARAMETER :: M62N2FMye = 4115 + INTEGER(IntKi), PARAMETER :: M62N3FMye = 4116 + INTEGER(IntKi), PARAMETER :: M62N4FMye = 4117 + INTEGER(IntKi), PARAMETER :: M62N5FMye = 4118 + INTEGER(IntKi), PARAMETER :: M62N6FMye = 4119 + INTEGER(IntKi), PARAMETER :: M62N7FMye = 4120 + INTEGER(IntKi), PARAMETER :: M62N8FMye = 4121 + INTEGER(IntKi), PARAMETER :: M62N9FMye = 4122 + INTEGER(IntKi), PARAMETER :: M63N1FMye = 4123 + INTEGER(IntKi), PARAMETER :: M63N2FMye = 4124 + INTEGER(IntKi), PARAMETER :: M63N3FMye = 4125 + INTEGER(IntKi), PARAMETER :: M63N4FMye = 4126 + INTEGER(IntKi), PARAMETER :: M63N5FMye = 4127 + INTEGER(IntKi), PARAMETER :: M63N6FMye = 4128 + INTEGER(IntKi), PARAMETER :: M63N7FMye = 4129 + INTEGER(IntKi), PARAMETER :: M63N8FMye = 4130 + INTEGER(IntKi), PARAMETER :: M63N9FMye = 4131 + INTEGER(IntKi), PARAMETER :: M64N1FMye = 4132 + INTEGER(IntKi), PARAMETER :: M64N2FMye = 4133 + INTEGER(IntKi), PARAMETER :: M64N3FMye = 4134 + INTEGER(IntKi), PARAMETER :: M64N4FMye = 4135 + INTEGER(IntKi), PARAMETER :: M64N5FMye = 4136 + INTEGER(IntKi), PARAMETER :: M64N6FMye = 4137 + INTEGER(IntKi), PARAMETER :: M64N7FMye = 4138 + INTEGER(IntKi), PARAMETER :: M64N8FMye = 4139 + INTEGER(IntKi), PARAMETER :: M64N9FMye = 4140 + INTEGER(IntKi), PARAMETER :: M65N1FMye = 4141 + INTEGER(IntKi), PARAMETER :: M65N2FMye = 4142 + INTEGER(IntKi), PARAMETER :: M65N3FMye = 4143 + INTEGER(IntKi), PARAMETER :: M65N4FMye = 4144 + INTEGER(IntKi), PARAMETER :: M65N5FMye = 4145 + INTEGER(IntKi), PARAMETER :: M65N6FMye = 4146 + INTEGER(IntKi), PARAMETER :: M65N7FMye = 4147 + INTEGER(IntKi), PARAMETER :: M65N8FMye = 4148 + INTEGER(IntKi), PARAMETER :: M65N9FMye = 4149 + INTEGER(IntKi), PARAMETER :: M66N1FMye = 4150 + INTEGER(IntKi), PARAMETER :: M66N2FMye = 4151 + INTEGER(IntKi), PARAMETER :: M66N3FMye = 4152 + INTEGER(IntKi), PARAMETER :: M66N4FMye = 4153 + INTEGER(IntKi), PARAMETER :: M66N5FMye = 4154 + INTEGER(IntKi), PARAMETER :: M66N6FMye = 4155 + INTEGER(IntKi), PARAMETER :: M66N7FMye = 4156 + INTEGER(IntKi), PARAMETER :: M66N8FMye = 4157 + INTEGER(IntKi), PARAMETER :: M66N9FMye = 4158 + INTEGER(IntKi), PARAMETER :: M67N1FMye = 4159 + INTEGER(IntKi), PARAMETER :: M67N2FMye = 4160 + INTEGER(IntKi), PARAMETER :: M67N3FMye = 4161 + INTEGER(IntKi), PARAMETER :: M67N4FMye = 4162 + INTEGER(IntKi), PARAMETER :: M67N5FMye = 4163 + INTEGER(IntKi), PARAMETER :: M67N6FMye = 4164 + INTEGER(IntKi), PARAMETER :: M67N7FMye = 4165 + INTEGER(IntKi), PARAMETER :: M67N8FMye = 4166 + INTEGER(IntKi), PARAMETER :: M67N9FMye = 4167 + INTEGER(IntKi), PARAMETER :: M68N1FMye = 4168 + INTEGER(IntKi), PARAMETER :: M68N2FMye = 4169 + INTEGER(IntKi), PARAMETER :: M68N3FMye = 4170 + INTEGER(IntKi), PARAMETER :: M68N4FMye = 4171 + INTEGER(IntKi), PARAMETER :: M68N5FMye = 4172 + INTEGER(IntKi), PARAMETER :: M68N6FMye = 4173 + INTEGER(IntKi), PARAMETER :: M68N7FMye = 4174 + INTEGER(IntKi), PARAMETER :: M68N8FMye = 4175 + INTEGER(IntKi), PARAMETER :: M68N9FMye = 4176 + INTEGER(IntKi), PARAMETER :: M69N1FMye = 4177 + INTEGER(IntKi), PARAMETER :: M69N2FMye = 4178 + INTEGER(IntKi), PARAMETER :: M69N3FMye = 4179 + INTEGER(IntKi), PARAMETER :: M69N4FMye = 4180 + INTEGER(IntKi), PARAMETER :: M69N5FMye = 4181 + INTEGER(IntKi), PARAMETER :: M69N6FMye = 4182 + INTEGER(IntKi), PARAMETER :: M69N7FMye = 4183 + INTEGER(IntKi), PARAMETER :: M69N8FMye = 4184 + INTEGER(IntKi), PARAMETER :: M69N9FMye = 4185 + INTEGER(IntKi), PARAMETER :: M70N1FMye = 4186 + INTEGER(IntKi), PARAMETER :: M70N2FMye = 4187 + INTEGER(IntKi), PARAMETER :: M70N3FMye = 4188 + INTEGER(IntKi), PARAMETER :: M70N4FMye = 4189 + INTEGER(IntKi), PARAMETER :: M70N5FMye = 4190 + INTEGER(IntKi), PARAMETER :: M70N6FMye = 4191 + INTEGER(IntKi), PARAMETER :: M70N7FMye = 4192 + INTEGER(IntKi), PARAMETER :: M70N8FMye = 4193 + INTEGER(IntKi), PARAMETER :: M70N9FMye = 4194 + INTEGER(IntKi), PARAMETER :: M71N1FMye = 4195 + INTEGER(IntKi), PARAMETER :: M71N2FMye = 4196 + INTEGER(IntKi), PARAMETER :: M71N3FMye = 4197 + INTEGER(IntKi), PARAMETER :: M71N4FMye = 4198 + INTEGER(IntKi), PARAMETER :: M71N5FMye = 4199 + INTEGER(IntKi), PARAMETER :: M71N6FMye = 4200 + INTEGER(IntKi), PARAMETER :: M71N7FMye = 4201 + INTEGER(IntKi), PARAMETER :: M71N8FMye = 4202 + INTEGER(IntKi), PARAMETER :: M71N9FMye = 4203 + INTEGER(IntKi), PARAMETER :: M72N1FMye = 4204 + INTEGER(IntKi), PARAMETER :: M72N2FMye = 4205 + INTEGER(IntKi), PARAMETER :: M72N3FMye = 4206 + INTEGER(IntKi), PARAMETER :: M72N4FMye = 4207 + INTEGER(IntKi), PARAMETER :: M72N5FMye = 4208 + INTEGER(IntKi), PARAMETER :: M72N6FMye = 4209 + INTEGER(IntKi), PARAMETER :: M72N7FMye = 4210 + INTEGER(IntKi), PARAMETER :: M72N8FMye = 4211 + INTEGER(IntKi), PARAMETER :: M72N9FMye = 4212 + INTEGER(IntKi), PARAMETER :: M73N1FMye = 4213 + INTEGER(IntKi), PARAMETER :: M73N2FMye = 4214 + INTEGER(IntKi), PARAMETER :: M73N3FMye = 4215 + INTEGER(IntKi), PARAMETER :: M73N4FMye = 4216 + INTEGER(IntKi), PARAMETER :: M73N5FMye = 4217 + INTEGER(IntKi), PARAMETER :: M73N6FMye = 4218 + INTEGER(IntKi), PARAMETER :: M73N7FMye = 4219 + INTEGER(IntKi), PARAMETER :: M73N8FMye = 4220 + INTEGER(IntKi), PARAMETER :: M73N9FMye = 4221 + INTEGER(IntKi), PARAMETER :: M74N1FMye = 4222 + INTEGER(IntKi), PARAMETER :: M74N2FMye = 4223 + INTEGER(IntKi), PARAMETER :: M74N3FMye = 4224 + INTEGER(IntKi), PARAMETER :: M74N4FMye = 4225 + INTEGER(IntKi), PARAMETER :: M74N5FMye = 4226 + INTEGER(IntKi), PARAMETER :: M74N6FMye = 4227 + INTEGER(IntKi), PARAMETER :: M74N7FMye = 4228 + INTEGER(IntKi), PARAMETER :: M74N8FMye = 4229 + INTEGER(IntKi), PARAMETER :: M74N9FMye = 4230 + INTEGER(IntKi), PARAMETER :: M75N1FMye = 4231 + INTEGER(IntKi), PARAMETER :: M75N2FMye = 4232 + INTEGER(IntKi), PARAMETER :: M75N3FMye = 4233 + INTEGER(IntKi), PARAMETER :: M75N4FMye = 4234 + INTEGER(IntKi), PARAMETER :: M75N5FMye = 4235 + INTEGER(IntKi), PARAMETER :: M75N6FMye = 4236 + INTEGER(IntKi), PARAMETER :: M75N7FMye = 4237 + INTEGER(IntKi), PARAMETER :: M75N8FMye = 4238 + INTEGER(IntKi), PARAMETER :: M75N9FMye = 4239 + INTEGER(IntKi), PARAMETER :: M76N1FMye = 4240 + INTEGER(IntKi), PARAMETER :: M76N2FMye = 4241 + INTEGER(IntKi), PARAMETER :: M76N3FMye = 4242 + INTEGER(IntKi), PARAMETER :: M76N4FMye = 4243 + INTEGER(IntKi), PARAMETER :: M76N5FMye = 4244 + INTEGER(IntKi), PARAMETER :: M76N6FMye = 4245 + INTEGER(IntKi), PARAMETER :: M76N7FMye = 4246 + INTEGER(IntKi), PARAMETER :: M76N8FMye = 4247 + INTEGER(IntKi), PARAMETER :: M76N9FMye = 4248 + INTEGER(IntKi), PARAMETER :: M77N1FMye = 4249 + INTEGER(IntKi), PARAMETER :: M77N2FMye = 4250 + INTEGER(IntKi), PARAMETER :: M77N3FMye = 4251 + INTEGER(IntKi), PARAMETER :: M77N4FMye = 4252 + INTEGER(IntKi), PARAMETER :: M77N5FMye = 4253 + INTEGER(IntKi), PARAMETER :: M77N6FMye = 4254 + INTEGER(IntKi), PARAMETER :: M77N7FMye = 4255 + INTEGER(IntKi), PARAMETER :: M77N8FMye = 4256 + INTEGER(IntKi), PARAMETER :: M77N9FMye = 4257 + INTEGER(IntKi), PARAMETER :: M78N1FMye = 4258 + INTEGER(IntKi), PARAMETER :: M78N2FMye = 4259 + INTEGER(IntKi), PARAMETER :: M78N3FMye = 4260 + INTEGER(IntKi), PARAMETER :: M78N4FMye = 4261 + INTEGER(IntKi), PARAMETER :: M78N5FMye = 4262 + INTEGER(IntKi), PARAMETER :: M78N6FMye = 4263 + INTEGER(IntKi), PARAMETER :: M78N7FMye = 4264 + INTEGER(IntKi), PARAMETER :: M78N8FMye = 4265 + INTEGER(IntKi), PARAMETER :: M78N9FMye = 4266 + INTEGER(IntKi), PARAMETER :: M79N1FMye = 4267 + INTEGER(IntKi), PARAMETER :: M79N2FMye = 4268 + INTEGER(IntKi), PARAMETER :: M79N3FMye = 4269 + INTEGER(IntKi), PARAMETER :: M79N4FMye = 4270 + INTEGER(IntKi), PARAMETER :: M79N5FMye = 4271 + INTEGER(IntKi), PARAMETER :: M79N6FMye = 4272 + INTEGER(IntKi), PARAMETER :: M79N7FMye = 4273 + INTEGER(IntKi), PARAMETER :: M79N8FMye = 4274 + INTEGER(IntKi), PARAMETER :: M79N9FMye = 4275 + INTEGER(IntKi), PARAMETER :: M80N1FMye = 4276 + INTEGER(IntKi), PARAMETER :: M80N2FMye = 4277 + INTEGER(IntKi), PARAMETER :: M80N3FMye = 4278 + INTEGER(IntKi), PARAMETER :: M80N4FMye = 4279 + INTEGER(IntKi), PARAMETER :: M80N5FMye = 4280 + INTEGER(IntKi), PARAMETER :: M80N6FMye = 4281 + INTEGER(IntKi), PARAMETER :: M80N7FMye = 4282 + INTEGER(IntKi), PARAMETER :: M80N8FMye = 4283 + INTEGER(IntKi), PARAMETER :: M80N9FMye = 4284 + INTEGER(IntKi), PARAMETER :: M81N1FMye = 4285 + INTEGER(IntKi), PARAMETER :: M81N2FMye = 4286 + INTEGER(IntKi), PARAMETER :: M81N3FMye = 4287 + INTEGER(IntKi), PARAMETER :: M81N4FMye = 4288 + INTEGER(IntKi), PARAMETER :: M81N5FMye = 4289 + INTEGER(IntKi), PARAMETER :: M81N6FMye = 4290 + INTEGER(IntKi), PARAMETER :: M81N7FMye = 4291 + INTEGER(IntKi), PARAMETER :: M81N8FMye = 4292 + INTEGER(IntKi), PARAMETER :: M81N9FMye = 4293 + INTEGER(IntKi), PARAMETER :: M82N1FMye = 4294 + INTEGER(IntKi), PARAMETER :: M82N2FMye = 4295 + INTEGER(IntKi), PARAMETER :: M82N3FMye = 4296 + INTEGER(IntKi), PARAMETER :: M82N4FMye = 4297 + INTEGER(IntKi), PARAMETER :: M82N5FMye = 4298 + INTEGER(IntKi), PARAMETER :: M82N6FMye = 4299 + INTEGER(IntKi), PARAMETER :: M82N7FMye = 4300 + INTEGER(IntKi), PARAMETER :: M82N8FMye = 4301 + INTEGER(IntKi), PARAMETER :: M82N9FMye = 4302 + INTEGER(IntKi), PARAMETER :: M83N1FMye = 4303 + INTEGER(IntKi), PARAMETER :: M83N2FMye = 4304 + INTEGER(IntKi), PARAMETER :: M83N3FMye = 4305 + INTEGER(IntKi), PARAMETER :: M83N4FMye = 4306 + INTEGER(IntKi), PARAMETER :: M83N5FMye = 4307 + INTEGER(IntKi), PARAMETER :: M83N6FMye = 4308 + INTEGER(IntKi), PARAMETER :: M83N7FMye = 4309 + INTEGER(IntKi), PARAMETER :: M83N8FMye = 4310 + INTEGER(IntKi), PARAMETER :: M83N9FMye = 4311 + INTEGER(IntKi), PARAMETER :: M84N1FMye = 4312 + INTEGER(IntKi), PARAMETER :: M84N2FMye = 4313 + INTEGER(IntKi), PARAMETER :: M84N3FMye = 4314 + INTEGER(IntKi), PARAMETER :: M84N4FMye = 4315 + INTEGER(IntKi), PARAMETER :: M84N5FMye = 4316 + INTEGER(IntKi), PARAMETER :: M84N6FMye = 4317 + INTEGER(IntKi), PARAMETER :: M84N7FMye = 4318 + INTEGER(IntKi), PARAMETER :: M84N8FMye = 4319 + INTEGER(IntKi), PARAMETER :: M84N9FMye = 4320 + INTEGER(IntKi), PARAMETER :: M85N1FMye = 4321 + INTEGER(IntKi), PARAMETER :: M85N2FMye = 4322 + INTEGER(IntKi), PARAMETER :: M85N3FMye = 4323 + INTEGER(IntKi), PARAMETER :: M85N4FMye = 4324 + INTEGER(IntKi), PARAMETER :: M85N5FMye = 4325 + INTEGER(IntKi), PARAMETER :: M85N6FMye = 4326 + INTEGER(IntKi), PARAMETER :: M85N7FMye = 4327 + INTEGER(IntKi), PARAMETER :: M85N8FMye = 4328 + INTEGER(IntKi), PARAMETER :: M85N9FMye = 4329 + INTEGER(IntKi), PARAMETER :: M86N1FMye = 4330 + INTEGER(IntKi), PARAMETER :: M86N2FMye = 4331 + INTEGER(IntKi), PARAMETER :: M86N3FMye = 4332 + INTEGER(IntKi), PARAMETER :: M86N4FMye = 4333 + INTEGER(IntKi), PARAMETER :: M86N5FMye = 4334 + INTEGER(IntKi), PARAMETER :: M86N6FMye = 4335 + INTEGER(IntKi), PARAMETER :: M86N7FMye = 4336 + INTEGER(IntKi), PARAMETER :: M86N8FMye = 4337 + INTEGER(IntKi), PARAMETER :: M86N9FMye = 4338 + INTEGER(IntKi), PARAMETER :: M87N1FMye = 4339 + INTEGER(IntKi), PARAMETER :: M87N2FMye = 4340 + INTEGER(IntKi), PARAMETER :: M87N3FMye = 4341 + INTEGER(IntKi), PARAMETER :: M87N4FMye = 4342 + INTEGER(IntKi), PARAMETER :: M87N5FMye = 4343 + INTEGER(IntKi), PARAMETER :: M87N6FMye = 4344 + INTEGER(IntKi), PARAMETER :: M87N7FMye = 4345 + INTEGER(IntKi), PARAMETER :: M87N8FMye = 4346 + INTEGER(IntKi), PARAMETER :: M87N9FMye = 4347 + INTEGER(IntKi), PARAMETER :: M88N1FMye = 4348 + INTEGER(IntKi), PARAMETER :: M88N2FMye = 4349 + INTEGER(IntKi), PARAMETER :: M88N3FMye = 4350 + INTEGER(IntKi), PARAMETER :: M88N4FMye = 4351 + INTEGER(IntKi), PARAMETER :: M88N5FMye = 4352 + INTEGER(IntKi), PARAMETER :: M88N6FMye = 4353 + INTEGER(IntKi), PARAMETER :: M88N7FMye = 4354 + INTEGER(IntKi), PARAMETER :: M88N8FMye = 4355 + INTEGER(IntKi), PARAMETER :: M88N9FMye = 4356 + INTEGER(IntKi), PARAMETER :: M89N1FMye = 4357 + INTEGER(IntKi), PARAMETER :: M89N2FMye = 4358 + INTEGER(IntKi), PARAMETER :: M89N3FMye = 4359 + INTEGER(IntKi), PARAMETER :: M89N4FMye = 4360 + INTEGER(IntKi), PARAMETER :: M89N5FMye = 4361 + INTEGER(IntKi), PARAMETER :: M89N6FMye = 4362 + INTEGER(IntKi), PARAMETER :: M89N7FMye = 4363 + INTEGER(IntKi), PARAMETER :: M89N8FMye = 4364 + INTEGER(IntKi), PARAMETER :: M89N9FMye = 4365 + INTEGER(IntKi), PARAMETER :: M90N1FMye = 4366 + INTEGER(IntKi), PARAMETER :: M90N2FMye = 4367 + INTEGER(IntKi), PARAMETER :: M90N3FMye = 4368 + INTEGER(IntKi), PARAMETER :: M90N4FMye = 4369 + INTEGER(IntKi), PARAMETER :: M90N5FMye = 4370 + INTEGER(IntKi), PARAMETER :: M90N6FMye = 4371 + INTEGER(IntKi), PARAMETER :: M90N7FMye = 4372 + INTEGER(IntKi), PARAMETER :: M90N8FMye = 4373 + INTEGER(IntKi), PARAMETER :: M90N9FMye = 4374 + INTEGER(IntKi), PARAMETER :: M91N1FMye = 4375 + INTEGER(IntKi), PARAMETER :: M91N2FMye = 4376 + INTEGER(IntKi), PARAMETER :: M91N3FMye = 4377 + INTEGER(IntKi), PARAMETER :: M91N4FMye = 4378 + INTEGER(IntKi), PARAMETER :: M91N5FMye = 4379 + INTEGER(IntKi), PARAMETER :: M91N6FMye = 4380 + INTEGER(IntKi), PARAMETER :: M91N7FMye = 4381 + INTEGER(IntKi), PARAMETER :: M91N8FMye = 4382 + INTEGER(IntKi), PARAMETER :: M91N9FMye = 4383 + INTEGER(IntKi), PARAMETER :: M92N1FMye = 4384 + INTEGER(IntKi), PARAMETER :: M92N2FMye = 4385 + INTEGER(IntKi), PARAMETER :: M92N3FMye = 4386 + INTEGER(IntKi), PARAMETER :: M92N4FMye = 4387 + INTEGER(IntKi), PARAMETER :: M92N5FMye = 4388 + INTEGER(IntKi), PARAMETER :: M92N6FMye = 4389 + INTEGER(IntKi), PARAMETER :: M92N7FMye = 4390 + INTEGER(IntKi), PARAMETER :: M92N8FMye = 4391 + INTEGER(IntKi), PARAMETER :: M92N9FMye = 4392 + INTEGER(IntKi), PARAMETER :: M93N1FMye = 4393 + INTEGER(IntKi), PARAMETER :: M93N2FMye = 4394 + INTEGER(IntKi), PARAMETER :: M93N3FMye = 4395 + INTEGER(IntKi), PARAMETER :: M93N4FMye = 4396 + INTEGER(IntKi), PARAMETER :: M93N5FMye = 4397 + INTEGER(IntKi), PARAMETER :: M93N6FMye = 4398 + INTEGER(IntKi), PARAMETER :: M93N7FMye = 4399 + INTEGER(IntKi), PARAMETER :: M93N8FMye = 4400 + INTEGER(IntKi), PARAMETER :: M93N9FMye = 4401 + INTEGER(IntKi), PARAMETER :: M94N1FMye = 4402 + INTEGER(IntKi), PARAMETER :: M94N2FMye = 4403 + INTEGER(IntKi), PARAMETER :: M94N3FMye = 4404 + INTEGER(IntKi), PARAMETER :: M94N4FMye = 4405 + INTEGER(IntKi), PARAMETER :: M94N5FMye = 4406 + INTEGER(IntKi), PARAMETER :: M94N6FMye = 4407 + INTEGER(IntKi), PARAMETER :: M94N7FMye = 4408 + INTEGER(IntKi), PARAMETER :: M94N8FMye = 4409 + INTEGER(IntKi), PARAMETER :: M94N9FMye = 4410 + INTEGER(IntKi), PARAMETER :: M95N1FMye = 4411 + INTEGER(IntKi), PARAMETER :: M95N2FMye = 4412 + INTEGER(IntKi), PARAMETER :: M95N3FMye = 4413 + INTEGER(IntKi), PARAMETER :: M95N4FMye = 4414 + INTEGER(IntKi), PARAMETER :: M95N5FMye = 4415 + INTEGER(IntKi), PARAMETER :: M95N6FMye = 4416 + INTEGER(IntKi), PARAMETER :: M95N7FMye = 4417 + INTEGER(IntKi), PARAMETER :: M95N8FMye = 4418 + INTEGER(IntKi), PARAMETER :: M95N9FMye = 4419 + INTEGER(IntKi), PARAMETER :: M96N1FMye = 4420 + INTEGER(IntKi), PARAMETER :: M96N2FMye = 4421 + INTEGER(IntKi), PARAMETER :: M96N3FMye = 4422 + INTEGER(IntKi), PARAMETER :: M96N4FMye = 4423 + INTEGER(IntKi), PARAMETER :: M96N5FMye = 4424 + INTEGER(IntKi), PARAMETER :: M96N6FMye = 4425 + INTEGER(IntKi), PARAMETER :: M96N7FMye = 4426 + INTEGER(IntKi), PARAMETER :: M96N8FMye = 4427 + INTEGER(IntKi), PARAMETER :: M96N9FMye = 4428 + INTEGER(IntKi), PARAMETER :: M97N1FMye = 4429 + INTEGER(IntKi), PARAMETER :: M97N2FMye = 4430 + INTEGER(IntKi), PARAMETER :: M97N3FMye = 4431 + INTEGER(IntKi), PARAMETER :: M97N4FMye = 4432 + INTEGER(IntKi), PARAMETER :: M97N5FMye = 4433 + INTEGER(IntKi), PARAMETER :: M97N6FMye = 4434 + INTEGER(IntKi), PARAMETER :: M97N7FMye = 4435 + INTEGER(IntKi), PARAMETER :: M97N8FMye = 4436 + INTEGER(IntKi), PARAMETER :: M97N9FMye = 4437 + INTEGER(IntKi), PARAMETER :: M98N1FMye = 4438 + INTEGER(IntKi), PARAMETER :: M98N2FMye = 4439 + INTEGER(IntKi), PARAMETER :: M98N3FMye = 4440 + INTEGER(IntKi), PARAMETER :: M98N4FMye = 4441 + INTEGER(IntKi), PARAMETER :: M98N5FMye = 4442 + INTEGER(IntKi), PARAMETER :: M98N6FMye = 4443 + INTEGER(IntKi), PARAMETER :: M98N7FMye = 4444 + INTEGER(IntKi), PARAMETER :: M98N8FMye = 4445 + INTEGER(IntKi), PARAMETER :: M98N9FMye = 4446 + INTEGER(IntKi), PARAMETER :: M99N1FMye = 4447 + INTEGER(IntKi), PARAMETER :: M99N2FMye = 4448 + INTEGER(IntKi), PARAMETER :: M99N3FMye = 4449 + INTEGER(IntKi), PARAMETER :: M99N4FMye = 4450 + INTEGER(IntKi), PARAMETER :: M99N5FMye = 4451 + INTEGER(IntKi), PARAMETER :: M99N6FMye = 4452 + INTEGER(IntKi), PARAMETER :: M99N7FMye = 4453 + INTEGER(IntKi), PARAMETER :: M99N8FMye = 4454 + INTEGER(IntKi), PARAMETER :: M99N9FMye = 4455 + INTEGER(IntKi), PARAMETER :: M01N1FMze = 4456 + INTEGER(IntKi), PARAMETER :: M01N2FMze = 4457 + INTEGER(IntKi), PARAMETER :: M01N3FMze = 4458 + INTEGER(IntKi), PARAMETER :: M01N4FMze = 4459 + INTEGER(IntKi), PARAMETER :: M01N5FMze = 4460 + INTEGER(IntKi), PARAMETER :: M01N6FMze = 4461 + INTEGER(IntKi), PARAMETER :: M01N7FMze = 4462 + INTEGER(IntKi), PARAMETER :: M01N8FMze = 4463 + INTEGER(IntKi), PARAMETER :: M01N9FMze = 4464 + INTEGER(IntKi), PARAMETER :: M02N1FMze = 4465 + INTEGER(IntKi), PARAMETER :: M02N2FMze = 4466 + INTEGER(IntKi), PARAMETER :: M02N3FMze = 4467 + INTEGER(IntKi), PARAMETER :: M02N4FMze = 4468 + INTEGER(IntKi), PARAMETER :: M02N5FMze = 4469 + INTEGER(IntKi), PARAMETER :: M02N6FMze = 4470 + INTEGER(IntKi), PARAMETER :: M02N7FMze = 4471 + INTEGER(IntKi), PARAMETER :: M02N8FMze = 4472 + INTEGER(IntKi), PARAMETER :: M02N9FMze = 4473 + INTEGER(IntKi), PARAMETER :: M03N1FMze = 4474 + INTEGER(IntKi), PARAMETER :: M03N2FMze = 4475 + INTEGER(IntKi), PARAMETER :: M03N3FMze = 4476 + INTEGER(IntKi), PARAMETER :: M03N4FMze = 4477 + INTEGER(IntKi), PARAMETER :: M03N5FMze = 4478 + INTEGER(IntKi), PARAMETER :: M03N6FMze = 4479 + INTEGER(IntKi), PARAMETER :: M03N7FMze = 4480 + INTEGER(IntKi), PARAMETER :: M03N8FMze = 4481 + INTEGER(IntKi), PARAMETER :: M03N9FMze = 4482 + INTEGER(IntKi), PARAMETER :: M04N1FMze = 4483 + INTEGER(IntKi), PARAMETER :: M04N2FMze = 4484 + INTEGER(IntKi), PARAMETER :: M04N3FMze = 4485 + INTEGER(IntKi), PARAMETER :: M04N4FMze = 4486 + INTEGER(IntKi), PARAMETER :: M04N5FMze = 4487 + INTEGER(IntKi), PARAMETER :: M04N6FMze = 4488 + INTEGER(IntKi), PARAMETER :: M04N7FMze = 4489 + INTEGER(IntKi), PARAMETER :: M04N8FMze = 4490 + INTEGER(IntKi), PARAMETER :: M04N9FMze = 4491 + INTEGER(IntKi), PARAMETER :: M05N1FMze = 4492 + INTEGER(IntKi), PARAMETER :: M05N2FMze = 4493 + INTEGER(IntKi), PARAMETER :: M05N3FMze = 4494 + INTEGER(IntKi), PARAMETER :: M05N4FMze = 4495 + INTEGER(IntKi), PARAMETER :: M05N5FMze = 4496 + INTEGER(IntKi), PARAMETER :: M05N6FMze = 4497 + INTEGER(IntKi), PARAMETER :: M05N7FMze = 4498 + INTEGER(IntKi), PARAMETER :: M05N8FMze = 4499 + INTEGER(IntKi), PARAMETER :: M05N9FMze = 4500 + INTEGER(IntKi), PARAMETER :: M06N1FMze = 4501 + INTEGER(IntKi), PARAMETER :: M06N2FMze = 4502 + INTEGER(IntKi), PARAMETER :: M06N3FMze = 4503 + INTEGER(IntKi), PARAMETER :: M06N4FMze = 4504 + INTEGER(IntKi), PARAMETER :: M06N5FMze = 4505 + INTEGER(IntKi), PARAMETER :: M06N6FMze = 4506 + INTEGER(IntKi), PARAMETER :: M06N7FMze = 4507 + INTEGER(IntKi), PARAMETER :: M06N8FMze = 4508 + INTEGER(IntKi), PARAMETER :: M06N9FMze = 4509 + INTEGER(IntKi), PARAMETER :: M07N1FMze = 4510 + INTEGER(IntKi), PARAMETER :: M07N2FMze = 4511 + INTEGER(IntKi), PARAMETER :: M07N3FMze = 4512 + INTEGER(IntKi), PARAMETER :: M07N4FMze = 4513 + INTEGER(IntKi), PARAMETER :: M07N5FMze = 4514 + INTEGER(IntKi), PARAMETER :: M07N6FMze = 4515 + INTEGER(IntKi), PARAMETER :: M07N7FMze = 4516 + INTEGER(IntKi), PARAMETER :: M07N8FMze = 4517 + INTEGER(IntKi), PARAMETER :: M07N9FMze = 4518 + INTEGER(IntKi), PARAMETER :: M08N1FMze = 4519 + INTEGER(IntKi), PARAMETER :: M08N2FMze = 4520 + INTEGER(IntKi), PARAMETER :: M08N3FMze = 4521 + INTEGER(IntKi), PARAMETER :: M08N4FMze = 4522 + INTEGER(IntKi), PARAMETER :: M08N5FMze = 4523 + INTEGER(IntKi), PARAMETER :: M08N6FMze = 4524 + INTEGER(IntKi), PARAMETER :: M08N7FMze = 4525 + INTEGER(IntKi), PARAMETER :: M08N8FMze = 4526 + INTEGER(IntKi), PARAMETER :: M08N9FMze = 4527 + INTEGER(IntKi), PARAMETER :: M09N1FMze = 4528 + INTEGER(IntKi), PARAMETER :: M09N2FMze = 4529 + INTEGER(IntKi), PARAMETER :: M09N3FMze = 4530 + INTEGER(IntKi), PARAMETER :: M09N4FMze = 4531 + INTEGER(IntKi), PARAMETER :: M09N5FMze = 4532 + INTEGER(IntKi), PARAMETER :: M09N6FMze = 4533 + INTEGER(IntKi), PARAMETER :: M09N7FMze = 4534 + INTEGER(IntKi), PARAMETER :: M09N8FMze = 4535 + INTEGER(IntKi), PARAMETER :: M09N9FMze = 4536 + INTEGER(IntKi), PARAMETER :: M10N1FMze = 4537 + INTEGER(IntKi), PARAMETER :: M10N2FMze = 4538 + INTEGER(IntKi), PARAMETER :: M10N3FMze = 4539 + INTEGER(IntKi), PARAMETER :: M10N4FMze = 4540 + INTEGER(IntKi), PARAMETER :: M10N5FMze = 4541 + INTEGER(IntKi), PARAMETER :: M10N6FMze = 4542 + INTEGER(IntKi), PARAMETER :: M10N7FMze = 4543 + INTEGER(IntKi), PARAMETER :: M10N8FMze = 4544 + INTEGER(IntKi), PARAMETER :: M10N9FMze = 4545 + INTEGER(IntKi), PARAMETER :: M11N1FMze = 4546 + INTEGER(IntKi), PARAMETER :: M11N2FMze = 4547 + INTEGER(IntKi), PARAMETER :: M11N3FMze = 4548 + INTEGER(IntKi), PARAMETER :: M11N4FMze = 4549 + INTEGER(IntKi), PARAMETER :: M11N5FMze = 4550 + INTEGER(IntKi), PARAMETER :: M11N6FMze = 4551 + INTEGER(IntKi), PARAMETER :: M11N7FMze = 4552 + INTEGER(IntKi), PARAMETER :: M11N8FMze = 4553 + INTEGER(IntKi), PARAMETER :: M11N9FMze = 4554 + INTEGER(IntKi), PARAMETER :: M12N1FMze = 4555 + INTEGER(IntKi), PARAMETER :: M12N2FMze = 4556 + INTEGER(IntKi), PARAMETER :: M12N3FMze = 4557 + INTEGER(IntKi), PARAMETER :: M12N4FMze = 4558 + INTEGER(IntKi), PARAMETER :: M12N5FMze = 4559 + INTEGER(IntKi), PARAMETER :: M12N6FMze = 4560 + INTEGER(IntKi), PARAMETER :: M12N7FMze = 4561 + INTEGER(IntKi), PARAMETER :: M12N8FMze = 4562 + INTEGER(IntKi), PARAMETER :: M12N9FMze = 4563 + INTEGER(IntKi), PARAMETER :: M13N1FMze = 4564 + INTEGER(IntKi), PARAMETER :: M13N2FMze = 4565 + INTEGER(IntKi), PARAMETER :: M13N3FMze = 4566 + INTEGER(IntKi), PARAMETER :: M13N4FMze = 4567 + INTEGER(IntKi), PARAMETER :: M13N5FMze = 4568 + INTEGER(IntKi), PARAMETER :: M13N6FMze = 4569 + INTEGER(IntKi), PARAMETER :: M13N7FMze = 4570 + INTEGER(IntKi), PARAMETER :: M13N8FMze = 4571 + INTEGER(IntKi), PARAMETER :: M13N9FMze = 4572 + INTEGER(IntKi), PARAMETER :: M14N1FMze = 4573 + INTEGER(IntKi), PARAMETER :: M14N2FMze = 4574 + INTEGER(IntKi), PARAMETER :: M14N3FMze = 4575 + INTEGER(IntKi), PARAMETER :: M14N4FMze = 4576 + INTEGER(IntKi), PARAMETER :: M14N5FMze = 4577 + INTEGER(IntKi), PARAMETER :: M14N6FMze = 4578 + INTEGER(IntKi), PARAMETER :: M14N7FMze = 4579 + INTEGER(IntKi), PARAMETER :: M14N8FMze = 4580 + INTEGER(IntKi), PARAMETER :: M14N9FMze = 4581 + INTEGER(IntKi), PARAMETER :: M15N1FMze = 4582 + INTEGER(IntKi), PARAMETER :: M15N2FMze = 4583 + INTEGER(IntKi), PARAMETER :: M15N3FMze = 4584 + INTEGER(IntKi), PARAMETER :: M15N4FMze = 4585 + INTEGER(IntKi), PARAMETER :: M15N5FMze = 4586 + INTEGER(IntKi), PARAMETER :: M15N6FMze = 4587 + INTEGER(IntKi), PARAMETER :: M15N7FMze = 4588 + INTEGER(IntKi), PARAMETER :: M15N8FMze = 4589 + INTEGER(IntKi), PARAMETER :: M15N9FMze = 4590 + INTEGER(IntKi), PARAMETER :: M16N1FMze = 4591 + INTEGER(IntKi), PARAMETER :: M16N2FMze = 4592 + INTEGER(IntKi), PARAMETER :: M16N3FMze = 4593 + INTEGER(IntKi), PARAMETER :: M16N4FMze = 4594 + INTEGER(IntKi), PARAMETER :: M16N5FMze = 4595 + INTEGER(IntKi), PARAMETER :: M16N6FMze = 4596 + INTEGER(IntKi), PARAMETER :: M16N7FMze = 4597 + INTEGER(IntKi), PARAMETER :: M16N8FMze = 4598 + INTEGER(IntKi), PARAMETER :: M16N9FMze = 4599 + INTEGER(IntKi), PARAMETER :: M17N1FMze = 4600 + INTEGER(IntKi), PARAMETER :: M17N2FMze = 4601 + INTEGER(IntKi), PARAMETER :: M17N3FMze = 4602 + INTEGER(IntKi), PARAMETER :: M17N4FMze = 4603 + INTEGER(IntKi), PARAMETER :: M17N5FMze = 4604 + INTEGER(IntKi), PARAMETER :: M17N6FMze = 4605 + INTEGER(IntKi), PARAMETER :: M17N7FMze = 4606 + INTEGER(IntKi), PARAMETER :: M17N8FMze = 4607 + INTEGER(IntKi), PARAMETER :: M17N9FMze = 4608 + INTEGER(IntKi), PARAMETER :: M18N1FMze = 4609 + INTEGER(IntKi), PARAMETER :: M18N2FMze = 4610 + INTEGER(IntKi), PARAMETER :: M18N3FMze = 4611 + INTEGER(IntKi), PARAMETER :: M18N4FMze = 4612 + INTEGER(IntKi), PARAMETER :: M18N5FMze = 4613 + INTEGER(IntKi), PARAMETER :: M18N6FMze = 4614 + INTEGER(IntKi), PARAMETER :: M18N7FMze = 4615 + INTEGER(IntKi), PARAMETER :: M18N8FMze = 4616 + INTEGER(IntKi), PARAMETER :: M18N9FMze = 4617 + INTEGER(IntKi), PARAMETER :: M19N1FMze = 4618 + INTEGER(IntKi), PARAMETER :: M19N2FMze = 4619 + INTEGER(IntKi), PARAMETER :: M19N3FMze = 4620 + INTEGER(IntKi), PARAMETER :: M19N4FMze = 4621 + INTEGER(IntKi), PARAMETER :: M19N5FMze = 4622 + INTEGER(IntKi), PARAMETER :: M19N6FMze = 4623 + INTEGER(IntKi), PARAMETER :: M19N7FMze = 4624 + INTEGER(IntKi), PARAMETER :: M19N8FMze = 4625 + INTEGER(IntKi), PARAMETER :: M19N9FMze = 4626 + INTEGER(IntKi), PARAMETER :: M20N1FMze = 4627 + INTEGER(IntKi), PARAMETER :: M20N2FMze = 4628 + INTEGER(IntKi), PARAMETER :: M20N3FMze = 4629 + INTEGER(IntKi), PARAMETER :: M20N4FMze = 4630 + INTEGER(IntKi), PARAMETER :: M20N5FMze = 4631 + INTEGER(IntKi), PARAMETER :: M20N6FMze = 4632 + INTEGER(IntKi), PARAMETER :: M20N7FMze = 4633 + INTEGER(IntKi), PARAMETER :: M20N8FMze = 4634 + INTEGER(IntKi), PARAMETER :: M20N9FMze = 4635 + INTEGER(IntKi), PARAMETER :: M21N1FMze = 4636 + INTEGER(IntKi), PARAMETER :: M21N2FMze = 4637 + INTEGER(IntKi), PARAMETER :: M21N3FMze = 4638 + INTEGER(IntKi), PARAMETER :: M21N4FMze = 4639 + INTEGER(IntKi), PARAMETER :: M21N5FMze = 4640 + INTEGER(IntKi), PARAMETER :: M21N6FMze = 4641 + INTEGER(IntKi), PARAMETER :: M21N7FMze = 4642 + INTEGER(IntKi), PARAMETER :: M21N8FMze = 4643 + INTEGER(IntKi), PARAMETER :: M21N9FMze = 4644 + INTEGER(IntKi), PARAMETER :: M22N1FMze = 4645 + INTEGER(IntKi), PARAMETER :: M22N2FMze = 4646 + INTEGER(IntKi), PARAMETER :: M22N3FMze = 4647 + INTEGER(IntKi), PARAMETER :: M22N4FMze = 4648 + INTEGER(IntKi), PARAMETER :: M22N5FMze = 4649 + INTEGER(IntKi), PARAMETER :: M22N6FMze = 4650 + INTEGER(IntKi), PARAMETER :: M22N7FMze = 4651 + INTEGER(IntKi), PARAMETER :: M22N8FMze = 4652 + INTEGER(IntKi), PARAMETER :: M22N9FMze = 4653 + INTEGER(IntKi), PARAMETER :: M23N1FMze = 4654 + INTEGER(IntKi), PARAMETER :: M23N2FMze = 4655 + INTEGER(IntKi), PARAMETER :: M23N3FMze = 4656 + INTEGER(IntKi), PARAMETER :: M23N4FMze = 4657 + INTEGER(IntKi), PARAMETER :: M23N5FMze = 4658 + INTEGER(IntKi), PARAMETER :: M23N6FMze = 4659 + INTEGER(IntKi), PARAMETER :: M23N7FMze = 4660 + INTEGER(IntKi), PARAMETER :: M23N8FMze = 4661 + INTEGER(IntKi), PARAMETER :: M23N9FMze = 4662 + INTEGER(IntKi), PARAMETER :: M24N1FMze = 4663 + INTEGER(IntKi), PARAMETER :: M24N2FMze = 4664 + INTEGER(IntKi), PARAMETER :: M24N3FMze = 4665 + INTEGER(IntKi), PARAMETER :: M24N4FMze = 4666 + INTEGER(IntKi), PARAMETER :: M24N5FMze = 4667 + INTEGER(IntKi), PARAMETER :: M24N6FMze = 4668 + INTEGER(IntKi), PARAMETER :: M24N7FMze = 4669 + INTEGER(IntKi), PARAMETER :: M24N8FMze = 4670 + INTEGER(IntKi), PARAMETER :: M24N9FMze = 4671 + INTEGER(IntKi), PARAMETER :: M25N1FMze = 4672 + INTEGER(IntKi), PARAMETER :: M25N2FMze = 4673 + INTEGER(IntKi), PARAMETER :: M25N3FMze = 4674 + INTEGER(IntKi), PARAMETER :: M25N4FMze = 4675 + INTEGER(IntKi), PARAMETER :: M25N5FMze = 4676 + INTEGER(IntKi), PARAMETER :: M25N6FMze = 4677 + INTEGER(IntKi), PARAMETER :: M25N7FMze = 4678 + INTEGER(IntKi), PARAMETER :: M25N8FMze = 4679 + INTEGER(IntKi), PARAMETER :: M25N9FMze = 4680 + INTEGER(IntKi), PARAMETER :: M26N1FMze = 4681 + INTEGER(IntKi), PARAMETER :: M26N2FMze = 4682 + INTEGER(IntKi), PARAMETER :: M26N3FMze = 4683 + INTEGER(IntKi), PARAMETER :: M26N4FMze = 4684 + INTEGER(IntKi), PARAMETER :: M26N5FMze = 4685 + INTEGER(IntKi), PARAMETER :: M26N6FMze = 4686 + INTEGER(IntKi), PARAMETER :: M26N7FMze = 4687 + INTEGER(IntKi), PARAMETER :: M26N8FMze = 4688 + INTEGER(IntKi), PARAMETER :: M26N9FMze = 4689 + INTEGER(IntKi), PARAMETER :: M27N1FMze = 4690 + INTEGER(IntKi), PARAMETER :: M27N2FMze = 4691 + INTEGER(IntKi), PARAMETER :: M27N3FMze = 4692 + INTEGER(IntKi), PARAMETER :: M27N4FMze = 4693 + INTEGER(IntKi), PARAMETER :: M27N5FMze = 4694 + INTEGER(IntKi), PARAMETER :: M27N6FMze = 4695 + INTEGER(IntKi), PARAMETER :: M27N7FMze = 4696 + INTEGER(IntKi), PARAMETER :: M27N8FMze = 4697 + INTEGER(IntKi), PARAMETER :: M27N9FMze = 4698 + INTEGER(IntKi), PARAMETER :: M28N1FMze = 4699 + INTEGER(IntKi), PARAMETER :: M28N2FMze = 4700 + INTEGER(IntKi), PARAMETER :: M28N3FMze = 4701 + INTEGER(IntKi), PARAMETER :: M28N4FMze = 4702 + INTEGER(IntKi), PARAMETER :: M28N5FMze = 4703 + INTEGER(IntKi), PARAMETER :: M28N6FMze = 4704 + INTEGER(IntKi), PARAMETER :: M28N7FMze = 4705 + INTEGER(IntKi), PARAMETER :: M28N8FMze = 4706 + INTEGER(IntKi), PARAMETER :: M28N9FMze = 4707 + INTEGER(IntKi), PARAMETER :: M29N1FMze = 4708 + INTEGER(IntKi), PARAMETER :: M29N2FMze = 4709 + INTEGER(IntKi), PARAMETER :: M29N3FMze = 4710 + INTEGER(IntKi), PARAMETER :: M29N4FMze = 4711 + INTEGER(IntKi), PARAMETER :: M29N5FMze = 4712 + INTEGER(IntKi), PARAMETER :: M29N6FMze = 4713 + INTEGER(IntKi), PARAMETER :: M29N7FMze = 4714 + INTEGER(IntKi), PARAMETER :: M29N8FMze = 4715 + INTEGER(IntKi), PARAMETER :: M29N9FMze = 4716 + INTEGER(IntKi), PARAMETER :: M30N1FMze = 4717 + INTEGER(IntKi), PARAMETER :: M30N2FMze = 4718 + INTEGER(IntKi), PARAMETER :: M30N3FMze = 4719 + INTEGER(IntKi), PARAMETER :: M30N4FMze = 4720 + INTEGER(IntKi), PARAMETER :: M30N5FMze = 4721 + INTEGER(IntKi), PARAMETER :: M30N6FMze = 4722 + INTEGER(IntKi), PARAMETER :: M30N7FMze = 4723 + INTEGER(IntKi), PARAMETER :: M30N8FMze = 4724 + INTEGER(IntKi), PARAMETER :: M30N9FMze = 4725 + INTEGER(IntKi), PARAMETER :: M31N1FMze = 4726 + INTEGER(IntKi), PARAMETER :: M31N2FMze = 4727 + INTEGER(IntKi), PARAMETER :: M31N3FMze = 4728 + INTEGER(IntKi), PARAMETER :: M31N4FMze = 4729 + INTEGER(IntKi), PARAMETER :: M31N5FMze = 4730 + INTEGER(IntKi), PARAMETER :: M31N6FMze = 4731 + INTEGER(IntKi), PARAMETER :: M31N7FMze = 4732 + INTEGER(IntKi), PARAMETER :: M31N8FMze = 4733 + INTEGER(IntKi), PARAMETER :: M31N9FMze = 4734 + INTEGER(IntKi), PARAMETER :: M32N1FMze = 4735 + INTEGER(IntKi), PARAMETER :: M32N2FMze = 4736 + INTEGER(IntKi), PARAMETER :: M32N3FMze = 4737 + INTEGER(IntKi), PARAMETER :: M32N4FMze = 4738 + INTEGER(IntKi), PARAMETER :: M32N5FMze = 4739 + INTEGER(IntKi), PARAMETER :: M32N6FMze = 4740 + INTEGER(IntKi), PARAMETER :: M32N7FMze = 4741 + INTEGER(IntKi), PARAMETER :: M32N8FMze = 4742 + INTEGER(IntKi), PARAMETER :: M32N9FMze = 4743 + INTEGER(IntKi), PARAMETER :: M33N1FMze = 4744 + INTEGER(IntKi), PARAMETER :: M33N2FMze = 4745 + INTEGER(IntKi), PARAMETER :: M33N3FMze = 4746 + INTEGER(IntKi), PARAMETER :: M33N4FMze = 4747 + INTEGER(IntKi), PARAMETER :: M33N5FMze = 4748 + INTEGER(IntKi), PARAMETER :: M33N6FMze = 4749 + INTEGER(IntKi), PARAMETER :: M33N7FMze = 4750 + INTEGER(IntKi), PARAMETER :: M33N8FMze = 4751 + INTEGER(IntKi), PARAMETER :: M33N9FMze = 4752 + INTEGER(IntKi), PARAMETER :: M34N1FMze = 4753 + INTEGER(IntKi), PARAMETER :: M34N2FMze = 4754 + INTEGER(IntKi), PARAMETER :: M34N3FMze = 4755 + INTEGER(IntKi), PARAMETER :: M34N4FMze = 4756 + INTEGER(IntKi), PARAMETER :: M34N5FMze = 4757 + INTEGER(IntKi), PARAMETER :: M34N6FMze = 4758 + INTEGER(IntKi), PARAMETER :: M34N7FMze = 4759 + INTEGER(IntKi), PARAMETER :: M34N8FMze = 4760 + INTEGER(IntKi), PARAMETER :: M34N9FMze = 4761 + INTEGER(IntKi), PARAMETER :: M35N1FMze = 4762 + INTEGER(IntKi), PARAMETER :: M35N2FMze = 4763 + INTEGER(IntKi), PARAMETER :: M35N3FMze = 4764 + INTEGER(IntKi), PARAMETER :: M35N4FMze = 4765 + INTEGER(IntKi), PARAMETER :: M35N5FMze = 4766 + INTEGER(IntKi), PARAMETER :: M35N6FMze = 4767 + INTEGER(IntKi), PARAMETER :: M35N7FMze = 4768 + INTEGER(IntKi), PARAMETER :: M35N8FMze = 4769 + INTEGER(IntKi), PARAMETER :: M35N9FMze = 4770 + INTEGER(IntKi), PARAMETER :: M36N1FMze = 4771 + INTEGER(IntKi), PARAMETER :: M36N2FMze = 4772 + INTEGER(IntKi), PARAMETER :: M36N3FMze = 4773 + INTEGER(IntKi), PARAMETER :: M36N4FMze = 4774 + INTEGER(IntKi), PARAMETER :: M36N5FMze = 4775 + INTEGER(IntKi), PARAMETER :: M36N6FMze = 4776 + INTEGER(IntKi), PARAMETER :: M36N7FMze = 4777 + INTEGER(IntKi), PARAMETER :: M36N8FMze = 4778 + INTEGER(IntKi), PARAMETER :: M36N9FMze = 4779 + INTEGER(IntKi), PARAMETER :: M37N1FMze = 4780 + INTEGER(IntKi), PARAMETER :: M37N2FMze = 4781 + INTEGER(IntKi), PARAMETER :: M37N3FMze = 4782 + INTEGER(IntKi), PARAMETER :: M37N4FMze = 4783 + INTEGER(IntKi), PARAMETER :: M37N5FMze = 4784 + INTEGER(IntKi), PARAMETER :: M37N6FMze = 4785 + INTEGER(IntKi), PARAMETER :: M37N7FMze = 4786 + INTEGER(IntKi), PARAMETER :: M37N8FMze = 4787 + INTEGER(IntKi), PARAMETER :: M37N9FMze = 4788 + INTEGER(IntKi), PARAMETER :: M38N1FMze = 4789 + INTEGER(IntKi), PARAMETER :: M38N2FMze = 4790 + INTEGER(IntKi), PARAMETER :: M38N3FMze = 4791 + INTEGER(IntKi), PARAMETER :: M38N4FMze = 4792 + INTEGER(IntKi), PARAMETER :: M38N5FMze = 4793 + INTEGER(IntKi), PARAMETER :: M38N6FMze = 4794 + INTEGER(IntKi), PARAMETER :: M38N7FMze = 4795 + INTEGER(IntKi), PARAMETER :: M38N8FMze = 4796 + INTEGER(IntKi), PARAMETER :: M38N9FMze = 4797 + INTEGER(IntKi), PARAMETER :: M39N1FMze = 4798 + INTEGER(IntKi), PARAMETER :: M39N2FMze = 4799 + INTEGER(IntKi), PARAMETER :: M39N3FMze = 4800 + INTEGER(IntKi), PARAMETER :: M39N4FMze = 4801 + INTEGER(IntKi), PARAMETER :: M39N5FMze = 4802 + INTEGER(IntKi), PARAMETER :: M39N6FMze = 4803 + INTEGER(IntKi), PARAMETER :: M39N7FMze = 4804 + INTEGER(IntKi), PARAMETER :: M39N8FMze = 4805 + INTEGER(IntKi), PARAMETER :: M39N9FMze = 4806 + INTEGER(IntKi), PARAMETER :: M40N1FMze = 4807 + INTEGER(IntKi), PARAMETER :: M40N2FMze = 4808 + INTEGER(IntKi), PARAMETER :: M40N3FMze = 4809 + INTEGER(IntKi), PARAMETER :: M40N4FMze = 4810 + INTEGER(IntKi), PARAMETER :: M40N5FMze = 4811 + INTEGER(IntKi), PARAMETER :: M40N6FMze = 4812 + INTEGER(IntKi), PARAMETER :: M40N7FMze = 4813 + INTEGER(IntKi), PARAMETER :: M40N8FMze = 4814 + INTEGER(IntKi), PARAMETER :: M40N9FMze = 4815 + INTEGER(IntKi), PARAMETER :: M41N1FMze = 4816 + INTEGER(IntKi), PARAMETER :: M41N2FMze = 4817 + INTEGER(IntKi), PARAMETER :: M41N3FMze = 4818 + INTEGER(IntKi), PARAMETER :: M41N4FMze = 4819 + INTEGER(IntKi), PARAMETER :: M41N5FMze = 4820 + INTEGER(IntKi), PARAMETER :: M41N6FMze = 4821 + INTEGER(IntKi), PARAMETER :: M41N7FMze = 4822 + INTEGER(IntKi), PARAMETER :: M41N8FMze = 4823 + INTEGER(IntKi), PARAMETER :: M41N9FMze = 4824 + INTEGER(IntKi), PARAMETER :: M42N1FMze = 4825 + INTEGER(IntKi), PARAMETER :: M42N2FMze = 4826 + INTEGER(IntKi), PARAMETER :: M42N3FMze = 4827 + INTEGER(IntKi), PARAMETER :: M42N4FMze = 4828 + INTEGER(IntKi), PARAMETER :: M42N5FMze = 4829 + INTEGER(IntKi), PARAMETER :: M42N6FMze = 4830 + INTEGER(IntKi), PARAMETER :: M42N7FMze = 4831 + INTEGER(IntKi), PARAMETER :: M42N8FMze = 4832 + INTEGER(IntKi), PARAMETER :: M42N9FMze = 4833 + INTEGER(IntKi), PARAMETER :: M43N1FMze = 4834 + INTEGER(IntKi), PARAMETER :: M43N2FMze = 4835 + INTEGER(IntKi), PARAMETER :: M43N3FMze = 4836 + INTEGER(IntKi), PARAMETER :: M43N4FMze = 4837 + INTEGER(IntKi), PARAMETER :: M43N5FMze = 4838 + INTEGER(IntKi), PARAMETER :: M43N6FMze = 4839 + INTEGER(IntKi), PARAMETER :: M43N7FMze = 4840 + INTEGER(IntKi), PARAMETER :: M43N8FMze = 4841 + INTEGER(IntKi), PARAMETER :: M43N9FMze = 4842 + INTEGER(IntKi), PARAMETER :: M44N1FMze = 4843 + INTEGER(IntKi), PARAMETER :: M44N2FMze = 4844 + INTEGER(IntKi), PARAMETER :: M44N3FMze = 4845 + INTEGER(IntKi), PARAMETER :: M44N4FMze = 4846 + INTEGER(IntKi), PARAMETER :: M44N5FMze = 4847 + INTEGER(IntKi), PARAMETER :: M44N6FMze = 4848 + INTEGER(IntKi), PARAMETER :: M44N7FMze = 4849 + INTEGER(IntKi), PARAMETER :: M44N8FMze = 4850 + INTEGER(IntKi), PARAMETER :: M44N9FMze = 4851 + INTEGER(IntKi), PARAMETER :: M45N1FMze = 4852 + INTEGER(IntKi), PARAMETER :: M45N2FMze = 4853 + INTEGER(IntKi), PARAMETER :: M45N3FMze = 4854 + INTEGER(IntKi), PARAMETER :: M45N4FMze = 4855 + INTEGER(IntKi), PARAMETER :: M45N5FMze = 4856 + INTEGER(IntKi), PARAMETER :: M45N6FMze = 4857 + INTEGER(IntKi), PARAMETER :: M45N7FMze = 4858 + INTEGER(IntKi), PARAMETER :: M45N8FMze = 4859 + INTEGER(IntKi), PARAMETER :: M45N9FMze = 4860 + INTEGER(IntKi), PARAMETER :: M46N1FMze = 4861 + INTEGER(IntKi), PARAMETER :: M46N2FMze = 4862 + INTEGER(IntKi), PARAMETER :: M46N3FMze = 4863 + INTEGER(IntKi), PARAMETER :: M46N4FMze = 4864 + INTEGER(IntKi), PARAMETER :: M46N5FMze = 4865 + INTEGER(IntKi), PARAMETER :: M46N6FMze = 4866 + INTEGER(IntKi), PARAMETER :: M46N7FMze = 4867 + INTEGER(IntKi), PARAMETER :: M46N8FMze = 4868 + INTEGER(IntKi), PARAMETER :: M46N9FMze = 4869 + INTEGER(IntKi), PARAMETER :: M47N1FMze = 4870 + INTEGER(IntKi), PARAMETER :: M47N2FMze = 4871 + INTEGER(IntKi), PARAMETER :: M47N3FMze = 4872 + INTEGER(IntKi), PARAMETER :: M47N4FMze = 4873 + INTEGER(IntKi), PARAMETER :: M47N5FMze = 4874 + INTEGER(IntKi), PARAMETER :: M47N6FMze = 4875 + INTEGER(IntKi), PARAMETER :: M47N7FMze = 4876 + INTEGER(IntKi), PARAMETER :: M47N8FMze = 4877 + INTEGER(IntKi), PARAMETER :: M47N9FMze = 4878 + INTEGER(IntKi), PARAMETER :: M48N1FMze = 4879 + INTEGER(IntKi), PARAMETER :: M48N2FMze = 4880 + INTEGER(IntKi), PARAMETER :: M48N3FMze = 4881 + INTEGER(IntKi), PARAMETER :: M48N4FMze = 4882 + INTEGER(IntKi), PARAMETER :: M48N5FMze = 4883 + INTEGER(IntKi), PARAMETER :: M48N6FMze = 4884 + INTEGER(IntKi), PARAMETER :: M48N7FMze = 4885 + INTEGER(IntKi), PARAMETER :: M48N8FMze = 4886 + INTEGER(IntKi), PARAMETER :: M48N9FMze = 4887 + INTEGER(IntKi), PARAMETER :: M49N1FMze = 4888 + INTEGER(IntKi), PARAMETER :: M49N2FMze = 4889 + INTEGER(IntKi), PARAMETER :: M49N3FMze = 4890 + INTEGER(IntKi), PARAMETER :: M49N4FMze = 4891 + INTEGER(IntKi), PARAMETER :: M49N5FMze = 4892 + INTEGER(IntKi), PARAMETER :: M49N6FMze = 4893 + INTEGER(IntKi), PARAMETER :: M49N7FMze = 4894 + INTEGER(IntKi), PARAMETER :: M49N8FMze = 4895 + INTEGER(IntKi), PARAMETER :: M49N9FMze = 4896 + INTEGER(IntKi), PARAMETER :: M50N1FMze = 4897 + INTEGER(IntKi), PARAMETER :: M50N2FMze = 4898 + INTEGER(IntKi), PARAMETER :: M50N3FMze = 4899 + INTEGER(IntKi), PARAMETER :: M50N4FMze = 4900 + INTEGER(IntKi), PARAMETER :: M50N5FMze = 4901 + INTEGER(IntKi), PARAMETER :: M50N6FMze = 4902 + INTEGER(IntKi), PARAMETER :: M50N7FMze = 4903 + INTEGER(IntKi), PARAMETER :: M50N8FMze = 4904 + INTEGER(IntKi), PARAMETER :: M50N9FMze = 4905 + INTEGER(IntKi), PARAMETER :: M51N1FMze = 4906 + INTEGER(IntKi), PARAMETER :: M51N2FMze = 4907 + INTEGER(IntKi), PARAMETER :: M51N3FMze = 4908 + INTEGER(IntKi), PARAMETER :: M51N4FMze = 4909 + INTEGER(IntKi), PARAMETER :: M51N5FMze = 4910 + INTEGER(IntKi), PARAMETER :: M51N6FMze = 4911 + INTEGER(IntKi), PARAMETER :: M51N7FMze = 4912 + INTEGER(IntKi), PARAMETER :: M51N8FMze = 4913 + INTEGER(IntKi), PARAMETER :: M51N9FMze = 4914 + INTEGER(IntKi), PARAMETER :: M52N1FMze = 4915 + INTEGER(IntKi), PARAMETER :: M52N2FMze = 4916 + INTEGER(IntKi), PARAMETER :: M52N3FMze = 4917 + INTEGER(IntKi), PARAMETER :: M52N4FMze = 4918 + INTEGER(IntKi), PARAMETER :: M52N5FMze = 4919 + INTEGER(IntKi), PARAMETER :: M52N6FMze = 4920 + INTEGER(IntKi), PARAMETER :: M52N7FMze = 4921 + INTEGER(IntKi), PARAMETER :: M52N8FMze = 4922 + INTEGER(IntKi), PARAMETER :: M52N9FMze = 4923 + INTEGER(IntKi), PARAMETER :: M53N1FMze = 4924 + INTEGER(IntKi), PARAMETER :: M53N2FMze = 4925 + INTEGER(IntKi), PARAMETER :: M53N3FMze = 4926 + INTEGER(IntKi), PARAMETER :: M53N4FMze = 4927 + INTEGER(IntKi), PARAMETER :: M53N5FMze = 4928 + INTEGER(IntKi), PARAMETER :: M53N6FMze = 4929 + INTEGER(IntKi), PARAMETER :: M53N7FMze = 4930 + INTEGER(IntKi), PARAMETER :: M53N8FMze = 4931 + INTEGER(IntKi), PARAMETER :: M53N9FMze = 4932 + INTEGER(IntKi), PARAMETER :: M54N1FMze = 4933 + INTEGER(IntKi), PARAMETER :: M54N2FMze = 4934 + INTEGER(IntKi), PARAMETER :: M54N3FMze = 4935 + INTEGER(IntKi), PARAMETER :: M54N4FMze = 4936 + INTEGER(IntKi), PARAMETER :: M54N5FMze = 4937 + INTEGER(IntKi), PARAMETER :: M54N6FMze = 4938 + INTEGER(IntKi), PARAMETER :: M54N7FMze = 4939 + INTEGER(IntKi), PARAMETER :: M54N8FMze = 4940 + INTEGER(IntKi), PARAMETER :: M54N9FMze = 4941 + INTEGER(IntKi), PARAMETER :: M55N1FMze = 4942 + INTEGER(IntKi), PARAMETER :: M55N2FMze = 4943 + INTEGER(IntKi), PARAMETER :: M55N3FMze = 4944 + INTEGER(IntKi), PARAMETER :: M55N4FMze = 4945 + INTEGER(IntKi), PARAMETER :: M55N5FMze = 4946 + INTEGER(IntKi), PARAMETER :: M55N6FMze = 4947 + INTEGER(IntKi), PARAMETER :: M55N7FMze = 4948 + INTEGER(IntKi), PARAMETER :: M55N8FMze = 4949 + INTEGER(IntKi), PARAMETER :: M55N9FMze = 4950 + INTEGER(IntKi), PARAMETER :: M56N1FMze = 4951 + INTEGER(IntKi), PARAMETER :: M56N2FMze = 4952 + INTEGER(IntKi), PARAMETER :: M56N3FMze = 4953 + INTEGER(IntKi), PARAMETER :: M56N4FMze = 4954 + INTEGER(IntKi), PARAMETER :: M56N5FMze = 4955 + INTEGER(IntKi), PARAMETER :: M56N6FMze = 4956 + INTEGER(IntKi), PARAMETER :: M56N7FMze = 4957 + INTEGER(IntKi), PARAMETER :: M56N8FMze = 4958 + INTEGER(IntKi), PARAMETER :: M56N9FMze = 4959 + INTEGER(IntKi), PARAMETER :: M57N1FMze = 4960 + INTEGER(IntKi), PARAMETER :: M57N2FMze = 4961 + INTEGER(IntKi), PARAMETER :: M57N3FMze = 4962 + INTEGER(IntKi), PARAMETER :: M57N4FMze = 4963 + INTEGER(IntKi), PARAMETER :: M57N5FMze = 4964 + INTEGER(IntKi), PARAMETER :: M57N6FMze = 4965 + INTEGER(IntKi), PARAMETER :: M57N7FMze = 4966 + INTEGER(IntKi), PARAMETER :: M57N8FMze = 4967 + INTEGER(IntKi), PARAMETER :: M57N9FMze = 4968 + INTEGER(IntKi), PARAMETER :: M58N1FMze = 4969 + INTEGER(IntKi), PARAMETER :: M58N2FMze = 4970 + INTEGER(IntKi), PARAMETER :: M58N3FMze = 4971 + INTEGER(IntKi), PARAMETER :: M58N4FMze = 4972 + INTEGER(IntKi), PARAMETER :: M58N5FMze = 4973 + INTEGER(IntKi), PARAMETER :: M58N6FMze = 4974 + INTEGER(IntKi), PARAMETER :: M58N7FMze = 4975 + INTEGER(IntKi), PARAMETER :: M58N8FMze = 4976 + INTEGER(IntKi), PARAMETER :: M58N9FMze = 4977 + INTEGER(IntKi), PARAMETER :: M59N1FMze = 4978 + INTEGER(IntKi), PARAMETER :: M59N2FMze = 4979 + INTEGER(IntKi), PARAMETER :: M59N3FMze = 4980 + INTEGER(IntKi), PARAMETER :: M59N4FMze = 4981 + INTEGER(IntKi), PARAMETER :: M59N5FMze = 4982 + INTEGER(IntKi), PARAMETER :: M59N6FMze = 4983 + INTEGER(IntKi), PARAMETER :: M59N7FMze = 4984 + INTEGER(IntKi), PARAMETER :: M59N8FMze = 4985 + INTEGER(IntKi), PARAMETER :: M59N9FMze = 4986 + INTEGER(IntKi), PARAMETER :: M60N1FMze = 4987 + INTEGER(IntKi), PARAMETER :: M60N2FMze = 4988 + INTEGER(IntKi), PARAMETER :: M60N3FMze = 4989 + INTEGER(IntKi), PARAMETER :: M60N4FMze = 4990 + INTEGER(IntKi), PARAMETER :: M60N5FMze = 4991 + INTEGER(IntKi), PARAMETER :: M60N6FMze = 4992 + INTEGER(IntKi), PARAMETER :: M60N7FMze = 4993 + INTEGER(IntKi), PARAMETER :: M60N8FMze = 4994 + INTEGER(IntKi), PARAMETER :: M60N9FMze = 4995 + INTEGER(IntKi), PARAMETER :: M61N1FMze = 4996 + INTEGER(IntKi), PARAMETER :: M61N2FMze = 4997 + INTEGER(IntKi), PARAMETER :: M61N3FMze = 4998 + INTEGER(IntKi), PARAMETER :: M61N4FMze = 4999 + INTEGER(IntKi), PARAMETER :: M61N5FMze = 5000 + INTEGER(IntKi), PARAMETER :: M61N6FMze = 5001 + INTEGER(IntKi), PARAMETER :: M61N7FMze = 5002 + INTEGER(IntKi), PARAMETER :: M61N8FMze = 5003 + INTEGER(IntKi), PARAMETER :: M61N9FMze = 5004 + INTEGER(IntKi), PARAMETER :: M62N1FMze = 5005 + INTEGER(IntKi), PARAMETER :: M62N2FMze = 5006 + INTEGER(IntKi), PARAMETER :: M62N3FMze = 5007 + INTEGER(IntKi), PARAMETER :: M62N4FMze = 5008 + INTEGER(IntKi), PARAMETER :: M62N5FMze = 5009 + INTEGER(IntKi), PARAMETER :: M62N6FMze = 5010 + INTEGER(IntKi), PARAMETER :: M62N7FMze = 5011 + INTEGER(IntKi), PARAMETER :: M62N8FMze = 5012 + INTEGER(IntKi), PARAMETER :: M62N9FMze = 5013 + INTEGER(IntKi), PARAMETER :: M63N1FMze = 5014 + INTEGER(IntKi), PARAMETER :: M63N2FMze = 5015 + INTEGER(IntKi), PARAMETER :: M63N3FMze = 5016 + INTEGER(IntKi), PARAMETER :: M63N4FMze = 5017 + INTEGER(IntKi), PARAMETER :: M63N5FMze = 5018 + INTEGER(IntKi), PARAMETER :: M63N6FMze = 5019 + INTEGER(IntKi), PARAMETER :: M63N7FMze = 5020 + INTEGER(IntKi), PARAMETER :: M63N8FMze = 5021 + INTEGER(IntKi), PARAMETER :: M63N9FMze = 5022 + INTEGER(IntKi), PARAMETER :: M64N1FMze = 5023 + INTEGER(IntKi), PARAMETER :: M64N2FMze = 5024 + INTEGER(IntKi), PARAMETER :: M64N3FMze = 5025 + INTEGER(IntKi), PARAMETER :: M64N4FMze = 5026 + INTEGER(IntKi), PARAMETER :: M64N5FMze = 5027 + INTEGER(IntKi), PARAMETER :: M64N6FMze = 5028 + INTEGER(IntKi), PARAMETER :: M64N7FMze = 5029 + INTEGER(IntKi), PARAMETER :: M64N8FMze = 5030 + INTEGER(IntKi), PARAMETER :: M64N9FMze = 5031 + INTEGER(IntKi), PARAMETER :: M65N1FMze = 5032 + INTEGER(IntKi), PARAMETER :: M65N2FMze = 5033 + INTEGER(IntKi), PARAMETER :: M65N3FMze = 5034 + INTEGER(IntKi), PARAMETER :: M65N4FMze = 5035 + INTEGER(IntKi), PARAMETER :: M65N5FMze = 5036 + INTEGER(IntKi), PARAMETER :: M65N6FMze = 5037 + INTEGER(IntKi), PARAMETER :: M65N7FMze = 5038 + INTEGER(IntKi), PARAMETER :: M65N8FMze = 5039 + INTEGER(IntKi), PARAMETER :: M65N9FMze = 5040 + INTEGER(IntKi), PARAMETER :: M66N1FMze = 5041 + INTEGER(IntKi), PARAMETER :: M66N2FMze = 5042 + INTEGER(IntKi), PARAMETER :: M66N3FMze = 5043 + INTEGER(IntKi), PARAMETER :: M66N4FMze = 5044 + INTEGER(IntKi), PARAMETER :: M66N5FMze = 5045 + INTEGER(IntKi), PARAMETER :: M66N6FMze = 5046 + INTEGER(IntKi), PARAMETER :: M66N7FMze = 5047 + INTEGER(IntKi), PARAMETER :: M66N8FMze = 5048 + INTEGER(IntKi), PARAMETER :: M66N9FMze = 5049 + INTEGER(IntKi), PARAMETER :: M67N1FMze = 5050 + INTEGER(IntKi), PARAMETER :: M67N2FMze = 5051 + INTEGER(IntKi), PARAMETER :: M67N3FMze = 5052 + INTEGER(IntKi), PARAMETER :: M67N4FMze = 5053 + INTEGER(IntKi), PARAMETER :: M67N5FMze = 5054 + INTEGER(IntKi), PARAMETER :: M67N6FMze = 5055 + INTEGER(IntKi), PARAMETER :: M67N7FMze = 5056 + INTEGER(IntKi), PARAMETER :: M67N8FMze = 5057 + INTEGER(IntKi), PARAMETER :: M67N9FMze = 5058 + INTEGER(IntKi), PARAMETER :: M68N1FMze = 5059 + INTEGER(IntKi), PARAMETER :: M68N2FMze = 5060 + INTEGER(IntKi), PARAMETER :: M68N3FMze = 5061 + INTEGER(IntKi), PARAMETER :: M68N4FMze = 5062 + INTEGER(IntKi), PARAMETER :: M68N5FMze = 5063 + INTEGER(IntKi), PARAMETER :: M68N6FMze = 5064 + INTEGER(IntKi), PARAMETER :: M68N7FMze = 5065 + INTEGER(IntKi), PARAMETER :: M68N8FMze = 5066 + INTEGER(IntKi), PARAMETER :: M68N9FMze = 5067 + INTEGER(IntKi), PARAMETER :: M69N1FMze = 5068 + INTEGER(IntKi), PARAMETER :: M69N2FMze = 5069 + INTEGER(IntKi), PARAMETER :: M69N3FMze = 5070 + INTEGER(IntKi), PARAMETER :: M69N4FMze = 5071 + INTEGER(IntKi), PARAMETER :: M69N5FMze = 5072 + INTEGER(IntKi), PARAMETER :: M69N6FMze = 5073 + INTEGER(IntKi), PARAMETER :: M69N7FMze = 5074 + INTEGER(IntKi), PARAMETER :: M69N8FMze = 5075 + INTEGER(IntKi), PARAMETER :: M69N9FMze = 5076 + INTEGER(IntKi), PARAMETER :: M70N1FMze = 5077 + INTEGER(IntKi), PARAMETER :: M70N2FMze = 5078 + INTEGER(IntKi), PARAMETER :: M70N3FMze = 5079 + INTEGER(IntKi), PARAMETER :: M70N4FMze = 5080 + INTEGER(IntKi), PARAMETER :: M70N5FMze = 5081 + INTEGER(IntKi), PARAMETER :: M70N6FMze = 5082 + INTEGER(IntKi), PARAMETER :: M70N7FMze = 5083 + INTEGER(IntKi), PARAMETER :: M70N8FMze = 5084 + INTEGER(IntKi), PARAMETER :: M70N9FMze = 5085 + INTEGER(IntKi), PARAMETER :: M71N1FMze = 5086 + INTEGER(IntKi), PARAMETER :: M71N2FMze = 5087 + INTEGER(IntKi), PARAMETER :: M71N3FMze = 5088 + INTEGER(IntKi), PARAMETER :: M71N4FMze = 5089 + INTEGER(IntKi), PARAMETER :: M71N5FMze = 5090 + INTEGER(IntKi), PARAMETER :: M71N6FMze = 5091 + INTEGER(IntKi), PARAMETER :: M71N7FMze = 5092 + INTEGER(IntKi), PARAMETER :: M71N8FMze = 5093 + INTEGER(IntKi), PARAMETER :: M71N9FMze = 5094 + INTEGER(IntKi), PARAMETER :: M72N1FMze = 5095 + INTEGER(IntKi), PARAMETER :: M72N2FMze = 5096 + INTEGER(IntKi), PARAMETER :: M72N3FMze = 5097 + INTEGER(IntKi), PARAMETER :: M72N4FMze = 5098 + INTEGER(IntKi), PARAMETER :: M72N5FMze = 5099 + INTEGER(IntKi), PARAMETER :: M72N6FMze = 5100 + INTEGER(IntKi), PARAMETER :: M72N7FMze = 5101 + INTEGER(IntKi), PARAMETER :: M72N8FMze = 5102 + INTEGER(IntKi), PARAMETER :: M72N9FMze = 5103 + INTEGER(IntKi), PARAMETER :: M73N1FMze = 5104 + INTEGER(IntKi), PARAMETER :: M73N2FMze = 5105 + INTEGER(IntKi), PARAMETER :: M73N3FMze = 5106 + INTEGER(IntKi), PARAMETER :: M73N4FMze = 5107 + INTEGER(IntKi), PARAMETER :: M73N5FMze = 5108 + INTEGER(IntKi), PARAMETER :: M73N6FMze = 5109 + INTEGER(IntKi), PARAMETER :: M73N7FMze = 5110 + INTEGER(IntKi), PARAMETER :: M73N8FMze = 5111 + INTEGER(IntKi), PARAMETER :: M73N9FMze = 5112 + INTEGER(IntKi), PARAMETER :: M74N1FMze = 5113 + INTEGER(IntKi), PARAMETER :: M74N2FMze = 5114 + INTEGER(IntKi), PARAMETER :: M74N3FMze = 5115 + INTEGER(IntKi), PARAMETER :: M74N4FMze = 5116 + INTEGER(IntKi), PARAMETER :: M74N5FMze = 5117 + INTEGER(IntKi), PARAMETER :: M74N6FMze = 5118 + INTEGER(IntKi), PARAMETER :: M74N7FMze = 5119 + INTEGER(IntKi), PARAMETER :: M74N8FMze = 5120 + INTEGER(IntKi), PARAMETER :: M74N9FMze = 5121 + INTEGER(IntKi), PARAMETER :: M75N1FMze = 5122 + INTEGER(IntKi), PARAMETER :: M75N2FMze = 5123 + INTEGER(IntKi), PARAMETER :: M75N3FMze = 5124 + INTEGER(IntKi), PARAMETER :: M75N4FMze = 5125 + INTEGER(IntKi), PARAMETER :: M75N5FMze = 5126 + INTEGER(IntKi), PARAMETER :: M75N6FMze = 5127 + INTEGER(IntKi), PARAMETER :: M75N7FMze = 5128 + INTEGER(IntKi), PARAMETER :: M75N8FMze = 5129 + INTEGER(IntKi), PARAMETER :: M75N9FMze = 5130 + INTEGER(IntKi), PARAMETER :: M76N1FMze = 5131 + INTEGER(IntKi), PARAMETER :: M76N2FMze = 5132 + INTEGER(IntKi), PARAMETER :: M76N3FMze = 5133 + INTEGER(IntKi), PARAMETER :: M76N4FMze = 5134 + INTEGER(IntKi), PARAMETER :: M76N5FMze = 5135 + INTEGER(IntKi), PARAMETER :: M76N6FMze = 5136 + INTEGER(IntKi), PARAMETER :: M76N7FMze = 5137 + INTEGER(IntKi), PARAMETER :: M76N8FMze = 5138 + INTEGER(IntKi), PARAMETER :: M76N9FMze = 5139 + INTEGER(IntKi), PARAMETER :: M77N1FMze = 5140 + INTEGER(IntKi), PARAMETER :: M77N2FMze = 5141 + INTEGER(IntKi), PARAMETER :: M77N3FMze = 5142 + INTEGER(IntKi), PARAMETER :: M77N4FMze = 5143 + INTEGER(IntKi), PARAMETER :: M77N5FMze = 5144 + INTEGER(IntKi), PARAMETER :: M77N6FMze = 5145 + INTEGER(IntKi), PARAMETER :: M77N7FMze = 5146 + INTEGER(IntKi), PARAMETER :: M77N8FMze = 5147 + INTEGER(IntKi), PARAMETER :: M77N9FMze = 5148 + INTEGER(IntKi), PARAMETER :: M78N1FMze = 5149 + INTEGER(IntKi), PARAMETER :: M78N2FMze = 5150 + INTEGER(IntKi), PARAMETER :: M78N3FMze = 5151 + INTEGER(IntKi), PARAMETER :: M78N4FMze = 5152 + INTEGER(IntKi), PARAMETER :: M78N5FMze = 5153 + INTEGER(IntKi), PARAMETER :: M78N6FMze = 5154 + INTEGER(IntKi), PARAMETER :: M78N7FMze = 5155 + INTEGER(IntKi), PARAMETER :: M78N8FMze = 5156 + INTEGER(IntKi), PARAMETER :: M78N9FMze = 5157 + INTEGER(IntKi), PARAMETER :: M79N1FMze = 5158 + INTEGER(IntKi), PARAMETER :: M79N2FMze = 5159 + INTEGER(IntKi), PARAMETER :: M79N3FMze = 5160 + INTEGER(IntKi), PARAMETER :: M79N4FMze = 5161 + INTEGER(IntKi), PARAMETER :: M79N5FMze = 5162 + INTEGER(IntKi), PARAMETER :: M79N6FMze = 5163 + INTEGER(IntKi), PARAMETER :: M79N7FMze = 5164 + INTEGER(IntKi), PARAMETER :: M79N8FMze = 5165 + INTEGER(IntKi), PARAMETER :: M79N9FMze = 5166 + INTEGER(IntKi), PARAMETER :: M80N1FMze = 5167 + INTEGER(IntKi), PARAMETER :: M80N2FMze = 5168 + INTEGER(IntKi), PARAMETER :: M80N3FMze = 5169 + INTEGER(IntKi), PARAMETER :: M80N4FMze = 5170 + INTEGER(IntKi), PARAMETER :: M80N5FMze = 5171 + INTEGER(IntKi), PARAMETER :: M80N6FMze = 5172 + INTEGER(IntKi), PARAMETER :: M80N7FMze = 5173 + INTEGER(IntKi), PARAMETER :: M80N8FMze = 5174 + INTEGER(IntKi), PARAMETER :: M80N9FMze = 5175 + INTEGER(IntKi), PARAMETER :: M81N1FMze = 5176 + INTEGER(IntKi), PARAMETER :: M81N2FMze = 5177 + INTEGER(IntKi), PARAMETER :: M81N3FMze = 5178 + INTEGER(IntKi), PARAMETER :: M81N4FMze = 5179 + INTEGER(IntKi), PARAMETER :: M81N5FMze = 5180 + INTEGER(IntKi), PARAMETER :: M81N6FMze = 5181 + INTEGER(IntKi), PARAMETER :: M81N7FMze = 5182 + INTEGER(IntKi), PARAMETER :: M81N8FMze = 5183 + INTEGER(IntKi), PARAMETER :: M81N9FMze = 5184 + INTEGER(IntKi), PARAMETER :: M82N1FMze = 5185 + INTEGER(IntKi), PARAMETER :: M82N2FMze = 5186 + INTEGER(IntKi), PARAMETER :: M82N3FMze = 5187 + INTEGER(IntKi), PARAMETER :: M82N4FMze = 5188 + INTEGER(IntKi), PARAMETER :: M82N5FMze = 5189 + INTEGER(IntKi), PARAMETER :: M82N6FMze = 5190 + INTEGER(IntKi), PARAMETER :: M82N7FMze = 5191 + INTEGER(IntKi), PARAMETER :: M82N8FMze = 5192 + INTEGER(IntKi), PARAMETER :: M82N9FMze = 5193 + INTEGER(IntKi), PARAMETER :: M83N1FMze = 5194 + INTEGER(IntKi), PARAMETER :: M83N2FMze = 5195 + INTEGER(IntKi), PARAMETER :: M83N3FMze = 5196 + INTEGER(IntKi), PARAMETER :: M83N4FMze = 5197 + INTEGER(IntKi), PARAMETER :: M83N5FMze = 5198 + INTEGER(IntKi), PARAMETER :: M83N6FMze = 5199 + INTEGER(IntKi), PARAMETER :: M83N7FMze = 5200 + INTEGER(IntKi), PARAMETER :: M83N8FMze = 5201 + INTEGER(IntKi), PARAMETER :: M83N9FMze = 5202 + INTEGER(IntKi), PARAMETER :: M84N1FMze = 5203 + INTEGER(IntKi), PARAMETER :: M84N2FMze = 5204 + INTEGER(IntKi), PARAMETER :: M84N3FMze = 5205 + INTEGER(IntKi), PARAMETER :: M84N4FMze = 5206 + INTEGER(IntKi), PARAMETER :: M84N5FMze = 5207 + INTEGER(IntKi), PARAMETER :: M84N6FMze = 5208 + INTEGER(IntKi), PARAMETER :: M84N7FMze = 5209 + INTEGER(IntKi), PARAMETER :: M84N8FMze = 5210 + INTEGER(IntKi), PARAMETER :: M84N9FMze = 5211 + INTEGER(IntKi), PARAMETER :: M85N1FMze = 5212 + INTEGER(IntKi), PARAMETER :: M85N2FMze = 5213 + INTEGER(IntKi), PARAMETER :: M85N3FMze = 5214 + INTEGER(IntKi), PARAMETER :: M85N4FMze = 5215 + INTEGER(IntKi), PARAMETER :: M85N5FMze = 5216 + INTEGER(IntKi), PARAMETER :: M85N6FMze = 5217 + INTEGER(IntKi), PARAMETER :: M85N7FMze = 5218 + INTEGER(IntKi), PARAMETER :: M85N8FMze = 5219 + INTEGER(IntKi), PARAMETER :: M85N9FMze = 5220 + INTEGER(IntKi), PARAMETER :: M86N1FMze = 5221 + INTEGER(IntKi), PARAMETER :: M86N2FMze = 5222 + INTEGER(IntKi), PARAMETER :: M86N3FMze = 5223 + INTEGER(IntKi), PARAMETER :: M86N4FMze = 5224 + INTEGER(IntKi), PARAMETER :: M86N5FMze = 5225 + INTEGER(IntKi), PARAMETER :: M86N6FMze = 5226 + INTEGER(IntKi), PARAMETER :: M86N7FMze = 5227 + INTEGER(IntKi), PARAMETER :: M86N8FMze = 5228 + INTEGER(IntKi), PARAMETER :: M86N9FMze = 5229 + INTEGER(IntKi), PARAMETER :: M87N1FMze = 5230 + INTEGER(IntKi), PARAMETER :: M87N2FMze = 5231 + INTEGER(IntKi), PARAMETER :: M87N3FMze = 5232 + INTEGER(IntKi), PARAMETER :: M87N4FMze = 5233 + INTEGER(IntKi), PARAMETER :: M87N5FMze = 5234 + INTEGER(IntKi), PARAMETER :: M87N6FMze = 5235 + INTEGER(IntKi), PARAMETER :: M87N7FMze = 5236 + INTEGER(IntKi), PARAMETER :: M87N8FMze = 5237 + INTEGER(IntKi), PARAMETER :: M87N9FMze = 5238 + INTEGER(IntKi), PARAMETER :: M88N1FMze = 5239 + INTEGER(IntKi), PARAMETER :: M88N2FMze = 5240 + INTEGER(IntKi), PARAMETER :: M88N3FMze = 5241 + INTEGER(IntKi), PARAMETER :: M88N4FMze = 5242 + INTEGER(IntKi), PARAMETER :: M88N5FMze = 5243 + INTEGER(IntKi), PARAMETER :: M88N6FMze = 5244 + INTEGER(IntKi), PARAMETER :: M88N7FMze = 5245 + INTEGER(IntKi), PARAMETER :: M88N8FMze = 5246 + INTEGER(IntKi), PARAMETER :: M88N9FMze = 5247 + INTEGER(IntKi), PARAMETER :: M89N1FMze = 5248 + INTEGER(IntKi), PARAMETER :: M89N2FMze = 5249 + INTEGER(IntKi), PARAMETER :: M89N3FMze = 5250 + INTEGER(IntKi), PARAMETER :: M89N4FMze = 5251 + INTEGER(IntKi), PARAMETER :: M89N5FMze = 5252 + INTEGER(IntKi), PARAMETER :: M89N6FMze = 5253 + INTEGER(IntKi), PARAMETER :: M89N7FMze = 5254 + INTEGER(IntKi), PARAMETER :: M89N8FMze = 5255 + INTEGER(IntKi), PARAMETER :: M89N9FMze = 5256 + INTEGER(IntKi), PARAMETER :: M90N1FMze = 5257 + INTEGER(IntKi), PARAMETER :: M90N2FMze = 5258 + INTEGER(IntKi), PARAMETER :: M90N3FMze = 5259 + INTEGER(IntKi), PARAMETER :: M90N4FMze = 5260 + INTEGER(IntKi), PARAMETER :: M90N5FMze = 5261 + INTEGER(IntKi), PARAMETER :: M90N6FMze = 5262 + INTEGER(IntKi), PARAMETER :: M90N7FMze = 5263 + INTEGER(IntKi), PARAMETER :: M90N8FMze = 5264 + INTEGER(IntKi), PARAMETER :: M90N9FMze = 5265 + INTEGER(IntKi), PARAMETER :: M91N1FMze = 5266 + INTEGER(IntKi), PARAMETER :: M91N2FMze = 5267 + INTEGER(IntKi), PARAMETER :: M91N3FMze = 5268 + INTEGER(IntKi), PARAMETER :: M91N4FMze = 5269 + INTEGER(IntKi), PARAMETER :: M91N5FMze = 5270 + INTEGER(IntKi), PARAMETER :: M91N6FMze = 5271 + INTEGER(IntKi), PARAMETER :: M91N7FMze = 5272 + INTEGER(IntKi), PARAMETER :: M91N8FMze = 5273 + INTEGER(IntKi), PARAMETER :: M91N9FMze = 5274 + INTEGER(IntKi), PARAMETER :: M92N1FMze = 5275 + INTEGER(IntKi), PARAMETER :: M92N2FMze = 5276 + INTEGER(IntKi), PARAMETER :: M92N3FMze = 5277 + INTEGER(IntKi), PARAMETER :: M92N4FMze = 5278 + INTEGER(IntKi), PARAMETER :: M92N5FMze = 5279 + INTEGER(IntKi), PARAMETER :: M92N6FMze = 5280 + INTEGER(IntKi), PARAMETER :: M92N7FMze = 5281 + INTEGER(IntKi), PARAMETER :: M92N8FMze = 5282 + INTEGER(IntKi), PARAMETER :: M92N9FMze = 5283 + INTEGER(IntKi), PARAMETER :: M93N1FMze = 5284 + INTEGER(IntKi), PARAMETER :: M93N2FMze = 5285 + INTEGER(IntKi), PARAMETER :: M93N3FMze = 5286 + INTEGER(IntKi), PARAMETER :: M93N4FMze = 5287 + INTEGER(IntKi), PARAMETER :: M93N5FMze = 5288 + INTEGER(IntKi), PARAMETER :: M93N6FMze = 5289 + INTEGER(IntKi), PARAMETER :: M93N7FMze = 5290 + INTEGER(IntKi), PARAMETER :: M93N8FMze = 5291 + INTEGER(IntKi), PARAMETER :: M93N9FMze = 5292 + INTEGER(IntKi), PARAMETER :: M94N1FMze = 5293 + INTEGER(IntKi), PARAMETER :: M94N2FMze = 5294 + INTEGER(IntKi), PARAMETER :: M94N3FMze = 5295 + INTEGER(IntKi), PARAMETER :: M94N4FMze = 5296 + INTEGER(IntKi), PARAMETER :: M94N5FMze = 5297 + INTEGER(IntKi), PARAMETER :: M94N6FMze = 5298 + INTEGER(IntKi), PARAMETER :: M94N7FMze = 5299 + INTEGER(IntKi), PARAMETER :: M94N8FMze = 5300 + INTEGER(IntKi), PARAMETER :: M94N9FMze = 5301 + INTEGER(IntKi), PARAMETER :: M95N1FMze = 5302 + INTEGER(IntKi), PARAMETER :: M95N2FMze = 5303 + INTEGER(IntKi), PARAMETER :: M95N3FMze = 5304 + INTEGER(IntKi), PARAMETER :: M95N4FMze = 5305 + INTEGER(IntKi), PARAMETER :: M95N5FMze = 5306 + INTEGER(IntKi), PARAMETER :: M95N6FMze = 5307 + INTEGER(IntKi), PARAMETER :: M95N7FMze = 5308 + INTEGER(IntKi), PARAMETER :: M95N8FMze = 5309 + INTEGER(IntKi), PARAMETER :: M95N9FMze = 5310 + INTEGER(IntKi), PARAMETER :: M96N1FMze = 5311 + INTEGER(IntKi), PARAMETER :: M96N2FMze = 5312 + INTEGER(IntKi), PARAMETER :: M96N3FMze = 5313 + INTEGER(IntKi), PARAMETER :: M96N4FMze = 5314 + INTEGER(IntKi), PARAMETER :: M96N5FMze = 5315 + INTEGER(IntKi), PARAMETER :: M96N6FMze = 5316 + INTEGER(IntKi), PARAMETER :: M96N7FMze = 5317 + INTEGER(IntKi), PARAMETER :: M96N8FMze = 5318 + INTEGER(IntKi), PARAMETER :: M96N9FMze = 5319 + INTEGER(IntKi), PARAMETER :: M97N1FMze = 5320 + INTEGER(IntKi), PARAMETER :: M97N2FMze = 5321 + INTEGER(IntKi), PARAMETER :: M97N3FMze = 5322 + INTEGER(IntKi), PARAMETER :: M97N4FMze = 5323 + INTEGER(IntKi), PARAMETER :: M97N5FMze = 5324 + INTEGER(IntKi), PARAMETER :: M97N6FMze = 5325 + INTEGER(IntKi), PARAMETER :: M97N7FMze = 5326 + INTEGER(IntKi), PARAMETER :: M97N8FMze = 5327 + INTEGER(IntKi), PARAMETER :: M97N9FMze = 5328 + INTEGER(IntKi), PARAMETER :: M98N1FMze = 5329 + INTEGER(IntKi), PARAMETER :: M98N2FMze = 5330 + INTEGER(IntKi), PARAMETER :: M98N3FMze = 5331 + INTEGER(IntKi), PARAMETER :: M98N4FMze = 5332 + INTEGER(IntKi), PARAMETER :: M98N5FMze = 5333 + INTEGER(IntKi), PARAMETER :: M98N6FMze = 5334 + INTEGER(IntKi), PARAMETER :: M98N7FMze = 5335 + INTEGER(IntKi), PARAMETER :: M98N8FMze = 5336 + INTEGER(IntKi), PARAMETER :: M98N9FMze = 5337 + INTEGER(IntKi), PARAMETER :: M99N1FMze = 5338 + INTEGER(IntKi), PARAMETER :: M99N2FMze = 5339 + INTEGER(IntKi), PARAMETER :: M99N3FMze = 5340 + INTEGER(IntKi), PARAMETER :: M99N4FMze = 5341 + INTEGER(IntKi), PARAMETER :: M99N5FMze = 5342 + INTEGER(IntKi), PARAMETER :: M99N6FMze = 5343 + INTEGER(IntKi), PARAMETER :: M99N7FMze = 5344 + INTEGER(IntKi), PARAMETER :: M99N8FMze = 5345 + INTEGER(IntKi), PARAMETER :: M99N9FMze = 5346 + INTEGER(IntKi), PARAMETER :: M01N1MKxe = 5347 + INTEGER(IntKi), PARAMETER :: M01N2MKxe = 5348 + INTEGER(IntKi), PARAMETER :: M01N3MKxe = 5349 + INTEGER(IntKi), PARAMETER :: M01N4MKxe = 5350 + INTEGER(IntKi), PARAMETER :: M01N5MKxe = 5351 + INTEGER(IntKi), PARAMETER :: M01N6MKxe = 5352 + INTEGER(IntKi), PARAMETER :: M01N7MKxe = 5353 + INTEGER(IntKi), PARAMETER :: M01N8MKxe = 5354 + INTEGER(IntKi), PARAMETER :: M01N9MKxe = 5355 + INTEGER(IntKi), PARAMETER :: M02N1MKxe = 5356 + INTEGER(IntKi), PARAMETER :: M02N2MKxe = 5357 + INTEGER(IntKi), PARAMETER :: M02N3MKxe = 5358 + INTEGER(IntKi), PARAMETER :: M02N4MKxe = 5359 + INTEGER(IntKi), PARAMETER :: M02N5MKxe = 5360 + INTEGER(IntKi), PARAMETER :: M02N6MKxe = 5361 + INTEGER(IntKi), PARAMETER :: M02N7MKxe = 5362 + INTEGER(IntKi), PARAMETER :: M02N8MKxe = 5363 + INTEGER(IntKi), PARAMETER :: M02N9MKxe = 5364 + INTEGER(IntKi), PARAMETER :: M03N1MKxe = 5365 + INTEGER(IntKi), PARAMETER :: M03N2MKxe = 5366 + INTEGER(IntKi), PARAMETER :: M03N3MKxe = 5367 + INTEGER(IntKi), PARAMETER :: M03N4MKxe = 5368 + INTEGER(IntKi), PARAMETER :: M03N5MKxe = 5369 + INTEGER(IntKi), PARAMETER :: M03N6MKxe = 5370 + INTEGER(IntKi), PARAMETER :: M03N7MKxe = 5371 + INTEGER(IntKi), PARAMETER :: M03N8MKxe = 5372 + INTEGER(IntKi), PARAMETER :: M03N9MKxe = 5373 + INTEGER(IntKi), PARAMETER :: M04N1MKxe = 5374 + INTEGER(IntKi), PARAMETER :: M04N2MKxe = 5375 + INTEGER(IntKi), PARAMETER :: M04N3MKxe = 5376 + INTEGER(IntKi), PARAMETER :: M04N4MKxe = 5377 + INTEGER(IntKi), PARAMETER :: M04N5MKxe = 5378 + INTEGER(IntKi), PARAMETER :: M04N6MKxe = 5379 + INTEGER(IntKi), PARAMETER :: M04N7MKxe = 5380 + INTEGER(IntKi), PARAMETER :: M04N8MKxe = 5381 + INTEGER(IntKi), PARAMETER :: M04N9MKxe = 5382 + INTEGER(IntKi), PARAMETER :: M05N1MKxe = 5383 + INTEGER(IntKi), PARAMETER :: M05N2MKxe = 5384 + INTEGER(IntKi), PARAMETER :: M05N3MKxe = 5385 + INTEGER(IntKi), PARAMETER :: M05N4MKxe = 5386 + INTEGER(IntKi), PARAMETER :: M05N5MKxe = 5387 + INTEGER(IntKi), PARAMETER :: M05N6MKxe = 5388 + INTEGER(IntKi), PARAMETER :: M05N7MKxe = 5389 + INTEGER(IntKi), PARAMETER :: M05N8MKxe = 5390 + INTEGER(IntKi), PARAMETER :: M05N9MKxe = 5391 + INTEGER(IntKi), PARAMETER :: M06N1MKxe = 5392 + INTEGER(IntKi), PARAMETER :: M06N2MKxe = 5393 + INTEGER(IntKi), PARAMETER :: M06N3MKxe = 5394 + INTEGER(IntKi), PARAMETER :: M06N4MKxe = 5395 + INTEGER(IntKi), PARAMETER :: M06N5MKxe = 5396 + INTEGER(IntKi), PARAMETER :: M06N6MKxe = 5397 + INTEGER(IntKi), PARAMETER :: M06N7MKxe = 5398 + INTEGER(IntKi), PARAMETER :: M06N8MKxe = 5399 + INTEGER(IntKi), PARAMETER :: M06N9MKxe = 5400 + INTEGER(IntKi), PARAMETER :: M07N1MKxe = 5401 + INTEGER(IntKi), PARAMETER :: M07N2MKxe = 5402 + INTEGER(IntKi), PARAMETER :: M07N3MKxe = 5403 + INTEGER(IntKi), PARAMETER :: M07N4MKxe = 5404 + INTEGER(IntKi), PARAMETER :: M07N5MKxe = 5405 + INTEGER(IntKi), PARAMETER :: M07N6MKxe = 5406 + INTEGER(IntKi), PARAMETER :: M07N7MKxe = 5407 + INTEGER(IntKi), PARAMETER :: M07N8MKxe = 5408 + INTEGER(IntKi), PARAMETER :: M07N9MKxe = 5409 + INTEGER(IntKi), PARAMETER :: M08N1MKxe = 5410 + INTEGER(IntKi), PARAMETER :: M08N2MKxe = 5411 + INTEGER(IntKi), PARAMETER :: M08N3MKxe = 5412 + INTEGER(IntKi), PARAMETER :: M08N4MKxe = 5413 + INTEGER(IntKi), PARAMETER :: M08N5MKxe = 5414 + INTEGER(IntKi), PARAMETER :: M08N6MKxe = 5415 + INTEGER(IntKi), PARAMETER :: M08N7MKxe = 5416 + INTEGER(IntKi), PARAMETER :: M08N8MKxe = 5417 + INTEGER(IntKi), PARAMETER :: M08N9MKxe = 5418 + INTEGER(IntKi), PARAMETER :: M09N1MKxe = 5419 + INTEGER(IntKi), PARAMETER :: M09N2MKxe = 5420 + INTEGER(IntKi), PARAMETER :: M09N3MKxe = 5421 + INTEGER(IntKi), PARAMETER :: M09N4MKxe = 5422 + INTEGER(IntKi), PARAMETER :: M09N5MKxe = 5423 + INTEGER(IntKi), PARAMETER :: M09N6MKxe = 5424 + INTEGER(IntKi), PARAMETER :: M09N7MKxe = 5425 + INTEGER(IntKi), PARAMETER :: M09N8MKxe = 5426 + INTEGER(IntKi), PARAMETER :: M09N9MKxe = 5427 + INTEGER(IntKi), PARAMETER :: M10N1MKxe = 5428 + INTEGER(IntKi), PARAMETER :: M10N2MKxe = 5429 + INTEGER(IntKi), PARAMETER :: M10N3MKxe = 5430 + INTEGER(IntKi), PARAMETER :: M10N4MKxe = 5431 + INTEGER(IntKi), PARAMETER :: M10N5MKxe = 5432 + INTEGER(IntKi), PARAMETER :: M10N6MKxe = 5433 + INTEGER(IntKi), PARAMETER :: M10N7MKxe = 5434 + INTEGER(IntKi), PARAMETER :: M10N8MKxe = 5435 + INTEGER(IntKi), PARAMETER :: M10N9MKxe = 5436 + INTEGER(IntKi), PARAMETER :: M11N1MKxe = 5437 + INTEGER(IntKi), PARAMETER :: M11N2MKxe = 5438 + INTEGER(IntKi), PARAMETER :: M11N3MKxe = 5439 + INTEGER(IntKi), PARAMETER :: M11N4MKxe = 5440 + INTEGER(IntKi), PARAMETER :: M11N5MKxe = 5441 + INTEGER(IntKi), PARAMETER :: M11N6MKxe = 5442 + INTEGER(IntKi), PARAMETER :: M11N7MKxe = 5443 + INTEGER(IntKi), PARAMETER :: M11N8MKxe = 5444 + INTEGER(IntKi), PARAMETER :: M11N9MKxe = 5445 + INTEGER(IntKi), PARAMETER :: M12N1MKxe = 5446 + INTEGER(IntKi), PARAMETER :: M12N2MKxe = 5447 + INTEGER(IntKi), PARAMETER :: M12N3MKxe = 5448 + INTEGER(IntKi), PARAMETER :: M12N4MKxe = 5449 + INTEGER(IntKi), PARAMETER :: M12N5MKxe = 5450 + INTEGER(IntKi), PARAMETER :: M12N6MKxe = 5451 + INTEGER(IntKi), PARAMETER :: M12N7MKxe = 5452 + INTEGER(IntKi), PARAMETER :: M12N8MKxe = 5453 + INTEGER(IntKi), PARAMETER :: M12N9MKxe = 5454 + INTEGER(IntKi), PARAMETER :: M13N1MKxe = 5455 + INTEGER(IntKi), PARAMETER :: M13N2MKxe = 5456 + INTEGER(IntKi), PARAMETER :: M13N3MKxe = 5457 + INTEGER(IntKi), PARAMETER :: M13N4MKxe = 5458 + INTEGER(IntKi), PARAMETER :: M13N5MKxe = 5459 + INTEGER(IntKi), PARAMETER :: M13N6MKxe = 5460 + INTEGER(IntKi), PARAMETER :: M13N7MKxe = 5461 + INTEGER(IntKi), PARAMETER :: M13N8MKxe = 5462 + INTEGER(IntKi), PARAMETER :: M13N9MKxe = 5463 + INTEGER(IntKi), PARAMETER :: M14N1MKxe = 5464 + INTEGER(IntKi), PARAMETER :: M14N2MKxe = 5465 + INTEGER(IntKi), PARAMETER :: M14N3MKxe = 5466 + INTEGER(IntKi), PARAMETER :: M14N4MKxe = 5467 + INTEGER(IntKi), PARAMETER :: M14N5MKxe = 5468 + INTEGER(IntKi), PARAMETER :: M14N6MKxe = 5469 + INTEGER(IntKi), PARAMETER :: M14N7MKxe = 5470 + INTEGER(IntKi), PARAMETER :: M14N8MKxe = 5471 + INTEGER(IntKi), PARAMETER :: M14N9MKxe = 5472 + INTEGER(IntKi), PARAMETER :: M15N1MKxe = 5473 + INTEGER(IntKi), PARAMETER :: M15N2MKxe = 5474 + INTEGER(IntKi), PARAMETER :: M15N3MKxe = 5475 + INTEGER(IntKi), PARAMETER :: M15N4MKxe = 5476 + INTEGER(IntKi), PARAMETER :: M15N5MKxe = 5477 + INTEGER(IntKi), PARAMETER :: M15N6MKxe = 5478 + INTEGER(IntKi), PARAMETER :: M15N7MKxe = 5479 + INTEGER(IntKi), PARAMETER :: M15N8MKxe = 5480 + INTEGER(IntKi), PARAMETER :: M15N9MKxe = 5481 + INTEGER(IntKi), PARAMETER :: M16N1MKxe = 5482 + INTEGER(IntKi), PARAMETER :: M16N2MKxe = 5483 + INTEGER(IntKi), PARAMETER :: M16N3MKxe = 5484 + INTEGER(IntKi), PARAMETER :: M16N4MKxe = 5485 + INTEGER(IntKi), PARAMETER :: M16N5MKxe = 5486 + INTEGER(IntKi), PARAMETER :: M16N6MKxe = 5487 + INTEGER(IntKi), PARAMETER :: M16N7MKxe = 5488 + INTEGER(IntKi), PARAMETER :: M16N8MKxe = 5489 + INTEGER(IntKi), PARAMETER :: M16N9MKxe = 5490 + INTEGER(IntKi), PARAMETER :: M17N1MKxe = 5491 + INTEGER(IntKi), PARAMETER :: M17N2MKxe = 5492 + INTEGER(IntKi), PARAMETER :: M17N3MKxe = 5493 + INTEGER(IntKi), PARAMETER :: M17N4MKxe = 5494 + INTEGER(IntKi), PARAMETER :: M17N5MKxe = 5495 + INTEGER(IntKi), PARAMETER :: M17N6MKxe = 5496 + INTEGER(IntKi), PARAMETER :: M17N7MKxe = 5497 + INTEGER(IntKi), PARAMETER :: M17N8MKxe = 5498 + INTEGER(IntKi), PARAMETER :: M17N9MKxe = 5499 + INTEGER(IntKi), PARAMETER :: M18N1MKxe = 5500 + INTEGER(IntKi), PARAMETER :: M18N2MKxe = 5501 + INTEGER(IntKi), PARAMETER :: M18N3MKxe = 5502 + INTEGER(IntKi), PARAMETER :: M18N4MKxe = 5503 + INTEGER(IntKi), PARAMETER :: M18N5MKxe = 5504 + INTEGER(IntKi), PARAMETER :: M18N6MKxe = 5505 + INTEGER(IntKi), PARAMETER :: M18N7MKxe = 5506 + INTEGER(IntKi), PARAMETER :: M18N8MKxe = 5507 + INTEGER(IntKi), PARAMETER :: M18N9MKxe = 5508 + INTEGER(IntKi), PARAMETER :: M19N1MKxe = 5509 + INTEGER(IntKi), PARAMETER :: M19N2MKxe = 5510 + INTEGER(IntKi), PARAMETER :: M19N3MKxe = 5511 + INTEGER(IntKi), PARAMETER :: M19N4MKxe = 5512 + INTEGER(IntKi), PARAMETER :: M19N5MKxe = 5513 + INTEGER(IntKi), PARAMETER :: M19N6MKxe = 5514 + INTEGER(IntKi), PARAMETER :: M19N7MKxe = 5515 + INTEGER(IntKi), PARAMETER :: M19N8MKxe = 5516 + INTEGER(IntKi), PARAMETER :: M19N9MKxe = 5517 + INTEGER(IntKi), PARAMETER :: M20N1MKxe = 5518 + INTEGER(IntKi), PARAMETER :: M20N2MKxe = 5519 + INTEGER(IntKi), PARAMETER :: M20N3MKxe = 5520 + INTEGER(IntKi), PARAMETER :: M20N4MKxe = 5521 + INTEGER(IntKi), PARAMETER :: M20N5MKxe = 5522 + INTEGER(IntKi), PARAMETER :: M20N6MKxe = 5523 + INTEGER(IntKi), PARAMETER :: M20N7MKxe = 5524 + INTEGER(IntKi), PARAMETER :: M20N8MKxe = 5525 + INTEGER(IntKi), PARAMETER :: M20N9MKxe = 5526 + INTEGER(IntKi), PARAMETER :: M21N1MKxe = 5527 + INTEGER(IntKi), PARAMETER :: M21N2MKxe = 5528 + INTEGER(IntKi), PARAMETER :: M21N3MKxe = 5529 + INTEGER(IntKi), PARAMETER :: M21N4MKxe = 5530 + INTEGER(IntKi), PARAMETER :: M21N5MKxe = 5531 + INTEGER(IntKi), PARAMETER :: M21N6MKxe = 5532 + INTEGER(IntKi), PARAMETER :: M21N7MKxe = 5533 + INTEGER(IntKi), PARAMETER :: M21N8MKxe = 5534 + INTEGER(IntKi), PARAMETER :: M21N9MKxe = 5535 + INTEGER(IntKi), PARAMETER :: M22N1MKxe = 5536 + INTEGER(IntKi), PARAMETER :: M22N2MKxe = 5537 + INTEGER(IntKi), PARAMETER :: M22N3MKxe = 5538 + INTEGER(IntKi), PARAMETER :: M22N4MKxe = 5539 + INTEGER(IntKi), PARAMETER :: M22N5MKxe = 5540 + INTEGER(IntKi), PARAMETER :: M22N6MKxe = 5541 + INTEGER(IntKi), PARAMETER :: M22N7MKxe = 5542 + INTEGER(IntKi), PARAMETER :: M22N8MKxe = 5543 + INTEGER(IntKi), PARAMETER :: M22N9MKxe = 5544 + INTEGER(IntKi), PARAMETER :: M23N1MKxe = 5545 + INTEGER(IntKi), PARAMETER :: M23N2MKxe = 5546 + INTEGER(IntKi), PARAMETER :: M23N3MKxe = 5547 + INTEGER(IntKi), PARAMETER :: M23N4MKxe = 5548 + INTEGER(IntKi), PARAMETER :: M23N5MKxe = 5549 + INTEGER(IntKi), PARAMETER :: M23N6MKxe = 5550 + INTEGER(IntKi), PARAMETER :: M23N7MKxe = 5551 + INTEGER(IntKi), PARAMETER :: M23N8MKxe = 5552 + INTEGER(IntKi), PARAMETER :: M23N9MKxe = 5553 + INTEGER(IntKi), PARAMETER :: M24N1MKxe = 5554 + INTEGER(IntKi), PARAMETER :: M24N2MKxe = 5555 + INTEGER(IntKi), PARAMETER :: M24N3MKxe = 5556 + INTEGER(IntKi), PARAMETER :: M24N4MKxe = 5557 + INTEGER(IntKi), PARAMETER :: M24N5MKxe = 5558 + INTEGER(IntKi), PARAMETER :: M24N6MKxe = 5559 + INTEGER(IntKi), PARAMETER :: M24N7MKxe = 5560 + INTEGER(IntKi), PARAMETER :: M24N8MKxe = 5561 + INTEGER(IntKi), PARAMETER :: M24N9MKxe = 5562 + INTEGER(IntKi), PARAMETER :: M25N1MKxe = 5563 + INTEGER(IntKi), PARAMETER :: M25N2MKxe = 5564 + INTEGER(IntKi), PARAMETER :: M25N3MKxe = 5565 + INTEGER(IntKi), PARAMETER :: M25N4MKxe = 5566 + INTEGER(IntKi), PARAMETER :: M25N5MKxe = 5567 + INTEGER(IntKi), PARAMETER :: M25N6MKxe = 5568 + INTEGER(IntKi), PARAMETER :: M25N7MKxe = 5569 + INTEGER(IntKi), PARAMETER :: M25N8MKxe = 5570 + INTEGER(IntKi), PARAMETER :: M25N9MKxe = 5571 + INTEGER(IntKi), PARAMETER :: M26N1MKxe = 5572 + INTEGER(IntKi), PARAMETER :: M26N2MKxe = 5573 + INTEGER(IntKi), PARAMETER :: M26N3MKxe = 5574 + INTEGER(IntKi), PARAMETER :: M26N4MKxe = 5575 + INTEGER(IntKi), PARAMETER :: M26N5MKxe = 5576 + INTEGER(IntKi), PARAMETER :: M26N6MKxe = 5577 + INTEGER(IntKi), PARAMETER :: M26N7MKxe = 5578 + INTEGER(IntKi), PARAMETER :: M26N8MKxe = 5579 + INTEGER(IntKi), PARAMETER :: M26N9MKxe = 5580 + INTEGER(IntKi), PARAMETER :: M27N1MKxe = 5581 + INTEGER(IntKi), PARAMETER :: M27N2MKxe = 5582 + INTEGER(IntKi), PARAMETER :: M27N3MKxe = 5583 + INTEGER(IntKi), PARAMETER :: M27N4MKxe = 5584 + INTEGER(IntKi), PARAMETER :: M27N5MKxe = 5585 + INTEGER(IntKi), PARAMETER :: M27N6MKxe = 5586 + INTEGER(IntKi), PARAMETER :: M27N7MKxe = 5587 + INTEGER(IntKi), PARAMETER :: M27N8MKxe = 5588 + INTEGER(IntKi), PARAMETER :: M27N9MKxe = 5589 + INTEGER(IntKi), PARAMETER :: M28N1MKxe = 5590 + INTEGER(IntKi), PARAMETER :: M28N2MKxe = 5591 + INTEGER(IntKi), PARAMETER :: M28N3MKxe = 5592 + INTEGER(IntKi), PARAMETER :: M28N4MKxe = 5593 + INTEGER(IntKi), PARAMETER :: M28N5MKxe = 5594 + INTEGER(IntKi), PARAMETER :: M28N6MKxe = 5595 + INTEGER(IntKi), PARAMETER :: M28N7MKxe = 5596 + INTEGER(IntKi), PARAMETER :: M28N8MKxe = 5597 + INTEGER(IntKi), PARAMETER :: M28N9MKxe = 5598 + INTEGER(IntKi), PARAMETER :: M29N1MKxe = 5599 + INTEGER(IntKi), PARAMETER :: M29N2MKxe = 5600 + INTEGER(IntKi), PARAMETER :: M29N3MKxe = 5601 + INTEGER(IntKi), PARAMETER :: M29N4MKxe = 5602 + INTEGER(IntKi), PARAMETER :: M29N5MKxe = 5603 + INTEGER(IntKi), PARAMETER :: M29N6MKxe = 5604 + INTEGER(IntKi), PARAMETER :: M29N7MKxe = 5605 + INTEGER(IntKi), PARAMETER :: M29N8MKxe = 5606 + INTEGER(IntKi), PARAMETER :: M29N9MKxe = 5607 + INTEGER(IntKi), PARAMETER :: M30N1MKxe = 5608 + INTEGER(IntKi), PARAMETER :: M30N2MKxe = 5609 + INTEGER(IntKi), PARAMETER :: M30N3MKxe = 5610 + INTEGER(IntKi), PARAMETER :: M30N4MKxe = 5611 + INTEGER(IntKi), PARAMETER :: M30N5MKxe = 5612 + INTEGER(IntKi), PARAMETER :: M30N6MKxe = 5613 + INTEGER(IntKi), PARAMETER :: M30N7MKxe = 5614 + INTEGER(IntKi), PARAMETER :: M30N8MKxe = 5615 + INTEGER(IntKi), PARAMETER :: M30N9MKxe = 5616 + INTEGER(IntKi), PARAMETER :: M31N1MKxe = 5617 + INTEGER(IntKi), PARAMETER :: M31N2MKxe = 5618 + INTEGER(IntKi), PARAMETER :: M31N3MKxe = 5619 + INTEGER(IntKi), PARAMETER :: M31N4MKxe = 5620 + INTEGER(IntKi), PARAMETER :: M31N5MKxe = 5621 + INTEGER(IntKi), PARAMETER :: M31N6MKxe = 5622 + INTEGER(IntKi), PARAMETER :: M31N7MKxe = 5623 + INTEGER(IntKi), PARAMETER :: M31N8MKxe = 5624 + INTEGER(IntKi), PARAMETER :: M31N9MKxe = 5625 + INTEGER(IntKi), PARAMETER :: M32N1MKxe = 5626 + INTEGER(IntKi), PARAMETER :: M32N2MKxe = 5627 + INTEGER(IntKi), PARAMETER :: M32N3MKxe = 5628 + INTEGER(IntKi), PARAMETER :: M32N4MKxe = 5629 + INTEGER(IntKi), PARAMETER :: M32N5MKxe = 5630 + INTEGER(IntKi), PARAMETER :: M32N6MKxe = 5631 + INTEGER(IntKi), PARAMETER :: M32N7MKxe = 5632 + INTEGER(IntKi), PARAMETER :: M32N8MKxe = 5633 + INTEGER(IntKi), PARAMETER :: M32N9MKxe = 5634 + INTEGER(IntKi), PARAMETER :: M33N1MKxe = 5635 + INTEGER(IntKi), PARAMETER :: M33N2MKxe = 5636 + INTEGER(IntKi), PARAMETER :: M33N3MKxe = 5637 + INTEGER(IntKi), PARAMETER :: M33N4MKxe = 5638 + INTEGER(IntKi), PARAMETER :: M33N5MKxe = 5639 + INTEGER(IntKi), PARAMETER :: M33N6MKxe = 5640 + INTEGER(IntKi), PARAMETER :: M33N7MKxe = 5641 + INTEGER(IntKi), PARAMETER :: M33N8MKxe = 5642 + INTEGER(IntKi), PARAMETER :: M33N9MKxe = 5643 + INTEGER(IntKi), PARAMETER :: M34N1MKxe = 5644 + INTEGER(IntKi), PARAMETER :: M34N2MKxe = 5645 + INTEGER(IntKi), PARAMETER :: M34N3MKxe = 5646 + INTEGER(IntKi), PARAMETER :: M34N4MKxe = 5647 + INTEGER(IntKi), PARAMETER :: M34N5MKxe = 5648 + INTEGER(IntKi), PARAMETER :: M34N6MKxe = 5649 + INTEGER(IntKi), PARAMETER :: M34N7MKxe = 5650 + INTEGER(IntKi), PARAMETER :: M34N8MKxe = 5651 + INTEGER(IntKi), PARAMETER :: M34N9MKxe = 5652 + INTEGER(IntKi), PARAMETER :: M35N1MKxe = 5653 + INTEGER(IntKi), PARAMETER :: M35N2MKxe = 5654 + INTEGER(IntKi), PARAMETER :: M35N3MKxe = 5655 + INTEGER(IntKi), PARAMETER :: M35N4MKxe = 5656 + INTEGER(IntKi), PARAMETER :: M35N5MKxe = 5657 + INTEGER(IntKi), PARAMETER :: M35N6MKxe = 5658 + INTEGER(IntKi), PARAMETER :: M35N7MKxe = 5659 + INTEGER(IntKi), PARAMETER :: M35N8MKxe = 5660 + INTEGER(IntKi), PARAMETER :: M35N9MKxe = 5661 + INTEGER(IntKi), PARAMETER :: M36N1MKxe = 5662 + INTEGER(IntKi), PARAMETER :: M36N2MKxe = 5663 + INTEGER(IntKi), PARAMETER :: M36N3MKxe = 5664 + INTEGER(IntKi), PARAMETER :: M36N4MKxe = 5665 + INTEGER(IntKi), PARAMETER :: M36N5MKxe = 5666 + INTEGER(IntKi), PARAMETER :: M36N6MKxe = 5667 + INTEGER(IntKi), PARAMETER :: M36N7MKxe = 5668 + INTEGER(IntKi), PARAMETER :: M36N8MKxe = 5669 + INTEGER(IntKi), PARAMETER :: M36N9MKxe = 5670 + INTEGER(IntKi), PARAMETER :: M37N1MKxe = 5671 + INTEGER(IntKi), PARAMETER :: M37N2MKxe = 5672 + INTEGER(IntKi), PARAMETER :: M37N3MKxe = 5673 + INTEGER(IntKi), PARAMETER :: M37N4MKxe = 5674 + INTEGER(IntKi), PARAMETER :: M37N5MKxe = 5675 + INTEGER(IntKi), PARAMETER :: M37N6MKxe = 5676 + INTEGER(IntKi), PARAMETER :: M37N7MKxe = 5677 + INTEGER(IntKi), PARAMETER :: M37N8MKxe = 5678 + INTEGER(IntKi), PARAMETER :: M37N9MKxe = 5679 + INTEGER(IntKi), PARAMETER :: M38N1MKxe = 5680 + INTEGER(IntKi), PARAMETER :: M38N2MKxe = 5681 + INTEGER(IntKi), PARAMETER :: M38N3MKxe = 5682 + INTEGER(IntKi), PARAMETER :: M38N4MKxe = 5683 + INTEGER(IntKi), PARAMETER :: M38N5MKxe = 5684 + INTEGER(IntKi), PARAMETER :: M38N6MKxe = 5685 + INTEGER(IntKi), PARAMETER :: M38N7MKxe = 5686 + INTEGER(IntKi), PARAMETER :: M38N8MKxe = 5687 + INTEGER(IntKi), PARAMETER :: M38N9MKxe = 5688 + INTEGER(IntKi), PARAMETER :: M39N1MKxe = 5689 + INTEGER(IntKi), PARAMETER :: M39N2MKxe = 5690 + INTEGER(IntKi), PARAMETER :: M39N3MKxe = 5691 + INTEGER(IntKi), PARAMETER :: M39N4MKxe = 5692 + INTEGER(IntKi), PARAMETER :: M39N5MKxe = 5693 + INTEGER(IntKi), PARAMETER :: M39N6MKxe = 5694 + INTEGER(IntKi), PARAMETER :: M39N7MKxe = 5695 + INTEGER(IntKi), PARAMETER :: M39N8MKxe = 5696 + INTEGER(IntKi), PARAMETER :: M39N9MKxe = 5697 + INTEGER(IntKi), PARAMETER :: M40N1MKxe = 5698 + INTEGER(IntKi), PARAMETER :: M40N2MKxe = 5699 + INTEGER(IntKi), PARAMETER :: M40N3MKxe = 5700 + INTEGER(IntKi), PARAMETER :: M40N4MKxe = 5701 + INTEGER(IntKi), PARAMETER :: M40N5MKxe = 5702 + INTEGER(IntKi), PARAMETER :: M40N6MKxe = 5703 + INTEGER(IntKi), PARAMETER :: M40N7MKxe = 5704 + INTEGER(IntKi), PARAMETER :: M40N8MKxe = 5705 + INTEGER(IntKi), PARAMETER :: M40N9MKxe = 5706 + INTEGER(IntKi), PARAMETER :: M41N1MKxe = 5707 + INTEGER(IntKi), PARAMETER :: M41N2MKxe = 5708 + INTEGER(IntKi), PARAMETER :: M41N3MKxe = 5709 + INTEGER(IntKi), PARAMETER :: M41N4MKxe = 5710 + INTEGER(IntKi), PARAMETER :: M41N5MKxe = 5711 + INTEGER(IntKi), PARAMETER :: M41N6MKxe = 5712 + INTEGER(IntKi), PARAMETER :: M41N7MKxe = 5713 + INTEGER(IntKi), PARAMETER :: M41N8MKxe = 5714 + INTEGER(IntKi), PARAMETER :: M41N9MKxe = 5715 + INTEGER(IntKi), PARAMETER :: M42N1MKxe = 5716 + INTEGER(IntKi), PARAMETER :: M42N2MKxe = 5717 + INTEGER(IntKi), PARAMETER :: M42N3MKxe = 5718 + INTEGER(IntKi), PARAMETER :: M42N4MKxe = 5719 + INTEGER(IntKi), PARAMETER :: M42N5MKxe = 5720 + INTEGER(IntKi), PARAMETER :: M42N6MKxe = 5721 + INTEGER(IntKi), PARAMETER :: M42N7MKxe = 5722 + INTEGER(IntKi), PARAMETER :: M42N8MKxe = 5723 + INTEGER(IntKi), PARAMETER :: M42N9MKxe = 5724 + INTEGER(IntKi), PARAMETER :: M43N1MKxe = 5725 + INTEGER(IntKi), PARAMETER :: M43N2MKxe = 5726 + INTEGER(IntKi), PARAMETER :: M43N3MKxe = 5727 + INTEGER(IntKi), PARAMETER :: M43N4MKxe = 5728 + INTEGER(IntKi), PARAMETER :: M43N5MKxe = 5729 + INTEGER(IntKi), PARAMETER :: M43N6MKxe = 5730 + INTEGER(IntKi), PARAMETER :: M43N7MKxe = 5731 + INTEGER(IntKi), PARAMETER :: M43N8MKxe = 5732 + INTEGER(IntKi), PARAMETER :: M43N9MKxe = 5733 + INTEGER(IntKi), PARAMETER :: M44N1MKxe = 5734 + INTEGER(IntKi), PARAMETER :: M44N2MKxe = 5735 + INTEGER(IntKi), PARAMETER :: M44N3MKxe = 5736 + INTEGER(IntKi), PARAMETER :: M44N4MKxe = 5737 + INTEGER(IntKi), PARAMETER :: M44N5MKxe = 5738 + INTEGER(IntKi), PARAMETER :: M44N6MKxe = 5739 + INTEGER(IntKi), PARAMETER :: M44N7MKxe = 5740 + INTEGER(IntKi), PARAMETER :: M44N8MKxe = 5741 + INTEGER(IntKi), PARAMETER :: M44N9MKxe = 5742 + INTEGER(IntKi), PARAMETER :: M45N1MKxe = 5743 + INTEGER(IntKi), PARAMETER :: M45N2MKxe = 5744 + INTEGER(IntKi), PARAMETER :: M45N3MKxe = 5745 + INTEGER(IntKi), PARAMETER :: M45N4MKxe = 5746 + INTEGER(IntKi), PARAMETER :: M45N5MKxe = 5747 + INTEGER(IntKi), PARAMETER :: M45N6MKxe = 5748 + INTEGER(IntKi), PARAMETER :: M45N7MKxe = 5749 + INTEGER(IntKi), PARAMETER :: M45N8MKxe = 5750 + INTEGER(IntKi), PARAMETER :: M45N9MKxe = 5751 + INTEGER(IntKi), PARAMETER :: M46N1MKxe = 5752 + INTEGER(IntKi), PARAMETER :: M46N2MKxe = 5753 + INTEGER(IntKi), PARAMETER :: M46N3MKxe = 5754 + INTEGER(IntKi), PARAMETER :: M46N4MKxe = 5755 + INTEGER(IntKi), PARAMETER :: M46N5MKxe = 5756 + INTEGER(IntKi), PARAMETER :: M46N6MKxe = 5757 + INTEGER(IntKi), PARAMETER :: M46N7MKxe = 5758 + INTEGER(IntKi), PARAMETER :: M46N8MKxe = 5759 + INTEGER(IntKi), PARAMETER :: M46N9MKxe = 5760 + INTEGER(IntKi), PARAMETER :: M47N1MKxe = 5761 + INTEGER(IntKi), PARAMETER :: M47N2MKxe = 5762 + INTEGER(IntKi), PARAMETER :: M47N3MKxe = 5763 + INTEGER(IntKi), PARAMETER :: M47N4MKxe = 5764 + INTEGER(IntKi), PARAMETER :: M47N5MKxe = 5765 + INTEGER(IntKi), PARAMETER :: M47N6MKxe = 5766 + INTEGER(IntKi), PARAMETER :: M47N7MKxe = 5767 + INTEGER(IntKi), PARAMETER :: M47N8MKxe = 5768 + INTEGER(IntKi), PARAMETER :: M47N9MKxe = 5769 + INTEGER(IntKi), PARAMETER :: M48N1MKxe = 5770 + INTEGER(IntKi), PARAMETER :: M48N2MKxe = 5771 + INTEGER(IntKi), PARAMETER :: M48N3MKxe = 5772 + INTEGER(IntKi), PARAMETER :: M48N4MKxe = 5773 + INTEGER(IntKi), PARAMETER :: M48N5MKxe = 5774 + INTEGER(IntKi), PARAMETER :: M48N6MKxe = 5775 + INTEGER(IntKi), PARAMETER :: M48N7MKxe = 5776 + INTEGER(IntKi), PARAMETER :: M48N8MKxe = 5777 + INTEGER(IntKi), PARAMETER :: M48N9MKxe = 5778 + INTEGER(IntKi), PARAMETER :: M49N1MKxe = 5779 + INTEGER(IntKi), PARAMETER :: M49N2MKxe = 5780 + INTEGER(IntKi), PARAMETER :: M49N3MKxe = 5781 + INTEGER(IntKi), PARAMETER :: M49N4MKxe = 5782 + INTEGER(IntKi), PARAMETER :: M49N5MKxe = 5783 + INTEGER(IntKi), PARAMETER :: M49N6MKxe = 5784 + INTEGER(IntKi), PARAMETER :: M49N7MKxe = 5785 + INTEGER(IntKi), PARAMETER :: M49N8MKxe = 5786 + INTEGER(IntKi), PARAMETER :: M49N9MKxe = 5787 + INTEGER(IntKi), PARAMETER :: M50N1MKxe = 5788 + INTEGER(IntKi), PARAMETER :: M50N2MKxe = 5789 + INTEGER(IntKi), PARAMETER :: M50N3MKxe = 5790 + INTEGER(IntKi), PARAMETER :: M50N4MKxe = 5791 + INTEGER(IntKi), PARAMETER :: M50N5MKxe = 5792 + INTEGER(IntKi), PARAMETER :: M50N6MKxe = 5793 + INTEGER(IntKi), PARAMETER :: M50N7MKxe = 5794 + INTEGER(IntKi), PARAMETER :: M50N8MKxe = 5795 + INTEGER(IntKi), PARAMETER :: M50N9MKxe = 5796 + INTEGER(IntKi), PARAMETER :: M51N1MKxe = 5797 + INTEGER(IntKi), PARAMETER :: M51N2MKxe = 5798 + INTEGER(IntKi), PARAMETER :: M51N3MKxe = 5799 + INTEGER(IntKi), PARAMETER :: M51N4MKxe = 5800 + INTEGER(IntKi), PARAMETER :: M51N5MKxe = 5801 + INTEGER(IntKi), PARAMETER :: M51N6MKxe = 5802 + INTEGER(IntKi), PARAMETER :: M51N7MKxe = 5803 + INTEGER(IntKi), PARAMETER :: M51N8MKxe = 5804 + INTEGER(IntKi), PARAMETER :: M51N9MKxe = 5805 + INTEGER(IntKi), PARAMETER :: M52N1MKxe = 5806 + INTEGER(IntKi), PARAMETER :: M52N2MKxe = 5807 + INTEGER(IntKi), PARAMETER :: M52N3MKxe = 5808 + INTEGER(IntKi), PARAMETER :: M52N4MKxe = 5809 + INTEGER(IntKi), PARAMETER :: M52N5MKxe = 5810 + INTEGER(IntKi), PARAMETER :: M52N6MKxe = 5811 + INTEGER(IntKi), PARAMETER :: M52N7MKxe = 5812 + INTEGER(IntKi), PARAMETER :: M52N8MKxe = 5813 + INTEGER(IntKi), PARAMETER :: M52N9MKxe = 5814 + INTEGER(IntKi), PARAMETER :: M53N1MKxe = 5815 + INTEGER(IntKi), PARAMETER :: M53N2MKxe = 5816 + INTEGER(IntKi), PARAMETER :: M53N3MKxe = 5817 + INTEGER(IntKi), PARAMETER :: M53N4MKxe = 5818 + INTEGER(IntKi), PARAMETER :: M53N5MKxe = 5819 + INTEGER(IntKi), PARAMETER :: M53N6MKxe = 5820 + INTEGER(IntKi), PARAMETER :: M53N7MKxe = 5821 + INTEGER(IntKi), PARAMETER :: M53N8MKxe = 5822 + INTEGER(IntKi), PARAMETER :: M53N9MKxe = 5823 + INTEGER(IntKi), PARAMETER :: M54N1MKxe = 5824 + INTEGER(IntKi), PARAMETER :: M54N2MKxe = 5825 + INTEGER(IntKi), PARAMETER :: M54N3MKxe = 5826 + INTEGER(IntKi), PARAMETER :: M54N4MKxe = 5827 + INTEGER(IntKi), PARAMETER :: M54N5MKxe = 5828 + INTEGER(IntKi), PARAMETER :: M54N6MKxe = 5829 + INTEGER(IntKi), PARAMETER :: M54N7MKxe = 5830 + INTEGER(IntKi), PARAMETER :: M54N8MKxe = 5831 + INTEGER(IntKi), PARAMETER :: M54N9MKxe = 5832 + INTEGER(IntKi), PARAMETER :: M55N1MKxe = 5833 + INTEGER(IntKi), PARAMETER :: M55N2MKxe = 5834 + INTEGER(IntKi), PARAMETER :: M55N3MKxe = 5835 + INTEGER(IntKi), PARAMETER :: M55N4MKxe = 5836 + INTEGER(IntKi), PARAMETER :: M55N5MKxe = 5837 + INTEGER(IntKi), PARAMETER :: M55N6MKxe = 5838 + INTEGER(IntKi), PARAMETER :: M55N7MKxe = 5839 + INTEGER(IntKi), PARAMETER :: M55N8MKxe = 5840 + INTEGER(IntKi), PARAMETER :: M55N9MKxe = 5841 + INTEGER(IntKi), PARAMETER :: M56N1MKxe = 5842 + INTEGER(IntKi), PARAMETER :: M56N2MKxe = 5843 + INTEGER(IntKi), PARAMETER :: M56N3MKxe = 5844 + INTEGER(IntKi), PARAMETER :: M56N4MKxe = 5845 + INTEGER(IntKi), PARAMETER :: M56N5MKxe = 5846 + INTEGER(IntKi), PARAMETER :: M56N6MKxe = 5847 + INTEGER(IntKi), PARAMETER :: M56N7MKxe = 5848 + INTEGER(IntKi), PARAMETER :: M56N8MKxe = 5849 + INTEGER(IntKi), PARAMETER :: M56N9MKxe = 5850 + INTEGER(IntKi), PARAMETER :: M57N1MKxe = 5851 + INTEGER(IntKi), PARAMETER :: M57N2MKxe = 5852 + INTEGER(IntKi), PARAMETER :: M57N3MKxe = 5853 + INTEGER(IntKi), PARAMETER :: M57N4MKxe = 5854 + INTEGER(IntKi), PARAMETER :: M57N5MKxe = 5855 + INTEGER(IntKi), PARAMETER :: M57N6MKxe = 5856 + INTEGER(IntKi), PARAMETER :: M57N7MKxe = 5857 + INTEGER(IntKi), PARAMETER :: M57N8MKxe = 5858 + INTEGER(IntKi), PARAMETER :: M57N9MKxe = 5859 + INTEGER(IntKi), PARAMETER :: M58N1MKxe = 5860 + INTEGER(IntKi), PARAMETER :: M58N2MKxe = 5861 + INTEGER(IntKi), PARAMETER :: M58N3MKxe = 5862 + INTEGER(IntKi), PARAMETER :: M58N4MKxe = 5863 + INTEGER(IntKi), PARAMETER :: M58N5MKxe = 5864 + INTEGER(IntKi), PARAMETER :: M58N6MKxe = 5865 + INTEGER(IntKi), PARAMETER :: M58N7MKxe = 5866 + INTEGER(IntKi), PARAMETER :: M58N8MKxe = 5867 + INTEGER(IntKi), PARAMETER :: M58N9MKxe = 5868 + INTEGER(IntKi), PARAMETER :: M59N1MKxe = 5869 + INTEGER(IntKi), PARAMETER :: M59N2MKxe = 5870 + INTEGER(IntKi), PARAMETER :: M59N3MKxe = 5871 + INTEGER(IntKi), PARAMETER :: M59N4MKxe = 5872 + INTEGER(IntKi), PARAMETER :: M59N5MKxe = 5873 + INTEGER(IntKi), PARAMETER :: M59N6MKxe = 5874 + INTEGER(IntKi), PARAMETER :: M59N7MKxe = 5875 + INTEGER(IntKi), PARAMETER :: M59N8MKxe = 5876 + INTEGER(IntKi), PARAMETER :: M59N9MKxe = 5877 + INTEGER(IntKi), PARAMETER :: M60N1MKxe = 5878 + INTEGER(IntKi), PARAMETER :: M60N2MKxe = 5879 + INTEGER(IntKi), PARAMETER :: M60N3MKxe = 5880 + INTEGER(IntKi), PARAMETER :: M60N4MKxe = 5881 + INTEGER(IntKi), PARAMETER :: M60N5MKxe = 5882 + INTEGER(IntKi), PARAMETER :: M60N6MKxe = 5883 + INTEGER(IntKi), PARAMETER :: M60N7MKxe = 5884 + INTEGER(IntKi), PARAMETER :: M60N8MKxe = 5885 + INTEGER(IntKi), PARAMETER :: M60N9MKxe = 5886 + INTEGER(IntKi), PARAMETER :: M61N1MKxe = 5887 + INTEGER(IntKi), PARAMETER :: M61N2MKxe = 5888 + INTEGER(IntKi), PARAMETER :: M61N3MKxe = 5889 + INTEGER(IntKi), PARAMETER :: M61N4MKxe = 5890 + INTEGER(IntKi), PARAMETER :: M61N5MKxe = 5891 + INTEGER(IntKi), PARAMETER :: M61N6MKxe = 5892 + INTEGER(IntKi), PARAMETER :: M61N7MKxe = 5893 + INTEGER(IntKi), PARAMETER :: M61N8MKxe = 5894 + INTEGER(IntKi), PARAMETER :: M61N9MKxe = 5895 + INTEGER(IntKi), PARAMETER :: M62N1MKxe = 5896 + INTEGER(IntKi), PARAMETER :: M62N2MKxe = 5897 + INTEGER(IntKi), PARAMETER :: M62N3MKxe = 5898 + INTEGER(IntKi), PARAMETER :: M62N4MKxe = 5899 + INTEGER(IntKi), PARAMETER :: M62N5MKxe = 5900 + INTEGER(IntKi), PARAMETER :: M62N6MKxe = 5901 + INTEGER(IntKi), PARAMETER :: M62N7MKxe = 5902 + INTEGER(IntKi), PARAMETER :: M62N8MKxe = 5903 + INTEGER(IntKi), PARAMETER :: M62N9MKxe = 5904 + INTEGER(IntKi), PARAMETER :: M63N1MKxe = 5905 + INTEGER(IntKi), PARAMETER :: M63N2MKxe = 5906 + INTEGER(IntKi), PARAMETER :: M63N3MKxe = 5907 + INTEGER(IntKi), PARAMETER :: M63N4MKxe = 5908 + INTEGER(IntKi), PARAMETER :: M63N5MKxe = 5909 + INTEGER(IntKi), PARAMETER :: M63N6MKxe = 5910 + INTEGER(IntKi), PARAMETER :: M63N7MKxe = 5911 + INTEGER(IntKi), PARAMETER :: M63N8MKxe = 5912 + INTEGER(IntKi), PARAMETER :: M63N9MKxe = 5913 + INTEGER(IntKi), PARAMETER :: M64N1MKxe = 5914 + INTEGER(IntKi), PARAMETER :: M64N2MKxe = 5915 + INTEGER(IntKi), PARAMETER :: M64N3MKxe = 5916 + INTEGER(IntKi), PARAMETER :: M64N4MKxe = 5917 + INTEGER(IntKi), PARAMETER :: M64N5MKxe = 5918 + INTEGER(IntKi), PARAMETER :: M64N6MKxe = 5919 + INTEGER(IntKi), PARAMETER :: M64N7MKxe = 5920 + INTEGER(IntKi), PARAMETER :: M64N8MKxe = 5921 + INTEGER(IntKi), PARAMETER :: M64N9MKxe = 5922 + INTEGER(IntKi), PARAMETER :: M65N1MKxe = 5923 + INTEGER(IntKi), PARAMETER :: M65N2MKxe = 5924 + INTEGER(IntKi), PARAMETER :: M65N3MKxe = 5925 + INTEGER(IntKi), PARAMETER :: M65N4MKxe = 5926 + INTEGER(IntKi), PARAMETER :: M65N5MKxe = 5927 + INTEGER(IntKi), PARAMETER :: M65N6MKxe = 5928 + INTEGER(IntKi), PARAMETER :: M65N7MKxe = 5929 + INTEGER(IntKi), PARAMETER :: M65N8MKxe = 5930 + INTEGER(IntKi), PARAMETER :: M65N9MKxe = 5931 + INTEGER(IntKi), PARAMETER :: M66N1MKxe = 5932 + INTEGER(IntKi), PARAMETER :: M66N2MKxe = 5933 + INTEGER(IntKi), PARAMETER :: M66N3MKxe = 5934 + INTEGER(IntKi), PARAMETER :: M66N4MKxe = 5935 + INTEGER(IntKi), PARAMETER :: M66N5MKxe = 5936 + INTEGER(IntKi), PARAMETER :: M66N6MKxe = 5937 + INTEGER(IntKi), PARAMETER :: M66N7MKxe = 5938 + INTEGER(IntKi), PARAMETER :: M66N8MKxe = 5939 + INTEGER(IntKi), PARAMETER :: M66N9MKxe = 5940 + INTEGER(IntKi), PARAMETER :: M67N1MKxe = 5941 + INTEGER(IntKi), PARAMETER :: M67N2MKxe = 5942 + INTEGER(IntKi), PARAMETER :: M67N3MKxe = 5943 + INTEGER(IntKi), PARAMETER :: M67N4MKxe = 5944 + INTEGER(IntKi), PARAMETER :: M67N5MKxe = 5945 + INTEGER(IntKi), PARAMETER :: M67N6MKxe = 5946 + INTEGER(IntKi), PARAMETER :: M67N7MKxe = 5947 + INTEGER(IntKi), PARAMETER :: M67N8MKxe = 5948 + INTEGER(IntKi), PARAMETER :: M67N9MKxe = 5949 + INTEGER(IntKi), PARAMETER :: M68N1MKxe = 5950 + INTEGER(IntKi), PARAMETER :: M68N2MKxe = 5951 + INTEGER(IntKi), PARAMETER :: M68N3MKxe = 5952 + INTEGER(IntKi), PARAMETER :: M68N4MKxe = 5953 + INTEGER(IntKi), PARAMETER :: M68N5MKxe = 5954 + INTEGER(IntKi), PARAMETER :: M68N6MKxe = 5955 + INTEGER(IntKi), PARAMETER :: M68N7MKxe = 5956 + INTEGER(IntKi), PARAMETER :: M68N8MKxe = 5957 + INTEGER(IntKi), PARAMETER :: M68N9MKxe = 5958 + INTEGER(IntKi), PARAMETER :: M69N1MKxe = 5959 + INTEGER(IntKi), PARAMETER :: M69N2MKxe = 5960 + INTEGER(IntKi), PARAMETER :: M69N3MKxe = 5961 + INTEGER(IntKi), PARAMETER :: M69N4MKxe = 5962 + INTEGER(IntKi), PARAMETER :: M69N5MKxe = 5963 + INTEGER(IntKi), PARAMETER :: M69N6MKxe = 5964 + INTEGER(IntKi), PARAMETER :: M69N7MKxe = 5965 + INTEGER(IntKi), PARAMETER :: M69N8MKxe = 5966 + INTEGER(IntKi), PARAMETER :: M69N9MKxe = 5967 + INTEGER(IntKi), PARAMETER :: M70N1MKxe = 5968 + INTEGER(IntKi), PARAMETER :: M70N2MKxe = 5969 + INTEGER(IntKi), PARAMETER :: M70N3MKxe = 5970 + INTEGER(IntKi), PARAMETER :: M70N4MKxe = 5971 + INTEGER(IntKi), PARAMETER :: M70N5MKxe = 5972 + INTEGER(IntKi), PARAMETER :: M70N6MKxe = 5973 + INTEGER(IntKi), PARAMETER :: M70N7MKxe = 5974 + INTEGER(IntKi), PARAMETER :: M70N8MKxe = 5975 + INTEGER(IntKi), PARAMETER :: M70N9MKxe = 5976 + INTEGER(IntKi), PARAMETER :: M71N1MKxe = 5977 + INTEGER(IntKi), PARAMETER :: M71N2MKxe = 5978 + INTEGER(IntKi), PARAMETER :: M71N3MKxe = 5979 + INTEGER(IntKi), PARAMETER :: M71N4MKxe = 5980 + INTEGER(IntKi), PARAMETER :: M71N5MKxe = 5981 + INTEGER(IntKi), PARAMETER :: M71N6MKxe = 5982 + INTEGER(IntKi), PARAMETER :: M71N7MKxe = 5983 + INTEGER(IntKi), PARAMETER :: M71N8MKxe = 5984 + INTEGER(IntKi), PARAMETER :: M71N9MKxe = 5985 + INTEGER(IntKi), PARAMETER :: M72N1MKxe = 5986 + INTEGER(IntKi), PARAMETER :: M72N2MKxe = 5987 + INTEGER(IntKi), PARAMETER :: M72N3MKxe = 5988 + INTEGER(IntKi), PARAMETER :: M72N4MKxe = 5989 + INTEGER(IntKi), PARAMETER :: M72N5MKxe = 5990 + INTEGER(IntKi), PARAMETER :: M72N6MKxe = 5991 + INTEGER(IntKi), PARAMETER :: M72N7MKxe = 5992 + INTEGER(IntKi), PARAMETER :: M72N8MKxe = 5993 + INTEGER(IntKi), PARAMETER :: M72N9MKxe = 5994 + INTEGER(IntKi), PARAMETER :: M73N1MKxe = 5995 + INTEGER(IntKi), PARAMETER :: M73N2MKxe = 5996 + INTEGER(IntKi), PARAMETER :: M73N3MKxe = 5997 + INTEGER(IntKi), PARAMETER :: M73N4MKxe = 5998 + INTEGER(IntKi), PARAMETER :: M73N5MKxe = 5999 + INTEGER(IntKi), PARAMETER :: M73N6MKxe = 6000 + INTEGER(IntKi), PARAMETER :: M73N7MKxe = 6001 + INTEGER(IntKi), PARAMETER :: M73N8MKxe = 6002 + INTEGER(IntKi), PARAMETER :: M73N9MKxe = 6003 + INTEGER(IntKi), PARAMETER :: M74N1MKxe = 6004 + INTEGER(IntKi), PARAMETER :: M74N2MKxe = 6005 + INTEGER(IntKi), PARAMETER :: M74N3MKxe = 6006 + INTEGER(IntKi), PARAMETER :: M74N4MKxe = 6007 + INTEGER(IntKi), PARAMETER :: M74N5MKxe = 6008 + INTEGER(IntKi), PARAMETER :: M74N6MKxe = 6009 + INTEGER(IntKi), PARAMETER :: M74N7MKxe = 6010 + INTEGER(IntKi), PARAMETER :: M74N8MKxe = 6011 + INTEGER(IntKi), PARAMETER :: M74N9MKxe = 6012 + INTEGER(IntKi), PARAMETER :: M75N1MKxe = 6013 + INTEGER(IntKi), PARAMETER :: M75N2MKxe = 6014 + INTEGER(IntKi), PARAMETER :: M75N3MKxe = 6015 + INTEGER(IntKi), PARAMETER :: M75N4MKxe = 6016 + INTEGER(IntKi), PARAMETER :: M75N5MKxe = 6017 + INTEGER(IntKi), PARAMETER :: M75N6MKxe = 6018 + INTEGER(IntKi), PARAMETER :: M75N7MKxe = 6019 + INTEGER(IntKi), PARAMETER :: M75N8MKxe = 6020 + INTEGER(IntKi), PARAMETER :: M75N9MKxe = 6021 + INTEGER(IntKi), PARAMETER :: M76N1MKxe = 6022 + INTEGER(IntKi), PARAMETER :: M76N2MKxe = 6023 + INTEGER(IntKi), PARAMETER :: M76N3MKxe = 6024 + INTEGER(IntKi), PARAMETER :: M76N4MKxe = 6025 + INTEGER(IntKi), PARAMETER :: M76N5MKxe = 6026 + INTEGER(IntKi), PARAMETER :: M76N6MKxe = 6027 + INTEGER(IntKi), PARAMETER :: M76N7MKxe = 6028 + INTEGER(IntKi), PARAMETER :: M76N8MKxe = 6029 + INTEGER(IntKi), PARAMETER :: M76N9MKxe = 6030 + INTEGER(IntKi), PARAMETER :: M77N1MKxe = 6031 + INTEGER(IntKi), PARAMETER :: M77N2MKxe = 6032 + INTEGER(IntKi), PARAMETER :: M77N3MKxe = 6033 + INTEGER(IntKi), PARAMETER :: M77N4MKxe = 6034 + INTEGER(IntKi), PARAMETER :: M77N5MKxe = 6035 + INTEGER(IntKi), PARAMETER :: M77N6MKxe = 6036 + INTEGER(IntKi), PARAMETER :: M77N7MKxe = 6037 + INTEGER(IntKi), PARAMETER :: M77N8MKxe = 6038 + INTEGER(IntKi), PARAMETER :: M77N9MKxe = 6039 + INTEGER(IntKi), PARAMETER :: M78N1MKxe = 6040 + INTEGER(IntKi), PARAMETER :: M78N2MKxe = 6041 + INTEGER(IntKi), PARAMETER :: M78N3MKxe = 6042 + INTEGER(IntKi), PARAMETER :: M78N4MKxe = 6043 + INTEGER(IntKi), PARAMETER :: M78N5MKxe = 6044 + INTEGER(IntKi), PARAMETER :: M78N6MKxe = 6045 + INTEGER(IntKi), PARAMETER :: M78N7MKxe = 6046 + INTEGER(IntKi), PARAMETER :: M78N8MKxe = 6047 + INTEGER(IntKi), PARAMETER :: M78N9MKxe = 6048 + INTEGER(IntKi), PARAMETER :: M79N1MKxe = 6049 + INTEGER(IntKi), PARAMETER :: M79N2MKxe = 6050 + INTEGER(IntKi), PARAMETER :: M79N3MKxe = 6051 + INTEGER(IntKi), PARAMETER :: M79N4MKxe = 6052 + INTEGER(IntKi), PARAMETER :: M79N5MKxe = 6053 + INTEGER(IntKi), PARAMETER :: M79N6MKxe = 6054 + INTEGER(IntKi), PARAMETER :: M79N7MKxe = 6055 + INTEGER(IntKi), PARAMETER :: M79N8MKxe = 6056 + INTEGER(IntKi), PARAMETER :: M79N9MKxe = 6057 + INTEGER(IntKi), PARAMETER :: M80N1MKxe = 6058 + INTEGER(IntKi), PARAMETER :: M80N2MKxe = 6059 + INTEGER(IntKi), PARAMETER :: M80N3MKxe = 6060 + INTEGER(IntKi), PARAMETER :: M80N4MKxe = 6061 + INTEGER(IntKi), PARAMETER :: M80N5MKxe = 6062 + INTEGER(IntKi), PARAMETER :: M80N6MKxe = 6063 + INTEGER(IntKi), PARAMETER :: M80N7MKxe = 6064 + INTEGER(IntKi), PARAMETER :: M80N8MKxe = 6065 + INTEGER(IntKi), PARAMETER :: M80N9MKxe = 6066 + INTEGER(IntKi), PARAMETER :: M81N1MKxe = 6067 + INTEGER(IntKi), PARAMETER :: M81N2MKxe = 6068 + INTEGER(IntKi), PARAMETER :: M81N3MKxe = 6069 + INTEGER(IntKi), PARAMETER :: M81N4MKxe = 6070 + INTEGER(IntKi), PARAMETER :: M81N5MKxe = 6071 + INTEGER(IntKi), PARAMETER :: M81N6MKxe = 6072 + INTEGER(IntKi), PARAMETER :: M81N7MKxe = 6073 + INTEGER(IntKi), PARAMETER :: M81N8MKxe = 6074 + INTEGER(IntKi), PARAMETER :: M81N9MKxe = 6075 + INTEGER(IntKi), PARAMETER :: M82N1MKxe = 6076 + INTEGER(IntKi), PARAMETER :: M82N2MKxe = 6077 + INTEGER(IntKi), PARAMETER :: M82N3MKxe = 6078 + INTEGER(IntKi), PARAMETER :: M82N4MKxe = 6079 + INTEGER(IntKi), PARAMETER :: M82N5MKxe = 6080 + INTEGER(IntKi), PARAMETER :: M82N6MKxe = 6081 + INTEGER(IntKi), PARAMETER :: M82N7MKxe = 6082 + INTEGER(IntKi), PARAMETER :: M82N8MKxe = 6083 + INTEGER(IntKi), PARAMETER :: M82N9MKxe = 6084 + INTEGER(IntKi), PARAMETER :: M83N1MKxe = 6085 + INTEGER(IntKi), PARAMETER :: M83N2MKxe = 6086 + INTEGER(IntKi), PARAMETER :: M83N3MKxe = 6087 + INTEGER(IntKi), PARAMETER :: M83N4MKxe = 6088 + INTEGER(IntKi), PARAMETER :: M83N5MKxe = 6089 + INTEGER(IntKi), PARAMETER :: M83N6MKxe = 6090 + INTEGER(IntKi), PARAMETER :: M83N7MKxe = 6091 + INTEGER(IntKi), PARAMETER :: M83N8MKxe = 6092 + INTEGER(IntKi), PARAMETER :: M83N9MKxe = 6093 + INTEGER(IntKi), PARAMETER :: M84N1MKxe = 6094 + INTEGER(IntKi), PARAMETER :: M84N2MKxe = 6095 + INTEGER(IntKi), PARAMETER :: M84N3MKxe = 6096 + INTEGER(IntKi), PARAMETER :: M84N4MKxe = 6097 + INTEGER(IntKi), PARAMETER :: M84N5MKxe = 6098 + INTEGER(IntKi), PARAMETER :: M84N6MKxe = 6099 + INTEGER(IntKi), PARAMETER :: M84N7MKxe = 6100 + INTEGER(IntKi), PARAMETER :: M84N8MKxe = 6101 + INTEGER(IntKi), PARAMETER :: M84N9MKxe = 6102 + INTEGER(IntKi), PARAMETER :: M85N1MKxe = 6103 + INTEGER(IntKi), PARAMETER :: M85N2MKxe = 6104 + INTEGER(IntKi), PARAMETER :: M85N3MKxe = 6105 + INTEGER(IntKi), PARAMETER :: M85N4MKxe = 6106 + INTEGER(IntKi), PARAMETER :: M85N5MKxe = 6107 + INTEGER(IntKi), PARAMETER :: M85N6MKxe = 6108 + INTEGER(IntKi), PARAMETER :: M85N7MKxe = 6109 + INTEGER(IntKi), PARAMETER :: M85N8MKxe = 6110 + INTEGER(IntKi), PARAMETER :: M85N9MKxe = 6111 + INTEGER(IntKi), PARAMETER :: M86N1MKxe = 6112 + INTEGER(IntKi), PARAMETER :: M86N2MKxe = 6113 + INTEGER(IntKi), PARAMETER :: M86N3MKxe = 6114 + INTEGER(IntKi), PARAMETER :: M86N4MKxe = 6115 + INTEGER(IntKi), PARAMETER :: M86N5MKxe = 6116 + INTEGER(IntKi), PARAMETER :: M86N6MKxe = 6117 + INTEGER(IntKi), PARAMETER :: M86N7MKxe = 6118 + INTEGER(IntKi), PARAMETER :: M86N8MKxe = 6119 + INTEGER(IntKi), PARAMETER :: M86N9MKxe = 6120 + INTEGER(IntKi), PARAMETER :: M87N1MKxe = 6121 + INTEGER(IntKi), PARAMETER :: M87N2MKxe = 6122 + INTEGER(IntKi), PARAMETER :: M87N3MKxe = 6123 + INTEGER(IntKi), PARAMETER :: M87N4MKxe = 6124 + INTEGER(IntKi), PARAMETER :: M87N5MKxe = 6125 + INTEGER(IntKi), PARAMETER :: M87N6MKxe = 6126 + INTEGER(IntKi), PARAMETER :: M87N7MKxe = 6127 + INTEGER(IntKi), PARAMETER :: M87N8MKxe = 6128 + INTEGER(IntKi), PARAMETER :: M87N9MKxe = 6129 + INTEGER(IntKi), PARAMETER :: M88N1MKxe = 6130 + INTEGER(IntKi), PARAMETER :: M88N2MKxe = 6131 + INTEGER(IntKi), PARAMETER :: M88N3MKxe = 6132 + INTEGER(IntKi), PARAMETER :: M88N4MKxe = 6133 + INTEGER(IntKi), PARAMETER :: M88N5MKxe = 6134 + INTEGER(IntKi), PARAMETER :: M88N6MKxe = 6135 + INTEGER(IntKi), PARAMETER :: M88N7MKxe = 6136 + INTEGER(IntKi), PARAMETER :: M88N8MKxe = 6137 + INTEGER(IntKi), PARAMETER :: M88N9MKxe = 6138 + INTEGER(IntKi), PARAMETER :: M89N1MKxe = 6139 + INTEGER(IntKi), PARAMETER :: M89N2MKxe = 6140 + INTEGER(IntKi), PARAMETER :: M89N3MKxe = 6141 + INTEGER(IntKi), PARAMETER :: M89N4MKxe = 6142 + INTEGER(IntKi), PARAMETER :: M89N5MKxe = 6143 + INTEGER(IntKi), PARAMETER :: M89N6MKxe = 6144 + INTEGER(IntKi), PARAMETER :: M89N7MKxe = 6145 + INTEGER(IntKi), PARAMETER :: M89N8MKxe = 6146 + INTEGER(IntKi), PARAMETER :: M89N9MKxe = 6147 + INTEGER(IntKi), PARAMETER :: M90N1MKxe = 6148 + INTEGER(IntKi), PARAMETER :: M90N2MKxe = 6149 + INTEGER(IntKi), PARAMETER :: M90N3MKxe = 6150 + INTEGER(IntKi), PARAMETER :: M90N4MKxe = 6151 + INTEGER(IntKi), PARAMETER :: M90N5MKxe = 6152 + INTEGER(IntKi), PARAMETER :: M90N6MKxe = 6153 + INTEGER(IntKi), PARAMETER :: M90N7MKxe = 6154 + INTEGER(IntKi), PARAMETER :: M90N8MKxe = 6155 + INTEGER(IntKi), PARAMETER :: M90N9MKxe = 6156 + INTEGER(IntKi), PARAMETER :: M91N1MKxe = 6157 + INTEGER(IntKi), PARAMETER :: M91N2MKxe = 6158 + INTEGER(IntKi), PARAMETER :: M91N3MKxe = 6159 + INTEGER(IntKi), PARAMETER :: M91N4MKxe = 6160 + INTEGER(IntKi), PARAMETER :: M91N5MKxe = 6161 + INTEGER(IntKi), PARAMETER :: M91N6MKxe = 6162 + INTEGER(IntKi), PARAMETER :: M91N7MKxe = 6163 + INTEGER(IntKi), PARAMETER :: M91N8MKxe = 6164 + INTEGER(IntKi), PARAMETER :: M91N9MKxe = 6165 + INTEGER(IntKi), PARAMETER :: M92N1MKxe = 6166 + INTEGER(IntKi), PARAMETER :: M92N2MKxe = 6167 + INTEGER(IntKi), PARAMETER :: M92N3MKxe = 6168 + INTEGER(IntKi), PARAMETER :: M92N4MKxe = 6169 + INTEGER(IntKi), PARAMETER :: M92N5MKxe = 6170 + INTEGER(IntKi), PARAMETER :: M92N6MKxe = 6171 + INTEGER(IntKi), PARAMETER :: M92N7MKxe = 6172 + INTEGER(IntKi), PARAMETER :: M92N8MKxe = 6173 + INTEGER(IntKi), PARAMETER :: M92N9MKxe = 6174 + INTEGER(IntKi), PARAMETER :: M93N1MKxe = 6175 + INTEGER(IntKi), PARAMETER :: M93N2MKxe = 6176 + INTEGER(IntKi), PARAMETER :: M93N3MKxe = 6177 + INTEGER(IntKi), PARAMETER :: M93N4MKxe = 6178 + INTEGER(IntKi), PARAMETER :: M93N5MKxe = 6179 + INTEGER(IntKi), PARAMETER :: M93N6MKxe = 6180 + INTEGER(IntKi), PARAMETER :: M93N7MKxe = 6181 + INTEGER(IntKi), PARAMETER :: M93N8MKxe = 6182 + INTEGER(IntKi), PARAMETER :: M93N9MKxe = 6183 + INTEGER(IntKi), PARAMETER :: M94N1MKxe = 6184 + INTEGER(IntKi), PARAMETER :: M94N2MKxe = 6185 + INTEGER(IntKi), PARAMETER :: M94N3MKxe = 6186 + INTEGER(IntKi), PARAMETER :: M94N4MKxe = 6187 + INTEGER(IntKi), PARAMETER :: M94N5MKxe = 6188 + INTEGER(IntKi), PARAMETER :: M94N6MKxe = 6189 + INTEGER(IntKi), PARAMETER :: M94N7MKxe = 6190 + INTEGER(IntKi), PARAMETER :: M94N8MKxe = 6191 + INTEGER(IntKi), PARAMETER :: M94N9MKxe = 6192 + INTEGER(IntKi), PARAMETER :: M95N1MKxe = 6193 + INTEGER(IntKi), PARAMETER :: M95N2MKxe = 6194 + INTEGER(IntKi), PARAMETER :: M95N3MKxe = 6195 + INTEGER(IntKi), PARAMETER :: M95N4MKxe = 6196 + INTEGER(IntKi), PARAMETER :: M95N5MKxe = 6197 + INTEGER(IntKi), PARAMETER :: M95N6MKxe = 6198 + INTEGER(IntKi), PARAMETER :: M95N7MKxe = 6199 + INTEGER(IntKi), PARAMETER :: M95N8MKxe = 6200 + INTEGER(IntKi), PARAMETER :: M95N9MKxe = 6201 + INTEGER(IntKi), PARAMETER :: M96N1MKxe = 6202 + INTEGER(IntKi), PARAMETER :: M96N2MKxe = 6203 + INTEGER(IntKi), PARAMETER :: M96N3MKxe = 6204 + INTEGER(IntKi), PARAMETER :: M96N4MKxe = 6205 + INTEGER(IntKi), PARAMETER :: M96N5MKxe = 6206 + INTEGER(IntKi), PARAMETER :: M96N6MKxe = 6207 + INTEGER(IntKi), PARAMETER :: M96N7MKxe = 6208 + INTEGER(IntKi), PARAMETER :: M96N8MKxe = 6209 + INTEGER(IntKi), PARAMETER :: M96N9MKxe = 6210 + INTEGER(IntKi), PARAMETER :: M97N1MKxe = 6211 + INTEGER(IntKi), PARAMETER :: M97N2MKxe = 6212 + INTEGER(IntKi), PARAMETER :: M97N3MKxe = 6213 + INTEGER(IntKi), PARAMETER :: M97N4MKxe = 6214 + INTEGER(IntKi), PARAMETER :: M97N5MKxe = 6215 + INTEGER(IntKi), PARAMETER :: M97N6MKxe = 6216 + INTEGER(IntKi), PARAMETER :: M97N7MKxe = 6217 + INTEGER(IntKi), PARAMETER :: M97N8MKxe = 6218 + INTEGER(IntKi), PARAMETER :: M97N9MKxe = 6219 + INTEGER(IntKi), PARAMETER :: M98N1MKxe = 6220 + INTEGER(IntKi), PARAMETER :: M98N2MKxe = 6221 + INTEGER(IntKi), PARAMETER :: M98N3MKxe = 6222 + INTEGER(IntKi), PARAMETER :: M98N4MKxe = 6223 + INTEGER(IntKi), PARAMETER :: M98N5MKxe = 6224 + INTEGER(IntKi), PARAMETER :: M98N6MKxe = 6225 + INTEGER(IntKi), PARAMETER :: M98N7MKxe = 6226 + INTEGER(IntKi), PARAMETER :: M98N8MKxe = 6227 + INTEGER(IntKi), PARAMETER :: M98N9MKxe = 6228 + INTEGER(IntKi), PARAMETER :: M99N1MKxe = 6229 + INTEGER(IntKi), PARAMETER :: M99N2MKxe = 6230 + INTEGER(IntKi), PARAMETER :: M99N3MKxe = 6231 + INTEGER(IntKi), PARAMETER :: M99N4MKxe = 6232 + INTEGER(IntKi), PARAMETER :: M99N5MKxe = 6233 + INTEGER(IntKi), PARAMETER :: M99N6MKxe = 6234 + INTEGER(IntKi), PARAMETER :: M99N7MKxe = 6235 + INTEGER(IntKi), PARAMETER :: M99N8MKxe = 6236 + INTEGER(IntKi), PARAMETER :: M99N9MKxe = 6237 + INTEGER(IntKi), PARAMETER :: M01N1MKye = 6238 + INTEGER(IntKi), PARAMETER :: M01N2MKye = 6239 + INTEGER(IntKi), PARAMETER :: M01N3MKye = 6240 + INTEGER(IntKi), PARAMETER :: M01N4MKye = 6241 + INTEGER(IntKi), PARAMETER :: M01N5MKye = 6242 + INTEGER(IntKi), PARAMETER :: M01N6MKye = 6243 + INTEGER(IntKi), PARAMETER :: M01N7MKye = 6244 + INTEGER(IntKi), PARAMETER :: M01N8MKye = 6245 + INTEGER(IntKi), PARAMETER :: M01N9MKye = 6246 + INTEGER(IntKi), PARAMETER :: M02N1MKye = 6247 + INTEGER(IntKi), PARAMETER :: M02N2MKye = 6248 + INTEGER(IntKi), PARAMETER :: M02N3MKye = 6249 + INTEGER(IntKi), PARAMETER :: M02N4MKye = 6250 + INTEGER(IntKi), PARAMETER :: M02N5MKye = 6251 + INTEGER(IntKi), PARAMETER :: M02N6MKye = 6252 + INTEGER(IntKi), PARAMETER :: M02N7MKye = 6253 + INTEGER(IntKi), PARAMETER :: M02N8MKye = 6254 + INTEGER(IntKi), PARAMETER :: M02N9MKye = 6255 + INTEGER(IntKi), PARAMETER :: M03N1MKye = 6256 + INTEGER(IntKi), PARAMETER :: M03N2MKye = 6257 + INTEGER(IntKi), PARAMETER :: M03N3MKye = 6258 + INTEGER(IntKi), PARAMETER :: M03N4MKye = 6259 + INTEGER(IntKi), PARAMETER :: M03N5MKye = 6260 + INTEGER(IntKi), PARAMETER :: M03N6MKye = 6261 + INTEGER(IntKi), PARAMETER :: M03N7MKye = 6262 + INTEGER(IntKi), PARAMETER :: M03N8MKye = 6263 + INTEGER(IntKi), PARAMETER :: M03N9MKye = 6264 + INTEGER(IntKi), PARAMETER :: M04N1MKye = 6265 + INTEGER(IntKi), PARAMETER :: M04N2MKye = 6266 + INTEGER(IntKi), PARAMETER :: M04N3MKye = 6267 + INTEGER(IntKi), PARAMETER :: M04N4MKye = 6268 + INTEGER(IntKi), PARAMETER :: M04N5MKye = 6269 + INTEGER(IntKi), PARAMETER :: M04N6MKye = 6270 + INTEGER(IntKi), PARAMETER :: M04N7MKye = 6271 + INTEGER(IntKi), PARAMETER :: M04N8MKye = 6272 + INTEGER(IntKi), PARAMETER :: M04N9MKye = 6273 + INTEGER(IntKi), PARAMETER :: M05N1MKye = 6274 + INTEGER(IntKi), PARAMETER :: M05N2MKye = 6275 + INTEGER(IntKi), PARAMETER :: M05N3MKye = 6276 + INTEGER(IntKi), PARAMETER :: M05N4MKye = 6277 + INTEGER(IntKi), PARAMETER :: M05N5MKye = 6278 + INTEGER(IntKi), PARAMETER :: M05N6MKye = 6279 + INTEGER(IntKi), PARAMETER :: M05N7MKye = 6280 + INTEGER(IntKi), PARAMETER :: M05N8MKye = 6281 + INTEGER(IntKi), PARAMETER :: M05N9MKye = 6282 + INTEGER(IntKi), PARAMETER :: M06N1MKye = 6283 + INTEGER(IntKi), PARAMETER :: M06N2MKye = 6284 + INTEGER(IntKi), PARAMETER :: M06N3MKye = 6285 + INTEGER(IntKi), PARAMETER :: M06N4MKye = 6286 + INTEGER(IntKi), PARAMETER :: M06N5MKye = 6287 + INTEGER(IntKi), PARAMETER :: M06N6MKye = 6288 + INTEGER(IntKi), PARAMETER :: M06N7MKye = 6289 + INTEGER(IntKi), PARAMETER :: M06N8MKye = 6290 + INTEGER(IntKi), PARAMETER :: M06N9MKye = 6291 + INTEGER(IntKi), PARAMETER :: M07N1MKye = 6292 + INTEGER(IntKi), PARAMETER :: M07N2MKye = 6293 + INTEGER(IntKi), PARAMETER :: M07N3MKye = 6294 + INTEGER(IntKi), PARAMETER :: M07N4MKye = 6295 + INTEGER(IntKi), PARAMETER :: M07N5MKye = 6296 + INTEGER(IntKi), PARAMETER :: M07N6MKye = 6297 + INTEGER(IntKi), PARAMETER :: M07N7MKye = 6298 + INTEGER(IntKi), PARAMETER :: M07N8MKye = 6299 + INTEGER(IntKi), PARAMETER :: M07N9MKye = 6300 + INTEGER(IntKi), PARAMETER :: M08N1MKye = 6301 + INTEGER(IntKi), PARAMETER :: M08N2MKye = 6302 + INTEGER(IntKi), PARAMETER :: M08N3MKye = 6303 + INTEGER(IntKi), PARAMETER :: M08N4MKye = 6304 + INTEGER(IntKi), PARAMETER :: M08N5MKye = 6305 + INTEGER(IntKi), PARAMETER :: M08N6MKye = 6306 + INTEGER(IntKi), PARAMETER :: M08N7MKye = 6307 + INTEGER(IntKi), PARAMETER :: M08N8MKye = 6308 + INTEGER(IntKi), PARAMETER :: M08N9MKye = 6309 + INTEGER(IntKi), PARAMETER :: M09N1MKye = 6310 + INTEGER(IntKi), PARAMETER :: M09N2MKye = 6311 + INTEGER(IntKi), PARAMETER :: M09N3MKye = 6312 + INTEGER(IntKi), PARAMETER :: M09N4MKye = 6313 + INTEGER(IntKi), PARAMETER :: M09N5MKye = 6314 + INTEGER(IntKi), PARAMETER :: M09N6MKye = 6315 + INTEGER(IntKi), PARAMETER :: M09N7MKye = 6316 + INTEGER(IntKi), PARAMETER :: M09N8MKye = 6317 + INTEGER(IntKi), PARAMETER :: M09N9MKye = 6318 + INTEGER(IntKi), PARAMETER :: M10N1MKye = 6319 + INTEGER(IntKi), PARAMETER :: M10N2MKye = 6320 + INTEGER(IntKi), PARAMETER :: M10N3MKye = 6321 + INTEGER(IntKi), PARAMETER :: M10N4MKye = 6322 + INTEGER(IntKi), PARAMETER :: M10N5MKye = 6323 + INTEGER(IntKi), PARAMETER :: M10N6MKye = 6324 + INTEGER(IntKi), PARAMETER :: M10N7MKye = 6325 + INTEGER(IntKi), PARAMETER :: M10N8MKye = 6326 + INTEGER(IntKi), PARAMETER :: M10N9MKye = 6327 + INTEGER(IntKi), PARAMETER :: M11N1MKye = 6328 + INTEGER(IntKi), PARAMETER :: M11N2MKye = 6329 + INTEGER(IntKi), PARAMETER :: M11N3MKye = 6330 + INTEGER(IntKi), PARAMETER :: M11N4MKye = 6331 + INTEGER(IntKi), PARAMETER :: M11N5MKye = 6332 + INTEGER(IntKi), PARAMETER :: M11N6MKye = 6333 + INTEGER(IntKi), PARAMETER :: M11N7MKye = 6334 + INTEGER(IntKi), PARAMETER :: M11N8MKye = 6335 + INTEGER(IntKi), PARAMETER :: M11N9MKye = 6336 + INTEGER(IntKi), PARAMETER :: M12N1MKye = 6337 + INTEGER(IntKi), PARAMETER :: M12N2MKye = 6338 + INTEGER(IntKi), PARAMETER :: M12N3MKye = 6339 + INTEGER(IntKi), PARAMETER :: M12N4MKye = 6340 + INTEGER(IntKi), PARAMETER :: M12N5MKye = 6341 + INTEGER(IntKi), PARAMETER :: M12N6MKye = 6342 + INTEGER(IntKi), PARAMETER :: M12N7MKye = 6343 + INTEGER(IntKi), PARAMETER :: M12N8MKye = 6344 + INTEGER(IntKi), PARAMETER :: M12N9MKye = 6345 + INTEGER(IntKi), PARAMETER :: M13N1MKye = 6346 + INTEGER(IntKi), PARAMETER :: M13N2MKye = 6347 + INTEGER(IntKi), PARAMETER :: M13N3MKye = 6348 + INTEGER(IntKi), PARAMETER :: M13N4MKye = 6349 + INTEGER(IntKi), PARAMETER :: M13N5MKye = 6350 + INTEGER(IntKi), PARAMETER :: M13N6MKye = 6351 + INTEGER(IntKi), PARAMETER :: M13N7MKye = 6352 + INTEGER(IntKi), PARAMETER :: M13N8MKye = 6353 + INTEGER(IntKi), PARAMETER :: M13N9MKye = 6354 + INTEGER(IntKi), PARAMETER :: M14N1MKye = 6355 + INTEGER(IntKi), PARAMETER :: M14N2MKye = 6356 + INTEGER(IntKi), PARAMETER :: M14N3MKye = 6357 + INTEGER(IntKi), PARAMETER :: M14N4MKye = 6358 + INTEGER(IntKi), PARAMETER :: M14N5MKye = 6359 + INTEGER(IntKi), PARAMETER :: M14N6MKye = 6360 + INTEGER(IntKi), PARAMETER :: M14N7MKye = 6361 + INTEGER(IntKi), PARAMETER :: M14N8MKye = 6362 + INTEGER(IntKi), PARAMETER :: M14N9MKye = 6363 + INTEGER(IntKi), PARAMETER :: M15N1MKye = 6364 + INTEGER(IntKi), PARAMETER :: M15N2MKye = 6365 + INTEGER(IntKi), PARAMETER :: M15N3MKye = 6366 + INTEGER(IntKi), PARAMETER :: M15N4MKye = 6367 + INTEGER(IntKi), PARAMETER :: M15N5MKye = 6368 + INTEGER(IntKi), PARAMETER :: M15N6MKye = 6369 + INTEGER(IntKi), PARAMETER :: M15N7MKye = 6370 + INTEGER(IntKi), PARAMETER :: M15N8MKye = 6371 + INTEGER(IntKi), PARAMETER :: M15N9MKye = 6372 + INTEGER(IntKi), PARAMETER :: M16N1MKye = 6373 + INTEGER(IntKi), PARAMETER :: M16N2MKye = 6374 + INTEGER(IntKi), PARAMETER :: M16N3MKye = 6375 + INTEGER(IntKi), PARAMETER :: M16N4MKye = 6376 + INTEGER(IntKi), PARAMETER :: M16N5MKye = 6377 + INTEGER(IntKi), PARAMETER :: M16N6MKye = 6378 + INTEGER(IntKi), PARAMETER :: M16N7MKye = 6379 + INTEGER(IntKi), PARAMETER :: M16N8MKye = 6380 + INTEGER(IntKi), PARAMETER :: M16N9MKye = 6381 + INTEGER(IntKi), PARAMETER :: M17N1MKye = 6382 + INTEGER(IntKi), PARAMETER :: M17N2MKye = 6383 + INTEGER(IntKi), PARAMETER :: M17N3MKye = 6384 + INTEGER(IntKi), PARAMETER :: M17N4MKye = 6385 + INTEGER(IntKi), PARAMETER :: M17N5MKye = 6386 + INTEGER(IntKi), PARAMETER :: M17N6MKye = 6387 + INTEGER(IntKi), PARAMETER :: M17N7MKye = 6388 + INTEGER(IntKi), PARAMETER :: M17N8MKye = 6389 + INTEGER(IntKi), PARAMETER :: M17N9MKye = 6390 + INTEGER(IntKi), PARAMETER :: M18N1MKye = 6391 + INTEGER(IntKi), PARAMETER :: M18N2MKye = 6392 + INTEGER(IntKi), PARAMETER :: M18N3MKye = 6393 + INTEGER(IntKi), PARAMETER :: M18N4MKye = 6394 + INTEGER(IntKi), PARAMETER :: M18N5MKye = 6395 + INTEGER(IntKi), PARAMETER :: M18N6MKye = 6396 + INTEGER(IntKi), PARAMETER :: M18N7MKye = 6397 + INTEGER(IntKi), PARAMETER :: M18N8MKye = 6398 + INTEGER(IntKi), PARAMETER :: M18N9MKye = 6399 + INTEGER(IntKi), PARAMETER :: M19N1MKye = 6400 + INTEGER(IntKi), PARAMETER :: M19N2MKye = 6401 + INTEGER(IntKi), PARAMETER :: M19N3MKye = 6402 + INTEGER(IntKi), PARAMETER :: M19N4MKye = 6403 + INTEGER(IntKi), PARAMETER :: M19N5MKye = 6404 + INTEGER(IntKi), PARAMETER :: M19N6MKye = 6405 + INTEGER(IntKi), PARAMETER :: M19N7MKye = 6406 + INTEGER(IntKi), PARAMETER :: M19N8MKye = 6407 + INTEGER(IntKi), PARAMETER :: M19N9MKye = 6408 + INTEGER(IntKi), PARAMETER :: M20N1MKye = 6409 + INTEGER(IntKi), PARAMETER :: M20N2MKye = 6410 + INTEGER(IntKi), PARAMETER :: M20N3MKye = 6411 + INTEGER(IntKi), PARAMETER :: M20N4MKye = 6412 + INTEGER(IntKi), PARAMETER :: M20N5MKye = 6413 + INTEGER(IntKi), PARAMETER :: M20N6MKye = 6414 + INTEGER(IntKi), PARAMETER :: M20N7MKye = 6415 + INTEGER(IntKi), PARAMETER :: M20N8MKye = 6416 + INTEGER(IntKi), PARAMETER :: M20N9MKye = 6417 + INTEGER(IntKi), PARAMETER :: M21N1MKye = 6418 + INTEGER(IntKi), PARAMETER :: M21N2MKye = 6419 + INTEGER(IntKi), PARAMETER :: M21N3MKye = 6420 + INTEGER(IntKi), PARAMETER :: M21N4MKye = 6421 + INTEGER(IntKi), PARAMETER :: M21N5MKye = 6422 + INTEGER(IntKi), PARAMETER :: M21N6MKye = 6423 + INTEGER(IntKi), PARAMETER :: M21N7MKye = 6424 + INTEGER(IntKi), PARAMETER :: M21N8MKye = 6425 + INTEGER(IntKi), PARAMETER :: M21N9MKye = 6426 + INTEGER(IntKi), PARAMETER :: M22N1MKye = 6427 + INTEGER(IntKi), PARAMETER :: M22N2MKye = 6428 + INTEGER(IntKi), PARAMETER :: M22N3MKye = 6429 + INTEGER(IntKi), PARAMETER :: M22N4MKye = 6430 + INTEGER(IntKi), PARAMETER :: M22N5MKye = 6431 + INTEGER(IntKi), PARAMETER :: M22N6MKye = 6432 + INTEGER(IntKi), PARAMETER :: M22N7MKye = 6433 + INTEGER(IntKi), PARAMETER :: M22N8MKye = 6434 + INTEGER(IntKi), PARAMETER :: M22N9MKye = 6435 + INTEGER(IntKi), PARAMETER :: M23N1MKye = 6436 + INTEGER(IntKi), PARAMETER :: M23N2MKye = 6437 + INTEGER(IntKi), PARAMETER :: M23N3MKye = 6438 + INTEGER(IntKi), PARAMETER :: M23N4MKye = 6439 + INTEGER(IntKi), PARAMETER :: M23N5MKye = 6440 + INTEGER(IntKi), PARAMETER :: M23N6MKye = 6441 + INTEGER(IntKi), PARAMETER :: M23N7MKye = 6442 + INTEGER(IntKi), PARAMETER :: M23N8MKye = 6443 + INTEGER(IntKi), PARAMETER :: M23N9MKye = 6444 + INTEGER(IntKi), PARAMETER :: M24N1MKye = 6445 + INTEGER(IntKi), PARAMETER :: M24N2MKye = 6446 + INTEGER(IntKi), PARAMETER :: M24N3MKye = 6447 + INTEGER(IntKi), PARAMETER :: M24N4MKye = 6448 + INTEGER(IntKi), PARAMETER :: M24N5MKye = 6449 + INTEGER(IntKi), PARAMETER :: M24N6MKye = 6450 + INTEGER(IntKi), PARAMETER :: M24N7MKye = 6451 + INTEGER(IntKi), PARAMETER :: M24N8MKye = 6452 + INTEGER(IntKi), PARAMETER :: M24N9MKye = 6453 + INTEGER(IntKi), PARAMETER :: M25N1MKye = 6454 + INTEGER(IntKi), PARAMETER :: M25N2MKye = 6455 + INTEGER(IntKi), PARAMETER :: M25N3MKye = 6456 + INTEGER(IntKi), PARAMETER :: M25N4MKye = 6457 + INTEGER(IntKi), PARAMETER :: M25N5MKye = 6458 + INTEGER(IntKi), PARAMETER :: M25N6MKye = 6459 + INTEGER(IntKi), PARAMETER :: M25N7MKye = 6460 + INTEGER(IntKi), PARAMETER :: M25N8MKye = 6461 + INTEGER(IntKi), PARAMETER :: M25N9MKye = 6462 + INTEGER(IntKi), PARAMETER :: M26N1MKye = 6463 + INTEGER(IntKi), PARAMETER :: M26N2MKye = 6464 + INTEGER(IntKi), PARAMETER :: M26N3MKye = 6465 + INTEGER(IntKi), PARAMETER :: M26N4MKye = 6466 + INTEGER(IntKi), PARAMETER :: M26N5MKye = 6467 + INTEGER(IntKi), PARAMETER :: M26N6MKye = 6468 + INTEGER(IntKi), PARAMETER :: M26N7MKye = 6469 + INTEGER(IntKi), PARAMETER :: M26N8MKye = 6470 + INTEGER(IntKi), PARAMETER :: M26N9MKye = 6471 + INTEGER(IntKi), PARAMETER :: M27N1MKye = 6472 + INTEGER(IntKi), PARAMETER :: M27N2MKye = 6473 + INTEGER(IntKi), PARAMETER :: M27N3MKye = 6474 + INTEGER(IntKi), PARAMETER :: M27N4MKye = 6475 + INTEGER(IntKi), PARAMETER :: M27N5MKye = 6476 + INTEGER(IntKi), PARAMETER :: M27N6MKye = 6477 + INTEGER(IntKi), PARAMETER :: M27N7MKye = 6478 + INTEGER(IntKi), PARAMETER :: M27N8MKye = 6479 + INTEGER(IntKi), PARAMETER :: M27N9MKye = 6480 + INTEGER(IntKi), PARAMETER :: M28N1MKye = 6481 + INTEGER(IntKi), PARAMETER :: M28N2MKye = 6482 + INTEGER(IntKi), PARAMETER :: M28N3MKye = 6483 + INTEGER(IntKi), PARAMETER :: M28N4MKye = 6484 + INTEGER(IntKi), PARAMETER :: M28N5MKye = 6485 + INTEGER(IntKi), PARAMETER :: M28N6MKye = 6486 + INTEGER(IntKi), PARAMETER :: M28N7MKye = 6487 + INTEGER(IntKi), PARAMETER :: M28N8MKye = 6488 + INTEGER(IntKi), PARAMETER :: M28N9MKye = 6489 + INTEGER(IntKi), PARAMETER :: M29N1MKye = 6490 + INTEGER(IntKi), PARAMETER :: M29N2MKye = 6491 + INTEGER(IntKi), PARAMETER :: M29N3MKye = 6492 + INTEGER(IntKi), PARAMETER :: M29N4MKye = 6493 + INTEGER(IntKi), PARAMETER :: M29N5MKye = 6494 + INTEGER(IntKi), PARAMETER :: M29N6MKye = 6495 + INTEGER(IntKi), PARAMETER :: M29N7MKye = 6496 + INTEGER(IntKi), PARAMETER :: M29N8MKye = 6497 + INTEGER(IntKi), PARAMETER :: M29N9MKye = 6498 + INTEGER(IntKi), PARAMETER :: M30N1MKye = 6499 + INTEGER(IntKi), PARAMETER :: M30N2MKye = 6500 + INTEGER(IntKi), PARAMETER :: M30N3MKye = 6501 + INTEGER(IntKi), PARAMETER :: M30N4MKye = 6502 + INTEGER(IntKi), PARAMETER :: M30N5MKye = 6503 + INTEGER(IntKi), PARAMETER :: M30N6MKye = 6504 + INTEGER(IntKi), PARAMETER :: M30N7MKye = 6505 + INTEGER(IntKi), PARAMETER :: M30N8MKye = 6506 + INTEGER(IntKi), PARAMETER :: M30N9MKye = 6507 + INTEGER(IntKi), PARAMETER :: M31N1MKye = 6508 + INTEGER(IntKi), PARAMETER :: M31N2MKye = 6509 + INTEGER(IntKi), PARAMETER :: M31N3MKye = 6510 + INTEGER(IntKi), PARAMETER :: M31N4MKye = 6511 + INTEGER(IntKi), PARAMETER :: M31N5MKye = 6512 + INTEGER(IntKi), PARAMETER :: M31N6MKye = 6513 + INTEGER(IntKi), PARAMETER :: M31N7MKye = 6514 + INTEGER(IntKi), PARAMETER :: M31N8MKye = 6515 + INTEGER(IntKi), PARAMETER :: M31N9MKye = 6516 + INTEGER(IntKi), PARAMETER :: M32N1MKye = 6517 + INTEGER(IntKi), PARAMETER :: M32N2MKye = 6518 + INTEGER(IntKi), PARAMETER :: M32N3MKye = 6519 + INTEGER(IntKi), PARAMETER :: M32N4MKye = 6520 + INTEGER(IntKi), PARAMETER :: M32N5MKye = 6521 + INTEGER(IntKi), PARAMETER :: M32N6MKye = 6522 + INTEGER(IntKi), PARAMETER :: M32N7MKye = 6523 + INTEGER(IntKi), PARAMETER :: M32N8MKye = 6524 + INTEGER(IntKi), PARAMETER :: M32N9MKye = 6525 + INTEGER(IntKi), PARAMETER :: M33N1MKye = 6526 + INTEGER(IntKi), PARAMETER :: M33N2MKye = 6527 + INTEGER(IntKi), PARAMETER :: M33N3MKye = 6528 + INTEGER(IntKi), PARAMETER :: M33N4MKye = 6529 + INTEGER(IntKi), PARAMETER :: M33N5MKye = 6530 + INTEGER(IntKi), PARAMETER :: M33N6MKye = 6531 + INTEGER(IntKi), PARAMETER :: M33N7MKye = 6532 + INTEGER(IntKi), PARAMETER :: M33N8MKye = 6533 + INTEGER(IntKi), PARAMETER :: M33N9MKye = 6534 + INTEGER(IntKi), PARAMETER :: M34N1MKye = 6535 + INTEGER(IntKi), PARAMETER :: M34N2MKye = 6536 + INTEGER(IntKi), PARAMETER :: M34N3MKye = 6537 + INTEGER(IntKi), PARAMETER :: M34N4MKye = 6538 + INTEGER(IntKi), PARAMETER :: M34N5MKye = 6539 + INTEGER(IntKi), PARAMETER :: M34N6MKye = 6540 + INTEGER(IntKi), PARAMETER :: M34N7MKye = 6541 + INTEGER(IntKi), PARAMETER :: M34N8MKye = 6542 + INTEGER(IntKi), PARAMETER :: M34N9MKye = 6543 + INTEGER(IntKi), PARAMETER :: M35N1MKye = 6544 + INTEGER(IntKi), PARAMETER :: M35N2MKye = 6545 + INTEGER(IntKi), PARAMETER :: M35N3MKye = 6546 + INTEGER(IntKi), PARAMETER :: M35N4MKye = 6547 + INTEGER(IntKi), PARAMETER :: M35N5MKye = 6548 + INTEGER(IntKi), PARAMETER :: M35N6MKye = 6549 + INTEGER(IntKi), PARAMETER :: M35N7MKye = 6550 + INTEGER(IntKi), PARAMETER :: M35N8MKye = 6551 + INTEGER(IntKi), PARAMETER :: M35N9MKye = 6552 + INTEGER(IntKi), PARAMETER :: M36N1MKye = 6553 + INTEGER(IntKi), PARAMETER :: M36N2MKye = 6554 + INTEGER(IntKi), PARAMETER :: M36N3MKye = 6555 + INTEGER(IntKi), PARAMETER :: M36N4MKye = 6556 + INTEGER(IntKi), PARAMETER :: M36N5MKye = 6557 + INTEGER(IntKi), PARAMETER :: M36N6MKye = 6558 + INTEGER(IntKi), PARAMETER :: M36N7MKye = 6559 + INTEGER(IntKi), PARAMETER :: M36N8MKye = 6560 + INTEGER(IntKi), PARAMETER :: M36N9MKye = 6561 + INTEGER(IntKi), PARAMETER :: M37N1MKye = 6562 + INTEGER(IntKi), PARAMETER :: M37N2MKye = 6563 + INTEGER(IntKi), PARAMETER :: M37N3MKye = 6564 + INTEGER(IntKi), PARAMETER :: M37N4MKye = 6565 + INTEGER(IntKi), PARAMETER :: M37N5MKye = 6566 + INTEGER(IntKi), PARAMETER :: M37N6MKye = 6567 + INTEGER(IntKi), PARAMETER :: M37N7MKye = 6568 + INTEGER(IntKi), PARAMETER :: M37N8MKye = 6569 + INTEGER(IntKi), PARAMETER :: M37N9MKye = 6570 + INTEGER(IntKi), PARAMETER :: M38N1MKye = 6571 + INTEGER(IntKi), PARAMETER :: M38N2MKye = 6572 + INTEGER(IntKi), PARAMETER :: M38N3MKye = 6573 + INTEGER(IntKi), PARAMETER :: M38N4MKye = 6574 + INTEGER(IntKi), PARAMETER :: M38N5MKye = 6575 + INTEGER(IntKi), PARAMETER :: M38N6MKye = 6576 + INTEGER(IntKi), PARAMETER :: M38N7MKye = 6577 + INTEGER(IntKi), PARAMETER :: M38N8MKye = 6578 + INTEGER(IntKi), PARAMETER :: M38N9MKye = 6579 + INTEGER(IntKi), PARAMETER :: M39N1MKye = 6580 + INTEGER(IntKi), PARAMETER :: M39N2MKye = 6581 + INTEGER(IntKi), PARAMETER :: M39N3MKye = 6582 + INTEGER(IntKi), PARAMETER :: M39N4MKye = 6583 + INTEGER(IntKi), PARAMETER :: M39N5MKye = 6584 + INTEGER(IntKi), PARAMETER :: M39N6MKye = 6585 + INTEGER(IntKi), PARAMETER :: M39N7MKye = 6586 + INTEGER(IntKi), PARAMETER :: M39N8MKye = 6587 + INTEGER(IntKi), PARAMETER :: M39N9MKye = 6588 + INTEGER(IntKi), PARAMETER :: M40N1MKye = 6589 + INTEGER(IntKi), PARAMETER :: M40N2MKye = 6590 + INTEGER(IntKi), PARAMETER :: M40N3MKye = 6591 + INTEGER(IntKi), PARAMETER :: M40N4MKye = 6592 + INTEGER(IntKi), PARAMETER :: M40N5MKye = 6593 + INTEGER(IntKi), PARAMETER :: M40N6MKye = 6594 + INTEGER(IntKi), PARAMETER :: M40N7MKye = 6595 + INTEGER(IntKi), PARAMETER :: M40N8MKye = 6596 + INTEGER(IntKi), PARAMETER :: M40N9MKye = 6597 + INTEGER(IntKi), PARAMETER :: M41N1MKye = 6598 + INTEGER(IntKi), PARAMETER :: M41N2MKye = 6599 + INTEGER(IntKi), PARAMETER :: M41N3MKye = 6600 + INTEGER(IntKi), PARAMETER :: M41N4MKye = 6601 + INTEGER(IntKi), PARAMETER :: M41N5MKye = 6602 + INTEGER(IntKi), PARAMETER :: M41N6MKye = 6603 + INTEGER(IntKi), PARAMETER :: M41N7MKye = 6604 + INTEGER(IntKi), PARAMETER :: M41N8MKye = 6605 + INTEGER(IntKi), PARAMETER :: M41N9MKye = 6606 + INTEGER(IntKi), PARAMETER :: M42N1MKye = 6607 + INTEGER(IntKi), PARAMETER :: M42N2MKye = 6608 + INTEGER(IntKi), PARAMETER :: M42N3MKye = 6609 + INTEGER(IntKi), PARAMETER :: M42N4MKye = 6610 + INTEGER(IntKi), PARAMETER :: M42N5MKye = 6611 + INTEGER(IntKi), PARAMETER :: M42N6MKye = 6612 + INTEGER(IntKi), PARAMETER :: M42N7MKye = 6613 + INTEGER(IntKi), PARAMETER :: M42N8MKye = 6614 + INTEGER(IntKi), PARAMETER :: M42N9MKye = 6615 + INTEGER(IntKi), PARAMETER :: M43N1MKye = 6616 + INTEGER(IntKi), PARAMETER :: M43N2MKye = 6617 + INTEGER(IntKi), PARAMETER :: M43N3MKye = 6618 + INTEGER(IntKi), PARAMETER :: M43N4MKye = 6619 + INTEGER(IntKi), PARAMETER :: M43N5MKye = 6620 + INTEGER(IntKi), PARAMETER :: M43N6MKye = 6621 + INTEGER(IntKi), PARAMETER :: M43N7MKye = 6622 + INTEGER(IntKi), PARAMETER :: M43N8MKye = 6623 + INTEGER(IntKi), PARAMETER :: M43N9MKye = 6624 + INTEGER(IntKi), PARAMETER :: M44N1MKye = 6625 + INTEGER(IntKi), PARAMETER :: M44N2MKye = 6626 + INTEGER(IntKi), PARAMETER :: M44N3MKye = 6627 + INTEGER(IntKi), PARAMETER :: M44N4MKye = 6628 + INTEGER(IntKi), PARAMETER :: M44N5MKye = 6629 + INTEGER(IntKi), PARAMETER :: M44N6MKye = 6630 + INTEGER(IntKi), PARAMETER :: M44N7MKye = 6631 + INTEGER(IntKi), PARAMETER :: M44N8MKye = 6632 + INTEGER(IntKi), PARAMETER :: M44N9MKye = 6633 + INTEGER(IntKi), PARAMETER :: M45N1MKye = 6634 + INTEGER(IntKi), PARAMETER :: M45N2MKye = 6635 + INTEGER(IntKi), PARAMETER :: M45N3MKye = 6636 + INTEGER(IntKi), PARAMETER :: M45N4MKye = 6637 + INTEGER(IntKi), PARAMETER :: M45N5MKye = 6638 + INTEGER(IntKi), PARAMETER :: M45N6MKye = 6639 + INTEGER(IntKi), PARAMETER :: M45N7MKye = 6640 + INTEGER(IntKi), PARAMETER :: M45N8MKye = 6641 + INTEGER(IntKi), PARAMETER :: M45N9MKye = 6642 + INTEGER(IntKi), PARAMETER :: M46N1MKye = 6643 + INTEGER(IntKi), PARAMETER :: M46N2MKye = 6644 + INTEGER(IntKi), PARAMETER :: M46N3MKye = 6645 + INTEGER(IntKi), PARAMETER :: M46N4MKye = 6646 + INTEGER(IntKi), PARAMETER :: M46N5MKye = 6647 + INTEGER(IntKi), PARAMETER :: M46N6MKye = 6648 + INTEGER(IntKi), PARAMETER :: M46N7MKye = 6649 + INTEGER(IntKi), PARAMETER :: M46N8MKye = 6650 + INTEGER(IntKi), PARAMETER :: M46N9MKye = 6651 + INTEGER(IntKi), PARAMETER :: M47N1MKye = 6652 + INTEGER(IntKi), PARAMETER :: M47N2MKye = 6653 + INTEGER(IntKi), PARAMETER :: M47N3MKye = 6654 + INTEGER(IntKi), PARAMETER :: M47N4MKye = 6655 + INTEGER(IntKi), PARAMETER :: M47N5MKye = 6656 + INTEGER(IntKi), PARAMETER :: M47N6MKye = 6657 + INTEGER(IntKi), PARAMETER :: M47N7MKye = 6658 + INTEGER(IntKi), PARAMETER :: M47N8MKye = 6659 + INTEGER(IntKi), PARAMETER :: M47N9MKye = 6660 + INTEGER(IntKi), PARAMETER :: M48N1MKye = 6661 + INTEGER(IntKi), PARAMETER :: M48N2MKye = 6662 + INTEGER(IntKi), PARAMETER :: M48N3MKye = 6663 + INTEGER(IntKi), PARAMETER :: M48N4MKye = 6664 + INTEGER(IntKi), PARAMETER :: M48N5MKye = 6665 + INTEGER(IntKi), PARAMETER :: M48N6MKye = 6666 + INTEGER(IntKi), PARAMETER :: M48N7MKye = 6667 + INTEGER(IntKi), PARAMETER :: M48N8MKye = 6668 + INTEGER(IntKi), PARAMETER :: M48N9MKye = 6669 + INTEGER(IntKi), PARAMETER :: M49N1MKye = 6670 + INTEGER(IntKi), PARAMETER :: M49N2MKye = 6671 + INTEGER(IntKi), PARAMETER :: M49N3MKye = 6672 + INTEGER(IntKi), PARAMETER :: M49N4MKye = 6673 + INTEGER(IntKi), PARAMETER :: M49N5MKye = 6674 + INTEGER(IntKi), PARAMETER :: M49N6MKye = 6675 + INTEGER(IntKi), PARAMETER :: M49N7MKye = 6676 + INTEGER(IntKi), PARAMETER :: M49N8MKye = 6677 + INTEGER(IntKi), PARAMETER :: M49N9MKye = 6678 + INTEGER(IntKi), PARAMETER :: M50N1MKye = 6679 + INTEGER(IntKi), PARAMETER :: M50N2MKye = 6680 + INTEGER(IntKi), PARAMETER :: M50N3MKye = 6681 + INTEGER(IntKi), PARAMETER :: M50N4MKye = 6682 + INTEGER(IntKi), PARAMETER :: M50N5MKye = 6683 + INTEGER(IntKi), PARAMETER :: M50N6MKye = 6684 + INTEGER(IntKi), PARAMETER :: M50N7MKye = 6685 + INTEGER(IntKi), PARAMETER :: M50N8MKye = 6686 + INTEGER(IntKi), PARAMETER :: M50N9MKye = 6687 + INTEGER(IntKi), PARAMETER :: M51N1MKye = 6688 + INTEGER(IntKi), PARAMETER :: M51N2MKye = 6689 + INTEGER(IntKi), PARAMETER :: M51N3MKye = 6690 + INTEGER(IntKi), PARAMETER :: M51N4MKye = 6691 + INTEGER(IntKi), PARAMETER :: M51N5MKye = 6692 + INTEGER(IntKi), PARAMETER :: M51N6MKye = 6693 + INTEGER(IntKi), PARAMETER :: M51N7MKye = 6694 + INTEGER(IntKi), PARAMETER :: M51N8MKye = 6695 + INTEGER(IntKi), PARAMETER :: M51N9MKye = 6696 + INTEGER(IntKi), PARAMETER :: M52N1MKye = 6697 + INTEGER(IntKi), PARAMETER :: M52N2MKye = 6698 + INTEGER(IntKi), PARAMETER :: M52N3MKye = 6699 + INTEGER(IntKi), PARAMETER :: M52N4MKye = 6700 + INTEGER(IntKi), PARAMETER :: M52N5MKye = 6701 + INTEGER(IntKi), PARAMETER :: M52N6MKye = 6702 + INTEGER(IntKi), PARAMETER :: M52N7MKye = 6703 + INTEGER(IntKi), PARAMETER :: M52N8MKye = 6704 + INTEGER(IntKi), PARAMETER :: M52N9MKye = 6705 + INTEGER(IntKi), PARAMETER :: M53N1MKye = 6706 + INTEGER(IntKi), PARAMETER :: M53N2MKye = 6707 + INTEGER(IntKi), PARAMETER :: M53N3MKye = 6708 + INTEGER(IntKi), PARAMETER :: M53N4MKye = 6709 + INTEGER(IntKi), PARAMETER :: M53N5MKye = 6710 + INTEGER(IntKi), PARAMETER :: M53N6MKye = 6711 + INTEGER(IntKi), PARAMETER :: M53N7MKye = 6712 + INTEGER(IntKi), PARAMETER :: M53N8MKye = 6713 + INTEGER(IntKi), PARAMETER :: M53N9MKye = 6714 + INTEGER(IntKi), PARAMETER :: M54N1MKye = 6715 + INTEGER(IntKi), PARAMETER :: M54N2MKye = 6716 + INTEGER(IntKi), PARAMETER :: M54N3MKye = 6717 + INTEGER(IntKi), PARAMETER :: M54N4MKye = 6718 + INTEGER(IntKi), PARAMETER :: M54N5MKye = 6719 + INTEGER(IntKi), PARAMETER :: M54N6MKye = 6720 + INTEGER(IntKi), PARAMETER :: M54N7MKye = 6721 + INTEGER(IntKi), PARAMETER :: M54N8MKye = 6722 + INTEGER(IntKi), PARAMETER :: M54N9MKye = 6723 + INTEGER(IntKi), PARAMETER :: M55N1MKye = 6724 + INTEGER(IntKi), PARAMETER :: M55N2MKye = 6725 + INTEGER(IntKi), PARAMETER :: M55N3MKye = 6726 + INTEGER(IntKi), PARAMETER :: M55N4MKye = 6727 + INTEGER(IntKi), PARAMETER :: M55N5MKye = 6728 + INTEGER(IntKi), PARAMETER :: M55N6MKye = 6729 + INTEGER(IntKi), PARAMETER :: M55N7MKye = 6730 + INTEGER(IntKi), PARAMETER :: M55N8MKye = 6731 + INTEGER(IntKi), PARAMETER :: M55N9MKye = 6732 + INTEGER(IntKi), PARAMETER :: M56N1MKye = 6733 + INTEGER(IntKi), PARAMETER :: M56N2MKye = 6734 + INTEGER(IntKi), PARAMETER :: M56N3MKye = 6735 + INTEGER(IntKi), PARAMETER :: M56N4MKye = 6736 + INTEGER(IntKi), PARAMETER :: M56N5MKye = 6737 + INTEGER(IntKi), PARAMETER :: M56N6MKye = 6738 + INTEGER(IntKi), PARAMETER :: M56N7MKye = 6739 + INTEGER(IntKi), PARAMETER :: M56N8MKye = 6740 + INTEGER(IntKi), PARAMETER :: M56N9MKye = 6741 + INTEGER(IntKi), PARAMETER :: M57N1MKye = 6742 + INTEGER(IntKi), PARAMETER :: M57N2MKye = 6743 + INTEGER(IntKi), PARAMETER :: M57N3MKye = 6744 + INTEGER(IntKi), PARAMETER :: M57N4MKye = 6745 + INTEGER(IntKi), PARAMETER :: M57N5MKye = 6746 + INTEGER(IntKi), PARAMETER :: M57N6MKye = 6747 + INTEGER(IntKi), PARAMETER :: M57N7MKye = 6748 + INTEGER(IntKi), PARAMETER :: M57N8MKye = 6749 + INTEGER(IntKi), PARAMETER :: M57N9MKye = 6750 + INTEGER(IntKi), PARAMETER :: M58N1MKye = 6751 + INTEGER(IntKi), PARAMETER :: M58N2MKye = 6752 + INTEGER(IntKi), PARAMETER :: M58N3MKye = 6753 + INTEGER(IntKi), PARAMETER :: M58N4MKye = 6754 + INTEGER(IntKi), PARAMETER :: M58N5MKye = 6755 + INTEGER(IntKi), PARAMETER :: M58N6MKye = 6756 + INTEGER(IntKi), PARAMETER :: M58N7MKye = 6757 + INTEGER(IntKi), PARAMETER :: M58N8MKye = 6758 + INTEGER(IntKi), PARAMETER :: M58N9MKye = 6759 + INTEGER(IntKi), PARAMETER :: M59N1MKye = 6760 + INTEGER(IntKi), PARAMETER :: M59N2MKye = 6761 + INTEGER(IntKi), PARAMETER :: M59N3MKye = 6762 + INTEGER(IntKi), PARAMETER :: M59N4MKye = 6763 + INTEGER(IntKi), PARAMETER :: M59N5MKye = 6764 + INTEGER(IntKi), PARAMETER :: M59N6MKye = 6765 + INTEGER(IntKi), PARAMETER :: M59N7MKye = 6766 + INTEGER(IntKi), PARAMETER :: M59N8MKye = 6767 + INTEGER(IntKi), PARAMETER :: M59N9MKye = 6768 + INTEGER(IntKi), PARAMETER :: M60N1MKye = 6769 + INTEGER(IntKi), PARAMETER :: M60N2MKye = 6770 + INTEGER(IntKi), PARAMETER :: M60N3MKye = 6771 + INTEGER(IntKi), PARAMETER :: M60N4MKye = 6772 + INTEGER(IntKi), PARAMETER :: M60N5MKye = 6773 + INTEGER(IntKi), PARAMETER :: M60N6MKye = 6774 + INTEGER(IntKi), PARAMETER :: M60N7MKye = 6775 + INTEGER(IntKi), PARAMETER :: M60N8MKye = 6776 + INTEGER(IntKi), PARAMETER :: M60N9MKye = 6777 + INTEGER(IntKi), PARAMETER :: M61N1MKye = 6778 + INTEGER(IntKi), PARAMETER :: M61N2MKye = 6779 + INTEGER(IntKi), PARAMETER :: M61N3MKye = 6780 + INTEGER(IntKi), PARAMETER :: M61N4MKye = 6781 + INTEGER(IntKi), PARAMETER :: M61N5MKye = 6782 + INTEGER(IntKi), PARAMETER :: M61N6MKye = 6783 + INTEGER(IntKi), PARAMETER :: M61N7MKye = 6784 + INTEGER(IntKi), PARAMETER :: M61N8MKye = 6785 + INTEGER(IntKi), PARAMETER :: M61N9MKye = 6786 + INTEGER(IntKi), PARAMETER :: M62N1MKye = 6787 + INTEGER(IntKi), PARAMETER :: M62N2MKye = 6788 + INTEGER(IntKi), PARAMETER :: M62N3MKye = 6789 + INTEGER(IntKi), PARAMETER :: M62N4MKye = 6790 + INTEGER(IntKi), PARAMETER :: M62N5MKye = 6791 + INTEGER(IntKi), PARAMETER :: M62N6MKye = 6792 + INTEGER(IntKi), PARAMETER :: M62N7MKye = 6793 + INTEGER(IntKi), PARAMETER :: M62N8MKye = 6794 + INTEGER(IntKi), PARAMETER :: M62N9MKye = 6795 + INTEGER(IntKi), PARAMETER :: M63N1MKye = 6796 + INTEGER(IntKi), PARAMETER :: M63N2MKye = 6797 + INTEGER(IntKi), PARAMETER :: M63N3MKye = 6798 + INTEGER(IntKi), PARAMETER :: M63N4MKye = 6799 + INTEGER(IntKi), PARAMETER :: M63N5MKye = 6800 + INTEGER(IntKi), PARAMETER :: M63N6MKye = 6801 + INTEGER(IntKi), PARAMETER :: M63N7MKye = 6802 + INTEGER(IntKi), PARAMETER :: M63N8MKye = 6803 + INTEGER(IntKi), PARAMETER :: M63N9MKye = 6804 + INTEGER(IntKi), PARAMETER :: M64N1MKye = 6805 + INTEGER(IntKi), PARAMETER :: M64N2MKye = 6806 + INTEGER(IntKi), PARAMETER :: M64N3MKye = 6807 + INTEGER(IntKi), PARAMETER :: M64N4MKye = 6808 + INTEGER(IntKi), PARAMETER :: M64N5MKye = 6809 + INTEGER(IntKi), PARAMETER :: M64N6MKye = 6810 + INTEGER(IntKi), PARAMETER :: M64N7MKye = 6811 + INTEGER(IntKi), PARAMETER :: M64N8MKye = 6812 + INTEGER(IntKi), PARAMETER :: M64N9MKye = 6813 + INTEGER(IntKi), PARAMETER :: M65N1MKye = 6814 + INTEGER(IntKi), PARAMETER :: M65N2MKye = 6815 + INTEGER(IntKi), PARAMETER :: M65N3MKye = 6816 + INTEGER(IntKi), PARAMETER :: M65N4MKye = 6817 + INTEGER(IntKi), PARAMETER :: M65N5MKye = 6818 + INTEGER(IntKi), PARAMETER :: M65N6MKye = 6819 + INTEGER(IntKi), PARAMETER :: M65N7MKye = 6820 + INTEGER(IntKi), PARAMETER :: M65N8MKye = 6821 + INTEGER(IntKi), PARAMETER :: M65N9MKye = 6822 + INTEGER(IntKi), PARAMETER :: M66N1MKye = 6823 + INTEGER(IntKi), PARAMETER :: M66N2MKye = 6824 + INTEGER(IntKi), PARAMETER :: M66N3MKye = 6825 + INTEGER(IntKi), PARAMETER :: M66N4MKye = 6826 + INTEGER(IntKi), PARAMETER :: M66N5MKye = 6827 + INTEGER(IntKi), PARAMETER :: M66N6MKye = 6828 + INTEGER(IntKi), PARAMETER :: M66N7MKye = 6829 + INTEGER(IntKi), PARAMETER :: M66N8MKye = 6830 + INTEGER(IntKi), PARAMETER :: M66N9MKye = 6831 + INTEGER(IntKi), PARAMETER :: M67N1MKye = 6832 + INTEGER(IntKi), PARAMETER :: M67N2MKye = 6833 + INTEGER(IntKi), PARAMETER :: M67N3MKye = 6834 + INTEGER(IntKi), PARAMETER :: M67N4MKye = 6835 + INTEGER(IntKi), PARAMETER :: M67N5MKye = 6836 + INTEGER(IntKi), PARAMETER :: M67N6MKye = 6837 + INTEGER(IntKi), PARAMETER :: M67N7MKye = 6838 + INTEGER(IntKi), PARAMETER :: M67N8MKye = 6839 + INTEGER(IntKi), PARAMETER :: M67N9MKye = 6840 + INTEGER(IntKi), PARAMETER :: M68N1MKye = 6841 + INTEGER(IntKi), PARAMETER :: M68N2MKye = 6842 + INTEGER(IntKi), PARAMETER :: M68N3MKye = 6843 + INTEGER(IntKi), PARAMETER :: M68N4MKye = 6844 + INTEGER(IntKi), PARAMETER :: M68N5MKye = 6845 + INTEGER(IntKi), PARAMETER :: M68N6MKye = 6846 + INTEGER(IntKi), PARAMETER :: M68N7MKye = 6847 + INTEGER(IntKi), PARAMETER :: M68N8MKye = 6848 + INTEGER(IntKi), PARAMETER :: M68N9MKye = 6849 + INTEGER(IntKi), PARAMETER :: M69N1MKye = 6850 + INTEGER(IntKi), PARAMETER :: M69N2MKye = 6851 + INTEGER(IntKi), PARAMETER :: M69N3MKye = 6852 + INTEGER(IntKi), PARAMETER :: M69N4MKye = 6853 + INTEGER(IntKi), PARAMETER :: M69N5MKye = 6854 + INTEGER(IntKi), PARAMETER :: M69N6MKye = 6855 + INTEGER(IntKi), PARAMETER :: M69N7MKye = 6856 + INTEGER(IntKi), PARAMETER :: M69N8MKye = 6857 + INTEGER(IntKi), PARAMETER :: M69N9MKye = 6858 + INTEGER(IntKi), PARAMETER :: M70N1MKye = 6859 + INTEGER(IntKi), PARAMETER :: M70N2MKye = 6860 + INTEGER(IntKi), PARAMETER :: M70N3MKye = 6861 + INTEGER(IntKi), PARAMETER :: M70N4MKye = 6862 + INTEGER(IntKi), PARAMETER :: M70N5MKye = 6863 + INTEGER(IntKi), PARAMETER :: M70N6MKye = 6864 + INTEGER(IntKi), PARAMETER :: M70N7MKye = 6865 + INTEGER(IntKi), PARAMETER :: M70N8MKye = 6866 + INTEGER(IntKi), PARAMETER :: M70N9MKye = 6867 + INTEGER(IntKi), PARAMETER :: M71N1MKye = 6868 + INTEGER(IntKi), PARAMETER :: M71N2MKye = 6869 + INTEGER(IntKi), PARAMETER :: M71N3MKye = 6870 + INTEGER(IntKi), PARAMETER :: M71N4MKye = 6871 + INTEGER(IntKi), PARAMETER :: M71N5MKye = 6872 + INTEGER(IntKi), PARAMETER :: M71N6MKye = 6873 + INTEGER(IntKi), PARAMETER :: M71N7MKye = 6874 + INTEGER(IntKi), PARAMETER :: M71N8MKye = 6875 + INTEGER(IntKi), PARAMETER :: M71N9MKye = 6876 + INTEGER(IntKi), PARAMETER :: M72N1MKye = 6877 + INTEGER(IntKi), PARAMETER :: M72N2MKye = 6878 + INTEGER(IntKi), PARAMETER :: M72N3MKye = 6879 + INTEGER(IntKi), PARAMETER :: M72N4MKye = 6880 + INTEGER(IntKi), PARAMETER :: M72N5MKye = 6881 + INTEGER(IntKi), PARAMETER :: M72N6MKye = 6882 + INTEGER(IntKi), PARAMETER :: M72N7MKye = 6883 + INTEGER(IntKi), PARAMETER :: M72N8MKye = 6884 + INTEGER(IntKi), PARAMETER :: M72N9MKye = 6885 + INTEGER(IntKi), PARAMETER :: M73N1MKye = 6886 + INTEGER(IntKi), PARAMETER :: M73N2MKye = 6887 + INTEGER(IntKi), PARAMETER :: M73N3MKye = 6888 + INTEGER(IntKi), PARAMETER :: M73N4MKye = 6889 + INTEGER(IntKi), PARAMETER :: M73N5MKye = 6890 + INTEGER(IntKi), PARAMETER :: M73N6MKye = 6891 + INTEGER(IntKi), PARAMETER :: M73N7MKye = 6892 + INTEGER(IntKi), PARAMETER :: M73N8MKye = 6893 + INTEGER(IntKi), PARAMETER :: M73N9MKye = 6894 + INTEGER(IntKi), PARAMETER :: M74N1MKye = 6895 + INTEGER(IntKi), PARAMETER :: M74N2MKye = 6896 + INTEGER(IntKi), PARAMETER :: M74N3MKye = 6897 + INTEGER(IntKi), PARAMETER :: M74N4MKye = 6898 + INTEGER(IntKi), PARAMETER :: M74N5MKye = 6899 + INTEGER(IntKi), PARAMETER :: M74N6MKye = 6900 + INTEGER(IntKi), PARAMETER :: M74N7MKye = 6901 + INTEGER(IntKi), PARAMETER :: M74N8MKye = 6902 + INTEGER(IntKi), PARAMETER :: M74N9MKye = 6903 + INTEGER(IntKi), PARAMETER :: M75N1MKye = 6904 + INTEGER(IntKi), PARAMETER :: M75N2MKye = 6905 + INTEGER(IntKi), PARAMETER :: M75N3MKye = 6906 + INTEGER(IntKi), PARAMETER :: M75N4MKye = 6907 + INTEGER(IntKi), PARAMETER :: M75N5MKye = 6908 + INTEGER(IntKi), PARAMETER :: M75N6MKye = 6909 + INTEGER(IntKi), PARAMETER :: M75N7MKye = 6910 + INTEGER(IntKi), PARAMETER :: M75N8MKye = 6911 + INTEGER(IntKi), PARAMETER :: M75N9MKye = 6912 + INTEGER(IntKi), PARAMETER :: M76N1MKye = 6913 + INTEGER(IntKi), PARAMETER :: M76N2MKye = 6914 + INTEGER(IntKi), PARAMETER :: M76N3MKye = 6915 + INTEGER(IntKi), PARAMETER :: M76N4MKye = 6916 + INTEGER(IntKi), PARAMETER :: M76N5MKye = 6917 + INTEGER(IntKi), PARAMETER :: M76N6MKye = 6918 + INTEGER(IntKi), PARAMETER :: M76N7MKye = 6919 + INTEGER(IntKi), PARAMETER :: M76N8MKye = 6920 + INTEGER(IntKi), PARAMETER :: M76N9MKye = 6921 + INTEGER(IntKi), PARAMETER :: M77N1MKye = 6922 + INTEGER(IntKi), PARAMETER :: M77N2MKye = 6923 + INTEGER(IntKi), PARAMETER :: M77N3MKye = 6924 + INTEGER(IntKi), PARAMETER :: M77N4MKye = 6925 + INTEGER(IntKi), PARAMETER :: M77N5MKye = 6926 + INTEGER(IntKi), PARAMETER :: M77N6MKye = 6927 + INTEGER(IntKi), PARAMETER :: M77N7MKye = 6928 + INTEGER(IntKi), PARAMETER :: M77N8MKye = 6929 + INTEGER(IntKi), PARAMETER :: M77N9MKye = 6930 + INTEGER(IntKi), PARAMETER :: M78N1MKye = 6931 + INTEGER(IntKi), PARAMETER :: M78N2MKye = 6932 + INTEGER(IntKi), PARAMETER :: M78N3MKye = 6933 + INTEGER(IntKi), PARAMETER :: M78N4MKye = 6934 + INTEGER(IntKi), PARAMETER :: M78N5MKye = 6935 + INTEGER(IntKi), PARAMETER :: M78N6MKye = 6936 + INTEGER(IntKi), PARAMETER :: M78N7MKye = 6937 + INTEGER(IntKi), PARAMETER :: M78N8MKye = 6938 + INTEGER(IntKi), PARAMETER :: M78N9MKye = 6939 + INTEGER(IntKi), PARAMETER :: M79N1MKye = 6940 + INTEGER(IntKi), PARAMETER :: M79N2MKye = 6941 + INTEGER(IntKi), PARAMETER :: M79N3MKye = 6942 + INTEGER(IntKi), PARAMETER :: M79N4MKye = 6943 + INTEGER(IntKi), PARAMETER :: M79N5MKye = 6944 + INTEGER(IntKi), PARAMETER :: M79N6MKye = 6945 + INTEGER(IntKi), PARAMETER :: M79N7MKye = 6946 + INTEGER(IntKi), PARAMETER :: M79N8MKye = 6947 + INTEGER(IntKi), PARAMETER :: M79N9MKye = 6948 + INTEGER(IntKi), PARAMETER :: M80N1MKye = 6949 + INTEGER(IntKi), PARAMETER :: M80N2MKye = 6950 + INTEGER(IntKi), PARAMETER :: M80N3MKye = 6951 + INTEGER(IntKi), PARAMETER :: M80N4MKye = 6952 + INTEGER(IntKi), PARAMETER :: M80N5MKye = 6953 + INTEGER(IntKi), PARAMETER :: M80N6MKye = 6954 + INTEGER(IntKi), PARAMETER :: M80N7MKye = 6955 + INTEGER(IntKi), PARAMETER :: M80N8MKye = 6956 + INTEGER(IntKi), PARAMETER :: M80N9MKye = 6957 + INTEGER(IntKi), PARAMETER :: M81N1MKye = 6958 + INTEGER(IntKi), PARAMETER :: M81N2MKye = 6959 + INTEGER(IntKi), PARAMETER :: M81N3MKye = 6960 + INTEGER(IntKi), PARAMETER :: M81N4MKye = 6961 + INTEGER(IntKi), PARAMETER :: M81N5MKye = 6962 + INTEGER(IntKi), PARAMETER :: M81N6MKye = 6963 + INTEGER(IntKi), PARAMETER :: M81N7MKye = 6964 + INTEGER(IntKi), PARAMETER :: M81N8MKye = 6965 + INTEGER(IntKi), PARAMETER :: M81N9MKye = 6966 + INTEGER(IntKi), PARAMETER :: M82N1MKye = 6967 + INTEGER(IntKi), PARAMETER :: M82N2MKye = 6968 + INTEGER(IntKi), PARAMETER :: M82N3MKye = 6969 + INTEGER(IntKi), PARAMETER :: M82N4MKye = 6970 + INTEGER(IntKi), PARAMETER :: M82N5MKye = 6971 + INTEGER(IntKi), PARAMETER :: M82N6MKye = 6972 + INTEGER(IntKi), PARAMETER :: M82N7MKye = 6973 + INTEGER(IntKi), PARAMETER :: M82N8MKye = 6974 + INTEGER(IntKi), PARAMETER :: M82N9MKye = 6975 + INTEGER(IntKi), PARAMETER :: M83N1MKye = 6976 + INTEGER(IntKi), PARAMETER :: M83N2MKye = 6977 + INTEGER(IntKi), PARAMETER :: M83N3MKye = 6978 + INTEGER(IntKi), PARAMETER :: M83N4MKye = 6979 + INTEGER(IntKi), PARAMETER :: M83N5MKye = 6980 + INTEGER(IntKi), PARAMETER :: M83N6MKye = 6981 + INTEGER(IntKi), PARAMETER :: M83N7MKye = 6982 + INTEGER(IntKi), PARAMETER :: M83N8MKye = 6983 + INTEGER(IntKi), PARAMETER :: M83N9MKye = 6984 + INTEGER(IntKi), PARAMETER :: M84N1MKye = 6985 + INTEGER(IntKi), PARAMETER :: M84N2MKye = 6986 + INTEGER(IntKi), PARAMETER :: M84N3MKye = 6987 + INTEGER(IntKi), PARAMETER :: M84N4MKye = 6988 + INTEGER(IntKi), PARAMETER :: M84N5MKye = 6989 + INTEGER(IntKi), PARAMETER :: M84N6MKye = 6990 + INTEGER(IntKi), PARAMETER :: M84N7MKye = 6991 + INTEGER(IntKi), PARAMETER :: M84N8MKye = 6992 + INTEGER(IntKi), PARAMETER :: M84N9MKye = 6993 + INTEGER(IntKi), PARAMETER :: M85N1MKye = 6994 + INTEGER(IntKi), PARAMETER :: M85N2MKye = 6995 + INTEGER(IntKi), PARAMETER :: M85N3MKye = 6996 + INTEGER(IntKi), PARAMETER :: M85N4MKye = 6997 + INTEGER(IntKi), PARAMETER :: M85N5MKye = 6998 + INTEGER(IntKi), PARAMETER :: M85N6MKye = 6999 + INTEGER(IntKi), PARAMETER :: M85N7MKye = 7000 + INTEGER(IntKi), PARAMETER :: M85N8MKye = 7001 + INTEGER(IntKi), PARAMETER :: M85N9MKye = 7002 + INTEGER(IntKi), PARAMETER :: M86N1MKye = 7003 + INTEGER(IntKi), PARAMETER :: M86N2MKye = 7004 + INTEGER(IntKi), PARAMETER :: M86N3MKye = 7005 + INTEGER(IntKi), PARAMETER :: M86N4MKye = 7006 + INTEGER(IntKi), PARAMETER :: M86N5MKye = 7007 + INTEGER(IntKi), PARAMETER :: M86N6MKye = 7008 + INTEGER(IntKi), PARAMETER :: M86N7MKye = 7009 + INTEGER(IntKi), PARAMETER :: M86N8MKye = 7010 + INTEGER(IntKi), PARAMETER :: M86N9MKye = 7011 + INTEGER(IntKi), PARAMETER :: M87N1MKye = 7012 + INTEGER(IntKi), PARAMETER :: M87N2MKye = 7013 + INTEGER(IntKi), PARAMETER :: M87N3MKye = 7014 + INTEGER(IntKi), PARAMETER :: M87N4MKye = 7015 + INTEGER(IntKi), PARAMETER :: M87N5MKye = 7016 + INTEGER(IntKi), PARAMETER :: M87N6MKye = 7017 + INTEGER(IntKi), PARAMETER :: M87N7MKye = 7018 + INTEGER(IntKi), PARAMETER :: M87N8MKye = 7019 + INTEGER(IntKi), PARAMETER :: M87N9MKye = 7020 + INTEGER(IntKi), PARAMETER :: M88N1MKye = 7021 + INTEGER(IntKi), PARAMETER :: M88N2MKye = 7022 + INTEGER(IntKi), PARAMETER :: M88N3MKye = 7023 + INTEGER(IntKi), PARAMETER :: M88N4MKye = 7024 + INTEGER(IntKi), PARAMETER :: M88N5MKye = 7025 + INTEGER(IntKi), PARAMETER :: M88N6MKye = 7026 + INTEGER(IntKi), PARAMETER :: M88N7MKye = 7027 + INTEGER(IntKi), PARAMETER :: M88N8MKye = 7028 + INTEGER(IntKi), PARAMETER :: M88N9MKye = 7029 + INTEGER(IntKi), PARAMETER :: M89N1MKye = 7030 + INTEGER(IntKi), PARAMETER :: M89N2MKye = 7031 + INTEGER(IntKi), PARAMETER :: M89N3MKye = 7032 + INTEGER(IntKi), PARAMETER :: M89N4MKye = 7033 + INTEGER(IntKi), PARAMETER :: M89N5MKye = 7034 + INTEGER(IntKi), PARAMETER :: M89N6MKye = 7035 + INTEGER(IntKi), PARAMETER :: M89N7MKye = 7036 + INTEGER(IntKi), PARAMETER :: M89N8MKye = 7037 + INTEGER(IntKi), PARAMETER :: M89N9MKye = 7038 + INTEGER(IntKi), PARAMETER :: M90N1MKye = 7039 + INTEGER(IntKi), PARAMETER :: M90N2MKye = 7040 + INTEGER(IntKi), PARAMETER :: M90N3MKye = 7041 + INTEGER(IntKi), PARAMETER :: M90N4MKye = 7042 + INTEGER(IntKi), PARAMETER :: M90N5MKye = 7043 + INTEGER(IntKi), PARAMETER :: M90N6MKye = 7044 + INTEGER(IntKi), PARAMETER :: M90N7MKye = 7045 + INTEGER(IntKi), PARAMETER :: M90N8MKye = 7046 + INTEGER(IntKi), PARAMETER :: M90N9MKye = 7047 + INTEGER(IntKi), PARAMETER :: M91N1MKye = 7048 + INTEGER(IntKi), PARAMETER :: M91N2MKye = 7049 + INTEGER(IntKi), PARAMETER :: M91N3MKye = 7050 + INTEGER(IntKi), PARAMETER :: M91N4MKye = 7051 + INTEGER(IntKi), PARAMETER :: M91N5MKye = 7052 + INTEGER(IntKi), PARAMETER :: M91N6MKye = 7053 + INTEGER(IntKi), PARAMETER :: M91N7MKye = 7054 + INTEGER(IntKi), PARAMETER :: M91N8MKye = 7055 + INTEGER(IntKi), PARAMETER :: M91N9MKye = 7056 + INTEGER(IntKi), PARAMETER :: M92N1MKye = 7057 + INTEGER(IntKi), PARAMETER :: M92N2MKye = 7058 + INTEGER(IntKi), PARAMETER :: M92N3MKye = 7059 + INTEGER(IntKi), PARAMETER :: M92N4MKye = 7060 + INTEGER(IntKi), PARAMETER :: M92N5MKye = 7061 + INTEGER(IntKi), PARAMETER :: M92N6MKye = 7062 + INTEGER(IntKi), PARAMETER :: M92N7MKye = 7063 + INTEGER(IntKi), PARAMETER :: M92N8MKye = 7064 + INTEGER(IntKi), PARAMETER :: M92N9MKye = 7065 + INTEGER(IntKi), PARAMETER :: M93N1MKye = 7066 + INTEGER(IntKi), PARAMETER :: M93N2MKye = 7067 + INTEGER(IntKi), PARAMETER :: M93N3MKye = 7068 + INTEGER(IntKi), PARAMETER :: M93N4MKye = 7069 + INTEGER(IntKi), PARAMETER :: M93N5MKye = 7070 + INTEGER(IntKi), PARAMETER :: M93N6MKye = 7071 + INTEGER(IntKi), PARAMETER :: M93N7MKye = 7072 + INTEGER(IntKi), PARAMETER :: M93N8MKye = 7073 + INTEGER(IntKi), PARAMETER :: M93N9MKye = 7074 + INTEGER(IntKi), PARAMETER :: M94N1MKye = 7075 + INTEGER(IntKi), PARAMETER :: M94N2MKye = 7076 + INTEGER(IntKi), PARAMETER :: M94N3MKye = 7077 + INTEGER(IntKi), PARAMETER :: M94N4MKye = 7078 + INTEGER(IntKi), PARAMETER :: M94N5MKye = 7079 + INTEGER(IntKi), PARAMETER :: M94N6MKye = 7080 + INTEGER(IntKi), PARAMETER :: M94N7MKye = 7081 + INTEGER(IntKi), PARAMETER :: M94N8MKye = 7082 + INTEGER(IntKi), PARAMETER :: M94N9MKye = 7083 + INTEGER(IntKi), PARAMETER :: M95N1MKye = 7084 + INTEGER(IntKi), PARAMETER :: M95N2MKye = 7085 + INTEGER(IntKi), PARAMETER :: M95N3MKye = 7086 + INTEGER(IntKi), PARAMETER :: M95N4MKye = 7087 + INTEGER(IntKi), PARAMETER :: M95N5MKye = 7088 + INTEGER(IntKi), PARAMETER :: M95N6MKye = 7089 + INTEGER(IntKi), PARAMETER :: M95N7MKye = 7090 + INTEGER(IntKi), PARAMETER :: M95N8MKye = 7091 + INTEGER(IntKi), PARAMETER :: M95N9MKye = 7092 + INTEGER(IntKi), PARAMETER :: M96N1MKye = 7093 + INTEGER(IntKi), PARAMETER :: M96N2MKye = 7094 + INTEGER(IntKi), PARAMETER :: M96N3MKye = 7095 + INTEGER(IntKi), PARAMETER :: M96N4MKye = 7096 + INTEGER(IntKi), PARAMETER :: M96N5MKye = 7097 + INTEGER(IntKi), PARAMETER :: M96N6MKye = 7098 + INTEGER(IntKi), PARAMETER :: M96N7MKye = 7099 + INTEGER(IntKi), PARAMETER :: M96N8MKye = 7100 + INTEGER(IntKi), PARAMETER :: M96N9MKye = 7101 + INTEGER(IntKi), PARAMETER :: M97N1MKye = 7102 + INTEGER(IntKi), PARAMETER :: M97N2MKye = 7103 + INTEGER(IntKi), PARAMETER :: M97N3MKye = 7104 + INTEGER(IntKi), PARAMETER :: M97N4MKye = 7105 + INTEGER(IntKi), PARAMETER :: M97N5MKye = 7106 + INTEGER(IntKi), PARAMETER :: M97N6MKye = 7107 + INTEGER(IntKi), PARAMETER :: M97N7MKye = 7108 + INTEGER(IntKi), PARAMETER :: M97N8MKye = 7109 + INTEGER(IntKi), PARAMETER :: M97N9MKye = 7110 + INTEGER(IntKi), PARAMETER :: M98N1MKye = 7111 + INTEGER(IntKi), PARAMETER :: M98N2MKye = 7112 + INTEGER(IntKi), PARAMETER :: M98N3MKye = 7113 + INTEGER(IntKi), PARAMETER :: M98N4MKye = 7114 + INTEGER(IntKi), PARAMETER :: M98N5MKye = 7115 + INTEGER(IntKi), PARAMETER :: M98N6MKye = 7116 + INTEGER(IntKi), PARAMETER :: M98N7MKye = 7117 + INTEGER(IntKi), PARAMETER :: M98N8MKye = 7118 + INTEGER(IntKi), PARAMETER :: M98N9MKye = 7119 + INTEGER(IntKi), PARAMETER :: M99N1MKye = 7120 + INTEGER(IntKi), PARAMETER :: M99N2MKye = 7121 + INTEGER(IntKi), PARAMETER :: M99N3MKye = 7122 + INTEGER(IntKi), PARAMETER :: M99N4MKye = 7123 + INTEGER(IntKi), PARAMETER :: M99N5MKye = 7124 + INTEGER(IntKi), PARAMETER :: M99N6MKye = 7125 + INTEGER(IntKi), PARAMETER :: M99N7MKye = 7126 + INTEGER(IntKi), PARAMETER :: M99N8MKye = 7127 + INTEGER(IntKi), PARAMETER :: M99N9MKye = 7128 + INTEGER(IntKi), PARAMETER :: M01N1MKze = 7129 + INTEGER(IntKi), PARAMETER :: M01N2MKze = 7130 + INTEGER(IntKi), PARAMETER :: M01N3MKze = 7131 + INTEGER(IntKi), PARAMETER :: M01N4MKze = 7132 + INTEGER(IntKi), PARAMETER :: M01N5MKze = 7133 + INTEGER(IntKi), PARAMETER :: M01N6MKze = 7134 + INTEGER(IntKi), PARAMETER :: M01N7MKze = 7135 + INTEGER(IntKi), PARAMETER :: M01N8MKze = 7136 + INTEGER(IntKi), PARAMETER :: M01N9MKze = 7137 + INTEGER(IntKi), PARAMETER :: M02N1MKze = 7138 + INTEGER(IntKi), PARAMETER :: M02N2MKze = 7139 + INTEGER(IntKi), PARAMETER :: M02N3MKze = 7140 + INTEGER(IntKi), PARAMETER :: M02N4MKze = 7141 + INTEGER(IntKi), PARAMETER :: M02N5MKze = 7142 + INTEGER(IntKi), PARAMETER :: M02N6MKze = 7143 + INTEGER(IntKi), PARAMETER :: M02N7MKze = 7144 + INTEGER(IntKi), PARAMETER :: M02N8MKze = 7145 + INTEGER(IntKi), PARAMETER :: M02N9MKze = 7146 + INTEGER(IntKi), PARAMETER :: M03N1MKze = 7147 + INTEGER(IntKi), PARAMETER :: M03N2MKze = 7148 + INTEGER(IntKi), PARAMETER :: M03N3MKze = 7149 + INTEGER(IntKi), PARAMETER :: M03N4MKze = 7150 + INTEGER(IntKi), PARAMETER :: M03N5MKze = 7151 + INTEGER(IntKi), PARAMETER :: M03N6MKze = 7152 + INTEGER(IntKi), PARAMETER :: M03N7MKze = 7153 + INTEGER(IntKi), PARAMETER :: M03N8MKze = 7154 + INTEGER(IntKi), PARAMETER :: M03N9MKze = 7155 + INTEGER(IntKi), PARAMETER :: M04N1MKze = 7156 + INTEGER(IntKi), PARAMETER :: M04N2MKze = 7157 + INTEGER(IntKi), PARAMETER :: M04N3MKze = 7158 + INTEGER(IntKi), PARAMETER :: M04N4MKze = 7159 + INTEGER(IntKi), PARAMETER :: M04N5MKze = 7160 + INTEGER(IntKi), PARAMETER :: M04N6MKze = 7161 + INTEGER(IntKi), PARAMETER :: M04N7MKze = 7162 + INTEGER(IntKi), PARAMETER :: M04N8MKze = 7163 + INTEGER(IntKi), PARAMETER :: M04N9MKze = 7164 + INTEGER(IntKi), PARAMETER :: M05N1MKze = 7165 + INTEGER(IntKi), PARAMETER :: M05N2MKze = 7166 + INTEGER(IntKi), PARAMETER :: M05N3MKze = 7167 + INTEGER(IntKi), PARAMETER :: M05N4MKze = 7168 + INTEGER(IntKi), PARAMETER :: M05N5MKze = 7169 + INTEGER(IntKi), PARAMETER :: M05N6MKze = 7170 + INTEGER(IntKi), PARAMETER :: M05N7MKze = 7171 + INTEGER(IntKi), PARAMETER :: M05N8MKze = 7172 + INTEGER(IntKi), PARAMETER :: M05N9MKze = 7173 + INTEGER(IntKi), PARAMETER :: M06N1MKze = 7174 + INTEGER(IntKi), PARAMETER :: M06N2MKze = 7175 + INTEGER(IntKi), PARAMETER :: M06N3MKze = 7176 + INTEGER(IntKi), PARAMETER :: M06N4MKze = 7177 + INTEGER(IntKi), PARAMETER :: M06N5MKze = 7178 + INTEGER(IntKi), PARAMETER :: M06N6MKze = 7179 + INTEGER(IntKi), PARAMETER :: M06N7MKze = 7180 + INTEGER(IntKi), PARAMETER :: M06N8MKze = 7181 + INTEGER(IntKi), PARAMETER :: M06N9MKze = 7182 + INTEGER(IntKi), PARAMETER :: M07N1MKze = 7183 + INTEGER(IntKi), PARAMETER :: M07N2MKze = 7184 + INTEGER(IntKi), PARAMETER :: M07N3MKze = 7185 + INTEGER(IntKi), PARAMETER :: M07N4MKze = 7186 + INTEGER(IntKi), PARAMETER :: M07N5MKze = 7187 + INTEGER(IntKi), PARAMETER :: M07N6MKze = 7188 + INTEGER(IntKi), PARAMETER :: M07N7MKze = 7189 + INTEGER(IntKi), PARAMETER :: M07N8MKze = 7190 + INTEGER(IntKi), PARAMETER :: M07N9MKze = 7191 + INTEGER(IntKi), PARAMETER :: M08N1MKze = 7192 + INTEGER(IntKi), PARAMETER :: M08N2MKze = 7193 + INTEGER(IntKi), PARAMETER :: M08N3MKze = 7194 + INTEGER(IntKi), PARAMETER :: M08N4MKze = 7195 + INTEGER(IntKi), PARAMETER :: M08N5MKze = 7196 + INTEGER(IntKi), PARAMETER :: M08N6MKze = 7197 + INTEGER(IntKi), PARAMETER :: M08N7MKze = 7198 + INTEGER(IntKi), PARAMETER :: M08N8MKze = 7199 + INTEGER(IntKi), PARAMETER :: M08N9MKze = 7200 + INTEGER(IntKi), PARAMETER :: M09N1MKze = 7201 + INTEGER(IntKi), PARAMETER :: M09N2MKze = 7202 + INTEGER(IntKi), PARAMETER :: M09N3MKze = 7203 + INTEGER(IntKi), PARAMETER :: M09N4MKze = 7204 + INTEGER(IntKi), PARAMETER :: M09N5MKze = 7205 + INTEGER(IntKi), PARAMETER :: M09N6MKze = 7206 + INTEGER(IntKi), PARAMETER :: M09N7MKze = 7207 + INTEGER(IntKi), PARAMETER :: M09N8MKze = 7208 + INTEGER(IntKi), PARAMETER :: M09N9MKze = 7209 + INTEGER(IntKi), PARAMETER :: M10N1MKze = 7210 + INTEGER(IntKi), PARAMETER :: M10N2MKze = 7211 + INTEGER(IntKi), PARAMETER :: M10N3MKze = 7212 + INTEGER(IntKi), PARAMETER :: M10N4MKze = 7213 + INTEGER(IntKi), PARAMETER :: M10N5MKze = 7214 + INTEGER(IntKi), PARAMETER :: M10N6MKze = 7215 + INTEGER(IntKi), PARAMETER :: M10N7MKze = 7216 + INTEGER(IntKi), PARAMETER :: M10N8MKze = 7217 + INTEGER(IntKi), PARAMETER :: M10N9MKze = 7218 + INTEGER(IntKi), PARAMETER :: M11N1MKze = 7219 + INTEGER(IntKi), PARAMETER :: M11N2MKze = 7220 + INTEGER(IntKi), PARAMETER :: M11N3MKze = 7221 + INTEGER(IntKi), PARAMETER :: M11N4MKze = 7222 + INTEGER(IntKi), PARAMETER :: M11N5MKze = 7223 + INTEGER(IntKi), PARAMETER :: M11N6MKze = 7224 + INTEGER(IntKi), PARAMETER :: M11N7MKze = 7225 + INTEGER(IntKi), PARAMETER :: M11N8MKze = 7226 + INTEGER(IntKi), PARAMETER :: M11N9MKze = 7227 + INTEGER(IntKi), PARAMETER :: M12N1MKze = 7228 + INTEGER(IntKi), PARAMETER :: M12N2MKze = 7229 + INTEGER(IntKi), PARAMETER :: M12N3MKze = 7230 + INTEGER(IntKi), PARAMETER :: M12N4MKze = 7231 + INTEGER(IntKi), PARAMETER :: M12N5MKze = 7232 + INTEGER(IntKi), PARAMETER :: M12N6MKze = 7233 + INTEGER(IntKi), PARAMETER :: M12N7MKze = 7234 + INTEGER(IntKi), PARAMETER :: M12N8MKze = 7235 + INTEGER(IntKi), PARAMETER :: M12N9MKze = 7236 + INTEGER(IntKi), PARAMETER :: M13N1MKze = 7237 + INTEGER(IntKi), PARAMETER :: M13N2MKze = 7238 + INTEGER(IntKi), PARAMETER :: M13N3MKze = 7239 + INTEGER(IntKi), PARAMETER :: M13N4MKze = 7240 + INTEGER(IntKi), PARAMETER :: M13N5MKze = 7241 + INTEGER(IntKi), PARAMETER :: M13N6MKze = 7242 + INTEGER(IntKi), PARAMETER :: M13N7MKze = 7243 + INTEGER(IntKi), PARAMETER :: M13N8MKze = 7244 + INTEGER(IntKi), PARAMETER :: M13N9MKze = 7245 + INTEGER(IntKi), PARAMETER :: M14N1MKze = 7246 + INTEGER(IntKi), PARAMETER :: M14N2MKze = 7247 + INTEGER(IntKi), PARAMETER :: M14N3MKze = 7248 + INTEGER(IntKi), PARAMETER :: M14N4MKze = 7249 + INTEGER(IntKi), PARAMETER :: M14N5MKze = 7250 + INTEGER(IntKi), PARAMETER :: M14N6MKze = 7251 + INTEGER(IntKi), PARAMETER :: M14N7MKze = 7252 + INTEGER(IntKi), PARAMETER :: M14N8MKze = 7253 + INTEGER(IntKi), PARAMETER :: M14N9MKze = 7254 + INTEGER(IntKi), PARAMETER :: M15N1MKze = 7255 + INTEGER(IntKi), PARAMETER :: M15N2MKze = 7256 + INTEGER(IntKi), PARAMETER :: M15N3MKze = 7257 + INTEGER(IntKi), PARAMETER :: M15N4MKze = 7258 + INTEGER(IntKi), PARAMETER :: M15N5MKze = 7259 + INTEGER(IntKi), PARAMETER :: M15N6MKze = 7260 + INTEGER(IntKi), PARAMETER :: M15N7MKze = 7261 + INTEGER(IntKi), PARAMETER :: M15N8MKze = 7262 + INTEGER(IntKi), PARAMETER :: M15N9MKze = 7263 + INTEGER(IntKi), PARAMETER :: M16N1MKze = 7264 + INTEGER(IntKi), PARAMETER :: M16N2MKze = 7265 + INTEGER(IntKi), PARAMETER :: M16N3MKze = 7266 + INTEGER(IntKi), PARAMETER :: M16N4MKze = 7267 + INTEGER(IntKi), PARAMETER :: M16N5MKze = 7268 + INTEGER(IntKi), PARAMETER :: M16N6MKze = 7269 + INTEGER(IntKi), PARAMETER :: M16N7MKze = 7270 + INTEGER(IntKi), PARAMETER :: M16N8MKze = 7271 + INTEGER(IntKi), PARAMETER :: M16N9MKze = 7272 + INTEGER(IntKi), PARAMETER :: M17N1MKze = 7273 + INTEGER(IntKi), PARAMETER :: M17N2MKze = 7274 + INTEGER(IntKi), PARAMETER :: M17N3MKze = 7275 + INTEGER(IntKi), PARAMETER :: M17N4MKze = 7276 + INTEGER(IntKi), PARAMETER :: M17N5MKze = 7277 + INTEGER(IntKi), PARAMETER :: M17N6MKze = 7278 + INTEGER(IntKi), PARAMETER :: M17N7MKze = 7279 + INTEGER(IntKi), PARAMETER :: M17N8MKze = 7280 + INTEGER(IntKi), PARAMETER :: M17N9MKze = 7281 + INTEGER(IntKi), PARAMETER :: M18N1MKze = 7282 + INTEGER(IntKi), PARAMETER :: M18N2MKze = 7283 + INTEGER(IntKi), PARAMETER :: M18N3MKze = 7284 + INTEGER(IntKi), PARAMETER :: M18N4MKze = 7285 + INTEGER(IntKi), PARAMETER :: M18N5MKze = 7286 + INTEGER(IntKi), PARAMETER :: M18N6MKze = 7287 + INTEGER(IntKi), PARAMETER :: M18N7MKze = 7288 + INTEGER(IntKi), PARAMETER :: M18N8MKze = 7289 + INTEGER(IntKi), PARAMETER :: M18N9MKze = 7290 + INTEGER(IntKi), PARAMETER :: M19N1MKze = 7291 + INTEGER(IntKi), PARAMETER :: M19N2MKze = 7292 + INTEGER(IntKi), PARAMETER :: M19N3MKze = 7293 + INTEGER(IntKi), PARAMETER :: M19N4MKze = 7294 + INTEGER(IntKi), PARAMETER :: M19N5MKze = 7295 + INTEGER(IntKi), PARAMETER :: M19N6MKze = 7296 + INTEGER(IntKi), PARAMETER :: M19N7MKze = 7297 + INTEGER(IntKi), PARAMETER :: M19N8MKze = 7298 + INTEGER(IntKi), PARAMETER :: M19N9MKze = 7299 + INTEGER(IntKi), PARAMETER :: M20N1MKze = 7300 + INTEGER(IntKi), PARAMETER :: M20N2MKze = 7301 + INTEGER(IntKi), PARAMETER :: M20N3MKze = 7302 + INTEGER(IntKi), PARAMETER :: M20N4MKze = 7303 + INTEGER(IntKi), PARAMETER :: M20N5MKze = 7304 + INTEGER(IntKi), PARAMETER :: M20N6MKze = 7305 + INTEGER(IntKi), PARAMETER :: M20N7MKze = 7306 + INTEGER(IntKi), PARAMETER :: M20N8MKze = 7307 + INTEGER(IntKi), PARAMETER :: M20N9MKze = 7308 + INTEGER(IntKi), PARAMETER :: M21N1MKze = 7309 + INTEGER(IntKi), PARAMETER :: M21N2MKze = 7310 + INTEGER(IntKi), PARAMETER :: M21N3MKze = 7311 + INTEGER(IntKi), PARAMETER :: M21N4MKze = 7312 + INTEGER(IntKi), PARAMETER :: M21N5MKze = 7313 + INTEGER(IntKi), PARAMETER :: M21N6MKze = 7314 + INTEGER(IntKi), PARAMETER :: M21N7MKze = 7315 + INTEGER(IntKi), PARAMETER :: M21N8MKze = 7316 + INTEGER(IntKi), PARAMETER :: M21N9MKze = 7317 + INTEGER(IntKi), PARAMETER :: M22N1MKze = 7318 + INTEGER(IntKi), PARAMETER :: M22N2MKze = 7319 + INTEGER(IntKi), PARAMETER :: M22N3MKze = 7320 + INTEGER(IntKi), PARAMETER :: M22N4MKze = 7321 + INTEGER(IntKi), PARAMETER :: M22N5MKze = 7322 + INTEGER(IntKi), PARAMETER :: M22N6MKze = 7323 + INTEGER(IntKi), PARAMETER :: M22N7MKze = 7324 + INTEGER(IntKi), PARAMETER :: M22N8MKze = 7325 + INTEGER(IntKi), PARAMETER :: M22N9MKze = 7326 + INTEGER(IntKi), PARAMETER :: M23N1MKze = 7327 + INTEGER(IntKi), PARAMETER :: M23N2MKze = 7328 + INTEGER(IntKi), PARAMETER :: M23N3MKze = 7329 + INTEGER(IntKi), PARAMETER :: M23N4MKze = 7330 + INTEGER(IntKi), PARAMETER :: M23N5MKze = 7331 + INTEGER(IntKi), PARAMETER :: M23N6MKze = 7332 + INTEGER(IntKi), PARAMETER :: M23N7MKze = 7333 + INTEGER(IntKi), PARAMETER :: M23N8MKze = 7334 + INTEGER(IntKi), PARAMETER :: M23N9MKze = 7335 + INTEGER(IntKi), PARAMETER :: M24N1MKze = 7336 + INTEGER(IntKi), PARAMETER :: M24N2MKze = 7337 + INTEGER(IntKi), PARAMETER :: M24N3MKze = 7338 + INTEGER(IntKi), PARAMETER :: M24N4MKze = 7339 + INTEGER(IntKi), PARAMETER :: M24N5MKze = 7340 + INTEGER(IntKi), PARAMETER :: M24N6MKze = 7341 + INTEGER(IntKi), PARAMETER :: M24N7MKze = 7342 + INTEGER(IntKi), PARAMETER :: M24N8MKze = 7343 + INTEGER(IntKi), PARAMETER :: M24N9MKze = 7344 + INTEGER(IntKi), PARAMETER :: M25N1MKze = 7345 + INTEGER(IntKi), PARAMETER :: M25N2MKze = 7346 + INTEGER(IntKi), PARAMETER :: M25N3MKze = 7347 + INTEGER(IntKi), PARAMETER :: M25N4MKze = 7348 + INTEGER(IntKi), PARAMETER :: M25N5MKze = 7349 + INTEGER(IntKi), PARAMETER :: M25N6MKze = 7350 + INTEGER(IntKi), PARAMETER :: M25N7MKze = 7351 + INTEGER(IntKi), PARAMETER :: M25N8MKze = 7352 + INTEGER(IntKi), PARAMETER :: M25N9MKze = 7353 + INTEGER(IntKi), PARAMETER :: M26N1MKze = 7354 + INTEGER(IntKi), PARAMETER :: M26N2MKze = 7355 + INTEGER(IntKi), PARAMETER :: M26N3MKze = 7356 + INTEGER(IntKi), PARAMETER :: M26N4MKze = 7357 + INTEGER(IntKi), PARAMETER :: M26N5MKze = 7358 + INTEGER(IntKi), PARAMETER :: M26N6MKze = 7359 + INTEGER(IntKi), PARAMETER :: M26N7MKze = 7360 + INTEGER(IntKi), PARAMETER :: M26N8MKze = 7361 + INTEGER(IntKi), PARAMETER :: M26N9MKze = 7362 + INTEGER(IntKi), PARAMETER :: M27N1MKze = 7363 + INTEGER(IntKi), PARAMETER :: M27N2MKze = 7364 + INTEGER(IntKi), PARAMETER :: M27N3MKze = 7365 + INTEGER(IntKi), PARAMETER :: M27N4MKze = 7366 + INTEGER(IntKi), PARAMETER :: M27N5MKze = 7367 + INTEGER(IntKi), PARAMETER :: M27N6MKze = 7368 + INTEGER(IntKi), PARAMETER :: M27N7MKze = 7369 + INTEGER(IntKi), PARAMETER :: M27N8MKze = 7370 + INTEGER(IntKi), PARAMETER :: M27N9MKze = 7371 + INTEGER(IntKi), PARAMETER :: M28N1MKze = 7372 + INTEGER(IntKi), PARAMETER :: M28N2MKze = 7373 + INTEGER(IntKi), PARAMETER :: M28N3MKze = 7374 + INTEGER(IntKi), PARAMETER :: M28N4MKze = 7375 + INTEGER(IntKi), PARAMETER :: M28N5MKze = 7376 + INTEGER(IntKi), PARAMETER :: M28N6MKze = 7377 + INTEGER(IntKi), PARAMETER :: M28N7MKze = 7378 + INTEGER(IntKi), PARAMETER :: M28N8MKze = 7379 + INTEGER(IntKi), PARAMETER :: M28N9MKze = 7380 + INTEGER(IntKi), PARAMETER :: M29N1MKze = 7381 + INTEGER(IntKi), PARAMETER :: M29N2MKze = 7382 + INTEGER(IntKi), PARAMETER :: M29N3MKze = 7383 + INTEGER(IntKi), PARAMETER :: M29N4MKze = 7384 + INTEGER(IntKi), PARAMETER :: M29N5MKze = 7385 + INTEGER(IntKi), PARAMETER :: M29N6MKze = 7386 + INTEGER(IntKi), PARAMETER :: M29N7MKze = 7387 + INTEGER(IntKi), PARAMETER :: M29N8MKze = 7388 + INTEGER(IntKi), PARAMETER :: M29N9MKze = 7389 + INTEGER(IntKi), PARAMETER :: M30N1MKze = 7390 + INTEGER(IntKi), PARAMETER :: M30N2MKze = 7391 + INTEGER(IntKi), PARAMETER :: M30N3MKze = 7392 + INTEGER(IntKi), PARAMETER :: M30N4MKze = 7393 + INTEGER(IntKi), PARAMETER :: M30N5MKze = 7394 + INTEGER(IntKi), PARAMETER :: M30N6MKze = 7395 + INTEGER(IntKi), PARAMETER :: M30N7MKze = 7396 + INTEGER(IntKi), PARAMETER :: M30N8MKze = 7397 + INTEGER(IntKi), PARAMETER :: M30N9MKze = 7398 + INTEGER(IntKi), PARAMETER :: M31N1MKze = 7399 + INTEGER(IntKi), PARAMETER :: M31N2MKze = 7400 + INTEGER(IntKi), PARAMETER :: M31N3MKze = 7401 + INTEGER(IntKi), PARAMETER :: M31N4MKze = 7402 + INTEGER(IntKi), PARAMETER :: M31N5MKze = 7403 + INTEGER(IntKi), PARAMETER :: M31N6MKze = 7404 + INTEGER(IntKi), PARAMETER :: M31N7MKze = 7405 + INTEGER(IntKi), PARAMETER :: M31N8MKze = 7406 + INTEGER(IntKi), PARAMETER :: M31N9MKze = 7407 + INTEGER(IntKi), PARAMETER :: M32N1MKze = 7408 + INTEGER(IntKi), PARAMETER :: M32N2MKze = 7409 + INTEGER(IntKi), PARAMETER :: M32N3MKze = 7410 + INTEGER(IntKi), PARAMETER :: M32N4MKze = 7411 + INTEGER(IntKi), PARAMETER :: M32N5MKze = 7412 + INTEGER(IntKi), PARAMETER :: M32N6MKze = 7413 + INTEGER(IntKi), PARAMETER :: M32N7MKze = 7414 + INTEGER(IntKi), PARAMETER :: M32N8MKze = 7415 + INTEGER(IntKi), PARAMETER :: M32N9MKze = 7416 + INTEGER(IntKi), PARAMETER :: M33N1MKze = 7417 + INTEGER(IntKi), PARAMETER :: M33N2MKze = 7418 + INTEGER(IntKi), PARAMETER :: M33N3MKze = 7419 + INTEGER(IntKi), PARAMETER :: M33N4MKze = 7420 + INTEGER(IntKi), PARAMETER :: M33N5MKze = 7421 + INTEGER(IntKi), PARAMETER :: M33N6MKze = 7422 + INTEGER(IntKi), PARAMETER :: M33N7MKze = 7423 + INTEGER(IntKi), PARAMETER :: M33N8MKze = 7424 + INTEGER(IntKi), PARAMETER :: M33N9MKze = 7425 + INTEGER(IntKi), PARAMETER :: M34N1MKze = 7426 + INTEGER(IntKi), PARAMETER :: M34N2MKze = 7427 + INTEGER(IntKi), PARAMETER :: M34N3MKze = 7428 + INTEGER(IntKi), PARAMETER :: M34N4MKze = 7429 + INTEGER(IntKi), PARAMETER :: M34N5MKze = 7430 + INTEGER(IntKi), PARAMETER :: M34N6MKze = 7431 + INTEGER(IntKi), PARAMETER :: M34N7MKze = 7432 + INTEGER(IntKi), PARAMETER :: M34N8MKze = 7433 + INTEGER(IntKi), PARAMETER :: M34N9MKze = 7434 + INTEGER(IntKi), PARAMETER :: M35N1MKze = 7435 + INTEGER(IntKi), PARAMETER :: M35N2MKze = 7436 + INTEGER(IntKi), PARAMETER :: M35N3MKze = 7437 + INTEGER(IntKi), PARAMETER :: M35N4MKze = 7438 + INTEGER(IntKi), PARAMETER :: M35N5MKze = 7439 + INTEGER(IntKi), PARAMETER :: M35N6MKze = 7440 + INTEGER(IntKi), PARAMETER :: M35N7MKze = 7441 + INTEGER(IntKi), PARAMETER :: M35N8MKze = 7442 + INTEGER(IntKi), PARAMETER :: M35N9MKze = 7443 + INTEGER(IntKi), PARAMETER :: M36N1MKze = 7444 + INTEGER(IntKi), PARAMETER :: M36N2MKze = 7445 + INTEGER(IntKi), PARAMETER :: M36N3MKze = 7446 + INTEGER(IntKi), PARAMETER :: M36N4MKze = 7447 + INTEGER(IntKi), PARAMETER :: M36N5MKze = 7448 + INTEGER(IntKi), PARAMETER :: M36N6MKze = 7449 + INTEGER(IntKi), PARAMETER :: M36N7MKze = 7450 + INTEGER(IntKi), PARAMETER :: M36N8MKze = 7451 + INTEGER(IntKi), PARAMETER :: M36N9MKze = 7452 + INTEGER(IntKi), PARAMETER :: M37N1MKze = 7453 + INTEGER(IntKi), PARAMETER :: M37N2MKze = 7454 + INTEGER(IntKi), PARAMETER :: M37N3MKze = 7455 + INTEGER(IntKi), PARAMETER :: M37N4MKze = 7456 + INTEGER(IntKi), PARAMETER :: M37N5MKze = 7457 + INTEGER(IntKi), PARAMETER :: M37N6MKze = 7458 + INTEGER(IntKi), PARAMETER :: M37N7MKze = 7459 + INTEGER(IntKi), PARAMETER :: M37N8MKze = 7460 + INTEGER(IntKi), PARAMETER :: M37N9MKze = 7461 + INTEGER(IntKi), PARAMETER :: M38N1MKze = 7462 + INTEGER(IntKi), PARAMETER :: M38N2MKze = 7463 + INTEGER(IntKi), PARAMETER :: M38N3MKze = 7464 + INTEGER(IntKi), PARAMETER :: M38N4MKze = 7465 + INTEGER(IntKi), PARAMETER :: M38N5MKze = 7466 + INTEGER(IntKi), PARAMETER :: M38N6MKze = 7467 + INTEGER(IntKi), PARAMETER :: M38N7MKze = 7468 + INTEGER(IntKi), PARAMETER :: M38N8MKze = 7469 + INTEGER(IntKi), PARAMETER :: M38N9MKze = 7470 + INTEGER(IntKi), PARAMETER :: M39N1MKze = 7471 + INTEGER(IntKi), PARAMETER :: M39N2MKze = 7472 + INTEGER(IntKi), PARAMETER :: M39N3MKze = 7473 + INTEGER(IntKi), PARAMETER :: M39N4MKze = 7474 + INTEGER(IntKi), PARAMETER :: M39N5MKze = 7475 + INTEGER(IntKi), PARAMETER :: M39N6MKze = 7476 + INTEGER(IntKi), PARAMETER :: M39N7MKze = 7477 + INTEGER(IntKi), PARAMETER :: M39N8MKze = 7478 + INTEGER(IntKi), PARAMETER :: M39N9MKze = 7479 + INTEGER(IntKi), PARAMETER :: M40N1MKze = 7480 + INTEGER(IntKi), PARAMETER :: M40N2MKze = 7481 + INTEGER(IntKi), PARAMETER :: M40N3MKze = 7482 + INTEGER(IntKi), PARAMETER :: M40N4MKze = 7483 + INTEGER(IntKi), PARAMETER :: M40N5MKze = 7484 + INTEGER(IntKi), PARAMETER :: M40N6MKze = 7485 + INTEGER(IntKi), PARAMETER :: M40N7MKze = 7486 + INTEGER(IntKi), PARAMETER :: M40N8MKze = 7487 + INTEGER(IntKi), PARAMETER :: M40N9MKze = 7488 + INTEGER(IntKi), PARAMETER :: M41N1MKze = 7489 + INTEGER(IntKi), PARAMETER :: M41N2MKze = 7490 + INTEGER(IntKi), PARAMETER :: M41N3MKze = 7491 + INTEGER(IntKi), PARAMETER :: M41N4MKze = 7492 + INTEGER(IntKi), PARAMETER :: M41N5MKze = 7493 + INTEGER(IntKi), PARAMETER :: M41N6MKze = 7494 + INTEGER(IntKi), PARAMETER :: M41N7MKze = 7495 + INTEGER(IntKi), PARAMETER :: M41N8MKze = 7496 + INTEGER(IntKi), PARAMETER :: M41N9MKze = 7497 + INTEGER(IntKi), PARAMETER :: M42N1MKze = 7498 + INTEGER(IntKi), PARAMETER :: M42N2MKze = 7499 + INTEGER(IntKi), PARAMETER :: M42N3MKze = 7500 + INTEGER(IntKi), PARAMETER :: M42N4MKze = 7501 + INTEGER(IntKi), PARAMETER :: M42N5MKze = 7502 + INTEGER(IntKi), PARAMETER :: M42N6MKze = 7503 + INTEGER(IntKi), PARAMETER :: M42N7MKze = 7504 + INTEGER(IntKi), PARAMETER :: M42N8MKze = 7505 + INTEGER(IntKi), PARAMETER :: M42N9MKze = 7506 + INTEGER(IntKi), PARAMETER :: M43N1MKze = 7507 + INTEGER(IntKi), PARAMETER :: M43N2MKze = 7508 + INTEGER(IntKi), PARAMETER :: M43N3MKze = 7509 + INTEGER(IntKi), PARAMETER :: M43N4MKze = 7510 + INTEGER(IntKi), PARAMETER :: M43N5MKze = 7511 + INTEGER(IntKi), PARAMETER :: M43N6MKze = 7512 + INTEGER(IntKi), PARAMETER :: M43N7MKze = 7513 + INTEGER(IntKi), PARAMETER :: M43N8MKze = 7514 + INTEGER(IntKi), PARAMETER :: M43N9MKze = 7515 + INTEGER(IntKi), PARAMETER :: M44N1MKze = 7516 + INTEGER(IntKi), PARAMETER :: M44N2MKze = 7517 + INTEGER(IntKi), PARAMETER :: M44N3MKze = 7518 + INTEGER(IntKi), PARAMETER :: M44N4MKze = 7519 + INTEGER(IntKi), PARAMETER :: M44N5MKze = 7520 + INTEGER(IntKi), PARAMETER :: M44N6MKze = 7521 + INTEGER(IntKi), PARAMETER :: M44N7MKze = 7522 + INTEGER(IntKi), PARAMETER :: M44N8MKze = 7523 + INTEGER(IntKi), PARAMETER :: M44N9MKze = 7524 + INTEGER(IntKi), PARAMETER :: M45N1MKze = 7525 + INTEGER(IntKi), PARAMETER :: M45N2MKze = 7526 + INTEGER(IntKi), PARAMETER :: M45N3MKze = 7527 + INTEGER(IntKi), PARAMETER :: M45N4MKze = 7528 + INTEGER(IntKi), PARAMETER :: M45N5MKze = 7529 + INTEGER(IntKi), PARAMETER :: M45N6MKze = 7530 + INTEGER(IntKi), PARAMETER :: M45N7MKze = 7531 + INTEGER(IntKi), PARAMETER :: M45N8MKze = 7532 + INTEGER(IntKi), PARAMETER :: M45N9MKze = 7533 + INTEGER(IntKi), PARAMETER :: M46N1MKze = 7534 + INTEGER(IntKi), PARAMETER :: M46N2MKze = 7535 + INTEGER(IntKi), PARAMETER :: M46N3MKze = 7536 + INTEGER(IntKi), PARAMETER :: M46N4MKze = 7537 + INTEGER(IntKi), PARAMETER :: M46N5MKze = 7538 + INTEGER(IntKi), PARAMETER :: M46N6MKze = 7539 + INTEGER(IntKi), PARAMETER :: M46N7MKze = 7540 + INTEGER(IntKi), PARAMETER :: M46N8MKze = 7541 + INTEGER(IntKi), PARAMETER :: M46N9MKze = 7542 + INTEGER(IntKi), PARAMETER :: M47N1MKze = 7543 + INTEGER(IntKi), PARAMETER :: M47N2MKze = 7544 + INTEGER(IntKi), PARAMETER :: M47N3MKze = 7545 + INTEGER(IntKi), PARAMETER :: M47N4MKze = 7546 + INTEGER(IntKi), PARAMETER :: M47N5MKze = 7547 + INTEGER(IntKi), PARAMETER :: M47N6MKze = 7548 + INTEGER(IntKi), PARAMETER :: M47N7MKze = 7549 + INTEGER(IntKi), PARAMETER :: M47N8MKze = 7550 + INTEGER(IntKi), PARAMETER :: M47N9MKze = 7551 + INTEGER(IntKi), PARAMETER :: M48N1MKze = 7552 + INTEGER(IntKi), PARAMETER :: M48N2MKze = 7553 + INTEGER(IntKi), PARAMETER :: M48N3MKze = 7554 + INTEGER(IntKi), PARAMETER :: M48N4MKze = 7555 + INTEGER(IntKi), PARAMETER :: M48N5MKze = 7556 + INTEGER(IntKi), PARAMETER :: M48N6MKze = 7557 + INTEGER(IntKi), PARAMETER :: M48N7MKze = 7558 + INTEGER(IntKi), PARAMETER :: M48N8MKze = 7559 + INTEGER(IntKi), PARAMETER :: M48N9MKze = 7560 + INTEGER(IntKi), PARAMETER :: M49N1MKze = 7561 + INTEGER(IntKi), PARAMETER :: M49N2MKze = 7562 + INTEGER(IntKi), PARAMETER :: M49N3MKze = 7563 + INTEGER(IntKi), PARAMETER :: M49N4MKze = 7564 + INTEGER(IntKi), PARAMETER :: M49N5MKze = 7565 + INTEGER(IntKi), PARAMETER :: M49N6MKze = 7566 + INTEGER(IntKi), PARAMETER :: M49N7MKze = 7567 + INTEGER(IntKi), PARAMETER :: M49N8MKze = 7568 + INTEGER(IntKi), PARAMETER :: M49N9MKze = 7569 + INTEGER(IntKi), PARAMETER :: M50N1MKze = 7570 + INTEGER(IntKi), PARAMETER :: M50N2MKze = 7571 + INTEGER(IntKi), PARAMETER :: M50N3MKze = 7572 + INTEGER(IntKi), PARAMETER :: M50N4MKze = 7573 + INTEGER(IntKi), PARAMETER :: M50N5MKze = 7574 + INTEGER(IntKi), PARAMETER :: M50N6MKze = 7575 + INTEGER(IntKi), PARAMETER :: M50N7MKze = 7576 + INTEGER(IntKi), PARAMETER :: M50N8MKze = 7577 + INTEGER(IntKi), PARAMETER :: M50N9MKze = 7578 + INTEGER(IntKi), PARAMETER :: M51N1MKze = 7579 + INTEGER(IntKi), PARAMETER :: M51N2MKze = 7580 + INTEGER(IntKi), PARAMETER :: M51N3MKze = 7581 + INTEGER(IntKi), PARAMETER :: M51N4MKze = 7582 + INTEGER(IntKi), PARAMETER :: M51N5MKze = 7583 + INTEGER(IntKi), PARAMETER :: M51N6MKze = 7584 + INTEGER(IntKi), PARAMETER :: M51N7MKze = 7585 + INTEGER(IntKi), PARAMETER :: M51N8MKze = 7586 + INTEGER(IntKi), PARAMETER :: M51N9MKze = 7587 + INTEGER(IntKi), PARAMETER :: M52N1MKze = 7588 + INTEGER(IntKi), PARAMETER :: M52N2MKze = 7589 + INTEGER(IntKi), PARAMETER :: M52N3MKze = 7590 + INTEGER(IntKi), PARAMETER :: M52N4MKze = 7591 + INTEGER(IntKi), PARAMETER :: M52N5MKze = 7592 + INTEGER(IntKi), PARAMETER :: M52N6MKze = 7593 + INTEGER(IntKi), PARAMETER :: M52N7MKze = 7594 + INTEGER(IntKi), PARAMETER :: M52N8MKze = 7595 + INTEGER(IntKi), PARAMETER :: M52N9MKze = 7596 + INTEGER(IntKi), PARAMETER :: M53N1MKze = 7597 + INTEGER(IntKi), PARAMETER :: M53N2MKze = 7598 + INTEGER(IntKi), PARAMETER :: M53N3MKze = 7599 + INTEGER(IntKi), PARAMETER :: M53N4MKze = 7600 + INTEGER(IntKi), PARAMETER :: M53N5MKze = 7601 + INTEGER(IntKi), PARAMETER :: M53N6MKze = 7602 + INTEGER(IntKi), PARAMETER :: M53N7MKze = 7603 + INTEGER(IntKi), PARAMETER :: M53N8MKze = 7604 + INTEGER(IntKi), PARAMETER :: M53N9MKze = 7605 + INTEGER(IntKi), PARAMETER :: M54N1MKze = 7606 + INTEGER(IntKi), PARAMETER :: M54N2MKze = 7607 + INTEGER(IntKi), PARAMETER :: M54N3MKze = 7608 + INTEGER(IntKi), PARAMETER :: M54N4MKze = 7609 + INTEGER(IntKi), PARAMETER :: M54N5MKze = 7610 + INTEGER(IntKi), PARAMETER :: M54N6MKze = 7611 + INTEGER(IntKi), PARAMETER :: M54N7MKze = 7612 + INTEGER(IntKi), PARAMETER :: M54N8MKze = 7613 + INTEGER(IntKi), PARAMETER :: M54N9MKze = 7614 + INTEGER(IntKi), PARAMETER :: M55N1MKze = 7615 + INTEGER(IntKi), PARAMETER :: M55N2MKze = 7616 + INTEGER(IntKi), PARAMETER :: M55N3MKze = 7617 + INTEGER(IntKi), PARAMETER :: M55N4MKze = 7618 + INTEGER(IntKi), PARAMETER :: M55N5MKze = 7619 + INTEGER(IntKi), PARAMETER :: M55N6MKze = 7620 + INTEGER(IntKi), PARAMETER :: M55N7MKze = 7621 + INTEGER(IntKi), PARAMETER :: M55N8MKze = 7622 + INTEGER(IntKi), PARAMETER :: M55N9MKze = 7623 + INTEGER(IntKi), PARAMETER :: M56N1MKze = 7624 + INTEGER(IntKi), PARAMETER :: M56N2MKze = 7625 + INTEGER(IntKi), PARAMETER :: M56N3MKze = 7626 + INTEGER(IntKi), PARAMETER :: M56N4MKze = 7627 + INTEGER(IntKi), PARAMETER :: M56N5MKze = 7628 + INTEGER(IntKi), PARAMETER :: M56N6MKze = 7629 + INTEGER(IntKi), PARAMETER :: M56N7MKze = 7630 + INTEGER(IntKi), PARAMETER :: M56N8MKze = 7631 + INTEGER(IntKi), PARAMETER :: M56N9MKze = 7632 + INTEGER(IntKi), PARAMETER :: M57N1MKze = 7633 + INTEGER(IntKi), PARAMETER :: M57N2MKze = 7634 + INTEGER(IntKi), PARAMETER :: M57N3MKze = 7635 + INTEGER(IntKi), PARAMETER :: M57N4MKze = 7636 + INTEGER(IntKi), PARAMETER :: M57N5MKze = 7637 + INTEGER(IntKi), PARAMETER :: M57N6MKze = 7638 + INTEGER(IntKi), PARAMETER :: M57N7MKze = 7639 + INTEGER(IntKi), PARAMETER :: M57N8MKze = 7640 + INTEGER(IntKi), PARAMETER :: M57N9MKze = 7641 + INTEGER(IntKi), PARAMETER :: M58N1MKze = 7642 + INTEGER(IntKi), PARAMETER :: M58N2MKze = 7643 + INTEGER(IntKi), PARAMETER :: M58N3MKze = 7644 + INTEGER(IntKi), PARAMETER :: M58N4MKze = 7645 + INTEGER(IntKi), PARAMETER :: M58N5MKze = 7646 + INTEGER(IntKi), PARAMETER :: M58N6MKze = 7647 + INTEGER(IntKi), PARAMETER :: M58N7MKze = 7648 + INTEGER(IntKi), PARAMETER :: M58N8MKze = 7649 + INTEGER(IntKi), PARAMETER :: M58N9MKze = 7650 + INTEGER(IntKi), PARAMETER :: M59N1MKze = 7651 + INTEGER(IntKi), PARAMETER :: M59N2MKze = 7652 + INTEGER(IntKi), PARAMETER :: M59N3MKze = 7653 + INTEGER(IntKi), PARAMETER :: M59N4MKze = 7654 + INTEGER(IntKi), PARAMETER :: M59N5MKze = 7655 + INTEGER(IntKi), PARAMETER :: M59N6MKze = 7656 + INTEGER(IntKi), PARAMETER :: M59N7MKze = 7657 + INTEGER(IntKi), PARAMETER :: M59N8MKze = 7658 + INTEGER(IntKi), PARAMETER :: M59N9MKze = 7659 + INTEGER(IntKi), PARAMETER :: M60N1MKze = 7660 + INTEGER(IntKi), PARAMETER :: M60N2MKze = 7661 + INTEGER(IntKi), PARAMETER :: M60N3MKze = 7662 + INTEGER(IntKi), PARAMETER :: M60N4MKze = 7663 + INTEGER(IntKi), PARAMETER :: M60N5MKze = 7664 + INTEGER(IntKi), PARAMETER :: M60N6MKze = 7665 + INTEGER(IntKi), PARAMETER :: M60N7MKze = 7666 + INTEGER(IntKi), PARAMETER :: M60N8MKze = 7667 + INTEGER(IntKi), PARAMETER :: M60N9MKze = 7668 + INTEGER(IntKi), PARAMETER :: M61N1MKze = 7669 + INTEGER(IntKi), PARAMETER :: M61N2MKze = 7670 + INTEGER(IntKi), PARAMETER :: M61N3MKze = 7671 + INTEGER(IntKi), PARAMETER :: M61N4MKze = 7672 + INTEGER(IntKi), PARAMETER :: M61N5MKze = 7673 + INTEGER(IntKi), PARAMETER :: M61N6MKze = 7674 + INTEGER(IntKi), PARAMETER :: M61N7MKze = 7675 + INTEGER(IntKi), PARAMETER :: M61N8MKze = 7676 + INTEGER(IntKi), PARAMETER :: M61N9MKze = 7677 + INTEGER(IntKi), PARAMETER :: M62N1MKze = 7678 + INTEGER(IntKi), PARAMETER :: M62N2MKze = 7679 + INTEGER(IntKi), PARAMETER :: M62N3MKze = 7680 + INTEGER(IntKi), PARAMETER :: M62N4MKze = 7681 + INTEGER(IntKi), PARAMETER :: M62N5MKze = 7682 + INTEGER(IntKi), PARAMETER :: M62N6MKze = 7683 + INTEGER(IntKi), PARAMETER :: M62N7MKze = 7684 + INTEGER(IntKi), PARAMETER :: M62N8MKze = 7685 + INTEGER(IntKi), PARAMETER :: M62N9MKze = 7686 + INTEGER(IntKi), PARAMETER :: M63N1MKze = 7687 + INTEGER(IntKi), PARAMETER :: M63N2MKze = 7688 + INTEGER(IntKi), PARAMETER :: M63N3MKze = 7689 + INTEGER(IntKi), PARAMETER :: M63N4MKze = 7690 + INTEGER(IntKi), PARAMETER :: M63N5MKze = 7691 + INTEGER(IntKi), PARAMETER :: M63N6MKze = 7692 + INTEGER(IntKi), PARAMETER :: M63N7MKze = 7693 + INTEGER(IntKi), PARAMETER :: M63N8MKze = 7694 + INTEGER(IntKi), PARAMETER :: M63N9MKze = 7695 + INTEGER(IntKi), PARAMETER :: M64N1MKze = 7696 + INTEGER(IntKi), PARAMETER :: M64N2MKze = 7697 + INTEGER(IntKi), PARAMETER :: M64N3MKze = 7698 + INTEGER(IntKi), PARAMETER :: M64N4MKze = 7699 + INTEGER(IntKi), PARAMETER :: M64N5MKze = 7700 + INTEGER(IntKi), PARAMETER :: M64N6MKze = 7701 + INTEGER(IntKi), PARAMETER :: M64N7MKze = 7702 + INTEGER(IntKi), PARAMETER :: M64N8MKze = 7703 + INTEGER(IntKi), PARAMETER :: M64N9MKze = 7704 + INTEGER(IntKi), PARAMETER :: M65N1MKze = 7705 + INTEGER(IntKi), PARAMETER :: M65N2MKze = 7706 + INTEGER(IntKi), PARAMETER :: M65N3MKze = 7707 + INTEGER(IntKi), PARAMETER :: M65N4MKze = 7708 + INTEGER(IntKi), PARAMETER :: M65N5MKze = 7709 + INTEGER(IntKi), PARAMETER :: M65N6MKze = 7710 + INTEGER(IntKi), PARAMETER :: M65N7MKze = 7711 + INTEGER(IntKi), PARAMETER :: M65N8MKze = 7712 + INTEGER(IntKi), PARAMETER :: M65N9MKze = 7713 + INTEGER(IntKi), PARAMETER :: M66N1MKze = 7714 + INTEGER(IntKi), PARAMETER :: M66N2MKze = 7715 + INTEGER(IntKi), PARAMETER :: M66N3MKze = 7716 + INTEGER(IntKi), PARAMETER :: M66N4MKze = 7717 + INTEGER(IntKi), PARAMETER :: M66N5MKze = 7718 + INTEGER(IntKi), PARAMETER :: M66N6MKze = 7719 + INTEGER(IntKi), PARAMETER :: M66N7MKze = 7720 + INTEGER(IntKi), PARAMETER :: M66N8MKze = 7721 + INTEGER(IntKi), PARAMETER :: M66N9MKze = 7722 + INTEGER(IntKi), PARAMETER :: M67N1MKze = 7723 + INTEGER(IntKi), PARAMETER :: M67N2MKze = 7724 + INTEGER(IntKi), PARAMETER :: M67N3MKze = 7725 + INTEGER(IntKi), PARAMETER :: M67N4MKze = 7726 + INTEGER(IntKi), PARAMETER :: M67N5MKze = 7727 + INTEGER(IntKi), PARAMETER :: M67N6MKze = 7728 + INTEGER(IntKi), PARAMETER :: M67N7MKze = 7729 + INTEGER(IntKi), PARAMETER :: M67N8MKze = 7730 + INTEGER(IntKi), PARAMETER :: M67N9MKze = 7731 + INTEGER(IntKi), PARAMETER :: M68N1MKze = 7732 + INTEGER(IntKi), PARAMETER :: M68N2MKze = 7733 + INTEGER(IntKi), PARAMETER :: M68N3MKze = 7734 + INTEGER(IntKi), PARAMETER :: M68N4MKze = 7735 + INTEGER(IntKi), PARAMETER :: M68N5MKze = 7736 + INTEGER(IntKi), PARAMETER :: M68N6MKze = 7737 + INTEGER(IntKi), PARAMETER :: M68N7MKze = 7738 + INTEGER(IntKi), PARAMETER :: M68N8MKze = 7739 + INTEGER(IntKi), PARAMETER :: M68N9MKze = 7740 + INTEGER(IntKi), PARAMETER :: M69N1MKze = 7741 + INTEGER(IntKi), PARAMETER :: M69N2MKze = 7742 + INTEGER(IntKi), PARAMETER :: M69N3MKze = 7743 + INTEGER(IntKi), PARAMETER :: M69N4MKze = 7744 + INTEGER(IntKi), PARAMETER :: M69N5MKze = 7745 + INTEGER(IntKi), PARAMETER :: M69N6MKze = 7746 + INTEGER(IntKi), PARAMETER :: M69N7MKze = 7747 + INTEGER(IntKi), PARAMETER :: M69N8MKze = 7748 + INTEGER(IntKi), PARAMETER :: M69N9MKze = 7749 + INTEGER(IntKi), PARAMETER :: M70N1MKze = 7750 + INTEGER(IntKi), PARAMETER :: M70N2MKze = 7751 + INTEGER(IntKi), PARAMETER :: M70N3MKze = 7752 + INTEGER(IntKi), PARAMETER :: M70N4MKze = 7753 + INTEGER(IntKi), PARAMETER :: M70N5MKze = 7754 + INTEGER(IntKi), PARAMETER :: M70N6MKze = 7755 + INTEGER(IntKi), PARAMETER :: M70N7MKze = 7756 + INTEGER(IntKi), PARAMETER :: M70N8MKze = 7757 + INTEGER(IntKi), PARAMETER :: M70N9MKze = 7758 + INTEGER(IntKi), PARAMETER :: M71N1MKze = 7759 + INTEGER(IntKi), PARAMETER :: M71N2MKze = 7760 + INTEGER(IntKi), PARAMETER :: M71N3MKze = 7761 + INTEGER(IntKi), PARAMETER :: M71N4MKze = 7762 + INTEGER(IntKi), PARAMETER :: M71N5MKze = 7763 + INTEGER(IntKi), PARAMETER :: M71N6MKze = 7764 + INTEGER(IntKi), PARAMETER :: M71N7MKze = 7765 + INTEGER(IntKi), PARAMETER :: M71N8MKze = 7766 + INTEGER(IntKi), PARAMETER :: M71N9MKze = 7767 + INTEGER(IntKi), PARAMETER :: M72N1MKze = 7768 + INTEGER(IntKi), PARAMETER :: M72N2MKze = 7769 + INTEGER(IntKi), PARAMETER :: M72N3MKze = 7770 + INTEGER(IntKi), PARAMETER :: M72N4MKze = 7771 + INTEGER(IntKi), PARAMETER :: M72N5MKze = 7772 + INTEGER(IntKi), PARAMETER :: M72N6MKze = 7773 + INTEGER(IntKi), PARAMETER :: M72N7MKze = 7774 + INTEGER(IntKi), PARAMETER :: M72N8MKze = 7775 + INTEGER(IntKi), PARAMETER :: M72N9MKze = 7776 + INTEGER(IntKi), PARAMETER :: M73N1MKze = 7777 + INTEGER(IntKi), PARAMETER :: M73N2MKze = 7778 + INTEGER(IntKi), PARAMETER :: M73N3MKze = 7779 + INTEGER(IntKi), PARAMETER :: M73N4MKze = 7780 + INTEGER(IntKi), PARAMETER :: M73N5MKze = 7781 + INTEGER(IntKi), PARAMETER :: M73N6MKze = 7782 + INTEGER(IntKi), PARAMETER :: M73N7MKze = 7783 + INTEGER(IntKi), PARAMETER :: M73N8MKze = 7784 + INTEGER(IntKi), PARAMETER :: M73N9MKze = 7785 + INTEGER(IntKi), PARAMETER :: M74N1MKze = 7786 + INTEGER(IntKi), PARAMETER :: M74N2MKze = 7787 + INTEGER(IntKi), PARAMETER :: M74N3MKze = 7788 + INTEGER(IntKi), PARAMETER :: M74N4MKze = 7789 + INTEGER(IntKi), PARAMETER :: M74N5MKze = 7790 + INTEGER(IntKi), PARAMETER :: M74N6MKze = 7791 + INTEGER(IntKi), PARAMETER :: M74N7MKze = 7792 + INTEGER(IntKi), PARAMETER :: M74N8MKze = 7793 + INTEGER(IntKi), PARAMETER :: M74N9MKze = 7794 + INTEGER(IntKi), PARAMETER :: M75N1MKze = 7795 + INTEGER(IntKi), PARAMETER :: M75N2MKze = 7796 + INTEGER(IntKi), PARAMETER :: M75N3MKze = 7797 + INTEGER(IntKi), PARAMETER :: M75N4MKze = 7798 + INTEGER(IntKi), PARAMETER :: M75N5MKze = 7799 + INTEGER(IntKi), PARAMETER :: M75N6MKze = 7800 + INTEGER(IntKi), PARAMETER :: M75N7MKze = 7801 + INTEGER(IntKi), PARAMETER :: M75N8MKze = 7802 + INTEGER(IntKi), PARAMETER :: M75N9MKze = 7803 + INTEGER(IntKi), PARAMETER :: M76N1MKze = 7804 + INTEGER(IntKi), PARAMETER :: M76N2MKze = 7805 + INTEGER(IntKi), PARAMETER :: M76N3MKze = 7806 + INTEGER(IntKi), PARAMETER :: M76N4MKze = 7807 + INTEGER(IntKi), PARAMETER :: M76N5MKze = 7808 + INTEGER(IntKi), PARAMETER :: M76N6MKze = 7809 + INTEGER(IntKi), PARAMETER :: M76N7MKze = 7810 + INTEGER(IntKi), PARAMETER :: M76N8MKze = 7811 + INTEGER(IntKi), PARAMETER :: M76N9MKze = 7812 + INTEGER(IntKi), PARAMETER :: M77N1MKze = 7813 + INTEGER(IntKi), PARAMETER :: M77N2MKze = 7814 + INTEGER(IntKi), PARAMETER :: M77N3MKze = 7815 + INTEGER(IntKi), PARAMETER :: M77N4MKze = 7816 + INTEGER(IntKi), PARAMETER :: M77N5MKze = 7817 + INTEGER(IntKi), PARAMETER :: M77N6MKze = 7818 + INTEGER(IntKi), PARAMETER :: M77N7MKze = 7819 + INTEGER(IntKi), PARAMETER :: M77N8MKze = 7820 + INTEGER(IntKi), PARAMETER :: M77N9MKze = 7821 + INTEGER(IntKi), PARAMETER :: M78N1MKze = 7822 + INTEGER(IntKi), PARAMETER :: M78N2MKze = 7823 + INTEGER(IntKi), PARAMETER :: M78N3MKze = 7824 + INTEGER(IntKi), PARAMETER :: M78N4MKze = 7825 + INTEGER(IntKi), PARAMETER :: M78N5MKze = 7826 + INTEGER(IntKi), PARAMETER :: M78N6MKze = 7827 + INTEGER(IntKi), PARAMETER :: M78N7MKze = 7828 + INTEGER(IntKi), PARAMETER :: M78N8MKze = 7829 + INTEGER(IntKi), PARAMETER :: M78N9MKze = 7830 + INTEGER(IntKi), PARAMETER :: M79N1MKze = 7831 + INTEGER(IntKi), PARAMETER :: M79N2MKze = 7832 + INTEGER(IntKi), PARAMETER :: M79N3MKze = 7833 + INTEGER(IntKi), PARAMETER :: M79N4MKze = 7834 + INTEGER(IntKi), PARAMETER :: M79N5MKze = 7835 + INTEGER(IntKi), PARAMETER :: M79N6MKze = 7836 + INTEGER(IntKi), PARAMETER :: M79N7MKze = 7837 + INTEGER(IntKi), PARAMETER :: M79N8MKze = 7838 + INTEGER(IntKi), PARAMETER :: M79N9MKze = 7839 + INTEGER(IntKi), PARAMETER :: M80N1MKze = 7840 + INTEGER(IntKi), PARAMETER :: M80N2MKze = 7841 + INTEGER(IntKi), PARAMETER :: M80N3MKze = 7842 + INTEGER(IntKi), PARAMETER :: M80N4MKze = 7843 + INTEGER(IntKi), PARAMETER :: M80N5MKze = 7844 + INTEGER(IntKi), PARAMETER :: M80N6MKze = 7845 + INTEGER(IntKi), PARAMETER :: M80N7MKze = 7846 + INTEGER(IntKi), PARAMETER :: M80N8MKze = 7847 + INTEGER(IntKi), PARAMETER :: M80N9MKze = 7848 + INTEGER(IntKi), PARAMETER :: M81N1MKze = 7849 + INTEGER(IntKi), PARAMETER :: M81N2MKze = 7850 + INTEGER(IntKi), PARAMETER :: M81N3MKze = 7851 + INTEGER(IntKi), PARAMETER :: M81N4MKze = 7852 + INTEGER(IntKi), PARAMETER :: M81N5MKze = 7853 + INTEGER(IntKi), PARAMETER :: M81N6MKze = 7854 + INTEGER(IntKi), PARAMETER :: M81N7MKze = 7855 + INTEGER(IntKi), PARAMETER :: M81N8MKze = 7856 + INTEGER(IntKi), PARAMETER :: M81N9MKze = 7857 + INTEGER(IntKi), PARAMETER :: M82N1MKze = 7858 + INTEGER(IntKi), PARAMETER :: M82N2MKze = 7859 + INTEGER(IntKi), PARAMETER :: M82N3MKze = 7860 + INTEGER(IntKi), PARAMETER :: M82N4MKze = 7861 + INTEGER(IntKi), PARAMETER :: M82N5MKze = 7862 + INTEGER(IntKi), PARAMETER :: M82N6MKze = 7863 + INTEGER(IntKi), PARAMETER :: M82N7MKze = 7864 + INTEGER(IntKi), PARAMETER :: M82N8MKze = 7865 + INTEGER(IntKi), PARAMETER :: M82N9MKze = 7866 + INTEGER(IntKi), PARAMETER :: M83N1MKze = 7867 + INTEGER(IntKi), PARAMETER :: M83N2MKze = 7868 + INTEGER(IntKi), PARAMETER :: M83N3MKze = 7869 + INTEGER(IntKi), PARAMETER :: M83N4MKze = 7870 + INTEGER(IntKi), PARAMETER :: M83N5MKze = 7871 + INTEGER(IntKi), PARAMETER :: M83N6MKze = 7872 + INTEGER(IntKi), PARAMETER :: M83N7MKze = 7873 + INTEGER(IntKi), PARAMETER :: M83N8MKze = 7874 + INTEGER(IntKi), PARAMETER :: M83N9MKze = 7875 + INTEGER(IntKi), PARAMETER :: M84N1MKze = 7876 + INTEGER(IntKi), PARAMETER :: M84N2MKze = 7877 + INTEGER(IntKi), PARAMETER :: M84N3MKze = 7878 + INTEGER(IntKi), PARAMETER :: M84N4MKze = 7879 + INTEGER(IntKi), PARAMETER :: M84N5MKze = 7880 + INTEGER(IntKi), PARAMETER :: M84N6MKze = 7881 + INTEGER(IntKi), PARAMETER :: M84N7MKze = 7882 + INTEGER(IntKi), PARAMETER :: M84N8MKze = 7883 + INTEGER(IntKi), PARAMETER :: M84N9MKze = 7884 + INTEGER(IntKi), PARAMETER :: M85N1MKze = 7885 + INTEGER(IntKi), PARAMETER :: M85N2MKze = 7886 + INTEGER(IntKi), PARAMETER :: M85N3MKze = 7887 + INTEGER(IntKi), PARAMETER :: M85N4MKze = 7888 + INTEGER(IntKi), PARAMETER :: M85N5MKze = 7889 + INTEGER(IntKi), PARAMETER :: M85N6MKze = 7890 + INTEGER(IntKi), PARAMETER :: M85N7MKze = 7891 + INTEGER(IntKi), PARAMETER :: M85N8MKze = 7892 + INTEGER(IntKi), PARAMETER :: M85N9MKze = 7893 + INTEGER(IntKi), PARAMETER :: M86N1MKze = 7894 + INTEGER(IntKi), PARAMETER :: M86N2MKze = 7895 + INTEGER(IntKi), PARAMETER :: M86N3MKze = 7896 + INTEGER(IntKi), PARAMETER :: M86N4MKze = 7897 + INTEGER(IntKi), PARAMETER :: M86N5MKze = 7898 + INTEGER(IntKi), PARAMETER :: M86N6MKze = 7899 + INTEGER(IntKi), PARAMETER :: M86N7MKze = 7900 + INTEGER(IntKi), PARAMETER :: M86N8MKze = 7901 + INTEGER(IntKi), PARAMETER :: M86N9MKze = 7902 + INTEGER(IntKi), PARAMETER :: M87N1MKze = 7903 + INTEGER(IntKi), PARAMETER :: M87N2MKze = 7904 + INTEGER(IntKi), PARAMETER :: M87N3MKze = 7905 + INTEGER(IntKi), PARAMETER :: M87N4MKze = 7906 + INTEGER(IntKi), PARAMETER :: M87N5MKze = 7907 + INTEGER(IntKi), PARAMETER :: M87N6MKze = 7908 + INTEGER(IntKi), PARAMETER :: M87N7MKze = 7909 + INTEGER(IntKi), PARAMETER :: M87N8MKze = 7910 + INTEGER(IntKi), PARAMETER :: M87N9MKze = 7911 + INTEGER(IntKi), PARAMETER :: M88N1MKze = 7912 + INTEGER(IntKi), PARAMETER :: M88N2MKze = 7913 + INTEGER(IntKi), PARAMETER :: M88N3MKze = 7914 + INTEGER(IntKi), PARAMETER :: M88N4MKze = 7915 + INTEGER(IntKi), PARAMETER :: M88N5MKze = 7916 + INTEGER(IntKi), PARAMETER :: M88N6MKze = 7917 + INTEGER(IntKi), PARAMETER :: M88N7MKze = 7918 + INTEGER(IntKi), PARAMETER :: M88N8MKze = 7919 + INTEGER(IntKi), PARAMETER :: M88N9MKze = 7920 + INTEGER(IntKi), PARAMETER :: M89N1MKze = 7921 + INTEGER(IntKi), PARAMETER :: M89N2MKze = 7922 + INTEGER(IntKi), PARAMETER :: M89N3MKze = 7923 + INTEGER(IntKi), PARAMETER :: M89N4MKze = 7924 + INTEGER(IntKi), PARAMETER :: M89N5MKze = 7925 + INTEGER(IntKi), PARAMETER :: M89N6MKze = 7926 + INTEGER(IntKi), PARAMETER :: M89N7MKze = 7927 + INTEGER(IntKi), PARAMETER :: M89N8MKze = 7928 + INTEGER(IntKi), PARAMETER :: M89N9MKze = 7929 + INTEGER(IntKi), PARAMETER :: M90N1MKze = 7930 + INTEGER(IntKi), PARAMETER :: M90N2MKze = 7931 + INTEGER(IntKi), PARAMETER :: M90N3MKze = 7932 + INTEGER(IntKi), PARAMETER :: M90N4MKze = 7933 + INTEGER(IntKi), PARAMETER :: M90N5MKze = 7934 + INTEGER(IntKi), PARAMETER :: M90N6MKze = 7935 + INTEGER(IntKi), PARAMETER :: M90N7MKze = 7936 + INTEGER(IntKi), PARAMETER :: M90N8MKze = 7937 + INTEGER(IntKi), PARAMETER :: M90N9MKze = 7938 + INTEGER(IntKi), PARAMETER :: M91N1MKze = 7939 + INTEGER(IntKi), PARAMETER :: M91N2MKze = 7940 + INTEGER(IntKi), PARAMETER :: M91N3MKze = 7941 + INTEGER(IntKi), PARAMETER :: M91N4MKze = 7942 + INTEGER(IntKi), PARAMETER :: M91N5MKze = 7943 + INTEGER(IntKi), PARAMETER :: M91N6MKze = 7944 + INTEGER(IntKi), PARAMETER :: M91N7MKze = 7945 + INTEGER(IntKi), PARAMETER :: M91N8MKze = 7946 + INTEGER(IntKi), PARAMETER :: M91N9MKze = 7947 + INTEGER(IntKi), PARAMETER :: M92N1MKze = 7948 + INTEGER(IntKi), PARAMETER :: M92N2MKze = 7949 + INTEGER(IntKi), PARAMETER :: M92N3MKze = 7950 + INTEGER(IntKi), PARAMETER :: M92N4MKze = 7951 + INTEGER(IntKi), PARAMETER :: M92N5MKze = 7952 + INTEGER(IntKi), PARAMETER :: M92N6MKze = 7953 + INTEGER(IntKi), PARAMETER :: M92N7MKze = 7954 + INTEGER(IntKi), PARAMETER :: M92N8MKze = 7955 + INTEGER(IntKi), PARAMETER :: M92N9MKze = 7956 + INTEGER(IntKi), PARAMETER :: M93N1MKze = 7957 + INTEGER(IntKi), PARAMETER :: M93N2MKze = 7958 + INTEGER(IntKi), PARAMETER :: M93N3MKze = 7959 + INTEGER(IntKi), PARAMETER :: M93N4MKze = 7960 + INTEGER(IntKi), PARAMETER :: M93N5MKze = 7961 + INTEGER(IntKi), PARAMETER :: M93N6MKze = 7962 + INTEGER(IntKi), PARAMETER :: M93N7MKze = 7963 + INTEGER(IntKi), PARAMETER :: M93N8MKze = 7964 + INTEGER(IntKi), PARAMETER :: M93N9MKze = 7965 + INTEGER(IntKi), PARAMETER :: M94N1MKze = 7966 + INTEGER(IntKi), PARAMETER :: M94N2MKze = 7967 + INTEGER(IntKi), PARAMETER :: M94N3MKze = 7968 + INTEGER(IntKi), PARAMETER :: M94N4MKze = 7969 + INTEGER(IntKi), PARAMETER :: M94N5MKze = 7970 + INTEGER(IntKi), PARAMETER :: M94N6MKze = 7971 + INTEGER(IntKi), PARAMETER :: M94N7MKze = 7972 + INTEGER(IntKi), PARAMETER :: M94N8MKze = 7973 + INTEGER(IntKi), PARAMETER :: M94N9MKze = 7974 + INTEGER(IntKi), PARAMETER :: M95N1MKze = 7975 + INTEGER(IntKi), PARAMETER :: M95N2MKze = 7976 + INTEGER(IntKi), PARAMETER :: M95N3MKze = 7977 + INTEGER(IntKi), PARAMETER :: M95N4MKze = 7978 + INTEGER(IntKi), PARAMETER :: M95N5MKze = 7979 + INTEGER(IntKi), PARAMETER :: M95N6MKze = 7980 + INTEGER(IntKi), PARAMETER :: M95N7MKze = 7981 + INTEGER(IntKi), PARAMETER :: M95N8MKze = 7982 + INTEGER(IntKi), PARAMETER :: M95N9MKze = 7983 + INTEGER(IntKi), PARAMETER :: M96N1MKze = 7984 + INTEGER(IntKi), PARAMETER :: M96N2MKze = 7985 + INTEGER(IntKi), PARAMETER :: M96N3MKze = 7986 + INTEGER(IntKi), PARAMETER :: M96N4MKze = 7987 + INTEGER(IntKi), PARAMETER :: M96N5MKze = 7988 + INTEGER(IntKi), PARAMETER :: M96N6MKze = 7989 + INTEGER(IntKi), PARAMETER :: M96N7MKze = 7990 + INTEGER(IntKi), PARAMETER :: M96N8MKze = 7991 + INTEGER(IntKi), PARAMETER :: M96N9MKze = 7992 + INTEGER(IntKi), PARAMETER :: M97N1MKze = 7993 + INTEGER(IntKi), PARAMETER :: M97N2MKze = 7994 + INTEGER(IntKi), PARAMETER :: M97N3MKze = 7995 + INTEGER(IntKi), PARAMETER :: M97N4MKze = 7996 + INTEGER(IntKi), PARAMETER :: M97N5MKze = 7997 + INTEGER(IntKi), PARAMETER :: M97N6MKze = 7998 + INTEGER(IntKi), PARAMETER :: M97N7MKze = 7999 + INTEGER(IntKi), PARAMETER :: M97N8MKze = 8000 + INTEGER(IntKi), PARAMETER :: M97N9MKze = 8001 + INTEGER(IntKi), PARAMETER :: M98N1MKze = 8002 + INTEGER(IntKi), PARAMETER :: M98N2MKze = 8003 + INTEGER(IntKi), PARAMETER :: M98N3MKze = 8004 + INTEGER(IntKi), PARAMETER :: M98N4MKze = 8005 + INTEGER(IntKi), PARAMETER :: M98N5MKze = 8006 + INTEGER(IntKi), PARAMETER :: M98N6MKze = 8007 + INTEGER(IntKi), PARAMETER :: M98N7MKze = 8008 + INTEGER(IntKi), PARAMETER :: M98N8MKze = 8009 + INTEGER(IntKi), PARAMETER :: M98N9MKze = 8010 + INTEGER(IntKi), PARAMETER :: M99N1MKze = 8011 + INTEGER(IntKi), PARAMETER :: M99N2MKze = 8012 + INTEGER(IntKi), PARAMETER :: M99N3MKze = 8013 + INTEGER(IntKi), PARAMETER :: M99N4MKze = 8014 + INTEGER(IntKi), PARAMETER :: M99N5MKze = 8015 + INTEGER(IntKi), PARAMETER :: M99N6MKze = 8016 + INTEGER(IntKi), PARAMETER :: M99N7MKze = 8017 + INTEGER(IntKi), PARAMETER :: M99N8MKze = 8018 + INTEGER(IntKi), PARAMETER :: M99N9MKze = 8019 + INTEGER(IntKi), PARAMETER :: M01N1MMxe = 8020 + INTEGER(IntKi), PARAMETER :: M01N2MMxe = 8021 + INTEGER(IntKi), PARAMETER :: M01N3MMxe = 8022 + INTEGER(IntKi), PARAMETER :: M01N4MMxe = 8023 + INTEGER(IntKi), PARAMETER :: M01N5MMxe = 8024 + INTEGER(IntKi), PARAMETER :: M01N6MMxe = 8025 + INTEGER(IntKi), PARAMETER :: M01N7MMxe = 8026 + INTEGER(IntKi), PARAMETER :: M01N8MMxe = 8027 + INTEGER(IntKi), PARAMETER :: M01N9MMxe = 8028 + INTEGER(IntKi), PARAMETER :: M02N1MMxe = 8029 + INTEGER(IntKi), PARAMETER :: M02N2MMxe = 8030 + INTEGER(IntKi), PARAMETER :: M02N3MMxe = 8031 + INTEGER(IntKi), PARAMETER :: M02N4MMxe = 8032 + INTEGER(IntKi), PARAMETER :: M02N5MMxe = 8033 + INTEGER(IntKi), PARAMETER :: M02N6MMxe = 8034 + INTEGER(IntKi), PARAMETER :: M02N7MMxe = 8035 + INTEGER(IntKi), PARAMETER :: M02N8MMxe = 8036 + INTEGER(IntKi), PARAMETER :: M02N9MMxe = 8037 + INTEGER(IntKi), PARAMETER :: M03N1MMxe = 8038 + INTEGER(IntKi), PARAMETER :: M03N2MMxe = 8039 + INTEGER(IntKi), PARAMETER :: M03N3MMxe = 8040 + INTEGER(IntKi), PARAMETER :: M03N4MMxe = 8041 + INTEGER(IntKi), PARAMETER :: M03N5MMxe = 8042 + INTEGER(IntKi), PARAMETER :: M03N6MMxe = 8043 + INTEGER(IntKi), PARAMETER :: M03N7MMxe = 8044 + INTEGER(IntKi), PARAMETER :: M03N8MMxe = 8045 + INTEGER(IntKi), PARAMETER :: M03N9MMxe = 8046 + INTEGER(IntKi), PARAMETER :: M04N1MMxe = 8047 + INTEGER(IntKi), PARAMETER :: M04N2MMxe = 8048 + INTEGER(IntKi), PARAMETER :: M04N3MMxe = 8049 + INTEGER(IntKi), PARAMETER :: M04N4MMxe = 8050 + INTEGER(IntKi), PARAMETER :: M04N5MMxe = 8051 + INTEGER(IntKi), PARAMETER :: M04N6MMxe = 8052 + INTEGER(IntKi), PARAMETER :: M04N7MMxe = 8053 + INTEGER(IntKi), PARAMETER :: M04N8MMxe = 8054 + INTEGER(IntKi), PARAMETER :: M04N9MMxe = 8055 + INTEGER(IntKi), PARAMETER :: M05N1MMxe = 8056 + INTEGER(IntKi), PARAMETER :: M05N2MMxe = 8057 + INTEGER(IntKi), PARAMETER :: M05N3MMxe = 8058 + INTEGER(IntKi), PARAMETER :: M05N4MMxe = 8059 + INTEGER(IntKi), PARAMETER :: M05N5MMxe = 8060 + INTEGER(IntKi), PARAMETER :: M05N6MMxe = 8061 + INTEGER(IntKi), PARAMETER :: M05N7MMxe = 8062 + INTEGER(IntKi), PARAMETER :: M05N8MMxe = 8063 + INTEGER(IntKi), PARAMETER :: M05N9MMxe = 8064 + INTEGER(IntKi), PARAMETER :: M06N1MMxe = 8065 + INTEGER(IntKi), PARAMETER :: M06N2MMxe = 8066 + INTEGER(IntKi), PARAMETER :: M06N3MMxe = 8067 + INTEGER(IntKi), PARAMETER :: M06N4MMxe = 8068 + INTEGER(IntKi), PARAMETER :: M06N5MMxe = 8069 + INTEGER(IntKi), PARAMETER :: M06N6MMxe = 8070 + INTEGER(IntKi), PARAMETER :: M06N7MMxe = 8071 + INTEGER(IntKi), PARAMETER :: M06N8MMxe = 8072 + INTEGER(IntKi), PARAMETER :: M06N9MMxe = 8073 + INTEGER(IntKi), PARAMETER :: M07N1MMxe = 8074 + INTEGER(IntKi), PARAMETER :: M07N2MMxe = 8075 + INTEGER(IntKi), PARAMETER :: M07N3MMxe = 8076 + INTEGER(IntKi), PARAMETER :: M07N4MMxe = 8077 + INTEGER(IntKi), PARAMETER :: M07N5MMxe = 8078 + INTEGER(IntKi), PARAMETER :: M07N6MMxe = 8079 + INTEGER(IntKi), PARAMETER :: M07N7MMxe = 8080 + INTEGER(IntKi), PARAMETER :: M07N8MMxe = 8081 + INTEGER(IntKi), PARAMETER :: M07N9MMxe = 8082 + INTEGER(IntKi), PARAMETER :: M08N1MMxe = 8083 + INTEGER(IntKi), PARAMETER :: M08N2MMxe = 8084 + INTEGER(IntKi), PARAMETER :: M08N3MMxe = 8085 + INTEGER(IntKi), PARAMETER :: M08N4MMxe = 8086 + INTEGER(IntKi), PARAMETER :: M08N5MMxe = 8087 + INTEGER(IntKi), PARAMETER :: M08N6MMxe = 8088 + INTEGER(IntKi), PARAMETER :: M08N7MMxe = 8089 + INTEGER(IntKi), PARAMETER :: M08N8MMxe = 8090 + INTEGER(IntKi), PARAMETER :: M08N9MMxe = 8091 + INTEGER(IntKi), PARAMETER :: M09N1MMxe = 8092 + INTEGER(IntKi), PARAMETER :: M09N2MMxe = 8093 + INTEGER(IntKi), PARAMETER :: M09N3MMxe = 8094 + INTEGER(IntKi), PARAMETER :: M09N4MMxe = 8095 + INTEGER(IntKi), PARAMETER :: M09N5MMxe = 8096 + INTEGER(IntKi), PARAMETER :: M09N6MMxe = 8097 + INTEGER(IntKi), PARAMETER :: M09N7MMxe = 8098 + INTEGER(IntKi), PARAMETER :: M09N8MMxe = 8099 + INTEGER(IntKi), PARAMETER :: M09N9MMxe = 8100 + INTEGER(IntKi), PARAMETER :: M10N1MMxe = 8101 + INTEGER(IntKi), PARAMETER :: M10N2MMxe = 8102 + INTEGER(IntKi), PARAMETER :: M10N3MMxe = 8103 + INTEGER(IntKi), PARAMETER :: M10N4MMxe = 8104 + INTEGER(IntKi), PARAMETER :: M10N5MMxe = 8105 + INTEGER(IntKi), PARAMETER :: M10N6MMxe = 8106 + INTEGER(IntKi), PARAMETER :: M10N7MMxe = 8107 + INTEGER(IntKi), PARAMETER :: M10N8MMxe = 8108 + INTEGER(IntKi), PARAMETER :: M10N9MMxe = 8109 + INTEGER(IntKi), PARAMETER :: M11N1MMxe = 8110 + INTEGER(IntKi), PARAMETER :: M11N2MMxe = 8111 + INTEGER(IntKi), PARAMETER :: M11N3MMxe = 8112 + INTEGER(IntKi), PARAMETER :: M11N4MMxe = 8113 + INTEGER(IntKi), PARAMETER :: M11N5MMxe = 8114 + INTEGER(IntKi), PARAMETER :: M11N6MMxe = 8115 + INTEGER(IntKi), PARAMETER :: M11N7MMxe = 8116 + INTEGER(IntKi), PARAMETER :: M11N8MMxe = 8117 + INTEGER(IntKi), PARAMETER :: M11N9MMxe = 8118 + INTEGER(IntKi), PARAMETER :: M12N1MMxe = 8119 + INTEGER(IntKi), PARAMETER :: M12N2MMxe = 8120 + INTEGER(IntKi), PARAMETER :: M12N3MMxe = 8121 + INTEGER(IntKi), PARAMETER :: M12N4MMxe = 8122 + INTEGER(IntKi), PARAMETER :: M12N5MMxe = 8123 + INTEGER(IntKi), PARAMETER :: M12N6MMxe = 8124 + INTEGER(IntKi), PARAMETER :: M12N7MMxe = 8125 + INTEGER(IntKi), PARAMETER :: M12N8MMxe = 8126 + INTEGER(IntKi), PARAMETER :: M12N9MMxe = 8127 + INTEGER(IntKi), PARAMETER :: M13N1MMxe = 8128 + INTEGER(IntKi), PARAMETER :: M13N2MMxe = 8129 + INTEGER(IntKi), PARAMETER :: M13N3MMxe = 8130 + INTEGER(IntKi), PARAMETER :: M13N4MMxe = 8131 + INTEGER(IntKi), PARAMETER :: M13N5MMxe = 8132 + INTEGER(IntKi), PARAMETER :: M13N6MMxe = 8133 + INTEGER(IntKi), PARAMETER :: M13N7MMxe = 8134 + INTEGER(IntKi), PARAMETER :: M13N8MMxe = 8135 + INTEGER(IntKi), PARAMETER :: M13N9MMxe = 8136 + INTEGER(IntKi), PARAMETER :: M14N1MMxe = 8137 + INTEGER(IntKi), PARAMETER :: M14N2MMxe = 8138 + INTEGER(IntKi), PARAMETER :: M14N3MMxe = 8139 + INTEGER(IntKi), PARAMETER :: M14N4MMxe = 8140 + INTEGER(IntKi), PARAMETER :: M14N5MMxe = 8141 + INTEGER(IntKi), PARAMETER :: M14N6MMxe = 8142 + INTEGER(IntKi), PARAMETER :: M14N7MMxe = 8143 + INTEGER(IntKi), PARAMETER :: M14N8MMxe = 8144 + INTEGER(IntKi), PARAMETER :: M14N9MMxe = 8145 + INTEGER(IntKi), PARAMETER :: M15N1MMxe = 8146 + INTEGER(IntKi), PARAMETER :: M15N2MMxe = 8147 + INTEGER(IntKi), PARAMETER :: M15N3MMxe = 8148 + INTEGER(IntKi), PARAMETER :: M15N4MMxe = 8149 + INTEGER(IntKi), PARAMETER :: M15N5MMxe = 8150 + INTEGER(IntKi), PARAMETER :: M15N6MMxe = 8151 + INTEGER(IntKi), PARAMETER :: M15N7MMxe = 8152 + INTEGER(IntKi), PARAMETER :: M15N8MMxe = 8153 + INTEGER(IntKi), PARAMETER :: M15N9MMxe = 8154 + INTEGER(IntKi), PARAMETER :: M16N1MMxe = 8155 + INTEGER(IntKi), PARAMETER :: M16N2MMxe = 8156 + INTEGER(IntKi), PARAMETER :: M16N3MMxe = 8157 + INTEGER(IntKi), PARAMETER :: M16N4MMxe = 8158 + INTEGER(IntKi), PARAMETER :: M16N5MMxe = 8159 + INTEGER(IntKi), PARAMETER :: M16N6MMxe = 8160 + INTEGER(IntKi), PARAMETER :: M16N7MMxe = 8161 + INTEGER(IntKi), PARAMETER :: M16N8MMxe = 8162 + INTEGER(IntKi), PARAMETER :: M16N9MMxe = 8163 + INTEGER(IntKi), PARAMETER :: M17N1MMxe = 8164 + INTEGER(IntKi), PARAMETER :: M17N2MMxe = 8165 + INTEGER(IntKi), PARAMETER :: M17N3MMxe = 8166 + INTEGER(IntKi), PARAMETER :: M17N4MMxe = 8167 + INTEGER(IntKi), PARAMETER :: M17N5MMxe = 8168 + INTEGER(IntKi), PARAMETER :: M17N6MMxe = 8169 + INTEGER(IntKi), PARAMETER :: M17N7MMxe = 8170 + INTEGER(IntKi), PARAMETER :: M17N8MMxe = 8171 + INTEGER(IntKi), PARAMETER :: M17N9MMxe = 8172 + INTEGER(IntKi), PARAMETER :: M18N1MMxe = 8173 + INTEGER(IntKi), PARAMETER :: M18N2MMxe = 8174 + INTEGER(IntKi), PARAMETER :: M18N3MMxe = 8175 + INTEGER(IntKi), PARAMETER :: M18N4MMxe = 8176 + INTEGER(IntKi), PARAMETER :: M18N5MMxe = 8177 + INTEGER(IntKi), PARAMETER :: M18N6MMxe = 8178 + INTEGER(IntKi), PARAMETER :: M18N7MMxe = 8179 + INTEGER(IntKi), PARAMETER :: M18N8MMxe = 8180 + INTEGER(IntKi), PARAMETER :: M18N9MMxe = 8181 + INTEGER(IntKi), PARAMETER :: M19N1MMxe = 8182 + INTEGER(IntKi), PARAMETER :: M19N2MMxe = 8183 + INTEGER(IntKi), PARAMETER :: M19N3MMxe = 8184 + INTEGER(IntKi), PARAMETER :: M19N4MMxe = 8185 + INTEGER(IntKi), PARAMETER :: M19N5MMxe = 8186 + INTEGER(IntKi), PARAMETER :: M19N6MMxe = 8187 + INTEGER(IntKi), PARAMETER :: M19N7MMxe = 8188 + INTEGER(IntKi), PARAMETER :: M19N8MMxe = 8189 + INTEGER(IntKi), PARAMETER :: M19N9MMxe = 8190 + INTEGER(IntKi), PARAMETER :: M20N1MMxe = 8191 + INTEGER(IntKi), PARAMETER :: M20N2MMxe = 8192 + INTEGER(IntKi), PARAMETER :: M20N3MMxe = 8193 + INTEGER(IntKi), PARAMETER :: M20N4MMxe = 8194 + INTEGER(IntKi), PARAMETER :: M20N5MMxe = 8195 + INTEGER(IntKi), PARAMETER :: M20N6MMxe = 8196 + INTEGER(IntKi), PARAMETER :: M20N7MMxe = 8197 + INTEGER(IntKi), PARAMETER :: M20N8MMxe = 8198 + INTEGER(IntKi), PARAMETER :: M20N9MMxe = 8199 + INTEGER(IntKi), PARAMETER :: M21N1MMxe = 8200 + INTEGER(IntKi), PARAMETER :: M21N2MMxe = 8201 + INTEGER(IntKi), PARAMETER :: M21N3MMxe = 8202 + INTEGER(IntKi), PARAMETER :: M21N4MMxe = 8203 + INTEGER(IntKi), PARAMETER :: M21N5MMxe = 8204 + INTEGER(IntKi), PARAMETER :: M21N6MMxe = 8205 + INTEGER(IntKi), PARAMETER :: M21N7MMxe = 8206 + INTEGER(IntKi), PARAMETER :: M21N8MMxe = 8207 + INTEGER(IntKi), PARAMETER :: M21N9MMxe = 8208 + INTEGER(IntKi), PARAMETER :: M22N1MMxe = 8209 + INTEGER(IntKi), PARAMETER :: M22N2MMxe = 8210 + INTEGER(IntKi), PARAMETER :: M22N3MMxe = 8211 + INTEGER(IntKi), PARAMETER :: M22N4MMxe = 8212 + INTEGER(IntKi), PARAMETER :: M22N5MMxe = 8213 + INTEGER(IntKi), PARAMETER :: M22N6MMxe = 8214 + INTEGER(IntKi), PARAMETER :: M22N7MMxe = 8215 + INTEGER(IntKi), PARAMETER :: M22N8MMxe = 8216 + INTEGER(IntKi), PARAMETER :: M22N9MMxe = 8217 + INTEGER(IntKi), PARAMETER :: M23N1MMxe = 8218 + INTEGER(IntKi), PARAMETER :: M23N2MMxe = 8219 + INTEGER(IntKi), PARAMETER :: M23N3MMxe = 8220 + INTEGER(IntKi), PARAMETER :: M23N4MMxe = 8221 + INTEGER(IntKi), PARAMETER :: M23N5MMxe = 8222 + INTEGER(IntKi), PARAMETER :: M23N6MMxe = 8223 + INTEGER(IntKi), PARAMETER :: M23N7MMxe = 8224 + INTEGER(IntKi), PARAMETER :: M23N8MMxe = 8225 + INTEGER(IntKi), PARAMETER :: M23N9MMxe = 8226 + INTEGER(IntKi), PARAMETER :: M24N1MMxe = 8227 + INTEGER(IntKi), PARAMETER :: M24N2MMxe = 8228 + INTEGER(IntKi), PARAMETER :: M24N3MMxe = 8229 + INTEGER(IntKi), PARAMETER :: M24N4MMxe = 8230 + INTEGER(IntKi), PARAMETER :: M24N5MMxe = 8231 + INTEGER(IntKi), PARAMETER :: M24N6MMxe = 8232 + INTEGER(IntKi), PARAMETER :: M24N7MMxe = 8233 + INTEGER(IntKi), PARAMETER :: M24N8MMxe = 8234 + INTEGER(IntKi), PARAMETER :: M24N9MMxe = 8235 + INTEGER(IntKi), PARAMETER :: M25N1MMxe = 8236 + INTEGER(IntKi), PARAMETER :: M25N2MMxe = 8237 + INTEGER(IntKi), PARAMETER :: M25N3MMxe = 8238 + INTEGER(IntKi), PARAMETER :: M25N4MMxe = 8239 + INTEGER(IntKi), PARAMETER :: M25N5MMxe = 8240 + INTEGER(IntKi), PARAMETER :: M25N6MMxe = 8241 + INTEGER(IntKi), PARAMETER :: M25N7MMxe = 8242 + INTEGER(IntKi), PARAMETER :: M25N8MMxe = 8243 + INTEGER(IntKi), PARAMETER :: M25N9MMxe = 8244 + INTEGER(IntKi), PARAMETER :: M26N1MMxe = 8245 + INTEGER(IntKi), PARAMETER :: M26N2MMxe = 8246 + INTEGER(IntKi), PARAMETER :: M26N3MMxe = 8247 + INTEGER(IntKi), PARAMETER :: M26N4MMxe = 8248 + INTEGER(IntKi), PARAMETER :: M26N5MMxe = 8249 + INTEGER(IntKi), PARAMETER :: M26N6MMxe = 8250 + INTEGER(IntKi), PARAMETER :: M26N7MMxe = 8251 + INTEGER(IntKi), PARAMETER :: M26N8MMxe = 8252 + INTEGER(IntKi), PARAMETER :: M26N9MMxe = 8253 + INTEGER(IntKi), PARAMETER :: M27N1MMxe = 8254 + INTEGER(IntKi), PARAMETER :: M27N2MMxe = 8255 + INTEGER(IntKi), PARAMETER :: M27N3MMxe = 8256 + INTEGER(IntKi), PARAMETER :: M27N4MMxe = 8257 + INTEGER(IntKi), PARAMETER :: M27N5MMxe = 8258 + INTEGER(IntKi), PARAMETER :: M27N6MMxe = 8259 + INTEGER(IntKi), PARAMETER :: M27N7MMxe = 8260 + INTEGER(IntKi), PARAMETER :: M27N8MMxe = 8261 + INTEGER(IntKi), PARAMETER :: M27N9MMxe = 8262 + INTEGER(IntKi), PARAMETER :: M28N1MMxe = 8263 + INTEGER(IntKi), PARAMETER :: M28N2MMxe = 8264 + INTEGER(IntKi), PARAMETER :: M28N3MMxe = 8265 + INTEGER(IntKi), PARAMETER :: M28N4MMxe = 8266 + INTEGER(IntKi), PARAMETER :: M28N5MMxe = 8267 + INTEGER(IntKi), PARAMETER :: M28N6MMxe = 8268 + INTEGER(IntKi), PARAMETER :: M28N7MMxe = 8269 + INTEGER(IntKi), PARAMETER :: M28N8MMxe = 8270 + INTEGER(IntKi), PARAMETER :: M28N9MMxe = 8271 + INTEGER(IntKi), PARAMETER :: M29N1MMxe = 8272 + INTEGER(IntKi), PARAMETER :: M29N2MMxe = 8273 + INTEGER(IntKi), PARAMETER :: M29N3MMxe = 8274 + INTEGER(IntKi), PARAMETER :: M29N4MMxe = 8275 + INTEGER(IntKi), PARAMETER :: M29N5MMxe = 8276 + INTEGER(IntKi), PARAMETER :: M29N6MMxe = 8277 + INTEGER(IntKi), PARAMETER :: M29N7MMxe = 8278 + INTEGER(IntKi), PARAMETER :: M29N8MMxe = 8279 + INTEGER(IntKi), PARAMETER :: M29N9MMxe = 8280 + INTEGER(IntKi), PARAMETER :: M30N1MMxe = 8281 + INTEGER(IntKi), PARAMETER :: M30N2MMxe = 8282 + INTEGER(IntKi), PARAMETER :: M30N3MMxe = 8283 + INTEGER(IntKi), PARAMETER :: M30N4MMxe = 8284 + INTEGER(IntKi), PARAMETER :: M30N5MMxe = 8285 + INTEGER(IntKi), PARAMETER :: M30N6MMxe = 8286 + INTEGER(IntKi), PARAMETER :: M30N7MMxe = 8287 + INTEGER(IntKi), PARAMETER :: M30N8MMxe = 8288 + INTEGER(IntKi), PARAMETER :: M30N9MMxe = 8289 + INTEGER(IntKi), PARAMETER :: M31N1MMxe = 8290 + INTEGER(IntKi), PARAMETER :: M31N2MMxe = 8291 + INTEGER(IntKi), PARAMETER :: M31N3MMxe = 8292 + INTEGER(IntKi), PARAMETER :: M31N4MMxe = 8293 + INTEGER(IntKi), PARAMETER :: M31N5MMxe = 8294 + INTEGER(IntKi), PARAMETER :: M31N6MMxe = 8295 + INTEGER(IntKi), PARAMETER :: M31N7MMxe = 8296 + INTEGER(IntKi), PARAMETER :: M31N8MMxe = 8297 + INTEGER(IntKi), PARAMETER :: M31N9MMxe = 8298 + INTEGER(IntKi), PARAMETER :: M32N1MMxe = 8299 + INTEGER(IntKi), PARAMETER :: M32N2MMxe = 8300 + INTEGER(IntKi), PARAMETER :: M32N3MMxe = 8301 + INTEGER(IntKi), PARAMETER :: M32N4MMxe = 8302 + INTEGER(IntKi), PARAMETER :: M32N5MMxe = 8303 + INTEGER(IntKi), PARAMETER :: M32N6MMxe = 8304 + INTEGER(IntKi), PARAMETER :: M32N7MMxe = 8305 + INTEGER(IntKi), PARAMETER :: M32N8MMxe = 8306 + INTEGER(IntKi), PARAMETER :: M32N9MMxe = 8307 + INTEGER(IntKi), PARAMETER :: M33N1MMxe = 8308 + INTEGER(IntKi), PARAMETER :: M33N2MMxe = 8309 + INTEGER(IntKi), PARAMETER :: M33N3MMxe = 8310 + INTEGER(IntKi), PARAMETER :: M33N4MMxe = 8311 + INTEGER(IntKi), PARAMETER :: M33N5MMxe = 8312 + INTEGER(IntKi), PARAMETER :: M33N6MMxe = 8313 + INTEGER(IntKi), PARAMETER :: M33N7MMxe = 8314 + INTEGER(IntKi), PARAMETER :: M33N8MMxe = 8315 + INTEGER(IntKi), PARAMETER :: M33N9MMxe = 8316 + INTEGER(IntKi), PARAMETER :: M34N1MMxe = 8317 + INTEGER(IntKi), PARAMETER :: M34N2MMxe = 8318 + INTEGER(IntKi), PARAMETER :: M34N3MMxe = 8319 + INTEGER(IntKi), PARAMETER :: M34N4MMxe = 8320 + INTEGER(IntKi), PARAMETER :: M34N5MMxe = 8321 + INTEGER(IntKi), PARAMETER :: M34N6MMxe = 8322 + INTEGER(IntKi), PARAMETER :: M34N7MMxe = 8323 + INTEGER(IntKi), PARAMETER :: M34N8MMxe = 8324 + INTEGER(IntKi), PARAMETER :: M34N9MMxe = 8325 + INTEGER(IntKi), PARAMETER :: M35N1MMxe = 8326 + INTEGER(IntKi), PARAMETER :: M35N2MMxe = 8327 + INTEGER(IntKi), PARAMETER :: M35N3MMxe = 8328 + INTEGER(IntKi), PARAMETER :: M35N4MMxe = 8329 + INTEGER(IntKi), PARAMETER :: M35N5MMxe = 8330 + INTEGER(IntKi), PARAMETER :: M35N6MMxe = 8331 + INTEGER(IntKi), PARAMETER :: M35N7MMxe = 8332 + INTEGER(IntKi), PARAMETER :: M35N8MMxe = 8333 + INTEGER(IntKi), PARAMETER :: M35N9MMxe = 8334 + INTEGER(IntKi), PARAMETER :: M36N1MMxe = 8335 + INTEGER(IntKi), PARAMETER :: M36N2MMxe = 8336 + INTEGER(IntKi), PARAMETER :: M36N3MMxe = 8337 + INTEGER(IntKi), PARAMETER :: M36N4MMxe = 8338 + INTEGER(IntKi), PARAMETER :: M36N5MMxe = 8339 + INTEGER(IntKi), PARAMETER :: M36N6MMxe = 8340 + INTEGER(IntKi), PARAMETER :: M36N7MMxe = 8341 + INTEGER(IntKi), PARAMETER :: M36N8MMxe = 8342 + INTEGER(IntKi), PARAMETER :: M36N9MMxe = 8343 + INTEGER(IntKi), PARAMETER :: M37N1MMxe = 8344 + INTEGER(IntKi), PARAMETER :: M37N2MMxe = 8345 + INTEGER(IntKi), PARAMETER :: M37N3MMxe = 8346 + INTEGER(IntKi), PARAMETER :: M37N4MMxe = 8347 + INTEGER(IntKi), PARAMETER :: M37N5MMxe = 8348 + INTEGER(IntKi), PARAMETER :: M37N6MMxe = 8349 + INTEGER(IntKi), PARAMETER :: M37N7MMxe = 8350 + INTEGER(IntKi), PARAMETER :: M37N8MMxe = 8351 + INTEGER(IntKi), PARAMETER :: M37N9MMxe = 8352 + INTEGER(IntKi), PARAMETER :: M38N1MMxe = 8353 + INTEGER(IntKi), PARAMETER :: M38N2MMxe = 8354 + INTEGER(IntKi), PARAMETER :: M38N3MMxe = 8355 + INTEGER(IntKi), PARAMETER :: M38N4MMxe = 8356 + INTEGER(IntKi), PARAMETER :: M38N5MMxe = 8357 + INTEGER(IntKi), PARAMETER :: M38N6MMxe = 8358 + INTEGER(IntKi), PARAMETER :: M38N7MMxe = 8359 + INTEGER(IntKi), PARAMETER :: M38N8MMxe = 8360 + INTEGER(IntKi), PARAMETER :: M38N9MMxe = 8361 + INTEGER(IntKi), PARAMETER :: M39N1MMxe = 8362 + INTEGER(IntKi), PARAMETER :: M39N2MMxe = 8363 + INTEGER(IntKi), PARAMETER :: M39N3MMxe = 8364 + INTEGER(IntKi), PARAMETER :: M39N4MMxe = 8365 + INTEGER(IntKi), PARAMETER :: M39N5MMxe = 8366 + INTEGER(IntKi), PARAMETER :: M39N6MMxe = 8367 + INTEGER(IntKi), PARAMETER :: M39N7MMxe = 8368 + INTEGER(IntKi), PARAMETER :: M39N8MMxe = 8369 + INTEGER(IntKi), PARAMETER :: M39N9MMxe = 8370 + INTEGER(IntKi), PARAMETER :: M40N1MMxe = 8371 + INTEGER(IntKi), PARAMETER :: M40N2MMxe = 8372 + INTEGER(IntKi), PARAMETER :: M40N3MMxe = 8373 + INTEGER(IntKi), PARAMETER :: M40N4MMxe = 8374 + INTEGER(IntKi), PARAMETER :: M40N5MMxe = 8375 + INTEGER(IntKi), PARAMETER :: M40N6MMxe = 8376 + INTEGER(IntKi), PARAMETER :: M40N7MMxe = 8377 + INTEGER(IntKi), PARAMETER :: M40N8MMxe = 8378 + INTEGER(IntKi), PARAMETER :: M40N9MMxe = 8379 + INTEGER(IntKi), PARAMETER :: M41N1MMxe = 8380 + INTEGER(IntKi), PARAMETER :: M41N2MMxe = 8381 + INTEGER(IntKi), PARAMETER :: M41N3MMxe = 8382 + INTEGER(IntKi), PARAMETER :: M41N4MMxe = 8383 + INTEGER(IntKi), PARAMETER :: M41N5MMxe = 8384 + INTEGER(IntKi), PARAMETER :: M41N6MMxe = 8385 + INTEGER(IntKi), PARAMETER :: M41N7MMxe = 8386 + INTEGER(IntKi), PARAMETER :: M41N8MMxe = 8387 + INTEGER(IntKi), PARAMETER :: M41N9MMxe = 8388 + INTEGER(IntKi), PARAMETER :: M42N1MMxe = 8389 + INTEGER(IntKi), PARAMETER :: M42N2MMxe = 8390 + INTEGER(IntKi), PARAMETER :: M42N3MMxe = 8391 + INTEGER(IntKi), PARAMETER :: M42N4MMxe = 8392 + INTEGER(IntKi), PARAMETER :: M42N5MMxe = 8393 + INTEGER(IntKi), PARAMETER :: M42N6MMxe = 8394 + INTEGER(IntKi), PARAMETER :: M42N7MMxe = 8395 + INTEGER(IntKi), PARAMETER :: M42N8MMxe = 8396 + INTEGER(IntKi), PARAMETER :: M42N9MMxe = 8397 + INTEGER(IntKi), PARAMETER :: M43N1MMxe = 8398 + INTEGER(IntKi), PARAMETER :: M43N2MMxe = 8399 + INTEGER(IntKi), PARAMETER :: M43N3MMxe = 8400 + INTEGER(IntKi), PARAMETER :: M43N4MMxe = 8401 + INTEGER(IntKi), PARAMETER :: M43N5MMxe = 8402 + INTEGER(IntKi), PARAMETER :: M43N6MMxe = 8403 + INTEGER(IntKi), PARAMETER :: M43N7MMxe = 8404 + INTEGER(IntKi), PARAMETER :: M43N8MMxe = 8405 + INTEGER(IntKi), PARAMETER :: M43N9MMxe = 8406 + INTEGER(IntKi), PARAMETER :: M44N1MMxe = 8407 + INTEGER(IntKi), PARAMETER :: M44N2MMxe = 8408 + INTEGER(IntKi), PARAMETER :: M44N3MMxe = 8409 + INTEGER(IntKi), PARAMETER :: M44N4MMxe = 8410 + INTEGER(IntKi), PARAMETER :: M44N5MMxe = 8411 + INTEGER(IntKi), PARAMETER :: M44N6MMxe = 8412 + INTEGER(IntKi), PARAMETER :: M44N7MMxe = 8413 + INTEGER(IntKi), PARAMETER :: M44N8MMxe = 8414 + INTEGER(IntKi), PARAMETER :: M44N9MMxe = 8415 + INTEGER(IntKi), PARAMETER :: M45N1MMxe = 8416 + INTEGER(IntKi), PARAMETER :: M45N2MMxe = 8417 + INTEGER(IntKi), PARAMETER :: M45N3MMxe = 8418 + INTEGER(IntKi), PARAMETER :: M45N4MMxe = 8419 + INTEGER(IntKi), PARAMETER :: M45N5MMxe = 8420 + INTEGER(IntKi), PARAMETER :: M45N6MMxe = 8421 + INTEGER(IntKi), PARAMETER :: M45N7MMxe = 8422 + INTEGER(IntKi), PARAMETER :: M45N8MMxe = 8423 + INTEGER(IntKi), PARAMETER :: M45N9MMxe = 8424 + INTEGER(IntKi), PARAMETER :: M46N1MMxe = 8425 + INTEGER(IntKi), PARAMETER :: M46N2MMxe = 8426 + INTEGER(IntKi), PARAMETER :: M46N3MMxe = 8427 + INTEGER(IntKi), PARAMETER :: M46N4MMxe = 8428 + INTEGER(IntKi), PARAMETER :: M46N5MMxe = 8429 + INTEGER(IntKi), PARAMETER :: M46N6MMxe = 8430 + INTEGER(IntKi), PARAMETER :: M46N7MMxe = 8431 + INTEGER(IntKi), PARAMETER :: M46N8MMxe = 8432 + INTEGER(IntKi), PARAMETER :: M46N9MMxe = 8433 + INTEGER(IntKi), PARAMETER :: M47N1MMxe = 8434 + INTEGER(IntKi), PARAMETER :: M47N2MMxe = 8435 + INTEGER(IntKi), PARAMETER :: M47N3MMxe = 8436 + INTEGER(IntKi), PARAMETER :: M47N4MMxe = 8437 + INTEGER(IntKi), PARAMETER :: M47N5MMxe = 8438 + INTEGER(IntKi), PARAMETER :: M47N6MMxe = 8439 + INTEGER(IntKi), PARAMETER :: M47N7MMxe = 8440 + INTEGER(IntKi), PARAMETER :: M47N8MMxe = 8441 + INTEGER(IntKi), PARAMETER :: M47N9MMxe = 8442 + INTEGER(IntKi), PARAMETER :: M48N1MMxe = 8443 + INTEGER(IntKi), PARAMETER :: M48N2MMxe = 8444 + INTEGER(IntKi), PARAMETER :: M48N3MMxe = 8445 + INTEGER(IntKi), PARAMETER :: M48N4MMxe = 8446 + INTEGER(IntKi), PARAMETER :: M48N5MMxe = 8447 + INTEGER(IntKi), PARAMETER :: M48N6MMxe = 8448 + INTEGER(IntKi), PARAMETER :: M48N7MMxe = 8449 + INTEGER(IntKi), PARAMETER :: M48N8MMxe = 8450 + INTEGER(IntKi), PARAMETER :: M48N9MMxe = 8451 + INTEGER(IntKi), PARAMETER :: M49N1MMxe = 8452 + INTEGER(IntKi), PARAMETER :: M49N2MMxe = 8453 + INTEGER(IntKi), PARAMETER :: M49N3MMxe = 8454 + INTEGER(IntKi), PARAMETER :: M49N4MMxe = 8455 + INTEGER(IntKi), PARAMETER :: M49N5MMxe = 8456 + INTEGER(IntKi), PARAMETER :: M49N6MMxe = 8457 + INTEGER(IntKi), PARAMETER :: M49N7MMxe = 8458 + INTEGER(IntKi), PARAMETER :: M49N8MMxe = 8459 + INTEGER(IntKi), PARAMETER :: M49N9MMxe = 8460 + INTEGER(IntKi), PARAMETER :: M50N1MMxe = 8461 + INTEGER(IntKi), PARAMETER :: M50N2MMxe = 8462 + INTEGER(IntKi), PARAMETER :: M50N3MMxe = 8463 + INTEGER(IntKi), PARAMETER :: M50N4MMxe = 8464 + INTEGER(IntKi), PARAMETER :: M50N5MMxe = 8465 + INTEGER(IntKi), PARAMETER :: M50N6MMxe = 8466 + INTEGER(IntKi), PARAMETER :: M50N7MMxe = 8467 + INTEGER(IntKi), PARAMETER :: M50N8MMxe = 8468 + INTEGER(IntKi), PARAMETER :: M50N9MMxe = 8469 + INTEGER(IntKi), PARAMETER :: M51N1MMxe = 8470 + INTEGER(IntKi), PARAMETER :: M51N2MMxe = 8471 + INTEGER(IntKi), PARAMETER :: M51N3MMxe = 8472 + INTEGER(IntKi), PARAMETER :: M51N4MMxe = 8473 + INTEGER(IntKi), PARAMETER :: M51N5MMxe = 8474 + INTEGER(IntKi), PARAMETER :: M51N6MMxe = 8475 + INTEGER(IntKi), PARAMETER :: M51N7MMxe = 8476 + INTEGER(IntKi), PARAMETER :: M51N8MMxe = 8477 + INTEGER(IntKi), PARAMETER :: M51N9MMxe = 8478 + INTEGER(IntKi), PARAMETER :: M52N1MMxe = 8479 + INTEGER(IntKi), PARAMETER :: M52N2MMxe = 8480 + INTEGER(IntKi), PARAMETER :: M52N3MMxe = 8481 + INTEGER(IntKi), PARAMETER :: M52N4MMxe = 8482 + INTEGER(IntKi), PARAMETER :: M52N5MMxe = 8483 + INTEGER(IntKi), PARAMETER :: M52N6MMxe = 8484 + INTEGER(IntKi), PARAMETER :: M52N7MMxe = 8485 + INTEGER(IntKi), PARAMETER :: M52N8MMxe = 8486 + INTEGER(IntKi), PARAMETER :: M52N9MMxe = 8487 + INTEGER(IntKi), PARAMETER :: M53N1MMxe = 8488 + INTEGER(IntKi), PARAMETER :: M53N2MMxe = 8489 + INTEGER(IntKi), PARAMETER :: M53N3MMxe = 8490 + INTEGER(IntKi), PARAMETER :: M53N4MMxe = 8491 + INTEGER(IntKi), PARAMETER :: M53N5MMxe = 8492 + INTEGER(IntKi), PARAMETER :: M53N6MMxe = 8493 + INTEGER(IntKi), PARAMETER :: M53N7MMxe = 8494 + INTEGER(IntKi), PARAMETER :: M53N8MMxe = 8495 + INTEGER(IntKi), PARAMETER :: M53N9MMxe = 8496 + INTEGER(IntKi), PARAMETER :: M54N1MMxe = 8497 + INTEGER(IntKi), PARAMETER :: M54N2MMxe = 8498 + INTEGER(IntKi), PARAMETER :: M54N3MMxe = 8499 + INTEGER(IntKi), PARAMETER :: M54N4MMxe = 8500 + INTEGER(IntKi), PARAMETER :: M54N5MMxe = 8501 + INTEGER(IntKi), PARAMETER :: M54N6MMxe = 8502 + INTEGER(IntKi), PARAMETER :: M54N7MMxe = 8503 + INTEGER(IntKi), PARAMETER :: M54N8MMxe = 8504 + INTEGER(IntKi), PARAMETER :: M54N9MMxe = 8505 + INTEGER(IntKi), PARAMETER :: M55N1MMxe = 8506 + INTEGER(IntKi), PARAMETER :: M55N2MMxe = 8507 + INTEGER(IntKi), PARAMETER :: M55N3MMxe = 8508 + INTEGER(IntKi), PARAMETER :: M55N4MMxe = 8509 + INTEGER(IntKi), PARAMETER :: M55N5MMxe = 8510 + INTEGER(IntKi), PARAMETER :: M55N6MMxe = 8511 + INTEGER(IntKi), PARAMETER :: M55N7MMxe = 8512 + INTEGER(IntKi), PARAMETER :: M55N8MMxe = 8513 + INTEGER(IntKi), PARAMETER :: M55N9MMxe = 8514 + INTEGER(IntKi), PARAMETER :: M56N1MMxe = 8515 + INTEGER(IntKi), PARAMETER :: M56N2MMxe = 8516 + INTEGER(IntKi), PARAMETER :: M56N3MMxe = 8517 + INTEGER(IntKi), PARAMETER :: M56N4MMxe = 8518 + INTEGER(IntKi), PARAMETER :: M56N5MMxe = 8519 + INTEGER(IntKi), PARAMETER :: M56N6MMxe = 8520 + INTEGER(IntKi), PARAMETER :: M56N7MMxe = 8521 + INTEGER(IntKi), PARAMETER :: M56N8MMxe = 8522 + INTEGER(IntKi), PARAMETER :: M56N9MMxe = 8523 + INTEGER(IntKi), PARAMETER :: M57N1MMxe = 8524 + INTEGER(IntKi), PARAMETER :: M57N2MMxe = 8525 + INTEGER(IntKi), PARAMETER :: M57N3MMxe = 8526 + INTEGER(IntKi), PARAMETER :: M57N4MMxe = 8527 + INTEGER(IntKi), PARAMETER :: M57N5MMxe = 8528 + INTEGER(IntKi), PARAMETER :: M57N6MMxe = 8529 + INTEGER(IntKi), PARAMETER :: M57N7MMxe = 8530 + INTEGER(IntKi), PARAMETER :: M57N8MMxe = 8531 + INTEGER(IntKi), PARAMETER :: M57N9MMxe = 8532 + INTEGER(IntKi), PARAMETER :: M58N1MMxe = 8533 + INTEGER(IntKi), PARAMETER :: M58N2MMxe = 8534 + INTEGER(IntKi), PARAMETER :: M58N3MMxe = 8535 + INTEGER(IntKi), PARAMETER :: M58N4MMxe = 8536 + INTEGER(IntKi), PARAMETER :: M58N5MMxe = 8537 + INTEGER(IntKi), PARAMETER :: M58N6MMxe = 8538 + INTEGER(IntKi), PARAMETER :: M58N7MMxe = 8539 + INTEGER(IntKi), PARAMETER :: M58N8MMxe = 8540 + INTEGER(IntKi), PARAMETER :: M58N9MMxe = 8541 + INTEGER(IntKi), PARAMETER :: M59N1MMxe = 8542 + INTEGER(IntKi), PARAMETER :: M59N2MMxe = 8543 + INTEGER(IntKi), PARAMETER :: M59N3MMxe = 8544 + INTEGER(IntKi), PARAMETER :: M59N4MMxe = 8545 + INTEGER(IntKi), PARAMETER :: M59N5MMxe = 8546 + INTEGER(IntKi), PARAMETER :: M59N6MMxe = 8547 + INTEGER(IntKi), PARAMETER :: M59N7MMxe = 8548 + INTEGER(IntKi), PARAMETER :: M59N8MMxe = 8549 + INTEGER(IntKi), PARAMETER :: M59N9MMxe = 8550 + INTEGER(IntKi), PARAMETER :: M60N1MMxe = 8551 + INTEGER(IntKi), PARAMETER :: M60N2MMxe = 8552 + INTEGER(IntKi), PARAMETER :: M60N3MMxe = 8553 + INTEGER(IntKi), PARAMETER :: M60N4MMxe = 8554 + INTEGER(IntKi), PARAMETER :: M60N5MMxe = 8555 + INTEGER(IntKi), PARAMETER :: M60N6MMxe = 8556 + INTEGER(IntKi), PARAMETER :: M60N7MMxe = 8557 + INTEGER(IntKi), PARAMETER :: M60N8MMxe = 8558 + INTEGER(IntKi), PARAMETER :: M60N9MMxe = 8559 + INTEGER(IntKi), PARAMETER :: M61N1MMxe = 8560 + INTEGER(IntKi), PARAMETER :: M61N2MMxe = 8561 + INTEGER(IntKi), PARAMETER :: M61N3MMxe = 8562 + INTEGER(IntKi), PARAMETER :: M61N4MMxe = 8563 + INTEGER(IntKi), PARAMETER :: M61N5MMxe = 8564 + INTEGER(IntKi), PARAMETER :: M61N6MMxe = 8565 + INTEGER(IntKi), PARAMETER :: M61N7MMxe = 8566 + INTEGER(IntKi), PARAMETER :: M61N8MMxe = 8567 + INTEGER(IntKi), PARAMETER :: M61N9MMxe = 8568 + INTEGER(IntKi), PARAMETER :: M62N1MMxe = 8569 + INTEGER(IntKi), PARAMETER :: M62N2MMxe = 8570 + INTEGER(IntKi), PARAMETER :: M62N3MMxe = 8571 + INTEGER(IntKi), PARAMETER :: M62N4MMxe = 8572 + INTEGER(IntKi), PARAMETER :: M62N5MMxe = 8573 + INTEGER(IntKi), PARAMETER :: M62N6MMxe = 8574 + INTEGER(IntKi), PARAMETER :: M62N7MMxe = 8575 + INTEGER(IntKi), PARAMETER :: M62N8MMxe = 8576 + INTEGER(IntKi), PARAMETER :: M62N9MMxe = 8577 + INTEGER(IntKi), PARAMETER :: M63N1MMxe = 8578 + INTEGER(IntKi), PARAMETER :: M63N2MMxe = 8579 + INTEGER(IntKi), PARAMETER :: M63N3MMxe = 8580 + INTEGER(IntKi), PARAMETER :: M63N4MMxe = 8581 + INTEGER(IntKi), PARAMETER :: M63N5MMxe = 8582 + INTEGER(IntKi), PARAMETER :: M63N6MMxe = 8583 + INTEGER(IntKi), PARAMETER :: M63N7MMxe = 8584 + INTEGER(IntKi), PARAMETER :: M63N8MMxe = 8585 + INTEGER(IntKi), PARAMETER :: M63N9MMxe = 8586 + INTEGER(IntKi), PARAMETER :: M64N1MMxe = 8587 + INTEGER(IntKi), PARAMETER :: M64N2MMxe = 8588 + INTEGER(IntKi), PARAMETER :: M64N3MMxe = 8589 + INTEGER(IntKi), PARAMETER :: M64N4MMxe = 8590 + INTEGER(IntKi), PARAMETER :: M64N5MMxe = 8591 + INTEGER(IntKi), PARAMETER :: M64N6MMxe = 8592 + INTEGER(IntKi), PARAMETER :: M64N7MMxe = 8593 + INTEGER(IntKi), PARAMETER :: M64N8MMxe = 8594 + INTEGER(IntKi), PARAMETER :: M64N9MMxe = 8595 + INTEGER(IntKi), PARAMETER :: M65N1MMxe = 8596 + INTEGER(IntKi), PARAMETER :: M65N2MMxe = 8597 + INTEGER(IntKi), PARAMETER :: M65N3MMxe = 8598 + INTEGER(IntKi), PARAMETER :: M65N4MMxe = 8599 + INTEGER(IntKi), PARAMETER :: M65N5MMxe = 8600 + INTEGER(IntKi), PARAMETER :: M65N6MMxe = 8601 + INTEGER(IntKi), PARAMETER :: M65N7MMxe = 8602 + INTEGER(IntKi), PARAMETER :: M65N8MMxe = 8603 + INTEGER(IntKi), PARAMETER :: M65N9MMxe = 8604 + INTEGER(IntKi), PARAMETER :: M66N1MMxe = 8605 + INTEGER(IntKi), PARAMETER :: M66N2MMxe = 8606 + INTEGER(IntKi), PARAMETER :: M66N3MMxe = 8607 + INTEGER(IntKi), PARAMETER :: M66N4MMxe = 8608 + INTEGER(IntKi), PARAMETER :: M66N5MMxe = 8609 + INTEGER(IntKi), PARAMETER :: M66N6MMxe = 8610 + INTEGER(IntKi), PARAMETER :: M66N7MMxe = 8611 + INTEGER(IntKi), PARAMETER :: M66N8MMxe = 8612 + INTEGER(IntKi), PARAMETER :: M66N9MMxe = 8613 + INTEGER(IntKi), PARAMETER :: M67N1MMxe = 8614 + INTEGER(IntKi), PARAMETER :: M67N2MMxe = 8615 + INTEGER(IntKi), PARAMETER :: M67N3MMxe = 8616 + INTEGER(IntKi), PARAMETER :: M67N4MMxe = 8617 + INTEGER(IntKi), PARAMETER :: M67N5MMxe = 8618 + INTEGER(IntKi), PARAMETER :: M67N6MMxe = 8619 + INTEGER(IntKi), PARAMETER :: M67N7MMxe = 8620 + INTEGER(IntKi), PARAMETER :: M67N8MMxe = 8621 + INTEGER(IntKi), PARAMETER :: M67N9MMxe = 8622 + INTEGER(IntKi), PARAMETER :: M68N1MMxe = 8623 + INTEGER(IntKi), PARAMETER :: M68N2MMxe = 8624 + INTEGER(IntKi), PARAMETER :: M68N3MMxe = 8625 + INTEGER(IntKi), PARAMETER :: M68N4MMxe = 8626 + INTEGER(IntKi), PARAMETER :: M68N5MMxe = 8627 + INTEGER(IntKi), PARAMETER :: M68N6MMxe = 8628 + INTEGER(IntKi), PARAMETER :: M68N7MMxe = 8629 + INTEGER(IntKi), PARAMETER :: M68N8MMxe = 8630 + INTEGER(IntKi), PARAMETER :: M68N9MMxe = 8631 + INTEGER(IntKi), PARAMETER :: M69N1MMxe = 8632 + INTEGER(IntKi), PARAMETER :: M69N2MMxe = 8633 + INTEGER(IntKi), PARAMETER :: M69N3MMxe = 8634 + INTEGER(IntKi), PARAMETER :: M69N4MMxe = 8635 + INTEGER(IntKi), PARAMETER :: M69N5MMxe = 8636 + INTEGER(IntKi), PARAMETER :: M69N6MMxe = 8637 + INTEGER(IntKi), PARAMETER :: M69N7MMxe = 8638 + INTEGER(IntKi), PARAMETER :: M69N8MMxe = 8639 + INTEGER(IntKi), PARAMETER :: M69N9MMxe = 8640 + INTEGER(IntKi), PARAMETER :: M70N1MMxe = 8641 + INTEGER(IntKi), PARAMETER :: M70N2MMxe = 8642 + INTEGER(IntKi), PARAMETER :: M70N3MMxe = 8643 + INTEGER(IntKi), PARAMETER :: M70N4MMxe = 8644 + INTEGER(IntKi), PARAMETER :: M70N5MMxe = 8645 + INTEGER(IntKi), PARAMETER :: M70N6MMxe = 8646 + INTEGER(IntKi), PARAMETER :: M70N7MMxe = 8647 + INTEGER(IntKi), PARAMETER :: M70N8MMxe = 8648 + INTEGER(IntKi), PARAMETER :: M70N9MMxe = 8649 + INTEGER(IntKi), PARAMETER :: M71N1MMxe = 8650 + INTEGER(IntKi), PARAMETER :: M71N2MMxe = 8651 + INTEGER(IntKi), PARAMETER :: M71N3MMxe = 8652 + INTEGER(IntKi), PARAMETER :: M71N4MMxe = 8653 + INTEGER(IntKi), PARAMETER :: M71N5MMxe = 8654 + INTEGER(IntKi), PARAMETER :: M71N6MMxe = 8655 + INTEGER(IntKi), PARAMETER :: M71N7MMxe = 8656 + INTEGER(IntKi), PARAMETER :: M71N8MMxe = 8657 + INTEGER(IntKi), PARAMETER :: M71N9MMxe = 8658 + INTEGER(IntKi), PARAMETER :: M72N1MMxe = 8659 + INTEGER(IntKi), PARAMETER :: M72N2MMxe = 8660 + INTEGER(IntKi), PARAMETER :: M72N3MMxe = 8661 + INTEGER(IntKi), PARAMETER :: M72N4MMxe = 8662 + INTEGER(IntKi), PARAMETER :: M72N5MMxe = 8663 + INTEGER(IntKi), PARAMETER :: M72N6MMxe = 8664 + INTEGER(IntKi), PARAMETER :: M72N7MMxe = 8665 + INTEGER(IntKi), PARAMETER :: M72N8MMxe = 8666 + INTEGER(IntKi), PARAMETER :: M72N9MMxe = 8667 + INTEGER(IntKi), PARAMETER :: M73N1MMxe = 8668 + INTEGER(IntKi), PARAMETER :: M73N2MMxe = 8669 + INTEGER(IntKi), PARAMETER :: M73N3MMxe = 8670 + INTEGER(IntKi), PARAMETER :: M73N4MMxe = 8671 + INTEGER(IntKi), PARAMETER :: M73N5MMxe = 8672 + INTEGER(IntKi), PARAMETER :: M73N6MMxe = 8673 + INTEGER(IntKi), PARAMETER :: M73N7MMxe = 8674 + INTEGER(IntKi), PARAMETER :: M73N8MMxe = 8675 + INTEGER(IntKi), PARAMETER :: M73N9MMxe = 8676 + INTEGER(IntKi), PARAMETER :: M74N1MMxe = 8677 + INTEGER(IntKi), PARAMETER :: M74N2MMxe = 8678 + INTEGER(IntKi), PARAMETER :: M74N3MMxe = 8679 + INTEGER(IntKi), PARAMETER :: M74N4MMxe = 8680 + INTEGER(IntKi), PARAMETER :: M74N5MMxe = 8681 + INTEGER(IntKi), PARAMETER :: M74N6MMxe = 8682 + INTEGER(IntKi), PARAMETER :: M74N7MMxe = 8683 + INTEGER(IntKi), PARAMETER :: M74N8MMxe = 8684 + INTEGER(IntKi), PARAMETER :: M74N9MMxe = 8685 + INTEGER(IntKi), PARAMETER :: M75N1MMxe = 8686 + INTEGER(IntKi), PARAMETER :: M75N2MMxe = 8687 + INTEGER(IntKi), PARAMETER :: M75N3MMxe = 8688 + INTEGER(IntKi), PARAMETER :: M75N4MMxe = 8689 + INTEGER(IntKi), PARAMETER :: M75N5MMxe = 8690 + INTEGER(IntKi), PARAMETER :: M75N6MMxe = 8691 + INTEGER(IntKi), PARAMETER :: M75N7MMxe = 8692 + INTEGER(IntKi), PARAMETER :: M75N8MMxe = 8693 + INTEGER(IntKi), PARAMETER :: M75N9MMxe = 8694 + INTEGER(IntKi), PARAMETER :: M76N1MMxe = 8695 + INTEGER(IntKi), PARAMETER :: M76N2MMxe = 8696 + INTEGER(IntKi), PARAMETER :: M76N3MMxe = 8697 + INTEGER(IntKi), PARAMETER :: M76N4MMxe = 8698 + INTEGER(IntKi), PARAMETER :: M76N5MMxe = 8699 + INTEGER(IntKi), PARAMETER :: M76N6MMxe = 8700 + INTEGER(IntKi), PARAMETER :: M76N7MMxe = 8701 + INTEGER(IntKi), PARAMETER :: M76N8MMxe = 8702 + INTEGER(IntKi), PARAMETER :: M76N9MMxe = 8703 + INTEGER(IntKi), PARAMETER :: M77N1MMxe = 8704 + INTEGER(IntKi), PARAMETER :: M77N2MMxe = 8705 + INTEGER(IntKi), PARAMETER :: M77N3MMxe = 8706 + INTEGER(IntKi), PARAMETER :: M77N4MMxe = 8707 + INTEGER(IntKi), PARAMETER :: M77N5MMxe = 8708 + INTEGER(IntKi), PARAMETER :: M77N6MMxe = 8709 + INTEGER(IntKi), PARAMETER :: M77N7MMxe = 8710 + INTEGER(IntKi), PARAMETER :: M77N8MMxe = 8711 + INTEGER(IntKi), PARAMETER :: M77N9MMxe = 8712 + INTEGER(IntKi), PARAMETER :: M78N1MMxe = 8713 + INTEGER(IntKi), PARAMETER :: M78N2MMxe = 8714 + INTEGER(IntKi), PARAMETER :: M78N3MMxe = 8715 + INTEGER(IntKi), PARAMETER :: M78N4MMxe = 8716 + INTEGER(IntKi), PARAMETER :: M78N5MMxe = 8717 + INTEGER(IntKi), PARAMETER :: M78N6MMxe = 8718 + INTEGER(IntKi), PARAMETER :: M78N7MMxe = 8719 + INTEGER(IntKi), PARAMETER :: M78N8MMxe = 8720 + INTEGER(IntKi), PARAMETER :: M78N9MMxe = 8721 + INTEGER(IntKi), PARAMETER :: M79N1MMxe = 8722 + INTEGER(IntKi), PARAMETER :: M79N2MMxe = 8723 + INTEGER(IntKi), PARAMETER :: M79N3MMxe = 8724 + INTEGER(IntKi), PARAMETER :: M79N4MMxe = 8725 + INTEGER(IntKi), PARAMETER :: M79N5MMxe = 8726 + INTEGER(IntKi), PARAMETER :: M79N6MMxe = 8727 + INTEGER(IntKi), PARAMETER :: M79N7MMxe = 8728 + INTEGER(IntKi), PARAMETER :: M79N8MMxe = 8729 + INTEGER(IntKi), PARAMETER :: M79N9MMxe = 8730 + INTEGER(IntKi), PARAMETER :: M80N1MMxe = 8731 + INTEGER(IntKi), PARAMETER :: M80N2MMxe = 8732 + INTEGER(IntKi), PARAMETER :: M80N3MMxe = 8733 + INTEGER(IntKi), PARAMETER :: M80N4MMxe = 8734 + INTEGER(IntKi), PARAMETER :: M80N5MMxe = 8735 + INTEGER(IntKi), PARAMETER :: M80N6MMxe = 8736 + INTEGER(IntKi), PARAMETER :: M80N7MMxe = 8737 + INTEGER(IntKi), PARAMETER :: M80N8MMxe = 8738 + INTEGER(IntKi), PARAMETER :: M80N9MMxe = 8739 + INTEGER(IntKi), PARAMETER :: M81N1MMxe = 8740 + INTEGER(IntKi), PARAMETER :: M81N2MMxe = 8741 + INTEGER(IntKi), PARAMETER :: M81N3MMxe = 8742 + INTEGER(IntKi), PARAMETER :: M81N4MMxe = 8743 + INTEGER(IntKi), PARAMETER :: M81N5MMxe = 8744 + INTEGER(IntKi), PARAMETER :: M81N6MMxe = 8745 + INTEGER(IntKi), PARAMETER :: M81N7MMxe = 8746 + INTEGER(IntKi), PARAMETER :: M81N8MMxe = 8747 + INTEGER(IntKi), PARAMETER :: M81N9MMxe = 8748 + INTEGER(IntKi), PARAMETER :: M82N1MMxe = 8749 + INTEGER(IntKi), PARAMETER :: M82N2MMxe = 8750 + INTEGER(IntKi), PARAMETER :: M82N3MMxe = 8751 + INTEGER(IntKi), PARAMETER :: M82N4MMxe = 8752 + INTEGER(IntKi), PARAMETER :: M82N5MMxe = 8753 + INTEGER(IntKi), PARAMETER :: M82N6MMxe = 8754 + INTEGER(IntKi), PARAMETER :: M82N7MMxe = 8755 + INTEGER(IntKi), PARAMETER :: M82N8MMxe = 8756 + INTEGER(IntKi), PARAMETER :: M82N9MMxe = 8757 + INTEGER(IntKi), PARAMETER :: M83N1MMxe = 8758 + INTEGER(IntKi), PARAMETER :: M83N2MMxe = 8759 + INTEGER(IntKi), PARAMETER :: M83N3MMxe = 8760 + INTEGER(IntKi), PARAMETER :: M83N4MMxe = 8761 + INTEGER(IntKi), PARAMETER :: M83N5MMxe = 8762 + INTEGER(IntKi), PARAMETER :: M83N6MMxe = 8763 + INTEGER(IntKi), PARAMETER :: M83N7MMxe = 8764 + INTEGER(IntKi), PARAMETER :: M83N8MMxe = 8765 + INTEGER(IntKi), PARAMETER :: M83N9MMxe = 8766 + INTEGER(IntKi), PARAMETER :: M84N1MMxe = 8767 + INTEGER(IntKi), PARAMETER :: M84N2MMxe = 8768 + INTEGER(IntKi), PARAMETER :: M84N3MMxe = 8769 + INTEGER(IntKi), PARAMETER :: M84N4MMxe = 8770 + INTEGER(IntKi), PARAMETER :: M84N5MMxe = 8771 + INTEGER(IntKi), PARAMETER :: M84N6MMxe = 8772 + INTEGER(IntKi), PARAMETER :: M84N7MMxe = 8773 + INTEGER(IntKi), PARAMETER :: M84N8MMxe = 8774 + INTEGER(IntKi), PARAMETER :: M84N9MMxe = 8775 + INTEGER(IntKi), PARAMETER :: M85N1MMxe = 8776 + INTEGER(IntKi), PARAMETER :: M85N2MMxe = 8777 + INTEGER(IntKi), PARAMETER :: M85N3MMxe = 8778 + INTEGER(IntKi), PARAMETER :: M85N4MMxe = 8779 + INTEGER(IntKi), PARAMETER :: M85N5MMxe = 8780 + INTEGER(IntKi), PARAMETER :: M85N6MMxe = 8781 + INTEGER(IntKi), PARAMETER :: M85N7MMxe = 8782 + INTEGER(IntKi), PARAMETER :: M85N8MMxe = 8783 + INTEGER(IntKi), PARAMETER :: M85N9MMxe = 8784 + INTEGER(IntKi), PARAMETER :: M86N1MMxe = 8785 + INTEGER(IntKi), PARAMETER :: M86N2MMxe = 8786 + INTEGER(IntKi), PARAMETER :: M86N3MMxe = 8787 + INTEGER(IntKi), PARAMETER :: M86N4MMxe = 8788 + INTEGER(IntKi), PARAMETER :: M86N5MMxe = 8789 + INTEGER(IntKi), PARAMETER :: M86N6MMxe = 8790 + INTEGER(IntKi), PARAMETER :: M86N7MMxe = 8791 + INTEGER(IntKi), PARAMETER :: M86N8MMxe = 8792 + INTEGER(IntKi), PARAMETER :: M86N9MMxe = 8793 + INTEGER(IntKi), PARAMETER :: M87N1MMxe = 8794 + INTEGER(IntKi), PARAMETER :: M87N2MMxe = 8795 + INTEGER(IntKi), PARAMETER :: M87N3MMxe = 8796 + INTEGER(IntKi), PARAMETER :: M87N4MMxe = 8797 + INTEGER(IntKi), PARAMETER :: M87N5MMxe = 8798 + INTEGER(IntKi), PARAMETER :: M87N6MMxe = 8799 + INTEGER(IntKi), PARAMETER :: M87N7MMxe = 8800 + INTEGER(IntKi), PARAMETER :: M87N8MMxe = 8801 + INTEGER(IntKi), PARAMETER :: M87N9MMxe = 8802 + INTEGER(IntKi), PARAMETER :: M88N1MMxe = 8803 + INTEGER(IntKi), PARAMETER :: M88N2MMxe = 8804 + INTEGER(IntKi), PARAMETER :: M88N3MMxe = 8805 + INTEGER(IntKi), PARAMETER :: M88N4MMxe = 8806 + INTEGER(IntKi), PARAMETER :: M88N5MMxe = 8807 + INTEGER(IntKi), PARAMETER :: M88N6MMxe = 8808 + INTEGER(IntKi), PARAMETER :: M88N7MMxe = 8809 + INTEGER(IntKi), PARAMETER :: M88N8MMxe = 8810 + INTEGER(IntKi), PARAMETER :: M88N9MMxe = 8811 + INTEGER(IntKi), PARAMETER :: M89N1MMxe = 8812 + INTEGER(IntKi), PARAMETER :: M89N2MMxe = 8813 + INTEGER(IntKi), PARAMETER :: M89N3MMxe = 8814 + INTEGER(IntKi), PARAMETER :: M89N4MMxe = 8815 + INTEGER(IntKi), PARAMETER :: M89N5MMxe = 8816 + INTEGER(IntKi), PARAMETER :: M89N6MMxe = 8817 + INTEGER(IntKi), PARAMETER :: M89N7MMxe = 8818 + INTEGER(IntKi), PARAMETER :: M89N8MMxe = 8819 + INTEGER(IntKi), PARAMETER :: M89N9MMxe = 8820 + INTEGER(IntKi), PARAMETER :: M90N1MMxe = 8821 + INTEGER(IntKi), PARAMETER :: M90N2MMxe = 8822 + INTEGER(IntKi), PARAMETER :: M90N3MMxe = 8823 + INTEGER(IntKi), PARAMETER :: M90N4MMxe = 8824 + INTEGER(IntKi), PARAMETER :: M90N5MMxe = 8825 + INTEGER(IntKi), PARAMETER :: M90N6MMxe = 8826 + INTEGER(IntKi), PARAMETER :: M90N7MMxe = 8827 + INTEGER(IntKi), PARAMETER :: M90N8MMxe = 8828 + INTEGER(IntKi), PARAMETER :: M90N9MMxe = 8829 + INTEGER(IntKi), PARAMETER :: M91N1MMxe = 8830 + INTEGER(IntKi), PARAMETER :: M91N2MMxe = 8831 + INTEGER(IntKi), PARAMETER :: M91N3MMxe = 8832 + INTEGER(IntKi), PARAMETER :: M91N4MMxe = 8833 + INTEGER(IntKi), PARAMETER :: M91N5MMxe = 8834 + INTEGER(IntKi), PARAMETER :: M91N6MMxe = 8835 + INTEGER(IntKi), PARAMETER :: M91N7MMxe = 8836 + INTEGER(IntKi), PARAMETER :: M91N8MMxe = 8837 + INTEGER(IntKi), PARAMETER :: M91N9MMxe = 8838 + INTEGER(IntKi), PARAMETER :: M92N1MMxe = 8839 + INTEGER(IntKi), PARAMETER :: M92N2MMxe = 8840 + INTEGER(IntKi), PARAMETER :: M92N3MMxe = 8841 + INTEGER(IntKi), PARAMETER :: M92N4MMxe = 8842 + INTEGER(IntKi), PARAMETER :: M92N5MMxe = 8843 + INTEGER(IntKi), PARAMETER :: M92N6MMxe = 8844 + INTEGER(IntKi), PARAMETER :: M92N7MMxe = 8845 + INTEGER(IntKi), PARAMETER :: M92N8MMxe = 8846 + INTEGER(IntKi), PARAMETER :: M92N9MMxe = 8847 + INTEGER(IntKi), PARAMETER :: M93N1MMxe = 8848 + INTEGER(IntKi), PARAMETER :: M93N2MMxe = 8849 + INTEGER(IntKi), PARAMETER :: M93N3MMxe = 8850 + INTEGER(IntKi), PARAMETER :: M93N4MMxe = 8851 + INTEGER(IntKi), PARAMETER :: M93N5MMxe = 8852 + INTEGER(IntKi), PARAMETER :: M93N6MMxe = 8853 + INTEGER(IntKi), PARAMETER :: M93N7MMxe = 8854 + INTEGER(IntKi), PARAMETER :: M93N8MMxe = 8855 + INTEGER(IntKi), PARAMETER :: M93N9MMxe = 8856 + INTEGER(IntKi), PARAMETER :: M94N1MMxe = 8857 + INTEGER(IntKi), PARAMETER :: M94N2MMxe = 8858 + INTEGER(IntKi), PARAMETER :: M94N3MMxe = 8859 + INTEGER(IntKi), PARAMETER :: M94N4MMxe = 8860 + INTEGER(IntKi), PARAMETER :: M94N5MMxe = 8861 + INTEGER(IntKi), PARAMETER :: M94N6MMxe = 8862 + INTEGER(IntKi), PARAMETER :: M94N7MMxe = 8863 + INTEGER(IntKi), PARAMETER :: M94N8MMxe = 8864 + INTEGER(IntKi), PARAMETER :: M94N9MMxe = 8865 + INTEGER(IntKi), PARAMETER :: M95N1MMxe = 8866 + INTEGER(IntKi), PARAMETER :: M95N2MMxe = 8867 + INTEGER(IntKi), PARAMETER :: M95N3MMxe = 8868 + INTEGER(IntKi), PARAMETER :: M95N4MMxe = 8869 + INTEGER(IntKi), PARAMETER :: M95N5MMxe = 8870 + INTEGER(IntKi), PARAMETER :: M95N6MMxe = 8871 + INTEGER(IntKi), PARAMETER :: M95N7MMxe = 8872 + INTEGER(IntKi), PARAMETER :: M95N8MMxe = 8873 + INTEGER(IntKi), PARAMETER :: M95N9MMxe = 8874 + INTEGER(IntKi), PARAMETER :: M96N1MMxe = 8875 + INTEGER(IntKi), PARAMETER :: M96N2MMxe = 8876 + INTEGER(IntKi), PARAMETER :: M96N3MMxe = 8877 + INTEGER(IntKi), PARAMETER :: M96N4MMxe = 8878 + INTEGER(IntKi), PARAMETER :: M96N5MMxe = 8879 + INTEGER(IntKi), PARAMETER :: M96N6MMxe = 8880 + INTEGER(IntKi), PARAMETER :: M96N7MMxe = 8881 + INTEGER(IntKi), PARAMETER :: M96N8MMxe = 8882 + INTEGER(IntKi), PARAMETER :: M96N9MMxe = 8883 + INTEGER(IntKi), PARAMETER :: M97N1MMxe = 8884 + INTEGER(IntKi), PARAMETER :: M97N2MMxe = 8885 + INTEGER(IntKi), PARAMETER :: M97N3MMxe = 8886 + INTEGER(IntKi), PARAMETER :: M97N4MMxe = 8887 + INTEGER(IntKi), PARAMETER :: M97N5MMxe = 8888 + INTEGER(IntKi), PARAMETER :: M97N6MMxe = 8889 + INTEGER(IntKi), PARAMETER :: M97N7MMxe = 8890 + INTEGER(IntKi), PARAMETER :: M97N8MMxe = 8891 + INTEGER(IntKi), PARAMETER :: M97N9MMxe = 8892 + INTEGER(IntKi), PARAMETER :: M98N1MMxe = 8893 + INTEGER(IntKi), PARAMETER :: M98N2MMxe = 8894 + INTEGER(IntKi), PARAMETER :: M98N3MMxe = 8895 + INTEGER(IntKi), PARAMETER :: M98N4MMxe = 8896 + INTEGER(IntKi), PARAMETER :: M98N5MMxe = 8897 + INTEGER(IntKi), PARAMETER :: M98N6MMxe = 8898 + INTEGER(IntKi), PARAMETER :: M98N7MMxe = 8899 + INTEGER(IntKi), PARAMETER :: M98N8MMxe = 8900 + INTEGER(IntKi), PARAMETER :: M98N9MMxe = 8901 + INTEGER(IntKi), PARAMETER :: M99N1MMxe = 8902 + INTEGER(IntKi), PARAMETER :: M99N2MMxe = 8903 + INTEGER(IntKi), PARAMETER :: M99N3MMxe = 8904 + INTEGER(IntKi), PARAMETER :: M99N4MMxe = 8905 + INTEGER(IntKi), PARAMETER :: M99N5MMxe = 8906 + INTEGER(IntKi), PARAMETER :: M99N6MMxe = 8907 + INTEGER(IntKi), PARAMETER :: M99N7MMxe = 8908 + INTEGER(IntKi), PARAMETER :: M99N8MMxe = 8909 + INTEGER(IntKi), PARAMETER :: M99N9MMxe = 8910 + INTEGER(IntKi), PARAMETER :: M01N1MMye = 8911 + INTEGER(IntKi), PARAMETER :: M01N2MMye = 8912 + INTEGER(IntKi), PARAMETER :: M01N3MMye = 8913 + INTEGER(IntKi), PARAMETER :: M01N4MMye = 8914 + INTEGER(IntKi), PARAMETER :: M01N5MMye = 8915 + INTEGER(IntKi), PARAMETER :: M01N6MMye = 8916 + INTEGER(IntKi), PARAMETER :: M01N7MMye = 8917 + INTEGER(IntKi), PARAMETER :: M01N8MMye = 8918 + INTEGER(IntKi), PARAMETER :: M01N9MMye = 8919 + INTEGER(IntKi), PARAMETER :: M02N1MMye = 8920 + INTEGER(IntKi), PARAMETER :: M02N2MMye = 8921 + INTEGER(IntKi), PARAMETER :: M02N3MMye = 8922 + INTEGER(IntKi), PARAMETER :: M02N4MMye = 8923 + INTEGER(IntKi), PARAMETER :: M02N5MMye = 8924 + INTEGER(IntKi), PARAMETER :: M02N6MMye = 8925 + INTEGER(IntKi), PARAMETER :: M02N7MMye = 8926 + INTEGER(IntKi), PARAMETER :: M02N8MMye = 8927 + INTEGER(IntKi), PARAMETER :: M02N9MMye = 8928 + INTEGER(IntKi), PARAMETER :: M03N1MMye = 8929 + INTEGER(IntKi), PARAMETER :: M03N2MMye = 8930 + INTEGER(IntKi), PARAMETER :: M03N3MMye = 8931 + INTEGER(IntKi), PARAMETER :: M03N4MMye = 8932 + INTEGER(IntKi), PARAMETER :: M03N5MMye = 8933 + INTEGER(IntKi), PARAMETER :: M03N6MMye = 8934 + INTEGER(IntKi), PARAMETER :: M03N7MMye = 8935 + INTEGER(IntKi), PARAMETER :: M03N8MMye = 8936 + INTEGER(IntKi), PARAMETER :: M03N9MMye = 8937 + INTEGER(IntKi), PARAMETER :: M04N1MMye = 8938 + INTEGER(IntKi), PARAMETER :: M04N2MMye = 8939 + INTEGER(IntKi), PARAMETER :: M04N3MMye = 8940 + INTEGER(IntKi), PARAMETER :: M04N4MMye = 8941 + INTEGER(IntKi), PARAMETER :: M04N5MMye = 8942 + INTEGER(IntKi), PARAMETER :: M04N6MMye = 8943 + INTEGER(IntKi), PARAMETER :: M04N7MMye = 8944 + INTEGER(IntKi), PARAMETER :: M04N8MMye = 8945 + INTEGER(IntKi), PARAMETER :: M04N9MMye = 8946 + INTEGER(IntKi), PARAMETER :: M05N1MMye = 8947 + INTEGER(IntKi), PARAMETER :: M05N2MMye = 8948 + INTEGER(IntKi), PARAMETER :: M05N3MMye = 8949 + INTEGER(IntKi), PARAMETER :: M05N4MMye = 8950 + INTEGER(IntKi), PARAMETER :: M05N5MMye = 8951 + INTEGER(IntKi), PARAMETER :: M05N6MMye = 8952 + INTEGER(IntKi), PARAMETER :: M05N7MMye = 8953 + INTEGER(IntKi), PARAMETER :: M05N8MMye = 8954 + INTEGER(IntKi), PARAMETER :: M05N9MMye = 8955 + INTEGER(IntKi), PARAMETER :: M06N1MMye = 8956 + INTEGER(IntKi), PARAMETER :: M06N2MMye = 8957 + INTEGER(IntKi), PARAMETER :: M06N3MMye = 8958 + INTEGER(IntKi), PARAMETER :: M06N4MMye = 8959 + INTEGER(IntKi), PARAMETER :: M06N5MMye = 8960 + INTEGER(IntKi), PARAMETER :: M06N6MMye = 8961 + INTEGER(IntKi), PARAMETER :: M06N7MMye = 8962 + INTEGER(IntKi), PARAMETER :: M06N8MMye = 8963 + INTEGER(IntKi), PARAMETER :: M06N9MMye = 8964 + INTEGER(IntKi), PARAMETER :: M07N1MMye = 8965 + INTEGER(IntKi), PARAMETER :: M07N2MMye = 8966 + INTEGER(IntKi), PARAMETER :: M07N3MMye = 8967 + INTEGER(IntKi), PARAMETER :: M07N4MMye = 8968 + INTEGER(IntKi), PARAMETER :: M07N5MMye = 8969 + INTEGER(IntKi), PARAMETER :: M07N6MMye = 8970 + INTEGER(IntKi), PARAMETER :: M07N7MMye = 8971 + INTEGER(IntKi), PARAMETER :: M07N8MMye = 8972 + INTEGER(IntKi), PARAMETER :: M07N9MMye = 8973 + INTEGER(IntKi), PARAMETER :: M08N1MMye = 8974 + INTEGER(IntKi), PARAMETER :: M08N2MMye = 8975 + INTEGER(IntKi), PARAMETER :: M08N3MMye = 8976 + INTEGER(IntKi), PARAMETER :: M08N4MMye = 8977 + INTEGER(IntKi), PARAMETER :: M08N5MMye = 8978 + INTEGER(IntKi), PARAMETER :: M08N6MMye = 8979 + INTEGER(IntKi), PARAMETER :: M08N7MMye = 8980 + INTEGER(IntKi), PARAMETER :: M08N8MMye = 8981 + INTEGER(IntKi), PARAMETER :: M08N9MMye = 8982 + INTEGER(IntKi), PARAMETER :: M09N1MMye = 8983 + INTEGER(IntKi), PARAMETER :: M09N2MMye = 8984 + INTEGER(IntKi), PARAMETER :: M09N3MMye = 8985 + INTEGER(IntKi), PARAMETER :: M09N4MMye = 8986 + INTEGER(IntKi), PARAMETER :: M09N5MMye = 8987 + INTEGER(IntKi), PARAMETER :: M09N6MMye = 8988 + INTEGER(IntKi), PARAMETER :: M09N7MMye = 8989 + INTEGER(IntKi), PARAMETER :: M09N8MMye = 8990 + INTEGER(IntKi), PARAMETER :: M09N9MMye = 8991 + INTEGER(IntKi), PARAMETER :: M10N1MMye = 8992 + INTEGER(IntKi), PARAMETER :: M10N2MMye = 8993 + INTEGER(IntKi), PARAMETER :: M10N3MMye = 8994 + INTEGER(IntKi), PARAMETER :: M10N4MMye = 8995 + INTEGER(IntKi), PARAMETER :: M10N5MMye = 8996 + INTEGER(IntKi), PARAMETER :: M10N6MMye = 8997 + INTEGER(IntKi), PARAMETER :: M10N7MMye = 8998 + INTEGER(IntKi), PARAMETER :: M10N8MMye = 8999 + INTEGER(IntKi), PARAMETER :: M10N9MMye = 9000 + INTEGER(IntKi), PARAMETER :: M11N1MMye = 9001 + INTEGER(IntKi), PARAMETER :: M11N2MMye = 9002 + INTEGER(IntKi), PARAMETER :: M11N3MMye = 9003 + INTEGER(IntKi), PARAMETER :: M11N4MMye = 9004 + INTEGER(IntKi), PARAMETER :: M11N5MMye = 9005 + INTEGER(IntKi), PARAMETER :: M11N6MMye = 9006 + INTEGER(IntKi), PARAMETER :: M11N7MMye = 9007 + INTEGER(IntKi), PARAMETER :: M11N8MMye = 9008 + INTEGER(IntKi), PARAMETER :: M11N9MMye = 9009 + INTEGER(IntKi), PARAMETER :: M12N1MMye = 9010 + INTEGER(IntKi), PARAMETER :: M12N2MMye = 9011 + INTEGER(IntKi), PARAMETER :: M12N3MMye = 9012 + INTEGER(IntKi), PARAMETER :: M12N4MMye = 9013 + INTEGER(IntKi), PARAMETER :: M12N5MMye = 9014 + INTEGER(IntKi), PARAMETER :: M12N6MMye = 9015 + INTEGER(IntKi), PARAMETER :: M12N7MMye = 9016 + INTEGER(IntKi), PARAMETER :: M12N8MMye = 9017 + INTEGER(IntKi), PARAMETER :: M12N9MMye = 9018 + INTEGER(IntKi), PARAMETER :: M13N1MMye = 9019 + INTEGER(IntKi), PARAMETER :: M13N2MMye = 9020 + INTEGER(IntKi), PARAMETER :: M13N3MMye = 9021 + INTEGER(IntKi), PARAMETER :: M13N4MMye = 9022 + INTEGER(IntKi), PARAMETER :: M13N5MMye = 9023 + INTEGER(IntKi), PARAMETER :: M13N6MMye = 9024 + INTEGER(IntKi), PARAMETER :: M13N7MMye = 9025 + INTEGER(IntKi), PARAMETER :: M13N8MMye = 9026 + INTEGER(IntKi), PARAMETER :: M13N9MMye = 9027 + INTEGER(IntKi), PARAMETER :: M14N1MMye = 9028 + INTEGER(IntKi), PARAMETER :: M14N2MMye = 9029 + INTEGER(IntKi), PARAMETER :: M14N3MMye = 9030 + INTEGER(IntKi), PARAMETER :: M14N4MMye = 9031 + INTEGER(IntKi), PARAMETER :: M14N5MMye = 9032 + INTEGER(IntKi), PARAMETER :: M14N6MMye = 9033 + INTEGER(IntKi), PARAMETER :: M14N7MMye = 9034 + INTEGER(IntKi), PARAMETER :: M14N8MMye = 9035 + INTEGER(IntKi), PARAMETER :: M14N9MMye = 9036 + INTEGER(IntKi), PARAMETER :: M15N1MMye = 9037 + INTEGER(IntKi), PARAMETER :: M15N2MMye = 9038 + INTEGER(IntKi), PARAMETER :: M15N3MMye = 9039 + INTEGER(IntKi), PARAMETER :: M15N4MMye = 9040 + INTEGER(IntKi), PARAMETER :: M15N5MMye = 9041 + INTEGER(IntKi), PARAMETER :: M15N6MMye = 9042 + INTEGER(IntKi), PARAMETER :: M15N7MMye = 9043 + INTEGER(IntKi), PARAMETER :: M15N8MMye = 9044 + INTEGER(IntKi), PARAMETER :: M15N9MMye = 9045 + INTEGER(IntKi), PARAMETER :: M16N1MMye = 9046 + INTEGER(IntKi), PARAMETER :: M16N2MMye = 9047 + INTEGER(IntKi), PARAMETER :: M16N3MMye = 9048 + INTEGER(IntKi), PARAMETER :: M16N4MMye = 9049 + INTEGER(IntKi), PARAMETER :: M16N5MMye = 9050 + INTEGER(IntKi), PARAMETER :: M16N6MMye = 9051 + INTEGER(IntKi), PARAMETER :: M16N7MMye = 9052 + INTEGER(IntKi), PARAMETER :: M16N8MMye = 9053 + INTEGER(IntKi), PARAMETER :: M16N9MMye = 9054 + INTEGER(IntKi), PARAMETER :: M17N1MMye = 9055 + INTEGER(IntKi), PARAMETER :: M17N2MMye = 9056 + INTEGER(IntKi), PARAMETER :: M17N3MMye = 9057 + INTEGER(IntKi), PARAMETER :: M17N4MMye = 9058 + INTEGER(IntKi), PARAMETER :: M17N5MMye = 9059 + INTEGER(IntKi), PARAMETER :: M17N6MMye = 9060 + INTEGER(IntKi), PARAMETER :: M17N7MMye = 9061 + INTEGER(IntKi), PARAMETER :: M17N8MMye = 9062 + INTEGER(IntKi), PARAMETER :: M17N9MMye = 9063 + INTEGER(IntKi), PARAMETER :: M18N1MMye = 9064 + INTEGER(IntKi), PARAMETER :: M18N2MMye = 9065 + INTEGER(IntKi), PARAMETER :: M18N3MMye = 9066 + INTEGER(IntKi), PARAMETER :: M18N4MMye = 9067 + INTEGER(IntKi), PARAMETER :: M18N5MMye = 9068 + INTEGER(IntKi), PARAMETER :: M18N6MMye = 9069 + INTEGER(IntKi), PARAMETER :: M18N7MMye = 9070 + INTEGER(IntKi), PARAMETER :: M18N8MMye = 9071 + INTEGER(IntKi), PARAMETER :: M18N9MMye = 9072 + INTEGER(IntKi), PARAMETER :: M19N1MMye = 9073 + INTEGER(IntKi), PARAMETER :: M19N2MMye = 9074 + INTEGER(IntKi), PARAMETER :: M19N3MMye = 9075 + INTEGER(IntKi), PARAMETER :: M19N4MMye = 9076 + INTEGER(IntKi), PARAMETER :: M19N5MMye = 9077 + INTEGER(IntKi), PARAMETER :: M19N6MMye = 9078 + INTEGER(IntKi), PARAMETER :: M19N7MMye = 9079 + INTEGER(IntKi), PARAMETER :: M19N8MMye = 9080 + INTEGER(IntKi), PARAMETER :: M19N9MMye = 9081 + INTEGER(IntKi), PARAMETER :: M20N1MMye = 9082 + INTEGER(IntKi), PARAMETER :: M20N2MMye = 9083 + INTEGER(IntKi), PARAMETER :: M20N3MMye = 9084 + INTEGER(IntKi), PARAMETER :: M20N4MMye = 9085 + INTEGER(IntKi), PARAMETER :: M20N5MMye = 9086 + INTEGER(IntKi), PARAMETER :: M20N6MMye = 9087 + INTEGER(IntKi), PARAMETER :: M20N7MMye = 9088 + INTEGER(IntKi), PARAMETER :: M20N8MMye = 9089 + INTEGER(IntKi), PARAMETER :: M20N9MMye = 9090 + INTEGER(IntKi), PARAMETER :: M21N1MMye = 9091 + INTEGER(IntKi), PARAMETER :: M21N2MMye = 9092 + INTEGER(IntKi), PARAMETER :: M21N3MMye = 9093 + INTEGER(IntKi), PARAMETER :: M21N4MMye = 9094 + INTEGER(IntKi), PARAMETER :: M21N5MMye = 9095 + INTEGER(IntKi), PARAMETER :: M21N6MMye = 9096 + INTEGER(IntKi), PARAMETER :: M21N7MMye = 9097 + INTEGER(IntKi), PARAMETER :: M21N8MMye = 9098 + INTEGER(IntKi), PARAMETER :: M21N9MMye = 9099 + INTEGER(IntKi), PARAMETER :: M22N1MMye = 9100 + INTEGER(IntKi), PARAMETER :: M22N2MMye = 9101 + INTEGER(IntKi), PARAMETER :: M22N3MMye = 9102 + INTEGER(IntKi), PARAMETER :: M22N4MMye = 9103 + INTEGER(IntKi), PARAMETER :: M22N5MMye = 9104 + INTEGER(IntKi), PARAMETER :: M22N6MMye = 9105 + INTEGER(IntKi), PARAMETER :: M22N7MMye = 9106 + INTEGER(IntKi), PARAMETER :: M22N8MMye = 9107 + INTEGER(IntKi), PARAMETER :: M22N9MMye = 9108 + INTEGER(IntKi), PARAMETER :: M23N1MMye = 9109 + INTEGER(IntKi), PARAMETER :: M23N2MMye = 9110 + INTEGER(IntKi), PARAMETER :: M23N3MMye = 9111 + INTEGER(IntKi), PARAMETER :: M23N4MMye = 9112 + INTEGER(IntKi), PARAMETER :: M23N5MMye = 9113 + INTEGER(IntKi), PARAMETER :: M23N6MMye = 9114 + INTEGER(IntKi), PARAMETER :: M23N7MMye = 9115 + INTEGER(IntKi), PARAMETER :: M23N8MMye = 9116 + INTEGER(IntKi), PARAMETER :: M23N9MMye = 9117 + INTEGER(IntKi), PARAMETER :: M24N1MMye = 9118 + INTEGER(IntKi), PARAMETER :: M24N2MMye = 9119 + INTEGER(IntKi), PARAMETER :: M24N3MMye = 9120 + INTEGER(IntKi), PARAMETER :: M24N4MMye = 9121 + INTEGER(IntKi), PARAMETER :: M24N5MMye = 9122 + INTEGER(IntKi), PARAMETER :: M24N6MMye = 9123 + INTEGER(IntKi), PARAMETER :: M24N7MMye = 9124 + INTEGER(IntKi), PARAMETER :: M24N8MMye = 9125 + INTEGER(IntKi), PARAMETER :: M24N9MMye = 9126 + INTEGER(IntKi), PARAMETER :: M25N1MMye = 9127 + INTEGER(IntKi), PARAMETER :: M25N2MMye = 9128 + INTEGER(IntKi), PARAMETER :: M25N3MMye = 9129 + INTEGER(IntKi), PARAMETER :: M25N4MMye = 9130 + INTEGER(IntKi), PARAMETER :: M25N5MMye = 9131 + INTEGER(IntKi), PARAMETER :: M25N6MMye = 9132 + INTEGER(IntKi), PARAMETER :: M25N7MMye = 9133 + INTEGER(IntKi), PARAMETER :: M25N8MMye = 9134 + INTEGER(IntKi), PARAMETER :: M25N9MMye = 9135 + INTEGER(IntKi), PARAMETER :: M26N1MMye = 9136 + INTEGER(IntKi), PARAMETER :: M26N2MMye = 9137 + INTEGER(IntKi), PARAMETER :: M26N3MMye = 9138 + INTEGER(IntKi), PARAMETER :: M26N4MMye = 9139 + INTEGER(IntKi), PARAMETER :: M26N5MMye = 9140 + INTEGER(IntKi), PARAMETER :: M26N6MMye = 9141 + INTEGER(IntKi), PARAMETER :: M26N7MMye = 9142 + INTEGER(IntKi), PARAMETER :: M26N8MMye = 9143 + INTEGER(IntKi), PARAMETER :: M26N9MMye = 9144 + INTEGER(IntKi), PARAMETER :: M27N1MMye = 9145 + INTEGER(IntKi), PARAMETER :: M27N2MMye = 9146 + INTEGER(IntKi), PARAMETER :: M27N3MMye = 9147 + INTEGER(IntKi), PARAMETER :: M27N4MMye = 9148 + INTEGER(IntKi), PARAMETER :: M27N5MMye = 9149 + INTEGER(IntKi), PARAMETER :: M27N6MMye = 9150 + INTEGER(IntKi), PARAMETER :: M27N7MMye = 9151 + INTEGER(IntKi), PARAMETER :: M27N8MMye = 9152 + INTEGER(IntKi), PARAMETER :: M27N9MMye = 9153 + INTEGER(IntKi), PARAMETER :: M28N1MMye = 9154 + INTEGER(IntKi), PARAMETER :: M28N2MMye = 9155 + INTEGER(IntKi), PARAMETER :: M28N3MMye = 9156 + INTEGER(IntKi), PARAMETER :: M28N4MMye = 9157 + INTEGER(IntKi), PARAMETER :: M28N5MMye = 9158 + INTEGER(IntKi), PARAMETER :: M28N6MMye = 9159 + INTEGER(IntKi), PARAMETER :: M28N7MMye = 9160 + INTEGER(IntKi), PARAMETER :: M28N8MMye = 9161 + INTEGER(IntKi), PARAMETER :: M28N9MMye = 9162 + INTEGER(IntKi), PARAMETER :: M29N1MMye = 9163 + INTEGER(IntKi), PARAMETER :: M29N2MMye = 9164 + INTEGER(IntKi), PARAMETER :: M29N3MMye = 9165 + INTEGER(IntKi), PARAMETER :: M29N4MMye = 9166 + INTEGER(IntKi), PARAMETER :: M29N5MMye = 9167 + INTEGER(IntKi), PARAMETER :: M29N6MMye = 9168 + INTEGER(IntKi), PARAMETER :: M29N7MMye = 9169 + INTEGER(IntKi), PARAMETER :: M29N8MMye = 9170 + INTEGER(IntKi), PARAMETER :: M29N9MMye = 9171 + INTEGER(IntKi), PARAMETER :: M30N1MMye = 9172 + INTEGER(IntKi), PARAMETER :: M30N2MMye = 9173 + INTEGER(IntKi), PARAMETER :: M30N3MMye = 9174 + INTEGER(IntKi), PARAMETER :: M30N4MMye = 9175 + INTEGER(IntKi), PARAMETER :: M30N5MMye = 9176 + INTEGER(IntKi), PARAMETER :: M30N6MMye = 9177 + INTEGER(IntKi), PARAMETER :: M30N7MMye = 9178 + INTEGER(IntKi), PARAMETER :: M30N8MMye = 9179 + INTEGER(IntKi), PARAMETER :: M30N9MMye = 9180 + INTEGER(IntKi), PARAMETER :: M31N1MMye = 9181 + INTEGER(IntKi), PARAMETER :: M31N2MMye = 9182 + INTEGER(IntKi), PARAMETER :: M31N3MMye = 9183 + INTEGER(IntKi), PARAMETER :: M31N4MMye = 9184 + INTEGER(IntKi), PARAMETER :: M31N5MMye = 9185 + INTEGER(IntKi), PARAMETER :: M31N6MMye = 9186 + INTEGER(IntKi), PARAMETER :: M31N7MMye = 9187 + INTEGER(IntKi), PARAMETER :: M31N8MMye = 9188 + INTEGER(IntKi), PARAMETER :: M31N9MMye = 9189 + INTEGER(IntKi), PARAMETER :: M32N1MMye = 9190 + INTEGER(IntKi), PARAMETER :: M32N2MMye = 9191 + INTEGER(IntKi), PARAMETER :: M32N3MMye = 9192 + INTEGER(IntKi), PARAMETER :: M32N4MMye = 9193 + INTEGER(IntKi), PARAMETER :: M32N5MMye = 9194 + INTEGER(IntKi), PARAMETER :: M32N6MMye = 9195 + INTEGER(IntKi), PARAMETER :: M32N7MMye = 9196 + INTEGER(IntKi), PARAMETER :: M32N8MMye = 9197 + INTEGER(IntKi), PARAMETER :: M32N9MMye = 9198 + INTEGER(IntKi), PARAMETER :: M33N1MMye = 9199 + INTEGER(IntKi), PARAMETER :: M33N2MMye = 9200 + INTEGER(IntKi), PARAMETER :: M33N3MMye = 9201 + INTEGER(IntKi), PARAMETER :: M33N4MMye = 9202 + INTEGER(IntKi), PARAMETER :: M33N5MMye = 9203 + INTEGER(IntKi), PARAMETER :: M33N6MMye = 9204 + INTEGER(IntKi), PARAMETER :: M33N7MMye = 9205 + INTEGER(IntKi), PARAMETER :: M33N8MMye = 9206 + INTEGER(IntKi), PARAMETER :: M33N9MMye = 9207 + INTEGER(IntKi), PARAMETER :: M34N1MMye = 9208 + INTEGER(IntKi), PARAMETER :: M34N2MMye = 9209 + INTEGER(IntKi), PARAMETER :: M34N3MMye = 9210 + INTEGER(IntKi), PARAMETER :: M34N4MMye = 9211 + INTEGER(IntKi), PARAMETER :: M34N5MMye = 9212 + INTEGER(IntKi), PARAMETER :: M34N6MMye = 9213 + INTEGER(IntKi), PARAMETER :: M34N7MMye = 9214 + INTEGER(IntKi), PARAMETER :: M34N8MMye = 9215 + INTEGER(IntKi), PARAMETER :: M34N9MMye = 9216 + INTEGER(IntKi), PARAMETER :: M35N1MMye = 9217 + INTEGER(IntKi), PARAMETER :: M35N2MMye = 9218 + INTEGER(IntKi), PARAMETER :: M35N3MMye = 9219 + INTEGER(IntKi), PARAMETER :: M35N4MMye = 9220 + INTEGER(IntKi), PARAMETER :: M35N5MMye = 9221 + INTEGER(IntKi), PARAMETER :: M35N6MMye = 9222 + INTEGER(IntKi), PARAMETER :: M35N7MMye = 9223 + INTEGER(IntKi), PARAMETER :: M35N8MMye = 9224 + INTEGER(IntKi), PARAMETER :: M35N9MMye = 9225 + INTEGER(IntKi), PARAMETER :: M36N1MMye = 9226 + INTEGER(IntKi), PARAMETER :: M36N2MMye = 9227 + INTEGER(IntKi), PARAMETER :: M36N3MMye = 9228 + INTEGER(IntKi), PARAMETER :: M36N4MMye = 9229 + INTEGER(IntKi), PARAMETER :: M36N5MMye = 9230 + INTEGER(IntKi), PARAMETER :: M36N6MMye = 9231 + INTEGER(IntKi), PARAMETER :: M36N7MMye = 9232 + INTEGER(IntKi), PARAMETER :: M36N8MMye = 9233 + INTEGER(IntKi), PARAMETER :: M36N9MMye = 9234 + INTEGER(IntKi), PARAMETER :: M37N1MMye = 9235 + INTEGER(IntKi), PARAMETER :: M37N2MMye = 9236 + INTEGER(IntKi), PARAMETER :: M37N3MMye = 9237 + INTEGER(IntKi), PARAMETER :: M37N4MMye = 9238 + INTEGER(IntKi), PARAMETER :: M37N5MMye = 9239 + INTEGER(IntKi), PARAMETER :: M37N6MMye = 9240 + INTEGER(IntKi), PARAMETER :: M37N7MMye = 9241 + INTEGER(IntKi), PARAMETER :: M37N8MMye = 9242 + INTEGER(IntKi), PARAMETER :: M37N9MMye = 9243 + INTEGER(IntKi), PARAMETER :: M38N1MMye = 9244 + INTEGER(IntKi), PARAMETER :: M38N2MMye = 9245 + INTEGER(IntKi), PARAMETER :: M38N3MMye = 9246 + INTEGER(IntKi), PARAMETER :: M38N4MMye = 9247 + INTEGER(IntKi), PARAMETER :: M38N5MMye = 9248 + INTEGER(IntKi), PARAMETER :: M38N6MMye = 9249 + INTEGER(IntKi), PARAMETER :: M38N7MMye = 9250 + INTEGER(IntKi), PARAMETER :: M38N8MMye = 9251 + INTEGER(IntKi), PARAMETER :: M38N9MMye = 9252 + INTEGER(IntKi), PARAMETER :: M39N1MMye = 9253 + INTEGER(IntKi), PARAMETER :: M39N2MMye = 9254 + INTEGER(IntKi), PARAMETER :: M39N3MMye = 9255 + INTEGER(IntKi), PARAMETER :: M39N4MMye = 9256 + INTEGER(IntKi), PARAMETER :: M39N5MMye = 9257 + INTEGER(IntKi), PARAMETER :: M39N6MMye = 9258 + INTEGER(IntKi), PARAMETER :: M39N7MMye = 9259 + INTEGER(IntKi), PARAMETER :: M39N8MMye = 9260 + INTEGER(IntKi), PARAMETER :: M39N9MMye = 9261 + INTEGER(IntKi), PARAMETER :: M40N1MMye = 9262 + INTEGER(IntKi), PARAMETER :: M40N2MMye = 9263 + INTEGER(IntKi), PARAMETER :: M40N3MMye = 9264 + INTEGER(IntKi), PARAMETER :: M40N4MMye = 9265 + INTEGER(IntKi), PARAMETER :: M40N5MMye = 9266 + INTEGER(IntKi), PARAMETER :: M40N6MMye = 9267 + INTEGER(IntKi), PARAMETER :: M40N7MMye = 9268 + INTEGER(IntKi), PARAMETER :: M40N8MMye = 9269 + INTEGER(IntKi), PARAMETER :: M40N9MMye = 9270 + INTEGER(IntKi), PARAMETER :: M41N1MMye = 9271 + INTEGER(IntKi), PARAMETER :: M41N2MMye = 9272 + INTEGER(IntKi), PARAMETER :: M41N3MMye = 9273 + INTEGER(IntKi), PARAMETER :: M41N4MMye = 9274 + INTEGER(IntKi), PARAMETER :: M41N5MMye = 9275 + INTEGER(IntKi), PARAMETER :: M41N6MMye = 9276 + INTEGER(IntKi), PARAMETER :: M41N7MMye = 9277 + INTEGER(IntKi), PARAMETER :: M41N8MMye = 9278 + INTEGER(IntKi), PARAMETER :: M41N9MMye = 9279 + INTEGER(IntKi), PARAMETER :: M42N1MMye = 9280 + INTEGER(IntKi), PARAMETER :: M42N2MMye = 9281 + INTEGER(IntKi), PARAMETER :: M42N3MMye = 9282 + INTEGER(IntKi), PARAMETER :: M42N4MMye = 9283 + INTEGER(IntKi), PARAMETER :: M42N5MMye = 9284 + INTEGER(IntKi), PARAMETER :: M42N6MMye = 9285 + INTEGER(IntKi), PARAMETER :: M42N7MMye = 9286 + INTEGER(IntKi), PARAMETER :: M42N8MMye = 9287 + INTEGER(IntKi), PARAMETER :: M42N9MMye = 9288 + INTEGER(IntKi), PARAMETER :: M43N1MMye = 9289 + INTEGER(IntKi), PARAMETER :: M43N2MMye = 9290 + INTEGER(IntKi), PARAMETER :: M43N3MMye = 9291 + INTEGER(IntKi), PARAMETER :: M43N4MMye = 9292 + INTEGER(IntKi), PARAMETER :: M43N5MMye = 9293 + INTEGER(IntKi), PARAMETER :: M43N6MMye = 9294 + INTEGER(IntKi), PARAMETER :: M43N7MMye = 9295 + INTEGER(IntKi), PARAMETER :: M43N8MMye = 9296 + INTEGER(IntKi), PARAMETER :: M43N9MMye = 9297 + INTEGER(IntKi), PARAMETER :: M44N1MMye = 9298 + INTEGER(IntKi), PARAMETER :: M44N2MMye = 9299 + INTEGER(IntKi), PARAMETER :: M44N3MMye = 9300 + INTEGER(IntKi), PARAMETER :: M44N4MMye = 9301 + INTEGER(IntKi), PARAMETER :: M44N5MMye = 9302 + INTEGER(IntKi), PARAMETER :: M44N6MMye = 9303 + INTEGER(IntKi), PARAMETER :: M44N7MMye = 9304 + INTEGER(IntKi), PARAMETER :: M44N8MMye = 9305 + INTEGER(IntKi), PARAMETER :: M44N9MMye = 9306 + INTEGER(IntKi), PARAMETER :: M45N1MMye = 9307 + INTEGER(IntKi), PARAMETER :: M45N2MMye = 9308 + INTEGER(IntKi), PARAMETER :: M45N3MMye = 9309 + INTEGER(IntKi), PARAMETER :: M45N4MMye = 9310 + INTEGER(IntKi), PARAMETER :: M45N5MMye = 9311 + INTEGER(IntKi), PARAMETER :: M45N6MMye = 9312 + INTEGER(IntKi), PARAMETER :: M45N7MMye = 9313 + INTEGER(IntKi), PARAMETER :: M45N8MMye = 9314 + INTEGER(IntKi), PARAMETER :: M45N9MMye = 9315 + INTEGER(IntKi), PARAMETER :: M46N1MMye = 9316 + INTEGER(IntKi), PARAMETER :: M46N2MMye = 9317 + INTEGER(IntKi), PARAMETER :: M46N3MMye = 9318 + INTEGER(IntKi), PARAMETER :: M46N4MMye = 9319 + INTEGER(IntKi), PARAMETER :: M46N5MMye = 9320 + INTEGER(IntKi), PARAMETER :: M46N6MMye = 9321 + INTEGER(IntKi), PARAMETER :: M46N7MMye = 9322 + INTEGER(IntKi), PARAMETER :: M46N8MMye = 9323 + INTEGER(IntKi), PARAMETER :: M46N9MMye = 9324 + INTEGER(IntKi), PARAMETER :: M47N1MMye = 9325 + INTEGER(IntKi), PARAMETER :: M47N2MMye = 9326 + INTEGER(IntKi), PARAMETER :: M47N3MMye = 9327 + INTEGER(IntKi), PARAMETER :: M47N4MMye = 9328 + INTEGER(IntKi), PARAMETER :: M47N5MMye = 9329 + INTEGER(IntKi), PARAMETER :: M47N6MMye = 9330 + INTEGER(IntKi), PARAMETER :: M47N7MMye = 9331 + INTEGER(IntKi), PARAMETER :: M47N8MMye = 9332 + INTEGER(IntKi), PARAMETER :: M47N9MMye = 9333 + INTEGER(IntKi), PARAMETER :: M48N1MMye = 9334 + INTEGER(IntKi), PARAMETER :: M48N2MMye = 9335 + INTEGER(IntKi), PARAMETER :: M48N3MMye = 9336 + INTEGER(IntKi), PARAMETER :: M48N4MMye = 9337 + INTEGER(IntKi), PARAMETER :: M48N5MMye = 9338 + INTEGER(IntKi), PARAMETER :: M48N6MMye = 9339 + INTEGER(IntKi), PARAMETER :: M48N7MMye = 9340 + INTEGER(IntKi), PARAMETER :: M48N8MMye = 9341 + INTEGER(IntKi), PARAMETER :: M48N9MMye = 9342 + INTEGER(IntKi), PARAMETER :: M49N1MMye = 9343 + INTEGER(IntKi), PARAMETER :: M49N2MMye = 9344 + INTEGER(IntKi), PARAMETER :: M49N3MMye = 9345 + INTEGER(IntKi), PARAMETER :: M49N4MMye = 9346 + INTEGER(IntKi), PARAMETER :: M49N5MMye = 9347 + INTEGER(IntKi), PARAMETER :: M49N6MMye = 9348 + INTEGER(IntKi), PARAMETER :: M49N7MMye = 9349 + INTEGER(IntKi), PARAMETER :: M49N8MMye = 9350 + INTEGER(IntKi), PARAMETER :: M49N9MMye = 9351 + INTEGER(IntKi), PARAMETER :: M50N1MMye = 9352 + INTEGER(IntKi), PARAMETER :: M50N2MMye = 9353 + INTEGER(IntKi), PARAMETER :: M50N3MMye = 9354 + INTEGER(IntKi), PARAMETER :: M50N4MMye = 9355 + INTEGER(IntKi), PARAMETER :: M50N5MMye = 9356 + INTEGER(IntKi), PARAMETER :: M50N6MMye = 9357 + INTEGER(IntKi), PARAMETER :: M50N7MMye = 9358 + INTEGER(IntKi), PARAMETER :: M50N8MMye = 9359 + INTEGER(IntKi), PARAMETER :: M50N9MMye = 9360 + INTEGER(IntKi), PARAMETER :: M51N1MMye = 9361 + INTEGER(IntKi), PARAMETER :: M51N2MMye = 9362 + INTEGER(IntKi), PARAMETER :: M51N3MMye = 9363 + INTEGER(IntKi), PARAMETER :: M51N4MMye = 9364 + INTEGER(IntKi), PARAMETER :: M51N5MMye = 9365 + INTEGER(IntKi), PARAMETER :: M51N6MMye = 9366 + INTEGER(IntKi), PARAMETER :: M51N7MMye = 9367 + INTEGER(IntKi), PARAMETER :: M51N8MMye = 9368 + INTEGER(IntKi), PARAMETER :: M51N9MMye = 9369 + INTEGER(IntKi), PARAMETER :: M52N1MMye = 9370 + INTEGER(IntKi), PARAMETER :: M52N2MMye = 9371 + INTEGER(IntKi), PARAMETER :: M52N3MMye = 9372 + INTEGER(IntKi), PARAMETER :: M52N4MMye = 9373 + INTEGER(IntKi), PARAMETER :: M52N5MMye = 9374 + INTEGER(IntKi), PARAMETER :: M52N6MMye = 9375 + INTEGER(IntKi), PARAMETER :: M52N7MMye = 9376 + INTEGER(IntKi), PARAMETER :: M52N8MMye = 9377 + INTEGER(IntKi), PARAMETER :: M52N9MMye = 9378 + INTEGER(IntKi), PARAMETER :: M53N1MMye = 9379 + INTEGER(IntKi), PARAMETER :: M53N2MMye = 9380 + INTEGER(IntKi), PARAMETER :: M53N3MMye = 9381 + INTEGER(IntKi), PARAMETER :: M53N4MMye = 9382 + INTEGER(IntKi), PARAMETER :: M53N5MMye = 9383 + INTEGER(IntKi), PARAMETER :: M53N6MMye = 9384 + INTEGER(IntKi), PARAMETER :: M53N7MMye = 9385 + INTEGER(IntKi), PARAMETER :: M53N8MMye = 9386 + INTEGER(IntKi), PARAMETER :: M53N9MMye = 9387 + INTEGER(IntKi), PARAMETER :: M54N1MMye = 9388 + INTEGER(IntKi), PARAMETER :: M54N2MMye = 9389 + INTEGER(IntKi), PARAMETER :: M54N3MMye = 9390 + INTEGER(IntKi), PARAMETER :: M54N4MMye = 9391 + INTEGER(IntKi), PARAMETER :: M54N5MMye = 9392 + INTEGER(IntKi), PARAMETER :: M54N6MMye = 9393 + INTEGER(IntKi), PARAMETER :: M54N7MMye = 9394 + INTEGER(IntKi), PARAMETER :: M54N8MMye = 9395 + INTEGER(IntKi), PARAMETER :: M54N9MMye = 9396 + INTEGER(IntKi), PARAMETER :: M55N1MMye = 9397 + INTEGER(IntKi), PARAMETER :: M55N2MMye = 9398 + INTEGER(IntKi), PARAMETER :: M55N3MMye = 9399 + INTEGER(IntKi), PARAMETER :: M55N4MMye = 9400 + INTEGER(IntKi), PARAMETER :: M55N5MMye = 9401 + INTEGER(IntKi), PARAMETER :: M55N6MMye = 9402 + INTEGER(IntKi), PARAMETER :: M55N7MMye = 9403 + INTEGER(IntKi), PARAMETER :: M55N8MMye = 9404 + INTEGER(IntKi), PARAMETER :: M55N9MMye = 9405 + INTEGER(IntKi), PARAMETER :: M56N1MMye = 9406 + INTEGER(IntKi), PARAMETER :: M56N2MMye = 9407 + INTEGER(IntKi), PARAMETER :: M56N3MMye = 9408 + INTEGER(IntKi), PARAMETER :: M56N4MMye = 9409 + INTEGER(IntKi), PARAMETER :: M56N5MMye = 9410 + INTEGER(IntKi), PARAMETER :: M56N6MMye = 9411 + INTEGER(IntKi), PARAMETER :: M56N7MMye = 9412 + INTEGER(IntKi), PARAMETER :: M56N8MMye = 9413 + INTEGER(IntKi), PARAMETER :: M56N9MMye = 9414 + INTEGER(IntKi), PARAMETER :: M57N1MMye = 9415 + INTEGER(IntKi), PARAMETER :: M57N2MMye = 9416 + INTEGER(IntKi), PARAMETER :: M57N3MMye = 9417 + INTEGER(IntKi), PARAMETER :: M57N4MMye = 9418 + INTEGER(IntKi), PARAMETER :: M57N5MMye = 9419 + INTEGER(IntKi), PARAMETER :: M57N6MMye = 9420 + INTEGER(IntKi), PARAMETER :: M57N7MMye = 9421 + INTEGER(IntKi), PARAMETER :: M57N8MMye = 9422 + INTEGER(IntKi), PARAMETER :: M57N9MMye = 9423 + INTEGER(IntKi), PARAMETER :: M58N1MMye = 9424 + INTEGER(IntKi), PARAMETER :: M58N2MMye = 9425 + INTEGER(IntKi), PARAMETER :: M58N3MMye = 9426 + INTEGER(IntKi), PARAMETER :: M58N4MMye = 9427 + INTEGER(IntKi), PARAMETER :: M58N5MMye = 9428 + INTEGER(IntKi), PARAMETER :: M58N6MMye = 9429 + INTEGER(IntKi), PARAMETER :: M58N7MMye = 9430 + INTEGER(IntKi), PARAMETER :: M58N8MMye = 9431 + INTEGER(IntKi), PARAMETER :: M58N9MMye = 9432 + INTEGER(IntKi), PARAMETER :: M59N1MMye = 9433 + INTEGER(IntKi), PARAMETER :: M59N2MMye = 9434 + INTEGER(IntKi), PARAMETER :: M59N3MMye = 9435 + INTEGER(IntKi), PARAMETER :: M59N4MMye = 9436 + INTEGER(IntKi), PARAMETER :: M59N5MMye = 9437 + INTEGER(IntKi), PARAMETER :: M59N6MMye = 9438 + INTEGER(IntKi), PARAMETER :: M59N7MMye = 9439 + INTEGER(IntKi), PARAMETER :: M59N8MMye = 9440 + INTEGER(IntKi), PARAMETER :: M59N9MMye = 9441 + INTEGER(IntKi), PARAMETER :: M60N1MMye = 9442 + INTEGER(IntKi), PARAMETER :: M60N2MMye = 9443 + INTEGER(IntKi), PARAMETER :: M60N3MMye = 9444 + INTEGER(IntKi), PARAMETER :: M60N4MMye = 9445 + INTEGER(IntKi), PARAMETER :: M60N5MMye = 9446 + INTEGER(IntKi), PARAMETER :: M60N6MMye = 9447 + INTEGER(IntKi), PARAMETER :: M60N7MMye = 9448 + INTEGER(IntKi), PARAMETER :: M60N8MMye = 9449 + INTEGER(IntKi), PARAMETER :: M60N9MMye = 9450 + INTEGER(IntKi), PARAMETER :: M61N1MMye = 9451 + INTEGER(IntKi), PARAMETER :: M61N2MMye = 9452 + INTEGER(IntKi), PARAMETER :: M61N3MMye = 9453 + INTEGER(IntKi), PARAMETER :: M61N4MMye = 9454 + INTEGER(IntKi), PARAMETER :: M61N5MMye = 9455 + INTEGER(IntKi), PARAMETER :: M61N6MMye = 9456 + INTEGER(IntKi), PARAMETER :: M61N7MMye = 9457 + INTEGER(IntKi), PARAMETER :: M61N8MMye = 9458 + INTEGER(IntKi), PARAMETER :: M61N9MMye = 9459 + INTEGER(IntKi), PARAMETER :: M62N1MMye = 9460 + INTEGER(IntKi), PARAMETER :: M62N2MMye = 9461 + INTEGER(IntKi), PARAMETER :: M62N3MMye = 9462 + INTEGER(IntKi), PARAMETER :: M62N4MMye = 9463 + INTEGER(IntKi), PARAMETER :: M62N5MMye = 9464 + INTEGER(IntKi), PARAMETER :: M62N6MMye = 9465 + INTEGER(IntKi), PARAMETER :: M62N7MMye = 9466 + INTEGER(IntKi), PARAMETER :: M62N8MMye = 9467 + INTEGER(IntKi), PARAMETER :: M62N9MMye = 9468 + INTEGER(IntKi), PARAMETER :: M63N1MMye = 9469 + INTEGER(IntKi), PARAMETER :: M63N2MMye = 9470 + INTEGER(IntKi), PARAMETER :: M63N3MMye = 9471 + INTEGER(IntKi), PARAMETER :: M63N4MMye = 9472 + INTEGER(IntKi), PARAMETER :: M63N5MMye = 9473 + INTEGER(IntKi), PARAMETER :: M63N6MMye = 9474 + INTEGER(IntKi), PARAMETER :: M63N7MMye = 9475 + INTEGER(IntKi), PARAMETER :: M63N8MMye = 9476 + INTEGER(IntKi), PARAMETER :: M63N9MMye = 9477 + INTEGER(IntKi), PARAMETER :: M64N1MMye = 9478 + INTEGER(IntKi), PARAMETER :: M64N2MMye = 9479 + INTEGER(IntKi), PARAMETER :: M64N3MMye = 9480 + INTEGER(IntKi), PARAMETER :: M64N4MMye = 9481 + INTEGER(IntKi), PARAMETER :: M64N5MMye = 9482 + INTEGER(IntKi), PARAMETER :: M64N6MMye = 9483 + INTEGER(IntKi), PARAMETER :: M64N7MMye = 9484 + INTEGER(IntKi), PARAMETER :: M64N8MMye = 9485 + INTEGER(IntKi), PARAMETER :: M64N9MMye = 9486 + INTEGER(IntKi), PARAMETER :: M65N1MMye = 9487 + INTEGER(IntKi), PARAMETER :: M65N2MMye = 9488 + INTEGER(IntKi), PARAMETER :: M65N3MMye = 9489 + INTEGER(IntKi), PARAMETER :: M65N4MMye = 9490 + INTEGER(IntKi), PARAMETER :: M65N5MMye = 9491 + INTEGER(IntKi), PARAMETER :: M65N6MMye = 9492 + INTEGER(IntKi), PARAMETER :: M65N7MMye = 9493 + INTEGER(IntKi), PARAMETER :: M65N8MMye = 9494 + INTEGER(IntKi), PARAMETER :: M65N9MMye = 9495 + INTEGER(IntKi), PARAMETER :: M66N1MMye = 9496 + INTEGER(IntKi), PARAMETER :: M66N2MMye = 9497 + INTEGER(IntKi), PARAMETER :: M66N3MMye = 9498 + INTEGER(IntKi), PARAMETER :: M66N4MMye = 9499 + INTEGER(IntKi), PARAMETER :: M66N5MMye = 9500 + INTEGER(IntKi), PARAMETER :: M66N6MMye = 9501 + INTEGER(IntKi), PARAMETER :: M66N7MMye = 9502 + INTEGER(IntKi), PARAMETER :: M66N8MMye = 9503 + INTEGER(IntKi), PARAMETER :: M66N9MMye = 9504 + INTEGER(IntKi), PARAMETER :: M67N1MMye = 9505 + INTEGER(IntKi), PARAMETER :: M67N2MMye = 9506 + INTEGER(IntKi), PARAMETER :: M67N3MMye = 9507 + INTEGER(IntKi), PARAMETER :: M67N4MMye = 9508 + INTEGER(IntKi), PARAMETER :: M67N5MMye = 9509 + INTEGER(IntKi), PARAMETER :: M67N6MMye = 9510 + INTEGER(IntKi), PARAMETER :: M67N7MMye = 9511 + INTEGER(IntKi), PARAMETER :: M67N8MMye = 9512 + INTEGER(IntKi), PARAMETER :: M67N9MMye = 9513 + INTEGER(IntKi), PARAMETER :: M68N1MMye = 9514 + INTEGER(IntKi), PARAMETER :: M68N2MMye = 9515 + INTEGER(IntKi), PARAMETER :: M68N3MMye = 9516 + INTEGER(IntKi), PARAMETER :: M68N4MMye = 9517 + INTEGER(IntKi), PARAMETER :: M68N5MMye = 9518 + INTEGER(IntKi), PARAMETER :: M68N6MMye = 9519 + INTEGER(IntKi), PARAMETER :: M68N7MMye = 9520 + INTEGER(IntKi), PARAMETER :: M68N8MMye = 9521 + INTEGER(IntKi), PARAMETER :: M68N9MMye = 9522 + INTEGER(IntKi), PARAMETER :: M69N1MMye = 9523 + INTEGER(IntKi), PARAMETER :: M69N2MMye = 9524 + INTEGER(IntKi), PARAMETER :: M69N3MMye = 9525 + INTEGER(IntKi), PARAMETER :: M69N4MMye = 9526 + INTEGER(IntKi), PARAMETER :: M69N5MMye = 9527 + INTEGER(IntKi), PARAMETER :: M69N6MMye = 9528 + INTEGER(IntKi), PARAMETER :: M69N7MMye = 9529 + INTEGER(IntKi), PARAMETER :: M69N8MMye = 9530 + INTEGER(IntKi), PARAMETER :: M69N9MMye = 9531 + INTEGER(IntKi), PARAMETER :: M70N1MMye = 9532 + INTEGER(IntKi), PARAMETER :: M70N2MMye = 9533 + INTEGER(IntKi), PARAMETER :: M70N3MMye = 9534 + INTEGER(IntKi), PARAMETER :: M70N4MMye = 9535 + INTEGER(IntKi), PARAMETER :: M70N5MMye = 9536 + INTEGER(IntKi), PARAMETER :: M70N6MMye = 9537 + INTEGER(IntKi), PARAMETER :: M70N7MMye = 9538 + INTEGER(IntKi), PARAMETER :: M70N8MMye = 9539 + INTEGER(IntKi), PARAMETER :: M70N9MMye = 9540 + INTEGER(IntKi), PARAMETER :: M71N1MMye = 9541 + INTEGER(IntKi), PARAMETER :: M71N2MMye = 9542 + INTEGER(IntKi), PARAMETER :: M71N3MMye = 9543 + INTEGER(IntKi), PARAMETER :: M71N4MMye = 9544 + INTEGER(IntKi), PARAMETER :: M71N5MMye = 9545 + INTEGER(IntKi), PARAMETER :: M71N6MMye = 9546 + INTEGER(IntKi), PARAMETER :: M71N7MMye = 9547 + INTEGER(IntKi), PARAMETER :: M71N8MMye = 9548 + INTEGER(IntKi), PARAMETER :: M71N9MMye = 9549 + INTEGER(IntKi), PARAMETER :: M72N1MMye = 9550 + INTEGER(IntKi), PARAMETER :: M72N2MMye = 9551 + INTEGER(IntKi), PARAMETER :: M72N3MMye = 9552 + INTEGER(IntKi), PARAMETER :: M72N4MMye = 9553 + INTEGER(IntKi), PARAMETER :: M72N5MMye = 9554 + INTEGER(IntKi), PARAMETER :: M72N6MMye = 9555 + INTEGER(IntKi), PARAMETER :: M72N7MMye = 9556 + INTEGER(IntKi), PARAMETER :: M72N8MMye = 9557 + INTEGER(IntKi), PARAMETER :: M72N9MMye = 9558 + INTEGER(IntKi), PARAMETER :: M73N1MMye = 9559 + INTEGER(IntKi), PARAMETER :: M73N2MMye = 9560 + INTEGER(IntKi), PARAMETER :: M73N3MMye = 9561 + INTEGER(IntKi), PARAMETER :: M73N4MMye = 9562 + INTEGER(IntKi), PARAMETER :: M73N5MMye = 9563 + INTEGER(IntKi), PARAMETER :: M73N6MMye = 9564 + INTEGER(IntKi), PARAMETER :: M73N7MMye = 9565 + INTEGER(IntKi), PARAMETER :: M73N8MMye = 9566 + INTEGER(IntKi), PARAMETER :: M73N9MMye = 9567 + INTEGER(IntKi), PARAMETER :: M74N1MMye = 9568 + INTEGER(IntKi), PARAMETER :: M74N2MMye = 9569 + INTEGER(IntKi), PARAMETER :: M74N3MMye = 9570 + INTEGER(IntKi), PARAMETER :: M74N4MMye = 9571 + INTEGER(IntKi), PARAMETER :: M74N5MMye = 9572 + INTEGER(IntKi), PARAMETER :: M74N6MMye = 9573 + INTEGER(IntKi), PARAMETER :: M74N7MMye = 9574 + INTEGER(IntKi), PARAMETER :: M74N8MMye = 9575 + INTEGER(IntKi), PARAMETER :: M74N9MMye = 9576 + INTEGER(IntKi), PARAMETER :: M75N1MMye = 9577 + INTEGER(IntKi), PARAMETER :: M75N2MMye = 9578 + INTEGER(IntKi), PARAMETER :: M75N3MMye = 9579 + INTEGER(IntKi), PARAMETER :: M75N4MMye = 9580 + INTEGER(IntKi), PARAMETER :: M75N5MMye = 9581 + INTEGER(IntKi), PARAMETER :: M75N6MMye = 9582 + INTEGER(IntKi), PARAMETER :: M75N7MMye = 9583 + INTEGER(IntKi), PARAMETER :: M75N8MMye = 9584 + INTEGER(IntKi), PARAMETER :: M75N9MMye = 9585 + INTEGER(IntKi), PARAMETER :: M76N1MMye = 9586 + INTEGER(IntKi), PARAMETER :: M76N2MMye = 9587 + INTEGER(IntKi), PARAMETER :: M76N3MMye = 9588 + INTEGER(IntKi), PARAMETER :: M76N4MMye = 9589 + INTEGER(IntKi), PARAMETER :: M76N5MMye = 9590 + INTEGER(IntKi), PARAMETER :: M76N6MMye = 9591 + INTEGER(IntKi), PARAMETER :: M76N7MMye = 9592 + INTEGER(IntKi), PARAMETER :: M76N8MMye = 9593 + INTEGER(IntKi), PARAMETER :: M76N9MMye = 9594 + INTEGER(IntKi), PARAMETER :: M77N1MMye = 9595 + INTEGER(IntKi), PARAMETER :: M77N2MMye = 9596 + INTEGER(IntKi), PARAMETER :: M77N3MMye = 9597 + INTEGER(IntKi), PARAMETER :: M77N4MMye = 9598 + INTEGER(IntKi), PARAMETER :: M77N5MMye = 9599 + INTEGER(IntKi), PARAMETER :: M77N6MMye = 9600 + INTEGER(IntKi), PARAMETER :: M77N7MMye = 9601 + INTEGER(IntKi), PARAMETER :: M77N8MMye = 9602 + INTEGER(IntKi), PARAMETER :: M77N9MMye = 9603 + INTEGER(IntKi), PARAMETER :: M78N1MMye = 9604 + INTEGER(IntKi), PARAMETER :: M78N2MMye = 9605 + INTEGER(IntKi), PARAMETER :: M78N3MMye = 9606 + INTEGER(IntKi), PARAMETER :: M78N4MMye = 9607 + INTEGER(IntKi), PARAMETER :: M78N5MMye = 9608 + INTEGER(IntKi), PARAMETER :: M78N6MMye = 9609 + INTEGER(IntKi), PARAMETER :: M78N7MMye = 9610 + INTEGER(IntKi), PARAMETER :: M78N8MMye = 9611 + INTEGER(IntKi), PARAMETER :: M78N9MMye = 9612 + INTEGER(IntKi), PARAMETER :: M79N1MMye = 9613 + INTEGER(IntKi), PARAMETER :: M79N2MMye = 9614 + INTEGER(IntKi), PARAMETER :: M79N3MMye = 9615 + INTEGER(IntKi), PARAMETER :: M79N4MMye = 9616 + INTEGER(IntKi), PARAMETER :: M79N5MMye = 9617 + INTEGER(IntKi), PARAMETER :: M79N6MMye = 9618 + INTEGER(IntKi), PARAMETER :: M79N7MMye = 9619 + INTEGER(IntKi), PARAMETER :: M79N8MMye = 9620 + INTEGER(IntKi), PARAMETER :: M79N9MMye = 9621 + INTEGER(IntKi), PARAMETER :: M80N1MMye = 9622 + INTEGER(IntKi), PARAMETER :: M80N2MMye = 9623 + INTEGER(IntKi), PARAMETER :: M80N3MMye = 9624 + INTEGER(IntKi), PARAMETER :: M80N4MMye = 9625 + INTEGER(IntKi), PARAMETER :: M80N5MMye = 9626 + INTEGER(IntKi), PARAMETER :: M80N6MMye = 9627 + INTEGER(IntKi), PARAMETER :: M80N7MMye = 9628 + INTEGER(IntKi), PARAMETER :: M80N8MMye = 9629 + INTEGER(IntKi), PARAMETER :: M80N9MMye = 9630 + INTEGER(IntKi), PARAMETER :: M81N1MMye = 9631 + INTEGER(IntKi), PARAMETER :: M81N2MMye = 9632 + INTEGER(IntKi), PARAMETER :: M81N3MMye = 9633 + INTEGER(IntKi), PARAMETER :: M81N4MMye = 9634 + INTEGER(IntKi), PARAMETER :: M81N5MMye = 9635 + INTEGER(IntKi), PARAMETER :: M81N6MMye = 9636 + INTEGER(IntKi), PARAMETER :: M81N7MMye = 9637 + INTEGER(IntKi), PARAMETER :: M81N8MMye = 9638 + INTEGER(IntKi), PARAMETER :: M81N9MMye = 9639 + INTEGER(IntKi), PARAMETER :: M82N1MMye = 9640 + INTEGER(IntKi), PARAMETER :: M82N2MMye = 9641 + INTEGER(IntKi), PARAMETER :: M82N3MMye = 9642 + INTEGER(IntKi), PARAMETER :: M82N4MMye = 9643 + INTEGER(IntKi), PARAMETER :: M82N5MMye = 9644 + INTEGER(IntKi), PARAMETER :: M82N6MMye = 9645 + INTEGER(IntKi), PARAMETER :: M82N7MMye = 9646 + INTEGER(IntKi), PARAMETER :: M82N8MMye = 9647 + INTEGER(IntKi), PARAMETER :: M82N9MMye = 9648 + INTEGER(IntKi), PARAMETER :: M83N1MMye = 9649 + INTEGER(IntKi), PARAMETER :: M83N2MMye = 9650 + INTEGER(IntKi), PARAMETER :: M83N3MMye = 9651 + INTEGER(IntKi), PARAMETER :: M83N4MMye = 9652 + INTEGER(IntKi), PARAMETER :: M83N5MMye = 9653 + INTEGER(IntKi), PARAMETER :: M83N6MMye = 9654 + INTEGER(IntKi), PARAMETER :: M83N7MMye = 9655 + INTEGER(IntKi), PARAMETER :: M83N8MMye = 9656 + INTEGER(IntKi), PARAMETER :: M83N9MMye = 9657 + INTEGER(IntKi), PARAMETER :: M84N1MMye = 9658 + INTEGER(IntKi), PARAMETER :: M84N2MMye = 9659 + INTEGER(IntKi), PARAMETER :: M84N3MMye = 9660 + INTEGER(IntKi), PARAMETER :: M84N4MMye = 9661 + INTEGER(IntKi), PARAMETER :: M84N5MMye = 9662 + INTEGER(IntKi), PARAMETER :: M84N6MMye = 9663 + INTEGER(IntKi), PARAMETER :: M84N7MMye = 9664 + INTEGER(IntKi), PARAMETER :: M84N8MMye = 9665 + INTEGER(IntKi), PARAMETER :: M84N9MMye = 9666 + INTEGER(IntKi), PARAMETER :: M85N1MMye = 9667 + INTEGER(IntKi), PARAMETER :: M85N2MMye = 9668 + INTEGER(IntKi), PARAMETER :: M85N3MMye = 9669 + INTEGER(IntKi), PARAMETER :: M85N4MMye = 9670 + INTEGER(IntKi), PARAMETER :: M85N5MMye = 9671 + INTEGER(IntKi), PARAMETER :: M85N6MMye = 9672 + INTEGER(IntKi), PARAMETER :: M85N7MMye = 9673 + INTEGER(IntKi), PARAMETER :: M85N8MMye = 9674 + INTEGER(IntKi), PARAMETER :: M85N9MMye = 9675 + INTEGER(IntKi), PARAMETER :: M86N1MMye = 9676 + INTEGER(IntKi), PARAMETER :: M86N2MMye = 9677 + INTEGER(IntKi), PARAMETER :: M86N3MMye = 9678 + INTEGER(IntKi), PARAMETER :: M86N4MMye = 9679 + INTEGER(IntKi), PARAMETER :: M86N5MMye = 9680 + INTEGER(IntKi), PARAMETER :: M86N6MMye = 9681 + INTEGER(IntKi), PARAMETER :: M86N7MMye = 9682 + INTEGER(IntKi), PARAMETER :: M86N8MMye = 9683 + INTEGER(IntKi), PARAMETER :: M86N9MMye = 9684 + INTEGER(IntKi), PARAMETER :: M87N1MMye = 9685 + INTEGER(IntKi), PARAMETER :: M87N2MMye = 9686 + INTEGER(IntKi), PARAMETER :: M87N3MMye = 9687 + INTEGER(IntKi), PARAMETER :: M87N4MMye = 9688 + INTEGER(IntKi), PARAMETER :: M87N5MMye = 9689 + INTEGER(IntKi), PARAMETER :: M87N6MMye = 9690 + INTEGER(IntKi), PARAMETER :: M87N7MMye = 9691 + INTEGER(IntKi), PARAMETER :: M87N8MMye = 9692 + INTEGER(IntKi), PARAMETER :: M87N9MMye = 9693 + INTEGER(IntKi), PARAMETER :: M88N1MMye = 9694 + INTEGER(IntKi), PARAMETER :: M88N2MMye = 9695 + INTEGER(IntKi), PARAMETER :: M88N3MMye = 9696 + INTEGER(IntKi), PARAMETER :: M88N4MMye = 9697 + INTEGER(IntKi), PARAMETER :: M88N5MMye = 9698 + INTEGER(IntKi), PARAMETER :: M88N6MMye = 9699 + INTEGER(IntKi), PARAMETER :: M88N7MMye = 9700 + INTEGER(IntKi), PARAMETER :: M88N8MMye = 9701 + INTEGER(IntKi), PARAMETER :: M88N9MMye = 9702 + INTEGER(IntKi), PARAMETER :: M89N1MMye = 9703 + INTEGER(IntKi), PARAMETER :: M89N2MMye = 9704 + INTEGER(IntKi), PARAMETER :: M89N3MMye = 9705 + INTEGER(IntKi), PARAMETER :: M89N4MMye = 9706 + INTEGER(IntKi), PARAMETER :: M89N5MMye = 9707 + INTEGER(IntKi), PARAMETER :: M89N6MMye = 9708 + INTEGER(IntKi), PARAMETER :: M89N7MMye = 9709 + INTEGER(IntKi), PARAMETER :: M89N8MMye = 9710 + INTEGER(IntKi), PARAMETER :: M89N9MMye = 9711 + INTEGER(IntKi), PARAMETER :: M90N1MMye = 9712 + INTEGER(IntKi), PARAMETER :: M90N2MMye = 9713 + INTEGER(IntKi), PARAMETER :: M90N3MMye = 9714 + INTEGER(IntKi), PARAMETER :: M90N4MMye = 9715 + INTEGER(IntKi), PARAMETER :: M90N5MMye = 9716 + INTEGER(IntKi), PARAMETER :: M90N6MMye = 9717 + INTEGER(IntKi), PARAMETER :: M90N7MMye = 9718 + INTEGER(IntKi), PARAMETER :: M90N8MMye = 9719 + INTEGER(IntKi), PARAMETER :: M90N9MMye = 9720 + INTEGER(IntKi), PARAMETER :: M91N1MMye = 9721 + INTEGER(IntKi), PARAMETER :: M91N2MMye = 9722 + INTEGER(IntKi), PARAMETER :: M91N3MMye = 9723 + INTEGER(IntKi), PARAMETER :: M91N4MMye = 9724 + INTEGER(IntKi), PARAMETER :: M91N5MMye = 9725 + INTEGER(IntKi), PARAMETER :: M91N6MMye = 9726 + INTEGER(IntKi), PARAMETER :: M91N7MMye = 9727 + INTEGER(IntKi), PARAMETER :: M91N8MMye = 9728 + INTEGER(IntKi), PARAMETER :: M91N9MMye = 9729 + INTEGER(IntKi), PARAMETER :: M92N1MMye = 9730 + INTEGER(IntKi), PARAMETER :: M92N2MMye = 9731 + INTEGER(IntKi), PARAMETER :: M92N3MMye = 9732 + INTEGER(IntKi), PARAMETER :: M92N4MMye = 9733 + INTEGER(IntKi), PARAMETER :: M92N5MMye = 9734 + INTEGER(IntKi), PARAMETER :: M92N6MMye = 9735 + INTEGER(IntKi), PARAMETER :: M92N7MMye = 9736 + INTEGER(IntKi), PARAMETER :: M92N8MMye = 9737 + INTEGER(IntKi), PARAMETER :: M92N9MMye = 9738 + INTEGER(IntKi), PARAMETER :: M93N1MMye = 9739 + INTEGER(IntKi), PARAMETER :: M93N2MMye = 9740 + INTEGER(IntKi), PARAMETER :: M93N3MMye = 9741 + INTEGER(IntKi), PARAMETER :: M93N4MMye = 9742 + INTEGER(IntKi), PARAMETER :: M93N5MMye = 9743 + INTEGER(IntKi), PARAMETER :: M93N6MMye = 9744 + INTEGER(IntKi), PARAMETER :: M93N7MMye = 9745 + INTEGER(IntKi), PARAMETER :: M93N8MMye = 9746 + INTEGER(IntKi), PARAMETER :: M93N9MMye = 9747 + INTEGER(IntKi), PARAMETER :: M94N1MMye = 9748 + INTEGER(IntKi), PARAMETER :: M94N2MMye = 9749 + INTEGER(IntKi), PARAMETER :: M94N3MMye = 9750 + INTEGER(IntKi), PARAMETER :: M94N4MMye = 9751 + INTEGER(IntKi), PARAMETER :: M94N5MMye = 9752 + INTEGER(IntKi), PARAMETER :: M94N6MMye = 9753 + INTEGER(IntKi), PARAMETER :: M94N7MMye = 9754 + INTEGER(IntKi), PARAMETER :: M94N8MMye = 9755 + INTEGER(IntKi), PARAMETER :: M94N9MMye = 9756 + INTEGER(IntKi), PARAMETER :: M95N1MMye = 9757 + INTEGER(IntKi), PARAMETER :: M95N2MMye = 9758 + INTEGER(IntKi), PARAMETER :: M95N3MMye = 9759 + INTEGER(IntKi), PARAMETER :: M95N4MMye = 9760 + INTEGER(IntKi), PARAMETER :: M95N5MMye = 9761 + INTEGER(IntKi), PARAMETER :: M95N6MMye = 9762 + INTEGER(IntKi), PARAMETER :: M95N7MMye = 9763 + INTEGER(IntKi), PARAMETER :: M95N8MMye = 9764 + INTEGER(IntKi), PARAMETER :: M95N9MMye = 9765 + INTEGER(IntKi), PARAMETER :: M96N1MMye = 9766 + INTEGER(IntKi), PARAMETER :: M96N2MMye = 9767 + INTEGER(IntKi), PARAMETER :: M96N3MMye = 9768 + INTEGER(IntKi), PARAMETER :: M96N4MMye = 9769 + INTEGER(IntKi), PARAMETER :: M96N5MMye = 9770 + INTEGER(IntKi), PARAMETER :: M96N6MMye = 9771 + INTEGER(IntKi), PARAMETER :: M96N7MMye = 9772 + INTEGER(IntKi), PARAMETER :: M96N8MMye = 9773 + INTEGER(IntKi), PARAMETER :: M96N9MMye = 9774 + INTEGER(IntKi), PARAMETER :: M97N1MMye = 9775 + INTEGER(IntKi), PARAMETER :: M97N2MMye = 9776 + INTEGER(IntKi), PARAMETER :: M97N3MMye = 9777 + INTEGER(IntKi), PARAMETER :: M97N4MMye = 9778 + INTEGER(IntKi), PARAMETER :: M97N5MMye = 9779 + INTEGER(IntKi), PARAMETER :: M97N6MMye = 9780 + INTEGER(IntKi), PARAMETER :: M97N7MMye = 9781 + INTEGER(IntKi), PARAMETER :: M97N8MMye = 9782 + INTEGER(IntKi), PARAMETER :: M97N9MMye = 9783 + INTEGER(IntKi), PARAMETER :: M98N1MMye = 9784 + INTEGER(IntKi), PARAMETER :: M98N2MMye = 9785 + INTEGER(IntKi), PARAMETER :: M98N3MMye = 9786 + INTEGER(IntKi), PARAMETER :: M98N4MMye = 9787 + INTEGER(IntKi), PARAMETER :: M98N5MMye = 9788 + INTEGER(IntKi), PARAMETER :: M98N6MMye = 9789 + INTEGER(IntKi), PARAMETER :: M98N7MMye = 9790 + INTEGER(IntKi), PARAMETER :: M98N8MMye = 9791 + INTEGER(IntKi), PARAMETER :: M98N9MMye = 9792 + INTEGER(IntKi), PARAMETER :: M99N1MMye = 9793 + INTEGER(IntKi), PARAMETER :: M99N2MMye = 9794 + INTEGER(IntKi), PARAMETER :: M99N3MMye = 9795 + INTEGER(IntKi), PARAMETER :: M99N4MMye = 9796 + INTEGER(IntKi), PARAMETER :: M99N5MMye = 9797 + INTEGER(IntKi), PARAMETER :: M99N6MMye = 9798 + INTEGER(IntKi), PARAMETER :: M99N7MMye = 9799 + INTEGER(IntKi), PARAMETER :: M99N8MMye = 9800 + INTEGER(IntKi), PARAMETER :: M99N9MMye = 9801 + INTEGER(IntKi), PARAMETER :: M01N1MMze = 9802 + INTEGER(IntKi), PARAMETER :: M01N2MMze = 9803 + INTEGER(IntKi), PARAMETER :: M01N3MMze = 9804 + INTEGER(IntKi), PARAMETER :: M01N4MMze = 9805 + INTEGER(IntKi), PARAMETER :: M01N5MMze = 9806 + INTEGER(IntKi), PARAMETER :: M01N6MMze = 9807 + INTEGER(IntKi), PARAMETER :: M01N7MMze = 9808 + INTEGER(IntKi), PARAMETER :: M01N8MMze = 9809 + INTEGER(IntKi), PARAMETER :: M01N9MMze = 9810 + INTEGER(IntKi), PARAMETER :: M02N1MMze = 9811 + INTEGER(IntKi), PARAMETER :: M02N2MMze = 9812 + INTEGER(IntKi), PARAMETER :: M02N3MMze = 9813 + INTEGER(IntKi), PARAMETER :: M02N4MMze = 9814 + INTEGER(IntKi), PARAMETER :: M02N5MMze = 9815 + INTEGER(IntKi), PARAMETER :: M02N6MMze = 9816 + INTEGER(IntKi), PARAMETER :: M02N7MMze = 9817 + INTEGER(IntKi), PARAMETER :: M02N8MMze = 9818 + INTEGER(IntKi), PARAMETER :: M02N9MMze = 9819 + INTEGER(IntKi), PARAMETER :: M03N1MMze = 9820 + INTEGER(IntKi), PARAMETER :: M03N2MMze = 9821 + INTEGER(IntKi), PARAMETER :: M03N3MMze = 9822 + INTEGER(IntKi), PARAMETER :: M03N4MMze = 9823 + INTEGER(IntKi), PARAMETER :: M03N5MMze = 9824 + INTEGER(IntKi), PARAMETER :: M03N6MMze = 9825 + INTEGER(IntKi), PARAMETER :: M03N7MMze = 9826 + INTEGER(IntKi), PARAMETER :: M03N8MMze = 9827 + INTEGER(IntKi), PARAMETER :: M03N9MMze = 9828 + INTEGER(IntKi), PARAMETER :: M04N1MMze = 9829 + INTEGER(IntKi), PARAMETER :: M04N2MMze = 9830 + INTEGER(IntKi), PARAMETER :: M04N3MMze = 9831 + INTEGER(IntKi), PARAMETER :: M04N4MMze = 9832 + INTEGER(IntKi), PARAMETER :: M04N5MMze = 9833 + INTEGER(IntKi), PARAMETER :: M04N6MMze = 9834 + INTEGER(IntKi), PARAMETER :: M04N7MMze = 9835 + INTEGER(IntKi), PARAMETER :: M04N8MMze = 9836 + INTEGER(IntKi), PARAMETER :: M04N9MMze = 9837 + INTEGER(IntKi), PARAMETER :: M05N1MMze = 9838 + INTEGER(IntKi), PARAMETER :: M05N2MMze = 9839 + INTEGER(IntKi), PARAMETER :: M05N3MMze = 9840 + INTEGER(IntKi), PARAMETER :: M05N4MMze = 9841 + INTEGER(IntKi), PARAMETER :: M05N5MMze = 9842 + INTEGER(IntKi), PARAMETER :: M05N6MMze = 9843 + INTEGER(IntKi), PARAMETER :: M05N7MMze = 9844 + INTEGER(IntKi), PARAMETER :: M05N8MMze = 9845 + INTEGER(IntKi), PARAMETER :: M05N9MMze = 9846 + INTEGER(IntKi), PARAMETER :: M06N1MMze = 9847 + INTEGER(IntKi), PARAMETER :: M06N2MMze = 9848 + INTEGER(IntKi), PARAMETER :: M06N3MMze = 9849 + INTEGER(IntKi), PARAMETER :: M06N4MMze = 9850 + INTEGER(IntKi), PARAMETER :: M06N5MMze = 9851 + INTEGER(IntKi), PARAMETER :: M06N6MMze = 9852 + INTEGER(IntKi), PARAMETER :: M06N7MMze = 9853 + INTEGER(IntKi), PARAMETER :: M06N8MMze = 9854 + INTEGER(IntKi), PARAMETER :: M06N9MMze = 9855 + INTEGER(IntKi), PARAMETER :: M07N1MMze = 9856 + INTEGER(IntKi), PARAMETER :: M07N2MMze = 9857 + INTEGER(IntKi), PARAMETER :: M07N3MMze = 9858 + INTEGER(IntKi), PARAMETER :: M07N4MMze = 9859 + INTEGER(IntKi), PARAMETER :: M07N5MMze = 9860 + INTEGER(IntKi), PARAMETER :: M07N6MMze = 9861 + INTEGER(IntKi), PARAMETER :: M07N7MMze = 9862 + INTEGER(IntKi), PARAMETER :: M07N8MMze = 9863 + INTEGER(IntKi), PARAMETER :: M07N9MMze = 9864 + INTEGER(IntKi), PARAMETER :: M08N1MMze = 9865 + INTEGER(IntKi), PARAMETER :: M08N2MMze = 9866 + INTEGER(IntKi), PARAMETER :: M08N3MMze = 9867 + INTEGER(IntKi), PARAMETER :: M08N4MMze = 9868 + INTEGER(IntKi), PARAMETER :: M08N5MMze = 9869 + INTEGER(IntKi), PARAMETER :: M08N6MMze = 9870 + INTEGER(IntKi), PARAMETER :: M08N7MMze = 9871 + INTEGER(IntKi), PARAMETER :: M08N8MMze = 9872 + INTEGER(IntKi), PARAMETER :: M08N9MMze = 9873 + INTEGER(IntKi), PARAMETER :: M09N1MMze = 9874 + INTEGER(IntKi), PARAMETER :: M09N2MMze = 9875 + INTEGER(IntKi), PARAMETER :: M09N3MMze = 9876 + INTEGER(IntKi), PARAMETER :: M09N4MMze = 9877 + INTEGER(IntKi), PARAMETER :: M09N5MMze = 9878 + INTEGER(IntKi), PARAMETER :: M09N6MMze = 9879 + INTEGER(IntKi), PARAMETER :: M09N7MMze = 9880 + INTEGER(IntKi), PARAMETER :: M09N8MMze = 9881 + INTEGER(IntKi), PARAMETER :: M09N9MMze = 9882 + INTEGER(IntKi), PARAMETER :: M10N1MMze = 9883 + INTEGER(IntKi), PARAMETER :: M10N2MMze = 9884 + INTEGER(IntKi), PARAMETER :: M10N3MMze = 9885 + INTEGER(IntKi), PARAMETER :: M10N4MMze = 9886 + INTEGER(IntKi), PARAMETER :: M10N5MMze = 9887 + INTEGER(IntKi), PARAMETER :: M10N6MMze = 9888 + INTEGER(IntKi), PARAMETER :: M10N7MMze = 9889 + INTEGER(IntKi), PARAMETER :: M10N8MMze = 9890 + INTEGER(IntKi), PARAMETER :: M10N9MMze = 9891 + INTEGER(IntKi), PARAMETER :: M11N1MMze = 9892 + INTEGER(IntKi), PARAMETER :: M11N2MMze = 9893 + INTEGER(IntKi), PARAMETER :: M11N3MMze = 9894 + INTEGER(IntKi), PARAMETER :: M11N4MMze = 9895 + INTEGER(IntKi), PARAMETER :: M11N5MMze = 9896 + INTEGER(IntKi), PARAMETER :: M11N6MMze = 9897 + INTEGER(IntKi), PARAMETER :: M11N7MMze = 9898 + INTEGER(IntKi), PARAMETER :: M11N8MMze = 9899 + INTEGER(IntKi), PARAMETER :: M11N9MMze = 9900 + INTEGER(IntKi), PARAMETER :: M12N1MMze = 9901 + INTEGER(IntKi), PARAMETER :: M12N2MMze = 9902 + INTEGER(IntKi), PARAMETER :: M12N3MMze = 9903 + INTEGER(IntKi), PARAMETER :: M12N4MMze = 9904 + INTEGER(IntKi), PARAMETER :: M12N5MMze = 9905 + INTEGER(IntKi), PARAMETER :: M12N6MMze = 9906 + INTEGER(IntKi), PARAMETER :: M12N7MMze = 9907 + INTEGER(IntKi), PARAMETER :: M12N8MMze = 9908 + INTEGER(IntKi), PARAMETER :: M12N9MMze = 9909 + INTEGER(IntKi), PARAMETER :: M13N1MMze = 9910 + INTEGER(IntKi), PARAMETER :: M13N2MMze = 9911 + INTEGER(IntKi), PARAMETER :: M13N3MMze = 9912 + INTEGER(IntKi), PARAMETER :: M13N4MMze = 9913 + INTEGER(IntKi), PARAMETER :: M13N5MMze = 9914 + INTEGER(IntKi), PARAMETER :: M13N6MMze = 9915 + INTEGER(IntKi), PARAMETER :: M13N7MMze = 9916 + INTEGER(IntKi), PARAMETER :: M13N8MMze = 9917 + INTEGER(IntKi), PARAMETER :: M13N9MMze = 9918 + INTEGER(IntKi), PARAMETER :: M14N1MMze = 9919 + INTEGER(IntKi), PARAMETER :: M14N2MMze = 9920 + INTEGER(IntKi), PARAMETER :: M14N3MMze = 9921 + INTEGER(IntKi), PARAMETER :: M14N4MMze = 9922 + INTEGER(IntKi), PARAMETER :: M14N5MMze = 9923 + INTEGER(IntKi), PARAMETER :: M14N6MMze = 9924 + INTEGER(IntKi), PARAMETER :: M14N7MMze = 9925 + INTEGER(IntKi), PARAMETER :: M14N8MMze = 9926 + INTEGER(IntKi), PARAMETER :: M14N9MMze = 9927 + INTEGER(IntKi), PARAMETER :: M15N1MMze = 9928 + INTEGER(IntKi), PARAMETER :: M15N2MMze = 9929 + INTEGER(IntKi), PARAMETER :: M15N3MMze = 9930 + INTEGER(IntKi), PARAMETER :: M15N4MMze = 9931 + INTEGER(IntKi), PARAMETER :: M15N5MMze = 9932 + INTEGER(IntKi), PARAMETER :: M15N6MMze = 9933 + INTEGER(IntKi), PARAMETER :: M15N7MMze = 9934 + INTEGER(IntKi), PARAMETER :: M15N8MMze = 9935 + INTEGER(IntKi), PARAMETER :: M15N9MMze = 9936 + INTEGER(IntKi), PARAMETER :: M16N1MMze = 9937 + INTEGER(IntKi), PARAMETER :: M16N2MMze = 9938 + INTEGER(IntKi), PARAMETER :: M16N3MMze = 9939 + INTEGER(IntKi), PARAMETER :: M16N4MMze = 9940 + INTEGER(IntKi), PARAMETER :: M16N5MMze = 9941 + INTEGER(IntKi), PARAMETER :: M16N6MMze = 9942 + INTEGER(IntKi), PARAMETER :: M16N7MMze = 9943 + INTEGER(IntKi), PARAMETER :: M16N8MMze = 9944 + INTEGER(IntKi), PARAMETER :: M16N9MMze = 9945 + INTEGER(IntKi), PARAMETER :: M17N1MMze = 9946 + INTEGER(IntKi), PARAMETER :: M17N2MMze = 9947 + INTEGER(IntKi), PARAMETER :: M17N3MMze = 9948 + INTEGER(IntKi), PARAMETER :: M17N4MMze = 9949 + INTEGER(IntKi), PARAMETER :: M17N5MMze = 9950 + INTEGER(IntKi), PARAMETER :: M17N6MMze = 9951 + INTEGER(IntKi), PARAMETER :: M17N7MMze = 9952 + INTEGER(IntKi), PARAMETER :: M17N8MMze = 9953 + INTEGER(IntKi), PARAMETER :: M17N9MMze = 9954 + INTEGER(IntKi), PARAMETER :: M18N1MMze = 9955 + INTEGER(IntKi), PARAMETER :: M18N2MMze = 9956 + INTEGER(IntKi), PARAMETER :: M18N3MMze = 9957 + INTEGER(IntKi), PARAMETER :: M18N4MMze = 9958 + INTEGER(IntKi), PARAMETER :: M18N5MMze = 9959 + INTEGER(IntKi), PARAMETER :: M18N6MMze = 9960 + INTEGER(IntKi), PARAMETER :: M18N7MMze = 9961 + INTEGER(IntKi), PARAMETER :: M18N8MMze = 9962 + INTEGER(IntKi), PARAMETER :: M18N9MMze = 9963 + INTEGER(IntKi), PARAMETER :: M19N1MMze = 9964 + INTEGER(IntKi), PARAMETER :: M19N2MMze = 9965 + INTEGER(IntKi), PARAMETER :: M19N3MMze = 9966 + INTEGER(IntKi), PARAMETER :: M19N4MMze = 9967 + INTEGER(IntKi), PARAMETER :: M19N5MMze = 9968 + INTEGER(IntKi), PARAMETER :: M19N6MMze = 9969 + INTEGER(IntKi), PARAMETER :: M19N7MMze = 9970 + INTEGER(IntKi), PARAMETER :: M19N8MMze = 9971 + INTEGER(IntKi), PARAMETER :: M19N9MMze = 9972 + INTEGER(IntKi), PARAMETER :: M20N1MMze = 9973 + INTEGER(IntKi), PARAMETER :: M20N2MMze = 9974 + INTEGER(IntKi), PARAMETER :: M20N3MMze = 9975 + INTEGER(IntKi), PARAMETER :: M20N4MMze = 9976 + INTEGER(IntKi), PARAMETER :: M20N5MMze = 9977 + INTEGER(IntKi), PARAMETER :: M20N6MMze = 9978 + INTEGER(IntKi), PARAMETER :: M20N7MMze = 9979 + INTEGER(IntKi), PARAMETER :: M20N8MMze = 9980 + INTEGER(IntKi), PARAMETER :: M20N9MMze = 9981 + INTEGER(IntKi), PARAMETER :: M21N1MMze = 9982 + INTEGER(IntKi), PARAMETER :: M21N2MMze = 9983 + INTEGER(IntKi), PARAMETER :: M21N3MMze = 9984 + INTEGER(IntKi), PARAMETER :: M21N4MMze = 9985 + INTEGER(IntKi), PARAMETER :: M21N5MMze = 9986 + INTEGER(IntKi), PARAMETER :: M21N6MMze = 9987 + INTEGER(IntKi), PARAMETER :: M21N7MMze = 9988 + INTEGER(IntKi), PARAMETER :: M21N8MMze = 9989 + INTEGER(IntKi), PARAMETER :: M21N9MMze = 9990 + INTEGER(IntKi), PARAMETER :: M22N1MMze = 9991 + INTEGER(IntKi), PARAMETER :: M22N2MMze = 9992 + INTEGER(IntKi), PARAMETER :: M22N3MMze = 9993 + INTEGER(IntKi), PARAMETER :: M22N4MMze = 9994 + INTEGER(IntKi), PARAMETER :: M22N5MMze = 9995 + INTEGER(IntKi), PARAMETER :: M22N6MMze = 9996 + INTEGER(IntKi), PARAMETER :: M22N7MMze = 9997 + INTEGER(IntKi), PARAMETER :: M22N8MMze = 9998 + INTEGER(IntKi), PARAMETER :: M22N9MMze = 9999 + INTEGER(IntKi), PARAMETER :: M23N1MMze = 10000 + INTEGER(IntKi), PARAMETER :: M23N2MMze = 10001 + INTEGER(IntKi), PARAMETER :: M23N3MMze = 10002 + INTEGER(IntKi), PARAMETER :: M23N4MMze = 10003 + INTEGER(IntKi), PARAMETER :: M23N5MMze = 10004 + INTEGER(IntKi), PARAMETER :: M23N6MMze = 10005 + INTEGER(IntKi), PARAMETER :: M23N7MMze = 10006 + INTEGER(IntKi), PARAMETER :: M23N8MMze = 10007 + INTEGER(IntKi), PARAMETER :: M23N9MMze = 10008 + INTEGER(IntKi), PARAMETER :: M24N1MMze = 10009 + INTEGER(IntKi), PARAMETER :: M24N2MMze = 10010 + INTEGER(IntKi), PARAMETER :: M24N3MMze = 10011 + INTEGER(IntKi), PARAMETER :: M24N4MMze = 10012 + INTEGER(IntKi), PARAMETER :: M24N5MMze = 10013 + INTEGER(IntKi), PARAMETER :: M24N6MMze = 10014 + INTEGER(IntKi), PARAMETER :: M24N7MMze = 10015 + INTEGER(IntKi), PARAMETER :: M24N8MMze = 10016 + INTEGER(IntKi), PARAMETER :: M24N9MMze = 10017 + INTEGER(IntKi), PARAMETER :: M25N1MMze = 10018 + INTEGER(IntKi), PARAMETER :: M25N2MMze = 10019 + INTEGER(IntKi), PARAMETER :: M25N3MMze = 10020 + INTEGER(IntKi), PARAMETER :: M25N4MMze = 10021 + INTEGER(IntKi), PARAMETER :: M25N5MMze = 10022 + INTEGER(IntKi), PARAMETER :: M25N6MMze = 10023 + INTEGER(IntKi), PARAMETER :: M25N7MMze = 10024 + INTEGER(IntKi), PARAMETER :: M25N8MMze = 10025 + INTEGER(IntKi), PARAMETER :: M25N9MMze = 10026 + INTEGER(IntKi), PARAMETER :: M26N1MMze = 10027 + INTEGER(IntKi), PARAMETER :: M26N2MMze = 10028 + INTEGER(IntKi), PARAMETER :: M26N3MMze = 10029 + INTEGER(IntKi), PARAMETER :: M26N4MMze = 10030 + INTEGER(IntKi), PARAMETER :: M26N5MMze = 10031 + INTEGER(IntKi), PARAMETER :: M26N6MMze = 10032 + INTEGER(IntKi), PARAMETER :: M26N7MMze = 10033 + INTEGER(IntKi), PARAMETER :: M26N8MMze = 10034 + INTEGER(IntKi), PARAMETER :: M26N9MMze = 10035 + INTEGER(IntKi), PARAMETER :: M27N1MMze = 10036 + INTEGER(IntKi), PARAMETER :: M27N2MMze = 10037 + INTEGER(IntKi), PARAMETER :: M27N3MMze = 10038 + INTEGER(IntKi), PARAMETER :: M27N4MMze = 10039 + INTEGER(IntKi), PARAMETER :: M27N5MMze = 10040 + INTEGER(IntKi), PARAMETER :: M27N6MMze = 10041 + INTEGER(IntKi), PARAMETER :: M27N7MMze = 10042 + INTEGER(IntKi), PARAMETER :: M27N8MMze = 10043 + INTEGER(IntKi), PARAMETER :: M27N9MMze = 10044 + INTEGER(IntKi), PARAMETER :: M28N1MMze = 10045 + INTEGER(IntKi), PARAMETER :: M28N2MMze = 10046 + INTEGER(IntKi), PARAMETER :: M28N3MMze = 10047 + INTEGER(IntKi), PARAMETER :: M28N4MMze = 10048 + INTEGER(IntKi), PARAMETER :: M28N5MMze = 10049 + INTEGER(IntKi), PARAMETER :: M28N6MMze = 10050 + INTEGER(IntKi), PARAMETER :: M28N7MMze = 10051 + INTEGER(IntKi), PARAMETER :: M28N8MMze = 10052 + INTEGER(IntKi), PARAMETER :: M28N9MMze = 10053 + INTEGER(IntKi), PARAMETER :: M29N1MMze = 10054 + INTEGER(IntKi), PARAMETER :: M29N2MMze = 10055 + INTEGER(IntKi), PARAMETER :: M29N3MMze = 10056 + INTEGER(IntKi), PARAMETER :: M29N4MMze = 10057 + INTEGER(IntKi), PARAMETER :: M29N5MMze = 10058 + INTEGER(IntKi), PARAMETER :: M29N6MMze = 10059 + INTEGER(IntKi), PARAMETER :: M29N7MMze = 10060 + INTEGER(IntKi), PARAMETER :: M29N8MMze = 10061 + INTEGER(IntKi), PARAMETER :: M29N9MMze = 10062 + INTEGER(IntKi), PARAMETER :: M30N1MMze = 10063 + INTEGER(IntKi), PARAMETER :: M30N2MMze = 10064 + INTEGER(IntKi), PARAMETER :: M30N3MMze = 10065 + INTEGER(IntKi), PARAMETER :: M30N4MMze = 10066 + INTEGER(IntKi), PARAMETER :: M30N5MMze = 10067 + INTEGER(IntKi), PARAMETER :: M30N6MMze = 10068 + INTEGER(IntKi), PARAMETER :: M30N7MMze = 10069 + INTEGER(IntKi), PARAMETER :: M30N8MMze = 10070 + INTEGER(IntKi), PARAMETER :: M30N9MMze = 10071 + INTEGER(IntKi), PARAMETER :: M31N1MMze = 10072 + INTEGER(IntKi), PARAMETER :: M31N2MMze = 10073 + INTEGER(IntKi), PARAMETER :: M31N3MMze = 10074 + INTEGER(IntKi), PARAMETER :: M31N4MMze = 10075 + INTEGER(IntKi), PARAMETER :: M31N5MMze = 10076 + INTEGER(IntKi), PARAMETER :: M31N6MMze = 10077 + INTEGER(IntKi), PARAMETER :: M31N7MMze = 10078 + INTEGER(IntKi), PARAMETER :: M31N8MMze = 10079 + INTEGER(IntKi), PARAMETER :: M31N9MMze = 10080 + INTEGER(IntKi), PARAMETER :: M32N1MMze = 10081 + INTEGER(IntKi), PARAMETER :: M32N2MMze = 10082 + INTEGER(IntKi), PARAMETER :: M32N3MMze = 10083 + INTEGER(IntKi), PARAMETER :: M32N4MMze = 10084 + INTEGER(IntKi), PARAMETER :: M32N5MMze = 10085 + INTEGER(IntKi), PARAMETER :: M32N6MMze = 10086 + INTEGER(IntKi), PARAMETER :: M32N7MMze = 10087 + INTEGER(IntKi), PARAMETER :: M32N8MMze = 10088 + INTEGER(IntKi), PARAMETER :: M32N9MMze = 10089 + INTEGER(IntKi), PARAMETER :: M33N1MMze = 10090 + INTEGER(IntKi), PARAMETER :: M33N2MMze = 10091 + INTEGER(IntKi), PARAMETER :: M33N3MMze = 10092 + INTEGER(IntKi), PARAMETER :: M33N4MMze = 10093 + INTEGER(IntKi), PARAMETER :: M33N5MMze = 10094 + INTEGER(IntKi), PARAMETER :: M33N6MMze = 10095 + INTEGER(IntKi), PARAMETER :: M33N7MMze = 10096 + INTEGER(IntKi), PARAMETER :: M33N8MMze = 10097 + INTEGER(IntKi), PARAMETER :: M33N9MMze = 10098 + INTEGER(IntKi), PARAMETER :: M34N1MMze = 10099 + INTEGER(IntKi), PARAMETER :: M34N2MMze = 10100 + INTEGER(IntKi), PARAMETER :: M34N3MMze = 10101 + INTEGER(IntKi), PARAMETER :: M34N4MMze = 10102 + INTEGER(IntKi), PARAMETER :: M34N5MMze = 10103 + INTEGER(IntKi), PARAMETER :: M34N6MMze = 10104 + INTEGER(IntKi), PARAMETER :: M34N7MMze = 10105 + INTEGER(IntKi), PARAMETER :: M34N8MMze = 10106 + INTEGER(IntKi), PARAMETER :: M34N9MMze = 10107 + INTEGER(IntKi), PARAMETER :: M35N1MMze = 10108 + INTEGER(IntKi), PARAMETER :: M35N2MMze = 10109 + INTEGER(IntKi), PARAMETER :: M35N3MMze = 10110 + INTEGER(IntKi), PARAMETER :: M35N4MMze = 10111 + INTEGER(IntKi), PARAMETER :: M35N5MMze = 10112 + INTEGER(IntKi), PARAMETER :: M35N6MMze = 10113 + INTEGER(IntKi), PARAMETER :: M35N7MMze = 10114 + INTEGER(IntKi), PARAMETER :: M35N8MMze = 10115 + INTEGER(IntKi), PARAMETER :: M35N9MMze = 10116 + INTEGER(IntKi), PARAMETER :: M36N1MMze = 10117 + INTEGER(IntKi), PARAMETER :: M36N2MMze = 10118 + INTEGER(IntKi), PARAMETER :: M36N3MMze = 10119 + INTEGER(IntKi), PARAMETER :: M36N4MMze = 10120 + INTEGER(IntKi), PARAMETER :: M36N5MMze = 10121 + INTEGER(IntKi), PARAMETER :: M36N6MMze = 10122 + INTEGER(IntKi), PARAMETER :: M36N7MMze = 10123 + INTEGER(IntKi), PARAMETER :: M36N8MMze = 10124 + INTEGER(IntKi), PARAMETER :: M36N9MMze = 10125 + INTEGER(IntKi), PARAMETER :: M37N1MMze = 10126 + INTEGER(IntKi), PARAMETER :: M37N2MMze = 10127 + INTEGER(IntKi), PARAMETER :: M37N3MMze = 10128 + INTEGER(IntKi), PARAMETER :: M37N4MMze = 10129 + INTEGER(IntKi), PARAMETER :: M37N5MMze = 10130 + INTEGER(IntKi), PARAMETER :: M37N6MMze = 10131 + INTEGER(IntKi), PARAMETER :: M37N7MMze = 10132 + INTEGER(IntKi), PARAMETER :: M37N8MMze = 10133 + INTEGER(IntKi), PARAMETER :: M37N9MMze = 10134 + INTEGER(IntKi), PARAMETER :: M38N1MMze = 10135 + INTEGER(IntKi), PARAMETER :: M38N2MMze = 10136 + INTEGER(IntKi), PARAMETER :: M38N3MMze = 10137 + INTEGER(IntKi), PARAMETER :: M38N4MMze = 10138 + INTEGER(IntKi), PARAMETER :: M38N5MMze = 10139 + INTEGER(IntKi), PARAMETER :: M38N6MMze = 10140 + INTEGER(IntKi), PARAMETER :: M38N7MMze = 10141 + INTEGER(IntKi), PARAMETER :: M38N8MMze = 10142 + INTEGER(IntKi), PARAMETER :: M38N9MMze = 10143 + INTEGER(IntKi), PARAMETER :: M39N1MMze = 10144 + INTEGER(IntKi), PARAMETER :: M39N2MMze = 10145 + INTEGER(IntKi), PARAMETER :: M39N3MMze = 10146 + INTEGER(IntKi), PARAMETER :: M39N4MMze = 10147 + INTEGER(IntKi), PARAMETER :: M39N5MMze = 10148 + INTEGER(IntKi), PARAMETER :: M39N6MMze = 10149 + INTEGER(IntKi), PARAMETER :: M39N7MMze = 10150 + INTEGER(IntKi), PARAMETER :: M39N8MMze = 10151 + INTEGER(IntKi), PARAMETER :: M39N9MMze = 10152 + INTEGER(IntKi), PARAMETER :: M40N1MMze = 10153 + INTEGER(IntKi), PARAMETER :: M40N2MMze = 10154 + INTEGER(IntKi), PARAMETER :: M40N3MMze = 10155 + INTEGER(IntKi), PARAMETER :: M40N4MMze = 10156 + INTEGER(IntKi), PARAMETER :: M40N5MMze = 10157 + INTEGER(IntKi), PARAMETER :: M40N6MMze = 10158 + INTEGER(IntKi), PARAMETER :: M40N7MMze = 10159 + INTEGER(IntKi), PARAMETER :: M40N8MMze = 10160 + INTEGER(IntKi), PARAMETER :: M40N9MMze = 10161 + INTEGER(IntKi), PARAMETER :: M41N1MMze = 10162 + INTEGER(IntKi), PARAMETER :: M41N2MMze = 10163 + INTEGER(IntKi), PARAMETER :: M41N3MMze = 10164 + INTEGER(IntKi), PARAMETER :: M41N4MMze = 10165 + INTEGER(IntKi), PARAMETER :: M41N5MMze = 10166 + INTEGER(IntKi), PARAMETER :: M41N6MMze = 10167 + INTEGER(IntKi), PARAMETER :: M41N7MMze = 10168 + INTEGER(IntKi), PARAMETER :: M41N8MMze = 10169 + INTEGER(IntKi), PARAMETER :: M41N9MMze = 10170 + INTEGER(IntKi), PARAMETER :: M42N1MMze = 10171 + INTEGER(IntKi), PARAMETER :: M42N2MMze = 10172 + INTEGER(IntKi), PARAMETER :: M42N3MMze = 10173 + INTEGER(IntKi), PARAMETER :: M42N4MMze = 10174 + INTEGER(IntKi), PARAMETER :: M42N5MMze = 10175 + INTEGER(IntKi), PARAMETER :: M42N6MMze = 10176 + INTEGER(IntKi), PARAMETER :: M42N7MMze = 10177 + INTEGER(IntKi), PARAMETER :: M42N8MMze = 10178 + INTEGER(IntKi), PARAMETER :: M42N9MMze = 10179 + INTEGER(IntKi), PARAMETER :: M43N1MMze = 10180 + INTEGER(IntKi), PARAMETER :: M43N2MMze = 10181 + INTEGER(IntKi), PARAMETER :: M43N3MMze = 10182 + INTEGER(IntKi), PARAMETER :: M43N4MMze = 10183 + INTEGER(IntKi), PARAMETER :: M43N5MMze = 10184 + INTEGER(IntKi), PARAMETER :: M43N6MMze = 10185 + INTEGER(IntKi), PARAMETER :: M43N7MMze = 10186 + INTEGER(IntKi), PARAMETER :: M43N8MMze = 10187 + INTEGER(IntKi), PARAMETER :: M43N9MMze = 10188 + INTEGER(IntKi), PARAMETER :: M44N1MMze = 10189 + INTEGER(IntKi), PARAMETER :: M44N2MMze = 10190 + INTEGER(IntKi), PARAMETER :: M44N3MMze = 10191 + INTEGER(IntKi), PARAMETER :: M44N4MMze = 10192 + INTEGER(IntKi), PARAMETER :: M44N5MMze = 10193 + INTEGER(IntKi), PARAMETER :: M44N6MMze = 10194 + INTEGER(IntKi), PARAMETER :: M44N7MMze = 10195 + INTEGER(IntKi), PARAMETER :: M44N8MMze = 10196 + INTEGER(IntKi), PARAMETER :: M44N9MMze = 10197 + INTEGER(IntKi), PARAMETER :: M45N1MMze = 10198 + INTEGER(IntKi), PARAMETER :: M45N2MMze = 10199 + INTEGER(IntKi), PARAMETER :: M45N3MMze = 10200 + INTEGER(IntKi), PARAMETER :: M45N4MMze = 10201 + INTEGER(IntKi), PARAMETER :: M45N5MMze = 10202 + INTEGER(IntKi), PARAMETER :: M45N6MMze = 10203 + INTEGER(IntKi), PARAMETER :: M45N7MMze = 10204 + INTEGER(IntKi), PARAMETER :: M45N8MMze = 10205 + INTEGER(IntKi), PARAMETER :: M45N9MMze = 10206 + INTEGER(IntKi), PARAMETER :: M46N1MMze = 10207 + INTEGER(IntKi), PARAMETER :: M46N2MMze = 10208 + INTEGER(IntKi), PARAMETER :: M46N3MMze = 10209 + INTEGER(IntKi), PARAMETER :: M46N4MMze = 10210 + INTEGER(IntKi), PARAMETER :: M46N5MMze = 10211 + INTEGER(IntKi), PARAMETER :: M46N6MMze = 10212 + INTEGER(IntKi), PARAMETER :: M46N7MMze = 10213 + INTEGER(IntKi), PARAMETER :: M46N8MMze = 10214 + INTEGER(IntKi), PARAMETER :: M46N9MMze = 10215 + INTEGER(IntKi), PARAMETER :: M47N1MMze = 10216 + INTEGER(IntKi), PARAMETER :: M47N2MMze = 10217 + INTEGER(IntKi), PARAMETER :: M47N3MMze = 10218 + INTEGER(IntKi), PARAMETER :: M47N4MMze = 10219 + INTEGER(IntKi), PARAMETER :: M47N5MMze = 10220 + INTEGER(IntKi), PARAMETER :: M47N6MMze = 10221 + INTEGER(IntKi), PARAMETER :: M47N7MMze = 10222 + INTEGER(IntKi), PARAMETER :: M47N8MMze = 10223 + INTEGER(IntKi), PARAMETER :: M47N9MMze = 10224 + INTEGER(IntKi), PARAMETER :: M48N1MMze = 10225 + INTEGER(IntKi), PARAMETER :: M48N2MMze = 10226 + INTEGER(IntKi), PARAMETER :: M48N3MMze = 10227 + INTEGER(IntKi), PARAMETER :: M48N4MMze = 10228 + INTEGER(IntKi), PARAMETER :: M48N5MMze = 10229 + INTEGER(IntKi), PARAMETER :: M48N6MMze = 10230 + INTEGER(IntKi), PARAMETER :: M48N7MMze = 10231 + INTEGER(IntKi), PARAMETER :: M48N8MMze = 10232 + INTEGER(IntKi), PARAMETER :: M48N9MMze = 10233 + INTEGER(IntKi), PARAMETER :: M49N1MMze = 10234 + INTEGER(IntKi), PARAMETER :: M49N2MMze = 10235 + INTEGER(IntKi), PARAMETER :: M49N3MMze = 10236 + INTEGER(IntKi), PARAMETER :: M49N4MMze = 10237 + INTEGER(IntKi), PARAMETER :: M49N5MMze = 10238 + INTEGER(IntKi), PARAMETER :: M49N6MMze = 10239 + INTEGER(IntKi), PARAMETER :: M49N7MMze = 10240 + INTEGER(IntKi), PARAMETER :: M49N8MMze = 10241 + INTEGER(IntKi), PARAMETER :: M49N9MMze = 10242 + INTEGER(IntKi), PARAMETER :: M50N1MMze = 10243 + INTEGER(IntKi), PARAMETER :: M50N2MMze = 10244 + INTEGER(IntKi), PARAMETER :: M50N3MMze = 10245 + INTEGER(IntKi), PARAMETER :: M50N4MMze = 10246 + INTEGER(IntKi), PARAMETER :: M50N5MMze = 10247 + INTEGER(IntKi), PARAMETER :: M50N6MMze = 10248 + INTEGER(IntKi), PARAMETER :: M50N7MMze = 10249 + INTEGER(IntKi), PARAMETER :: M50N8MMze = 10250 + INTEGER(IntKi), PARAMETER :: M50N9MMze = 10251 + INTEGER(IntKi), PARAMETER :: M51N1MMze = 10252 + INTEGER(IntKi), PARAMETER :: M51N2MMze = 10253 + INTEGER(IntKi), PARAMETER :: M51N3MMze = 10254 + INTEGER(IntKi), PARAMETER :: M51N4MMze = 10255 + INTEGER(IntKi), PARAMETER :: M51N5MMze = 10256 + INTEGER(IntKi), PARAMETER :: M51N6MMze = 10257 + INTEGER(IntKi), PARAMETER :: M51N7MMze = 10258 + INTEGER(IntKi), PARAMETER :: M51N8MMze = 10259 + INTEGER(IntKi), PARAMETER :: M51N9MMze = 10260 + INTEGER(IntKi), PARAMETER :: M52N1MMze = 10261 + INTEGER(IntKi), PARAMETER :: M52N2MMze = 10262 + INTEGER(IntKi), PARAMETER :: M52N3MMze = 10263 + INTEGER(IntKi), PARAMETER :: M52N4MMze = 10264 + INTEGER(IntKi), PARAMETER :: M52N5MMze = 10265 + INTEGER(IntKi), PARAMETER :: M52N6MMze = 10266 + INTEGER(IntKi), PARAMETER :: M52N7MMze = 10267 + INTEGER(IntKi), PARAMETER :: M52N8MMze = 10268 + INTEGER(IntKi), PARAMETER :: M52N9MMze = 10269 + INTEGER(IntKi), PARAMETER :: M53N1MMze = 10270 + INTEGER(IntKi), PARAMETER :: M53N2MMze = 10271 + INTEGER(IntKi), PARAMETER :: M53N3MMze = 10272 + INTEGER(IntKi), PARAMETER :: M53N4MMze = 10273 + INTEGER(IntKi), PARAMETER :: M53N5MMze = 10274 + INTEGER(IntKi), PARAMETER :: M53N6MMze = 10275 + INTEGER(IntKi), PARAMETER :: M53N7MMze = 10276 + INTEGER(IntKi), PARAMETER :: M53N8MMze = 10277 + INTEGER(IntKi), PARAMETER :: M53N9MMze = 10278 + INTEGER(IntKi), PARAMETER :: M54N1MMze = 10279 + INTEGER(IntKi), PARAMETER :: M54N2MMze = 10280 + INTEGER(IntKi), PARAMETER :: M54N3MMze = 10281 + INTEGER(IntKi), PARAMETER :: M54N4MMze = 10282 + INTEGER(IntKi), PARAMETER :: M54N5MMze = 10283 + INTEGER(IntKi), PARAMETER :: M54N6MMze = 10284 + INTEGER(IntKi), PARAMETER :: M54N7MMze = 10285 + INTEGER(IntKi), PARAMETER :: M54N8MMze = 10286 + INTEGER(IntKi), PARAMETER :: M54N9MMze = 10287 + INTEGER(IntKi), PARAMETER :: M55N1MMze = 10288 + INTEGER(IntKi), PARAMETER :: M55N2MMze = 10289 + INTEGER(IntKi), PARAMETER :: M55N3MMze = 10290 + INTEGER(IntKi), PARAMETER :: M55N4MMze = 10291 + INTEGER(IntKi), PARAMETER :: M55N5MMze = 10292 + INTEGER(IntKi), PARAMETER :: M55N6MMze = 10293 + INTEGER(IntKi), PARAMETER :: M55N7MMze = 10294 + INTEGER(IntKi), PARAMETER :: M55N8MMze = 10295 + INTEGER(IntKi), PARAMETER :: M55N9MMze = 10296 + INTEGER(IntKi), PARAMETER :: M56N1MMze = 10297 + INTEGER(IntKi), PARAMETER :: M56N2MMze = 10298 + INTEGER(IntKi), PARAMETER :: M56N3MMze = 10299 + INTEGER(IntKi), PARAMETER :: M56N4MMze = 10300 + INTEGER(IntKi), PARAMETER :: M56N5MMze = 10301 + INTEGER(IntKi), PARAMETER :: M56N6MMze = 10302 + INTEGER(IntKi), PARAMETER :: M56N7MMze = 10303 + INTEGER(IntKi), PARAMETER :: M56N8MMze = 10304 + INTEGER(IntKi), PARAMETER :: M56N9MMze = 10305 + INTEGER(IntKi), PARAMETER :: M57N1MMze = 10306 + INTEGER(IntKi), PARAMETER :: M57N2MMze = 10307 + INTEGER(IntKi), PARAMETER :: M57N3MMze = 10308 + INTEGER(IntKi), PARAMETER :: M57N4MMze = 10309 + INTEGER(IntKi), PARAMETER :: M57N5MMze = 10310 + INTEGER(IntKi), PARAMETER :: M57N6MMze = 10311 + INTEGER(IntKi), PARAMETER :: M57N7MMze = 10312 + INTEGER(IntKi), PARAMETER :: M57N8MMze = 10313 + INTEGER(IntKi), PARAMETER :: M57N9MMze = 10314 + INTEGER(IntKi), PARAMETER :: M58N1MMze = 10315 + INTEGER(IntKi), PARAMETER :: M58N2MMze = 10316 + INTEGER(IntKi), PARAMETER :: M58N3MMze = 10317 + INTEGER(IntKi), PARAMETER :: M58N4MMze = 10318 + INTEGER(IntKi), PARAMETER :: M58N5MMze = 10319 + INTEGER(IntKi), PARAMETER :: M58N6MMze = 10320 + INTEGER(IntKi), PARAMETER :: M58N7MMze = 10321 + INTEGER(IntKi), PARAMETER :: M58N8MMze = 10322 + INTEGER(IntKi), PARAMETER :: M58N9MMze = 10323 + INTEGER(IntKi), PARAMETER :: M59N1MMze = 10324 + INTEGER(IntKi), PARAMETER :: M59N2MMze = 10325 + INTEGER(IntKi), PARAMETER :: M59N3MMze = 10326 + INTEGER(IntKi), PARAMETER :: M59N4MMze = 10327 + INTEGER(IntKi), PARAMETER :: M59N5MMze = 10328 + INTEGER(IntKi), PARAMETER :: M59N6MMze = 10329 + INTEGER(IntKi), PARAMETER :: M59N7MMze = 10330 + INTEGER(IntKi), PARAMETER :: M59N8MMze = 10331 + INTEGER(IntKi), PARAMETER :: M59N9MMze = 10332 + INTEGER(IntKi), PARAMETER :: M60N1MMze = 10333 + INTEGER(IntKi), PARAMETER :: M60N2MMze = 10334 + INTEGER(IntKi), PARAMETER :: M60N3MMze = 10335 + INTEGER(IntKi), PARAMETER :: M60N4MMze = 10336 + INTEGER(IntKi), PARAMETER :: M60N5MMze = 10337 + INTEGER(IntKi), PARAMETER :: M60N6MMze = 10338 + INTEGER(IntKi), PARAMETER :: M60N7MMze = 10339 + INTEGER(IntKi), PARAMETER :: M60N8MMze = 10340 + INTEGER(IntKi), PARAMETER :: M60N9MMze = 10341 + INTEGER(IntKi), PARAMETER :: M61N1MMze = 10342 + INTEGER(IntKi), PARAMETER :: M61N2MMze = 10343 + INTEGER(IntKi), PARAMETER :: M61N3MMze = 10344 + INTEGER(IntKi), PARAMETER :: M61N4MMze = 10345 + INTEGER(IntKi), PARAMETER :: M61N5MMze = 10346 + INTEGER(IntKi), PARAMETER :: M61N6MMze = 10347 + INTEGER(IntKi), PARAMETER :: M61N7MMze = 10348 + INTEGER(IntKi), PARAMETER :: M61N8MMze = 10349 + INTEGER(IntKi), PARAMETER :: M61N9MMze = 10350 + INTEGER(IntKi), PARAMETER :: M62N1MMze = 10351 + INTEGER(IntKi), PARAMETER :: M62N2MMze = 10352 + INTEGER(IntKi), PARAMETER :: M62N3MMze = 10353 + INTEGER(IntKi), PARAMETER :: M62N4MMze = 10354 + INTEGER(IntKi), PARAMETER :: M62N5MMze = 10355 + INTEGER(IntKi), PARAMETER :: M62N6MMze = 10356 + INTEGER(IntKi), PARAMETER :: M62N7MMze = 10357 + INTEGER(IntKi), PARAMETER :: M62N8MMze = 10358 + INTEGER(IntKi), PARAMETER :: M62N9MMze = 10359 + INTEGER(IntKi), PARAMETER :: M63N1MMze = 10360 + INTEGER(IntKi), PARAMETER :: M63N2MMze = 10361 + INTEGER(IntKi), PARAMETER :: M63N3MMze = 10362 + INTEGER(IntKi), PARAMETER :: M63N4MMze = 10363 + INTEGER(IntKi), PARAMETER :: M63N5MMze = 10364 + INTEGER(IntKi), PARAMETER :: M63N6MMze = 10365 + INTEGER(IntKi), PARAMETER :: M63N7MMze = 10366 + INTEGER(IntKi), PARAMETER :: M63N8MMze = 10367 + INTEGER(IntKi), PARAMETER :: M63N9MMze = 10368 + INTEGER(IntKi), PARAMETER :: M64N1MMze = 10369 + INTEGER(IntKi), PARAMETER :: M64N2MMze = 10370 + INTEGER(IntKi), PARAMETER :: M64N3MMze = 10371 + INTEGER(IntKi), PARAMETER :: M64N4MMze = 10372 + INTEGER(IntKi), PARAMETER :: M64N5MMze = 10373 + INTEGER(IntKi), PARAMETER :: M64N6MMze = 10374 + INTEGER(IntKi), PARAMETER :: M64N7MMze = 10375 + INTEGER(IntKi), PARAMETER :: M64N8MMze = 10376 + INTEGER(IntKi), PARAMETER :: M64N9MMze = 10377 + INTEGER(IntKi), PARAMETER :: M65N1MMze = 10378 + INTEGER(IntKi), PARAMETER :: M65N2MMze = 10379 + INTEGER(IntKi), PARAMETER :: M65N3MMze = 10380 + INTEGER(IntKi), PARAMETER :: M65N4MMze = 10381 + INTEGER(IntKi), PARAMETER :: M65N5MMze = 10382 + INTEGER(IntKi), PARAMETER :: M65N6MMze = 10383 + INTEGER(IntKi), PARAMETER :: M65N7MMze = 10384 + INTEGER(IntKi), PARAMETER :: M65N8MMze = 10385 + INTEGER(IntKi), PARAMETER :: M65N9MMze = 10386 + INTEGER(IntKi), PARAMETER :: M66N1MMze = 10387 + INTEGER(IntKi), PARAMETER :: M66N2MMze = 10388 + INTEGER(IntKi), PARAMETER :: M66N3MMze = 10389 + INTEGER(IntKi), PARAMETER :: M66N4MMze = 10390 + INTEGER(IntKi), PARAMETER :: M66N5MMze = 10391 + INTEGER(IntKi), PARAMETER :: M66N6MMze = 10392 + INTEGER(IntKi), PARAMETER :: M66N7MMze = 10393 + INTEGER(IntKi), PARAMETER :: M66N8MMze = 10394 + INTEGER(IntKi), PARAMETER :: M66N9MMze = 10395 + INTEGER(IntKi), PARAMETER :: M67N1MMze = 10396 + INTEGER(IntKi), PARAMETER :: M67N2MMze = 10397 + INTEGER(IntKi), PARAMETER :: M67N3MMze = 10398 + INTEGER(IntKi), PARAMETER :: M67N4MMze = 10399 + INTEGER(IntKi), PARAMETER :: M67N5MMze = 10400 + INTEGER(IntKi), PARAMETER :: M67N6MMze = 10401 + INTEGER(IntKi), PARAMETER :: M67N7MMze = 10402 + INTEGER(IntKi), PARAMETER :: M67N8MMze = 10403 + INTEGER(IntKi), PARAMETER :: M67N9MMze = 10404 + INTEGER(IntKi), PARAMETER :: M68N1MMze = 10405 + INTEGER(IntKi), PARAMETER :: M68N2MMze = 10406 + INTEGER(IntKi), PARAMETER :: M68N3MMze = 10407 + INTEGER(IntKi), PARAMETER :: M68N4MMze = 10408 + INTEGER(IntKi), PARAMETER :: M68N5MMze = 10409 + INTEGER(IntKi), PARAMETER :: M68N6MMze = 10410 + INTEGER(IntKi), PARAMETER :: M68N7MMze = 10411 + INTEGER(IntKi), PARAMETER :: M68N8MMze = 10412 + INTEGER(IntKi), PARAMETER :: M68N9MMze = 10413 + INTEGER(IntKi), PARAMETER :: M69N1MMze = 10414 + INTEGER(IntKi), PARAMETER :: M69N2MMze = 10415 + INTEGER(IntKi), PARAMETER :: M69N3MMze = 10416 + INTEGER(IntKi), PARAMETER :: M69N4MMze = 10417 + INTEGER(IntKi), PARAMETER :: M69N5MMze = 10418 + INTEGER(IntKi), PARAMETER :: M69N6MMze = 10419 + INTEGER(IntKi), PARAMETER :: M69N7MMze = 10420 + INTEGER(IntKi), PARAMETER :: M69N8MMze = 10421 + INTEGER(IntKi), PARAMETER :: M69N9MMze = 10422 + INTEGER(IntKi), PARAMETER :: M70N1MMze = 10423 + INTEGER(IntKi), PARAMETER :: M70N2MMze = 10424 + INTEGER(IntKi), PARAMETER :: M70N3MMze = 10425 + INTEGER(IntKi), PARAMETER :: M70N4MMze = 10426 + INTEGER(IntKi), PARAMETER :: M70N5MMze = 10427 + INTEGER(IntKi), PARAMETER :: M70N6MMze = 10428 + INTEGER(IntKi), PARAMETER :: M70N7MMze = 10429 + INTEGER(IntKi), PARAMETER :: M70N8MMze = 10430 + INTEGER(IntKi), PARAMETER :: M70N9MMze = 10431 + INTEGER(IntKi), PARAMETER :: M71N1MMze = 10432 + INTEGER(IntKi), PARAMETER :: M71N2MMze = 10433 + INTEGER(IntKi), PARAMETER :: M71N3MMze = 10434 + INTEGER(IntKi), PARAMETER :: M71N4MMze = 10435 + INTEGER(IntKi), PARAMETER :: M71N5MMze = 10436 + INTEGER(IntKi), PARAMETER :: M71N6MMze = 10437 + INTEGER(IntKi), PARAMETER :: M71N7MMze = 10438 + INTEGER(IntKi), PARAMETER :: M71N8MMze = 10439 + INTEGER(IntKi), PARAMETER :: M71N9MMze = 10440 + INTEGER(IntKi), PARAMETER :: M72N1MMze = 10441 + INTEGER(IntKi), PARAMETER :: M72N2MMze = 10442 + INTEGER(IntKi), PARAMETER :: M72N3MMze = 10443 + INTEGER(IntKi), PARAMETER :: M72N4MMze = 10444 + INTEGER(IntKi), PARAMETER :: M72N5MMze = 10445 + INTEGER(IntKi), PARAMETER :: M72N6MMze = 10446 + INTEGER(IntKi), PARAMETER :: M72N7MMze = 10447 + INTEGER(IntKi), PARAMETER :: M72N8MMze = 10448 + INTEGER(IntKi), PARAMETER :: M72N9MMze = 10449 + INTEGER(IntKi), PARAMETER :: M73N1MMze = 10450 + INTEGER(IntKi), PARAMETER :: M73N2MMze = 10451 + INTEGER(IntKi), PARAMETER :: M73N3MMze = 10452 + INTEGER(IntKi), PARAMETER :: M73N4MMze = 10453 + INTEGER(IntKi), PARAMETER :: M73N5MMze = 10454 + INTEGER(IntKi), PARAMETER :: M73N6MMze = 10455 + INTEGER(IntKi), PARAMETER :: M73N7MMze = 10456 + INTEGER(IntKi), PARAMETER :: M73N8MMze = 10457 + INTEGER(IntKi), PARAMETER :: M73N9MMze = 10458 + INTEGER(IntKi), PARAMETER :: M74N1MMze = 10459 + INTEGER(IntKi), PARAMETER :: M74N2MMze = 10460 + INTEGER(IntKi), PARAMETER :: M74N3MMze = 10461 + INTEGER(IntKi), PARAMETER :: M74N4MMze = 10462 + INTEGER(IntKi), PARAMETER :: M74N5MMze = 10463 + INTEGER(IntKi), PARAMETER :: M74N6MMze = 10464 + INTEGER(IntKi), PARAMETER :: M74N7MMze = 10465 + INTEGER(IntKi), PARAMETER :: M74N8MMze = 10466 + INTEGER(IntKi), PARAMETER :: M74N9MMze = 10467 + INTEGER(IntKi), PARAMETER :: M75N1MMze = 10468 + INTEGER(IntKi), PARAMETER :: M75N2MMze = 10469 + INTEGER(IntKi), PARAMETER :: M75N3MMze = 10470 + INTEGER(IntKi), PARAMETER :: M75N4MMze = 10471 + INTEGER(IntKi), PARAMETER :: M75N5MMze = 10472 + INTEGER(IntKi), PARAMETER :: M75N6MMze = 10473 + INTEGER(IntKi), PARAMETER :: M75N7MMze = 10474 + INTEGER(IntKi), PARAMETER :: M75N8MMze = 10475 + INTEGER(IntKi), PARAMETER :: M75N9MMze = 10476 + INTEGER(IntKi), PARAMETER :: M76N1MMze = 10477 + INTEGER(IntKi), PARAMETER :: M76N2MMze = 10478 + INTEGER(IntKi), PARAMETER :: M76N3MMze = 10479 + INTEGER(IntKi), PARAMETER :: M76N4MMze = 10480 + INTEGER(IntKi), PARAMETER :: M76N5MMze = 10481 + INTEGER(IntKi), PARAMETER :: M76N6MMze = 10482 + INTEGER(IntKi), PARAMETER :: M76N7MMze = 10483 + INTEGER(IntKi), PARAMETER :: M76N8MMze = 10484 + INTEGER(IntKi), PARAMETER :: M76N9MMze = 10485 + INTEGER(IntKi), PARAMETER :: M77N1MMze = 10486 + INTEGER(IntKi), PARAMETER :: M77N2MMze = 10487 + INTEGER(IntKi), PARAMETER :: M77N3MMze = 10488 + INTEGER(IntKi), PARAMETER :: M77N4MMze = 10489 + INTEGER(IntKi), PARAMETER :: M77N5MMze = 10490 + INTEGER(IntKi), PARAMETER :: M77N6MMze = 10491 + INTEGER(IntKi), PARAMETER :: M77N7MMze = 10492 + INTEGER(IntKi), PARAMETER :: M77N8MMze = 10493 + INTEGER(IntKi), PARAMETER :: M77N9MMze = 10494 + INTEGER(IntKi), PARAMETER :: M78N1MMze = 10495 + INTEGER(IntKi), PARAMETER :: M78N2MMze = 10496 + INTEGER(IntKi), PARAMETER :: M78N3MMze = 10497 + INTEGER(IntKi), PARAMETER :: M78N4MMze = 10498 + INTEGER(IntKi), PARAMETER :: M78N5MMze = 10499 + INTEGER(IntKi), PARAMETER :: M78N6MMze = 10500 + INTEGER(IntKi), PARAMETER :: M78N7MMze = 10501 + INTEGER(IntKi), PARAMETER :: M78N8MMze = 10502 + INTEGER(IntKi), PARAMETER :: M78N9MMze = 10503 + INTEGER(IntKi), PARAMETER :: M79N1MMze = 10504 + INTEGER(IntKi), PARAMETER :: M79N2MMze = 10505 + INTEGER(IntKi), PARAMETER :: M79N3MMze = 10506 + INTEGER(IntKi), PARAMETER :: M79N4MMze = 10507 + INTEGER(IntKi), PARAMETER :: M79N5MMze = 10508 + INTEGER(IntKi), PARAMETER :: M79N6MMze = 10509 + INTEGER(IntKi), PARAMETER :: M79N7MMze = 10510 + INTEGER(IntKi), PARAMETER :: M79N8MMze = 10511 + INTEGER(IntKi), PARAMETER :: M79N9MMze = 10512 + INTEGER(IntKi), PARAMETER :: M80N1MMze = 10513 + INTEGER(IntKi), PARAMETER :: M80N2MMze = 10514 + INTEGER(IntKi), PARAMETER :: M80N3MMze = 10515 + INTEGER(IntKi), PARAMETER :: M80N4MMze = 10516 + INTEGER(IntKi), PARAMETER :: M80N5MMze = 10517 + INTEGER(IntKi), PARAMETER :: M80N6MMze = 10518 + INTEGER(IntKi), PARAMETER :: M80N7MMze = 10519 + INTEGER(IntKi), PARAMETER :: M80N8MMze = 10520 + INTEGER(IntKi), PARAMETER :: M80N9MMze = 10521 + INTEGER(IntKi), PARAMETER :: M81N1MMze = 10522 + INTEGER(IntKi), PARAMETER :: M81N2MMze = 10523 + INTEGER(IntKi), PARAMETER :: M81N3MMze = 10524 + INTEGER(IntKi), PARAMETER :: M81N4MMze = 10525 + INTEGER(IntKi), PARAMETER :: M81N5MMze = 10526 + INTEGER(IntKi), PARAMETER :: M81N6MMze = 10527 + INTEGER(IntKi), PARAMETER :: M81N7MMze = 10528 + INTEGER(IntKi), PARAMETER :: M81N8MMze = 10529 + INTEGER(IntKi), PARAMETER :: M81N9MMze = 10530 + INTEGER(IntKi), PARAMETER :: M82N1MMze = 10531 + INTEGER(IntKi), PARAMETER :: M82N2MMze = 10532 + INTEGER(IntKi), PARAMETER :: M82N3MMze = 10533 + INTEGER(IntKi), PARAMETER :: M82N4MMze = 10534 + INTEGER(IntKi), PARAMETER :: M82N5MMze = 10535 + INTEGER(IntKi), PARAMETER :: M82N6MMze = 10536 + INTEGER(IntKi), PARAMETER :: M82N7MMze = 10537 + INTEGER(IntKi), PARAMETER :: M82N8MMze = 10538 + INTEGER(IntKi), PARAMETER :: M82N9MMze = 10539 + INTEGER(IntKi), PARAMETER :: M83N1MMze = 10540 + INTEGER(IntKi), PARAMETER :: M83N2MMze = 10541 + INTEGER(IntKi), PARAMETER :: M83N3MMze = 10542 + INTEGER(IntKi), PARAMETER :: M83N4MMze = 10543 + INTEGER(IntKi), PARAMETER :: M83N5MMze = 10544 + INTEGER(IntKi), PARAMETER :: M83N6MMze = 10545 + INTEGER(IntKi), PARAMETER :: M83N7MMze = 10546 + INTEGER(IntKi), PARAMETER :: M83N8MMze = 10547 + INTEGER(IntKi), PARAMETER :: M83N9MMze = 10548 + INTEGER(IntKi), PARAMETER :: M84N1MMze = 10549 + INTEGER(IntKi), PARAMETER :: M84N2MMze = 10550 + INTEGER(IntKi), PARAMETER :: M84N3MMze = 10551 + INTEGER(IntKi), PARAMETER :: M84N4MMze = 10552 + INTEGER(IntKi), PARAMETER :: M84N5MMze = 10553 + INTEGER(IntKi), PARAMETER :: M84N6MMze = 10554 + INTEGER(IntKi), PARAMETER :: M84N7MMze = 10555 + INTEGER(IntKi), PARAMETER :: M84N8MMze = 10556 + INTEGER(IntKi), PARAMETER :: M84N9MMze = 10557 + INTEGER(IntKi), PARAMETER :: M85N1MMze = 10558 + INTEGER(IntKi), PARAMETER :: M85N2MMze = 10559 + INTEGER(IntKi), PARAMETER :: M85N3MMze = 10560 + INTEGER(IntKi), PARAMETER :: M85N4MMze = 10561 + INTEGER(IntKi), PARAMETER :: M85N5MMze = 10562 + INTEGER(IntKi), PARAMETER :: M85N6MMze = 10563 + INTEGER(IntKi), PARAMETER :: M85N7MMze = 10564 + INTEGER(IntKi), PARAMETER :: M85N8MMze = 10565 + INTEGER(IntKi), PARAMETER :: M85N9MMze = 10566 + INTEGER(IntKi), PARAMETER :: M86N1MMze = 10567 + INTEGER(IntKi), PARAMETER :: M86N2MMze = 10568 + INTEGER(IntKi), PARAMETER :: M86N3MMze = 10569 + INTEGER(IntKi), PARAMETER :: M86N4MMze = 10570 + INTEGER(IntKi), PARAMETER :: M86N5MMze = 10571 + INTEGER(IntKi), PARAMETER :: M86N6MMze = 10572 + INTEGER(IntKi), PARAMETER :: M86N7MMze = 10573 + INTEGER(IntKi), PARAMETER :: M86N8MMze = 10574 + INTEGER(IntKi), PARAMETER :: M86N9MMze = 10575 + INTEGER(IntKi), PARAMETER :: M87N1MMze = 10576 + INTEGER(IntKi), PARAMETER :: M87N2MMze = 10577 + INTEGER(IntKi), PARAMETER :: M87N3MMze = 10578 + INTEGER(IntKi), PARAMETER :: M87N4MMze = 10579 + INTEGER(IntKi), PARAMETER :: M87N5MMze = 10580 + INTEGER(IntKi), PARAMETER :: M87N6MMze = 10581 + INTEGER(IntKi), PARAMETER :: M87N7MMze = 10582 + INTEGER(IntKi), PARAMETER :: M87N8MMze = 10583 + INTEGER(IntKi), PARAMETER :: M87N9MMze = 10584 + INTEGER(IntKi), PARAMETER :: M88N1MMze = 10585 + INTEGER(IntKi), PARAMETER :: M88N2MMze = 10586 + INTEGER(IntKi), PARAMETER :: M88N3MMze = 10587 + INTEGER(IntKi), PARAMETER :: M88N4MMze = 10588 + INTEGER(IntKi), PARAMETER :: M88N5MMze = 10589 + INTEGER(IntKi), PARAMETER :: M88N6MMze = 10590 + INTEGER(IntKi), PARAMETER :: M88N7MMze = 10591 + INTEGER(IntKi), PARAMETER :: M88N8MMze = 10592 + INTEGER(IntKi), PARAMETER :: M88N9MMze = 10593 + INTEGER(IntKi), PARAMETER :: M89N1MMze = 10594 + INTEGER(IntKi), PARAMETER :: M89N2MMze = 10595 + INTEGER(IntKi), PARAMETER :: M89N3MMze = 10596 + INTEGER(IntKi), PARAMETER :: M89N4MMze = 10597 + INTEGER(IntKi), PARAMETER :: M89N5MMze = 10598 + INTEGER(IntKi), PARAMETER :: M89N6MMze = 10599 + INTEGER(IntKi), PARAMETER :: M89N7MMze = 10600 + INTEGER(IntKi), PARAMETER :: M89N8MMze = 10601 + INTEGER(IntKi), PARAMETER :: M89N9MMze = 10602 + INTEGER(IntKi), PARAMETER :: M90N1MMze = 10603 + INTEGER(IntKi), PARAMETER :: M90N2MMze = 10604 + INTEGER(IntKi), PARAMETER :: M90N3MMze = 10605 + INTEGER(IntKi), PARAMETER :: M90N4MMze = 10606 + INTEGER(IntKi), PARAMETER :: M90N5MMze = 10607 + INTEGER(IntKi), PARAMETER :: M90N6MMze = 10608 + INTEGER(IntKi), PARAMETER :: M90N7MMze = 10609 + INTEGER(IntKi), PARAMETER :: M90N8MMze = 10610 + INTEGER(IntKi), PARAMETER :: M90N9MMze = 10611 + INTEGER(IntKi), PARAMETER :: M91N1MMze = 10612 + INTEGER(IntKi), PARAMETER :: M91N2MMze = 10613 + INTEGER(IntKi), PARAMETER :: M91N3MMze = 10614 + INTEGER(IntKi), PARAMETER :: M91N4MMze = 10615 + INTEGER(IntKi), PARAMETER :: M91N5MMze = 10616 + INTEGER(IntKi), PARAMETER :: M91N6MMze = 10617 + INTEGER(IntKi), PARAMETER :: M91N7MMze = 10618 + INTEGER(IntKi), PARAMETER :: M91N8MMze = 10619 + INTEGER(IntKi), PARAMETER :: M91N9MMze = 10620 + INTEGER(IntKi), PARAMETER :: M92N1MMze = 10621 + INTEGER(IntKi), PARAMETER :: M92N2MMze = 10622 + INTEGER(IntKi), PARAMETER :: M92N3MMze = 10623 + INTEGER(IntKi), PARAMETER :: M92N4MMze = 10624 + INTEGER(IntKi), PARAMETER :: M92N5MMze = 10625 + INTEGER(IntKi), PARAMETER :: M92N6MMze = 10626 + INTEGER(IntKi), PARAMETER :: M92N7MMze = 10627 + INTEGER(IntKi), PARAMETER :: M92N8MMze = 10628 + INTEGER(IntKi), PARAMETER :: M92N9MMze = 10629 + INTEGER(IntKi), PARAMETER :: M93N1MMze = 10630 + INTEGER(IntKi), PARAMETER :: M93N2MMze = 10631 + INTEGER(IntKi), PARAMETER :: M93N3MMze = 10632 + INTEGER(IntKi), PARAMETER :: M93N4MMze = 10633 + INTEGER(IntKi), PARAMETER :: M93N5MMze = 10634 + INTEGER(IntKi), PARAMETER :: M93N6MMze = 10635 + INTEGER(IntKi), PARAMETER :: M93N7MMze = 10636 + INTEGER(IntKi), PARAMETER :: M93N8MMze = 10637 + INTEGER(IntKi), PARAMETER :: M93N9MMze = 10638 + INTEGER(IntKi), PARAMETER :: M94N1MMze = 10639 + INTEGER(IntKi), PARAMETER :: M94N2MMze = 10640 + INTEGER(IntKi), PARAMETER :: M94N3MMze = 10641 + INTEGER(IntKi), PARAMETER :: M94N4MMze = 10642 + INTEGER(IntKi), PARAMETER :: M94N5MMze = 10643 + INTEGER(IntKi), PARAMETER :: M94N6MMze = 10644 + INTEGER(IntKi), PARAMETER :: M94N7MMze = 10645 + INTEGER(IntKi), PARAMETER :: M94N8MMze = 10646 + INTEGER(IntKi), PARAMETER :: M94N9MMze = 10647 + INTEGER(IntKi), PARAMETER :: M95N1MMze = 10648 + INTEGER(IntKi), PARAMETER :: M95N2MMze = 10649 + INTEGER(IntKi), PARAMETER :: M95N3MMze = 10650 + INTEGER(IntKi), PARAMETER :: M95N4MMze = 10651 + INTEGER(IntKi), PARAMETER :: M95N5MMze = 10652 + INTEGER(IntKi), PARAMETER :: M95N6MMze = 10653 + INTEGER(IntKi), PARAMETER :: M95N7MMze = 10654 + INTEGER(IntKi), PARAMETER :: M95N8MMze = 10655 + INTEGER(IntKi), PARAMETER :: M95N9MMze = 10656 + INTEGER(IntKi), PARAMETER :: M96N1MMze = 10657 + INTEGER(IntKi), PARAMETER :: M96N2MMze = 10658 + INTEGER(IntKi), PARAMETER :: M96N3MMze = 10659 + INTEGER(IntKi), PARAMETER :: M96N4MMze = 10660 + INTEGER(IntKi), PARAMETER :: M96N5MMze = 10661 + INTEGER(IntKi), PARAMETER :: M96N6MMze = 10662 + INTEGER(IntKi), PARAMETER :: M96N7MMze = 10663 + INTEGER(IntKi), PARAMETER :: M96N8MMze = 10664 + INTEGER(IntKi), PARAMETER :: M96N9MMze = 10665 + INTEGER(IntKi), PARAMETER :: M97N1MMze = 10666 + INTEGER(IntKi), PARAMETER :: M97N2MMze = 10667 + INTEGER(IntKi), PARAMETER :: M97N3MMze = 10668 + INTEGER(IntKi), PARAMETER :: M97N4MMze = 10669 + INTEGER(IntKi), PARAMETER :: M97N5MMze = 10670 + INTEGER(IntKi), PARAMETER :: M97N6MMze = 10671 + INTEGER(IntKi), PARAMETER :: M97N7MMze = 10672 + INTEGER(IntKi), PARAMETER :: M97N8MMze = 10673 + INTEGER(IntKi), PARAMETER :: M97N9MMze = 10674 + INTEGER(IntKi), PARAMETER :: M98N1MMze = 10675 + INTEGER(IntKi), PARAMETER :: M98N2MMze = 10676 + INTEGER(IntKi), PARAMETER :: M98N3MMze = 10677 + INTEGER(IntKi), PARAMETER :: M98N4MMze = 10678 + INTEGER(IntKi), PARAMETER :: M98N5MMze = 10679 + INTEGER(IntKi), PARAMETER :: M98N6MMze = 10680 + INTEGER(IntKi), PARAMETER :: M98N7MMze = 10681 + INTEGER(IntKi), PARAMETER :: M98N8MMze = 10682 + INTEGER(IntKi), PARAMETER :: M98N9MMze = 10683 + INTEGER(IntKi), PARAMETER :: M99N1MMze = 10684 + INTEGER(IntKi), PARAMETER :: M99N2MMze = 10685 + INTEGER(IntKi), PARAMETER :: M99N3MMze = 10686 + INTEGER(IntKi), PARAMETER :: M99N4MMze = 10687 + INTEGER(IntKi), PARAMETER :: M99N5MMze = 10688 + INTEGER(IntKi), PARAMETER :: M99N6MMze = 10689 + INTEGER(IntKi), PARAMETER :: M99N7MMze = 10690 + INTEGER(IntKi), PARAMETER :: M99N8MMze = 10691 + INTEGER(IntKi), PARAMETER :: M99N9MMze = 10692 - INTEGER(IntKi), PARAMETER :: M1N1TDxss = 973 - INTEGER(IntKi), PARAMETER :: M1N2TDxss = 974 - INTEGER(IntKi), PARAMETER :: M1N3TDxss = 975 - INTEGER(IntKi), PARAMETER :: M1N4TDxss = 976 - INTEGER(IntKi), PARAMETER :: M1N5TDxss = 977 - INTEGER(IntKi), PARAMETER :: M1N6TDxss = 978 - INTEGER(IntKi), PARAMETER :: M1N7TDxss = 979 - INTEGER(IntKi), PARAMETER :: M1N8TDxss = 980 - INTEGER(IntKi), PARAMETER :: M1N9TDxss = 981 - INTEGER(IntKi), PARAMETER :: M2N1TDxss = 982 - INTEGER(IntKi), PARAMETER :: M2N2TDxss = 983 - INTEGER(IntKi), PARAMETER :: M2N3TDxss = 984 - INTEGER(IntKi), PARAMETER :: M2N4TDxss = 985 - INTEGER(IntKi), PARAMETER :: M2N5TDxss = 986 - INTEGER(IntKi), PARAMETER :: M2N6TDxss = 987 - INTEGER(IntKi), PARAMETER :: M2N7TDxss = 988 - INTEGER(IntKi), PARAMETER :: M2N8TDxss = 989 - INTEGER(IntKi), PARAMETER :: M2N9TDxss = 990 - INTEGER(IntKi), PARAMETER :: M3N1TDxss = 991 - INTEGER(IntKi), PARAMETER :: M3N2TDxss = 992 - INTEGER(IntKi), PARAMETER :: M3N3TDxss = 993 - INTEGER(IntKi), PARAMETER :: M3N4TDxss = 994 - INTEGER(IntKi), PARAMETER :: M3N5TDxss = 995 - INTEGER(IntKi), PARAMETER :: M3N6TDxss = 996 - INTEGER(IntKi), PARAMETER :: M3N7TDxss = 997 - INTEGER(IntKi), PARAMETER :: M3N8TDxss = 998 - INTEGER(IntKi), PARAMETER :: M3N9TDxss = 999 - INTEGER(IntKi), PARAMETER :: M4N1TDxss = 1000 - INTEGER(IntKi), PARAMETER :: M4N2TDxss = 1001 - INTEGER(IntKi), PARAMETER :: M4N3TDxss = 1002 - INTEGER(IntKi), PARAMETER :: M4N4TDxss = 1003 - INTEGER(IntKi), PARAMETER :: M4N5TDxss = 1004 - INTEGER(IntKi), PARAMETER :: M4N6TDxss = 1005 - INTEGER(IntKi), PARAMETER :: M4N7TDxss = 1006 - INTEGER(IntKi), PARAMETER :: M4N8TDxss = 1007 - INTEGER(IntKi), PARAMETER :: M4N9TDxss = 1008 - INTEGER(IntKi), PARAMETER :: M5N1TDxss = 1009 - INTEGER(IntKi), PARAMETER :: M5N2TDxss = 1010 - INTEGER(IntKi), PARAMETER :: M5N3TDxss = 1011 - INTEGER(IntKi), PARAMETER :: M5N4TDxss = 1012 - INTEGER(IntKi), PARAMETER :: M5N5TDxss = 1013 - INTEGER(IntKi), PARAMETER :: M5N6TDxss = 1014 - INTEGER(IntKi), PARAMETER :: M5N7TDxss = 1015 - INTEGER(IntKi), PARAMETER :: M5N8TDxss = 1016 - INTEGER(IntKi), PARAMETER :: M5N9TDxss = 1017 - INTEGER(IntKi), PARAMETER :: M6N1TDxss = 1018 - INTEGER(IntKi), PARAMETER :: M6N2TDxss = 1019 - INTEGER(IntKi), PARAMETER :: M6N3TDxss = 1020 - INTEGER(IntKi), PARAMETER :: M6N4TDxss = 1021 - INTEGER(IntKi), PARAMETER :: M6N5TDxss = 1022 - INTEGER(IntKi), PARAMETER :: M6N6TDxss = 1023 - INTEGER(IntKi), PARAMETER :: M6N7TDxss = 1024 - INTEGER(IntKi), PARAMETER :: M6N8TDxss = 1025 - INTEGER(IntKi), PARAMETER :: M6N9TDxss = 1026 - INTEGER(IntKi), PARAMETER :: M7N1TDxss = 1027 - INTEGER(IntKi), PARAMETER :: M7N2TDxss = 1028 - INTEGER(IntKi), PARAMETER :: M7N3TDxss = 1029 - INTEGER(IntKi), PARAMETER :: M7N4TDxss = 1030 - INTEGER(IntKi), PARAMETER :: M7N5TDxss = 1031 - INTEGER(IntKi), PARAMETER :: M7N6TDxss = 1032 - INTEGER(IntKi), PARAMETER :: M7N7TDxss = 1033 - INTEGER(IntKi), PARAMETER :: M7N8TDxss = 1034 - INTEGER(IntKi), PARAMETER :: M7N9TDxss = 1035 - INTEGER(IntKi), PARAMETER :: M8N1TDxss = 1036 - INTEGER(IntKi), PARAMETER :: M8N2TDxss = 1037 - INTEGER(IntKi), PARAMETER :: M8N3TDxss = 1038 - INTEGER(IntKi), PARAMETER :: M8N4TDxss = 1039 - INTEGER(IntKi), PARAMETER :: M8N5TDxss = 1040 - INTEGER(IntKi), PARAMETER :: M8N6TDxss = 1041 - INTEGER(IntKi), PARAMETER :: M8N7TDxss = 1042 - INTEGER(IntKi), PARAMETER :: M8N8TDxss = 1043 - INTEGER(IntKi), PARAMETER :: M8N9TDxss = 1044 - INTEGER(IntKi), PARAMETER :: M9N1TDxss = 1045 - INTEGER(IntKi), PARAMETER :: M9N2TDxss = 1046 - INTEGER(IntKi), PARAMETER :: M9N3TDxss = 1047 - INTEGER(IntKi), PARAMETER :: M9N4TDxss = 1048 - INTEGER(IntKi), PARAMETER :: M9N5TDxss = 1049 - INTEGER(IntKi), PARAMETER :: M9N6TDxss = 1050 - INTEGER(IntKi), PARAMETER :: M9N7TDxss = 1051 - INTEGER(IntKi), PARAMETER :: M9N8TDxss = 1052 - INTEGER(IntKi), PARAMETER :: M9N9TDxss = 1053 - INTEGER(IntKi), PARAMETER :: M1N1TDyss = 1054 - INTEGER(IntKi), PARAMETER :: M1N2TDyss = 1055 - INTEGER(IntKi), PARAMETER :: M1N3TDyss = 1056 - INTEGER(IntKi), PARAMETER :: M1N4TDyss = 1057 - INTEGER(IntKi), PARAMETER :: M1N5TDyss = 1058 - INTEGER(IntKi), PARAMETER :: M1N6TDyss = 1059 - INTEGER(IntKi), PARAMETER :: M1N7TDyss = 1060 - INTEGER(IntKi), PARAMETER :: M1N8TDyss = 1061 - INTEGER(IntKi), PARAMETER :: M1N9TDyss = 1062 - INTEGER(IntKi), PARAMETER :: M2N1TDyss = 1063 - INTEGER(IntKi), PARAMETER :: M2N2TDyss = 1064 - INTEGER(IntKi), PARAMETER :: M2N3TDyss = 1065 - INTEGER(IntKi), PARAMETER :: M2N4TDyss = 1066 - INTEGER(IntKi), PARAMETER :: M2N5TDyss = 1067 - INTEGER(IntKi), PARAMETER :: M2N6TDyss = 1068 - INTEGER(IntKi), PARAMETER :: M2N7TDyss = 1069 - INTEGER(IntKi), PARAMETER :: M2N8TDyss = 1070 - INTEGER(IntKi), PARAMETER :: M2N9TDyss = 1071 - INTEGER(IntKi), PARAMETER :: M3N1TDyss = 1072 - INTEGER(IntKi), PARAMETER :: M3N2TDyss = 1073 - INTEGER(IntKi), PARAMETER :: M3N3TDyss = 1074 - INTEGER(IntKi), PARAMETER :: M3N4TDyss = 1075 - INTEGER(IntKi), PARAMETER :: M3N5TDyss = 1076 - INTEGER(IntKi), PARAMETER :: M3N6TDyss = 1077 - INTEGER(IntKi), PARAMETER :: M3N7TDyss = 1078 - INTEGER(IntKi), PARAMETER :: M3N8TDyss = 1079 - INTEGER(IntKi), PARAMETER :: M3N9TDyss = 1080 - INTEGER(IntKi), PARAMETER :: M4N1TDyss = 1081 - INTEGER(IntKi), PARAMETER :: M4N2TDyss = 1082 - INTEGER(IntKi), PARAMETER :: M4N3TDyss = 1083 - INTEGER(IntKi), PARAMETER :: M4N4TDyss = 1084 - INTEGER(IntKi), PARAMETER :: M4N5TDyss = 1085 - INTEGER(IntKi), PARAMETER :: M4N6TDyss = 1086 - INTEGER(IntKi), PARAMETER :: M4N7TDyss = 1087 - INTEGER(IntKi), PARAMETER :: M4N8TDyss = 1088 - INTEGER(IntKi), PARAMETER :: M4N9TDyss = 1089 - INTEGER(IntKi), PARAMETER :: M5N1TDyss = 1090 - INTEGER(IntKi), PARAMETER :: M5N2TDyss = 1091 - INTEGER(IntKi), PARAMETER :: M5N3TDyss = 1092 - INTEGER(IntKi), PARAMETER :: M5N4TDyss = 1093 - INTEGER(IntKi), PARAMETER :: M5N5TDyss = 1094 - INTEGER(IntKi), PARAMETER :: M5N6TDyss = 1095 - INTEGER(IntKi), PARAMETER :: M5N7TDyss = 1096 - INTEGER(IntKi), PARAMETER :: M5N8TDyss = 1097 - INTEGER(IntKi), PARAMETER :: M5N9TDyss = 1098 - INTEGER(IntKi), PARAMETER :: M6N1TDyss = 1099 - INTEGER(IntKi), PARAMETER :: M6N2TDyss = 1100 - INTEGER(IntKi), PARAMETER :: M6N3TDyss = 1101 - INTEGER(IntKi), PARAMETER :: M6N4TDyss = 1102 - INTEGER(IntKi), PARAMETER :: M6N5TDyss = 1103 - INTEGER(IntKi), PARAMETER :: M6N6TDyss = 1104 - INTEGER(IntKi), PARAMETER :: M6N7TDyss = 1105 - INTEGER(IntKi), PARAMETER :: M6N8TDyss = 1106 - INTEGER(IntKi), PARAMETER :: M6N9TDyss = 1107 - INTEGER(IntKi), PARAMETER :: M7N1TDyss = 1108 - INTEGER(IntKi), PARAMETER :: M7N2TDyss = 1109 - INTEGER(IntKi), PARAMETER :: M7N3TDyss = 1110 - INTEGER(IntKi), PARAMETER :: M7N4TDyss = 1111 - INTEGER(IntKi), PARAMETER :: M7N5TDyss = 1112 - INTEGER(IntKi), PARAMETER :: M7N6TDyss = 1113 - INTEGER(IntKi), PARAMETER :: M7N7TDyss = 1114 - INTEGER(IntKi), PARAMETER :: M7N8TDyss = 1115 - INTEGER(IntKi), PARAMETER :: M7N9TDyss = 1116 - INTEGER(IntKi), PARAMETER :: M8N1TDyss = 1117 - INTEGER(IntKi), PARAMETER :: M8N2TDyss = 1118 - INTEGER(IntKi), PARAMETER :: M8N3TDyss = 1119 - INTEGER(IntKi), PARAMETER :: M8N4TDyss = 1120 - INTEGER(IntKi), PARAMETER :: M8N5TDyss = 1121 - INTEGER(IntKi), PARAMETER :: M8N6TDyss = 1122 - INTEGER(IntKi), PARAMETER :: M8N7TDyss = 1123 - INTEGER(IntKi), PARAMETER :: M8N8TDyss = 1124 - INTEGER(IntKi), PARAMETER :: M8N9TDyss = 1125 - INTEGER(IntKi), PARAMETER :: M9N1TDyss = 1126 - INTEGER(IntKi), PARAMETER :: M9N2TDyss = 1127 - INTEGER(IntKi), PARAMETER :: M9N3TDyss = 1128 - INTEGER(IntKi), PARAMETER :: M9N4TDyss = 1129 - INTEGER(IntKi), PARAMETER :: M9N5TDyss = 1130 - INTEGER(IntKi), PARAMETER :: M9N6TDyss = 1131 - INTEGER(IntKi), PARAMETER :: M9N7TDyss = 1132 - INTEGER(IntKi), PARAMETER :: M9N8TDyss = 1133 - INTEGER(IntKi), PARAMETER :: M9N9TDyss = 1134 - INTEGER(IntKi), PARAMETER :: M1N1TDzss = 1135 - INTEGER(IntKi), PARAMETER :: M1N2TDzss = 1136 - INTEGER(IntKi), PARAMETER :: M1N3TDzss = 1137 - INTEGER(IntKi), PARAMETER :: M1N4TDzss = 1138 - INTEGER(IntKi), PARAMETER :: M1N5TDzss = 1139 - INTEGER(IntKi), PARAMETER :: M1N6TDzss = 1140 - INTEGER(IntKi), PARAMETER :: M1N7TDzss = 1141 - INTEGER(IntKi), PARAMETER :: M1N8TDzss = 1142 - INTEGER(IntKi), PARAMETER :: M1N9TDzss = 1143 - INTEGER(IntKi), PARAMETER :: M2N1TDzss = 1144 - INTEGER(IntKi), PARAMETER :: M2N2TDzss = 1145 - INTEGER(IntKi), PARAMETER :: M2N3TDzss = 1146 - INTEGER(IntKi), PARAMETER :: M2N4TDzss = 1147 - INTEGER(IntKi), PARAMETER :: M2N5TDzss = 1148 - INTEGER(IntKi), PARAMETER :: M2N6TDzss = 1149 - INTEGER(IntKi), PARAMETER :: M2N7TDzss = 1150 - INTEGER(IntKi), PARAMETER :: M2N8TDzss = 1151 - INTEGER(IntKi), PARAMETER :: M2N9TDzss = 1152 - INTEGER(IntKi), PARAMETER :: M3N1TDzss = 1153 - INTEGER(IntKi), PARAMETER :: M3N2TDzss = 1154 - INTEGER(IntKi), PARAMETER :: M3N3TDzss = 1155 - INTEGER(IntKi), PARAMETER :: M3N4TDzss = 1156 - INTEGER(IntKi), PARAMETER :: M3N5TDzss = 1157 - INTEGER(IntKi), PARAMETER :: M3N6TDzss = 1158 - INTEGER(IntKi), PARAMETER :: M3N7TDzss = 1159 - INTEGER(IntKi), PARAMETER :: M3N8TDzss = 1160 - INTEGER(IntKi), PARAMETER :: M3N9TDzss = 1161 - INTEGER(IntKi), PARAMETER :: M4N1TDzss = 1162 - INTEGER(IntKi), PARAMETER :: M4N2TDzss = 1163 - INTEGER(IntKi), PARAMETER :: M4N3TDzss = 1164 - INTEGER(IntKi), PARAMETER :: M4N4TDzss = 1165 - INTEGER(IntKi), PARAMETER :: M4N5TDzss = 1166 - INTEGER(IntKi), PARAMETER :: M4N6TDzss = 1167 - INTEGER(IntKi), PARAMETER :: M4N7TDzss = 1168 - INTEGER(IntKi), PARAMETER :: M4N8TDzss = 1169 - INTEGER(IntKi), PARAMETER :: M4N9TDzss = 1170 - INTEGER(IntKi), PARAMETER :: M5N1TDzss = 1171 - INTEGER(IntKi), PARAMETER :: M5N2TDzss = 1172 - INTEGER(IntKi), PARAMETER :: M5N3TDzss = 1173 - INTEGER(IntKi), PARAMETER :: M5N4TDzss = 1174 - INTEGER(IntKi), PARAMETER :: M5N5TDzss = 1175 - INTEGER(IntKi), PARAMETER :: M5N6TDzss = 1176 - INTEGER(IntKi), PARAMETER :: M5N7TDzss = 1177 - INTEGER(IntKi), PARAMETER :: M5N8TDzss = 1178 - INTEGER(IntKi), PARAMETER :: M5N9TDzss = 1179 - INTEGER(IntKi), PARAMETER :: M6N1TDzss = 1180 - INTEGER(IntKi), PARAMETER :: M6N2TDzss = 1181 - INTEGER(IntKi), PARAMETER :: M6N3TDzss = 1182 - INTEGER(IntKi), PARAMETER :: M6N4TDzss = 1183 - INTEGER(IntKi), PARAMETER :: M6N5TDzss = 1184 - INTEGER(IntKi), PARAMETER :: M6N6TDzss = 1185 - INTEGER(IntKi), PARAMETER :: M6N7TDzss = 1186 - INTEGER(IntKi), PARAMETER :: M6N8TDzss = 1187 - INTEGER(IntKi), PARAMETER :: M6N9TDzss = 1188 - INTEGER(IntKi), PARAMETER :: M7N1TDzss = 1189 - INTEGER(IntKi), PARAMETER :: M7N2TDzss = 1190 - INTEGER(IntKi), PARAMETER :: M7N3TDzss = 1191 - INTEGER(IntKi), PARAMETER :: M7N4TDzss = 1192 - INTEGER(IntKi), PARAMETER :: M7N5TDzss = 1193 - INTEGER(IntKi), PARAMETER :: M7N6TDzss = 1194 - INTEGER(IntKi), PARAMETER :: M7N7TDzss = 1195 - INTEGER(IntKi), PARAMETER :: M7N8TDzss = 1196 - INTEGER(IntKi), PARAMETER :: M7N9TDzss = 1197 - INTEGER(IntKi), PARAMETER :: M8N1TDzss = 1198 - INTEGER(IntKi), PARAMETER :: M8N2TDzss = 1199 - INTEGER(IntKi), PARAMETER :: M8N3TDzss = 1200 - INTEGER(IntKi), PARAMETER :: M8N4TDzss = 1201 - INTEGER(IntKi), PARAMETER :: M8N5TDzss = 1202 - INTEGER(IntKi), PARAMETER :: M8N6TDzss = 1203 - INTEGER(IntKi), PARAMETER :: M8N7TDzss = 1204 - INTEGER(IntKi), PARAMETER :: M8N8TDzss = 1205 - INTEGER(IntKi), PARAMETER :: M8N9TDzss = 1206 - INTEGER(IntKi), PARAMETER :: M9N1TDzss = 1207 - INTEGER(IntKi), PARAMETER :: M9N2TDzss = 1208 - INTEGER(IntKi), PARAMETER :: M9N3TDzss = 1209 - INTEGER(IntKi), PARAMETER :: M9N4TDzss = 1210 - INTEGER(IntKi), PARAMETER :: M9N5TDzss = 1211 - INTEGER(IntKi), PARAMETER :: M9N6TDzss = 1212 - INTEGER(IntKi), PARAMETER :: M9N7TDzss = 1213 - INTEGER(IntKi), PARAMETER :: M9N8TDzss = 1214 - INTEGER(IntKi), PARAMETER :: M9N9TDzss = 1215 - INTEGER(IntKi), PARAMETER :: M1N1RDxe = 1216 - INTEGER(IntKi), PARAMETER :: M1N2RDxe = 1217 - INTEGER(IntKi), PARAMETER :: M1N3RDxe = 1218 - INTEGER(IntKi), PARAMETER :: M1N4RDxe = 1219 - INTEGER(IntKi), PARAMETER :: M1N5RDxe = 1220 - INTEGER(IntKi), PARAMETER :: M1N6RDxe = 1221 - INTEGER(IntKi), PARAMETER :: M1N7RDxe = 1222 - INTEGER(IntKi), PARAMETER :: M1N8RDxe = 1223 - INTEGER(IntKi), PARAMETER :: M1N9RDxe = 1224 - INTEGER(IntKi), PARAMETER :: M2N1RDxe = 1225 - INTEGER(IntKi), PARAMETER :: M2N2RDxe = 1226 - INTEGER(IntKi), PARAMETER :: M2N3RDxe = 1227 - INTEGER(IntKi), PARAMETER :: M2N4RDxe = 1228 - INTEGER(IntKi), PARAMETER :: M2N5RDxe = 1229 - INTEGER(IntKi), PARAMETER :: M2N6RDxe = 1230 - INTEGER(IntKi), PARAMETER :: M2N7RDxe = 1231 - INTEGER(IntKi), PARAMETER :: M2N8RDxe = 1232 - INTEGER(IntKi), PARAMETER :: M2N9RDxe = 1233 - INTEGER(IntKi), PARAMETER :: M3N1RDxe = 1234 - INTEGER(IntKi), PARAMETER :: M3N2RDxe = 1235 - INTEGER(IntKi), PARAMETER :: M3N3RDxe = 1236 - INTEGER(IntKi), PARAMETER :: M3N4RDxe = 1237 - INTEGER(IntKi), PARAMETER :: M3N5RDxe = 1238 - INTEGER(IntKi), PARAMETER :: M3N6RDxe = 1239 - INTEGER(IntKi), PARAMETER :: M3N7RDxe = 1240 - INTEGER(IntKi), PARAMETER :: M3N8RDxe = 1241 - INTEGER(IntKi), PARAMETER :: M3N9RDxe = 1242 - INTEGER(IntKi), PARAMETER :: M4N1RDxe = 1243 - INTEGER(IntKi), PARAMETER :: M4N2RDxe = 1244 - INTEGER(IntKi), PARAMETER :: M4N3RDxe = 1245 - INTEGER(IntKi), PARAMETER :: M4N4RDxe = 1246 - INTEGER(IntKi), PARAMETER :: M4N5RDxe = 1247 - INTEGER(IntKi), PARAMETER :: M4N6RDxe = 1248 - INTEGER(IntKi), PARAMETER :: M4N7RDxe = 1249 - INTEGER(IntKi), PARAMETER :: M4N8RDxe = 1250 - INTEGER(IntKi), PARAMETER :: M4N9RDxe = 1251 - INTEGER(IntKi), PARAMETER :: M5N1RDxe = 1252 - INTEGER(IntKi), PARAMETER :: M5N2RDxe = 1253 - INTEGER(IntKi), PARAMETER :: M5N3RDxe = 1254 - INTEGER(IntKi), PARAMETER :: M5N4RDxe = 1255 - INTEGER(IntKi), PARAMETER :: M5N5RDxe = 1256 - INTEGER(IntKi), PARAMETER :: M5N6RDxe = 1257 - INTEGER(IntKi), PARAMETER :: M5N7RDxe = 1258 - INTEGER(IntKi), PARAMETER :: M5N8RDxe = 1259 - INTEGER(IntKi), PARAMETER :: M5N9RDxe = 1260 - INTEGER(IntKi), PARAMETER :: M6N1RDxe = 1261 - INTEGER(IntKi), PARAMETER :: M6N2RDxe = 1262 - INTEGER(IntKi), PARAMETER :: M6N3RDxe = 1263 - INTEGER(IntKi), PARAMETER :: M6N4RDxe = 1264 - INTEGER(IntKi), PARAMETER :: M6N5RDxe = 1265 - INTEGER(IntKi), PARAMETER :: M6N6RDxe = 1266 - INTEGER(IntKi), PARAMETER :: M6N7RDxe = 1267 - INTEGER(IntKi), PARAMETER :: M6N8RDxe = 1268 - INTEGER(IntKi), PARAMETER :: M6N9RDxe = 1269 - INTEGER(IntKi), PARAMETER :: M7N1RDxe = 1270 - INTEGER(IntKi), PARAMETER :: M7N2RDxe = 1271 - INTEGER(IntKi), PARAMETER :: M7N3RDxe = 1272 - INTEGER(IntKi), PARAMETER :: M7N4RDxe = 1273 - INTEGER(IntKi), PARAMETER :: M7N5RDxe = 1274 - INTEGER(IntKi), PARAMETER :: M7N6RDxe = 1275 - INTEGER(IntKi), PARAMETER :: M7N7RDxe = 1276 - INTEGER(IntKi), PARAMETER :: M7N8RDxe = 1277 - INTEGER(IntKi), PARAMETER :: M7N9RDxe = 1278 - INTEGER(IntKi), PARAMETER :: M8N1RDxe = 1279 - INTEGER(IntKi), PARAMETER :: M8N2RDxe = 1280 - INTEGER(IntKi), PARAMETER :: M8N3RDxe = 1281 - INTEGER(IntKi), PARAMETER :: M8N4RDxe = 1282 - INTEGER(IntKi), PARAMETER :: M8N5RDxe = 1283 - INTEGER(IntKi), PARAMETER :: M8N6RDxe = 1284 - INTEGER(IntKi), PARAMETER :: M8N7RDxe = 1285 - INTEGER(IntKi), PARAMETER :: M8N8RDxe = 1286 - INTEGER(IntKi), PARAMETER :: M8N9RDxe = 1287 - INTEGER(IntKi), PARAMETER :: M9N1RDxe = 1288 - INTEGER(IntKi), PARAMETER :: M9N2RDxe = 1289 - INTEGER(IntKi), PARAMETER :: M9N3RDxe = 1290 - INTEGER(IntKi), PARAMETER :: M9N4RDxe = 1291 - INTEGER(IntKi), PARAMETER :: M9N5RDxe = 1292 - INTEGER(IntKi), PARAMETER :: M9N6RDxe = 1293 - INTEGER(IntKi), PARAMETER :: M9N7RDxe = 1294 - INTEGER(IntKi), PARAMETER :: M9N8RDxe = 1295 - INTEGER(IntKi), PARAMETER :: M9N9RDxe = 1296 - INTEGER(IntKi), PARAMETER :: M1N1RDye = 1297 - INTEGER(IntKi), PARAMETER :: M1N2RDye = 1298 - INTEGER(IntKi), PARAMETER :: M1N3RDye = 1299 - INTEGER(IntKi), PARAMETER :: M1N4RDye = 1300 - INTEGER(IntKi), PARAMETER :: M1N5RDye = 1301 - INTEGER(IntKi), PARAMETER :: M1N6RDye = 1302 - INTEGER(IntKi), PARAMETER :: M1N7RDye = 1303 - INTEGER(IntKi), PARAMETER :: M1N8RDye = 1304 - INTEGER(IntKi), PARAMETER :: M1N9RDye = 1305 - INTEGER(IntKi), PARAMETER :: M2N1RDye = 1306 - INTEGER(IntKi), PARAMETER :: M2N2RDye = 1307 - INTEGER(IntKi), PARAMETER :: M2N3RDye = 1308 - INTEGER(IntKi), PARAMETER :: M2N4RDye = 1309 - INTEGER(IntKi), PARAMETER :: M2N5RDye = 1310 - INTEGER(IntKi), PARAMETER :: M2N6RDye = 1311 - INTEGER(IntKi), PARAMETER :: M2N7RDye = 1312 - INTEGER(IntKi), PARAMETER :: M2N8RDye = 1313 - INTEGER(IntKi), PARAMETER :: M2N9RDye = 1314 - INTEGER(IntKi), PARAMETER :: M3N1RDye = 1315 - INTEGER(IntKi), PARAMETER :: M3N2RDye = 1316 - INTEGER(IntKi), PARAMETER :: M3N3RDye = 1317 - INTEGER(IntKi), PARAMETER :: M3N4RDye = 1318 - INTEGER(IntKi), PARAMETER :: M3N5RDye = 1319 - INTEGER(IntKi), PARAMETER :: M3N6RDye = 1320 - INTEGER(IntKi), PARAMETER :: M3N7RDye = 1321 - INTEGER(IntKi), PARAMETER :: M3N8RDye = 1322 - INTEGER(IntKi), PARAMETER :: M3N9RDye = 1323 - INTEGER(IntKi), PARAMETER :: M4N1RDye = 1324 - INTEGER(IntKi), PARAMETER :: M4N2RDye = 1325 - INTEGER(IntKi), PARAMETER :: M4N3RDye = 1326 - INTEGER(IntKi), PARAMETER :: M4N4RDye = 1327 - INTEGER(IntKi), PARAMETER :: M4N5RDye = 1328 - INTEGER(IntKi), PARAMETER :: M4N6RDye = 1329 - INTEGER(IntKi), PARAMETER :: M4N7RDye = 1330 - INTEGER(IntKi), PARAMETER :: M4N8RDye = 1331 - INTEGER(IntKi), PARAMETER :: M4N9RDye = 1332 - INTEGER(IntKi), PARAMETER :: M5N1RDye = 1333 - INTEGER(IntKi), PARAMETER :: M5N2RDye = 1334 - INTEGER(IntKi), PARAMETER :: M5N3RDye = 1335 - INTEGER(IntKi), PARAMETER :: M5N4RDye = 1336 - INTEGER(IntKi), PARAMETER :: M5N5RDye = 1337 - INTEGER(IntKi), PARAMETER :: M5N6RDye = 1338 - INTEGER(IntKi), PARAMETER :: M5N7RDye = 1339 - INTEGER(IntKi), PARAMETER :: M5N8RDye = 1340 - INTEGER(IntKi), PARAMETER :: M5N9RDye = 1341 - INTEGER(IntKi), PARAMETER :: M6N1RDye = 1342 - INTEGER(IntKi), PARAMETER :: M6N2RDye = 1343 - INTEGER(IntKi), PARAMETER :: M6N3RDye = 1344 - INTEGER(IntKi), PARAMETER :: M6N4RDye = 1345 - INTEGER(IntKi), PARAMETER :: M6N5RDye = 1346 - INTEGER(IntKi), PARAMETER :: M6N6RDye = 1347 - INTEGER(IntKi), PARAMETER :: M6N7RDye = 1348 - INTEGER(IntKi), PARAMETER :: M6N8RDye = 1349 - INTEGER(IntKi), PARAMETER :: M6N9RDye = 1350 - INTEGER(IntKi), PARAMETER :: M7N1RDye = 1351 - INTEGER(IntKi), PARAMETER :: M7N2RDye = 1352 - INTEGER(IntKi), PARAMETER :: M7N3RDye = 1353 - INTEGER(IntKi), PARAMETER :: M7N4RDye = 1354 - INTEGER(IntKi), PARAMETER :: M7N5RDye = 1355 - INTEGER(IntKi), PARAMETER :: M7N6RDye = 1356 - INTEGER(IntKi), PARAMETER :: M7N7RDye = 1357 - INTEGER(IntKi), PARAMETER :: M7N8RDye = 1358 - INTEGER(IntKi), PARAMETER :: M7N9RDye = 1359 - INTEGER(IntKi), PARAMETER :: M8N1RDye = 1360 - INTEGER(IntKi), PARAMETER :: M8N2RDye = 1361 - INTEGER(IntKi), PARAMETER :: M8N3RDye = 1362 - INTEGER(IntKi), PARAMETER :: M8N4RDye = 1363 - INTEGER(IntKi), PARAMETER :: M8N5RDye = 1364 - INTEGER(IntKi), PARAMETER :: M8N6RDye = 1365 - INTEGER(IntKi), PARAMETER :: M8N7RDye = 1366 - INTEGER(IntKi), PARAMETER :: M8N8RDye = 1367 - INTEGER(IntKi), PARAMETER :: M8N9RDye = 1368 - INTEGER(IntKi), PARAMETER :: M9N1RDye = 1369 - INTEGER(IntKi), PARAMETER :: M9N2RDye = 1370 - INTEGER(IntKi), PARAMETER :: M9N3RDye = 1371 - INTEGER(IntKi), PARAMETER :: M9N4RDye = 1372 - INTEGER(IntKi), PARAMETER :: M9N5RDye = 1373 - INTEGER(IntKi), PARAMETER :: M9N6RDye = 1374 - INTEGER(IntKi), PARAMETER :: M9N7RDye = 1375 - INTEGER(IntKi), PARAMETER :: M9N8RDye = 1376 - INTEGER(IntKi), PARAMETER :: M9N9RDye = 1377 - INTEGER(IntKi), PARAMETER :: M1N1RDze = 1378 - INTEGER(IntKi), PARAMETER :: M1N2RDze = 1379 - INTEGER(IntKi), PARAMETER :: M1N3RDze = 1380 - INTEGER(IntKi), PARAMETER :: M1N4RDze = 1381 - INTEGER(IntKi), PARAMETER :: M1N5RDze = 1382 - INTEGER(IntKi), PARAMETER :: M1N6RDze = 1383 - INTEGER(IntKi), PARAMETER :: M1N7RDze = 1384 - INTEGER(IntKi), PARAMETER :: M1N8RDze = 1385 - INTEGER(IntKi), PARAMETER :: M1N9RDze = 1386 - INTEGER(IntKi), PARAMETER :: M2N1RDze = 1387 - INTEGER(IntKi), PARAMETER :: M2N2RDze = 1388 - INTEGER(IntKi), PARAMETER :: M2N3RDze = 1389 - INTEGER(IntKi), PARAMETER :: M2N4RDze = 1390 - INTEGER(IntKi), PARAMETER :: M2N5RDze = 1391 - INTEGER(IntKi), PARAMETER :: M2N6RDze = 1392 - INTEGER(IntKi), PARAMETER :: M2N7RDze = 1393 - INTEGER(IntKi), PARAMETER :: M2N8RDze = 1394 - INTEGER(IntKi), PARAMETER :: M2N9RDze = 1395 - INTEGER(IntKi), PARAMETER :: M3N1RDze = 1396 - INTEGER(IntKi), PARAMETER :: M3N2RDze = 1397 - INTEGER(IntKi), PARAMETER :: M3N3RDze = 1398 - INTEGER(IntKi), PARAMETER :: M3N4RDze = 1399 - INTEGER(IntKi), PARAMETER :: M3N5RDze = 1400 - INTEGER(IntKi), PARAMETER :: M3N6RDze = 1401 - INTEGER(IntKi), PARAMETER :: M3N7RDze = 1402 - INTEGER(IntKi), PARAMETER :: M3N8RDze = 1403 - INTEGER(IntKi), PARAMETER :: M3N9RDze = 1404 - INTEGER(IntKi), PARAMETER :: M4N1RDze = 1405 - INTEGER(IntKi), PARAMETER :: M4N2RDze = 1406 - INTEGER(IntKi), PARAMETER :: M4N3RDze = 1407 - INTEGER(IntKi), PARAMETER :: M4N4RDze = 1408 - INTEGER(IntKi), PARAMETER :: M4N5RDze = 1409 - INTEGER(IntKi), PARAMETER :: M4N6RDze = 1410 - INTEGER(IntKi), PARAMETER :: M4N7RDze = 1411 - INTEGER(IntKi), PARAMETER :: M4N8RDze = 1412 - INTEGER(IntKi), PARAMETER :: M4N9RDze = 1413 - INTEGER(IntKi), PARAMETER :: M5N1RDze = 1414 - INTEGER(IntKi), PARAMETER :: M5N2RDze = 1415 - INTEGER(IntKi), PARAMETER :: M5N3RDze = 1416 - INTEGER(IntKi), PARAMETER :: M5N4RDze = 1417 - INTEGER(IntKi), PARAMETER :: M5N5RDze = 1418 - INTEGER(IntKi), PARAMETER :: M5N6RDze = 1419 - INTEGER(IntKi), PARAMETER :: M5N7RDze = 1420 - INTEGER(IntKi), PARAMETER :: M5N8RDze = 1421 - INTEGER(IntKi), PARAMETER :: M5N9RDze = 1422 - INTEGER(IntKi), PARAMETER :: M6N1RDze = 1423 - INTEGER(IntKi), PARAMETER :: M6N2RDze = 1424 - INTEGER(IntKi), PARAMETER :: M6N3RDze = 1425 - INTEGER(IntKi), PARAMETER :: M6N4RDze = 1426 - INTEGER(IntKi), PARAMETER :: M6N5RDze = 1427 - INTEGER(IntKi), PARAMETER :: M6N6RDze = 1428 - INTEGER(IntKi), PARAMETER :: M6N7RDze = 1429 - INTEGER(IntKi), PARAMETER :: M6N8RDze = 1430 - INTEGER(IntKi), PARAMETER :: M6N9RDze = 1431 - INTEGER(IntKi), PARAMETER :: M7N1RDze = 1432 - INTEGER(IntKi), PARAMETER :: M7N2RDze = 1433 - INTEGER(IntKi), PARAMETER :: M7N3RDze = 1434 - INTEGER(IntKi), PARAMETER :: M7N4RDze = 1435 - INTEGER(IntKi), PARAMETER :: M7N5RDze = 1436 - INTEGER(IntKi), PARAMETER :: M7N6RDze = 1437 - INTEGER(IntKi), PARAMETER :: M7N7RDze = 1438 - INTEGER(IntKi), PARAMETER :: M7N8RDze = 1439 - INTEGER(IntKi), PARAMETER :: M7N9RDze = 1440 - INTEGER(IntKi), PARAMETER :: M8N1RDze = 1441 - INTEGER(IntKi), PARAMETER :: M8N2RDze = 1442 - INTEGER(IntKi), PARAMETER :: M8N3RDze = 1443 - INTEGER(IntKi), PARAMETER :: M8N4RDze = 1444 - INTEGER(IntKi), PARAMETER :: M8N5RDze = 1445 - INTEGER(IntKi), PARAMETER :: M8N6RDze = 1446 - INTEGER(IntKi), PARAMETER :: M8N7RDze = 1447 - INTEGER(IntKi), PARAMETER :: M8N8RDze = 1448 - INTEGER(IntKi), PARAMETER :: M8N9RDze = 1449 - INTEGER(IntKi), PARAMETER :: M9N1RDze = 1450 - INTEGER(IntKi), PARAMETER :: M9N2RDze = 1451 - INTEGER(IntKi), PARAMETER :: M9N3RDze = 1452 - INTEGER(IntKi), PARAMETER :: M9N4RDze = 1453 - INTEGER(IntKi), PARAMETER :: M9N5RDze = 1454 - INTEGER(IntKi), PARAMETER :: M9N6RDze = 1455 - INTEGER(IntKi), PARAMETER :: M9N7RDze = 1456 - INTEGER(IntKi), PARAMETER :: M9N8RDze = 1457 - INTEGER(IntKi), PARAMETER :: M9N9RDze = 1458 + ! Displacements: - ! Accelerations: + INTEGER(IntKi), PARAMETER :: M01N1TDxss = 10693 + INTEGER(IntKi), PARAMETER :: M01N2TDxss = 10694 + INTEGER(IntKi), PARAMETER :: M01N3TDxss = 10695 + INTEGER(IntKi), PARAMETER :: M01N4TDxss = 10696 + INTEGER(IntKi), PARAMETER :: M01N5TDxss = 10697 + INTEGER(IntKi), PARAMETER :: M01N6TDxss = 10698 + INTEGER(IntKi), PARAMETER :: M01N7TDxss = 10699 + INTEGER(IntKi), PARAMETER :: M01N8TDxss = 10700 + INTEGER(IntKi), PARAMETER :: M01N9TDxss = 10701 + INTEGER(IntKi), PARAMETER :: M02N1TDxss = 10702 + INTEGER(IntKi), PARAMETER :: M02N2TDxss = 10703 + INTEGER(IntKi), PARAMETER :: M02N3TDxss = 10704 + INTEGER(IntKi), PARAMETER :: M02N4TDxss = 10705 + INTEGER(IntKi), PARAMETER :: M02N5TDxss = 10706 + INTEGER(IntKi), PARAMETER :: M02N6TDxss = 10707 + INTEGER(IntKi), PARAMETER :: M02N7TDxss = 10708 + INTEGER(IntKi), PARAMETER :: M02N8TDxss = 10709 + INTEGER(IntKi), PARAMETER :: M02N9TDxss = 10710 + INTEGER(IntKi), PARAMETER :: M03N1TDxss = 10711 + INTEGER(IntKi), PARAMETER :: M03N2TDxss = 10712 + INTEGER(IntKi), PARAMETER :: M03N3TDxss = 10713 + INTEGER(IntKi), PARAMETER :: M03N4TDxss = 10714 + INTEGER(IntKi), PARAMETER :: M03N5TDxss = 10715 + INTEGER(IntKi), PARAMETER :: M03N6TDxss = 10716 + INTEGER(IntKi), PARAMETER :: M03N7TDxss = 10717 + INTEGER(IntKi), PARAMETER :: M03N8TDxss = 10718 + INTEGER(IntKi), PARAMETER :: M03N9TDxss = 10719 + INTEGER(IntKi), PARAMETER :: M04N1TDxss = 10720 + INTEGER(IntKi), PARAMETER :: M04N2TDxss = 10721 + INTEGER(IntKi), PARAMETER :: M04N3TDxss = 10722 + INTEGER(IntKi), PARAMETER :: M04N4TDxss = 10723 + INTEGER(IntKi), PARAMETER :: M04N5TDxss = 10724 + INTEGER(IntKi), PARAMETER :: M04N6TDxss = 10725 + INTEGER(IntKi), PARAMETER :: M04N7TDxss = 10726 + INTEGER(IntKi), PARAMETER :: M04N8TDxss = 10727 + INTEGER(IntKi), PARAMETER :: M04N9TDxss = 10728 + INTEGER(IntKi), PARAMETER :: M05N1TDxss = 10729 + INTEGER(IntKi), PARAMETER :: M05N2TDxss = 10730 + INTEGER(IntKi), PARAMETER :: M05N3TDxss = 10731 + INTEGER(IntKi), PARAMETER :: M05N4TDxss = 10732 + INTEGER(IntKi), PARAMETER :: M05N5TDxss = 10733 + INTEGER(IntKi), PARAMETER :: M05N6TDxss = 10734 + INTEGER(IntKi), PARAMETER :: M05N7TDxss = 10735 + INTEGER(IntKi), PARAMETER :: M05N8TDxss = 10736 + INTEGER(IntKi), PARAMETER :: M05N9TDxss = 10737 + INTEGER(IntKi), PARAMETER :: M06N1TDxss = 10738 + INTEGER(IntKi), PARAMETER :: M06N2TDxss = 10739 + INTEGER(IntKi), PARAMETER :: M06N3TDxss = 10740 + INTEGER(IntKi), PARAMETER :: M06N4TDxss = 10741 + INTEGER(IntKi), PARAMETER :: M06N5TDxss = 10742 + INTEGER(IntKi), PARAMETER :: M06N6TDxss = 10743 + INTEGER(IntKi), PARAMETER :: M06N7TDxss = 10744 + INTEGER(IntKi), PARAMETER :: M06N8TDxss = 10745 + INTEGER(IntKi), PARAMETER :: M06N9TDxss = 10746 + INTEGER(IntKi), PARAMETER :: M07N1TDxss = 10747 + INTEGER(IntKi), PARAMETER :: M07N2TDxss = 10748 + INTEGER(IntKi), PARAMETER :: M07N3TDxss = 10749 + INTEGER(IntKi), PARAMETER :: M07N4TDxss = 10750 + INTEGER(IntKi), PARAMETER :: M07N5TDxss = 10751 + INTEGER(IntKi), PARAMETER :: M07N6TDxss = 10752 + INTEGER(IntKi), PARAMETER :: M07N7TDxss = 10753 + INTEGER(IntKi), PARAMETER :: M07N8TDxss = 10754 + INTEGER(IntKi), PARAMETER :: M07N9TDxss = 10755 + INTEGER(IntKi), PARAMETER :: M08N1TDxss = 10756 + INTEGER(IntKi), PARAMETER :: M08N2TDxss = 10757 + INTEGER(IntKi), PARAMETER :: M08N3TDxss = 10758 + INTEGER(IntKi), PARAMETER :: M08N4TDxss = 10759 + INTEGER(IntKi), PARAMETER :: M08N5TDxss = 10760 + INTEGER(IntKi), PARAMETER :: M08N6TDxss = 10761 + INTEGER(IntKi), PARAMETER :: M08N7TDxss = 10762 + INTEGER(IntKi), PARAMETER :: M08N8TDxss = 10763 + INTEGER(IntKi), PARAMETER :: M08N9TDxss = 10764 + INTEGER(IntKi), PARAMETER :: M09N1TDxss = 10765 + INTEGER(IntKi), PARAMETER :: M09N2TDxss = 10766 + INTEGER(IntKi), PARAMETER :: M09N3TDxss = 10767 + INTEGER(IntKi), PARAMETER :: M09N4TDxss = 10768 + INTEGER(IntKi), PARAMETER :: M09N5TDxss = 10769 + INTEGER(IntKi), PARAMETER :: M09N6TDxss = 10770 + INTEGER(IntKi), PARAMETER :: M09N7TDxss = 10771 + INTEGER(IntKi), PARAMETER :: M09N8TDxss = 10772 + INTEGER(IntKi), PARAMETER :: M09N9TDxss = 10773 + INTEGER(IntKi), PARAMETER :: M10N1TDxss = 10774 + INTEGER(IntKi), PARAMETER :: M10N2TDxss = 10775 + INTEGER(IntKi), PARAMETER :: M10N3TDxss = 10776 + INTEGER(IntKi), PARAMETER :: M10N4TDxss = 10777 + INTEGER(IntKi), PARAMETER :: M10N5TDxss = 10778 + INTEGER(IntKi), PARAMETER :: M10N6TDxss = 10779 + INTEGER(IntKi), PARAMETER :: M10N7TDxss = 10780 + INTEGER(IntKi), PARAMETER :: M10N8TDxss = 10781 + INTEGER(IntKi), PARAMETER :: M10N9TDxss = 10782 + INTEGER(IntKi), PARAMETER :: M11N1TDxss = 10783 + INTEGER(IntKi), PARAMETER :: M11N2TDxss = 10784 + INTEGER(IntKi), PARAMETER :: M11N3TDxss = 10785 + INTEGER(IntKi), PARAMETER :: M11N4TDxss = 10786 + INTEGER(IntKi), PARAMETER :: M11N5TDxss = 10787 + INTEGER(IntKi), PARAMETER :: M11N6TDxss = 10788 + INTEGER(IntKi), PARAMETER :: M11N7TDxss = 10789 + INTEGER(IntKi), PARAMETER :: M11N8TDxss = 10790 + INTEGER(IntKi), PARAMETER :: M11N9TDxss = 10791 + INTEGER(IntKi), PARAMETER :: M12N1TDxss = 10792 + INTEGER(IntKi), PARAMETER :: M12N2TDxss = 10793 + INTEGER(IntKi), PARAMETER :: M12N3TDxss = 10794 + INTEGER(IntKi), PARAMETER :: M12N4TDxss = 10795 + INTEGER(IntKi), PARAMETER :: M12N5TDxss = 10796 + INTEGER(IntKi), PARAMETER :: M12N6TDxss = 10797 + INTEGER(IntKi), PARAMETER :: M12N7TDxss = 10798 + INTEGER(IntKi), PARAMETER :: M12N8TDxss = 10799 + INTEGER(IntKi), PARAMETER :: M12N9TDxss = 10800 + INTEGER(IntKi), PARAMETER :: M13N1TDxss = 10801 + INTEGER(IntKi), PARAMETER :: M13N2TDxss = 10802 + INTEGER(IntKi), PARAMETER :: M13N3TDxss = 10803 + INTEGER(IntKi), PARAMETER :: M13N4TDxss = 10804 + INTEGER(IntKi), PARAMETER :: M13N5TDxss = 10805 + INTEGER(IntKi), PARAMETER :: M13N6TDxss = 10806 + INTEGER(IntKi), PARAMETER :: M13N7TDxss = 10807 + INTEGER(IntKi), PARAMETER :: M13N8TDxss = 10808 + INTEGER(IntKi), PARAMETER :: M13N9TDxss = 10809 + INTEGER(IntKi), PARAMETER :: M14N1TDxss = 10810 + INTEGER(IntKi), PARAMETER :: M14N2TDxss = 10811 + INTEGER(IntKi), PARAMETER :: M14N3TDxss = 10812 + INTEGER(IntKi), PARAMETER :: M14N4TDxss = 10813 + INTEGER(IntKi), PARAMETER :: M14N5TDxss = 10814 + INTEGER(IntKi), PARAMETER :: M14N6TDxss = 10815 + INTEGER(IntKi), PARAMETER :: M14N7TDxss = 10816 + INTEGER(IntKi), PARAMETER :: M14N8TDxss = 10817 + INTEGER(IntKi), PARAMETER :: M14N9TDxss = 10818 + INTEGER(IntKi), PARAMETER :: M15N1TDxss = 10819 + INTEGER(IntKi), PARAMETER :: M15N2TDxss = 10820 + INTEGER(IntKi), PARAMETER :: M15N3TDxss = 10821 + INTEGER(IntKi), PARAMETER :: M15N4TDxss = 10822 + INTEGER(IntKi), PARAMETER :: M15N5TDxss = 10823 + INTEGER(IntKi), PARAMETER :: M15N6TDxss = 10824 + INTEGER(IntKi), PARAMETER :: M15N7TDxss = 10825 + INTEGER(IntKi), PARAMETER :: M15N8TDxss = 10826 + INTEGER(IntKi), PARAMETER :: M15N9TDxss = 10827 + INTEGER(IntKi), PARAMETER :: M16N1TDxss = 10828 + INTEGER(IntKi), PARAMETER :: M16N2TDxss = 10829 + INTEGER(IntKi), PARAMETER :: M16N3TDxss = 10830 + INTEGER(IntKi), PARAMETER :: M16N4TDxss = 10831 + INTEGER(IntKi), PARAMETER :: M16N5TDxss = 10832 + INTEGER(IntKi), PARAMETER :: M16N6TDxss = 10833 + INTEGER(IntKi), PARAMETER :: M16N7TDxss = 10834 + INTEGER(IntKi), PARAMETER :: M16N8TDxss = 10835 + INTEGER(IntKi), PARAMETER :: M16N9TDxss = 10836 + INTEGER(IntKi), PARAMETER :: M17N1TDxss = 10837 + INTEGER(IntKi), PARAMETER :: M17N2TDxss = 10838 + INTEGER(IntKi), PARAMETER :: M17N3TDxss = 10839 + INTEGER(IntKi), PARAMETER :: M17N4TDxss = 10840 + INTEGER(IntKi), PARAMETER :: M17N5TDxss = 10841 + INTEGER(IntKi), PARAMETER :: M17N6TDxss = 10842 + INTEGER(IntKi), PARAMETER :: M17N7TDxss = 10843 + INTEGER(IntKi), PARAMETER :: M17N8TDxss = 10844 + INTEGER(IntKi), PARAMETER :: M17N9TDxss = 10845 + INTEGER(IntKi), PARAMETER :: M18N1TDxss = 10846 + INTEGER(IntKi), PARAMETER :: M18N2TDxss = 10847 + INTEGER(IntKi), PARAMETER :: M18N3TDxss = 10848 + INTEGER(IntKi), PARAMETER :: M18N4TDxss = 10849 + INTEGER(IntKi), PARAMETER :: M18N5TDxss = 10850 + INTEGER(IntKi), PARAMETER :: M18N6TDxss = 10851 + INTEGER(IntKi), PARAMETER :: M18N7TDxss = 10852 + INTEGER(IntKi), PARAMETER :: M18N8TDxss = 10853 + INTEGER(IntKi), PARAMETER :: M18N9TDxss = 10854 + INTEGER(IntKi), PARAMETER :: M19N1TDxss = 10855 + INTEGER(IntKi), PARAMETER :: M19N2TDxss = 10856 + INTEGER(IntKi), PARAMETER :: M19N3TDxss = 10857 + INTEGER(IntKi), PARAMETER :: M19N4TDxss = 10858 + INTEGER(IntKi), PARAMETER :: M19N5TDxss = 10859 + INTEGER(IntKi), PARAMETER :: M19N6TDxss = 10860 + INTEGER(IntKi), PARAMETER :: M19N7TDxss = 10861 + INTEGER(IntKi), PARAMETER :: M19N8TDxss = 10862 + INTEGER(IntKi), PARAMETER :: M19N9TDxss = 10863 + INTEGER(IntKi), PARAMETER :: M20N1TDxss = 10864 + INTEGER(IntKi), PARAMETER :: M20N2TDxss = 10865 + INTEGER(IntKi), PARAMETER :: M20N3TDxss = 10866 + INTEGER(IntKi), PARAMETER :: M20N4TDxss = 10867 + INTEGER(IntKi), PARAMETER :: M20N5TDxss = 10868 + INTEGER(IntKi), PARAMETER :: M20N6TDxss = 10869 + INTEGER(IntKi), PARAMETER :: M20N7TDxss = 10870 + INTEGER(IntKi), PARAMETER :: M20N8TDxss = 10871 + INTEGER(IntKi), PARAMETER :: M20N9TDxss = 10872 + INTEGER(IntKi), PARAMETER :: M21N1TDxss = 10873 + INTEGER(IntKi), PARAMETER :: M21N2TDxss = 10874 + INTEGER(IntKi), PARAMETER :: M21N3TDxss = 10875 + INTEGER(IntKi), PARAMETER :: M21N4TDxss = 10876 + INTEGER(IntKi), PARAMETER :: M21N5TDxss = 10877 + INTEGER(IntKi), PARAMETER :: M21N6TDxss = 10878 + INTEGER(IntKi), PARAMETER :: M21N7TDxss = 10879 + INTEGER(IntKi), PARAMETER :: M21N8TDxss = 10880 + INTEGER(IntKi), PARAMETER :: M21N9TDxss = 10881 + INTEGER(IntKi), PARAMETER :: M22N1TDxss = 10882 + INTEGER(IntKi), PARAMETER :: M22N2TDxss = 10883 + INTEGER(IntKi), PARAMETER :: M22N3TDxss = 10884 + INTEGER(IntKi), PARAMETER :: M22N4TDxss = 10885 + INTEGER(IntKi), PARAMETER :: M22N5TDxss = 10886 + INTEGER(IntKi), PARAMETER :: M22N6TDxss = 10887 + INTEGER(IntKi), PARAMETER :: M22N7TDxss = 10888 + INTEGER(IntKi), PARAMETER :: M22N8TDxss = 10889 + INTEGER(IntKi), PARAMETER :: M22N9TDxss = 10890 + INTEGER(IntKi), PARAMETER :: M23N1TDxss = 10891 + INTEGER(IntKi), PARAMETER :: M23N2TDxss = 10892 + INTEGER(IntKi), PARAMETER :: M23N3TDxss = 10893 + INTEGER(IntKi), PARAMETER :: M23N4TDxss = 10894 + INTEGER(IntKi), PARAMETER :: M23N5TDxss = 10895 + INTEGER(IntKi), PARAMETER :: M23N6TDxss = 10896 + INTEGER(IntKi), PARAMETER :: M23N7TDxss = 10897 + INTEGER(IntKi), PARAMETER :: M23N8TDxss = 10898 + INTEGER(IntKi), PARAMETER :: M23N9TDxss = 10899 + INTEGER(IntKi), PARAMETER :: M24N1TDxss = 10900 + INTEGER(IntKi), PARAMETER :: M24N2TDxss = 10901 + INTEGER(IntKi), PARAMETER :: M24N3TDxss = 10902 + INTEGER(IntKi), PARAMETER :: M24N4TDxss = 10903 + INTEGER(IntKi), PARAMETER :: M24N5TDxss = 10904 + INTEGER(IntKi), PARAMETER :: M24N6TDxss = 10905 + INTEGER(IntKi), PARAMETER :: M24N7TDxss = 10906 + INTEGER(IntKi), PARAMETER :: M24N8TDxss = 10907 + INTEGER(IntKi), PARAMETER :: M24N9TDxss = 10908 + INTEGER(IntKi), PARAMETER :: M25N1TDxss = 10909 + INTEGER(IntKi), PARAMETER :: M25N2TDxss = 10910 + INTEGER(IntKi), PARAMETER :: M25N3TDxss = 10911 + INTEGER(IntKi), PARAMETER :: M25N4TDxss = 10912 + INTEGER(IntKi), PARAMETER :: M25N5TDxss = 10913 + INTEGER(IntKi), PARAMETER :: M25N6TDxss = 10914 + INTEGER(IntKi), PARAMETER :: M25N7TDxss = 10915 + INTEGER(IntKi), PARAMETER :: M25N8TDxss = 10916 + INTEGER(IntKi), PARAMETER :: M25N9TDxss = 10917 + INTEGER(IntKi), PARAMETER :: M26N1TDxss = 10918 + INTEGER(IntKi), PARAMETER :: M26N2TDxss = 10919 + INTEGER(IntKi), PARAMETER :: M26N3TDxss = 10920 + INTEGER(IntKi), PARAMETER :: M26N4TDxss = 10921 + INTEGER(IntKi), PARAMETER :: M26N5TDxss = 10922 + INTEGER(IntKi), PARAMETER :: M26N6TDxss = 10923 + INTEGER(IntKi), PARAMETER :: M26N7TDxss = 10924 + INTEGER(IntKi), PARAMETER :: M26N8TDxss = 10925 + INTEGER(IntKi), PARAMETER :: M26N9TDxss = 10926 + INTEGER(IntKi), PARAMETER :: M27N1TDxss = 10927 + INTEGER(IntKi), PARAMETER :: M27N2TDxss = 10928 + INTEGER(IntKi), PARAMETER :: M27N3TDxss = 10929 + INTEGER(IntKi), PARAMETER :: M27N4TDxss = 10930 + INTEGER(IntKi), PARAMETER :: M27N5TDxss = 10931 + INTEGER(IntKi), PARAMETER :: M27N6TDxss = 10932 + INTEGER(IntKi), PARAMETER :: M27N7TDxss = 10933 + INTEGER(IntKi), PARAMETER :: M27N8TDxss = 10934 + INTEGER(IntKi), PARAMETER :: M27N9TDxss = 10935 + INTEGER(IntKi), PARAMETER :: M28N1TDxss = 10936 + INTEGER(IntKi), PARAMETER :: M28N2TDxss = 10937 + INTEGER(IntKi), PARAMETER :: M28N3TDxss = 10938 + INTEGER(IntKi), PARAMETER :: M28N4TDxss = 10939 + INTEGER(IntKi), PARAMETER :: M28N5TDxss = 10940 + INTEGER(IntKi), PARAMETER :: M28N6TDxss = 10941 + INTEGER(IntKi), PARAMETER :: M28N7TDxss = 10942 + INTEGER(IntKi), PARAMETER :: M28N8TDxss = 10943 + INTEGER(IntKi), PARAMETER :: M28N9TDxss = 10944 + INTEGER(IntKi), PARAMETER :: M29N1TDxss = 10945 + INTEGER(IntKi), PARAMETER :: M29N2TDxss = 10946 + INTEGER(IntKi), PARAMETER :: M29N3TDxss = 10947 + INTEGER(IntKi), PARAMETER :: M29N4TDxss = 10948 + INTEGER(IntKi), PARAMETER :: M29N5TDxss = 10949 + INTEGER(IntKi), PARAMETER :: M29N6TDxss = 10950 + INTEGER(IntKi), PARAMETER :: M29N7TDxss = 10951 + INTEGER(IntKi), PARAMETER :: M29N8TDxss = 10952 + INTEGER(IntKi), PARAMETER :: M29N9TDxss = 10953 + INTEGER(IntKi), PARAMETER :: M30N1TDxss = 10954 + INTEGER(IntKi), PARAMETER :: M30N2TDxss = 10955 + INTEGER(IntKi), PARAMETER :: M30N3TDxss = 10956 + INTEGER(IntKi), PARAMETER :: M30N4TDxss = 10957 + INTEGER(IntKi), PARAMETER :: M30N5TDxss = 10958 + INTEGER(IntKi), PARAMETER :: M30N6TDxss = 10959 + INTEGER(IntKi), PARAMETER :: M30N7TDxss = 10960 + INTEGER(IntKi), PARAMETER :: M30N8TDxss = 10961 + INTEGER(IntKi), PARAMETER :: M30N9TDxss = 10962 + INTEGER(IntKi), PARAMETER :: M31N1TDxss = 10963 + INTEGER(IntKi), PARAMETER :: M31N2TDxss = 10964 + INTEGER(IntKi), PARAMETER :: M31N3TDxss = 10965 + INTEGER(IntKi), PARAMETER :: M31N4TDxss = 10966 + INTEGER(IntKi), PARAMETER :: M31N5TDxss = 10967 + INTEGER(IntKi), PARAMETER :: M31N6TDxss = 10968 + INTEGER(IntKi), PARAMETER :: M31N7TDxss = 10969 + INTEGER(IntKi), PARAMETER :: M31N8TDxss = 10970 + INTEGER(IntKi), PARAMETER :: M31N9TDxss = 10971 + INTEGER(IntKi), PARAMETER :: M32N1TDxss = 10972 + INTEGER(IntKi), PARAMETER :: M32N2TDxss = 10973 + INTEGER(IntKi), PARAMETER :: M32N3TDxss = 10974 + INTEGER(IntKi), PARAMETER :: M32N4TDxss = 10975 + INTEGER(IntKi), PARAMETER :: M32N5TDxss = 10976 + INTEGER(IntKi), PARAMETER :: M32N6TDxss = 10977 + INTEGER(IntKi), PARAMETER :: M32N7TDxss = 10978 + INTEGER(IntKi), PARAMETER :: M32N8TDxss = 10979 + INTEGER(IntKi), PARAMETER :: M32N9TDxss = 10980 + INTEGER(IntKi), PARAMETER :: M33N1TDxss = 10981 + INTEGER(IntKi), PARAMETER :: M33N2TDxss = 10982 + INTEGER(IntKi), PARAMETER :: M33N3TDxss = 10983 + INTEGER(IntKi), PARAMETER :: M33N4TDxss = 10984 + INTEGER(IntKi), PARAMETER :: M33N5TDxss = 10985 + INTEGER(IntKi), PARAMETER :: M33N6TDxss = 10986 + INTEGER(IntKi), PARAMETER :: M33N7TDxss = 10987 + INTEGER(IntKi), PARAMETER :: M33N8TDxss = 10988 + INTEGER(IntKi), PARAMETER :: M33N9TDxss = 10989 + INTEGER(IntKi), PARAMETER :: M34N1TDxss = 10990 + INTEGER(IntKi), PARAMETER :: M34N2TDxss = 10991 + INTEGER(IntKi), PARAMETER :: M34N3TDxss = 10992 + INTEGER(IntKi), PARAMETER :: M34N4TDxss = 10993 + INTEGER(IntKi), PARAMETER :: M34N5TDxss = 10994 + INTEGER(IntKi), PARAMETER :: M34N6TDxss = 10995 + INTEGER(IntKi), PARAMETER :: M34N7TDxss = 10996 + INTEGER(IntKi), PARAMETER :: M34N8TDxss = 10997 + INTEGER(IntKi), PARAMETER :: M34N9TDxss = 10998 + INTEGER(IntKi), PARAMETER :: M35N1TDxss = 10999 + INTEGER(IntKi), PARAMETER :: M35N2TDxss = 11000 + INTEGER(IntKi), PARAMETER :: M35N3TDxss = 11001 + INTEGER(IntKi), PARAMETER :: M35N4TDxss = 11002 + INTEGER(IntKi), PARAMETER :: M35N5TDxss = 11003 + INTEGER(IntKi), PARAMETER :: M35N6TDxss = 11004 + INTEGER(IntKi), PARAMETER :: M35N7TDxss = 11005 + INTEGER(IntKi), PARAMETER :: M35N8TDxss = 11006 + INTEGER(IntKi), PARAMETER :: M35N9TDxss = 11007 + INTEGER(IntKi), PARAMETER :: M36N1TDxss = 11008 + INTEGER(IntKi), PARAMETER :: M36N2TDxss = 11009 + INTEGER(IntKi), PARAMETER :: M36N3TDxss = 11010 + INTEGER(IntKi), PARAMETER :: M36N4TDxss = 11011 + INTEGER(IntKi), PARAMETER :: M36N5TDxss = 11012 + INTEGER(IntKi), PARAMETER :: M36N6TDxss = 11013 + INTEGER(IntKi), PARAMETER :: M36N7TDxss = 11014 + INTEGER(IntKi), PARAMETER :: M36N8TDxss = 11015 + INTEGER(IntKi), PARAMETER :: M36N9TDxss = 11016 + INTEGER(IntKi), PARAMETER :: M37N1TDxss = 11017 + INTEGER(IntKi), PARAMETER :: M37N2TDxss = 11018 + INTEGER(IntKi), PARAMETER :: M37N3TDxss = 11019 + INTEGER(IntKi), PARAMETER :: M37N4TDxss = 11020 + INTEGER(IntKi), PARAMETER :: M37N5TDxss = 11021 + INTEGER(IntKi), PARAMETER :: M37N6TDxss = 11022 + INTEGER(IntKi), PARAMETER :: M37N7TDxss = 11023 + INTEGER(IntKi), PARAMETER :: M37N8TDxss = 11024 + INTEGER(IntKi), PARAMETER :: M37N9TDxss = 11025 + INTEGER(IntKi), PARAMETER :: M38N1TDxss = 11026 + INTEGER(IntKi), PARAMETER :: M38N2TDxss = 11027 + INTEGER(IntKi), PARAMETER :: M38N3TDxss = 11028 + INTEGER(IntKi), PARAMETER :: M38N4TDxss = 11029 + INTEGER(IntKi), PARAMETER :: M38N5TDxss = 11030 + INTEGER(IntKi), PARAMETER :: M38N6TDxss = 11031 + INTEGER(IntKi), PARAMETER :: M38N7TDxss = 11032 + INTEGER(IntKi), PARAMETER :: M38N8TDxss = 11033 + INTEGER(IntKi), PARAMETER :: M38N9TDxss = 11034 + INTEGER(IntKi), PARAMETER :: M39N1TDxss = 11035 + INTEGER(IntKi), PARAMETER :: M39N2TDxss = 11036 + INTEGER(IntKi), PARAMETER :: M39N3TDxss = 11037 + INTEGER(IntKi), PARAMETER :: M39N4TDxss = 11038 + INTEGER(IntKi), PARAMETER :: M39N5TDxss = 11039 + INTEGER(IntKi), PARAMETER :: M39N6TDxss = 11040 + INTEGER(IntKi), PARAMETER :: M39N7TDxss = 11041 + INTEGER(IntKi), PARAMETER :: M39N8TDxss = 11042 + INTEGER(IntKi), PARAMETER :: M39N9TDxss = 11043 + INTEGER(IntKi), PARAMETER :: M40N1TDxss = 11044 + INTEGER(IntKi), PARAMETER :: M40N2TDxss = 11045 + INTEGER(IntKi), PARAMETER :: M40N3TDxss = 11046 + INTEGER(IntKi), PARAMETER :: M40N4TDxss = 11047 + INTEGER(IntKi), PARAMETER :: M40N5TDxss = 11048 + INTEGER(IntKi), PARAMETER :: M40N6TDxss = 11049 + INTEGER(IntKi), PARAMETER :: M40N7TDxss = 11050 + INTEGER(IntKi), PARAMETER :: M40N8TDxss = 11051 + INTEGER(IntKi), PARAMETER :: M40N9TDxss = 11052 + INTEGER(IntKi), PARAMETER :: M41N1TDxss = 11053 + INTEGER(IntKi), PARAMETER :: M41N2TDxss = 11054 + INTEGER(IntKi), PARAMETER :: M41N3TDxss = 11055 + INTEGER(IntKi), PARAMETER :: M41N4TDxss = 11056 + INTEGER(IntKi), PARAMETER :: M41N5TDxss = 11057 + INTEGER(IntKi), PARAMETER :: M41N6TDxss = 11058 + INTEGER(IntKi), PARAMETER :: M41N7TDxss = 11059 + INTEGER(IntKi), PARAMETER :: M41N8TDxss = 11060 + INTEGER(IntKi), PARAMETER :: M41N9TDxss = 11061 + INTEGER(IntKi), PARAMETER :: M42N1TDxss = 11062 + INTEGER(IntKi), PARAMETER :: M42N2TDxss = 11063 + INTEGER(IntKi), PARAMETER :: M42N3TDxss = 11064 + INTEGER(IntKi), PARAMETER :: M42N4TDxss = 11065 + INTEGER(IntKi), PARAMETER :: M42N5TDxss = 11066 + INTEGER(IntKi), PARAMETER :: M42N6TDxss = 11067 + INTEGER(IntKi), PARAMETER :: M42N7TDxss = 11068 + INTEGER(IntKi), PARAMETER :: M42N8TDxss = 11069 + INTEGER(IntKi), PARAMETER :: M42N9TDxss = 11070 + INTEGER(IntKi), PARAMETER :: M43N1TDxss = 11071 + INTEGER(IntKi), PARAMETER :: M43N2TDxss = 11072 + INTEGER(IntKi), PARAMETER :: M43N3TDxss = 11073 + INTEGER(IntKi), PARAMETER :: M43N4TDxss = 11074 + INTEGER(IntKi), PARAMETER :: M43N5TDxss = 11075 + INTEGER(IntKi), PARAMETER :: M43N6TDxss = 11076 + INTEGER(IntKi), PARAMETER :: M43N7TDxss = 11077 + INTEGER(IntKi), PARAMETER :: M43N8TDxss = 11078 + INTEGER(IntKi), PARAMETER :: M43N9TDxss = 11079 + INTEGER(IntKi), PARAMETER :: M44N1TDxss = 11080 + INTEGER(IntKi), PARAMETER :: M44N2TDxss = 11081 + INTEGER(IntKi), PARAMETER :: M44N3TDxss = 11082 + INTEGER(IntKi), PARAMETER :: M44N4TDxss = 11083 + INTEGER(IntKi), PARAMETER :: M44N5TDxss = 11084 + INTEGER(IntKi), PARAMETER :: M44N6TDxss = 11085 + INTEGER(IntKi), PARAMETER :: M44N7TDxss = 11086 + INTEGER(IntKi), PARAMETER :: M44N8TDxss = 11087 + INTEGER(IntKi), PARAMETER :: M44N9TDxss = 11088 + INTEGER(IntKi), PARAMETER :: M45N1TDxss = 11089 + INTEGER(IntKi), PARAMETER :: M45N2TDxss = 11090 + INTEGER(IntKi), PARAMETER :: M45N3TDxss = 11091 + INTEGER(IntKi), PARAMETER :: M45N4TDxss = 11092 + INTEGER(IntKi), PARAMETER :: M45N5TDxss = 11093 + INTEGER(IntKi), PARAMETER :: M45N6TDxss = 11094 + INTEGER(IntKi), PARAMETER :: M45N7TDxss = 11095 + INTEGER(IntKi), PARAMETER :: M45N8TDxss = 11096 + INTEGER(IntKi), PARAMETER :: M45N9TDxss = 11097 + INTEGER(IntKi), PARAMETER :: M46N1TDxss = 11098 + INTEGER(IntKi), PARAMETER :: M46N2TDxss = 11099 + INTEGER(IntKi), PARAMETER :: M46N3TDxss = 11100 + INTEGER(IntKi), PARAMETER :: M46N4TDxss = 11101 + INTEGER(IntKi), PARAMETER :: M46N5TDxss = 11102 + INTEGER(IntKi), PARAMETER :: M46N6TDxss = 11103 + INTEGER(IntKi), PARAMETER :: M46N7TDxss = 11104 + INTEGER(IntKi), PARAMETER :: M46N8TDxss = 11105 + INTEGER(IntKi), PARAMETER :: M46N9TDxss = 11106 + INTEGER(IntKi), PARAMETER :: M47N1TDxss = 11107 + INTEGER(IntKi), PARAMETER :: M47N2TDxss = 11108 + INTEGER(IntKi), PARAMETER :: M47N3TDxss = 11109 + INTEGER(IntKi), PARAMETER :: M47N4TDxss = 11110 + INTEGER(IntKi), PARAMETER :: M47N5TDxss = 11111 + INTEGER(IntKi), PARAMETER :: M47N6TDxss = 11112 + INTEGER(IntKi), PARAMETER :: M47N7TDxss = 11113 + INTEGER(IntKi), PARAMETER :: M47N8TDxss = 11114 + INTEGER(IntKi), PARAMETER :: M47N9TDxss = 11115 + INTEGER(IntKi), PARAMETER :: M48N1TDxss = 11116 + INTEGER(IntKi), PARAMETER :: M48N2TDxss = 11117 + INTEGER(IntKi), PARAMETER :: M48N3TDxss = 11118 + INTEGER(IntKi), PARAMETER :: M48N4TDxss = 11119 + INTEGER(IntKi), PARAMETER :: M48N5TDxss = 11120 + INTEGER(IntKi), PARAMETER :: M48N6TDxss = 11121 + INTEGER(IntKi), PARAMETER :: M48N7TDxss = 11122 + INTEGER(IntKi), PARAMETER :: M48N8TDxss = 11123 + INTEGER(IntKi), PARAMETER :: M48N9TDxss = 11124 + INTEGER(IntKi), PARAMETER :: M49N1TDxss = 11125 + INTEGER(IntKi), PARAMETER :: M49N2TDxss = 11126 + INTEGER(IntKi), PARAMETER :: M49N3TDxss = 11127 + INTEGER(IntKi), PARAMETER :: M49N4TDxss = 11128 + INTEGER(IntKi), PARAMETER :: M49N5TDxss = 11129 + INTEGER(IntKi), PARAMETER :: M49N6TDxss = 11130 + INTEGER(IntKi), PARAMETER :: M49N7TDxss = 11131 + INTEGER(IntKi), PARAMETER :: M49N8TDxss = 11132 + INTEGER(IntKi), PARAMETER :: M49N9TDxss = 11133 + INTEGER(IntKi), PARAMETER :: M50N1TDxss = 11134 + INTEGER(IntKi), PARAMETER :: M50N2TDxss = 11135 + INTEGER(IntKi), PARAMETER :: M50N3TDxss = 11136 + INTEGER(IntKi), PARAMETER :: M50N4TDxss = 11137 + INTEGER(IntKi), PARAMETER :: M50N5TDxss = 11138 + INTEGER(IntKi), PARAMETER :: M50N6TDxss = 11139 + INTEGER(IntKi), PARAMETER :: M50N7TDxss = 11140 + INTEGER(IntKi), PARAMETER :: M50N8TDxss = 11141 + INTEGER(IntKi), PARAMETER :: M50N9TDxss = 11142 + INTEGER(IntKi), PARAMETER :: M51N1TDxss = 11143 + INTEGER(IntKi), PARAMETER :: M51N2TDxss = 11144 + INTEGER(IntKi), PARAMETER :: M51N3TDxss = 11145 + INTEGER(IntKi), PARAMETER :: M51N4TDxss = 11146 + INTEGER(IntKi), PARAMETER :: M51N5TDxss = 11147 + INTEGER(IntKi), PARAMETER :: M51N6TDxss = 11148 + INTEGER(IntKi), PARAMETER :: M51N7TDxss = 11149 + INTEGER(IntKi), PARAMETER :: M51N8TDxss = 11150 + INTEGER(IntKi), PARAMETER :: M51N9TDxss = 11151 + INTEGER(IntKi), PARAMETER :: M52N1TDxss = 11152 + INTEGER(IntKi), PARAMETER :: M52N2TDxss = 11153 + INTEGER(IntKi), PARAMETER :: M52N3TDxss = 11154 + INTEGER(IntKi), PARAMETER :: M52N4TDxss = 11155 + INTEGER(IntKi), PARAMETER :: M52N5TDxss = 11156 + INTEGER(IntKi), PARAMETER :: M52N6TDxss = 11157 + INTEGER(IntKi), PARAMETER :: M52N7TDxss = 11158 + INTEGER(IntKi), PARAMETER :: M52N8TDxss = 11159 + INTEGER(IntKi), PARAMETER :: M52N9TDxss = 11160 + INTEGER(IntKi), PARAMETER :: M53N1TDxss = 11161 + INTEGER(IntKi), PARAMETER :: M53N2TDxss = 11162 + INTEGER(IntKi), PARAMETER :: M53N3TDxss = 11163 + INTEGER(IntKi), PARAMETER :: M53N4TDxss = 11164 + INTEGER(IntKi), PARAMETER :: M53N5TDxss = 11165 + INTEGER(IntKi), PARAMETER :: M53N6TDxss = 11166 + INTEGER(IntKi), PARAMETER :: M53N7TDxss = 11167 + INTEGER(IntKi), PARAMETER :: M53N8TDxss = 11168 + INTEGER(IntKi), PARAMETER :: M53N9TDxss = 11169 + INTEGER(IntKi), PARAMETER :: M54N1TDxss = 11170 + INTEGER(IntKi), PARAMETER :: M54N2TDxss = 11171 + INTEGER(IntKi), PARAMETER :: M54N3TDxss = 11172 + INTEGER(IntKi), PARAMETER :: M54N4TDxss = 11173 + INTEGER(IntKi), PARAMETER :: M54N5TDxss = 11174 + INTEGER(IntKi), PARAMETER :: M54N6TDxss = 11175 + INTEGER(IntKi), PARAMETER :: M54N7TDxss = 11176 + INTEGER(IntKi), PARAMETER :: M54N8TDxss = 11177 + INTEGER(IntKi), PARAMETER :: M54N9TDxss = 11178 + INTEGER(IntKi), PARAMETER :: M55N1TDxss = 11179 + INTEGER(IntKi), PARAMETER :: M55N2TDxss = 11180 + INTEGER(IntKi), PARAMETER :: M55N3TDxss = 11181 + INTEGER(IntKi), PARAMETER :: M55N4TDxss = 11182 + INTEGER(IntKi), PARAMETER :: M55N5TDxss = 11183 + INTEGER(IntKi), PARAMETER :: M55N6TDxss = 11184 + INTEGER(IntKi), PARAMETER :: M55N7TDxss = 11185 + INTEGER(IntKi), PARAMETER :: M55N8TDxss = 11186 + INTEGER(IntKi), PARAMETER :: M55N9TDxss = 11187 + INTEGER(IntKi), PARAMETER :: M56N1TDxss = 11188 + INTEGER(IntKi), PARAMETER :: M56N2TDxss = 11189 + INTEGER(IntKi), PARAMETER :: M56N3TDxss = 11190 + INTEGER(IntKi), PARAMETER :: M56N4TDxss = 11191 + INTEGER(IntKi), PARAMETER :: M56N5TDxss = 11192 + INTEGER(IntKi), PARAMETER :: M56N6TDxss = 11193 + INTEGER(IntKi), PARAMETER :: M56N7TDxss = 11194 + INTEGER(IntKi), PARAMETER :: M56N8TDxss = 11195 + INTEGER(IntKi), PARAMETER :: M56N9TDxss = 11196 + INTEGER(IntKi), PARAMETER :: M57N1TDxss = 11197 + INTEGER(IntKi), PARAMETER :: M57N2TDxss = 11198 + INTEGER(IntKi), PARAMETER :: M57N3TDxss = 11199 + INTEGER(IntKi), PARAMETER :: M57N4TDxss = 11200 + INTEGER(IntKi), PARAMETER :: M57N5TDxss = 11201 + INTEGER(IntKi), PARAMETER :: M57N6TDxss = 11202 + INTEGER(IntKi), PARAMETER :: M57N7TDxss = 11203 + INTEGER(IntKi), PARAMETER :: M57N8TDxss = 11204 + INTEGER(IntKi), PARAMETER :: M57N9TDxss = 11205 + INTEGER(IntKi), PARAMETER :: M58N1TDxss = 11206 + INTEGER(IntKi), PARAMETER :: M58N2TDxss = 11207 + INTEGER(IntKi), PARAMETER :: M58N3TDxss = 11208 + INTEGER(IntKi), PARAMETER :: M58N4TDxss = 11209 + INTEGER(IntKi), PARAMETER :: M58N5TDxss = 11210 + INTEGER(IntKi), PARAMETER :: M58N6TDxss = 11211 + INTEGER(IntKi), PARAMETER :: M58N7TDxss = 11212 + INTEGER(IntKi), PARAMETER :: M58N8TDxss = 11213 + INTEGER(IntKi), PARAMETER :: M58N9TDxss = 11214 + INTEGER(IntKi), PARAMETER :: M59N1TDxss = 11215 + INTEGER(IntKi), PARAMETER :: M59N2TDxss = 11216 + INTEGER(IntKi), PARAMETER :: M59N3TDxss = 11217 + INTEGER(IntKi), PARAMETER :: M59N4TDxss = 11218 + INTEGER(IntKi), PARAMETER :: M59N5TDxss = 11219 + INTEGER(IntKi), PARAMETER :: M59N6TDxss = 11220 + INTEGER(IntKi), PARAMETER :: M59N7TDxss = 11221 + INTEGER(IntKi), PARAMETER :: M59N8TDxss = 11222 + INTEGER(IntKi), PARAMETER :: M59N9TDxss = 11223 + INTEGER(IntKi), PARAMETER :: M60N1TDxss = 11224 + INTEGER(IntKi), PARAMETER :: M60N2TDxss = 11225 + INTEGER(IntKi), PARAMETER :: M60N3TDxss = 11226 + INTEGER(IntKi), PARAMETER :: M60N4TDxss = 11227 + INTEGER(IntKi), PARAMETER :: M60N5TDxss = 11228 + INTEGER(IntKi), PARAMETER :: M60N6TDxss = 11229 + INTEGER(IntKi), PARAMETER :: M60N7TDxss = 11230 + INTEGER(IntKi), PARAMETER :: M60N8TDxss = 11231 + INTEGER(IntKi), PARAMETER :: M60N9TDxss = 11232 + INTEGER(IntKi), PARAMETER :: M61N1TDxss = 11233 + INTEGER(IntKi), PARAMETER :: M61N2TDxss = 11234 + INTEGER(IntKi), PARAMETER :: M61N3TDxss = 11235 + INTEGER(IntKi), PARAMETER :: M61N4TDxss = 11236 + INTEGER(IntKi), PARAMETER :: M61N5TDxss = 11237 + INTEGER(IntKi), PARAMETER :: M61N6TDxss = 11238 + INTEGER(IntKi), PARAMETER :: M61N7TDxss = 11239 + INTEGER(IntKi), PARAMETER :: M61N8TDxss = 11240 + INTEGER(IntKi), PARAMETER :: M61N9TDxss = 11241 + INTEGER(IntKi), PARAMETER :: M62N1TDxss = 11242 + INTEGER(IntKi), PARAMETER :: M62N2TDxss = 11243 + INTEGER(IntKi), PARAMETER :: M62N3TDxss = 11244 + INTEGER(IntKi), PARAMETER :: M62N4TDxss = 11245 + INTEGER(IntKi), PARAMETER :: M62N5TDxss = 11246 + INTEGER(IntKi), PARAMETER :: M62N6TDxss = 11247 + INTEGER(IntKi), PARAMETER :: M62N7TDxss = 11248 + INTEGER(IntKi), PARAMETER :: M62N8TDxss = 11249 + INTEGER(IntKi), PARAMETER :: M62N9TDxss = 11250 + INTEGER(IntKi), PARAMETER :: M63N1TDxss = 11251 + INTEGER(IntKi), PARAMETER :: M63N2TDxss = 11252 + INTEGER(IntKi), PARAMETER :: M63N3TDxss = 11253 + INTEGER(IntKi), PARAMETER :: M63N4TDxss = 11254 + INTEGER(IntKi), PARAMETER :: M63N5TDxss = 11255 + INTEGER(IntKi), PARAMETER :: M63N6TDxss = 11256 + INTEGER(IntKi), PARAMETER :: M63N7TDxss = 11257 + INTEGER(IntKi), PARAMETER :: M63N8TDxss = 11258 + INTEGER(IntKi), PARAMETER :: M63N9TDxss = 11259 + INTEGER(IntKi), PARAMETER :: M64N1TDxss = 11260 + INTEGER(IntKi), PARAMETER :: M64N2TDxss = 11261 + INTEGER(IntKi), PARAMETER :: M64N3TDxss = 11262 + INTEGER(IntKi), PARAMETER :: M64N4TDxss = 11263 + INTEGER(IntKi), PARAMETER :: M64N5TDxss = 11264 + INTEGER(IntKi), PARAMETER :: M64N6TDxss = 11265 + INTEGER(IntKi), PARAMETER :: M64N7TDxss = 11266 + INTEGER(IntKi), PARAMETER :: M64N8TDxss = 11267 + INTEGER(IntKi), PARAMETER :: M64N9TDxss = 11268 + INTEGER(IntKi), PARAMETER :: M65N1TDxss = 11269 + INTEGER(IntKi), PARAMETER :: M65N2TDxss = 11270 + INTEGER(IntKi), PARAMETER :: M65N3TDxss = 11271 + INTEGER(IntKi), PARAMETER :: M65N4TDxss = 11272 + INTEGER(IntKi), PARAMETER :: M65N5TDxss = 11273 + INTEGER(IntKi), PARAMETER :: M65N6TDxss = 11274 + INTEGER(IntKi), PARAMETER :: M65N7TDxss = 11275 + INTEGER(IntKi), PARAMETER :: M65N8TDxss = 11276 + INTEGER(IntKi), PARAMETER :: M65N9TDxss = 11277 + INTEGER(IntKi), PARAMETER :: M66N1TDxss = 11278 + INTEGER(IntKi), PARAMETER :: M66N2TDxss = 11279 + INTEGER(IntKi), PARAMETER :: M66N3TDxss = 11280 + INTEGER(IntKi), PARAMETER :: M66N4TDxss = 11281 + INTEGER(IntKi), PARAMETER :: M66N5TDxss = 11282 + INTEGER(IntKi), PARAMETER :: M66N6TDxss = 11283 + INTEGER(IntKi), PARAMETER :: M66N7TDxss = 11284 + INTEGER(IntKi), PARAMETER :: M66N8TDxss = 11285 + INTEGER(IntKi), PARAMETER :: M66N9TDxss = 11286 + INTEGER(IntKi), PARAMETER :: M67N1TDxss = 11287 + INTEGER(IntKi), PARAMETER :: M67N2TDxss = 11288 + INTEGER(IntKi), PARAMETER :: M67N3TDxss = 11289 + INTEGER(IntKi), PARAMETER :: M67N4TDxss = 11290 + INTEGER(IntKi), PARAMETER :: M67N5TDxss = 11291 + INTEGER(IntKi), PARAMETER :: M67N6TDxss = 11292 + INTEGER(IntKi), PARAMETER :: M67N7TDxss = 11293 + INTEGER(IntKi), PARAMETER :: M67N8TDxss = 11294 + INTEGER(IntKi), PARAMETER :: M67N9TDxss = 11295 + INTEGER(IntKi), PARAMETER :: M68N1TDxss = 11296 + INTEGER(IntKi), PARAMETER :: M68N2TDxss = 11297 + INTEGER(IntKi), PARAMETER :: M68N3TDxss = 11298 + INTEGER(IntKi), PARAMETER :: M68N4TDxss = 11299 + INTEGER(IntKi), PARAMETER :: M68N5TDxss = 11300 + INTEGER(IntKi), PARAMETER :: M68N6TDxss = 11301 + INTEGER(IntKi), PARAMETER :: M68N7TDxss = 11302 + INTEGER(IntKi), PARAMETER :: M68N8TDxss = 11303 + INTEGER(IntKi), PARAMETER :: M68N9TDxss = 11304 + INTEGER(IntKi), PARAMETER :: M69N1TDxss = 11305 + INTEGER(IntKi), PARAMETER :: M69N2TDxss = 11306 + INTEGER(IntKi), PARAMETER :: M69N3TDxss = 11307 + INTEGER(IntKi), PARAMETER :: M69N4TDxss = 11308 + INTEGER(IntKi), PARAMETER :: M69N5TDxss = 11309 + INTEGER(IntKi), PARAMETER :: M69N6TDxss = 11310 + INTEGER(IntKi), PARAMETER :: M69N7TDxss = 11311 + INTEGER(IntKi), PARAMETER :: M69N8TDxss = 11312 + INTEGER(IntKi), PARAMETER :: M69N9TDxss = 11313 + INTEGER(IntKi), PARAMETER :: M70N1TDxss = 11314 + INTEGER(IntKi), PARAMETER :: M70N2TDxss = 11315 + INTEGER(IntKi), PARAMETER :: M70N3TDxss = 11316 + INTEGER(IntKi), PARAMETER :: M70N4TDxss = 11317 + INTEGER(IntKi), PARAMETER :: M70N5TDxss = 11318 + INTEGER(IntKi), PARAMETER :: M70N6TDxss = 11319 + INTEGER(IntKi), PARAMETER :: M70N7TDxss = 11320 + INTEGER(IntKi), PARAMETER :: M70N8TDxss = 11321 + INTEGER(IntKi), PARAMETER :: M70N9TDxss = 11322 + INTEGER(IntKi), PARAMETER :: M71N1TDxss = 11323 + INTEGER(IntKi), PARAMETER :: M71N2TDxss = 11324 + INTEGER(IntKi), PARAMETER :: M71N3TDxss = 11325 + INTEGER(IntKi), PARAMETER :: M71N4TDxss = 11326 + INTEGER(IntKi), PARAMETER :: M71N5TDxss = 11327 + INTEGER(IntKi), PARAMETER :: M71N6TDxss = 11328 + INTEGER(IntKi), PARAMETER :: M71N7TDxss = 11329 + INTEGER(IntKi), PARAMETER :: M71N8TDxss = 11330 + INTEGER(IntKi), PARAMETER :: M71N9TDxss = 11331 + INTEGER(IntKi), PARAMETER :: M72N1TDxss = 11332 + INTEGER(IntKi), PARAMETER :: M72N2TDxss = 11333 + INTEGER(IntKi), PARAMETER :: M72N3TDxss = 11334 + INTEGER(IntKi), PARAMETER :: M72N4TDxss = 11335 + INTEGER(IntKi), PARAMETER :: M72N5TDxss = 11336 + INTEGER(IntKi), PARAMETER :: M72N6TDxss = 11337 + INTEGER(IntKi), PARAMETER :: M72N7TDxss = 11338 + INTEGER(IntKi), PARAMETER :: M72N8TDxss = 11339 + INTEGER(IntKi), PARAMETER :: M72N9TDxss = 11340 + INTEGER(IntKi), PARAMETER :: M73N1TDxss = 11341 + INTEGER(IntKi), PARAMETER :: M73N2TDxss = 11342 + INTEGER(IntKi), PARAMETER :: M73N3TDxss = 11343 + INTEGER(IntKi), PARAMETER :: M73N4TDxss = 11344 + INTEGER(IntKi), PARAMETER :: M73N5TDxss = 11345 + INTEGER(IntKi), PARAMETER :: M73N6TDxss = 11346 + INTEGER(IntKi), PARAMETER :: M73N7TDxss = 11347 + INTEGER(IntKi), PARAMETER :: M73N8TDxss = 11348 + INTEGER(IntKi), PARAMETER :: M73N9TDxss = 11349 + INTEGER(IntKi), PARAMETER :: M74N1TDxss = 11350 + INTEGER(IntKi), PARAMETER :: M74N2TDxss = 11351 + INTEGER(IntKi), PARAMETER :: M74N3TDxss = 11352 + INTEGER(IntKi), PARAMETER :: M74N4TDxss = 11353 + INTEGER(IntKi), PARAMETER :: M74N5TDxss = 11354 + INTEGER(IntKi), PARAMETER :: M74N6TDxss = 11355 + INTEGER(IntKi), PARAMETER :: M74N7TDxss = 11356 + INTEGER(IntKi), PARAMETER :: M74N8TDxss = 11357 + INTEGER(IntKi), PARAMETER :: M74N9TDxss = 11358 + INTEGER(IntKi), PARAMETER :: M75N1TDxss = 11359 + INTEGER(IntKi), PARAMETER :: M75N2TDxss = 11360 + INTEGER(IntKi), PARAMETER :: M75N3TDxss = 11361 + INTEGER(IntKi), PARAMETER :: M75N4TDxss = 11362 + INTEGER(IntKi), PARAMETER :: M75N5TDxss = 11363 + INTEGER(IntKi), PARAMETER :: M75N6TDxss = 11364 + INTEGER(IntKi), PARAMETER :: M75N7TDxss = 11365 + INTEGER(IntKi), PARAMETER :: M75N8TDxss = 11366 + INTEGER(IntKi), PARAMETER :: M75N9TDxss = 11367 + INTEGER(IntKi), PARAMETER :: M76N1TDxss = 11368 + INTEGER(IntKi), PARAMETER :: M76N2TDxss = 11369 + INTEGER(IntKi), PARAMETER :: M76N3TDxss = 11370 + INTEGER(IntKi), PARAMETER :: M76N4TDxss = 11371 + INTEGER(IntKi), PARAMETER :: M76N5TDxss = 11372 + INTEGER(IntKi), PARAMETER :: M76N6TDxss = 11373 + INTEGER(IntKi), PARAMETER :: M76N7TDxss = 11374 + INTEGER(IntKi), PARAMETER :: M76N8TDxss = 11375 + INTEGER(IntKi), PARAMETER :: M76N9TDxss = 11376 + INTEGER(IntKi), PARAMETER :: M77N1TDxss = 11377 + INTEGER(IntKi), PARAMETER :: M77N2TDxss = 11378 + INTEGER(IntKi), PARAMETER :: M77N3TDxss = 11379 + INTEGER(IntKi), PARAMETER :: M77N4TDxss = 11380 + INTEGER(IntKi), PARAMETER :: M77N5TDxss = 11381 + INTEGER(IntKi), PARAMETER :: M77N6TDxss = 11382 + INTEGER(IntKi), PARAMETER :: M77N7TDxss = 11383 + INTEGER(IntKi), PARAMETER :: M77N8TDxss = 11384 + INTEGER(IntKi), PARAMETER :: M77N9TDxss = 11385 + INTEGER(IntKi), PARAMETER :: M78N1TDxss = 11386 + INTEGER(IntKi), PARAMETER :: M78N2TDxss = 11387 + INTEGER(IntKi), PARAMETER :: M78N3TDxss = 11388 + INTEGER(IntKi), PARAMETER :: M78N4TDxss = 11389 + INTEGER(IntKi), PARAMETER :: M78N5TDxss = 11390 + INTEGER(IntKi), PARAMETER :: M78N6TDxss = 11391 + INTEGER(IntKi), PARAMETER :: M78N7TDxss = 11392 + INTEGER(IntKi), PARAMETER :: M78N8TDxss = 11393 + INTEGER(IntKi), PARAMETER :: M78N9TDxss = 11394 + INTEGER(IntKi), PARAMETER :: M79N1TDxss = 11395 + INTEGER(IntKi), PARAMETER :: M79N2TDxss = 11396 + INTEGER(IntKi), PARAMETER :: M79N3TDxss = 11397 + INTEGER(IntKi), PARAMETER :: M79N4TDxss = 11398 + INTEGER(IntKi), PARAMETER :: M79N5TDxss = 11399 + INTEGER(IntKi), PARAMETER :: M79N6TDxss = 11400 + INTEGER(IntKi), PARAMETER :: M79N7TDxss = 11401 + INTEGER(IntKi), PARAMETER :: M79N8TDxss = 11402 + INTEGER(IntKi), PARAMETER :: M79N9TDxss = 11403 + INTEGER(IntKi), PARAMETER :: M80N1TDxss = 11404 + INTEGER(IntKi), PARAMETER :: M80N2TDxss = 11405 + INTEGER(IntKi), PARAMETER :: M80N3TDxss = 11406 + INTEGER(IntKi), PARAMETER :: M80N4TDxss = 11407 + INTEGER(IntKi), PARAMETER :: M80N5TDxss = 11408 + INTEGER(IntKi), PARAMETER :: M80N6TDxss = 11409 + INTEGER(IntKi), PARAMETER :: M80N7TDxss = 11410 + INTEGER(IntKi), PARAMETER :: M80N8TDxss = 11411 + INTEGER(IntKi), PARAMETER :: M80N9TDxss = 11412 + INTEGER(IntKi), PARAMETER :: M81N1TDxss = 11413 + INTEGER(IntKi), PARAMETER :: M81N2TDxss = 11414 + INTEGER(IntKi), PARAMETER :: M81N3TDxss = 11415 + INTEGER(IntKi), PARAMETER :: M81N4TDxss = 11416 + INTEGER(IntKi), PARAMETER :: M81N5TDxss = 11417 + INTEGER(IntKi), PARAMETER :: M81N6TDxss = 11418 + INTEGER(IntKi), PARAMETER :: M81N7TDxss = 11419 + INTEGER(IntKi), PARAMETER :: M81N8TDxss = 11420 + INTEGER(IntKi), PARAMETER :: M81N9TDxss = 11421 + INTEGER(IntKi), PARAMETER :: M82N1TDxss = 11422 + INTEGER(IntKi), PARAMETER :: M82N2TDxss = 11423 + INTEGER(IntKi), PARAMETER :: M82N3TDxss = 11424 + INTEGER(IntKi), PARAMETER :: M82N4TDxss = 11425 + INTEGER(IntKi), PARAMETER :: M82N5TDxss = 11426 + INTEGER(IntKi), PARAMETER :: M82N6TDxss = 11427 + INTEGER(IntKi), PARAMETER :: M82N7TDxss = 11428 + INTEGER(IntKi), PARAMETER :: M82N8TDxss = 11429 + INTEGER(IntKi), PARAMETER :: M82N9TDxss = 11430 + INTEGER(IntKi), PARAMETER :: M83N1TDxss = 11431 + INTEGER(IntKi), PARAMETER :: M83N2TDxss = 11432 + INTEGER(IntKi), PARAMETER :: M83N3TDxss = 11433 + INTEGER(IntKi), PARAMETER :: M83N4TDxss = 11434 + INTEGER(IntKi), PARAMETER :: M83N5TDxss = 11435 + INTEGER(IntKi), PARAMETER :: M83N6TDxss = 11436 + INTEGER(IntKi), PARAMETER :: M83N7TDxss = 11437 + INTEGER(IntKi), PARAMETER :: M83N8TDxss = 11438 + INTEGER(IntKi), PARAMETER :: M83N9TDxss = 11439 + INTEGER(IntKi), PARAMETER :: M84N1TDxss = 11440 + INTEGER(IntKi), PARAMETER :: M84N2TDxss = 11441 + INTEGER(IntKi), PARAMETER :: M84N3TDxss = 11442 + INTEGER(IntKi), PARAMETER :: M84N4TDxss = 11443 + INTEGER(IntKi), PARAMETER :: M84N5TDxss = 11444 + INTEGER(IntKi), PARAMETER :: M84N6TDxss = 11445 + INTEGER(IntKi), PARAMETER :: M84N7TDxss = 11446 + INTEGER(IntKi), PARAMETER :: M84N8TDxss = 11447 + INTEGER(IntKi), PARAMETER :: M84N9TDxss = 11448 + INTEGER(IntKi), PARAMETER :: M85N1TDxss = 11449 + INTEGER(IntKi), PARAMETER :: M85N2TDxss = 11450 + INTEGER(IntKi), PARAMETER :: M85N3TDxss = 11451 + INTEGER(IntKi), PARAMETER :: M85N4TDxss = 11452 + INTEGER(IntKi), PARAMETER :: M85N5TDxss = 11453 + INTEGER(IntKi), PARAMETER :: M85N6TDxss = 11454 + INTEGER(IntKi), PARAMETER :: M85N7TDxss = 11455 + INTEGER(IntKi), PARAMETER :: M85N8TDxss = 11456 + INTEGER(IntKi), PARAMETER :: M85N9TDxss = 11457 + INTEGER(IntKi), PARAMETER :: M86N1TDxss = 11458 + INTEGER(IntKi), PARAMETER :: M86N2TDxss = 11459 + INTEGER(IntKi), PARAMETER :: M86N3TDxss = 11460 + INTEGER(IntKi), PARAMETER :: M86N4TDxss = 11461 + INTEGER(IntKi), PARAMETER :: M86N5TDxss = 11462 + INTEGER(IntKi), PARAMETER :: M86N6TDxss = 11463 + INTEGER(IntKi), PARAMETER :: M86N7TDxss = 11464 + INTEGER(IntKi), PARAMETER :: M86N8TDxss = 11465 + INTEGER(IntKi), PARAMETER :: M86N9TDxss = 11466 + INTEGER(IntKi), PARAMETER :: M87N1TDxss = 11467 + INTEGER(IntKi), PARAMETER :: M87N2TDxss = 11468 + INTEGER(IntKi), PARAMETER :: M87N3TDxss = 11469 + INTEGER(IntKi), PARAMETER :: M87N4TDxss = 11470 + INTEGER(IntKi), PARAMETER :: M87N5TDxss = 11471 + INTEGER(IntKi), PARAMETER :: M87N6TDxss = 11472 + INTEGER(IntKi), PARAMETER :: M87N7TDxss = 11473 + INTEGER(IntKi), PARAMETER :: M87N8TDxss = 11474 + INTEGER(IntKi), PARAMETER :: M87N9TDxss = 11475 + INTEGER(IntKi), PARAMETER :: M88N1TDxss = 11476 + INTEGER(IntKi), PARAMETER :: M88N2TDxss = 11477 + INTEGER(IntKi), PARAMETER :: M88N3TDxss = 11478 + INTEGER(IntKi), PARAMETER :: M88N4TDxss = 11479 + INTEGER(IntKi), PARAMETER :: M88N5TDxss = 11480 + INTEGER(IntKi), PARAMETER :: M88N6TDxss = 11481 + INTEGER(IntKi), PARAMETER :: M88N7TDxss = 11482 + INTEGER(IntKi), PARAMETER :: M88N8TDxss = 11483 + INTEGER(IntKi), PARAMETER :: M88N9TDxss = 11484 + INTEGER(IntKi), PARAMETER :: M89N1TDxss = 11485 + INTEGER(IntKi), PARAMETER :: M89N2TDxss = 11486 + INTEGER(IntKi), PARAMETER :: M89N3TDxss = 11487 + INTEGER(IntKi), PARAMETER :: M89N4TDxss = 11488 + INTEGER(IntKi), PARAMETER :: M89N5TDxss = 11489 + INTEGER(IntKi), PARAMETER :: M89N6TDxss = 11490 + INTEGER(IntKi), PARAMETER :: M89N7TDxss = 11491 + INTEGER(IntKi), PARAMETER :: M89N8TDxss = 11492 + INTEGER(IntKi), PARAMETER :: M89N9TDxss = 11493 + INTEGER(IntKi), PARAMETER :: M90N1TDxss = 11494 + INTEGER(IntKi), PARAMETER :: M90N2TDxss = 11495 + INTEGER(IntKi), PARAMETER :: M90N3TDxss = 11496 + INTEGER(IntKi), PARAMETER :: M90N4TDxss = 11497 + INTEGER(IntKi), PARAMETER :: M90N5TDxss = 11498 + INTEGER(IntKi), PARAMETER :: M90N6TDxss = 11499 + INTEGER(IntKi), PARAMETER :: M90N7TDxss = 11500 + INTEGER(IntKi), PARAMETER :: M90N8TDxss = 11501 + INTEGER(IntKi), PARAMETER :: M90N9TDxss = 11502 + INTEGER(IntKi), PARAMETER :: M91N1TDxss = 11503 + INTEGER(IntKi), PARAMETER :: M91N2TDxss = 11504 + INTEGER(IntKi), PARAMETER :: M91N3TDxss = 11505 + INTEGER(IntKi), PARAMETER :: M91N4TDxss = 11506 + INTEGER(IntKi), PARAMETER :: M91N5TDxss = 11507 + INTEGER(IntKi), PARAMETER :: M91N6TDxss = 11508 + INTEGER(IntKi), PARAMETER :: M91N7TDxss = 11509 + INTEGER(IntKi), PARAMETER :: M91N8TDxss = 11510 + INTEGER(IntKi), PARAMETER :: M91N9TDxss = 11511 + INTEGER(IntKi), PARAMETER :: M92N1TDxss = 11512 + INTEGER(IntKi), PARAMETER :: M92N2TDxss = 11513 + INTEGER(IntKi), PARAMETER :: M92N3TDxss = 11514 + INTEGER(IntKi), PARAMETER :: M92N4TDxss = 11515 + INTEGER(IntKi), PARAMETER :: M92N5TDxss = 11516 + INTEGER(IntKi), PARAMETER :: M92N6TDxss = 11517 + INTEGER(IntKi), PARAMETER :: M92N7TDxss = 11518 + INTEGER(IntKi), PARAMETER :: M92N8TDxss = 11519 + INTEGER(IntKi), PARAMETER :: M92N9TDxss = 11520 + INTEGER(IntKi), PARAMETER :: M93N1TDxss = 11521 + INTEGER(IntKi), PARAMETER :: M93N2TDxss = 11522 + INTEGER(IntKi), PARAMETER :: M93N3TDxss = 11523 + INTEGER(IntKi), PARAMETER :: M93N4TDxss = 11524 + INTEGER(IntKi), PARAMETER :: M93N5TDxss = 11525 + INTEGER(IntKi), PARAMETER :: M93N6TDxss = 11526 + INTEGER(IntKi), PARAMETER :: M93N7TDxss = 11527 + INTEGER(IntKi), PARAMETER :: M93N8TDxss = 11528 + INTEGER(IntKi), PARAMETER :: M93N9TDxss = 11529 + INTEGER(IntKi), PARAMETER :: M94N1TDxss = 11530 + INTEGER(IntKi), PARAMETER :: M94N2TDxss = 11531 + INTEGER(IntKi), PARAMETER :: M94N3TDxss = 11532 + INTEGER(IntKi), PARAMETER :: M94N4TDxss = 11533 + INTEGER(IntKi), PARAMETER :: M94N5TDxss = 11534 + INTEGER(IntKi), PARAMETER :: M94N6TDxss = 11535 + INTEGER(IntKi), PARAMETER :: M94N7TDxss = 11536 + INTEGER(IntKi), PARAMETER :: M94N8TDxss = 11537 + INTEGER(IntKi), PARAMETER :: M94N9TDxss = 11538 + INTEGER(IntKi), PARAMETER :: M95N1TDxss = 11539 + INTEGER(IntKi), PARAMETER :: M95N2TDxss = 11540 + INTEGER(IntKi), PARAMETER :: M95N3TDxss = 11541 + INTEGER(IntKi), PARAMETER :: M95N4TDxss = 11542 + INTEGER(IntKi), PARAMETER :: M95N5TDxss = 11543 + INTEGER(IntKi), PARAMETER :: M95N6TDxss = 11544 + INTEGER(IntKi), PARAMETER :: M95N7TDxss = 11545 + INTEGER(IntKi), PARAMETER :: M95N8TDxss = 11546 + INTEGER(IntKi), PARAMETER :: M95N9TDxss = 11547 + INTEGER(IntKi), PARAMETER :: M96N1TDxss = 11548 + INTEGER(IntKi), PARAMETER :: M96N2TDxss = 11549 + INTEGER(IntKi), PARAMETER :: M96N3TDxss = 11550 + INTEGER(IntKi), PARAMETER :: M96N4TDxss = 11551 + INTEGER(IntKi), PARAMETER :: M96N5TDxss = 11552 + INTEGER(IntKi), PARAMETER :: M96N6TDxss = 11553 + INTEGER(IntKi), PARAMETER :: M96N7TDxss = 11554 + INTEGER(IntKi), PARAMETER :: M96N8TDxss = 11555 + INTEGER(IntKi), PARAMETER :: M96N9TDxss = 11556 + INTEGER(IntKi), PARAMETER :: M97N1TDxss = 11557 + INTEGER(IntKi), PARAMETER :: M97N2TDxss = 11558 + INTEGER(IntKi), PARAMETER :: M97N3TDxss = 11559 + INTEGER(IntKi), PARAMETER :: M97N4TDxss = 11560 + INTEGER(IntKi), PARAMETER :: M97N5TDxss = 11561 + INTEGER(IntKi), PARAMETER :: M97N6TDxss = 11562 + INTEGER(IntKi), PARAMETER :: M97N7TDxss = 11563 + INTEGER(IntKi), PARAMETER :: M97N8TDxss = 11564 + INTEGER(IntKi), PARAMETER :: M97N9TDxss = 11565 + INTEGER(IntKi), PARAMETER :: M98N1TDxss = 11566 + INTEGER(IntKi), PARAMETER :: M98N2TDxss = 11567 + INTEGER(IntKi), PARAMETER :: M98N3TDxss = 11568 + INTEGER(IntKi), PARAMETER :: M98N4TDxss = 11569 + INTEGER(IntKi), PARAMETER :: M98N5TDxss = 11570 + INTEGER(IntKi), PARAMETER :: M98N6TDxss = 11571 + INTEGER(IntKi), PARAMETER :: M98N7TDxss = 11572 + INTEGER(IntKi), PARAMETER :: M98N8TDxss = 11573 + INTEGER(IntKi), PARAMETER :: M98N9TDxss = 11574 + INTEGER(IntKi), PARAMETER :: M99N1TDxss = 11575 + INTEGER(IntKi), PARAMETER :: M99N2TDxss = 11576 + INTEGER(IntKi), PARAMETER :: M99N3TDxss = 11577 + INTEGER(IntKi), PARAMETER :: M99N4TDxss = 11578 + INTEGER(IntKi), PARAMETER :: M99N5TDxss = 11579 + INTEGER(IntKi), PARAMETER :: M99N6TDxss = 11580 + INTEGER(IntKi), PARAMETER :: M99N7TDxss = 11581 + INTEGER(IntKi), PARAMETER :: M99N8TDxss = 11582 + INTEGER(IntKi), PARAMETER :: M99N9TDxss = 11583 + INTEGER(IntKi), PARAMETER :: M01N1TDyss = 11584 + INTEGER(IntKi), PARAMETER :: M01N2TDyss = 11585 + INTEGER(IntKi), PARAMETER :: M01N3TDyss = 11586 + INTEGER(IntKi), PARAMETER :: M01N4TDyss = 11587 + INTEGER(IntKi), PARAMETER :: M01N5TDyss = 11588 + INTEGER(IntKi), PARAMETER :: M01N6TDyss = 11589 + INTEGER(IntKi), PARAMETER :: M01N7TDyss = 11590 + INTEGER(IntKi), PARAMETER :: M01N8TDyss = 11591 + INTEGER(IntKi), PARAMETER :: M01N9TDyss = 11592 + INTEGER(IntKi), PARAMETER :: M02N1TDyss = 11593 + INTEGER(IntKi), PARAMETER :: M02N2TDyss = 11594 + INTEGER(IntKi), PARAMETER :: M02N3TDyss = 11595 + INTEGER(IntKi), PARAMETER :: M02N4TDyss = 11596 + INTEGER(IntKi), PARAMETER :: M02N5TDyss = 11597 + INTEGER(IntKi), PARAMETER :: M02N6TDyss = 11598 + INTEGER(IntKi), PARAMETER :: M02N7TDyss = 11599 + INTEGER(IntKi), PARAMETER :: M02N8TDyss = 11600 + INTEGER(IntKi), PARAMETER :: M02N9TDyss = 11601 + INTEGER(IntKi), PARAMETER :: M03N1TDyss = 11602 + INTEGER(IntKi), PARAMETER :: M03N2TDyss = 11603 + INTEGER(IntKi), PARAMETER :: M03N3TDyss = 11604 + INTEGER(IntKi), PARAMETER :: M03N4TDyss = 11605 + INTEGER(IntKi), PARAMETER :: M03N5TDyss = 11606 + INTEGER(IntKi), PARAMETER :: M03N6TDyss = 11607 + INTEGER(IntKi), PARAMETER :: M03N7TDyss = 11608 + INTEGER(IntKi), PARAMETER :: M03N8TDyss = 11609 + INTEGER(IntKi), PARAMETER :: M03N9TDyss = 11610 + INTEGER(IntKi), PARAMETER :: M04N1TDyss = 11611 + INTEGER(IntKi), PARAMETER :: M04N2TDyss = 11612 + INTEGER(IntKi), PARAMETER :: M04N3TDyss = 11613 + INTEGER(IntKi), PARAMETER :: M04N4TDyss = 11614 + INTEGER(IntKi), PARAMETER :: M04N5TDyss = 11615 + INTEGER(IntKi), PARAMETER :: M04N6TDyss = 11616 + INTEGER(IntKi), PARAMETER :: M04N7TDyss = 11617 + INTEGER(IntKi), PARAMETER :: M04N8TDyss = 11618 + INTEGER(IntKi), PARAMETER :: M04N9TDyss = 11619 + INTEGER(IntKi), PARAMETER :: M05N1TDyss = 11620 + INTEGER(IntKi), PARAMETER :: M05N2TDyss = 11621 + INTEGER(IntKi), PARAMETER :: M05N3TDyss = 11622 + INTEGER(IntKi), PARAMETER :: M05N4TDyss = 11623 + INTEGER(IntKi), PARAMETER :: M05N5TDyss = 11624 + INTEGER(IntKi), PARAMETER :: M05N6TDyss = 11625 + INTEGER(IntKi), PARAMETER :: M05N7TDyss = 11626 + INTEGER(IntKi), PARAMETER :: M05N8TDyss = 11627 + INTEGER(IntKi), PARAMETER :: M05N9TDyss = 11628 + INTEGER(IntKi), PARAMETER :: M06N1TDyss = 11629 + INTEGER(IntKi), PARAMETER :: M06N2TDyss = 11630 + INTEGER(IntKi), PARAMETER :: M06N3TDyss = 11631 + INTEGER(IntKi), PARAMETER :: M06N4TDyss = 11632 + INTEGER(IntKi), PARAMETER :: M06N5TDyss = 11633 + INTEGER(IntKi), PARAMETER :: M06N6TDyss = 11634 + INTEGER(IntKi), PARAMETER :: M06N7TDyss = 11635 + INTEGER(IntKi), PARAMETER :: M06N8TDyss = 11636 + INTEGER(IntKi), PARAMETER :: M06N9TDyss = 11637 + INTEGER(IntKi), PARAMETER :: M07N1TDyss = 11638 + INTEGER(IntKi), PARAMETER :: M07N2TDyss = 11639 + INTEGER(IntKi), PARAMETER :: M07N3TDyss = 11640 + INTEGER(IntKi), PARAMETER :: M07N4TDyss = 11641 + INTEGER(IntKi), PARAMETER :: M07N5TDyss = 11642 + INTEGER(IntKi), PARAMETER :: M07N6TDyss = 11643 + INTEGER(IntKi), PARAMETER :: M07N7TDyss = 11644 + INTEGER(IntKi), PARAMETER :: M07N8TDyss = 11645 + INTEGER(IntKi), PARAMETER :: M07N9TDyss = 11646 + INTEGER(IntKi), PARAMETER :: M08N1TDyss = 11647 + INTEGER(IntKi), PARAMETER :: M08N2TDyss = 11648 + INTEGER(IntKi), PARAMETER :: M08N3TDyss = 11649 + INTEGER(IntKi), PARAMETER :: M08N4TDyss = 11650 + INTEGER(IntKi), PARAMETER :: M08N5TDyss = 11651 + INTEGER(IntKi), PARAMETER :: M08N6TDyss = 11652 + INTEGER(IntKi), PARAMETER :: M08N7TDyss = 11653 + INTEGER(IntKi), PARAMETER :: M08N8TDyss = 11654 + INTEGER(IntKi), PARAMETER :: M08N9TDyss = 11655 + INTEGER(IntKi), PARAMETER :: M09N1TDyss = 11656 + INTEGER(IntKi), PARAMETER :: M09N2TDyss = 11657 + INTEGER(IntKi), PARAMETER :: M09N3TDyss = 11658 + INTEGER(IntKi), PARAMETER :: M09N4TDyss = 11659 + INTEGER(IntKi), PARAMETER :: M09N5TDyss = 11660 + INTEGER(IntKi), PARAMETER :: M09N6TDyss = 11661 + INTEGER(IntKi), PARAMETER :: M09N7TDyss = 11662 + INTEGER(IntKi), PARAMETER :: M09N8TDyss = 11663 + INTEGER(IntKi), PARAMETER :: M09N9TDyss = 11664 + INTEGER(IntKi), PARAMETER :: M10N1TDyss = 11665 + INTEGER(IntKi), PARAMETER :: M10N2TDyss = 11666 + INTEGER(IntKi), PARAMETER :: M10N3TDyss = 11667 + INTEGER(IntKi), PARAMETER :: M10N4TDyss = 11668 + INTEGER(IntKi), PARAMETER :: M10N5TDyss = 11669 + INTEGER(IntKi), PARAMETER :: M10N6TDyss = 11670 + INTEGER(IntKi), PARAMETER :: M10N7TDyss = 11671 + INTEGER(IntKi), PARAMETER :: M10N8TDyss = 11672 + INTEGER(IntKi), PARAMETER :: M10N9TDyss = 11673 + INTEGER(IntKi), PARAMETER :: M11N1TDyss = 11674 + INTEGER(IntKi), PARAMETER :: M11N2TDyss = 11675 + INTEGER(IntKi), PARAMETER :: M11N3TDyss = 11676 + INTEGER(IntKi), PARAMETER :: M11N4TDyss = 11677 + INTEGER(IntKi), PARAMETER :: M11N5TDyss = 11678 + INTEGER(IntKi), PARAMETER :: M11N6TDyss = 11679 + INTEGER(IntKi), PARAMETER :: M11N7TDyss = 11680 + INTEGER(IntKi), PARAMETER :: M11N8TDyss = 11681 + INTEGER(IntKi), PARAMETER :: M11N9TDyss = 11682 + INTEGER(IntKi), PARAMETER :: M12N1TDyss = 11683 + INTEGER(IntKi), PARAMETER :: M12N2TDyss = 11684 + INTEGER(IntKi), PARAMETER :: M12N3TDyss = 11685 + INTEGER(IntKi), PARAMETER :: M12N4TDyss = 11686 + INTEGER(IntKi), PARAMETER :: M12N5TDyss = 11687 + INTEGER(IntKi), PARAMETER :: M12N6TDyss = 11688 + INTEGER(IntKi), PARAMETER :: M12N7TDyss = 11689 + INTEGER(IntKi), PARAMETER :: M12N8TDyss = 11690 + INTEGER(IntKi), PARAMETER :: M12N9TDyss = 11691 + INTEGER(IntKi), PARAMETER :: M13N1TDyss = 11692 + INTEGER(IntKi), PARAMETER :: M13N2TDyss = 11693 + INTEGER(IntKi), PARAMETER :: M13N3TDyss = 11694 + INTEGER(IntKi), PARAMETER :: M13N4TDyss = 11695 + INTEGER(IntKi), PARAMETER :: M13N5TDyss = 11696 + INTEGER(IntKi), PARAMETER :: M13N6TDyss = 11697 + INTEGER(IntKi), PARAMETER :: M13N7TDyss = 11698 + INTEGER(IntKi), PARAMETER :: M13N8TDyss = 11699 + INTEGER(IntKi), PARAMETER :: M13N9TDyss = 11700 + INTEGER(IntKi), PARAMETER :: M14N1TDyss = 11701 + INTEGER(IntKi), PARAMETER :: M14N2TDyss = 11702 + INTEGER(IntKi), PARAMETER :: M14N3TDyss = 11703 + INTEGER(IntKi), PARAMETER :: M14N4TDyss = 11704 + INTEGER(IntKi), PARAMETER :: M14N5TDyss = 11705 + INTEGER(IntKi), PARAMETER :: M14N6TDyss = 11706 + INTEGER(IntKi), PARAMETER :: M14N7TDyss = 11707 + INTEGER(IntKi), PARAMETER :: M14N8TDyss = 11708 + INTEGER(IntKi), PARAMETER :: M14N9TDyss = 11709 + INTEGER(IntKi), PARAMETER :: M15N1TDyss = 11710 + INTEGER(IntKi), PARAMETER :: M15N2TDyss = 11711 + INTEGER(IntKi), PARAMETER :: M15N3TDyss = 11712 + INTEGER(IntKi), PARAMETER :: M15N4TDyss = 11713 + INTEGER(IntKi), PARAMETER :: M15N5TDyss = 11714 + INTEGER(IntKi), PARAMETER :: M15N6TDyss = 11715 + INTEGER(IntKi), PARAMETER :: M15N7TDyss = 11716 + INTEGER(IntKi), PARAMETER :: M15N8TDyss = 11717 + INTEGER(IntKi), PARAMETER :: M15N9TDyss = 11718 + INTEGER(IntKi), PARAMETER :: M16N1TDyss = 11719 + INTEGER(IntKi), PARAMETER :: M16N2TDyss = 11720 + INTEGER(IntKi), PARAMETER :: M16N3TDyss = 11721 + INTEGER(IntKi), PARAMETER :: M16N4TDyss = 11722 + INTEGER(IntKi), PARAMETER :: M16N5TDyss = 11723 + INTEGER(IntKi), PARAMETER :: M16N6TDyss = 11724 + INTEGER(IntKi), PARAMETER :: M16N7TDyss = 11725 + INTEGER(IntKi), PARAMETER :: M16N8TDyss = 11726 + INTEGER(IntKi), PARAMETER :: M16N9TDyss = 11727 + INTEGER(IntKi), PARAMETER :: M17N1TDyss = 11728 + INTEGER(IntKi), PARAMETER :: M17N2TDyss = 11729 + INTEGER(IntKi), PARAMETER :: M17N3TDyss = 11730 + INTEGER(IntKi), PARAMETER :: M17N4TDyss = 11731 + INTEGER(IntKi), PARAMETER :: M17N5TDyss = 11732 + INTEGER(IntKi), PARAMETER :: M17N6TDyss = 11733 + INTEGER(IntKi), PARAMETER :: M17N7TDyss = 11734 + INTEGER(IntKi), PARAMETER :: M17N8TDyss = 11735 + INTEGER(IntKi), PARAMETER :: M17N9TDyss = 11736 + INTEGER(IntKi), PARAMETER :: M18N1TDyss = 11737 + INTEGER(IntKi), PARAMETER :: M18N2TDyss = 11738 + INTEGER(IntKi), PARAMETER :: M18N3TDyss = 11739 + INTEGER(IntKi), PARAMETER :: M18N4TDyss = 11740 + INTEGER(IntKi), PARAMETER :: M18N5TDyss = 11741 + INTEGER(IntKi), PARAMETER :: M18N6TDyss = 11742 + INTEGER(IntKi), PARAMETER :: M18N7TDyss = 11743 + INTEGER(IntKi), PARAMETER :: M18N8TDyss = 11744 + INTEGER(IntKi), PARAMETER :: M18N9TDyss = 11745 + INTEGER(IntKi), PARAMETER :: M19N1TDyss = 11746 + INTEGER(IntKi), PARAMETER :: M19N2TDyss = 11747 + INTEGER(IntKi), PARAMETER :: M19N3TDyss = 11748 + INTEGER(IntKi), PARAMETER :: M19N4TDyss = 11749 + INTEGER(IntKi), PARAMETER :: M19N5TDyss = 11750 + INTEGER(IntKi), PARAMETER :: M19N6TDyss = 11751 + INTEGER(IntKi), PARAMETER :: M19N7TDyss = 11752 + INTEGER(IntKi), PARAMETER :: M19N8TDyss = 11753 + INTEGER(IntKi), PARAMETER :: M19N9TDyss = 11754 + INTEGER(IntKi), PARAMETER :: M20N1TDyss = 11755 + INTEGER(IntKi), PARAMETER :: M20N2TDyss = 11756 + INTEGER(IntKi), PARAMETER :: M20N3TDyss = 11757 + INTEGER(IntKi), PARAMETER :: M20N4TDyss = 11758 + INTEGER(IntKi), PARAMETER :: M20N5TDyss = 11759 + INTEGER(IntKi), PARAMETER :: M20N6TDyss = 11760 + INTEGER(IntKi), PARAMETER :: M20N7TDyss = 11761 + INTEGER(IntKi), PARAMETER :: M20N8TDyss = 11762 + INTEGER(IntKi), PARAMETER :: M20N9TDyss = 11763 + INTEGER(IntKi), PARAMETER :: M21N1TDyss = 11764 + INTEGER(IntKi), PARAMETER :: M21N2TDyss = 11765 + INTEGER(IntKi), PARAMETER :: M21N3TDyss = 11766 + INTEGER(IntKi), PARAMETER :: M21N4TDyss = 11767 + INTEGER(IntKi), PARAMETER :: M21N5TDyss = 11768 + INTEGER(IntKi), PARAMETER :: M21N6TDyss = 11769 + INTEGER(IntKi), PARAMETER :: M21N7TDyss = 11770 + INTEGER(IntKi), PARAMETER :: M21N8TDyss = 11771 + INTEGER(IntKi), PARAMETER :: M21N9TDyss = 11772 + INTEGER(IntKi), PARAMETER :: M22N1TDyss = 11773 + INTEGER(IntKi), PARAMETER :: M22N2TDyss = 11774 + INTEGER(IntKi), PARAMETER :: M22N3TDyss = 11775 + INTEGER(IntKi), PARAMETER :: M22N4TDyss = 11776 + INTEGER(IntKi), PARAMETER :: M22N5TDyss = 11777 + INTEGER(IntKi), PARAMETER :: M22N6TDyss = 11778 + INTEGER(IntKi), PARAMETER :: M22N7TDyss = 11779 + INTEGER(IntKi), PARAMETER :: M22N8TDyss = 11780 + INTEGER(IntKi), PARAMETER :: M22N9TDyss = 11781 + INTEGER(IntKi), PARAMETER :: M23N1TDyss = 11782 + INTEGER(IntKi), PARAMETER :: M23N2TDyss = 11783 + INTEGER(IntKi), PARAMETER :: M23N3TDyss = 11784 + INTEGER(IntKi), PARAMETER :: M23N4TDyss = 11785 + INTEGER(IntKi), PARAMETER :: M23N5TDyss = 11786 + INTEGER(IntKi), PARAMETER :: M23N6TDyss = 11787 + INTEGER(IntKi), PARAMETER :: M23N7TDyss = 11788 + INTEGER(IntKi), PARAMETER :: M23N8TDyss = 11789 + INTEGER(IntKi), PARAMETER :: M23N9TDyss = 11790 + INTEGER(IntKi), PARAMETER :: M24N1TDyss = 11791 + INTEGER(IntKi), PARAMETER :: M24N2TDyss = 11792 + INTEGER(IntKi), PARAMETER :: M24N3TDyss = 11793 + INTEGER(IntKi), PARAMETER :: M24N4TDyss = 11794 + INTEGER(IntKi), PARAMETER :: M24N5TDyss = 11795 + INTEGER(IntKi), PARAMETER :: M24N6TDyss = 11796 + INTEGER(IntKi), PARAMETER :: M24N7TDyss = 11797 + INTEGER(IntKi), PARAMETER :: M24N8TDyss = 11798 + INTEGER(IntKi), PARAMETER :: M24N9TDyss = 11799 + INTEGER(IntKi), PARAMETER :: M25N1TDyss = 11800 + INTEGER(IntKi), PARAMETER :: M25N2TDyss = 11801 + INTEGER(IntKi), PARAMETER :: M25N3TDyss = 11802 + INTEGER(IntKi), PARAMETER :: M25N4TDyss = 11803 + INTEGER(IntKi), PARAMETER :: M25N5TDyss = 11804 + INTEGER(IntKi), PARAMETER :: M25N6TDyss = 11805 + INTEGER(IntKi), PARAMETER :: M25N7TDyss = 11806 + INTEGER(IntKi), PARAMETER :: M25N8TDyss = 11807 + INTEGER(IntKi), PARAMETER :: M25N9TDyss = 11808 + INTEGER(IntKi), PARAMETER :: M26N1TDyss = 11809 + INTEGER(IntKi), PARAMETER :: M26N2TDyss = 11810 + INTEGER(IntKi), PARAMETER :: M26N3TDyss = 11811 + INTEGER(IntKi), PARAMETER :: M26N4TDyss = 11812 + INTEGER(IntKi), PARAMETER :: M26N5TDyss = 11813 + INTEGER(IntKi), PARAMETER :: M26N6TDyss = 11814 + INTEGER(IntKi), PARAMETER :: M26N7TDyss = 11815 + INTEGER(IntKi), PARAMETER :: M26N8TDyss = 11816 + INTEGER(IntKi), PARAMETER :: M26N9TDyss = 11817 + INTEGER(IntKi), PARAMETER :: M27N1TDyss = 11818 + INTEGER(IntKi), PARAMETER :: M27N2TDyss = 11819 + INTEGER(IntKi), PARAMETER :: M27N3TDyss = 11820 + INTEGER(IntKi), PARAMETER :: M27N4TDyss = 11821 + INTEGER(IntKi), PARAMETER :: M27N5TDyss = 11822 + INTEGER(IntKi), PARAMETER :: M27N6TDyss = 11823 + INTEGER(IntKi), PARAMETER :: M27N7TDyss = 11824 + INTEGER(IntKi), PARAMETER :: M27N8TDyss = 11825 + INTEGER(IntKi), PARAMETER :: M27N9TDyss = 11826 + INTEGER(IntKi), PARAMETER :: M28N1TDyss = 11827 + INTEGER(IntKi), PARAMETER :: M28N2TDyss = 11828 + INTEGER(IntKi), PARAMETER :: M28N3TDyss = 11829 + INTEGER(IntKi), PARAMETER :: M28N4TDyss = 11830 + INTEGER(IntKi), PARAMETER :: M28N5TDyss = 11831 + INTEGER(IntKi), PARAMETER :: M28N6TDyss = 11832 + INTEGER(IntKi), PARAMETER :: M28N7TDyss = 11833 + INTEGER(IntKi), PARAMETER :: M28N8TDyss = 11834 + INTEGER(IntKi), PARAMETER :: M28N9TDyss = 11835 + INTEGER(IntKi), PARAMETER :: M29N1TDyss = 11836 + INTEGER(IntKi), PARAMETER :: M29N2TDyss = 11837 + INTEGER(IntKi), PARAMETER :: M29N3TDyss = 11838 + INTEGER(IntKi), PARAMETER :: M29N4TDyss = 11839 + INTEGER(IntKi), PARAMETER :: M29N5TDyss = 11840 + INTEGER(IntKi), PARAMETER :: M29N6TDyss = 11841 + INTEGER(IntKi), PARAMETER :: M29N7TDyss = 11842 + INTEGER(IntKi), PARAMETER :: M29N8TDyss = 11843 + INTEGER(IntKi), PARAMETER :: M29N9TDyss = 11844 + INTEGER(IntKi), PARAMETER :: M30N1TDyss = 11845 + INTEGER(IntKi), PARAMETER :: M30N2TDyss = 11846 + INTEGER(IntKi), PARAMETER :: M30N3TDyss = 11847 + INTEGER(IntKi), PARAMETER :: M30N4TDyss = 11848 + INTEGER(IntKi), PARAMETER :: M30N5TDyss = 11849 + INTEGER(IntKi), PARAMETER :: M30N6TDyss = 11850 + INTEGER(IntKi), PARAMETER :: M30N7TDyss = 11851 + INTEGER(IntKi), PARAMETER :: M30N8TDyss = 11852 + INTEGER(IntKi), PARAMETER :: M30N9TDyss = 11853 + INTEGER(IntKi), PARAMETER :: M31N1TDyss = 11854 + INTEGER(IntKi), PARAMETER :: M31N2TDyss = 11855 + INTEGER(IntKi), PARAMETER :: M31N3TDyss = 11856 + INTEGER(IntKi), PARAMETER :: M31N4TDyss = 11857 + INTEGER(IntKi), PARAMETER :: M31N5TDyss = 11858 + INTEGER(IntKi), PARAMETER :: M31N6TDyss = 11859 + INTEGER(IntKi), PARAMETER :: M31N7TDyss = 11860 + INTEGER(IntKi), PARAMETER :: M31N8TDyss = 11861 + INTEGER(IntKi), PARAMETER :: M31N9TDyss = 11862 + INTEGER(IntKi), PARAMETER :: M32N1TDyss = 11863 + INTEGER(IntKi), PARAMETER :: M32N2TDyss = 11864 + INTEGER(IntKi), PARAMETER :: M32N3TDyss = 11865 + INTEGER(IntKi), PARAMETER :: M32N4TDyss = 11866 + INTEGER(IntKi), PARAMETER :: M32N5TDyss = 11867 + INTEGER(IntKi), PARAMETER :: M32N6TDyss = 11868 + INTEGER(IntKi), PARAMETER :: M32N7TDyss = 11869 + INTEGER(IntKi), PARAMETER :: M32N8TDyss = 11870 + INTEGER(IntKi), PARAMETER :: M32N9TDyss = 11871 + INTEGER(IntKi), PARAMETER :: M33N1TDyss = 11872 + INTEGER(IntKi), PARAMETER :: M33N2TDyss = 11873 + INTEGER(IntKi), PARAMETER :: M33N3TDyss = 11874 + INTEGER(IntKi), PARAMETER :: M33N4TDyss = 11875 + INTEGER(IntKi), PARAMETER :: M33N5TDyss = 11876 + INTEGER(IntKi), PARAMETER :: M33N6TDyss = 11877 + INTEGER(IntKi), PARAMETER :: M33N7TDyss = 11878 + INTEGER(IntKi), PARAMETER :: M33N8TDyss = 11879 + INTEGER(IntKi), PARAMETER :: M33N9TDyss = 11880 + INTEGER(IntKi), PARAMETER :: M34N1TDyss = 11881 + INTEGER(IntKi), PARAMETER :: M34N2TDyss = 11882 + INTEGER(IntKi), PARAMETER :: M34N3TDyss = 11883 + INTEGER(IntKi), PARAMETER :: M34N4TDyss = 11884 + INTEGER(IntKi), PARAMETER :: M34N5TDyss = 11885 + INTEGER(IntKi), PARAMETER :: M34N6TDyss = 11886 + INTEGER(IntKi), PARAMETER :: M34N7TDyss = 11887 + INTEGER(IntKi), PARAMETER :: M34N8TDyss = 11888 + INTEGER(IntKi), PARAMETER :: M34N9TDyss = 11889 + INTEGER(IntKi), PARAMETER :: M35N1TDyss = 11890 + INTEGER(IntKi), PARAMETER :: M35N2TDyss = 11891 + INTEGER(IntKi), PARAMETER :: M35N3TDyss = 11892 + INTEGER(IntKi), PARAMETER :: M35N4TDyss = 11893 + INTEGER(IntKi), PARAMETER :: M35N5TDyss = 11894 + INTEGER(IntKi), PARAMETER :: M35N6TDyss = 11895 + INTEGER(IntKi), PARAMETER :: M35N7TDyss = 11896 + INTEGER(IntKi), PARAMETER :: M35N8TDyss = 11897 + INTEGER(IntKi), PARAMETER :: M35N9TDyss = 11898 + INTEGER(IntKi), PARAMETER :: M36N1TDyss = 11899 + INTEGER(IntKi), PARAMETER :: M36N2TDyss = 11900 + INTEGER(IntKi), PARAMETER :: M36N3TDyss = 11901 + INTEGER(IntKi), PARAMETER :: M36N4TDyss = 11902 + INTEGER(IntKi), PARAMETER :: M36N5TDyss = 11903 + INTEGER(IntKi), PARAMETER :: M36N6TDyss = 11904 + INTEGER(IntKi), PARAMETER :: M36N7TDyss = 11905 + INTEGER(IntKi), PARAMETER :: M36N8TDyss = 11906 + INTEGER(IntKi), PARAMETER :: M36N9TDyss = 11907 + INTEGER(IntKi), PARAMETER :: M37N1TDyss = 11908 + INTEGER(IntKi), PARAMETER :: M37N2TDyss = 11909 + INTEGER(IntKi), PARAMETER :: M37N3TDyss = 11910 + INTEGER(IntKi), PARAMETER :: M37N4TDyss = 11911 + INTEGER(IntKi), PARAMETER :: M37N5TDyss = 11912 + INTEGER(IntKi), PARAMETER :: M37N6TDyss = 11913 + INTEGER(IntKi), PARAMETER :: M37N7TDyss = 11914 + INTEGER(IntKi), PARAMETER :: M37N8TDyss = 11915 + INTEGER(IntKi), PARAMETER :: M37N9TDyss = 11916 + INTEGER(IntKi), PARAMETER :: M38N1TDyss = 11917 + INTEGER(IntKi), PARAMETER :: M38N2TDyss = 11918 + INTEGER(IntKi), PARAMETER :: M38N3TDyss = 11919 + INTEGER(IntKi), PARAMETER :: M38N4TDyss = 11920 + INTEGER(IntKi), PARAMETER :: M38N5TDyss = 11921 + INTEGER(IntKi), PARAMETER :: M38N6TDyss = 11922 + INTEGER(IntKi), PARAMETER :: M38N7TDyss = 11923 + INTEGER(IntKi), PARAMETER :: M38N8TDyss = 11924 + INTEGER(IntKi), PARAMETER :: M38N9TDyss = 11925 + INTEGER(IntKi), PARAMETER :: M39N1TDyss = 11926 + INTEGER(IntKi), PARAMETER :: M39N2TDyss = 11927 + INTEGER(IntKi), PARAMETER :: M39N3TDyss = 11928 + INTEGER(IntKi), PARAMETER :: M39N4TDyss = 11929 + INTEGER(IntKi), PARAMETER :: M39N5TDyss = 11930 + INTEGER(IntKi), PARAMETER :: M39N6TDyss = 11931 + INTEGER(IntKi), PARAMETER :: M39N7TDyss = 11932 + INTEGER(IntKi), PARAMETER :: M39N8TDyss = 11933 + INTEGER(IntKi), PARAMETER :: M39N9TDyss = 11934 + INTEGER(IntKi), PARAMETER :: M40N1TDyss = 11935 + INTEGER(IntKi), PARAMETER :: M40N2TDyss = 11936 + INTEGER(IntKi), PARAMETER :: M40N3TDyss = 11937 + INTEGER(IntKi), PARAMETER :: M40N4TDyss = 11938 + INTEGER(IntKi), PARAMETER :: M40N5TDyss = 11939 + INTEGER(IntKi), PARAMETER :: M40N6TDyss = 11940 + INTEGER(IntKi), PARAMETER :: M40N7TDyss = 11941 + INTEGER(IntKi), PARAMETER :: M40N8TDyss = 11942 + INTEGER(IntKi), PARAMETER :: M40N9TDyss = 11943 + INTEGER(IntKi), PARAMETER :: M41N1TDyss = 11944 + INTEGER(IntKi), PARAMETER :: M41N2TDyss = 11945 + INTEGER(IntKi), PARAMETER :: M41N3TDyss = 11946 + INTEGER(IntKi), PARAMETER :: M41N4TDyss = 11947 + INTEGER(IntKi), PARAMETER :: M41N5TDyss = 11948 + INTEGER(IntKi), PARAMETER :: M41N6TDyss = 11949 + INTEGER(IntKi), PARAMETER :: M41N7TDyss = 11950 + INTEGER(IntKi), PARAMETER :: M41N8TDyss = 11951 + INTEGER(IntKi), PARAMETER :: M41N9TDyss = 11952 + INTEGER(IntKi), PARAMETER :: M42N1TDyss = 11953 + INTEGER(IntKi), PARAMETER :: M42N2TDyss = 11954 + INTEGER(IntKi), PARAMETER :: M42N3TDyss = 11955 + INTEGER(IntKi), PARAMETER :: M42N4TDyss = 11956 + INTEGER(IntKi), PARAMETER :: M42N5TDyss = 11957 + INTEGER(IntKi), PARAMETER :: M42N6TDyss = 11958 + INTEGER(IntKi), PARAMETER :: M42N7TDyss = 11959 + INTEGER(IntKi), PARAMETER :: M42N8TDyss = 11960 + INTEGER(IntKi), PARAMETER :: M42N9TDyss = 11961 + INTEGER(IntKi), PARAMETER :: M43N1TDyss = 11962 + INTEGER(IntKi), PARAMETER :: M43N2TDyss = 11963 + INTEGER(IntKi), PARAMETER :: M43N3TDyss = 11964 + INTEGER(IntKi), PARAMETER :: M43N4TDyss = 11965 + INTEGER(IntKi), PARAMETER :: M43N5TDyss = 11966 + INTEGER(IntKi), PARAMETER :: M43N6TDyss = 11967 + INTEGER(IntKi), PARAMETER :: M43N7TDyss = 11968 + INTEGER(IntKi), PARAMETER :: M43N8TDyss = 11969 + INTEGER(IntKi), PARAMETER :: M43N9TDyss = 11970 + INTEGER(IntKi), PARAMETER :: M44N1TDyss = 11971 + INTEGER(IntKi), PARAMETER :: M44N2TDyss = 11972 + INTEGER(IntKi), PARAMETER :: M44N3TDyss = 11973 + INTEGER(IntKi), PARAMETER :: M44N4TDyss = 11974 + INTEGER(IntKi), PARAMETER :: M44N5TDyss = 11975 + INTEGER(IntKi), PARAMETER :: M44N6TDyss = 11976 + INTEGER(IntKi), PARAMETER :: M44N7TDyss = 11977 + INTEGER(IntKi), PARAMETER :: M44N8TDyss = 11978 + INTEGER(IntKi), PARAMETER :: M44N9TDyss = 11979 + INTEGER(IntKi), PARAMETER :: M45N1TDyss = 11980 + INTEGER(IntKi), PARAMETER :: M45N2TDyss = 11981 + INTEGER(IntKi), PARAMETER :: M45N3TDyss = 11982 + INTEGER(IntKi), PARAMETER :: M45N4TDyss = 11983 + INTEGER(IntKi), PARAMETER :: M45N5TDyss = 11984 + INTEGER(IntKi), PARAMETER :: M45N6TDyss = 11985 + INTEGER(IntKi), PARAMETER :: M45N7TDyss = 11986 + INTEGER(IntKi), PARAMETER :: M45N8TDyss = 11987 + INTEGER(IntKi), PARAMETER :: M45N9TDyss = 11988 + INTEGER(IntKi), PARAMETER :: M46N1TDyss = 11989 + INTEGER(IntKi), PARAMETER :: M46N2TDyss = 11990 + INTEGER(IntKi), PARAMETER :: M46N3TDyss = 11991 + INTEGER(IntKi), PARAMETER :: M46N4TDyss = 11992 + INTEGER(IntKi), PARAMETER :: M46N5TDyss = 11993 + INTEGER(IntKi), PARAMETER :: M46N6TDyss = 11994 + INTEGER(IntKi), PARAMETER :: M46N7TDyss = 11995 + INTEGER(IntKi), PARAMETER :: M46N8TDyss = 11996 + INTEGER(IntKi), PARAMETER :: M46N9TDyss = 11997 + INTEGER(IntKi), PARAMETER :: M47N1TDyss = 11998 + INTEGER(IntKi), PARAMETER :: M47N2TDyss = 11999 + INTEGER(IntKi), PARAMETER :: M47N3TDyss = 12000 + INTEGER(IntKi), PARAMETER :: M47N4TDyss = 12001 + INTEGER(IntKi), PARAMETER :: M47N5TDyss = 12002 + INTEGER(IntKi), PARAMETER :: M47N6TDyss = 12003 + INTEGER(IntKi), PARAMETER :: M47N7TDyss = 12004 + INTEGER(IntKi), PARAMETER :: M47N8TDyss = 12005 + INTEGER(IntKi), PARAMETER :: M47N9TDyss = 12006 + INTEGER(IntKi), PARAMETER :: M48N1TDyss = 12007 + INTEGER(IntKi), PARAMETER :: M48N2TDyss = 12008 + INTEGER(IntKi), PARAMETER :: M48N3TDyss = 12009 + INTEGER(IntKi), PARAMETER :: M48N4TDyss = 12010 + INTEGER(IntKi), PARAMETER :: M48N5TDyss = 12011 + INTEGER(IntKi), PARAMETER :: M48N6TDyss = 12012 + INTEGER(IntKi), PARAMETER :: M48N7TDyss = 12013 + INTEGER(IntKi), PARAMETER :: M48N8TDyss = 12014 + INTEGER(IntKi), PARAMETER :: M48N9TDyss = 12015 + INTEGER(IntKi), PARAMETER :: M49N1TDyss = 12016 + INTEGER(IntKi), PARAMETER :: M49N2TDyss = 12017 + INTEGER(IntKi), PARAMETER :: M49N3TDyss = 12018 + INTEGER(IntKi), PARAMETER :: M49N4TDyss = 12019 + INTEGER(IntKi), PARAMETER :: M49N5TDyss = 12020 + INTEGER(IntKi), PARAMETER :: M49N6TDyss = 12021 + INTEGER(IntKi), PARAMETER :: M49N7TDyss = 12022 + INTEGER(IntKi), PARAMETER :: M49N8TDyss = 12023 + INTEGER(IntKi), PARAMETER :: M49N9TDyss = 12024 + INTEGER(IntKi), PARAMETER :: M50N1TDyss = 12025 + INTEGER(IntKi), PARAMETER :: M50N2TDyss = 12026 + INTEGER(IntKi), PARAMETER :: M50N3TDyss = 12027 + INTEGER(IntKi), PARAMETER :: M50N4TDyss = 12028 + INTEGER(IntKi), PARAMETER :: M50N5TDyss = 12029 + INTEGER(IntKi), PARAMETER :: M50N6TDyss = 12030 + INTEGER(IntKi), PARAMETER :: M50N7TDyss = 12031 + INTEGER(IntKi), PARAMETER :: M50N8TDyss = 12032 + INTEGER(IntKi), PARAMETER :: M50N9TDyss = 12033 + INTEGER(IntKi), PARAMETER :: M51N1TDyss = 12034 + INTEGER(IntKi), PARAMETER :: M51N2TDyss = 12035 + INTEGER(IntKi), PARAMETER :: M51N3TDyss = 12036 + INTEGER(IntKi), PARAMETER :: M51N4TDyss = 12037 + INTEGER(IntKi), PARAMETER :: M51N5TDyss = 12038 + INTEGER(IntKi), PARAMETER :: M51N6TDyss = 12039 + INTEGER(IntKi), PARAMETER :: M51N7TDyss = 12040 + INTEGER(IntKi), PARAMETER :: M51N8TDyss = 12041 + INTEGER(IntKi), PARAMETER :: M51N9TDyss = 12042 + INTEGER(IntKi), PARAMETER :: M52N1TDyss = 12043 + INTEGER(IntKi), PARAMETER :: M52N2TDyss = 12044 + INTEGER(IntKi), PARAMETER :: M52N3TDyss = 12045 + INTEGER(IntKi), PARAMETER :: M52N4TDyss = 12046 + INTEGER(IntKi), PARAMETER :: M52N5TDyss = 12047 + INTEGER(IntKi), PARAMETER :: M52N6TDyss = 12048 + INTEGER(IntKi), PARAMETER :: M52N7TDyss = 12049 + INTEGER(IntKi), PARAMETER :: M52N8TDyss = 12050 + INTEGER(IntKi), PARAMETER :: M52N9TDyss = 12051 + INTEGER(IntKi), PARAMETER :: M53N1TDyss = 12052 + INTEGER(IntKi), PARAMETER :: M53N2TDyss = 12053 + INTEGER(IntKi), PARAMETER :: M53N3TDyss = 12054 + INTEGER(IntKi), PARAMETER :: M53N4TDyss = 12055 + INTEGER(IntKi), PARAMETER :: M53N5TDyss = 12056 + INTEGER(IntKi), PARAMETER :: M53N6TDyss = 12057 + INTEGER(IntKi), PARAMETER :: M53N7TDyss = 12058 + INTEGER(IntKi), PARAMETER :: M53N8TDyss = 12059 + INTEGER(IntKi), PARAMETER :: M53N9TDyss = 12060 + INTEGER(IntKi), PARAMETER :: M54N1TDyss = 12061 + INTEGER(IntKi), PARAMETER :: M54N2TDyss = 12062 + INTEGER(IntKi), PARAMETER :: M54N3TDyss = 12063 + INTEGER(IntKi), PARAMETER :: M54N4TDyss = 12064 + INTEGER(IntKi), PARAMETER :: M54N5TDyss = 12065 + INTEGER(IntKi), PARAMETER :: M54N6TDyss = 12066 + INTEGER(IntKi), PARAMETER :: M54N7TDyss = 12067 + INTEGER(IntKi), PARAMETER :: M54N8TDyss = 12068 + INTEGER(IntKi), PARAMETER :: M54N9TDyss = 12069 + INTEGER(IntKi), PARAMETER :: M55N1TDyss = 12070 + INTEGER(IntKi), PARAMETER :: M55N2TDyss = 12071 + INTEGER(IntKi), PARAMETER :: M55N3TDyss = 12072 + INTEGER(IntKi), PARAMETER :: M55N4TDyss = 12073 + INTEGER(IntKi), PARAMETER :: M55N5TDyss = 12074 + INTEGER(IntKi), PARAMETER :: M55N6TDyss = 12075 + INTEGER(IntKi), PARAMETER :: M55N7TDyss = 12076 + INTEGER(IntKi), PARAMETER :: M55N8TDyss = 12077 + INTEGER(IntKi), PARAMETER :: M55N9TDyss = 12078 + INTEGER(IntKi), PARAMETER :: M56N1TDyss = 12079 + INTEGER(IntKi), PARAMETER :: M56N2TDyss = 12080 + INTEGER(IntKi), PARAMETER :: M56N3TDyss = 12081 + INTEGER(IntKi), PARAMETER :: M56N4TDyss = 12082 + INTEGER(IntKi), PARAMETER :: M56N5TDyss = 12083 + INTEGER(IntKi), PARAMETER :: M56N6TDyss = 12084 + INTEGER(IntKi), PARAMETER :: M56N7TDyss = 12085 + INTEGER(IntKi), PARAMETER :: M56N8TDyss = 12086 + INTEGER(IntKi), PARAMETER :: M56N9TDyss = 12087 + INTEGER(IntKi), PARAMETER :: M57N1TDyss = 12088 + INTEGER(IntKi), PARAMETER :: M57N2TDyss = 12089 + INTEGER(IntKi), PARAMETER :: M57N3TDyss = 12090 + INTEGER(IntKi), PARAMETER :: M57N4TDyss = 12091 + INTEGER(IntKi), PARAMETER :: M57N5TDyss = 12092 + INTEGER(IntKi), PARAMETER :: M57N6TDyss = 12093 + INTEGER(IntKi), PARAMETER :: M57N7TDyss = 12094 + INTEGER(IntKi), PARAMETER :: M57N8TDyss = 12095 + INTEGER(IntKi), PARAMETER :: M57N9TDyss = 12096 + INTEGER(IntKi), PARAMETER :: M58N1TDyss = 12097 + INTEGER(IntKi), PARAMETER :: M58N2TDyss = 12098 + INTEGER(IntKi), PARAMETER :: M58N3TDyss = 12099 + INTEGER(IntKi), PARAMETER :: M58N4TDyss = 12100 + INTEGER(IntKi), PARAMETER :: M58N5TDyss = 12101 + INTEGER(IntKi), PARAMETER :: M58N6TDyss = 12102 + INTEGER(IntKi), PARAMETER :: M58N7TDyss = 12103 + INTEGER(IntKi), PARAMETER :: M58N8TDyss = 12104 + INTEGER(IntKi), PARAMETER :: M58N9TDyss = 12105 + INTEGER(IntKi), PARAMETER :: M59N1TDyss = 12106 + INTEGER(IntKi), PARAMETER :: M59N2TDyss = 12107 + INTEGER(IntKi), PARAMETER :: M59N3TDyss = 12108 + INTEGER(IntKi), PARAMETER :: M59N4TDyss = 12109 + INTEGER(IntKi), PARAMETER :: M59N5TDyss = 12110 + INTEGER(IntKi), PARAMETER :: M59N6TDyss = 12111 + INTEGER(IntKi), PARAMETER :: M59N7TDyss = 12112 + INTEGER(IntKi), PARAMETER :: M59N8TDyss = 12113 + INTEGER(IntKi), PARAMETER :: M59N9TDyss = 12114 + INTEGER(IntKi), PARAMETER :: M60N1TDyss = 12115 + INTEGER(IntKi), PARAMETER :: M60N2TDyss = 12116 + INTEGER(IntKi), PARAMETER :: M60N3TDyss = 12117 + INTEGER(IntKi), PARAMETER :: M60N4TDyss = 12118 + INTEGER(IntKi), PARAMETER :: M60N5TDyss = 12119 + INTEGER(IntKi), PARAMETER :: M60N6TDyss = 12120 + INTEGER(IntKi), PARAMETER :: M60N7TDyss = 12121 + INTEGER(IntKi), PARAMETER :: M60N8TDyss = 12122 + INTEGER(IntKi), PARAMETER :: M60N9TDyss = 12123 + INTEGER(IntKi), PARAMETER :: M61N1TDyss = 12124 + INTEGER(IntKi), PARAMETER :: M61N2TDyss = 12125 + INTEGER(IntKi), PARAMETER :: M61N3TDyss = 12126 + INTEGER(IntKi), PARAMETER :: M61N4TDyss = 12127 + INTEGER(IntKi), PARAMETER :: M61N5TDyss = 12128 + INTEGER(IntKi), PARAMETER :: M61N6TDyss = 12129 + INTEGER(IntKi), PARAMETER :: M61N7TDyss = 12130 + INTEGER(IntKi), PARAMETER :: M61N8TDyss = 12131 + INTEGER(IntKi), PARAMETER :: M61N9TDyss = 12132 + INTEGER(IntKi), PARAMETER :: M62N1TDyss = 12133 + INTEGER(IntKi), PARAMETER :: M62N2TDyss = 12134 + INTEGER(IntKi), PARAMETER :: M62N3TDyss = 12135 + INTEGER(IntKi), PARAMETER :: M62N4TDyss = 12136 + INTEGER(IntKi), PARAMETER :: M62N5TDyss = 12137 + INTEGER(IntKi), PARAMETER :: M62N6TDyss = 12138 + INTEGER(IntKi), PARAMETER :: M62N7TDyss = 12139 + INTEGER(IntKi), PARAMETER :: M62N8TDyss = 12140 + INTEGER(IntKi), PARAMETER :: M62N9TDyss = 12141 + INTEGER(IntKi), PARAMETER :: M63N1TDyss = 12142 + INTEGER(IntKi), PARAMETER :: M63N2TDyss = 12143 + INTEGER(IntKi), PARAMETER :: M63N3TDyss = 12144 + INTEGER(IntKi), PARAMETER :: M63N4TDyss = 12145 + INTEGER(IntKi), PARAMETER :: M63N5TDyss = 12146 + INTEGER(IntKi), PARAMETER :: M63N6TDyss = 12147 + INTEGER(IntKi), PARAMETER :: M63N7TDyss = 12148 + INTEGER(IntKi), PARAMETER :: M63N8TDyss = 12149 + INTEGER(IntKi), PARAMETER :: M63N9TDyss = 12150 + INTEGER(IntKi), PARAMETER :: M64N1TDyss = 12151 + INTEGER(IntKi), PARAMETER :: M64N2TDyss = 12152 + INTEGER(IntKi), PARAMETER :: M64N3TDyss = 12153 + INTEGER(IntKi), PARAMETER :: M64N4TDyss = 12154 + INTEGER(IntKi), PARAMETER :: M64N5TDyss = 12155 + INTEGER(IntKi), PARAMETER :: M64N6TDyss = 12156 + INTEGER(IntKi), PARAMETER :: M64N7TDyss = 12157 + INTEGER(IntKi), PARAMETER :: M64N8TDyss = 12158 + INTEGER(IntKi), PARAMETER :: M64N9TDyss = 12159 + INTEGER(IntKi), PARAMETER :: M65N1TDyss = 12160 + INTEGER(IntKi), PARAMETER :: M65N2TDyss = 12161 + INTEGER(IntKi), PARAMETER :: M65N3TDyss = 12162 + INTEGER(IntKi), PARAMETER :: M65N4TDyss = 12163 + INTEGER(IntKi), PARAMETER :: M65N5TDyss = 12164 + INTEGER(IntKi), PARAMETER :: M65N6TDyss = 12165 + INTEGER(IntKi), PARAMETER :: M65N7TDyss = 12166 + INTEGER(IntKi), PARAMETER :: M65N8TDyss = 12167 + INTEGER(IntKi), PARAMETER :: M65N9TDyss = 12168 + INTEGER(IntKi), PARAMETER :: M66N1TDyss = 12169 + INTEGER(IntKi), PARAMETER :: M66N2TDyss = 12170 + INTEGER(IntKi), PARAMETER :: M66N3TDyss = 12171 + INTEGER(IntKi), PARAMETER :: M66N4TDyss = 12172 + INTEGER(IntKi), PARAMETER :: M66N5TDyss = 12173 + INTEGER(IntKi), PARAMETER :: M66N6TDyss = 12174 + INTEGER(IntKi), PARAMETER :: M66N7TDyss = 12175 + INTEGER(IntKi), PARAMETER :: M66N8TDyss = 12176 + INTEGER(IntKi), PARAMETER :: M66N9TDyss = 12177 + INTEGER(IntKi), PARAMETER :: M67N1TDyss = 12178 + INTEGER(IntKi), PARAMETER :: M67N2TDyss = 12179 + INTEGER(IntKi), PARAMETER :: M67N3TDyss = 12180 + INTEGER(IntKi), PARAMETER :: M67N4TDyss = 12181 + INTEGER(IntKi), PARAMETER :: M67N5TDyss = 12182 + INTEGER(IntKi), PARAMETER :: M67N6TDyss = 12183 + INTEGER(IntKi), PARAMETER :: M67N7TDyss = 12184 + INTEGER(IntKi), PARAMETER :: M67N8TDyss = 12185 + INTEGER(IntKi), PARAMETER :: M67N9TDyss = 12186 + INTEGER(IntKi), PARAMETER :: M68N1TDyss = 12187 + INTEGER(IntKi), PARAMETER :: M68N2TDyss = 12188 + INTEGER(IntKi), PARAMETER :: M68N3TDyss = 12189 + INTEGER(IntKi), PARAMETER :: M68N4TDyss = 12190 + INTEGER(IntKi), PARAMETER :: M68N5TDyss = 12191 + INTEGER(IntKi), PARAMETER :: M68N6TDyss = 12192 + INTEGER(IntKi), PARAMETER :: M68N7TDyss = 12193 + INTEGER(IntKi), PARAMETER :: M68N8TDyss = 12194 + INTEGER(IntKi), PARAMETER :: M68N9TDyss = 12195 + INTEGER(IntKi), PARAMETER :: M69N1TDyss = 12196 + INTEGER(IntKi), PARAMETER :: M69N2TDyss = 12197 + INTEGER(IntKi), PARAMETER :: M69N3TDyss = 12198 + INTEGER(IntKi), PARAMETER :: M69N4TDyss = 12199 + INTEGER(IntKi), PARAMETER :: M69N5TDyss = 12200 + INTEGER(IntKi), PARAMETER :: M69N6TDyss = 12201 + INTEGER(IntKi), PARAMETER :: M69N7TDyss = 12202 + INTEGER(IntKi), PARAMETER :: M69N8TDyss = 12203 + INTEGER(IntKi), PARAMETER :: M69N9TDyss = 12204 + INTEGER(IntKi), PARAMETER :: M70N1TDyss = 12205 + INTEGER(IntKi), PARAMETER :: M70N2TDyss = 12206 + INTEGER(IntKi), PARAMETER :: M70N3TDyss = 12207 + INTEGER(IntKi), PARAMETER :: M70N4TDyss = 12208 + INTEGER(IntKi), PARAMETER :: M70N5TDyss = 12209 + INTEGER(IntKi), PARAMETER :: M70N6TDyss = 12210 + INTEGER(IntKi), PARAMETER :: M70N7TDyss = 12211 + INTEGER(IntKi), PARAMETER :: M70N8TDyss = 12212 + INTEGER(IntKi), PARAMETER :: M70N9TDyss = 12213 + INTEGER(IntKi), PARAMETER :: M71N1TDyss = 12214 + INTEGER(IntKi), PARAMETER :: M71N2TDyss = 12215 + INTEGER(IntKi), PARAMETER :: M71N3TDyss = 12216 + INTEGER(IntKi), PARAMETER :: M71N4TDyss = 12217 + INTEGER(IntKi), PARAMETER :: M71N5TDyss = 12218 + INTEGER(IntKi), PARAMETER :: M71N6TDyss = 12219 + INTEGER(IntKi), PARAMETER :: M71N7TDyss = 12220 + INTEGER(IntKi), PARAMETER :: M71N8TDyss = 12221 + INTEGER(IntKi), PARAMETER :: M71N9TDyss = 12222 + INTEGER(IntKi), PARAMETER :: M72N1TDyss = 12223 + INTEGER(IntKi), PARAMETER :: M72N2TDyss = 12224 + INTEGER(IntKi), PARAMETER :: M72N3TDyss = 12225 + INTEGER(IntKi), PARAMETER :: M72N4TDyss = 12226 + INTEGER(IntKi), PARAMETER :: M72N5TDyss = 12227 + INTEGER(IntKi), PARAMETER :: M72N6TDyss = 12228 + INTEGER(IntKi), PARAMETER :: M72N7TDyss = 12229 + INTEGER(IntKi), PARAMETER :: M72N8TDyss = 12230 + INTEGER(IntKi), PARAMETER :: M72N9TDyss = 12231 + INTEGER(IntKi), PARAMETER :: M73N1TDyss = 12232 + INTEGER(IntKi), PARAMETER :: M73N2TDyss = 12233 + INTEGER(IntKi), PARAMETER :: M73N3TDyss = 12234 + INTEGER(IntKi), PARAMETER :: M73N4TDyss = 12235 + INTEGER(IntKi), PARAMETER :: M73N5TDyss = 12236 + INTEGER(IntKi), PARAMETER :: M73N6TDyss = 12237 + INTEGER(IntKi), PARAMETER :: M73N7TDyss = 12238 + INTEGER(IntKi), PARAMETER :: M73N8TDyss = 12239 + INTEGER(IntKi), PARAMETER :: M73N9TDyss = 12240 + INTEGER(IntKi), PARAMETER :: M74N1TDyss = 12241 + INTEGER(IntKi), PARAMETER :: M74N2TDyss = 12242 + INTEGER(IntKi), PARAMETER :: M74N3TDyss = 12243 + INTEGER(IntKi), PARAMETER :: M74N4TDyss = 12244 + INTEGER(IntKi), PARAMETER :: M74N5TDyss = 12245 + INTEGER(IntKi), PARAMETER :: M74N6TDyss = 12246 + INTEGER(IntKi), PARAMETER :: M74N7TDyss = 12247 + INTEGER(IntKi), PARAMETER :: M74N8TDyss = 12248 + INTEGER(IntKi), PARAMETER :: M74N9TDyss = 12249 + INTEGER(IntKi), PARAMETER :: M75N1TDyss = 12250 + INTEGER(IntKi), PARAMETER :: M75N2TDyss = 12251 + INTEGER(IntKi), PARAMETER :: M75N3TDyss = 12252 + INTEGER(IntKi), PARAMETER :: M75N4TDyss = 12253 + INTEGER(IntKi), PARAMETER :: M75N5TDyss = 12254 + INTEGER(IntKi), PARAMETER :: M75N6TDyss = 12255 + INTEGER(IntKi), PARAMETER :: M75N7TDyss = 12256 + INTEGER(IntKi), PARAMETER :: M75N8TDyss = 12257 + INTEGER(IntKi), PARAMETER :: M75N9TDyss = 12258 + INTEGER(IntKi), PARAMETER :: M76N1TDyss = 12259 + INTEGER(IntKi), PARAMETER :: M76N2TDyss = 12260 + INTEGER(IntKi), PARAMETER :: M76N3TDyss = 12261 + INTEGER(IntKi), PARAMETER :: M76N4TDyss = 12262 + INTEGER(IntKi), PARAMETER :: M76N5TDyss = 12263 + INTEGER(IntKi), PARAMETER :: M76N6TDyss = 12264 + INTEGER(IntKi), PARAMETER :: M76N7TDyss = 12265 + INTEGER(IntKi), PARAMETER :: M76N8TDyss = 12266 + INTEGER(IntKi), PARAMETER :: M76N9TDyss = 12267 + INTEGER(IntKi), PARAMETER :: M77N1TDyss = 12268 + INTEGER(IntKi), PARAMETER :: M77N2TDyss = 12269 + INTEGER(IntKi), PARAMETER :: M77N3TDyss = 12270 + INTEGER(IntKi), PARAMETER :: M77N4TDyss = 12271 + INTEGER(IntKi), PARAMETER :: M77N5TDyss = 12272 + INTEGER(IntKi), PARAMETER :: M77N6TDyss = 12273 + INTEGER(IntKi), PARAMETER :: M77N7TDyss = 12274 + INTEGER(IntKi), PARAMETER :: M77N8TDyss = 12275 + INTEGER(IntKi), PARAMETER :: M77N9TDyss = 12276 + INTEGER(IntKi), PARAMETER :: M78N1TDyss = 12277 + INTEGER(IntKi), PARAMETER :: M78N2TDyss = 12278 + INTEGER(IntKi), PARAMETER :: M78N3TDyss = 12279 + INTEGER(IntKi), PARAMETER :: M78N4TDyss = 12280 + INTEGER(IntKi), PARAMETER :: M78N5TDyss = 12281 + INTEGER(IntKi), PARAMETER :: M78N6TDyss = 12282 + INTEGER(IntKi), PARAMETER :: M78N7TDyss = 12283 + INTEGER(IntKi), PARAMETER :: M78N8TDyss = 12284 + INTEGER(IntKi), PARAMETER :: M78N9TDyss = 12285 + INTEGER(IntKi), PARAMETER :: M79N1TDyss = 12286 + INTEGER(IntKi), PARAMETER :: M79N2TDyss = 12287 + INTEGER(IntKi), PARAMETER :: M79N3TDyss = 12288 + INTEGER(IntKi), PARAMETER :: M79N4TDyss = 12289 + INTEGER(IntKi), PARAMETER :: M79N5TDyss = 12290 + INTEGER(IntKi), PARAMETER :: M79N6TDyss = 12291 + INTEGER(IntKi), PARAMETER :: M79N7TDyss = 12292 + INTEGER(IntKi), PARAMETER :: M79N8TDyss = 12293 + INTEGER(IntKi), PARAMETER :: M79N9TDyss = 12294 + INTEGER(IntKi), PARAMETER :: M80N1TDyss = 12295 + INTEGER(IntKi), PARAMETER :: M80N2TDyss = 12296 + INTEGER(IntKi), PARAMETER :: M80N3TDyss = 12297 + INTEGER(IntKi), PARAMETER :: M80N4TDyss = 12298 + INTEGER(IntKi), PARAMETER :: M80N5TDyss = 12299 + INTEGER(IntKi), PARAMETER :: M80N6TDyss = 12300 + INTEGER(IntKi), PARAMETER :: M80N7TDyss = 12301 + INTEGER(IntKi), PARAMETER :: M80N8TDyss = 12302 + INTEGER(IntKi), PARAMETER :: M80N9TDyss = 12303 + INTEGER(IntKi), PARAMETER :: M81N1TDyss = 12304 + INTEGER(IntKi), PARAMETER :: M81N2TDyss = 12305 + INTEGER(IntKi), PARAMETER :: M81N3TDyss = 12306 + INTEGER(IntKi), PARAMETER :: M81N4TDyss = 12307 + INTEGER(IntKi), PARAMETER :: M81N5TDyss = 12308 + INTEGER(IntKi), PARAMETER :: M81N6TDyss = 12309 + INTEGER(IntKi), PARAMETER :: M81N7TDyss = 12310 + INTEGER(IntKi), PARAMETER :: M81N8TDyss = 12311 + INTEGER(IntKi), PARAMETER :: M81N9TDyss = 12312 + INTEGER(IntKi), PARAMETER :: M82N1TDyss = 12313 + INTEGER(IntKi), PARAMETER :: M82N2TDyss = 12314 + INTEGER(IntKi), PARAMETER :: M82N3TDyss = 12315 + INTEGER(IntKi), PARAMETER :: M82N4TDyss = 12316 + INTEGER(IntKi), PARAMETER :: M82N5TDyss = 12317 + INTEGER(IntKi), PARAMETER :: M82N6TDyss = 12318 + INTEGER(IntKi), PARAMETER :: M82N7TDyss = 12319 + INTEGER(IntKi), PARAMETER :: M82N8TDyss = 12320 + INTEGER(IntKi), PARAMETER :: M82N9TDyss = 12321 + INTEGER(IntKi), PARAMETER :: M83N1TDyss = 12322 + INTEGER(IntKi), PARAMETER :: M83N2TDyss = 12323 + INTEGER(IntKi), PARAMETER :: M83N3TDyss = 12324 + INTEGER(IntKi), PARAMETER :: M83N4TDyss = 12325 + INTEGER(IntKi), PARAMETER :: M83N5TDyss = 12326 + INTEGER(IntKi), PARAMETER :: M83N6TDyss = 12327 + INTEGER(IntKi), PARAMETER :: M83N7TDyss = 12328 + INTEGER(IntKi), PARAMETER :: M83N8TDyss = 12329 + INTEGER(IntKi), PARAMETER :: M83N9TDyss = 12330 + INTEGER(IntKi), PARAMETER :: M84N1TDyss = 12331 + INTEGER(IntKi), PARAMETER :: M84N2TDyss = 12332 + INTEGER(IntKi), PARAMETER :: M84N3TDyss = 12333 + INTEGER(IntKi), PARAMETER :: M84N4TDyss = 12334 + INTEGER(IntKi), PARAMETER :: M84N5TDyss = 12335 + INTEGER(IntKi), PARAMETER :: M84N6TDyss = 12336 + INTEGER(IntKi), PARAMETER :: M84N7TDyss = 12337 + INTEGER(IntKi), PARAMETER :: M84N8TDyss = 12338 + INTEGER(IntKi), PARAMETER :: M84N9TDyss = 12339 + INTEGER(IntKi), PARAMETER :: M85N1TDyss = 12340 + INTEGER(IntKi), PARAMETER :: M85N2TDyss = 12341 + INTEGER(IntKi), PARAMETER :: M85N3TDyss = 12342 + INTEGER(IntKi), PARAMETER :: M85N4TDyss = 12343 + INTEGER(IntKi), PARAMETER :: M85N5TDyss = 12344 + INTEGER(IntKi), PARAMETER :: M85N6TDyss = 12345 + INTEGER(IntKi), PARAMETER :: M85N7TDyss = 12346 + INTEGER(IntKi), PARAMETER :: M85N8TDyss = 12347 + INTEGER(IntKi), PARAMETER :: M85N9TDyss = 12348 + INTEGER(IntKi), PARAMETER :: M86N1TDyss = 12349 + INTEGER(IntKi), PARAMETER :: M86N2TDyss = 12350 + INTEGER(IntKi), PARAMETER :: M86N3TDyss = 12351 + INTEGER(IntKi), PARAMETER :: M86N4TDyss = 12352 + INTEGER(IntKi), PARAMETER :: M86N5TDyss = 12353 + INTEGER(IntKi), PARAMETER :: M86N6TDyss = 12354 + INTEGER(IntKi), PARAMETER :: M86N7TDyss = 12355 + INTEGER(IntKi), PARAMETER :: M86N8TDyss = 12356 + INTEGER(IntKi), PARAMETER :: M86N9TDyss = 12357 + INTEGER(IntKi), PARAMETER :: M87N1TDyss = 12358 + INTEGER(IntKi), PARAMETER :: M87N2TDyss = 12359 + INTEGER(IntKi), PARAMETER :: M87N3TDyss = 12360 + INTEGER(IntKi), PARAMETER :: M87N4TDyss = 12361 + INTEGER(IntKi), PARAMETER :: M87N5TDyss = 12362 + INTEGER(IntKi), PARAMETER :: M87N6TDyss = 12363 + INTEGER(IntKi), PARAMETER :: M87N7TDyss = 12364 + INTEGER(IntKi), PARAMETER :: M87N8TDyss = 12365 + INTEGER(IntKi), PARAMETER :: M87N9TDyss = 12366 + INTEGER(IntKi), PARAMETER :: M88N1TDyss = 12367 + INTEGER(IntKi), PARAMETER :: M88N2TDyss = 12368 + INTEGER(IntKi), PARAMETER :: M88N3TDyss = 12369 + INTEGER(IntKi), PARAMETER :: M88N4TDyss = 12370 + INTEGER(IntKi), PARAMETER :: M88N5TDyss = 12371 + INTEGER(IntKi), PARAMETER :: M88N6TDyss = 12372 + INTEGER(IntKi), PARAMETER :: M88N7TDyss = 12373 + INTEGER(IntKi), PARAMETER :: M88N8TDyss = 12374 + INTEGER(IntKi), PARAMETER :: M88N9TDyss = 12375 + INTEGER(IntKi), PARAMETER :: M89N1TDyss = 12376 + INTEGER(IntKi), PARAMETER :: M89N2TDyss = 12377 + INTEGER(IntKi), PARAMETER :: M89N3TDyss = 12378 + INTEGER(IntKi), PARAMETER :: M89N4TDyss = 12379 + INTEGER(IntKi), PARAMETER :: M89N5TDyss = 12380 + INTEGER(IntKi), PARAMETER :: M89N6TDyss = 12381 + INTEGER(IntKi), PARAMETER :: M89N7TDyss = 12382 + INTEGER(IntKi), PARAMETER :: M89N8TDyss = 12383 + INTEGER(IntKi), PARAMETER :: M89N9TDyss = 12384 + INTEGER(IntKi), PARAMETER :: M90N1TDyss = 12385 + INTEGER(IntKi), PARAMETER :: M90N2TDyss = 12386 + INTEGER(IntKi), PARAMETER :: M90N3TDyss = 12387 + INTEGER(IntKi), PARAMETER :: M90N4TDyss = 12388 + INTEGER(IntKi), PARAMETER :: M90N5TDyss = 12389 + INTEGER(IntKi), PARAMETER :: M90N6TDyss = 12390 + INTEGER(IntKi), PARAMETER :: M90N7TDyss = 12391 + INTEGER(IntKi), PARAMETER :: M90N8TDyss = 12392 + INTEGER(IntKi), PARAMETER :: M90N9TDyss = 12393 + INTEGER(IntKi), PARAMETER :: M91N1TDyss = 12394 + INTEGER(IntKi), PARAMETER :: M91N2TDyss = 12395 + INTEGER(IntKi), PARAMETER :: M91N3TDyss = 12396 + INTEGER(IntKi), PARAMETER :: M91N4TDyss = 12397 + INTEGER(IntKi), PARAMETER :: M91N5TDyss = 12398 + INTEGER(IntKi), PARAMETER :: M91N6TDyss = 12399 + INTEGER(IntKi), PARAMETER :: M91N7TDyss = 12400 + INTEGER(IntKi), PARAMETER :: M91N8TDyss = 12401 + INTEGER(IntKi), PARAMETER :: M91N9TDyss = 12402 + INTEGER(IntKi), PARAMETER :: M92N1TDyss = 12403 + INTEGER(IntKi), PARAMETER :: M92N2TDyss = 12404 + INTEGER(IntKi), PARAMETER :: M92N3TDyss = 12405 + INTEGER(IntKi), PARAMETER :: M92N4TDyss = 12406 + INTEGER(IntKi), PARAMETER :: M92N5TDyss = 12407 + INTEGER(IntKi), PARAMETER :: M92N6TDyss = 12408 + INTEGER(IntKi), PARAMETER :: M92N7TDyss = 12409 + INTEGER(IntKi), PARAMETER :: M92N8TDyss = 12410 + INTEGER(IntKi), PARAMETER :: M92N9TDyss = 12411 + INTEGER(IntKi), PARAMETER :: M93N1TDyss = 12412 + INTEGER(IntKi), PARAMETER :: M93N2TDyss = 12413 + INTEGER(IntKi), PARAMETER :: M93N3TDyss = 12414 + INTEGER(IntKi), PARAMETER :: M93N4TDyss = 12415 + INTEGER(IntKi), PARAMETER :: M93N5TDyss = 12416 + INTEGER(IntKi), PARAMETER :: M93N6TDyss = 12417 + INTEGER(IntKi), PARAMETER :: M93N7TDyss = 12418 + INTEGER(IntKi), PARAMETER :: M93N8TDyss = 12419 + INTEGER(IntKi), PARAMETER :: M93N9TDyss = 12420 + INTEGER(IntKi), PARAMETER :: M94N1TDyss = 12421 + INTEGER(IntKi), PARAMETER :: M94N2TDyss = 12422 + INTEGER(IntKi), PARAMETER :: M94N3TDyss = 12423 + INTEGER(IntKi), PARAMETER :: M94N4TDyss = 12424 + INTEGER(IntKi), PARAMETER :: M94N5TDyss = 12425 + INTEGER(IntKi), PARAMETER :: M94N6TDyss = 12426 + INTEGER(IntKi), PARAMETER :: M94N7TDyss = 12427 + INTEGER(IntKi), PARAMETER :: M94N8TDyss = 12428 + INTEGER(IntKi), PARAMETER :: M94N9TDyss = 12429 + INTEGER(IntKi), PARAMETER :: M95N1TDyss = 12430 + INTEGER(IntKi), PARAMETER :: M95N2TDyss = 12431 + INTEGER(IntKi), PARAMETER :: M95N3TDyss = 12432 + INTEGER(IntKi), PARAMETER :: M95N4TDyss = 12433 + INTEGER(IntKi), PARAMETER :: M95N5TDyss = 12434 + INTEGER(IntKi), PARAMETER :: M95N6TDyss = 12435 + INTEGER(IntKi), PARAMETER :: M95N7TDyss = 12436 + INTEGER(IntKi), PARAMETER :: M95N8TDyss = 12437 + INTEGER(IntKi), PARAMETER :: M95N9TDyss = 12438 + INTEGER(IntKi), PARAMETER :: M96N1TDyss = 12439 + INTEGER(IntKi), PARAMETER :: M96N2TDyss = 12440 + INTEGER(IntKi), PARAMETER :: M96N3TDyss = 12441 + INTEGER(IntKi), PARAMETER :: M96N4TDyss = 12442 + INTEGER(IntKi), PARAMETER :: M96N5TDyss = 12443 + INTEGER(IntKi), PARAMETER :: M96N6TDyss = 12444 + INTEGER(IntKi), PARAMETER :: M96N7TDyss = 12445 + INTEGER(IntKi), PARAMETER :: M96N8TDyss = 12446 + INTEGER(IntKi), PARAMETER :: M96N9TDyss = 12447 + INTEGER(IntKi), PARAMETER :: M97N1TDyss = 12448 + INTEGER(IntKi), PARAMETER :: M97N2TDyss = 12449 + INTEGER(IntKi), PARAMETER :: M97N3TDyss = 12450 + INTEGER(IntKi), PARAMETER :: M97N4TDyss = 12451 + INTEGER(IntKi), PARAMETER :: M97N5TDyss = 12452 + INTEGER(IntKi), PARAMETER :: M97N6TDyss = 12453 + INTEGER(IntKi), PARAMETER :: M97N7TDyss = 12454 + INTEGER(IntKi), PARAMETER :: M97N8TDyss = 12455 + INTEGER(IntKi), PARAMETER :: M97N9TDyss = 12456 + INTEGER(IntKi), PARAMETER :: M98N1TDyss = 12457 + INTEGER(IntKi), PARAMETER :: M98N2TDyss = 12458 + INTEGER(IntKi), PARAMETER :: M98N3TDyss = 12459 + INTEGER(IntKi), PARAMETER :: M98N4TDyss = 12460 + INTEGER(IntKi), PARAMETER :: M98N5TDyss = 12461 + INTEGER(IntKi), PARAMETER :: M98N6TDyss = 12462 + INTEGER(IntKi), PARAMETER :: M98N7TDyss = 12463 + INTEGER(IntKi), PARAMETER :: M98N8TDyss = 12464 + INTEGER(IntKi), PARAMETER :: M98N9TDyss = 12465 + INTEGER(IntKi), PARAMETER :: M99N1TDyss = 12466 + INTEGER(IntKi), PARAMETER :: M99N2TDyss = 12467 + INTEGER(IntKi), PARAMETER :: M99N3TDyss = 12468 + INTEGER(IntKi), PARAMETER :: M99N4TDyss = 12469 + INTEGER(IntKi), PARAMETER :: M99N5TDyss = 12470 + INTEGER(IntKi), PARAMETER :: M99N6TDyss = 12471 + INTEGER(IntKi), PARAMETER :: M99N7TDyss = 12472 + INTEGER(IntKi), PARAMETER :: M99N8TDyss = 12473 + INTEGER(IntKi), PARAMETER :: M99N9TDyss = 12474 + INTEGER(IntKi), PARAMETER :: M01N1TDzss = 12475 + INTEGER(IntKi), PARAMETER :: M01N2TDzss = 12476 + INTEGER(IntKi), PARAMETER :: M01N3TDzss = 12477 + INTEGER(IntKi), PARAMETER :: M01N4TDzss = 12478 + INTEGER(IntKi), PARAMETER :: M01N5TDzss = 12479 + INTEGER(IntKi), PARAMETER :: M01N6TDzss = 12480 + INTEGER(IntKi), PARAMETER :: M01N7TDzss = 12481 + INTEGER(IntKi), PARAMETER :: M01N8TDzss = 12482 + INTEGER(IntKi), PARAMETER :: M01N9TDzss = 12483 + INTEGER(IntKi), PARAMETER :: M02N1TDzss = 12484 + INTEGER(IntKi), PARAMETER :: M02N2TDzss = 12485 + INTEGER(IntKi), PARAMETER :: M02N3TDzss = 12486 + INTEGER(IntKi), PARAMETER :: M02N4TDzss = 12487 + INTEGER(IntKi), PARAMETER :: M02N5TDzss = 12488 + INTEGER(IntKi), PARAMETER :: M02N6TDzss = 12489 + INTEGER(IntKi), PARAMETER :: M02N7TDzss = 12490 + INTEGER(IntKi), PARAMETER :: M02N8TDzss = 12491 + INTEGER(IntKi), PARAMETER :: M02N9TDzss = 12492 + INTEGER(IntKi), PARAMETER :: M03N1TDzss = 12493 + INTEGER(IntKi), PARAMETER :: M03N2TDzss = 12494 + INTEGER(IntKi), PARAMETER :: M03N3TDzss = 12495 + INTEGER(IntKi), PARAMETER :: M03N4TDzss = 12496 + INTEGER(IntKi), PARAMETER :: M03N5TDzss = 12497 + INTEGER(IntKi), PARAMETER :: M03N6TDzss = 12498 + INTEGER(IntKi), PARAMETER :: M03N7TDzss = 12499 + INTEGER(IntKi), PARAMETER :: M03N8TDzss = 12500 + INTEGER(IntKi), PARAMETER :: M03N9TDzss = 12501 + INTEGER(IntKi), PARAMETER :: M04N1TDzss = 12502 + INTEGER(IntKi), PARAMETER :: M04N2TDzss = 12503 + INTEGER(IntKi), PARAMETER :: M04N3TDzss = 12504 + INTEGER(IntKi), PARAMETER :: M04N4TDzss = 12505 + INTEGER(IntKi), PARAMETER :: M04N5TDzss = 12506 + INTEGER(IntKi), PARAMETER :: M04N6TDzss = 12507 + INTEGER(IntKi), PARAMETER :: M04N7TDzss = 12508 + INTEGER(IntKi), PARAMETER :: M04N8TDzss = 12509 + INTEGER(IntKi), PARAMETER :: M04N9TDzss = 12510 + INTEGER(IntKi), PARAMETER :: M05N1TDzss = 12511 + INTEGER(IntKi), PARAMETER :: M05N2TDzss = 12512 + INTEGER(IntKi), PARAMETER :: M05N3TDzss = 12513 + INTEGER(IntKi), PARAMETER :: M05N4TDzss = 12514 + INTEGER(IntKi), PARAMETER :: M05N5TDzss = 12515 + INTEGER(IntKi), PARAMETER :: M05N6TDzss = 12516 + INTEGER(IntKi), PARAMETER :: M05N7TDzss = 12517 + INTEGER(IntKi), PARAMETER :: M05N8TDzss = 12518 + INTEGER(IntKi), PARAMETER :: M05N9TDzss = 12519 + INTEGER(IntKi), PARAMETER :: M06N1TDzss = 12520 + INTEGER(IntKi), PARAMETER :: M06N2TDzss = 12521 + INTEGER(IntKi), PARAMETER :: M06N3TDzss = 12522 + INTEGER(IntKi), PARAMETER :: M06N4TDzss = 12523 + INTEGER(IntKi), PARAMETER :: M06N5TDzss = 12524 + INTEGER(IntKi), PARAMETER :: M06N6TDzss = 12525 + INTEGER(IntKi), PARAMETER :: M06N7TDzss = 12526 + INTEGER(IntKi), PARAMETER :: M06N8TDzss = 12527 + INTEGER(IntKi), PARAMETER :: M06N9TDzss = 12528 + INTEGER(IntKi), PARAMETER :: M07N1TDzss = 12529 + INTEGER(IntKi), PARAMETER :: M07N2TDzss = 12530 + INTEGER(IntKi), PARAMETER :: M07N3TDzss = 12531 + INTEGER(IntKi), PARAMETER :: M07N4TDzss = 12532 + INTEGER(IntKi), PARAMETER :: M07N5TDzss = 12533 + INTEGER(IntKi), PARAMETER :: M07N6TDzss = 12534 + INTEGER(IntKi), PARAMETER :: M07N7TDzss = 12535 + INTEGER(IntKi), PARAMETER :: M07N8TDzss = 12536 + INTEGER(IntKi), PARAMETER :: M07N9TDzss = 12537 + INTEGER(IntKi), PARAMETER :: M08N1TDzss = 12538 + INTEGER(IntKi), PARAMETER :: M08N2TDzss = 12539 + INTEGER(IntKi), PARAMETER :: M08N3TDzss = 12540 + INTEGER(IntKi), PARAMETER :: M08N4TDzss = 12541 + INTEGER(IntKi), PARAMETER :: M08N5TDzss = 12542 + INTEGER(IntKi), PARAMETER :: M08N6TDzss = 12543 + INTEGER(IntKi), PARAMETER :: M08N7TDzss = 12544 + INTEGER(IntKi), PARAMETER :: M08N8TDzss = 12545 + INTEGER(IntKi), PARAMETER :: M08N9TDzss = 12546 + INTEGER(IntKi), PARAMETER :: M09N1TDzss = 12547 + INTEGER(IntKi), PARAMETER :: M09N2TDzss = 12548 + INTEGER(IntKi), PARAMETER :: M09N3TDzss = 12549 + INTEGER(IntKi), PARAMETER :: M09N4TDzss = 12550 + INTEGER(IntKi), PARAMETER :: M09N5TDzss = 12551 + INTEGER(IntKi), PARAMETER :: M09N6TDzss = 12552 + INTEGER(IntKi), PARAMETER :: M09N7TDzss = 12553 + INTEGER(IntKi), PARAMETER :: M09N8TDzss = 12554 + INTEGER(IntKi), PARAMETER :: M09N9TDzss = 12555 + INTEGER(IntKi), PARAMETER :: M10N1TDzss = 12556 + INTEGER(IntKi), PARAMETER :: M10N2TDzss = 12557 + INTEGER(IntKi), PARAMETER :: M10N3TDzss = 12558 + INTEGER(IntKi), PARAMETER :: M10N4TDzss = 12559 + INTEGER(IntKi), PARAMETER :: M10N5TDzss = 12560 + INTEGER(IntKi), PARAMETER :: M10N6TDzss = 12561 + INTEGER(IntKi), PARAMETER :: M10N7TDzss = 12562 + INTEGER(IntKi), PARAMETER :: M10N8TDzss = 12563 + INTEGER(IntKi), PARAMETER :: M10N9TDzss = 12564 + INTEGER(IntKi), PARAMETER :: M11N1TDzss = 12565 + INTEGER(IntKi), PARAMETER :: M11N2TDzss = 12566 + INTEGER(IntKi), PARAMETER :: M11N3TDzss = 12567 + INTEGER(IntKi), PARAMETER :: M11N4TDzss = 12568 + INTEGER(IntKi), PARAMETER :: M11N5TDzss = 12569 + INTEGER(IntKi), PARAMETER :: M11N6TDzss = 12570 + INTEGER(IntKi), PARAMETER :: M11N7TDzss = 12571 + INTEGER(IntKi), PARAMETER :: M11N8TDzss = 12572 + INTEGER(IntKi), PARAMETER :: M11N9TDzss = 12573 + INTEGER(IntKi), PARAMETER :: M12N1TDzss = 12574 + INTEGER(IntKi), PARAMETER :: M12N2TDzss = 12575 + INTEGER(IntKi), PARAMETER :: M12N3TDzss = 12576 + INTEGER(IntKi), PARAMETER :: M12N4TDzss = 12577 + INTEGER(IntKi), PARAMETER :: M12N5TDzss = 12578 + INTEGER(IntKi), PARAMETER :: M12N6TDzss = 12579 + INTEGER(IntKi), PARAMETER :: M12N7TDzss = 12580 + INTEGER(IntKi), PARAMETER :: M12N8TDzss = 12581 + INTEGER(IntKi), PARAMETER :: M12N9TDzss = 12582 + INTEGER(IntKi), PARAMETER :: M13N1TDzss = 12583 + INTEGER(IntKi), PARAMETER :: M13N2TDzss = 12584 + INTEGER(IntKi), PARAMETER :: M13N3TDzss = 12585 + INTEGER(IntKi), PARAMETER :: M13N4TDzss = 12586 + INTEGER(IntKi), PARAMETER :: M13N5TDzss = 12587 + INTEGER(IntKi), PARAMETER :: M13N6TDzss = 12588 + INTEGER(IntKi), PARAMETER :: M13N7TDzss = 12589 + INTEGER(IntKi), PARAMETER :: M13N8TDzss = 12590 + INTEGER(IntKi), PARAMETER :: M13N9TDzss = 12591 + INTEGER(IntKi), PARAMETER :: M14N1TDzss = 12592 + INTEGER(IntKi), PARAMETER :: M14N2TDzss = 12593 + INTEGER(IntKi), PARAMETER :: M14N3TDzss = 12594 + INTEGER(IntKi), PARAMETER :: M14N4TDzss = 12595 + INTEGER(IntKi), PARAMETER :: M14N5TDzss = 12596 + INTEGER(IntKi), PARAMETER :: M14N6TDzss = 12597 + INTEGER(IntKi), PARAMETER :: M14N7TDzss = 12598 + INTEGER(IntKi), PARAMETER :: M14N8TDzss = 12599 + INTEGER(IntKi), PARAMETER :: M14N9TDzss = 12600 + INTEGER(IntKi), PARAMETER :: M15N1TDzss = 12601 + INTEGER(IntKi), PARAMETER :: M15N2TDzss = 12602 + INTEGER(IntKi), PARAMETER :: M15N3TDzss = 12603 + INTEGER(IntKi), PARAMETER :: M15N4TDzss = 12604 + INTEGER(IntKi), PARAMETER :: M15N5TDzss = 12605 + INTEGER(IntKi), PARAMETER :: M15N6TDzss = 12606 + INTEGER(IntKi), PARAMETER :: M15N7TDzss = 12607 + INTEGER(IntKi), PARAMETER :: M15N8TDzss = 12608 + INTEGER(IntKi), PARAMETER :: M15N9TDzss = 12609 + INTEGER(IntKi), PARAMETER :: M16N1TDzss = 12610 + INTEGER(IntKi), PARAMETER :: M16N2TDzss = 12611 + INTEGER(IntKi), PARAMETER :: M16N3TDzss = 12612 + INTEGER(IntKi), PARAMETER :: M16N4TDzss = 12613 + INTEGER(IntKi), PARAMETER :: M16N5TDzss = 12614 + INTEGER(IntKi), PARAMETER :: M16N6TDzss = 12615 + INTEGER(IntKi), PARAMETER :: M16N7TDzss = 12616 + INTEGER(IntKi), PARAMETER :: M16N8TDzss = 12617 + INTEGER(IntKi), PARAMETER :: M16N9TDzss = 12618 + INTEGER(IntKi), PARAMETER :: M17N1TDzss = 12619 + INTEGER(IntKi), PARAMETER :: M17N2TDzss = 12620 + INTEGER(IntKi), PARAMETER :: M17N3TDzss = 12621 + INTEGER(IntKi), PARAMETER :: M17N4TDzss = 12622 + INTEGER(IntKi), PARAMETER :: M17N5TDzss = 12623 + INTEGER(IntKi), PARAMETER :: M17N6TDzss = 12624 + INTEGER(IntKi), PARAMETER :: M17N7TDzss = 12625 + INTEGER(IntKi), PARAMETER :: M17N8TDzss = 12626 + INTEGER(IntKi), PARAMETER :: M17N9TDzss = 12627 + INTEGER(IntKi), PARAMETER :: M18N1TDzss = 12628 + INTEGER(IntKi), PARAMETER :: M18N2TDzss = 12629 + INTEGER(IntKi), PARAMETER :: M18N3TDzss = 12630 + INTEGER(IntKi), PARAMETER :: M18N4TDzss = 12631 + INTEGER(IntKi), PARAMETER :: M18N5TDzss = 12632 + INTEGER(IntKi), PARAMETER :: M18N6TDzss = 12633 + INTEGER(IntKi), PARAMETER :: M18N7TDzss = 12634 + INTEGER(IntKi), PARAMETER :: M18N8TDzss = 12635 + INTEGER(IntKi), PARAMETER :: M18N9TDzss = 12636 + INTEGER(IntKi), PARAMETER :: M19N1TDzss = 12637 + INTEGER(IntKi), PARAMETER :: M19N2TDzss = 12638 + INTEGER(IntKi), PARAMETER :: M19N3TDzss = 12639 + INTEGER(IntKi), PARAMETER :: M19N4TDzss = 12640 + INTEGER(IntKi), PARAMETER :: M19N5TDzss = 12641 + INTEGER(IntKi), PARAMETER :: M19N6TDzss = 12642 + INTEGER(IntKi), PARAMETER :: M19N7TDzss = 12643 + INTEGER(IntKi), PARAMETER :: M19N8TDzss = 12644 + INTEGER(IntKi), PARAMETER :: M19N9TDzss = 12645 + INTEGER(IntKi), PARAMETER :: M20N1TDzss = 12646 + INTEGER(IntKi), PARAMETER :: M20N2TDzss = 12647 + INTEGER(IntKi), PARAMETER :: M20N3TDzss = 12648 + INTEGER(IntKi), PARAMETER :: M20N4TDzss = 12649 + INTEGER(IntKi), PARAMETER :: M20N5TDzss = 12650 + INTEGER(IntKi), PARAMETER :: M20N6TDzss = 12651 + INTEGER(IntKi), PARAMETER :: M20N7TDzss = 12652 + INTEGER(IntKi), PARAMETER :: M20N8TDzss = 12653 + INTEGER(IntKi), PARAMETER :: M20N9TDzss = 12654 + INTEGER(IntKi), PARAMETER :: M21N1TDzss = 12655 + INTEGER(IntKi), PARAMETER :: M21N2TDzss = 12656 + INTEGER(IntKi), PARAMETER :: M21N3TDzss = 12657 + INTEGER(IntKi), PARAMETER :: M21N4TDzss = 12658 + INTEGER(IntKi), PARAMETER :: M21N5TDzss = 12659 + INTEGER(IntKi), PARAMETER :: M21N6TDzss = 12660 + INTEGER(IntKi), PARAMETER :: M21N7TDzss = 12661 + INTEGER(IntKi), PARAMETER :: M21N8TDzss = 12662 + INTEGER(IntKi), PARAMETER :: M21N9TDzss = 12663 + INTEGER(IntKi), PARAMETER :: M22N1TDzss = 12664 + INTEGER(IntKi), PARAMETER :: M22N2TDzss = 12665 + INTEGER(IntKi), PARAMETER :: M22N3TDzss = 12666 + INTEGER(IntKi), PARAMETER :: M22N4TDzss = 12667 + INTEGER(IntKi), PARAMETER :: M22N5TDzss = 12668 + INTEGER(IntKi), PARAMETER :: M22N6TDzss = 12669 + INTEGER(IntKi), PARAMETER :: M22N7TDzss = 12670 + INTEGER(IntKi), PARAMETER :: M22N8TDzss = 12671 + INTEGER(IntKi), PARAMETER :: M22N9TDzss = 12672 + INTEGER(IntKi), PARAMETER :: M23N1TDzss = 12673 + INTEGER(IntKi), PARAMETER :: M23N2TDzss = 12674 + INTEGER(IntKi), PARAMETER :: M23N3TDzss = 12675 + INTEGER(IntKi), PARAMETER :: M23N4TDzss = 12676 + INTEGER(IntKi), PARAMETER :: M23N5TDzss = 12677 + INTEGER(IntKi), PARAMETER :: M23N6TDzss = 12678 + INTEGER(IntKi), PARAMETER :: M23N7TDzss = 12679 + INTEGER(IntKi), PARAMETER :: M23N8TDzss = 12680 + INTEGER(IntKi), PARAMETER :: M23N9TDzss = 12681 + INTEGER(IntKi), PARAMETER :: M24N1TDzss = 12682 + INTEGER(IntKi), PARAMETER :: M24N2TDzss = 12683 + INTEGER(IntKi), PARAMETER :: M24N3TDzss = 12684 + INTEGER(IntKi), PARAMETER :: M24N4TDzss = 12685 + INTEGER(IntKi), PARAMETER :: M24N5TDzss = 12686 + INTEGER(IntKi), PARAMETER :: M24N6TDzss = 12687 + INTEGER(IntKi), PARAMETER :: M24N7TDzss = 12688 + INTEGER(IntKi), PARAMETER :: M24N8TDzss = 12689 + INTEGER(IntKi), PARAMETER :: M24N9TDzss = 12690 + INTEGER(IntKi), PARAMETER :: M25N1TDzss = 12691 + INTEGER(IntKi), PARAMETER :: M25N2TDzss = 12692 + INTEGER(IntKi), PARAMETER :: M25N3TDzss = 12693 + INTEGER(IntKi), PARAMETER :: M25N4TDzss = 12694 + INTEGER(IntKi), PARAMETER :: M25N5TDzss = 12695 + INTEGER(IntKi), PARAMETER :: M25N6TDzss = 12696 + INTEGER(IntKi), PARAMETER :: M25N7TDzss = 12697 + INTEGER(IntKi), PARAMETER :: M25N8TDzss = 12698 + INTEGER(IntKi), PARAMETER :: M25N9TDzss = 12699 + INTEGER(IntKi), PARAMETER :: M26N1TDzss = 12700 + INTEGER(IntKi), PARAMETER :: M26N2TDzss = 12701 + INTEGER(IntKi), PARAMETER :: M26N3TDzss = 12702 + INTEGER(IntKi), PARAMETER :: M26N4TDzss = 12703 + INTEGER(IntKi), PARAMETER :: M26N5TDzss = 12704 + INTEGER(IntKi), PARAMETER :: M26N6TDzss = 12705 + INTEGER(IntKi), PARAMETER :: M26N7TDzss = 12706 + INTEGER(IntKi), PARAMETER :: M26N8TDzss = 12707 + INTEGER(IntKi), PARAMETER :: M26N9TDzss = 12708 + INTEGER(IntKi), PARAMETER :: M27N1TDzss = 12709 + INTEGER(IntKi), PARAMETER :: M27N2TDzss = 12710 + INTEGER(IntKi), PARAMETER :: M27N3TDzss = 12711 + INTEGER(IntKi), PARAMETER :: M27N4TDzss = 12712 + INTEGER(IntKi), PARAMETER :: M27N5TDzss = 12713 + INTEGER(IntKi), PARAMETER :: M27N6TDzss = 12714 + INTEGER(IntKi), PARAMETER :: M27N7TDzss = 12715 + INTEGER(IntKi), PARAMETER :: M27N8TDzss = 12716 + INTEGER(IntKi), PARAMETER :: M27N9TDzss = 12717 + INTEGER(IntKi), PARAMETER :: M28N1TDzss = 12718 + INTEGER(IntKi), PARAMETER :: M28N2TDzss = 12719 + INTEGER(IntKi), PARAMETER :: M28N3TDzss = 12720 + INTEGER(IntKi), PARAMETER :: M28N4TDzss = 12721 + INTEGER(IntKi), PARAMETER :: M28N5TDzss = 12722 + INTEGER(IntKi), PARAMETER :: M28N6TDzss = 12723 + INTEGER(IntKi), PARAMETER :: M28N7TDzss = 12724 + INTEGER(IntKi), PARAMETER :: M28N8TDzss = 12725 + INTEGER(IntKi), PARAMETER :: M28N9TDzss = 12726 + INTEGER(IntKi), PARAMETER :: M29N1TDzss = 12727 + INTEGER(IntKi), PARAMETER :: M29N2TDzss = 12728 + INTEGER(IntKi), PARAMETER :: M29N3TDzss = 12729 + INTEGER(IntKi), PARAMETER :: M29N4TDzss = 12730 + INTEGER(IntKi), PARAMETER :: M29N5TDzss = 12731 + INTEGER(IntKi), PARAMETER :: M29N6TDzss = 12732 + INTEGER(IntKi), PARAMETER :: M29N7TDzss = 12733 + INTEGER(IntKi), PARAMETER :: M29N8TDzss = 12734 + INTEGER(IntKi), PARAMETER :: M29N9TDzss = 12735 + INTEGER(IntKi), PARAMETER :: M30N1TDzss = 12736 + INTEGER(IntKi), PARAMETER :: M30N2TDzss = 12737 + INTEGER(IntKi), PARAMETER :: M30N3TDzss = 12738 + INTEGER(IntKi), PARAMETER :: M30N4TDzss = 12739 + INTEGER(IntKi), PARAMETER :: M30N5TDzss = 12740 + INTEGER(IntKi), PARAMETER :: M30N6TDzss = 12741 + INTEGER(IntKi), PARAMETER :: M30N7TDzss = 12742 + INTEGER(IntKi), PARAMETER :: M30N8TDzss = 12743 + INTEGER(IntKi), PARAMETER :: M30N9TDzss = 12744 + INTEGER(IntKi), PARAMETER :: M31N1TDzss = 12745 + INTEGER(IntKi), PARAMETER :: M31N2TDzss = 12746 + INTEGER(IntKi), PARAMETER :: M31N3TDzss = 12747 + INTEGER(IntKi), PARAMETER :: M31N4TDzss = 12748 + INTEGER(IntKi), PARAMETER :: M31N5TDzss = 12749 + INTEGER(IntKi), PARAMETER :: M31N6TDzss = 12750 + INTEGER(IntKi), PARAMETER :: M31N7TDzss = 12751 + INTEGER(IntKi), PARAMETER :: M31N8TDzss = 12752 + INTEGER(IntKi), PARAMETER :: M31N9TDzss = 12753 + INTEGER(IntKi), PARAMETER :: M32N1TDzss = 12754 + INTEGER(IntKi), PARAMETER :: M32N2TDzss = 12755 + INTEGER(IntKi), PARAMETER :: M32N3TDzss = 12756 + INTEGER(IntKi), PARAMETER :: M32N4TDzss = 12757 + INTEGER(IntKi), PARAMETER :: M32N5TDzss = 12758 + INTEGER(IntKi), PARAMETER :: M32N6TDzss = 12759 + INTEGER(IntKi), PARAMETER :: M32N7TDzss = 12760 + INTEGER(IntKi), PARAMETER :: M32N8TDzss = 12761 + INTEGER(IntKi), PARAMETER :: M32N9TDzss = 12762 + INTEGER(IntKi), PARAMETER :: M33N1TDzss = 12763 + INTEGER(IntKi), PARAMETER :: M33N2TDzss = 12764 + INTEGER(IntKi), PARAMETER :: M33N3TDzss = 12765 + INTEGER(IntKi), PARAMETER :: M33N4TDzss = 12766 + INTEGER(IntKi), PARAMETER :: M33N5TDzss = 12767 + INTEGER(IntKi), PARAMETER :: M33N6TDzss = 12768 + INTEGER(IntKi), PARAMETER :: M33N7TDzss = 12769 + INTEGER(IntKi), PARAMETER :: M33N8TDzss = 12770 + INTEGER(IntKi), PARAMETER :: M33N9TDzss = 12771 + INTEGER(IntKi), PARAMETER :: M34N1TDzss = 12772 + INTEGER(IntKi), PARAMETER :: M34N2TDzss = 12773 + INTEGER(IntKi), PARAMETER :: M34N3TDzss = 12774 + INTEGER(IntKi), PARAMETER :: M34N4TDzss = 12775 + INTEGER(IntKi), PARAMETER :: M34N5TDzss = 12776 + INTEGER(IntKi), PARAMETER :: M34N6TDzss = 12777 + INTEGER(IntKi), PARAMETER :: M34N7TDzss = 12778 + INTEGER(IntKi), PARAMETER :: M34N8TDzss = 12779 + INTEGER(IntKi), PARAMETER :: M34N9TDzss = 12780 + INTEGER(IntKi), PARAMETER :: M35N1TDzss = 12781 + INTEGER(IntKi), PARAMETER :: M35N2TDzss = 12782 + INTEGER(IntKi), PARAMETER :: M35N3TDzss = 12783 + INTEGER(IntKi), PARAMETER :: M35N4TDzss = 12784 + INTEGER(IntKi), PARAMETER :: M35N5TDzss = 12785 + INTEGER(IntKi), PARAMETER :: M35N6TDzss = 12786 + INTEGER(IntKi), PARAMETER :: M35N7TDzss = 12787 + INTEGER(IntKi), PARAMETER :: M35N8TDzss = 12788 + INTEGER(IntKi), PARAMETER :: M35N9TDzss = 12789 + INTEGER(IntKi), PARAMETER :: M36N1TDzss = 12790 + INTEGER(IntKi), PARAMETER :: M36N2TDzss = 12791 + INTEGER(IntKi), PARAMETER :: M36N3TDzss = 12792 + INTEGER(IntKi), PARAMETER :: M36N4TDzss = 12793 + INTEGER(IntKi), PARAMETER :: M36N5TDzss = 12794 + INTEGER(IntKi), PARAMETER :: M36N6TDzss = 12795 + INTEGER(IntKi), PARAMETER :: M36N7TDzss = 12796 + INTEGER(IntKi), PARAMETER :: M36N8TDzss = 12797 + INTEGER(IntKi), PARAMETER :: M36N9TDzss = 12798 + INTEGER(IntKi), PARAMETER :: M37N1TDzss = 12799 + INTEGER(IntKi), PARAMETER :: M37N2TDzss = 12800 + INTEGER(IntKi), PARAMETER :: M37N3TDzss = 12801 + INTEGER(IntKi), PARAMETER :: M37N4TDzss = 12802 + INTEGER(IntKi), PARAMETER :: M37N5TDzss = 12803 + INTEGER(IntKi), PARAMETER :: M37N6TDzss = 12804 + INTEGER(IntKi), PARAMETER :: M37N7TDzss = 12805 + INTEGER(IntKi), PARAMETER :: M37N8TDzss = 12806 + INTEGER(IntKi), PARAMETER :: M37N9TDzss = 12807 + INTEGER(IntKi), PARAMETER :: M38N1TDzss = 12808 + INTEGER(IntKi), PARAMETER :: M38N2TDzss = 12809 + INTEGER(IntKi), PARAMETER :: M38N3TDzss = 12810 + INTEGER(IntKi), PARAMETER :: M38N4TDzss = 12811 + INTEGER(IntKi), PARAMETER :: M38N5TDzss = 12812 + INTEGER(IntKi), PARAMETER :: M38N6TDzss = 12813 + INTEGER(IntKi), PARAMETER :: M38N7TDzss = 12814 + INTEGER(IntKi), PARAMETER :: M38N8TDzss = 12815 + INTEGER(IntKi), PARAMETER :: M38N9TDzss = 12816 + INTEGER(IntKi), PARAMETER :: M39N1TDzss = 12817 + INTEGER(IntKi), PARAMETER :: M39N2TDzss = 12818 + INTEGER(IntKi), PARAMETER :: M39N3TDzss = 12819 + INTEGER(IntKi), PARAMETER :: M39N4TDzss = 12820 + INTEGER(IntKi), PARAMETER :: M39N5TDzss = 12821 + INTEGER(IntKi), PARAMETER :: M39N6TDzss = 12822 + INTEGER(IntKi), PARAMETER :: M39N7TDzss = 12823 + INTEGER(IntKi), PARAMETER :: M39N8TDzss = 12824 + INTEGER(IntKi), PARAMETER :: M39N9TDzss = 12825 + INTEGER(IntKi), PARAMETER :: M40N1TDzss = 12826 + INTEGER(IntKi), PARAMETER :: M40N2TDzss = 12827 + INTEGER(IntKi), PARAMETER :: M40N3TDzss = 12828 + INTEGER(IntKi), PARAMETER :: M40N4TDzss = 12829 + INTEGER(IntKi), PARAMETER :: M40N5TDzss = 12830 + INTEGER(IntKi), PARAMETER :: M40N6TDzss = 12831 + INTEGER(IntKi), PARAMETER :: M40N7TDzss = 12832 + INTEGER(IntKi), PARAMETER :: M40N8TDzss = 12833 + INTEGER(IntKi), PARAMETER :: M40N9TDzss = 12834 + INTEGER(IntKi), PARAMETER :: M41N1TDzss = 12835 + INTEGER(IntKi), PARAMETER :: M41N2TDzss = 12836 + INTEGER(IntKi), PARAMETER :: M41N3TDzss = 12837 + INTEGER(IntKi), PARAMETER :: M41N4TDzss = 12838 + INTEGER(IntKi), PARAMETER :: M41N5TDzss = 12839 + INTEGER(IntKi), PARAMETER :: M41N6TDzss = 12840 + INTEGER(IntKi), PARAMETER :: M41N7TDzss = 12841 + INTEGER(IntKi), PARAMETER :: M41N8TDzss = 12842 + INTEGER(IntKi), PARAMETER :: M41N9TDzss = 12843 + INTEGER(IntKi), PARAMETER :: M42N1TDzss = 12844 + INTEGER(IntKi), PARAMETER :: M42N2TDzss = 12845 + INTEGER(IntKi), PARAMETER :: M42N3TDzss = 12846 + INTEGER(IntKi), PARAMETER :: M42N4TDzss = 12847 + INTEGER(IntKi), PARAMETER :: M42N5TDzss = 12848 + INTEGER(IntKi), PARAMETER :: M42N6TDzss = 12849 + INTEGER(IntKi), PARAMETER :: M42N7TDzss = 12850 + INTEGER(IntKi), PARAMETER :: M42N8TDzss = 12851 + INTEGER(IntKi), PARAMETER :: M42N9TDzss = 12852 + INTEGER(IntKi), PARAMETER :: M43N1TDzss = 12853 + INTEGER(IntKi), PARAMETER :: M43N2TDzss = 12854 + INTEGER(IntKi), PARAMETER :: M43N3TDzss = 12855 + INTEGER(IntKi), PARAMETER :: M43N4TDzss = 12856 + INTEGER(IntKi), PARAMETER :: M43N5TDzss = 12857 + INTEGER(IntKi), PARAMETER :: M43N6TDzss = 12858 + INTEGER(IntKi), PARAMETER :: M43N7TDzss = 12859 + INTEGER(IntKi), PARAMETER :: M43N8TDzss = 12860 + INTEGER(IntKi), PARAMETER :: M43N9TDzss = 12861 + INTEGER(IntKi), PARAMETER :: M44N1TDzss = 12862 + INTEGER(IntKi), PARAMETER :: M44N2TDzss = 12863 + INTEGER(IntKi), PARAMETER :: M44N3TDzss = 12864 + INTEGER(IntKi), PARAMETER :: M44N4TDzss = 12865 + INTEGER(IntKi), PARAMETER :: M44N5TDzss = 12866 + INTEGER(IntKi), PARAMETER :: M44N6TDzss = 12867 + INTEGER(IntKi), PARAMETER :: M44N7TDzss = 12868 + INTEGER(IntKi), PARAMETER :: M44N8TDzss = 12869 + INTEGER(IntKi), PARAMETER :: M44N9TDzss = 12870 + INTEGER(IntKi), PARAMETER :: M45N1TDzss = 12871 + INTEGER(IntKi), PARAMETER :: M45N2TDzss = 12872 + INTEGER(IntKi), PARAMETER :: M45N3TDzss = 12873 + INTEGER(IntKi), PARAMETER :: M45N4TDzss = 12874 + INTEGER(IntKi), PARAMETER :: M45N5TDzss = 12875 + INTEGER(IntKi), PARAMETER :: M45N6TDzss = 12876 + INTEGER(IntKi), PARAMETER :: M45N7TDzss = 12877 + INTEGER(IntKi), PARAMETER :: M45N8TDzss = 12878 + INTEGER(IntKi), PARAMETER :: M45N9TDzss = 12879 + INTEGER(IntKi), PARAMETER :: M46N1TDzss = 12880 + INTEGER(IntKi), PARAMETER :: M46N2TDzss = 12881 + INTEGER(IntKi), PARAMETER :: M46N3TDzss = 12882 + INTEGER(IntKi), PARAMETER :: M46N4TDzss = 12883 + INTEGER(IntKi), PARAMETER :: M46N5TDzss = 12884 + INTEGER(IntKi), PARAMETER :: M46N6TDzss = 12885 + INTEGER(IntKi), PARAMETER :: M46N7TDzss = 12886 + INTEGER(IntKi), PARAMETER :: M46N8TDzss = 12887 + INTEGER(IntKi), PARAMETER :: M46N9TDzss = 12888 + INTEGER(IntKi), PARAMETER :: M47N1TDzss = 12889 + INTEGER(IntKi), PARAMETER :: M47N2TDzss = 12890 + INTEGER(IntKi), PARAMETER :: M47N3TDzss = 12891 + INTEGER(IntKi), PARAMETER :: M47N4TDzss = 12892 + INTEGER(IntKi), PARAMETER :: M47N5TDzss = 12893 + INTEGER(IntKi), PARAMETER :: M47N6TDzss = 12894 + INTEGER(IntKi), PARAMETER :: M47N7TDzss = 12895 + INTEGER(IntKi), PARAMETER :: M47N8TDzss = 12896 + INTEGER(IntKi), PARAMETER :: M47N9TDzss = 12897 + INTEGER(IntKi), PARAMETER :: M48N1TDzss = 12898 + INTEGER(IntKi), PARAMETER :: M48N2TDzss = 12899 + INTEGER(IntKi), PARAMETER :: M48N3TDzss = 12900 + INTEGER(IntKi), PARAMETER :: M48N4TDzss = 12901 + INTEGER(IntKi), PARAMETER :: M48N5TDzss = 12902 + INTEGER(IntKi), PARAMETER :: M48N6TDzss = 12903 + INTEGER(IntKi), PARAMETER :: M48N7TDzss = 12904 + INTEGER(IntKi), PARAMETER :: M48N8TDzss = 12905 + INTEGER(IntKi), PARAMETER :: M48N9TDzss = 12906 + INTEGER(IntKi), PARAMETER :: M49N1TDzss = 12907 + INTEGER(IntKi), PARAMETER :: M49N2TDzss = 12908 + INTEGER(IntKi), PARAMETER :: M49N3TDzss = 12909 + INTEGER(IntKi), PARAMETER :: M49N4TDzss = 12910 + INTEGER(IntKi), PARAMETER :: M49N5TDzss = 12911 + INTEGER(IntKi), PARAMETER :: M49N6TDzss = 12912 + INTEGER(IntKi), PARAMETER :: M49N7TDzss = 12913 + INTEGER(IntKi), PARAMETER :: M49N8TDzss = 12914 + INTEGER(IntKi), PARAMETER :: M49N9TDzss = 12915 + INTEGER(IntKi), PARAMETER :: M50N1TDzss = 12916 + INTEGER(IntKi), PARAMETER :: M50N2TDzss = 12917 + INTEGER(IntKi), PARAMETER :: M50N3TDzss = 12918 + INTEGER(IntKi), PARAMETER :: M50N4TDzss = 12919 + INTEGER(IntKi), PARAMETER :: M50N5TDzss = 12920 + INTEGER(IntKi), PARAMETER :: M50N6TDzss = 12921 + INTEGER(IntKi), PARAMETER :: M50N7TDzss = 12922 + INTEGER(IntKi), PARAMETER :: M50N8TDzss = 12923 + INTEGER(IntKi), PARAMETER :: M50N9TDzss = 12924 + INTEGER(IntKi), PARAMETER :: M51N1TDzss = 12925 + INTEGER(IntKi), PARAMETER :: M51N2TDzss = 12926 + INTEGER(IntKi), PARAMETER :: M51N3TDzss = 12927 + INTEGER(IntKi), PARAMETER :: M51N4TDzss = 12928 + INTEGER(IntKi), PARAMETER :: M51N5TDzss = 12929 + INTEGER(IntKi), PARAMETER :: M51N6TDzss = 12930 + INTEGER(IntKi), PARAMETER :: M51N7TDzss = 12931 + INTEGER(IntKi), PARAMETER :: M51N8TDzss = 12932 + INTEGER(IntKi), PARAMETER :: M51N9TDzss = 12933 + INTEGER(IntKi), PARAMETER :: M52N1TDzss = 12934 + INTEGER(IntKi), PARAMETER :: M52N2TDzss = 12935 + INTEGER(IntKi), PARAMETER :: M52N3TDzss = 12936 + INTEGER(IntKi), PARAMETER :: M52N4TDzss = 12937 + INTEGER(IntKi), PARAMETER :: M52N5TDzss = 12938 + INTEGER(IntKi), PARAMETER :: M52N6TDzss = 12939 + INTEGER(IntKi), PARAMETER :: M52N7TDzss = 12940 + INTEGER(IntKi), PARAMETER :: M52N8TDzss = 12941 + INTEGER(IntKi), PARAMETER :: M52N9TDzss = 12942 + INTEGER(IntKi), PARAMETER :: M53N1TDzss = 12943 + INTEGER(IntKi), PARAMETER :: M53N2TDzss = 12944 + INTEGER(IntKi), PARAMETER :: M53N3TDzss = 12945 + INTEGER(IntKi), PARAMETER :: M53N4TDzss = 12946 + INTEGER(IntKi), PARAMETER :: M53N5TDzss = 12947 + INTEGER(IntKi), PARAMETER :: M53N6TDzss = 12948 + INTEGER(IntKi), PARAMETER :: M53N7TDzss = 12949 + INTEGER(IntKi), PARAMETER :: M53N8TDzss = 12950 + INTEGER(IntKi), PARAMETER :: M53N9TDzss = 12951 + INTEGER(IntKi), PARAMETER :: M54N1TDzss = 12952 + INTEGER(IntKi), PARAMETER :: M54N2TDzss = 12953 + INTEGER(IntKi), PARAMETER :: M54N3TDzss = 12954 + INTEGER(IntKi), PARAMETER :: M54N4TDzss = 12955 + INTEGER(IntKi), PARAMETER :: M54N5TDzss = 12956 + INTEGER(IntKi), PARAMETER :: M54N6TDzss = 12957 + INTEGER(IntKi), PARAMETER :: M54N7TDzss = 12958 + INTEGER(IntKi), PARAMETER :: M54N8TDzss = 12959 + INTEGER(IntKi), PARAMETER :: M54N9TDzss = 12960 + INTEGER(IntKi), PARAMETER :: M55N1TDzss = 12961 + INTEGER(IntKi), PARAMETER :: M55N2TDzss = 12962 + INTEGER(IntKi), PARAMETER :: M55N3TDzss = 12963 + INTEGER(IntKi), PARAMETER :: M55N4TDzss = 12964 + INTEGER(IntKi), PARAMETER :: M55N5TDzss = 12965 + INTEGER(IntKi), PARAMETER :: M55N6TDzss = 12966 + INTEGER(IntKi), PARAMETER :: M55N7TDzss = 12967 + INTEGER(IntKi), PARAMETER :: M55N8TDzss = 12968 + INTEGER(IntKi), PARAMETER :: M55N9TDzss = 12969 + INTEGER(IntKi), PARAMETER :: M56N1TDzss = 12970 + INTEGER(IntKi), PARAMETER :: M56N2TDzss = 12971 + INTEGER(IntKi), PARAMETER :: M56N3TDzss = 12972 + INTEGER(IntKi), PARAMETER :: M56N4TDzss = 12973 + INTEGER(IntKi), PARAMETER :: M56N5TDzss = 12974 + INTEGER(IntKi), PARAMETER :: M56N6TDzss = 12975 + INTEGER(IntKi), PARAMETER :: M56N7TDzss = 12976 + INTEGER(IntKi), PARAMETER :: M56N8TDzss = 12977 + INTEGER(IntKi), PARAMETER :: M56N9TDzss = 12978 + INTEGER(IntKi), PARAMETER :: M57N1TDzss = 12979 + INTEGER(IntKi), PARAMETER :: M57N2TDzss = 12980 + INTEGER(IntKi), PARAMETER :: M57N3TDzss = 12981 + INTEGER(IntKi), PARAMETER :: M57N4TDzss = 12982 + INTEGER(IntKi), PARAMETER :: M57N5TDzss = 12983 + INTEGER(IntKi), PARAMETER :: M57N6TDzss = 12984 + INTEGER(IntKi), PARAMETER :: M57N7TDzss = 12985 + INTEGER(IntKi), PARAMETER :: M57N8TDzss = 12986 + INTEGER(IntKi), PARAMETER :: M57N9TDzss = 12987 + INTEGER(IntKi), PARAMETER :: M58N1TDzss = 12988 + INTEGER(IntKi), PARAMETER :: M58N2TDzss = 12989 + INTEGER(IntKi), PARAMETER :: M58N3TDzss = 12990 + INTEGER(IntKi), PARAMETER :: M58N4TDzss = 12991 + INTEGER(IntKi), PARAMETER :: M58N5TDzss = 12992 + INTEGER(IntKi), PARAMETER :: M58N6TDzss = 12993 + INTEGER(IntKi), PARAMETER :: M58N7TDzss = 12994 + INTEGER(IntKi), PARAMETER :: M58N8TDzss = 12995 + INTEGER(IntKi), PARAMETER :: M58N9TDzss = 12996 + INTEGER(IntKi), PARAMETER :: M59N1TDzss = 12997 + INTEGER(IntKi), PARAMETER :: M59N2TDzss = 12998 + INTEGER(IntKi), PARAMETER :: M59N3TDzss = 12999 + INTEGER(IntKi), PARAMETER :: M59N4TDzss = 13000 + INTEGER(IntKi), PARAMETER :: M59N5TDzss = 13001 + INTEGER(IntKi), PARAMETER :: M59N6TDzss = 13002 + INTEGER(IntKi), PARAMETER :: M59N7TDzss = 13003 + INTEGER(IntKi), PARAMETER :: M59N8TDzss = 13004 + INTEGER(IntKi), PARAMETER :: M59N9TDzss = 13005 + INTEGER(IntKi), PARAMETER :: M60N1TDzss = 13006 + INTEGER(IntKi), PARAMETER :: M60N2TDzss = 13007 + INTEGER(IntKi), PARAMETER :: M60N3TDzss = 13008 + INTEGER(IntKi), PARAMETER :: M60N4TDzss = 13009 + INTEGER(IntKi), PARAMETER :: M60N5TDzss = 13010 + INTEGER(IntKi), PARAMETER :: M60N6TDzss = 13011 + INTEGER(IntKi), PARAMETER :: M60N7TDzss = 13012 + INTEGER(IntKi), PARAMETER :: M60N8TDzss = 13013 + INTEGER(IntKi), PARAMETER :: M60N9TDzss = 13014 + INTEGER(IntKi), PARAMETER :: M61N1TDzss = 13015 + INTEGER(IntKi), PARAMETER :: M61N2TDzss = 13016 + INTEGER(IntKi), PARAMETER :: M61N3TDzss = 13017 + INTEGER(IntKi), PARAMETER :: M61N4TDzss = 13018 + INTEGER(IntKi), PARAMETER :: M61N5TDzss = 13019 + INTEGER(IntKi), PARAMETER :: M61N6TDzss = 13020 + INTEGER(IntKi), PARAMETER :: M61N7TDzss = 13021 + INTEGER(IntKi), PARAMETER :: M61N8TDzss = 13022 + INTEGER(IntKi), PARAMETER :: M61N9TDzss = 13023 + INTEGER(IntKi), PARAMETER :: M62N1TDzss = 13024 + INTEGER(IntKi), PARAMETER :: M62N2TDzss = 13025 + INTEGER(IntKi), PARAMETER :: M62N3TDzss = 13026 + INTEGER(IntKi), PARAMETER :: M62N4TDzss = 13027 + INTEGER(IntKi), PARAMETER :: M62N5TDzss = 13028 + INTEGER(IntKi), PARAMETER :: M62N6TDzss = 13029 + INTEGER(IntKi), PARAMETER :: M62N7TDzss = 13030 + INTEGER(IntKi), PARAMETER :: M62N8TDzss = 13031 + INTEGER(IntKi), PARAMETER :: M62N9TDzss = 13032 + INTEGER(IntKi), PARAMETER :: M63N1TDzss = 13033 + INTEGER(IntKi), PARAMETER :: M63N2TDzss = 13034 + INTEGER(IntKi), PARAMETER :: M63N3TDzss = 13035 + INTEGER(IntKi), PARAMETER :: M63N4TDzss = 13036 + INTEGER(IntKi), PARAMETER :: M63N5TDzss = 13037 + INTEGER(IntKi), PARAMETER :: M63N6TDzss = 13038 + INTEGER(IntKi), PARAMETER :: M63N7TDzss = 13039 + INTEGER(IntKi), PARAMETER :: M63N8TDzss = 13040 + INTEGER(IntKi), PARAMETER :: M63N9TDzss = 13041 + INTEGER(IntKi), PARAMETER :: M64N1TDzss = 13042 + INTEGER(IntKi), PARAMETER :: M64N2TDzss = 13043 + INTEGER(IntKi), PARAMETER :: M64N3TDzss = 13044 + INTEGER(IntKi), PARAMETER :: M64N4TDzss = 13045 + INTEGER(IntKi), PARAMETER :: M64N5TDzss = 13046 + INTEGER(IntKi), PARAMETER :: M64N6TDzss = 13047 + INTEGER(IntKi), PARAMETER :: M64N7TDzss = 13048 + INTEGER(IntKi), PARAMETER :: M64N8TDzss = 13049 + INTEGER(IntKi), PARAMETER :: M64N9TDzss = 13050 + INTEGER(IntKi), PARAMETER :: M65N1TDzss = 13051 + INTEGER(IntKi), PARAMETER :: M65N2TDzss = 13052 + INTEGER(IntKi), PARAMETER :: M65N3TDzss = 13053 + INTEGER(IntKi), PARAMETER :: M65N4TDzss = 13054 + INTEGER(IntKi), PARAMETER :: M65N5TDzss = 13055 + INTEGER(IntKi), PARAMETER :: M65N6TDzss = 13056 + INTEGER(IntKi), PARAMETER :: M65N7TDzss = 13057 + INTEGER(IntKi), PARAMETER :: M65N8TDzss = 13058 + INTEGER(IntKi), PARAMETER :: M65N9TDzss = 13059 + INTEGER(IntKi), PARAMETER :: M66N1TDzss = 13060 + INTEGER(IntKi), PARAMETER :: M66N2TDzss = 13061 + INTEGER(IntKi), PARAMETER :: M66N3TDzss = 13062 + INTEGER(IntKi), PARAMETER :: M66N4TDzss = 13063 + INTEGER(IntKi), PARAMETER :: M66N5TDzss = 13064 + INTEGER(IntKi), PARAMETER :: M66N6TDzss = 13065 + INTEGER(IntKi), PARAMETER :: M66N7TDzss = 13066 + INTEGER(IntKi), PARAMETER :: M66N8TDzss = 13067 + INTEGER(IntKi), PARAMETER :: M66N9TDzss = 13068 + INTEGER(IntKi), PARAMETER :: M67N1TDzss = 13069 + INTEGER(IntKi), PARAMETER :: M67N2TDzss = 13070 + INTEGER(IntKi), PARAMETER :: M67N3TDzss = 13071 + INTEGER(IntKi), PARAMETER :: M67N4TDzss = 13072 + INTEGER(IntKi), PARAMETER :: M67N5TDzss = 13073 + INTEGER(IntKi), PARAMETER :: M67N6TDzss = 13074 + INTEGER(IntKi), PARAMETER :: M67N7TDzss = 13075 + INTEGER(IntKi), PARAMETER :: M67N8TDzss = 13076 + INTEGER(IntKi), PARAMETER :: M67N9TDzss = 13077 + INTEGER(IntKi), PARAMETER :: M68N1TDzss = 13078 + INTEGER(IntKi), PARAMETER :: M68N2TDzss = 13079 + INTEGER(IntKi), PARAMETER :: M68N3TDzss = 13080 + INTEGER(IntKi), PARAMETER :: M68N4TDzss = 13081 + INTEGER(IntKi), PARAMETER :: M68N5TDzss = 13082 + INTEGER(IntKi), PARAMETER :: M68N6TDzss = 13083 + INTEGER(IntKi), PARAMETER :: M68N7TDzss = 13084 + INTEGER(IntKi), PARAMETER :: M68N8TDzss = 13085 + INTEGER(IntKi), PARAMETER :: M68N9TDzss = 13086 + INTEGER(IntKi), PARAMETER :: M69N1TDzss = 13087 + INTEGER(IntKi), PARAMETER :: M69N2TDzss = 13088 + INTEGER(IntKi), PARAMETER :: M69N3TDzss = 13089 + INTEGER(IntKi), PARAMETER :: M69N4TDzss = 13090 + INTEGER(IntKi), PARAMETER :: M69N5TDzss = 13091 + INTEGER(IntKi), PARAMETER :: M69N6TDzss = 13092 + INTEGER(IntKi), PARAMETER :: M69N7TDzss = 13093 + INTEGER(IntKi), PARAMETER :: M69N8TDzss = 13094 + INTEGER(IntKi), PARAMETER :: M69N9TDzss = 13095 + INTEGER(IntKi), PARAMETER :: M70N1TDzss = 13096 + INTEGER(IntKi), PARAMETER :: M70N2TDzss = 13097 + INTEGER(IntKi), PARAMETER :: M70N3TDzss = 13098 + INTEGER(IntKi), PARAMETER :: M70N4TDzss = 13099 + INTEGER(IntKi), PARAMETER :: M70N5TDzss = 13100 + INTEGER(IntKi), PARAMETER :: M70N6TDzss = 13101 + INTEGER(IntKi), PARAMETER :: M70N7TDzss = 13102 + INTEGER(IntKi), PARAMETER :: M70N8TDzss = 13103 + INTEGER(IntKi), PARAMETER :: M70N9TDzss = 13104 + INTEGER(IntKi), PARAMETER :: M71N1TDzss = 13105 + INTEGER(IntKi), PARAMETER :: M71N2TDzss = 13106 + INTEGER(IntKi), PARAMETER :: M71N3TDzss = 13107 + INTEGER(IntKi), PARAMETER :: M71N4TDzss = 13108 + INTEGER(IntKi), PARAMETER :: M71N5TDzss = 13109 + INTEGER(IntKi), PARAMETER :: M71N6TDzss = 13110 + INTEGER(IntKi), PARAMETER :: M71N7TDzss = 13111 + INTEGER(IntKi), PARAMETER :: M71N8TDzss = 13112 + INTEGER(IntKi), PARAMETER :: M71N9TDzss = 13113 + INTEGER(IntKi), PARAMETER :: M72N1TDzss = 13114 + INTEGER(IntKi), PARAMETER :: M72N2TDzss = 13115 + INTEGER(IntKi), PARAMETER :: M72N3TDzss = 13116 + INTEGER(IntKi), PARAMETER :: M72N4TDzss = 13117 + INTEGER(IntKi), PARAMETER :: M72N5TDzss = 13118 + INTEGER(IntKi), PARAMETER :: M72N6TDzss = 13119 + INTEGER(IntKi), PARAMETER :: M72N7TDzss = 13120 + INTEGER(IntKi), PARAMETER :: M72N8TDzss = 13121 + INTEGER(IntKi), PARAMETER :: M72N9TDzss = 13122 + INTEGER(IntKi), PARAMETER :: M73N1TDzss = 13123 + INTEGER(IntKi), PARAMETER :: M73N2TDzss = 13124 + INTEGER(IntKi), PARAMETER :: M73N3TDzss = 13125 + INTEGER(IntKi), PARAMETER :: M73N4TDzss = 13126 + INTEGER(IntKi), PARAMETER :: M73N5TDzss = 13127 + INTEGER(IntKi), PARAMETER :: M73N6TDzss = 13128 + INTEGER(IntKi), PARAMETER :: M73N7TDzss = 13129 + INTEGER(IntKi), PARAMETER :: M73N8TDzss = 13130 + INTEGER(IntKi), PARAMETER :: M73N9TDzss = 13131 + INTEGER(IntKi), PARAMETER :: M74N1TDzss = 13132 + INTEGER(IntKi), PARAMETER :: M74N2TDzss = 13133 + INTEGER(IntKi), PARAMETER :: M74N3TDzss = 13134 + INTEGER(IntKi), PARAMETER :: M74N4TDzss = 13135 + INTEGER(IntKi), PARAMETER :: M74N5TDzss = 13136 + INTEGER(IntKi), PARAMETER :: M74N6TDzss = 13137 + INTEGER(IntKi), PARAMETER :: M74N7TDzss = 13138 + INTEGER(IntKi), PARAMETER :: M74N8TDzss = 13139 + INTEGER(IntKi), PARAMETER :: M74N9TDzss = 13140 + INTEGER(IntKi), PARAMETER :: M75N1TDzss = 13141 + INTEGER(IntKi), PARAMETER :: M75N2TDzss = 13142 + INTEGER(IntKi), PARAMETER :: M75N3TDzss = 13143 + INTEGER(IntKi), PARAMETER :: M75N4TDzss = 13144 + INTEGER(IntKi), PARAMETER :: M75N5TDzss = 13145 + INTEGER(IntKi), PARAMETER :: M75N6TDzss = 13146 + INTEGER(IntKi), PARAMETER :: M75N7TDzss = 13147 + INTEGER(IntKi), PARAMETER :: M75N8TDzss = 13148 + INTEGER(IntKi), PARAMETER :: M75N9TDzss = 13149 + INTEGER(IntKi), PARAMETER :: M76N1TDzss = 13150 + INTEGER(IntKi), PARAMETER :: M76N2TDzss = 13151 + INTEGER(IntKi), PARAMETER :: M76N3TDzss = 13152 + INTEGER(IntKi), PARAMETER :: M76N4TDzss = 13153 + INTEGER(IntKi), PARAMETER :: M76N5TDzss = 13154 + INTEGER(IntKi), PARAMETER :: M76N6TDzss = 13155 + INTEGER(IntKi), PARAMETER :: M76N7TDzss = 13156 + INTEGER(IntKi), PARAMETER :: M76N8TDzss = 13157 + INTEGER(IntKi), PARAMETER :: M76N9TDzss = 13158 + INTEGER(IntKi), PARAMETER :: M77N1TDzss = 13159 + INTEGER(IntKi), PARAMETER :: M77N2TDzss = 13160 + INTEGER(IntKi), PARAMETER :: M77N3TDzss = 13161 + INTEGER(IntKi), PARAMETER :: M77N4TDzss = 13162 + INTEGER(IntKi), PARAMETER :: M77N5TDzss = 13163 + INTEGER(IntKi), PARAMETER :: M77N6TDzss = 13164 + INTEGER(IntKi), PARAMETER :: M77N7TDzss = 13165 + INTEGER(IntKi), PARAMETER :: M77N8TDzss = 13166 + INTEGER(IntKi), PARAMETER :: M77N9TDzss = 13167 + INTEGER(IntKi), PARAMETER :: M78N1TDzss = 13168 + INTEGER(IntKi), PARAMETER :: M78N2TDzss = 13169 + INTEGER(IntKi), PARAMETER :: M78N3TDzss = 13170 + INTEGER(IntKi), PARAMETER :: M78N4TDzss = 13171 + INTEGER(IntKi), PARAMETER :: M78N5TDzss = 13172 + INTEGER(IntKi), PARAMETER :: M78N6TDzss = 13173 + INTEGER(IntKi), PARAMETER :: M78N7TDzss = 13174 + INTEGER(IntKi), PARAMETER :: M78N8TDzss = 13175 + INTEGER(IntKi), PARAMETER :: M78N9TDzss = 13176 + INTEGER(IntKi), PARAMETER :: M79N1TDzss = 13177 + INTEGER(IntKi), PARAMETER :: M79N2TDzss = 13178 + INTEGER(IntKi), PARAMETER :: M79N3TDzss = 13179 + INTEGER(IntKi), PARAMETER :: M79N4TDzss = 13180 + INTEGER(IntKi), PARAMETER :: M79N5TDzss = 13181 + INTEGER(IntKi), PARAMETER :: M79N6TDzss = 13182 + INTEGER(IntKi), PARAMETER :: M79N7TDzss = 13183 + INTEGER(IntKi), PARAMETER :: M79N8TDzss = 13184 + INTEGER(IntKi), PARAMETER :: M79N9TDzss = 13185 + INTEGER(IntKi), PARAMETER :: M80N1TDzss = 13186 + INTEGER(IntKi), PARAMETER :: M80N2TDzss = 13187 + INTEGER(IntKi), PARAMETER :: M80N3TDzss = 13188 + INTEGER(IntKi), PARAMETER :: M80N4TDzss = 13189 + INTEGER(IntKi), PARAMETER :: M80N5TDzss = 13190 + INTEGER(IntKi), PARAMETER :: M80N6TDzss = 13191 + INTEGER(IntKi), PARAMETER :: M80N7TDzss = 13192 + INTEGER(IntKi), PARAMETER :: M80N8TDzss = 13193 + INTEGER(IntKi), PARAMETER :: M80N9TDzss = 13194 + INTEGER(IntKi), PARAMETER :: M81N1TDzss = 13195 + INTEGER(IntKi), PARAMETER :: M81N2TDzss = 13196 + INTEGER(IntKi), PARAMETER :: M81N3TDzss = 13197 + INTEGER(IntKi), PARAMETER :: M81N4TDzss = 13198 + INTEGER(IntKi), PARAMETER :: M81N5TDzss = 13199 + INTEGER(IntKi), PARAMETER :: M81N6TDzss = 13200 + INTEGER(IntKi), PARAMETER :: M81N7TDzss = 13201 + INTEGER(IntKi), PARAMETER :: M81N8TDzss = 13202 + INTEGER(IntKi), PARAMETER :: M81N9TDzss = 13203 + INTEGER(IntKi), PARAMETER :: M82N1TDzss = 13204 + INTEGER(IntKi), PARAMETER :: M82N2TDzss = 13205 + INTEGER(IntKi), PARAMETER :: M82N3TDzss = 13206 + INTEGER(IntKi), PARAMETER :: M82N4TDzss = 13207 + INTEGER(IntKi), PARAMETER :: M82N5TDzss = 13208 + INTEGER(IntKi), PARAMETER :: M82N6TDzss = 13209 + INTEGER(IntKi), PARAMETER :: M82N7TDzss = 13210 + INTEGER(IntKi), PARAMETER :: M82N8TDzss = 13211 + INTEGER(IntKi), PARAMETER :: M82N9TDzss = 13212 + INTEGER(IntKi), PARAMETER :: M83N1TDzss = 13213 + INTEGER(IntKi), PARAMETER :: M83N2TDzss = 13214 + INTEGER(IntKi), PARAMETER :: M83N3TDzss = 13215 + INTEGER(IntKi), PARAMETER :: M83N4TDzss = 13216 + INTEGER(IntKi), PARAMETER :: M83N5TDzss = 13217 + INTEGER(IntKi), PARAMETER :: M83N6TDzss = 13218 + INTEGER(IntKi), PARAMETER :: M83N7TDzss = 13219 + INTEGER(IntKi), PARAMETER :: M83N8TDzss = 13220 + INTEGER(IntKi), PARAMETER :: M83N9TDzss = 13221 + INTEGER(IntKi), PARAMETER :: M84N1TDzss = 13222 + INTEGER(IntKi), PARAMETER :: M84N2TDzss = 13223 + INTEGER(IntKi), PARAMETER :: M84N3TDzss = 13224 + INTEGER(IntKi), PARAMETER :: M84N4TDzss = 13225 + INTEGER(IntKi), PARAMETER :: M84N5TDzss = 13226 + INTEGER(IntKi), PARAMETER :: M84N6TDzss = 13227 + INTEGER(IntKi), PARAMETER :: M84N7TDzss = 13228 + INTEGER(IntKi), PARAMETER :: M84N8TDzss = 13229 + INTEGER(IntKi), PARAMETER :: M84N9TDzss = 13230 + INTEGER(IntKi), PARAMETER :: M85N1TDzss = 13231 + INTEGER(IntKi), PARAMETER :: M85N2TDzss = 13232 + INTEGER(IntKi), PARAMETER :: M85N3TDzss = 13233 + INTEGER(IntKi), PARAMETER :: M85N4TDzss = 13234 + INTEGER(IntKi), PARAMETER :: M85N5TDzss = 13235 + INTEGER(IntKi), PARAMETER :: M85N6TDzss = 13236 + INTEGER(IntKi), PARAMETER :: M85N7TDzss = 13237 + INTEGER(IntKi), PARAMETER :: M85N8TDzss = 13238 + INTEGER(IntKi), PARAMETER :: M85N9TDzss = 13239 + INTEGER(IntKi), PARAMETER :: M86N1TDzss = 13240 + INTEGER(IntKi), PARAMETER :: M86N2TDzss = 13241 + INTEGER(IntKi), PARAMETER :: M86N3TDzss = 13242 + INTEGER(IntKi), PARAMETER :: M86N4TDzss = 13243 + INTEGER(IntKi), PARAMETER :: M86N5TDzss = 13244 + INTEGER(IntKi), PARAMETER :: M86N6TDzss = 13245 + INTEGER(IntKi), PARAMETER :: M86N7TDzss = 13246 + INTEGER(IntKi), PARAMETER :: M86N8TDzss = 13247 + INTEGER(IntKi), PARAMETER :: M86N9TDzss = 13248 + INTEGER(IntKi), PARAMETER :: M87N1TDzss = 13249 + INTEGER(IntKi), PARAMETER :: M87N2TDzss = 13250 + INTEGER(IntKi), PARAMETER :: M87N3TDzss = 13251 + INTEGER(IntKi), PARAMETER :: M87N4TDzss = 13252 + INTEGER(IntKi), PARAMETER :: M87N5TDzss = 13253 + INTEGER(IntKi), PARAMETER :: M87N6TDzss = 13254 + INTEGER(IntKi), PARAMETER :: M87N7TDzss = 13255 + INTEGER(IntKi), PARAMETER :: M87N8TDzss = 13256 + INTEGER(IntKi), PARAMETER :: M87N9TDzss = 13257 + INTEGER(IntKi), PARAMETER :: M88N1TDzss = 13258 + INTEGER(IntKi), PARAMETER :: M88N2TDzss = 13259 + INTEGER(IntKi), PARAMETER :: M88N3TDzss = 13260 + INTEGER(IntKi), PARAMETER :: M88N4TDzss = 13261 + INTEGER(IntKi), PARAMETER :: M88N5TDzss = 13262 + INTEGER(IntKi), PARAMETER :: M88N6TDzss = 13263 + INTEGER(IntKi), PARAMETER :: M88N7TDzss = 13264 + INTEGER(IntKi), PARAMETER :: M88N8TDzss = 13265 + INTEGER(IntKi), PARAMETER :: M88N9TDzss = 13266 + INTEGER(IntKi), PARAMETER :: M89N1TDzss = 13267 + INTEGER(IntKi), PARAMETER :: M89N2TDzss = 13268 + INTEGER(IntKi), PARAMETER :: M89N3TDzss = 13269 + INTEGER(IntKi), PARAMETER :: M89N4TDzss = 13270 + INTEGER(IntKi), PARAMETER :: M89N5TDzss = 13271 + INTEGER(IntKi), PARAMETER :: M89N6TDzss = 13272 + INTEGER(IntKi), PARAMETER :: M89N7TDzss = 13273 + INTEGER(IntKi), PARAMETER :: M89N8TDzss = 13274 + INTEGER(IntKi), PARAMETER :: M89N9TDzss = 13275 + INTEGER(IntKi), PARAMETER :: M90N1TDzss = 13276 + INTEGER(IntKi), PARAMETER :: M90N2TDzss = 13277 + INTEGER(IntKi), PARAMETER :: M90N3TDzss = 13278 + INTEGER(IntKi), PARAMETER :: M90N4TDzss = 13279 + INTEGER(IntKi), PARAMETER :: M90N5TDzss = 13280 + INTEGER(IntKi), PARAMETER :: M90N6TDzss = 13281 + INTEGER(IntKi), PARAMETER :: M90N7TDzss = 13282 + INTEGER(IntKi), PARAMETER :: M90N8TDzss = 13283 + INTEGER(IntKi), PARAMETER :: M90N9TDzss = 13284 + INTEGER(IntKi), PARAMETER :: M91N1TDzss = 13285 + INTEGER(IntKi), PARAMETER :: M91N2TDzss = 13286 + INTEGER(IntKi), PARAMETER :: M91N3TDzss = 13287 + INTEGER(IntKi), PARAMETER :: M91N4TDzss = 13288 + INTEGER(IntKi), PARAMETER :: M91N5TDzss = 13289 + INTEGER(IntKi), PARAMETER :: M91N6TDzss = 13290 + INTEGER(IntKi), PARAMETER :: M91N7TDzss = 13291 + INTEGER(IntKi), PARAMETER :: M91N8TDzss = 13292 + INTEGER(IntKi), PARAMETER :: M91N9TDzss = 13293 + INTEGER(IntKi), PARAMETER :: M92N1TDzss = 13294 + INTEGER(IntKi), PARAMETER :: M92N2TDzss = 13295 + INTEGER(IntKi), PARAMETER :: M92N3TDzss = 13296 + INTEGER(IntKi), PARAMETER :: M92N4TDzss = 13297 + INTEGER(IntKi), PARAMETER :: M92N5TDzss = 13298 + INTEGER(IntKi), PARAMETER :: M92N6TDzss = 13299 + INTEGER(IntKi), PARAMETER :: M92N7TDzss = 13300 + INTEGER(IntKi), PARAMETER :: M92N8TDzss = 13301 + INTEGER(IntKi), PARAMETER :: M92N9TDzss = 13302 + INTEGER(IntKi), PARAMETER :: M93N1TDzss = 13303 + INTEGER(IntKi), PARAMETER :: M93N2TDzss = 13304 + INTEGER(IntKi), PARAMETER :: M93N3TDzss = 13305 + INTEGER(IntKi), PARAMETER :: M93N4TDzss = 13306 + INTEGER(IntKi), PARAMETER :: M93N5TDzss = 13307 + INTEGER(IntKi), PARAMETER :: M93N6TDzss = 13308 + INTEGER(IntKi), PARAMETER :: M93N7TDzss = 13309 + INTEGER(IntKi), PARAMETER :: M93N8TDzss = 13310 + INTEGER(IntKi), PARAMETER :: M93N9TDzss = 13311 + INTEGER(IntKi), PARAMETER :: M94N1TDzss = 13312 + INTEGER(IntKi), PARAMETER :: M94N2TDzss = 13313 + INTEGER(IntKi), PARAMETER :: M94N3TDzss = 13314 + INTEGER(IntKi), PARAMETER :: M94N4TDzss = 13315 + INTEGER(IntKi), PARAMETER :: M94N5TDzss = 13316 + INTEGER(IntKi), PARAMETER :: M94N6TDzss = 13317 + INTEGER(IntKi), PARAMETER :: M94N7TDzss = 13318 + INTEGER(IntKi), PARAMETER :: M94N8TDzss = 13319 + INTEGER(IntKi), PARAMETER :: M94N9TDzss = 13320 + INTEGER(IntKi), PARAMETER :: M95N1TDzss = 13321 + INTEGER(IntKi), PARAMETER :: M95N2TDzss = 13322 + INTEGER(IntKi), PARAMETER :: M95N3TDzss = 13323 + INTEGER(IntKi), PARAMETER :: M95N4TDzss = 13324 + INTEGER(IntKi), PARAMETER :: M95N5TDzss = 13325 + INTEGER(IntKi), PARAMETER :: M95N6TDzss = 13326 + INTEGER(IntKi), PARAMETER :: M95N7TDzss = 13327 + INTEGER(IntKi), PARAMETER :: M95N8TDzss = 13328 + INTEGER(IntKi), PARAMETER :: M95N9TDzss = 13329 + INTEGER(IntKi), PARAMETER :: M96N1TDzss = 13330 + INTEGER(IntKi), PARAMETER :: M96N2TDzss = 13331 + INTEGER(IntKi), PARAMETER :: M96N3TDzss = 13332 + INTEGER(IntKi), PARAMETER :: M96N4TDzss = 13333 + INTEGER(IntKi), PARAMETER :: M96N5TDzss = 13334 + INTEGER(IntKi), PARAMETER :: M96N6TDzss = 13335 + INTEGER(IntKi), PARAMETER :: M96N7TDzss = 13336 + INTEGER(IntKi), PARAMETER :: M96N8TDzss = 13337 + INTEGER(IntKi), PARAMETER :: M96N9TDzss = 13338 + INTEGER(IntKi), PARAMETER :: M97N1TDzss = 13339 + INTEGER(IntKi), PARAMETER :: M97N2TDzss = 13340 + INTEGER(IntKi), PARAMETER :: M97N3TDzss = 13341 + INTEGER(IntKi), PARAMETER :: M97N4TDzss = 13342 + INTEGER(IntKi), PARAMETER :: M97N5TDzss = 13343 + INTEGER(IntKi), PARAMETER :: M97N6TDzss = 13344 + INTEGER(IntKi), PARAMETER :: M97N7TDzss = 13345 + INTEGER(IntKi), PARAMETER :: M97N8TDzss = 13346 + INTEGER(IntKi), PARAMETER :: M97N9TDzss = 13347 + INTEGER(IntKi), PARAMETER :: M98N1TDzss = 13348 + INTEGER(IntKi), PARAMETER :: M98N2TDzss = 13349 + INTEGER(IntKi), PARAMETER :: M98N3TDzss = 13350 + INTEGER(IntKi), PARAMETER :: M98N4TDzss = 13351 + INTEGER(IntKi), PARAMETER :: M98N5TDzss = 13352 + INTEGER(IntKi), PARAMETER :: M98N6TDzss = 13353 + INTEGER(IntKi), PARAMETER :: M98N7TDzss = 13354 + INTEGER(IntKi), PARAMETER :: M98N8TDzss = 13355 + INTEGER(IntKi), PARAMETER :: M98N9TDzss = 13356 + INTEGER(IntKi), PARAMETER :: M99N1TDzss = 13357 + INTEGER(IntKi), PARAMETER :: M99N2TDzss = 13358 + INTEGER(IntKi), PARAMETER :: M99N3TDzss = 13359 + INTEGER(IntKi), PARAMETER :: M99N4TDzss = 13360 + INTEGER(IntKi), PARAMETER :: M99N5TDzss = 13361 + INTEGER(IntKi), PARAMETER :: M99N6TDzss = 13362 + INTEGER(IntKi), PARAMETER :: M99N7TDzss = 13363 + INTEGER(IntKi), PARAMETER :: M99N8TDzss = 13364 + INTEGER(IntKi), PARAMETER :: M99N9TDzss = 13365 + INTEGER(IntKi), PARAMETER :: M01N1RDxe = 13366 + INTEGER(IntKi), PARAMETER :: M01N2RDxe = 13367 + INTEGER(IntKi), PARAMETER :: M01N3RDxe = 13368 + INTEGER(IntKi), PARAMETER :: M01N4RDxe = 13369 + INTEGER(IntKi), PARAMETER :: M01N5RDxe = 13370 + INTEGER(IntKi), PARAMETER :: M01N6RDxe = 13371 + INTEGER(IntKi), PARAMETER :: M01N7RDxe = 13372 + INTEGER(IntKi), PARAMETER :: M01N8RDxe = 13373 + INTEGER(IntKi), PARAMETER :: M01N9RDxe = 13374 + INTEGER(IntKi), PARAMETER :: M02N1RDxe = 13375 + INTEGER(IntKi), PARAMETER :: M02N2RDxe = 13376 + INTEGER(IntKi), PARAMETER :: M02N3RDxe = 13377 + INTEGER(IntKi), PARAMETER :: M02N4RDxe = 13378 + INTEGER(IntKi), PARAMETER :: M02N5RDxe = 13379 + INTEGER(IntKi), PARAMETER :: M02N6RDxe = 13380 + INTEGER(IntKi), PARAMETER :: M02N7RDxe = 13381 + INTEGER(IntKi), PARAMETER :: M02N8RDxe = 13382 + INTEGER(IntKi), PARAMETER :: M02N9RDxe = 13383 + INTEGER(IntKi), PARAMETER :: M03N1RDxe = 13384 + INTEGER(IntKi), PARAMETER :: M03N2RDxe = 13385 + INTEGER(IntKi), PARAMETER :: M03N3RDxe = 13386 + INTEGER(IntKi), PARAMETER :: M03N4RDxe = 13387 + INTEGER(IntKi), PARAMETER :: M03N5RDxe = 13388 + INTEGER(IntKi), PARAMETER :: M03N6RDxe = 13389 + INTEGER(IntKi), PARAMETER :: M03N7RDxe = 13390 + INTEGER(IntKi), PARAMETER :: M03N8RDxe = 13391 + INTEGER(IntKi), PARAMETER :: M03N9RDxe = 13392 + INTEGER(IntKi), PARAMETER :: M04N1RDxe = 13393 + INTEGER(IntKi), PARAMETER :: M04N2RDxe = 13394 + INTEGER(IntKi), PARAMETER :: M04N3RDxe = 13395 + INTEGER(IntKi), PARAMETER :: M04N4RDxe = 13396 + INTEGER(IntKi), PARAMETER :: M04N5RDxe = 13397 + INTEGER(IntKi), PARAMETER :: M04N6RDxe = 13398 + INTEGER(IntKi), PARAMETER :: M04N7RDxe = 13399 + INTEGER(IntKi), PARAMETER :: M04N8RDxe = 13400 + INTEGER(IntKi), PARAMETER :: M04N9RDxe = 13401 + INTEGER(IntKi), PARAMETER :: M05N1RDxe = 13402 + INTEGER(IntKi), PARAMETER :: M05N2RDxe = 13403 + INTEGER(IntKi), PARAMETER :: M05N3RDxe = 13404 + INTEGER(IntKi), PARAMETER :: M05N4RDxe = 13405 + INTEGER(IntKi), PARAMETER :: M05N5RDxe = 13406 + INTEGER(IntKi), PARAMETER :: M05N6RDxe = 13407 + INTEGER(IntKi), PARAMETER :: M05N7RDxe = 13408 + INTEGER(IntKi), PARAMETER :: M05N8RDxe = 13409 + INTEGER(IntKi), PARAMETER :: M05N9RDxe = 13410 + INTEGER(IntKi), PARAMETER :: M06N1RDxe = 13411 + INTEGER(IntKi), PARAMETER :: M06N2RDxe = 13412 + INTEGER(IntKi), PARAMETER :: M06N3RDxe = 13413 + INTEGER(IntKi), PARAMETER :: M06N4RDxe = 13414 + INTEGER(IntKi), PARAMETER :: M06N5RDxe = 13415 + INTEGER(IntKi), PARAMETER :: M06N6RDxe = 13416 + INTEGER(IntKi), PARAMETER :: M06N7RDxe = 13417 + INTEGER(IntKi), PARAMETER :: M06N8RDxe = 13418 + INTEGER(IntKi), PARAMETER :: M06N9RDxe = 13419 + INTEGER(IntKi), PARAMETER :: M07N1RDxe = 13420 + INTEGER(IntKi), PARAMETER :: M07N2RDxe = 13421 + INTEGER(IntKi), PARAMETER :: M07N3RDxe = 13422 + INTEGER(IntKi), PARAMETER :: M07N4RDxe = 13423 + INTEGER(IntKi), PARAMETER :: M07N5RDxe = 13424 + INTEGER(IntKi), PARAMETER :: M07N6RDxe = 13425 + INTEGER(IntKi), PARAMETER :: M07N7RDxe = 13426 + INTEGER(IntKi), PARAMETER :: M07N8RDxe = 13427 + INTEGER(IntKi), PARAMETER :: M07N9RDxe = 13428 + INTEGER(IntKi), PARAMETER :: M08N1RDxe = 13429 + INTEGER(IntKi), PARAMETER :: M08N2RDxe = 13430 + INTEGER(IntKi), PARAMETER :: M08N3RDxe = 13431 + INTEGER(IntKi), PARAMETER :: M08N4RDxe = 13432 + INTEGER(IntKi), PARAMETER :: M08N5RDxe = 13433 + INTEGER(IntKi), PARAMETER :: M08N6RDxe = 13434 + INTEGER(IntKi), PARAMETER :: M08N7RDxe = 13435 + INTEGER(IntKi), PARAMETER :: M08N8RDxe = 13436 + INTEGER(IntKi), PARAMETER :: M08N9RDxe = 13437 + INTEGER(IntKi), PARAMETER :: M09N1RDxe = 13438 + INTEGER(IntKi), PARAMETER :: M09N2RDxe = 13439 + INTEGER(IntKi), PARAMETER :: M09N3RDxe = 13440 + INTEGER(IntKi), PARAMETER :: M09N4RDxe = 13441 + INTEGER(IntKi), PARAMETER :: M09N5RDxe = 13442 + INTEGER(IntKi), PARAMETER :: M09N6RDxe = 13443 + INTEGER(IntKi), PARAMETER :: M09N7RDxe = 13444 + INTEGER(IntKi), PARAMETER :: M09N8RDxe = 13445 + INTEGER(IntKi), PARAMETER :: M09N9RDxe = 13446 + INTEGER(IntKi), PARAMETER :: M10N1RDxe = 13447 + INTEGER(IntKi), PARAMETER :: M10N2RDxe = 13448 + INTEGER(IntKi), PARAMETER :: M10N3RDxe = 13449 + INTEGER(IntKi), PARAMETER :: M10N4RDxe = 13450 + INTEGER(IntKi), PARAMETER :: M10N5RDxe = 13451 + INTEGER(IntKi), PARAMETER :: M10N6RDxe = 13452 + INTEGER(IntKi), PARAMETER :: M10N7RDxe = 13453 + INTEGER(IntKi), PARAMETER :: M10N8RDxe = 13454 + INTEGER(IntKi), PARAMETER :: M10N9RDxe = 13455 + INTEGER(IntKi), PARAMETER :: M11N1RDxe = 13456 + INTEGER(IntKi), PARAMETER :: M11N2RDxe = 13457 + INTEGER(IntKi), PARAMETER :: M11N3RDxe = 13458 + INTEGER(IntKi), PARAMETER :: M11N4RDxe = 13459 + INTEGER(IntKi), PARAMETER :: M11N5RDxe = 13460 + INTEGER(IntKi), PARAMETER :: M11N6RDxe = 13461 + INTEGER(IntKi), PARAMETER :: M11N7RDxe = 13462 + INTEGER(IntKi), PARAMETER :: M11N8RDxe = 13463 + INTEGER(IntKi), PARAMETER :: M11N9RDxe = 13464 + INTEGER(IntKi), PARAMETER :: M12N1RDxe = 13465 + INTEGER(IntKi), PARAMETER :: M12N2RDxe = 13466 + INTEGER(IntKi), PARAMETER :: M12N3RDxe = 13467 + INTEGER(IntKi), PARAMETER :: M12N4RDxe = 13468 + INTEGER(IntKi), PARAMETER :: M12N5RDxe = 13469 + INTEGER(IntKi), PARAMETER :: M12N6RDxe = 13470 + INTEGER(IntKi), PARAMETER :: M12N7RDxe = 13471 + INTEGER(IntKi), PARAMETER :: M12N8RDxe = 13472 + INTEGER(IntKi), PARAMETER :: M12N9RDxe = 13473 + INTEGER(IntKi), PARAMETER :: M13N1RDxe = 13474 + INTEGER(IntKi), PARAMETER :: M13N2RDxe = 13475 + INTEGER(IntKi), PARAMETER :: M13N3RDxe = 13476 + INTEGER(IntKi), PARAMETER :: M13N4RDxe = 13477 + INTEGER(IntKi), PARAMETER :: M13N5RDxe = 13478 + INTEGER(IntKi), PARAMETER :: M13N6RDxe = 13479 + INTEGER(IntKi), PARAMETER :: M13N7RDxe = 13480 + INTEGER(IntKi), PARAMETER :: M13N8RDxe = 13481 + INTEGER(IntKi), PARAMETER :: M13N9RDxe = 13482 + INTEGER(IntKi), PARAMETER :: M14N1RDxe = 13483 + INTEGER(IntKi), PARAMETER :: M14N2RDxe = 13484 + INTEGER(IntKi), PARAMETER :: M14N3RDxe = 13485 + INTEGER(IntKi), PARAMETER :: M14N4RDxe = 13486 + INTEGER(IntKi), PARAMETER :: M14N5RDxe = 13487 + INTEGER(IntKi), PARAMETER :: M14N6RDxe = 13488 + INTEGER(IntKi), PARAMETER :: M14N7RDxe = 13489 + INTEGER(IntKi), PARAMETER :: M14N8RDxe = 13490 + INTEGER(IntKi), PARAMETER :: M14N9RDxe = 13491 + INTEGER(IntKi), PARAMETER :: M15N1RDxe = 13492 + INTEGER(IntKi), PARAMETER :: M15N2RDxe = 13493 + INTEGER(IntKi), PARAMETER :: M15N3RDxe = 13494 + INTEGER(IntKi), PARAMETER :: M15N4RDxe = 13495 + INTEGER(IntKi), PARAMETER :: M15N5RDxe = 13496 + INTEGER(IntKi), PARAMETER :: M15N6RDxe = 13497 + INTEGER(IntKi), PARAMETER :: M15N7RDxe = 13498 + INTEGER(IntKi), PARAMETER :: M15N8RDxe = 13499 + INTEGER(IntKi), PARAMETER :: M15N9RDxe = 13500 + INTEGER(IntKi), PARAMETER :: M16N1RDxe = 13501 + INTEGER(IntKi), PARAMETER :: M16N2RDxe = 13502 + INTEGER(IntKi), PARAMETER :: M16N3RDxe = 13503 + INTEGER(IntKi), PARAMETER :: M16N4RDxe = 13504 + INTEGER(IntKi), PARAMETER :: M16N5RDxe = 13505 + INTEGER(IntKi), PARAMETER :: M16N6RDxe = 13506 + INTEGER(IntKi), PARAMETER :: M16N7RDxe = 13507 + INTEGER(IntKi), PARAMETER :: M16N8RDxe = 13508 + INTEGER(IntKi), PARAMETER :: M16N9RDxe = 13509 + INTEGER(IntKi), PARAMETER :: M17N1RDxe = 13510 + INTEGER(IntKi), PARAMETER :: M17N2RDxe = 13511 + INTEGER(IntKi), PARAMETER :: M17N3RDxe = 13512 + INTEGER(IntKi), PARAMETER :: M17N4RDxe = 13513 + INTEGER(IntKi), PARAMETER :: M17N5RDxe = 13514 + INTEGER(IntKi), PARAMETER :: M17N6RDxe = 13515 + INTEGER(IntKi), PARAMETER :: M17N7RDxe = 13516 + INTEGER(IntKi), PARAMETER :: M17N8RDxe = 13517 + INTEGER(IntKi), PARAMETER :: M17N9RDxe = 13518 + INTEGER(IntKi), PARAMETER :: M18N1RDxe = 13519 + INTEGER(IntKi), PARAMETER :: M18N2RDxe = 13520 + INTEGER(IntKi), PARAMETER :: M18N3RDxe = 13521 + INTEGER(IntKi), PARAMETER :: M18N4RDxe = 13522 + INTEGER(IntKi), PARAMETER :: M18N5RDxe = 13523 + INTEGER(IntKi), PARAMETER :: M18N6RDxe = 13524 + INTEGER(IntKi), PARAMETER :: M18N7RDxe = 13525 + INTEGER(IntKi), PARAMETER :: M18N8RDxe = 13526 + INTEGER(IntKi), PARAMETER :: M18N9RDxe = 13527 + INTEGER(IntKi), PARAMETER :: M19N1RDxe = 13528 + INTEGER(IntKi), PARAMETER :: M19N2RDxe = 13529 + INTEGER(IntKi), PARAMETER :: M19N3RDxe = 13530 + INTEGER(IntKi), PARAMETER :: M19N4RDxe = 13531 + INTEGER(IntKi), PARAMETER :: M19N5RDxe = 13532 + INTEGER(IntKi), PARAMETER :: M19N6RDxe = 13533 + INTEGER(IntKi), PARAMETER :: M19N7RDxe = 13534 + INTEGER(IntKi), PARAMETER :: M19N8RDxe = 13535 + INTEGER(IntKi), PARAMETER :: M19N9RDxe = 13536 + INTEGER(IntKi), PARAMETER :: M20N1RDxe = 13537 + INTEGER(IntKi), PARAMETER :: M20N2RDxe = 13538 + INTEGER(IntKi), PARAMETER :: M20N3RDxe = 13539 + INTEGER(IntKi), PARAMETER :: M20N4RDxe = 13540 + INTEGER(IntKi), PARAMETER :: M20N5RDxe = 13541 + INTEGER(IntKi), PARAMETER :: M20N6RDxe = 13542 + INTEGER(IntKi), PARAMETER :: M20N7RDxe = 13543 + INTEGER(IntKi), PARAMETER :: M20N8RDxe = 13544 + INTEGER(IntKi), PARAMETER :: M20N9RDxe = 13545 + INTEGER(IntKi), PARAMETER :: M21N1RDxe = 13546 + INTEGER(IntKi), PARAMETER :: M21N2RDxe = 13547 + INTEGER(IntKi), PARAMETER :: M21N3RDxe = 13548 + INTEGER(IntKi), PARAMETER :: M21N4RDxe = 13549 + INTEGER(IntKi), PARAMETER :: M21N5RDxe = 13550 + INTEGER(IntKi), PARAMETER :: M21N6RDxe = 13551 + INTEGER(IntKi), PARAMETER :: M21N7RDxe = 13552 + INTEGER(IntKi), PARAMETER :: M21N8RDxe = 13553 + INTEGER(IntKi), PARAMETER :: M21N9RDxe = 13554 + INTEGER(IntKi), PARAMETER :: M22N1RDxe = 13555 + INTEGER(IntKi), PARAMETER :: M22N2RDxe = 13556 + INTEGER(IntKi), PARAMETER :: M22N3RDxe = 13557 + INTEGER(IntKi), PARAMETER :: M22N4RDxe = 13558 + INTEGER(IntKi), PARAMETER :: M22N5RDxe = 13559 + INTEGER(IntKi), PARAMETER :: M22N6RDxe = 13560 + INTEGER(IntKi), PARAMETER :: M22N7RDxe = 13561 + INTEGER(IntKi), PARAMETER :: M22N8RDxe = 13562 + INTEGER(IntKi), PARAMETER :: M22N9RDxe = 13563 + INTEGER(IntKi), PARAMETER :: M23N1RDxe = 13564 + INTEGER(IntKi), PARAMETER :: M23N2RDxe = 13565 + INTEGER(IntKi), PARAMETER :: M23N3RDxe = 13566 + INTEGER(IntKi), PARAMETER :: M23N4RDxe = 13567 + INTEGER(IntKi), PARAMETER :: M23N5RDxe = 13568 + INTEGER(IntKi), PARAMETER :: M23N6RDxe = 13569 + INTEGER(IntKi), PARAMETER :: M23N7RDxe = 13570 + INTEGER(IntKi), PARAMETER :: M23N8RDxe = 13571 + INTEGER(IntKi), PARAMETER :: M23N9RDxe = 13572 + INTEGER(IntKi), PARAMETER :: M24N1RDxe = 13573 + INTEGER(IntKi), PARAMETER :: M24N2RDxe = 13574 + INTEGER(IntKi), PARAMETER :: M24N3RDxe = 13575 + INTEGER(IntKi), PARAMETER :: M24N4RDxe = 13576 + INTEGER(IntKi), PARAMETER :: M24N5RDxe = 13577 + INTEGER(IntKi), PARAMETER :: M24N6RDxe = 13578 + INTEGER(IntKi), PARAMETER :: M24N7RDxe = 13579 + INTEGER(IntKi), PARAMETER :: M24N8RDxe = 13580 + INTEGER(IntKi), PARAMETER :: M24N9RDxe = 13581 + INTEGER(IntKi), PARAMETER :: M25N1RDxe = 13582 + INTEGER(IntKi), PARAMETER :: M25N2RDxe = 13583 + INTEGER(IntKi), PARAMETER :: M25N3RDxe = 13584 + INTEGER(IntKi), PARAMETER :: M25N4RDxe = 13585 + INTEGER(IntKi), PARAMETER :: M25N5RDxe = 13586 + INTEGER(IntKi), PARAMETER :: M25N6RDxe = 13587 + INTEGER(IntKi), PARAMETER :: M25N7RDxe = 13588 + INTEGER(IntKi), PARAMETER :: M25N8RDxe = 13589 + INTEGER(IntKi), PARAMETER :: M25N9RDxe = 13590 + INTEGER(IntKi), PARAMETER :: M26N1RDxe = 13591 + INTEGER(IntKi), PARAMETER :: M26N2RDxe = 13592 + INTEGER(IntKi), PARAMETER :: M26N3RDxe = 13593 + INTEGER(IntKi), PARAMETER :: M26N4RDxe = 13594 + INTEGER(IntKi), PARAMETER :: M26N5RDxe = 13595 + INTEGER(IntKi), PARAMETER :: M26N6RDxe = 13596 + INTEGER(IntKi), PARAMETER :: M26N7RDxe = 13597 + INTEGER(IntKi), PARAMETER :: M26N8RDxe = 13598 + INTEGER(IntKi), PARAMETER :: M26N9RDxe = 13599 + INTEGER(IntKi), PARAMETER :: M27N1RDxe = 13600 + INTEGER(IntKi), PARAMETER :: M27N2RDxe = 13601 + INTEGER(IntKi), PARAMETER :: M27N3RDxe = 13602 + INTEGER(IntKi), PARAMETER :: M27N4RDxe = 13603 + INTEGER(IntKi), PARAMETER :: M27N5RDxe = 13604 + INTEGER(IntKi), PARAMETER :: M27N6RDxe = 13605 + INTEGER(IntKi), PARAMETER :: M27N7RDxe = 13606 + INTEGER(IntKi), PARAMETER :: M27N8RDxe = 13607 + INTEGER(IntKi), PARAMETER :: M27N9RDxe = 13608 + INTEGER(IntKi), PARAMETER :: M28N1RDxe = 13609 + INTEGER(IntKi), PARAMETER :: M28N2RDxe = 13610 + INTEGER(IntKi), PARAMETER :: M28N3RDxe = 13611 + INTEGER(IntKi), PARAMETER :: M28N4RDxe = 13612 + INTEGER(IntKi), PARAMETER :: M28N5RDxe = 13613 + INTEGER(IntKi), PARAMETER :: M28N6RDxe = 13614 + INTEGER(IntKi), PARAMETER :: M28N7RDxe = 13615 + INTEGER(IntKi), PARAMETER :: M28N8RDxe = 13616 + INTEGER(IntKi), PARAMETER :: M28N9RDxe = 13617 + INTEGER(IntKi), PARAMETER :: M29N1RDxe = 13618 + INTEGER(IntKi), PARAMETER :: M29N2RDxe = 13619 + INTEGER(IntKi), PARAMETER :: M29N3RDxe = 13620 + INTEGER(IntKi), PARAMETER :: M29N4RDxe = 13621 + INTEGER(IntKi), PARAMETER :: M29N5RDxe = 13622 + INTEGER(IntKi), PARAMETER :: M29N6RDxe = 13623 + INTEGER(IntKi), PARAMETER :: M29N7RDxe = 13624 + INTEGER(IntKi), PARAMETER :: M29N8RDxe = 13625 + INTEGER(IntKi), PARAMETER :: M29N9RDxe = 13626 + INTEGER(IntKi), PARAMETER :: M30N1RDxe = 13627 + INTEGER(IntKi), PARAMETER :: M30N2RDxe = 13628 + INTEGER(IntKi), PARAMETER :: M30N3RDxe = 13629 + INTEGER(IntKi), PARAMETER :: M30N4RDxe = 13630 + INTEGER(IntKi), PARAMETER :: M30N5RDxe = 13631 + INTEGER(IntKi), PARAMETER :: M30N6RDxe = 13632 + INTEGER(IntKi), PARAMETER :: M30N7RDxe = 13633 + INTEGER(IntKi), PARAMETER :: M30N8RDxe = 13634 + INTEGER(IntKi), PARAMETER :: M30N9RDxe = 13635 + INTEGER(IntKi), PARAMETER :: M31N1RDxe = 13636 + INTEGER(IntKi), PARAMETER :: M31N2RDxe = 13637 + INTEGER(IntKi), PARAMETER :: M31N3RDxe = 13638 + INTEGER(IntKi), PARAMETER :: M31N4RDxe = 13639 + INTEGER(IntKi), PARAMETER :: M31N5RDxe = 13640 + INTEGER(IntKi), PARAMETER :: M31N6RDxe = 13641 + INTEGER(IntKi), PARAMETER :: M31N7RDxe = 13642 + INTEGER(IntKi), PARAMETER :: M31N8RDxe = 13643 + INTEGER(IntKi), PARAMETER :: M31N9RDxe = 13644 + INTEGER(IntKi), PARAMETER :: M32N1RDxe = 13645 + INTEGER(IntKi), PARAMETER :: M32N2RDxe = 13646 + INTEGER(IntKi), PARAMETER :: M32N3RDxe = 13647 + INTEGER(IntKi), PARAMETER :: M32N4RDxe = 13648 + INTEGER(IntKi), PARAMETER :: M32N5RDxe = 13649 + INTEGER(IntKi), PARAMETER :: M32N6RDxe = 13650 + INTEGER(IntKi), PARAMETER :: M32N7RDxe = 13651 + INTEGER(IntKi), PARAMETER :: M32N8RDxe = 13652 + INTEGER(IntKi), PARAMETER :: M32N9RDxe = 13653 + INTEGER(IntKi), PARAMETER :: M33N1RDxe = 13654 + INTEGER(IntKi), PARAMETER :: M33N2RDxe = 13655 + INTEGER(IntKi), PARAMETER :: M33N3RDxe = 13656 + INTEGER(IntKi), PARAMETER :: M33N4RDxe = 13657 + INTEGER(IntKi), PARAMETER :: M33N5RDxe = 13658 + INTEGER(IntKi), PARAMETER :: M33N6RDxe = 13659 + INTEGER(IntKi), PARAMETER :: M33N7RDxe = 13660 + INTEGER(IntKi), PARAMETER :: M33N8RDxe = 13661 + INTEGER(IntKi), PARAMETER :: M33N9RDxe = 13662 + INTEGER(IntKi), PARAMETER :: M34N1RDxe = 13663 + INTEGER(IntKi), PARAMETER :: M34N2RDxe = 13664 + INTEGER(IntKi), PARAMETER :: M34N3RDxe = 13665 + INTEGER(IntKi), PARAMETER :: M34N4RDxe = 13666 + INTEGER(IntKi), PARAMETER :: M34N5RDxe = 13667 + INTEGER(IntKi), PARAMETER :: M34N6RDxe = 13668 + INTEGER(IntKi), PARAMETER :: M34N7RDxe = 13669 + INTEGER(IntKi), PARAMETER :: M34N8RDxe = 13670 + INTEGER(IntKi), PARAMETER :: M34N9RDxe = 13671 + INTEGER(IntKi), PARAMETER :: M35N1RDxe = 13672 + INTEGER(IntKi), PARAMETER :: M35N2RDxe = 13673 + INTEGER(IntKi), PARAMETER :: M35N3RDxe = 13674 + INTEGER(IntKi), PARAMETER :: M35N4RDxe = 13675 + INTEGER(IntKi), PARAMETER :: M35N5RDxe = 13676 + INTEGER(IntKi), PARAMETER :: M35N6RDxe = 13677 + INTEGER(IntKi), PARAMETER :: M35N7RDxe = 13678 + INTEGER(IntKi), PARAMETER :: M35N8RDxe = 13679 + INTEGER(IntKi), PARAMETER :: M35N9RDxe = 13680 + INTEGER(IntKi), PARAMETER :: M36N1RDxe = 13681 + INTEGER(IntKi), PARAMETER :: M36N2RDxe = 13682 + INTEGER(IntKi), PARAMETER :: M36N3RDxe = 13683 + INTEGER(IntKi), PARAMETER :: M36N4RDxe = 13684 + INTEGER(IntKi), PARAMETER :: M36N5RDxe = 13685 + INTEGER(IntKi), PARAMETER :: M36N6RDxe = 13686 + INTEGER(IntKi), PARAMETER :: M36N7RDxe = 13687 + INTEGER(IntKi), PARAMETER :: M36N8RDxe = 13688 + INTEGER(IntKi), PARAMETER :: M36N9RDxe = 13689 + INTEGER(IntKi), PARAMETER :: M37N1RDxe = 13690 + INTEGER(IntKi), PARAMETER :: M37N2RDxe = 13691 + INTEGER(IntKi), PARAMETER :: M37N3RDxe = 13692 + INTEGER(IntKi), PARAMETER :: M37N4RDxe = 13693 + INTEGER(IntKi), PARAMETER :: M37N5RDxe = 13694 + INTEGER(IntKi), PARAMETER :: M37N6RDxe = 13695 + INTEGER(IntKi), PARAMETER :: M37N7RDxe = 13696 + INTEGER(IntKi), PARAMETER :: M37N8RDxe = 13697 + INTEGER(IntKi), PARAMETER :: M37N9RDxe = 13698 + INTEGER(IntKi), PARAMETER :: M38N1RDxe = 13699 + INTEGER(IntKi), PARAMETER :: M38N2RDxe = 13700 + INTEGER(IntKi), PARAMETER :: M38N3RDxe = 13701 + INTEGER(IntKi), PARAMETER :: M38N4RDxe = 13702 + INTEGER(IntKi), PARAMETER :: M38N5RDxe = 13703 + INTEGER(IntKi), PARAMETER :: M38N6RDxe = 13704 + INTEGER(IntKi), PARAMETER :: M38N7RDxe = 13705 + INTEGER(IntKi), PARAMETER :: M38N8RDxe = 13706 + INTEGER(IntKi), PARAMETER :: M38N9RDxe = 13707 + INTEGER(IntKi), PARAMETER :: M39N1RDxe = 13708 + INTEGER(IntKi), PARAMETER :: M39N2RDxe = 13709 + INTEGER(IntKi), PARAMETER :: M39N3RDxe = 13710 + INTEGER(IntKi), PARAMETER :: M39N4RDxe = 13711 + INTEGER(IntKi), PARAMETER :: M39N5RDxe = 13712 + INTEGER(IntKi), PARAMETER :: M39N6RDxe = 13713 + INTEGER(IntKi), PARAMETER :: M39N7RDxe = 13714 + INTEGER(IntKi), PARAMETER :: M39N8RDxe = 13715 + INTEGER(IntKi), PARAMETER :: M39N9RDxe = 13716 + INTEGER(IntKi), PARAMETER :: M40N1RDxe = 13717 + INTEGER(IntKi), PARAMETER :: M40N2RDxe = 13718 + INTEGER(IntKi), PARAMETER :: M40N3RDxe = 13719 + INTEGER(IntKi), PARAMETER :: M40N4RDxe = 13720 + INTEGER(IntKi), PARAMETER :: M40N5RDxe = 13721 + INTEGER(IntKi), PARAMETER :: M40N6RDxe = 13722 + INTEGER(IntKi), PARAMETER :: M40N7RDxe = 13723 + INTEGER(IntKi), PARAMETER :: M40N8RDxe = 13724 + INTEGER(IntKi), PARAMETER :: M40N9RDxe = 13725 + INTEGER(IntKi), PARAMETER :: M41N1RDxe = 13726 + INTEGER(IntKi), PARAMETER :: M41N2RDxe = 13727 + INTEGER(IntKi), PARAMETER :: M41N3RDxe = 13728 + INTEGER(IntKi), PARAMETER :: M41N4RDxe = 13729 + INTEGER(IntKi), PARAMETER :: M41N5RDxe = 13730 + INTEGER(IntKi), PARAMETER :: M41N6RDxe = 13731 + INTEGER(IntKi), PARAMETER :: M41N7RDxe = 13732 + INTEGER(IntKi), PARAMETER :: M41N8RDxe = 13733 + INTEGER(IntKi), PARAMETER :: M41N9RDxe = 13734 + INTEGER(IntKi), PARAMETER :: M42N1RDxe = 13735 + INTEGER(IntKi), PARAMETER :: M42N2RDxe = 13736 + INTEGER(IntKi), PARAMETER :: M42N3RDxe = 13737 + INTEGER(IntKi), PARAMETER :: M42N4RDxe = 13738 + INTEGER(IntKi), PARAMETER :: M42N5RDxe = 13739 + INTEGER(IntKi), PARAMETER :: M42N6RDxe = 13740 + INTEGER(IntKi), PARAMETER :: M42N7RDxe = 13741 + INTEGER(IntKi), PARAMETER :: M42N8RDxe = 13742 + INTEGER(IntKi), PARAMETER :: M42N9RDxe = 13743 + INTEGER(IntKi), PARAMETER :: M43N1RDxe = 13744 + INTEGER(IntKi), PARAMETER :: M43N2RDxe = 13745 + INTEGER(IntKi), PARAMETER :: M43N3RDxe = 13746 + INTEGER(IntKi), PARAMETER :: M43N4RDxe = 13747 + INTEGER(IntKi), PARAMETER :: M43N5RDxe = 13748 + INTEGER(IntKi), PARAMETER :: M43N6RDxe = 13749 + INTEGER(IntKi), PARAMETER :: M43N7RDxe = 13750 + INTEGER(IntKi), PARAMETER :: M43N8RDxe = 13751 + INTEGER(IntKi), PARAMETER :: M43N9RDxe = 13752 + INTEGER(IntKi), PARAMETER :: M44N1RDxe = 13753 + INTEGER(IntKi), PARAMETER :: M44N2RDxe = 13754 + INTEGER(IntKi), PARAMETER :: M44N3RDxe = 13755 + INTEGER(IntKi), PARAMETER :: M44N4RDxe = 13756 + INTEGER(IntKi), PARAMETER :: M44N5RDxe = 13757 + INTEGER(IntKi), PARAMETER :: M44N6RDxe = 13758 + INTEGER(IntKi), PARAMETER :: M44N7RDxe = 13759 + INTEGER(IntKi), PARAMETER :: M44N8RDxe = 13760 + INTEGER(IntKi), PARAMETER :: M44N9RDxe = 13761 + INTEGER(IntKi), PARAMETER :: M45N1RDxe = 13762 + INTEGER(IntKi), PARAMETER :: M45N2RDxe = 13763 + INTEGER(IntKi), PARAMETER :: M45N3RDxe = 13764 + INTEGER(IntKi), PARAMETER :: M45N4RDxe = 13765 + INTEGER(IntKi), PARAMETER :: M45N5RDxe = 13766 + INTEGER(IntKi), PARAMETER :: M45N6RDxe = 13767 + INTEGER(IntKi), PARAMETER :: M45N7RDxe = 13768 + INTEGER(IntKi), PARAMETER :: M45N8RDxe = 13769 + INTEGER(IntKi), PARAMETER :: M45N9RDxe = 13770 + INTEGER(IntKi), PARAMETER :: M46N1RDxe = 13771 + INTEGER(IntKi), PARAMETER :: M46N2RDxe = 13772 + INTEGER(IntKi), PARAMETER :: M46N3RDxe = 13773 + INTEGER(IntKi), PARAMETER :: M46N4RDxe = 13774 + INTEGER(IntKi), PARAMETER :: M46N5RDxe = 13775 + INTEGER(IntKi), PARAMETER :: M46N6RDxe = 13776 + INTEGER(IntKi), PARAMETER :: M46N7RDxe = 13777 + INTEGER(IntKi), PARAMETER :: M46N8RDxe = 13778 + INTEGER(IntKi), PARAMETER :: M46N9RDxe = 13779 + INTEGER(IntKi), PARAMETER :: M47N1RDxe = 13780 + INTEGER(IntKi), PARAMETER :: M47N2RDxe = 13781 + INTEGER(IntKi), PARAMETER :: M47N3RDxe = 13782 + INTEGER(IntKi), PARAMETER :: M47N4RDxe = 13783 + INTEGER(IntKi), PARAMETER :: M47N5RDxe = 13784 + INTEGER(IntKi), PARAMETER :: M47N6RDxe = 13785 + INTEGER(IntKi), PARAMETER :: M47N7RDxe = 13786 + INTEGER(IntKi), PARAMETER :: M47N8RDxe = 13787 + INTEGER(IntKi), PARAMETER :: M47N9RDxe = 13788 + INTEGER(IntKi), PARAMETER :: M48N1RDxe = 13789 + INTEGER(IntKi), PARAMETER :: M48N2RDxe = 13790 + INTEGER(IntKi), PARAMETER :: M48N3RDxe = 13791 + INTEGER(IntKi), PARAMETER :: M48N4RDxe = 13792 + INTEGER(IntKi), PARAMETER :: M48N5RDxe = 13793 + INTEGER(IntKi), PARAMETER :: M48N6RDxe = 13794 + INTEGER(IntKi), PARAMETER :: M48N7RDxe = 13795 + INTEGER(IntKi), PARAMETER :: M48N8RDxe = 13796 + INTEGER(IntKi), PARAMETER :: M48N9RDxe = 13797 + INTEGER(IntKi), PARAMETER :: M49N1RDxe = 13798 + INTEGER(IntKi), PARAMETER :: M49N2RDxe = 13799 + INTEGER(IntKi), PARAMETER :: M49N3RDxe = 13800 + INTEGER(IntKi), PARAMETER :: M49N4RDxe = 13801 + INTEGER(IntKi), PARAMETER :: M49N5RDxe = 13802 + INTEGER(IntKi), PARAMETER :: M49N6RDxe = 13803 + INTEGER(IntKi), PARAMETER :: M49N7RDxe = 13804 + INTEGER(IntKi), PARAMETER :: M49N8RDxe = 13805 + INTEGER(IntKi), PARAMETER :: M49N9RDxe = 13806 + INTEGER(IntKi), PARAMETER :: M50N1RDxe = 13807 + INTEGER(IntKi), PARAMETER :: M50N2RDxe = 13808 + INTEGER(IntKi), PARAMETER :: M50N3RDxe = 13809 + INTEGER(IntKi), PARAMETER :: M50N4RDxe = 13810 + INTEGER(IntKi), PARAMETER :: M50N5RDxe = 13811 + INTEGER(IntKi), PARAMETER :: M50N6RDxe = 13812 + INTEGER(IntKi), PARAMETER :: M50N7RDxe = 13813 + INTEGER(IntKi), PARAMETER :: M50N8RDxe = 13814 + INTEGER(IntKi), PARAMETER :: M50N9RDxe = 13815 + INTEGER(IntKi), PARAMETER :: M51N1RDxe = 13816 + INTEGER(IntKi), PARAMETER :: M51N2RDxe = 13817 + INTEGER(IntKi), PARAMETER :: M51N3RDxe = 13818 + INTEGER(IntKi), PARAMETER :: M51N4RDxe = 13819 + INTEGER(IntKi), PARAMETER :: M51N5RDxe = 13820 + INTEGER(IntKi), PARAMETER :: M51N6RDxe = 13821 + INTEGER(IntKi), PARAMETER :: M51N7RDxe = 13822 + INTEGER(IntKi), PARAMETER :: M51N8RDxe = 13823 + INTEGER(IntKi), PARAMETER :: M51N9RDxe = 13824 + INTEGER(IntKi), PARAMETER :: M52N1RDxe = 13825 + INTEGER(IntKi), PARAMETER :: M52N2RDxe = 13826 + INTEGER(IntKi), PARAMETER :: M52N3RDxe = 13827 + INTEGER(IntKi), PARAMETER :: M52N4RDxe = 13828 + INTEGER(IntKi), PARAMETER :: M52N5RDxe = 13829 + INTEGER(IntKi), PARAMETER :: M52N6RDxe = 13830 + INTEGER(IntKi), PARAMETER :: M52N7RDxe = 13831 + INTEGER(IntKi), PARAMETER :: M52N8RDxe = 13832 + INTEGER(IntKi), PARAMETER :: M52N9RDxe = 13833 + INTEGER(IntKi), PARAMETER :: M53N1RDxe = 13834 + INTEGER(IntKi), PARAMETER :: M53N2RDxe = 13835 + INTEGER(IntKi), PARAMETER :: M53N3RDxe = 13836 + INTEGER(IntKi), PARAMETER :: M53N4RDxe = 13837 + INTEGER(IntKi), PARAMETER :: M53N5RDxe = 13838 + INTEGER(IntKi), PARAMETER :: M53N6RDxe = 13839 + INTEGER(IntKi), PARAMETER :: M53N7RDxe = 13840 + INTEGER(IntKi), PARAMETER :: M53N8RDxe = 13841 + INTEGER(IntKi), PARAMETER :: M53N9RDxe = 13842 + INTEGER(IntKi), PARAMETER :: M54N1RDxe = 13843 + INTEGER(IntKi), PARAMETER :: M54N2RDxe = 13844 + INTEGER(IntKi), PARAMETER :: M54N3RDxe = 13845 + INTEGER(IntKi), PARAMETER :: M54N4RDxe = 13846 + INTEGER(IntKi), PARAMETER :: M54N5RDxe = 13847 + INTEGER(IntKi), PARAMETER :: M54N6RDxe = 13848 + INTEGER(IntKi), PARAMETER :: M54N7RDxe = 13849 + INTEGER(IntKi), PARAMETER :: M54N8RDxe = 13850 + INTEGER(IntKi), PARAMETER :: M54N9RDxe = 13851 + INTEGER(IntKi), PARAMETER :: M55N1RDxe = 13852 + INTEGER(IntKi), PARAMETER :: M55N2RDxe = 13853 + INTEGER(IntKi), PARAMETER :: M55N3RDxe = 13854 + INTEGER(IntKi), PARAMETER :: M55N4RDxe = 13855 + INTEGER(IntKi), PARAMETER :: M55N5RDxe = 13856 + INTEGER(IntKi), PARAMETER :: M55N6RDxe = 13857 + INTEGER(IntKi), PARAMETER :: M55N7RDxe = 13858 + INTEGER(IntKi), PARAMETER :: M55N8RDxe = 13859 + INTEGER(IntKi), PARAMETER :: M55N9RDxe = 13860 + INTEGER(IntKi), PARAMETER :: M56N1RDxe = 13861 + INTEGER(IntKi), PARAMETER :: M56N2RDxe = 13862 + INTEGER(IntKi), PARAMETER :: M56N3RDxe = 13863 + INTEGER(IntKi), PARAMETER :: M56N4RDxe = 13864 + INTEGER(IntKi), PARAMETER :: M56N5RDxe = 13865 + INTEGER(IntKi), PARAMETER :: M56N6RDxe = 13866 + INTEGER(IntKi), PARAMETER :: M56N7RDxe = 13867 + INTEGER(IntKi), PARAMETER :: M56N8RDxe = 13868 + INTEGER(IntKi), PARAMETER :: M56N9RDxe = 13869 + INTEGER(IntKi), PARAMETER :: M57N1RDxe = 13870 + INTEGER(IntKi), PARAMETER :: M57N2RDxe = 13871 + INTEGER(IntKi), PARAMETER :: M57N3RDxe = 13872 + INTEGER(IntKi), PARAMETER :: M57N4RDxe = 13873 + INTEGER(IntKi), PARAMETER :: M57N5RDxe = 13874 + INTEGER(IntKi), PARAMETER :: M57N6RDxe = 13875 + INTEGER(IntKi), PARAMETER :: M57N7RDxe = 13876 + INTEGER(IntKi), PARAMETER :: M57N8RDxe = 13877 + INTEGER(IntKi), PARAMETER :: M57N9RDxe = 13878 + INTEGER(IntKi), PARAMETER :: M58N1RDxe = 13879 + INTEGER(IntKi), PARAMETER :: M58N2RDxe = 13880 + INTEGER(IntKi), PARAMETER :: M58N3RDxe = 13881 + INTEGER(IntKi), PARAMETER :: M58N4RDxe = 13882 + INTEGER(IntKi), PARAMETER :: M58N5RDxe = 13883 + INTEGER(IntKi), PARAMETER :: M58N6RDxe = 13884 + INTEGER(IntKi), PARAMETER :: M58N7RDxe = 13885 + INTEGER(IntKi), PARAMETER :: M58N8RDxe = 13886 + INTEGER(IntKi), PARAMETER :: M58N9RDxe = 13887 + INTEGER(IntKi), PARAMETER :: M59N1RDxe = 13888 + INTEGER(IntKi), PARAMETER :: M59N2RDxe = 13889 + INTEGER(IntKi), PARAMETER :: M59N3RDxe = 13890 + INTEGER(IntKi), PARAMETER :: M59N4RDxe = 13891 + INTEGER(IntKi), PARAMETER :: M59N5RDxe = 13892 + INTEGER(IntKi), PARAMETER :: M59N6RDxe = 13893 + INTEGER(IntKi), PARAMETER :: M59N7RDxe = 13894 + INTEGER(IntKi), PARAMETER :: M59N8RDxe = 13895 + INTEGER(IntKi), PARAMETER :: M59N9RDxe = 13896 + INTEGER(IntKi), PARAMETER :: M60N1RDxe = 13897 + INTEGER(IntKi), PARAMETER :: M60N2RDxe = 13898 + INTEGER(IntKi), PARAMETER :: M60N3RDxe = 13899 + INTEGER(IntKi), PARAMETER :: M60N4RDxe = 13900 + INTEGER(IntKi), PARAMETER :: M60N5RDxe = 13901 + INTEGER(IntKi), PARAMETER :: M60N6RDxe = 13902 + INTEGER(IntKi), PARAMETER :: M60N7RDxe = 13903 + INTEGER(IntKi), PARAMETER :: M60N8RDxe = 13904 + INTEGER(IntKi), PARAMETER :: M60N9RDxe = 13905 + INTEGER(IntKi), PARAMETER :: M61N1RDxe = 13906 + INTEGER(IntKi), PARAMETER :: M61N2RDxe = 13907 + INTEGER(IntKi), PARAMETER :: M61N3RDxe = 13908 + INTEGER(IntKi), PARAMETER :: M61N4RDxe = 13909 + INTEGER(IntKi), PARAMETER :: M61N5RDxe = 13910 + INTEGER(IntKi), PARAMETER :: M61N6RDxe = 13911 + INTEGER(IntKi), PARAMETER :: M61N7RDxe = 13912 + INTEGER(IntKi), PARAMETER :: M61N8RDxe = 13913 + INTEGER(IntKi), PARAMETER :: M61N9RDxe = 13914 + INTEGER(IntKi), PARAMETER :: M62N1RDxe = 13915 + INTEGER(IntKi), PARAMETER :: M62N2RDxe = 13916 + INTEGER(IntKi), PARAMETER :: M62N3RDxe = 13917 + INTEGER(IntKi), PARAMETER :: M62N4RDxe = 13918 + INTEGER(IntKi), PARAMETER :: M62N5RDxe = 13919 + INTEGER(IntKi), PARAMETER :: M62N6RDxe = 13920 + INTEGER(IntKi), PARAMETER :: M62N7RDxe = 13921 + INTEGER(IntKi), PARAMETER :: M62N8RDxe = 13922 + INTEGER(IntKi), PARAMETER :: M62N9RDxe = 13923 + INTEGER(IntKi), PARAMETER :: M63N1RDxe = 13924 + INTEGER(IntKi), PARAMETER :: M63N2RDxe = 13925 + INTEGER(IntKi), PARAMETER :: M63N3RDxe = 13926 + INTEGER(IntKi), PARAMETER :: M63N4RDxe = 13927 + INTEGER(IntKi), PARAMETER :: M63N5RDxe = 13928 + INTEGER(IntKi), PARAMETER :: M63N6RDxe = 13929 + INTEGER(IntKi), PARAMETER :: M63N7RDxe = 13930 + INTEGER(IntKi), PARAMETER :: M63N8RDxe = 13931 + INTEGER(IntKi), PARAMETER :: M63N9RDxe = 13932 + INTEGER(IntKi), PARAMETER :: M64N1RDxe = 13933 + INTEGER(IntKi), PARAMETER :: M64N2RDxe = 13934 + INTEGER(IntKi), PARAMETER :: M64N3RDxe = 13935 + INTEGER(IntKi), PARAMETER :: M64N4RDxe = 13936 + INTEGER(IntKi), PARAMETER :: M64N5RDxe = 13937 + INTEGER(IntKi), PARAMETER :: M64N6RDxe = 13938 + INTEGER(IntKi), PARAMETER :: M64N7RDxe = 13939 + INTEGER(IntKi), PARAMETER :: M64N8RDxe = 13940 + INTEGER(IntKi), PARAMETER :: M64N9RDxe = 13941 + INTEGER(IntKi), PARAMETER :: M65N1RDxe = 13942 + INTEGER(IntKi), PARAMETER :: M65N2RDxe = 13943 + INTEGER(IntKi), PARAMETER :: M65N3RDxe = 13944 + INTEGER(IntKi), PARAMETER :: M65N4RDxe = 13945 + INTEGER(IntKi), PARAMETER :: M65N5RDxe = 13946 + INTEGER(IntKi), PARAMETER :: M65N6RDxe = 13947 + INTEGER(IntKi), PARAMETER :: M65N7RDxe = 13948 + INTEGER(IntKi), PARAMETER :: M65N8RDxe = 13949 + INTEGER(IntKi), PARAMETER :: M65N9RDxe = 13950 + INTEGER(IntKi), PARAMETER :: M66N1RDxe = 13951 + INTEGER(IntKi), PARAMETER :: M66N2RDxe = 13952 + INTEGER(IntKi), PARAMETER :: M66N3RDxe = 13953 + INTEGER(IntKi), PARAMETER :: M66N4RDxe = 13954 + INTEGER(IntKi), PARAMETER :: M66N5RDxe = 13955 + INTEGER(IntKi), PARAMETER :: M66N6RDxe = 13956 + INTEGER(IntKi), PARAMETER :: M66N7RDxe = 13957 + INTEGER(IntKi), PARAMETER :: M66N8RDxe = 13958 + INTEGER(IntKi), PARAMETER :: M66N9RDxe = 13959 + INTEGER(IntKi), PARAMETER :: M67N1RDxe = 13960 + INTEGER(IntKi), PARAMETER :: M67N2RDxe = 13961 + INTEGER(IntKi), PARAMETER :: M67N3RDxe = 13962 + INTEGER(IntKi), PARAMETER :: M67N4RDxe = 13963 + INTEGER(IntKi), PARAMETER :: M67N5RDxe = 13964 + INTEGER(IntKi), PARAMETER :: M67N6RDxe = 13965 + INTEGER(IntKi), PARAMETER :: M67N7RDxe = 13966 + INTEGER(IntKi), PARAMETER :: M67N8RDxe = 13967 + INTEGER(IntKi), PARAMETER :: M67N9RDxe = 13968 + INTEGER(IntKi), PARAMETER :: M68N1RDxe = 13969 + INTEGER(IntKi), PARAMETER :: M68N2RDxe = 13970 + INTEGER(IntKi), PARAMETER :: M68N3RDxe = 13971 + INTEGER(IntKi), PARAMETER :: M68N4RDxe = 13972 + INTEGER(IntKi), PARAMETER :: M68N5RDxe = 13973 + INTEGER(IntKi), PARAMETER :: M68N6RDxe = 13974 + INTEGER(IntKi), PARAMETER :: M68N7RDxe = 13975 + INTEGER(IntKi), PARAMETER :: M68N8RDxe = 13976 + INTEGER(IntKi), PARAMETER :: M68N9RDxe = 13977 + INTEGER(IntKi), PARAMETER :: M69N1RDxe = 13978 + INTEGER(IntKi), PARAMETER :: M69N2RDxe = 13979 + INTEGER(IntKi), PARAMETER :: M69N3RDxe = 13980 + INTEGER(IntKi), PARAMETER :: M69N4RDxe = 13981 + INTEGER(IntKi), PARAMETER :: M69N5RDxe = 13982 + INTEGER(IntKi), PARAMETER :: M69N6RDxe = 13983 + INTEGER(IntKi), PARAMETER :: M69N7RDxe = 13984 + INTEGER(IntKi), PARAMETER :: M69N8RDxe = 13985 + INTEGER(IntKi), PARAMETER :: M69N9RDxe = 13986 + INTEGER(IntKi), PARAMETER :: M70N1RDxe = 13987 + INTEGER(IntKi), PARAMETER :: M70N2RDxe = 13988 + INTEGER(IntKi), PARAMETER :: M70N3RDxe = 13989 + INTEGER(IntKi), PARAMETER :: M70N4RDxe = 13990 + INTEGER(IntKi), PARAMETER :: M70N5RDxe = 13991 + INTEGER(IntKi), PARAMETER :: M70N6RDxe = 13992 + INTEGER(IntKi), PARAMETER :: M70N7RDxe = 13993 + INTEGER(IntKi), PARAMETER :: M70N8RDxe = 13994 + INTEGER(IntKi), PARAMETER :: M70N9RDxe = 13995 + INTEGER(IntKi), PARAMETER :: M71N1RDxe = 13996 + INTEGER(IntKi), PARAMETER :: M71N2RDxe = 13997 + INTEGER(IntKi), PARAMETER :: M71N3RDxe = 13998 + INTEGER(IntKi), PARAMETER :: M71N4RDxe = 13999 + INTEGER(IntKi), PARAMETER :: M71N5RDxe = 14000 + INTEGER(IntKi), PARAMETER :: M71N6RDxe = 14001 + INTEGER(IntKi), PARAMETER :: M71N7RDxe = 14002 + INTEGER(IntKi), PARAMETER :: M71N8RDxe = 14003 + INTEGER(IntKi), PARAMETER :: M71N9RDxe = 14004 + INTEGER(IntKi), PARAMETER :: M72N1RDxe = 14005 + INTEGER(IntKi), PARAMETER :: M72N2RDxe = 14006 + INTEGER(IntKi), PARAMETER :: M72N3RDxe = 14007 + INTEGER(IntKi), PARAMETER :: M72N4RDxe = 14008 + INTEGER(IntKi), PARAMETER :: M72N5RDxe = 14009 + INTEGER(IntKi), PARAMETER :: M72N6RDxe = 14010 + INTEGER(IntKi), PARAMETER :: M72N7RDxe = 14011 + INTEGER(IntKi), PARAMETER :: M72N8RDxe = 14012 + INTEGER(IntKi), PARAMETER :: M72N9RDxe = 14013 + INTEGER(IntKi), PARAMETER :: M73N1RDxe = 14014 + INTEGER(IntKi), PARAMETER :: M73N2RDxe = 14015 + INTEGER(IntKi), PARAMETER :: M73N3RDxe = 14016 + INTEGER(IntKi), PARAMETER :: M73N4RDxe = 14017 + INTEGER(IntKi), PARAMETER :: M73N5RDxe = 14018 + INTEGER(IntKi), PARAMETER :: M73N6RDxe = 14019 + INTEGER(IntKi), PARAMETER :: M73N7RDxe = 14020 + INTEGER(IntKi), PARAMETER :: M73N8RDxe = 14021 + INTEGER(IntKi), PARAMETER :: M73N9RDxe = 14022 + INTEGER(IntKi), PARAMETER :: M74N1RDxe = 14023 + INTEGER(IntKi), PARAMETER :: M74N2RDxe = 14024 + INTEGER(IntKi), PARAMETER :: M74N3RDxe = 14025 + INTEGER(IntKi), PARAMETER :: M74N4RDxe = 14026 + INTEGER(IntKi), PARAMETER :: M74N5RDxe = 14027 + INTEGER(IntKi), PARAMETER :: M74N6RDxe = 14028 + INTEGER(IntKi), PARAMETER :: M74N7RDxe = 14029 + INTEGER(IntKi), PARAMETER :: M74N8RDxe = 14030 + INTEGER(IntKi), PARAMETER :: M74N9RDxe = 14031 + INTEGER(IntKi), PARAMETER :: M75N1RDxe = 14032 + INTEGER(IntKi), PARAMETER :: M75N2RDxe = 14033 + INTEGER(IntKi), PARAMETER :: M75N3RDxe = 14034 + INTEGER(IntKi), PARAMETER :: M75N4RDxe = 14035 + INTEGER(IntKi), PARAMETER :: M75N5RDxe = 14036 + INTEGER(IntKi), PARAMETER :: M75N6RDxe = 14037 + INTEGER(IntKi), PARAMETER :: M75N7RDxe = 14038 + INTEGER(IntKi), PARAMETER :: M75N8RDxe = 14039 + INTEGER(IntKi), PARAMETER :: M75N9RDxe = 14040 + INTEGER(IntKi), PARAMETER :: M76N1RDxe = 14041 + INTEGER(IntKi), PARAMETER :: M76N2RDxe = 14042 + INTEGER(IntKi), PARAMETER :: M76N3RDxe = 14043 + INTEGER(IntKi), PARAMETER :: M76N4RDxe = 14044 + INTEGER(IntKi), PARAMETER :: M76N5RDxe = 14045 + INTEGER(IntKi), PARAMETER :: M76N6RDxe = 14046 + INTEGER(IntKi), PARAMETER :: M76N7RDxe = 14047 + INTEGER(IntKi), PARAMETER :: M76N8RDxe = 14048 + INTEGER(IntKi), PARAMETER :: M76N9RDxe = 14049 + INTEGER(IntKi), PARAMETER :: M77N1RDxe = 14050 + INTEGER(IntKi), PARAMETER :: M77N2RDxe = 14051 + INTEGER(IntKi), PARAMETER :: M77N3RDxe = 14052 + INTEGER(IntKi), PARAMETER :: M77N4RDxe = 14053 + INTEGER(IntKi), PARAMETER :: M77N5RDxe = 14054 + INTEGER(IntKi), PARAMETER :: M77N6RDxe = 14055 + INTEGER(IntKi), PARAMETER :: M77N7RDxe = 14056 + INTEGER(IntKi), PARAMETER :: M77N8RDxe = 14057 + INTEGER(IntKi), PARAMETER :: M77N9RDxe = 14058 + INTEGER(IntKi), PARAMETER :: M78N1RDxe = 14059 + INTEGER(IntKi), PARAMETER :: M78N2RDxe = 14060 + INTEGER(IntKi), PARAMETER :: M78N3RDxe = 14061 + INTEGER(IntKi), PARAMETER :: M78N4RDxe = 14062 + INTEGER(IntKi), PARAMETER :: M78N5RDxe = 14063 + INTEGER(IntKi), PARAMETER :: M78N6RDxe = 14064 + INTEGER(IntKi), PARAMETER :: M78N7RDxe = 14065 + INTEGER(IntKi), PARAMETER :: M78N8RDxe = 14066 + INTEGER(IntKi), PARAMETER :: M78N9RDxe = 14067 + INTEGER(IntKi), PARAMETER :: M79N1RDxe = 14068 + INTEGER(IntKi), PARAMETER :: M79N2RDxe = 14069 + INTEGER(IntKi), PARAMETER :: M79N3RDxe = 14070 + INTEGER(IntKi), PARAMETER :: M79N4RDxe = 14071 + INTEGER(IntKi), PARAMETER :: M79N5RDxe = 14072 + INTEGER(IntKi), PARAMETER :: M79N6RDxe = 14073 + INTEGER(IntKi), PARAMETER :: M79N7RDxe = 14074 + INTEGER(IntKi), PARAMETER :: M79N8RDxe = 14075 + INTEGER(IntKi), PARAMETER :: M79N9RDxe = 14076 + INTEGER(IntKi), PARAMETER :: M80N1RDxe = 14077 + INTEGER(IntKi), PARAMETER :: M80N2RDxe = 14078 + INTEGER(IntKi), PARAMETER :: M80N3RDxe = 14079 + INTEGER(IntKi), PARAMETER :: M80N4RDxe = 14080 + INTEGER(IntKi), PARAMETER :: M80N5RDxe = 14081 + INTEGER(IntKi), PARAMETER :: M80N6RDxe = 14082 + INTEGER(IntKi), PARAMETER :: M80N7RDxe = 14083 + INTEGER(IntKi), PARAMETER :: M80N8RDxe = 14084 + INTEGER(IntKi), PARAMETER :: M80N9RDxe = 14085 + INTEGER(IntKi), PARAMETER :: M81N1RDxe = 14086 + INTEGER(IntKi), PARAMETER :: M81N2RDxe = 14087 + INTEGER(IntKi), PARAMETER :: M81N3RDxe = 14088 + INTEGER(IntKi), PARAMETER :: M81N4RDxe = 14089 + INTEGER(IntKi), PARAMETER :: M81N5RDxe = 14090 + INTEGER(IntKi), PARAMETER :: M81N6RDxe = 14091 + INTEGER(IntKi), PARAMETER :: M81N7RDxe = 14092 + INTEGER(IntKi), PARAMETER :: M81N8RDxe = 14093 + INTEGER(IntKi), PARAMETER :: M81N9RDxe = 14094 + INTEGER(IntKi), PARAMETER :: M82N1RDxe = 14095 + INTEGER(IntKi), PARAMETER :: M82N2RDxe = 14096 + INTEGER(IntKi), PARAMETER :: M82N3RDxe = 14097 + INTEGER(IntKi), PARAMETER :: M82N4RDxe = 14098 + INTEGER(IntKi), PARAMETER :: M82N5RDxe = 14099 + INTEGER(IntKi), PARAMETER :: M82N6RDxe = 14100 + INTEGER(IntKi), PARAMETER :: M82N7RDxe = 14101 + INTEGER(IntKi), PARAMETER :: M82N8RDxe = 14102 + INTEGER(IntKi), PARAMETER :: M82N9RDxe = 14103 + INTEGER(IntKi), PARAMETER :: M83N1RDxe = 14104 + INTEGER(IntKi), PARAMETER :: M83N2RDxe = 14105 + INTEGER(IntKi), PARAMETER :: M83N3RDxe = 14106 + INTEGER(IntKi), PARAMETER :: M83N4RDxe = 14107 + INTEGER(IntKi), PARAMETER :: M83N5RDxe = 14108 + INTEGER(IntKi), PARAMETER :: M83N6RDxe = 14109 + INTEGER(IntKi), PARAMETER :: M83N7RDxe = 14110 + INTEGER(IntKi), PARAMETER :: M83N8RDxe = 14111 + INTEGER(IntKi), PARAMETER :: M83N9RDxe = 14112 + INTEGER(IntKi), PARAMETER :: M84N1RDxe = 14113 + INTEGER(IntKi), PARAMETER :: M84N2RDxe = 14114 + INTEGER(IntKi), PARAMETER :: M84N3RDxe = 14115 + INTEGER(IntKi), PARAMETER :: M84N4RDxe = 14116 + INTEGER(IntKi), PARAMETER :: M84N5RDxe = 14117 + INTEGER(IntKi), PARAMETER :: M84N6RDxe = 14118 + INTEGER(IntKi), PARAMETER :: M84N7RDxe = 14119 + INTEGER(IntKi), PARAMETER :: M84N8RDxe = 14120 + INTEGER(IntKi), PARAMETER :: M84N9RDxe = 14121 + INTEGER(IntKi), PARAMETER :: M85N1RDxe = 14122 + INTEGER(IntKi), PARAMETER :: M85N2RDxe = 14123 + INTEGER(IntKi), PARAMETER :: M85N3RDxe = 14124 + INTEGER(IntKi), PARAMETER :: M85N4RDxe = 14125 + INTEGER(IntKi), PARAMETER :: M85N5RDxe = 14126 + INTEGER(IntKi), PARAMETER :: M85N6RDxe = 14127 + INTEGER(IntKi), PARAMETER :: M85N7RDxe = 14128 + INTEGER(IntKi), PARAMETER :: M85N8RDxe = 14129 + INTEGER(IntKi), PARAMETER :: M85N9RDxe = 14130 + INTEGER(IntKi), PARAMETER :: M86N1RDxe = 14131 + INTEGER(IntKi), PARAMETER :: M86N2RDxe = 14132 + INTEGER(IntKi), PARAMETER :: M86N3RDxe = 14133 + INTEGER(IntKi), PARAMETER :: M86N4RDxe = 14134 + INTEGER(IntKi), PARAMETER :: M86N5RDxe = 14135 + INTEGER(IntKi), PARAMETER :: M86N6RDxe = 14136 + INTEGER(IntKi), PARAMETER :: M86N7RDxe = 14137 + INTEGER(IntKi), PARAMETER :: M86N8RDxe = 14138 + INTEGER(IntKi), PARAMETER :: M86N9RDxe = 14139 + INTEGER(IntKi), PARAMETER :: M87N1RDxe = 14140 + INTEGER(IntKi), PARAMETER :: M87N2RDxe = 14141 + INTEGER(IntKi), PARAMETER :: M87N3RDxe = 14142 + INTEGER(IntKi), PARAMETER :: M87N4RDxe = 14143 + INTEGER(IntKi), PARAMETER :: M87N5RDxe = 14144 + INTEGER(IntKi), PARAMETER :: M87N6RDxe = 14145 + INTEGER(IntKi), PARAMETER :: M87N7RDxe = 14146 + INTEGER(IntKi), PARAMETER :: M87N8RDxe = 14147 + INTEGER(IntKi), PARAMETER :: M87N9RDxe = 14148 + INTEGER(IntKi), PARAMETER :: M88N1RDxe = 14149 + INTEGER(IntKi), PARAMETER :: M88N2RDxe = 14150 + INTEGER(IntKi), PARAMETER :: M88N3RDxe = 14151 + INTEGER(IntKi), PARAMETER :: M88N4RDxe = 14152 + INTEGER(IntKi), PARAMETER :: M88N5RDxe = 14153 + INTEGER(IntKi), PARAMETER :: M88N6RDxe = 14154 + INTEGER(IntKi), PARAMETER :: M88N7RDxe = 14155 + INTEGER(IntKi), PARAMETER :: M88N8RDxe = 14156 + INTEGER(IntKi), PARAMETER :: M88N9RDxe = 14157 + INTEGER(IntKi), PARAMETER :: M89N1RDxe = 14158 + INTEGER(IntKi), PARAMETER :: M89N2RDxe = 14159 + INTEGER(IntKi), PARAMETER :: M89N3RDxe = 14160 + INTEGER(IntKi), PARAMETER :: M89N4RDxe = 14161 + INTEGER(IntKi), PARAMETER :: M89N5RDxe = 14162 + INTEGER(IntKi), PARAMETER :: M89N6RDxe = 14163 + INTEGER(IntKi), PARAMETER :: M89N7RDxe = 14164 + INTEGER(IntKi), PARAMETER :: M89N8RDxe = 14165 + INTEGER(IntKi), PARAMETER :: M89N9RDxe = 14166 + INTEGER(IntKi), PARAMETER :: M90N1RDxe = 14167 + INTEGER(IntKi), PARAMETER :: M90N2RDxe = 14168 + INTEGER(IntKi), PARAMETER :: M90N3RDxe = 14169 + INTEGER(IntKi), PARAMETER :: M90N4RDxe = 14170 + INTEGER(IntKi), PARAMETER :: M90N5RDxe = 14171 + INTEGER(IntKi), PARAMETER :: M90N6RDxe = 14172 + INTEGER(IntKi), PARAMETER :: M90N7RDxe = 14173 + INTEGER(IntKi), PARAMETER :: M90N8RDxe = 14174 + INTEGER(IntKi), PARAMETER :: M90N9RDxe = 14175 + INTEGER(IntKi), PARAMETER :: M91N1RDxe = 14176 + INTEGER(IntKi), PARAMETER :: M91N2RDxe = 14177 + INTEGER(IntKi), PARAMETER :: M91N3RDxe = 14178 + INTEGER(IntKi), PARAMETER :: M91N4RDxe = 14179 + INTEGER(IntKi), PARAMETER :: M91N5RDxe = 14180 + INTEGER(IntKi), PARAMETER :: M91N6RDxe = 14181 + INTEGER(IntKi), PARAMETER :: M91N7RDxe = 14182 + INTEGER(IntKi), PARAMETER :: M91N8RDxe = 14183 + INTEGER(IntKi), PARAMETER :: M91N9RDxe = 14184 + INTEGER(IntKi), PARAMETER :: M92N1RDxe = 14185 + INTEGER(IntKi), PARAMETER :: M92N2RDxe = 14186 + INTEGER(IntKi), PARAMETER :: M92N3RDxe = 14187 + INTEGER(IntKi), PARAMETER :: M92N4RDxe = 14188 + INTEGER(IntKi), PARAMETER :: M92N5RDxe = 14189 + INTEGER(IntKi), PARAMETER :: M92N6RDxe = 14190 + INTEGER(IntKi), PARAMETER :: M92N7RDxe = 14191 + INTEGER(IntKi), PARAMETER :: M92N8RDxe = 14192 + INTEGER(IntKi), PARAMETER :: M92N9RDxe = 14193 + INTEGER(IntKi), PARAMETER :: M93N1RDxe = 14194 + INTEGER(IntKi), PARAMETER :: M93N2RDxe = 14195 + INTEGER(IntKi), PARAMETER :: M93N3RDxe = 14196 + INTEGER(IntKi), PARAMETER :: M93N4RDxe = 14197 + INTEGER(IntKi), PARAMETER :: M93N5RDxe = 14198 + INTEGER(IntKi), PARAMETER :: M93N6RDxe = 14199 + INTEGER(IntKi), PARAMETER :: M93N7RDxe = 14200 + INTEGER(IntKi), PARAMETER :: M93N8RDxe = 14201 + INTEGER(IntKi), PARAMETER :: M93N9RDxe = 14202 + INTEGER(IntKi), PARAMETER :: M94N1RDxe = 14203 + INTEGER(IntKi), PARAMETER :: M94N2RDxe = 14204 + INTEGER(IntKi), PARAMETER :: M94N3RDxe = 14205 + INTEGER(IntKi), PARAMETER :: M94N4RDxe = 14206 + INTEGER(IntKi), PARAMETER :: M94N5RDxe = 14207 + INTEGER(IntKi), PARAMETER :: M94N6RDxe = 14208 + INTEGER(IntKi), PARAMETER :: M94N7RDxe = 14209 + INTEGER(IntKi), PARAMETER :: M94N8RDxe = 14210 + INTEGER(IntKi), PARAMETER :: M94N9RDxe = 14211 + INTEGER(IntKi), PARAMETER :: M95N1RDxe = 14212 + INTEGER(IntKi), PARAMETER :: M95N2RDxe = 14213 + INTEGER(IntKi), PARAMETER :: M95N3RDxe = 14214 + INTEGER(IntKi), PARAMETER :: M95N4RDxe = 14215 + INTEGER(IntKi), PARAMETER :: M95N5RDxe = 14216 + INTEGER(IntKi), PARAMETER :: M95N6RDxe = 14217 + INTEGER(IntKi), PARAMETER :: M95N7RDxe = 14218 + INTEGER(IntKi), PARAMETER :: M95N8RDxe = 14219 + INTEGER(IntKi), PARAMETER :: M95N9RDxe = 14220 + INTEGER(IntKi), PARAMETER :: M96N1RDxe = 14221 + INTEGER(IntKi), PARAMETER :: M96N2RDxe = 14222 + INTEGER(IntKi), PARAMETER :: M96N3RDxe = 14223 + INTEGER(IntKi), PARAMETER :: M96N4RDxe = 14224 + INTEGER(IntKi), PARAMETER :: M96N5RDxe = 14225 + INTEGER(IntKi), PARAMETER :: M96N6RDxe = 14226 + INTEGER(IntKi), PARAMETER :: M96N7RDxe = 14227 + INTEGER(IntKi), PARAMETER :: M96N8RDxe = 14228 + INTEGER(IntKi), PARAMETER :: M96N9RDxe = 14229 + INTEGER(IntKi), PARAMETER :: M97N1RDxe = 14230 + INTEGER(IntKi), PARAMETER :: M97N2RDxe = 14231 + INTEGER(IntKi), PARAMETER :: M97N3RDxe = 14232 + INTEGER(IntKi), PARAMETER :: M97N4RDxe = 14233 + INTEGER(IntKi), PARAMETER :: M97N5RDxe = 14234 + INTEGER(IntKi), PARAMETER :: M97N6RDxe = 14235 + INTEGER(IntKi), PARAMETER :: M97N7RDxe = 14236 + INTEGER(IntKi), PARAMETER :: M97N8RDxe = 14237 + INTEGER(IntKi), PARAMETER :: M97N9RDxe = 14238 + INTEGER(IntKi), PARAMETER :: M98N1RDxe = 14239 + INTEGER(IntKi), PARAMETER :: M98N2RDxe = 14240 + INTEGER(IntKi), PARAMETER :: M98N3RDxe = 14241 + INTEGER(IntKi), PARAMETER :: M98N4RDxe = 14242 + INTEGER(IntKi), PARAMETER :: M98N5RDxe = 14243 + INTEGER(IntKi), PARAMETER :: M98N6RDxe = 14244 + INTEGER(IntKi), PARAMETER :: M98N7RDxe = 14245 + INTEGER(IntKi), PARAMETER :: M98N8RDxe = 14246 + INTEGER(IntKi), PARAMETER :: M98N9RDxe = 14247 + INTEGER(IntKi), PARAMETER :: M99N1RDxe = 14248 + INTEGER(IntKi), PARAMETER :: M99N2RDxe = 14249 + INTEGER(IntKi), PARAMETER :: M99N3RDxe = 14250 + INTEGER(IntKi), PARAMETER :: M99N4RDxe = 14251 + INTEGER(IntKi), PARAMETER :: M99N5RDxe = 14252 + INTEGER(IntKi), PARAMETER :: M99N6RDxe = 14253 + INTEGER(IntKi), PARAMETER :: M99N7RDxe = 14254 + INTEGER(IntKi), PARAMETER :: M99N8RDxe = 14255 + INTEGER(IntKi), PARAMETER :: M99N9RDxe = 14256 + INTEGER(IntKi), PARAMETER :: M01N1RDye = 14257 + INTEGER(IntKi), PARAMETER :: M01N2RDye = 14258 + INTEGER(IntKi), PARAMETER :: M01N3RDye = 14259 + INTEGER(IntKi), PARAMETER :: M01N4RDye = 14260 + INTEGER(IntKi), PARAMETER :: M01N5RDye = 14261 + INTEGER(IntKi), PARAMETER :: M01N6RDye = 14262 + INTEGER(IntKi), PARAMETER :: M01N7RDye = 14263 + INTEGER(IntKi), PARAMETER :: M01N8RDye = 14264 + INTEGER(IntKi), PARAMETER :: M01N9RDye = 14265 + INTEGER(IntKi), PARAMETER :: M02N1RDye = 14266 + INTEGER(IntKi), PARAMETER :: M02N2RDye = 14267 + INTEGER(IntKi), PARAMETER :: M02N3RDye = 14268 + INTEGER(IntKi), PARAMETER :: M02N4RDye = 14269 + INTEGER(IntKi), PARAMETER :: M02N5RDye = 14270 + INTEGER(IntKi), PARAMETER :: M02N6RDye = 14271 + INTEGER(IntKi), PARAMETER :: M02N7RDye = 14272 + INTEGER(IntKi), PARAMETER :: M02N8RDye = 14273 + INTEGER(IntKi), PARAMETER :: M02N9RDye = 14274 + INTEGER(IntKi), PARAMETER :: M03N1RDye = 14275 + INTEGER(IntKi), PARAMETER :: M03N2RDye = 14276 + INTEGER(IntKi), PARAMETER :: M03N3RDye = 14277 + INTEGER(IntKi), PARAMETER :: M03N4RDye = 14278 + INTEGER(IntKi), PARAMETER :: M03N5RDye = 14279 + INTEGER(IntKi), PARAMETER :: M03N6RDye = 14280 + INTEGER(IntKi), PARAMETER :: M03N7RDye = 14281 + INTEGER(IntKi), PARAMETER :: M03N8RDye = 14282 + INTEGER(IntKi), PARAMETER :: M03N9RDye = 14283 + INTEGER(IntKi), PARAMETER :: M04N1RDye = 14284 + INTEGER(IntKi), PARAMETER :: M04N2RDye = 14285 + INTEGER(IntKi), PARAMETER :: M04N3RDye = 14286 + INTEGER(IntKi), PARAMETER :: M04N4RDye = 14287 + INTEGER(IntKi), PARAMETER :: M04N5RDye = 14288 + INTEGER(IntKi), PARAMETER :: M04N6RDye = 14289 + INTEGER(IntKi), PARAMETER :: M04N7RDye = 14290 + INTEGER(IntKi), PARAMETER :: M04N8RDye = 14291 + INTEGER(IntKi), PARAMETER :: M04N9RDye = 14292 + INTEGER(IntKi), PARAMETER :: M05N1RDye = 14293 + INTEGER(IntKi), PARAMETER :: M05N2RDye = 14294 + INTEGER(IntKi), PARAMETER :: M05N3RDye = 14295 + INTEGER(IntKi), PARAMETER :: M05N4RDye = 14296 + INTEGER(IntKi), PARAMETER :: M05N5RDye = 14297 + INTEGER(IntKi), PARAMETER :: M05N6RDye = 14298 + INTEGER(IntKi), PARAMETER :: M05N7RDye = 14299 + INTEGER(IntKi), PARAMETER :: M05N8RDye = 14300 + INTEGER(IntKi), PARAMETER :: M05N9RDye = 14301 + INTEGER(IntKi), PARAMETER :: M06N1RDye = 14302 + INTEGER(IntKi), PARAMETER :: M06N2RDye = 14303 + INTEGER(IntKi), PARAMETER :: M06N3RDye = 14304 + INTEGER(IntKi), PARAMETER :: M06N4RDye = 14305 + INTEGER(IntKi), PARAMETER :: M06N5RDye = 14306 + INTEGER(IntKi), PARAMETER :: M06N6RDye = 14307 + INTEGER(IntKi), PARAMETER :: M06N7RDye = 14308 + INTEGER(IntKi), PARAMETER :: M06N8RDye = 14309 + INTEGER(IntKi), PARAMETER :: M06N9RDye = 14310 + INTEGER(IntKi), PARAMETER :: M07N1RDye = 14311 + INTEGER(IntKi), PARAMETER :: M07N2RDye = 14312 + INTEGER(IntKi), PARAMETER :: M07N3RDye = 14313 + INTEGER(IntKi), PARAMETER :: M07N4RDye = 14314 + INTEGER(IntKi), PARAMETER :: M07N5RDye = 14315 + INTEGER(IntKi), PARAMETER :: M07N6RDye = 14316 + INTEGER(IntKi), PARAMETER :: M07N7RDye = 14317 + INTEGER(IntKi), PARAMETER :: M07N8RDye = 14318 + INTEGER(IntKi), PARAMETER :: M07N9RDye = 14319 + INTEGER(IntKi), PARAMETER :: M08N1RDye = 14320 + INTEGER(IntKi), PARAMETER :: M08N2RDye = 14321 + INTEGER(IntKi), PARAMETER :: M08N3RDye = 14322 + INTEGER(IntKi), PARAMETER :: M08N4RDye = 14323 + INTEGER(IntKi), PARAMETER :: M08N5RDye = 14324 + INTEGER(IntKi), PARAMETER :: M08N6RDye = 14325 + INTEGER(IntKi), PARAMETER :: M08N7RDye = 14326 + INTEGER(IntKi), PARAMETER :: M08N8RDye = 14327 + INTEGER(IntKi), PARAMETER :: M08N9RDye = 14328 + INTEGER(IntKi), PARAMETER :: M09N1RDye = 14329 + INTEGER(IntKi), PARAMETER :: M09N2RDye = 14330 + INTEGER(IntKi), PARAMETER :: M09N3RDye = 14331 + INTEGER(IntKi), PARAMETER :: M09N4RDye = 14332 + INTEGER(IntKi), PARAMETER :: M09N5RDye = 14333 + INTEGER(IntKi), PARAMETER :: M09N6RDye = 14334 + INTEGER(IntKi), PARAMETER :: M09N7RDye = 14335 + INTEGER(IntKi), PARAMETER :: M09N8RDye = 14336 + INTEGER(IntKi), PARAMETER :: M09N9RDye = 14337 + INTEGER(IntKi), PARAMETER :: M10N1RDye = 14338 + INTEGER(IntKi), PARAMETER :: M10N2RDye = 14339 + INTEGER(IntKi), PARAMETER :: M10N3RDye = 14340 + INTEGER(IntKi), PARAMETER :: M10N4RDye = 14341 + INTEGER(IntKi), PARAMETER :: M10N5RDye = 14342 + INTEGER(IntKi), PARAMETER :: M10N6RDye = 14343 + INTEGER(IntKi), PARAMETER :: M10N7RDye = 14344 + INTEGER(IntKi), PARAMETER :: M10N8RDye = 14345 + INTEGER(IntKi), PARAMETER :: M10N9RDye = 14346 + INTEGER(IntKi), PARAMETER :: M11N1RDye = 14347 + INTEGER(IntKi), PARAMETER :: M11N2RDye = 14348 + INTEGER(IntKi), PARAMETER :: M11N3RDye = 14349 + INTEGER(IntKi), PARAMETER :: M11N4RDye = 14350 + INTEGER(IntKi), PARAMETER :: M11N5RDye = 14351 + INTEGER(IntKi), PARAMETER :: M11N6RDye = 14352 + INTEGER(IntKi), PARAMETER :: M11N7RDye = 14353 + INTEGER(IntKi), PARAMETER :: M11N8RDye = 14354 + INTEGER(IntKi), PARAMETER :: M11N9RDye = 14355 + INTEGER(IntKi), PARAMETER :: M12N1RDye = 14356 + INTEGER(IntKi), PARAMETER :: M12N2RDye = 14357 + INTEGER(IntKi), PARAMETER :: M12N3RDye = 14358 + INTEGER(IntKi), PARAMETER :: M12N4RDye = 14359 + INTEGER(IntKi), PARAMETER :: M12N5RDye = 14360 + INTEGER(IntKi), PARAMETER :: M12N6RDye = 14361 + INTEGER(IntKi), PARAMETER :: M12N7RDye = 14362 + INTEGER(IntKi), PARAMETER :: M12N8RDye = 14363 + INTEGER(IntKi), PARAMETER :: M12N9RDye = 14364 + INTEGER(IntKi), PARAMETER :: M13N1RDye = 14365 + INTEGER(IntKi), PARAMETER :: M13N2RDye = 14366 + INTEGER(IntKi), PARAMETER :: M13N3RDye = 14367 + INTEGER(IntKi), PARAMETER :: M13N4RDye = 14368 + INTEGER(IntKi), PARAMETER :: M13N5RDye = 14369 + INTEGER(IntKi), PARAMETER :: M13N6RDye = 14370 + INTEGER(IntKi), PARAMETER :: M13N7RDye = 14371 + INTEGER(IntKi), PARAMETER :: M13N8RDye = 14372 + INTEGER(IntKi), PARAMETER :: M13N9RDye = 14373 + INTEGER(IntKi), PARAMETER :: M14N1RDye = 14374 + INTEGER(IntKi), PARAMETER :: M14N2RDye = 14375 + INTEGER(IntKi), PARAMETER :: M14N3RDye = 14376 + INTEGER(IntKi), PARAMETER :: M14N4RDye = 14377 + INTEGER(IntKi), PARAMETER :: M14N5RDye = 14378 + INTEGER(IntKi), PARAMETER :: M14N6RDye = 14379 + INTEGER(IntKi), PARAMETER :: M14N7RDye = 14380 + INTEGER(IntKi), PARAMETER :: M14N8RDye = 14381 + INTEGER(IntKi), PARAMETER :: M14N9RDye = 14382 + INTEGER(IntKi), PARAMETER :: M15N1RDye = 14383 + INTEGER(IntKi), PARAMETER :: M15N2RDye = 14384 + INTEGER(IntKi), PARAMETER :: M15N3RDye = 14385 + INTEGER(IntKi), PARAMETER :: M15N4RDye = 14386 + INTEGER(IntKi), PARAMETER :: M15N5RDye = 14387 + INTEGER(IntKi), PARAMETER :: M15N6RDye = 14388 + INTEGER(IntKi), PARAMETER :: M15N7RDye = 14389 + INTEGER(IntKi), PARAMETER :: M15N8RDye = 14390 + INTEGER(IntKi), PARAMETER :: M15N9RDye = 14391 + INTEGER(IntKi), PARAMETER :: M16N1RDye = 14392 + INTEGER(IntKi), PARAMETER :: M16N2RDye = 14393 + INTEGER(IntKi), PARAMETER :: M16N3RDye = 14394 + INTEGER(IntKi), PARAMETER :: M16N4RDye = 14395 + INTEGER(IntKi), PARAMETER :: M16N5RDye = 14396 + INTEGER(IntKi), PARAMETER :: M16N6RDye = 14397 + INTEGER(IntKi), PARAMETER :: M16N7RDye = 14398 + INTEGER(IntKi), PARAMETER :: M16N8RDye = 14399 + INTEGER(IntKi), PARAMETER :: M16N9RDye = 14400 + INTEGER(IntKi), PARAMETER :: M17N1RDye = 14401 + INTEGER(IntKi), PARAMETER :: M17N2RDye = 14402 + INTEGER(IntKi), PARAMETER :: M17N3RDye = 14403 + INTEGER(IntKi), PARAMETER :: M17N4RDye = 14404 + INTEGER(IntKi), PARAMETER :: M17N5RDye = 14405 + INTEGER(IntKi), PARAMETER :: M17N6RDye = 14406 + INTEGER(IntKi), PARAMETER :: M17N7RDye = 14407 + INTEGER(IntKi), PARAMETER :: M17N8RDye = 14408 + INTEGER(IntKi), PARAMETER :: M17N9RDye = 14409 + INTEGER(IntKi), PARAMETER :: M18N1RDye = 14410 + INTEGER(IntKi), PARAMETER :: M18N2RDye = 14411 + INTEGER(IntKi), PARAMETER :: M18N3RDye = 14412 + INTEGER(IntKi), PARAMETER :: M18N4RDye = 14413 + INTEGER(IntKi), PARAMETER :: M18N5RDye = 14414 + INTEGER(IntKi), PARAMETER :: M18N6RDye = 14415 + INTEGER(IntKi), PARAMETER :: M18N7RDye = 14416 + INTEGER(IntKi), PARAMETER :: M18N8RDye = 14417 + INTEGER(IntKi), PARAMETER :: M18N9RDye = 14418 + INTEGER(IntKi), PARAMETER :: M19N1RDye = 14419 + INTEGER(IntKi), PARAMETER :: M19N2RDye = 14420 + INTEGER(IntKi), PARAMETER :: M19N3RDye = 14421 + INTEGER(IntKi), PARAMETER :: M19N4RDye = 14422 + INTEGER(IntKi), PARAMETER :: M19N5RDye = 14423 + INTEGER(IntKi), PARAMETER :: M19N6RDye = 14424 + INTEGER(IntKi), PARAMETER :: M19N7RDye = 14425 + INTEGER(IntKi), PARAMETER :: M19N8RDye = 14426 + INTEGER(IntKi), PARAMETER :: M19N9RDye = 14427 + INTEGER(IntKi), PARAMETER :: M20N1RDye = 14428 + INTEGER(IntKi), PARAMETER :: M20N2RDye = 14429 + INTEGER(IntKi), PARAMETER :: M20N3RDye = 14430 + INTEGER(IntKi), PARAMETER :: M20N4RDye = 14431 + INTEGER(IntKi), PARAMETER :: M20N5RDye = 14432 + INTEGER(IntKi), PARAMETER :: M20N6RDye = 14433 + INTEGER(IntKi), PARAMETER :: M20N7RDye = 14434 + INTEGER(IntKi), PARAMETER :: M20N8RDye = 14435 + INTEGER(IntKi), PARAMETER :: M20N9RDye = 14436 + INTEGER(IntKi), PARAMETER :: M21N1RDye = 14437 + INTEGER(IntKi), PARAMETER :: M21N2RDye = 14438 + INTEGER(IntKi), PARAMETER :: M21N3RDye = 14439 + INTEGER(IntKi), PARAMETER :: M21N4RDye = 14440 + INTEGER(IntKi), PARAMETER :: M21N5RDye = 14441 + INTEGER(IntKi), PARAMETER :: M21N6RDye = 14442 + INTEGER(IntKi), PARAMETER :: M21N7RDye = 14443 + INTEGER(IntKi), PARAMETER :: M21N8RDye = 14444 + INTEGER(IntKi), PARAMETER :: M21N9RDye = 14445 + INTEGER(IntKi), PARAMETER :: M22N1RDye = 14446 + INTEGER(IntKi), PARAMETER :: M22N2RDye = 14447 + INTEGER(IntKi), PARAMETER :: M22N3RDye = 14448 + INTEGER(IntKi), PARAMETER :: M22N4RDye = 14449 + INTEGER(IntKi), PARAMETER :: M22N5RDye = 14450 + INTEGER(IntKi), PARAMETER :: M22N6RDye = 14451 + INTEGER(IntKi), PARAMETER :: M22N7RDye = 14452 + INTEGER(IntKi), PARAMETER :: M22N8RDye = 14453 + INTEGER(IntKi), PARAMETER :: M22N9RDye = 14454 + INTEGER(IntKi), PARAMETER :: M23N1RDye = 14455 + INTEGER(IntKi), PARAMETER :: M23N2RDye = 14456 + INTEGER(IntKi), PARAMETER :: M23N3RDye = 14457 + INTEGER(IntKi), PARAMETER :: M23N4RDye = 14458 + INTEGER(IntKi), PARAMETER :: M23N5RDye = 14459 + INTEGER(IntKi), PARAMETER :: M23N6RDye = 14460 + INTEGER(IntKi), PARAMETER :: M23N7RDye = 14461 + INTEGER(IntKi), PARAMETER :: M23N8RDye = 14462 + INTEGER(IntKi), PARAMETER :: M23N9RDye = 14463 + INTEGER(IntKi), PARAMETER :: M24N1RDye = 14464 + INTEGER(IntKi), PARAMETER :: M24N2RDye = 14465 + INTEGER(IntKi), PARAMETER :: M24N3RDye = 14466 + INTEGER(IntKi), PARAMETER :: M24N4RDye = 14467 + INTEGER(IntKi), PARAMETER :: M24N5RDye = 14468 + INTEGER(IntKi), PARAMETER :: M24N6RDye = 14469 + INTEGER(IntKi), PARAMETER :: M24N7RDye = 14470 + INTEGER(IntKi), PARAMETER :: M24N8RDye = 14471 + INTEGER(IntKi), PARAMETER :: M24N9RDye = 14472 + INTEGER(IntKi), PARAMETER :: M25N1RDye = 14473 + INTEGER(IntKi), PARAMETER :: M25N2RDye = 14474 + INTEGER(IntKi), PARAMETER :: M25N3RDye = 14475 + INTEGER(IntKi), PARAMETER :: M25N4RDye = 14476 + INTEGER(IntKi), PARAMETER :: M25N5RDye = 14477 + INTEGER(IntKi), PARAMETER :: M25N6RDye = 14478 + INTEGER(IntKi), PARAMETER :: M25N7RDye = 14479 + INTEGER(IntKi), PARAMETER :: M25N8RDye = 14480 + INTEGER(IntKi), PARAMETER :: M25N9RDye = 14481 + INTEGER(IntKi), PARAMETER :: M26N1RDye = 14482 + INTEGER(IntKi), PARAMETER :: M26N2RDye = 14483 + INTEGER(IntKi), PARAMETER :: M26N3RDye = 14484 + INTEGER(IntKi), PARAMETER :: M26N4RDye = 14485 + INTEGER(IntKi), PARAMETER :: M26N5RDye = 14486 + INTEGER(IntKi), PARAMETER :: M26N6RDye = 14487 + INTEGER(IntKi), PARAMETER :: M26N7RDye = 14488 + INTEGER(IntKi), PARAMETER :: M26N8RDye = 14489 + INTEGER(IntKi), PARAMETER :: M26N9RDye = 14490 + INTEGER(IntKi), PARAMETER :: M27N1RDye = 14491 + INTEGER(IntKi), PARAMETER :: M27N2RDye = 14492 + INTEGER(IntKi), PARAMETER :: M27N3RDye = 14493 + INTEGER(IntKi), PARAMETER :: M27N4RDye = 14494 + INTEGER(IntKi), PARAMETER :: M27N5RDye = 14495 + INTEGER(IntKi), PARAMETER :: M27N6RDye = 14496 + INTEGER(IntKi), PARAMETER :: M27N7RDye = 14497 + INTEGER(IntKi), PARAMETER :: M27N8RDye = 14498 + INTEGER(IntKi), PARAMETER :: M27N9RDye = 14499 + INTEGER(IntKi), PARAMETER :: M28N1RDye = 14500 + INTEGER(IntKi), PARAMETER :: M28N2RDye = 14501 + INTEGER(IntKi), PARAMETER :: M28N3RDye = 14502 + INTEGER(IntKi), PARAMETER :: M28N4RDye = 14503 + INTEGER(IntKi), PARAMETER :: M28N5RDye = 14504 + INTEGER(IntKi), PARAMETER :: M28N6RDye = 14505 + INTEGER(IntKi), PARAMETER :: M28N7RDye = 14506 + INTEGER(IntKi), PARAMETER :: M28N8RDye = 14507 + INTEGER(IntKi), PARAMETER :: M28N9RDye = 14508 + INTEGER(IntKi), PARAMETER :: M29N1RDye = 14509 + INTEGER(IntKi), PARAMETER :: M29N2RDye = 14510 + INTEGER(IntKi), PARAMETER :: M29N3RDye = 14511 + INTEGER(IntKi), PARAMETER :: M29N4RDye = 14512 + INTEGER(IntKi), PARAMETER :: M29N5RDye = 14513 + INTEGER(IntKi), PARAMETER :: M29N6RDye = 14514 + INTEGER(IntKi), PARAMETER :: M29N7RDye = 14515 + INTEGER(IntKi), PARAMETER :: M29N8RDye = 14516 + INTEGER(IntKi), PARAMETER :: M29N9RDye = 14517 + INTEGER(IntKi), PARAMETER :: M30N1RDye = 14518 + INTEGER(IntKi), PARAMETER :: M30N2RDye = 14519 + INTEGER(IntKi), PARAMETER :: M30N3RDye = 14520 + INTEGER(IntKi), PARAMETER :: M30N4RDye = 14521 + INTEGER(IntKi), PARAMETER :: M30N5RDye = 14522 + INTEGER(IntKi), PARAMETER :: M30N6RDye = 14523 + INTEGER(IntKi), PARAMETER :: M30N7RDye = 14524 + INTEGER(IntKi), PARAMETER :: M30N8RDye = 14525 + INTEGER(IntKi), PARAMETER :: M30N9RDye = 14526 + INTEGER(IntKi), PARAMETER :: M31N1RDye = 14527 + INTEGER(IntKi), PARAMETER :: M31N2RDye = 14528 + INTEGER(IntKi), PARAMETER :: M31N3RDye = 14529 + INTEGER(IntKi), PARAMETER :: M31N4RDye = 14530 + INTEGER(IntKi), PARAMETER :: M31N5RDye = 14531 + INTEGER(IntKi), PARAMETER :: M31N6RDye = 14532 + INTEGER(IntKi), PARAMETER :: M31N7RDye = 14533 + INTEGER(IntKi), PARAMETER :: M31N8RDye = 14534 + INTEGER(IntKi), PARAMETER :: M31N9RDye = 14535 + INTEGER(IntKi), PARAMETER :: M32N1RDye = 14536 + INTEGER(IntKi), PARAMETER :: M32N2RDye = 14537 + INTEGER(IntKi), PARAMETER :: M32N3RDye = 14538 + INTEGER(IntKi), PARAMETER :: M32N4RDye = 14539 + INTEGER(IntKi), PARAMETER :: M32N5RDye = 14540 + INTEGER(IntKi), PARAMETER :: M32N6RDye = 14541 + INTEGER(IntKi), PARAMETER :: M32N7RDye = 14542 + INTEGER(IntKi), PARAMETER :: M32N8RDye = 14543 + INTEGER(IntKi), PARAMETER :: M32N9RDye = 14544 + INTEGER(IntKi), PARAMETER :: M33N1RDye = 14545 + INTEGER(IntKi), PARAMETER :: M33N2RDye = 14546 + INTEGER(IntKi), PARAMETER :: M33N3RDye = 14547 + INTEGER(IntKi), PARAMETER :: M33N4RDye = 14548 + INTEGER(IntKi), PARAMETER :: M33N5RDye = 14549 + INTEGER(IntKi), PARAMETER :: M33N6RDye = 14550 + INTEGER(IntKi), PARAMETER :: M33N7RDye = 14551 + INTEGER(IntKi), PARAMETER :: M33N8RDye = 14552 + INTEGER(IntKi), PARAMETER :: M33N9RDye = 14553 + INTEGER(IntKi), PARAMETER :: M34N1RDye = 14554 + INTEGER(IntKi), PARAMETER :: M34N2RDye = 14555 + INTEGER(IntKi), PARAMETER :: M34N3RDye = 14556 + INTEGER(IntKi), PARAMETER :: M34N4RDye = 14557 + INTEGER(IntKi), PARAMETER :: M34N5RDye = 14558 + INTEGER(IntKi), PARAMETER :: M34N6RDye = 14559 + INTEGER(IntKi), PARAMETER :: M34N7RDye = 14560 + INTEGER(IntKi), PARAMETER :: M34N8RDye = 14561 + INTEGER(IntKi), PARAMETER :: M34N9RDye = 14562 + INTEGER(IntKi), PARAMETER :: M35N1RDye = 14563 + INTEGER(IntKi), PARAMETER :: M35N2RDye = 14564 + INTEGER(IntKi), PARAMETER :: M35N3RDye = 14565 + INTEGER(IntKi), PARAMETER :: M35N4RDye = 14566 + INTEGER(IntKi), PARAMETER :: M35N5RDye = 14567 + INTEGER(IntKi), PARAMETER :: M35N6RDye = 14568 + INTEGER(IntKi), PARAMETER :: M35N7RDye = 14569 + INTEGER(IntKi), PARAMETER :: M35N8RDye = 14570 + INTEGER(IntKi), PARAMETER :: M35N9RDye = 14571 + INTEGER(IntKi), PARAMETER :: M36N1RDye = 14572 + INTEGER(IntKi), PARAMETER :: M36N2RDye = 14573 + INTEGER(IntKi), PARAMETER :: M36N3RDye = 14574 + INTEGER(IntKi), PARAMETER :: M36N4RDye = 14575 + INTEGER(IntKi), PARAMETER :: M36N5RDye = 14576 + INTEGER(IntKi), PARAMETER :: M36N6RDye = 14577 + INTEGER(IntKi), PARAMETER :: M36N7RDye = 14578 + INTEGER(IntKi), PARAMETER :: M36N8RDye = 14579 + INTEGER(IntKi), PARAMETER :: M36N9RDye = 14580 + INTEGER(IntKi), PARAMETER :: M37N1RDye = 14581 + INTEGER(IntKi), PARAMETER :: M37N2RDye = 14582 + INTEGER(IntKi), PARAMETER :: M37N3RDye = 14583 + INTEGER(IntKi), PARAMETER :: M37N4RDye = 14584 + INTEGER(IntKi), PARAMETER :: M37N5RDye = 14585 + INTEGER(IntKi), PARAMETER :: M37N6RDye = 14586 + INTEGER(IntKi), PARAMETER :: M37N7RDye = 14587 + INTEGER(IntKi), PARAMETER :: M37N8RDye = 14588 + INTEGER(IntKi), PARAMETER :: M37N9RDye = 14589 + INTEGER(IntKi), PARAMETER :: M38N1RDye = 14590 + INTEGER(IntKi), PARAMETER :: M38N2RDye = 14591 + INTEGER(IntKi), PARAMETER :: M38N3RDye = 14592 + INTEGER(IntKi), PARAMETER :: M38N4RDye = 14593 + INTEGER(IntKi), PARAMETER :: M38N5RDye = 14594 + INTEGER(IntKi), PARAMETER :: M38N6RDye = 14595 + INTEGER(IntKi), PARAMETER :: M38N7RDye = 14596 + INTEGER(IntKi), PARAMETER :: M38N8RDye = 14597 + INTEGER(IntKi), PARAMETER :: M38N9RDye = 14598 + INTEGER(IntKi), PARAMETER :: M39N1RDye = 14599 + INTEGER(IntKi), PARAMETER :: M39N2RDye = 14600 + INTEGER(IntKi), PARAMETER :: M39N3RDye = 14601 + INTEGER(IntKi), PARAMETER :: M39N4RDye = 14602 + INTEGER(IntKi), PARAMETER :: M39N5RDye = 14603 + INTEGER(IntKi), PARAMETER :: M39N6RDye = 14604 + INTEGER(IntKi), PARAMETER :: M39N7RDye = 14605 + INTEGER(IntKi), PARAMETER :: M39N8RDye = 14606 + INTEGER(IntKi), PARAMETER :: M39N9RDye = 14607 + INTEGER(IntKi), PARAMETER :: M40N1RDye = 14608 + INTEGER(IntKi), PARAMETER :: M40N2RDye = 14609 + INTEGER(IntKi), PARAMETER :: M40N3RDye = 14610 + INTEGER(IntKi), PARAMETER :: M40N4RDye = 14611 + INTEGER(IntKi), PARAMETER :: M40N5RDye = 14612 + INTEGER(IntKi), PARAMETER :: M40N6RDye = 14613 + INTEGER(IntKi), PARAMETER :: M40N7RDye = 14614 + INTEGER(IntKi), PARAMETER :: M40N8RDye = 14615 + INTEGER(IntKi), PARAMETER :: M40N9RDye = 14616 + INTEGER(IntKi), PARAMETER :: M41N1RDye = 14617 + INTEGER(IntKi), PARAMETER :: M41N2RDye = 14618 + INTEGER(IntKi), PARAMETER :: M41N3RDye = 14619 + INTEGER(IntKi), PARAMETER :: M41N4RDye = 14620 + INTEGER(IntKi), PARAMETER :: M41N5RDye = 14621 + INTEGER(IntKi), PARAMETER :: M41N6RDye = 14622 + INTEGER(IntKi), PARAMETER :: M41N7RDye = 14623 + INTEGER(IntKi), PARAMETER :: M41N8RDye = 14624 + INTEGER(IntKi), PARAMETER :: M41N9RDye = 14625 + INTEGER(IntKi), PARAMETER :: M42N1RDye = 14626 + INTEGER(IntKi), PARAMETER :: M42N2RDye = 14627 + INTEGER(IntKi), PARAMETER :: M42N3RDye = 14628 + INTEGER(IntKi), PARAMETER :: M42N4RDye = 14629 + INTEGER(IntKi), PARAMETER :: M42N5RDye = 14630 + INTEGER(IntKi), PARAMETER :: M42N6RDye = 14631 + INTEGER(IntKi), PARAMETER :: M42N7RDye = 14632 + INTEGER(IntKi), PARAMETER :: M42N8RDye = 14633 + INTEGER(IntKi), PARAMETER :: M42N9RDye = 14634 + INTEGER(IntKi), PARAMETER :: M43N1RDye = 14635 + INTEGER(IntKi), PARAMETER :: M43N2RDye = 14636 + INTEGER(IntKi), PARAMETER :: M43N3RDye = 14637 + INTEGER(IntKi), PARAMETER :: M43N4RDye = 14638 + INTEGER(IntKi), PARAMETER :: M43N5RDye = 14639 + INTEGER(IntKi), PARAMETER :: M43N6RDye = 14640 + INTEGER(IntKi), PARAMETER :: M43N7RDye = 14641 + INTEGER(IntKi), PARAMETER :: M43N8RDye = 14642 + INTEGER(IntKi), PARAMETER :: M43N9RDye = 14643 + INTEGER(IntKi), PARAMETER :: M44N1RDye = 14644 + INTEGER(IntKi), PARAMETER :: M44N2RDye = 14645 + INTEGER(IntKi), PARAMETER :: M44N3RDye = 14646 + INTEGER(IntKi), PARAMETER :: M44N4RDye = 14647 + INTEGER(IntKi), PARAMETER :: M44N5RDye = 14648 + INTEGER(IntKi), PARAMETER :: M44N6RDye = 14649 + INTEGER(IntKi), PARAMETER :: M44N7RDye = 14650 + INTEGER(IntKi), PARAMETER :: M44N8RDye = 14651 + INTEGER(IntKi), PARAMETER :: M44N9RDye = 14652 + INTEGER(IntKi), PARAMETER :: M45N1RDye = 14653 + INTEGER(IntKi), PARAMETER :: M45N2RDye = 14654 + INTEGER(IntKi), PARAMETER :: M45N3RDye = 14655 + INTEGER(IntKi), PARAMETER :: M45N4RDye = 14656 + INTEGER(IntKi), PARAMETER :: M45N5RDye = 14657 + INTEGER(IntKi), PARAMETER :: M45N6RDye = 14658 + INTEGER(IntKi), PARAMETER :: M45N7RDye = 14659 + INTEGER(IntKi), PARAMETER :: M45N8RDye = 14660 + INTEGER(IntKi), PARAMETER :: M45N9RDye = 14661 + INTEGER(IntKi), PARAMETER :: M46N1RDye = 14662 + INTEGER(IntKi), PARAMETER :: M46N2RDye = 14663 + INTEGER(IntKi), PARAMETER :: M46N3RDye = 14664 + INTEGER(IntKi), PARAMETER :: M46N4RDye = 14665 + INTEGER(IntKi), PARAMETER :: M46N5RDye = 14666 + INTEGER(IntKi), PARAMETER :: M46N6RDye = 14667 + INTEGER(IntKi), PARAMETER :: M46N7RDye = 14668 + INTEGER(IntKi), PARAMETER :: M46N8RDye = 14669 + INTEGER(IntKi), PARAMETER :: M46N9RDye = 14670 + INTEGER(IntKi), PARAMETER :: M47N1RDye = 14671 + INTEGER(IntKi), PARAMETER :: M47N2RDye = 14672 + INTEGER(IntKi), PARAMETER :: M47N3RDye = 14673 + INTEGER(IntKi), PARAMETER :: M47N4RDye = 14674 + INTEGER(IntKi), PARAMETER :: M47N5RDye = 14675 + INTEGER(IntKi), PARAMETER :: M47N6RDye = 14676 + INTEGER(IntKi), PARAMETER :: M47N7RDye = 14677 + INTEGER(IntKi), PARAMETER :: M47N8RDye = 14678 + INTEGER(IntKi), PARAMETER :: M47N9RDye = 14679 + INTEGER(IntKi), PARAMETER :: M48N1RDye = 14680 + INTEGER(IntKi), PARAMETER :: M48N2RDye = 14681 + INTEGER(IntKi), PARAMETER :: M48N3RDye = 14682 + INTEGER(IntKi), PARAMETER :: M48N4RDye = 14683 + INTEGER(IntKi), PARAMETER :: M48N5RDye = 14684 + INTEGER(IntKi), PARAMETER :: M48N6RDye = 14685 + INTEGER(IntKi), PARAMETER :: M48N7RDye = 14686 + INTEGER(IntKi), PARAMETER :: M48N8RDye = 14687 + INTEGER(IntKi), PARAMETER :: M48N9RDye = 14688 + INTEGER(IntKi), PARAMETER :: M49N1RDye = 14689 + INTEGER(IntKi), PARAMETER :: M49N2RDye = 14690 + INTEGER(IntKi), PARAMETER :: M49N3RDye = 14691 + INTEGER(IntKi), PARAMETER :: M49N4RDye = 14692 + INTEGER(IntKi), PARAMETER :: M49N5RDye = 14693 + INTEGER(IntKi), PARAMETER :: M49N6RDye = 14694 + INTEGER(IntKi), PARAMETER :: M49N7RDye = 14695 + INTEGER(IntKi), PARAMETER :: M49N8RDye = 14696 + INTEGER(IntKi), PARAMETER :: M49N9RDye = 14697 + INTEGER(IntKi), PARAMETER :: M50N1RDye = 14698 + INTEGER(IntKi), PARAMETER :: M50N2RDye = 14699 + INTEGER(IntKi), PARAMETER :: M50N3RDye = 14700 + INTEGER(IntKi), PARAMETER :: M50N4RDye = 14701 + INTEGER(IntKi), PARAMETER :: M50N5RDye = 14702 + INTEGER(IntKi), PARAMETER :: M50N6RDye = 14703 + INTEGER(IntKi), PARAMETER :: M50N7RDye = 14704 + INTEGER(IntKi), PARAMETER :: M50N8RDye = 14705 + INTEGER(IntKi), PARAMETER :: M50N9RDye = 14706 + INTEGER(IntKi), PARAMETER :: M51N1RDye = 14707 + INTEGER(IntKi), PARAMETER :: M51N2RDye = 14708 + INTEGER(IntKi), PARAMETER :: M51N3RDye = 14709 + INTEGER(IntKi), PARAMETER :: M51N4RDye = 14710 + INTEGER(IntKi), PARAMETER :: M51N5RDye = 14711 + INTEGER(IntKi), PARAMETER :: M51N6RDye = 14712 + INTEGER(IntKi), PARAMETER :: M51N7RDye = 14713 + INTEGER(IntKi), PARAMETER :: M51N8RDye = 14714 + INTEGER(IntKi), PARAMETER :: M51N9RDye = 14715 + INTEGER(IntKi), PARAMETER :: M52N1RDye = 14716 + INTEGER(IntKi), PARAMETER :: M52N2RDye = 14717 + INTEGER(IntKi), PARAMETER :: M52N3RDye = 14718 + INTEGER(IntKi), PARAMETER :: M52N4RDye = 14719 + INTEGER(IntKi), PARAMETER :: M52N5RDye = 14720 + INTEGER(IntKi), PARAMETER :: M52N6RDye = 14721 + INTEGER(IntKi), PARAMETER :: M52N7RDye = 14722 + INTEGER(IntKi), PARAMETER :: M52N8RDye = 14723 + INTEGER(IntKi), PARAMETER :: M52N9RDye = 14724 + INTEGER(IntKi), PARAMETER :: M53N1RDye = 14725 + INTEGER(IntKi), PARAMETER :: M53N2RDye = 14726 + INTEGER(IntKi), PARAMETER :: M53N3RDye = 14727 + INTEGER(IntKi), PARAMETER :: M53N4RDye = 14728 + INTEGER(IntKi), PARAMETER :: M53N5RDye = 14729 + INTEGER(IntKi), PARAMETER :: M53N6RDye = 14730 + INTEGER(IntKi), PARAMETER :: M53N7RDye = 14731 + INTEGER(IntKi), PARAMETER :: M53N8RDye = 14732 + INTEGER(IntKi), PARAMETER :: M53N9RDye = 14733 + INTEGER(IntKi), PARAMETER :: M54N1RDye = 14734 + INTEGER(IntKi), PARAMETER :: M54N2RDye = 14735 + INTEGER(IntKi), PARAMETER :: M54N3RDye = 14736 + INTEGER(IntKi), PARAMETER :: M54N4RDye = 14737 + INTEGER(IntKi), PARAMETER :: M54N5RDye = 14738 + INTEGER(IntKi), PARAMETER :: M54N6RDye = 14739 + INTEGER(IntKi), PARAMETER :: M54N7RDye = 14740 + INTEGER(IntKi), PARAMETER :: M54N8RDye = 14741 + INTEGER(IntKi), PARAMETER :: M54N9RDye = 14742 + INTEGER(IntKi), PARAMETER :: M55N1RDye = 14743 + INTEGER(IntKi), PARAMETER :: M55N2RDye = 14744 + INTEGER(IntKi), PARAMETER :: M55N3RDye = 14745 + INTEGER(IntKi), PARAMETER :: M55N4RDye = 14746 + INTEGER(IntKi), PARAMETER :: M55N5RDye = 14747 + INTEGER(IntKi), PARAMETER :: M55N6RDye = 14748 + INTEGER(IntKi), PARAMETER :: M55N7RDye = 14749 + INTEGER(IntKi), PARAMETER :: M55N8RDye = 14750 + INTEGER(IntKi), PARAMETER :: M55N9RDye = 14751 + INTEGER(IntKi), PARAMETER :: M56N1RDye = 14752 + INTEGER(IntKi), PARAMETER :: M56N2RDye = 14753 + INTEGER(IntKi), PARAMETER :: M56N3RDye = 14754 + INTEGER(IntKi), PARAMETER :: M56N4RDye = 14755 + INTEGER(IntKi), PARAMETER :: M56N5RDye = 14756 + INTEGER(IntKi), PARAMETER :: M56N6RDye = 14757 + INTEGER(IntKi), PARAMETER :: M56N7RDye = 14758 + INTEGER(IntKi), PARAMETER :: M56N8RDye = 14759 + INTEGER(IntKi), PARAMETER :: M56N9RDye = 14760 + INTEGER(IntKi), PARAMETER :: M57N1RDye = 14761 + INTEGER(IntKi), PARAMETER :: M57N2RDye = 14762 + INTEGER(IntKi), PARAMETER :: M57N3RDye = 14763 + INTEGER(IntKi), PARAMETER :: M57N4RDye = 14764 + INTEGER(IntKi), PARAMETER :: M57N5RDye = 14765 + INTEGER(IntKi), PARAMETER :: M57N6RDye = 14766 + INTEGER(IntKi), PARAMETER :: M57N7RDye = 14767 + INTEGER(IntKi), PARAMETER :: M57N8RDye = 14768 + INTEGER(IntKi), PARAMETER :: M57N9RDye = 14769 + INTEGER(IntKi), PARAMETER :: M58N1RDye = 14770 + INTEGER(IntKi), PARAMETER :: M58N2RDye = 14771 + INTEGER(IntKi), PARAMETER :: M58N3RDye = 14772 + INTEGER(IntKi), PARAMETER :: M58N4RDye = 14773 + INTEGER(IntKi), PARAMETER :: M58N5RDye = 14774 + INTEGER(IntKi), PARAMETER :: M58N6RDye = 14775 + INTEGER(IntKi), PARAMETER :: M58N7RDye = 14776 + INTEGER(IntKi), PARAMETER :: M58N8RDye = 14777 + INTEGER(IntKi), PARAMETER :: M58N9RDye = 14778 + INTEGER(IntKi), PARAMETER :: M59N1RDye = 14779 + INTEGER(IntKi), PARAMETER :: M59N2RDye = 14780 + INTEGER(IntKi), PARAMETER :: M59N3RDye = 14781 + INTEGER(IntKi), PARAMETER :: M59N4RDye = 14782 + INTEGER(IntKi), PARAMETER :: M59N5RDye = 14783 + INTEGER(IntKi), PARAMETER :: M59N6RDye = 14784 + INTEGER(IntKi), PARAMETER :: M59N7RDye = 14785 + INTEGER(IntKi), PARAMETER :: M59N8RDye = 14786 + INTEGER(IntKi), PARAMETER :: M59N9RDye = 14787 + INTEGER(IntKi), PARAMETER :: M60N1RDye = 14788 + INTEGER(IntKi), PARAMETER :: M60N2RDye = 14789 + INTEGER(IntKi), PARAMETER :: M60N3RDye = 14790 + INTEGER(IntKi), PARAMETER :: M60N4RDye = 14791 + INTEGER(IntKi), PARAMETER :: M60N5RDye = 14792 + INTEGER(IntKi), PARAMETER :: M60N6RDye = 14793 + INTEGER(IntKi), PARAMETER :: M60N7RDye = 14794 + INTEGER(IntKi), PARAMETER :: M60N8RDye = 14795 + INTEGER(IntKi), PARAMETER :: M60N9RDye = 14796 + INTEGER(IntKi), PARAMETER :: M61N1RDye = 14797 + INTEGER(IntKi), PARAMETER :: M61N2RDye = 14798 + INTEGER(IntKi), PARAMETER :: M61N3RDye = 14799 + INTEGER(IntKi), PARAMETER :: M61N4RDye = 14800 + INTEGER(IntKi), PARAMETER :: M61N5RDye = 14801 + INTEGER(IntKi), PARAMETER :: M61N6RDye = 14802 + INTEGER(IntKi), PARAMETER :: M61N7RDye = 14803 + INTEGER(IntKi), PARAMETER :: M61N8RDye = 14804 + INTEGER(IntKi), PARAMETER :: M61N9RDye = 14805 + INTEGER(IntKi), PARAMETER :: M62N1RDye = 14806 + INTEGER(IntKi), PARAMETER :: M62N2RDye = 14807 + INTEGER(IntKi), PARAMETER :: M62N3RDye = 14808 + INTEGER(IntKi), PARAMETER :: M62N4RDye = 14809 + INTEGER(IntKi), PARAMETER :: M62N5RDye = 14810 + INTEGER(IntKi), PARAMETER :: M62N6RDye = 14811 + INTEGER(IntKi), PARAMETER :: M62N7RDye = 14812 + INTEGER(IntKi), PARAMETER :: M62N8RDye = 14813 + INTEGER(IntKi), PARAMETER :: M62N9RDye = 14814 + INTEGER(IntKi), PARAMETER :: M63N1RDye = 14815 + INTEGER(IntKi), PARAMETER :: M63N2RDye = 14816 + INTEGER(IntKi), PARAMETER :: M63N3RDye = 14817 + INTEGER(IntKi), PARAMETER :: M63N4RDye = 14818 + INTEGER(IntKi), PARAMETER :: M63N5RDye = 14819 + INTEGER(IntKi), PARAMETER :: M63N6RDye = 14820 + INTEGER(IntKi), PARAMETER :: M63N7RDye = 14821 + INTEGER(IntKi), PARAMETER :: M63N8RDye = 14822 + INTEGER(IntKi), PARAMETER :: M63N9RDye = 14823 + INTEGER(IntKi), PARAMETER :: M64N1RDye = 14824 + INTEGER(IntKi), PARAMETER :: M64N2RDye = 14825 + INTEGER(IntKi), PARAMETER :: M64N3RDye = 14826 + INTEGER(IntKi), PARAMETER :: M64N4RDye = 14827 + INTEGER(IntKi), PARAMETER :: M64N5RDye = 14828 + INTEGER(IntKi), PARAMETER :: M64N6RDye = 14829 + INTEGER(IntKi), PARAMETER :: M64N7RDye = 14830 + INTEGER(IntKi), PARAMETER :: M64N8RDye = 14831 + INTEGER(IntKi), PARAMETER :: M64N9RDye = 14832 + INTEGER(IntKi), PARAMETER :: M65N1RDye = 14833 + INTEGER(IntKi), PARAMETER :: M65N2RDye = 14834 + INTEGER(IntKi), PARAMETER :: M65N3RDye = 14835 + INTEGER(IntKi), PARAMETER :: M65N4RDye = 14836 + INTEGER(IntKi), PARAMETER :: M65N5RDye = 14837 + INTEGER(IntKi), PARAMETER :: M65N6RDye = 14838 + INTEGER(IntKi), PARAMETER :: M65N7RDye = 14839 + INTEGER(IntKi), PARAMETER :: M65N8RDye = 14840 + INTEGER(IntKi), PARAMETER :: M65N9RDye = 14841 + INTEGER(IntKi), PARAMETER :: M66N1RDye = 14842 + INTEGER(IntKi), PARAMETER :: M66N2RDye = 14843 + INTEGER(IntKi), PARAMETER :: M66N3RDye = 14844 + INTEGER(IntKi), PARAMETER :: M66N4RDye = 14845 + INTEGER(IntKi), PARAMETER :: M66N5RDye = 14846 + INTEGER(IntKi), PARAMETER :: M66N6RDye = 14847 + INTEGER(IntKi), PARAMETER :: M66N7RDye = 14848 + INTEGER(IntKi), PARAMETER :: M66N8RDye = 14849 + INTEGER(IntKi), PARAMETER :: M66N9RDye = 14850 + INTEGER(IntKi), PARAMETER :: M67N1RDye = 14851 + INTEGER(IntKi), PARAMETER :: M67N2RDye = 14852 + INTEGER(IntKi), PARAMETER :: M67N3RDye = 14853 + INTEGER(IntKi), PARAMETER :: M67N4RDye = 14854 + INTEGER(IntKi), PARAMETER :: M67N5RDye = 14855 + INTEGER(IntKi), PARAMETER :: M67N6RDye = 14856 + INTEGER(IntKi), PARAMETER :: M67N7RDye = 14857 + INTEGER(IntKi), PARAMETER :: M67N8RDye = 14858 + INTEGER(IntKi), PARAMETER :: M67N9RDye = 14859 + INTEGER(IntKi), PARAMETER :: M68N1RDye = 14860 + INTEGER(IntKi), PARAMETER :: M68N2RDye = 14861 + INTEGER(IntKi), PARAMETER :: M68N3RDye = 14862 + INTEGER(IntKi), PARAMETER :: M68N4RDye = 14863 + INTEGER(IntKi), PARAMETER :: M68N5RDye = 14864 + INTEGER(IntKi), PARAMETER :: M68N6RDye = 14865 + INTEGER(IntKi), PARAMETER :: M68N7RDye = 14866 + INTEGER(IntKi), PARAMETER :: M68N8RDye = 14867 + INTEGER(IntKi), PARAMETER :: M68N9RDye = 14868 + INTEGER(IntKi), PARAMETER :: M69N1RDye = 14869 + INTEGER(IntKi), PARAMETER :: M69N2RDye = 14870 + INTEGER(IntKi), PARAMETER :: M69N3RDye = 14871 + INTEGER(IntKi), PARAMETER :: M69N4RDye = 14872 + INTEGER(IntKi), PARAMETER :: M69N5RDye = 14873 + INTEGER(IntKi), PARAMETER :: M69N6RDye = 14874 + INTEGER(IntKi), PARAMETER :: M69N7RDye = 14875 + INTEGER(IntKi), PARAMETER :: M69N8RDye = 14876 + INTEGER(IntKi), PARAMETER :: M69N9RDye = 14877 + INTEGER(IntKi), PARAMETER :: M70N1RDye = 14878 + INTEGER(IntKi), PARAMETER :: M70N2RDye = 14879 + INTEGER(IntKi), PARAMETER :: M70N3RDye = 14880 + INTEGER(IntKi), PARAMETER :: M70N4RDye = 14881 + INTEGER(IntKi), PARAMETER :: M70N5RDye = 14882 + INTEGER(IntKi), PARAMETER :: M70N6RDye = 14883 + INTEGER(IntKi), PARAMETER :: M70N7RDye = 14884 + INTEGER(IntKi), PARAMETER :: M70N8RDye = 14885 + INTEGER(IntKi), PARAMETER :: M70N9RDye = 14886 + INTEGER(IntKi), PARAMETER :: M71N1RDye = 14887 + INTEGER(IntKi), PARAMETER :: M71N2RDye = 14888 + INTEGER(IntKi), PARAMETER :: M71N3RDye = 14889 + INTEGER(IntKi), PARAMETER :: M71N4RDye = 14890 + INTEGER(IntKi), PARAMETER :: M71N5RDye = 14891 + INTEGER(IntKi), PARAMETER :: M71N6RDye = 14892 + INTEGER(IntKi), PARAMETER :: M71N7RDye = 14893 + INTEGER(IntKi), PARAMETER :: M71N8RDye = 14894 + INTEGER(IntKi), PARAMETER :: M71N9RDye = 14895 + INTEGER(IntKi), PARAMETER :: M72N1RDye = 14896 + INTEGER(IntKi), PARAMETER :: M72N2RDye = 14897 + INTEGER(IntKi), PARAMETER :: M72N3RDye = 14898 + INTEGER(IntKi), PARAMETER :: M72N4RDye = 14899 + INTEGER(IntKi), PARAMETER :: M72N5RDye = 14900 + INTEGER(IntKi), PARAMETER :: M72N6RDye = 14901 + INTEGER(IntKi), PARAMETER :: M72N7RDye = 14902 + INTEGER(IntKi), PARAMETER :: M72N8RDye = 14903 + INTEGER(IntKi), PARAMETER :: M72N9RDye = 14904 + INTEGER(IntKi), PARAMETER :: M73N1RDye = 14905 + INTEGER(IntKi), PARAMETER :: M73N2RDye = 14906 + INTEGER(IntKi), PARAMETER :: M73N3RDye = 14907 + INTEGER(IntKi), PARAMETER :: M73N4RDye = 14908 + INTEGER(IntKi), PARAMETER :: M73N5RDye = 14909 + INTEGER(IntKi), PARAMETER :: M73N6RDye = 14910 + INTEGER(IntKi), PARAMETER :: M73N7RDye = 14911 + INTEGER(IntKi), PARAMETER :: M73N8RDye = 14912 + INTEGER(IntKi), PARAMETER :: M73N9RDye = 14913 + INTEGER(IntKi), PARAMETER :: M74N1RDye = 14914 + INTEGER(IntKi), PARAMETER :: M74N2RDye = 14915 + INTEGER(IntKi), PARAMETER :: M74N3RDye = 14916 + INTEGER(IntKi), PARAMETER :: M74N4RDye = 14917 + INTEGER(IntKi), PARAMETER :: M74N5RDye = 14918 + INTEGER(IntKi), PARAMETER :: M74N6RDye = 14919 + INTEGER(IntKi), PARAMETER :: M74N7RDye = 14920 + INTEGER(IntKi), PARAMETER :: M74N8RDye = 14921 + INTEGER(IntKi), PARAMETER :: M74N9RDye = 14922 + INTEGER(IntKi), PARAMETER :: M75N1RDye = 14923 + INTEGER(IntKi), PARAMETER :: M75N2RDye = 14924 + INTEGER(IntKi), PARAMETER :: M75N3RDye = 14925 + INTEGER(IntKi), PARAMETER :: M75N4RDye = 14926 + INTEGER(IntKi), PARAMETER :: M75N5RDye = 14927 + INTEGER(IntKi), PARAMETER :: M75N6RDye = 14928 + INTEGER(IntKi), PARAMETER :: M75N7RDye = 14929 + INTEGER(IntKi), PARAMETER :: M75N8RDye = 14930 + INTEGER(IntKi), PARAMETER :: M75N9RDye = 14931 + INTEGER(IntKi), PARAMETER :: M76N1RDye = 14932 + INTEGER(IntKi), PARAMETER :: M76N2RDye = 14933 + INTEGER(IntKi), PARAMETER :: M76N3RDye = 14934 + INTEGER(IntKi), PARAMETER :: M76N4RDye = 14935 + INTEGER(IntKi), PARAMETER :: M76N5RDye = 14936 + INTEGER(IntKi), PARAMETER :: M76N6RDye = 14937 + INTEGER(IntKi), PARAMETER :: M76N7RDye = 14938 + INTEGER(IntKi), PARAMETER :: M76N8RDye = 14939 + INTEGER(IntKi), PARAMETER :: M76N9RDye = 14940 + INTEGER(IntKi), PARAMETER :: M77N1RDye = 14941 + INTEGER(IntKi), PARAMETER :: M77N2RDye = 14942 + INTEGER(IntKi), PARAMETER :: M77N3RDye = 14943 + INTEGER(IntKi), PARAMETER :: M77N4RDye = 14944 + INTEGER(IntKi), PARAMETER :: M77N5RDye = 14945 + INTEGER(IntKi), PARAMETER :: M77N6RDye = 14946 + INTEGER(IntKi), PARAMETER :: M77N7RDye = 14947 + INTEGER(IntKi), PARAMETER :: M77N8RDye = 14948 + INTEGER(IntKi), PARAMETER :: M77N9RDye = 14949 + INTEGER(IntKi), PARAMETER :: M78N1RDye = 14950 + INTEGER(IntKi), PARAMETER :: M78N2RDye = 14951 + INTEGER(IntKi), PARAMETER :: M78N3RDye = 14952 + INTEGER(IntKi), PARAMETER :: M78N4RDye = 14953 + INTEGER(IntKi), PARAMETER :: M78N5RDye = 14954 + INTEGER(IntKi), PARAMETER :: M78N6RDye = 14955 + INTEGER(IntKi), PARAMETER :: M78N7RDye = 14956 + INTEGER(IntKi), PARAMETER :: M78N8RDye = 14957 + INTEGER(IntKi), PARAMETER :: M78N9RDye = 14958 + INTEGER(IntKi), PARAMETER :: M79N1RDye = 14959 + INTEGER(IntKi), PARAMETER :: M79N2RDye = 14960 + INTEGER(IntKi), PARAMETER :: M79N3RDye = 14961 + INTEGER(IntKi), PARAMETER :: M79N4RDye = 14962 + INTEGER(IntKi), PARAMETER :: M79N5RDye = 14963 + INTEGER(IntKi), PARAMETER :: M79N6RDye = 14964 + INTEGER(IntKi), PARAMETER :: M79N7RDye = 14965 + INTEGER(IntKi), PARAMETER :: M79N8RDye = 14966 + INTEGER(IntKi), PARAMETER :: M79N9RDye = 14967 + INTEGER(IntKi), PARAMETER :: M80N1RDye = 14968 + INTEGER(IntKi), PARAMETER :: M80N2RDye = 14969 + INTEGER(IntKi), PARAMETER :: M80N3RDye = 14970 + INTEGER(IntKi), PARAMETER :: M80N4RDye = 14971 + INTEGER(IntKi), PARAMETER :: M80N5RDye = 14972 + INTEGER(IntKi), PARAMETER :: M80N6RDye = 14973 + INTEGER(IntKi), PARAMETER :: M80N7RDye = 14974 + INTEGER(IntKi), PARAMETER :: M80N8RDye = 14975 + INTEGER(IntKi), PARAMETER :: M80N9RDye = 14976 + INTEGER(IntKi), PARAMETER :: M81N1RDye = 14977 + INTEGER(IntKi), PARAMETER :: M81N2RDye = 14978 + INTEGER(IntKi), PARAMETER :: M81N3RDye = 14979 + INTEGER(IntKi), PARAMETER :: M81N4RDye = 14980 + INTEGER(IntKi), PARAMETER :: M81N5RDye = 14981 + INTEGER(IntKi), PARAMETER :: M81N6RDye = 14982 + INTEGER(IntKi), PARAMETER :: M81N7RDye = 14983 + INTEGER(IntKi), PARAMETER :: M81N8RDye = 14984 + INTEGER(IntKi), PARAMETER :: M81N9RDye = 14985 + INTEGER(IntKi), PARAMETER :: M82N1RDye = 14986 + INTEGER(IntKi), PARAMETER :: M82N2RDye = 14987 + INTEGER(IntKi), PARAMETER :: M82N3RDye = 14988 + INTEGER(IntKi), PARAMETER :: M82N4RDye = 14989 + INTEGER(IntKi), PARAMETER :: M82N5RDye = 14990 + INTEGER(IntKi), PARAMETER :: M82N6RDye = 14991 + INTEGER(IntKi), PARAMETER :: M82N7RDye = 14992 + INTEGER(IntKi), PARAMETER :: M82N8RDye = 14993 + INTEGER(IntKi), PARAMETER :: M82N9RDye = 14994 + INTEGER(IntKi), PARAMETER :: M83N1RDye = 14995 + INTEGER(IntKi), PARAMETER :: M83N2RDye = 14996 + INTEGER(IntKi), PARAMETER :: M83N3RDye = 14997 + INTEGER(IntKi), PARAMETER :: M83N4RDye = 14998 + INTEGER(IntKi), PARAMETER :: M83N5RDye = 14999 + INTEGER(IntKi), PARAMETER :: M83N6RDye = 15000 + INTEGER(IntKi), PARAMETER :: M83N7RDye = 15001 + INTEGER(IntKi), PARAMETER :: M83N8RDye = 15002 + INTEGER(IntKi), PARAMETER :: M83N9RDye = 15003 + INTEGER(IntKi), PARAMETER :: M84N1RDye = 15004 + INTEGER(IntKi), PARAMETER :: M84N2RDye = 15005 + INTEGER(IntKi), PARAMETER :: M84N3RDye = 15006 + INTEGER(IntKi), PARAMETER :: M84N4RDye = 15007 + INTEGER(IntKi), PARAMETER :: M84N5RDye = 15008 + INTEGER(IntKi), PARAMETER :: M84N6RDye = 15009 + INTEGER(IntKi), PARAMETER :: M84N7RDye = 15010 + INTEGER(IntKi), PARAMETER :: M84N8RDye = 15011 + INTEGER(IntKi), PARAMETER :: M84N9RDye = 15012 + INTEGER(IntKi), PARAMETER :: M85N1RDye = 15013 + INTEGER(IntKi), PARAMETER :: M85N2RDye = 15014 + INTEGER(IntKi), PARAMETER :: M85N3RDye = 15015 + INTEGER(IntKi), PARAMETER :: M85N4RDye = 15016 + INTEGER(IntKi), PARAMETER :: M85N5RDye = 15017 + INTEGER(IntKi), PARAMETER :: M85N6RDye = 15018 + INTEGER(IntKi), PARAMETER :: M85N7RDye = 15019 + INTEGER(IntKi), PARAMETER :: M85N8RDye = 15020 + INTEGER(IntKi), PARAMETER :: M85N9RDye = 15021 + INTEGER(IntKi), PARAMETER :: M86N1RDye = 15022 + INTEGER(IntKi), PARAMETER :: M86N2RDye = 15023 + INTEGER(IntKi), PARAMETER :: M86N3RDye = 15024 + INTEGER(IntKi), PARAMETER :: M86N4RDye = 15025 + INTEGER(IntKi), PARAMETER :: M86N5RDye = 15026 + INTEGER(IntKi), PARAMETER :: M86N6RDye = 15027 + INTEGER(IntKi), PARAMETER :: M86N7RDye = 15028 + INTEGER(IntKi), PARAMETER :: M86N8RDye = 15029 + INTEGER(IntKi), PARAMETER :: M86N9RDye = 15030 + INTEGER(IntKi), PARAMETER :: M87N1RDye = 15031 + INTEGER(IntKi), PARAMETER :: M87N2RDye = 15032 + INTEGER(IntKi), PARAMETER :: M87N3RDye = 15033 + INTEGER(IntKi), PARAMETER :: M87N4RDye = 15034 + INTEGER(IntKi), PARAMETER :: M87N5RDye = 15035 + INTEGER(IntKi), PARAMETER :: M87N6RDye = 15036 + INTEGER(IntKi), PARAMETER :: M87N7RDye = 15037 + INTEGER(IntKi), PARAMETER :: M87N8RDye = 15038 + INTEGER(IntKi), PARAMETER :: M87N9RDye = 15039 + INTEGER(IntKi), PARAMETER :: M88N1RDye = 15040 + INTEGER(IntKi), PARAMETER :: M88N2RDye = 15041 + INTEGER(IntKi), PARAMETER :: M88N3RDye = 15042 + INTEGER(IntKi), PARAMETER :: M88N4RDye = 15043 + INTEGER(IntKi), PARAMETER :: M88N5RDye = 15044 + INTEGER(IntKi), PARAMETER :: M88N6RDye = 15045 + INTEGER(IntKi), PARAMETER :: M88N7RDye = 15046 + INTEGER(IntKi), PARAMETER :: M88N8RDye = 15047 + INTEGER(IntKi), PARAMETER :: M88N9RDye = 15048 + INTEGER(IntKi), PARAMETER :: M89N1RDye = 15049 + INTEGER(IntKi), PARAMETER :: M89N2RDye = 15050 + INTEGER(IntKi), PARAMETER :: M89N3RDye = 15051 + INTEGER(IntKi), PARAMETER :: M89N4RDye = 15052 + INTEGER(IntKi), PARAMETER :: M89N5RDye = 15053 + INTEGER(IntKi), PARAMETER :: M89N6RDye = 15054 + INTEGER(IntKi), PARAMETER :: M89N7RDye = 15055 + INTEGER(IntKi), PARAMETER :: M89N8RDye = 15056 + INTEGER(IntKi), PARAMETER :: M89N9RDye = 15057 + INTEGER(IntKi), PARAMETER :: M90N1RDye = 15058 + INTEGER(IntKi), PARAMETER :: M90N2RDye = 15059 + INTEGER(IntKi), PARAMETER :: M90N3RDye = 15060 + INTEGER(IntKi), PARAMETER :: M90N4RDye = 15061 + INTEGER(IntKi), PARAMETER :: M90N5RDye = 15062 + INTEGER(IntKi), PARAMETER :: M90N6RDye = 15063 + INTEGER(IntKi), PARAMETER :: M90N7RDye = 15064 + INTEGER(IntKi), PARAMETER :: M90N8RDye = 15065 + INTEGER(IntKi), PARAMETER :: M90N9RDye = 15066 + INTEGER(IntKi), PARAMETER :: M91N1RDye = 15067 + INTEGER(IntKi), PARAMETER :: M91N2RDye = 15068 + INTEGER(IntKi), PARAMETER :: M91N3RDye = 15069 + INTEGER(IntKi), PARAMETER :: M91N4RDye = 15070 + INTEGER(IntKi), PARAMETER :: M91N5RDye = 15071 + INTEGER(IntKi), PARAMETER :: M91N6RDye = 15072 + INTEGER(IntKi), PARAMETER :: M91N7RDye = 15073 + INTEGER(IntKi), PARAMETER :: M91N8RDye = 15074 + INTEGER(IntKi), PARAMETER :: M91N9RDye = 15075 + INTEGER(IntKi), PARAMETER :: M92N1RDye = 15076 + INTEGER(IntKi), PARAMETER :: M92N2RDye = 15077 + INTEGER(IntKi), PARAMETER :: M92N3RDye = 15078 + INTEGER(IntKi), PARAMETER :: M92N4RDye = 15079 + INTEGER(IntKi), PARAMETER :: M92N5RDye = 15080 + INTEGER(IntKi), PARAMETER :: M92N6RDye = 15081 + INTEGER(IntKi), PARAMETER :: M92N7RDye = 15082 + INTEGER(IntKi), PARAMETER :: M92N8RDye = 15083 + INTEGER(IntKi), PARAMETER :: M92N9RDye = 15084 + INTEGER(IntKi), PARAMETER :: M93N1RDye = 15085 + INTEGER(IntKi), PARAMETER :: M93N2RDye = 15086 + INTEGER(IntKi), PARAMETER :: M93N3RDye = 15087 + INTEGER(IntKi), PARAMETER :: M93N4RDye = 15088 + INTEGER(IntKi), PARAMETER :: M93N5RDye = 15089 + INTEGER(IntKi), PARAMETER :: M93N6RDye = 15090 + INTEGER(IntKi), PARAMETER :: M93N7RDye = 15091 + INTEGER(IntKi), PARAMETER :: M93N8RDye = 15092 + INTEGER(IntKi), PARAMETER :: M93N9RDye = 15093 + INTEGER(IntKi), PARAMETER :: M94N1RDye = 15094 + INTEGER(IntKi), PARAMETER :: M94N2RDye = 15095 + INTEGER(IntKi), PARAMETER :: M94N3RDye = 15096 + INTEGER(IntKi), PARAMETER :: M94N4RDye = 15097 + INTEGER(IntKi), PARAMETER :: M94N5RDye = 15098 + INTEGER(IntKi), PARAMETER :: M94N6RDye = 15099 + INTEGER(IntKi), PARAMETER :: M94N7RDye = 15100 + INTEGER(IntKi), PARAMETER :: M94N8RDye = 15101 + INTEGER(IntKi), PARAMETER :: M94N9RDye = 15102 + INTEGER(IntKi), PARAMETER :: M95N1RDye = 15103 + INTEGER(IntKi), PARAMETER :: M95N2RDye = 15104 + INTEGER(IntKi), PARAMETER :: M95N3RDye = 15105 + INTEGER(IntKi), PARAMETER :: M95N4RDye = 15106 + INTEGER(IntKi), PARAMETER :: M95N5RDye = 15107 + INTEGER(IntKi), PARAMETER :: M95N6RDye = 15108 + INTEGER(IntKi), PARAMETER :: M95N7RDye = 15109 + INTEGER(IntKi), PARAMETER :: M95N8RDye = 15110 + INTEGER(IntKi), PARAMETER :: M95N9RDye = 15111 + INTEGER(IntKi), PARAMETER :: M96N1RDye = 15112 + INTEGER(IntKi), PARAMETER :: M96N2RDye = 15113 + INTEGER(IntKi), PARAMETER :: M96N3RDye = 15114 + INTEGER(IntKi), PARAMETER :: M96N4RDye = 15115 + INTEGER(IntKi), PARAMETER :: M96N5RDye = 15116 + INTEGER(IntKi), PARAMETER :: M96N6RDye = 15117 + INTEGER(IntKi), PARAMETER :: M96N7RDye = 15118 + INTEGER(IntKi), PARAMETER :: M96N8RDye = 15119 + INTEGER(IntKi), PARAMETER :: M96N9RDye = 15120 + INTEGER(IntKi), PARAMETER :: M97N1RDye = 15121 + INTEGER(IntKi), PARAMETER :: M97N2RDye = 15122 + INTEGER(IntKi), PARAMETER :: M97N3RDye = 15123 + INTEGER(IntKi), PARAMETER :: M97N4RDye = 15124 + INTEGER(IntKi), PARAMETER :: M97N5RDye = 15125 + INTEGER(IntKi), PARAMETER :: M97N6RDye = 15126 + INTEGER(IntKi), PARAMETER :: M97N7RDye = 15127 + INTEGER(IntKi), PARAMETER :: M97N8RDye = 15128 + INTEGER(IntKi), PARAMETER :: M97N9RDye = 15129 + INTEGER(IntKi), PARAMETER :: M98N1RDye = 15130 + INTEGER(IntKi), PARAMETER :: M98N2RDye = 15131 + INTEGER(IntKi), PARAMETER :: M98N3RDye = 15132 + INTEGER(IntKi), PARAMETER :: M98N4RDye = 15133 + INTEGER(IntKi), PARAMETER :: M98N5RDye = 15134 + INTEGER(IntKi), PARAMETER :: M98N6RDye = 15135 + INTEGER(IntKi), PARAMETER :: M98N7RDye = 15136 + INTEGER(IntKi), PARAMETER :: M98N8RDye = 15137 + INTEGER(IntKi), PARAMETER :: M98N9RDye = 15138 + INTEGER(IntKi), PARAMETER :: M99N1RDye = 15139 + INTEGER(IntKi), PARAMETER :: M99N2RDye = 15140 + INTEGER(IntKi), PARAMETER :: M99N3RDye = 15141 + INTEGER(IntKi), PARAMETER :: M99N4RDye = 15142 + INTEGER(IntKi), PARAMETER :: M99N5RDye = 15143 + INTEGER(IntKi), PARAMETER :: M99N6RDye = 15144 + INTEGER(IntKi), PARAMETER :: M99N7RDye = 15145 + INTEGER(IntKi), PARAMETER :: M99N8RDye = 15146 + INTEGER(IntKi), PARAMETER :: M99N9RDye = 15147 + INTEGER(IntKi), PARAMETER :: M01N1RDze = 15148 + INTEGER(IntKi), PARAMETER :: M01N2RDze = 15149 + INTEGER(IntKi), PARAMETER :: M01N3RDze = 15150 + INTEGER(IntKi), PARAMETER :: M01N4RDze = 15151 + INTEGER(IntKi), PARAMETER :: M01N5RDze = 15152 + INTEGER(IntKi), PARAMETER :: M01N6RDze = 15153 + INTEGER(IntKi), PARAMETER :: M01N7RDze = 15154 + INTEGER(IntKi), PARAMETER :: M01N8RDze = 15155 + INTEGER(IntKi), PARAMETER :: M01N9RDze = 15156 + INTEGER(IntKi), PARAMETER :: M02N1RDze = 15157 + INTEGER(IntKi), PARAMETER :: M02N2RDze = 15158 + INTEGER(IntKi), PARAMETER :: M02N3RDze = 15159 + INTEGER(IntKi), PARAMETER :: M02N4RDze = 15160 + INTEGER(IntKi), PARAMETER :: M02N5RDze = 15161 + INTEGER(IntKi), PARAMETER :: M02N6RDze = 15162 + INTEGER(IntKi), PARAMETER :: M02N7RDze = 15163 + INTEGER(IntKi), PARAMETER :: M02N8RDze = 15164 + INTEGER(IntKi), PARAMETER :: M02N9RDze = 15165 + INTEGER(IntKi), PARAMETER :: M03N1RDze = 15166 + INTEGER(IntKi), PARAMETER :: M03N2RDze = 15167 + INTEGER(IntKi), PARAMETER :: M03N3RDze = 15168 + INTEGER(IntKi), PARAMETER :: M03N4RDze = 15169 + INTEGER(IntKi), PARAMETER :: M03N5RDze = 15170 + INTEGER(IntKi), PARAMETER :: M03N6RDze = 15171 + INTEGER(IntKi), PARAMETER :: M03N7RDze = 15172 + INTEGER(IntKi), PARAMETER :: M03N8RDze = 15173 + INTEGER(IntKi), PARAMETER :: M03N9RDze = 15174 + INTEGER(IntKi), PARAMETER :: M04N1RDze = 15175 + INTEGER(IntKi), PARAMETER :: M04N2RDze = 15176 + INTEGER(IntKi), PARAMETER :: M04N3RDze = 15177 + INTEGER(IntKi), PARAMETER :: M04N4RDze = 15178 + INTEGER(IntKi), PARAMETER :: M04N5RDze = 15179 + INTEGER(IntKi), PARAMETER :: M04N6RDze = 15180 + INTEGER(IntKi), PARAMETER :: M04N7RDze = 15181 + INTEGER(IntKi), PARAMETER :: M04N8RDze = 15182 + INTEGER(IntKi), PARAMETER :: M04N9RDze = 15183 + INTEGER(IntKi), PARAMETER :: M05N1RDze = 15184 + INTEGER(IntKi), PARAMETER :: M05N2RDze = 15185 + INTEGER(IntKi), PARAMETER :: M05N3RDze = 15186 + INTEGER(IntKi), PARAMETER :: M05N4RDze = 15187 + INTEGER(IntKi), PARAMETER :: M05N5RDze = 15188 + INTEGER(IntKi), PARAMETER :: M05N6RDze = 15189 + INTEGER(IntKi), PARAMETER :: M05N7RDze = 15190 + INTEGER(IntKi), PARAMETER :: M05N8RDze = 15191 + INTEGER(IntKi), PARAMETER :: M05N9RDze = 15192 + INTEGER(IntKi), PARAMETER :: M06N1RDze = 15193 + INTEGER(IntKi), PARAMETER :: M06N2RDze = 15194 + INTEGER(IntKi), PARAMETER :: M06N3RDze = 15195 + INTEGER(IntKi), PARAMETER :: M06N4RDze = 15196 + INTEGER(IntKi), PARAMETER :: M06N5RDze = 15197 + INTEGER(IntKi), PARAMETER :: M06N6RDze = 15198 + INTEGER(IntKi), PARAMETER :: M06N7RDze = 15199 + INTEGER(IntKi), PARAMETER :: M06N8RDze = 15200 + INTEGER(IntKi), PARAMETER :: M06N9RDze = 15201 + INTEGER(IntKi), PARAMETER :: M07N1RDze = 15202 + INTEGER(IntKi), PARAMETER :: M07N2RDze = 15203 + INTEGER(IntKi), PARAMETER :: M07N3RDze = 15204 + INTEGER(IntKi), PARAMETER :: M07N4RDze = 15205 + INTEGER(IntKi), PARAMETER :: M07N5RDze = 15206 + INTEGER(IntKi), PARAMETER :: M07N6RDze = 15207 + INTEGER(IntKi), PARAMETER :: M07N7RDze = 15208 + INTEGER(IntKi), PARAMETER :: M07N8RDze = 15209 + INTEGER(IntKi), PARAMETER :: M07N9RDze = 15210 + INTEGER(IntKi), PARAMETER :: M08N1RDze = 15211 + INTEGER(IntKi), PARAMETER :: M08N2RDze = 15212 + INTEGER(IntKi), PARAMETER :: M08N3RDze = 15213 + INTEGER(IntKi), PARAMETER :: M08N4RDze = 15214 + INTEGER(IntKi), PARAMETER :: M08N5RDze = 15215 + INTEGER(IntKi), PARAMETER :: M08N6RDze = 15216 + INTEGER(IntKi), PARAMETER :: M08N7RDze = 15217 + INTEGER(IntKi), PARAMETER :: M08N8RDze = 15218 + INTEGER(IntKi), PARAMETER :: M08N9RDze = 15219 + INTEGER(IntKi), PARAMETER :: M09N1RDze = 15220 + INTEGER(IntKi), PARAMETER :: M09N2RDze = 15221 + INTEGER(IntKi), PARAMETER :: M09N3RDze = 15222 + INTEGER(IntKi), PARAMETER :: M09N4RDze = 15223 + INTEGER(IntKi), PARAMETER :: M09N5RDze = 15224 + INTEGER(IntKi), PARAMETER :: M09N6RDze = 15225 + INTEGER(IntKi), PARAMETER :: M09N7RDze = 15226 + INTEGER(IntKi), PARAMETER :: M09N8RDze = 15227 + INTEGER(IntKi), PARAMETER :: M09N9RDze = 15228 + INTEGER(IntKi), PARAMETER :: M10N1RDze = 15229 + INTEGER(IntKi), PARAMETER :: M10N2RDze = 15230 + INTEGER(IntKi), PARAMETER :: M10N3RDze = 15231 + INTEGER(IntKi), PARAMETER :: M10N4RDze = 15232 + INTEGER(IntKi), PARAMETER :: M10N5RDze = 15233 + INTEGER(IntKi), PARAMETER :: M10N6RDze = 15234 + INTEGER(IntKi), PARAMETER :: M10N7RDze = 15235 + INTEGER(IntKi), PARAMETER :: M10N8RDze = 15236 + INTEGER(IntKi), PARAMETER :: M10N9RDze = 15237 + INTEGER(IntKi), PARAMETER :: M11N1RDze = 15238 + INTEGER(IntKi), PARAMETER :: M11N2RDze = 15239 + INTEGER(IntKi), PARAMETER :: M11N3RDze = 15240 + INTEGER(IntKi), PARAMETER :: M11N4RDze = 15241 + INTEGER(IntKi), PARAMETER :: M11N5RDze = 15242 + INTEGER(IntKi), PARAMETER :: M11N6RDze = 15243 + INTEGER(IntKi), PARAMETER :: M11N7RDze = 15244 + INTEGER(IntKi), PARAMETER :: M11N8RDze = 15245 + INTEGER(IntKi), PARAMETER :: M11N9RDze = 15246 + INTEGER(IntKi), PARAMETER :: M12N1RDze = 15247 + INTEGER(IntKi), PARAMETER :: M12N2RDze = 15248 + INTEGER(IntKi), PARAMETER :: M12N3RDze = 15249 + INTEGER(IntKi), PARAMETER :: M12N4RDze = 15250 + INTEGER(IntKi), PARAMETER :: M12N5RDze = 15251 + INTEGER(IntKi), PARAMETER :: M12N6RDze = 15252 + INTEGER(IntKi), PARAMETER :: M12N7RDze = 15253 + INTEGER(IntKi), PARAMETER :: M12N8RDze = 15254 + INTEGER(IntKi), PARAMETER :: M12N9RDze = 15255 + INTEGER(IntKi), PARAMETER :: M13N1RDze = 15256 + INTEGER(IntKi), PARAMETER :: M13N2RDze = 15257 + INTEGER(IntKi), PARAMETER :: M13N3RDze = 15258 + INTEGER(IntKi), PARAMETER :: M13N4RDze = 15259 + INTEGER(IntKi), PARAMETER :: M13N5RDze = 15260 + INTEGER(IntKi), PARAMETER :: M13N6RDze = 15261 + INTEGER(IntKi), PARAMETER :: M13N7RDze = 15262 + INTEGER(IntKi), PARAMETER :: M13N8RDze = 15263 + INTEGER(IntKi), PARAMETER :: M13N9RDze = 15264 + INTEGER(IntKi), PARAMETER :: M14N1RDze = 15265 + INTEGER(IntKi), PARAMETER :: M14N2RDze = 15266 + INTEGER(IntKi), PARAMETER :: M14N3RDze = 15267 + INTEGER(IntKi), PARAMETER :: M14N4RDze = 15268 + INTEGER(IntKi), PARAMETER :: M14N5RDze = 15269 + INTEGER(IntKi), PARAMETER :: M14N6RDze = 15270 + INTEGER(IntKi), PARAMETER :: M14N7RDze = 15271 + INTEGER(IntKi), PARAMETER :: M14N8RDze = 15272 + INTEGER(IntKi), PARAMETER :: M14N9RDze = 15273 + INTEGER(IntKi), PARAMETER :: M15N1RDze = 15274 + INTEGER(IntKi), PARAMETER :: M15N2RDze = 15275 + INTEGER(IntKi), PARAMETER :: M15N3RDze = 15276 + INTEGER(IntKi), PARAMETER :: M15N4RDze = 15277 + INTEGER(IntKi), PARAMETER :: M15N5RDze = 15278 + INTEGER(IntKi), PARAMETER :: M15N6RDze = 15279 + INTEGER(IntKi), PARAMETER :: M15N7RDze = 15280 + INTEGER(IntKi), PARAMETER :: M15N8RDze = 15281 + INTEGER(IntKi), PARAMETER :: M15N9RDze = 15282 + INTEGER(IntKi), PARAMETER :: M16N1RDze = 15283 + INTEGER(IntKi), PARAMETER :: M16N2RDze = 15284 + INTEGER(IntKi), PARAMETER :: M16N3RDze = 15285 + INTEGER(IntKi), PARAMETER :: M16N4RDze = 15286 + INTEGER(IntKi), PARAMETER :: M16N5RDze = 15287 + INTEGER(IntKi), PARAMETER :: M16N6RDze = 15288 + INTEGER(IntKi), PARAMETER :: M16N7RDze = 15289 + INTEGER(IntKi), PARAMETER :: M16N8RDze = 15290 + INTEGER(IntKi), PARAMETER :: M16N9RDze = 15291 + INTEGER(IntKi), PARAMETER :: M17N1RDze = 15292 + INTEGER(IntKi), PARAMETER :: M17N2RDze = 15293 + INTEGER(IntKi), PARAMETER :: M17N3RDze = 15294 + INTEGER(IntKi), PARAMETER :: M17N4RDze = 15295 + INTEGER(IntKi), PARAMETER :: M17N5RDze = 15296 + INTEGER(IntKi), PARAMETER :: M17N6RDze = 15297 + INTEGER(IntKi), PARAMETER :: M17N7RDze = 15298 + INTEGER(IntKi), PARAMETER :: M17N8RDze = 15299 + INTEGER(IntKi), PARAMETER :: M17N9RDze = 15300 + INTEGER(IntKi), PARAMETER :: M18N1RDze = 15301 + INTEGER(IntKi), PARAMETER :: M18N2RDze = 15302 + INTEGER(IntKi), PARAMETER :: M18N3RDze = 15303 + INTEGER(IntKi), PARAMETER :: M18N4RDze = 15304 + INTEGER(IntKi), PARAMETER :: M18N5RDze = 15305 + INTEGER(IntKi), PARAMETER :: M18N6RDze = 15306 + INTEGER(IntKi), PARAMETER :: M18N7RDze = 15307 + INTEGER(IntKi), PARAMETER :: M18N8RDze = 15308 + INTEGER(IntKi), PARAMETER :: M18N9RDze = 15309 + INTEGER(IntKi), PARAMETER :: M19N1RDze = 15310 + INTEGER(IntKi), PARAMETER :: M19N2RDze = 15311 + INTEGER(IntKi), PARAMETER :: M19N3RDze = 15312 + INTEGER(IntKi), PARAMETER :: M19N4RDze = 15313 + INTEGER(IntKi), PARAMETER :: M19N5RDze = 15314 + INTEGER(IntKi), PARAMETER :: M19N6RDze = 15315 + INTEGER(IntKi), PARAMETER :: M19N7RDze = 15316 + INTEGER(IntKi), PARAMETER :: M19N8RDze = 15317 + INTEGER(IntKi), PARAMETER :: M19N9RDze = 15318 + INTEGER(IntKi), PARAMETER :: M20N1RDze = 15319 + INTEGER(IntKi), PARAMETER :: M20N2RDze = 15320 + INTEGER(IntKi), PARAMETER :: M20N3RDze = 15321 + INTEGER(IntKi), PARAMETER :: M20N4RDze = 15322 + INTEGER(IntKi), PARAMETER :: M20N5RDze = 15323 + INTEGER(IntKi), PARAMETER :: M20N6RDze = 15324 + INTEGER(IntKi), PARAMETER :: M20N7RDze = 15325 + INTEGER(IntKi), PARAMETER :: M20N8RDze = 15326 + INTEGER(IntKi), PARAMETER :: M20N9RDze = 15327 + INTEGER(IntKi), PARAMETER :: M21N1RDze = 15328 + INTEGER(IntKi), PARAMETER :: M21N2RDze = 15329 + INTEGER(IntKi), PARAMETER :: M21N3RDze = 15330 + INTEGER(IntKi), PARAMETER :: M21N4RDze = 15331 + INTEGER(IntKi), PARAMETER :: M21N5RDze = 15332 + INTEGER(IntKi), PARAMETER :: M21N6RDze = 15333 + INTEGER(IntKi), PARAMETER :: M21N7RDze = 15334 + INTEGER(IntKi), PARAMETER :: M21N8RDze = 15335 + INTEGER(IntKi), PARAMETER :: M21N9RDze = 15336 + INTEGER(IntKi), PARAMETER :: M22N1RDze = 15337 + INTEGER(IntKi), PARAMETER :: M22N2RDze = 15338 + INTEGER(IntKi), PARAMETER :: M22N3RDze = 15339 + INTEGER(IntKi), PARAMETER :: M22N4RDze = 15340 + INTEGER(IntKi), PARAMETER :: M22N5RDze = 15341 + INTEGER(IntKi), PARAMETER :: M22N6RDze = 15342 + INTEGER(IntKi), PARAMETER :: M22N7RDze = 15343 + INTEGER(IntKi), PARAMETER :: M22N8RDze = 15344 + INTEGER(IntKi), PARAMETER :: M22N9RDze = 15345 + INTEGER(IntKi), PARAMETER :: M23N1RDze = 15346 + INTEGER(IntKi), PARAMETER :: M23N2RDze = 15347 + INTEGER(IntKi), PARAMETER :: M23N3RDze = 15348 + INTEGER(IntKi), PARAMETER :: M23N4RDze = 15349 + INTEGER(IntKi), PARAMETER :: M23N5RDze = 15350 + INTEGER(IntKi), PARAMETER :: M23N6RDze = 15351 + INTEGER(IntKi), PARAMETER :: M23N7RDze = 15352 + INTEGER(IntKi), PARAMETER :: M23N8RDze = 15353 + INTEGER(IntKi), PARAMETER :: M23N9RDze = 15354 + INTEGER(IntKi), PARAMETER :: M24N1RDze = 15355 + INTEGER(IntKi), PARAMETER :: M24N2RDze = 15356 + INTEGER(IntKi), PARAMETER :: M24N3RDze = 15357 + INTEGER(IntKi), PARAMETER :: M24N4RDze = 15358 + INTEGER(IntKi), PARAMETER :: M24N5RDze = 15359 + INTEGER(IntKi), PARAMETER :: M24N6RDze = 15360 + INTEGER(IntKi), PARAMETER :: M24N7RDze = 15361 + INTEGER(IntKi), PARAMETER :: M24N8RDze = 15362 + INTEGER(IntKi), PARAMETER :: M24N9RDze = 15363 + INTEGER(IntKi), PARAMETER :: M25N1RDze = 15364 + INTEGER(IntKi), PARAMETER :: M25N2RDze = 15365 + INTEGER(IntKi), PARAMETER :: M25N3RDze = 15366 + INTEGER(IntKi), PARAMETER :: M25N4RDze = 15367 + INTEGER(IntKi), PARAMETER :: M25N5RDze = 15368 + INTEGER(IntKi), PARAMETER :: M25N6RDze = 15369 + INTEGER(IntKi), PARAMETER :: M25N7RDze = 15370 + INTEGER(IntKi), PARAMETER :: M25N8RDze = 15371 + INTEGER(IntKi), PARAMETER :: M25N9RDze = 15372 + INTEGER(IntKi), PARAMETER :: M26N1RDze = 15373 + INTEGER(IntKi), PARAMETER :: M26N2RDze = 15374 + INTEGER(IntKi), PARAMETER :: M26N3RDze = 15375 + INTEGER(IntKi), PARAMETER :: M26N4RDze = 15376 + INTEGER(IntKi), PARAMETER :: M26N5RDze = 15377 + INTEGER(IntKi), PARAMETER :: M26N6RDze = 15378 + INTEGER(IntKi), PARAMETER :: M26N7RDze = 15379 + INTEGER(IntKi), PARAMETER :: M26N8RDze = 15380 + INTEGER(IntKi), PARAMETER :: M26N9RDze = 15381 + INTEGER(IntKi), PARAMETER :: M27N1RDze = 15382 + INTEGER(IntKi), PARAMETER :: M27N2RDze = 15383 + INTEGER(IntKi), PARAMETER :: M27N3RDze = 15384 + INTEGER(IntKi), PARAMETER :: M27N4RDze = 15385 + INTEGER(IntKi), PARAMETER :: M27N5RDze = 15386 + INTEGER(IntKi), PARAMETER :: M27N6RDze = 15387 + INTEGER(IntKi), PARAMETER :: M27N7RDze = 15388 + INTEGER(IntKi), PARAMETER :: M27N8RDze = 15389 + INTEGER(IntKi), PARAMETER :: M27N9RDze = 15390 + INTEGER(IntKi), PARAMETER :: M28N1RDze = 15391 + INTEGER(IntKi), PARAMETER :: M28N2RDze = 15392 + INTEGER(IntKi), PARAMETER :: M28N3RDze = 15393 + INTEGER(IntKi), PARAMETER :: M28N4RDze = 15394 + INTEGER(IntKi), PARAMETER :: M28N5RDze = 15395 + INTEGER(IntKi), PARAMETER :: M28N6RDze = 15396 + INTEGER(IntKi), PARAMETER :: M28N7RDze = 15397 + INTEGER(IntKi), PARAMETER :: M28N8RDze = 15398 + INTEGER(IntKi), PARAMETER :: M28N9RDze = 15399 + INTEGER(IntKi), PARAMETER :: M29N1RDze = 15400 + INTEGER(IntKi), PARAMETER :: M29N2RDze = 15401 + INTEGER(IntKi), PARAMETER :: M29N3RDze = 15402 + INTEGER(IntKi), PARAMETER :: M29N4RDze = 15403 + INTEGER(IntKi), PARAMETER :: M29N5RDze = 15404 + INTEGER(IntKi), PARAMETER :: M29N6RDze = 15405 + INTEGER(IntKi), PARAMETER :: M29N7RDze = 15406 + INTEGER(IntKi), PARAMETER :: M29N8RDze = 15407 + INTEGER(IntKi), PARAMETER :: M29N9RDze = 15408 + INTEGER(IntKi), PARAMETER :: M30N1RDze = 15409 + INTEGER(IntKi), PARAMETER :: M30N2RDze = 15410 + INTEGER(IntKi), PARAMETER :: M30N3RDze = 15411 + INTEGER(IntKi), PARAMETER :: M30N4RDze = 15412 + INTEGER(IntKi), PARAMETER :: M30N5RDze = 15413 + INTEGER(IntKi), PARAMETER :: M30N6RDze = 15414 + INTEGER(IntKi), PARAMETER :: M30N7RDze = 15415 + INTEGER(IntKi), PARAMETER :: M30N8RDze = 15416 + INTEGER(IntKi), PARAMETER :: M30N9RDze = 15417 + INTEGER(IntKi), PARAMETER :: M31N1RDze = 15418 + INTEGER(IntKi), PARAMETER :: M31N2RDze = 15419 + INTEGER(IntKi), PARAMETER :: M31N3RDze = 15420 + INTEGER(IntKi), PARAMETER :: M31N4RDze = 15421 + INTEGER(IntKi), PARAMETER :: M31N5RDze = 15422 + INTEGER(IntKi), PARAMETER :: M31N6RDze = 15423 + INTEGER(IntKi), PARAMETER :: M31N7RDze = 15424 + INTEGER(IntKi), PARAMETER :: M31N8RDze = 15425 + INTEGER(IntKi), PARAMETER :: M31N9RDze = 15426 + INTEGER(IntKi), PARAMETER :: M32N1RDze = 15427 + INTEGER(IntKi), PARAMETER :: M32N2RDze = 15428 + INTEGER(IntKi), PARAMETER :: M32N3RDze = 15429 + INTEGER(IntKi), PARAMETER :: M32N4RDze = 15430 + INTEGER(IntKi), PARAMETER :: M32N5RDze = 15431 + INTEGER(IntKi), PARAMETER :: M32N6RDze = 15432 + INTEGER(IntKi), PARAMETER :: M32N7RDze = 15433 + INTEGER(IntKi), PARAMETER :: M32N8RDze = 15434 + INTEGER(IntKi), PARAMETER :: M32N9RDze = 15435 + INTEGER(IntKi), PARAMETER :: M33N1RDze = 15436 + INTEGER(IntKi), PARAMETER :: M33N2RDze = 15437 + INTEGER(IntKi), PARAMETER :: M33N3RDze = 15438 + INTEGER(IntKi), PARAMETER :: M33N4RDze = 15439 + INTEGER(IntKi), PARAMETER :: M33N5RDze = 15440 + INTEGER(IntKi), PARAMETER :: M33N6RDze = 15441 + INTEGER(IntKi), PARAMETER :: M33N7RDze = 15442 + INTEGER(IntKi), PARAMETER :: M33N8RDze = 15443 + INTEGER(IntKi), PARAMETER :: M33N9RDze = 15444 + INTEGER(IntKi), PARAMETER :: M34N1RDze = 15445 + INTEGER(IntKi), PARAMETER :: M34N2RDze = 15446 + INTEGER(IntKi), PARAMETER :: M34N3RDze = 15447 + INTEGER(IntKi), PARAMETER :: M34N4RDze = 15448 + INTEGER(IntKi), PARAMETER :: M34N5RDze = 15449 + INTEGER(IntKi), PARAMETER :: M34N6RDze = 15450 + INTEGER(IntKi), PARAMETER :: M34N7RDze = 15451 + INTEGER(IntKi), PARAMETER :: M34N8RDze = 15452 + INTEGER(IntKi), PARAMETER :: M34N9RDze = 15453 + INTEGER(IntKi), PARAMETER :: M35N1RDze = 15454 + INTEGER(IntKi), PARAMETER :: M35N2RDze = 15455 + INTEGER(IntKi), PARAMETER :: M35N3RDze = 15456 + INTEGER(IntKi), PARAMETER :: M35N4RDze = 15457 + INTEGER(IntKi), PARAMETER :: M35N5RDze = 15458 + INTEGER(IntKi), PARAMETER :: M35N6RDze = 15459 + INTEGER(IntKi), PARAMETER :: M35N7RDze = 15460 + INTEGER(IntKi), PARAMETER :: M35N8RDze = 15461 + INTEGER(IntKi), PARAMETER :: M35N9RDze = 15462 + INTEGER(IntKi), PARAMETER :: M36N1RDze = 15463 + INTEGER(IntKi), PARAMETER :: M36N2RDze = 15464 + INTEGER(IntKi), PARAMETER :: M36N3RDze = 15465 + INTEGER(IntKi), PARAMETER :: M36N4RDze = 15466 + INTEGER(IntKi), PARAMETER :: M36N5RDze = 15467 + INTEGER(IntKi), PARAMETER :: M36N6RDze = 15468 + INTEGER(IntKi), PARAMETER :: M36N7RDze = 15469 + INTEGER(IntKi), PARAMETER :: M36N8RDze = 15470 + INTEGER(IntKi), PARAMETER :: M36N9RDze = 15471 + INTEGER(IntKi), PARAMETER :: M37N1RDze = 15472 + INTEGER(IntKi), PARAMETER :: M37N2RDze = 15473 + INTEGER(IntKi), PARAMETER :: M37N3RDze = 15474 + INTEGER(IntKi), PARAMETER :: M37N4RDze = 15475 + INTEGER(IntKi), PARAMETER :: M37N5RDze = 15476 + INTEGER(IntKi), PARAMETER :: M37N6RDze = 15477 + INTEGER(IntKi), PARAMETER :: M37N7RDze = 15478 + INTEGER(IntKi), PARAMETER :: M37N8RDze = 15479 + INTEGER(IntKi), PARAMETER :: M37N9RDze = 15480 + INTEGER(IntKi), PARAMETER :: M38N1RDze = 15481 + INTEGER(IntKi), PARAMETER :: M38N2RDze = 15482 + INTEGER(IntKi), PARAMETER :: M38N3RDze = 15483 + INTEGER(IntKi), PARAMETER :: M38N4RDze = 15484 + INTEGER(IntKi), PARAMETER :: M38N5RDze = 15485 + INTEGER(IntKi), PARAMETER :: M38N6RDze = 15486 + INTEGER(IntKi), PARAMETER :: M38N7RDze = 15487 + INTEGER(IntKi), PARAMETER :: M38N8RDze = 15488 + INTEGER(IntKi), PARAMETER :: M38N9RDze = 15489 + INTEGER(IntKi), PARAMETER :: M39N1RDze = 15490 + INTEGER(IntKi), PARAMETER :: M39N2RDze = 15491 + INTEGER(IntKi), PARAMETER :: M39N3RDze = 15492 + INTEGER(IntKi), PARAMETER :: M39N4RDze = 15493 + INTEGER(IntKi), PARAMETER :: M39N5RDze = 15494 + INTEGER(IntKi), PARAMETER :: M39N6RDze = 15495 + INTEGER(IntKi), PARAMETER :: M39N7RDze = 15496 + INTEGER(IntKi), PARAMETER :: M39N8RDze = 15497 + INTEGER(IntKi), PARAMETER :: M39N9RDze = 15498 + INTEGER(IntKi), PARAMETER :: M40N1RDze = 15499 + INTEGER(IntKi), PARAMETER :: M40N2RDze = 15500 + INTEGER(IntKi), PARAMETER :: M40N3RDze = 15501 + INTEGER(IntKi), PARAMETER :: M40N4RDze = 15502 + INTEGER(IntKi), PARAMETER :: M40N5RDze = 15503 + INTEGER(IntKi), PARAMETER :: M40N6RDze = 15504 + INTEGER(IntKi), PARAMETER :: M40N7RDze = 15505 + INTEGER(IntKi), PARAMETER :: M40N8RDze = 15506 + INTEGER(IntKi), PARAMETER :: M40N9RDze = 15507 + INTEGER(IntKi), PARAMETER :: M41N1RDze = 15508 + INTEGER(IntKi), PARAMETER :: M41N2RDze = 15509 + INTEGER(IntKi), PARAMETER :: M41N3RDze = 15510 + INTEGER(IntKi), PARAMETER :: M41N4RDze = 15511 + INTEGER(IntKi), PARAMETER :: M41N5RDze = 15512 + INTEGER(IntKi), PARAMETER :: M41N6RDze = 15513 + INTEGER(IntKi), PARAMETER :: M41N7RDze = 15514 + INTEGER(IntKi), PARAMETER :: M41N8RDze = 15515 + INTEGER(IntKi), PARAMETER :: M41N9RDze = 15516 + INTEGER(IntKi), PARAMETER :: M42N1RDze = 15517 + INTEGER(IntKi), PARAMETER :: M42N2RDze = 15518 + INTEGER(IntKi), PARAMETER :: M42N3RDze = 15519 + INTEGER(IntKi), PARAMETER :: M42N4RDze = 15520 + INTEGER(IntKi), PARAMETER :: M42N5RDze = 15521 + INTEGER(IntKi), PARAMETER :: M42N6RDze = 15522 + INTEGER(IntKi), PARAMETER :: M42N7RDze = 15523 + INTEGER(IntKi), PARAMETER :: M42N8RDze = 15524 + INTEGER(IntKi), PARAMETER :: M42N9RDze = 15525 + INTEGER(IntKi), PARAMETER :: M43N1RDze = 15526 + INTEGER(IntKi), PARAMETER :: M43N2RDze = 15527 + INTEGER(IntKi), PARAMETER :: M43N3RDze = 15528 + INTEGER(IntKi), PARAMETER :: M43N4RDze = 15529 + INTEGER(IntKi), PARAMETER :: M43N5RDze = 15530 + INTEGER(IntKi), PARAMETER :: M43N6RDze = 15531 + INTEGER(IntKi), PARAMETER :: M43N7RDze = 15532 + INTEGER(IntKi), PARAMETER :: M43N8RDze = 15533 + INTEGER(IntKi), PARAMETER :: M43N9RDze = 15534 + INTEGER(IntKi), PARAMETER :: M44N1RDze = 15535 + INTEGER(IntKi), PARAMETER :: M44N2RDze = 15536 + INTEGER(IntKi), PARAMETER :: M44N3RDze = 15537 + INTEGER(IntKi), PARAMETER :: M44N4RDze = 15538 + INTEGER(IntKi), PARAMETER :: M44N5RDze = 15539 + INTEGER(IntKi), PARAMETER :: M44N6RDze = 15540 + INTEGER(IntKi), PARAMETER :: M44N7RDze = 15541 + INTEGER(IntKi), PARAMETER :: M44N8RDze = 15542 + INTEGER(IntKi), PARAMETER :: M44N9RDze = 15543 + INTEGER(IntKi), PARAMETER :: M45N1RDze = 15544 + INTEGER(IntKi), PARAMETER :: M45N2RDze = 15545 + INTEGER(IntKi), PARAMETER :: M45N3RDze = 15546 + INTEGER(IntKi), PARAMETER :: M45N4RDze = 15547 + INTEGER(IntKi), PARAMETER :: M45N5RDze = 15548 + INTEGER(IntKi), PARAMETER :: M45N6RDze = 15549 + INTEGER(IntKi), PARAMETER :: M45N7RDze = 15550 + INTEGER(IntKi), PARAMETER :: M45N8RDze = 15551 + INTEGER(IntKi), PARAMETER :: M45N9RDze = 15552 + INTEGER(IntKi), PARAMETER :: M46N1RDze = 15553 + INTEGER(IntKi), PARAMETER :: M46N2RDze = 15554 + INTEGER(IntKi), PARAMETER :: M46N3RDze = 15555 + INTEGER(IntKi), PARAMETER :: M46N4RDze = 15556 + INTEGER(IntKi), PARAMETER :: M46N5RDze = 15557 + INTEGER(IntKi), PARAMETER :: M46N6RDze = 15558 + INTEGER(IntKi), PARAMETER :: M46N7RDze = 15559 + INTEGER(IntKi), PARAMETER :: M46N8RDze = 15560 + INTEGER(IntKi), PARAMETER :: M46N9RDze = 15561 + INTEGER(IntKi), PARAMETER :: M47N1RDze = 15562 + INTEGER(IntKi), PARAMETER :: M47N2RDze = 15563 + INTEGER(IntKi), PARAMETER :: M47N3RDze = 15564 + INTEGER(IntKi), PARAMETER :: M47N4RDze = 15565 + INTEGER(IntKi), PARAMETER :: M47N5RDze = 15566 + INTEGER(IntKi), PARAMETER :: M47N6RDze = 15567 + INTEGER(IntKi), PARAMETER :: M47N7RDze = 15568 + INTEGER(IntKi), PARAMETER :: M47N8RDze = 15569 + INTEGER(IntKi), PARAMETER :: M47N9RDze = 15570 + INTEGER(IntKi), PARAMETER :: M48N1RDze = 15571 + INTEGER(IntKi), PARAMETER :: M48N2RDze = 15572 + INTEGER(IntKi), PARAMETER :: M48N3RDze = 15573 + INTEGER(IntKi), PARAMETER :: M48N4RDze = 15574 + INTEGER(IntKi), PARAMETER :: M48N5RDze = 15575 + INTEGER(IntKi), PARAMETER :: M48N6RDze = 15576 + INTEGER(IntKi), PARAMETER :: M48N7RDze = 15577 + INTEGER(IntKi), PARAMETER :: M48N8RDze = 15578 + INTEGER(IntKi), PARAMETER :: M48N9RDze = 15579 + INTEGER(IntKi), PARAMETER :: M49N1RDze = 15580 + INTEGER(IntKi), PARAMETER :: M49N2RDze = 15581 + INTEGER(IntKi), PARAMETER :: M49N3RDze = 15582 + INTEGER(IntKi), PARAMETER :: M49N4RDze = 15583 + INTEGER(IntKi), PARAMETER :: M49N5RDze = 15584 + INTEGER(IntKi), PARAMETER :: M49N6RDze = 15585 + INTEGER(IntKi), PARAMETER :: M49N7RDze = 15586 + INTEGER(IntKi), PARAMETER :: M49N8RDze = 15587 + INTEGER(IntKi), PARAMETER :: M49N9RDze = 15588 + INTEGER(IntKi), PARAMETER :: M50N1RDze = 15589 + INTEGER(IntKi), PARAMETER :: M50N2RDze = 15590 + INTEGER(IntKi), PARAMETER :: M50N3RDze = 15591 + INTEGER(IntKi), PARAMETER :: M50N4RDze = 15592 + INTEGER(IntKi), PARAMETER :: M50N5RDze = 15593 + INTEGER(IntKi), PARAMETER :: M50N6RDze = 15594 + INTEGER(IntKi), PARAMETER :: M50N7RDze = 15595 + INTEGER(IntKi), PARAMETER :: M50N8RDze = 15596 + INTEGER(IntKi), PARAMETER :: M50N9RDze = 15597 + INTEGER(IntKi), PARAMETER :: M51N1RDze = 15598 + INTEGER(IntKi), PARAMETER :: M51N2RDze = 15599 + INTEGER(IntKi), PARAMETER :: M51N3RDze = 15600 + INTEGER(IntKi), PARAMETER :: M51N4RDze = 15601 + INTEGER(IntKi), PARAMETER :: M51N5RDze = 15602 + INTEGER(IntKi), PARAMETER :: M51N6RDze = 15603 + INTEGER(IntKi), PARAMETER :: M51N7RDze = 15604 + INTEGER(IntKi), PARAMETER :: M51N8RDze = 15605 + INTEGER(IntKi), PARAMETER :: M51N9RDze = 15606 + INTEGER(IntKi), PARAMETER :: M52N1RDze = 15607 + INTEGER(IntKi), PARAMETER :: M52N2RDze = 15608 + INTEGER(IntKi), PARAMETER :: M52N3RDze = 15609 + INTEGER(IntKi), PARAMETER :: M52N4RDze = 15610 + INTEGER(IntKi), PARAMETER :: M52N5RDze = 15611 + INTEGER(IntKi), PARAMETER :: M52N6RDze = 15612 + INTEGER(IntKi), PARAMETER :: M52N7RDze = 15613 + INTEGER(IntKi), PARAMETER :: M52N8RDze = 15614 + INTEGER(IntKi), PARAMETER :: M52N9RDze = 15615 + INTEGER(IntKi), PARAMETER :: M53N1RDze = 15616 + INTEGER(IntKi), PARAMETER :: M53N2RDze = 15617 + INTEGER(IntKi), PARAMETER :: M53N3RDze = 15618 + INTEGER(IntKi), PARAMETER :: M53N4RDze = 15619 + INTEGER(IntKi), PARAMETER :: M53N5RDze = 15620 + INTEGER(IntKi), PARAMETER :: M53N6RDze = 15621 + INTEGER(IntKi), PARAMETER :: M53N7RDze = 15622 + INTEGER(IntKi), PARAMETER :: M53N8RDze = 15623 + INTEGER(IntKi), PARAMETER :: M53N9RDze = 15624 + INTEGER(IntKi), PARAMETER :: M54N1RDze = 15625 + INTEGER(IntKi), PARAMETER :: M54N2RDze = 15626 + INTEGER(IntKi), PARAMETER :: M54N3RDze = 15627 + INTEGER(IntKi), PARAMETER :: M54N4RDze = 15628 + INTEGER(IntKi), PARAMETER :: M54N5RDze = 15629 + INTEGER(IntKi), PARAMETER :: M54N6RDze = 15630 + INTEGER(IntKi), PARAMETER :: M54N7RDze = 15631 + INTEGER(IntKi), PARAMETER :: M54N8RDze = 15632 + INTEGER(IntKi), PARAMETER :: M54N9RDze = 15633 + INTEGER(IntKi), PARAMETER :: M55N1RDze = 15634 + INTEGER(IntKi), PARAMETER :: M55N2RDze = 15635 + INTEGER(IntKi), PARAMETER :: M55N3RDze = 15636 + INTEGER(IntKi), PARAMETER :: M55N4RDze = 15637 + INTEGER(IntKi), PARAMETER :: M55N5RDze = 15638 + INTEGER(IntKi), PARAMETER :: M55N6RDze = 15639 + INTEGER(IntKi), PARAMETER :: M55N7RDze = 15640 + INTEGER(IntKi), PARAMETER :: M55N8RDze = 15641 + INTEGER(IntKi), PARAMETER :: M55N9RDze = 15642 + INTEGER(IntKi), PARAMETER :: M56N1RDze = 15643 + INTEGER(IntKi), PARAMETER :: M56N2RDze = 15644 + INTEGER(IntKi), PARAMETER :: M56N3RDze = 15645 + INTEGER(IntKi), PARAMETER :: M56N4RDze = 15646 + INTEGER(IntKi), PARAMETER :: M56N5RDze = 15647 + INTEGER(IntKi), PARAMETER :: M56N6RDze = 15648 + INTEGER(IntKi), PARAMETER :: M56N7RDze = 15649 + INTEGER(IntKi), PARAMETER :: M56N8RDze = 15650 + INTEGER(IntKi), PARAMETER :: M56N9RDze = 15651 + INTEGER(IntKi), PARAMETER :: M57N1RDze = 15652 + INTEGER(IntKi), PARAMETER :: M57N2RDze = 15653 + INTEGER(IntKi), PARAMETER :: M57N3RDze = 15654 + INTEGER(IntKi), PARAMETER :: M57N4RDze = 15655 + INTEGER(IntKi), PARAMETER :: M57N5RDze = 15656 + INTEGER(IntKi), PARAMETER :: M57N6RDze = 15657 + INTEGER(IntKi), PARAMETER :: M57N7RDze = 15658 + INTEGER(IntKi), PARAMETER :: M57N8RDze = 15659 + INTEGER(IntKi), PARAMETER :: M57N9RDze = 15660 + INTEGER(IntKi), PARAMETER :: M58N1RDze = 15661 + INTEGER(IntKi), PARAMETER :: M58N2RDze = 15662 + INTEGER(IntKi), PARAMETER :: M58N3RDze = 15663 + INTEGER(IntKi), PARAMETER :: M58N4RDze = 15664 + INTEGER(IntKi), PARAMETER :: M58N5RDze = 15665 + INTEGER(IntKi), PARAMETER :: M58N6RDze = 15666 + INTEGER(IntKi), PARAMETER :: M58N7RDze = 15667 + INTEGER(IntKi), PARAMETER :: M58N8RDze = 15668 + INTEGER(IntKi), PARAMETER :: M58N9RDze = 15669 + INTEGER(IntKi), PARAMETER :: M59N1RDze = 15670 + INTEGER(IntKi), PARAMETER :: M59N2RDze = 15671 + INTEGER(IntKi), PARAMETER :: M59N3RDze = 15672 + INTEGER(IntKi), PARAMETER :: M59N4RDze = 15673 + INTEGER(IntKi), PARAMETER :: M59N5RDze = 15674 + INTEGER(IntKi), PARAMETER :: M59N6RDze = 15675 + INTEGER(IntKi), PARAMETER :: M59N7RDze = 15676 + INTEGER(IntKi), PARAMETER :: M59N8RDze = 15677 + INTEGER(IntKi), PARAMETER :: M59N9RDze = 15678 + INTEGER(IntKi), PARAMETER :: M60N1RDze = 15679 + INTEGER(IntKi), PARAMETER :: M60N2RDze = 15680 + INTEGER(IntKi), PARAMETER :: M60N3RDze = 15681 + INTEGER(IntKi), PARAMETER :: M60N4RDze = 15682 + INTEGER(IntKi), PARAMETER :: M60N5RDze = 15683 + INTEGER(IntKi), PARAMETER :: M60N6RDze = 15684 + INTEGER(IntKi), PARAMETER :: M60N7RDze = 15685 + INTEGER(IntKi), PARAMETER :: M60N8RDze = 15686 + INTEGER(IntKi), PARAMETER :: M60N9RDze = 15687 + INTEGER(IntKi), PARAMETER :: M61N1RDze = 15688 + INTEGER(IntKi), PARAMETER :: M61N2RDze = 15689 + INTEGER(IntKi), PARAMETER :: M61N3RDze = 15690 + INTEGER(IntKi), PARAMETER :: M61N4RDze = 15691 + INTEGER(IntKi), PARAMETER :: M61N5RDze = 15692 + INTEGER(IntKi), PARAMETER :: M61N6RDze = 15693 + INTEGER(IntKi), PARAMETER :: M61N7RDze = 15694 + INTEGER(IntKi), PARAMETER :: M61N8RDze = 15695 + INTEGER(IntKi), PARAMETER :: M61N9RDze = 15696 + INTEGER(IntKi), PARAMETER :: M62N1RDze = 15697 + INTEGER(IntKi), PARAMETER :: M62N2RDze = 15698 + INTEGER(IntKi), PARAMETER :: M62N3RDze = 15699 + INTEGER(IntKi), PARAMETER :: M62N4RDze = 15700 + INTEGER(IntKi), PARAMETER :: M62N5RDze = 15701 + INTEGER(IntKi), PARAMETER :: M62N6RDze = 15702 + INTEGER(IntKi), PARAMETER :: M62N7RDze = 15703 + INTEGER(IntKi), PARAMETER :: M62N8RDze = 15704 + INTEGER(IntKi), PARAMETER :: M62N9RDze = 15705 + INTEGER(IntKi), PARAMETER :: M63N1RDze = 15706 + INTEGER(IntKi), PARAMETER :: M63N2RDze = 15707 + INTEGER(IntKi), PARAMETER :: M63N3RDze = 15708 + INTEGER(IntKi), PARAMETER :: M63N4RDze = 15709 + INTEGER(IntKi), PARAMETER :: M63N5RDze = 15710 + INTEGER(IntKi), PARAMETER :: M63N6RDze = 15711 + INTEGER(IntKi), PARAMETER :: M63N7RDze = 15712 + INTEGER(IntKi), PARAMETER :: M63N8RDze = 15713 + INTEGER(IntKi), PARAMETER :: M63N9RDze = 15714 + INTEGER(IntKi), PARAMETER :: M64N1RDze = 15715 + INTEGER(IntKi), PARAMETER :: M64N2RDze = 15716 + INTEGER(IntKi), PARAMETER :: M64N3RDze = 15717 + INTEGER(IntKi), PARAMETER :: M64N4RDze = 15718 + INTEGER(IntKi), PARAMETER :: M64N5RDze = 15719 + INTEGER(IntKi), PARAMETER :: M64N6RDze = 15720 + INTEGER(IntKi), PARAMETER :: M64N7RDze = 15721 + INTEGER(IntKi), PARAMETER :: M64N8RDze = 15722 + INTEGER(IntKi), PARAMETER :: M64N9RDze = 15723 + INTEGER(IntKi), PARAMETER :: M65N1RDze = 15724 + INTEGER(IntKi), PARAMETER :: M65N2RDze = 15725 + INTEGER(IntKi), PARAMETER :: M65N3RDze = 15726 + INTEGER(IntKi), PARAMETER :: M65N4RDze = 15727 + INTEGER(IntKi), PARAMETER :: M65N5RDze = 15728 + INTEGER(IntKi), PARAMETER :: M65N6RDze = 15729 + INTEGER(IntKi), PARAMETER :: M65N7RDze = 15730 + INTEGER(IntKi), PARAMETER :: M65N8RDze = 15731 + INTEGER(IntKi), PARAMETER :: M65N9RDze = 15732 + INTEGER(IntKi), PARAMETER :: M66N1RDze = 15733 + INTEGER(IntKi), PARAMETER :: M66N2RDze = 15734 + INTEGER(IntKi), PARAMETER :: M66N3RDze = 15735 + INTEGER(IntKi), PARAMETER :: M66N4RDze = 15736 + INTEGER(IntKi), PARAMETER :: M66N5RDze = 15737 + INTEGER(IntKi), PARAMETER :: M66N6RDze = 15738 + INTEGER(IntKi), PARAMETER :: M66N7RDze = 15739 + INTEGER(IntKi), PARAMETER :: M66N8RDze = 15740 + INTEGER(IntKi), PARAMETER :: M66N9RDze = 15741 + INTEGER(IntKi), PARAMETER :: M67N1RDze = 15742 + INTEGER(IntKi), PARAMETER :: M67N2RDze = 15743 + INTEGER(IntKi), PARAMETER :: M67N3RDze = 15744 + INTEGER(IntKi), PARAMETER :: M67N4RDze = 15745 + INTEGER(IntKi), PARAMETER :: M67N5RDze = 15746 + INTEGER(IntKi), PARAMETER :: M67N6RDze = 15747 + INTEGER(IntKi), PARAMETER :: M67N7RDze = 15748 + INTEGER(IntKi), PARAMETER :: M67N8RDze = 15749 + INTEGER(IntKi), PARAMETER :: M67N9RDze = 15750 + INTEGER(IntKi), PARAMETER :: M68N1RDze = 15751 + INTEGER(IntKi), PARAMETER :: M68N2RDze = 15752 + INTEGER(IntKi), PARAMETER :: M68N3RDze = 15753 + INTEGER(IntKi), PARAMETER :: M68N4RDze = 15754 + INTEGER(IntKi), PARAMETER :: M68N5RDze = 15755 + INTEGER(IntKi), PARAMETER :: M68N6RDze = 15756 + INTEGER(IntKi), PARAMETER :: M68N7RDze = 15757 + INTEGER(IntKi), PARAMETER :: M68N8RDze = 15758 + INTEGER(IntKi), PARAMETER :: M68N9RDze = 15759 + INTEGER(IntKi), PARAMETER :: M69N1RDze = 15760 + INTEGER(IntKi), PARAMETER :: M69N2RDze = 15761 + INTEGER(IntKi), PARAMETER :: M69N3RDze = 15762 + INTEGER(IntKi), PARAMETER :: M69N4RDze = 15763 + INTEGER(IntKi), PARAMETER :: M69N5RDze = 15764 + INTEGER(IntKi), PARAMETER :: M69N6RDze = 15765 + INTEGER(IntKi), PARAMETER :: M69N7RDze = 15766 + INTEGER(IntKi), PARAMETER :: M69N8RDze = 15767 + INTEGER(IntKi), PARAMETER :: M69N9RDze = 15768 + INTEGER(IntKi), PARAMETER :: M70N1RDze = 15769 + INTEGER(IntKi), PARAMETER :: M70N2RDze = 15770 + INTEGER(IntKi), PARAMETER :: M70N3RDze = 15771 + INTEGER(IntKi), PARAMETER :: M70N4RDze = 15772 + INTEGER(IntKi), PARAMETER :: M70N5RDze = 15773 + INTEGER(IntKi), PARAMETER :: M70N6RDze = 15774 + INTEGER(IntKi), PARAMETER :: M70N7RDze = 15775 + INTEGER(IntKi), PARAMETER :: M70N8RDze = 15776 + INTEGER(IntKi), PARAMETER :: M70N9RDze = 15777 + INTEGER(IntKi), PARAMETER :: M71N1RDze = 15778 + INTEGER(IntKi), PARAMETER :: M71N2RDze = 15779 + INTEGER(IntKi), PARAMETER :: M71N3RDze = 15780 + INTEGER(IntKi), PARAMETER :: M71N4RDze = 15781 + INTEGER(IntKi), PARAMETER :: M71N5RDze = 15782 + INTEGER(IntKi), PARAMETER :: M71N6RDze = 15783 + INTEGER(IntKi), PARAMETER :: M71N7RDze = 15784 + INTEGER(IntKi), PARAMETER :: M71N8RDze = 15785 + INTEGER(IntKi), PARAMETER :: M71N9RDze = 15786 + INTEGER(IntKi), PARAMETER :: M72N1RDze = 15787 + INTEGER(IntKi), PARAMETER :: M72N2RDze = 15788 + INTEGER(IntKi), PARAMETER :: M72N3RDze = 15789 + INTEGER(IntKi), PARAMETER :: M72N4RDze = 15790 + INTEGER(IntKi), PARAMETER :: M72N5RDze = 15791 + INTEGER(IntKi), PARAMETER :: M72N6RDze = 15792 + INTEGER(IntKi), PARAMETER :: M72N7RDze = 15793 + INTEGER(IntKi), PARAMETER :: M72N8RDze = 15794 + INTEGER(IntKi), PARAMETER :: M72N9RDze = 15795 + INTEGER(IntKi), PARAMETER :: M73N1RDze = 15796 + INTEGER(IntKi), PARAMETER :: M73N2RDze = 15797 + INTEGER(IntKi), PARAMETER :: M73N3RDze = 15798 + INTEGER(IntKi), PARAMETER :: M73N4RDze = 15799 + INTEGER(IntKi), PARAMETER :: M73N5RDze = 15800 + INTEGER(IntKi), PARAMETER :: M73N6RDze = 15801 + INTEGER(IntKi), PARAMETER :: M73N7RDze = 15802 + INTEGER(IntKi), PARAMETER :: M73N8RDze = 15803 + INTEGER(IntKi), PARAMETER :: M73N9RDze = 15804 + INTEGER(IntKi), PARAMETER :: M74N1RDze = 15805 + INTEGER(IntKi), PARAMETER :: M74N2RDze = 15806 + INTEGER(IntKi), PARAMETER :: M74N3RDze = 15807 + INTEGER(IntKi), PARAMETER :: M74N4RDze = 15808 + INTEGER(IntKi), PARAMETER :: M74N5RDze = 15809 + INTEGER(IntKi), PARAMETER :: M74N6RDze = 15810 + INTEGER(IntKi), PARAMETER :: M74N7RDze = 15811 + INTEGER(IntKi), PARAMETER :: M74N8RDze = 15812 + INTEGER(IntKi), PARAMETER :: M74N9RDze = 15813 + INTEGER(IntKi), PARAMETER :: M75N1RDze = 15814 + INTEGER(IntKi), PARAMETER :: M75N2RDze = 15815 + INTEGER(IntKi), PARAMETER :: M75N3RDze = 15816 + INTEGER(IntKi), PARAMETER :: M75N4RDze = 15817 + INTEGER(IntKi), PARAMETER :: M75N5RDze = 15818 + INTEGER(IntKi), PARAMETER :: M75N6RDze = 15819 + INTEGER(IntKi), PARAMETER :: M75N7RDze = 15820 + INTEGER(IntKi), PARAMETER :: M75N8RDze = 15821 + INTEGER(IntKi), PARAMETER :: M75N9RDze = 15822 + INTEGER(IntKi), PARAMETER :: M76N1RDze = 15823 + INTEGER(IntKi), PARAMETER :: M76N2RDze = 15824 + INTEGER(IntKi), PARAMETER :: M76N3RDze = 15825 + INTEGER(IntKi), PARAMETER :: M76N4RDze = 15826 + INTEGER(IntKi), PARAMETER :: M76N5RDze = 15827 + INTEGER(IntKi), PARAMETER :: M76N6RDze = 15828 + INTEGER(IntKi), PARAMETER :: M76N7RDze = 15829 + INTEGER(IntKi), PARAMETER :: M76N8RDze = 15830 + INTEGER(IntKi), PARAMETER :: M76N9RDze = 15831 + INTEGER(IntKi), PARAMETER :: M77N1RDze = 15832 + INTEGER(IntKi), PARAMETER :: M77N2RDze = 15833 + INTEGER(IntKi), PARAMETER :: M77N3RDze = 15834 + INTEGER(IntKi), PARAMETER :: M77N4RDze = 15835 + INTEGER(IntKi), PARAMETER :: M77N5RDze = 15836 + INTEGER(IntKi), PARAMETER :: M77N6RDze = 15837 + INTEGER(IntKi), PARAMETER :: M77N7RDze = 15838 + INTEGER(IntKi), PARAMETER :: M77N8RDze = 15839 + INTEGER(IntKi), PARAMETER :: M77N9RDze = 15840 + INTEGER(IntKi), PARAMETER :: M78N1RDze = 15841 + INTEGER(IntKi), PARAMETER :: M78N2RDze = 15842 + INTEGER(IntKi), PARAMETER :: M78N3RDze = 15843 + INTEGER(IntKi), PARAMETER :: M78N4RDze = 15844 + INTEGER(IntKi), PARAMETER :: M78N5RDze = 15845 + INTEGER(IntKi), PARAMETER :: M78N6RDze = 15846 + INTEGER(IntKi), PARAMETER :: M78N7RDze = 15847 + INTEGER(IntKi), PARAMETER :: M78N8RDze = 15848 + INTEGER(IntKi), PARAMETER :: M78N9RDze = 15849 + INTEGER(IntKi), PARAMETER :: M79N1RDze = 15850 + INTEGER(IntKi), PARAMETER :: M79N2RDze = 15851 + INTEGER(IntKi), PARAMETER :: M79N3RDze = 15852 + INTEGER(IntKi), PARAMETER :: M79N4RDze = 15853 + INTEGER(IntKi), PARAMETER :: M79N5RDze = 15854 + INTEGER(IntKi), PARAMETER :: M79N6RDze = 15855 + INTEGER(IntKi), PARAMETER :: M79N7RDze = 15856 + INTEGER(IntKi), PARAMETER :: M79N8RDze = 15857 + INTEGER(IntKi), PARAMETER :: M79N9RDze = 15858 + INTEGER(IntKi), PARAMETER :: M80N1RDze = 15859 + INTEGER(IntKi), PARAMETER :: M80N2RDze = 15860 + INTEGER(IntKi), PARAMETER :: M80N3RDze = 15861 + INTEGER(IntKi), PARAMETER :: M80N4RDze = 15862 + INTEGER(IntKi), PARAMETER :: M80N5RDze = 15863 + INTEGER(IntKi), PARAMETER :: M80N6RDze = 15864 + INTEGER(IntKi), PARAMETER :: M80N7RDze = 15865 + INTEGER(IntKi), PARAMETER :: M80N8RDze = 15866 + INTEGER(IntKi), PARAMETER :: M80N9RDze = 15867 + INTEGER(IntKi), PARAMETER :: M81N1RDze = 15868 + INTEGER(IntKi), PARAMETER :: M81N2RDze = 15869 + INTEGER(IntKi), PARAMETER :: M81N3RDze = 15870 + INTEGER(IntKi), PARAMETER :: M81N4RDze = 15871 + INTEGER(IntKi), PARAMETER :: M81N5RDze = 15872 + INTEGER(IntKi), PARAMETER :: M81N6RDze = 15873 + INTEGER(IntKi), PARAMETER :: M81N7RDze = 15874 + INTEGER(IntKi), PARAMETER :: M81N8RDze = 15875 + INTEGER(IntKi), PARAMETER :: M81N9RDze = 15876 + INTEGER(IntKi), PARAMETER :: M82N1RDze = 15877 + INTEGER(IntKi), PARAMETER :: M82N2RDze = 15878 + INTEGER(IntKi), PARAMETER :: M82N3RDze = 15879 + INTEGER(IntKi), PARAMETER :: M82N4RDze = 15880 + INTEGER(IntKi), PARAMETER :: M82N5RDze = 15881 + INTEGER(IntKi), PARAMETER :: M82N6RDze = 15882 + INTEGER(IntKi), PARAMETER :: M82N7RDze = 15883 + INTEGER(IntKi), PARAMETER :: M82N8RDze = 15884 + INTEGER(IntKi), PARAMETER :: M82N9RDze = 15885 + INTEGER(IntKi), PARAMETER :: M83N1RDze = 15886 + INTEGER(IntKi), PARAMETER :: M83N2RDze = 15887 + INTEGER(IntKi), PARAMETER :: M83N3RDze = 15888 + INTEGER(IntKi), PARAMETER :: M83N4RDze = 15889 + INTEGER(IntKi), PARAMETER :: M83N5RDze = 15890 + INTEGER(IntKi), PARAMETER :: M83N6RDze = 15891 + INTEGER(IntKi), PARAMETER :: M83N7RDze = 15892 + INTEGER(IntKi), PARAMETER :: M83N8RDze = 15893 + INTEGER(IntKi), PARAMETER :: M83N9RDze = 15894 + INTEGER(IntKi), PARAMETER :: M84N1RDze = 15895 + INTEGER(IntKi), PARAMETER :: M84N2RDze = 15896 + INTEGER(IntKi), PARAMETER :: M84N3RDze = 15897 + INTEGER(IntKi), PARAMETER :: M84N4RDze = 15898 + INTEGER(IntKi), PARAMETER :: M84N5RDze = 15899 + INTEGER(IntKi), PARAMETER :: M84N6RDze = 15900 + INTEGER(IntKi), PARAMETER :: M84N7RDze = 15901 + INTEGER(IntKi), PARAMETER :: M84N8RDze = 15902 + INTEGER(IntKi), PARAMETER :: M84N9RDze = 15903 + INTEGER(IntKi), PARAMETER :: M85N1RDze = 15904 + INTEGER(IntKi), PARAMETER :: M85N2RDze = 15905 + INTEGER(IntKi), PARAMETER :: M85N3RDze = 15906 + INTEGER(IntKi), PARAMETER :: M85N4RDze = 15907 + INTEGER(IntKi), PARAMETER :: M85N5RDze = 15908 + INTEGER(IntKi), PARAMETER :: M85N6RDze = 15909 + INTEGER(IntKi), PARAMETER :: M85N7RDze = 15910 + INTEGER(IntKi), PARAMETER :: M85N8RDze = 15911 + INTEGER(IntKi), PARAMETER :: M85N9RDze = 15912 + INTEGER(IntKi), PARAMETER :: M86N1RDze = 15913 + INTEGER(IntKi), PARAMETER :: M86N2RDze = 15914 + INTEGER(IntKi), PARAMETER :: M86N3RDze = 15915 + INTEGER(IntKi), PARAMETER :: M86N4RDze = 15916 + INTEGER(IntKi), PARAMETER :: M86N5RDze = 15917 + INTEGER(IntKi), PARAMETER :: M86N6RDze = 15918 + INTEGER(IntKi), PARAMETER :: M86N7RDze = 15919 + INTEGER(IntKi), PARAMETER :: M86N8RDze = 15920 + INTEGER(IntKi), PARAMETER :: M86N9RDze = 15921 + INTEGER(IntKi), PARAMETER :: M87N1RDze = 15922 + INTEGER(IntKi), PARAMETER :: M87N2RDze = 15923 + INTEGER(IntKi), PARAMETER :: M87N3RDze = 15924 + INTEGER(IntKi), PARAMETER :: M87N4RDze = 15925 + INTEGER(IntKi), PARAMETER :: M87N5RDze = 15926 + INTEGER(IntKi), PARAMETER :: M87N6RDze = 15927 + INTEGER(IntKi), PARAMETER :: M87N7RDze = 15928 + INTEGER(IntKi), PARAMETER :: M87N8RDze = 15929 + INTEGER(IntKi), PARAMETER :: M87N9RDze = 15930 + INTEGER(IntKi), PARAMETER :: M88N1RDze = 15931 + INTEGER(IntKi), PARAMETER :: M88N2RDze = 15932 + INTEGER(IntKi), PARAMETER :: M88N3RDze = 15933 + INTEGER(IntKi), PARAMETER :: M88N4RDze = 15934 + INTEGER(IntKi), PARAMETER :: M88N5RDze = 15935 + INTEGER(IntKi), PARAMETER :: M88N6RDze = 15936 + INTEGER(IntKi), PARAMETER :: M88N7RDze = 15937 + INTEGER(IntKi), PARAMETER :: M88N8RDze = 15938 + INTEGER(IntKi), PARAMETER :: M88N9RDze = 15939 + INTEGER(IntKi), PARAMETER :: M89N1RDze = 15940 + INTEGER(IntKi), PARAMETER :: M89N2RDze = 15941 + INTEGER(IntKi), PARAMETER :: M89N3RDze = 15942 + INTEGER(IntKi), PARAMETER :: M89N4RDze = 15943 + INTEGER(IntKi), PARAMETER :: M89N5RDze = 15944 + INTEGER(IntKi), PARAMETER :: M89N6RDze = 15945 + INTEGER(IntKi), PARAMETER :: M89N7RDze = 15946 + INTEGER(IntKi), PARAMETER :: M89N8RDze = 15947 + INTEGER(IntKi), PARAMETER :: M89N9RDze = 15948 + INTEGER(IntKi), PARAMETER :: M90N1RDze = 15949 + INTEGER(IntKi), PARAMETER :: M90N2RDze = 15950 + INTEGER(IntKi), PARAMETER :: M90N3RDze = 15951 + INTEGER(IntKi), PARAMETER :: M90N4RDze = 15952 + INTEGER(IntKi), PARAMETER :: M90N5RDze = 15953 + INTEGER(IntKi), PARAMETER :: M90N6RDze = 15954 + INTEGER(IntKi), PARAMETER :: M90N7RDze = 15955 + INTEGER(IntKi), PARAMETER :: M90N8RDze = 15956 + INTEGER(IntKi), PARAMETER :: M90N9RDze = 15957 + INTEGER(IntKi), PARAMETER :: M91N1RDze = 15958 + INTEGER(IntKi), PARAMETER :: M91N2RDze = 15959 + INTEGER(IntKi), PARAMETER :: M91N3RDze = 15960 + INTEGER(IntKi), PARAMETER :: M91N4RDze = 15961 + INTEGER(IntKi), PARAMETER :: M91N5RDze = 15962 + INTEGER(IntKi), PARAMETER :: M91N6RDze = 15963 + INTEGER(IntKi), PARAMETER :: M91N7RDze = 15964 + INTEGER(IntKi), PARAMETER :: M91N8RDze = 15965 + INTEGER(IntKi), PARAMETER :: M91N9RDze = 15966 + INTEGER(IntKi), PARAMETER :: M92N1RDze = 15967 + INTEGER(IntKi), PARAMETER :: M92N2RDze = 15968 + INTEGER(IntKi), PARAMETER :: M92N3RDze = 15969 + INTEGER(IntKi), PARAMETER :: M92N4RDze = 15970 + INTEGER(IntKi), PARAMETER :: M92N5RDze = 15971 + INTEGER(IntKi), PARAMETER :: M92N6RDze = 15972 + INTEGER(IntKi), PARAMETER :: M92N7RDze = 15973 + INTEGER(IntKi), PARAMETER :: M92N8RDze = 15974 + INTEGER(IntKi), PARAMETER :: M92N9RDze = 15975 + INTEGER(IntKi), PARAMETER :: M93N1RDze = 15976 + INTEGER(IntKi), PARAMETER :: M93N2RDze = 15977 + INTEGER(IntKi), PARAMETER :: M93N3RDze = 15978 + INTEGER(IntKi), PARAMETER :: M93N4RDze = 15979 + INTEGER(IntKi), PARAMETER :: M93N5RDze = 15980 + INTEGER(IntKi), PARAMETER :: M93N6RDze = 15981 + INTEGER(IntKi), PARAMETER :: M93N7RDze = 15982 + INTEGER(IntKi), PARAMETER :: M93N8RDze = 15983 + INTEGER(IntKi), PARAMETER :: M93N9RDze = 15984 + INTEGER(IntKi), PARAMETER :: M94N1RDze = 15985 + INTEGER(IntKi), PARAMETER :: M94N2RDze = 15986 + INTEGER(IntKi), PARAMETER :: M94N3RDze = 15987 + INTEGER(IntKi), PARAMETER :: M94N4RDze = 15988 + INTEGER(IntKi), PARAMETER :: M94N5RDze = 15989 + INTEGER(IntKi), PARAMETER :: M94N6RDze = 15990 + INTEGER(IntKi), PARAMETER :: M94N7RDze = 15991 + INTEGER(IntKi), PARAMETER :: M94N8RDze = 15992 + INTEGER(IntKi), PARAMETER :: M94N9RDze = 15993 + INTEGER(IntKi), PARAMETER :: M95N1RDze = 15994 + INTEGER(IntKi), PARAMETER :: M95N2RDze = 15995 + INTEGER(IntKi), PARAMETER :: M95N3RDze = 15996 + INTEGER(IntKi), PARAMETER :: M95N4RDze = 15997 + INTEGER(IntKi), PARAMETER :: M95N5RDze = 15998 + INTEGER(IntKi), PARAMETER :: M95N6RDze = 15999 + INTEGER(IntKi), PARAMETER :: M95N7RDze = 16000 + INTEGER(IntKi), PARAMETER :: M95N8RDze = 16001 + INTEGER(IntKi), PARAMETER :: M95N9RDze = 16002 + INTEGER(IntKi), PARAMETER :: M96N1RDze = 16003 + INTEGER(IntKi), PARAMETER :: M96N2RDze = 16004 + INTEGER(IntKi), PARAMETER :: M96N3RDze = 16005 + INTEGER(IntKi), PARAMETER :: M96N4RDze = 16006 + INTEGER(IntKi), PARAMETER :: M96N5RDze = 16007 + INTEGER(IntKi), PARAMETER :: M96N6RDze = 16008 + INTEGER(IntKi), PARAMETER :: M96N7RDze = 16009 + INTEGER(IntKi), PARAMETER :: M96N8RDze = 16010 + INTEGER(IntKi), PARAMETER :: M96N9RDze = 16011 + INTEGER(IntKi), PARAMETER :: M97N1RDze = 16012 + INTEGER(IntKi), PARAMETER :: M97N2RDze = 16013 + INTEGER(IntKi), PARAMETER :: M97N3RDze = 16014 + INTEGER(IntKi), PARAMETER :: M97N4RDze = 16015 + INTEGER(IntKi), PARAMETER :: M97N5RDze = 16016 + INTEGER(IntKi), PARAMETER :: M97N6RDze = 16017 + INTEGER(IntKi), PARAMETER :: M97N7RDze = 16018 + INTEGER(IntKi), PARAMETER :: M97N8RDze = 16019 + INTEGER(IntKi), PARAMETER :: M97N9RDze = 16020 + INTEGER(IntKi), PARAMETER :: M98N1RDze = 16021 + INTEGER(IntKi), PARAMETER :: M98N2RDze = 16022 + INTEGER(IntKi), PARAMETER :: M98N3RDze = 16023 + INTEGER(IntKi), PARAMETER :: M98N4RDze = 16024 + INTEGER(IntKi), PARAMETER :: M98N5RDze = 16025 + INTEGER(IntKi), PARAMETER :: M98N6RDze = 16026 + INTEGER(IntKi), PARAMETER :: M98N7RDze = 16027 + INTEGER(IntKi), PARAMETER :: M98N8RDze = 16028 + INTEGER(IntKi), PARAMETER :: M98N9RDze = 16029 + INTEGER(IntKi), PARAMETER :: M99N1RDze = 16030 + INTEGER(IntKi), PARAMETER :: M99N2RDze = 16031 + INTEGER(IntKi), PARAMETER :: M99N3RDze = 16032 + INTEGER(IntKi), PARAMETER :: M99N4RDze = 16033 + INTEGER(IntKi), PARAMETER :: M99N5RDze = 16034 + INTEGER(IntKi), PARAMETER :: M99N6RDze = 16035 + INTEGER(IntKi), PARAMETER :: M99N7RDze = 16036 + INTEGER(IntKi), PARAMETER :: M99N8RDze = 16037 + INTEGER(IntKi), PARAMETER :: M99N9RDze = 16038 - INTEGER(IntKi), PARAMETER :: M1N1TAxe = 1459 - INTEGER(IntKi), PARAMETER :: M1N2TAxe = 1460 - INTEGER(IntKi), PARAMETER :: M1N3TAxe = 1461 - INTEGER(IntKi), PARAMETER :: M1N4TAxe = 1462 - INTEGER(IntKi), PARAMETER :: M1N5TAxe = 1463 - INTEGER(IntKi), PARAMETER :: M1N6TAxe = 1464 - INTEGER(IntKi), PARAMETER :: M1N7TAxe = 1465 - INTEGER(IntKi), PARAMETER :: M1N8TAxe = 1466 - INTEGER(IntKi), PARAMETER :: M1N9TAxe = 1467 - INTEGER(IntKi), PARAMETER :: M2N1TAxe = 1468 - INTEGER(IntKi), PARAMETER :: M2N2TAxe = 1469 - INTEGER(IntKi), PARAMETER :: M2N3TAxe = 1470 - INTEGER(IntKi), PARAMETER :: M2N4TAxe = 1471 - INTEGER(IntKi), PARAMETER :: M2N5TAxe = 1472 - INTEGER(IntKi), PARAMETER :: M2N6TAxe = 1473 - INTEGER(IntKi), PARAMETER :: M2N7TAxe = 1474 - INTEGER(IntKi), PARAMETER :: M2N8TAxe = 1475 - INTEGER(IntKi), PARAMETER :: M2N9TAxe = 1476 - INTEGER(IntKi), PARAMETER :: M3N1TAxe = 1477 - INTEGER(IntKi), PARAMETER :: M3N2TAxe = 1478 - INTEGER(IntKi), PARAMETER :: M3N3TAxe = 1479 - INTEGER(IntKi), PARAMETER :: M3N4TAxe = 1480 - INTEGER(IntKi), PARAMETER :: M3N5TAxe = 1481 - INTEGER(IntKi), PARAMETER :: M3N6TAxe = 1482 - INTEGER(IntKi), PARAMETER :: M3N7TAxe = 1483 - INTEGER(IntKi), PARAMETER :: M3N8TAxe = 1484 - INTEGER(IntKi), PARAMETER :: M3N9TAxe = 1485 - INTEGER(IntKi), PARAMETER :: M4N1TAxe = 1486 - INTEGER(IntKi), PARAMETER :: M4N2TAxe = 1487 - INTEGER(IntKi), PARAMETER :: M4N3TAxe = 1488 - INTEGER(IntKi), PARAMETER :: M4N4TAxe = 1489 - INTEGER(IntKi), PARAMETER :: M4N5TAxe = 1490 - INTEGER(IntKi), PARAMETER :: M4N6TAxe = 1491 - INTEGER(IntKi), PARAMETER :: M4N7TAxe = 1492 - INTEGER(IntKi), PARAMETER :: M4N8TAxe = 1493 - INTEGER(IntKi), PARAMETER :: M4N9TAxe = 1494 - INTEGER(IntKi), PARAMETER :: M5N1TAxe = 1495 - INTEGER(IntKi), PARAMETER :: M5N2TAxe = 1496 - INTEGER(IntKi), PARAMETER :: M5N3TAxe = 1497 - INTEGER(IntKi), PARAMETER :: M5N4TAxe = 1498 - INTEGER(IntKi), PARAMETER :: M5N5TAxe = 1499 - INTEGER(IntKi), PARAMETER :: M5N6TAxe = 1500 - INTEGER(IntKi), PARAMETER :: M5N7TAxe = 1501 - INTEGER(IntKi), PARAMETER :: M5N8TAxe = 1502 - INTEGER(IntKi), PARAMETER :: M5N9TAxe = 1503 - INTEGER(IntKi), PARAMETER :: M6N1TAxe = 1504 - INTEGER(IntKi), PARAMETER :: M6N2TAxe = 1505 - INTEGER(IntKi), PARAMETER :: M6N3TAxe = 1506 - INTEGER(IntKi), PARAMETER :: M6N4TAxe = 1507 - INTEGER(IntKi), PARAMETER :: M6N5TAxe = 1508 - INTEGER(IntKi), PARAMETER :: M6N6TAxe = 1509 - INTEGER(IntKi), PARAMETER :: M6N7TAxe = 1510 - INTEGER(IntKi), PARAMETER :: M6N8TAxe = 1511 - INTEGER(IntKi), PARAMETER :: M6N9TAxe = 1512 - INTEGER(IntKi), PARAMETER :: M7N1TAxe = 1513 - INTEGER(IntKi), PARAMETER :: M7N2TAxe = 1514 - INTEGER(IntKi), PARAMETER :: M7N3TAxe = 1515 - INTEGER(IntKi), PARAMETER :: M7N4TAxe = 1516 - INTEGER(IntKi), PARAMETER :: M7N5TAxe = 1517 - INTEGER(IntKi), PARAMETER :: M7N6TAxe = 1518 - INTEGER(IntKi), PARAMETER :: M7N7TAxe = 1519 - INTEGER(IntKi), PARAMETER :: M7N8TAxe = 1520 - INTEGER(IntKi), PARAMETER :: M7N9TAxe = 1521 - INTEGER(IntKi), PARAMETER :: M8N1TAxe = 1522 - INTEGER(IntKi), PARAMETER :: M8N2TAxe = 1523 - INTEGER(IntKi), PARAMETER :: M8N3TAxe = 1524 - INTEGER(IntKi), PARAMETER :: M8N4TAxe = 1525 - INTEGER(IntKi), PARAMETER :: M8N5TAxe = 1526 - INTEGER(IntKi), PARAMETER :: M8N6TAxe = 1527 - INTEGER(IntKi), PARAMETER :: M8N7TAxe = 1528 - INTEGER(IntKi), PARAMETER :: M8N8TAxe = 1529 - INTEGER(IntKi), PARAMETER :: M8N9TAxe = 1530 - INTEGER(IntKi), PARAMETER :: M9N1TAxe = 1531 - INTEGER(IntKi), PARAMETER :: M9N2TAxe = 1532 - INTEGER(IntKi), PARAMETER :: M9N3TAxe = 1533 - INTEGER(IntKi), PARAMETER :: M9N4TAxe = 1534 - INTEGER(IntKi), PARAMETER :: M9N5TAxe = 1535 - INTEGER(IntKi), PARAMETER :: M9N6TAxe = 1536 - INTEGER(IntKi), PARAMETER :: M9N7TAxe = 1537 - INTEGER(IntKi), PARAMETER :: M9N8TAxe = 1538 - INTEGER(IntKi), PARAMETER :: M9N9TAxe = 1539 - INTEGER(IntKi), PARAMETER :: M1N1TAye = 1540 - INTEGER(IntKi), PARAMETER :: M1N2TAye = 1541 - INTEGER(IntKi), PARAMETER :: M1N3TAye = 1542 - INTEGER(IntKi), PARAMETER :: M1N4TAye = 1543 - INTEGER(IntKi), PARAMETER :: M1N5TAye = 1544 - INTEGER(IntKi), PARAMETER :: M1N6TAye = 1545 - INTEGER(IntKi), PARAMETER :: M1N7TAye = 1546 - INTEGER(IntKi), PARAMETER :: M1N8TAye = 1547 - INTEGER(IntKi), PARAMETER :: M1N9TAye = 1548 - INTEGER(IntKi), PARAMETER :: M2N1TAye = 1549 - INTEGER(IntKi), PARAMETER :: M2N2TAye = 1550 - INTEGER(IntKi), PARAMETER :: M2N3TAye = 1551 - INTEGER(IntKi), PARAMETER :: M2N4TAye = 1552 - INTEGER(IntKi), PARAMETER :: M2N5TAye = 1553 - INTEGER(IntKi), PARAMETER :: M2N6TAye = 1554 - INTEGER(IntKi), PARAMETER :: M2N7TAye = 1555 - INTEGER(IntKi), PARAMETER :: M2N8TAye = 1556 - INTEGER(IntKi), PARAMETER :: M2N9TAye = 1557 - INTEGER(IntKi), PARAMETER :: M3N1TAye = 1558 - INTEGER(IntKi), PARAMETER :: M3N2TAye = 1559 - INTEGER(IntKi), PARAMETER :: M3N3TAye = 1560 - INTEGER(IntKi), PARAMETER :: M3N4TAye = 1561 - INTEGER(IntKi), PARAMETER :: M3N5TAye = 1562 - INTEGER(IntKi), PARAMETER :: M3N6TAye = 1563 - INTEGER(IntKi), PARAMETER :: M3N7TAye = 1564 - INTEGER(IntKi), PARAMETER :: M3N8TAye = 1565 - INTEGER(IntKi), PARAMETER :: M3N9TAye = 1566 - INTEGER(IntKi), PARAMETER :: M4N1TAye = 1567 - INTEGER(IntKi), PARAMETER :: M4N2TAye = 1568 - INTEGER(IntKi), PARAMETER :: M4N3TAye = 1569 - INTEGER(IntKi), PARAMETER :: M4N4TAye = 1570 - INTEGER(IntKi), PARAMETER :: M4N5TAye = 1571 - INTEGER(IntKi), PARAMETER :: M4N6TAye = 1572 - INTEGER(IntKi), PARAMETER :: M4N7TAye = 1573 - INTEGER(IntKi), PARAMETER :: M4N8TAye = 1574 - INTEGER(IntKi), PARAMETER :: M4N9TAye = 1575 - INTEGER(IntKi), PARAMETER :: M5N1TAye = 1576 - INTEGER(IntKi), PARAMETER :: M5N2TAye = 1577 - INTEGER(IntKi), PARAMETER :: M5N3TAye = 1578 - INTEGER(IntKi), PARAMETER :: M5N4TAye = 1579 - INTEGER(IntKi), PARAMETER :: M5N5TAye = 1580 - INTEGER(IntKi), PARAMETER :: M5N6TAye = 1581 - INTEGER(IntKi), PARAMETER :: M5N7TAye = 1582 - INTEGER(IntKi), PARAMETER :: M5N8TAye = 1583 - INTEGER(IntKi), PARAMETER :: M5N9TAye = 1584 - INTEGER(IntKi), PARAMETER :: M6N1TAye = 1585 - INTEGER(IntKi), PARAMETER :: M6N2TAye = 1586 - INTEGER(IntKi), PARAMETER :: M6N3TAye = 1587 - INTEGER(IntKi), PARAMETER :: M6N4TAye = 1588 - INTEGER(IntKi), PARAMETER :: M6N5TAye = 1589 - INTEGER(IntKi), PARAMETER :: M6N6TAye = 1590 - INTEGER(IntKi), PARAMETER :: M6N7TAye = 1591 - INTEGER(IntKi), PARAMETER :: M6N8TAye = 1592 - INTEGER(IntKi), PARAMETER :: M6N9TAye = 1593 - INTEGER(IntKi), PARAMETER :: M7N1TAye = 1594 - INTEGER(IntKi), PARAMETER :: M7N2TAye = 1595 - INTEGER(IntKi), PARAMETER :: M7N3TAye = 1596 - INTEGER(IntKi), PARAMETER :: M7N4TAye = 1597 - INTEGER(IntKi), PARAMETER :: M7N5TAye = 1598 - INTEGER(IntKi), PARAMETER :: M7N6TAye = 1599 - INTEGER(IntKi), PARAMETER :: M7N7TAye = 1600 - INTEGER(IntKi), PARAMETER :: M7N8TAye = 1601 - INTEGER(IntKi), PARAMETER :: M7N9TAye = 1602 - INTEGER(IntKi), PARAMETER :: M8N1TAye = 1603 - INTEGER(IntKi), PARAMETER :: M8N2TAye = 1604 - INTEGER(IntKi), PARAMETER :: M8N3TAye = 1605 - INTEGER(IntKi), PARAMETER :: M8N4TAye = 1606 - INTEGER(IntKi), PARAMETER :: M8N5TAye = 1607 - INTEGER(IntKi), PARAMETER :: M8N6TAye = 1608 - INTEGER(IntKi), PARAMETER :: M8N7TAye = 1609 - INTEGER(IntKi), PARAMETER :: M8N8TAye = 1610 - INTEGER(IntKi), PARAMETER :: M8N9TAye = 1611 - INTEGER(IntKi), PARAMETER :: M9N1TAye = 1612 - INTEGER(IntKi), PARAMETER :: M9N2TAye = 1613 - INTEGER(IntKi), PARAMETER :: M9N3TAye = 1614 - INTEGER(IntKi), PARAMETER :: M9N4TAye = 1615 - INTEGER(IntKi), PARAMETER :: M9N5TAye = 1616 - INTEGER(IntKi), PARAMETER :: M9N6TAye = 1617 - INTEGER(IntKi), PARAMETER :: M9N7TAye = 1618 - INTEGER(IntKi), PARAMETER :: M9N8TAye = 1619 - INTEGER(IntKi), PARAMETER :: M9N9TAye = 1620 - INTEGER(IntKi), PARAMETER :: M1N1TAze = 1621 - INTEGER(IntKi), PARAMETER :: M1N2TAze = 1622 - INTEGER(IntKi), PARAMETER :: M1N3TAze = 1623 - INTEGER(IntKi), PARAMETER :: M1N4TAze = 1624 - INTEGER(IntKi), PARAMETER :: M1N5TAze = 1625 - INTEGER(IntKi), PARAMETER :: M1N6TAze = 1626 - INTEGER(IntKi), PARAMETER :: M1N7TAze = 1627 - INTEGER(IntKi), PARAMETER :: M1N8TAze = 1628 - INTEGER(IntKi), PARAMETER :: M1N9TAze = 1629 - INTEGER(IntKi), PARAMETER :: M2N1TAze = 1630 - INTEGER(IntKi), PARAMETER :: M2N2TAze = 1631 - INTEGER(IntKi), PARAMETER :: M2N3TAze = 1632 - INTEGER(IntKi), PARAMETER :: M2N4TAze = 1633 - INTEGER(IntKi), PARAMETER :: M2N5TAze = 1634 - INTEGER(IntKi), PARAMETER :: M2N6TAze = 1635 - INTEGER(IntKi), PARAMETER :: M2N7TAze = 1636 - INTEGER(IntKi), PARAMETER :: M2N8TAze = 1637 - INTEGER(IntKi), PARAMETER :: M2N9TAze = 1638 - INTEGER(IntKi), PARAMETER :: M3N1TAze = 1639 - INTEGER(IntKi), PARAMETER :: M3N2TAze = 1640 - INTEGER(IntKi), PARAMETER :: M3N3TAze = 1641 - INTEGER(IntKi), PARAMETER :: M3N4TAze = 1642 - INTEGER(IntKi), PARAMETER :: M3N5TAze = 1643 - INTEGER(IntKi), PARAMETER :: M3N6TAze = 1644 - INTEGER(IntKi), PARAMETER :: M3N7TAze = 1645 - INTEGER(IntKi), PARAMETER :: M3N8TAze = 1646 - INTEGER(IntKi), PARAMETER :: M3N9TAze = 1647 - INTEGER(IntKi), PARAMETER :: M4N1TAze = 1648 - INTEGER(IntKi), PARAMETER :: M4N2TAze = 1649 - INTEGER(IntKi), PARAMETER :: M4N3TAze = 1650 - INTEGER(IntKi), PARAMETER :: M4N4TAze = 1651 - INTEGER(IntKi), PARAMETER :: M4N5TAze = 1652 - INTEGER(IntKi), PARAMETER :: M4N6TAze = 1653 - INTEGER(IntKi), PARAMETER :: M4N7TAze = 1654 - INTEGER(IntKi), PARAMETER :: M4N8TAze = 1655 - INTEGER(IntKi), PARAMETER :: M4N9TAze = 1656 - INTEGER(IntKi), PARAMETER :: M5N1TAze = 1657 - INTEGER(IntKi), PARAMETER :: M5N2TAze = 1658 - INTEGER(IntKi), PARAMETER :: M5N3TAze = 1659 - INTEGER(IntKi), PARAMETER :: M5N4TAze = 1660 - INTEGER(IntKi), PARAMETER :: M5N5TAze = 1661 - INTEGER(IntKi), PARAMETER :: M5N6TAze = 1662 - INTEGER(IntKi), PARAMETER :: M5N7TAze = 1663 - INTEGER(IntKi), PARAMETER :: M5N8TAze = 1664 - INTEGER(IntKi), PARAMETER :: M5N9TAze = 1665 - INTEGER(IntKi), PARAMETER :: M6N1TAze = 1666 - INTEGER(IntKi), PARAMETER :: M6N2TAze = 1667 - INTEGER(IntKi), PARAMETER :: M6N3TAze = 1668 - INTEGER(IntKi), PARAMETER :: M6N4TAze = 1669 - INTEGER(IntKi), PARAMETER :: M6N5TAze = 1670 - INTEGER(IntKi), PARAMETER :: M6N6TAze = 1671 - INTEGER(IntKi), PARAMETER :: M6N7TAze = 1672 - INTEGER(IntKi), PARAMETER :: M6N8TAze = 1673 - INTEGER(IntKi), PARAMETER :: M6N9TAze = 1674 - INTEGER(IntKi), PARAMETER :: M7N1TAze = 1675 - INTEGER(IntKi), PARAMETER :: M7N2TAze = 1676 - INTEGER(IntKi), PARAMETER :: M7N3TAze = 1677 - INTEGER(IntKi), PARAMETER :: M7N4TAze = 1678 - INTEGER(IntKi), PARAMETER :: M7N5TAze = 1679 - INTEGER(IntKi), PARAMETER :: M7N6TAze = 1680 - INTEGER(IntKi), PARAMETER :: M7N7TAze = 1681 - INTEGER(IntKi), PARAMETER :: M7N8TAze = 1682 - INTEGER(IntKi), PARAMETER :: M7N9TAze = 1683 - INTEGER(IntKi), PARAMETER :: M8N1TAze = 1684 - INTEGER(IntKi), PARAMETER :: M8N2TAze = 1685 - INTEGER(IntKi), PARAMETER :: M8N3TAze = 1686 - INTEGER(IntKi), PARAMETER :: M8N4TAze = 1687 - INTEGER(IntKi), PARAMETER :: M8N5TAze = 1688 - INTEGER(IntKi), PARAMETER :: M8N6TAze = 1689 - INTEGER(IntKi), PARAMETER :: M8N7TAze = 1690 - INTEGER(IntKi), PARAMETER :: M8N8TAze = 1691 - INTEGER(IntKi), PARAMETER :: M8N9TAze = 1692 - INTEGER(IntKi), PARAMETER :: M9N1TAze = 1693 - INTEGER(IntKi), PARAMETER :: M9N2TAze = 1694 - INTEGER(IntKi), PARAMETER :: M9N3TAze = 1695 - INTEGER(IntKi), PARAMETER :: M9N4TAze = 1696 - INTEGER(IntKi), PARAMETER :: M9N5TAze = 1697 - INTEGER(IntKi), PARAMETER :: M9N6TAze = 1698 - INTEGER(IntKi), PARAMETER :: M9N7TAze = 1699 - INTEGER(IntKi), PARAMETER :: M9N8TAze = 1700 - INTEGER(IntKi), PARAMETER :: M9N9TAze = 1701 - INTEGER(IntKi), PARAMETER :: M1N1RAxe = 1702 - INTEGER(IntKi), PARAMETER :: M1N2RAxe = 1703 - INTEGER(IntKi), PARAMETER :: M1N3RAxe = 1704 - INTEGER(IntKi), PARAMETER :: M1N4RAxe = 1705 - INTEGER(IntKi), PARAMETER :: M1N5RAxe = 1706 - INTEGER(IntKi), PARAMETER :: M1N6RAxe = 1707 - INTEGER(IntKi), PARAMETER :: M1N7RAxe = 1708 - INTEGER(IntKi), PARAMETER :: M1N8RAxe = 1709 - INTEGER(IntKi), PARAMETER :: M1N9RAxe = 1710 - INTEGER(IntKi), PARAMETER :: M2N1RAxe = 1711 - INTEGER(IntKi), PARAMETER :: M2N2RAxe = 1712 - INTEGER(IntKi), PARAMETER :: M2N3RAxe = 1713 - INTEGER(IntKi), PARAMETER :: M2N4RAxe = 1714 - INTEGER(IntKi), PARAMETER :: M2N5RAxe = 1715 - INTEGER(IntKi), PARAMETER :: M2N6RAxe = 1716 - INTEGER(IntKi), PARAMETER :: M2N7RAxe = 1717 - INTEGER(IntKi), PARAMETER :: M2N8RAxe = 1718 - INTEGER(IntKi), PARAMETER :: M2N9RAxe = 1719 - INTEGER(IntKi), PARAMETER :: M3N1RAxe = 1720 - INTEGER(IntKi), PARAMETER :: M3N2RAxe = 1721 - INTEGER(IntKi), PARAMETER :: M3N3RAxe = 1722 - INTEGER(IntKi), PARAMETER :: M3N4RAxe = 1723 - INTEGER(IntKi), PARAMETER :: M3N5RAxe = 1724 - INTEGER(IntKi), PARAMETER :: M3N6RAxe = 1725 - INTEGER(IntKi), PARAMETER :: M3N7RAxe = 1726 - INTEGER(IntKi), PARAMETER :: M3N8RAxe = 1727 - INTEGER(IntKi), PARAMETER :: M3N9RAxe = 1728 - INTEGER(IntKi), PARAMETER :: M4N1RAxe = 1729 - INTEGER(IntKi), PARAMETER :: M4N2RAxe = 1730 - INTEGER(IntKi), PARAMETER :: M4N3RAxe = 1731 - INTEGER(IntKi), PARAMETER :: M4N4RAxe = 1732 - INTEGER(IntKi), PARAMETER :: M4N5RAxe = 1733 - INTEGER(IntKi), PARAMETER :: M4N6RAxe = 1734 - INTEGER(IntKi), PARAMETER :: M4N7RAxe = 1735 - INTEGER(IntKi), PARAMETER :: M4N8RAxe = 1736 - INTEGER(IntKi), PARAMETER :: M4N9RAxe = 1737 - INTEGER(IntKi), PARAMETER :: M5N1RAxe = 1738 - INTEGER(IntKi), PARAMETER :: M5N2RAxe = 1739 - INTEGER(IntKi), PARAMETER :: M5N3RAxe = 1740 - INTEGER(IntKi), PARAMETER :: M5N4RAxe = 1741 - INTEGER(IntKi), PARAMETER :: M5N5RAxe = 1742 - INTEGER(IntKi), PARAMETER :: M5N6RAxe = 1743 - INTEGER(IntKi), PARAMETER :: M5N7RAxe = 1744 - INTEGER(IntKi), PARAMETER :: M5N8RAxe = 1745 - INTEGER(IntKi), PARAMETER :: M5N9RAxe = 1746 - INTEGER(IntKi), PARAMETER :: M6N1RAxe = 1747 - INTEGER(IntKi), PARAMETER :: M6N2RAxe = 1748 - INTEGER(IntKi), PARAMETER :: M6N3RAxe = 1749 - INTEGER(IntKi), PARAMETER :: M6N4RAxe = 1750 - INTEGER(IntKi), PARAMETER :: M6N5RAxe = 1751 - INTEGER(IntKi), PARAMETER :: M6N6RAxe = 1752 - INTEGER(IntKi), PARAMETER :: M6N7RAxe = 1753 - INTEGER(IntKi), PARAMETER :: M6N8RAxe = 1754 - INTEGER(IntKi), PARAMETER :: M6N9RAxe = 1755 - INTEGER(IntKi), PARAMETER :: M7N1RAxe = 1756 - INTEGER(IntKi), PARAMETER :: M7N2RAxe = 1757 - INTEGER(IntKi), PARAMETER :: M7N3RAxe = 1758 - INTEGER(IntKi), PARAMETER :: M7N4RAxe = 1759 - INTEGER(IntKi), PARAMETER :: M7N5RAxe = 1760 - INTEGER(IntKi), PARAMETER :: M7N6RAxe = 1761 - INTEGER(IntKi), PARAMETER :: M7N7RAxe = 1762 - INTEGER(IntKi), PARAMETER :: M7N8RAxe = 1763 - INTEGER(IntKi), PARAMETER :: M7N9RAxe = 1764 - INTEGER(IntKi), PARAMETER :: M8N1RAxe = 1765 - INTEGER(IntKi), PARAMETER :: M8N2RAxe = 1766 - INTEGER(IntKi), PARAMETER :: M8N3RAxe = 1767 - INTEGER(IntKi), PARAMETER :: M8N4RAxe = 1768 - INTEGER(IntKi), PARAMETER :: M8N5RAxe = 1769 - INTEGER(IntKi), PARAMETER :: M8N6RAxe = 1770 - INTEGER(IntKi), PARAMETER :: M8N7RAxe = 1771 - INTEGER(IntKi), PARAMETER :: M8N8RAxe = 1772 - INTEGER(IntKi), PARAMETER :: M8N9RAxe = 1773 - INTEGER(IntKi), PARAMETER :: M9N1RAxe = 1774 - INTEGER(IntKi), PARAMETER :: M9N2RAxe = 1775 - INTEGER(IntKi), PARAMETER :: M9N3RAxe = 1776 - INTEGER(IntKi), PARAMETER :: M9N4RAxe = 1777 - INTEGER(IntKi), PARAMETER :: M9N5RAxe = 1778 - INTEGER(IntKi), PARAMETER :: M9N6RAxe = 1779 - INTEGER(IntKi), PARAMETER :: M9N7RAxe = 1780 - INTEGER(IntKi), PARAMETER :: M9N8RAxe = 1781 - INTEGER(IntKi), PARAMETER :: M9N9RAxe = 1782 - INTEGER(IntKi), PARAMETER :: M1N1RAye = 1783 - INTEGER(IntKi), PARAMETER :: M1N2RAye = 1784 - INTEGER(IntKi), PARAMETER :: M1N3RAye = 1785 - INTEGER(IntKi), PARAMETER :: M1N4RAye = 1786 - INTEGER(IntKi), PARAMETER :: M1N5RAye = 1787 - INTEGER(IntKi), PARAMETER :: M1N6RAye = 1788 - INTEGER(IntKi), PARAMETER :: M1N7RAye = 1789 - INTEGER(IntKi), PARAMETER :: M1N8RAye = 1790 - INTEGER(IntKi), PARAMETER :: M1N9RAye = 1791 - INTEGER(IntKi), PARAMETER :: M2N1RAye = 1792 - INTEGER(IntKi), PARAMETER :: M2N2RAye = 1793 - INTEGER(IntKi), PARAMETER :: M2N3RAye = 1794 - INTEGER(IntKi), PARAMETER :: M2N4RAye = 1795 - INTEGER(IntKi), PARAMETER :: M2N5RAye = 1796 - INTEGER(IntKi), PARAMETER :: M2N6RAye = 1797 - INTEGER(IntKi), PARAMETER :: M2N7RAye = 1798 - INTEGER(IntKi), PARAMETER :: M2N8RAye = 1799 - INTEGER(IntKi), PARAMETER :: M2N9RAye = 1800 - INTEGER(IntKi), PARAMETER :: M3N1RAye = 1801 - INTEGER(IntKi), PARAMETER :: M3N2RAye = 1802 - INTEGER(IntKi), PARAMETER :: M3N3RAye = 1803 - INTEGER(IntKi), PARAMETER :: M3N4RAye = 1804 - INTEGER(IntKi), PARAMETER :: M3N5RAye = 1805 - INTEGER(IntKi), PARAMETER :: M3N6RAye = 1806 - INTEGER(IntKi), PARAMETER :: M3N7RAye = 1807 - INTEGER(IntKi), PARAMETER :: M3N8RAye = 1808 - INTEGER(IntKi), PARAMETER :: M3N9RAye = 1809 - INTEGER(IntKi), PARAMETER :: M4N1RAye = 1810 - INTEGER(IntKi), PARAMETER :: M4N2RAye = 1811 - INTEGER(IntKi), PARAMETER :: M4N3RAye = 1812 - INTEGER(IntKi), PARAMETER :: M4N4RAye = 1813 - INTEGER(IntKi), PARAMETER :: M4N5RAye = 1814 - INTEGER(IntKi), PARAMETER :: M4N6RAye = 1815 - INTEGER(IntKi), PARAMETER :: M4N7RAye = 1816 - INTEGER(IntKi), PARAMETER :: M4N8RAye = 1817 - INTEGER(IntKi), PARAMETER :: M4N9RAye = 1818 - INTEGER(IntKi), PARAMETER :: M5N1RAye = 1819 - INTEGER(IntKi), PARAMETER :: M5N2RAye = 1820 - INTEGER(IntKi), PARAMETER :: M5N3RAye = 1821 - INTEGER(IntKi), PARAMETER :: M5N4RAye = 1822 - INTEGER(IntKi), PARAMETER :: M5N5RAye = 1823 - INTEGER(IntKi), PARAMETER :: M5N6RAye = 1824 - INTEGER(IntKi), PARAMETER :: M5N7RAye = 1825 - INTEGER(IntKi), PARAMETER :: M5N8RAye = 1826 - INTEGER(IntKi), PARAMETER :: M5N9RAye = 1827 - INTEGER(IntKi), PARAMETER :: M6N1RAye = 1828 - INTEGER(IntKi), PARAMETER :: M6N2RAye = 1829 - INTEGER(IntKi), PARAMETER :: M6N3RAye = 1830 - INTEGER(IntKi), PARAMETER :: M6N4RAye = 1831 - INTEGER(IntKi), PARAMETER :: M6N5RAye = 1832 - INTEGER(IntKi), PARAMETER :: M6N6RAye = 1833 - INTEGER(IntKi), PARAMETER :: M6N7RAye = 1834 - INTEGER(IntKi), PARAMETER :: M6N8RAye = 1835 - INTEGER(IntKi), PARAMETER :: M6N9RAye = 1836 - INTEGER(IntKi), PARAMETER :: M7N1RAye = 1837 - INTEGER(IntKi), PARAMETER :: M7N2RAye = 1838 - INTEGER(IntKi), PARAMETER :: M7N3RAye = 1839 - INTEGER(IntKi), PARAMETER :: M7N4RAye = 1840 - INTEGER(IntKi), PARAMETER :: M7N5RAye = 1841 - INTEGER(IntKi), PARAMETER :: M7N6RAye = 1842 - INTEGER(IntKi), PARAMETER :: M7N7RAye = 1843 - INTEGER(IntKi), PARAMETER :: M7N8RAye = 1844 - INTEGER(IntKi), PARAMETER :: M7N9RAye = 1845 - INTEGER(IntKi), PARAMETER :: M8N1RAye = 1846 - INTEGER(IntKi), PARAMETER :: M8N2RAye = 1847 - INTEGER(IntKi), PARAMETER :: M8N3RAye = 1848 - INTEGER(IntKi), PARAMETER :: M8N4RAye = 1849 - INTEGER(IntKi), PARAMETER :: M8N5RAye = 1850 - INTEGER(IntKi), PARAMETER :: M8N6RAye = 1851 - INTEGER(IntKi), PARAMETER :: M8N7RAye = 1852 - INTEGER(IntKi), PARAMETER :: M8N8RAye = 1853 - INTEGER(IntKi), PARAMETER :: M8N9RAye = 1854 - INTEGER(IntKi), PARAMETER :: M9N1RAye = 1855 - INTEGER(IntKi), PARAMETER :: M9N2RAye = 1856 - INTEGER(IntKi), PARAMETER :: M9N3RAye = 1857 - INTEGER(IntKi), PARAMETER :: M9N4RAye = 1858 - INTEGER(IntKi), PARAMETER :: M9N5RAye = 1859 - INTEGER(IntKi), PARAMETER :: M9N6RAye = 1860 - INTEGER(IntKi), PARAMETER :: M9N7RAye = 1861 - INTEGER(IntKi), PARAMETER :: M9N8RAye = 1862 - INTEGER(IntKi), PARAMETER :: M9N9RAye = 1863 - INTEGER(IntKi), PARAMETER :: M1N1RAze = 1864 - INTEGER(IntKi), PARAMETER :: M1N2RAze = 1865 - INTEGER(IntKi), PARAMETER :: M1N3RAze = 1866 - INTEGER(IntKi), PARAMETER :: M1N4RAze = 1867 - INTEGER(IntKi), PARAMETER :: M1N5RAze = 1868 - INTEGER(IntKi), PARAMETER :: M1N6RAze = 1869 - INTEGER(IntKi), PARAMETER :: M1N7RAze = 1870 - INTEGER(IntKi), PARAMETER :: M1N8RAze = 1871 - INTEGER(IntKi), PARAMETER :: M1N9RAze = 1872 - INTEGER(IntKi), PARAMETER :: M2N1RAze = 1873 - INTEGER(IntKi), PARAMETER :: M2N2RAze = 1874 - INTEGER(IntKi), PARAMETER :: M2N3RAze = 1875 - INTEGER(IntKi), PARAMETER :: M2N4RAze = 1876 - INTEGER(IntKi), PARAMETER :: M2N5RAze = 1877 - INTEGER(IntKi), PARAMETER :: M2N6RAze = 1878 - INTEGER(IntKi), PARAMETER :: M2N7RAze = 1879 - INTEGER(IntKi), PARAMETER :: M2N8RAze = 1880 - INTEGER(IntKi), PARAMETER :: M2N9RAze = 1881 - INTEGER(IntKi), PARAMETER :: M3N1RAze = 1882 - INTEGER(IntKi), PARAMETER :: M3N2RAze = 1883 - INTEGER(IntKi), PARAMETER :: M3N3RAze = 1884 - INTEGER(IntKi), PARAMETER :: M3N4RAze = 1885 - INTEGER(IntKi), PARAMETER :: M3N5RAze = 1886 - INTEGER(IntKi), PARAMETER :: M3N6RAze = 1887 - INTEGER(IntKi), PARAMETER :: M3N7RAze = 1888 - INTEGER(IntKi), PARAMETER :: M3N8RAze = 1889 - INTEGER(IntKi), PARAMETER :: M3N9RAze = 1890 - INTEGER(IntKi), PARAMETER :: M4N1RAze = 1891 - INTEGER(IntKi), PARAMETER :: M4N2RAze = 1892 - INTEGER(IntKi), PARAMETER :: M4N3RAze = 1893 - INTEGER(IntKi), PARAMETER :: M4N4RAze = 1894 - INTEGER(IntKi), PARAMETER :: M4N5RAze = 1895 - INTEGER(IntKi), PARAMETER :: M4N6RAze = 1896 - INTEGER(IntKi), PARAMETER :: M4N7RAze = 1897 - INTEGER(IntKi), PARAMETER :: M4N8RAze = 1898 - INTEGER(IntKi), PARAMETER :: M4N9RAze = 1899 - INTEGER(IntKi), PARAMETER :: M5N1RAze = 1900 - INTEGER(IntKi), PARAMETER :: M5N2RAze = 1901 - INTEGER(IntKi), PARAMETER :: M5N3RAze = 1902 - INTEGER(IntKi), PARAMETER :: M5N4RAze = 1903 - INTEGER(IntKi), PARAMETER :: M5N5RAze = 1904 - INTEGER(IntKi), PARAMETER :: M5N6RAze = 1905 - INTEGER(IntKi), PARAMETER :: M5N7RAze = 1906 - INTEGER(IntKi), PARAMETER :: M5N8RAze = 1907 - INTEGER(IntKi), PARAMETER :: M5N9RAze = 1908 - INTEGER(IntKi), PARAMETER :: M6N1RAze = 1909 - INTEGER(IntKi), PARAMETER :: M6N2RAze = 1910 - INTEGER(IntKi), PARAMETER :: M6N3RAze = 1911 - INTEGER(IntKi), PARAMETER :: M6N4RAze = 1912 - INTEGER(IntKi), PARAMETER :: M6N5RAze = 1913 - INTEGER(IntKi), PARAMETER :: M6N6RAze = 1914 - INTEGER(IntKi), PARAMETER :: M6N7RAze = 1915 - INTEGER(IntKi), PARAMETER :: M6N8RAze = 1916 - INTEGER(IntKi), PARAMETER :: M6N9RAze = 1917 - INTEGER(IntKi), PARAMETER :: M7N1RAze = 1918 - INTEGER(IntKi), PARAMETER :: M7N2RAze = 1919 - INTEGER(IntKi), PARAMETER :: M7N3RAze = 1920 - INTEGER(IntKi), PARAMETER :: M7N4RAze = 1921 - INTEGER(IntKi), PARAMETER :: M7N5RAze = 1922 - INTEGER(IntKi), PARAMETER :: M7N6RAze = 1923 - INTEGER(IntKi), PARAMETER :: M7N7RAze = 1924 - INTEGER(IntKi), PARAMETER :: M7N8RAze = 1925 - INTEGER(IntKi), PARAMETER :: M7N9RAze = 1926 - INTEGER(IntKi), PARAMETER :: M8N1RAze = 1927 - INTEGER(IntKi), PARAMETER :: M8N2RAze = 1928 - INTEGER(IntKi), PARAMETER :: M8N3RAze = 1929 - INTEGER(IntKi), PARAMETER :: M8N4RAze = 1930 - INTEGER(IntKi), PARAMETER :: M8N5RAze = 1931 - INTEGER(IntKi), PARAMETER :: M8N6RAze = 1932 - INTEGER(IntKi), PARAMETER :: M8N7RAze = 1933 - INTEGER(IntKi), PARAMETER :: M8N8RAze = 1934 - INTEGER(IntKi), PARAMETER :: M8N9RAze = 1935 - INTEGER(IntKi), PARAMETER :: M9N1RAze = 1936 - INTEGER(IntKi), PARAMETER :: M9N2RAze = 1937 - INTEGER(IntKi), PARAMETER :: M9N3RAze = 1938 - INTEGER(IntKi), PARAMETER :: M9N4RAze = 1939 - INTEGER(IntKi), PARAMETER :: M9N5RAze = 1940 - INTEGER(IntKi), PARAMETER :: M9N6RAze = 1941 - INTEGER(IntKi), PARAMETER :: M9N7RAze = 1942 - INTEGER(IntKi), PARAMETER :: M9N8RAze = 1943 - INTEGER(IntKi), PARAMETER :: M9N9RAze = 1944 + ! Accelerations: - ! Reactions: + INTEGER(IntKi), PARAMETER :: M01N1TAxe = 16039 + INTEGER(IntKi), PARAMETER :: M01N2TAxe = 16040 + INTEGER(IntKi), PARAMETER :: M01N3TAxe = 16041 + INTEGER(IntKi), PARAMETER :: M01N4TAxe = 16042 + INTEGER(IntKi), PARAMETER :: M01N5TAxe = 16043 + INTEGER(IntKi), PARAMETER :: M01N6TAxe = 16044 + INTEGER(IntKi), PARAMETER :: M01N7TAxe = 16045 + INTEGER(IntKi), PARAMETER :: M01N8TAxe = 16046 + INTEGER(IntKi), PARAMETER :: M01N9TAxe = 16047 + INTEGER(IntKi), PARAMETER :: M02N1TAxe = 16048 + INTEGER(IntKi), PARAMETER :: M02N2TAxe = 16049 + INTEGER(IntKi), PARAMETER :: M02N3TAxe = 16050 + INTEGER(IntKi), PARAMETER :: M02N4TAxe = 16051 + INTEGER(IntKi), PARAMETER :: M02N5TAxe = 16052 + INTEGER(IntKi), PARAMETER :: M02N6TAxe = 16053 + INTEGER(IntKi), PARAMETER :: M02N7TAxe = 16054 + INTEGER(IntKi), PARAMETER :: M02N8TAxe = 16055 + INTEGER(IntKi), PARAMETER :: M02N9TAxe = 16056 + INTEGER(IntKi), PARAMETER :: M03N1TAxe = 16057 + INTEGER(IntKi), PARAMETER :: M03N2TAxe = 16058 + INTEGER(IntKi), PARAMETER :: M03N3TAxe = 16059 + INTEGER(IntKi), PARAMETER :: M03N4TAxe = 16060 + INTEGER(IntKi), PARAMETER :: M03N5TAxe = 16061 + INTEGER(IntKi), PARAMETER :: M03N6TAxe = 16062 + INTEGER(IntKi), PARAMETER :: M03N7TAxe = 16063 + INTEGER(IntKi), PARAMETER :: M03N8TAxe = 16064 + INTEGER(IntKi), PARAMETER :: M03N9TAxe = 16065 + INTEGER(IntKi), PARAMETER :: M04N1TAxe = 16066 + INTEGER(IntKi), PARAMETER :: M04N2TAxe = 16067 + INTEGER(IntKi), PARAMETER :: M04N3TAxe = 16068 + INTEGER(IntKi), PARAMETER :: M04N4TAxe = 16069 + INTEGER(IntKi), PARAMETER :: M04N5TAxe = 16070 + INTEGER(IntKi), PARAMETER :: M04N6TAxe = 16071 + INTEGER(IntKi), PARAMETER :: M04N7TAxe = 16072 + INTEGER(IntKi), PARAMETER :: M04N8TAxe = 16073 + INTEGER(IntKi), PARAMETER :: M04N9TAxe = 16074 + INTEGER(IntKi), PARAMETER :: M05N1TAxe = 16075 + INTEGER(IntKi), PARAMETER :: M05N2TAxe = 16076 + INTEGER(IntKi), PARAMETER :: M05N3TAxe = 16077 + INTEGER(IntKi), PARAMETER :: M05N4TAxe = 16078 + INTEGER(IntKi), PARAMETER :: M05N5TAxe = 16079 + INTEGER(IntKi), PARAMETER :: M05N6TAxe = 16080 + INTEGER(IntKi), PARAMETER :: M05N7TAxe = 16081 + INTEGER(IntKi), PARAMETER :: M05N8TAxe = 16082 + INTEGER(IntKi), PARAMETER :: M05N9TAxe = 16083 + INTEGER(IntKi), PARAMETER :: M06N1TAxe = 16084 + INTEGER(IntKi), PARAMETER :: M06N2TAxe = 16085 + INTEGER(IntKi), PARAMETER :: M06N3TAxe = 16086 + INTEGER(IntKi), PARAMETER :: M06N4TAxe = 16087 + INTEGER(IntKi), PARAMETER :: M06N5TAxe = 16088 + INTEGER(IntKi), PARAMETER :: M06N6TAxe = 16089 + INTEGER(IntKi), PARAMETER :: M06N7TAxe = 16090 + INTEGER(IntKi), PARAMETER :: M06N8TAxe = 16091 + INTEGER(IntKi), PARAMETER :: M06N9TAxe = 16092 + INTEGER(IntKi), PARAMETER :: M07N1TAxe = 16093 + INTEGER(IntKi), PARAMETER :: M07N2TAxe = 16094 + INTEGER(IntKi), PARAMETER :: M07N3TAxe = 16095 + INTEGER(IntKi), PARAMETER :: M07N4TAxe = 16096 + INTEGER(IntKi), PARAMETER :: M07N5TAxe = 16097 + INTEGER(IntKi), PARAMETER :: M07N6TAxe = 16098 + INTEGER(IntKi), PARAMETER :: M07N7TAxe = 16099 + INTEGER(IntKi), PARAMETER :: M07N8TAxe = 16100 + INTEGER(IntKi), PARAMETER :: M07N9TAxe = 16101 + INTEGER(IntKi), PARAMETER :: M08N1TAxe = 16102 + INTEGER(IntKi), PARAMETER :: M08N2TAxe = 16103 + INTEGER(IntKi), PARAMETER :: M08N3TAxe = 16104 + INTEGER(IntKi), PARAMETER :: M08N4TAxe = 16105 + INTEGER(IntKi), PARAMETER :: M08N5TAxe = 16106 + INTEGER(IntKi), PARAMETER :: M08N6TAxe = 16107 + INTEGER(IntKi), PARAMETER :: M08N7TAxe = 16108 + INTEGER(IntKi), PARAMETER :: M08N8TAxe = 16109 + INTEGER(IntKi), PARAMETER :: M08N9TAxe = 16110 + INTEGER(IntKi), PARAMETER :: M09N1TAxe = 16111 + INTEGER(IntKi), PARAMETER :: M09N2TAxe = 16112 + INTEGER(IntKi), PARAMETER :: M09N3TAxe = 16113 + INTEGER(IntKi), PARAMETER :: M09N4TAxe = 16114 + INTEGER(IntKi), PARAMETER :: M09N5TAxe = 16115 + INTEGER(IntKi), PARAMETER :: M09N6TAxe = 16116 + INTEGER(IntKi), PARAMETER :: M09N7TAxe = 16117 + INTEGER(IntKi), PARAMETER :: M09N8TAxe = 16118 + INTEGER(IntKi), PARAMETER :: M09N9TAxe = 16119 + INTEGER(IntKi), PARAMETER :: M10N1TAxe = 16120 + INTEGER(IntKi), PARAMETER :: M10N2TAxe = 16121 + INTEGER(IntKi), PARAMETER :: M10N3TAxe = 16122 + INTEGER(IntKi), PARAMETER :: M10N4TAxe = 16123 + INTEGER(IntKi), PARAMETER :: M10N5TAxe = 16124 + INTEGER(IntKi), PARAMETER :: M10N6TAxe = 16125 + INTEGER(IntKi), PARAMETER :: M10N7TAxe = 16126 + INTEGER(IntKi), PARAMETER :: M10N8TAxe = 16127 + INTEGER(IntKi), PARAMETER :: M10N9TAxe = 16128 + INTEGER(IntKi), PARAMETER :: M11N1TAxe = 16129 + INTEGER(IntKi), PARAMETER :: M11N2TAxe = 16130 + INTEGER(IntKi), PARAMETER :: M11N3TAxe = 16131 + INTEGER(IntKi), PARAMETER :: M11N4TAxe = 16132 + INTEGER(IntKi), PARAMETER :: M11N5TAxe = 16133 + INTEGER(IntKi), PARAMETER :: M11N6TAxe = 16134 + INTEGER(IntKi), PARAMETER :: M11N7TAxe = 16135 + INTEGER(IntKi), PARAMETER :: M11N8TAxe = 16136 + INTEGER(IntKi), PARAMETER :: M11N9TAxe = 16137 + INTEGER(IntKi), PARAMETER :: M12N1TAxe = 16138 + INTEGER(IntKi), PARAMETER :: M12N2TAxe = 16139 + INTEGER(IntKi), PARAMETER :: M12N3TAxe = 16140 + INTEGER(IntKi), PARAMETER :: M12N4TAxe = 16141 + INTEGER(IntKi), PARAMETER :: M12N5TAxe = 16142 + INTEGER(IntKi), PARAMETER :: M12N6TAxe = 16143 + INTEGER(IntKi), PARAMETER :: M12N7TAxe = 16144 + INTEGER(IntKi), PARAMETER :: M12N8TAxe = 16145 + INTEGER(IntKi), PARAMETER :: M12N9TAxe = 16146 + INTEGER(IntKi), PARAMETER :: M13N1TAxe = 16147 + INTEGER(IntKi), PARAMETER :: M13N2TAxe = 16148 + INTEGER(IntKi), PARAMETER :: M13N3TAxe = 16149 + INTEGER(IntKi), PARAMETER :: M13N4TAxe = 16150 + INTEGER(IntKi), PARAMETER :: M13N5TAxe = 16151 + INTEGER(IntKi), PARAMETER :: M13N6TAxe = 16152 + INTEGER(IntKi), PARAMETER :: M13N7TAxe = 16153 + INTEGER(IntKi), PARAMETER :: M13N8TAxe = 16154 + INTEGER(IntKi), PARAMETER :: M13N9TAxe = 16155 + INTEGER(IntKi), PARAMETER :: M14N1TAxe = 16156 + INTEGER(IntKi), PARAMETER :: M14N2TAxe = 16157 + INTEGER(IntKi), PARAMETER :: M14N3TAxe = 16158 + INTEGER(IntKi), PARAMETER :: M14N4TAxe = 16159 + INTEGER(IntKi), PARAMETER :: M14N5TAxe = 16160 + INTEGER(IntKi), PARAMETER :: M14N6TAxe = 16161 + INTEGER(IntKi), PARAMETER :: M14N7TAxe = 16162 + INTEGER(IntKi), PARAMETER :: M14N8TAxe = 16163 + INTEGER(IntKi), PARAMETER :: M14N9TAxe = 16164 + INTEGER(IntKi), PARAMETER :: M15N1TAxe = 16165 + INTEGER(IntKi), PARAMETER :: M15N2TAxe = 16166 + INTEGER(IntKi), PARAMETER :: M15N3TAxe = 16167 + INTEGER(IntKi), PARAMETER :: M15N4TAxe = 16168 + INTEGER(IntKi), PARAMETER :: M15N5TAxe = 16169 + INTEGER(IntKi), PARAMETER :: M15N6TAxe = 16170 + INTEGER(IntKi), PARAMETER :: M15N7TAxe = 16171 + INTEGER(IntKi), PARAMETER :: M15N8TAxe = 16172 + INTEGER(IntKi), PARAMETER :: M15N9TAxe = 16173 + INTEGER(IntKi), PARAMETER :: M16N1TAxe = 16174 + INTEGER(IntKi), PARAMETER :: M16N2TAxe = 16175 + INTEGER(IntKi), PARAMETER :: M16N3TAxe = 16176 + INTEGER(IntKi), PARAMETER :: M16N4TAxe = 16177 + INTEGER(IntKi), PARAMETER :: M16N5TAxe = 16178 + INTEGER(IntKi), PARAMETER :: M16N6TAxe = 16179 + INTEGER(IntKi), PARAMETER :: M16N7TAxe = 16180 + INTEGER(IntKi), PARAMETER :: M16N8TAxe = 16181 + INTEGER(IntKi), PARAMETER :: M16N9TAxe = 16182 + INTEGER(IntKi), PARAMETER :: M17N1TAxe = 16183 + INTEGER(IntKi), PARAMETER :: M17N2TAxe = 16184 + INTEGER(IntKi), PARAMETER :: M17N3TAxe = 16185 + INTEGER(IntKi), PARAMETER :: M17N4TAxe = 16186 + INTEGER(IntKi), PARAMETER :: M17N5TAxe = 16187 + INTEGER(IntKi), PARAMETER :: M17N6TAxe = 16188 + INTEGER(IntKi), PARAMETER :: M17N7TAxe = 16189 + INTEGER(IntKi), PARAMETER :: M17N8TAxe = 16190 + INTEGER(IntKi), PARAMETER :: M17N9TAxe = 16191 + INTEGER(IntKi), PARAMETER :: M18N1TAxe = 16192 + INTEGER(IntKi), PARAMETER :: M18N2TAxe = 16193 + INTEGER(IntKi), PARAMETER :: M18N3TAxe = 16194 + INTEGER(IntKi), PARAMETER :: M18N4TAxe = 16195 + INTEGER(IntKi), PARAMETER :: M18N5TAxe = 16196 + INTEGER(IntKi), PARAMETER :: M18N6TAxe = 16197 + INTEGER(IntKi), PARAMETER :: M18N7TAxe = 16198 + INTEGER(IntKi), PARAMETER :: M18N8TAxe = 16199 + INTEGER(IntKi), PARAMETER :: M18N9TAxe = 16200 + INTEGER(IntKi), PARAMETER :: M19N1TAxe = 16201 + INTEGER(IntKi), PARAMETER :: M19N2TAxe = 16202 + INTEGER(IntKi), PARAMETER :: M19N3TAxe = 16203 + INTEGER(IntKi), PARAMETER :: M19N4TAxe = 16204 + INTEGER(IntKi), PARAMETER :: M19N5TAxe = 16205 + INTEGER(IntKi), PARAMETER :: M19N6TAxe = 16206 + INTEGER(IntKi), PARAMETER :: M19N7TAxe = 16207 + INTEGER(IntKi), PARAMETER :: M19N8TAxe = 16208 + INTEGER(IntKi), PARAMETER :: M19N9TAxe = 16209 + INTEGER(IntKi), PARAMETER :: M20N1TAxe = 16210 + INTEGER(IntKi), PARAMETER :: M20N2TAxe = 16211 + INTEGER(IntKi), PARAMETER :: M20N3TAxe = 16212 + INTEGER(IntKi), PARAMETER :: M20N4TAxe = 16213 + INTEGER(IntKi), PARAMETER :: M20N5TAxe = 16214 + INTEGER(IntKi), PARAMETER :: M20N6TAxe = 16215 + INTEGER(IntKi), PARAMETER :: M20N7TAxe = 16216 + INTEGER(IntKi), PARAMETER :: M20N8TAxe = 16217 + INTEGER(IntKi), PARAMETER :: M20N9TAxe = 16218 + INTEGER(IntKi), PARAMETER :: M21N1TAxe = 16219 + INTEGER(IntKi), PARAMETER :: M21N2TAxe = 16220 + INTEGER(IntKi), PARAMETER :: M21N3TAxe = 16221 + INTEGER(IntKi), PARAMETER :: M21N4TAxe = 16222 + INTEGER(IntKi), PARAMETER :: M21N5TAxe = 16223 + INTEGER(IntKi), PARAMETER :: M21N6TAxe = 16224 + INTEGER(IntKi), PARAMETER :: M21N7TAxe = 16225 + INTEGER(IntKi), PARAMETER :: M21N8TAxe = 16226 + INTEGER(IntKi), PARAMETER :: M21N9TAxe = 16227 + INTEGER(IntKi), PARAMETER :: M22N1TAxe = 16228 + INTEGER(IntKi), PARAMETER :: M22N2TAxe = 16229 + INTEGER(IntKi), PARAMETER :: M22N3TAxe = 16230 + INTEGER(IntKi), PARAMETER :: M22N4TAxe = 16231 + INTEGER(IntKi), PARAMETER :: M22N5TAxe = 16232 + INTEGER(IntKi), PARAMETER :: M22N6TAxe = 16233 + INTEGER(IntKi), PARAMETER :: M22N7TAxe = 16234 + INTEGER(IntKi), PARAMETER :: M22N8TAxe = 16235 + INTEGER(IntKi), PARAMETER :: M22N9TAxe = 16236 + INTEGER(IntKi), PARAMETER :: M23N1TAxe = 16237 + INTEGER(IntKi), PARAMETER :: M23N2TAxe = 16238 + INTEGER(IntKi), PARAMETER :: M23N3TAxe = 16239 + INTEGER(IntKi), PARAMETER :: M23N4TAxe = 16240 + INTEGER(IntKi), PARAMETER :: M23N5TAxe = 16241 + INTEGER(IntKi), PARAMETER :: M23N6TAxe = 16242 + INTEGER(IntKi), PARAMETER :: M23N7TAxe = 16243 + INTEGER(IntKi), PARAMETER :: M23N8TAxe = 16244 + INTEGER(IntKi), PARAMETER :: M23N9TAxe = 16245 + INTEGER(IntKi), PARAMETER :: M24N1TAxe = 16246 + INTEGER(IntKi), PARAMETER :: M24N2TAxe = 16247 + INTEGER(IntKi), PARAMETER :: M24N3TAxe = 16248 + INTEGER(IntKi), PARAMETER :: M24N4TAxe = 16249 + INTEGER(IntKi), PARAMETER :: M24N5TAxe = 16250 + INTEGER(IntKi), PARAMETER :: M24N6TAxe = 16251 + INTEGER(IntKi), PARAMETER :: M24N7TAxe = 16252 + INTEGER(IntKi), PARAMETER :: M24N8TAxe = 16253 + INTEGER(IntKi), PARAMETER :: M24N9TAxe = 16254 + INTEGER(IntKi), PARAMETER :: M25N1TAxe = 16255 + INTEGER(IntKi), PARAMETER :: M25N2TAxe = 16256 + INTEGER(IntKi), PARAMETER :: M25N3TAxe = 16257 + INTEGER(IntKi), PARAMETER :: M25N4TAxe = 16258 + INTEGER(IntKi), PARAMETER :: M25N5TAxe = 16259 + INTEGER(IntKi), PARAMETER :: M25N6TAxe = 16260 + INTEGER(IntKi), PARAMETER :: M25N7TAxe = 16261 + INTEGER(IntKi), PARAMETER :: M25N8TAxe = 16262 + INTEGER(IntKi), PARAMETER :: M25N9TAxe = 16263 + INTEGER(IntKi), PARAMETER :: M26N1TAxe = 16264 + INTEGER(IntKi), PARAMETER :: M26N2TAxe = 16265 + INTEGER(IntKi), PARAMETER :: M26N3TAxe = 16266 + INTEGER(IntKi), PARAMETER :: M26N4TAxe = 16267 + INTEGER(IntKi), PARAMETER :: M26N5TAxe = 16268 + INTEGER(IntKi), PARAMETER :: M26N6TAxe = 16269 + INTEGER(IntKi), PARAMETER :: M26N7TAxe = 16270 + INTEGER(IntKi), PARAMETER :: M26N8TAxe = 16271 + INTEGER(IntKi), PARAMETER :: M26N9TAxe = 16272 + INTEGER(IntKi), PARAMETER :: M27N1TAxe = 16273 + INTEGER(IntKi), PARAMETER :: M27N2TAxe = 16274 + INTEGER(IntKi), PARAMETER :: M27N3TAxe = 16275 + INTEGER(IntKi), PARAMETER :: M27N4TAxe = 16276 + INTEGER(IntKi), PARAMETER :: M27N5TAxe = 16277 + INTEGER(IntKi), PARAMETER :: M27N6TAxe = 16278 + INTEGER(IntKi), PARAMETER :: M27N7TAxe = 16279 + INTEGER(IntKi), PARAMETER :: M27N8TAxe = 16280 + INTEGER(IntKi), PARAMETER :: M27N9TAxe = 16281 + INTEGER(IntKi), PARAMETER :: M28N1TAxe = 16282 + INTEGER(IntKi), PARAMETER :: M28N2TAxe = 16283 + INTEGER(IntKi), PARAMETER :: M28N3TAxe = 16284 + INTEGER(IntKi), PARAMETER :: M28N4TAxe = 16285 + INTEGER(IntKi), PARAMETER :: M28N5TAxe = 16286 + INTEGER(IntKi), PARAMETER :: M28N6TAxe = 16287 + INTEGER(IntKi), PARAMETER :: M28N7TAxe = 16288 + INTEGER(IntKi), PARAMETER :: M28N8TAxe = 16289 + INTEGER(IntKi), PARAMETER :: M28N9TAxe = 16290 + INTEGER(IntKi), PARAMETER :: M29N1TAxe = 16291 + INTEGER(IntKi), PARAMETER :: M29N2TAxe = 16292 + INTEGER(IntKi), PARAMETER :: M29N3TAxe = 16293 + INTEGER(IntKi), PARAMETER :: M29N4TAxe = 16294 + INTEGER(IntKi), PARAMETER :: M29N5TAxe = 16295 + INTEGER(IntKi), PARAMETER :: M29N6TAxe = 16296 + INTEGER(IntKi), PARAMETER :: M29N7TAxe = 16297 + INTEGER(IntKi), PARAMETER :: M29N8TAxe = 16298 + INTEGER(IntKi), PARAMETER :: M29N9TAxe = 16299 + INTEGER(IntKi), PARAMETER :: M30N1TAxe = 16300 + INTEGER(IntKi), PARAMETER :: M30N2TAxe = 16301 + INTEGER(IntKi), PARAMETER :: M30N3TAxe = 16302 + INTEGER(IntKi), PARAMETER :: M30N4TAxe = 16303 + INTEGER(IntKi), PARAMETER :: M30N5TAxe = 16304 + INTEGER(IntKi), PARAMETER :: M30N6TAxe = 16305 + INTEGER(IntKi), PARAMETER :: M30N7TAxe = 16306 + INTEGER(IntKi), PARAMETER :: M30N8TAxe = 16307 + INTEGER(IntKi), PARAMETER :: M30N9TAxe = 16308 + INTEGER(IntKi), PARAMETER :: M31N1TAxe = 16309 + INTEGER(IntKi), PARAMETER :: M31N2TAxe = 16310 + INTEGER(IntKi), PARAMETER :: M31N3TAxe = 16311 + INTEGER(IntKi), PARAMETER :: M31N4TAxe = 16312 + INTEGER(IntKi), PARAMETER :: M31N5TAxe = 16313 + INTEGER(IntKi), PARAMETER :: M31N6TAxe = 16314 + INTEGER(IntKi), PARAMETER :: M31N7TAxe = 16315 + INTEGER(IntKi), PARAMETER :: M31N8TAxe = 16316 + INTEGER(IntKi), PARAMETER :: M31N9TAxe = 16317 + INTEGER(IntKi), PARAMETER :: M32N1TAxe = 16318 + INTEGER(IntKi), PARAMETER :: M32N2TAxe = 16319 + INTEGER(IntKi), PARAMETER :: M32N3TAxe = 16320 + INTEGER(IntKi), PARAMETER :: M32N4TAxe = 16321 + INTEGER(IntKi), PARAMETER :: M32N5TAxe = 16322 + INTEGER(IntKi), PARAMETER :: M32N6TAxe = 16323 + INTEGER(IntKi), PARAMETER :: M32N7TAxe = 16324 + INTEGER(IntKi), PARAMETER :: M32N8TAxe = 16325 + INTEGER(IntKi), PARAMETER :: M32N9TAxe = 16326 + INTEGER(IntKi), PARAMETER :: M33N1TAxe = 16327 + INTEGER(IntKi), PARAMETER :: M33N2TAxe = 16328 + INTEGER(IntKi), PARAMETER :: M33N3TAxe = 16329 + INTEGER(IntKi), PARAMETER :: M33N4TAxe = 16330 + INTEGER(IntKi), PARAMETER :: M33N5TAxe = 16331 + INTEGER(IntKi), PARAMETER :: M33N6TAxe = 16332 + INTEGER(IntKi), PARAMETER :: M33N7TAxe = 16333 + INTEGER(IntKi), PARAMETER :: M33N8TAxe = 16334 + INTEGER(IntKi), PARAMETER :: M33N9TAxe = 16335 + INTEGER(IntKi), PARAMETER :: M34N1TAxe = 16336 + INTEGER(IntKi), PARAMETER :: M34N2TAxe = 16337 + INTEGER(IntKi), PARAMETER :: M34N3TAxe = 16338 + INTEGER(IntKi), PARAMETER :: M34N4TAxe = 16339 + INTEGER(IntKi), PARAMETER :: M34N5TAxe = 16340 + INTEGER(IntKi), PARAMETER :: M34N6TAxe = 16341 + INTEGER(IntKi), PARAMETER :: M34N7TAxe = 16342 + INTEGER(IntKi), PARAMETER :: M34N8TAxe = 16343 + INTEGER(IntKi), PARAMETER :: M34N9TAxe = 16344 + INTEGER(IntKi), PARAMETER :: M35N1TAxe = 16345 + INTEGER(IntKi), PARAMETER :: M35N2TAxe = 16346 + INTEGER(IntKi), PARAMETER :: M35N3TAxe = 16347 + INTEGER(IntKi), PARAMETER :: M35N4TAxe = 16348 + INTEGER(IntKi), PARAMETER :: M35N5TAxe = 16349 + INTEGER(IntKi), PARAMETER :: M35N6TAxe = 16350 + INTEGER(IntKi), PARAMETER :: M35N7TAxe = 16351 + INTEGER(IntKi), PARAMETER :: M35N8TAxe = 16352 + INTEGER(IntKi), PARAMETER :: M35N9TAxe = 16353 + INTEGER(IntKi), PARAMETER :: M36N1TAxe = 16354 + INTEGER(IntKi), PARAMETER :: M36N2TAxe = 16355 + INTEGER(IntKi), PARAMETER :: M36N3TAxe = 16356 + INTEGER(IntKi), PARAMETER :: M36N4TAxe = 16357 + INTEGER(IntKi), PARAMETER :: M36N5TAxe = 16358 + INTEGER(IntKi), PARAMETER :: M36N6TAxe = 16359 + INTEGER(IntKi), PARAMETER :: M36N7TAxe = 16360 + INTEGER(IntKi), PARAMETER :: M36N8TAxe = 16361 + INTEGER(IntKi), PARAMETER :: M36N9TAxe = 16362 + INTEGER(IntKi), PARAMETER :: M37N1TAxe = 16363 + INTEGER(IntKi), PARAMETER :: M37N2TAxe = 16364 + INTEGER(IntKi), PARAMETER :: M37N3TAxe = 16365 + INTEGER(IntKi), PARAMETER :: M37N4TAxe = 16366 + INTEGER(IntKi), PARAMETER :: M37N5TAxe = 16367 + INTEGER(IntKi), PARAMETER :: M37N6TAxe = 16368 + INTEGER(IntKi), PARAMETER :: M37N7TAxe = 16369 + INTEGER(IntKi), PARAMETER :: M37N8TAxe = 16370 + INTEGER(IntKi), PARAMETER :: M37N9TAxe = 16371 + INTEGER(IntKi), PARAMETER :: M38N1TAxe = 16372 + INTEGER(IntKi), PARAMETER :: M38N2TAxe = 16373 + INTEGER(IntKi), PARAMETER :: M38N3TAxe = 16374 + INTEGER(IntKi), PARAMETER :: M38N4TAxe = 16375 + INTEGER(IntKi), PARAMETER :: M38N5TAxe = 16376 + INTEGER(IntKi), PARAMETER :: M38N6TAxe = 16377 + INTEGER(IntKi), PARAMETER :: M38N7TAxe = 16378 + INTEGER(IntKi), PARAMETER :: M38N8TAxe = 16379 + INTEGER(IntKi), PARAMETER :: M38N9TAxe = 16380 + INTEGER(IntKi), PARAMETER :: M39N1TAxe = 16381 + INTEGER(IntKi), PARAMETER :: M39N2TAxe = 16382 + INTEGER(IntKi), PARAMETER :: M39N3TAxe = 16383 + INTEGER(IntKi), PARAMETER :: M39N4TAxe = 16384 + INTEGER(IntKi), PARAMETER :: M39N5TAxe = 16385 + INTEGER(IntKi), PARAMETER :: M39N6TAxe = 16386 + INTEGER(IntKi), PARAMETER :: M39N7TAxe = 16387 + INTEGER(IntKi), PARAMETER :: M39N8TAxe = 16388 + INTEGER(IntKi), PARAMETER :: M39N9TAxe = 16389 + INTEGER(IntKi), PARAMETER :: M40N1TAxe = 16390 + INTEGER(IntKi), PARAMETER :: M40N2TAxe = 16391 + INTEGER(IntKi), PARAMETER :: M40N3TAxe = 16392 + INTEGER(IntKi), PARAMETER :: M40N4TAxe = 16393 + INTEGER(IntKi), PARAMETER :: M40N5TAxe = 16394 + INTEGER(IntKi), PARAMETER :: M40N6TAxe = 16395 + INTEGER(IntKi), PARAMETER :: M40N7TAxe = 16396 + INTEGER(IntKi), PARAMETER :: M40N8TAxe = 16397 + INTEGER(IntKi), PARAMETER :: M40N9TAxe = 16398 + INTEGER(IntKi), PARAMETER :: M41N1TAxe = 16399 + INTEGER(IntKi), PARAMETER :: M41N2TAxe = 16400 + INTEGER(IntKi), PARAMETER :: M41N3TAxe = 16401 + INTEGER(IntKi), PARAMETER :: M41N4TAxe = 16402 + INTEGER(IntKi), PARAMETER :: M41N5TAxe = 16403 + INTEGER(IntKi), PARAMETER :: M41N6TAxe = 16404 + INTEGER(IntKi), PARAMETER :: M41N7TAxe = 16405 + INTEGER(IntKi), PARAMETER :: M41N8TAxe = 16406 + INTEGER(IntKi), PARAMETER :: M41N9TAxe = 16407 + INTEGER(IntKi), PARAMETER :: M42N1TAxe = 16408 + INTEGER(IntKi), PARAMETER :: M42N2TAxe = 16409 + INTEGER(IntKi), PARAMETER :: M42N3TAxe = 16410 + INTEGER(IntKi), PARAMETER :: M42N4TAxe = 16411 + INTEGER(IntKi), PARAMETER :: M42N5TAxe = 16412 + INTEGER(IntKi), PARAMETER :: M42N6TAxe = 16413 + INTEGER(IntKi), PARAMETER :: M42N7TAxe = 16414 + INTEGER(IntKi), PARAMETER :: M42N8TAxe = 16415 + INTEGER(IntKi), PARAMETER :: M42N9TAxe = 16416 + INTEGER(IntKi), PARAMETER :: M43N1TAxe = 16417 + INTEGER(IntKi), PARAMETER :: M43N2TAxe = 16418 + INTEGER(IntKi), PARAMETER :: M43N3TAxe = 16419 + INTEGER(IntKi), PARAMETER :: M43N4TAxe = 16420 + INTEGER(IntKi), PARAMETER :: M43N5TAxe = 16421 + INTEGER(IntKi), PARAMETER :: M43N6TAxe = 16422 + INTEGER(IntKi), PARAMETER :: M43N7TAxe = 16423 + INTEGER(IntKi), PARAMETER :: M43N8TAxe = 16424 + INTEGER(IntKi), PARAMETER :: M43N9TAxe = 16425 + INTEGER(IntKi), PARAMETER :: M44N1TAxe = 16426 + INTEGER(IntKi), PARAMETER :: M44N2TAxe = 16427 + INTEGER(IntKi), PARAMETER :: M44N3TAxe = 16428 + INTEGER(IntKi), PARAMETER :: M44N4TAxe = 16429 + INTEGER(IntKi), PARAMETER :: M44N5TAxe = 16430 + INTEGER(IntKi), PARAMETER :: M44N6TAxe = 16431 + INTEGER(IntKi), PARAMETER :: M44N7TAxe = 16432 + INTEGER(IntKi), PARAMETER :: M44N8TAxe = 16433 + INTEGER(IntKi), PARAMETER :: M44N9TAxe = 16434 + INTEGER(IntKi), PARAMETER :: M45N1TAxe = 16435 + INTEGER(IntKi), PARAMETER :: M45N2TAxe = 16436 + INTEGER(IntKi), PARAMETER :: M45N3TAxe = 16437 + INTEGER(IntKi), PARAMETER :: M45N4TAxe = 16438 + INTEGER(IntKi), PARAMETER :: M45N5TAxe = 16439 + INTEGER(IntKi), PARAMETER :: M45N6TAxe = 16440 + INTEGER(IntKi), PARAMETER :: M45N7TAxe = 16441 + INTEGER(IntKi), PARAMETER :: M45N8TAxe = 16442 + INTEGER(IntKi), PARAMETER :: M45N9TAxe = 16443 + INTEGER(IntKi), PARAMETER :: M46N1TAxe = 16444 + INTEGER(IntKi), PARAMETER :: M46N2TAxe = 16445 + INTEGER(IntKi), PARAMETER :: M46N3TAxe = 16446 + INTEGER(IntKi), PARAMETER :: M46N4TAxe = 16447 + INTEGER(IntKi), PARAMETER :: M46N5TAxe = 16448 + INTEGER(IntKi), PARAMETER :: M46N6TAxe = 16449 + INTEGER(IntKi), PARAMETER :: M46N7TAxe = 16450 + INTEGER(IntKi), PARAMETER :: M46N8TAxe = 16451 + INTEGER(IntKi), PARAMETER :: M46N9TAxe = 16452 + INTEGER(IntKi), PARAMETER :: M47N1TAxe = 16453 + INTEGER(IntKi), PARAMETER :: M47N2TAxe = 16454 + INTEGER(IntKi), PARAMETER :: M47N3TAxe = 16455 + INTEGER(IntKi), PARAMETER :: M47N4TAxe = 16456 + INTEGER(IntKi), PARAMETER :: M47N5TAxe = 16457 + INTEGER(IntKi), PARAMETER :: M47N6TAxe = 16458 + INTEGER(IntKi), PARAMETER :: M47N7TAxe = 16459 + INTEGER(IntKi), PARAMETER :: M47N8TAxe = 16460 + INTEGER(IntKi), PARAMETER :: M47N9TAxe = 16461 + INTEGER(IntKi), PARAMETER :: M48N1TAxe = 16462 + INTEGER(IntKi), PARAMETER :: M48N2TAxe = 16463 + INTEGER(IntKi), PARAMETER :: M48N3TAxe = 16464 + INTEGER(IntKi), PARAMETER :: M48N4TAxe = 16465 + INTEGER(IntKi), PARAMETER :: M48N5TAxe = 16466 + INTEGER(IntKi), PARAMETER :: M48N6TAxe = 16467 + INTEGER(IntKi), PARAMETER :: M48N7TAxe = 16468 + INTEGER(IntKi), PARAMETER :: M48N8TAxe = 16469 + INTEGER(IntKi), PARAMETER :: M48N9TAxe = 16470 + INTEGER(IntKi), PARAMETER :: M49N1TAxe = 16471 + INTEGER(IntKi), PARAMETER :: M49N2TAxe = 16472 + INTEGER(IntKi), PARAMETER :: M49N3TAxe = 16473 + INTEGER(IntKi), PARAMETER :: M49N4TAxe = 16474 + INTEGER(IntKi), PARAMETER :: M49N5TAxe = 16475 + INTEGER(IntKi), PARAMETER :: M49N6TAxe = 16476 + INTEGER(IntKi), PARAMETER :: M49N7TAxe = 16477 + INTEGER(IntKi), PARAMETER :: M49N8TAxe = 16478 + INTEGER(IntKi), PARAMETER :: M49N9TAxe = 16479 + INTEGER(IntKi), PARAMETER :: M50N1TAxe = 16480 + INTEGER(IntKi), PARAMETER :: M50N2TAxe = 16481 + INTEGER(IntKi), PARAMETER :: M50N3TAxe = 16482 + INTEGER(IntKi), PARAMETER :: M50N4TAxe = 16483 + INTEGER(IntKi), PARAMETER :: M50N5TAxe = 16484 + INTEGER(IntKi), PARAMETER :: M50N6TAxe = 16485 + INTEGER(IntKi), PARAMETER :: M50N7TAxe = 16486 + INTEGER(IntKi), PARAMETER :: M50N8TAxe = 16487 + INTEGER(IntKi), PARAMETER :: M50N9TAxe = 16488 + INTEGER(IntKi), PARAMETER :: M51N1TAxe = 16489 + INTEGER(IntKi), PARAMETER :: M51N2TAxe = 16490 + INTEGER(IntKi), PARAMETER :: M51N3TAxe = 16491 + INTEGER(IntKi), PARAMETER :: M51N4TAxe = 16492 + INTEGER(IntKi), PARAMETER :: M51N5TAxe = 16493 + INTEGER(IntKi), PARAMETER :: M51N6TAxe = 16494 + INTEGER(IntKi), PARAMETER :: M51N7TAxe = 16495 + INTEGER(IntKi), PARAMETER :: M51N8TAxe = 16496 + INTEGER(IntKi), PARAMETER :: M51N9TAxe = 16497 + INTEGER(IntKi), PARAMETER :: M52N1TAxe = 16498 + INTEGER(IntKi), PARAMETER :: M52N2TAxe = 16499 + INTEGER(IntKi), PARAMETER :: M52N3TAxe = 16500 + INTEGER(IntKi), PARAMETER :: M52N4TAxe = 16501 + INTEGER(IntKi), PARAMETER :: M52N5TAxe = 16502 + INTEGER(IntKi), PARAMETER :: M52N6TAxe = 16503 + INTEGER(IntKi), PARAMETER :: M52N7TAxe = 16504 + INTEGER(IntKi), PARAMETER :: M52N8TAxe = 16505 + INTEGER(IntKi), PARAMETER :: M52N9TAxe = 16506 + INTEGER(IntKi), PARAMETER :: M53N1TAxe = 16507 + INTEGER(IntKi), PARAMETER :: M53N2TAxe = 16508 + INTEGER(IntKi), PARAMETER :: M53N3TAxe = 16509 + INTEGER(IntKi), PARAMETER :: M53N4TAxe = 16510 + INTEGER(IntKi), PARAMETER :: M53N5TAxe = 16511 + INTEGER(IntKi), PARAMETER :: M53N6TAxe = 16512 + INTEGER(IntKi), PARAMETER :: M53N7TAxe = 16513 + INTEGER(IntKi), PARAMETER :: M53N8TAxe = 16514 + INTEGER(IntKi), PARAMETER :: M53N9TAxe = 16515 + INTEGER(IntKi), PARAMETER :: M54N1TAxe = 16516 + INTEGER(IntKi), PARAMETER :: M54N2TAxe = 16517 + INTEGER(IntKi), PARAMETER :: M54N3TAxe = 16518 + INTEGER(IntKi), PARAMETER :: M54N4TAxe = 16519 + INTEGER(IntKi), PARAMETER :: M54N5TAxe = 16520 + INTEGER(IntKi), PARAMETER :: M54N6TAxe = 16521 + INTEGER(IntKi), PARAMETER :: M54N7TAxe = 16522 + INTEGER(IntKi), PARAMETER :: M54N8TAxe = 16523 + INTEGER(IntKi), PARAMETER :: M54N9TAxe = 16524 + INTEGER(IntKi), PARAMETER :: M55N1TAxe = 16525 + INTEGER(IntKi), PARAMETER :: M55N2TAxe = 16526 + INTEGER(IntKi), PARAMETER :: M55N3TAxe = 16527 + INTEGER(IntKi), PARAMETER :: M55N4TAxe = 16528 + INTEGER(IntKi), PARAMETER :: M55N5TAxe = 16529 + INTEGER(IntKi), PARAMETER :: M55N6TAxe = 16530 + INTEGER(IntKi), PARAMETER :: M55N7TAxe = 16531 + INTEGER(IntKi), PARAMETER :: M55N8TAxe = 16532 + INTEGER(IntKi), PARAMETER :: M55N9TAxe = 16533 + INTEGER(IntKi), PARAMETER :: M56N1TAxe = 16534 + INTEGER(IntKi), PARAMETER :: M56N2TAxe = 16535 + INTEGER(IntKi), PARAMETER :: M56N3TAxe = 16536 + INTEGER(IntKi), PARAMETER :: M56N4TAxe = 16537 + INTEGER(IntKi), PARAMETER :: M56N5TAxe = 16538 + INTEGER(IntKi), PARAMETER :: M56N6TAxe = 16539 + INTEGER(IntKi), PARAMETER :: M56N7TAxe = 16540 + INTEGER(IntKi), PARAMETER :: M56N8TAxe = 16541 + INTEGER(IntKi), PARAMETER :: M56N9TAxe = 16542 + INTEGER(IntKi), PARAMETER :: M57N1TAxe = 16543 + INTEGER(IntKi), PARAMETER :: M57N2TAxe = 16544 + INTEGER(IntKi), PARAMETER :: M57N3TAxe = 16545 + INTEGER(IntKi), PARAMETER :: M57N4TAxe = 16546 + INTEGER(IntKi), PARAMETER :: M57N5TAxe = 16547 + INTEGER(IntKi), PARAMETER :: M57N6TAxe = 16548 + INTEGER(IntKi), PARAMETER :: M57N7TAxe = 16549 + INTEGER(IntKi), PARAMETER :: M57N8TAxe = 16550 + INTEGER(IntKi), PARAMETER :: M57N9TAxe = 16551 + INTEGER(IntKi), PARAMETER :: M58N1TAxe = 16552 + INTEGER(IntKi), PARAMETER :: M58N2TAxe = 16553 + INTEGER(IntKi), PARAMETER :: M58N3TAxe = 16554 + INTEGER(IntKi), PARAMETER :: M58N4TAxe = 16555 + INTEGER(IntKi), PARAMETER :: M58N5TAxe = 16556 + INTEGER(IntKi), PARAMETER :: M58N6TAxe = 16557 + INTEGER(IntKi), PARAMETER :: M58N7TAxe = 16558 + INTEGER(IntKi), PARAMETER :: M58N8TAxe = 16559 + INTEGER(IntKi), PARAMETER :: M58N9TAxe = 16560 + INTEGER(IntKi), PARAMETER :: M59N1TAxe = 16561 + INTEGER(IntKi), PARAMETER :: M59N2TAxe = 16562 + INTEGER(IntKi), PARAMETER :: M59N3TAxe = 16563 + INTEGER(IntKi), PARAMETER :: M59N4TAxe = 16564 + INTEGER(IntKi), PARAMETER :: M59N5TAxe = 16565 + INTEGER(IntKi), PARAMETER :: M59N6TAxe = 16566 + INTEGER(IntKi), PARAMETER :: M59N7TAxe = 16567 + INTEGER(IntKi), PARAMETER :: M59N8TAxe = 16568 + INTEGER(IntKi), PARAMETER :: M59N9TAxe = 16569 + INTEGER(IntKi), PARAMETER :: M60N1TAxe = 16570 + INTEGER(IntKi), PARAMETER :: M60N2TAxe = 16571 + INTEGER(IntKi), PARAMETER :: M60N3TAxe = 16572 + INTEGER(IntKi), PARAMETER :: M60N4TAxe = 16573 + INTEGER(IntKi), PARAMETER :: M60N5TAxe = 16574 + INTEGER(IntKi), PARAMETER :: M60N6TAxe = 16575 + INTEGER(IntKi), PARAMETER :: M60N7TAxe = 16576 + INTEGER(IntKi), PARAMETER :: M60N8TAxe = 16577 + INTEGER(IntKi), PARAMETER :: M60N9TAxe = 16578 + INTEGER(IntKi), PARAMETER :: M61N1TAxe = 16579 + INTEGER(IntKi), PARAMETER :: M61N2TAxe = 16580 + INTEGER(IntKi), PARAMETER :: M61N3TAxe = 16581 + INTEGER(IntKi), PARAMETER :: M61N4TAxe = 16582 + INTEGER(IntKi), PARAMETER :: M61N5TAxe = 16583 + INTEGER(IntKi), PARAMETER :: M61N6TAxe = 16584 + INTEGER(IntKi), PARAMETER :: M61N7TAxe = 16585 + INTEGER(IntKi), PARAMETER :: M61N8TAxe = 16586 + INTEGER(IntKi), PARAMETER :: M61N9TAxe = 16587 + INTEGER(IntKi), PARAMETER :: M62N1TAxe = 16588 + INTEGER(IntKi), PARAMETER :: M62N2TAxe = 16589 + INTEGER(IntKi), PARAMETER :: M62N3TAxe = 16590 + INTEGER(IntKi), PARAMETER :: M62N4TAxe = 16591 + INTEGER(IntKi), PARAMETER :: M62N5TAxe = 16592 + INTEGER(IntKi), PARAMETER :: M62N6TAxe = 16593 + INTEGER(IntKi), PARAMETER :: M62N7TAxe = 16594 + INTEGER(IntKi), PARAMETER :: M62N8TAxe = 16595 + INTEGER(IntKi), PARAMETER :: M62N9TAxe = 16596 + INTEGER(IntKi), PARAMETER :: M63N1TAxe = 16597 + INTEGER(IntKi), PARAMETER :: M63N2TAxe = 16598 + INTEGER(IntKi), PARAMETER :: M63N3TAxe = 16599 + INTEGER(IntKi), PARAMETER :: M63N4TAxe = 16600 + INTEGER(IntKi), PARAMETER :: M63N5TAxe = 16601 + INTEGER(IntKi), PARAMETER :: M63N6TAxe = 16602 + INTEGER(IntKi), PARAMETER :: M63N7TAxe = 16603 + INTEGER(IntKi), PARAMETER :: M63N8TAxe = 16604 + INTEGER(IntKi), PARAMETER :: M63N9TAxe = 16605 + INTEGER(IntKi), PARAMETER :: M64N1TAxe = 16606 + INTEGER(IntKi), PARAMETER :: M64N2TAxe = 16607 + INTEGER(IntKi), PARAMETER :: M64N3TAxe = 16608 + INTEGER(IntKi), PARAMETER :: M64N4TAxe = 16609 + INTEGER(IntKi), PARAMETER :: M64N5TAxe = 16610 + INTEGER(IntKi), PARAMETER :: M64N6TAxe = 16611 + INTEGER(IntKi), PARAMETER :: M64N7TAxe = 16612 + INTEGER(IntKi), PARAMETER :: M64N8TAxe = 16613 + INTEGER(IntKi), PARAMETER :: M64N9TAxe = 16614 + INTEGER(IntKi), PARAMETER :: M65N1TAxe = 16615 + INTEGER(IntKi), PARAMETER :: M65N2TAxe = 16616 + INTEGER(IntKi), PARAMETER :: M65N3TAxe = 16617 + INTEGER(IntKi), PARAMETER :: M65N4TAxe = 16618 + INTEGER(IntKi), PARAMETER :: M65N5TAxe = 16619 + INTEGER(IntKi), PARAMETER :: M65N6TAxe = 16620 + INTEGER(IntKi), PARAMETER :: M65N7TAxe = 16621 + INTEGER(IntKi), PARAMETER :: M65N8TAxe = 16622 + INTEGER(IntKi), PARAMETER :: M65N9TAxe = 16623 + INTEGER(IntKi), PARAMETER :: M66N1TAxe = 16624 + INTEGER(IntKi), PARAMETER :: M66N2TAxe = 16625 + INTEGER(IntKi), PARAMETER :: M66N3TAxe = 16626 + INTEGER(IntKi), PARAMETER :: M66N4TAxe = 16627 + INTEGER(IntKi), PARAMETER :: M66N5TAxe = 16628 + INTEGER(IntKi), PARAMETER :: M66N6TAxe = 16629 + INTEGER(IntKi), PARAMETER :: M66N7TAxe = 16630 + INTEGER(IntKi), PARAMETER :: M66N8TAxe = 16631 + INTEGER(IntKi), PARAMETER :: M66N9TAxe = 16632 + INTEGER(IntKi), PARAMETER :: M67N1TAxe = 16633 + INTEGER(IntKi), PARAMETER :: M67N2TAxe = 16634 + INTEGER(IntKi), PARAMETER :: M67N3TAxe = 16635 + INTEGER(IntKi), PARAMETER :: M67N4TAxe = 16636 + INTEGER(IntKi), PARAMETER :: M67N5TAxe = 16637 + INTEGER(IntKi), PARAMETER :: M67N6TAxe = 16638 + INTEGER(IntKi), PARAMETER :: M67N7TAxe = 16639 + INTEGER(IntKi), PARAMETER :: M67N8TAxe = 16640 + INTEGER(IntKi), PARAMETER :: M67N9TAxe = 16641 + INTEGER(IntKi), PARAMETER :: M68N1TAxe = 16642 + INTEGER(IntKi), PARAMETER :: M68N2TAxe = 16643 + INTEGER(IntKi), PARAMETER :: M68N3TAxe = 16644 + INTEGER(IntKi), PARAMETER :: M68N4TAxe = 16645 + INTEGER(IntKi), PARAMETER :: M68N5TAxe = 16646 + INTEGER(IntKi), PARAMETER :: M68N6TAxe = 16647 + INTEGER(IntKi), PARAMETER :: M68N7TAxe = 16648 + INTEGER(IntKi), PARAMETER :: M68N8TAxe = 16649 + INTEGER(IntKi), PARAMETER :: M68N9TAxe = 16650 + INTEGER(IntKi), PARAMETER :: M69N1TAxe = 16651 + INTEGER(IntKi), PARAMETER :: M69N2TAxe = 16652 + INTEGER(IntKi), PARAMETER :: M69N3TAxe = 16653 + INTEGER(IntKi), PARAMETER :: M69N4TAxe = 16654 + INTEGER(IntKi), PARAMETER :: M69N5TAxe = 16655 + INTEGER(IntKi), PARAMETER :: M69N6TAxe = 16656 + INTEGER(IntKi), PARAMETER :: M69N7TAxe = 16657 + INTEGER(IntKi), PARAMETER :: M69N8TAxe = 16658 + INTEGER(IntKi), PARAMETER :: M69N9TAxe = 16659 + INTEGER(IntKi), PARAMETER :: M70N1TAxe = 16660 + INTEGER(IntKi), PARAMETER :: M70N2TAxe = 16661 + INTEGER(IntKi), PARAMETER :: M70N3TAxe = 16662 + INTEGER(IntKi), PARAMETER :: M70N4TAxe = 16663 + INTEGER(IntKi), PARAMETER :: M70N5TAxe = 16664 + INTEGER(IntKi), PARAMETER :: M70N6TAxe = 16665 + INTEGER(IntKi), PARAMETER :: M70N7TAxe = 16666 + INTEGER(IntKi), PARAMETER :: M70N8TAxe = 16667 + INTEGER(IntKi), PARAMETER :: M70N9TAxe = 16668 + INTEGER(IntKi), PARAMETER :: M71N1TAxe = 16669 + INTEGER(IntKi), PARAMETER :: M71N2TAxe = 16670 + INTEGER(IntKi), PARAMETER :: M71N3TAxe = 16671 + INTEGER(IntKi), PARAMETER :: M71N4TAxe = 16672 + INTEGER(IntKi), PARAMETER :: M71N5TAxe = 16673 + INTEGER(IntKi), PARAMETER :: M71N6TAxe = 16674 + INTEGER(IntKi), PARAMETER :: M71N7TAxe = 16675 + INTEGER(IntKi), PARAMETER :: M71N8TAxe = 16676 + INTEGER(IntKi), PARAMETER :: M71N9TAxe = 16677 + INTEGER(IntKi), PARAMETER :: M72N1TAxe = 16678 + INTEGER(IntKi), PARAMETER :: M72N2TAxe = 16679 + INTEGER(IntKi), PARAMETER :: M72N3TAxe = 16680 + INTEGER(IntKi), PARAMETER :: M72N4TAxe = 16681 + INTEGER(IntKi), PARAMETER :: M72N5TAxe = 16682 + INTEGER(IntKi), PARAMETER :: M72N6TAxe = 16683 + INTEGER(IntKi), PARAMETER :: M72N7TAxe = 16684 + INTEGER(IntKi), PARAMETER :: M72N8TAxe = 16685 + INTEGER(IntKi), PARAMETER :: M72N9TAxe = 16686 + INTEGER(IntKi), PARAMETER :: M73N1TAxe = 16687 + INTEGER(IntKi), PARAMETER :: M73N2TAxe = 16688 + INTEGER(IntKi), PARAMETER :: M73N3TAxe = 16689 + INTEGER(IntKi), PARAMETER :: M73N4TAxe = 16690 + INTEGER(IntKi), PARAMETER :: M73N5TAxe = 16691 + INTEGER(IntKi), PARAMETER :: M73N6TAxe = 16692 + INTEGER(IntKi), PARAMETER :: M73N7TAxe = 16693 + INTEGER(IntKi), PARAMETER :: M73N8TAxe = 16694 + INTEGER(IntKi), PARAMETER :: M73N9TAxe = 16695 + INTEGER(IntKi), PARAMETER :: M74N1TAxe = 16696 + INTEGER(IntKi), PARAMETER :: M74N2TAxe = 16697 + INTEGER(IntKi), PARAMETER :: M74N3TAxe = 16698 + INTEGER(IntKi), PARAMETER :: M74N4TAxe = 16699 + INTEGER(IntKi), PARAMETER :: M74N5TAxe = 16700 + INTEGER(IntKi), PARAMETER :: M74N6TAxe = 16701 + INTEGER(IntKi), PARAMETER :: M74N7TAxe = 16702 + INTEGER(IntKi), PARAMETER :: M74N8TAxe = 16703 + INTEGER(IntKi), PARAMETER :: M74N9TAxe = 16704 + INTEGER(IntKi), PARAMETER :: M75N1TAxe = 16705 + INTEGER(IntKi), PARAMETER :: M75N2TAxe = 16706 + INTEGER(IntKi), PARAMETER :: M75N3TAxe = 16707 + INTEGER(IntKi), PARAMETER :: M75N4TAxe = 16708 + INTEGER(IntKi), PARAMETER :: M75N5TAxe = 16709 + INTEGER(IntKi), PARAMETER :: M75N6TAxe = 16710 + INTEGER(IntKi), PARAMETER :: M75N7TAxe = 16711 + INTEGER(IntKi), PARAMETER :: M75N8TAxe = 16712 + INTEGER(IntKi), PARAMETER :: M75N9TAxe = 16713 + INTEGER(IntKi), PARAMETER :: M76N1TAxe = 16714 + INTEGER(IntKi), PARAMETER :: M76N2TAxe = 16715 + INTEGER(IntKi), PARAMETER :: M76N3TAxe = 16716 + INTEGER(IntKi), PARAMETER :: M76N4TAxe = 16717 + INTEGER(IntKi), PARAMETER :: M76N5TAxe = 16718 + INTEGER(IntKi), PARAMETER :: M76N6TAxe = 16719 + INTEGER(IntKi), PARAMETER :: M76N7TAxe = 16720 + INTEGER(IntKi), PARAMETER :: M76N8TAxe = 16721 + INTEGER(IntKi), PARAMETER :: M76N9TAxe = 16722 + INTEGER(IntKi), PARAMETER :: M77N1TAxe = 16723 + INTEGER(IntKi), PARAMETER :: M77N2TAxe = 16724 + INTEGER(IntKi), PARAMETER :: M77N3TAxe = 16725 + INTEGER(IntKi), PARAMETER :: M77N4TAxe = 16726 + INTEGER(IntKi), PARAMETER :: M77N5TAxe = 16727 + INTEGER(IntKi), PARAMETER :: M77N6TAxe = 16728 + INTEGER(IntKi), PARAMETER :: M77N7TAxe = 16729 + INTEGER(IntKi), PARAMETER :: M77N8TAxe = 16730 + INTEGER(IntKi), PARAMETER :: M77N9TAxe = 16731 + INTEGER(IntKi), PARAMETER :: M78N1TAxe = 16732 + INTEGER(IntKi), PARAMETER :: M78N2TAxe = 16733 + INTEGER(IntKi), PARAMETER :: M78N3TAxe = 16734 + INTEGER(IntKi), PARAMETER :: M78N4TAxe = 16735 + INTEGER(IntKi), PARAMETER :: M78N5TAxe = 16736 + INTEGER(IntKi), PARAMETER :: M78N6TAxe = 16737 + INTEGER(IntKi), PARAMETER :: M78N7TAxe = 16738 + INTEGER(IntKi), PARAMETER :: M78N8TAxe = 16739 + INTEGER(IntKi), PARAMETER :: M78N9TAxe = 16740 + INTEGER(IntKi), PARAMETER :: M79N1TAxe = 16741 + INTEGER(IntKi), PARAMETER :: M79N2TAxe = 16742 + INTEGER(IntKi), PARAMETER :: M79N3TAxe = 16743 + INTEGER(IntKi), PARAMETER :: M79N4TAxe = 16744 + INTEGER(IntKi), PARAMETER :: M79N5TAxe = 16745 + INTEGER(IntKi), PARAMETER :: M79N6TAxe = 16746 + INTEGER(IntKi), PARAMETER :: M79N7TAxe = 16747 + INTEGER(IntKi), PARAMETER :: M79N8TAxe = 16748 + INTEGER(IntKi), PARAMETER :: M79N9TAxe = 16749 + INTEGER(IntKi), PARAMETER :: M80N1TAxe = 16750 + INTEGER(IntKi), PARAMETER :: M80N2TAxe = 16751 + INTEGER(IntKi), PARAMETER :: M80N3TAxe = 16752 + INTEGER(IntKi), PARAMETER :: M80N4TAxe = 16753 + INTEGER(IntKi), PARAMETER :: M80N5TAxe = 16754 + INTEGER(IntKi), PARAMETER :: M80N6TAxe = 16755 + INTEGER(IntKi), PARAMETER :: M80N7TAxe = 16756 + INTEGER(IntKi), PARAMETER :: M80N8TAxe = 16757 + INTEGER(IntKi), PARAMETER :: M80N9TAxe = 16758 + INTEGER(IntKi), PARAMETER :: M81N1TAxe = 16759 + INTEGER(IntKi), PARAMETER :: M81N2TAxe = 16760 + INTEGER(IntKi), PARAMETER :: M81N3TAxe = 16761 + INTEGER(IntKi), PARAMETER :: M81N4TAxe = 16762 + INTEGER(IntKi), PARAMETER :: M81N5TAxe = 16763 + INTEGER(IntKi), PARAMETER :: M81N6TAxe = 16764 + INTEGER(IntKi), PARAMETER :: M81N7TAxe = 16765 + INTEGER(IntKi), PARAMETER :: M81N8TAxe = 16766 + INTEGER(IntKi), PARAMETER :: M81N9TAxe = 16767 + INTEGER(IntKi), PARAMETER :: M82N1TAxe = 16768 + INTEGER(IntKi), PARAMETER :: M82N2TAxe = 16769 + INTEGER(IntKi), PARAMETER :: M82N3TAxe = 16770 + INTEGER(IntKi), PARAMETER :: M82N4TAxe = 16771 + INTEGER(IntKi), PARAMETER :: M82N5TAxe = 16772 + INTEGER(IntKi), PARAMETER :: M82N6TAxe = 16773 + INTEGER(IntKi), PARAMETER :: M82N7TAxe = 16774 + INTEGER(IntKi), PARAMETER :: M82N8TAxe = 16775 + INTEGER(IntKi), PARAMETER :: M82N9TAxe = 16776 + INTEGER(IntKi), PARAMETER :: M83N1TAxe = 16777 + INTEGER(IntKi), PARAMETER :: M83N2TAxe = 16778 + INTEGER(IntKi), PARAMETER :: M83N3TAxe = 16779 + INTEGER(IntKi), PARAMETER :: M83N4TAxe = 16780 + INTEGER(IntKi), PARAMETER :: M83N5TAxe = 16781 + INTEGER(IntKi), PARAMETER :: M83N6TAxe = 16782 + INTEGER(IntKi), PARAMETER :: M83N7TAxe = 16783 + INTEGER(IntKi), PARAMETER :: M83N8TAxe = 16784 + INTEGER(IntKi), PARAMETER :: M83N9TAxe = 16785 + INTEGER(IntKi), PARAMETER :: M84N1TAxe = 16786 + INTEGER(IntKi), PARAMETER :: M84N2TAxe = 16787 + INTEGER(IntKi), PARAMETER :: M84N3TAxe = 16788 + INTEGER(IntKi), PARAMETER :: M84N4TAxe = 16789 + INTEGER(IntKi), PARAMETER :: M84N5TAxe = 16790 + INTEGER(IntKi), PARAMETER :: M84N6TAxe = 16791 + INTEGER(IntKi), PARAMETER :: M84N7TAxe = 16792 + INTEGER(IntKi), PARAMETER :: M84N8TAxe = 16793 + INTEGER(IntKi), PARAMETER :: M84N9TAxe = 16794 + INTEGER(IntKi), PARAMETER :: M85N1TAxe = 16795 + INTEGER(IntKi), PARAMETER :: M85N2TAxe = 16796 + INTEGER(IntKi), PARAMETER :: M85N3TAxe = 16797 + INTEGER(IntKi), PARAMETER :: M85N4TAxe = 16798 + INTEGER(IntKi), PARAMETER :: M85N5TAxe = 16799 + INTEGER(IntKi), PARAMETER :: M85N6TAxe = 16800 + INTEGER(IntKi), PARAMETER :: M85N7TAxe = 16801 + INTEGER(IntKi), PARAMETER :: M85N8TAxe = 16802 + INTEGER(IntKi), PARAMETER :: M85N9TAxe = 16803 + INTEGER(IntKi), PARAMETER :: M86N1TAxe = 16804 + INTEGER(IntKi), PARAMETER :: M86N2TAxe = 16805 + INTEGER(IntKi), PARAMETER :: M86N3TAxe = 16806 + INTEGER(IntKi), PARAMETER :: M86N4TAxe = 16807 + INTEGER(IntKi), PARAMETER :: M86N5TAxe = 16808 + INTEGER(IntKi), PARAMETER :: M86N6TAxe = 16809 + INTEGER(IntKi), PARAMETER :: M86N7TAxe = 16810 + INTEGER(IntKi), PARAMETER :: M86N8TAxe = 16811 + INTEGER(IntKi), PARAMETER :: M86N9TAxe = 16812 + INTEGER(IntKi), PARAMETER :: M87N1TAxe = 16813 + INTEGER(IntKi), PARAMETER :: M87N2TAxe = 16814 + INTEGER(IntKi), PARAMETER :: M87N3TAxe = 16815 + INTEGER(IntKi), PARAMETER :: M87N4TAxe = 16816 + INTEGER(IntKi), PARAMETER :: M87N5TAxe = 16817 + INTEGER(IntKi), PARAMETER :: M87N6TAxe = 16818 + INTEGER(IntKi), PARAMETER :: M87N7TAxe = 16819 + INTEGER(IntKi), PARAMETER :: M87N8TAxe = 16820 + INTEGER(IntKi), PARAMETER :: M87N9TAxe = 16821 + INTEGER(IntKi), PARAMETER :: M88N1TAxe = 16822 + INTEGER(IntKi), PARAMETER :: M88N2TAxe = 16823 + INTEGER(IntKi), PARAMETER :: M88N3TAxe = 16824 + INTEGER(IntKi), PARAMETER :: M88N4TAxe = 16825 + INTEGER(IntKi), PARAMETER :: M88N5TAxe = 16826 + INTEGER(IntKi), PARAMETER :: M88N6TAxe = 16827 + INTEGER(IntKi), PARAMETER :: M88N7TAxe = 16828 + INTEGER(IntKi), PARAMETER :: M88N8TAxe = 16829 + INTEGER(IntKi), PARAMETER :: M88N9TAxe = 16830 + INTEGER(IntKi), PARAMETER :: M89N1TAxe = 16831 + INTEGER(IntKi), PARAMETER :: M89N2TAxe = 16832 + INTEGER(IntKi), PARAMETER :: M89N3TAxe = 16833 + INTEGER(IntKi), PARAMETER :: M89N4TAxe = 16834 + INTEGER(IntKi), PARAMETER :: M89N5TAxe = 16835 + INTEGER(IntKi), PARAMETER :: M89N6TAxe = 16836 + INTEGER(IntKi), PARAMETER :: M89N7TAxe = 16837 + INTEGER(IntKi), PARAMETER :: M89N8TAxe = 16838 + INTEGER(IntKi), PARAMETER :: M89N9TAxe = 16839 + INTEGER(IntKi), PARAMETER :: M90N1TAxe = 16840 + INTEGER(IntKi), PARAMETER :: M90N2TAxe = 16841 + INTEGER(IntKi), PARAMETER :: M90N3TAxe = 16842 + INTEGER(IntKi), PARAMETER :: M90N4TAxe = 16843 + INTEGER(IntKi), PARAMETER :: M90N5TAxe = 16844 + INTEGER(IntKi), PARAMETER :: M90N6TAxe = 16845 + INTEGER(IntKi), PARAMETER :: M90N7TAxe = 16846 + INTEGER(IntKi), PARAMETER :: M90N8TAxe = 16847 + INTEGER(IntKi), PARAMETER :: M90N9TAxe = 16848 + INTEGER(IntKi), PARAMETER :: M91N1TAxe = 16849 + INTEGER(IntKi), PARAMETER :: M91N2TAxe = 16850 + INTEGER(IntKi), PARAMETER :: M91N3TAxe = 16851 + INTEGER(IntKi), PARAMETER :: M91N4TAxe = 16852 + INTEGER(IntKi), PARAMETER :: M91N5TAxe = 16853 + INTEGER(IntKi), PARAMETER :: M91N6TAxe = 16854 + INTEGER(IntKi), PARAMETER :: M91N7TAxe = 16855 + INTEGER(IntKi), PARAMETER :: M91N8TAxe = 16856 + INTEGER(IntKi), PARAMETER :: M91N9TAxe = 16857 + INTEGER(IntKi), PARAMETER :: M92N1TAxe = 16858 + INTEGER(IntKi), PARAMETER :: M92N2TAxe = 16859 + INTEGER(IntKi), PARAMETER :: M92N3TAxe = 16860 + INTEGER(IntKi), PARAMETER :: M92N4TAxe = 16861 + INTEGER(IntKi), PARAMETER :: M92N5TAxe = 16862 + INTEGER(IntKi), PARAMETER :: M92N6TAxe = 16863 + INTEGER(IntKi), PARAMETER :: M92N7TAxe = 16864 + INTEGER(IntKi), PARAMETER :: M92N8TAxe = 16865 + INTEGER(IntKi), PARAMETER :: M92N9TAxe = 16866 + INTEGER(IntKi), PARAMETER :: M93N1TAxe = 16867 + INTEGER(IntKi), PARAMETER :: M93N2TAxe = 16868 + INTEGER(IntKi), PARAMETER :: M93N3TAxe = 16869 + INTEGER(IntKi), PARAMETER :: M93N4TAxe = 16870 + INTEGER(IntKi), PARAMETER :: M93N5TAxe = 16871 + INTEGER(IntKi), PARAMETER :: M93N6TAxe = 16872 + INTEGER(IntKi), PARAMETER :: M93N7TAxe = 16873 + INTEGER(IntKi), PARAMETER :: M93N8TAxe = 16874 + INTEGER(IntKi), PARAMETER :: M93N9TAxe = 16875 + INTEGER(IntKi), PARAMETER :: M94N1TAxe = 16876 + INTEGER(IntKi), PARAMETER :: M94N2TAxe = 16877 + INTEGER(IntKi), PARAMETER :: M94N3TAxe = 16878 + INTEGER(IntKi), PARAMETER :: M94N4TAxe = 16879 + INTEGER(IntKi), PARAMETER :: M94N5TAxe = 16880 + INTEGER(IntKi), PARAMETER :: M94N6TAxe = 16881 + INTEGER(IntKi), PARAMETER :: M94N7TAxe = 16882 + INTEGER(IntKi), PARAMETER :: M94N8TAxe = 16883 + INTEGER(IntKi), PARAMETER :: M94N9TAxe = 16884 + INTEGER(IntKi), PARAMETER :: M95N1TAxe = 16885 + INTEGER(IntKi), PARAMETER :: M95N2TAxe = 16886 + INTEGER(IntKi), PARAMETER :: M95N3TAxe = 16887 + INTEGER(IntKi), PARAMETER :: M95N4TAxe = 16888 + INTEGER(IntKi), PARAMETER :: M95N5TAxe = 16889 + INTEGER(IntKi), PARAMETER :: M95N6TAxe = 16890 + INTEGER(IntKi), PARAMETER :: M95N7TAxe = 16891 + INTEGER(IntKi), PARAMETER :: M95N8TAxe = 16892 + INTEGER(IntKi), PARAMETER :: M95N9TAxe = 16893 + INTEGER(IntKi), PARAMETER :: M96N1TAxe = 16894 + INTEGER(IntKi), PARAMETER :: M96N2TAxe = 16895 + INTEGER(IntKi), PARAMETER :: M96N3TAxe = 16896 + INTEGER(IntKi), PARAMETER :: M96N4TAxe = 16897 + INTEGER(IntKi), PARAMETER :: M96N5TAxe = 16898 + INTEGER(IntKi), PARAMETER :: M96N6TAxe = 16899 + INTEGER(IntKi), PARAMETER :: M96N7TAxe = 16900 + INTEGER(IntKi), PARAMETER :: M96N8TAxe = 16901 + INTEGER(IntKi), PARAMETER :: M96N9TAxe = 16902 + INTEGER(IntKi), PARAMETER :: M97N1TAxe = 16903 + INTEGER(IntKi), PARAMETER :: M97N2TAxe = 16904 + INTEGER(IntKi), PARAMETER :: M97N3TAxe = 16905 + INTEGER(IntKi), PARAMETER :: M97N4TAxe = 16906 + INTEGER(IntKi), PARAMETER :: M97N5TAxe = 16907 + INTEGER(IntKi), PARAMETER :: M97N6TAxe = 16908 + INTEGER(IntKi), PARAMETER :: M97N7TAxe = 16909 + INTEGER(IntKi), PARAMETER :: M97N8TAxe = 16910 + INTEGER(IntKi), PARAMETER :: M97N9TAxe = 16911 + INTEGER(IntKi), PARAMETER :: M98N1TAxe = 16912 + INTEGER(IntKi), PARAMETER :: M98N2TAxe = 16913 + INTEGER(IntKi), PARAMETER :: M98N3TAxe = 16914 + INTEGER(IntKi), PARAMETER :: M98N4TAxe = 16915 + INTEGER(IntKi), PARAMETER :: M98N5TAxe = 16916 + INTEGER(IntKi), PARAMETER :: M98N6TAxe = 16917 + INTEGER(IntKi), PARAMETER :: M98N7TAxe = 16918 + INTEGER(IntKi), PARAMETER :: M98N8TAxe = 16919 + INTEGER(IntKi), PARAMETER :: M98N9TAxe = 16920 + INTEGER(IntKi), PARAMETER :: M99N1TAxe = 16921 + INTEGER(IntKi), PARAMETER :: M99N2TAxe = 16922 + INTEGER(IntKi), PARAMETER :: M99N3TAxe = 16923 + INTEGER(IntKi), PARAMETER :: M99N4TAxe = 16924 + INTEGER(IntKi), PARAMETER :: M99N5TAxe = 16925 + INTEGER(IntKi), PARAMETER :: M99N6TAxe = 16926 + INTEGER(IntKi), PARAMETER :: M99N7TAxe = 16927 + INTEGER(IntKi), PARAMETER :: M99N8TAxe = 16928 + INTEGER(IntKi), PARAMETER :: M99N9TAxe = 16929 + INTEGER(IntKi), PARAMETER :: M01N1TAye = 16930 + INTEGER(IntKi), PARAMETER :: M01N2TAye = 16931 + INTEGER(IntKi), PARAMETER :: M01N3TAye = 16932 + INTEGER(IntKi), PARAMETER :: M01N4TAye = 16933 + INTEGER(IntKi), PARAMETER :: M01N5TAye = 16934 + INTEGER(IntKi), PARAMETER :: M01N6TAye = 16935 + INTEGER(IntKi), PARAMETER :: M01N7TAye = 16936 + INTEGER(IntKi), PARAMETER :: M01N8TAye = 16937 + INTEGER(IntKi), PARAMETER :: M01N9TAye = 16938 + INTEGER(IntKi), PARAMETER :: M02N1TAye = 16939 + INTEGER(IntKi), PARAMETER :: M02N2TAye = 16940 + INTEGER(IntKi), PARAMETER :: M02N3TAye = 16941 + INTEGER(IntKi), PARAMETER :: M02N4TAye = 16942 + INTEGER(IntKi), PARAMETER :: M02N5TAye = 16943 + INTEGER(IntKi), PARAMETER :: M02N6TAye = 16944 + INTEGER(IntKi), PARAMETER :: M02N7TAye = 16945 + INTEGER(IntKi), PARAMETER :: M02N8TAye = 16946 + INTEGER(IntKi), PARAMETER :: M02N9TAye = 16947 + INTEGER(IntKi), PARAMETER :: M03N1TAye = 16948 + INTEGER(IntKi), PARAMETER :: M03N2TAye = 16949 + INTEGER(IntKi), PARAMETER :: M03N3TAye = 16950 + INTEGER(IntKi), PARAMETER :: M03N4TAye = 16951 + INTEGER(IntKi), PARAMETER :: M03N5TAye = 16952 + INTEGER(IntKi), PARAMETER :: M03N6TAye = 16953 + INTEGER(IntKi), PARAMETER :: M03N7TAye = 16954 + INTEGER(IntKi), PARAMETER :: M03N8TAye = 16955 + INTEGER(IntKi), PARAMETER :: M03N9TAye = 16956 + INTEGER(IntKi), PARAMETER :: M04N1TAye = 16957 + INTEGER(IntKi), PARAMETER :: M04N2TAye = 16958 + INTEGER(IntKi), PARAMETER :: M04N3TAye = 16959 + INTEGER(IntKi), PARAMETER :: M04N4TAye = 16960 + INTEGER(IntKi), PARAMETER :: M04N5TAye = 16961 + INTEGER(IntKi), PARAMETER :: M04N6TAye = 16962 + INTEGER(IntKi), PARAMETER :: M04N7TAye = 16963 + INTEGER(IntKi), PARAMETER :: M04N8TAye = 16964 + INTEGER(IntKi), PARAMETER :: M04N9TAye = 16965 + INTEGER(IntKi), PARAMETER :: M05N1TAye = 16966 + INTEGER(IntKi), PARAMETER :: M05N2TAye = 16967 + INTEGER(IntKi), PARAMETER :: M05N3TAye = 16968 + INTEGER(IntKi), PARAMETER :: M05N4TAye = 16969 + INTEGER(IntKi), PARAMETER :: M05N5TAye = 16970 + INTEGER(IntKi), PARAMETER :: M05N6TAye = 16971 + INTEGER(IntKi), PARAMETER :: M05N7TAye = 16972 + INTEGER(IntKi), PARAMETER :: M05N8TAye = 16973 + INTEGER(IntKi), PARAMETER :: M05N9TAye = 16974 + INTEGER(IntKi), PARAMETER :: M06N1TAye = 16975 + INTEGER(IntKi), PARAMETER :: M06N2TAye = 16976 + INTEGER(IntKi), PARAMETER :: M06N3TAye = 16977 + INTEGER(IntKi), PARAMETER :: M06N4TAye = 16978 + INTEGER(IntKi), PARAMETER :: M06N5TAye = 16979 + INTEGER(IntKi), PARAMETER :: M06N6TAye = 16980 + INTEGER(IntKi), PARAMETER :: M06N7TAye = 16981 + INTEGER(IntKi), PARAMETER :: M06N8TAye = 16982 + INTEGER(IntKi), PARAMETER :: M06N9TAye = 16983 + INTEGER(IntKi), PARAMETER :: M07N1TAye = 16984 + INTEGER(IntKi), PARAMETER :: M07N2TAye = 16985 + INTEGER(IntKi), PARAMETER :: M07N3TAye = 16986 + INTEGER(IntKi), PARAMETER :: M07N4TAye = 16987 + INTEGER(IntKi), PARAMETER :: M07N5TAye = 16988 + INTEGER(IntKi), PARAMETER :: M07N6TAye = 16989 + INTEGER(IntKi), PARAMETER :: M07N7TAye = 16990 + INTEGER(IntKi), PARAMETER :: M07N8TAye = 16991 + INTEGER(IntKi), PARAMETER :: M07N9TAye = 16992 + INTEGER(IntKi), PARAMETER :: M08N1TAye = 16993 + INTEGER(IntKi), PARAMETER :: M08N2TAye = 16994 + INTEGER(IntKi), PARAMETER :: M08N3TAye = 16995 + INTEGER(IntKi), PARAMETER :: M08N4TAye = 16996 + INTEGER(IntKi), PARAMETER :: M08N5TAye = 16997 + INTEGER(IntKi), PARAMETER :: M08N6TAye = 16998 + INTEGER(IntKi), PARAMETER :: M08N7TAye = 16999 + INTEGER(IntKi), PARAMETER :: M08N8TAye = 17000 + INTEGER(IntKi), PARAMETER :: M08N9TAye = 17001 + INTEGER(IntKi), PARAMETER :: M09N1TAye = 17002 + INTEGER(IntKi), PARAMETER :: M09N2TAye = 17003 + INTEGER(IntKi), PARAMETER :: M09N3TAye = 17004 + INTEGER(IntKi), PARAMETER :: M09N4TAye = 17005 + INTEGER(IntKi), PARAMETER :: M09N5TAye = 17006 + INTEGER(IntKi), PARAMETER :: M09N6TAye = 17007 + INTEGER(IntKi), PARAMETER :: M09N7TAye = 17008 + INTEGER(IntKi), PARAMETER :: M09N8TAye = 17009 + INTEGER(IntKi), PARAMETER :: M09N9TAye = 17010 + INTEGER(IntKi), PARAMETER :: M10N1TAye = 17011 + INTEGER(IntKi), PARAMETER :: M10N2TAye = 17012 + INTEGER(IntKi), PARAMETER :: M10N3TAye = 17013 + INTEGER(IntKi), PARAMETER :: M10N4TAye = 17014 + INTEGER(IntKi), PARAMETER :: M10N5TAye = 17015 + INTEGER(IntKi), PARAMETER :: M10N6TAye = 17016 + INTEGER(IntKi), PARAMETER :: M10N7TAye = 17017 + INTEGER(IntKi), PARAMETER :: M10N8TAye = 17018 + INTEGER(IntKi), PARAMETER :: M10N9TAye = 17019 + INTEGER(IntKi), PARAMETER :: M11N1TAye = 17020 + INTEGER(IntKi), PARAMETER :: M11N2TAye = 17021 + INTEGER(IntKi), PARAMETER :: M11N3TAye = 17022 + INTEGER(IntKi), PARAMETER :: M11N4TAye = 17023 + INTEGER(IntKi), PARAMETER :: M11N5TAye = 17024 + INTEGER(IntKi), PARAMETER :: M11N6TAye = 17025 + INTEGER(IntKi), PARAMETER :: M11N7TAye = 17026 + INTEGER(IntKi), PARAMETER :: M11N8TAye = 17027 + INTEGER(IntKi), PARAMETER :: M11N9TAye = 17028 + INTEGER(IntKi), PARAMETER :: M12N1TAye = 17029 + INTEGER(IntKi), PARAMETER :: M12N2TAye = 17030 + INTEGER(IntKi), PARAMETER :: M12N3TAye = 17031 + INTEGER(IntKi), PARAMETER :: M12N4TAye = 17032 + INTEGER(IntKi), PARAMETER :: M12N5TAye = 17033 + INTEGER(IntKi), PARAMETER :: M12N6TAye = 17034 + INTEGER(IntKi), PARAMETER :: M12N7TAye = 17035 + INTEGER(IntKi), PARAMETER :: M12N8TAye = 17036 + INTEGER(IntKi), PARAMETER :: M12N9TAye = 17037 + INTEGER(IntKi), PARAMETER :: M13N1TAye = 17038 + INTEGER(IntKi), PARAMETER :: M13N2TAye = 17039 + INTEGER(IntKi), PARAMETER :: M13N3TAye = 17040 + INTEGER(IntKi), PARAMETER :: M13N4TAye = 17041 + INTEGER(IntKi), PARAMETER :: M13N5TAye = 17042 + INTEGER(IntKi), PARAMETER :: M13N6TAye = 17043 + INTEGER(IntKi), PARAMETER :: M13N7TAye = 17044 + INTEGER(IntKi), PARAMETER :: M13N8TAye = 17045 + INTEGER(IntKi), PARAMETER :: M13N9TAye = 17046 + INTEGER(IntKi), PARAMETER :: M14N1TAye = 17047 + INTEGER(IntKi), PARAMETER :: M14N2TAye = 17048 + INTEGER(IntKi), PARAMETER :: M14N3TAye = 17049 + INTEGER(IntKi), PARAMETER :: M14N4TAye = 17050 + INTEGER(IntKi), PARAMETER :: M14N5TAye = 17051 + INTEGER(IntKi), PARAMETER :: M14N6TAye = 17052 + INTEGER(IntKi), PARAMETER :: M14N7TAye = 17053 + INTEGER(IntKi), PARAMETER :: M14N8TAye = 17054 + INTEGER(IntKi), PARAMETER :: M14N9TAye = 17055 + INTEGER(IntKi), PARAMETER :: M15N1TAye = 17056 + INTEGER(IntKi), PARAMETER :: M15N2TAye = 17057 + INTEGER(IntKi), PARAMETER :: M15N3TAye = 17058 + INTEGER(IntKi), PARAMETER :: M15N4TAye = 17059 + INTEGER(IntKi), PARAMETER :: M15N5TAye = 17060 + INTEGER(IntKi), PARAMETER :: M15N6TAye = 17061 + INTEGER(IntKi), PARAMETER :: M15N7TAye = 17062 + INTEGER(IntKi), PARAMETER :: M15N8TAye = 17063 + INTEGER(IntKi), PARAMETER :: M15N9TAye = 17064 + INTEGER(IntKi), PARAMETER :: M16N1TAye = 17065 + INTEGER(IntKi), PARAMETER :: M16N2TAye = 17066 + INTEGER(IntKi), PARAMETER :: M16N3TAye = 17067 + INTEGER(IntKi), PARAMETER :: M16N4TAye = 17068 + INTEGER(IntKi), PARAMETER :: M16N5TAye = 17069 + INTEGER(IntKi), PARAMETER :: M16N6TAye = 17070 + INTEGER(IntKi), PARAMETER :: M16N7TAye = 17071 + INTEGER(IntKi), PARAMETER :: M16N8TAye = 17072 + INTEGER(IntKi), PARAMETER :: M16N9TAye = 17073 + INTEGER(IntKi), PARAMETER :: M17N1TAye = 17074 + INTEGER(IntKi), PARAMETER :: M17N2TAye = 17075 + INTEGER(IntKi), PARAMETER :: M17N3TAye = 17076 + INTEGER(IntKi), PARAMETER :: M17N4TAye = 17077 + INTEGER(IntKi), PARAMETER :: M17N5TAye = 17078 + INTEGER(IntKi), PARAMETER :: M17N6TAye = 17079 + INTEGER(IntKi), PARAMETER :: M17N7TAye = 17080 + INTEGER(IntKi), PARAMETER :: M17N8TAye = 17081 + INTEGER(IntKi), PARAMETER :: M17N9TAye = 17082 + INTEGER(IntKi), PARAMETER :: M18N1TAye = 17083 + INTEGER(IntKi), PARAMETER :: M18N2TAye = 17084 + INTEGER(IntKi), PARAMETER :: M18N3TAye = 17085 + INTEGER(IntKi), PARAMETER :: M18N4TAye = 17086 + INTEGER(IntKi), PARAMETER :: M18N5TAye = 17087 + INTEGER(IntKi), PARAMETER :: M18N6TAye = 17088 + INTEGER(IntKi), PARAMETER :: M18N7TAye = 17089 + INTEGER(IntKi), PARAMETER :: M18N8TAye = 17090 + INTEGER(IntKi), PARAMETER :: M18N9TAye = 17091 + INTEGER(IntKi), PARAMETER :: M19N1TAye = 17092 + INTEGER(IntKi), PARAMETER :: M19N2TAye = 17093 + INTEGER(IntKi), PARAMETER :: M19N3TAye = 17094 + INTEGER(IntKi), PARAMETER :: M19N4TAye = 17095 + INTEGER(IntKi), PARAMETER :: M19N5TAye = 17096 + INTEGER(IntKi), PARAMETER :: M19N6TAye = 17097 + INTEGER(IntKi), PARAMETER :: M19N7TAye = 17098 + INTEGER(IntKi), PARAMETER :: M19N8TAye = 17099 + INTEGER(IntKi), PARAMETER :: M19N9TAye = 17100 + INTEGER(IntKi), PARAMETER :: M20N1TAye = 17101 + INTEGER(IntKi), PARAMETER :: M20N2TAye = 17102 + INTEGER(IntKi), PARAMETER :: M20N3TAye = 17103 + INTEGER(IntKi), PARAMETER :: M20N4TAye = 17104 + INTEGER(IntKi), PARAMETER :: M20N5TAye = 17105 + INTEGER(IntKi), PARAMETER :: M20N6TAye = 17106 + INTEGER(IntKi), PARAMETER :: M20N7TAye = 17107 + INTEGER(IntKi), PARAMETER :: M20N8TAye = 17108 + INTEGER(IntKi), PARAMETER :: M20N9TAye = 17109 + INTEGER(IntKi), PARAMETER :: M21N1TAye = 17110 + INTEGER(IntKi), PARAMETER :: M21N2TAye = 17111 + INTEGER(IntKi), PARAMETER :: M21N3TAye = 17112 + INTEGER(IntKi), PARAMETER :: M21N4TAye = 17113 + INTEGER(IntKi), PARAMETER :: M21N5TAye = 17114 + INTEGER(IntKi), PARAMETER :: M21N6TAye = 17115 + INTEGER(IntKi), PARAMETER :: M21N7TAye = 17116 + INTEGER(IntKi), PARAMETER :: M21N8TAye = 17117 + INTEGER(IntKi), PARAMETER :: M21N9TAye = 17118 + INTEGER(IntKi), PARAMETER :: M22N1TAye = 17119 + INTEGER(IntKi), PARAMETER :: M22N2TAye = 17120 + INTEGER(IntKi), PARAMETER :: M22N3TAye = 17121 + INTEGER(IntKi), PARAMETER :: M22N4TAye = 17122 + INTEGER(IntKi), PARAMETER :: M22N5TAye = 17123 + INTEGER(IntKi), PARAMETER :: M22N6TAye = 17124 + INTEGER(IntKi), PARAMETER :: M22N7TAye = 17125 + INTEGER(IntKi), PARAMETER :: M22N8TAye = 17126 + INTEGER(IntKi), PARAMETER :: M22N9TAye = 17127 + INTEGER(IntKi), PARAMETER :: M23N1TAye = 17128 + INTEGER(IntKi), PARAMETER :: M23N2TAye = 17129 + INTEGER(IntKi), PARAMETER :: M23N3TAye = 17130 + INTEGER(IntKi), PARAMETER :: M23N4TAye = 17131 + INTEGER(IntKi), PARAMETER :: M23N5TAye = 17132 + INTEGER(IntKi), PARAMETER :: M23N6TAye = 17133 + INTEGER(IntKi), PARAMETER :: M23N7TAye = 17134 + INTEGER(IntKi), PARAMETER :: M23N8TAye = 17135 + INTEGER(IntKi), PARAMETER :: M23N9TAye = 17136 + INTEGER(IntKi), PARAMETER :: M24N1TAye = 17137 + INTEGER(IntKi), PARAMETER :: M24N2TAye = 17138 + INTEGER(IntKi), PARAMETER :: M24N3TAye = 17139 + INTEGER(IntKi), PARAMETER :: M24N4TAye = 17140 + INTEGER(IntKi), PARAMETER :: M24N5TAye = 17141 + INTEGER(IntKi), PARAMETER :: M24N6TAye = 17142 + INTEGER(IntKi), PARAMETER :: M24N7TAye = 17143 + INTEGER(IntKi), PARAMETER :: M24N8TAye = 17144 + INTEGER(IntKi), PARAMETER :: M24N9TAye = 17145 + INTEGER(IntKi), PARAMETER :: M25N1TAye = 17146 + INTEGER(IntKi), PARAMETER :: M25N2TAye = 17147 + INTEGER(IntKi), PARAMETER :: M25N3TAye = 17148 + INTEGER(IntKi), PARAMETER :: M25N4TAye = 17149 + INTEGER(IntKi), PARAMETER :: M25N5TAye = 17150 + INTEGER(IntKi), PARAMETER :: M25N6TAye = 17151 + INTEGER(IntKi), PARAMETER :: M25N7TAye = 17152 + INTEGER(IntKi), PARAMETER :: M25N8TAye = 17153 + INTEGER(IntKi), PARAMETER :: M25N9TAye = 17154 + INTEGER(IntKi), PARAMETER :: M26N1TAye = 17155 + INTEGER(IntKi), PARAMETER :: M26N2TAye = 17156 + INTEGER(IntKi), PARAMETER :: M26N3TAye = 17157 + INTEGER(IntKi), PARAMETER :: M26N4TAye = 17158 + INTEGER(IntKi), PARAMETER :: M26N5TAye = 17159 + INTEGER(IntKi), PARAMETER :: M26N6TAye = 17160 + INTEGER(IntKi), PARAMETER :: M26N7TAye = 17161 + INTEGER(IntKi), PARAMETER :: M26N8TAye = 17162 + INTEGER(IntKi), PARAMETER :: M26N9TAye = 17163 + INTEGER(IntKi), PARAMETER :: M27N1TAye = 17164 + INTEGER(IntKi), PARAMETER :: M27N2TAye = 17165 + INTEGER(IntKi), PARAMETER :: M27N3TAye = 17166 + INTEGER(IntKi), PARAMETER :: M27N4TAye = 17167 + INTEGER(IntKi), PARAMETER :: M27N5TAye = 17168 + INTEGER(IntKi), PARAMETER :: M27N6TAye = 17169 + INTEGER(IntKi), PARAMETER :: M27N7TAye = 17170 + INTEGER(IntKi), PARAMETER :: M27N8TAye = 17171 + INTEGER(IntKi), PARAMETER :: M27N9TAye = 17172 + INTEGER(IntKi), PARAMETER :: M28N1TAye = 17173 + INTEGER(IntKi), PARAMETER :: M28N2TAye = 17174 + INTEGER(IntKi), PARAMETER :: M28N3TAye = 17175 + INTEGER(IntKi), PARAMETER :: M28N4TAye = 17176 + INTEGER(IntKi), PARAMETER :: M28N5TAye = 17177 + INTEGER(IntKi), PARAMETER :: M28N6TAye = 17178 + INTEGER(IntKi), PARAMETER :: M28N7TAye = 17179 + INTEGER(IntKi), PARAMETER :: M28N8TAye = 17180 + INTEGER(IntKi), PARAMETER :: M28N9TAye = 17181 + INTEGER(IntKi), PARAMETER :: M29N1TAye = 17182 + INTEGER(IntKi), PARAMETER :: M29N2TAye = 17183 + INTEGER(IntKi), PARAMETER :: M29N3TAye = 17184 + INTEGER(IntKi), PARAMETER :: M29N4TAye = 17185 + INTEGER(IntKi), PARAMETER :: M29N5TAye = 17186 + INTEGER(IntKi), PARAMETER :: M29N6TAye = 17187 + INTEGER(IntKi), PARAMETER :: M29N7TAye = 17188 + INTEGER(IntKi), PARAMETER :: M29N8TAye = 17189 + INTEGER(IntKi), PARAMETER :: M29N9TAye = 17190 + INTEGER(IntKi), PARAMETER :: M30N1TAye = 17191 + INTEGER(IntKi), PARAMETER :: M30N2TAye = 17192 + INTEGER(IntKi), PARAMETER :: M30N3TAye = 17193 + INTEGER(IntKi), PARAMETER :: M30N4TAye = 17194 + INTEGER(IntKi), PARAMETER :: M30N5TAye = 17195 + INTEGER(IntKi), PARAMETER :: M30N6TAye = 17196 + INTEGER(IntKi), PARAMETER :: M30N7TAye = 17197 + INTEGER(IntKi), PARAMETER :: M30N8TAye = 17198 + INTEGER(IntKi), PARAMETER :: M30N9TAye = 17199 + INTEGER(IntKi), PARAMETER :: M31N1TAye = 17200 + INTEGER(IntKi), PARAMETER :: M31N2TAye = 17201 + INTEGER(IntKi), PARAMETER :: M31N3TAye = 17202 + INTEGER(IntKi), PARAMETER :: M31N4TAye = 17203 + INTEGER(IntKi), PARAMETER :: M31N5TAye = 17204 + INTEGER(IntKi), PARAMETER :: M31N6TAye = 17205 + INTEGER(IntKi), PARAMETER :: M31N7TAye = 17206 + INTEGER(IntKi), PARAMETER :: M31N8TAye = 17207 + INTEGER(IntKi), PARAMETER :: M31N9TAye = 17208 + INTEGER(IntKi), PARAMETER :: M32N1TAye = 17209 + INTEGER(IntKi), PARAMETER :: M32N2TAye = 17210 + INTEGER(IntKi), PARAMETER :: M32N3TAye = 17211 + INTEGER(IntKi), PARAMETER :: M32N4TAye = 17212 + INTEGER(IntKi), PARAMETER :: M32N5TAye = 17213 + INTEGER(IntKi), PARAMETER :: M32N6TAye = 17214 + INTEGER(IntKi), PARAMETER :: M32N7TAye = 17215 + INTEGER(IntKi), PARAMETER :: M32N8TAye = 17216 + INTEGER(IntKi), PARAMETER :: M32N9TAye = 17217 + INTEGER(IntKi), PARAMETER :: M33N1TAye = 17218 + INTEGER(IntKi), PARAMETER :: M33N2TAye = 17219 + INTEGER(IntKi), PARAMETER :: M33N3TAye = 17220 + INTEGER(IntKi), PARAMETER :: M33N4TAye = 17221 + INTEGER(IntKi), PARAMETER :: M33N5TAye = 17222 + INTEGER(IntKi), PARAMETER :: M33N6TAye = 17223 + INTEGER(IntKi), PARAMETER :: M33N7TAye = 17224 + INTEGER(IntKi), PARAMETER :: M33N8TAye = 17225 + INTEGER(IntKi), PARAMETER :: M33N9TAye = 17226 + INTEGER(IntKi), PARAMETER :: M34N1TAye = 17227 + INTEGER(IntKi), PARAMETER :: M34N2TAye = 17228 + INTEGER(IntKi), PARAMETER :: M34N3TAye = 17229 + INTEGER(IntKi), PARAMETER :: M34N4TAye = 17230 + INTEGER(IntKi), PARAMETER :: M34N5TAye = 17231 + INTEGER(IntKi), PARAMETER :: M34N6TAye = 17232 + INTEGER(IntKi), PARAMETER :: M34N7TAye = 17233 + INTEGER(IntKi), PARAMETER :: M34N8TAye = 17234 + INTEGER(IntKi), PARAMETER :: M34N9TAye = 17235 + INTEGER(IntKi), PARAMETER :: M35N1TAye = 17236 + INTEGER(IntKi), PARAMETER :: M35N2TAye = 17237 + INTEGER(IntKi), PARAMETER :: M35N3TAye = 17238 + INTEGER(IntKi), PARAMETER :: M35N4TAye = 17239 + INTEGER(IntKi), PARAMETER :: M35N5TAye = 17240 + INTEGER(IntKi), PARAMETER :: M35N6TAye = 17241 + INTEGER(IntKi), PARAMETER :: M35N7TAye = 17242 + INTEGER(IntKi), PARAMETER :: M35N8TAye = 17243 + INTEGER(IntKi), PARAMETER :: M35N9TAye = 17244 + INTEGER(IntKi), PARAMETER :: M36N1TAye = 17245 + INTEGER(IntKi), PARAMETER :: M36N2TAye = 17246 + INTEGER(IntKi), PARAMETER :: M36N3TAye = 17247 + INTEGER(IntKi), PARAMETER :: M36N4TAye = 17248 + INTEGER(IntKi), PARAMETER :: M36N5TAye = 17249 + INTEGER(IntKi), PARAMETER :: M36N6TAye = 17250 + INTEGER(IntKi), PARAMETER :: M36N7TAye = 17251 + INTEGER(IntKi), PARAMETER :: M36N8TAye = 17252 + INTEGER(IntKi), PARAMETER :: M36N9TAye = 17253 + INTEGER(IntKi), PARAMETER :: M37N1TAye = 17254 + INTEGER(IntKi), PARAMETER :: M37N2TAye = 17255 + INTEGER(IntKi), PARAMETER :: M37N3TAye = 17256 + INTEGER(IntKi), PARAMETER :: M37N4TAye = 17257 + INTEGER(IntKi), PARAMETER :: M37N5TAye = 17258 + INTEGER(IntKi), PARAMETER :: M37N6TAye = 17259 + INTEGER(IntKi), PARAMETER :: M37N7TAye = 17260 + INTEGER(IntKi), PARAMETER :: M37N8TAye = 17261 + INTEGER(IntKi), PARAMETER :: M37N9TAye = 17262 + INTEGER(IntKi), PARAMETER :: M38N1TAye = 17263 + INTEGER(IntKi), PARAMETER :: M38N2TAye = 17264 + INTEGER(IntKi), PARAMETER :: M38N3TAye = 17265 + INTEGER(IntKi), PARAMETER :: M38N4TAye = 17266 + INTEGER(IntKi), PARAMETER :: M38N5TAye = 17267 + INTEGER(IntKi), PARAMETER :: M38N6TAye = 17268 + INTEGER(IntKi), PARAMETER :: M38N7TAye = 17269 + INTEGER(IntKi), PARAMETER :: M38N8TAye = 17270 + INTEGER(IntKi), PARAMETER :: M38N9TAye = 17271 + INTEGER(IntKi), PARAMETER :: M39N1TAye = 17272 + INTEGER(IntKi), PARAMETER :: M39N2TAye = 17273 + INTEGER(IntKi), PARAMETER :: M39N3TAye = 17274 + INTEGER(IntKi), PARAMETER :: M39N4TAye = 17275 + INTEGER(IntKi), PARAMETER :: M39N5TAye = 17276 + INTEGER(IntKi), PARAMETER :: M39N6TAye = 17277 + INTEGER(IntKi), PARAMETER :: M39N7TAye = 17278 + INTEGER(IntKi), PARAMETER :: M39N8TAye = 17279 + INTEGER(IntKi), PARAMETER :: M39N9TAye = 17280 + INTEGER(IntKi), PARAMETER :: M40N1TAye = 17281 + INTEGER(IntKi), PARAMETER :: M40N2TAye = 17282 + INTEGER(IntKi), PARAMETER :: M40N3TAye = 17283 + INTEGER(IntKi), PARAMETER :: M40N4TAye = 17284 + INTEGER(IntKi), PARAMETER :: M40N5TAye = 17285 + INTEGER(IntKi), PARAMETER :: M40N6TAye = 17286 + INTEGER(IntKi), PARAMETER :: M40N7TAye = 17287 + INTEGER(IntKi), PARAMETER :: M40N8TAye = 17288 + INTEGER(IntKi), PARAMETER :: M40N9TAye = 17289 + INTEGER(IntKi), PARAMETER :: M41N1TAye = 17290 + INTEGER(IntKi), PARAMETER :: M41N2TAye = 17291 + INTEGER(IntKi), PARAMETER :: M41N3TAye = 17292 + INTEGER(IntKi), PARAMETER :: M41N4TAye = 17293 + INTEGER(IntKi), PARAMETER :: M41N5TAye = 17294 + INTEGER(IntKi), PARAMETER :: M41N6TAye = 17295 + INTEGER(IntKi), PARAMETER :: M41N7TAye = 17296 + INTEGER(IntKi), PARAMETER :: M41N8TAye = 17297 + INTEGER(IntKi), PARAMETER :: M41N9TAye = 17298 + INTEGER(IntKi), PARAMETER :: M42N1TAye = 17299 + INTEGER(IntKi), PARAMETER :: M42N2TAye = 17300 + INTEGER(IntKi), PARAMETER :: M42N3TAye = 17301 + INTEGER(IntKi), PARAMETER :: M42N4TAye = 17302 + INTEGER(IntKi), PARAMETER :: M42N5TAye = 17303 + INTEGER(IntKi), PARAMETER :: M42N6TAye = 17304 + INTEGER(IntKi), PARAMETER :: M42N7TAye = 17305 + INTEGER(IntKi), PARAMETER :: M42N8TAye = 17306 + INTEGER(IntKi), PARAMETER :: M42N9TAye = 17307 + INTEGER(IntKi), PARAMETER :: M43N1TAye = 17308 + INTEGER(IntKi), PARAMETER :: M43N2TAye = 17309 + INTEGER(IntKi), PARAMETER :: M43N3TAye = 17310 + INTEGER(IntKi), PARAMETER :: M43N4TAye = 17311 + INTEGER(IntKi), PARAMETER :: M43N5TAye = 17312 + INTEGER(IntKi), PARAMETER :: M43N6TAye = 17313 + INTEGER(IntKi), PARAMETER :: M43N7TAye = 17314 + INTEGER(IntKi), PARAMETER :: M43N8TAye = 17315 + INTEGER(IntKi), PARAMETER :: M43N9TAye = 17316 + INTEGER(IntKi), PARAMETER :: M44N1TAye = 17317 + INTEGER(IntKi), PARAMETER :: M44N2TAye = 17318 + INTEGER(IntKi), PARAMETER :: M44N3TAye = 17319 + INTEGER(IntKi), PARAMETER :: M44N4TAye = 17320 + INTEGER(IntKi), PARAMETER :: M44N5TAye = 17321 + INTEGER(IntKi), PARAMETER :: M44N6TAye = 17322 + INTEGER(IntKi), PARAMETER :: M44N7TAye = 17323 + INTEGER(IntKi), PARAMETER :: M44N8TAye = 17324 + INTEGER(IntKi), PARAMETER :: M44N9TAye = 17325 + INTEGER(IntKi), PARAMETER :: M45N1TAye = 17326 + INTEGER(IntKi), PARAMETER :: M45N2TAye = 17327 + INTEGER(IntKi), PARAMETER :: M45N3TAye = 17328 + INTEGER(IntKi), PARAMETER :: M45N4TAye = 17329 + INTEGER(IntKi), PARAMETER :: M45N5TAye = 17330 + INTEGER(IntKi), PARAMETER :: M45N6TAye = 17331 + INTEGER(IntKi), PARAMETER :: M45N7TAye = 17332 + INTEGER(IntKi), PARAMETER :: M45N8TAye = 17333 + INTEGER(IntKi), PARAMETER :: M45N9TAye = 17334 + INTEGER(IntKi), PARAMETER :: M46N1TAye = 17335 + INTEGER(IntKi), PARAMETER :: M46N2TAye = 17336 + INTEGER(IntKi), PARAMETER :: M46N3TAye = 17337 + INTEGER(IntKi), PARAMETER :: M46N4TAye = 17338 + INTEGER(IntKi), PARAMETER :: M46N5TAye = 17339 + INTEGER(IntKi), PARAMETER :: M46N6TAye = 17340 + INTEGER(IntKi), PARAMETER :: M46N7TAye = 17341 + INTEGER(IntKi), PARAMETER :: M46N8TAye = 17342 + INTEGER(IntKi), PARAMETER :: M46N9TAye = 17343 + INTEGER(IntKi), PARAMETER :: M47N1TAye = 17344 + INTEGER(IntKi), PARAMETER :: M47N2TAye = 17345 + INTEGER(IntKi), PARAMETER :: M47N3TAye = 17346 + INTEGER(IntKi), PARAMETER :: M47N4TAye = 17347 + INTEGER(IntKi), PARAMETER :: M47N5TAye = 17348 + INTEGER(IntKi), PARAMETER :: M47N6TAye = 17349 + INTEGER(IntKi), PARAMETER :: M47N7TAye = 17350 + INTEGER(IntKi), PARAMETER :: M47N8TAye = 17351 + INTEGER(IntKi), PARAMETER :: M47N9TAye = 17352 + INTEGER(IntKi), PARAMETER :: M48N1TAye = 17353 + INTEGER(IntKi), PARAMETER :: M48N2TAye = 17354 + INTEGER(IntKi), PARAMETER :: M48N3TAye = 17355 + INTEGER(IntKi), PARAMETER :: M48N4TAye = 17356 + INTEGER(IntKi), PARAMETER :: M48N5TAye = 17357 + INTEGER(IntKi), PARAMETER :: M48N6TAye = 17358 + INTEGER(IntKi), PARAMETER :: M48N7TAye = 17359 + INTEGER(IntKi), PARAMETER :: M48N8TAye = 17360 + INTEGER(IntKi), PARAMETER :: M48N9TAye = 17361 + INTEGER(IntKi), PARAMETER :: M49N1TAye = 17362 + INTEGER(IntKi), PARAMETER :: M49N2TAye = 17363 + INTEGER(IntKi), PARAMETER :: M49N3TAye = 17364 + INTEGER(IntKi), PARAMETER :: M49N4TAye = 17365 + INTEGER(IntKi), PARAMETER :: M49N5TAye = 17366 + INTEGER(IntKi), PARAMETER :: M49N6TAye = 17367 + INTEGER(IntKi), PARAMETER :: M49N7TAye = 17368 + INTEGER(IntKi), PARAMETER :: M49N8TAye = 17369 + INTEGER(IntKi), PARAMETER :: M49N9TAye = 17370 + INTEGER(IntKi), PARAMETER :: M50N1TAye = 17371 + INTEGER(IntKi), PARAMETER :: M50N2TAye = 17372 + INTEGER(IntKi), PARAMETER :: M50N3TAye = 17373 + INTEGER(IntKi), PARAMETER :: M50N4TAye = 17374 + INTEGER(IntKi), PARAMETER :: M50N5TAye = 17375 + INTEGER(IntKi), PARAMETER :: M50N6TAye = 17376 + INTEGER(IntKi), PARAMETER :: M50N7TAye = 17377 + INTEGER(IntKi), PARAMETER :: M50N8TAye = 17378 + INTEGER(IntKi), PARAMETER :: M50N9TAye = 17379 + INTEGER(IntKi), PARAMETER :: M51N1TAye = 17380 + INTEGER(IntKi), PARAMETER :: M51N2TAye = 17381 + INTEGER(IntKi), PARAMETER :: M51N3TAye = 17382 + INTEGER(IntKi), PARAMETER :: M51N4TAye = 17383 + INTEGER(IntKi), PARAMETER :: M51N5TAye = 17384 + INTEGER(IntKi), PARAMETER :: M51N6TAye = 17385 + INTEGER(IntKi), PARAMETER :: M51N7TAye = 17386 + INTEGER(IntKi), PARAMETER :: M51N8TAye = 17387 + INTEGER(IntKi), PARAMETER :: M51N9TAye = 17388 + INTEGER(IntKi), PARAMETER :: M52N1TAye = 17389 + INTEGER(IntKi), PARAMETER :: M52N2TAye = 17390 + INTEGER(IntKi), PARAMETER :: M52N3TAye = 17391 + INTEGER(IntKi), PARAMETER :: M52N4TAye = 17392 + INTEGER(IntKi), PARAMETER :: M52N5TAye = 17393 + INTEGER(IntKi), PARAMETER :: M52N6TAye = 17394 + INTEGER(IntKi), PARAMETER :: M52N7TAye = 17395 + INTEGER(IntKi), PARAMETER :: M52N8TAye = 17396 + INTEGER(IntKi), PARAMETER :: M52N9TAye = 17397 + INTEGER(IntKi), PARAMETER :: M53N1TAye = 17398 + INTEGER(IntKi), PARAMETER :: M53N2TAye = 17399 + INTEGER(IntKi), PARAMETER :: M53N3TAye = 17400 + INTEGER(IntKi), PARAMETER :: M53N4TAye = 17401 + INTEGER(IntKi), PARAMETER :: M53N5TAye = 17402 + INTEGER(IntKi), PARAMETER :: M53N6TAye = 17403 + INTEGER(IntKi), PARAMETER :: M53N7TAye = 17404 + INTEGER(IntKi), PARAMETER :: M53N8TAye = 17405 + INTEGER(IntKi), PARAMETER :: M53N9TAye = 17406 + INTEGER(IntKi), PARAMETER :: M54N1TAye = 17407 + INTEGER(IntKi), PARAMETER :: M54N2TAye = 17408 + INTEGER(IntKi), PARAMETER :: M54N3TAye = 17409 + INTEGER(IntKi), PARAMETER :: M54N4TAye = 17410 + INTEGER(IntKi), PARAMETER :: M54N5TAye = 17411 + INTEGER(IntKi), PARAMETER :: M54N6TAye = 17412 + INTEGER(IntKi), PARAMETER :: M54N7TAye = 17413 + INTEGER(IntKi), PARAMETER :: M54N8TAye = 17414 + INTEGER(IntKi), PARAMETER :: M54N9TAye = 17415 + INTEGER(IntKi), PARAMETER :: M55N1TAye = 17416 + INTEGER(IntKi), PARAMETER :: M55N2TAye = 17417 + INTEGER(IntKi), PARAMETER :: M55N3TAye = 17418 + INTEGER(IntKi), PARAMETER :: M55N4TAye = 17419 + INTEGER(IntKi), PARAMETER :: M55N5TAye = 17420 + INTEGER(IntKi), PARAMETER :: M55N6TAye = 17421 + INTEGER(IntKi), PARAMETER :: M55N7TAye = 17422 + INTEGER(IntKi), PARAMETER :: M55N8TAye = 17423 + INTEGER(IntKi), PARAMETER :: M55N9TAye = 17424 + INTEGER(IntKi), PARAMETER :: M56N1TAye = 17425 + INTEGER(IntKi), PARAMETER :: M56N2TAye = 17426 + INTEGER(IntKi), PARAMETER :: M56N3TAye = 17427 + INTEGER(IntKi), PARAMETER :: M56N4TAye = 17428 + INTEGER(IntKi), PARAMETER :: M56N5TAye = 17429 + INTEGER(IntKi), PARAMETER :: M56N6TAye = 17430 + INTEGER(IntKi), PARAMETER :: M56N7TAye = 17431 + INTEGER(IntKi), PARAMETER :: M56N8TAye = 17432 + INTEGER(IntKi), PARAMETER :: M56N9TAye = 17433 + INTEGER(IntKi), PARAMETER :: M57N1TAye = 17434 + INTEGER(IntKi), PARAMETER :: M57N2TAye = 17435 + INTEGER(IntKi), PARAMETER :: M57N3TAye = 17436 + INTEGER(IntKi), PARAMETER :: M57N4TAye = 17437 + INTEGER(IntKi), PARAMETER :: M57N5TAye = 17438 + INTEGER(IntKi), PARAMETER :: M57N6TAye = 17439 + INTEGER(IntKi), PARAMETER :: M57N7TAye = 17440 + INTEGER(IntKi), PARAMETER :: M57N8TAye = 17441 + INTEGER(IntKi), PARAMETER :: M57N9TAye = 17442 + INTEGER(IntKi), PARAMETER :: M58N1TAye = 17443 + INTEGER(IntKi), PARAMETER :: M58N2TAye = 17444 + INTEGER(IntKi), PARAMETER :: M58N3TAye = 17445 + INTEGER(IntKi), PARAMETER :: M58N4TAye = 17446 + INTEGER(IntKi), PARAMETER :: M58N5TAye = 17447 + INTEGER(IntKi), PARAMETER :: M58N6TAye = 17448 + INTEGER(IntKi), PARAMETER :: M58N7TAye = 17449 + INTEGER(IntKi), PARAMETER :: M58N8TAye = 17450 + INTEGER(IntKi), PARAMETER :: M58N9TAye = 17451 + INTEGER(IntKi), PARAMETER :: M59N1TAye = 17452 + INTEGER(IntKi), PARAMETER :: M59N2TAye = 17453 + INTEGER(IntKi), PARAMETER :: M59N3TAye = 17454 + INTEGER(IntKi), PARAMETER :: M59N4TAye = 17455 + INTEGER(IntKi), PARAMETER :: M59N5TAye = 17456 + INTEGER(IntKi), PARAMETER :: M59N6TAye = 17457 + INTEGER(IntKi), PARAMETER :: M59N7TAye = 17458 + INTEGER(IntKi), PARAMETER :: M59N8TAye = 17459 + INTEGER(IntKi), PARAMETER :: M59N9TAye = 17460 + INTEGER(IntKi), PARAMETER :: M60N1TAye = 17461 + INTEGER(IntKi), PARAMETER :: M60N2TAye = 17462 + INTEGER(IntKi), PARAMETER :: M60N3TAye = 17463 + INTEGER(IntKi), PARAMETER :: M60N4TAye = 17464 + INTEGER(IntKi), PARAMETER :: M60N5TAye = 17465 + INTEGER(IntKi), PARAMETER :: M60N6TAye = 17466 + INTEGER(IntKi), PARAMETER :: M60N7TAye = 17467 + INTEGER(IntKi), PARAMETER :: M60N8TAye = 17468 + INTEGER(IntKi), PARAMETER :: M60N9TAye = 17469 + INTEGER(IntKi), PARAMETER :: M61N1TAye = 17470 + INTEGER(IntKi), PARAMETER :: M61N2TAye = 17471 + INTEGER(IntKi), PARAMETER :: M61N3TAye = 17472 + INTEGER(IntKi), PARAMETER :: M61N4TAye = 17473 + INTEGER(IntKi), PARAMETER :: M61N5TAye = 17474 + INTEGER(IntKi), PARAMETER :: M61N6TAye = 17475 + INTEGER(IntKi), PARAMETER :: M61N7TAye = 17476 + INTEGER(IntKi), PARAMETER :: M61N8TAye = 17477 + INTEGER(IntKi), PARAMETER :: M61N9TAye = 17478 + INTEGER(IntKi), PARAMETER :: M62N1TAye = 17479 + INTEGER(IntKi), PARAMETER :: M62N2TAye = 17480 + INTEGER(IntKi), PARAMETER :: M62N3TAye = 17481 + INTEGER(IntKi), PARAMETER :: M62N4TAye = 17482 + INTEGER(IntKi), PARAMETER :: M62N5TAye = 17483 + INTEGER(IntKi), PARAMETER :: M62N6TAye = 17484 + INTEGER(IntKi), PARAMETER :: M62N7TAye = 17485 + INTEGER(IntKi), PARAMETER :: M62N8TAye = 17486 + INTEGER(IntKi), PARAMETER :: M62N9TAye = 17487 + INTEGER(IntKi), PARAMETER :: M63N1TAye = 17488 + INTEGER(IntKi), PARAMETER :: M63N2TAye = 17489 + INTEGER(IntKi), PARAMETER :: M63N3TAye = 17490 + INTEGER(IntKi), PARAMETER :: M63N4TAye = 17491 + INTEGER(IntKi), PARAMETER :: M63N5TAye = 17492 + INTEGER(IntKi), PARAMETER :: M63N6TAye = 17493 + INTEGER(IntKi), PARAMETER :: M63N7TAye = 17494 + INTEGER(IntKi), PARAMETER :: M63N8TAye = 17495 + INTEGER(IntKi), PARAMETER :: M63N9TAye = 17496 + INTEGER(IntKi), PARAMETER :: M64N1TAye = 17497 + INTEGER(IntKi), PARAMETER :: M64N2TAye = 17498 + INTEGER(IntKi), PARAMETER :: M64N3TAye = 17499 + INTEGER(IntKi), PARAMETER :: M64N4TAye = 17500 + INTEGER(IntKi), PARAMETER :: M64N5TAye = 17501 + INTEGER(IntKi), PARAMETER :: M64N6TAye = 17502 + INTEGER(IntKi), PARAMETER :: M64N7TAye = 17503 + INTEGER(IntKi), PARAMETER :: M64N8TAye = 17504 + INTEGER(IntKi), PARAMETER :: M64N9TAye = 17505 + INTEGER(IntKi), PARAMETER :: M65N1TAye = 17506 + INTEGER(IntKi), PARAMETER :: M65N2TAye = 17507 + INTEGER(IntKi), PARAMETER :: M65N3TAye = 17508 + INTEGER(IntKi), PARAMETER :: M65N4TAye = 17509 + INTEGER(IntKi), PARAMETER :: M65N5TAye = 17510 + INTEGER(IntKi), PARAMETER :: M65N6TAye = 17511 + INTEGER(IntKi), PARAMETER :: M65N7TAye = 17512 + INTEGER(IntKi), PARAMETER :: M65N8TAye = 17513 + INTEGER(IntKi), PARAMETER :: M65N9TAye = 17514 + INTEGER(IntKi), PARAMETER :: M66N1TAye = 17515 + INTEGER(IntKi), PARAMETER :: M66N2TAye = 17516 + INTEGER(IntKi), PARAMETER :: M66N3TAye = 17517 + INTEGER(IntKi), PARAMETER :: M66N4TAye = 17518 + INTEGER(IntKi), PARAMETER :: M66N5TAye = 17519 + INTEGER(IntKi), PARAMETER :: M66N6TAye = 17520 + INTEGER(IntKi), PARAMETER :: M66N7TAye = 17521 + INTEGER(IntKi), PARAMETER :: M66N8TAye = 17522 + INTEGER(IntKi), PARAMETER :: M66N9TAye = 17523 + INTEGER(IntKi), PARAMETER :: M67N1TAye = 17524 + INTEGER(IntKi), PARAMETER :: M67N2TAye = 17525 + INTEGER(IntKi), PARAMETER :: M67N3TAye = 17526 + INTEGER(IntKi), PARAMETER :: M67N4TAye = 17527 + INTEGER(IntKi), PARAMETER :: M67N5TAye = 17528 + INTEGER(IntKi), PARAMETER :: M67N6TAye = 17529 + INTEGER(IntKi), PARAMETER :: M67N7TAye = 17530 + INTEGER(IntKi), PARAMETER :: M67N8TAye = 17531 + INTEGER(IntKi), PARAMETER :: M67N9TAye = 17532 + INTEGER(IntKi), PARAMETER :: M68N1TAye = 17533 + INTEGER(IntKi), PARAMETER :: M68N2TAye = 17534 + INTEGER(IntKi), PARAMETER :: M68N3TAye = 17535 + INTEGER(IntKi), PARAMETER :: M68N4TAye = 17536 + INTEGER(IntKi), PARAMETER :: M68N5TAye = 17537 + INTEGER(IntKi), PARAMETER :: M68N6TAye = 17538 + INTEGER(IntKi), PARAMETER :: M68N7TAye = 17539 + INTEGER(IntKi), PARAMETER :: M68N8TAye = 17540 + INTEGER(IntKi), PARAMETER :: M68N9TAye = 17541 + INTEGER(IntKi), PARAMETER :: M69N1TAye = 17542 + INTEGER(IntKi), PARAMETER :: M69N2TAye = 17543 + INTEGER(IntKi), PARAMETER :: M69N3TAye = 17544 + INTEGER(IntKi), PARAMETER :: M69N4TAye = 17545 + INTEGER(IntKi), PARAMETER :: M69N5TAye = 17546 + INTEGER(IntKi), PARAMETER :: M69N6TAye = 17547 + INTEGER(IntKi), PARAMETER :: M69N7TAye = 17548 + INTEGER(IntKi), PARAMETER :: M69N8TAye = 17549 + INTEGER(IntKi), PARAMETER :: M69N9TAye = 17550 + INTEGER(IntKi), PARAMETER :: M70N1TAye = 17551 + INTEGER(IntKi), PARAMETER :: M70N2TAye = 17552 + INTEGER(IntKi), PARAMETER :: M70N3TAye = 17553 + INTEGER(IntKi), PARAMETER :: M70N4TAye = 17554 + INTEGER(IntKi), PARAMETER :: M70N5TAye = 17555 + INTEGER(IntKi), PARAMETER :: M70N6TAye = 17556 + INTEGER(IntKi), PARAMETER :: M70N7TAye = 17557 + INTEGER(IntKi), PARAMETER :: M70N8TAye = 17558 + INTEGER(IntKi), PARAMETER :: M70N9TAye = 17559 + INTEGER(IntKi), PARAMETER :: M71N1TAye = 17560 + INTEGER(IntKi), PARAMETER :: M71N2TAye = 17561 + INTEGER(IntKi), PARAMETER :: M71N3TAye = 17562 + INTEGER(IntKi), PARAMETER :: M71N4TAye = 17563 + INTEGER(IntKi), PARAMETER :: M71N5TAye = 17564 + INTEGER(IntKi), PARAMETER :: M71N6TAye = 17565 + INTEGER(IntKi), PARAMETER :: M71N7TAye = 17566 + INTEGER(IntKi), PARAMETER :: M71N8TAye = 17567 + INTEGER(IntKi), PARAMETER :: M71N9TAye = 17568 + INTEGER(IntKi), PARAMETER :: M72N1TAye = 17569 + INTEGER(IntKi), PARAMETER :: M72N2TAye = 17570 + INTEGER(IntKi), PARAMETER :: M72N3TAye = 17571 + INTEGER(IntKi), PARAMETER :: M72N4TAye = 17572 + INTEGER(IntKi), PARAMETER :: M72N5TAye = 17573 + INTEGER(IntKi), PARAMETER :: M72N6TAye = 17574 + INTEGER(IntKi), PARAMETER :: M72N7TAye = 17575 + INTEGER(IntKi), PARAMETER :: M72N8TAye = 17576 + INTEGER(IntKi), PARAMETER :: M72N9TAye = 17577 + INTEGER(IntKi), PARAMETER :: M73N1TAye = 17578 + INTEGER(IntKi), PARAMETER :: M73N2TAye = 17579 + INTEGER(IntKi), PARAMETER :: M73N3TAye = 17580 + INTEGER(IntKi), PARAMETER :: M73N4TAye = 17581 + INTEGER(IntKi), PARAMETER :: M73N5TAye = 17582 + INTEGER(IntKi), PARAMETER :: M73N6TAye = 17583 + INTEGER(IntKi), PARAMETER :: M73N7TAye = 17584 + INTEGER(IntKi), PARAMETER :: M73N8TAye = 17585 + INTEGER(IntKi), PARAMETER :: M73N9TAye = 17586 + INTEGER(IntKi), PARAMETER :: M74N1TAye = 17587 + INTEGER(IntKi), PARAMETER :: M74N2TAye = 17588 + INTEGER(IntKi), PARAMETER :: M74N3TAye = 17589 + INTEGER(IntKi), PARAMETER :: M74N4TAye = 17590 + INTEGER(IntKi), PARAMETER :: M74N5TAye = 17591 + INTEGER(IntKi), PARAMETER :: M74N6TAye = 17592 + INTEGER(IntKi), PARAMETER :: M74N7TAye = 17593 + INTEGER(IntKi), PARAMETER :: M74N8TAye = 17594 + INTEGER(IntKi), PARAMETER :: M74N9TAye = 17595 + INTEGER(IntKi), PARAMETER :: M75N1TAye = 17596 + INTEGER(IntKi), PARAMETER :: M75N2TAye = 17597 + INTEGER(IntKi), PARAMETER :: M75N3TAye = 17598 + INTEGER(IntKi), PARAMETER :: M75N4TAye = 17599 + INTEGER(IntKi), PARAMETER :: M75N5TAye = 17600 + INTEGER(IntKi), PARAMETER :: M75N6TAye = 17601 + INTEGER(IntKi), PARAMETER :: M75N7TAye = 17602 + INTEGER(IntKi), PARAMETER :: M75N8TAye = 17603 + INTEGER(IntKi), PARAMETER :: M75N9TAye = 17604 + INTEGER(IntKi), PARAMETER :: M76N1TAye = 17605 + INTEGER(IntKi), PARAMETER :: M76N2TAye = 17606 + INTEGER(IntKi), PARAMETER :: M76N3TAye = 17607 + INTEGER(IntKi), PARAMETER :: M76N4TAye = 17608 + INTEGER(IntKi), PARAMETER :: M76N5TAye = 17609 + INTEGER(IntKi), PARAMETER :: M76N6TAye = 17610 + INTEGER(IntKi), PARAMETER :: M76N7TAye = 17611 + INTEGER(IntKi), PARAMETER :: M76N8TAye = 17612 + INTEGER(IntKi), PARAMETER :: M76N9TAye = 17613 + INTEGER(IntKi), PARAMETER :: M77N1TAye = 17614 + INTEGER(IntKi), PARAMETER :: M77N2TAye = 17615 + INTEGER(IntKi), PARAMETER :: M77N3TAye = 17616 + INTEGER(IntKi), PARAMETER :: M77N4TAye = 17617 + INTEGER(IntKi), PARAMETER :: M77N5TAye = 17618 + INTEGER(IntKi), PARAMETER :: M77N6TAye = 17619 + INTEGER(IntKi), PARAMETER :: M77N7TAye = 17620 + INTEGER(IntKi), PARAMETER :: M77N8TAye = 17621 + INTEGER(IntKi), PARAMETER :: M77N9TAye = 17622 + INTEGER(IntKi), PARAMETER :: M78N1TAye = 17623 + INTEGER(IntKi), PARAMETER :: M78N2TAye = 17624 + INTEGER(IntKi), PARAMETER :: M78N3TAye = 17625 + INTEGER(IntKi), PARAMETER :: M78N4TAye = 17626 + INTEGER(IntKi), PARAMETER :: M78N5TAye = 17627 + INTEGER(IntKi), PARAMETER :: M78N6TAye = 17628 + INTEGER(IntKi), PARAMETER :: M78N7TAye = 17629 + INTEGER(IntKi), PARAMETER :: M78N8TAye = 17630 + INTEGER(IntKi), PARAMETER :: M78N9TAye = 17631 + INTEGER(IntKi), PARAMETER :: M79N1TAye = 17632 + INTEGER(IntKi), PARAMETER :: M79N2TAye = 17633 + INTEGER(IntKi), PARAMETER :: M79N3TAye = 17634 + INTEGER(IntKi), PARAMETER :: M79N4TAye = 17635 + INTEGER(IntKi), PARAMETER :: M79N5TAye = 17636 + INTEGER(IntKi), PARAMETER :: M79N6TAye = 17637 + INTEGER(IntKi), PARAMETER :: M79N7TAye = 17638 + INTEGER(IntKi), PARAMETER :: M79N8TAye = 17639 + INTEGER(IntKi), PARAMETER :: M79N9TAye = 17640 + INTEGER(IntKi), PARAMETER :: M80N1TAye = 17641 + INTEGER(IntKi), PARAMETER :: M80N2TAye = 17642 + INTEGER(IntKi), PARAMETER :: M80N3TAye = 17643 + INTEGER(IntKi), PARAMETER :: M80N4TAye = 17644 + INTEGER(IntKi), PARAMETER :: M80N5TAye = 17645 + INTEGER(IntKi), PARAMETER :: M80N6TAye = 17646 + INTEGER(IntKi), PARAMETER :: M80N7TAye = 17647 + INTEGER(IntKi), PARAMETER :: M80N8TAye = 17648 + INTEGER(IntKi), PARAMETER :: M80N9TAye = 17649 + INTEGER(IntKi), PARAMETER :: M81N1TAye = 17650 + INTEGER(IntKi), PARAMETER :: M81N2TAye = 17651 + INTEGER(IntKi), PARAMETER :: M81N3TAye = 17652 + INTEGER(IntKi), PARAMETER :: M81N4TAye = 17653 + INTEGER(IntKi), PARAMETER :: M81N5TAye = 17654 + INTEGER(IntKi), PARAMETER :: M81N6TAye = 17655 + INTEGER(IntKi), PARAMETER :: M81N7TAye = 17656 + INTEGER(IntKi), PARAMETER :: M81N8TAye = 17657 + INTEGER(IntKi), PARAMETER :: M81N9TAye = 17658 + INTEGER(IntKi), PARAMETER :: M82N1TAye = 17659 + INTEGER(IntKi), PARAMETER :: M82N2TAye = 17660 + INTEGER(IntKi), PARAMETER :: M82N3TAye = 17661 + INTEGER(IntKi), PARAMETER :: M82N4TAye = 17662 + INTEGER(IntKi), PARAMETER :: M82N5TAye = 17663 + INTEGER(IntKi), PARAMETER :: M82N6TAye = 17664 + INTEGER(IntKi), PARAMETER :: M82N7TAye = 17665 + INTEGER(IntKi), PARAMETER :: M82N8TAye = 17666 + INTEGER(IntKi), PARAMETER :: M82N9TAye = 17667 + INTEGER(IntKi), PARAMETER :: M83N1TAye = 17668 + INTEGER(IntKi), PARAMETER :: M83N2TAye = 17669 + INTEGER(IntKi), PARAMETER :: M83N3TAye = 17670 + INTEGER(IntKi), PARAMETER :: M83N4TAye = 17671 + INTEGER(IntKi), PARAMETER :: M83N5TAye = 17672 + INTEGER(IntKi), PARAMETER :: M83N6TAye = 17673 + INTEGER(IntKi), PARAMETER :: M83N7TAye = 17674 + INTEGER(IntKi), PARAMETER :: M83N8TAye = 17675 + INTEGER(IntKi), PARAMETER :: M83N9TAye = 17676 + INTEGER(IntKi), PARAMETER :: M84N1TAye = 17677 + INTEGER(IntKi), PARAMETER :: M84N2TAye = 17678 + INTEGER(IntKi), PARAMETER :: M84N3TAye = 17679 + INTEGER(IntKi), PARAMETER :: M84N4TAye = 17680 + INTEGER(IntKi), PARAMETER :: M84N5TAye = 17681 + INTEGER(IntKi), PARAMETER :: M84N6TAye = 17682 + INTEGER(IntKi), PARAMETER :: M84N7TAye = 17683 + INTEGER(IntKi), PARAMETER :: M84N8TAye = 17684 + INTEGER(IntKi), PARAMETER :: M84N9TAye = 17685 + INTEGER(IntKi), PARAMETER :: M85N1TAye = 17686 + INTEGER(IntKi), PARAMETER :: M85N2TAye = 17687 + INTEGER(IntKi), PARAMETER :: M85N3TAye = 17688 + INTEGER(IntKi), PARAMETER :: M85N4TAye = 17689 + INTEGER(IntKi), PARAMETER :: M85N5TAye = 17690 + INTEGER(IntKi), PARAMETER :: M85N6TAye = 17691 + INTEGER(IntKi), PARAMETER :: M85N7TAye = 17692 + INTEGER(IntKi), PARAMETER :: M85N8TAye = 17693 + INTEGER(IntKi), PARAMETER :: M85N9TAye = 17694 + INTEGER(IntKi), PARAMETER :: M86N1TAye = 17695 + INTEGER(IntKi), PARAMETER :: M86N2TAye = 17696 + INTEGER(IntKi), PARAMETER :: M86N3TAye = 17697 + INTEGER(IntKi), PARAMETER :: M86N4TAye = 17698 + INTEGER(IntKi), PARAMETER :: M86N5TAye = 17699 + INTEGER(IntKi), PARAMETER :: M86N6TAye = 17700 + INTEGER(IntKi), PARAMETER :: M86N7TAye = 17701 + INTEGER(IntKi), PARAMETER :: M86N8TAye = 17702 + INTEGER(IntKi), PARAMETER :: M86N9TAye = 17703 + INTEGER(IntKi), PARAMETER :: M87N1TAye = 17704 + INTEGER(IntKi), PARAMETER :: M87N2TAye = 17705 + INTEGER(IntKi), PARAMETER :: M87N3TAye = 17706 + INTEGER(IntKi), PARAMETER :: M87N4TAye = 17707 + INTEGER(IntKi), PARAMETER :: M87N5TAye = 17708 + INTEGER(IntKi), PARAMETER :: M87N6TAye = 17709 + INTEGER(IntKi), PARAMETER :: M87N7TAye = 17710 + INTEGER(IntKi), PARAMETER :: M87N8TAye = 17711 + INTEGER(IntKi), PARAMETER :: M87N9TAye = 17712 + INTEGER(IntKi), PARAMETER :: M88N1TAye = 17713 + INTEGER(IntKi), PARAMETER :: M88N2TAye = 17714 + INTEGER(IntKi), PARAMETER :: M88N3TAye = 17715 + INTEGER(IntKi), PARAMETER :: M88N4TAye = 17716 + INTEGER(IntKi), PARAMETER :: M88N5TAye = 17717 + INTEGER(IntKi), PARAMETER :: M88N6TAye = 17718 + INTEGER(IntKi), PARAMETER :: M88N7TAye = 17719 + INTEGER(IntKi), PARAMETER :: M88N8TAye = 17720 + INTEGER(IntKi), PARAMETER :: M88N9TAye = 17721 + INTEGER(IntKi), PARAMETER :: M89N1TAye = 17722 + INTEGER(IntKi), PARAMETER :: M89N2TAye = 17723 + INTEGER(IntKi), PARAMETER :: M89N3TAye = 17724 + INTEGER(IntKi), PARAMETER :: M89N4TAye = 17725 + INTEGER(IntKi), PARAMETER :: M89N5TAye = 17726 + INTEGER(IntKi), PARAMETER :: M89N6TAye = 17727 + INTEGER(IntKi), PARAMETER :: M89N7TAye = 17728 + INTEGER(IntKi), PARAMETER :: M89N8TAye = 17729 + INTEGER(IntKi), PARAMETER :: M89N9TAye = 17730 + INTEGER(IntKi), PARAMETER :: M90N1TAye = 17731 + INTEGER(IntKi), PARAMETER :: M90N2TAye = 17732 + INTEGER(IntKi), PARAMETER :: M90N3TAye = 17733 + INTEGER(IntKi), PARAMETER :: M90N4TAye = 17734 + INTEGER(IntKi), PARAMETER :: M90N5TAye = 17735 + INTEGER(IntKi), PARAMETER :: M90N6TAye = 17736 + INTEGER(IntKi), PARAMETER :: M90N7TAye = 17737 + INTEGER(IntKi), PARAMETER :: M90N8TAye = 17738 + INTEGER(IntKi), PARAMETER :: M90N9TAye = 17739 + INTEGER(IntKi), PARAMETER :: M91N1TAye = 17740 + INTEGER(IntKi), PARAMETER :: M91N2TAye = 17741 + INTEGER(IntKi), PARAMETER :: M91N3TAye = 17742 + INTEGER(IntKi), PARAMETER :: M91N4TAye = 17743 + INTEGER(IntKi), PARAMETER :: M91N5TAye = 17744 + INTEGER(IntKi), PARAMETER :: M91N6TAye = 17745 + INTEGER(IntKi), PARAMETER :: M91N7TAye = 17746 + INTEGER(IntKi), PARAMETER :: M91N8TAye = 17747 + INTEGER(IntKi), PARAMETER :: M91N9TAye = 17748 + INTEGER(IntKi), PARAMETER :: M92N1TAye = 17749 + INTEGER(IntKi), PARAMETER :: M92N2TAye = 17750 + INTEGER(IntKi), PARAMETER :: M92N3TAye = 17751 + INTEGER(IntKi), PARAMETER :: M92N4TAye = 17752 + INTEGER(IntKi), PARAMETER :: M92N5TAye = 17753 + INTEGER(IntKi), PARAMETER :: M92N6TAye = 17754 + INTEGER(IntKi), PARAMETER :: M92N7TAye = 17755 + INTEGER(IntKi), PARAMETER :: M92N8TAye = 17756 + INTEGER(IntKi), PARAMETER :: M92N9TAye = 17757 + INTEGER(IntKi), PARAMETER :: M93N1TAye = 17758 + INTEGER(IntKi), PARAMETER :: M93N2TAye = 17759 + INTEGER(IntKi), PARAMETER :: M93N3TAye = 17760 + INTEGER(IntKi), PARAMETER :: M93N4TAye = 17761 + INTEGER(IntKi), PARAMETER :: M93N5TAye = 17762 + INTEGER(IntKi), PARAMETER :: M93N6TAye = 17763 + INTEGER(IntKi), PARAMETER :: M93N7TAye = 17764 + INTEGER(IntKi), PARAMETER :: M93N8TAye = 17765 + INTEGER(IntKi), PARAMETER :: M93N9TAye = 17766 + INTEGER(IntKi), PARAMETER :: M94N1TAye = 17767 + INTEGER(IntKi), PARAMETER :: M94N2TAye = 17768 + INTEGER(IntKi), PARAMETER :: M94N3TAye = 17769 + INTEGER(IntKi), PARAMETER :: M94N4TAye = 17770 + INTEGER(IntKi), PARAMETER :: M94N5TAye = 17771 + INTEGER(IntKi), PARAMETER :: M94N6TAye = 17772 + INTEGER(IntKi), PARAMETER :: M94N7TAye = 17773 + INTEGER(IntKi), PARAMETER :: M94N8TAye = 17774 + INTEGER(IntKi), PARAMETER :: M94N9TAye = 17775 + INTEGER(IntKi), PARAMETER :: M95N1TAye = 17776 + INTEGER(IntKi), PARAMETER :: M95N2TAye = 17777 + INTEGER(IntKi), PARAMETER :: M95N3TAye = 17778 + INTEGER(IntKi), PARAMETER :: M95N4TAye = 17779 + INTEGER(IntKi), PARAMETER :: M95N5TAye = 17780 + INTEGER(IntKi), PARAMETER :: M95N6TAye = 17781 + INTEGER(IntKi), PARAMETER :: M95N7TAye = 17782 + INTEGER(IntKi), PARAMETER :: M95N8TAye = 17783 + INTEGER(IntKi), PARAMETER :: M95N9TAye = 17784 + INTEGER(IntKi), PARAMETER :: M96N1TAye = 17785 + INTEGER(IntKi), PARAMETER :: M96N2TAye = 17786 + INTEGER(IntKi), PARAMETER :: M96N3TAye = 17787 + INTEGER(IntKi), PARAMETER :: M96N4TAye = 17788 + INTEGER(IntKi), PARAMETER :: M96N5TAye = 17789 + INTEGER(IntKi), PARAMETER :: M96N6TAye = 17790 + INTEGER(IntKi), PARAMETER :: M96N7TAye = 17791 + INTEGER(IntKi), PARAMETER :: M96N8TAye = 17792 + INTEGER(IntKi), PARAMETER :: M96N9TAye = 17793 + INTEGER(IntKi), PARAMETER :: M97N1TAye = 17794 + INTEGER(IntKi), PARAMETER :: M97N2TAye = 17795 + INTEGER(IntKi), PARAMETER :: M97N3TAye = 17796 + INTEGER(IntKi), PARAMETER :: M97N4TAye = 17797 + INTEGER(IntKi), PARAMETER :: M97N5TAye = 17798 + INTEGER(IntKi), PARAMETER :: M97N6TAye = 17799 + INTEGER(IntKi), PARAMETER :: M97N7TAye = 17800 + INTEGER(IntKi), PARAMETER :: M97N8TAye = 17801 + INTEGER(IntKi), PARAMETER :: M97N9TAye = 17802 + INTEGER(IntKi), PARAMETER :: M98N1TAye = 17803 + INTEGER(IntKi), PARAMETER :: M98N2TAye = 17804 + INTEGER(IntKi), PARAMETER :: M98N3TAye = 17805 + INTEGER(IntKi), PARAMETER :: M98N4TAye = 17806 + INTEGER(IntKi), PARAMETER :: M98N5TAye = 17807 + INTEGER(IntKi), PARAMETER :: M98N6TAye = 17808 + INTEGER(IntKi), PARAMETER :: M98N7TAye = 17809 + INTEGER(IntKi), PARAMETER :: M98N8TAye = 17810 + INTEGER(IntKi), PARAMETER :: M98N9TAye = 17811 + INTEGER(IntKi), PARAMETER :: M99N1TAye = 17812 + INTEGER(IntKi), PARAMETER :: M99N2TAye = 17813 + INTEGER(IntKi), PARAMETER :: M99N3TAye = 17814 + INTEGER(IntKi), PARAMETER :: M99N4TAye = 17815 + INTEGER(IntKi), PARAMETER :: M99N5TAye = 17816 + INTEGER(IntKi), PARAMETER :: M99N6TAye = 17817 + INTEGER(IntKi), PARAMETER :: M99N7TAye = 17818 + INTEGER(IntKi), PARAMETER :: M99N8TAye = 17819 + INTEGER(IntKi), PARAMETER :: M99N9TAye = 17820 + INTEGER(IntKi), PARAMETER :: M01N1TAze = 17821 + INTEGER(IntKi), PARAMETER :: M01N2TAze = 17822 + INTEGER(IntKi), PARAMETER :: M01N3TAze = 17823 + INTEGER(IntKi), PARAMETER :: M01N4TAze = 17824 + INTEGER(IntKi), PARAMETER :: M01N5TAze = 17825 + INTEGER(IntKi), PARAMETER :: M01N6TAze = 17826 + INTEGER(IntKi), PARAMETER :: M01N7TAze = 17827 + INTEGER(IntKi), PARAMETER :: M01N8TAze = 17828 + INTEGER(IntKi), PARAMETER :: M01N9TAze = 17829 + INTEGER(IntKi), PARAMETER :: M02N1TAze = 17830 + INTEGER(IntKi), PARAMETER :: M02N2TAze = 17831 + INTEGER(IntKi), PARAMETER :: M02N3TAze = 17832 + INTEGER(IntKi), PARAMETER :: M02N4TAze = 17833 + INTEGER(IntKi), PARAMETER :: M02N5TAze = 17834 + INTEGER(IntKi), PARAMETER :: M02N6TAze = 17835 + INTEGER(IntKi), PARAMETER :: M02N7TAze = 17836 + INTEGER(IntKi), PARAMETER :: M02N8TAze = 17837 + INTEGER(IntKi), PARAMETER :: M02N9TAze = 17838 + INTEGER(IntKi), PARAMETER :: M03N1TAze = 17839 + INTEGER(IntKi), PARAMETER :: M03N2TAze = 17840 + INTEGER(IntKi), PARAMETER :: M03N3TAze = 17841 + INTEGER(IntKi), PARAMETER :: M03N4TAze = 17842 + INTEGER(IntKi), PARAMETER :: M03N5TAze = 17843 + INTEGER(IntKi), PARAMETER :: M03N6TAze = 17844 + INTEGER(IntKi), PARAMETER :: M03N7TAze = 17845 + INTEGER(IntKi), PARAMETER :: M03N8TAze = 17846 + INTEGER(IntKi), PARAMETER :: M03N9TAze = 17847 + INTEGER(IntKi), PARAMETER :: M04N1TAze = 17848 + INTEGER(IntKi), PARAMETER :: M04N2TAze = 17849 + INTEGER(IntKi), PARAMETER :: M04N3TAze = 17850 + INTEGER(IntKi), PARAMETER :: M04N4TAze = 17851 + INTEGER(IntKi), PARAMETER :: M04N5TAze = 17852 + INTEGER(IntKi), PARAMETER :: M04N6TAze = 17853 + INTEGER(IntKi), PARAMETER :: M04N7TAze = 17854 + INTEGER(IntKi), PARAMETER :: M04N8TAze = 17855 + INTEGER(IntKi), PARAMETER :: M04N9TAze = 17856 + INTEGER(IntKi), PARAMETER :: M05N1TAze = 17857 + INTEGER(IntKi), PARAMETER :: M05N2TAze = 17858 + INTEGER(IntKi), PARAMETER :: M05N3TAze = 17859 + INTEGER(IntKi), PARAMETER :: M05N4TAze = 17860 + INTEGER(IntKi), PARAMETER :: M05N5TAze = 17861 + INTEGER(IntKi), PARAMETER :: M05N6TAze = 17862 + INTEGER(IntKi), PARAMETER :: M05N7TAze = 17863 + INTEGER(IntKi), PARAMETER :: M05N8TAze = 17864 + INTEGER(IntKi), PARAMETER :: M05N9TAze = 17865 + INTEGER(IntKi), PARAMETER :: M06N1TAze = 17866 + INTEGER(IntKi), PARAMETER :: M06N2TAze = 17867 + INTEGER(IntKi), PARAMETER :: M06N3TAze = 17868 + INTEGER(IntKi), PARAMETER :: M06N4TAze = 17869 + INTEGER(IntKi), PARAMETER :: M06N5TAze = 17870 + INTEGER(IntKi), PARAMETER :: M06N6TAze = 17871 + INTEGER(IntKi), PARAMETER :: M06N7TAze = 17872 + INTEGER(IntKi), PARAMETER :: M06N8TAze = 17873 + INTEGER(IntKi), PARAMETER :: M06N9TAze = 17874 + INTEGER(IntKi), PARAMETER :: M07N1TAze = 17875 + INTEGER(IntKi), PARAMETER :: M07N2TAze = 17876 + INTEGER(IntKi), PARAMETER :: M07N3TAze = 17877 + INTEGER(IntKi), PARAMETER :: M07N4TAze = 17878 + INTEGER(IntKi), PARAMETER :: M07N5TAze = 17879 + INTEGER(IntKi), PARAMETER :: M07N6TAze = 17880 + INTEGER(IntKi), PARAMETER :: M07N7TAze = 17881 + INTEGER(IntKi), PARAMETER :: M07N8TAze = 17882 + INTEGER(IntKi), PARAMETER :: M07N9TAze = 17883 + INTEGER(IntKi), PARAMETER :: M08N1TAze = 17884 + INTEGER(IntKi), PARAMETER :: M08N2TAze = 17885 + INTEGER(IntKi), PARAMETER :: M08N3TAze = 17886 + INTEGER(IntKi), PARAMETER :: M08N4TAze = 17887 + INTEGER(IntKi), PARAMETER :: M08N5TAze = 17888 + INTEGER(IntKi), PARAMETER :: M08N6TAze = 17889 + INTEGER(IntKi), PARAMETER :: M08N7TAze = 17890 + INTEGER(IntKi), PARAMETER :: M08N8TAze = 17891 + INTEGER(IntKi), PARAMETER :: M08N9TAze = 17892 + INTEGER(IntKi), PARAMETER :: M09N1TAze = 17893 + INTEGER(IntKi), PARAMETER :: M09N2TAze = 17894 + INTEGER(IntKi), PARAMETER :: M09N3TAze = 17895 + INTEGER(IntKi), PARAMETER :: M09N4TAze = 17896 + INTEGER(IntKi), PARAMETER :: M09N5TAze = 17897 + INTEGER(IntKi), PARAMETER :: M09N6TAze = 17898 + INTEGER(IntKi), PARAMETER :: M09N7TAze = 17899 + INTEGER(IntKi), PARAMETER :: M09N8TAze = 17900 + INTEGER(IntKi), PARAMETER :: M09N9TAze = 17901 + INTEGER(IntKi), PARAMETER :: M10N1TAze = 17902 + INTEGER(IntKi), PARAMETER :: M10N2TAze = 17903 + INTEGER(IntKi), PARAMETER :: M10N3TAze = 17904 + INTEGER(IntKi), PARAMETER :: M10N4TAze = 17905 + INTEGER(IntKi), PARAMETER :: M10N5TAze = 17906 + INTEGER(IntKi), PARAMETER :: M10N6TAze = 17907 + INTEGER(IntKi), PARAMETER :: M10N7TAze = 17908 + INTEGER(IntKi), PARAMETER :: M10N8TAze = 17909 + INTEGER(IntKi), PARAMETER :: M10N9TAze = 17910 + INTEGER(IntKi), PARAMETER :: M11N1TAze = 17911 + INTEGER(IntKi), PARAMETER :: M11N2TAze = 17912 + INTEGER(IntKi), PARAMETER :: M11N3TAze = 17913 + INTEGER(IntKi), PARAMETER :: M11N4TAze = 17914 + INTEGER(IntKi), PARAMETER :: M11N5TAze = 17915 + INTEGER(IntKi), PARAMETER :: M11N6TAze = 17916 + INTEGER(IntKi), PARAMETER :: M11N7TAze = 17917 + INTEGER(IntKi), PARAMETER :: M11N8TAze = 17918 + INTEGER(IntKi), PARAMETER :: M11N9TAze = 17919 + INTEGER(IntKi), PARAMETER :: M12N1TAze = 17920 + INTEGER(IntKi), PARAMETER :: M12N2TAze = 17921 + INTEGER(IntKi), PARAMETER :: M12N3TAze = 17922 + INTEGER(IntKi), PARAMETER :: M12N4TAze = 17923 + INTEGER(IntKi), PARAMETER :: M12N5TAze = 17924 + INTEGER(IntKi), PARAMETER :: M12N6TAze = 17925 + INTEGER(IntKi), PARAMETER :: M12N7TAze = 17926 + INTEGER(IntKi), PARAMETER :: M12N8TAze = 17927 + INTEGER(IntKi), PARAMETER :: M12N9TAze = 17928 + INTEGER(IntKi), PARAMETER :: M13N1TAze = 17929 + INTEGER(IntKi), PARAMETER :: M13N2TAze = 17930 + INTEGER(IntKi), PARAMETER :: M13N3TAze = 17931 + INTEGER(IntKi), PARAMETER :: M13N4TAze = 17932 + INTEGER(IntKi), PARAMETER :: M13N5TAze = 17933 + INTEGER(IntKi), PARAMETER :: M13N6TAze = 17934 + INTEGER(IntKi), PARAMETER :: M13N7TAze = 17935 + INTEGER(IntKi), PARAMETER :: M13N8TAze = 17936 + INTEGER(IntKi), PARAMETER :: M13N9TAze = 17937 + INTEGER(IntKi), PARAMETER :: M14N1TAze = 17938 + INTEGER(IntKi), PARAMETER :: M14N2TAze = 17939 + INTEGER(IntKi), PARAMETER :: M14N3TAze = 17940 + INTEGER(IntKi), PARAMETER :: M14N4TAze = 17941 + INTEGER(IntKi), PARAMETER :: M14N5TAze = 17942 + INTEGER(IntKi), PARAMETER :: M14N6TAze = 17943 + INTEGER(IntKi), PARAMETER :: M14N7TAze = 17944 + INTEGER(IntKi), PARAMETER :: M14N8TAze = 17945 + INTEGER(IntKi), PARAMETER :: M14N9TAze = 17946 + INTEGER(IntKi), PARAMETER :: M15N1TAze = 17947 + INTEGER(IntKi), PARAMETER :: M15N2TAze = 17948 + INTEGER(IntKi), PARAMETER :: M15N3TAze = 17949 + INTEGER(IntKi), PARAMETER :: M15N4TAze = 17950 + INTEGER(IntKi), PARAMETER :: M15N5TAze = 17951 + INTEGER(IntKi), PARAMETER :: M15N6TAze = 17952 + INTEGER(IntKi), PARAMETER :: M15N7TAze = 17953 + INTEGER(IntKi), PARAMETER :: M15N8TAze = 17954 + INTEGER(IntKi), PARAMETER :: M15N9TAze = 17955 + INTEGER(IntKi), PARAMETER :: M16N1TAze = 17956 + INTEGER(IntKi), PARAMETER :: M16N2TAze = 17957 + INTEGER(IntKi), PARAMETER :: M16N3TAze = 17958 + INTEGER(IntKi), PARAMETER :: M16N4TAze = 17959 + INTEGER(IntKi), PARAMETER :: M16N5TAze = 17960 + INTEGER(IntKi), PARAMETER :: M16N6TAze = 17961 + INTEGER(IntKi), PARAMETER :: M16N7TAze = 17962 + INTEGER(IntKi), PARAMETER :: M16N8TAze = 17963 + INTEGER(IntKi), PARAMETER :: M16N9TAze = 17964 + INTEGER(IntKi), PARAMETER :: M17N1TAze = 17965 + INTEGER(IntKi), PARAMETER :: M17N2TAze = 17966 + INTEGER(IntKi), PARAMETER :: M17N3TAze = 17967 + INTEGER(IntKi), PARAMETER :: M17N4TAze = 17968 + INTEGER(IntKi), PARAMETER :: M17N5TAze = 17969 + INTEGER(IntKi), PARAMETER :: M17N6TAze = 17970 + INTEGER(IntKi), PARAMETER :: M17N7TAze = 17971 + INTEGER(IntKi), PARAMETER :: M17N8TAze = 17972 + INTEGER(IntKi), PARAMETER :: M17N9TAze = 17973 + INTEGER(IntKi), PARAMETER :: M18N1TAze = 17974 + INTEGER(IntKi), PARAMETER :: M18N2TAze = 17975 + INTEGER(IntKi), PARAMETER :: M18N3TAze = 17976 + INTEGER(IntKi), PARAMETER :: M18N4TAze = 17977 + INTEGER(IntKi), PARAMETER :: M18N5TAze = 17978 + INTEGER(IntKi), PARAMETER :: M18N6TAze = 17979 + INTEGER(IntKi), PARAMETER :: M18N7TAze = 17980 + INTEGER(IntKi), PARAMETER :: M18N8TAze = 17981 + INTEGER(IntKi), PARAMETER :: M18N9TAze = 17982 + INTEGER(IntKi), PARAMETER :: M19N1TAze = 17983 + INTEGER(IntKi), PARAMETER :: M19N2TAze = 17984 + INTEGER(IntKi), PARAMETER :: M19N3TAze = 17985 + INTEGER(IntKi), PARAMETER :: M19N4TAze = 17986 + INTEGER(IntKi), PARAMETER :: M19N5TAze = 17987 + INTEGER(IntKi), PARAMETER :: M19N6TAze = 17988 + INTEGER(IntKi), PARAMETER :: M19N7TAze = 17989 + INTEGER(IntKi), PARAMETER :: M19N8TAze = 17990 + INTEGER(IntKi), PARAMETER :: M19N9TAze = 17991 + INTEGER(IntKi), PARAMETER :: M20N1TAze = 17992 + INTEGER(IntKi), PARAMETER :: M20N2TAze = 17993 + INTEGER(IntKi), PARAMETER :: M20N3TAze = 17994 + INTEGER(IntKi), PARAMETER :: M20N4TAze = 17995 + INTEGER(IntKi), PARAMETER :: M20N5TAze = 17996 + INTEGER(IntKi), PARAMETER :: M20N6TAze = 17997 + INTEGER(IntKi), PARAMETER :: M20N7TAze = 17998 + INTEGER(IntKi), PARAMETER :: M20N8TAze = 17999 + INTEGER(IntKi), PARAMETER :: M20N9TAze = 18000 + INTEGER(IntKi), PARAMETER :: M21N1TAze = 18001 + INTEGER(IntKi), PARAMETER :: M21N2TAze = 18002 + INTEGER(IntKi), PARAMETER :: M21N3TAze = 18003 + INTEGER(IntKi), PARAMETER :: M21N4TAze = 18004 + INTEGER(IntKi), PARAMETER :: M21N5TAze = 18005 + INTEGER(IntKi), PARAMETER :: M21N6TAze = 18006 + INTEGER(IntKi), PARAMETER :: M21N7TAze = 18007 + INTEGER(IntKi), PARAMETER :: M21N8TAze = 18008 + INTEGER(IntKi), PARAMETER :: M21N9TAze = 18009 + INTEGER(IntKi), PARAMETER :: M22N1TAze = 18010 + INTEGER(IntKi), PARAMETER :: M22N2TAze = 18011 + INTEGER(IntKi), PARAMETER :: M22N3TAze = 18012 + INTEGER(IntKi), PARAMETER :: M22N4TAze = 18013 + INTEGER(IntKi), PARAMETER :: M22N5TAze = 18014 + INTEGER(IntKi), PARAMETER :: M22N6TAze = 18015 + INTEGER(IntKi), PARAMETER :: M22N7TAze = 18016 + INTEGER(IntKi), PARAMETER :: M22N8TAze = 18017 + INTEGER(IntKi), PARAMETER :: M22N9TAze = 18018 + INTEGER(IntKi), PARAMETER :: M23N1TAze = 18019 + INTEGER(IntKi), PARAMETER :: M23N2TAze = 18020 + INTEGER(IntKi), PARAMETER :: M23N3TAze = 18021 + INTEGER(IntKi), PARAMETER :: M23N4TAze = 18022 + INTEGER(IntKi), PARAMETER :: M23N5TAze = 18023 + INTEGER(IntKi), PARAMETER :: M23N6TAze = 18024 + INTEGER(IntKi), PARAMETER :: M23N7TAze = 18025 + INTEGER(IntKi), PARAMETER :: M23N8TAze = 18026 + INTEGER(IntKi), PARAMETER :: M23N9TAze = 18027 + INTEGER(IntKi), PARAMETER :: M24N1TAze = 18028 + INTEGER(IntKi), PARAMETER :: M24N2TAze = 18029 + INTEGER(IntKi), PARAMETER :: M24N3TAze = 18030 + INTEGER(IntKi), PARAMETER :: M24N4TAze = 18031 + INTEGER(IntKi), PARAMETER :: M24N5TAze = 18032 + INTEGER(IntKi), PARAMETER :: M24N6TAze = 18033 + INTEGER(IntKi), PARAMETER :: M24N7TAze = 18034 + INTEGER(IntKi), PARAMETER :: M24N8TAze = 18035 + INTEGER(IntKi), PARAMETER :: M24N9TAze = 18036 + INTEGER(IntKi), PARAMETER :: M25N1TAze = 18037 + INTEGER(IntKi), PARAMETER :: M25N2TAze = 18038 + INTEGER(IntKi), PARAMETER :: M25N3TAze = 18039 + INTEGER(IntKi), PARAMETER :: M25N4TAze = 18040 + INTEGER(IntKi), PARAMETER :: M25N5TAze = 18041 + INTEGER(IntKi), PARAMETER :: M25N6TAze = 18042 + INTEGER(IntKi), PARAMETER :: M25N7TAze = 18043 + INTEGER(IntKi), PARAMETER :: M25N8TAze = 18044 + INTEGER(IntKi), PARAMETER :: M25N9TAze = 18045 + INTEGER(IntKi), PARAMETER :: M26N1TAze = 18046 + INTEGER(IntKi), PARAMETER :: M26N2TAze = 18047 + INTEGER(IntKi), PARAMETER :: M26N3TAze = 18048 + INTEGER(IntKi), PARAMETER :: M26N4TAze = 18049 + INTEGER(IntKi), PARAMETER :: M26N5TAze = 18050 + INTEGER(IntKi), PARAMETER :: M26N6TAze = 18051 + INTEGER(IntKi), PARAMETER :: M26N7TAze = 18052 + INTEGER(IntKi), PARAMETER :: M26N8TAze = 18053 + INTEGER(IntKi), PARAMETER :: M26N9TAze = 18054 + INTEGER(IntKi), PARAMETER :: M27N1TAze = 18055 + INTEGER(IntKi), PARAMETER :: M27N2TAze = 18056 + INTEGER(IntKi), PARAMETER :: M27N3TAze = 18057 + INTEGER(IntKi), PARAMETER :: M27N4TAze = 18058 + INTEGER(IntKi), PARAMETER :: M27N5TAze = 18059 + INTEGER(IntKi), PARAMETER :: M27N6TAze = 18060 + INTEGER(IntKi), PARAMETER :: M27N7TAze = 18061 + INTEGER(IntKi), PARAMETER :: M27N8TAze = 18062 + INTEGER(IntKi), PARAMETER :: M27N9TAze = 18063 + INTEGER(IntKi), PARAMETER :: M28N1TAze = 18064 + INTEGER(IntKi), PARAMETER :: M28N2TAze = 18065 + INTEGER(IntKi), PARAMETER :: M28N3TAze = 18066 + INTEGER(IntKi), PARAMETER :: M28N4TAze = 18067 + INTEGER(IntKi), PARAMETER :: M28N5TAze = 18068 + INTEGER(IntKi), PARAMETER :: M28N6TAze = 18069 + INTEGER(IntKi), PARAMETER :: M28N7TAze = 18070 + INTEGER(IntKi), PARAMETER :: M28N8TAze = 18071 + INTEGER(IntKi), PARAMETER :: M28N9TAze = 18072 + INTEGER(IntKi), PARAMETER :: M29N1TAze = 18073 + INTEGER(IntKi), PARAMETER :: M29N2TAze = 18074 + INTEGER(IntKi), PARAMETER :: M29N3TAze = 18075 + INTEGER(IntKi), PARAMETER :: M29N4TAze = 18076 + INTEGER(IntKi), PARAMETER :: M29N5TAze = 18077 + INTEGER(IntKi), PARAMETER :: M29N6TAze = 18078 + INTEGER(IntKi), PARAMETER :: M29N7TAze = 18079 + INTEGER(IntKi), PARAMETER :: M29N8TAze = 18080 + INTEGER(IntKi), PARAMETER :: M29N9TAze = 18081 + INTEGER(IntKi), PARAMETER :: M30N1TAze = 18082 + INTEGER(IntKi), PARAMETER :: M30N2TAze = 18083 + INTEGER(IntKi), PARAMETER :: M30N3TAze = 18084 + INTEGER(IntKi), PARAMETER :: M30N4TAze = 18085 + INTEGER(IntKi), PARAMETER :: M30N5TAze = 18086 + INTEGER(IntKi), PARAMETER :: M30N6TAze = 18087 + INTEGER(IntKi), PARAMETER :: M30N7TAze = 18088 + INTEGER(IntKi), PARAMETER :: M30N8TAze = 18089 + INTEGER(IntKi), PARAMETER :: M30N9TAze = 18090 + INTEGER(IntKi), PARAMETER :: M31N1TAze = 18091 + INTEGER(IntKi), PARAMETER :: M31N2TAze = 18092 + INTEGER(IntKi), PARAMETER :: M31N3TAze = 18093 + INTEGER(IntKi), PARAMETER :: M31N4TAze = 18094 + INTEGER(IntKi), PARAMETER :: M31N5TAze = 18095 + INTEGER(IntKi), PARAMETER :: M31N6TAze = 18096 + INTEGER(IntKi), PARAMETER :: M31N7TAze = 18097 + INTEGER(IntKi), PARAMETER :: M31N8TAze = 18098 + INTEGER(IntKi), PARAMETER :: M31N9TAze = 18099 + INTEGER(IntKi), PARAMETER :: M32N1TAze = 18100 + INTEGER(IntKi), PARAMETER :: M32N2TAze = 18101 + INTEGER(IntKi), PARAMETER :: M32N3TAze = 18102 + INTEGER(IntKi), PARAMETER :: M32N4TAze = 18103 + INTEGER(IntKi), PARAMETER :: M32N5TAze = 18104 + INTEGER(IntKi), PARAMETER :: M32N6TAze = 18105 + INTEGER(IntKi), PARAMETER :: M32N7TAze = 18106 + INTEGER(IntKi), PARAMETER :: M32N8TAze = 18107 + INTEGER(IntKi), PARAMETER :: M32N9TAze = 18108 + INTEGER(IntKi), PARAMETER :: M33N1TAze = 18109 + INTEGER(IntKi), PARAMETER :: M33N2TAze = 18110 + INTEGER(IntKi), PARAMETER :: M33N3TAze = 18111 + INTEGER(IntKi), PARAMETER :: M33N4TAze = 18112 + INTEGER(IntKi), PARAMETER :: M33N5TAze = 18113 + INTEGER(IntKi), PARAMETER :: M33N6TAze = 18114 + INTEGER(IntKi), PARAMETER :: M33N7TAze = 18115 + INTEGER(IntKi), PARAMETER :: M33N8TAze = 18116 + INTEGER(IntKi), PARAMETER :: M33N9TAze = 18117 + INTEGER(IntKi), PARAMETER :: M34N1TAze = 18118 + INTEGER(IntKi), PARAMETER :: M34N2TAze = 18119 + INTEGER(IntKi), PARAMETER :: M34N3TAze = 18120 + INTEGER(IntKi), PARAMETER :: M34N4TAze = 18121 + INTEGER(IntKi), PARAMETER :: M34N5TAze = 18122 + INTEGER(IntKi), PARAMETER :: M34N6TAze = 18123 + INTEGER(IntKi), PARAMETER :: M34N7TAze = 18124 + INTEGER(IntKi), PARAMETER :: M34N8TAze = 18125 + INTEGER(IntKi), PARAMETER :: M34N9TAze = 18126 + INTEGER(IntKi), PARAMETER :: M35N1TAze = 18127 + INTEGER(IntKi), PARAMETER :: M35N2TAze = 18128 + INTEGER(IntKi), PARAMETER :: M35N3TAze = 18129 + INTEGER(IntKi), PARAMETER :: M35N4TAze = 18130 + INTEGER(IntKi), PARAMETER :: M35N5TAze = 18131 + INTEGER(IntKi), PARAMETER :: M35N6TAze = 18132 + INTEGER(IntKi), PARAMETER :: M35N7TAze = 18133 + INTEGER(IntKi), PARAMETER :: M35N8TAze = 18134 + INTEGER(IntKi), PARAMETER :: M35N9TAze = 18135 + INTEGER(IntKi), PARAMETER :: M36N1TAze = 18136 + INTEGER(IntKi), PARAMETER :: M36N2TAze = 18137 + INTEGER(IntKi), PARAMETER :: M36N3TAze = 18138 + INTEGER(IntKi), PARAMETER :: M36N4TAze = 18139 + INTEGER(IntKi), PARAMETER :: M36N5TAze = 18140 + INTEGER(IntKi), PARAMETER :: M36N6TAze = 18141 + INTEGER(IntKi), PARAMETER :: M36N7TAze = 18142 + INTEGER(IntKi), PARAMETER :: M36N8TAze = 18143 + INTEGER(IntKi), PARAMETER :: M36N9TAze = 18144 + INTEGER(IntKi), PARAMETER :: M37N1TAze = 18145 + INTEGER(IntKi), PARAMETER :: M37N2TAze = 18146 + INTEGER(IntKi), PARAMETER :: M37N3TAze = 18147 + INTEGER(IntKi), PARAMETER :: M37N4TAze = 18148 + INTEGER(IntKi), PARAMETER :: M37N5TAze = 18149 + INTEGER(IntKi), PARAMETER :: M37N6TAze = 18150 + INTEGER(IntKi), PARAMETER :: M37N7TAze = 18151 + INTEGER(IntKi), PARAMETER :: M37N8TAze = 18152 + INTEGER(IntKi), PARAMETER :: M37N9TAze = 18153 + INTEGER(IntKi), PARAMETER :: M38N1TAze = 18154 + INTEGER(IntKi), PARAMETER :: M38N2TAze = 18155 + INTEGER(IntKi), PARAMETER :: M38N3TAze = 18156 + INTEGER(IntKi), PARAMETER :: M38N4TAze = 18157 + INTEGER(IntKi), PARAMETER :: M38N5TAze = 18158 + INTEGER(IntKi), PARAMETER :: M38N6TAze = 18159 + INTEGER(IntKi), PARAMETER :: M38N7TAze = 18160 + INTEGER(IntKi), PARAMETER :: M38N8TAze = 18161 + INTEGER(IntKi), PARAMETER :: M38N9TAze = 18162 + INTEGER(IntKi), PARAMETER :: M39N1TAze = 18163 + INTEGER(IntKi), PARAMETER :: M39N2TAze = 18164 + INTEGER(IntKi), PARAMETER :: M39N3TAze = 18165 + INTEGER(IntKi), PARAMETER :: M39N4TAze = 18166 + INTEGER(IntKi), PARAMETER :: M39N5TAze = 18167 + INTEGER(IntKi), PARAMETER :: M39N6TAze = 18168 + INTEGER(IntKi), PARAMETER :: M39N7TAze = 18169 + INTEGER(IntKi), PARAMETER :: M39N8TAze = 18170 + INTEGER(IntKi), PARAMETER :: M39N9TAze = 18171 + INTEGER(IntKi), PARAMETER :: M40N1TAze = 18172 + INTEGER(IntKi), PARAMETER :: M40N2TAze = 18173 + INTEGER(IntKi), PARAMETER :: M40N3TAze = 18174 + INTEGER(IntKi), PARAMETER :: M40N4TAze = 18175 + INTEGER(IntKi), PARAMETER :: M40N5TAze = 18176 + INTEGER(IntKi), PARAMETER :: M40N6TAze = 18177 + INTEGER(IntKi), PARAMETER :: M40N7TAze = 18178 + INTEGER(IntKi), PARAMETER :: M40N8TAze = 18179 + INTEGER(IntKi), PARAMETER :: M40N9TAze = 18180 + INTEGER(IntKi), PARAMETER :: M41N1TAze = 18181 + INTEGER(IntKi), PARAMETER :: M41N2TAze = 18182 + INTEGER(IntKi), PARAMETER :: M41N3TAze = 18183 + INTEGER(IntKi), PARAMETER :: M41N4TAze = 18184 + INTEGER(IntKi), PARAMETER :: M41N5TAze = 18185 + INTEGER(IntKi), PARAMETER :: M41N6TAze = 18186 + INTEGER(IntKi), PARAMETER :: M41N7TAze = 18187 + INTEGER(IntKi), PARAMETER :: M41N8TAze = 18188 + INTEGER(IntKi), PARAMETER :: M41N9TAze = 18189 + INTEGER(IntKi), PARAMETER :: M42N1TAze = 18190 + INTEGER(IntKi), PARAMETER :: M42N2TAze = 18191 + INTEGER(IntKi), PARAMETER :: M42N3TAze = 18192 + INTEGER(IntKi), PARAMETER :: M42N4TAze = 18193 + INTEGER(IntKi), PARAMETER :: M42N5TAze = 18194 + INTEGER(IntKi), PARAMETER :: M42N6TAze = 18195 + INTEGER(IntKi), PARAMETER :: M42N7TAze = 18196 + INTEGER(IntKi), PARAMETER :: M42N8TAze = 18197 + INTEGER(IntKi), PARAMETER :: M42N9TAze = 18198 + INTEGER(IntKi), PARAMETER :: M43N1TAze = 18199 + INTEGER(IntKi), PARAMETER :: M43N2TAze = 18200 + INTEGER(IntKi), PARAMETER :: M43N3TAze = 18201 + INTEGER(IntKi), PARAMETER :: M43N4TAze = 18202 + INTEGER(IntKi), PARAMETER :: M43N5TAze = 18203 + INTEGER(IntKi), PARAMETER :: M43N6TAze = 18204 + INTEGER(IntKi), PARAMETER :: M43N7TAze = 18205 + INTEGER(IntKi), PARAMETER :: M43N8TAze = 18206 + INTEGER(IntKi), PARAMETER :: M43N9TAze = 18207 + INTEGER(IntKi), PARAMETER :: M44N1TAze = 18208 + INTEGER(IntKi), PARAMETER :: M44N2TAze = 18209 + INTEGER(IntKi), PARAMETER :: M44N3TAze = 18210 + INTEGER(IntKi), PARAMETER :: M44N4TAze = 18211 + INTEGER(IntKi), PARAMETER :: M44N5TAze = 18212 + INTEGER(IntKi), PARAMETER :: M44N6TAze = 18213 + INTEGER(IntKi), PARAMETER :: M44N7TAze = 18214 + INTEGER(IntKi), PARAMETER :: M44N8TAze = 18215 + INTEGER(IntKi), PARAMETER :: M44N9TAze = 18216 + INTEGER(IntKi), PARAMETER :: M45N1TAze = 18217 + INTEGER(IntKi), PARAMETER :: M45N2TAze = 18218 + INTEGER(IntKi), PARAMETER :: M45N3TAze = 18219 + INTEGER(IntKi), PARAMETER :: M45N4TAze = 18220 + INTEGER(IntKi), PARAMETER :: M45N5TAze = 18221 + INTEGER(IntKi), PARAMETER :: M45N6TAze = 18222 + INTEGER(IntKi), PARAMETER :: M45N7TAze = 18223 + INTEGER(IntKi), PARAMETER :: M45N8TAze = 18224 + INTEGER(IntKi), PARAMETER :: M45N9TAze = 18225 + INTEGER(IntKi), PARAMETER :: M46N1TAze = 18226 + INTEGER(IntKi), PARAMETER :: M46N2TAze = 18227 + INTEGER(IntKi), PARAMETER :: M46N3TAze = 18228 + INTEGER(IntKi), PARAMETER :: M46N4TAze = 18229 + INTEGER(IntKi), PARAMETER :: M46N5TAze = 18230 + INTEGER(IntKi), PARAMETER :: M46N6TAze = 18231 + INTEGER(IntKi), PARAMETER :: M46N7TAze = 18232 + INTEGER(IntKi), PARAMETER :: M46N8TAze = 18233 + INTEGER(IntKi), PARAMETER :: M46N9TAze = 18234 + INTEGER(IntKi), PARAMETER :: M47N1TAze = 18235 + INTEGER(IntKi), PARAMETER :: M47N2TAze = 18236 + INTEGER(IntKi), PARAMETER :: M47N3TAze = 18237 + INTEGER(IntKi), PARAMETER :: M47N4TAze = 18238 + INTEGER(IntKi), PARAMETER :: M47N5TAze = 18239 + INTEGER(IntKi), PARAMETER :: M47N6TAze = 18240 + INTEGER(IntKi), PARAMETER :: M47N7TAze = 18241 + INTEGER(IntKi), PARAMETER :: M47N8TAze = 18242 + INTEGER(IntKi), PARAMETER :: M47N9TAze = 18243 + INTEGER(IntKi), PARAMETER :: M48N1TAze = 18244 + INTEGER(IntKi), PARAMETER :: M48N2TAze = 18245 + INTEGER(IntKi), PARAMETER :: M48N3TAze = 18246 + INTEGER(IntKi), PARAMETER :: M48N4TAze = 18247 + INTEGER(IntKi), PARAMETER :: M48N5TAze = 18248 + INTEGER(IntKi), PARAMETER :: M48N6TAze = 18249 + INTEGER(IntKi), PARAMETER :: M48N7TAze = 18250 + INTEGER(IntKi), PARAMETER :: M48N8TAze = 18251 + INTEGER(IntKi), PARAMETER :: M48N9TAze = 18252 + INTEGER(IntKi), PARAMETER :: M49N1TAze = 18253 + INTEGER(IntKi), PARAMETER :: M49N2TAze = 18254 + INTEGER(IntKi), PARAMETER :: M49N3TAze = 18255 + INTEGER(IntKi), PARAMETER :: M49N4TAze = 18256 + INTEGER(IntKi), PARAMETER :: M49N5TAze = 18257 + INTEGER(IntKi), PARAMETER :: M49N6TAze = 18258 + INTEGER(IntKi), PARAMETER :: M49N7TAze = 18259 + INTEGER(IntKi), PARAMETER :: M49N8TAze = 18260 + INTEGER(IntKi), PARAMETER :: M49N9TAze = 18261 + INTEGER(IntKi), PARAMETER :: M50N1TAze = 18262 + INTEGER(IntKi), PARAMETER :: M50N2TAze = 18263 + INTEGER(IntKi), PARAMETER :: M50N3TAze = 18264 + INTEGER(IntKi), PARAMETER :: M50N4TAze = 18265 + INTEGER(IntKi), PARAMETER :: M50N5TAze = 18266 + INTEGER(IntKi), PARAMETER :: M50N6TAze = 18267 + INTEGER(IntKi), PARAMETER :: M50N7TAze = 18268 + INTEGER(IntKi), PARAMETER :: M50N8TAze = 18269 + INTEGER(IntKi), PARAMETER :: M50N9TAze = 18270 + INTEGER(IntKi), PARAMETER :: M51N1TAze = 18271 + INTEGER(IntKi), PARAMETER :: M51N2TAze = 18272 + INTEGER(IntKi), PARAMETER :: M51N3TAze = 18273 + INTEGER(IntKi), PARAMETER :: M51N4TAze = 18274 + INTEGER(IntKi), PARAMETER :: M51N5TAze = 18275 + INTEGER(IntKi), PARAMETER :: M51N6TAze = 18276 + INTEGER(IntKi), PARAMETER :: M51N7TAze = 18277 + INTEGER(IntKi), PARAMETER :: M51N8TAze = 18278 + INTEGER(IntKi), PARAMETER :: M51N9TAze = 18279 + INTEGER(IntKi), PARAMETER :: M52N1TAze = 18280 + INTEGER(IntKi), PARAMETER :: M52N2TAze = 18281 + INTEGER(IntKi), PARAMETER :: M52N3TAze = 18282 + INTEGER(IntKi), PARAMETER :: M52N4TAze = 18283 + INTEGER(IntKi), PARAMETER :: M52N5TAze = 18284 + INTEGER(IntKi), PARAMETER :: M52N6TAze = 18285 + INTEGER(IntKi), PARAMETER :: M52N7TAze = 18286 + INTEGER(IntKi), PARAMETER :: M52N8TAze = 18287 + INTEGER(IntKi), PARAMETER :: M52N9TAze = 18288 + INTEGER(IntKi), PARAMETER :: M53N1TAze = 18289 + INTEGER(IntKi), PARAMETER :: M53N2TAze = 18290 + INTEGER(IntKi), PARAMETER :: M53N3TAze = 18291 + INTEGER(IntKi), PARAMETER :: M53N4TAze = 18292 + INTEGER(IntKi), PARAMETER :: M53N5TAze = 18293 + INTEGER(IntKi), PARAMETER :: M53N6TAze = 18294 + INTEGER(IntKi), PARAMETER :: M53N7TAze = 18295 + INTEGER(IntKi), PARAMETER :: M53N8TAze = 18296 + INTEGER(IntKi), PARAMETER :: M53N9TAze = 18297 + INTEGER(IntKi), PARAMETER :: M54N1TAze = 18298 + INTEGER(IntKi), PARAMETER :: M54N2TAze = 18299 + INTEGER(IntKi), PARAMETER :: M54N3TAze = 18300 + INTEGER(IntKi), PARAMETER :: M54N4TAze = 18301 + INTEGER(IntKi), PARAMETER :: M54N5TAze = 18302 + INTEGER(IntKi), PARAMETER :: M54N6TAze = 18303 + INTEGER(IntKi), PARAMETER :: M54N7TAze = 18304 + INTEGER(IntKi), PARAMETER :: M54N8TAze = 18305 + INTEGER(IntKi), PARAMETER :: M54N9TAze = 18306 + INTEGER(IntKi), PARAMETER :: M55N1TAze = 18307 + INTEGER(IntKi), PARAMETER :: M55N2TAze = 18308 + INTEGER(IntKi), PARAMETER :: M55N3TAze = 18309 + INTEGER(IntKi), PARAMETER :: M55N4TAze = 18310 + INTEGER(IntKi), PARAMETER :: M55N5TAze = 18311 + INTEGER(IntKi), PARAMETER :: M55N6TAze = 18312 + INTEGER(IntKi), PARAMETER :: M55N7TAze = 18313 + INTEGER(IntKi), PARAMETER :: M55N8TAze = 18314 + INTEGER(IntKi), PARAMETER :: M55N9TAze = 18315 + INTEGER(IntKi), PARAMETER :: M56N1TAze = 18316 + INTEGER(IntKi), PARAMETER :: M56N2TAze = 18317 + INTEGER(IntKi), PARAMETER :: M56N3TAze = 18318 + INTEGER(IntKi), PARAMETER :: M56N4TAze = 18319 + INTEGER(IntKi), PARAMETER :: M56N5TAze = 18320 + INTEGER(IntKi), PARAMETER :: M56N6TAze = 18321 + INTEGER(IntKi), PARAMETER :: M56N7TAze = 18322 + INTEGER(IntKi), PARAMETER :: M56N8TAze = 18323 + INTEGER(IntKi), PARAMETER :: M56N9TAze = 18324 + INTEGER(IntKi), PARAMETER :: M57N1TAze = 18325 + INTEGER(IntKi), PARAMETER :: M57N2TAze = 18326 + INTEGER(IntKi), PARAMETER :: M57N3TAze = 18327 + INTEGER(IntKi), PARAMETER :: M57N4TAze = 18328 + INTEGER(IntKi), PARAMETER :: M57N5TAze = 18329 + INTEGER(IntKi), PARAMETER :: M57N6TAze = 18330 + INTEGER(IntKi), PARAMETER :: M57N7TAze = 18331 + INTEGER(IntKi), PARAMETER :: M57N8TAze = 18332 + INTEGER(IntKi), PARAMETER :: M57N9TAze = 18333 + INTEGER(IntKi), PARAMETER :: M58N1TAze = 18334 + INTEGER(IntKi), PARAMETER :: M58N2TAze = 18335 + INTEGER(IntKi), PARAMETER :: M58N3TAze = 18336 + INTEGER(IntKi), PARAMETER :: M58N4TAze = 18337 + INTEGER(IntKi), PARAMETER :: M58N5TAze = 18338 + INTEGER(IntKi), PARAMETER :: M58N6TAze = 18339 + INTEGER(IntKi), PARAMETER :: M58N7TAze = 18340 + INTEGER(IntKi), PARAMETER :: M58N8TAze = 18341 + INTEGER(IntKi), PARAMETER :: M58N9TAze = 18342 + INTEGER(IntKi), PARAMETER :: M59N1TAze = 18343 + INTEGER(IntKi), PARAMETER :: M59N2TAze = 18344 + INTEGER(IntKi), PARAMETER :: M59N3TAze = 18345 + INTEGER(IntKi), PARAMETER :: M59N4TAze = 18346 + INTEGER(IntKi), PARAMETER :: M59N5TAze = 18347 + INTEGER(IntKi), PARAMETER :: M59N6TAze = 18348 + INTEGER(IntKi), PARAMETER :: M59N7TAze = 18349 + INTEGER(IntKi), PARAMETER :: M59N8TAze = 18350 + INTEGER(IntKi), PARAMETER :: M59N9TAze = 18351 + INTEGER(IntKi), PARAMETER :: M60N1TAze = 18352 + INTEGER(IntKi), PARAMETER :: M60N2TAze = 18353 + INTEGER(IntKi), PARAMETER :: M60N3TAze = 18354 + INTEGER(IntKi), PARAMETER :: M60N4TAze = 18355 + INTEGER(IntKi), PARAMETER :: M60N5TAze = 18356 + INTEGER(IntKi), PARAMETER :: M60N6TAze = 18357 + INTEGER(IntKi), PARAMETER :: M60N7TAze = 18358 + INTEGER(IntKi), PARAMETER :: M60N8TAze = 18359 + INTEGER(IntKi), PARAMETER :: M60N9TAze = 18360 + INTEGER(IntKi), PARAMETER :: M61N1TAze = 18361 + INTEGER(IntKi), PARAMETER :: M61N2TAze = 18362 + INTEGER(IntKi), PARAMETER :: M61N3TAze = 18363 + INTEGER(IntKi), PARAMETER :: M61N4TAze = 18364 + INTEGER(IntKi), PARAMETER :: M61N5TAze = 18365 + INTEGER(IntKi), PARAMETER :: M61N6TAze = 18366 + INTEGER(IntKi), PARAMETER :: M61N7TAze = 18367 + INTEGER(IntKi), PARAMETER :: M61N8TAze = 18368 + INTEGER(IntKi), PARAMETER :: M61N9TAze = 18369 + INTEGER(IntKi), PARAMETER :: M62N1TAze = 18370 + INTEGER(IntKi), PARAMETER :: M62N2TAze = 18371 + INTEGER(IntKi), PARAMETER :: M62N3TAze = 18372 + INTEGER(IntKi), PARAMETER :: M62N4TAze = 18373 + INTEGER(IntKi), PARAMETER :: M62N5TAze = 18374 + INTEGER(IntKi), PARAMETER :: M62N6TAze = 18375 + INTEGER(IntKi), PARAMETER :: M62N7TAze = 18376 + INTEGER(IntKi), PARAMETER :: M62N8TAze = 18377 + INTEGER(IntKi), PARAMETER :: M62N9TAze = 18378 + INTEGER(IntKi), PARAMETER :: M63N1TAze = 18379 + INTEGER(IntKi), PARAMETER :: M63N2TAze = 18380 + INTEGER(IntKi), PARAMETER :: M63N3TAze = 18381 + INTEGER(IntKi), PARAMETER :: M63N4TAze = 18382 + INTEGER(IntKi), PARAMETER :: M63N5TAze = 18383 + INTEGER(IntKi), PARAMETER :: M63N6TAze = 18384 + INTEGER(IntKi), PARAMETER :: M63N7TAze = 18385 + INTEGER(IntKi), PARAMETER :: M63N8TAze = 18386 + INTEGER(IntKi), PARAMETER :: M63N9TAze = 18387 + INTEGER(IntKi), PARAMETER :: M64N1TAze = 18388 + INTEGER(IntKi), PARAMETER :: M64N2TAze = 18389 + INTEGER(IntKi), PARAMETER :: M64N3TAze = 18390 + INTEGER(IntKi), PARAMETER :: M64N4TAze = 18391 + INTEGER(IntKi), PARAMETER :: M64N5TAze = 18392 + INTEGER(IntKi), PARAMETER :: M64N6TAze = 18393 + INTEGER(IntKi), PARAMETER :: M64N7TAze = 18394 + INTEGER(IntKi), PARAMETER :: M64N8TAze = 18395 + INTEGER(IntKi), PARAMETER :: M64N9TAze = 18396 + INTEGER(IntKi), PARAMETER :: M65N1TAze = 18397 + INTEGER(IntKi), PARAMETER :: M65N2TAze = 18398 + INTEGER(IntKi), PARAMETER :: M65N3TAze = 18399 + INTEGER(IntKi), PARAMETER :: M65N4TAze = 18400 + INTEGER(IntKi), PARAMETER :: M65N5TAze = 18401 + INTEGER(IntKi), PARAMETER :: M65N6TAze = 18402 + INTEGER(IntKi), PARAMETER :: M65N7TAze = 18403 + INTEGER(IntKi), PARAMETER :: M65N8TAze = 18404 + INTEGER(IntKi), PARAMETER :: M65N9TAze = 18405 + INTEGER(IntKi), PARAMETER :: M66N1TAze = 18406 + INTEGER(IntKi), PARAMETER :: M66N2TAze = 18407 + INTEGER(IntKi), PARAMETER :: M66N3TAze = 18408 + INTEGER(IntKi), PARAMETER :: M66N4TAze = 18409 + INTEGER(IntKi), PARAMETER :: M66N5TAze = 18410 + INTEGER(IntKi), PARAMETER :: M66N6TAze = 18411 + INTEGER(IntKi), PARAMETER :: M66N7TAze = 18412 + INTEGER(IntKi), PARAMETER :: M66N8TAze = 18413 + INTEGER(IntKi), PARAMETER :: M66N9TAze = 18414 + INTEGER(IntKi), PARAMETER :: M67N1TAze = 18415 + INTEGER(IntKi), PARAMETER :: M67N2TAze = 18416 + INTEGER(IntKi), PARAMETER :: M67N3TAze = 18417 + INTEGER(IntKi), PARAMETER :: M67N4TAze = 18418 + INTEGER(IntKi), PARAMETER :: M67N5TAze = 18419 + INTEGER(IntKi), PARAMETER :: M67N6TAze = 18420 + INTEGER(IntKi), PARAMETER :: M67N7TAze = 18421 + INTEGER(IntKi), PARAMETER :: M67N8TAze = 18422 + INTEGER(IntKi), PARAMETER :: M67N9TAze = 18423 + INTEGER(IntKi), PARAMETER :: M68N1TAze = 18424 + INTEGER(IntKi), PARAMETER :: M68N2TAze = 18425 + INTEGER(IntKi), PARAMETER :: M68N3TAze = 18426 + INTEGER(IntKi), PARAMETER :: M68N4TAze = 18427 + INTEGER(IntKi), PARAMETER :: M68N5TAze = 18428 + INTEGER(IntKi), PARAMETER :: M68N6TAze = 18429 + INTEGER(IntKi), PARAMETER :: M68N7TAze = 18430 + INTEGER(IntKi), PARAMETER :: M68N8TAze = 18431 + INTEGER(IntKi), PARAMETER :: M68N9TAze = 18432 + INTEGER(IntKi), PARAMETER :: M69N1TAze = 18433 + INTEGER(IntKi), PARAMETER :: M69N2TAze = 18434 + INTEGER(IntKi), PARAMETER :: M69N3TAze = 18435 + INTEGER(IntKi), PARAMETER :: M69N4TAze = 18436 + INTEGER(IntKi), PARAMETER :: M69N5TAze = 18437 + INTEGER(IntKi), PARAMETER :: M69N6TAze = 18438 + INTEGER(IntKi), PARAMETER :: M69N7TAze = 18439 + INTEGER(IntKi), PARAMETER :: M69N8TAze = 18440 + INTEGER(IntKi), PARAMETER :: M69N9TAze = 18441 + INTEGER(IntKi), PARAMETER :: M70N1TAze = 18442 + INTEGER(IntKi), PARAMETER :: M70N2TAze = 18443 + INTEGER(IntKi), PARAMETER :: M70N3TAze = 18444 + INTEGER(IntKi), PARAMETER :: M70N4TAze = 18445 + INTEGER(IntKi), PARAMETER :: M70N5TAze = 18446 + INTEGER(IntKi), PARAMETER :: M70N6TAze = 18447 + INTEGER(IntKi), PARAMETER :: M70N7TAze = 18448 + INTEGER(IntKi), PARAMETER :: M70N8TAze = 18449 + INTEGER(IntKi), PARAMETER :: M70N9TAze = 18450 + INTEGER(IntKi), PARAMETER :: M71N1TAze = 18451 + INTEGER(IntKi), PARAMETER :: M71N2TAze = 18452 + INTEGER(IntKi), PARAMETER :: M71N3TAze = 18453 + INTEGER(IntKi), PARAMETER :: M71N4TAze = 18454 + INTEGER(IntKi), PARAMETER :: M71N5TAze = 18455 + INTEGER(IntKi), PARAMETER :: M71N6TAze = 18456 + INTEGER(IntKi), PARAMETER :: M71N7TAze = 18457 + INTEGER(IntKi), PARAMETER :: M71N8TAze = 18458 + INTEGER(IntKi), PARAMETER :: M71N9TAze = 18459 + INTEGER(IntKi), PARAMETER :: M72N1TAze = 18460 + INTEGER(IntKi), PARAMETER :: M72N2TAze = 18461 + INTEGER(IntKi), PARAMETER :: M72N3TAze = 18462 + INTEGER(IntKi), PARAMETER :: M72N4TAze = 18463 + INTEGER(IntKi), PARAMETER :: M72N5TAze = 18464 + INTEGER(IntKi), PARAMETER :: M72N6TAze = 18465 + INTEGER(IntKi), PARAMETER :: M72N7TAze = 18466 + INTEGER(IntKi), PARAMETER :: M72N8TAze = 18467 + INTEGER(IntKi), PARAMETER :: M72N9TAze = 18468 + INTEGER(IntKi), PARAMETER :: M73N1TAze = 18469 + INTEGER(IntKi), PARAMETER :: M73N2TAze = 18470 + INTEGER(IntKi), PARAMETER :: M73N3TAze = 18471 + INTEGER(IntKi), PARAMETER :: M73N4TAze = 18472 + INTEGER(IntKi), PARAMETER :: M73N5TAze = 18473 + INTEGER(IntKi), PARAMETER :: M73N6TAze = 18474 + INTEGER(IntKi), PARAMETER :: M73N7TAze = 18475 + INTEGER(IntKi), PARAMETER :: M73N8TAze = 18476 + INTEGER(IntKi), PARAMETER :: M73N9TAze = 18477 + INTEGER(IntKi), PARAMETER :: M74N1TAze = 18478 + INTEGER(IntKi), PARAMETER :: M74N2TAze = 18479 + INTEGER(IntKi), PARAMETER :: M74N3TAze = 18480 + INTEGER(IntKi), PARAMETER :: M74N4TAze = 18481 + INTEGER(IntKi), PARAMETER :: M74N5TAze = 18482 + INTEGER(IntKi), PARAMETER :: M74N6TAze = 18483 + INTEGER(IntKi), PARAMETER :: M74N7TAze = 18484 + INTEGER(IntKi), PARAMETER :: M74N8TAze = 18485 + INTEGER(IntKi), PARAMETER :: M74N9TAze = 18486 + INTEGER(IntKi), PARAMETER :: M75N1TAze = 18487 + INTEGER(IntKi), PARAMETER :: M75N2TAze = 18488 + INTEGER(IntKi), PARAMETER :: M75N3TAze = 18489 + INTEGER(IntKi), PARAMETER :: M75N4TAze = 18490 + INTEGER(IntKi), PARAMETER :: M75N5TAze = 18491 + INTEGER(IntKi), PARAMETER :: M75N6TAze = 18492 + INTEGER(IntKi), PARAMETER :: M75N7TAze = 18493 + INTEGER(IntKi), PARAMETER :: M75N8TAze = 18494 + INTEGER(IntKi), PARAMETER :: M75N9TAze = 18495 + INTEGER(IntKi), PARAMETER :: M76N1TAze = 18496 + INTEGER(IntKi), PARAMETER :: M76N2TAze = 18497 + INTEGER(IntKi), PARAMETER :: M76N3TAze = 18498 + INTEGER(IntKi), PARAMETER :: M76N4TAze = 18499 + INTEGER(IntKi), PARAMETER :: M76N5TAze = 18500 + INTEGER(IntKi), PARAMETER :: M76N6TAze = 18501 + INTEGER(IntKi), PARAMETER :: M76N7TAze = 18502 + INTEGER(IntKi), PARAMETER :: M76N8TAze = 18503 + INTEGER(IntKi), PARAMETER :: M76N9TAze = 18504 + INTEGER(IntKi), PARAMETER :: M77N1TAze = 18505 + INTEGER(IntKi), PARAMETER :: M77N2TAze = 18506 + INTEGER(IntKi), PARAMETER :: M77N3TAze = 18507 + INTEGER(IntKi), PARAMETER :: M77N4TAze = 18508 + INTEGER(IntKi), PARAMETER :: M77N5TAze = 18509 + INTEGER(IntKi), PARAMETER :: M77N6TAze = 18510 + INTEGER(IntKi), PARAMETER :: M77N7TAze = 18511 + INTEGER(IntKi), PARAMETER :: M77N8TAze = 18512 + INTEGER(IntKi), PARAMETER :: M77N9TAze = 18513 + INTEGER(IntKi), PARAMETER :: M78N1TAze = 18514 + INTEGER(IntKi), PARAMETER :: M78N2TAze = 18515 + INTEGER(IntKi), PARAMETER :: M78N3TAze = 18516 + INTEGER(IntKi), PARAMETER :: M78N4TAze = 18517 + INTEGER(IntKi), PARAMETER :: M78N5TAze = 18518 + INTEGER(IntKi), PARAMETER :: M78N6TAze = 18519 + INTEGER(IntKi), PARAMETER :: M78N7TAze = 18520 + INTEGER(IntKi), PARAMETER :: M78N8TAze = 18521 + INTEGER(IntKi), PARAMETER :: M78N9TAze = 18522 + INTEGER(IntKi), PARAMETER :: M79N1TAze = 18523 + INTEGER(IntKi), PARAMETER :: M79N2TAze = 18524 + INTEGER(IntKi), PARAMETER :: M79N3TAze = 18525 + INTEGER(IntKi), PARAMETER :: M79N4TAze = 18526 + INTEGER(IntKi), PARAMETER :: M79N5TAze = 18527 + INTEGER(IntKi), PARAMETER :: M79N6TAze = 18528 + INTEGER(IntKi), PARAMETER :: M79N7TAze = 18529 + INTEGER(IntKi), PARAMETER :: M79N8TAze = 18530 + INTEGER(IntKi), PARAMETER :: M79N9TAze = 18531 + INTEGER(IntKi), PARAMETER :: M80N1TAze = 18532 + INTEGER(IntKi), PARAMETER :: M80N2TAze = 18533 + INTEGER(IntKi), PARAMETER :: M80N3TAze = 18534 + INTEGER(IntKi), PARAMETER :: M80N4TAze = 18535 + INTEGER(IntKi), PARAMETER :: M80N5TAze = 18536 + INTEGER(IntKi), PARAMETER :: M80N6TAze = 18537 + INTEGER(IntKi), PARAMETER :: M80N7TAze = 18538 + INTEGER(IntKi), PARAMETER :: M80N8TAze = 18539 + INTEGER(IntKi), PARAMETER :: M80N9TAze = 18540 + INTEGER(IntKi), PARAMETER :: M81N1TAze = 18541 + INTEGER(IntKi), PARAMETER :: M81N2TAze = 18542 + INTEGER(IntKi), PARAMETER :: M81N3TAze = 18543 + INTEGER(IntKi), PARAMETER :: M81N4TAze = 18544 + INTEGER(IntKi), PARAMETER :: M81N5TAze = 18545 + INTEGER(IntKi), PARAMETER :: M81N6TAze = 18546 + INTEGER(IntKi), PARAMETER :: M81N7TAze = 18547 + INTEGER(IntKi), PARAMETER :: M81N8TAze = 18548 + INTEGER(IntKi), PARAMETER :: M81N9TAze = 18549 + INTEGER(IntKi), PARAMETER :: M82N1TAze = 18550 + INTEGER(IntKi), PARAMETER :: M82N2TAze = 18551 + INTEGER(IntKi), PARAMETER :: M82N3TAze = 18552 + INTEGER(IntKi), PARAMETER :: M82N4TAze = 18553 + INTEGER(IntKi), PARAMETER :: M82N5TAze = 18554 + INTEGER(IntKi), PARAMETER :: M82N6TAze = 18555 + INTEGER(IntKi), PARAMETER :: M82N7TAze = 18556 + INTEGER(IntKi), PARAMETER :: M82N8TAze = 18557 + INTEGER(IntKi), PARAMETER :: M82N9TAze = 18558 + INTEGER(IntKi), PARAMETER :: M83N1TAze = 18559 + INTEGER(IntKi), PARAMETER :: M83N2TAze = 18560 + INTEGER(IntKi), PARAMETER :: M83N3TAze = 18561 + INTEGER(IntKi), PARAMETER :: M83N4TAze = 18562 + INTEGER(IntKi), PARAMETER :: M83N5TAze = 18563 + INTEGER(IntKi), PARAMETER :: M83N6TAze = 18564 + INTEGER(IntKi), PARAMETER :: M83N7TAze = 18565 + INTEGER(IntKi), PARAMETER :: M83N8TAze = 18566 + INTEGER(IntKi), PARAMETER :: M83N9TAze = 18567 + INTEGER(IntKi), PARAMETER :: M84N1TAze = 18568 + INTEGER(IntKi), PARAMETER :: M84N2TAze = 18569 + INTEGER(IntKi), PARAMETER :: M84N3TAze = 18570 + INTEGER(IntKi), PARAMETER :: M84N4TAze = 18571 + INTEGER(IntKi), PARAMETER :: M84N5TAze = 18572 + INTEGER(IntKi), PARAMETER :: M84N6TAze = 18573 + INTEGER(IntKi), PARAMETER :: M84N7TAze = 18574 + INTEGER(IntKi), PARAMETER :: M84N8TAze = 18575 + INTEGER(IntKi), PARAMETER :: M84N9TAze = 18576 + INTEGER(IntKi), PARAMETER :: M85N1TAze = 18577 + INTEGER(IntKi), PARAMETER :: M85N2TAze = 18578 + INTEGER(IntKi), PARAMETER :: M85N3TAze = 18579 + INTEGER(IntKi), PARAMETER :: M85N4TAze = 18580 + INTEGER(IntKi), PARAMETER :: M85N5TAze = 18581 + INTEGER(IntKi), PARAMETER :: M85N6TAze = 18582 + INTEGER(IntKi), PARAMETER :: M85N7TAze = 18583 + INTEGER(IntKi), PARAMETER :: M85N8TAze = 18584 + INTEGER(IntKi), PARAMETER :: M85N9TAze = 18585 + INTEGER(IntKi), PARAMETER :: M86N1TAze = 18586 + INTEGER(IntKi), PARAMETER :: M86N2TAze = 18587 + INTEGER(IntKi), PARAMETER :: M86N3TAze = 18588 + INTEGER(IntKi), PARAMETER :: M86N4TAze = 18589 + INTEGER(IntKi), PARAMETER :: M86N5TAze = 18590 + INTEGER(IntKi), PARAMETER :: M86N6TAze = 18591 + INTEGER(IntKi), PARAMETER :: M86N7TAze = 18592 + INTEGER(IntKi), PARAMETER :: M86N8TAze = 18593 + INTEGER(IntKi), PARAMETER :: M86N9TAze = 18594 + INTEGER(IntKi), PARAMETER :: M87N1TAze = 18595 + INTEGER(IntKi), PARAMETER :: M87N2TAze = 18596 + INTEGER(IntKi), PARAMETER :: M87N3TAze = 18597 + INTEGER(IntKi), PARAMETER :: M87N4TAze = 18598 + INTEGER(IntKi), PARAMETER :: M87N5TAze = 18599 + INTEGER(IntKi), PARAMETER :: M87N6TAze = 18600 + INTEGER(IntKi), PARAMETER :: M87N7TAze = 18601 + INTEGER(IntKi), PARAMETER :: M87N8TAze = 18602 + INTEGER(IntKi), PARAMETER :: M87N9TAze = 18603 + INTEGER(IntKi), PARAMETER :: M88N1TAze = 18604 + INTEGER(IntKi), PARAMETER :: M88N2TAze = 18605 + INTEGER(IntKi), PARAMETER :: M88N3TAze = 18606 + INTEGER(IntKi), PARAMETER :: M88N4TAze = 18607 + INTEGER(IntKi), PARAMETER :: M88N5TAze = 18608 + INTEGER(IntKi), PARAMETER :: M88N6TAze = 18609 + INTEGER(IntKi), PARAMETER :: M88N7TAze = 18610 + INTEGER(IntKi), PARAMETER :: M88N8TAze = 18611 + INTEGER(IntKi), PARAMETER :: M88N9TAze = 18612 + INTEGER(IntKi), PARAMETER :: M89N1TAze = 18613 + INTEGER(IntKi), PARAMETER :: M89N2TAze = 18614 + INTEGER(IntKi), PARAMETER :: M89N3TAze = 18615 + INTEGER(IntKi), PARAMETER :: M89N4TAze = 18616 + INTEGER(IntKi), PARAMETER :: M89N5TAze = 18617 + INTEGER(IntKi), PARAMETER :: M89N6TAze = 18618 + INTEGER(IntKi), PARAMETER :: M89N7TAze = 18619 + INTEGER(IntKi), PARAMETER :: M89N8TAze = 18620 + INTEGER(IntKi), PARAMETER :: M89N9TAze = 18621 + INTEGER(IntKi), PARAMETER :: M90N1TAze = 18622 + INTEGER(IntKi), PARAMETER :: M90N2TAze = 18623 + INTEGER(IntKi), PARAMETER :: M90N3TAze = 18624 + INTEGER(IntKi), PARAMETER :: M90N4TAze = 18625 + INTEGER(IntKi), PARAMETER :: M90N5TAze = 18626 + INTEGER(IntKi), PARAMETER :: M90N6TAze = 18627 + INTEGER(IntKi), PARAMETER :: M90N7TAze = 18628 + INTEGER(IntKi), PARAMETER :: M90N8TAze = 18629 + INTEGER(IntKi), PARAMETER :: M90N9TAze = 18630 + INTEGER(IntKi), PARAMETER :: M91N1TAze = 18631 + INTEGER(IntKi), PARAMETER :: M91N2TAze = 18632 + INTEGER(IntKi), PARAMETER :: M91N3TAze = 18633 + INTEGER(IntKi), PARAMETER :: M91N4TAze = 18634 + INTEGER(IntKi), PARAMETER :: M91N5TAze = 18635 + INTEGER(IntKi), PARAMETER :: M91N6TAze = 18636 + INTEGER(IntKi), PARAMETER :: M91N7TAze = 18637 + INTEGER(IntKi), PARAMETER :: M91N8TAze = 18638 + INTEGER(IntKi), PARAMETER :: M91N9TAze = 18639 + INTEGER(IntKi), PARAMETER :: M92N1TAze = 18640 + INTEGER(IntKi), PARAMETER :: M92N2TAze = 18641 + INTEGER(IntKi), PARAMETER :: M92N3TAze = 18642 + INTEGER(IntKi), PARAMETER :: M92N4TAze = 18643 + INTEGER(IntKi), PARAMETER :: M92N5TAze = 18644 + INTEGER(IntKi), PARAMETER :: M92N6TAze = 18645 + INTEGER(IntKi), PARAMETER :: M92N7TAze = 18646 + INTEGER(IntKi), PARAMETER :: M92N8TAze = 18647 + INTEGER(IntKi), PARAMETER :: M92N9TAze = 18648 + INTEGER(IntKi), PARAMETER :: M93N1TAze = 18649 + INTEGER(IntKi), PARAMETER :: M93N2TAze = 18650 + INTEGER(IntKi), PARAMETER :: M93N3TAze = 18651 + INTEGER(IntKi), PARAMETER :: M93N4TAze = 18652 + INTEGER(IntKi), PARAMETER :: M93N5TAze = 18653 + INTEGER(IntKi), PARAMETER :: M93N6TAze = 18654 + INTEGER(IntKi), PARAMETER :: M93N7TAze = 18655 + INTEGER(IntKi), PARAMETER :: M93N8TAze = 18656 + INTEGER(IntKi), PARAMETER :: M93N9TAze = 18657 + INTEGER(IntKi), PARAMETER :: M94N1TAze = 18658 + INTEGER(IntKi), PARAMETER :: M94N2TAze = 18659 + INTEGER(IntKi), PARAMETER :: M94N3TAze = 18660 + INTEGER(IntKi), PARAMETER :: M94N4TAze = 18661 + INTEGER(IntKi), PARAMETER :: M94N5TAze = 18662 + INTEGER(IntKi), PARAMETER :: M94N6TAze = 18663 + INTEGER(IntKi), PARAMETER :: M94N7TAze = 18664 + INTEGER(IntKi), PARAMETER :: M94N8TAze = 18665 + INTEGER(IntKi), PARAMETER :: M94N9TAze = 18666 + INTEGER(IntKi), PARAMETER :: M95N1TAze = 18667 + INTEGER(IntKi), PARAMETER :: M95N2TAze = 18668 + INTEGER(IntKi), PARAMETER :: M95N3TAze = 18669 + INTEGER(IntKi), PARAMETER :: M95N4TAze = 18670 + INTEGER(IntKi), PARAMETER :: M95N5TAze = 18671 + INTEGER(IntKi), PARAMETER :: M95N6TAze = 18672 + INTEGER(IntKi), PARAMETER :: M95N7TAze = 18673 + INTEGER(IntKi), PARAMETER :: M95N8TAze = 18674 + INTEGER(IntKi), PARAMETER :: M95N9TAze = 18675 + INTEGER(IntKi), PARAMETER :: M96N1TAze = 18676 + INTEGER(IntKi), PARAMETER :: M96N2TAze = 18677 + INTEGER(IntKi), PARAMETER :: M96N3TAze = 18678 + INTEGER(IntKi), PARAMETER :: M96N4TAze = 18679 + INTEGER(IntKi), PARAMETER :: M96N5TAze = 18680 + INTEGER(IntKi), PARAMETER :: M96N6TAze = 18681 + INTEGER(IntKi), PARAMETER :: M96N7TAze = 18682 + INTEGER(IntKi), PARAMETER :: M96N8TAze = 18683 + INTEGER(IntKi), PARAMETER :: M96N9TAze = 18684 + INTEGER(IntKi), PARAMETER :: M97N1TAze = 18685 + INTEGER(IntKi), PARAMETER :: M97N2TAze = 18686 + INTEGER(IntKi), PARAMETER :: M97N3TAze = 18687 + INTEGER(IntKi), PARAMETER :: M97N4TAze = 18688 + INTEGER(IntKi), PARAMETER :: M97N5TAze = 18689 + INTEGER(IntKi), PARAMETER :: M97N6TAze = 18690 + INTEGER(IntKi), PARAMETER :: M97N7TAze = 18691 + INTEGER(IntKi), PARAMETER :: M97N8TAze = 18692 + INTEGER(IntKi), PARAMETER :: M97N9TAze = 18693 + INTEGER(IntKi), PARAMETER :: M98N1TAze = 18694 + INTEGER(IntKi), PARAMETER :: M98N2TAze = 18695 + INTEGER(IntKi), PARAMETER :: M98N3TAze = 18696 + INTEGER(IntKi), PARAMETER :: M98N4TAze = 18697 + INTEGER(IntKi), PARAMETER :: M98N5TAze = 18698 + INTEGER(IntKi), PARAMETER :: M98N6TAze = 18699 + INTEGER(IntKi), PARAMETER :: M98N7TAze = 18700 + INTEGER(IntKi), PARAMETER :: M98N8TAze = 18701 + INTEGER(IntKi), PARAMETER :: M98N9TAze = 18702 + INTEGER(IntKi), PARAMETER :: M99N1TAze = 18703 + INTEGER(IntKi), PARAMETER :: M99N2TAze = 18704 + INTEGER(IntKi), PARAMETER :: M99N3TAze = 18705 + INTEGER(IntKi), PARAMETER :: M99N4TAze = 18706 + INTEGER(IntKi), PARAMETER :: M99N5TAze = 18707 + INTEGER(IntKi), PARAMETER :: M99N6TAze = 18708 + INTEGER(IntKi), PARAMETER :: M99N7TAze = 18709 + INTEGER(IntKi), PARAMETER :: M99N8TAze = 18710 + INTEGER(IntKi), PARAMETER :: M99N9TAze = 18711 + INTEGER(IntKi), PARAMETER :: M01N1RAxe = 18712 + INTEGER(IntKi), PARAMETER :: M01N2RAxe = 18713 + INTEGER(IntKi), PARAMETER :: M01N3RAxe = 18714 + INTEGER(IntKi), PARAMETER :: M01N4RAxe = 18715 + INTEGER(IntKi), PARAMETER :: M01N5RAxe = 18716 + INTEGER(IntKi), PARAMETER :: M01N6RAxe = 18717 + INTEGER(IntKi), PARAMETER :: M01N7RAxe = 18718 + INTEGER(IntKi), PARAMETER :: M01N8RAxe = 18719 + INTEGER(IntKi), PARAMETER :: M01N9RAxe = 18720 + INTEGER(IntKi), PARAMETER :: M02N1RAxe = 18721 + INTEGER(IntKi), PARAMETER :: M02N2RAxe = 18722 + INTEGER(IntKi), PARAMETER :: M02N3RAxe = 18723 + INTEGER(IntKi), PARAMETER :: M02N4RAxe = 18724 + INTEGER(IntKi), PARAMETER :: M02N5RAxe = 18725 + INTEGER(IntKi), PARAMETER :: M02N6RAxe = 18726 + INTEGER(IntKi), PARAMETER :: M02N7RAxe = 18727 + INTEGER(IntKi), PARAMETER :: M02N8RAxe = 18728 + INTEGER(IntKi), PARAMETER :: M02N9RAxe = 18729 + INTEGER(IntKi), PARAMETER :: M03N1RAxe = 18730 + INTEGER(IntKi), PARAMETER :: M03N2RAxe = 18731 + INTEGER(IntKi), PARAMETER :: M03N3RAxe = 18732 + INTEGER(IntKi), PARAMETER :: M03N4RAxe = 18733 + INTEGER(IntKi), PARAMETER :: M03N5RAxe = 18734 + INTEGER(IntKi), PARAMETER :: M03N6RAxe = 18735 + INTEGER(IntKi), PARAMETER :: M03N7RAxe = 18736 + INTEGER(IntKi), PARAMETER :: M03N8RAxe = 18737 + INTEGER(IntKi), PARAMETER :: M03N9RAxe = 18738 + INTEGER(IntKi), PARAMETER :: M04N1RAxe = 18739 + INTEGER(IntKi), PARAMETER :: M04N2RAxe = 18740 + INTEGER(IntKi), PARAMETER :: M04N3RAxe = 18741 + INTEGER(IntKi), PARAMETER :: M04N4RAxe = 18742 + INTEGER(IntKi), PARAMETER :: M04N5RAxe = 18743 + INTEGER(IntKi), PARAMETER :: M04N6RAxe = 18744 + INTEGER(IntKi), PARAMETER :: M04N7RAxe = 18745 + INTEGER(IntKi), PARAMETER :: M04N8RAxe = 18746 + INTEGER(IntKi), PARAMETER :: M04N9RAxe = 18747 + INTEGER(IntKi), PARAMETER :: M05N1RAxe = 18748 + INTEGER(IntKi), PARAMETER :: M05N2RAxe = 18749 + INTEGER(IntKi), PARAMETER :: M05N3RAxe = 18750 + INTEGER(IntKi), PARAMETER :: M05N4RAxe = 18751 + INTEGER(IntKi), PARAMETER :: M05N5RAxe = 18752 + INTEGER(IntKi), PARAMETER :: M05N6RAxe = 18753 + INTEGER(IntKi), PARAMETER :: M05N7RAxe = 18754 + INTEGER(IntKi), PARAMETER :: M05N8RAxe = 18755 + INTEGER(IntKi), PARAMETER :: M05N9RAxe = 18756 + INTEGER(IntKi), PARAMETER :: M06N1RAxe = 18757 + INTEGER(IntKi), PARAMETER :: M06N2RAxe = 18758 + INTEGER(IntKi), PARAMETER :: M06N3RAxe = 18759 + INTEGER(IntKi), PARAMETER :: M06N4RAxe = 18760 + INTEGER(IntKi), PARAMETER :: M06N5RAxe = 18761 + INTEGER(IntKi), PARAMETER :: M06N6RAxe = 18762 + INTEGER(IntKi), PARAMETER :: M06N7RAxe = 18763 + INTEGER(IntKi), PARAMETER :: M06N8RAxe = 18764 + INTEGER(IntKi), PARAMETER :: M06N9RAxe = 18765 + INTEGER(IntKi), PARAMETER :: M07N1RAxe = 18766 + INTEGER(IntKi), PARAMETER :: M07N2RAxe = 18767 + INTEGER(IntKi), PARAMETER :: M07N3RAxe = 18768 + INTEGER(IntKi), PARAMETER :: M07N4RAxe = 18769 + INTEGER(IntKi), PARAMETER :: M07N5RAxe = 18770 + INTEGER(IntKi), PARAMETER :: M07N6RAxe = 18771 + INTEGER(IntKi), PARAMETER :: M07N7RAxe = 18772 + INTEGER(IntKi), PARAMETER :: M07N8RAxe = 18773 + INTEGER(IntKi), PARAMETER :: M07N9RAxe = 18774 + INTEGER(IntKi), PARAMETER :: M08N1RAxe = 18775 + INTEGER(IntKi), PARAMETER :: M08N2RAxe = 18776 + INTEGER(IntKi), PARAMETER :: M08N3RAxe = 18777 + INTEGER(IntKi), PARAMETER :: M08N4RAxe = 18778 + INTEGER(IntKi), PARAMETER :: M08N5RAxe = 18779 + INTEGER(IntKi), PARAMETER :: M08N6RAxe = 18780 + INTEGER(IntKi), PARAMETER :: M08N7RAxe = 18781 + INTEGER(IntKi), PARAMETER :: M08N8RAxe = 18782 + INTEGER(IntKi), PARAMETER :: M08N9RAxe = 18783 + INTEGER(IntKi), PARAMETER :: M09N1RAxe = 18784 + INTEGER(IntKi), PARAMETER :: M09N2RAxe = 18785 + INTEGER(IntKi), PARAMETER :: M09N3RAxe = 18786 + INTEGER(IntKi), PARAMETER :: M09N4RAxe = 18787 + INTEGER(IntKi), PARAMETER :: M09N5RAxe = 18788 + INTEGER(IntKi), PARAMETER :: M09N6RAxe = 18789 + INTEGER(IntKi), PARAMETER :: M09N7RAxe = 18790 + INTEGER(IntKi), PARAMETER :: M09N8RAxe = 18791 + INTEGER(IntKi), PARAMETER :: M09N9RAxe = 18792 + INTEGER(IntKi), PARAMETER :: M10N1RAxe = 18793 + INTEGER(IntKi), PARAMETER :: M10N2RAxe = 18794 + INTEGER(IntKi), PARAMETER :: M10N3RAxe = 18795 + INTEGER(IntKi), PARAMETER :: M10N4RAxe = 18796 + INTEGER(IntKi), PARAMETER :: M10N5RAxe = 18797 + INTEGER(IntKi), PARAMETER :: M10N6RAxe = 18798 + INTEGER(IntKi), PARAMETER :: M10N7RAxe = 18799 + INTEGER(IntKi), PARAMETER :: M10N8RAxe = 18800 + INTEGER(IntKi), PARAMETER :: M10N9RAxe = 18801 + INTEGER(IntKi), PARAMETER :: M11N1RAxe = 18802 + INTEGER(IntKi), PARAMETER :: M11N2RAxe = 18803 + INTEGER(IntKi), PARAMETER :: M11N3RAxe = 18804 + INTEGER(IntKi), PARAMETER :: M11N4RAxe = 18805 + INTEGER(IntKi), PARAMETER :: M11N5RAxe = 18806 + INTEGER(IntKi), PARAMETER :: M11N6RAxe = 18807 + INTEGER(IntKi), PARAMETER :: M11N7RAxe = 18808 + INTEGER(IntKi), PARAMETER :: M11N8RAxe = 18809 + INTEGER(IntKi), PARAMETER :: M11N9RAxe = 18810 + INTEGER(IntKi), PARAMETER :: M12N1RAxe = 18811 + INTEGER(IntKi), PARAMETER :: M12N2RAxe = 18812 + INTEGER(IntKi), PARAMETER :: M12N3RAxe = 18813 + INTEGER(IntKi), PARAMETER :: M12N4RAxe = 18814 + INTEGER(IntKi), PARAMETER :: M12N5RAxe = 18815 + INTEGER(IntKi), PARAMETER :: M12N6RAxe = 18816 + INTEGER(IntKi), PARAMETER :: M12N7RAxe = 18817 + INTEGER(IntKi), PARAMETER :: M12N8RAxe = 18818 + INTEGER(IntKi), PARAMETER :: M12N9RAxe = 18819 + INTEGER(IntKi), PARAMETER :: M13N1RAxe = 18820 + INTEGER(IntKi), PARAMETER :: M13N2RAxe = 18821 + INTEGER(IntKi), PARAMETER :: M13N3RAxe = 18822 + INTEGER(IntKi), PARAMETER :: M13N4RAxe = 18823 + INTEGER(IntKi), PARAMETER :: M13N5RAxe = 18824 + INTEGER(IntKi), PARAMETER :: M13N6RAxe = 18825 + INTEGER(IntKi), PARAMETER :: M13N7RAxe = 18826 + INTEGER(IntKi), PARAMETER :: M13N8RAxe = 18827 + INTEGER(IntKi), PARAMETER :: M13N9RAxe = 18828 + INTEGER(IntKi), PARAMETER :: M14N1RAxe = 18829 + INTEGER(IntKi), PARAMETER :: M14N2RAxe = 18830 + INTEGER(IntKi), PARAMETER :: M14N3RAxe = 18831 + INTEGER(IntKi), PARAMETER :: M14N4RAxe = 18832 + INTEGER(IntKi), PARAMETER :: M14N5RAxe = 18833 + INTEGER(IntKi), PARAMETER :: M14N6RAxe = 18834 + INTEGER(IntKi), PARAMETER :: M14N7RAxe = 18835 + INTEGER(IntKi), PARAMETER :: M14N8RAxe = 18836 + INTEGER(IntKi), PARAMETER :: M14N9RAxe = 18837 + INTEGER(IntKi), PARAMETER :: M15N1RAxe = 18838 + INTEGER(IntKi), PARAMETER :: M15N2RAxe = 18839 + INTEGER(IntKi), PARAMETER :: M15N3RAxe = 18840 + INTEGER(IntKi), PARAMETER :: M15N4RAxe = 18841 + INTEGER(IntKi), PARAMETER :: M15N5RAxe = 18842 + INTEGER(IntKi), PARAMETER :: M15N6RAxe = 18843 + INTEGER(IntKi), PARAMETER :: M15N7RAxe = 18844 + INTEGER(IntKi), PARAMETER :: M15N8RAxe = 18845 + INTEGER(IntKi), PARAMETER :: M15N9RAxe = 18846 + INTEGER(IntKi), PARAMETER :: M16N1RAxe = 18847 + INTEGER(IntKi), PARAMETER :: M16N2RAxe = 18848 + INTEGER(IntKi), PARAMETER :: M16N3RAxe = 18849 + INTEGER(IntKi), PARAMETER :: M16N4RAxe = 18850 + INTEGER(IntKi), PARAMETER :: M16N5RAxe = 18851 + INTEGER(IntKi), PARAMETER :: M16N6RAxe = 18852 + INTEGER(IntKi), PARAMETER :: M16N7RAxe = 18853 + INTEGER(IntKi), PARAMETER :: M16N8RAxe = 18854 + INTEGER(IntKi), PARAMETER :: M16N9RAxe = 18855 + INTEGER(IntKi), PARAMETER :: M17N1RAxe = 18856 + INTEGER(IntKi), PARAMETER :: M17N2RAxe = 18857 + INTEGER(IntKi), PARAMETER :: M17N3RAxe = 18858 + INTEGER(IntKi), PARAMETER :: M17N4RAxe = 18859 + INTEGER(IntKi), PARAMETER :: M17N5RAxe = 18860 + INTEGER(IntKi), PARAMETER :: M17N6RAxe = 18861 + INTEGER(IntKi), PARAMETER :: M17N7RAxe = 18862 + INTEGER(IntKi), PARAMETER :: M17N8RAxe = 18863 + INTEGER(IntKi), PARAMETER :: M17N9RAxe = 18864 + INTEGER(IntKi), PARAMETER :: M18N1RAxe = 18865 + INTEGER(IntKi), PARAMETER :: M18N2RAxe = 18866 + INTEGER(IntKi), PARAMETER :: M18N3RAxe = 18867 + INTEGER(IntKi), PARAMETER :: M18N4RAxe = 18868 + INTEGER(IntKi), PARAMETER :: M18N5RAxe = 18869 + INTEGER(IntKi), PARAMETER :: M18N6RAxe = 18870 + INTEGER(IntKi), PARAMETER :: M18N7RAxe = 18871 + INTEGER(IntKi), PARAMETER :: M18N8RAxe = 18872 + INTEGER(IntKi), PARAMETER :: M18N9RAxe = 18873 + INTEGER(IntKi), PARAMETER :: M19N1RAxe = 18874 + INTEGER(IntKi), PARAMETER :: M19N2RAxe = 18875 + INTEGER(IntKi), PARAMETER :: M19N3RAxe = 18876 + INTEGER(IntKi), PARAMETER :: M19N4RAxe = 18877 + INTEGER(IntKi), PARAMETER :: M19N5RAxe = 18878 + INTEGER(IntKi), PARAMETER :: M19N6RAxe = 18879 + INTEGER(IntKi), PARAMETER :: M19N7RAxe = 18880 + INTEGER(IntKi), PARAMETER :: M19N8RAxe = 18881 + INTEGER(IntKi), PARAMETER :: M19N9RAxe = 18882 + INTEGER(IntKi), PARAMETER :: M20N1RAxe = 18883 + INTEGER(IntKi), PARAMETER :: M20N2RAxe = 18884 + INTEGER(IntKi), PARAMETER :: M20N3RAxe = 18885 + INTEGER(IntKi), PARAMETER :: M20N4RAxe = 18886 + INTEGER(IntKi), PARAMETER :: M20N5RAxe = 18887 + INTEGER(IntKi), PARAMETER :: M20N6RAxe = 18888 + INTEGER(IntKi), PARAMETER :: M20N7RAxe = 18889 + INTEGER(IntKi), PARAMETER :: M20N8RAxe = 18890 + INTEGER(IntKi), PARAMETER :: M20N9RAxe = 18891 + INTEGER(IntKi), PARAMETER :: M21N1RAxe = 18892 + INTEGER(IntKi), PARAMETER :: M21N2RAxe = 18893 + INTEGER(IntKi), PARAMETER :: M21N3RAxe = 18894 + INTEGER(IntKi), PARAMETER :: M21N4RAxe = 18895 + INTEGER(IntKi), PARAMETER :: M21N5RAxe = 18896 + INTEGER(IntKi), PARAMETER :: M21N6RAxe = 18897 + INTEGER(IntKi), PARAMETER :: M21N7RAxe = 18898 + INTEGER(IntKi), PARAMETER :: M21N8RAxe = 18899 + INTEGER(IntKi), PARAMETER :: M21N9RAxe = 18900 + INTEGER(IntKi), PARAMETER :: M22N1RAxe = 18901 + INTEGER(IntKi), PARAMETER :: M22N2RAxe = 18902 + INTEGER(IntKi), PARAMETER :: M22N3RAxe = 18903 + INTEGER(IntKi), PARAMETER :: M22N4RAxe = 18904 + INTEGER(IntKi), PARAMETER :: M22N5RAxe = 18905 + INTEGER(IntKi), PARAMETER :: M22N6RAxe = 18906 + INTEGER(IntKi), PARAMETER :: M22N7RAxe = 18907 + INTEGER(IntKi), PARAMETER :: M22N8RAxe = 18908 + INTEGER(IntKi), PARAMETER :: M22N9RAxe = 18909 + INTEGER(IntKi), PARAMETER :: M23N1RAxe = 18910 + INTEGER(IntKi), PARAMETER :: M23N2RAxe = 18911 + INTEGER(IntKi), PARAMETER :: M23N3RAxe = 18912 + INTEGER(IntKi), PARAMETER :: M23N4RAxe = 18913 + INTEGER(IntKi), PARAMETER :: M23N5RAxe = 18914 + INTEGER(IntKi), PARAMETER :: M23N6RAxe = 18915 + INTEGER(IntKi), PARAMETER :: M23N7RAxe = 18916 + INTEGER(IntKi), PARAMETER :: M23N8RAxe = 18917 + INTEGER(IntKi), PARAMETER :: M23N9RAxe = 18918 + INTEGER(IntKi), PARAMETER :: M24N1RAxe = 18919 + INTEGER(IntKi), PARAMETER :: M24N2RAxe = 18920 + INTEGER(IntKi), PARAMETER :: M24N3RAxe = 18921 + INTEGER(IntKi), PARAMETER :: M24N4RAxe = 18922 + INTEGER(IntKi), PARAMETER :: M24N5RAxe = 18923 + INTEGER(IntKi), PARAMETER :: M24N6RAxe = 18924 + INTEGER(IntKi), PARAMETER :: M24N7RAxe = 18925 + INTEGER(IntKi), PARAMETER :: M24N8RAxe = 18926 + INTEGER(IntKi), PARAMETER :: M24N9RAxe = 18927 + INTEGER(IntKi), PARAMETER :: M25N1RAxe = 18928 + INTEGER(IntKi), PARAMETER :: M25N2RAxe = 18929 + INTEGER(IntKi), PARAMETER :: M25N3RAxe = 18930 + INTEGER(IntKi), PARAMETER :: M25N4RAxe = 18931 + INTEGER(IntKi), PARAMETER :: M25N5RAxe = 18932 + INTEGER(IntKi), PARAMETER :: M25N6RAxe = 18933 + INTEGER(IntKi), PARAMETER :: M25N7RAxe = 18934 + INTEGER(IntKi), PARAMETER :: M25N8RAxe = 18935 + INTEGER(IntKi), PARAMETER :: M25N9RAxe = 18936 + INTEGER(IntKi), PARAMETER :: M26N1RAxe = 18937 + INTEGER(IntKi), PARAMETER :: M26N2RAxe = 18938 + INTEGER(IntKi), PARAMETER :: M26N3RAxe = 18939 + INTEGER(IntKi), PARAMETER :: M26N4RAxe = 18940 + INTEGER(IntKi), PARAMETER :: M26N5RAxe = 18941 + INTEGER(IntKi), PARAMETER :: M26N6RAxe = 18942 + INTEGER(IntKi), PARAMETER :: M26N7RAxe = 18943 + INTEGER(IntKi), PARAMETER :: M26N8RAxe = 18944 + INTEGER(IntKi), PARAMETER :: M26N9RAxe = 18945 + INTEGER(IntKi), PARAMETER :: M27N1RAxe = 18946 + INTEGER(IntKi), PARAMETER :: M27N2RAxe = 18947 + INTEGER(IntKi), PARAMETER :: M27N3RAxe = 18948 + INTEGER(IntKi), PARAMETER :: M27N4RAxe = 18949 + INTEGER(IntKi), PARAMETER :: M27N5RAxe = 18950 + INTEGER(IntKi), PARAMETER :: M27N6RAxe = 18951 + INTEGER(IntKi), PARAMETER :: M27N7RAxe = 18952 + INTEGER(IntKi), PARAMETER :: M27N8RAxe = 18953 + INTEGER(IntKi), PARAMETER :: M27N9RAxe = 18954 + INTEGER(IntKi), PARAMETER :: M28N1RAxe = 18955 + INTEGER(IntKi), PARAMETER :: M28N2RAxe = 18956 + INTEGER(IntKi), PARAMETER :: M28N3RAxe = 18957 + INTEGER(IntKi), PARAMETER :: M28N4RAxe = 18958 + INTEGER(IntKi), PARAMETER :: M28N5RAxe = 18959 + INTEGER(IntKi), PARAMETER :: M28N6RAxe = 18960 + INTEGER(IntKi), PARAMETER :: M28N7RAxe = 18961 + INTEGER(IntKi), PARAMETER :: M28N8RAxe = 18962 + INTEGER(IntKi), PARAMETER :: M28N9RAxe = 18963 + INTEGER(IntKi), PARAMETER :: M29N1RAxe = 18964 + INTEGER(IntKi), PARAMETER :: M29N2RAxe = 18965 + INTEGER(IntKi), PARAMETER :: M29N3RAxe = 18966 + INTEGER(IntKi), PARAMETER :: M29N4RAxe = 18967 + INTEGER(IntKi), PARAMETER :: M29N5RAxe = 18968 + INTEGER(IntKi), PARAMETER :: M29N6RAxe = 18969 + INTEGER(IntKi), PARAMETER :: M29N7RAxe = 18970 + INTEGER(IntKi), PARAMETER :: M29N8RAxe = 18971 + INTEGER(IntKi), PARAMETER :: M29N9RAxe = 18972 + INTEGER(IntKi), PARAMETER :: M30N1RAxe = 18973 + INTEGER(IntKi), PARAMETER :: M30N2RAxe = 18974 + INTEGER(IntKi), PARAMETER :: M30N3RAxe = 18975 + INTEGER(IntKi), PARAMETER :: M30N4RAxe = 18976 + INTEGER(IntKi), PARAMETER :: M30N5RAxe = 18977 + INTEGER(IntKi), PARAMETER :: M30N6RAxe = 18978 + INTEGER(IntKi), PARAMETER :: M30N7RAxe = 18979 + INTEGER(IntKi), PARAMETER :: M30N8RAxe = 18980 + INTEGER(IntKi), PARAMETER :: M30N9RAxe = 18981 + INTEGER(IntKi), PARAMETER :: M31N1RAxe = 18982 + INTEGER(IntKi), PARAMETER :: M31N2RAxe = 18983 + INTEGER(IntKi), PARAMETER :: M31N3RAxe = 18984 + INTEGER(IntKi), PARAMETER :: M31N4RAxe = 18985 + INTEGER(IntKi), PARAMETER :: M31N5RAxe = 18986 + INTEGER(IntKi), PARAMETER :: M31N6RAxe = 18987 + INTEGER(IntKi), PARAMETER :: M31N7RAxe = 18988 + INTEGER(IntKi), PARAMETER :: M31N8RAxe = 18989 + INTEGER(IntKi), PARAMETER :: M31N9RAxe = 18990 + INTEGER(IntKi), PARAMETER :: M32N1RAxe = 18991 + INTEGER(IntKi), PARAMETER :: M32N2RAxe = 18992 + INTEGER(IntKi), PARAMETER :: M32N3RAxe = 18993 + INTEGER(IntKi), PARAMETER :: M32N4RAxe = 18994 + INTEGER(IntKi), PARAMETER :: M32N5RAxe = 18995 + INTEGER(IntKi), PARAMETER :: M32N6RAxe = 18996 + INTEGER(IntKi), PARAMETER :: M32N7RAxe = 18997 + INTEGER(IntKi), PARAMETER :: M32N8RAxe = 18998 + INTEGER(IntKi), PARAMETER :: M32N9RAxe = 18999 + INTEGER(IntKi), PARAMETER :: M33N1RAxe = 19000 + INTEGER(IntKi), PARAMETER :: M33N2RAxe = 19001 + INTEGER(IntKi), PARAMETER :: M33N3RAxe = 19002 + INTEGER(IntKi), PARAMETER :: M33N4RAxe = 19003 + INTEGER(IntKi), PARAMETER :: M33N5RAxe = 19004 + INTEGER(IntKi), PARAMETER :: M33N6RAxe = 19005 + INTEGER(IntKi), PARAMETER :: M33N7RAxe = 19006 + INTEGER(IntKi), PARAMETER :: M33N8RAxe = 19007 + INTEGER(IntKi), PARAMETER :: M33N9RAxe = 19008 + INTEGER(IntKi), PARAMETER :: M34N1RAxe = 19009 + INTEGER(IntKi), PARAMETER :: M34N2RAxe = 19010 + INTEGER(IntKi), PARAMETER :: M34N3RAxe = 19011 + INTEGER(IntKi), PARAMETER :: M34N4RAxe = 19012 + INTEGER(IntKi), PARAMETER :: M34N5RAxe = 19013 + INTEGER(IntKi), PARAMETER :: M34N6RAxe = 19014 + INTEGER(IntKi), PARAMETER :: M34N7RAxe = 19015 + INTEGER(IntKi), PARAMETER :: M34N8RAxe = 19016 + INTEGER(IntKi), PARAMETER :: M34N9RAxe = 19017 + INTEGER(IntKi), PARAMETER :: M35N1RAxe = 19018 + INTEGER(IntKi), PARAMETER :: M35N2RAxe = 19019 + INTEGER(IntKi), PARAMETER :: M35N3RAxe = 19020 + INTEGER(IntKi), PARAMETER :: M35N4RAxe = 19021 + INTEGER(IntKi), PARAMETER :: M35N5RAxe = 19022 + INTEGER(IntKi), PARAMETER :: M35N6RAxe = 19023 + INTEGER(IntKi), PARAMETER :: M35N7RAxe = 19024 + INTEGER(IntKi), PARAMETER :: M35N8RAxe = 19025 + INTEGER(IntKi), PARAMETER :: M35N9RAxe = 19026 + INTEGER(IntKi), PARAMETER :: M36N1RAxe = 19027 + INTEGER(IntKi), PARAMETER :: M36N2RAxe = 19028 + INTEGER(IntKi), PARAMETER :: M36N3RAxe = 19029 + INTEGER(IntKi), PARAMETER :: M36N4RAxe = 19030 + INTEGER(IntKi), PARAMETER :: M36N5RAxe = 19031 + INTEGER(IntKi), PARAMETER :: M36N6RAxe = 19032 + INTEGER(IntKi), PARAMETER :: M36N7RAxe = 19033 + INTEGER(IntKi), PARAMETER :: M36N8RAxe = 19034 + INTEGER(IntKi), PARAMETER :: M36N9RAxe = 19035 + INTEGER(IntKi), PARAMETER :: M37N1RAxe = 19036 + INTEGER(IntKi), PARAMETER :: M37N2RAxe = 19037 + INTEGER(IntKi), PARAMETER :: M37N3RAxe = 19038 + INTEGER(IntKi), PARAMETER :: M37N4RAxe = 19039 + INTEGER(IntKi), PARAMETER :: M37N5RAxe = 19040 + INTEGER(IntKi), PARAMETER :: M37N6RAxe = 19041 + INTEGER(IntKi), PARAMETER :: M37N7RAxe = 19042 + INTEGER(IntKi), PARAMETER :: M37N8RAxe = 19043 + INTEGER(IntKi), PARAMETER :: M37N9RAxe = 19044 + INTEGER(IntKi), PARAMETER :: M38N1RAxe = 19045 + INTEGER(IntKi), PARAMETER :: M38N2RAxe = 19046 + INTEGER(IntKi), PARAMETER :: M38N3RAxe = 19047 + INTEGER(IntKi), PARAMETER :: M38N4RAxe = 19048 + INTEGER(IntKi), PARAMETER :: M38N5RAxe = 19049 + INTEGER(IntKi), PARAMETER :: M38N6RAxe = 19050 + INTEGER(IntKi), PARAMETER :: M38N7RAxe = 19051 + INTEGER(IntKi), PARAMETER :: M38N8RAxe = 19052 + INTEGER(IntKi), PARAMETER :: M38N9RAxe = 19053 + INTEGER(IntKi), PARAMETER :: M39N1RAxe = 19054 + INTEGER(IntKi), PARAMETER :: M39N2RAxe = 19055 + INTEGER(IntKi), PARAMETER :: M39N3RAxe = 19056 + INTEGER(IntKi), PARAMETER :: M39N4RAxe = 19057 + INTEGER(IntKi), PARAMETER :: M39N5RAxe = 19058 + INTEGER(IntKi), PARAMETER :: M39N6RAxe = 19059 + INTEGER(IntKi), PARAMETER :: M39N7RAxe = 19060 + INTEGER(IntKi), PARAMETER :: M39N8RAxe = 19061 + INTEGER(IntKi), PARAMETER :: M39N9RAxe = 19062 + INTEGER(IntKi), PARAMETER :: M40N1RAxe = 19063 + INTEGER(IntKi), PARAMETER :: M40N2RAxe = 19064 + INTEGER(IntKi), PARAMETER :: M40N3RAxe = 19065 + INTEGER(IntKi), PARAMETER :: M40N4RAxe = 19066 + INTEGER(IntKi), PARAMETER :: M40N5RAxe = 19067 + INTEGER(IntKi), PARAMETER :: M40N6RAxe = 19068 + INTEGER(IntKi), PARAMETER :: M40N7RAxe = 19069 + INTEGER(IntKi), PARAMETER :: M40N8RAxe = 19070 + INTEGER(IntKi), PARAMETER :: M40N9RAxe = 19071 + INTEGER(IntKi), PARAMETER :: M41N1RAxe = 19072 + INTEGER(IntKi), PARAMETER :: M41N2RAxe = 19073 + INTEGER(IntKi), PARAMETER :: M41N3RAxe = 19074 + INTEGER(IntKi), PARAMETER :: M41N4RAxe = 19075 + INTEGER(IntKi), PARAMETER :: M41N5RAxe = 19076 + INTEGER(IntKi), PARAMETER :: M41N6RAxe = 19077 + INTEGER(IntKi), PARAMETER :: M41N7RAxe = 19078 + INTEGER(IntKi), PARAMETER :: M41N8RAxe = 19079 + INTEGER(IntKi), PARAMETER :: M41N9RAxe = 19080 + INTEGER(IntKi), PARAMETER :: M42N1RAxe = 19081 + INTEGER(IntKi), PARAMETER :: M42N2RAxe = 19082 + INTEGER(IntKi), PARAMETER :: M42N3RAxe = 19083 + INTEGER(IntKi), PARAMETER :: M42N4RAxe = 19084 + INTEGER(IntKi), PARAMETER :: M42N5RAxe = 19085 + INTEGER(IntKi), PARAMETER :: M42N6RAxe = 19086 + INTEGER(IntKi), PARAMETER :: M42N7RAxe = 19087 + INTEGER(IntKi), PARAMETER :: M42N8RAxe = 19088 + INTEGER(IntKi), PARAMETER :: M42N9RAxe = 19089 + INTEGER(IntKi), PARAMETER :: M43N1RAxe = 19090 + INTEGER(IntKi), PARAMETER :: M43N2RAxe = 19091 + INTEGER(IntKi), PARAMETER :: M43N3RAxe = 19092 + INTEGER(IntKi), PARAMETER :: M43N4RAxe = 19093 + INTEGER(IntKi), PARAMETER :: M43N5RAxe = 19094 + INTEGER(IntKi), PARAMETER :: M43N6RAxe = 19095 + INTEGER(IntKi), PARAMETER :: M43N7RAxe = 19096 + INTEGER(IntKi), PARAMETER :: M43N8RAxe = 19097 + INTEGER(IntKi), PARAMETER :: M43N9RAxe = 19098 + INTEGER(IntKi), PARAMETER :: M44N1RAxe = 19099 + INTEGER(IntKi), PARAMETER :: M44N2RAxe = 19100 + INTEGER(IntKi), PARAMETER :: M44N3RAxe = 19101 + INTEGER(IntKi), PARAMETER :: M44N4RAxe = 19102 + INTEGER(IntKi), PARAMETER :: M44N5RAxe = 19103 + INTEGER(IntKi), PARAMETER :: M44N6RAxe = 19104 + INTEGER(IntKi), PARAMETER :: M44N7RAxe = 19105 + INTEGER(IntKi), PARAMETER :: M44N8RAxe = 19106 + INTEGER(IntKi), PARAMETER :: M44N9RAxe = 19107 + INTEGER(IntKi), PARAMETER :: M45N1RAxe = 19108 + INTEGER(IntKi), PARAMETER :: M45N2RAxe = 19109 + INTEGER(IntKi), PARAMETER :: M45N3RAxe = 19110 + INTEGER(IntKi), PARAMETER :: M45N4RAxe = 19111 + INTEGER(IntKi), PARAMETER :: M45N5RAxe = 19112 + INTEGER(IntKi), PARAMETER :: M45N6RAxe = 19113 + INTEGER(IntKi), PARAMETER :: M45N7RAxe = 19114 + INTEGER(IntKi), PARAMETER :: M45N8RAxe = 19115 + INTEGER(IntKi), PARAMETER :: M45N9RAxe = 19116 + INTEGER(IntKi), PARAMETER :: M46N1RAxe = 19117 + INTEGER(IntKi), PARAMETER :: M46N2RAxe = 19118 + INTEGER(IntKi), PARAMETER :: M46N3RAxe = 19119 + INTEGER(IntKi), PARAMETER :: M46N4RAxe = 19120 + INTEGER(IntKi), PARAMETER :: M46N5RAxe = 19121 + INTEGER(IntKi), PARAMETER :: M46N6RAxe = 19122 + INTEGER(IntKi), PARAMETER :: M46N7RAxe = 19123 + INTEGER(IntKi), PARAMETER :: M46N8RAxe = 19124 + INTEGER(IntKi), PARAMETER :: M46N9RAxe = 19125 + INTEGER(IntKi), PARAMETER :: M47N1RAxe = 19126 + INTEGER(IntKi), PARAMETER :: M47N2RAxe = 19127 + INTEGER(IntKi), PARAMETER :: M47N3RAxe = 19128 + INTEGER(IntKi), PARAMETER :: M47N4RAxe = 19129 + INTEGER(IntKi), PARAMETER :: M47N5RAxe = 19130 + INTEGER(IntKi), PARAMETER :: M47N6RAxe = 19131 + INTEGER(IntKi), PARAMETER :: M47N7RAxe = 19132 + INTEGER(IntKi), PARAMETER :: M47N8RAxe = 19133 + INTEGER(IntKi), PARAMETER :: M47N9RAxe = 19134 + INTEGER(IntKi), PARAMETER :: M48N1RAxe = 19135 + INTEGER(IntKi), PARAMETER :: M48N2RAxe = 19136 + INTEGER(IntKi), PARAMETER :: M48N3RAxe = 19137 + INTEGER(IntKi), PARAMETER :: M48N4RAxe = 19138 + INTEGER(IntKi), PARAMETER :: M48N5RAxe = 19139 + INTEGER(IntKi), PARAMETER :: M48N6RAxe = 19140 + INTEGER(IntKi), PARAMETER :: M48N7RAxe = 19141 + INTEGER(IntKi), PARAMETER :: M48N8RAxe = 19142 + INTEGER(IntKi), PARAMETER :: M48N9RAxe = 19143 + INTEGER(IntKi), PARAMETER :: M49N1RAxe = 19144 + INTEGER(IntKi), PARAMETER :: M49N2RAxe = 19145 + INTEGER(IntKi), PARAMETER :: M49N3RAxe = 19146 + INTEGER(IntKi), PARAMETER :: M49N4RAxe = 19147 + INTEGER(IntKi), PARAMETER :: M49N5RAxe = 19148 + INTEGER(IntKi), PARAMETER :: M49N6RAxe = 19149 + INTEGER(IntKi), PARAMETER :: M49N7RAxe = 19150 + INTEGER(IntKi), PARAMETER :: M49N8RAxe = 19151 + INTEGER(IntKi), PARAMETER :: M49N9RAxe = 19152 + INTEGER(IntKi), PARAMETER :: M50N1RAxe = 19153 + INTEGER(IntKi), PARAMETER :: M50N2RAxe = 19154 + INTEGER(IntKi), PARAMETER :: M50N3RAxe = 19155 + INTEGER(IntKi), PARAMETER :: M50N4RAxe = 19156 + INTEGER(IntKi), PARAMETER :: M50N5RAxe = 19157 + INTEGER(IntKi), PARAMETER :: M50N6RAxe = 19158 + INTEGER(IntKi), PARAMETER :: M50N7RAxe = 19159 + INTEGER(IntKi), PARAMETER :: M50N8RAxe = 19160 + INTEGER(IntKi), PARAMETER :: M50N9RAxe = 19161 + INTEGER(IntKi), PARAMETER :: M51N1RAxe = 19162 + INTEGER(IntKi), PARAMETER :: M51N2RAxe = 19163 + INTEGER(IntKi), PARAMETER :: M51N3RAxe = 19164 + INTEGER(IntKi), PARAMETER :: M51N4RAxe = 19165 + INTEGER(IntKi), PARAMETER :: M51N5RAxe = 19166 + INTEGER(IntKi), PARAMETER :: M51N6RAxe = 19167 + INTEGER(IntKi), PARAMETER :: M51N7RAxe = 19168 + INTEGER(IntKi), PARAMETER :: M51N8RAxe = 19169 + INTEGER(IntKi), PARAMETER :: M51N9RAxe = 19170 + INTEGER(IntKi), PARAMETER :: M52N1RAxe = 19171 + INTEGER(IntKi), PARAMETER :: M52N2RAxe = 19172 + INTEGER(IntKi), PARAMETER :: M52N3RAxe = 19173 + INTEGER(IntKi), PARAMETER :: M52N4RAxe = 19174 + INTEGER(IntKi), PARAMETER :: M52N5RAxe = 19175 + INTEGER(IntKi), PARAMETER :: M52N6RAxe = 19176 + INTEGER(IntKi), PARAMETER :: M52N7RAxe = 19177 + INTEGER(IntKi), PARAMETER :: M52N8RAxe = 19178 + INTEGER(IntKi), PARAMETER :: M52N9RAxe = 19179 + INTEGER(IntKi), PARAMETER :: M53N1RAxe = 19180 + INTEGER(IntKi), PARAMETER :: M53N2RAxe = 19181 + INTEGER(IntKi), PARAMETER :: M53N3RAxe = 19182 + INTEGER(IntKi), PARAMETER :: M53N4RAxe = 19183 + INTEGER(IntKi), PARAMETER :: M53N5RAxe = 19184 + INTEGER(IntKi), PARAMETER :: M53N6RAxe = 19185 + INTEGER(IntKi), PARAMETER :: M53N7RAxe = 19186 + INTEGER(IntKi), PARAMETER :: M53N8RAxe = 19187 + INTEGER(IntKi), PARAMETER :: M53N9RAxe = 19188 + INTEGER(IntKi), PARAMETER :: M54N1RAxe = 19189 + INTEGER(IntKi), PARAMETER :: M54N2RAxe = 19190 + INTEGER(IntKi), PARAMETER :: M54N3RAxe = 19191 + INTEGER(IntKi), PARAMETER :: M54N4RAxe = 19192 + INTEGER(IntKi), PARAMETER :: M54N5RAxe = 19193 + INTEGER(IntKi), PARAMETER :: M54N6RAxe = 19194 + INTEGER(IntKi), PARAMETER :: M54N7RAxe = 19195 + INTEGER(IntKi), PARAMETER :: M54N8RAxe = 19196 + INTEGER(IntKi), PARAMETER :: M54N9RAxe = 19197 + INTEGER(IntKi), PARAMETER :: M55N1RAxe = 19198 + INTEGER(IntKi), PARAMETER :: M55N2RAxe = 19199 + INTEGER(IntKi), PARAMETER :: M55N3RAxe = 19200 + INTEGER(IntKi), PARAMETER :: M55N4RAxe = 19201 + INTEGER(IntKi), PARAMETER :: M55N5RAxe = 19202 + INTEGER(IntKi), PARAMETER :: M55N6RAxe = 19203 + INTEGER(IntKi), PARAMETER :: M55N7RAxe = 19204 + INTEGER(IntKi), PARAMETER :: M55N8RAxe = 19205 + INTEGER(IntKi), PARAMETER :: M55N9RAxe = 19206 + INTEGER(IntKi), PARAMETER :: M56N1RAxe = 19207 + INTEGER(IntKi), PARAMETER :: M56N2RAxe = 19208 + INTEGER(IntKi), PARAMETER :: M56N3RAxe = 19209 + INTEGER(IntKi), PARAMETER :: M56N4RAxe = 19210 + INTEGER(IntKi), PARAMETER :: M56N5RAxe = 19211 + INTEGER(IntKi), PARAMETER :: M56N6RAxe = 19212 + INTEGER(IntKi), PARAMETER :: M56N7RAxe = 19213 + INTEGER(IntKi), PARAMETER :: M56N8RAxe = 19214 + INTEGER(IntKi), PARAMETER :: M56N9RAxe = 19215 + INTEGER(IntKi), PARAMETER :: M57N1RAxe = 19216 + INTEGER(IntKi), PARAMETER :: M57N2RAxe = 19217 + INTEGER(IntKi), PARAMETER :: M57N3RAxe = 19218 + INTEGER(IntKi), PARAMETER :: M57N4RAxe = 19219 + INTEGER(IntKi), PARAMETER :: M57N5RAxe = 19220 + INTEGER(IntKi), PARAMETER :: M57N6RAxe = 19221 + INTEGER(IntKi), PARAMETER :: M57N7RAxe = 19222 + INTEGER(IntKi), PARAMETER :: M57N8RAxe = 19223 + INTEGER(IntKi), PARAMETER :: M57N9RAxe = 19224 + INTEGER(IntKi), PARAMETER :: M58N1RAxe = 19225 + INTEGER(IntKi), PARAMETER :: M58N2RAxe = 19226 + INTEGER(IntKi), PARAMETER :: M58N3RAxe = 19227 + INTEGER(IntKi), PARAMETER :: M58N4RAxe = 19228 + INTEGER(IntKi), PARAMETER :: M58N5RAxe = 19229 + INTEGER(IntKi), PARAMETER :: M58N6RAxe = 19230 + INTEGER(IntKi), PARAMETER :: M58N7RAxe = 19231 + INTEGER(IntKi), PARAMETER :: M58N8RAxe = 19232 + INTEGER(IntKi), PARAMETER :: M58N9RAxe = 19233 + INTEGER(IntKi), PARAMETER :: M59N1RAxe = 19234 + INTEGER(IntKi), PARAMETER :: M59N2RAxe = 19235 + INTEGER(IntKi), PARAMETER :: M59N3RAxe = 19236 + INTEGER(IntKi), PARAMETER :: M59N4RAxe = 19237 + INTEGER(IntKi), PARAMETER :: M59N5RAxe = 19238 + INTEGER(IntKi), PARAMETER :: M59N6RAxe = 19239 + INTEGER(IntKi), PARAMETER :: M59N7RAxe = 19240 + INTEGER(IntKi), PARAMETER :: M59N8RAxe = 19241 + INTEGER(IntKi), PARAMETER :: M59N9RAxe = 19242 + INTEGER(IntKi), PARAMETER :: M60N1RAxe = 19243 + INTEGER(IntKi), PARAMETER :: M60N2RAxe = 19244 + INTEGER(IntKi), PARAMETER :: M60N3RAxe = 19245 + INTEGER(IntKi), PARAMETER :: M60N4RAxe = 19246 + INTEGER(IntKi), PARAMETER :: M60N5RAxe = 19247 + INTEGER(IntKi), PARAMETER :: M60N6RAxe = 19248 + INTEGER(IntKi), PARAMETER :: M60N7RAxe = 19249 + INTEGER(IntKi), PARAMETER :: M60N8RAxe = 19250 + INTEGER(IntKi), PARAMETER :: M60N9RAxe = 19251 + INTEGER(IntKi), PARAMETER :: M61N1RAxe = 19252 + INTEGER(IntKi), PARAMETER :: M61N2RAxe = 19253 + INTEGER(IntKi), PARAMETER :: M61N3RAxe = 19254 + INTEGER(IntKi), PARAMETER :: M61N4RAxe = 19255 + INTEGER(IntKi), PARAMETER :: M61N5RAxe = 19256 + INTEGER(IntKi), PARAMETER :: M61N6RAxe = 19257 + INTEGER(IntKi), PARAMETER :: M61N7RAxe = 19258 + INTEGER(IntKi), PARAMETER :: M61N8RAxe = 19259 + INTEGER(IntKi), PARAMETER :: M61N9RAxe = 19260 + INTEGER(IntKi), PARAMETER :: M62N1RAxe = 19261 + INTEGER(IntKi), PARAMETER :: M62N2RAxe = 19262 + INTEGER(IntKi), PARAMETER :: M62N3RAxe = 19263 + INTEGER(IntKi), PARAMETER :: M62N4RAxe = 19264 + INTEGER(IntKi), PARAMETER :: M62N5RAxe = 19265 + INTEGER(IntKi), PARAMETER :: M62N6RAxe = 19266 + INTEGER(IntKi), PARAMETER :: M62N7RAxe = 19267 + INTEGER(IntKi), PARAMETER :: M62N8RAxe = 19268 + INTEGER(IntKi), PARAMETER :: M62N9RAxe = 19269 + INTEGER(IntKi), PARAMETER :: M63N1RAxe = 19270 + INTEGER(IntKi), PARAMETER :: M63N2RAxe = 19271 + INTEGER(IntKi), PARAMETER :: M63N3RAxe = 19272 + INTEGER(IntKi), PARAMETER :: M63N4RAxe = 19273 + INTEGER(IntKi), PARAMETER :: M63N5RAxe = 19274 + INTEGER(IntKi), PARAMETER :: M63N6RAxe = 19275 + INTEGER(IntKi), PARAMETER :: M63N7RAxe = 19276 + INTEGER(IntKi), PARAMETER :: M63N8RAxe = 19277 + INTEGER(IntKi), PARAMETER :: M63N9RAxe = 19278 + INTEGER(IntKi), PARAMETER :: M64N1RAxe = 19279 + INTEGER(IntKi), PARAMETER :: M64N2RAxe = 19280 + INTEGER(IntKi), PARAMETER :: M64N3RAxe = 19281 + INTEGER(IntKi), PARAMETER :: M64N4RAxe = 19282 + INTEGER(IntKi), PARAMETER :: M64N5RAxe = 19283 + INTEGER(IntKi), PARAMETER :: M64N6RAxe = 19284 + INTEGER(IntKi), PARAMETER :: M64N7RAxe = 19285 + INTEGER(IntKi), PARAMETER :: M64N8RAxe = 19286 + INTEGER(IntKi), PARAMETER :: M64N9RAxe = 19287 + INTEGER(IntKi), PARAMETER :: M65N1RAxe = 19288 + INTEGER(IntKi), PARAMETER :: M65N2RAxe = 19289 + INTEGER(IntKi), PARAMETER :: M65N3RAxe = 19290 + INTEGER(IntKi), PARAMETER :: M65N4RAxe = 19291 + INTEGER(IntKi), PARAMETER :: M65N5RAxe = 19292 + INTEGER(IntKi), PARAMETER :: M65N6RAxe = 19293 + INTEGER(IntKi), PARAMETER :: M65N7RAxe = 19294 + INTEGER(IntKi), PARAMETER :: M65N8RAxe = 19295 + INTEGER(IntKi), PARAMETER :: M65N9RAxe = 19296 + INTEGER(IntKi), PARAMETER :: M66N1RAxe = 19297 + INTEGER(IntKi), PARAMETER :: M66N2RAxe = 19298 + INTEGER(IntKi), PARAMETER :: M66N3RAxe = 19299 + INTEGER(IntKi), PARAMETER :: M66N4RAxe = 19300 + INTEGER(IntKi), PARAMETER :: M66N5RAxe = 19301 + INTEGER(IntKi), PARAMETER :: M66N6RAxe = 19302 + INTEGER(IntKi), PARAMETER :: M66N7RAxe = 19303 + INTEGER(IntKi), PARAMETER :: M66N8RAxe = 19304 + INTEGER(IntKi), PARAMETER :: M66N9RAxe = 19305 + INTEGER(IntKi), PARAMETER :: M67N1RAxe = 19306 + INTEGER(IntKi), PARAMETER :: M67N2RAxe = 19307 + INTEGER(IntKi), PARAMETER :: M67N3RAxe = 19308 + INTEGER(IntKi), PARAMETER :: M67N4RAxe = 19309 + INTEGER(IntKi), PARAMETER :: M67N5RAxe = 19310 + INTEGER(IntKi), PARAMETER :: M67N6RAxe = 19311 + INTEGER(IntKi), PARAMETER :: M67N7RAxe = 19312 + INTEGER(IntKi), PARAMETER :: M67N8RAxe = 19313 + INTEGER(IntKi), PARAMETER :: M67N9RAxe = 19314 + INTEGER(IntKi), PARAMETER :: M68N1RAxe = 19315 + INTEGER(IntKi), PARAMETER :: M68N2RAxe = 19316 + INTEGER(IntKi), PARAMETER :: M68N3RAxe = 19317 + INTEGER(IntKi), PARAMETER :: M68N4RAxe = 19318 + INTEGER(IntKi), PARAMETER :: M68N5RAxe = 19319 + INTEGER(IntKi), PARAMETER :: M68N6RAxe = 19320 + INTEGER(IntKi), PARAMETER :: M68N7RAxe = 19321 + INTEGER(IntKi), PARAMETER :: M68N8RAxe = 19322 + INTEGER(IntKi), PARAMETER :: M68N9RAxe = 19323 + INTEGER(IntKi), PARAMETER :: M69N1RAxe = 19324 + INTEGER(IntKi), PARAMETER :: M69N2RAxe = 19325 + INTEGER(IntKi), PARAMETER :: M69N3RAxe = 19326 + INTEGER(IntKi), PARAMETER :: M69N4RAxe = 19327 + INTEGER(IntKi), PARAMETER :: M69N5RAxe = 19328 + INTEGER(IntKi), PARAMETER :: M69N6RAxe = 19329 + INTEGER(IntKi), PARAMETER :: M69N7RAxe = 19330 + INTEGER(IntKi), PARAMETER :: M69N8RAxe = 19331 + INTEGER(IntKi), PARAMETER :: M69N9RAxe = 19332 + INTEGER(IntKi), PARAMETER :: M70N1RAxe = 19333 + INTEGER(IntKi), PARAMETER :: M70N2RAxe = 19334 + INTEGER(IntKi), PARAMETER :: M70N3RAxe = 19335 + INTEGER(IntKi), PARAMETER :: M70N4RAxe = 19336 + INTEGER(IntKi), PARAMETER :: M70N5RAxe = 19337 + INTEGER(IntKi), PARAMETER :: M70N6RAxe = 19338 + INTEGER(IntKi), PARAMETER :: M70N7RAxe = 19339 + INTEGER(IntKi), PARAMETER :: M70N8RAxe = 19340 + INTEGER(IntKi), PARAMETER :: M70N9RAxe = 19341 + INTEGER(IntKi), PARAMETER :: M71N1RAxe = 19342 + INTEGER(IntKi), PARAMETER :: M71N2RAxe = 19343 + INTEGER(IntKi), PARAMETER :: M71N3RAxe = 19344 + INTEGER(IntKi), PARAMETER :: M71N4RAxe = 19345 + INTEGER(IntKi), PARAMETER :: M71N5RAxe = 19346 + INTEGER(IntKi), PARAMETER :: M71N6RAxe = 19347 + INTEGER(IntKi), PARAMETER :: M71N7RAxe = 19348 + INTEGER(IntKi), PARAMETER :: M71N8RAxe = 19349 + INTEGER(IntKi), PARAMETER :: M71N9RAxe = 19350 + INTEGER(IntKi), PARAMETER :: M72N1RAxe = 19351 + INTEGER(IntKi), PARAMETER :: M72N2RAxe = 19352 + INTEGER(IntKi), PARAMETER :: M72N3RAxe = 19353 + INTEGER(IntKi), PARAMETER :: M72N4RAxe = 19354 + INTEGER(IntKi), PARAMETER :: M72N5RAxe = 19355 + INTEGER(IntKi), PARAMETER :: M72N6RAxe = 19356 + INTEGER(IntKi), PARAMETER :: M72N7RAxe = 19357 + INTEGER(IntKi), PARAMETER :: M72N8RAxe = 19358 + INTEGER(IntKi), PARAMETER :: M72N9RAxe = 19359 + INTEGER(IntKi), PARAMETER :: M73N1RAxe = 19360 + INTEGER(IntKi), PARAMETER :: M73N2RAxe = 19361 + INTEGER(IntKi), PARAMETER :: M73N3RAxe = 19362 + INTEGER(IntKi), PARAMETER :: M73N4RAxe = 19363 + INTEGER(IntKi), PARAMETER :: M73N5RAxe = 19364 + INTEGER(IntKi), PARAMETER :: M73N6RAxe = 19365 + INTEGER(IntKi), PARAMETER :: M73N7RAxe = 19366 + INTEGER(IntKi), PARAMETER :: M73N8RAxe = 19367 + INTEGER(IntKi), PARAMETER :: M73N9RAxe = 19368 + INTEGER(IntKi), PARAMETER :: M74N1RAxe = 19369 + INTEGER(IntKi), PARAMETER :: M74N2RAxe = 19370 + INTEGER(IntKi), PARAMETER :: M74N3RAxe = 19371 + INTEGER(IntKi), PARAMETER :: M74N4RAxe = 19372 + INTEGER(IntKi), PARAMETER :: M74N5RAxe = 19373 + INTEGER(IntKi), PARAMETER :: M74N6RAxe = 19374 + INTEGER(IntKi), PARAMETER :: M74N7RAxe = 19375 + INTEGER(IntKi), PARAMETER :: M74N8RAxe = 19376 + INTEGER(IntKi), PARAMETER :: M74N9RAxe = 19377 + INTEGER(IntKi), PARAMETER :: M75N1RAxe = 19378 + INTEGER(IntKi), PARAMETER :: M75N2RAxe = 19379 + INTEGER(IntKi), PARAMETER :: M75N3RAxe = 19380 + INTEGER(IntKi), PARAMETER :: M75N4RAxe = 19381 + INTEGER(IntKi), PARAMETER :: M75N5RAxe = 19382 + INTEGER(IntKi), PARAMETER :: M75N6RAxe = 19383 + INTEGER(IntKi), PARAMETER :: M75N7RAxe = 19384 + INTEGER(IntKi), PARAMETER :: M75N8RAxe = 19385 + INTEGER(IntKi), PARAMETER :: M75N9RAxe = 19386 + INTEGER(IntKi), PARAMETER :: M76N1RAxe = 19387 + INTEGER(IntKi), PARAMETER :: M76N2RAxe = 19388 + INTEGER(IntKi), PARAMETER :: M76N3RAxe = 19389 + INTEGER(IntKi), PARAMETER :: M76N4RAxe = 19390 + INTEGER(IntKi), PARAMETER :: M76N5RAxe = 19391 + INTEGER(IntKi), PARAMETER :: M76N6RAxe = 19392 + INTEGER(IntKi), PARAMETER :: M76N7RAxe = 19393 + INTEGER(IntKi), PARAMETER :: M76N8RAxe = 19394 + INTEGER(IntKi), PARAMETER :: M76N9RAxe = 19395 + INTEGER(IntKi), PARAMETER :: M77N1RAxe = 19396 + INTEGER(IntKi), PARAMETER :: M77N2RAxe = 19397 + INTEGER(IntKi), PARAMETER :: M77N3RAxe = 19398 + INTEGER(IntKi), PARAMETER :: M77N4RAxe = 19399 + INTEGER(IntKi), PARAMETER :: M77N5RAxe = 19400 + INTEGER(IntKi), PARAMETER :: M77N6RAxe = 19401 + INTEGER(IntKi), PARAMETER :: M77N7RAxe = 19402 + INTEGER(IntKi), PARAMETER :: M77N8RAxe = 19403 + INTEGER(IntKi), PARAMETER :: M77N9RAxe = 19404 + INTEGER(IntKi), PARAMETER :: M78N1RAxe = 19405 + INTEGER(IntKi), PARAMETER :: M78N2RAxe = 19406 + INTEGER(IntKi), PARAMETER :: M78N3RAxe = 19407 + INTEGER(IntKi), PARAMETER :: M78N4RAxe = 19408 + INTEGER(IntKi), PARAMETER :: M78N5RAxe = 19409 + INTEGER(IntKi), PARAMETER :: M78N6RAxe = 19410 + INTEGER(IntKi), PARAMETER :: M78N7RAxe = 19411 + INTEGER(IntKi), PARAMETER :: M78N8RAxe = 19412 + INTEGER(IntKi), PARAMETER :: M78N9RAxe = 19413 + INTEGER(IntKi), PARAMETER :: M79N1RAxe = 19414 + INTEGER(IntKi), PARAMETER :: M79N2RAxe = 19415 + INTEGER(IntKi), PARAMETER :: M79N3RAxe = 19416 + INTEGER(IntKi), PARAMETER :: M79N4RAxe = 19417 + INTEGER(IntKi), PARAMETER :: M79N5RAxe = 19418 + INTEGER(IntKi), PARAMETER :: M79N6RAxe = 19419 + INTEGER(IntKi), PARAMETER :: M79N7RAxe = 19420 + INTEGER(IntKi), PARAMETER :: M79N8RAxe = 19421 + INTEGER(IntKi), PARAMETER :: M79N9RAxe = 19422 + INTEGER(IntKi), PARAMETER :: M80N1RAxe = 19423 + INTEGER(IntKi), PARAMETER :: M80N2RAxe = 19424 + INTEGER(IntKi), PARAMETER :: M80N3RAxe = 19425 + INTEGER(IntKi), PARAMETER :: M80N4RAxe = 19426 + INTEGER(IntKi), PARAMETER :: M80N5RAxe = 19427 + INTEGER(IntKi), PARAMETER :: M80N6RAxe = 19428 + INTEGER(IntKi), PARAMETER :: M80N7RAxe = 19429 + INTEGER(IntKi), PARAMETER :: M80N8RAxe = 19430 + INTEGER(IntKi), PARAMETER :: M80N9RAxe = 19431 + INTEGER(IntKi), PARAMETER :: M81N1RAxe = 19432 + INTEGER(IntKi), PARAMETER :: M81N2RAxe = 19433 + INTEGER(IntKi), PARAMETER :: M81N3RAxe = 19434 + INTEGER(IntKi), PARAMETER :: M81N4RAxe = 19435 + INTEGER(IntKi), PARAMETER :: M81N5RAxe = 19436 + INTEGER(IntKi), PARAMETER :: M81N6RAxe = 19437 + INTEGER(IntKi), PARAMETER :: M81N7RAxe = 19438 + INTEGER(IntKi), PARAMETER :: M81N8RAxe = 19439 + INTEGER(IntKi), PARAMETER :: M81N9RAxe = 19440 + INTEGER(IntKi), PARAMETER :: M82N1RAxe = 19441 + INTEGER(IntKi), PARAMETER :: M82N2RAxe = 19442 + INTEGER(IntKi), PARAMETER :: M82N3RAxe = 19443 + INTEGER(IntKi), PARAMETER :: M82N4RAxe = 19444 + INTEGER(IntKi), PARAMETER :: M82N5RAxe = 19445 + INTEGER(IntKi), PARAMETER :: M82N6RAxe = 19446 + INTEGER(IntKi), PARAMETER :: M82N7RAxe = 19447 + INTEGER(IntKi), PARAMETER :: M82N8RAxe = 19448 + INTEGER(IntKi), PARAMETER :: M82N9RAxe = 19449 + INTEGER(IntKi), PARAMETER :: M83N1RAxe = 19450 + INTEGER(IntKi), PARAMETER :: M83N2RAxe = 19451 + INTEGER(IntKi), PARAMETER :: M83N3RAxe = 19452 + INTEGER(IntKi), PARAMETER :: M83N4RAxe = 19453 + INTEGER(IntKi), PARAMETER :: M83N5RAxe = 19454 + INTEGER(IntKi), PARAMETER :: M83N6RAxe = 19455 + INTEGER(IntKi), PARAMETER :: M83N7RAxe = 19456 + INTEGER(IntKi), PARAMETER :: M83N8RAxe = 19457 + INTEGER(IntKi), PARAMETER :: M83N9RAxe = 19458 + INTEGER(IntKi), PARAMETER :: M84N1RAxe = 19459 + INTEGER(IntKi), PARAMETER :: M84N2RAxe = 19460 + INTEGER(IntKi), PARAMETER :: M84N3RAxe = 19461 + INTEGER(IntKi), PARAMETER :: M84N4RAxe = 19462 + INTEGER(IntKi), PARAMETER :: M84N5RAxe = 19463 + INTEGER(IntKi), PARAMETER :: M84N6RAxe = 19464 + INTEGER(IntKi), PARAMETER :: M84N7RAxe = 19465 + INTEGER(IntKi), PARAMETER :: M84N8RAxe = 19466 + INTEGER(IntKi), PARAMETER :: M84N9RAxe = 19467 + INTEGER(IntKi), PARAMETER :: M85N1RAxe = 19468 + INTEGER(IntKi), PARAMETER :: M85N2RAxe = 19469 + INTEGER(IntKi), PARAMETER :: M85N3RAxe = 19470 + INTEGER(IntKi), PARAMETER :: M85N4RAxe = 19471 + INTEGER(IntKi), PARAMETER :: M85N5RAxe = 19472 + INTEGER(IntKi), PARAMETER :: M85N6RAxe = 19473 + INTEGER(IntKi), PARAMETER :: M85N7RAxe = 19474 + INTEGER(IntKi), PARAMETER :: M85N8RAxe = 19475 + INTEGER(IntKi), PARAMETER :: M85N9RAxe = 19476 + INTEGER(IntKi), PARAMETER :: M86N1RAxe = 19477 + INTEGER(IntKi), PARAMETER :: M86N2RAxe = 19478 + INTEGER(IntKi), PARAMETER :: M86N3RAxe = 19479 + INTEGER(IntKi), PARAMETER :: M86N4RAxe = 19480 + INTEGER(IntKi), PARAMETER :: M86N5RAxe = 19481 + INTEGER(IntKi), PARAMETER :: M86N6RAxe = 19482 + INTEGER(IntKi), PARAMETER :: M86N7RAxe = 19483 + INTEGER(IntKi), PARAMETER :: M86N8RAxe = 19484 + INTEGER(IntKi), PARAMETER :: M86N9RAxe = 19485 + INTEGER(IntKi), PARAMETER :: M87N1RAxe = 19486 + INTEGER(IntKi), PARAMETER :: M87N2RAxe = 19487 + INTEGER(IntKi), PARAMETER :: M87N3RAxe = 19488 + INTEGER(IntKi), PARAMETER :: M87N4RAxe = 19489 + INTEGER(IntKi), PARAMETER :: M87N5RAxe = 19490 + INTEGER(IntKi), PARAMETER :: M87N6RAxe = 19491 + INTEGER(IntKi), PARAMETER :: M87N7RAxe = 19492 + INTEGER(IntKi), PARAMETER :: M87N8RAxe = 19493 + INTEGER(IntKi), PARAMETER :: M87N9RAxe = 19494 + INTEGER(IntKi), PARAMETER :: M88N1RAxe = 19495 + INTEGER(IntKi), PARAMETER :: M88N2RAxe = 19496 + INTEGER(IntKi), PARAMETER :: M88N3RAxe = 19497 + INTEGER(IntKi), PARAMETER :: M88N4RAxe = 19498 + INTEGER(IntKi), PARAMETER :: M88N5RAxe = 19499 + INTEGER(IntKi), PARAMETER :: M88N6RAxe = 19500 + INTEGER(IntKi), PARAMETER :: M88N7RAxe = 19501 + INTEGER(IntKi), PARAMETER :: M88N8RAxe = 19502 + INTEGER(IntKi), PARAMETER :: M88N9RAxe = 19503 + INTEGER(IntKi), PARAMETER :: M89N1RAxe = 19504 + INTEGER(IntKi), PARAMETER :: M89N2RAxe = 19505 + INTEGER(IntKi), PARAMETER :: M89N3RAxe = 19506 + INTEGER(IntKi), PARAMETER :: M89N4RAxe = 19507 + INTEGER(IntKi), PARAMETER :: M89N5RAxe = 19508 + INTEGER(IntKi), PARAMETER :: M89N6RAxe = 19509 + INTEGER(IntKi), PARAMETER :: M89N7RAxe = 19510 + INTEGER(IntKi), PARAMETER :: M89N8RAxe = 19511 + INTEGER(IntKi), PARAMETER :: M89N9RAxe = 19512 + INTEGER(IntKi), PARAMETER :: M90N1RAxe = 19513 + INTEGER(IntKi), PARAMETER :: M90N2RAxe = 19514 + INTEGER(IntKi), PARAMETER :: M90N3RAxe = 19515 + INTEGER(IntKi), PARAMETER :: M90N4RAxe = 19516 + INTEGER(IntKi), PARAMETER :: M90N5RAxe = 19517 + INTEGER(IntKi), PARAMETER :: M90N6RAxe = 19518 + INTEGER(IntKi), PARAMETER :: M90N7RAxe = 19519 + INTEGER(IntKi), PARAMETER :: M90N8RAxe = 19520 + INTEGER(IntKi), PARAMETER :: M90N9RAxe = 19521 + INTEGER(IntKi), PARAMETER :: M91N1RAxe = 19522 + INTEGER(IntKi), PARAMETER :: M91N2RAxe = 19523 + INTEGER(IntKi), PARAMETER :: M91N3RAxe = 19524 + INTEGER(IntKi), PARAMETER :: M91N4RAxe = 19525 + INTEGER(IntKi), PARAMETER :: M91N5RAxe = 19526 + INTEGER(IntKi), PARAMETER :: M91N6RAxe = 19527 + INTEGER(IntKi), PARAMETER :: M91N7RAxe = 19528 + INTEGER(IntKi), PARAMETER :: M91N8RAxe = 19529 + INTEGER(IntKi), PARAMETER :: M91N9RAxe = 19530 + INTEGER(IntKi), PARAMETER :: M92N1RAxe = 19531 + INTEGER(IntKi), PARAMETER :: M92N2RAxe = 19532 + INTEGER(IntKi), PARAMETER :: M92N3RAxe = 19533 + INTEGER(IntKi), PARAMETER :: M92N4RAxe = 19534 + INTEGER(IntKi), PARAMETER :: M92N5RAxe = 19535 + INTEGER(IntKi), PARAMETER :: M92N6RAxe = 19536 + INTEGER(IntKi), PARAMETER :: M92N7RAxe = 19537 + INTEGER(IntKi), PARAMETER :: M92N8RAxe = 19538 + INTEGER(IntKi), PARAMETER :: M92N9RAxe = 19539 + INTEGER(IntKi), PARAMETER :: M93N1RAxe = 19540 + INTEGER(IntKi), PARAMETER :: M93N2RAxe = 19541 + INTEGER(IntKi), PARAMETER :: M93N3RAxe = 19542 + INTEGER(IntKi), PARAMETER :: M93N4RAxe = 19543 + INTEGER(IntKi), PARAMETER :: M93N5RAxe = 19544 + INTEGER(IntKi), PARAMETER :: M93N6RAxe = 19545 + INTEGER(IntKi), PARAMETER :: M93N7RAxe = 19546 + INTEGER(IntKi), PARAMETER :: M93N8RAxe = 19547 + INTEGER(IntKi), PARAMETER :: M93N9RAxe = 19548 + INTEGER(IntKi), PARAMETER :: M94N1RAxe = 19549 + INTEGER(IntKi), PARAMETER :: M94N2RAxe = 19550 + INTEGER(IntKi), PARAMETER :: M94N3RAxe = 19551 + INTEGER(IntKi), PARAMETER :: M94N4RAxe = 19552 + INTEGER(IntKi), PARAMETER :: M94N5RAxe = 19553 + INTEGER(IntKi), PARAMETER :: M94N6RAxe = 19554 + INTEGER(IntKi), PARAMETER :: M94N7RAxe = 19555 + INTEGER(IntKi), PARAMETER :: M94N8RAxe = 19556 + INTEGER(IntKi), PARAMETER :: M94N9RAxe = 19557 + INTEGER(IntKi), PARAMETER :: M95N1RAxe = 19558 + INTEGER(IntKi), PARAMETER :: M95N2RAxe = 19559 + INTEGER(IntKi), PARAMETER :: M95N3RAxe = 19560 + INTEGER(IntKi), PARAMETER :: M95N4RAxe = 19561 + INTEGER(IntKi), PARAMETER :: M95N5RAxe = 19562 + INTEGER(IntKi), PARAMETER :: M95N6RAxe = 19563 + INTEGER(IntKi), PARAMETER :: M95N7RAxe = 19564 + INTEGER(IntKi), PARAMETER :: M95N8RAxe = 19565 + INTEGER(IntKi), PARAMETER :: M95N9RAxe = 19566 + INTEGER(IntKi), PARAMETER :: M96N1RAxe = 19567 + INTEGER(IntKi), PARAMETER :: M96N2RAxe = 19568 + INTEGER(IntKi), PARAMETER :: M96N3RAxe = 19569 + INTEGER(IntKi), PARAMETER :: M96N4RAxe = 19570 + INTEGER(IntKi), PARAMETER :: M96N5RAxe = 19571 + INTEGER(IntKi), PARAMETER :: M96N6RAxe = 19572 + INTEGER(IntKi), PARAMETER :: M96N7RAxe = 19573 + INTEGER(IntKi), PARAMETER :: M96N8RAxe = 19574 + INTEGER(IntKi), PARAMETER :: M96N9RAxe = 19575 + INTEGER(IntKi), PARAMETER :: M97N1RAxe = 19576 + INTEGER(IntKi), PARAMETER :: M97N2RAxe = 19577 + INTEGER(IntKi), PARAMETER :: M97N3RAxe = 19578 + INTEGER(IntKi), PARAMETER :: M97N4RAxe = 19579 + INTEGER(IntKi), PARAMETER :: M97N5RAxe = 19580 + INTEGER(IntKi), PARAMETER :: M97N6RAxe = 19581 + INTEGER(IntKi), PARAMETER :: M97N7RAxe = 19582 + INTEGER(IntKi), PARAMETER :: M97N8RAxe = 19583 + INTEGER(IntKi), PARAMETER :: M97N9RAxe = 19584 + INTEGER(IntKi), PARAMETER :: M98N1RAxe = 19585 + INTEGER(IntKi), PARAMETER :: M98N2RAxe = 19586 + INTEGER(IntKi), PARAMETER :: M98N3RAxe = 19587 + INTEGER(IntKi), PARAMETER :: M98N4RAxe = 19588 + INTEGER(IntKi), PARAMETER :: M98N5RAxe = 19589 + INTEGER(IntKi), PARAMETER :: M98N6RAxe = 19590 + INTEGER(IntKi), PARAMETER :: M98N7RAxe = 19591 + INTEGER(IntKi), PARAMETER :: M98N8RAxe = 19592 + INTEGER(IntKi), PARAMETER :: M98N9RAxe = 19593 + INTEGER(IntKi), PARAMETER :: M99N1RAxe = 19594 + INTEGER(IntKi), PARAMETER :: M99N2RAxe = 19595 + INTEGER(IntKi), PARAMETER :: M99N3RAxe = 19596 + INTEGER(IntKi), PARAMETER :: M99N4RAxe = 19597 + INTEGER(IntKi), PARAMETER :: M99N5RAxe = 19598 + INTEGER(IntKi), PARAMETER :: M99N6RAxe = 19599 + INTEGER(IntKi), PARAMETER :: M99N7RAxe = 19600 + INTEGER(IntKi), PARAMETER :: M99N8RAxe = 19601 + INTEGER(IntKi), PARAMETER :: M99N9RAxe = 19602 + INTEGER(IntKi), PARAMETER :: M01N1RAye = 19603 + INTEGER(IntKi), PARAMETER :: M01N2RAye = 19604 + INTEGER(IntKi), PARAMETER :: M01N3RAye = 19605 + INTEGER(IntKi), PARAMETER :: M01N4RAye = 19606 + INTEGER(IntKi), PARAMETER :: M01N5RAye = 19607 + INTEGER(IntKi), PARAMETER :: M01N6RAye = 19608 + INTEGER(IntKi), PARAMETER :: M01N7RAye = 19609 + INTEGER(IntKi), PARAMETER :: M01N8RAye = 19610 + INTEGER(IntKi), PARAMETER :: M01N9RAye = 19611 + INTEGER(IntKi), PARAMETER :: M02N1RAye = 19612 + INTEGER(IntKi), PARAMETER :: M02N2RAye = 19613 + INTEGER(IntKi), PARAMETER :: M02N3RAye = 19614 + INTEGER(IntKi), PARAMETER :: M02N4RAye = 19615 + INTEGER(IntKi), PARAMETER :: M02N5RAye = 19616 + INTEGER(IntKi), PARAMETER :: M02N6RAye = 19617 + INTEGER(IntKi), PARAMETER :: M02N7RAye = 19618 + INTEGER(IntKi), PARAMETER :: M02N8RAye = 19619 + INTEGER(IntKi), PARAMETER :: M02N9RAye = 19620 + INTEGER(IntKi), PARAMETER :: M03N1RAye = 19621 + INTEGER(IntKi), PARAMETER :: M03N2RAye = 19622 + INTEGER(IntKi), PARAMETER :: M03N3RAye = 19623 + INTEGER(IntKi), PARAMETER :: M03N4RAye = 19624 + INTEGER(IntKi), PARAMETER :: M03N5RAye = 19625 + INTEGER(IntKi), PARAMETER :: M03N6RAye = 19626 + INTEGER(IntKi), PARAMETER :: M03N7RAye = 19627 + INTEGER(IntKi), PARAMETER :: M03N8RAye = 19628 + INTEGER(IntKi), PARAMETER :: M03N9RAye = 19629 + INTEGER(IntKi), PARAMETER :: M04N1RAye = 19630 + INTEGER(IntKi), PARAMETER :: M04N2RAye = 19631 + INTEGER(IntKi), PARAMETER :: M04N3RAye = 19632 + INTEGER(IntKi), PARAMETER :: M04N4RAye = 19633 + INTEGER(IntKi), PARAMETER :: M04N5RAye = 19634 + INTEGER(IntKi), PARAMETER :: M04N6RAye = 19635 + INTEGER(IntKi), PARAMETER :: M04N7RAye = 19636 + INTEGER(IntKi), PARAMETER :: M04N8RAye = 19637 + INTEGER(IntKi), PARAMETER :: M04N9RAye = 19638 + INTEGER(IntKi), PARAMETER :: M05N1RAye = 19639 + INTEGER(IntKi), PARAMETER :: M05N2RAye = 19640 + INTEGER(IntKi), PARAMETER :: M05N3RAye = 19641 + INTEGER(IntKi), PARAMETER :: M05N4RAye = 19642 + INTEGER(IntKi), PARAMETER :: M05N5RAye = 19643 + INTEGER(IntKi), PARAMETER :: M05N6RAye = 19644 + INTEGER(IntKi), PARAMETER :: M05N7RAye = 19645 + INTEGER(IntKi), PARAMETER :: M05N8RAye = 19646 + INTEGER(IntKi), PARAMETER :: M05N9RAye = 19647 + INTEGER(IntKi), PARAMETER :: M06N1RAye = 19648 + INTEGER(IntKi), PARAMETER :: M06N2RAye = 19649 + INTEGER(IntKi), PARAMETER :: M06N3RAye = 19650 + INTEGER(IntKi), PARAMETER :: M06N4RAye = 19651 + INTEGER(IntKi), PARAMETER :: M06N5RAye = 19652 + INTEGER(IntKi), PARAMETER :: M06N6RAye = 19653 + INTEGER(IntKi), PARAMETER :: M06N7RAye = 19654 + INTEGER(IntKi), PARAMETER :: M06N8RAye = 19655 + INTEGER(IntKi), PARAMETER :: M06N9RAye = 19656 + INTEGER(IntKi), PARAMETER :: M07N1RAye = 19657 + INTEGER(IntKi), PARAMETER :: M07N2RAye = 19658 + INTEGER(IntKi), PARAMETER :: M07N3RAye = 19659 + INTEGER(IntKi), PARAMETER :: M07N4RAye = 19660 + INTEGER(IntKi), PARAMETER :: M07N5RAye = 19661 + INTEGER(IntKi), PARAMETER :: M07N6RAye = 19662 + INTEGER(IntKi), PARAMETER :: M07N7RAye = 19663 + INTEGER(IntKi), PARAMETER :: M07N8RAye = 19664 + INTEGER(IntKi), PARAMETER :: M07N9RAye = 19665 + INTEGER(IntKi), PARAMETER :: M08N1RAye = 19666 + INTEGER(IntKi), PARAMETER :: M08N2RAye = 19667 + INTEGER(IntKi), PARAMETER :: M08N3RAye = 19668 + INTEGER(IntKi), PARAMETER :: M08N4RAye = 19669 + INTEGER(IntKi), PARAMETER :: M08N5RAye = 19670 + INTEGER(IntKi), PARAMETER :: M08N6RAye = 19671 + INTEGER(IntKi), PARAMETER :: M08N7RAye = 19672 + INTEGER(IntKi), PARAMETER :: M08N8RAye = 19673 + INTEGER(IntKi), PARAMETER :: M08N9RAye = 19674 + INTEGER(IntKi), PARAMETER :: M09N1RAye = 19675 + INTEGER(IntKi), PARAMETER :: M09N2RAye = 19676 + INTEGER(IntKi), PARAMETER :: M09N3RAye = 19677 + INTEGER(IntKi), PARAMETER :: M09N4RAye = 19678 + INTEGER(IntKi), PARAMETER :: M09N5RAye = 19679 + INTEGER(IntKi), PARAMETER :: M09N6RAye = 19680 + INTEGER(IntKi), PARAMETER :: M09N7RAye = 19681 + INTEGER(IntKi), PARAMETER :: M09N8RAye = 19682 + INTEGER(IntKi), PARAMETER :: M09N9RAye = 19683 + INTEGER(IntKi), PARAMETER :: M10N1RAye = 19684 + INTEGER(IntKi), PARAMETER :: M10N2RAye = 19685 + INTEGER(IntKi), PARAMETER :: M10N3RAye = 19686 + INTEGER(IntKi), PARAMETER :: M10N4RAye = 19687 + INTEGER(IntKi), PARAMETER :: M10N5RAye = 19688 + INTEGER(IntKi), PARAMETER :: M10N6RAye = 19689 + INTEGER(IntKi), PARAMETER :: M10N7RAye = 19690 + INTEGER(IntKi), PARAMETER :: M10N8RAye = 19691 + INTEGER(IntKi), PARAMETER :: M10N9RAye = 19692 + INTEGER(IntKi), PARAMETER :: M11N1RAye = 19693 + INTEGER(IntKi), PARAMETER :: M11N2RAye = 19694 + INTEGER(IntKi), PARAMETER :: M11N3RAye = 19695 + INTEGER(IntKi), PARAMETER :: M11N4RAye = 19696 + INTEGER(IntKi), PARAMETER :: M11N5RAye = 19697 + INTEGER(IntKi), PARAMETER :: M11N6RAye = 19698 + INTEGER(IntKi), PARAMETER :: M11N7RAye = 19699 + INTEGER(IntKi), PARAMETER :: M11N8RAye = 19700 + INTEGER(IntKi), PARAMETER :: M11N9RAye = 19701 + INTEGER(IntKi), PARAMETER :: M12N1RAye = 19702 + INTEGER(IntKi), PARAMETER :: M12N2RAye = 19703 + INTEGER(IntKi), PARAMETER :: M12N3RAye = 19704 + INTEGER(IntKi), PARAMETER :: M12N4RAye = 19705 + INTEGER(IntKi), PARAMETER :: M12N5RAye = 19706 + INTEGER(IntKi), PARAMETER :: M12N6RAye = 19707 + INTEGER(IntKi), PARAMETER :: M12N7RAye = 19708 + INTEGER(IntKi), PARAMETER :: M12N8RAye = 19709 + INTEGER(IntKi), PARAMETER :: M12N9RAye = 19710 + INTEGER(IntKi), PARAMETER :: M13N1RAye = 19711 + INTEGER(IntKi), PARAMETER :: M13N2RAye = 19712 + INTEGER(IntKi), PARAMETER :: M13N3RAye = 19713 + INTEGER(IntKi), PARAMETER :: M13N4RAye = 19714 + INTEGER(IntKi), PARAMETER :: M13N5RAye = 19715 + INTEGER(IntKi), PARAMETER :: M13N6RAye = 19716 + INTEGER(IntKi), PARAMETER :: M13N7RAye = 19717 + INTEGER(IntKi), PARAMETER :: M13N8RAye = 19718 + INTEGER(IntKi), PARAMETER :: M13N9RAye = 19719 + INTEGER(IntKi), PARAMETER :: M14N1RAye = 19720 + INTEGER(IntKi), PARAMETER :: M14N2RAye = 19721 + INTEGER(IntKi), PARAMETER :: M14N3RAye = 19722 + INTEGER(IntKi), PARAMETER :: M14N4RAye = 19723 + INTEGER(IntKi), PARAMETER :: M14N5RAye = 19724 + INTEGER(IntKi), PARAMETER :: M14N6RAye = 19725 + INTEGER(IntKi), PARAMETER :: M14N7RAye = 19726 + INTEGER(IntKi), PARAMETER :: M14N8RAye = 19727 + INTEGER(IntKi), PARAMETER :: M14N9RAye = 19728 + INTEGER(IntKi), PARAMETER :: M15N1RAye = 19729 + INTEGER(IntKi), PARAMETER :: M15N2RAye = 19730 + INTEGER(IntKi), PARAMETER :: M15N3RAye = 19731 + INTEGER(IntKi), PARAMETER :: M15N4RAye = 19732 + INTEGER(IntKi), PARAMETER :: M15N5RAye = 19733 + INTEGER(IntKi), PARAMETER :: M15N6RAye = 19734 + INTEGER(IntKi), PARAMETER :: M15N7RAye = 19735 + INTEGER(IntKi), PARAMETER :: M15N8RAye = 19736 + INTEGER(IntKi), PARAMETER :: M15N9RAye = 19737 + INTEGER(IntKi), PARAMETER :: M16N1RAye = 19738 + INTEGER(IntKi), PARAMETER :: M16N2RAye = 19739 + INTEGER(IntKi), PARAMETER :: M16N3RAye = 19740 + INTEGER(IntKi), PARAMETER :: M16N4RAye = 19741 + INTEGER(IntKi), PARAMETER :: M16N5RAye = 19742 + INTEGER(IntKi), PARAMETER :: M16N6RAye = 19743 + INTEGER(IntKi), PARAMETER :: M16N7RAye = 19744 + INTEGER(IntKi), PARAMETER :: M16N8RAye = 19745 + INTEGER(IntKi), PARAMETER :: M16N9RAye = 19746 + INTEGER(IntKi), PARAMETER :: M17N1RAye = 19747 + INTEGER(IntKi), PARAMETER :: M17N2RAye = 19748 + INTEGER(IntKi), PARAMETER :: M17N3RAye = 19749 + INTEGER(IntKi), PARAMETER :: M17N4RAye = 19750 + INTEGER(IntKi), PARAMETER :: M17N5RAye = 19751 + INTEGER(IntKi), PARAMETER :: M17N6RAye = 19752 + INTEGER(IntKi), PARAMETER :: M17N7RAye = 19753 + INTEGER(IntKi), PARAMETER :: M17N8RAye = 19754 + INTEGER(IntKi), PARAMETER :: M17N9RAye = 19755 + INTEGER(IntKi), PARAMETER :: M18N1RAye = 19756 + INTEGER(IntKi), PARAMETER :: M18N2RAye = 19757 + INTEGER(IntKi), PARAMETER :: M18N3RAye = 19758 + INTEGER(IntKi), PARAMETER :: M18N4RAye = 19759 + INTEGER(IntKi), PARAMETER :: M18N5RAye = 19760 + INTEGER(IntKi), PARAMETER :: M18N6RAye = 19761 + INTEGER(IntKi), PARAMETER :: M18N7RAye = 19762 + INTEGER(IntKi), PARAMETER :: M18N8RAye = 19763 + INTEGER(IntKi), PARAMETER :: M18N9RAye = 19764 + INTEGER(IntKi), PARAMETER :: M19N1RAye = 19765 + INTEGER(IntKi), PARAMETER :: M19N2RAye = 19766 + INTEGER(IntKi), PARAMETER :: M19N3RAye = 19767 + INTEGER(IntKi), PARAMETER :: M19N4RAye = 19768 + INTEGER(IntKi), PARAMETER :: M19N5RAye = 19769 + INTEGER(IntKi), PARAMETER :: M19N6RAye = 19770 + INTEGER(IntKi), PARAMETER :: M19N7RAye = 19771 + INTEGER(IntKi), PARAMETER :: M19N8RAye = 19772 + INTEGER(IntKi), PARAMETER :: M19N9RAye = 19773 + INTEGER(IntKi), PARAMETER :: M20N1RAye = 19774 + INTEGER(IntKi), PARAMETER :: M20N2RAye = 19775 + INTEGER(IntKi), PARAMETER :: M20N3RAye = 19776 + INTEGER(IntKi), PARAMETER :: M20N4RAye = 19777 + INTEGER(IntKi), PARAMETER :: M20N5RAye = 19778 + INTEGER(IntKi), PARAMETER :: M20N6RAye = 19779 + INTEGER(IntKi), PARAMETER :: M20N7RAye = 19780 + INTEGER(IntKi), PARAMETER :: M20N8RAye = 19781 + INTEGER(IntKi), PARAMETER :: M20N9RAye = 19782 + INTEGER(IntKi), PARAMETER :: M21N1RAye = 19783 + INTEGER(IntKi), PARAMETER :: M21N2RAye = 19784 + INTEGER(IntKi), PARAMETER :: M21N3RAye = 19785 + INTEGER(IntKi), PARAMETER :: M21N4RAye = 19786 + INTEGER(IntKi), PARAMETER :: M21N5RAye = 19787 + INTEGER(IntKi), PARAMETER :: M21N6RAye = 19788 + INTEGER(IntKi), PARAMETER :: M21N7RAye = 19789 + INTEGER(IntKi), PARAMETER :: M21N8RAye = 19790 + INTEGER(IntKi), PARAMETER :: M21N9RAye = 19791 + INTEGER(IntKi), PARAMETER :: M22N1RAye = 19792 + INTEGER(IntKi), PARAMETER :: M22N2RAye = 19793 + INTEGER(IntKi), PARAMETER :: M22N3RAye = 19794 + INTEGER(IntKi), PARAMETER :: M22N4RAye = 19795 + INTEGER(IntKi), PARAMETER :: M22N5RAye = 19796 + INTEGER(IntKi), PARAMETER :: M22N6RAye = 19797 + INTEGER(IntKi), PARAMETER :: M22N7RAye = 19798 + INTEGER(IntKi), PARAMETER :: M22N8RAye = 19799 + INTEGER(IntKi), PARAMETER :: M22N9RAye = 19800 + INTEGER(IntKi), PARAMETER :: M23N1RAye = 19801 + INTEGER(IntKi), PARAMETER :: M23N2RAye = 19802 + INTEGER(IntKi), PARAMETER :: M23N3RAye = 19803 + INTEGER(IntKi), PARAMETER :: M23N4RAye = 19804 + INTEGER(IntKi), PARAMETER :: M23N5RAye = 19805 + INTEGER(IntKi), PARAMETER :: M23N6RAye = 19806 + INTEGER(IntKi), PARAMETER :: M23N7RAye = 19807 + INTEGER(IntKi), PARAMETER :: M23N8RAye = 19808 + INTEGER(IntKi), PARAMETER :: M23N9RAye = 19809 + INTEGER(IntKi), PARAMETER :: M24N1RAye = 19810 + INTEGER(IntKi), PARAMETER :: M24N2RAye = 19811 + INTEGER(IntKi), PARAMETER :: M24N3RAye = 19812 + INTEGER(IntKi), PARAMETER :: M24N4RAye = 19813 + INTEGER(IntKi), PARAMETER :: M24N5RAye = 19814 + INTEGER(IntKi), PARAMETER :: M24N6RAye = 19815 + INTEGER(IntKi), PARAMETER :: M24N7RAye = 19816 + INTEGER(IntKi), PARAMETER :: M24N8RAye = 19817 + INTEGER(IntKi), PARAMETER :: M24N9RAye = 19818 + INTEGER(IntKi), PARAMETER :: M25N1RAye = 19819 + INTEGER(IntKi), PARAMETER :: M25N2RAye = 19820 + INTEGER(IntKi), PARAMETER :: M25N3RAye = 19821 + INTEGER(IntKi), PARAMETER :: M25N4RAye = 19822 + INTEGER(IntKi), PARAMETER :: M25N5RAye = 19823 + INTEGER(IntKi), PARAMETER :: M25N6RAye = 19824 + INTEGER(IntKi), PARAMETER :: M25N7RAye = 19825 + INTEGER(IntKi), PARAMETER :: M25N8RAye = 19826 + INTEGER(IntKi), PARAMETER :: M25N9RAye = 19827 + INTEGER(IntKi), PARAMETER :: M26N1RAye = 19828 + INTEGER(IntKi), PARAMETER :: M26N2RAye = 19829 + INTEGER(IntKi), PARAMETER :: M26N3RAye = 19830 + INTEGER(IntKi), PARAMETER :: M26N4RAye = 19831 + INTEGER(IntKi), PARAMETER :: M26N5RAye = 19832 + INTEGER(IntKi), PARAMETER :: M26N6RAye = 19833 + INTEGER(IntKi), PARAMETER :: M26N7RAye = 19834 + INTEGER(IntKi), PARAMETER :: M26N8RAye = 19835 + INTEGER(IntKi), PARAMETER :: M26N9RAye = 19836 + INTEGER(IntKi), PARAMETER :: M27N1RAye = 19837 + INTEGER(IntKi), PARAMETER :: M27N2RAye = 19838 + INTEGER(IntKi), PARAMETER :: M27N3RAye = 19839 + INTEGER(IntKi), PARAMETER :: M27N4RAye = 19840 + INTEGER(IntKi), PARAMETER :: M27N5RAye = 19841 + INTEGER(IntKi), PARAMETER :: M27N6RAye = 19842 + INTEGER(IntKi), PARAMETER :: M27N7RAye = 19843 + INTEGER(IntKi), PARAMETER :: M27N8RAye = 19844 + INTEGER(IntKi), PARAMETER :: M27N9RAye = 19845 + INTEGER(IntKi), PARAMETER :: M28N1RAye = 19846 + INTEGER(IntKi), PARAMETER :: M28N2RAye = 19847 + INTEGER(IntKi), PARAMETER :: M28N3RAye = 19848 + INTEGER(IntKi), PARAMETER :: M28N4RAye = 19849 + INTEGER(IntKi), PARAMETER :: M28N5RAye = 19850 + INTEGER(IntKi), PARAMETER :: M28N6RAye = 19851 + INTEGER(IntKi), PARAMETER :: M28N7RAye = 19852 + INTEGER(IntKi), PARAMETER :: M28N8RAye = 19853 + INTEGER(IntKi), PARAMETER :: M28N9RAye = 19854 + INTEGER(IntKi), PARAMETER :: M29N1RAye = 19855 + INTEGER(IntKi), PARAMETER :: M29N2RAye = 19856 + INTEGER(IntKi), PARAMETER :: M29N3RAye = 19857 + INTEGER(IntKi), PARAMETER :: M29N4RAye = 19858 + INTEGER(IntKi), PARAMETER :: M29N5RAye = 19859 + INTEGER(IntKi), PARAMETER :: M29N6RAye = 19860 + INTEGER(IntKi), PARAMETER :: M29N7RAye = 19861 + INTEGER(IntKi), PARAMETER :: M29N8RAye = 19862 + INTEGER(IntKi), PARAMETER :: M29N9RAye = 19863 + INTEGER(IntKi), PARAMETER :: M30N1RAye = 19864 + INTEGER(IntKi), PARAMETER :: M30N2RAye = 19865 + INTEGER(IntKi), PARAMETER :: M30N3RAye = 19866 + INTEGER(IntKi), PARAMETER :: M30N4RAye = 19867 + INTEGER(IntKi), PARAMETER :: M30N5RAye = 19868 + INTEGER(IntKi), PARAMETER :: M30N6RAye = 19869 + INTEGER(IntKi), PARAMETER :: M30N7RAye = 19870 + INTEGER(IntKi), PARAMETER :: M30N8RAye = 19871 + INTEGER(IntKi), PARAMETER :: M30N9RAye = 19872 + INTEGER(IntKi), PARAMETER :: M31N1RAye = 19873 + INTEGER(IntKi), PARAMETER :: M31N2RAye = 19874 + INTEGER(IntKi), PARAMETER :: M31N3RAye = 19875 + INTEGER(IntKi), PARAMETER :: M31N4RAye = 19876 + INTEGER(IntKi), PARAMETER :: M31N5RAye = 19877 + INTEGER(IntKi), PARAMETER :: M31N6RAye = 19878 + INTEGER(IntKi), PARAMETER :: M31N7RAye = 19879 + INTEGER(IntKi), PARAMETER :: M31N8RAye = 19880 + INTEGER(IntKi), PARAMETER :: M31N9RAye = 19881 + INTEGER(IntKi), PARAMETER :: M32N1RAye = 19882 + INTEGER(IntKi), PARAMETER :: M32N2RAye = 19883 + INTEGER(IntKi), PARAMETER :: M32N3RAye = 19884 + INTEGER(IntKi), PARAMETER :: M32N4RAye = 19885 + INTEGER(IntKi), PARAMETER :: M32N5RAye = 19886 + INTEGER(IntKi), PARAMETER :: M32N6RAye = 19887 + INTEGER(IntKi), PARAMETER :: M32N7RAye = 19888 + INTEGER(IntKi), PARAMETER :: M32N8RAye = 19889 + INTEGER(IntKi), PARAMETER :: M32N9RAye = 19890 + INTEGER(IntKi), PARAMETER :: M33N1RAye = 19891 + INTEGER(IntKi), PARAMETER :: M33N2RAye = 19892 + INTEGER(IntKi), PARAMETER :: M33N3RAye = 19893 + INTEGER(IntKi), PARAMETER :: M33N4RAye = 19894 + INTEGER(IntKi), PARAMETER :: M33N5RAye = 19895 + INTEGER(IntKi), PARAMETER :: M33N6RAye = 19896 + INTEGER(IntKi), PARAMETER :: M33N7RAye = 19897 + INTEGER(IntKi), PARAMETER :: M33N8RAye = 19898 + INTEGER(IntKi), PARAMETER :: M33N9RAye = 19899 + INTEGER(IntKi), PARAMETER :: M34N1RAye = 19900 + INTEGER(IntKi), PARAMETER :: M34N2RAye = 19901 + INTEGER(IntKi), PARAMETER :: M34N3RAye = 19902 + INTEGER(IntKi), PARAMETER :: M34N4RAye = 19903 + INTEGER(IntKi), PARAMETER :: M34N5RAye = 19904 + INTEGER(IntKi), PARAMETER :: M34N6RAye = 19905 + INTEGER(IntKi), PARAMETER :: M34N7RAye = 19906 + INTEGER(IntKi), PARAMETER :: M34N8RAye = 19907 + INTEGER(IntKi), PARAMETER :: M34N9RAye = 19908 + INTEGER(IntKi), PARAMETER :: M35N1RAye = 19909 + INTEGER(IntKi), PARAMETER :: M35N2RAye = 19910 + INTEGER(IntKi), PARAMETER :: M35N3RAye = 19911 + INTEGER(IntKi), PARAMETER :: M35N4RAye = 19912 + INTEGER(IntKi), PARAMETER :: M35N5RAye = 19913 + INTEGER(IntKi), PARAMETER :: M35N6RAye = 19914 + INTEGER(IntKi), PARAMETER :: M35N7RAye = 19915 + INTEGER(IntKi), PARAMETER :: M35N8RAye = 19916 + INTEGER(IntKi), PARAMETER :: M35N9RAye = 19917 + INTEGER(IntKi), PARAMETER :: M36N1RAye = 19918 + INTEGER(IntKi), PARAMETER :: M36N2RAye = 19919 + INTEGER(IntKi), PARAMETER :: M36N3RAye = 19920 + INTEGER(IntKi), PARAMETER :: M36N4RAye = 19921 + INTEGER(IntKi), PARAMETER :: M36N5RAye = 19922 + INTEGER(IntKi), PARAMETER :: M36N6RAye = 19923 + INTEGER(IntKi), PARAMETER :: M36N7RAye = 19924 + INTEGER(IntKi), PARAMETER :: M36N8RAye = 19925 + INTEGER(IntKi), PARAMETER :: M36N9RAye = 19926 + INTEGER(IntKi), PARAMETER :: M37N1RAye = 19927 + INTEGER(IntKi), PARAMETER :: M37N2RAye = 19928 + INTEGER(IntKi), PARAMETER :: M37N3RAye = 19929 + INTEGER(IntKi), PARAMETER :: M37N4RAye = 19930 + INTEGER(IntKi), PARAMETER :: M37N5RAye = 19931 + INTEGER(IntKi), PARAMETER :: M37N6RAye = 19932 + INTEGER(IntKi), PARAMETER :: M37N7RAye = 19933 + INTEGER(IntKi), PARAMETER :: M37N8RAye = 19934 + INTEGER(IntKi), PARAMETER :: M37N9RAye = 19935 + INTEGER(IntKi), PARAMETER :: M38N1RAye = 19936 + INTEGER(IntKi), PARAMETER :: M38N2RAye = 19937 + INTEGER(IntKi), PARAMETER :: M38N3RAye = 19938 + INTEGER(IntKi), PARAMETER :: M38N4RAye = 19939 + INTEGER(IntKi), PARAMETER :: M38N5RAye = 19940 + INTEGER(IntKi), PARAMETER :: M38N6RAye = 19941 + INTEGER(IntKi), PARAMETER :: M38N7RAye = 19942 + INTEGER(IntKi), PARAMETER :: M38N8RAye = 19943 + INTEGER(IntKi), PARAMETER :: M38N9RAye = 19944 + INTEGER(IntKi), PARAMETER :: M39N1RAye = 19945 + INTEGER(IntKi), PARAMETER :: M39N2RAye = 19946 + INTEGER(IntKi), PARAMETER :: M39N3RAye = 19947 + INTEGER(IntKi), PARAMETER :: M39N4RAye = 19948 + INTEGER(IntKi), PARAMETER :: M39N5RAye = 19949 + INTEGER(IntKi), PARAMETER :: M39N6RAye = 19950 + INTEGER(IntKi), PARAMETER :: M39N7RAye = 19951 + INTEGER(IntKi), PARAMETER :: M39N8RAye = 19952 + INTEGER(IntKi), PARAMETER :: M39N9RAye = 19953 + INTEGER(IntKi), PARAMETER :: M40N1RAye = 19954 + INTEGER(IntKi), PARAMETER :: M40N2RAye = 19955 + INTEGER(IntKi), PARAMETER :: M40N3RAye = 19956 + INTEGER(IntKi), PARAMETER :: M40N4RAye = 19957 + INTEGER(IntKi), PARAMETER :: M40N5RAye = 19958 + INTEGER(IntKi), PARAMETER :: M40N6RAye = 19959 + INTEGER(IntKi), PARAMETER :: M40N7RAye = 19960 + INTEGER(IntKi), PARAMETER :: M40N8RAye = 19961 + INTEGER(IntKi), PARAMETER :: M40N9RAye = 19962 + INTEGER(IntKi), PARAMETER :: M41N1RAye = 19963 + INTEGER(IntKi), PARAMETER :: M41N2RAye = 19964 + INTEGER(IntKi), PARAMETER :: M41N3RAye = 19965 + INTEGER(IntKi), PARAMETER :: M41N4RAye = 19966 + INTEGER(IntKi), PARAMETER :: M41N5RAye = 19967 + INTEGER(IntKi), PARAMETER :: M41N6RAye = 19968 + INTEGER(IntKi), PARAMETER :: M41N7RAye = 19969 + INTEGER(IntKi), PARAMETER :: M41N8RAye = 19970 + INTEGER(IntKi), PARAMETER :: M41N9RAye = 19971 + INTEGER(IntKi), PARAMETER :: M42N1RAye = 19972 + INTEGER(IntKi), PARAMETER :: M42N2RAye = 19973 + INTEGER(IntKi), PARAMETER :: M42N3RAye = 19974 + INTEGER(IntKi), PARAMETER :: M42N4RAye = 19975 + INTEGER(IntKi), PARAMETER :: M42N5RAye = 19976 + INTEGER(IntKi), PARAMETER :: M42N6RAye = 19977 + INTEGER(IntKi), PARAMETER :: M42N7RAye = 19978 + INTEGER(IntKi), PARAMETER :: M42N8RAye = 19979 + INTEGER(IntKi), PARAMETER :: M42N9RAye = 19980 + INTEGER(IntKi), PARAMETER :: M43N1RAye = 19981 + INTEGER(IntKi), PARAMETER :: M43N2RAye = 19982 + INTEGER(IntKi), PARAMETER :: M43N3RAye = 19983 + INTEGER(IntKi), PARAMETER :: M43N4RAye = 19984 + INTEGER(IntKi), PARAMETER :: M43N5RAye = 19985 + INTEGER(IntKi), PARAMETER :: M43N6RAye = 19986 + INTEGER(IntKi), PARAMETER :: M43N7RAye = 19987 + INTEGER(IntKi), PARAMETER :: M43N8RAye = 19988 + INTEGER(IntKi), PARAMETER :: M43N9RAye = 19989 + INTEGER(IntKi), PARAMETER :: M44N1RAye = 19990 + INTEGER(IntKi), PARAMETER :: M44N2RAye = 19991 + INTEGER(IntKi), PARAMETER :: M44N3RAye = 19992 + INTEGER(IntKi), PARAMETER :: M44N4RAye = 19993 + INTEGER(IntKi), PARAMETER :: M44N5RAye = 19994 + INTEGER(IntKi), PARAMETER :: M44N6RAye = 19995 + INTEGER(IntKi), PARAMETER :: M44N7RAye = 19996 + INTEGER(IntKi), PARAMETER :: M44N8RAye = 19997 + INTEGER(IntKi), PARAMETER :: M44N9RAye = 19998 + INTEGER(IntKi), PARAMETER :: M45N1RAye = 19999 + INTEGER(IntKi), PARAMETER :: M45N2RAye = 20000 + INTEGER(IntKi), PARAMETER :: M45N3RAye = 20001 + INTEGER(IntKi), PARAMETER :: M45N4RAye = 20002 + INTEGER(IntKi), PARAMETER :: M45N5RAye = 20003 + INTEGER(IntKi), PARAMETER :: M45N6RAye = 20004 + INTEGER(IntKi), PARAMETER :: M45N7RAye = 20005 + INTEGER(IntKi), PARAMETER :: M45N8RAye = 20006 + INTEGER(IntKi), PARAMETER :: M45N9RAye = 20007 + INTEGER(IntKi), PARAMETER :: M46N1RAye = 20008 + INTEGER(IntKi), PARAMETER :: M46N2RAye = 20009 + INTEGER(IntKi), PARAMETER :: M46N3RAye = 20010 + INTEGER(IntKi), PARAMETER :: M46N4RAye = 20011 + INTEGER(IntKi), PARAMETER :: M46N5RAye = 20012 + INTEGER(IntKi), PARAMETER :: M46N6RAye = 20013 + INTEGER(IntKi), PARAMETER :: M46N7RAye = 20014 + INTEGER(IntKi), PARAMETER :: M46N8RAye = 20015 + INTEGER(IntKi), PARAMETER :: M46N9RAye = 20016 + INTEGER(IntKi), PARAMETER :: M47N1RAye = 20017 + INTEGER(IntKi), PARAMETER :: M47N2RAye = 20018 + INTEGER(IntKi), PARAMETER :: M47N3RAye = 20019 + INTEGER(IntKi), PARAMETER :: M47N4RAye = 20020 + INTEGER(IntKi), PARAMETER :: M47N5RAye = 20021 + INTEGER(IntKi), PARAMETER :: M47N6RAye = 20022 + INTEGER(IntKi), PARAMETER :: M47N7RAye = 20023 + INTEGER(IntKi), PARAMETER :: M47N8RAye = 20024 + INTEGER(IntKi), PARAMETER :: M47N9RAye = 20025 + INTEGER(IntKi), PARAMETER :: M48N1RAye = 20026 + INTEGER(IntKi), PARAMETER :: M48N2RAye = 20027 + INTEGER(IntKi), PARAMETER :: M48N3RAye = 20028 + INTEGER(IntKi), PARAMETER :: M48N4RAye = 20029 + INTEGER(IntKi), PARAMETER :: M48N5RAye = 20030 + INTEGER(IntKi), PARAMETER :: M48N6RAye = 20031 + INTEGER(IntKi), PARAMETER :: M48N7RAye = 20032 + INTEGER(IntKi), PARAMETER :: M48N8RAye = 20033 + INTEGER(IntKi), PARAMETER :: M48N9RAye = 20034 + INTEGER(IntKi), PARAMETER :: M49N1RAye = 20035 + INTEGER(IntKi), PARAMETER :: M49N2RAye = 20036 + INTEGER(IntKi), PARAMETER :: M49N3RAye = 20037 + INTEGER(IntKi), PARAMETER :: M49N4RAye = 20038 + INTEGER(IntKi), PARAMETER :: M49N5RAye = 20039 + INTEGER(IntKi), PARAMETER :: M49N6RAye = 20040 + INTEGER(IntKi), PARAMETER :: M49N7RAye = 20041 + INTEGER(IntKi), PARAMETER :: M49N8RAye = 20042 + INTEGER(IntKi), PARAMETER :: M49N9RAye = 20043 + INTEGER(IntKi), PARAMETER :: M50N1RAye = 20044 + INTEGER(IntKi), PARAMETER :: M50N2RAye = 20045 + INTEGER(IntKi), PARAMETER :: M50N3RAye = 20046 + INTEGER(IntKi), PARAMETER :: M50N4RAye = 20047 + INTEGER(IntKi), PARAMETER :: M50N5RAye = 20048 + INTEGER(IntKi), PARAMETER :: M50N6RAye = 20049 + INTEGER(IntKi), PARAMETER :: M50N7RAye = 20050 + INTEGER(IntKi), PARAMETER :: M50N8RAye = 20051 + INTEGER(IntKi), PARAMETER :: M50N9RAye = 20052 + INTEGER(IntKi), PARAMETER :: M51N1RAye = 20053 + INTEGER(IntKi), PARAMETER :: M51N2RAye = 20054 + INTEGER(IntKi), PARAMETER :: M51N3RAye = 20055 + INTEGER(IntKi), PARAMETER :: M51N4RAye = 20056 + INTEGER(IntKi), PARAMETER :: M51N5RAye = 20057 + INTEGER(IntKi), PARAMETER :: M51N6RAye = 20058 + INTEGER(IntKi), PARAMETER :: M51N7RAye = 20059 + INTEGER(IntKi), PARAMETER :: M51N8RAye = 20060 + INTEGER(IntKi), PARAMETER :: M51N9RAye = 20061 + INTEGER(IntKi), PARAMETER :: M52N1RAye = 20062 + INTEGER(IntKi), PARAMETER :: M52N2RAye = 20063 + INTEGER(IntKi), PARAMETER :: M52N3RAye = 20064 + INTEGER(IntKi), PARAMETER :: M52N4RAye = 20065 + INTEGER(IntKi), PARAMETER :: M52N5RAye = 20066 + INTEGER(IntKi), PARAMETER :: M52N6RAye = 20067 + INTEGER(IntKi), PARAMETER :: M52N7RAye = 20068 + INTEGER(IntKi), PARAMETER :: M52N8RAye = 20069 + INTEGER(IntKi), PARAMETER :: M52N9RAye = 20070 + INTEGER(IntKi), PARAMETER :: M53N1RAye = 20071 + INTEGER(IntKi), PARAMETER :: M53N2RAye = 20072 + INTEGER(IntKi), PARAMETER :: M53N3RAye = 20073 + INTEGER(IntKi), PARAMETER :: M53N4RAye = 20074 + INTEGER(IntKi), PARAMETER :: M53N5RAye = 20075 + INTEGER(IntKi), PARAMETER :: M53N6RAye = 20076 + INTEGER(IntKi), PARAMETER :: M53N7RAye = 20077 + INTEGER(IntKi), PARAMETER :: M53N8RAye = 20078 + INTEGER(IntKi), PARAMETER :: M53N9RAye = 20079 + INTEGER(IntKi), PARAMETER :: M54N1RAye = 20080 + INTEGER(IntKi), PARAMETER :: M54N2RAye = 20081 + INTEGER(IntKi), PARAMETER :: M54N3RAye = 20082 + INTEGER(IntKi), PARAMETER :: M54N4RAye = 20083 + INTEGER(IntKi), PARAMETER :: M54N5RAye = 20084 + INTEGER(IntKi), PARAMETER :: M54N6RAye = 20085 + INTEGER(IntKi), PARAMETER :: M54N7RAye = 20086 + INTEGER(IntKi), PARAMETER :: M54N8RAye = 20087 + INTEGER(IntKi), PARAMETER :: M54N9RAye = 20088 + INTEGER(IntKi), PARAMETER :: M55N1RAye = 20089 + INTEGER(IntKi), PARAMETER :: M55N2RAye = 20090 + INTEGER(IntKi), PARAMETER :: M55N3RAye = 20091 + INTEGER(IntKi), PARAMETER :: M55N4RAye = 20092 + INTEGER(IntKi), PARAMETER :: M55N5RAye = 20093 + INTEGER(IntKi), PARAMETER :: M55N6RAye = 20094 + INTEGER(IntKi), PARAMETER :: M55N7RAye = 20095 + INTEGER(IntKi), PARAMETER :: M55N8RAye = 20096 + INTEGER(IntKi), PARAMETER :: M55N9RAye = 20097 + INTEGER(IntKi), PARAMETER :: M56N1RAye = 20098 + INTEGER(IntKi), PARAMETER :: M56N2RAye = 20099 + INTEGER(IntKi), PARAMETER :: M56N3RAye = 20100 + INTEGER(IntKi), PARAMETER :: M56N4RAye = 20101 + INTEGER(IntKi), PARAMETER :: M56N5RAye = 20102 + INTEGER(IntKi), PARAMETER :: M56N6RAye = 20103 + INTEGER(IntKi), PARAMETER :: M56N7RAye = 20104 + INTEGER(IntKi), PARAMETER :: M56N8RAye = 20105 + INTEGER(IntKi), PARAMETER :: M56N9RAye = 20106 + INTEGER(IntKi), PARAMETER :: M57N1RAye = 20107 + INTEGER(IntKi), PARAMETER :: M57N2RAye = 20108 + INTEGER(IntKi), PARAMETER :: M57N3RAye = 20109 + INTEGER(IntKi), PARAMETER :: M57N4RAye = 20110 + INTEGER(IntKi), PARAMETER :: M57N5RAye = 20111 + INTEGER(IntKi), PARAMETER :: M57N6RAye = 20112 + INTEGER(IntKi), PARAMETER :: M57N7RAye = 20113 + INTEGER(IntKi), PARAMETER :: M57N8RAye = 20114 + INTEGER(IntKi), PARAMETER :: M57N9RAye = 20115 + INTEGER(IntKi), PARAMETER :: M58N1RAye = 20116 + INTEGER(IntKi), PARAMETER :: M58N2RAye = 20117 + INTEGER(IntKi), PARAMETER :: M58N3RAye = 20118 + INTEGER(IntKi), PARAMETER :: M58N4RAye = 20119 + INTEGER(IntKi), PARAMETER :: M58N5RAye = 20120 + INTEGER(IntKi), PARAMETER :: M58N6RAye = 20121 + INTEGER(IntKi), PARAMETER :: M58N7RAye = 20122 + INTEGER(IntKi), PARAMETER :: M58N8RAye = 20123 + INTEGER(IntKi), PARAMETER :: M58N9RAye = 20124 + INTEGER(IntKi), PARAMETER :: M59N1RAye = 20125 + INTEGER(IntKi), PARAMETER :: M59N2RAye = 20126 + INTEGER(IntKi), PARAMETER :: M59N3RAye = 20127 + INTEGER(IntKi), PARAMETER :: M59N4RAye = 20128 + INTEGER(IntKi), PARAMETER :: M59N5RAye = 20129 + INTEGER(IntKi), PARAMETER :: M59N6RAye = 20130 + INTEGER(IntKi), PARAMETER :: M59N7RAye = 20131 + INTEGER(IntKi), PARAMETER :: M59N8RAye = 20132 + INTEGER(IntKi), PARAMETER :: M59N9RAye = 20133 + INTEGER(IntKi), PARAMETER :: M60N1RAye = 20134 + INTEGER(IntKi), PARAMETER :: M60N2RAye = 20135 + INTEGER(IntKi), PARAMETER :: M60N3RAye = 20136 + INTEGER(IntKi), PARAMETER :: M60N4RAye = 20137 + INTEGER(IntKi), PARAMETER :: M60N5RAye = 20138 + INTEGER(IntKi), PARAMETER :: M60N6RAye = 20139 + INTEGER(IntKi), PARAMETER :: M60N7RAye = 20140 + INTEGER(IntKi), PARAMETER :: M60N8RAye = 20141 + INTEGER(IntKi), PARAMETER :: M60N9RAye = 20142 + INTEGER(IntKi), PARAMETER :: M61N1RAye = 20143 + INTEGER(IntKi), PARAMETER :: M61N2RAye = 20144 + INTEGER(IntKi), PARAMETER :: M61N3RAye = 20145 + INTEGER(IntKi), PARAMETER :: M61N4RAye = 20146 + INTEGER(IntKi), PARAMETER :: M61N5RAye = 20147 + INTEGER(IntKi), PARAMETER :: M61N6RAye = 20148 + INTEGER(IntKi), PARAMETER :: M61N7RAye = 20149 + INTEGER(IntKi), PARAMETER :: M61N8RAye = 20150 + INTEGER(IntKi), PARAMETER :: M61N9RAye = 20151 + INTEGER(IntKi), PARAMETER :: M62N1RAye = 20152 + INTEGER(IntKi), PARAMETER :: M62N2RAye = 20153 + INTEGER(IntKi), PARAMETER :: M62N3RAye = 20154 + INTEGER(IntKi), PARAMETER :: M62N4RAye = 20155 + INTEGER(IntKi), PARAMETER :: M62N5RAye = 20156 + INTEGER(IntKi), PARAMETER :: M62N6RAye = 20157 + INTEGER(IntKi), PARAMETER :: M62N7RAye = 20158 + INTEGER(IntKi), PARAMETER :: M62N8RAye = 20159 + INTEGER(IntKi), PARAMETER :: M62N9RAye = 20160 + INTEGER(IntKi), PARAMETER :: M63N1RAye = 20161 + INTEGER(IntKi), PARAMETER :: M63N2RAye = 20162 + INTEGER(IntKi), PARAMETER :: M63N3RAye = 20163 + INTEGER(IntKi), PARAMETER :: M63N4RAye = 20164 + INTEGER(IntKi), PARAMETER :: M63N5RAye = 20165 + INTEGER(IntKi), PARAMETER :: M63N6RAye = 20166 + INTEGER(IntKi), PARAMETER :: M63N7RAye = 20167 + INTEGER(IntKi), PARAMETER :: M63N8RAye = 20168 + INTEGER(IntKi), PARAMETER :: M63N9RAye = 20169 + INTEGER(IntKi), PARAMETER :: M64N1RAye = 20170 + INTEGER(IntKi), PARAMETER :: M64N2RAye = 20171 + INTEGER(IntKi), PARAMETER :: M64N3RAye = 20172 + INTEGER(IntKi), PARAMETER :: M64N4RAye = 20173 + INTEGER(IntKi), PARAMETER :: M64N5RAye = 20174 + INTEGER(IntKi), PARAMETER :: M64N6RAye = 20175 + INTEGER(IntKi), PARAMETER :: M64N7RAye = 20176 + INTEGER(IntKi), PARAMETER :: M64N8RAye = 20177 + INTEGER(IntKi), PARAMETER :: M64N9RAye = 20178 + INTEGER(IntKi), PARAMETER :: M65N1RAye = 20179 + INTEGER(IntKi), PARAMETER :: M65N2RAye = 20180 + INTEGER(IntKi), PARAMETER :: M65N3RAye = 20181 + INTEGER(IntKi), PARAMETER :: M65N4RAye = 20182 + INTEGER(IntKi), PARAMETER :: M65N5RAye = 20183 + INTEGER(IntKi), PARAMETER :: M65N6RAye = 20184 + INTEGER(IntKi), PARAMETER :: M65N7RAye = 20185 + INTEGER(IntKi), PARAMETER :: M65N8RAye = 20186 + INTEGER(IntKi), PARAMETER :: M65N9RAye = 20187 + INTEGER(IntKi), PARAMETER :: M66N1RAye = 20188 + INTEGER(IntKi), PARAMETER :: M66N2RAye = 20189 + INTEGER(IntKi), PARAMETER :: M66N3RAye = 20190 + INTEGER(IntKi), PARAMETER :: M66N4RAye = 20191 + INTEGER(IntKi), PARAMETER :: M66N5RAye = 20192 + INTEGER(IntKi), PARAMETER :: M66N6RAye = 20193 + INTEGER(IntKi), PARAMETER :: M66N7RAye = 20194 + INTEGER(IntKi), PARAMETER :: M66N8RAye = 20195 + INTEGER(IntKi), PARAMETER :: M66N9RAye = 20196 + INTEGER(IntKi), PARAMETER :: M67N1RAye = 20197 + INTEGER(IntKi), PARAMETER :: M67N2RAye = 20198 + INTEGER(IntKi), PARAMETER :: M67N3RAye = 20199 + INTEGER(IntKi), PARAMETER :: M67N4RAye = 20200 + INTEGER(IntKi), PARAMETER :: M67N5RAye = 20201 + INTEGER(IntKi), PARAMETER :: M67N6RAye = 20202 + INTEGER(IntKi), PARAMETER :: M67N7RAye = 20203 + INTEGER(IntKi), PARAMETER :: M67N8RAye = 20204 + INTEGER(IntKi), PARAMETER :: M67N9RAye = 20205 + INTEGER(IntKi), PARAMETER :: M68N1RAye = 20206 + INTEGER(IntKi), PARAMETER :: M68N2RAye = 20207 + INTEGER(IntKi), PARAMETER :: M68N3RAye = 20208 + INTEGER(IntKi), PARAMETER :: M68N4RAye = 20209 + INTEGER(IntKi), PARAMETER :: M68N5RAye = 20210 + INTEGER(IntKi), PARAMETER :: M68N6RAye = 20211 + INTEGER(IntKi), PARAMETER :: M68N7RAye = 20212 + INTEGER(IntKi), PARAMETER :: M68N8RAye = 20213 + INTEGER(IntKi), PARAMETER :: M68N9RAye = 20214 + INTEGER(IntKi), PARAMETER :: M69N1RAye = 20215 + INTEGER(IntKi), PARAMETER :: M69N2RAye = 20216 + INTEGER(IntKi), PARAMETER :: M69N3RAye = 20217 + INTEGER(IntKi), PARAMETER :: M69N4RAye = 20218 + INTEGER(IntKi), PARAMETER :: M69N5RAye = 20219 + INTEGER(IntKi), PARAMETER :: M69N6RAye = 20220 + INTEGER(IntKi), PARAMETER :: M69N7RAye = 20221 + INTEGER(IntKi), PARAMETER :: M69N8RAye = 20222 + INTEGER(IntKi), PARAMETER :: M69N9RAye = 20223 + INTEGER(IntKi), PARAMETER :: M70N1RAye = 20224 + INTEGER(IntKi), PARAMETER :: M70N2RAye = 20225 + INTEGER(IntKi), PARAMETER :: M70N3RAye = 20226 + INTEGER(IntKi), PARAMETER :: M70N4RAye = 20227 + INTEGER(IntKi), PARAMETER :: M70N5RAye = 20228 + INTEGER(IntKi), PARAMETER :: M70N6RAye = 20229 + INTEGER(IntKi), PARAMETER :: M70N7RAye = 20230 + INTEGER(IntKi), PARAMETER :: M70N8RAye = 20231 + INTEGER(IntKi), PARAMETER :: M70N9RAye = 20232 + INTEGER(IntKi), PARAMETER :: M71N1RAye = 20233 + INTEGER(IntKi), PARAMETER :: M71N2RAye = 20234 + INTEGER(IntKi), PARAMETER :: M71N3RAye = 20235 + INTEGER(IntKi), PARAMETER :: M71N4RAye = 20236 + INTEGER(IntKi), PARAMETER :: M71N5RAye = 20237 + INTEGER(IntKi), PARAMETER :: M71N6RAye = 20238 + INTEGER(IntKi), PARAMETER :: M71N7RAye = 20239 + INTEGER(IntKi), PARAMETER :: M71N8RAye = 20240 + INTEGER(IntKi), PARAMETER :: M71N9RAye = 20241 + INTEGER(IntKi), PARAMETER :: M72N1RAye = 20242 + INTEGER(IntKi), PARAMETER :: M72N2RAye = 20243 + INTEGER(IntKi), PARAMETER :: M72N3RAye = 20244 + INTEGER(IntKi), PARAMETER :: M72N4RAye = 20245 + INTEGER(IntKi), PARAMETER :: M72N5RAye = 20246 + INTEGER(IntKi), PARAMETER :: M72N6RAye = 20247 + INTEGER(IntKi), PARAMETER :: M72N7RAye = 20248 + INTEGER(IntKi), PARAMETER :: M72N8RAye = 20249 + INTEGER(IntKi), PARAMETER :: M72N9RAye = 20250 + INTEGER(IntKi), PARAMETER :: M73N1RAye = 20251 + INTEGER(IntKi), PARAMETER :: M73N2RAye = 20252 + INTEGER(IntKi), PARAMETER :: M73N3RAye = 20253 + INTEGER(IntKi), PARAMETER :: M73N4RAye = 20254 + INTEGER(IntKi), PARAMETER :: M73N5RAye = 20255 + INTEGER(IntKi), PARAMETER :: M73N6RAye = 20256 + INTEGER(IntKi), PARAMETER :: M73N7RAye = 20257 + INTEGER(IntKi), PARAMETER :: M73N8RAye = 20258 + INTEGER(IntKi), PARAMETER :: M73N9RAye = 20259 + INTEGER(IntKi), PARAMETER :: M74N1RAye = 20260 + INTEGER(IntKi), PARAMETER :: M74N2RAye = 20261 + INTEGER(IntKi), PARAMETER :: M74N3RAye = 20262 + INTEGER(IntKi), PARAMETER :: M74N4RAye = 20263 + INTEGER(IntKi), PARAMETER :: M74N5RAye = 20264 + INTEGER(IntKi), PARAMETER :: M74N6RAye = 20265 + INTEGER(IntKi), PARAMETER :: M74N7RAye = 20266 + INTEGER(IntKi), PARAMETER :: M74N8RAye = 20267 + INTEGER(IntKi), PARAMETER :: M74N9RAye = 20268 + INTEGER(IntKi), PARAMETER :: M75N1RAye = 20269 + INTEGER(IntKi), PARAMETER :: M75N2RAye = 20270 + INTEGER(IntKi), PARAMETER :: M75N3RAye = 20271 + INTEGER(IntKi), PARAMETER :: M75N4RAye = 20272 + INTEGER(IntKi), PARAMETER :: M75N5RAye = 20273 + INTEGER(IntKi), PARAMETER :: M75N6RAye = 20274 + INTEGER(IntKi), PARAMETER :: M75N7RAye = 20275 + INTEGER(IntKi), PARAMETER :: M75N8RAye = 20276 + INTEGER(IntKi), PARAMETER :: M75N9RAye = 20277 + INTEGER(IntKi), PARAMETER :: M76N1RAye = 20278 + INTEGER(IntKi), PARAMETER :: M76N2RAye = 20279 + INTEGER(IntKi), PARAMETER :: M76N3RAye = 20280 + INTEGER(IntKi), PARAMETER :: M76N4RAye = 20281 + INTEGER(IntKi), PARAMETER :: M76N5RAye = 20282 + INTEGER(IntKi), PARAMETER :: M76N6RAye = 20283 + INTEGER(IntKi), PARAMETER :: M76N7RAye = 20284 + INTEGER(IntKi), PARAMETER :: M76N8RAye = 20285 + INTEGER(IntKi), PARAMETER :: M76N9RAye = 20286 + INTEGER(IntKi), PARAMETER :: M77N1RAye = 20287 + INTEGER(IntKi), PARAMETER :: M77N2RAye = 20288 + INTEGER(IntKi), PARAMETER :: M77N3RAye = 20289 + INTEGER(IntKi), PARAMETER :: M77N4RAye = 20290 + INTEGER(IntKi), PARAMETER :: M77N5RAye = 20291 + INTEGER(IntKi), PARAMETER :: M77N6RAye = 20292 + INTEGER(IntKi), PARAMETER :: M77N7RAye = 20293 + INTEGER(IntKi), PARAMETER :: M77N8RAye = 20294 + INTEGER(IntKi), PARAMETER :: M77N9RAye = 20295 + INTEGER(IntKi), PARAMETER :: M78N1RAye = 20296 + INTEGER(IntKi), PARAMETER :: M78N2RAye = 20297 + INTEGER(IntKi), PARAMETER :: M78N3RAye = 20298 + INTEGER(IntKi), PARAMETER :: M78N4RAye = 20299 + INTEGER(IntKi), PARAMETER :: M78N5RAye = 20300 + INTEGER(IntKi), PARAMETER :: M78N6RAye = 20301 + INTEGER(IntKi), PARAMETER :: M78N7RAye = 20302 + INTEGER(IntKi), PARAMETER :: M78N8RAye = 20303 + INTEGER(IntKi), PARAMETER :: M78N9RAye = 20304 + INTEGER(IntKi), PARAMETER :: M79N1RAye = 20305 + INTEGER(IntKi), PARAMETER :: M79N2RAye = 20306 + INTEGER(IntKi), PARAMETER :: M79N3RAye = 20307 + INTEGER(IntKi), PARAMETER :: M79N4RAye = 20308 + INTEGER(IntKi), PARAMETER :: M79N5RAye = 20309 + INTEGER(IntKi), PARAMETER :: M79N6RAye = 20310 + INTEGER(IntKi), PARAMETER :: M79N7RAye = 20311 + INTEGER(IntKi), PARAMETER :: M79N8RAye = 20312 + INTEGER(IntKi), PARAMETER :: M79N9RAye = 20313 + INTEGER(IntKi), PARAMETER :: M80N1RAye = 20314 + INTEGER(IntKi), PARAMETER :: M80N2RAye = 20315 + INTEGER(IntKi), PARAMETER :: M80N3RAye = 20316 + INTEGER(IntKi), PARAMETER :: M80N4RAye = 20317 + INTEGER(IntKi), PARAMETER :: M80N5RAye = 20318 + INTEGER(IntKi), PARAMETER :: M80N6RAye = 20319 + INTEGER(IntKi), PARAMETER :: M80N7RAye = 20320 + INTEGER(IntKi), PARAMETER :: M80N8RAye = 20321 + INTEGER(IntKi), PARAMETER :: M80N9RAye = 20322 + INTEGER(IntKi), PARAMETER :: M81N1RAye = 20323 + INTEGER(IntKi), PARAMETER :: M81N2RAye = 20324 + INTEGER(IntKi), PARAMETER :: M81N3RAye = 20325 + INTEGER(IntKi), PARAMETER :: M81N4RAye = 20326 + INTEGER(IntKi), PARAMETER :: M81N5RAye = 20327 + INTEGER(IntKi), PARAMETER :: M81N6RAye = 20328 + INTEGER(IntKi), PARAMETER :: M81N7RAye = 20329 + INTEGER(IntKi), PARAMETER :: M81N8RAye = 20330 + INTEGER(IntKi), PARAMETER :: M81N9RAye = 20331 + INTEGER(IntKi), PARAMETER :: M82N1RAye = 20332 + INTEGER(IntKi), PARAMETER :: M82N2RAye = 20333 + INTEGER(IntKi), PARAMETER :: M82N3RAye = 20334 + INTEGER(IntKi), PARAMETER :: M82N4RAye = 20335 + INTEGER(IntKi), PARAMETER :: M82N5RAye = 20336 + INTEGER(IntKi), PARAMETER :: M82N6RAye = 20337 + INTEGER(IntKi), PARAMETER :: M82N7RAye = 20338 + INTEGER(IntKi), PARAMETER :: M82N8RAye = 20339 + INTEGER(IntKi), PARAMETER :: M82N9RAye = 20340 + INTEGER(IntKi), PARAMETER :: M83N1RAye = 20341 + INTEGER(IntKi), PARAMETER :: M83N2RAye = 20342 + INTEGER(IntKi), PARAMETER :: M83N3RAye = 20343 + INTEGER(IntKi), PARAMETER :: M83N4RAye = 20344 + INTEGER(IntKi), PARAMETER :: M83N5RAye = 20345 + INTEGER(IntKi), PARAMETER :: M83N6RAye = 20346 + INTEGER(IntKi), PARAMETER :: M83N7RAye = 20347 + INTEGER(IntKi), PARAMETER :: M83N8RAye = 20348 + INTEGER(IntKi), PARAMETER :: M83N9RAye = 20349 + INTEGER(IntKi), PARAMETER :: M84N1RAye = 20350 + INTEGER(IntKi), PARAMETER :: M84N2RAye = 20351 + INTEGER(IntKi), PARAMETER :: M84N3RAye = 20352 + INTEGER(IntKi), PARAMETER :: M84N4RAye = 20353 + INTEGER(IntKi), PARAMETER :: M84N5RAye = 20354 + INTEGER(IntKi), PARAMETER :: M84N6RAye = 20355 + INTEGER(IntKi), PARAMETER :: M84N7RAye = 20356 + INTEGER(IntKi), PARAMETER :: M84N8RAye = 20357 + INTEGER(IntKi), PARAMETER :: M84N9RAye = 20358 + INTEGER(IntKi), PARAMETER :: M85N1RAye = 20359 + INTEGER(IntKi), PARAMETER :: M85N2RAye = 20360 + INTEGER(IntKi), PARAMETER :: M85N3RAye = 20361 + INTEGER(IntKi), PARAMETER :: M85N4RAye = 20362 + INTEGER(IntKi), PARAMETER :: M85N5RAye = 20363 + INTEGER(IntKi), PARAMETER :: M85N6RAye = 20364 + INTEGER(IntKi), PARAMETER :: M85N7RAye = 20365 + INTEGER(IntKi), PARAMETER :: M85N8RAye = 20366 + INTEGER(IntKi), PARAMETER :: M85N9RAye = 20367 + INTEGER(IntKi), PARAMETER :: M86N1RAye = 20368 + INTEGER(IntKi), PARAMETER :: M86N2RAye = 20369 + INTEGER(IntKi), PARAMETER :: M86N3RAye = 20370 + INTEGER(IntKi), PARAMETER :: M86N4RAye = 20371 + INTEGER(IntKi), PARAMETER :: M86N5RAye = 20372 + INTEGER(IntKi), PARAMETER :: M86N6RAye = 20373 + INTEGER(IntKi), PARAMETER :: M86N7RAye = 20374 + INTEGER(IntKi), PARAMETER :: M86N8RAye = 20375 + INTEGER(IntKi), PARAMETER :: M86N9RAye = 20376 + INTEGER(IntKi), PARAMETER :: M87N1RAye = 20377 + INTEGER(IntKi), PARAMETER :: M87N2RAye = 20378 + INTEGER(IntKi), PARAMETER :: M87N3RAye = 20379 + INTEGER(IntKi), PARAMETER :: M87N4RAye = 20380 + INTEGER(IntKi), PARAMETER :: M87N5RAye = 20381 + INTEGER(IntKi), PARAMETER :: M87N6RAye = 20382 + INTEGER(IntKi), PARAMETER :: M87N7RAye = 20383 + INTEGER(IntKi), PARAMETER :: M87N8RAye = 20384 + INTEGER(IntKi), PARAMETER :: M87N9RAye = 20385 + INTEGER(IntKi), PARAMETER :: M88N1RAye = 20386 + INTEGER(IntKi), PARAMETER :: M88N2RAye = 20387 + INTEGER(IntKi), PARAMETER :: M88N3RAye = 20388 + INTEGER(IntKi), PARAMETER :: M88N4RAye = 20389 + INTEGER(IntKi), PARAMETER :: M88N5RAye = 20390 + INTEGER(IntKi), PARAMETER :: M88N6RAye = 20391 + INTEGER(IntKi), PARAMETER :: M88N7RAye = 20392 + INTEGER(IntKi), PARAMETER :: M88N8RAye = 20393 + INTEGER(IntKi), PARAMETER :: M88N9RAye = 20394 + INTEGER(IntKi), PARAMETER :: M89N1RAye = 20395 + INTEGER(IntKi), PARAMETER :: M89N2RAye = 20396 + INTEGER(IntKi), PARAMETER :: M89N3RAye = 20397 + INTEGER(IntKi), PARAMETER :: M89N4RAye = 20398 + INTEGER(IntKi), PARAMETER :: M89N5RAye = 20399 + INTEGER(IntKi), PARAMETER :: M89N6RAye = 20400 + INTEGER(IntKi), PARAMETER :: M89N7RAye = 20401 + INTEGER(IntKi), PARAMETER :: M89N8RAye = 20402 + INTEGER(IntKi), PARAMETER :: M89N9RAye = 20403 + INTEGER(IntKi), PARAMETER :: M90N1RAye = 20404 + INTEGER(IntKi), PARAMETER :: M90N2RAye = 20405 + INTEGER(IntKi), PARAMETER :: M90N3RAye = 20406 + INTEGER(IntKi), PARAMETER :: M90N4RAye = 20407 + INTEGER(IntKi), PARAMETER :: M90N5RAye = 20408 + INTEGER(IntKi), PARAMETER :: M90N6RAye = 20409 + INTEGER(IntKi), PARAMETER :: M90N7RAye = 20410 + INTEGER(IntKi), PARAMETER :: M90N8RAye = 20411 + INTEGER(IntKi), PARAMETER :: M90N9RAye = 20412 + INTEGER(IntKi), PARAMETER :: M91N1RAye = 20413 + INTEGER(IntKi), PARAMETER :: M91N2RAye = 20414 + INTEGER(IntKi), PARAMETER :: M91N3RAye = 20415 + INTEGER(IntKi), PARAMETER :: M91N4RAye = 20416 + INTEGER(IntKi), PARAMETER :: M91N5RAye = 20417 + INTEGER(IntKi), PARAMETER :: M91N6RAye = 20418 + INTEGER(IntKi), PARAMETER :: M91N7RAye = 20419 + INTEGER(IntKi), PARAMETER :: M91N8RAye = 20420 + INTEGER(IntKi), PARAMETER :: M91N9RAye = 20421 + INTEGER(IntKi), PARAMETER :: M92N1RAye = 20422 + INTEGER(IntKi), PARAMETER :: M92N2RAye = 20423 + INTEGER(IntKi), PARAMETER :: M92N3RAye = 20424 + INTEGER(IntKi), PARAMETER :: M92N4RAye = 20425 + INTEGER(IntKi), PARAMETER :: M92N5RAye = 20426 + INTEGER(IntKi), PARAMETER :: M92N6RAye = 20427 + INTEGER(IntKi), PARAMETER :: M92N7RAye = 20428 + INTEGER(IntKi), PARAMETER :: M92N8RAye = 20429 + INTEGER(IntKi), PARAMETER :: M92N9RAye = 20430 + INTEGER(IntKi), PARAMETER :: M93N1RAye = 20431 + INTEGER(IntKi), PARAMETER :: M93N2RAye = 20432 + INTEGER(IntKi), PARAMETER :: M93N3RAye = 20433 + INTEGER(IntKi), PARAMETER :: M93N4RAye = 20434 + INTEGER(IntKi), PARAMETER :: M93N5RAye = 20435 + INTEGER(IntKi), PARAMETER :: M93N6RAye = 20436 + INTEGER(IntKi), PARAMETER :: M93N7RAye = 20437 + INTEGER(IntKi), PARAMETER :: M93N8RAye = 20438 + INTEGER(IntKi), PARAMETER :: M93N9RAye = 20439 + INTEGER(IntKi), PARAMETER :: M94N1RAye = 20440 + INTEGER(IntKi), PARAMETER :: M94N2RAye = 20441 + INTEGER(IntKi), PARAMETER :: M94N3RAye = 20442 + INTEGER(IntKi), PARAMETER :: M94N4RAye = 20443 + INTEGER(IntKi), PARAMETER :: M94N5RAye = 20444 + INTEGER(IntKi), PARAMETER :: M94N6RAye = 20445 + INTEGER(IntKi), PARAMETER :: M94N7RAye = 20446 + INTEGER(IntKi), PARAMETER :: M94N8RAye = 20447 + INTEGER(IntKi), PARAMETER :: M94N9RAye = 20448 + INTEGER(IntKi), PARAMETER :: M95N1RAye = 20449 + INTEGER(IntKi), PARAMETER :: M95N2RAye = 20450 + INTEGER(IntKi), PARAMETER :: M95N3RAye = 20451 + INTEGER(IntKi), PARAMETER :: M95N4RAye = 20452 + INTEGER(IntKi), PARAMETER :: M95N5RAye = 20453 + INTEGER(IntKi), PARAMETER :: M95N6RAye = 20454 + INTEGER(IntKi), PARAMETER :: M95N7RAye = 20455 + INTEGER(IntKi), PARAMETER :: M95N8RAye = 20456 + INTEGER(IntKi), PARAMETER :: M95N9RAye = 20457 + INTEGER(IntKi), PARAMETER :: M96N1RAye = 20458 + INTEGER(IntKi), PARAMETER :: M96N2RAye = 20459 + INTEGER(IntKi), PARAMETER :: M96N3RAye = 20460 + INTEGER(IntKi), PARAMETER :: M96N4RAye = 20461 + INTEGER(IntKi), PARAMETER :: M96N5RAye = 20462 + INTEGER(IntKi), PARAMETER :: M96N6RAye = 20463 + INTEGER(IntKi), PARAMETER :: M96N7RAye = 20464 + INTEGER(IntKi), PARAMETER :: M96N8RAye = 20465 + INTEGER(IntKi), PARAMETER :: M96N9RAye = 20466 + INTEGER(IntKi), PARAMETER :: M97N1RAye = 20467 + INTEGER(IntKi), PARAMETER :: M97N2RAye = 20468 + INTEGER(IntKi), PARAMETER :: M97N3RAye = 20469 + INTEGER(IntKi), PARAMETER :: M97N4RAye = 20470 + INTEGER(IntKi), PARAMETER :: M97N5RAye = 20471 + INTEGER(IntKi), PARAMETER :: M97N6RAye = 20472 + INTEGER(IntKi), PARAMETER :: M97N7RAye = 20473 + INTEGER(IntKi), PARAMETER :: M97N8RAye = 20474 + INTEGER(IntKi), PARAMETER :: M97N9RAye = 20475 + INTEGER(IntKi), PARAMETER :: M98N1RAye = 20476 + INTEGER(IntKi), PARAMETER :: M98N2RAye = 20477 + INTEGER(IntKi), PARAMETER :: M98N3RAye = 20478 + INTEGER(IntKi), PARAMETER :: M98N4RAye = 20479 + INTEGER(IntKi), PARAMETER :: M98N5RAye = 20480 + INTEGER(IntKi), PARAMETER :: M98N6RAye = 20481 + INTEGER(IntKi), PARAMETER :: M98N7RAye = 20482 + INTEGER(IntKi), PARAMETER :: M98N8RAye = 20483 + INTEGER(IntKi), PARAMETER :: M98N9RAye = 20484 + INTEGER(IntKi), PARAMETER :: M99N1RAye = 20485 + INTEGER(IntKi), PARAMETER :: M99N2RAye = 20486 + INTEGER(IntKi), PARAMETER :: M99N3RAye = 20487 + INTEGER(IntKi), PARAMETER :: M99N4RAye = 20488 + INTEGER(IntKi), PARAMETER :: M99N5RAye = 20489 + INTEGER(IntKi), PARAMETER :: M99N6RAye = 20490 + INTEGER(IntKi), PARAMETER :: M99N7RAye = 20491 + INTEGER(IntKi), PARAMETER :: M99N8RAye = 20492 + INTEGER(IntKi), PARAMETER :: M99N9RAye = 20493 + INTEGER(IntKi), PARAMETER :: M01N1RAze = 20494 + INTEGER(IntKi), PARAMETER :: M01N2RAze = 20495 + INTEGER(IntKi), PARAMETER :: M01N3RAze = 20496 + INTEGER(IntKi), PARAMETER :: M01N4RAze = 20497 + INTEGER(IntKi), PARAMETER :: M01N5RAze = 20498 + INTEGER(IntKi), PARAMETER :: M01N6RAze = 20499 + INTEGER(IntKi), PARAMETER :: M01N7RAze = 20500 + INTEGER(IntKi), PARAMETER :: M01N8RAze = 20501 + INTEGER(IntKi), PARAMETER :: M01N9RAze = 20502 + INTEGER(IntKi), PARAMETER :: M02N1RAze = 20503 + INTEGER(IntKi), PARAMETER :: M02N2RAze = 20504 + INTEGER(IntKi), PARAMETER :: M02N3RAze = 20505 + INTEGER(IntKi), PARAMETER :: M02N4RAze = 20506 + INTEGER(IntKi), PARAMETER :: M02N5RAze = 20507 + INTEGER(IntKi), PARAMETER :: M02N6RAze = 20508 + INTEGER(IntKi), PARAMETER :: M02N7RAze = 20509 + INTEGER(IntKi), PARAMETER :: M02N8RAze = 20510 + INTEGER(IntKi), PARAMETER :: M02N9RAze = 20511 + INTEGER(IntKi), PARAMETER :: M03N1RAze = 20512 + INTEGER(IntKi), PARAMETER :: M03N2RAze = 20513 + INTEGER(IntKi), PARAMETER :: M03N3RAze = 20514 + INTEGER(IntKi), PARAMETER :: M03N4RAze = 20515 + INTEGER(IntKi), PARAMETER :: M03N5RAze = 20516 + INTEGER(IntKi), PARAMETER :: M03N6RAze = 20517 + INTEGER(IntKi), PARAMETER :: M03N7RAze = 20518 + INTEGER(IntKi), PARAMETER :: M03N8RAze = 20519 + INTEGER(IntKi), PARAMETER :: M03N9RAze = 20520 + INTEGER(IntKi), PARAMETER :: M04N1RAze = 20521 + INTEGER(IntKi), PARAMETER :: M04N2RAze = 20522 + INTEGER(IntKi), PARAMETER :: M04N3RAze = 20523 + INTEGER(IntKi), PARAMETER :: M04N4RAze = 20524 + INTEGER(IntKi), PARAMETER :: M04N5RAze = 20525 + INTEGER(IntKi), PARAMETER :: M04N6RAze = 20526 + INTEGER(IntKi), PARAMETER :: M04N7RAze = 20527 + INTEGER(IntKi), PARAMETER :: M04N8RAze = 20528 + INTEGER(IntKi), PARAMETER :: M04N9RAze = 20529 + INTEGER(IntKi), PARAMETER :: M05N1RAze = 20530 + INTEGER(IntKi), PARAMETER :: M05N2RAze = 20531 + INTEGER(IntKi), PARAMETER :: M05N3RAze = 20532 + INTEGER(IntKi), PARAMETER :: M05N4RAze = 20533 + INTEGER(IntKi), PARAMETER :: M05N5RAze = 20534 + INTEGER(IntKi), PARAMETER :: M05N6RAze = 20535 + INTEGER(IntKi), PARAMETER :: M05N7RAze = 20536 + INTEGER(IntKi), PARAMETER :: M05N8RAze = 20537 + INTEGER(IntKi), PARAMETER :: M05N9RAze = 20538 + INTEGER(IntKi), PARAMETER :: M06N1RAze = 20539 + INTEGER(IntKi), PARAMETER :: M06N2RAze = 20540 + INTEGER(IntKi), PARAMETER :: M06N3RAze = 20541 + INTEGER(IntKi), PARAMETER :: M06N4RAze = 20542 + INTEGER(IntKi), PARAMETER :: M06N5RAze = 20543 + INTEGER(IntKi), PARAMETER :: M06N6RAze = 20544 + INTEGER(IntKi), PARAMETER :: M06N7RAze = 20545 + INTEGER(IntKi), PARAMETER :: M06N8RAze = 20546 + INTEGER(IntKi), PARAMETER :: M06N9RAze = 20547 + INTEGER(IntKi), PARAMETER :: M07N1RAze = 20548 + INTEGER(IntKi), PARAMETER :: M07N2RAze = 20549 + INTEGER(IntKi), PARAMETER :: M07N3RAze = 20550 + INTEGER(IntKi), PARAMETER :: M07N4RAze = 20551 + INTEGER(IntKi), PARAMETER :: M07N5RAze = 20552 + INTEGER(IntKi), PARAMETER :: M07N6RAze = 20553 + INTEGER(IntKi), PARAMETER :: M07N7RAze = 20554 + INTEGER(IntKi), PARAMETER :: M07N8RAze = 20555 + INTEGER(IntKi), PARAMETER :: M07N9RAze = 20556 + INTEGER(IntKi), PARAMETER :: M08N1RAze = 20557 + INTEGER(IntKi), PARAMETER :: M08N2RAze = 20558 + INTEGER(IntKi), PARAMETER :: M08N3RAze = 20559 + INTEGER(IntKi), PARAMETER :: M08N4RAze = 20560 + INTEGER(IntKi), PARAMETER :: M08N5RAze = 20561 + INTEGER(IntKi), PARAMETER :: M08N6RAze = 20562 + INTEGER(IntKi), PARAMETER :: M08N7RAze = 20563 + INTEGER(IntKi), PARAMETER :: M08N8RAze = 20564 + INTEGER(IntKi), PARAMETER :: M08N9RAze = 20565 + INTEGER(IntKi), PARAMETER :: M09N1RAze = 20566 + INTEGER(IntKi), PARAMETER :: M09N2RAze = 20567 + INTEGER(IntKi), PARAMETER :: M09N3RAze = 20568 + INTEGER(IntKi), PARAMETER :: M09N4RAze = 20569 + INTEGER(IntKi), PARAMETER :: M09N5RAze = 20570 + INTEGER(IntKi), PARAMETER :: M09N6RAze = 20571 + INTEGER(IntKi), PARAMETER :: M09N7RAze = 20572 + INTEGER(IntKi), PARAMETER :: M09N8RAze = 20573 + INTEGER(IntKi), PARAMETER :: M09N9RAze = 20574 + INTEGER(IntKi), PARAMETER :: M10N1RAze = 20575 + INTEGER(IntKi), PARAMETER :: M10N2RAze = 20576 + INTEGER(IntKi), PARAMETER :: M10N3RAze = 20577 + INTEGER(IntKi), PARAMETER :: M10N4RAze = 20578 + INTEGER(IntKi), PARAMETER :: M10N5RAze = 20579 + INTEGER(IntKi), PARAMETER :: M10N6RAze = 20580 + INTEGER(IntKi), PARAMETER :: M10N7RAze = 20581 + INTEGER(IntKi), PARAMETER :: M10N8RAze = 20582 + INTEGER(IntKi), PARAMETER :: M10N9RAze = 20583 + INTEGER(IntKi), PARAMETER :: M11N1RAze = 20584 + INTEGER(IntKi), PARAMETER :: M11N2RAze = 20585 + INTEGER(IntKi), PARAMETER :: M11N3RAze = 20586 + INTEGER(IntKi), PARAMETER :: M11N4RAze = 20587 + INTEGER(IntKi), PARAMETER :: M11N5RAze = 20588 + INTEGER(IntKi), PARAMETER :: M11N6RAze = 20589 + INTEGER(IntKi), PARAMETER :: M11N7RAze = 20590 + INTEGER(IntKi), PARAMETER :: M11N8RAze = 20591 + INTEGER(IntKi), PARAMETER :: M11N9RAze = 20592 + INTEGER(IntKi), PARAMETER :: M12N1RAze = 20593 + INTEGER(IntKi), PARAMETER :: M12N2RAze = 20594 + INTEGER(IntKi), PARAMETER :: M12N3RAze = 20595 + INTEGER(IntKi), PARAMETER :: M12N4RAze = 20596 + INTEGER(IntKi), PARAMETER :: M12N5RAze = 20597 + INTEGER(IntKi), PARAMETER :: M12N6RAze = 20598 + INTEGER(IntKi), PARAMETER :: M12N7RAze = 20599 + INTEGER(IntKi), PARAMETER :: M12N8RAze = 20600 + INTEGER(IntKi), PARAMETER :: M12N9RAze = 20601 + INTEGER(IntKi), PARAMETER :: M13N1RAze = 20602 + INTEGER(IntKi), PARAMETER :: M13N2RAze = 20603 + INTEGER(IntKi), PARAMETER :: M13N3RAze = 20604 + INTEGER(IntKi), PARAMETER :: M13N4RAze = 20605 + INTEGER(IntKi), PARAMETER :: M13N5RAze = 20606 + INTEGER(IntKi), PARAMETER :: M13N6RAze = 20607 + INTEGER(IntKi), PARAMETER :: M13N7RAze = 20608 + INTEGER(IntKi), PARAMETER :: M13N8RAze = 20609 + INTEGER(IntKi), PARAMETER :: M13N9RAze = 20610 + INTEGER(IntKi), PARAMETER :: M14N1RAze = 20611 + INTEGER(IntKi), PARAMETER :: M14N2RAze = 20612 + INTEGER(IntKi), PARAMETER :: M14N3RAze = 20613 + INTEGER(IntKi), PARAMETER :: M14N4RAze = 20614 + INTEGER(IntKi), PARAMETER :: M14N5RAze = 20615 + INTEGER(IntKi), PARAMETER :: M14N6RAze = 20616 + INTEGER(IntKi), PARAMETER :: M14N7RAze = 20617 + INTEGER(IntKi), PARAMETER :: M14N8RAze = 20618 + INTEGER(IntKi), PARAMETER :: M14N9RAze = 20619 + INTEGER(IntKi), PARAMETER :: M15N1RAze = 20620 + INTEGER(IntKi), PARAMETER :: M15N2RAze = 20621 + INTEGER(IntKi), PARAMETER :: M15N3RAze = 20622 + INTEGER(IntKi), PARAMETER :: M15N4RAze = 20623 + INTEGER(IntKi), PARAMETER :: M15N5RAze = 20624 + INTEGER(IntKi), PARAMETER :: M15N6RAze = 20625 + INTEGER(IntKi), PARAMETER :: M15N7RAze = 20626 + INTEGER(IntKi), PARAMETER :: M15N8RAze = 20627 + INTEGER(IntKi), PARAMETER :: M15N9RAze = 20628 + INTEGER(IntKi), PARAMETER :: M16N1RAze = 20629 + INTEGER(IntKi), PARAMETER :: M16N2RAze = 20630 + INTEGER(IntKi), PARAMETER :: M16N3RAze = 20631 + INTEGER(IntKi), PARAMETER :: M16N4RAze = 20632 + INTEGER(IntKi), PARAMETER :: M16N5RAze = 20633 + INTEGER(IntKi), PARAMETER :: M16N6RAze = 20634 + INTEGER(IntKi), PARAMETER :: M16N7RAze = 20635 + INTEGER(IntKi), PARAMETER :: M16N8RAze = 20636 + INTEGER(IntKi), PARAMETER :: M16N9RAze = 20637 + INTEGER(IntKi), PARAMETER :: M17N1RAze = 20638 + INTEGER(IntKi), PARAMETER :: M17N2RAze = 20639 + INTEGER(IntKi), PARAMETER :: M17N3RAze = 20640 + INTEGER(IntKi), PARAMETER :: M17N4RAze = 20641 + INTEGER(IntKi), PARAMETER :: M17N5RAze = 20642 + INTEGER(IntKi), PARAMETER :: M17N6RAze = 20643 + INTEGER(IntKi), PARAMETER :: M17N7RAze = 20644 + INTEGER(IntKi), PARAMETER :: M17N8RAze = 20645 + INTEGER(IntKi), PARAMETER :: M17N9RAze = 20646 + INTEGER(IntKi), PARAMETER :: M18N1RAze = 20647 + INTEGER(IntKi), PARAMETER :: M18N2RAze = 20648 + INTEGER(IntKi), PARAMETER :: M18N3RAze = 20649 + INTEGER(IntKi), PARAMETER :: M18N4RAze = 20650 + INTEGER(IntKi), PARAMETER :: M18N5RAze = 20651 + INTEGER(IntKi), PARAMETER :: M18N6RAze = 20652 + INTEGER(IntKi), PARAMETER :: M18N7RAze = 20653 + INTEGER(IntKi), PARAMETER :: M18N8RAze = 20654 + INTEGER(IntKi), PARAMETER :: M18N9RAze = 20655 + INTEGER(IntKi), PARAMETER :: M19N1RAze = 20656 + INTEGER(IntKi), PARAMETER :: M19N2RAze = 20657 + INTEGER(IntKi), PARAMETER :: M19N3RAze = 20658 + INTEGER(IntKi), PARAMETER :: M19N4RAze = 20659 + INTEGER(IntKi), PARAMETER :: M19N5RAze = 20660 + INTEGER(IntKi), PARAMETER :: M19N6RAze = 20661 + INTEGER(IntKi), PARAMETER :: M19N7RAze = 20662 + INTEGER(IntKi), PARAMETER :: M19N8RAze = 20663 + INTEGER(IntKi), PARAMETER :: M19N9RAze = 20664 + INTEGER(IntKi), PARAMETER :: M20N1RAze = 20665 + INTEGER(IntKi), PARAMETER :: M20N2RAze = 20666 + INTEGER(IntKi), PARAMETER :: M20N3RAze = 20667 + INTEGER(IntKi), PARAMETER :: M20N4RAze = 20668 + INTEGER(IntKi), PARAMETER :: M20N5RAze = 20669 + INTEGER(IntKi), PARAMETER :: M20N6RAze = 20670 + INTEGER(IntKi), PARAMETER :: M20N7RAze = 20671 + INTEGER(IntKi), PARAMETER :: M20N8RAze = 20672 + INTEGER(IntKi), PARAMETER :: M20N9RAze = 20673 + INTEGER(IntKi), PARAMETER :: M21N1RAze = 20674 + INTEGER(IntKi), PARAMETER :: M21N2RAze = 20675 + INTEGER(IntKi), PARAMETER :: M21N3RAze = 20676 + INTEGER(IntKi), PARAMETER :: M21N4RAze = 20677 + INTEGER(IntKi), PARAMETER :: M21N5RAze = 20678 + INTEGER(IntKi), PARAMETER :: M21N6RAze = 20679 + INTEGER(IntKi), PARAMETER :: M21N7RAze = 20680 + INTEGER(IntKi), PARAMETER :: M21N8RAze = 20681 + INTEGER(IntKi), PARAMETER :: M21N9RAze = 20682 + INTEGER(IntKi), PARAMETER :: M22N1RAze = 20683 + INTEGER(IntKi), PARAMETER :: M22N2RAze = 20684 + INTEGER(IntKi), PARAMETER :: M22N3RAze = 20685 + INTEGER(IntKi), PARAMETER :: M22N4RAze = 20686 + INTEGER(IntKi), PARAMETER :: M22N5RAze = 20687 + INTEGER(IntKi), PARAMETER :: M22N6RAze = 20688 + INTEGER(IntKi), PARAMETER :: M22N7RAze = 20689 + INTEGER(IntKi), PARAMETER :: M22N8RAze = 20690 + INTEGER(IntKi), PARAMETER :: M22N9RAze = 20691 + INTEGER(IntKi), PARAMETER :: M23N1RAze = 20692 + INTEGER(IntKi), PARAMETER :: M23N2RAze = 20693 + INTEGER(IntKi), PARAMETER :: M23N3RAze = 20694 + INTEGER(IntKi), PARAMETER :: M23N4RAze = 20695 + INTEGER(IntKi), PARAMETER :: M23N5RAze = 20696 + INTEGER(IntKi), PARAMETER :: M23N6RAze = 20697 + INTEGER(IntKi), PARAMETER :: M23N7RAze = 20698 + INTEGER(IntKi), PARAMETER :: M23N8RAze = 20699 + INTEGER(IntKi), PARAMETER :: M23N9RAze = 20700 + INTEGER(IntKi), PARAMETER :: M24N1RAze = 20701 + INTEGER(IntKi), PARAMETER :: M24N2RAze = 20702 + INTEGER(IntKi), PARAMETER :: M24N3RAze = 20703 + INTEGER(IntKi), PARAMETER :: M24N4RAze = 20704 + INTEGER(IntKi), PARAMETER :: M24N5RAze = 20705 + INTEGER(IntKi), PARAMETER :: M24N6RAze = 20706 + INTEGER(IntKi), PARAMETER :: M24N7RAze = 20707 + INTEGER(IntKi), PARAMETER :: M24N8RAze = 20708 + INTEGER(IntKi), PARAMETER :: M24N9RAze = 20709 + INTEGER(IntKi), PARAMETER :: M25N1RAze = 20710 + INTEGER(IntKi), PARAMETER :: M25N2RAze = 20711 + INTEGER(IntKi), PARAMETER :: M25N3RAze = 20712 + INTEGER(IntKi), PARAMETER :: M25N4RAze = 20713 + INTEGER(IntKi), PARAMETER :: M25N5RAze = 20714 + INTEGER(IntKi), PARAMETER :: M25N6RAze = 20715 + INTEGER(IntKi), PARAMETER :: M25N7RAze = 20716 + INTEGER(IntKi), PARAMETER :: M25N8RAze = 20717 + INTEGER(IntKi), PARAMETER :: M25N9RAze = 20718 + INTEGER(IntKi), PARAMETER :: M26N1RAze = 20719 + INTEGER(IntKi), PARAMETER :: M26N2RAze = 20720 + INTEGER(IntKi), PARAMETER :: M26N3RAze = 20721 + INTEGER(IntKi), PARAMETER :: M26N4RAze = 20722 + INTEGER(IntKi), PARAMETER :: M26N5RAze = 20723 + INTEGER(IntKi), PARAMETER :: M26N6RAze = 20724 + INTEGER(IntKi), PARAMETER :: M26N7RAze = 20725 + INTEGER(IntKi), PARAMETER :: M26N8RAze = 20726 + INTEGER(IntKi), PARAMETER :: M26N9RAze = 20727 + INTEGER(IntKi), PARAMETER :: M27N1RAze = 20728 + INTEGER(IntKi), PARAMETER :: M27N2RAze = 20729 + INTEGER(IntKi), PARAMETER :: M27N3RAze = 20730 + INTEGER(IntKi), PARAMETER :: M27N4RAze = 20731 + INTEGER(IntKi), PARAMETER :: M27N5RAze = 20732 + INTEGER(IntKi), PARAMETER :: M27N6RAze = 20733 + INTEGER(IntKi), PARAMETER :: M27N7RAze = 20734 + INTEGER(IntKi), PARAMETER :: M27N8RAze = 20735 + INTEGER(IntKi), PARAMETER :: M27N9RAze = 20736 + INTEGER(IntKi), PARAMETER :: M28N1RAze = 20737 + INTEGER(IntKi), PARAMETER :: M28N2RAze = 20738 + INTEGER(IntKi), PARAMETER :: M28N3RAze = 20739 + INTEGER(IntKi), PARAMETER :: M28N4RAze = 20740 + INTEGER(IntKi), PARAMETER :: M28N5RAze = 20741 + INTEGER(IntKi), PARAMETER :: M28N6RAze = 20742 + INTEGER(IntKi), PARAMETER :: M28N7RAze = 20743 + INTEGER(IntKi), PARAMETER :: M28N8RAze = 20744 + INTEGER(IntKi), PARAMETER :: M28N9RAze = 20745 + INTEGER(IntKi), PARAMETER :: M29N1RAze = 20746 + INTEGER(IntKi), PARAMETER :: M29N2RAze = 20747 + INTEGER(IntKi), PARAMETER :: M29N3RAze = 20748 + INTEGER(IntKi), PARAMETER :: M29N4RAze = 20749 + INTEGER(IntKi), PARAMETER :: M29N5RAze = 20750 + INTEGER(IntKi), PARAMETER :: M29N6RAze = 20751 + INTEGER(IntKi), PARAMETER :: M29N7RAze = 20752 + INTEGER(IntKi), PARAMETER :: M29N8RAze = 20753 + INTEGER(IntKi), PARAMETER :: M29N9RAze = 20754 + INTEGER(IntKi), PARAMETER :: M30N1RAze = 20755 + INTEGER(IntKi), PARAMETER :: M30N2RAze = 20756 + INTEGER(IntKi), PARAMETER :: M30N3RAze = 20757 + INTEGER(IntKi), PARAMETER :: M30N4RAze = 20758 + INTEGER(IntKi), PARAMETER :: M30N5RAze = 20759 + INTEGER(IntKi), PARAMETER :: M30N6RAze = 20760 + INTEGER(IntKi), PARAMETER :: M30N7RAze = 20761 + INTEGER(IntKi), PARAMETER :: M30N8RAze = 20762 + INTEGER(IntKi), PARAMETER :: M30N9RAze = 20763 + INTEGER(IntKi), PARAMETER :: M31N1RAze = 20764 + INTEGER(IntKi), PARAMETER :: M31N2RAze = 20765 + INTEGER(IntKi), PARAMETER :: M31N3RAze = 20766 + INTEGER(IntKi), PARAMETER :: M31N4RAze = 20767 + INTEGER(IntKi), PARAMETER :: M31N5RAze = 20768 + INTEGER(IntKi), PARAMETER :: M31N6RAze = 20769 + INTEGER(IntKi), PARAMETER :: M31N7RAze = 20770 + INTEGER(IntKi), PARAMETER :: M31N8RAze = 20771 + INTEGER(IntKi), PARAMETER :: M31N9RAze = 20772 + INTEGER(IntKi), PARAMETER :: M32N1RAze = 20773 + INTEGER(IntKi), PARAMETER :: M32N2RAze = 20774 + INTEGER(IntKi), PARAMETER :: M32N3RAze = 20775 + INTEGER(IntKi), PARAMETER :: M32N4RAze = 20776 + INTEGER(IntKi), PARAMETER :: M32N5RAze = 20777 + INTEGER(IntKi), PARAMETER :: M32N6RAze = 20778 + INTEGER(IntKi), PARAMETER :: M32N7RAze = 20779 + INTEGER(IntKi), PARAMETER :: M32N8RAze = 20780 + INTEGER(IntKi), PARAMETER :: M32N9RAze = 20781 + INTEGER(IntKi), PARAMETER :: M33N1RAze = 20782 + INTEGER(IntKi), PARAMETER :: M33N2RAze = 20783 + INTEGER(IntKi), PARAMETER :: M33N3RAze = 20784 + INTEGER(IntKi), PARAMETER :: M33N4RAze = 20785 + INTEGER(IntKi), PARAMETER :: M33N5RAze = 20786 + INTEGER(IntKi), PARAMETER :: M33N6RAze = 20787 + INTEGER(IntKi), PARAMETER :: M33N7RAze = 20788 + INTEGER(IntKi), PARAMETER :: M33N8RAze = 20789 + INTEGER(IntKi), PARAMETER :: M33N9RAze = 20790 + INTEGER(IntKi), PARAMETER :: M34N1RAze = 20791 + INTEGER(IntKi), PARAMETER :: M34N2RAze = 20792 + INTEGER(IntKi), PARAMETER :: M34N3RAze = 20793 + INTEGER(IntKi), PARAMETER :: M34N4RAze = 20794 + INTEGER(IntKi), PARAMETER :: M34N5RAze = 20795 + INTEGER(IntKi), PARAMETER :: M34N6RAze = 20796 + INTEGER(IntKi), PARAMETER :: M34N7RAze = 20797 + INTEGER(IntKi), PARAMETER :: M34N8RAze = 20798 + INTEGER(IntKi), PARAMETER :: M34N9RAze = 20799 + INTEGER(IntKi), PARAMETER :: M35N1RAze = 20800 + INTEGER(IntKi), PARAMETER :: M35N2RAze = 20801 + INTEGER(IntKi), PARAMETER :: M35N3RAze = 20802 + INTEGER(IntKi), PARAMETER :: M35N4RAze = 20803 + INTEGER(IntKi), PARAMETER :: M35N5RAze = 20804 + INTEGER(IntKi), PARAMETER :: M35N6RAze = 20805 + INTEGER(IntKi), PARAMETER :: M35N7RAze = 20806 + INTEGER(IntKi), PARAMETER :: M35N8RAze = 20807 + INTEGER(IntKi), PARAMETER :: M35N9RAze = 20808 + INTEGER(IntKi), PARAMETER :: M36N1RAze = 20809 + INTEGER(IntKi), PARAMETER :: M36N2RAze = 20810 + INTEGER(IntKi), PARAMETER :: M36N3RAze = 20811 + INTEGER(IntKi), PARAMETER :: M36N4RAze = 20812 + INTEGER(IntKi), PARAMETER :: M36N5RAze = 20813 + INTEGER(IntKi), PARAMETER :: M36N6RAze = 20814 + INTEGER(IntKi), PARAMETER :: M36N7RAze = 20815 + INTEGER(IntKi), PARAMETER :: M36N8RAze = 20816 + INTEGER(IntKi), PARAMETER :: M36N9RAze = 20817 + INTEGER(IntKi), PARAMETER :: M37N1RAze = 20818 + INTEGER(IntKi), PARAMETER :: M37N2RAze = 20819 + INTEGER(IntKi), PARAMETER :: M37N3RAze = 20820 + INTEGER(IntKi), PARAMETER :: M37N4RAze = 20821 + INTEGER(IntKi), PARAMETER :: M37N5RAze = 20822 + INTEGER(IntKi), PARAMETER :: M37N6RAze = 20823 + INTEGER(IntKi), PARAMETER :: M37N7RAze = 20824 + INTEGER(IntKi), PARAMETER :: M37N8RAze = 20825 + INTEGER(IntKi), PARAMETER :: M37N9RAze = 20826 + INTEGER(IntKi), PARAMETER :: M38N1RAze = 20827 + INTEGER(IntKi), PARAMETER :: M38N2RAze = 20828 + INTEGER(IntKi), PARAMETER :: M38N3RAze = 20829 + INTEGER(IntKi), PARAMETER :: M38N4RAze = 20830 + INTEGER(IntKi), PARAMETER :: M38N5RAze = 20831 + INTEGER(IntKi), PARAMETER :: M38N6RAze = 20832 + INTEGER(IntKi), PARAMETER :: M38N7RAze = 20833 + INTEGER(IntKi), PARAMETER :: M38N8RAze = 20834 + INTEGER(IntKi), PARAMETER :: M38N9RAze = 20835 + INTEGER(IntKi), PARAMETER :: M39N1RAze = 20836 + INTEGER(IntKi), PARAMETER :: M39N2RAze = 20837 + INTEGER(IntKi), PARAMETER :: M39N3RAze = 20838 + INTEGER(IntKi), PARAMETER :: M39N4RAze = 20839 + INTEGER(IntKi), PARAMETER :: M39N5RAze = 20840 + INTEGER(IntKi), PARAMETER :: M39N6RAze = 20841 + INTEGER(IntKi), PARAMETER :: M39N7RAze = 20842 + INTEGER(IntKi), PARAMETER :: M39N8RAze = 20843 + INTEGER(IntKi), PARAMETER :: M39N9RAze = 20844 + INTEGER(IntKi), PARAMETER :: M40N1RAze = 20845 + INTEGER(IntKi), PARAMETER :: M40N2RAze = 20846 + INTEGER(IntKi), PARAMETER :: M40N3RAze = 20847 + INTEGER(IntKi), PARAMETER :: M40N4RAze = 20848 + INTEGER(IntKi), PARAMETER :: M40N5RAze = 20849 + INTEGER(IntKi), PARAMETER :: M40N6RAze = 20850 + INTEGER(IntKi), PARAMETER :: M40N7RAze = 20851 + INTEGER(IntKi), PARAMETER :: M40N8RAze = 20852 + INTEGER(IntKi), PARAMETER :: M40N9RAze = 20853 + INTEGER(IntKi), PARAMETER :: M41N1RAze = 20854 + INTEGER(IntKi), PARAMETER :: M41N2RAze = 20855 + INTEGER(IntKi), PARAMETER :: M41N3RAze = 20856 + INTEGER(IntKi), PARAMETER :: M41N4RAze = 20857 + INTEGER(IntKi), PARAMETER :: M41N5RAze = 20858 + INTEGER(IntKi), PARAMETER :: M41N6RAze = 20859 + INTEGER(IntKi), PARAMETER :: M41N7RAze = 20860 + INTEGER(IntKi), PARAMETER :: M41N8RAze = 20861 + INTEGER(IntKi), PARAMETER :: M41N9RAze = 20862 + INTEGER(IntKi), PARAMETER :: M42N1RAze = 20863 + INTEGER(IntKi), PARAMETER :: M42N2RAze = 20864 + INTEGER(IntKi), PARAMETER :: M42N3RAze = 20865 + INTEGER(IntKi), PARAMETER :: M42N4RAze = 20866 + INTEGER(IntKi), PARAMETER :: M42N5RAze = 20867 + INTEGER(IntKi), PARAMETER :: M42N6RAze = 20868 + INTEGER(IntKi), PARAMETER :: M42N7RAze = 20869 + INTEGER(IntKi), PARAMETER :: M42N8RAze = 20870 + INTEGER(IntKi), PARAMETER :: M42N9RAze = 20871 + INTEGER(IntKi), PARAMETER :: M43N1RAze = 20872 + INTEGER(IntKi), PARAMETER :: M43N2RAze = 20873 + INTEGER(IntKi), PARAMETER :: M43N3RAze = 20874 + INTEGER(IntKi), PARAMETER :: M43N4RAze = 20875 + INTEGER(IntKi), PARAMETER :: M43N5RAze = 20876 + INTEGER(IntKi), PARAMETER :: M43N6RAze = 20877 + INTEGER(IntKi), PARAMETER :: M43N7RAze = 20878 + INTEGER(IntKi), PARAMETER :: M43N8RAze = 20879 + INTEGER(IntKi), PARAMETER :: M43N9RAze = 20880 + INTEGER(IntKi), PARAMETER :: M44N1RAze = 20881 + INTEGER(IntKi), PARAMETER :: M44N2RAze = 20882 + INTEGER(IntKi), PARAMETER :: M44N3RAze = 20883 + INTEGER(IntKi), PARAMETER :: M44N4RAze = 20884 + INTEGER(IntKi), PARAMETER :: M44N5RAze = 20885 + INTEGER(IntKi), PARAMETER :: M44N6RAze = 20886 + INTEGER(IntKi), PARAMETER :: M44N7RAze = 20887 + INTEGER(IntKi), PARAMETER :: M44N8RAze = 20888 + INTEGER(IntKi), PARAMETER :: M44N9RAze = 20889 + INTEGER(IntKi), PARAMETER :: M45N1RAze = 20890 + INTEGER(IntKi), PARAMETER :: M45N2RAze = 20891 + INTEGER(IntKi), PARAMETER :: M45N3RAze = 20892 + INTEGER(IntKi), PARAMETER :: M45N4RAze = 20893 + INTEGER(IntKi), PARAMETER :: M45N5RAze = 20894 + INTEGER(IntKi), PARAMETER :: M45N6RAze = 20895 + INTEGER(IntKi), PARAMETER :: M45N7RAze = 20896 + INTEGER(IntKi), PARAMETER :: M45N8RAze = 20897 + INTEGER(IntKi), PARAMETER :: M45N9RAze = 20898 + INTEGER(IntKi), PARAMETER :: M46N1RAze = 20899 + INTEGER(IntKi), PARAMETER :: M46N2RAze = 20900 + INTEGER(IntKi), PARAMETER :: M46N3RAze = 20901 + INTEGER(IntKi), PARAMETER :: M46N4RAze = 20902 + INTEGER(IntKi), PARAMETER :: M46N5RAze = 20903 + INTEGER(IntKi), PARAMETER :: M46N6RAze = 20904 + INTEGER(IntKi), PARAMETER :: M46N7RAze = 20905 + INTEGER(IntKi), PARAMETER :: M46N8RAze = 20906 + INTEGER(IntKi), PARAMETER :: M46N9RAze = 20907 + INTEGER(IntKi), PARAMETER :: M47N1RAze = 20908 + INTEGER(IntKi), PARAMETER :: M47N2RAze = 20909 + INTEGER(IntKi), PARAMETER :: M47N3RAze = 20910 + INTEGER(IntKi), PARAMETER :: M47N4RAze = 20911 + INTEGER(IntKi), PARAMETER :: M47N5RAze = 20912 + INTEGER(IntKi), PARAMETER :: M47N6RAze = 20913 + INTEGER(IntKi), PARAMETER :: M47N7RAze = 20914 + INTEGER(IntKi), PARAMETER :: M47N8RAze = 20915 + INTEGER(IntKi), PARAMETER :: M47N9RAze = 20916 + INTEGER(IntKi), PARAMETER :: M48N1RAze = 20917 + INTEGER(IntKi), PARAMETER :: M48N2RAze = 20918 + INTEGER(IntKi), PARAMETER :: M48N3RAze = 20919 + INTEGER(IntKi), PARAMETER :: M48N4RAze = 20920 + INTEGER(IntKi), PARAMETER :: M48N5RAze = 20921 + INTEGER(IntKi), PARAMETER :: M48N6RAze = 20922 + INTEGER(IntKi), PARAMETER :: M48N7RAze = 20923 + INTEGER(IntKi), PARAMETER :: M48N8RAze = 20924 + INTEGER(IntKi), PARAMETER :: M48N9RAze = 20925 + INTEGER(IntKi), PARAMETER :: M49N1RAze = 20926 + INTEGER(IntKi), PARAMETER :: M49N2RAze = 20927 + INTEGER(IntKi), PARAMETER :: M49N3RAze = 20928 + INTEGER(IntKi), PARAMETER :: M49N4RAze = 20929 + INTEGER(IntKi), PARAMETER :: M49N5RAze = 20930 + INTEGER(IntKi), PARAMETER :: M49N6RAze = 20931 + INTEGER(IntKi), PARAMETER :: M49N7RAze = 20932 + INTEGER(IntKi), PARAMETER :: M49N8RAze = 20933 + INTEGER(IntKi), PARAMETER :: M49N9RAze = 20934 + INTEGER(IntKi), PARAMETER :: M50N1RAze = 20935 + INTEGER(IntKi), PARAMETER :: M50N2RAze = 20936 + INTEGER(IntKi), PARAMETER :: M50N3RAze = 20937 + INTEGER(IntKi), PARAMETER :: M50N4RAze = 20938 + INTEGER(IntKi), PARAMETER :: M50N5RAze = 20939 + INTEGER(IntKi), PARAMETER :: M50N6RAze = 20940 + INTEGER(IntKi), PARAMETER :: M50N7RAze = 20941 + INTEGER(IntKi), PARAMETER :: M50N8RAze = 20942 + INTEGER(IntKi), PARAMETER :: M50N9RAze = 20943 + INTEGER(IntKi), PARAMETER :: M51N1RAze = 20944 + INTEGER(IntKi), PARAMETER :: M51N2RAze = 20945 + INTEGER(IntKi), PARAMETER :: M51N3RAze = 20946 + INTEGER(IntKi), PARAMETER :: M51N4RAze = 20947 + INTEGER(IntKi), PARAMETER :: M51N5RAze = 20948 + INTEGER(IntKi), PARAMETER :: M51N6RAze = 20949 + INTEGER(IntKi), PARAMETER :: M51N7RAze = 20950 + INTEGER(IntKi), PARAMETER :: M51N8RAze = 20951 + INTEGER(IntKi), PARAMETER :: M51N9RAze = 20952 + INTEGER(IntKi), PARAMETER :: M52N1RAze = 20953 + INTEGER(IntKi), PARAMETER :: M52N2RAze = 20954 + INTEGER(IntKi), PARAMETER :: M52N3RAze = 20955 + INTEGER(IntKi), PARAMETER :: M52N4RAze = 20956 + INTEGER(IntKi), PARAMETER :: M52N5RAze = 20957 + INTEGER(IntKi), PARAMETER :: M52N6RAze = 20958 + INTEGER(IntKi), PARAMETER :: M52N7RAze = 20959 + INTEGER(IntKi), PARAMETER :: M52N8RAze = 20960 + INTEGER(IntKi), PARAMETER :: M52N9RAze = 20961 + INTEGER(IntKi), PARAMETER :: M53N1RAze = 20962 + INTEGER(IntKi), PARAMETER :: M53N2RAze = 20963 + INTEGER(IntKi), PARAMETER :: M53N3RAze = 20964 + INTEGER(IntKi), PARAMETER :: M53N4RAze = 20965 + INTEGER(IntKi), PARAMETER :: M53N5RAze = 20966 + INTEGER(IntKi), PARAMETER :: M53N6RAze = 20967 + INTEGER(IntKi), PARAMETER :: M53N7RAze = 20968 + INTEGER(IntKi), PARAMETER :: M53N8RAze = 20969 + INTEGER(IntKi), PARAMETER :: M53N9RAze = 20970 + INTEGER(IntKi), PARAMETER :: M54N1RAze = 20971 + INTEGER(IntKi), PARAMETER :: M54N2RAze = 20972 + INTEGER(IntKi), PARAMETER :: M54N3RAze = 20973 + INTEGER(IntKi), PARAMETER :: M54N4RAze = 20974 + INTEGER(IntKi), PARAMETER :: M54N5RAze = 20975 + INTEGER(IntKi), PARAMETER :: M54N6RAze = 20976 + INTEGER(IntKi), PARAMETER :: M54N7RAze = 20977 + INTEGER(IntKi), PARAMETER :: M54N8RAze = 20978 + INTEGER(IntKi), PARAMETER :: M54N9RAze = 20979 + INTEGER(IntKi), PARAMETER :: M55N1RAze = 20980 + INTEGER(IntKi), PARAMETER :: M55N2RAze = 20981 + INTEGER(IntKi), PARAMETER :: M55N3RAze = 20982 + INTEGER(IntKi), PARAMETER :: M55N4RAze = 20983 + INTEGER(IntKi), PARAMETER :: M55N5RAze = 20984 + INTEGER(IntKi), PARAMETER :: M55N6RAze = 20985 + INTEGER(IntKi), PARAMETER :: M55N7RAze = 20986 + INTEGER(IntKi), PARAMETER :: M55N8RAze = 20987 + INTEGER(IntKi), PARAMETER :: M55N9RAze = 20988 + INTEGER(IntKi), PARAMETER :: M56N1RAze = 20989 + INTEGER(IntKi), PARAMETER :: M56N2RAze = 20990 + INTEGER(IntKi), PARAMETER :: M56N3RAze = 20991 + INTEGER(IntKi), PARAMETER :: M56N4RAze = 20992 + INTEGER(IntKi), PARAMETER :: M56N5RAze = 20993 + INTEGER(IntKi), PARAMETER :: M56N6RAze = 20994 + INTEGER(IntKi), PARAMETER :: M56N7RAze = 20995 + INTEGER(IntKi), PARAMETER :: M56N8RAze = 20996 + INTEGER(IntKi), PARAMETER :: M56N9RAze = 20997 + INTEGER(IntKi), PARAMETER :: M57N1RAze = 20998 + INTEGER(IntKi), PARAMETER :: M57N2RAze = 20999 + INTEGER(IntKi), PARAMETER :: M57N3RAze = 21000 + INTEGER(IntKi), PARAMETER :: M57N4RAze = 21001 + INTEGER(IntKi), PARAMETER :: M57N5RAze = 21002 + INTEGER(IntKi), PARAMETER :: M57N6RAze = 21003 + INTEGER(IntKi), PARAMETER :: M57N7RAze = 21004 + INTEGER(IntKi), PARAMETER :: M57N8RAze = 21005 + INTEGER(IntKi), PARAMETER :: M57N9RAze = 21006 + INTEGER(IntKi), PARAMETER :: M58N1RAze = 21007 + INTEGER(IntKi), PARAMETER :: M58N2RAze = 21008 + INTEGER(IntKi), PARAMETER :: M58N3RAze = 21009 + INTEGER(IntKi), PARAMETER :: M58N4RAze = 21010 + INTEGER(IntKi), PARAMETER :: M58N5RAze = 21011 + INTEGER(IntKi), PARAMETER :: M58N6RAze = 21012 + INTEGER(IntKi), PARAMETER :: M58N7RAze = 21013 + INTEGER(IntKi), PARAMETER :: M58N8RAze = 21014 + INTEGER(IntKi), PARAMETER :: M58N9RAze = 21015 + INTEGER(IntKi), PARAMETER :: M59N1RAze = 21016 + INTEGER(IntKi), PARAMETER :: M59N2RAze = 21017 + INTEGER(IntKi), PARAMETER :: M59N3RAze = 21018 + INTEGER(IntKi), PARAMETER :: M59N4RAze = 21019 + INTEGER(IntKi), PARAMETER :: M59N5RAze = 21020 + INTEGER(IntKi), PARAMETER :: M59N6RAze = 21021 + INTEGER(IntKi), PARAMETER :: M59N7RAze = 21022 + INTEGER(IntKi), PARAMETER :: M59N8RAze = 21023 + INTEGER(IntKi), PARAMETER :: M59N9RAze = 21024 + INTEGER(IntKi), PARAMETER :: M60N1RAze = 21025 + INTEGER(IntKi), PARAMETER :: M60N2RAze = 21026 + INTEGER(IntKi), PARAMETER :: M60N3RAze = 21027 + INTEGER(IntKi), PARAMETER :: M60N4RAze = 21028 + INTEGER(IntKi), PARAMETER :: M60N5RAze = 21029 + INTEGER(IntKi), PARAMETER :: M60N6RAze = 21030 + INTEGER(IntKi), PARAMETER :: M60N7RAze = 21031 + INTEGER(IntKi), PARAMETER :: M60N8RAze = 21032 + INTEGER(IntKi), PARAMETER :: M60N9RAze = 21033 + INTEGER(IntKi), PARAMETER :: M61N1RAze = 21034 + INTEGER(IntKi), PARAMETER :: M61N2RAze = 21035 + INTEGER(IntKi), PARAMETER :: M61N3RAze = 21036 + INTEGER(IntKi), PARAMETER :: M61N4RAze = 21037 + INTEGER(IntKi), PARAMETER :: M61N5RAze = 21038 + INTEGER(IntKi), PARAMETER :: M61N6RAze = 21039 + INTEGER(IntKi), PARAMETER :: M61N7RAze = 21040 + INTEGER(IntKi), PARAMETER :: M61N8RAze = 21041 + INTEGER(IntKi), PARAMETER :: M61N9RAze = 21042 + INTEGER(IntKi), PARAMETER :: M62N1RAze = 21043 + INTEGER(IntKi), PARAMETER :: M62N2RAze = 21044 + INTEGER(IntKi), PARAMETER :: M62N3RAze = 21045 + INTEGER(IntKi), PARAMETER :: M62N4RAze = 21046 + INTEGER(IntKi), PARAMETER :: M62N5RAze = 21047 + INTEGER(IntKi), PARAMETER :: M62N6RAze = 21048 + INTEGER(IntKi), PARAMETER :: M62N7RAze = 21049 + INTEGER(IntKi), PARAMETER :: M62N8RAze = 21050 + INTEGER(IntKi), PARAMETER :: M62N9RAze = 21051 + INTEGER(IntKi), PARAMETER :: M63N1RAze = 21052 + INTEGER(IntKi), PARAMETER :: M63N2RAze = 21053 + INTEGER(IntKi), PARAMETER :: M63N3RAze = 21054 + INTEGER(IntKi), PARAMETER :: M63N4RAze = 21055 + INTEGER(IntKi), PARAMETER :: M63N5RAze = 21056 + INTEGER(IntKi), PARAMETER :: M63N6RAze = 21057 + INTEGER(IntKi), PARAMETER :: M63N7RAze = 21058 + INTEGER(IntKi), PARAMETER :: M63N8RAze = 21059 + INTEGER(IntKi), PARAMETER :: M63N9RAze = 21060 + INTEGER(IntKi), PARAMETER :: M64N1RAze = 21061 + INTEGER(IntKi), PARAMETER :: M64N2RAze = 21062 + INTEGER(IntKi), PARAMETER :: M64N3RAze = 21063 + INTEGER(IntKi), PARAMETER :: M64N4RAze = 21064 + INTEGER(IntKi), PARAMETER :: M64N5RAze = 21065 + INTEGER(IntKi), PARAMETER :: M64N6RAze = 21066 + INTEGER(IntKi), PARAMETER :: M64N7RAze = 21067 + INTEGER(IntKi), PARAMETER :: M64N8RAze = 21068 + INTEGER(IntKi), PARAMETER :: M64N9RAze = 21069 + INTEGER(IntKi), PARAMETER :: M65N1RAze = 21070 + INTEGER(IntKi), PARAMETER :: M65N2RAze = 21071 + INTEGER(IntKi), PARAMETER :: M65N3RAze = 21072 + INTEGER(IntKi), PARAMETER :: M65N4RAze = 21073 + INTEGER(IntKi), PARAMETER :: M65N5RAze = 21074 + INTEGER(IntKi), PARAMETER :: M65N6RAze = 21075 + INTEGER(IntKi), PARAMETER :: M65N7RAze = 21076 + INTEGER(IntKi), PARAMETER :: M65N8RAze = 21077 + INTEGER(IntKi), PARAMETER :: M65N9RAze = 21078 + INTEGER(IntKi), PARAMETER :: M66N1RAze = 21079 + INTEGER(IntKi), PARAMETER :: M66N2RAze = 21080 + INTEGER(IntKi), PARAMETER :: M66N3RAze = 21081 + INTEGER(IntKi), PARAMETER :: M66N4RAze = 21082 + INTEGER(IntKi), PARAMETER :: M66N5RAze = 21083 + INTEGER(IntKi), PARAMETER :: M66N6RAze = 21084 + INTEGER(IntKi), PARAMETER :: M66N7RAze = 21085 + INTEGER(IntKi), PARAMETER :: M66N8RAze = 21086 + INTEGER(IntKi), PARAMETER :: M66N9RAze = 21087 + INTEGER(IntKi), PARAMETER :: M67N1RAze = 21088 + INTEGER(IntKi), PARAMETER :: M67N2RAze = 21089 + INTEGER(IntKi), PARAMETER :: M67N3RAze = 21090 + INTEGER(IntKi), PARAMETER :: M67N4RAze = 21091 + INTEGER(IntKi), PARAMETER :: M67N5RAze = 21092 + INTEGER(IntKi), PARAMETER :: M67N6RAze = 21093 + INTEGER(IntKi), PARAMETER :: M67N7RAze = 21094 + INTEGER(IntKi), PARAMETER :: M67N8RAze = 21095 + INTEGER(IntKi), PARAMETER :: M67N9RAze = 21096 + INTEGER(IntKi), PARAMETER :: M68N1RAze = 21097 + INTEGER(IntKi), PARAMETER :: M68N2RAze = 21098 + INTEGER(IntKi), PARAMETER :: M68N3RAze = 21099 + INTEGER(IntKi), PARAMETER :: M68N4RAze = 21100 + INTEGER(IntKi), PARAMETER :: M68N5RAze = 21101 + INTEGER(IntKi), PARAMETER :: M68N6RAze = 21102 + INTEGER(IntKi), PARAMETER :: M68N7RAze = 21103 + INTEGER(IntKi), PARAMETER :: M68N8RAze = 21104 + INTEGER(IntKi), PARAMETER :: M68N9RAze = 21105 + INTEGER(IntKi), PARAMETER :: M69N1RAze = 21106 + INTEGER(IntKi), PARAMETER :: M69N2RAze = 21107 + INTEGER(IntKi), PARAMETER :: M69N3RAze = 21108 + INTEGER(IntKi), PARAMETER :: M69N4RAze = 21109 + INTEGER(IntKi), PARAMETER :: M69N5RAze = 21110 + INTEGER(IntKi), PARAMETER :: M69N6RAze = 21111 + INTEGER(IntKi), PARAMETER :: M69N7RAze = 21112 + INTEGER(IntKi), PARAMETER :: M69N8RAze = 21113 + INTEGER(IntKi), PARAMETER :: M69N9RAze = 21114 + INTEGER(IntKi), PARAMETER :: M70N1RAze = 21115 + INTEGER(IntKi), PARAMETER :: M70N2RAze = 21116 + INTEGER(IntKi), PARAMETER :: M70N3RAze = 21117 + INTEGER(IntKi), PARAMETER :: M70N4RAze = 21118 + INTEGER(IntKi), PARAMETER :: M70N5RAze = 21119 + INTEGER(IntKi), PARAMETER :: M70N6RAze = 21120 + INTEGER(IntKi), PARAMETER :: M70N7RAze = 21121 + INTEGER(IntKi), PARAMETER :: M70N8RAze = 21122 + INTEGER(IntKi), PARAMETER :: M70N9RAze = 21123 + INTEGER(IntKi), PARAMETER :: M71N1RAze = 21124 + INTEGER(IntKi), PARAMETER :: M71N2RAze = 21125 + INTEGER(IntKi), PARAMETER :: M71N3RAze = 21126 + INTEGER(IntKi), PARAMETER :: M71N4RAze = 21127 + INTEGER(IntKi), PARAMETER :: M71N5RAze = 21128 + INTEGER(IntKi), PARAMETER :: M71N6RAze = 21129 + INTEGER(IntKi), PARAMETER :: M71N7RAze = 21130 + INTEGER(IntKi), PARAMETER :: M71N8RAze = 21131 + INTEGER(IntKi), PARAMETER :: M71N9RAze = 21132 + INTEGER(IntKi), PARAMETER :: M72N1RAze = 21133 + INTEGER(IntKi), PARAMETER :: M72N2RAze = 21134 + INTEGER(IntKi), PARAMETER :: M72N3RAze = 21135 + INTEGER(IntKi), PARAMETER :: M72N4RAze = 21136 + INTEGER(IntKi), PARAMETER :: M72N5RAze = 21137 + INTEGER(IntKi), PARAMETER :: M72N6RAze = 21138 + INTEGER(IntKi), PARAMETER :: M72N7RAze = 21139 + INTEGER(IntKi), PARAMETER :: M72N8RAze = 21140 + INTEGER(IntKi), PARAMETER :: M72N9RAze = 21141 + INTEGER(IntKi), PARAMETER :: M73N1RAze = 21142 + INTEGER(IntKi), PARAMETER :: M73N2RAze = 21143 + INTEGER(IntKi), PARAMETER :: M73N3RAze = 21144 + INTEGER(IntKi), PARAMETER :: M73N4RAze = 21145 + INTEGER(IntKi), PARAMETER :: M73N5RAze = 21146 + INTEGER(IntKi), PARAMETER :: M73N6RAze = 21147 + INTEGER(IntKi), PARAMETER :: M73N7RAze = 21148 + INTEGER(IntKi), PARAMETER :: M73N8RAze = 21149 + INTEGER(IntKi), PARAMETER :: M73N9RAze = 21150 + INTEGER(IntKi), PARAMETER :: M74N1RAze = 21151 + INTEGER(IntKi), PARAMETER :: M74N2RAze = 21152 + INTEGER(IntKi), PARAMETER :: M74N3RAze = 21153 + INTEGER(IntKi), PARAMETER :: M74N4RAze = 21154 + INTEGER(IntKi), PARAMETER :: M74N5RAze = 21155 + INTEGER(IntKi), PARAMETER :: M74N6RAze = 21156 + INTEGER(IntKi), PARAMETER :: M74N7RAze = 21157 + INTEGER(IntKi), PARAMETER :: M74N8RAze = 21158 + INTEGER(IntKi), PARAMETER :: M74N9RAze = 21159 + INTEGER(IntKi), PARAMETER :: M75N1RAze = 21160 + INTEGER(IntKi), PARAMETER :: M75N2RAze = 21161 + INTEGER(IntKi), PARAMETER :: M75N3RAze = 21162 + INTEGER(IntKi), PARAMETER :: M75N4RAze = 21163 + INTEGER(IntKi), PARAMETER :: M75N5RAze = 21164 + INTEGER(IntKi), PARAMETER :: M75N6RAze = 21165 + INTEGER(IntKi), PARAMETER :: M75N7RAze = 21166 + INTEGER(IntKi), PARAMETER :: M75N8RAze = 21167 + INTEGER(IntKi), PARAMETER :: M75N9RAze = 21168 + INTEGER(IntKi), PARAMETER :: M76N1RAze = 21169 + INTEGER(IntKi), PARAMETER :: M76N2RAze = 21170 + INTEGER(IntKi), PARAMETER :: M76N3RAze = 21171 + INTEGER(IntKi), PARAMETER :: M76N4RAze = 21172 + INTEGER(IntKi), PARAMETER :: M76N5RAze = 21173 + INTEGER(IntKi), PARAMETER :: M76N6RAze = 21174 + INTEGER(IntKi), PARAMETER :: M76N7RAze = 21175 + INTEGER(IntKi), PARAMETER :: M76N8RAze = 21176 + INTEGER(IntKi), PARAMETER :: M76N9RAze = 21177 + INTEGER(IntKi), PARAMETER :: M77N1RAze = 21178 + INTEGER(IntKi), PARAMETER :: M77N2RAze = 21179 + INTEGER(IntKi), PARAMETER :: M77N3RAze = 21180 + INTEGER(IntKi), PARAMETER :: M77N4RAze = 21181 + INTEGER(IntKi), PARAMETER :: M77N5RAze = 21182 + INTEGER(IntKi), PARAMETER :: M77N6RAze = 21183 + INTEGER(IntKi), PARAMETER :: M77N7RAze = 21184 + INTEGER(IntKi), PARAMETER :: M77N8RAze = 21185 + INTEGER(IntKi), PARAMETER :: M77N9RAze = 21186 + INTEGER(IntKi), PARAMETER :: M78N1RAze = 21187 + INTEGER(IntKi), PARAMETER :: M78N2RAze = 21188 + INTEGER(IntKi), PARAMETER :: M78N3RAze = 21189 + INTEGER(IntKi), PARAMETER :: M78N4RAze = 21190 + INTEGER(IntKi), PARAMETER :: M78N5RAze = 21191 + INTEGER(IntKi), PARAMETER :: M78N6RAze = 21192 + INTEGER(IntKi), PARAMETER :: M78N7RAze = 21193 + INTEGER(IntKi), PARAMETER :: M78N8RAze = 21194 + INTEGER(IntKi), PARAMETER :: M78N9RAze = 21195 + INTEGER(IntKi), PARAMETER :: M79N1RAze = 21196 + INTEGER(IntKi), PARAMETER :: M79N2RAze = 21197 + INTEGER(IntKi), PARAMETER :: M79N3RAze = 21198 + INTEGER(IntKi), PARAMETER :: M79N4RAze = 21199 + INTEGER(IntKi), PARAMETER :: M79N5RAze = 21200 + INTEGER(IntKi), PARAMETER :: M79N6RAze = 21201 + INTEGER(IntKi), PARAMETER :: M79N7RAze = 21202 + INTEGER(IntKi), PARAMETER :: M79N8RAze = 21203 + INTEGER(IntKi), PARAMETER :: M79N9RAze = 21204 + INTEGER(IntKi), PARAMETER :: M80N1RAze = 21205 + INTEGER(IntKi), PARAMETER :: M80N2RAze = 21206 + INTEGER(IntKi), PARAMETER :: M80N3RAze = 21207 + INTEGER(IntKi), PARAMETER :: M80N4RAze = 21208 + INTEGER(IntKi), PARAMETER :: M80N5RAze = 21209 + INTEGER(IntKi), PARAMETER :: M80N6RAze = 21210 + INTEGER(IntKi), PARAMETER :: M80N7RAze = 21211 + INTEGER(IntKi), PARAMETER :: M80N8RAze = 21212 + INTEGER(IntKi), PARAMETER :: M80N9RAze = 21213 + INTEGER(IntKi), PARAMETER :: M81N1RAze = 21214 + INTEGER(IntKi), PARAMETER :: M81N2RAze = 21215 + INTEGER(IntKi), PARAMETER :: M81N3RAze = 21216 + INTEGER(IntKi), PARAMETER :: M81N4RAze = 21217 + INTEGER(IntKi), PARAMETER :: M81N5RAze = 21218 + INTEGER(IntKi), PARAMETER :: M81N6RAze = 21219 + INTEGER(IntKi), PARAMETER :: M81N7RAze = 21220 + INTEGER(IntKi), PARAMETER :: M81N8RAze = 21221 + INTEGER(IntKi), PARAMETER :: M81N9RAze = 21222 + INTEGER(IntKi), PARAMETER :: M82N1RAze = 21223 + INTEGER(IntKi), PARAMETER :: M82N2RAze = 21224 + INTEGER(IntKi), PARAMETER :: M82N3RAze = 21225 + INTEGER(IntKi), PARAMETER :: M82N4RAze = 21226 + INTEGER(IntKi), PARAMETER :: M82N5RAze = 21227 + INTEGER(IntKi), PARAMETER :: M82N6RAze = 21228 + INTEGER(IntKi), PARAMETER :: M82N7RAze = 21229 + INTEGER(IntKi), PARAMETER :: M82N8RAze = 21230 + INTEGER(IntKi), PARAMETER :: M82N9RAze = 21231 + INTEGER(IntKi), PARAMETER :: M83N1RAze = 21232 + INTEGER(IntKi), PARAMETER :: M83N2RAze = 21233 + INTEGER(IntKi), PARAMETER :: M83N3RAze = 21234 + INTEGER(IntKi), PARAMETER :: M83N4RAze = 21235 + INTEGER(IntKi), PARAMETER :: M83N5RAze = 21236 + INTEGER(IntKi), PARAMETER :: M83N6RAze = 21237 + INTEGER(IntKi), PARAMETER :: M83N7RAze = 21238 + INTEGER(IntKi), PARAMETER :: M83N8RAze = 21239 + INTEGER(IntKi), PARAMETER :: M83N9RAze = 21240 + INTEGER(IntKi), PARAMETER :: M84N1RAze = 21241 + INTEGER(IntKi), PARAMETER :: M84N2RAze = 21242 + INTEGER(IntKi), PARAMETER :: M84N3RAze = 21243 + INTEGER(IntKi), PARAMETER :: M84N4RAze = 21244 + INTEGER(IntKi), PARAMETER :: M84N5RAze = 21245 + INTEGER(IntKi), PARAMETER :: M84N6RAze = 21246 + INTEGER(IntKi), PARAMETER :: M84N7RAze = 21247 + INTEGER(IntKi), PARAMETER :: M84N8RAze = 21248 + INTEGER(IntKi), PARAMETER :: M84N9RAze = 21249 + INTEGER(IntKi), PARAMETER :: M85N1RAze = 21250 + INTEGER(IntKi), PARAMETER :: M85N2RAze = 21251 + INTEGER(IntKi), PARAMETER :: M85N3RAze = 21252 + INTEGER(IntKi), PARAMETER :: M85N4RAze = 21253 + INTEGER(IntKi), PARAMETER :: M85N5RAze = 21254 + INTEGER(IntKi), PARAMETER :: M85N6RAze = 21255 + INTEGER(IntKi), PARAMETER :: M85N7RAze = 21256 + INTEGER(IntKi), PARAMETER :: M85N8RAze = 21257 + INTEGER(IntKi), PARAMETER :: M85N9RAze = 21258 + INTEGER(IntKi), PARAMETER :: M86N1RAze = 21259 + INTEGER(IntKi), PARAMETER :: M86N2RAze = 21260 + INTEGER(IntKi), PARAMETER :: M86N3RAze = 21261 + INTEGER(IntKi), PARAMETER :: M86N4RAze = 21262 + INTEGER(IntKi), PARAMETER :: M86N5RAze = 21263 + INTEGER(IntKi), PARAMETER :: M86N6RAze = 21264 + INTEGER(IntKi), PARAMETER :: M86N7RAze = 21265 + INTEGER(IntKi), PARAMETER :: M86N8RAze = 21266 + INTEGER(IntKi), PARAMETER :: M86N9RAze = 21267 + INTEGER(IntKi), PARAMETER :: M87N1RAze = 21268 + INTEGER(IntKi), PARAMETER :: M87N2RAze = 21269 + INTEGER(IntKi), PARAMETER :: M87N3RAze = 21270 + INTEGER(IntKi), PARAMETER :: M87N4RAze = 21271 + INTEGER(IntKi), PARAMETER :: M87N5RAze = 21272 + INTEGER(IntKi), PARAMETER :: M87N6RAze = 21273 + INTEGER(IntKi), PARAMETER :: M87N7RAze = 21274 + INTEGER(IntKi), PARAMETER :: M87N8RAze = 21275 + INTEGER(IntKi), PARAMETER :: M87N9RAze = 21276 + INTEGER(IntKi), PARAMETER :: M88N1RAze = 21277 + INTEGER(IntKi), PARAMETER :: M88N2RAze = 21278 + INTEGER(IntKi), PARAMETER :: M88N3RAze = 21279 + INTEGER(IntKi), PARAMETER :: M88N4RAze = 21280 + INTEGER(IntKi), PARAMETER :: M88N5RAze = 21281 + INTEGER(IntKi), PARAMETER :: M88N6RAze = 21282 + INTEGER(IntKi), PARAMETER :: M88N7RAze = 21283 + INTEGER(IntKi), PARAMETER :: M88N8RAze = 21284 + INTEGER(IntKi), PARAMETER :: M88N9RAze = 21285 + INTEGER(IntKi), PARAMETER :: M89N1RAze = 21286 + INTEGER(IntKi), PARAMETER :: M89N2RAze = 21287 + INTEGER(IntKi), PARAMETER :: M89N3RAze = 21288 + INTEGER(IntKi), PARAMETER :: M89N4RAze = 21289 + INTEGER(IntKi), PARAMETER :: M89N5RAze = 21290 + INTEGER(IntKi), PARAMETER :: M89N6RAze = 21291 + INTEGER(IntKi), PARAMETER :: M89N7RAze = 21292 + INTEGER(IntKi), PARAMETER :: M89N8RAze = 21293 + INTEGER(IntKi), PARAMETER :: M89N9RAze = 21294 + INTEGER(IntKi), PARAMETER :: M90N1RAze = 21295 + INTEGER(IntKi), PARAMETER :: M90N2RAze = 21296 + INTEGER(IntKi), PARAMETER :: M90N3RAze = 21297 + INTEGER(IntKi), PARAMETER :: M90N4RAze = 21298 + INTEGER(IntKi), PARAMETER :: M90N5RAze = 21299 + INTEGER(IntKi), PARAMETER :: M90N6RAze = 21300 + INTEGER(IntKi), PARAMETER :: M90N7RAze = 21301 + INTEGER(IntKi), PARAMETER :: M90N8RAze = 21302 + INTEGER(IntKi), PARAMETER :: M90N9RAze = 21303 + INTEGER(IntKi), PARAMETER :: M91N1RAze = 21304 + INTEGER(IntKi), PARAMETER :: M91N2RAze = 21305 + INTEGER(IntKi), PARAMETER :: M91N3RAze = 21306 + INTEGER(IntKi), PARAMETER :: M91N4RAze = 21307 + INTEGER(IntKi), PARAMETER :: M91N5RAze = 21308 + INTEGER(IntKi), PARAMETER :: M91N6RAze = 21309 + INTEGER(IntKi), PARAMETER :: M91N7RAze = 21310 + INTEGER(IntKi), PARAMETER :: M91N8RAze = 21311 + INTEGER(IntKi), PARAMETER :: M91N9RAze = 21312 + INTEGER(IntKi), PARAMETER :: M92N1RAze = 21313 + INTEGER(IntKi), PARAMETER :: M92N2RAze = 21314 + INTEGER(IntKi), PARAMETER :: M92N3RAze = 21315 + INTEGER(IntKi), PARAMETER :: M92N4RAze = 21316 + INTEGER(IntKi), PARAMETER :: M92N5RAze = 21317 + INTEGER(IntKi), PARAMETER :: M92N6RAze = 21318 + INTEGER(IntKi), PARAMETER :: M92N7RAze = 21319 + INTEGER(IntKi), PARAMETER :: M92N8RAze = 21320 + INTEGER(IntKi), PARAMETER :: M92N9RAze = 21321 + INTEGER(IntKi), PARAMETER :: M93N1RAze = 21322 + INTEGER(IntKi), PARAMETER :: M93N2RAze = 21323 + INTEGER(IntKi), PARAMETER :: M93N3RAze = 21324 + INTEGER(IntKi), PARAMETER :: M93N4RAze = 21325 + INTEGER(IntKi), PARAMETER :: M93N5RAze = 21326 + INTEGER(IntKi), PARAMETER :: M93N6RAze = 21327 + INTEGER(IntKi), PARAMETER :: M93N7RAze = 21328 + INTEGER(IntKi), PARAMETER :: M93N8RAze = 21329 + INTEGER(IntKi), PARAMETER :: M93N9RAze = 21330 + INTEGER(IntKi), PARAMETER :: M94N1RAze = 21331 + INTEGER(IntKi), PARAMETER :: M94N2RAze = 21332 + INTEGER(IntKi), PARAMETER :: M94N3RAze = 21333 + INTEGER(IntKi), PARAMETER :: M94N4RAze = 21334 + INTEGER(IntKi), PARAMETER :: M94N5RAze = 21335 + INTEGER(IntKi), PARAMETER :: M94N6RAze = 21336 + INTEGER(IntKi), PARAMETER :: M94N7RAze = 21337 + INTEGER(IntKi), PARAMETER :: M94N8RAze = 21338 + INTEGER(IntKi), PARAMETER :: M94N9RAze = 21339 + INTEGER(IntKi), PARAMETER :: M95N1RAze = 21340 + INTEGER(IntKi), PARAMETER :: M95N2RAze = 21341 + INTEGER(IntKi), PARAMETER :: M95N3RAze = 21342 + INTEGER(IntKi), PARAMETER :: M95N4RAze = 21343 + INTEGER(IntKi), PARAMETER :: M95N5RAze = 21344 + INTEGER(IntKi), PARAMETER :: M95N6RAze = 21345 + INTEGER(IntKi), PARAMETER :: M95N7RAze = 21346 + INTEGER(IntKi), PARAMETER :: M95N8RAze = 21347 + INTEGER(IntKi), PARAMETER :: M95N9RAze = 21348 + INTEGER(IntKi), PARAMETER :: M96N1RAze = 21349 + INTEGER(IntKi), PARAMETER :: M96N2RAze = 21350 + INTEGER(IntKi), PARAMETER :: M96N3RAze = 21351 + INTEGER(IntKi), PARAMETER :: M96N4RAze = 21352 + INTEGER(IntKi), PARAMETER :: M96N5RAze = 21353 + INTEGER(IntKi), PARAMETER :: M96N6RAze = 21354 + INTEGER(IntKi), PARAMETER :: M96N7RAze = 21355 + INTEGER(IntKi), PARAMETER :: M96N8RAze = 21356 + INTEGER(IntKi), PARAMETER :: M96N9RAze = 21357 + INTEGER(IntKi), PARAMETER :: M97N1RAze = 21358 + INTEGER(IntKi), PARAMETER :: M97N2RAze = 21359 + INTEGER(IntKi), PARAMETER :: M97N3RAze = 21360 + INTEGER(IntKi), PARAMETER :: M97N4RAze = 21361 + INTEGER(IntKi), PARAMETER :: M97N5RAze = 21362 + INTEGER(IntKi), PARAMETER :: M97N6RAze = 21363 + INTEGER(IntKi), PARAMETER :: M97N7RAze = 21364 + INTEGER(IntKi), PARAMETER :: M97N8RAze = 21365 + INTEGER(IntKi), PARAMETER :: M97N9RAze = 21366 + INTEGER(IntKi), PARAMETER :: M98N1RAze = 21367 + INTEGER(IntKi), PARAMETER :: M98N2RAze = 21368 + INTEGER(IntKi), PARAMETER :: M98N3RAze = 21369 + INTEGER(IntKi), PARAMETER :: M98N4RAze = 21370 + INTEGER(IntKi), PARAMETER :: M98N5RAze = 21371 + INTEGER(IntKi), PARAMETER :: M98N6RAze = 21372 + INTEGER(IntKi), PARAMETER :: M98N7RAze = 21373 + INTEGER(IntKi), PARAMETER :: M98N8RAze = 21374 + INTEGER(IntKi), PARAMETER :: M98N9RAze = 21375 + INTEGER(IntKi), PARAMETER :: M99N1RAze = 21376 + INTEGER(IntKi), PARAMETER :: M99N2RAze = 21377 + INTEGER(IntKi), PARAMETER :: M99N3RAze = 21378 + INTEGER(IntKi), PARAMETER :: M99N4RAze = 21379 + INTEGER(IntKi), PARAMETER :: M99N5RAze = 21380 + INTEGER(IntKi), PARAMETER :: M99N6RAze = 21381 + INTEGER(IntKi), PARAMETER :: M99N7RAze = 21382 + INTEGER(IntKi), PARAMETER :: M99N8RAze = 21383 + INTEGER(IntKi), PARAMETER :: M99N9RAze = 21384 - INTEGER(IntKi), PARAMETER :: ReactFXss = 1945 - INTEGER(IntKi), PARAMETER :: ReactFYss = 1946 - INTEGER(IntKi), PARAMETER :: ReactFZss = 1947 - INTEGER(IntKi), PARAMETER :: ReactMXss = 1948 - INTEGER(IntKi), PARAMETER :: ReactMYss = 1949 - INTEGER(IntKi), PARAMETER :: ReactMZss = 1950 - INTEGER(IntKi), PARAMETER :: IntfFXss = 1951 - INTEGER(IntKi), PARAMETER :: IntfFYss = 1952 - INTEGER(IntKi), PARAMETER :: IntfFZss = 1953 - INTEGER(IntKi), PARAMETER :: IntfMXss = 1954 - INTEGER(IntKi), PARAMETER :: IntfMYss = 1955 - INTEGER(IntKi), PARAMETER :: IntfMZss = 1956 + ! Reactions: - ! Interface Deflections: + INTEGER(IntKi), PARAMETER :: ReactFXss = 21385 + INTEGER(IntKi), PARAMETER :: ReactFYss = 21386 + INTEGER(IntKi), PARAMETER :: ReactFZss = 21387 + INTEGER(IntKi), PARAMETER :: ReactMXss = 21388 + INTEGER(IntKi), PARAMETER :: ReactMYss = 21389 + INTEGER(IntKi), PARAMETER :: ReactMZss = 21390 + INTEGER(IntKi), PARAMETER :: IntfFXss = 21391 + INTEGER(IntKi), PARAMETER :: IntfFYss = 21392 + INTEGER(IntKi), PARAMETER :: IntfFZss = 21393 + INTEGER(IntKi), PARAMETER :: IntfMXss = 21394 + INTEGER(IntKi), PARAMETER :: IntfMYss = 21395 + INTEGER(IntKi), PARAMETER :: IntfMZss = 21396 - INTEGER(IntKi), PARAMETER :: IntfTDXss = 1957 - INTEGER(IntKi), PARAMETER :: IntfTDYss = 1958 - INTEGER(IntKi), PARAMETER :: IntfTDZss = 1959 - INTEGER(IntKi), PARAMETER :: IntfRDXss = 1960 - INTEGER(IntKi), PARAMETER :: IntfRDYss = 1961 - INTEGER(IntKi), PARAMETER :: IntfRDZss = 1962 + ! Interface Deflections: - ! Interface Accelerations: + INTEGER(IntKi), PARAMETER :: IntfTDXss = 21397 + INTEGER(IntKi), PARAMETER :: IntfTDYss = 21398 + INTEGER(IntKi), PARAMETER :: IntfTDZss = 21399 + INTEGER(IntKi), PARAMETER :: IntfRDXss = 21400 + INTEGER(IntKi), PARAMETER :: IntfRDYss = 21401 + INTEGER(IntKi), PARAMETER :: IntfRDZss = 21402 - INTEGER(IntKi), PARAMETER :: IntfTAXss = 1963 - INTEGER(IntKi), PARAMETER :: IntfTAYss = 1964 - INTEGER(IntKi), PARAMETER :: IntfTAZss = 1965 - INTEGER(IntKi), PARAMETER :: IntfRAXss = 1966 - INTEGER(IntKi), PARAMETER :: IntfRAYss = 1967 - INTEGER(IntKi), PARAMETER :: IntfRAZss = 1968 + ! Interface Accelerations: - ! Modal Parameters: + INTEGER(IntKi), PARAMETER :: IntfTAXss = 21403 + INTEGER(IntKi), PARAMETER :: IntfTAYss = 21404 + INTEGER(IntKi), PARAMETER :: IntfTAZss = 21405 + INTEGER(IntKi), PARAMETER :: IntfRAXss = 21406 + INTEGER(IntKi), PARAMETER :: IntfRAYss = 21407 + INTEGER(IntKi), PARAMETER :: IntfRAZss = 21408 - INTEGER(IntKi), PARAMETER :: SSqm01 = 1969 - INTEGER(IntKi), PARAMETER :: SSqm02 = 1970 - INTEGER(IntKi), PARAMETER :: SSqm03 = 1971 - INTEGER(IntKi), PARAMETER :: SSqm04 = 1972 - INTEGER(IntKi), PARAMETER :: SSqm05 = 1973 - INTEGER(IntKi), PARAMETER :: SSqm06 = 1974 - INTEGER(IntKi), PARAMETER :: SSqm07 = 1975 - INTEGER(IntKi), PARAMETER :: SSqm08 = 1976 - INTEGER(IntKi), PARAMETER :: SSqm09 = 1977 - INTEGER(IntKi), PARAMETER :: SSqm10 = 1978 - INTEGER(IntKi), PARAMETER :: SSqm11 = 1979 - INTEGER(IntKi), PARAMETER :: SSqm12 = 1980 - INTEGER(IntKi), PARAMETER :: SSqm13 = 1981 - INTEGER(IntKi), PARAMETER :: SSqm14 = 1982 - INTEGER(IntKi), PARAMETER :: SSqm15 = 1983 - INTEGER(IntKi), PARAMETER :: SSqm16 = 1984 - INTEGER(IntKi), PARAMETER :: SSqm17 = 1985 - INTEGER(IntKi), PARAMETER :: SSqm18 = 1986 - INTEGER(IntKi), PARAMETER :: SSqm19 = 1987 - INTEGER(IntKi), PARAMETER :: SSqm20 = 1988 - INTEGER(IntKi), PARAMETER :: SSqm21 = 1989 - INTEGER(IntKi), PARAMETER :: SSqm22 = 1990 - INTEGER(IntKi), PARAMETER :: SSqm23 = 1991 - INTEGER(IntKi), PARAMETER :: SSqm24 = 1992 - INTEGER(IntKi), PARAMETER :: SSqm25 = 1993 - INTEGER(IntKi), PARAMETER :: SSqm26 = 1994 - INTEGER(IntKi), PARAMETER :: SSqm27 = 1995 - INTEGER(IntKi), PARAMETER :: SSqm28 = 1996 - INTEGER(IntKi), PARAMETER :: SSqm29 = 1997 - INTEGER(IntKi), PARAMETER :: SSqm30 = 1998 - INTEGER(IntKi), PARAMETER :: SSqm31 = 1999 - INTEGER(IntKi), PARAMETER :: SSqm32 = 2000 - INTEGER(IntKi), PARAMETER :: SSqm33 = 2001 - INTEGER(IntKi), PARAMETER :: SSqm34 = 2002 - INTEGER(IntKi), PARAMETER :: SSqm35 = 2003 - INTEGER(IntKi), PARAMETER :: SSqm36 = 2004 - INTEGER(IntKi), PARAMETER :: SSqm37 = 2005 - INTEGER(IntKi), PARAMETER :: SSqm38 = 2006 - INTEGER(IntKi), PARAMETER :: SSqm39 = 2007 - INTEGER(IntKi), PARAMETER :: SSqm40 = 2008 - INTEGER(IntKi), PARAMETER :: SSqm41 = 2009 - INTEGER(IntKi), PARAMETER :: SSqm42 = 2010 - INTEGER(IntKi), PARAMETER :: SSqm43 = 2011 - INTEGER(IntKi), PARAMETER :: SSqm44 = 2012 - INTEGER(IntKi), PARAMETER :: SSqm45 = 2013 - INTEGER(IntKi), PARAMETER :: SSqm46 = 2014 - INTEGER(IntKi), PARAMETER :: SSqm47 = 2015 - INTEGER(IntKi), PARAMETER :: SSqm48 = 2016 - INTEGER(IntKi), PARAMETER :: SSqm49 = 2017 - INTEGER(IntKi), PARAMETER :: SSqm50 = 2018 - INTEGER(IntKi), PARAMETER :: SSqm51 = 2019 - INTEGER(IntKi), PARAMETER :: SSqm52 = 2020 - INTEGER(IntKi), PARAMETER :: SSqm53 = 2021 - INTEGER(IntKi), PARAMETER :: SSqm54 = 2022 - INTEGER(IntKi), PARAMETER :: SSqm55 = 2023 - INTEGER(IntKi), PARAMETER :: SSqm56 = 2024 - INTEGER(IntKi), PARAMETER :: SSqm57 = 2025 - INTEGER(IntKi), PARAMETER :: SSqm58 = 2026 - INTEGER(IntKi), PARAMETER :: SSqm59 = 2027 - INTEGER(IntKi), PARAMETER :: SSqm60 = 2028 - INTEGER(IntKi), PARAMETER :: SSqm61 = 2029 - INTEGER(IntKi), PARAMETER :: SSqm62 = 2030 - INTEGER(IntKi), PARAMETER :: SSqm63 = 2031 - INTEGER(IntKi), PARAMETER :: SSqm64 = 2032 - INTEGER(IntKi), PARAMETER :: SSqm65 = 2033 - INTEGER(IntKi), PARAMETER :: SSqm66 = 2034 - INTEGER(IntKi), PARAMETER :: SSqm67 = 2035 - INTEGER(IntKi), PARAMETER :: SSqm68 = 2036 - INTEGER(IntKi), PARAMETER :: SSqm69 = 2037 - INTEGER(IntKi), PARAMETER :: SSqm70 = 2038 - INTEGER(IntKi), PARAMETER :: SSqm71 = 2039 - INTEGER(IntKi), PARAMETER :: SSqm72 = 2040 - INTEGER(IntKi), PARAMETER :: SSqm73 = 2041 - INTEGER(IntKi), PARAMETER :: SSqm74 = 2042 - INTEGER(IntKi), PARAMETER :: SSqm75 = 2043 - INTEGER(IntKi), PARAMETER :: SSqm76 = 2044 - INTEGER(IntKi), PARAMETER :: SSqm77 = 2045 - INTEGER(IntKi), PARAMETER :: SSqm78 = 2046 - INTEGER(IntKi), PARAMETER :: SSqm79 = 2047 - INTEGER(IntKi), PARAMETER :: SSqm80 = 2048 - INTEGER(IntKi), PARAMETER :: SSqm81 = 2049 - INTEGER(IntKi), PARAMETER :: SSqm82 = 2050 - INTEGER(IntKi), PARAMETER :: SSqm83 = 2051 - INTEGER(IntKi), PARAMETER :: SSqm84 = 2052 - INTEGER(IntKi), PARAMETER :: SSqm85 = 2053 - INTEGER(IntKi), PARAMETER :: SSqm86 = 2054 - INTEGER(IntKi), PARAMETER :: SSqm87 = 2055 - INTEGER(IntKi), PARAMETER :: SSqm88 = 2056 - INTEGER(IntKi), PARAMETER :: SSqm89 = 2057 - INTEGER(IntKi), PARAMETER :: SSqm90 = 2058 - INTEGER(IntKi), PARAMETER :: SSqm91 = 2059 - INTEGER(IntKi), PARAMETER :: SSqm92 = 2060 - INTEGER(IntKi), PARAMETER :: SSqm93 = 2061 - INTEGER(IntKi), PARAMETER :: SSqm94 = 2062 - INTEGER(IntKi), PARAMETER :: SSqm95 = 2063 - INTEGER(IntKi), PARAMETER :: SSqm96 = 2064 - INTEGER(IntKi), PARAMETER :: SSqm97 = 2065 - INTEGER(IntKi), PARAMETER :: SSqm98 = 2066 - INTEGER(IntKi), PARAMETER :: SSqm99 = 2067 - INTEGER(IntKi), PARAMETER :: SSqmd01 = 2068 - INTEGER(IntKi), PARAMETER :: SSqmd02 = 2069 - INTEGER(IntKi), PARAMETER :: SSqmd03 = 2070 - INTEGER(IntKi), PARAMETER :: SSqmd04 = 2071 - INTEGER(IntKi), PARAMETER :: SSqmd05 = 2072 - INTEGER(IntKi), PARAMETER :: SSqmd06 = 2073 - INTEGER(IntKi), PARAMETER :: SSqmd07 = 2074 - INTEGER(IntKi), PARAMETER :: SSqmd08 = 2075 - INTEGER(IntKi), PARAMETER :: SSqmd09 = 2076 - INTEGER(IntKi), PARAMETER :: SSqmd10 = 2077 - INTEGER(IntKi), PARAMETER :: SSqmd11 = 2078 - INTEGER(IntKi), PARAMETER :: SSqmd12 = 2079 - INTEGER(IntKi), PARAMETER :: SSqmd13 = 2080 - INTEGER(IntKi), PARAMETER :: SSqmd14 = 2081 - INTEGER(IntKi), PARAMETER :: SSqmd15 = 2082 - INTEGER(IntKi), PARAMETER :: SSqmd16 = 2083 - INTEGER(IntKi), PARAMETER :: SSqmd17 = 2084 - INTEGER(IntKi), PARAMETER :: SSqmd18 = 2085 - INTEGER(IntKi), PARAMETER :: SSqmd19 = 2086 - INTEGER(IntKi), PARAMETER :: SSqmd20 = 2087 - INTEGER(IntKi), PARAMETER :: SSqmd21 = 2088 - INTEGER(IntKi), PARAMETER :: SSqmd22 = 2089 - INTEGER(IntKi), PARAMETER :: SSqmd23 = 2090 - INTEGER(IntKi), PARAMETER :: SSqmd24 = 2091 - INTEGER(IntKi), PARAMETER :: SSqmd25 = 2092 - INTEGER(IntKi), PARAMETER :: SSqmd26 = 2093 - INTEGER(IntKi), PARAMETER :: SSqmd27 = 2094 - INTEGER(IntKi), PARAMETER :: SSqmd28 = 2095 - INTEGER(IntKi), PARAMETER :: SSqmd29 = 2096 - INTEGER(IntKi), PARAMETER :: SSqmd30 = 2097 - INTEGER(IntKi), PARAMETER :: SSqmd31 = 2098 - INTEGER(IntKi), PARAMETER :: SSqmd32 = 2099 - INTEGER(IntKi), PARAMETER :: SSqmd33 = 2100 - INTEGER(IntKi), PARAMETER :: SSqmd34 = 2101 - INTEGER(IntKi), PARAMETER :: SSqmd35 = 2102 - INTEGER(IntKi), PARAMETER :: SSqmd36 = 2103 - INTEGER(IntKi), PARAMETER :: SSqmd37 = 2104 - INTEGER(IntKi), PARAMETER :: SSqmd38 = 2105 - INTEGER(IntKi), PARAMETER :: SSqmd39 = 2106 - INTEGER(IntKi), PARAMETER :: SSqmd40 = 2107 - INTEGER(IntKi), PARAMETER :: SSqmd41 = 2108 - INTEGER(IntKi), PARAMETER :: SSqmd42 = 2109 - INTEGER(IntKi), PARAMETER :: SSqmd43 = 2110 - INTEGER(IntKi), PARAMETER :: SSqmd44 = 2111 - INTEGER(IntKi), PARAMETER :: SSqmd45 = 2112 - INTEGER(IntKi), PARAMETER :: SSqmd46 = 2113 - INTEGER(IntKi), PARAMETER :: SSqmd47 = 2114 - INTEGER(IntKi), PARAMETER :: SSqmd48 = 2115 - INTEGER(IntKi), PARAMETER :: SSqmd49 = 2116 - INTEGER(IntKi), PARAMETER :: SSqmd50 = 2117 - INTEGER(IntKi), PARAMETER :: SSqmd51 = 2118 - INTEGER(IntKi), PARAMETER :: SSqmd52 = 2119 - INTEGER(IntKi), PARAMETER :: SSqmd53 = 2120 - INTEGER(IntKi), PARAMETER :: SSqmd54 = 2121 - INTEGER(IntKi), PARAMETER :: SSqmd55 = 2122 - INTEGER(IntKi), PARAMETER :: SSqmd56 = 2123 - INTEGER(IntKi), PARAMETER :: SSqmd57 = 2124 - INTEGER(IntKi), PARAMETER :: SSqmd58 = 2125 - INTEGER(IntKi), PARAMETER :: SSqmd59 = 2126 - INTEGER(IntKi), PARAMETER :: SSqmd60 = 2127 - INTEGER(IntKi), PARAMETER :: SSqmd61 = 2128 - INTEGER(IntKi), PARAMETER :: SSqmd62 = 2129 - INTEGER(IntKi), PARAMETER :: SSqmd63 = 2130 - INTEGER(IntKi), PARAMETER :: SSqmd64 = 2131 - INTEGER(IntKi), PARAMETER :: SSqmd65 = 2132 - INTEGER(IntKi), PARAMETER :: SSqmd66 = 2133 - INTEGER(IntKi), PARAMETER :: SSqmd67 = 2134 - INTEGER(IntKi), PARAMETER :: SSqmd68 = 2135 - INTEGER(IntKi), PARAMETER :: SSqmd69 = 2136 - INTEGER(IntKi), PARAMETER :: SSqmd70 = 2137 - INTEGER(IntKi), PARAMETER :: SSqmd71 = 2138 - INTEGER(IntKi), PARAMETER :: SSqmd72 = 2139 - INTEGER(IntKi), PARAMETER :: SSqmd73 = 2140 - INTEGER(IntKi), PARAMETER :: SSqmd74 = 2141 - INTEGER(IntKi), PARAMETER :: SSqmd75 = 2142 - INTEGER(IntKi), PARAMETER :: SSqmd76 = 2143 - INTEGER(IntKi), PARAMETER :: SSqmd77 = 2144 - INTEGER(IntKi), PARAMETER :: SSqmd78 = 2145 - INTEGER(IntKi), PARAMETER :: SSqmd79 = 2146 - INTEGER(IntKi), PARAMETER :: SSqmd80 = 2147 - INTEGER(IntKi), PARAMETER :: SSqmd81 = 2148 - INTEGER(IntKi), PARAMETER :: SSqmd82 = 2149 - INTEGER(IntKi), PARAMETER :: SSqmd83 = 2150 - INTEGER(IntKi), PARAMETER :: SSqmd84 = 2151 - INTEGER(IntKi), PARAMETER :: SSqmd85 = 2152 - INTEGER(IntKi), PARAMETER :: SSqmd86 = 2153 - INTEGER(IntKi), PARAMETER :: SSqmd87 = 2154 - INTEGER(IntKi), PARAMETER :: SSqmd88 = 2155 - INTEGER(IntKi), PARAMETER :: SSqmd89 = 2156 - INTEGER(IntKi), PARAMETER :: SSqmd90 = 2157 - INTEGER(IntKi), PARAMETER :: SSqmd91 = 2158 - INTEGER(IntKi), PARAMETER :: SSqmd92 = 2159 - INTEGER(IntKi), PARAMETER :: SSqmd93 = 2160 - INTEGER(IntKi), PARAMETER :: SSqmd94 = 2161 - INTEGER(IntKi), PARAMETER :: SSqmd95 = 2162 - INTEGER(IntKi), PARAMETER :: SSqmd96 = 2163 - INTEGER(IntKi), PARAMETER :: SSqmd97 = 2164 - INTEGER(IntKi), PARAMETER :: SSqmd98 = 2165 - INTEGER(IntKi), PARAMETER :: SSqmd99 = 2166 - INTEGER(IntKi), PARAMETER :: SSqmdd01 = 2167 - INTEGER(IntKi), PARAMETER :: SSqmdd02 = 2168 - INTEGER(IntKi), PARAMETER :: SSqmdd03 = 2169 - INTEGER(IntKi), PARAMETER :: SSqmdd04 = 2170 - INTEGER(IntKi), PARAMETER :: SSqmdd05 = 2171 - INTEGER(IntKi), PARAMETER :: SSqmdd06 = 2172 - INTEGER(IntKi), PARAMETER :: SSqmdd07 = 2173 - INTEGER(IntKi), PARAMETER :: SSqmdd08 = 2174 - INTEGER(IntKi), PARAMETER :: SSqmdd09 = 2175 - INTEGER(IntKi), PARAMETER :: SSqmdd10 = 2176 - INTEGER(IntKi), PARAMETER :: SSqmdd11 = 2177 - INTEGER(IntKi), PARAMETER :: SSqmdd12 = 2178 - INTEGER(IntKi), PARAMETER :: SSqmdd13 = 2179 - INTEGER(IntKi), PARAMETER :: SSqmdd14 = 2180 - INTEGER(IntKi), PARAMETER :: SSqmdd15 = 2181 - INTEGER(IntKi), PARAMETER :: SSqmdd16 = 2182 - INTEGER(IntKi), PARAMETER :: SSqmdd17 = 2183 - INTEGER(IntKi), PARAMETER :: SSqmdd18 = 2184 - INTEGER(IntKi), PARAMETER :: SSqmdd19 = 2185 - INTEGER(IntKi), PARAMETER :: SSqmdd20 = 2186 - INTEGER(IntKi), PARAMETER :: SSqmdd21 = 2187 - INTEGER(IntKi), PARAMETER :: SSqmdd22 = 2188 - INTEGER(IntKi), PARAMETER :: SSqmdd23 = 2189 - INTEGER(IntKi), PARAMETER :: SSqmdd24 = 2190 - INTEGER(IntKi), PARAMETER :: SSqmdd25 = 2191 - INTEGER(IntKi), PARAMETER :: SSqmdd26 = 2192 - INTEGER(IntKi), PARAMETER :: SSqmdd27 = 2193 - INTEGER(IntKi), PARAMETER :: SSqmdd28 = 2194 - INTEGER(IntKi), PARAMETER :: SSqmdd29 = 2195 - INTEGER(IntKi), PARAMETER :: SSqmdd30 = 2196 - INTEGER(IntKi), PARAMETER :: SSqmdd31 = 2197 - INTEGER(IntKi), PARAMETER :: SSqmdd32 = 2198 - INTEGER(IntKi), PARAMETER :: SSqmdd33 = 2199 - INTEGER(IntKi), PARAMETER :: SSqmdd34 = 2200 - INTEGER(IntKi), PARAMETER :: SSqmdd35 = 2201 - INTEGER(IntKi), PARAMETER :: SSqmdd36 = 2202 - INTEGER(IntKi), PARAMETER :: SSqmdd37 = 2203 - INTEGER(IntKi), PARAMETER :: SSqmdd38 = 2204 - INTEGER(IntKi), PARAMETER :: SSqmdd39 = 2205 - INTEGER(IntKi), PARAMETER :: SSqmdd40 = 2206 - INTEGER(IntKi), PARAMETER :: SSqmdd41 = 2207 - INTEGER(IntKi), PARAMETER :: SSqmdd42 = 2208 - INTEGER(IntKi), PARAMETER :: SSqmdd43 = 2209 - INTEGER(IntKi), PARAMETER :: SSqmdd44 = 2210 - INTEGER(IntKi), PARAMETER :: SSqmdd45 = 2211 - INTEGER(IntKi), PARAMETER :: SSqmdd46 = 2212 - INTEGER(IntKi), PARAMETER :: SSqmdd47 = 2213 - INTEGER(IntKi), PARAMETER :: SSqmdd48 = 2214 - INTEGER(IntKi), PARAMETER :: SSqmdd49 = 2215 - INTEGER(IntKi), PARAMETER :: SSqmdd50 = 2216 - INTEGER(IntKi), PARAMETER :: SSqmdd51 = 2217 - INTEGER(IntKi), PARAMETER :: SSqmdd52 = 2218 - INTEGER(IntKi), PARAMETER :: SSqmdd53 = 2219 - INTEGER(IntKi), PARAMETER :: SSqmdd54 = 2220 - INTEGER(IntKi), PARAMETER :: SSqmdd55 = 2221 - INTEGER(IntKi), PARAMETER :: SSqmdd56 = 2222 - INTEGER(IntKi), PARAMETER :: SSqmdd57 = 2223 - INTEGER(IntKi), PARAMETER :: SSqmdd58 = 2224 - INTEGER(IntKi), PARAMETER :: SSqmdd59 = 2225 - INTEGER(IntKi), PARAMETER :: SSqmdd60 = 2226 - INTEGER(IntKi), PARAMETER :: SSqmdd61 = 2227 - INTEGER(IntKi), PARAMETER :: SSqmdd62 = 2228 - INTEGER(IntKi), PARAMETER :: SSqmdd63 = 2229 - INTEGER(IntKi), PARAMETER :: SSqmdd64 = 2230 - INTEGER(IntKi), PARAMETER :: SSqmdd65 = 2231 - INTEGER(IntKi), PARAMETER :: SSqmdd66 = 2232 - INTEGER(IntKi), PARAMETER :: SSqmdd67 = 2233 - INTEGER(IntKi), PARAMETER :: SSqmdd68 = 2234 - INTEGER(IntKi), PARAMETER :: SSqmdd69 = 2235 - INTEGER(IntKi), PARAMETER :: SSqmdd70 = 2236 - INTEGER(IntKi), PARAMETER :: SSqmdd71 = 2237 - INTEGER(IntKi), PARAMETER :: SSqmdd72 = 2238 - INTEGER(IntKi), PARAMETER :: SSqmdd73 = 2239 - INTEGER(IntKi), PARAMETER :: SSqmdd74 = 2240 - INTEGER(IntKi), PARAMETER :: SSqmdd75 = 2241 - INTEGER(IntKi), PARAMETER :: SSqmdd76 = 2242 - INTEGER(IntKi), PARAMETER :: SSqmdd77 = 2243 - INTEGER(IntKi), PARAMETER :: SSqmdd78 = 2244 - INTEGER(IntKi), PARAMETER :: SSqmdd79 = 2245 - INTEGER(IntKi), PARAMETER :: SSqmdd80 = 2246 - INTEGER(IntKi), PARAMETER :: SSqmdd81 = 2247 - INTEGER(IntKi), PARAMETER :: SSqmdd82 = 2248 - INTEGER(IntKi), PARAMETER :: SSqmdd83 = 2249 - INTEGER(IntKi), PARAMETER :: SSqmdd84 = 2250 - INTEGER(IntKi), PARAMETER :: SSqmdd85 = 2251 - INTEGER(IntKi), PARAMETER :: SSqmdd86 = 2252 - INTEGER(IntKi), PARAMETER :: SSqmdd87 = 2253 - INTEGER(IntKi), PARAMETER :: SSqmdd88 = 2254 - INTEGER(IntKi), PARAMETER :: SSqmdd89 = 2255 - INTEGER(IntKi), PARAMETER :: SSqmdd90 = 2256 - INTEGER(IntKi), PARAMETER :: SSqmdd91 = 2257 - INTEGER(IntKi), PARAMETER :: SSqmdd92 = 2258 - INTEGER(IntKi), PARAMETER :: SSqmdd93 = 2259 - INTEGER(IntKi), PARAMETER :: SSqmdd94 = 2260 - INTEGER(IntKi), PARAMETER :: SSqmdd95 = 2261 - INTEGER(IntKi), PARAMETER :: SSqmdd96 = 2262 - INTEGER(IntKi), PARAMETER :: SSqmdd97 = 2263 - INTEGER(IntKi), PARAMETER :: SSqmdd98 = 2264 - INTEGER(IntKi), PARAMETER :: SSqmdd99 = 2265 + + ! Modal Parameters: + + INTEGER(IntKi), PARAMETER :: SSqm01 = 21409 + INTEGER(IntKi), PARAMETER :: SSqm02 = 21410 + INTEGER(IntKi), PARAMETER :: SSqm03 = 21411 + INTEGER(IntKi), PARAMETER :: SSqm04 = 21412 + INTEGER(IntKi), PARAMETER :: SSqm05 = 21413 + INTEGER(IntKi), PARAMETER :: SSqm06 = 21414 + INTEGER(IntKi), PARAMETER :: SSqm07 = 21415 + INTEGER(IntKi), PARAMETER :: SSqm08 = 21416 + INTEGER(IntKi), PARAMETER :: SSqm09 = 21417 + INTEGER(IntKi), PARAMETER :: SSqm10 = 21418 + INTEGER(IntKi), PARAMETER :: SSqm11 = 21419 + INTEGER(IntKi), PARAMETER :: SSqm12 = 21420 + INTEGER(IntKi), PARAMETER :: SSqm13 = 21421 + INTEGER(IntKi), PARAMETER :: SSqm14 = 21422 + INTEGER(IntKi), PARAMETER :: SSqm15 = 21423 + INTEGER(IntKi), PARAMETER :: SSqm16 = 21424 + INTEGER(IntKi), PARAMETER :: SSqm17 = 21425 + INTEGER(IntKi), PARAMETER :: SSqm18 = 21426 + INTEGER(IntKi), PARAMETER :: SSqm19 = 21427 + INTEGER(IntKi), PARAMETER :: SSqm20 = 21428 + INTEGER(IntKi), PARAMETER :: SSqm21 = 21429 + INTEGER(IntKi), PARAMETER :: SSqm22 = 21430 + INTEGER(IntKi), PARAMETER :: SSqm23 = 21431 + INTEGER(IntKi), PARAMETER :: SSqm24 = 21432 + INTEGER(IntKi), PARAMETER :: SSqm25 = 21433 + INTEGER(IntKi), PARAMETER :: SSqm26 = 21434 + INTEGER(IntKi), PARAMETER :: SSqm27 = 21435 + INTEGER(IntKi), PARAMETER :: SSqm28 = 21436 + INTEGER(IntKi), PARAMETER :: SSqm29 = 21437 + INTEGER(IntKi), PARAMETER :: SSqm30 = 21438 + INTEGER(IntKi), PARAMETER :: SSqm31 = 21439 + INTEGER(IntKi), PARAMETER :: SSqm32 = 21440 + INTEGER(IntKi), PARAMETER :: SSqm33 = 21441 + INTEGER(IntKi), PARAMETER :: SSqm34 = 21442 + INTEGER(IntKi), PARAMETER :: SSqm35 = 21443 + INTEGER(IntKi), PARAMETER :: SSqm36 = 21444 + INTEGER(IntKi), PARAMETER :: SSqm37 = 21445 + INTEGER(IntKi), PARAMETER :: SSqm38 = 21446 + INTEGER(IntKi), PARAMETER :: SSqm39 = 21447 + INTEGER(IntKi), PARAMETER :: SSqm40 = 21448 + INTEGER(IntKi), PARAMETER :: SSqm41 = 21449 + INTEGER(IntKi), PARAMETER :: SSqm42 = 21450 + INTEGER(IntKi), PARAMETER :: SSqm43 = 21451 + INTEGER(IntKi), PARAMETER :: SSqm44 = 21452 + INTEGER(IntKi), PARAMETER :: SSqm45 = 21453 + INTEGER(IntKi), PARAMETER :: SSqm46 = 21454 + INTEGER(IntKi), PARAMETER :: SSqm47 = 21455 + INTEGER(IntKi), PARAMETER :: SSqm48 = 21456 + INTEGER(IntKi), PARAMETER :: SSqm49 = 21457 + INTEGER(IntKi), PARAMETER :: SSqm50 = 21458 + INTEGER(IntKi), PARAMETER :: SSqm51 = 21459 + INTEGER(IntKi), PARAMETER :: SSqm52 = 21460 + INTEGER(IntKi), PARAMETER :: SSqm53 = 21461 + INTEGER(IntKi), PARAMETER :: SSqm54 = 21462 + INTEGER(IntKi), PARAMETER :: SSqm55 = 21463 + INTEGER(IntKi), PARAMETER :: SSqm56 = 21464 + INTEGER(IntKi), PARAMETER :: SSqm57 = 21465 + INTEGER(IntKi), PARAMETER :: SSqm58 = 21466 + INTEGER(IntKi), PARAMETER :: SSqm59 = 21467 + INTEGER(IntKi), PARAMETER :: SSqm60 = 21468 + INTEGER(IntKi), PARAMETER :: SSqm61 = 21469 + INTEGER(IntKi), PARAMETER :: SSqm62 = 21470 + INTEGER(IntKi), PARAMETER :: SSqm63 = 21471 + INTEGER(IntKi), PARAMETER :: SSqm64 = 21472 + INTEGER(IntKi), PARAMETER :: SSqm65 = 21473 + INTEGER(IntKi), PARAMETER :: SSqm66 = 21474 + INTEGER(IntKi), PARAMETER :: SSqm67 = 21475 + INTEGER(IntKi), PARAMETER :: SSqm68 = 21476 + INTEGER(IntKi), PARAMETER :: SSqm69 = 21477 + INTEGER(IntKi), PARAMETER :: SSqm70 = 21478 + INTEGER(IntKi), PARAMETER :: SSqm71 = 21479 + INTEGER(IntKi), PARAMETER :: SSqm72 = 21480 + INTEGER(IntKi), PARAMETER :: SSqm73 = 21481 + INTEGER(IntKi), PARAMETER :: SSqm74 = 21482 + INTEGER(IntKi), PARAMETER :: SSqm75 = 21483 + INTEGER(IntKi), PARAMETER :: SSqm76 = 21484 + INTEGER(IntKi), PARAMETER :: SSqm77 = 21485 + INTEGER(IntKi), PARAMETER :: SSqm78 = 21486 + INTEGER(IntKi), PARAMETER :: SSqm79 = 21487 + INTEGER(IntKi), PARAMETER :: SSqm80 = 21488 + INTEGER(IntKi), PARAMETER :: SSqm81 = 21489 + INTEGER(IntKi), PARAMETER :: SSqm82 = 21490 + INTEGER(IntKi), PARAMETER :: SSqm83 = 21491 + INTEGER(IntKi), PARAMETER :: SSqm84 = 21492 + INTEGER(IntKi), PARAMETER :: SSqm85 = 21493 + INTEGER(IntKi), PARAMETER :: SSqm86 = 21494 + INTEGER(IntKi), PARAMETER :: SSqm87 = 21495 + INTEGER(IntKi), PARAMETER :: SSqm88 = 21496 + INTEGER(IntKi), PARAMETER :: SSqm89 = 21497 + INTEGER(IntKi), PARAMETER :: SSqm90 = 21498 + INTEGER(IntKi), PARAMETER :: SSqm91 = 21499 + INTEGER(IntKi), PARAMETER :: SSqm92 = 21500 + INTEGER(IntKi), PARAMETER :: SSqm93 = 21501 + INTEGER(IntKi), PARAMETER :: SSqm94 = 21502 + INTEGER(IntKi), PARAMETER :: SSqm95 = 21503 + INTEGER(IntKi), PARAMETER :: SSqm96 = 21504 + INTEGER(IntKi), PARAMETER :: SSqm97 = 21505 + INTEGER(IntKi), PARAMETER :: SSqm98 = 21506 + INTEGER(IntKi), PARAMETER :: SSqm99 = 21507 + INTEGER(IntKi), PARAMETER :: SSqmd01 = 21508 + INTEGER(IntKi), PARAMETER :: SSqmd02 = 21509 + INTEGER(IntKi), PARAMETER :: SSqmd03 = 21510 + INTEGER(IntKi), PARAMETER :: SSqmd04 = 21511 + INTEGER(IntKi), PARAMETER :: SSqmd05 = 21512 + INTEGER(IntKi), PARAMETER :: SSqmd06 = 21513 + INTEGER(IntKi), PARAMETER :: SSqmd07 = 21514 + INTEGER(IntKi), PARAMETER :: SSqmd08 = 21515 + INTEGER(IntKi), PARAMETER :: SSqmd09 = 21516 + INTEGER(IntKi), PARAMETER :: SSqmd10 = 21517 + INTEGER(IntKi), PARAMETER :: SSqmd11 = 21518 + INTEGER(IntKi), PARAMETER :: SSqmd12 = 21519 + INTEGER(IntKi), PARAMETER :: SSqmd13 = 21520 + INTEGER(IntKi), PARAMETER :: SSqmd14 = 21521 + INTEGER(IntKi), PARAMETER :: SSqmd15 = 21522 + INTEGER(IntKi), PARAMETER :: SSqmd16 = 21523 + INTEGER(IntKi), PARAMETER :: SSqmd17 = 21524 + INTEGER(IntKi), PARAMETER :: SSqmd18 = 21525 + INTEGER(IntKi), PARAMETER :: SSqmd19 = 21526 + INTEGER(IntKi), PARAMETER :: SSqmd20 = 21527 + INTEGER(IntKi), PARAMETER :: SSqmd21 = 21528 + INTEGER(IntKi), PARAMETER :: SSqmd22 = 21529 + INTEGER(IntKi), PARAMETER :: SSqmd23 = 21530 + INTEGER(IntKi), PARAMETER :: SSqmd24 = 21531 + INTEGER(IntKi), PARAMETER :: SSqmd25 = 21532 + INTEGER(IntKi), PARAMETER :: SSqmd26 = 21533 + INTEGER(IntKi), PARAMETER :: SSqmd27 = 21534 + INTEGER(IntKi), PARAMETER :: SSqmd28 = 21535 + INTEGER(IntKi), PARAMETER :: SSqmd29 = 21536 + INTEGER(IntKi), PARAMETER :: SSqmd30 = 21537 + INTEGER(IntKi), PARAMETER :: SSqmd31 = 21538 + INTEGER(IntKi), PARAMETER :: SSqmd32 = 21539 + INTEGER(IntKi), PARAMETER :: SSqmd33 = 21540 + INTEGER(IntKi), PARAMETER :: SSqmd34 = 21541 + INTEGER(IntKi), PARAMETER :: SSqmd35 = 21542 + INTEGER(IntKi), PARAMETER :: SSqmd36 = 21543 + INTEGER(IntKi), PARAMETER :: SSqmd37 = 21544 + INTEGER(IntKi), PARAMETER :: SSqmd38 = 21545 + INTEGER(IntKi), PARAMETER :: SSqmd39 = 21546 + INTEGER(IntKi), PARAMETER :: SSqmd40 = 21547 + INTEGER(IntKi), PARAMETER :: SSqmd41 = 21548 + INTEGER(IntKi), PARAMETER :: SSqmd42 = 21549 + INTEGER(IntKi), PARAMETER :: SSqmd43 = 21550 + INTEGER(IntKi), PARAMETER :: SSqmd44 = 21551 + INTEGER(IntKi), PARAMETER :: SSqmd45 = 21552 + INTEGER(IntKi), PARAMETER :: SSqmd46 = 21553 + INTEGER(IntKi), PARAMETER :: SSqmd47 = 21554 + INTEGER(IntKi), PARAMETER :: SSqmd48 = 21555 + INTEGER(IntKi), PARAMETER :: SSqmd49 = 21556 + INTEGER(IntKi), PARAMETER :: SSqmd50 = 21557 + INTEGER(IntKi), PARAMETER :: SSqmd51 = 21558 + INTEGER(IntKi), PARAMETER :: SSqmd52 = 21559 + INTEGER(IntKi), PARAMETER :: SSqmd53 = 21560 + INTEGER(IntKi), PARAMETER :: SSqmd54 = 21561 + INTEGER(IntKi), PARAMETER :: SSqmd55 = 21562 + INTEGER(IntKi), PARAMETER :: SSqmd56 = 21563 + INTEGER(IntKi), PARAMETER :: SSqmd57 = 21564 + INTEGER(IntKi), PARAMETER :: SSqmd58 = 21565 + INTEGER(IntKi), PARAMETER :: SSqmd59 = 21566 + INTEGER(IntKi), PARAMETER :: SSqmd60 = 21567 + INTEGER(IntKi), PARAMETER :: SSqmd61 = 21568 + INTEGER(IntKi), PARAMETER :: SSqmd62 = 21569 + INTEGER(IntKi), PARAMETER :: SSqmd63 = 21570 + INTEGER(IntKi), PARAMETER :: SSqmd64 = 21571 + INTEGER(IntKi), PARAMETER :: SSqmd65 = 21572 + INTEGER(IntKi), PARAMETER :: SSqmd66 = 21573 + INTEGER(IntKi), PARAMETER :: SSqmd67 = 21574 + INTEGER(IntKi), PARAMETER :: SSqmd68 = 21575 + INTEGER(IntKi), PARAMETER :: SSqmd69 = 21576 + INTEGER(IntKi), PARAMETER :: SSqmd70 = 21577 + INTEGER(IntKi), PARAMETER :: SSqmd71 = 21578 + INTEGER(IntKi), PARAMETER :: SSqmd72 = 21579 + INTEGER(IntKi), PARAMETER :: SSqmd73 = 21580 + INTEGER(IntKi), PARAMETER :: SSqmd74 = 21581 + INTEGER(IntKi), PARAMETER :: SSqmd75 = 21582 + INTEGER(IntKi), PARAMETER :: SSqmd76 = 21583 + INTEGER(IntKi), PARAMETER :: SSqmd77 = 21584 + INTEGER(IntKi), PARAMETER :: SSqmd78 = 21585 + INTEGER(IntKi), PARAMETER :: SSqmd79 = 21586 + INTEGER(IntKi), PARAMETER :: SSqmd80 = 21587 + INTEGER(IntKi), PARAMETER :: SSqmd81 = 21588 + INTEGER(IntKi), PARAMETER :: SSqmd82 = 21589 + INTEGER(IntKi), PARAMETER :: SSqmd83 = 21590 + INTEGER(IntKi), PARAMETER :: SSqmd84 = 21591 + INTEGER(IntKi), PARAMETER :: SSqmd85 = 21592 + INTEGER(IntKi), PARAMETER :: SSqmd86 = 21593 + INTEGER(IntKi), PARAMETER :: SSqmd87 = 21594 + INTEGER(IntKi), PARAMETER :: SSqmd88 = 21595 + INTEGER(IntKi), PARAMETER :: SSqmd89 = 21596 + INTEGER(IntKi), PARAMETER :: SSqmd90 = 21597 + INTEGER(IntKi), PARAMETER :: SSqmd91 = 21598 + INTEGER(IntKi), PARAMETER :: SSqmd92 = 21599 + INTEGER(IntKi), PARAMETER :: SSqmd93 = 21600 + INTEGER(IntKi), PARAMETER :: SSqmd94 = 21601 + INTEGER(IntKi), PARAMETER :: SSqmd95 = 21602 + INTEGER(IntKi), PARAMETER :: SSqmd96 = 21603 + INTEGER(IntKi), PARAMETER :: SSqmd97 = 21604 + INTEGER(IntKi), PARAMETER :: SSqmd98 = 21605 + INTEGER(IntKi), PARAMETER :: SSqmd99 = 21606 + INTEGER(IntKi), PARAMETER :: SSqmdd01 = 21607 + INTEGER(IntKi), PARAMETER :: SSqmdd02 = 21608 + INTEGER(IntKi), PARAMETER :: SSqmdd03 = 21609 + INTEGER(IntKi), PARAMETER :: SSqmdd04 = 21610 + INTEGER(IntKi), PARAMETER :: SSqmdd05 = 21611 + INTEGER(IntKi), PARAMETER :: SSqmdd06 = 21612 + INTEGER(IntKi), PARAMETER :: SSqmdd07 = 21613 + INTEGER(IntKi), PARAMETER :: SSqmdd08 = 21614 + INTEGER(IntKi), PARAMETER :: SSqmdd09 = 21615 + INTEGER(IntKi), PARAMETER :: SSqmdd10 = 21616 + INTEGER(IntKi), PARAMETER :: SSqmdd11 = 21617 + INTEGER(IntKi), PARAMETER :: SSqmdd12 = 21618 + INTEGER(IntKi), PARAMETER :: SSqmdd13 = 21619 + INTEGER(IntKi), PARAMETER :: SSqmdd14 = 21620 + INTEGER(IntKi), PARAMETER :: SSqmdd15 = 21621 + INTEGER(IntKi), PARAMETER :: SSqmdd16 = 21622 + INTEGER(IntKi), PARAMETER :: SSqmdd17 = 21623 + INTEGER(IntKi), PARAMETER :: SSqmdd18 = 21624 + INTEGER(IntKi), PARAMETER :: SSqmdd19 = 21625 + INTEGER(IntKi), PARAMETER :: SSqmdd20 = 21626 + INTEGER(IntKi), PARAMETER :: SSqmdd21 = 21627 + INTEGER(IntKi), PARAMETER :: SSqmdd22 = 21628 + INTEGER(IntKi), PARAMETER :: SSqmdd23 = 21629 + INTEGER(IntKi), PARAMETER :: SSqmdd24 = 21630 + INTEGER(IntKi), PARAMETER :: SSqmdd25 = 21631 + INTEGER(IntKi), PARAMETER :: SSqmdd26 = 21632 + INTEGER(IntKi), PARAMETER :: SSqmdd27 = 21633 + INTEGER(IntKi), PARAMETER :: SSqmdd28 = 21634 + INTEGER(IntKi), PARAMETER :: SSqmdd29 = 21635 + INTEGER(IntKi), PARAMETER :: SSqmdd30 = 21636 + INTEGER(IntKi), PARAMETER :: SSqmdd31 = 21637 + INTEGER(IntKi), PARAMETER :: SSqmdd32 = 21638 + INTEGER(IntKi), PARAMETER :: SSqmdd33 = 21639 + INTEGER(IntKi), PARAMETER :: SSqmdd34 = 21640 + INTEGER(IntKi), PARAMETER :: SSqmdd35 = 21641 + INTEGER(IntKi), PARAMETER :: SSqmdd36 = 21642 + INTEGER(IntKi), PARAMETER :: SSqmdd37 = 21643 + INTEGER(IntKi), PARAMETER :: SSqmdd38 = 21644 + INTEGER(IntKi), PARAMETER :: SSqmdd39 = 21645 + INTEGER(IntKi), PARAMETER :: SSqmdd40 = 21646 + INTEGER(IntKi), PARAMETER :: SSqmdd41 = 21647 + INTEGER(IntKi), PARAMETER :: SSqmdd42 = 21648 + INTEGER(IntKi), PARAMETER :: SSqmdd43 = 21649 + INTEGER(IntKi), PARAMETER :: SSqmdd44 = 21650 + INTEGER(IntKi), PARAMETER :: SSqmdd45 = 21651 + INTEGER(IntKi), PARAMETER :: SSqmdd46 = 21652 + INTEGER(IntKi), PARAMETER :: SSqmdd47 = 21653 + INTEGER(IntKi), PARAMETER :: SSqmdd48 = 21654 + INTEGER(IntKi), PARAMETER :: SSqmdd49 = 21655 + INTEGER(IntKi), PARAMETER :: SSqmdd50 = 21656 + INTEGER(IntKi), PARAMETER :: SSqmdd51 = 21657 + INTEGER(IntKi), PARAMETER :: SSqmdd52 = 21658 + INTEGER(IntKi), PARAMETER :: SSqmdd53 = 21659 + INTEGER(IntKi), PARAMETER :: SSqmdd54 = 21660 + INTEGER(IntKi), PARAMETER :: SSqmdd55 = 21661 + INTEGER(IntKi), PARAMETER :: SSqmdd56 = 21662 + INTEGER(IntKi), PARAMETER :: SSqmdd57 = 21663 + INTEGER(IntKi), PARAMETER :: SSqmdd58 = 21664 + INTEGER(IntKi), PARAMETER :: SSqmdd59 = 21665 + INTEGER(IntKi), PARAMETER :: SSqmdd60 = 21666 + INTEGER(IntKi), PARAMETER :: SSqmdd61 = 21667 + INTEGER(IntKi), PARAMETER :: SSqmdd62 = 21668 + INTEGER(IntKi), PARAMETER :: SSqmdd63 = 21669 + INTEGER(IntKi), PARAMETER :: SSqmdd64 = 21670 + INTEGER(IntKi), PARAMETER :: SSqmdd65 = 21671 + INTEGER(IntKi), PARAMETER :: SSqmdd66 = 21672 + INTEGER(IntKi), PARAMETER :: SSqmdd67 = 21673 + INTEGER(IntKi), PARAMETER :: SSqmdd68 = 21674 + INTEGER(IntKi), PARAMETER :: SSqmdd69 = 21675 + INTEGER(IntKi), PARAMETER :: SSqmdd70 = 21676 + INTEGER(IntKi), PARAMETER :: SSqmdd71 = 21677 + INTEGER(IntKi), PARAMETER :: SSqmdd72 = 21678 + INTEGER(IntKi), PARAMETER :: SSqmdd73 = 21679 + INTEGER(IntKi), PARAMETER :: SSqmdd74 = 21680 + INTEGER(IntKi), PARAMETER :: SSqmdd75 = 21681 + INTEGER(IntKi), PARAMETER :: SSqmdd76 = 21682 + INTEGER(IntKi), PARAMETER :: SSqmdd77 = 21683 + INTEGER(IntKi), PARAMETER :: SSqmdd78 = 21684 + INTEGER(IntKi), PARAMETER :: SSqmdd79 = 21685 + INTEGER(IntKi), PARAMETER :: SSqmdd80 = 21686 + INTEGER(IntKi), PARAMETER :: SSqmdd81 = 21687 + INTEGER(IntKi), PARAMETER :: SSqmdd82 = 21688 + INTEGER(IntKi), PARAMETER :: SSqmdd83 = 21689 + INTEGER(IntKi), PARAMETER :: SSqmdd84 = 21690 + INTEGER(IntKi), PARAMETER :: SSqmdd85 = 21691 + INTEGER(IntKi), PARAMETER :: SSqmdd86 = 21692 + INTEGER(IntKi), PARAMETER :: SSqmdd87 = 21693 + INTEGER(IntKi), PARAMETER :: SSqmdd88 = 21694 + INTEGER(IntKi), PARAMETER :: SSqmdd89 = 21695 + INTEGER(IntKi), PARAMETER :: SSqmdd90 = 21696 + INTEGER(IntKi), PARAMETER :: SSqmdd91 = 21697 + INTEGER(IntKi), PARAMETER :: SSqmdd92 = 21698 + INTEGER(IntKi), PARAMETER :: SSqmdd93 = 21699 + INTEGER(IntKi), PARAMETER :: SSqmdd94 = 21700 + INTEGER(IntKi), PARAMETER :: SSqmdd95 = 21701 + INTEGER(IntKi), PARAMETER :: SSqmdd96 = 21702 + INTEGER(IntKi), PARAMETER :: SSqmdd97 = 21703 + INTEGER(IntKi), PARAMETER :: SSqmdd98 = 21704 + INTEGER(IntKi), PARAMETER :: SSqmdd99 = 21705 ! The maximum number of output channels which can be output by the code. - !INTEGER(IntKi), PARAMETER :: MaxOutPts = 2265 + !INTEGER(IntKi), PARAMETER :: MaxOutPts = 21705 + + + INTEGER(IntKi), PARAMETER ::MNfmKe(6,9,99) = reshape((/ & + M01N1FKxe, M01N1FKye, M01N1FKze, M01N1MKxe, M01N1MKye, M01N1MKze, M01N2FKxe, M01N2FKye, M01N2FKze, M01N2MKxe, M01N2MKye, M01N2MKze, & + M01N3FKxe, M01N3FKye, M01N3FKze, M01N3MKxe, M01N3MKye, M01N3MKze, M01N4FKxe, M01N4FKye, M01N4FKze, M01N4MKxe, M01N4MKye, M01N4MKze, & + M01N5FKxe, M01N5FKye, M01N5FKze, M01N5MKxe, M01N5MKye, M01N5MKze, M01N6FKxe, M01N6FKye, M01N6FKze, M01N6MKxe, M01N6MKye, M01N6MKze, & + M01N7FKxe, M01N7FKye, M01N7FKze, M01N7MKxe, M01N7MKye, M01N7MKze, M01N8FKxe, M01N8FKye, M01N8FKze, M01N8MKxe, M01N8MKye, M01N8MKze, & + M01N9FKxe, M01N9FKye, M01N9FKze, M01N9MKxe, M01N9MKye, M01N9MKze, M02N1FKxe, M02N1FKye, M02N1FKze, M02N1MKxe, M02N1MKye, M02N1MKze, & + M02N2FKxe, M02N2FKye, M02N2FKze, M02N2MKxe, M02N2MKye, M02N2MKze, M02N3FKxe, M02N3FKye, M02N3FKze, M02N3MKxe, M02N3MKye, M02N3MKze, & + M02N4FKxe, M02N4FKye, M02N4FKze, M02N4MKxe, M02N4MKye, M02N4MKze, M02N5FKxe, M02N5FKye, M02N5FKze, M02N5MKxe, M02N5MKye, M02N5MKze, & + M02N6FKxe, M02N6FKye, M02N6FKze, M02N6MKxe, M02N6MKye, M02N6MKze, M02N7FKxe, M02N7FKye, M02N7FKze, M02N7MKxe, M02N7MKye, M02N7MKze, & + M02N8FKxe, M02N8FKye, M02N8FKze, M02N8MKxe, M02N8MKye, M02N8MKze, M02N9FKxe, M02N9FKye, M02N9FKze, M02N9MKxe, M02N9MKye, M02N9MKze, & + M03N1FKxe, M03N1FKye, M03N1FKze, M03N1MKxe, M03N1MKye, M03N1MKze, M03N2FKxe, M03N2FKye, M03N2FKze, M03N2MKxe, M03N2MKye, M03N2MKze, & + M03N3FKxe, M03N3FKye, M03N3FKze, M03N3MKxe, M03N3MKye, M03N3MKze, M03N4FKxe, M03N4FKye, M03N4FKze, M03N4MKxe, M03N4MKye, M03N4MKze, & + M03N5FKxe, M03N5FKye, M03N5FKze, M03N5MKxe, M03N5MKye, M03N5MKze, M03N6FKxe, M03N6FKye, M03N6FKze, M03N6MKxe, M03N6MKye, M03N6MKze, & + M03N7FKxe, M03N7FKye, M03N7FKze, M03N7MKxe, M03N7MKye, M03N7MKze, M03N8FKxe, M03N8FKye, M03N8FKze, M03N8MKxe, M03N8MKye, M03N8MKze, & + M03N9FKxe, M03N9FKye, M03N9FKze, M03N9MKxe, M03N9MKye, M03N9MKze, M04N1FKxe, M04N1FKye, M04N1FKze, M04N1MKxe, M04N1MKye, M04N1MKze, & + M04N2FKxe, M04N2FKye, M04N2FKze, M04N2MKxe, M04N2MKye, M04N2MKze, M04N3FKxe, M04N3FKye, M04N3FKze, M04N3MKxe, M04N3MKye, M04N3MKze, & + M04N4FKxe, M04N4FKye, M04N4FKze, M04N4MKxe, M04N4MKye, M04N4MKze, M04N5FKxe, M04N5FKye, M04N5FKze, M04N5MKxe, M04N5MKye, M04N5MKze, & + M04N6FKxe, M04N6FKye, M04N6FKze, M04N6MKxe, M04N6MKye, M04N6MKze, M04N7FKxe, M04N7FKye, M04N7FKze, M04N7MKxe, M04N7MKye, M04N7MKze, & + M04N8FKxe, M04N8FKye, M04N8FKze, M04N8MKxe, M04N8MKye, M04N8MKze, M04N9FKxe, M04N9FKye, M04N9FKze, M04N9MKxe, M04N9MKye, M04N9MKze, & + M05N1FKxe, M05N1FKye, M05N1FKze, M05N1MKxe, M05N1MKye, M05N1MKze, M05N2FKxe, M05N2FKye, M05N2FKze, M05N2MKxe, M05N2MKye, M05N2MKze, & + M05N3FKxe, M05N3FKye, M05N3FKze, M05N3MKxe, M05N3MKye, M05N3MKze, M05N4FKxe, M05N4FKye, M05N4FKze, M05N4MKxe, M05N4MKye, M05N4MKze, & + M05N5FKxe, M05N5FKye, M05N5FKze, M05N5MKxe, M05N5MKye, M05N5MKze, M05N6FKxe, M05N6FKye, M05N6FKze, M05N6MKxe, M05N6MKye, M05N6MKze, & + M05N7FKxe, M05N7FKye, M05N7FKze, M05N7MKxe, M05N7MKye, M05N7MKze, M05N8FKxe, M05N8FKye, M05N8FKze, M05N8MKxe, M05N8MKye, M05N8MKze, & + M05N9FKxe, M05N9FKye, M05N9FKze, M05N9MKxe, M05N9MKye, M05N9MKze, M06N1FKxe, M06N1FKye, M06N1FKze, M06N1MKxe, M06N1MKye, M06N1MKze, & + M06N2FKxe, M06N2FKye, M06N2FKze, M06N2MKxe, M06N2MKye, M06N2MKze, M06N3FKxe, M06N3FKye, M06N3FKze, M06N3MKxe, M06N3MKye, M06N3MKze, & + M06N4FKxe, M06N4FKye, M06N4FKze, M06N4MKxe, M06N4MKye, M06N4MKze, M06N5FKxe, M06N5FKye, M06N5FKze, M06N5MKxe, M06N5MKye, M06N5MKze, & + M06N6FKxe, M06N6FKye, M06N6FKze, M06N6MKxe, M06N6MKye, M06N6MKze, M06N7FKxe, M06N7FKye, M06N7FKze, M06N7MKxe, M06N7MKye, M06N7MKze, & + M06N8FKxe, M06N8FKye, M06N8FKze, M06N8MKxe, M06N8MKye, M06N8MKze, M06N9FKxe, M06N9FKye, M06N9FKze, M06N9MKxe, M06N9MKye, M06N9MKze, & + M07N1FKxe, M07N1FKye, M07N1FKze, M07N1MKxe, M07N1MKye, M07N1MKze, M07N2FKxe, M07N2FKye, M07N2FKze, M07N2MKxe, M07N2MKye, M07N2MKze, & + M07N3FKxe, M07N3FKye, M07N3FKze, M07N3MKxe, M07N3MKye, M07N3MKze, M07N4FKxe, M07N4FKye, M07N4FKze, M07N4MKxe, M07N4MKye, M07N4MKze, & + M07N5FKxe, M07N5FKye, M07N5FKze, M07N5MKxe, M07N5MKye, M07N5MKze, M07N6FKxe, M07N6FKye, M07N6FKze, M07N6MKxe, M07N6MKye, M07N6MKze, & + M07N7FKxe, M07N7FKye, M07N7FKze, M07N7MKxe, M07N7MKye, M07N7MKze, M07N8FKxe, M07N8FKye, M07N8FKze, M07N8MKxe, M07N8MKye, M07N8MKze, & + M07N9FKxe, M07N9FKye, M07N9FKze, M07N9MKxe, M07N9MKye, M07N9MKze, M08N1FKxe, M08N1FKye, M08N1FKze, M08N1MKxe, M08N1MKye, M08N1MKze, & + M08N2FKxe, M08N2FKye, M08N2FKze, M08N2MKxe, M08N2MKye, M08N2MKze, M08N3FKxe, M08N3FKye, M08N3FKze, M08N3MKxe, M08N3MKye, M08N3MKze, & + M08N4FKxe, M08N4FKye, M08N4FKze, M08N4MKxe, M08N4MKye, M08N4MKze, M08N5FKxe, M08N5FKye, M08N5FKze, M08N5MKxe, M08N5MKye, M08N5MKze, & + M08N6FKxe, M08N6FKye, M08N6FKze, M08N6MKxe, M08N6MKye, M08N6MKze, M08N7FKxe, M08N7FKye, M08N7FKze, M08N7MKxe, M08N7MKye, M08N7MKze, & + M08N8FKxe, M08N8FKye, M08N8FKze, M08N8MKxe, M08N8MKye, M08N8MKze, M08N9FKxe, M08N9FKye, M08N9FKze, M08N9MKxe, M08N9MKye, M08N9MKze, & + M09N1FKxe, M09N1FKye, M09N1FKze, M09N1MKxe, M09N1MKye, M09N1MKze, M09N2FKxe, M09N2FKye, M09N2FKze, M09N2MKxe, M09N2MKye, M09N2MKze, & + M09N3FKxe, M09N3FKye, M09N3FKze, M09N3MKxe, M09N3MKye, M09N3MKze, M09N4FKxe, M09N4FKye, M09N4FKze, M09N4MKxe, M09N4MKye, M09N4MKze, & + M09N5FKxe, M09N5FKye, M09N5FKze, M09N5MKxe, M09N5MKye, M09N5MKze, M09N6FKxe, M09N6FKye, M09N6FKze, M09N6MKxe, M09N6MKye, M09N6MKze, & + M09N7FKxe, M09N7FKye, M09N7FKze, M09N7MKxe, M09N7MKye, M09N7MKze, M09N8FKxe, M09N8FKye, M09N8FKze, M09N8MKxe, M09N8MKye, M09N8MKze, & + M09N9FKxe, M09N9FKye, M09N9FKze, M09N9MKxe, M09N9MKye, M09N9MKze, M10N1FKxe, M10N1FKye, M10N1FKze, M10N1MKxe, M10N1MKye, M10N1MKze, & + M10N2FKxe, M10N2FKye, M10N2FKze, M10N2MKxe, M10N2MKye, M10N2MKze, M10N3FKxe, M10N3FKye, M10N3FKze, M10N3MKxe, M10N3MKye, M10N3MKze, & + M10N4FKxe, M10N4FKye, M10N4FKze, M10N4MKxe, M10N4MKye, M10N4MKze, M10N5FKxe, M10N5FKye, M10N5FKze, M10N5MKxe, M10N5MKye, M10N5MKze, & + M10N6FKxe, M10N6FKye, M10N6FKze, M10N6MKxe, M10N6MKye, M10N6MKze, M10N7FKxe, M10N7FKye, M10N7FKze, M10N7MKxe, M10N7MKye, M10N7MKze, & + M10N8FKxe, M10N8FKye, M10N8FKze, M10N8MKxe, M10N8MKye, M10N8MKze, M10N9FKxe, M10N9FKye, M10N9FKze, M10N9MKxe, M10N9MKye, M10N9MKze, & + M11N1FKxe, M11N1FKye, M11N1FKze, M11N1MKxe, M11N1MKye, M11N1MKze, M11N2FKxe, M11N2FKye, M11N2FKze, M11N2MKxe, M11N2MKye, M11N2MKze, & + M11N3FKxe, M11N3FKye, M11N3FKze, M11N3MKxe, M11N3MKye, M11N3MKze, M11N4FKxe, M11N4FKye, M11N4FKze, M11N4MKxe, M11N4MKye, M11N4MKze, & + M11N5FKxe, M11N5FKye, M11N5FKze, M11N5MKxe, M11N5MKye, M11N5MKze, M11N6FKxe, M11N6FKye, M11N6FKze, M11N6MKxe, M11N6MKye, M11N6MKze, & + M11N7FKxe, M11N7FKye, M11N7FKze, M11N7MKxe, M11N7MKye, M11N7MKze, M11N8FKxe, M11N8FKye, M11N8FKze, M11N8MKxe, M11N8MKye, M11N8MKze, & + M11N9FKxe, M11N9FKye, M11N9FKze, M11N9MKxe, M11N9MKye, M11N9MKze, M12N1FKxe, M12N1FKye, M12N1FKze, M12N1MKxe, M12N1MKye, M12N1MKze, & + M12N2FKxe, M12N2FKye, M12N2FKze, M12N2MKxe, M12N2MKye, M12N2MKze, M12N3FKxe, M12N3FKye, M12N3FKze, M12N3MKxe, M12N3MKye, M12N3MKze, & + M12N4FKxe, M12N4FKye, M12N4FKze, M12N4MKxe, M12N4MKye, M12N4MKze, M12N5FKxe, M12N5FKye, M12N5FKze, M12N5MKxe, M12N5MKye, M12N5MKze, & + M12N6FKxe, M12N6FKye, M12N6FKze, M12N6MKxe, M12N6MKye, M12N6MKze, M12N7FKxe, M12N7FKye, M12N7FKze, M12N7MKxe, M12N7MKye, M12N7MKze, & + M12N8FKxe, M12N8FKye, M12N8FKze, M12N8MKxe, M12N8MKye, M12N8MKze, M12N9FKxe, M12N9FKye, M12N9FKze, M12N9MKxe, M12N9MKye, M12N9MKze, & + M13N1FKxe, M13N1FKye, M13N1FKze, M13N1MKxe, M13N1MKye, M13N1MKze, M13N2FKxe, M13N2FKye, M13N2FKze, M13N2MKxe, M13N2MKye, M13N2MKze, & + M13N3FKxe, M13N3FKye, M13N3FKze, M13N3MKxe, M13N3MKye, M13N3MKze, M13N4FKxe, M13N4FKye, M13N4FKze, M13N4MKxe, M13N4MKye, M13N4MKze, & + M13N5FKxe, M13N5FKye, M13N5FKze, M13N5MKxe, M13N5MKye, M13N5MKze, M13N6FKxe, M13N6FKye, M13N6FKze, M13N6MKxe, M13N6MKye, M13N6MKze, & + M13N7FKxe, M13N7FKye, M13N7FKze, M13N7MKxe, M13N7MKye, M13N7MKze, M13N8FKxe, M13N8FKye, M13N8FKze, M13N8MKxe, M13N8MKye, M13N8MKze, & + M13N9FKxe, M13N9FKye, M13N9FKze, M13N9MKxe, M13N9MKye, M13N9MKze, M14N1FKxe, M14N1FKye, M14N1FKze, M14N1MKxe, M14N1MKye, M14N1MKze, & + M14N2FKxe, M14N2FKye, M14N2FKze, M14N2MKxe, M14N2MKye, M14N2MKze, M14N3FKxe, M14N3FKye, M14N3FKze, M14N3MKxe, M14N3MKye, M14N3MKze, & + M14N4FKxe, M14N4FKye, M14N4FKze, M14N4MKxe, M14N4MKye, M14N4MKze, M14N5FKxe, M14N5FKye, M14N5FKze, M14N5MKxe, M14N5MKye, M14N5MKze, & + M14N6FKxe, M14N6FKye, M14N6FKze, M14N6MKxe, M14N6MKye, M14N6MKze, M14N7FKxe, M14N7FKye, M14N7FKze, M14N7MKxe, M14N7MKye, M14N7MKze, & + M14N8FKxe, M14N8FKye, M14N8FKze, M14N8MKxe, M14N8MKye, M14N8MKze, M14N9FKxe, M14N9FKye, M14N9FKze, M14N9MKxe, M14N9MKye, M14N9MKze, & + M15N1FKxe, M15N1FKye, M15N1FKze, M15N1MKxe, M15N1MKye, M15N1MKze, M15N2FKxe, M15N2FKye, M15N2FKze, M15N2MKxe, M15N2MKye, M15N2MKze, & + M15N3FKxe, M15N3FKye, M15N3FKze, M15N3MKxe, M15N3MKye, M15N3MKze, M15N4FKxe, M15N4FKye, M15N4FKze, M15N4MKxe, M15N4MKye, M15N4MKze, & + M15N5FKxe, M15N5FKye, M15N5FKze, M15N5MKxe, M15N5MKye, M15N5MKze, M15N6FKxe, M15N6FKye, M15N6FKze, M15N6MKxe, M15N6MKye, M15N6MKze, & + M15N7FKxe, M15N7FKye, M15N7FKze, M15N7MKxe, M15N7MKye, M15N7MKze, M15N8FKxe, M15N8FKye, M15N8FKze, M15N8MKxe, M15N8MKye, M15N8MKze, & + M15N9FKxe, M15N9FKye, M15N9FKze, M15N9MKxe, M15N9MKye, M15N9MKze, M16N1FKxe, M16N1FKye, M16N1FKze, M16N1MKxe, M16N1MKye, M16N1MKze, & + M16N2FKxe, M16N2FKye, M16N2FKze, M16N2MKxe, M16N2MKye, M16N2MKze, M16N3FKxe, M16N3FKye, M16N3FKze, M16N3MKxe, M16N3MKye, M16N3MKze, & + M16N4FKxe, M16N4FKye, M16N4FKze, M16N4MKxe, M16N4MKye, M16N4MKze, M16N5FKxe, M16N5FKye, M16N5FKze, M16N5MKxe, M16N5MKye, M16N5MKze, & + M16N6FKxe, M16N6FKye, M16N6FKze, M16N6MKxe, M16N6MKye, M16N6MKze, M16N7FKxe, M16N7FKye, M16N7FKze, M16N7MKxe, M16N7MKye, M16N7MKze, & + M16N8FKxe, M16N8FKye, M16N8FKze, M16N8MKxe, M16N8MKye, M16N8MKze, M16N9FKxe, M16N9FKye, M16N9FKze, M16N9MKxe, M16N9MKye, M16N9MKze, & + M17N1FKxe, M17N1FKye, M17N1FKze, M17N1MKxe, M17N1MKye, M17N1MKze, M17N2FKxe, M17N2FKye, M17N2FKze, M17N2MKxe, M17N2MKye, M17N2MKze, & + M17N3FKxe, M17N3FKye, M17N3FKze, M17N3MKxe, M17N3MKye, M17N3MKze, M17N4FKxe, M17N4FKye, M17N4FKze, M17N4MKxe, M17N4MKye, M17N4MKze, & + M17N5FKxe, M17N5FKye, M17N5FKze, M17N5MKxe, M17N5MKye, M17N5MKze, M17N6FKxe, M17N6FKye, M17N6FKze, M17N6MKxe, M17N6MKye, M17N6MKze, & + M17N7FKxe, M17N7FKye, M17N7FKze, M17N7MKxe, M17N7MKye, M17N7MKze, M17N8FKxe, M17N8FKye, M17N8FKze, M17N8MKxe, M17N8MKye, M17N8MKze, & + M17N9FKxe, M17N9FKye, M17N9FKze, M17N9MKxe, M17N9MKye, M17N9MKze, M18N1FKxe, M18N1FKye, M18N1FKze, M18N1MKxe, M18N1MKye, M18N1MKze, & + M18N2FKxe, M18N2FKye, M18N2FKze, M18N2MKxe, M18N2MKye, M18N2MKze, M18N3FKxe, M18N3FKye, M18N3FKze, M18N3MKxe, M18N3MKye, M18N3MKze, & + M18N4FKxe, M18N4FKye, M18N4FKze, M18N4MKxe, M18N4MKye, M18N4MKze, M18N5FKxe, M18N5FKye, M18N5FKze, M18N5MKxe, M18N5MKye, M18N5MKze, & + M18N6FKxe, M18N6FKye, M18N6FKze, M18N6MKxe, M18N6MKye, M18N6MKze, M18N7FKxe, M18N7FKye, M18N7FKze, M18N7MKxe, M18N7MKye, M18N7MKze, & + M18N8FKxe, M18N8FKye, M18N8FKze, M18N8MKxe, M18N8MKye, M18N8MKze, M18N9FKxe, M18N9FKye, M18N9FKze, M18N9MKxe, M18N9MKye, M18N9MKze, & + M19N1FKxe, M19N1FKye, M19N1FKze, M19N1MKxe, M19N1MKye, M19N1MKze, M19N2FKxe, M19N2FKye, M19N2FKze, M19N2MKxe, M19N2MKye, M19N2MKze, & + M19N3FKxe, M19N3FKye, M19N3FKze, M19N3MKxe, M19N3MKye, M19N3MKze, M19N4FKxe, M19N4FKye, M19N4FKze, M19N4MKxe, M19N4MKye, M19N4MKze, & + M19N5FKxe, M19N5FKye, M19N5FKze, M19N5MKxe, M19N5MKye, M19N5MKze, M19N6FKxe, M19N6FKye, M19N6FKze, M19N6MKxe, M19N6MKye, M19N6MKze, & + M19N7FKxe, M19N7FKye, M19N7FKze, M19N7MKxe, M19N7MKye, M19N7MKze, M19N8FKxe, M19N8FKye, M19N8FKze, M19N8MKxe, M19N8MKye, M19N8MKze, & + M19N9FKxe, M19N9FKye, M19N9FKze, M19N9MKxe, M19N9MKye, M19N9MKze, M20N1FKxe, M20N1FKye, M20N1FKze, M20N1MKxe, M20N1MKye, M20N1MKze, & + M20N2FKxe, M20N2FKye, M20N2FKze, M20N2MKxe, M20N2MKye, M20N2MKze, M20N3FKxe, M20N3FKye, M20N3FKze, M20N3MKxe, M20N3MKye, M20N3MKze, & + M20N4FKxe, M20N4FKye, M20N4FKze, M20N4MKxe, M20N4MKye, M20N4MKze, M20N5FKxe, M20N5FKye, M20N5FKze, M20N5MKxe, M20N5MKye, M20N5MKze, & + M20N6FKxe, M20N6FKye, M20N6FKze, M20N6MKxe, M20N6MKye, M20N6MKze, M20N7FKxe, M20N7FKye, M20N7FKze, M20N7MKxe, M20N7MKye, M20N7MKze, & + M20N8FKxe, M20N8FKye, M20N8FKze, M20N8MKxe, M20N8MKye, M20N8MKze, M20N9FKxe, M20N9FKye, M20N9FKze, M20N9MKxe, M20N9MKye, M20N9MKze, & + M21N1FKxe, M21N1FKye, M21N1FKze, M21N1MKxe, M21N1MKye, M21N1MKze, M21N2FKxe, M21N2FKye, M21N2FKze, M21N2MKxe, M21N2MKye, M21N2MKze, & + M21N3FKxe, M21N3FKye, M21N3FKze, M21N3MKxe, M21N3MKye, M21N3MKze, M21N4FKxe, M21N4FKye, M21N4FKze, M21N4MKxe, M21N4MKye, M21N4MKze, & + M21N5FKxe, M21N5FKye, M21N5FKze, M21N5MKxe, M21N5MKye, M21N5MKze, M21N6FKxe, M21N6FKye, M21N6FKze, M21N6MKxe, M21N6MKye, M21N6MKze, & + M21N7FKxe, M21N7FKye, M21N7FKze, M21N7MKxe, M21N7MKye, M21N7MKze, M21N8FKxe, M21N8FKye, M21N8FKze, M21N8MKxe, M21N8MKye, M21N8MKze, & + M21N9FKxe, M21N9FKye, M21N9FKze, M21N9MKxe, M21N9MKye, M21N9MKze, M22N1FKxe, M22N1FKye, M22N1FKze, M22N1MKxe, M22N1MKye, M22N1MKze, & + M22N2FKxe, M22N2FKye, M22N2FKze, M22N2MKxe, M22N2MKye, M22N2MKze, M22N3FKxe, M22N3FKye, M22N3FKze, M22N3MKxe, M22N3MKye, M22N3MKze, & + M22N4FKxe, M22N4FKye, M22N4FKze, M22N4MKxe, M22N4MKye, M22N4MKze, M22N5FKxe, M22N5FKye, M22N5FKze, M22N5MKxe, M22N5MKye, M22N5MKze, & + M22N6FKxe, M22N6FKye, M22N6FKze, M22N6MKxe, M22N6MKye, M22N6MKze, M22N7FKxe, M22N7FKye, M22N7FKze, M22N7MKxe, M22N7MKye, M22N7MKze, & + M22N8FKxe, M22N8FKye, M22N8FKze, M22N8MKxe, M22N8MKye, M22N8MKze, M22N9FKxe, M22N9FKye, M22N9FKze, M22N9MKxe, M22N9MKye, M22N9MKze, & + M23N1FKxe, M23N1FKye, M23N1FKze, M23N1MKxe, M23N1MKye, M23N1MKze, M23N2FKxe, M23N2FKye, M23N2FKze, M23N2MKxe, M23N2MKye, M23N2MKze, & + M23N3FKxe, M23N3FKye, M23N3FKze, M23N3MKxe, M23N3MKye, M23N3MKze, M23N4FKxe, M23N4FKye, M23N4FKze, M23N4MKxe, M23N4MKye, M23N4MKze, & + M23N5FKxe, M23N5FKye, M23N5FKze, M23N5MKxe, M23N5MKye, M23N5MKze, M23N6FKxe, M23N6FKye, M23N6FKze, M23N6MKxe, M23N6MKye, M23N6MKze, & + M23N7FKxe, M23N7FKye, M23N7FKze, M23N7MKxe, M23N7MKye, M23N7MKze, M23N8FKxe, M23N8FKye, M23N8FKze, M23N8MKxe, M23N8MKye, M23N8MKze, & + M23N9FKxe, M23N9FKye, M23N9FKze, M23N9MKxe, M23N9MKye, M23N9MKze, M24N1FKxe, M24N1FKye, M24N1FKze, M24N1MKxe, M24N1MKye, M24N1MKze, & + M24N2FKxe, M24N2FKye, M24N2FKze, M24N2MKxe, M24N2MKye, M24N2MKze, M24N3FKxe, M24N3FKye, M24N3FKze, M24N3MKxe, M24N3MKye, M24N3MKze, & + M24N4FKxe, M24N4FKye, M24N4FKze, M24N4MKxe, M24N4MKye, M24N4MKze, M24N5FKxe, M24N5FKye, M24N5FKze, M24N5MKxe, M24N5MKye, M24N5MKze, & + M24N6FKxe, M24N6FKye, M24N6FKze, M24N6MKxe, M24N6MKye, M24N6MKze, M24N7FKxe, M24N7FKye, M24N7FKze, M24N7MKxe, M24N7MKye, M24N7MKze, & + M24N8FKxe, M24N8FKye, M24N8FKze, M24N8MKxe, M24N8MKye, M24N8MKze, M24N9FKxe, M24N9FKye, M24N9FKze, M24N9MKxe, M24N9MKye, M24N9MKze, & + M25N1FKxe, M25N1FKye, M25N1FKze, M25N1MKxe, M25N1MKye, M25N1MKze, M25N2FKxe, M25N2FKye, M25N2FKze, M25N2MKxe, M25N2MKye, M25N2MKze, & + M25N3FKxe, M25N3FKye, M25N3FKze, M25N3MKxe, M25N3MKye, M25N3MKze, M25N4FKxe, M25N4FKye, M25N4FKze, M25N4MKxe, M25N4MKye, M25N4MKze, & + M25N5FKxe, M25N5FKye, M25N5FKze, M25N5MKxe, M25N5MKye, M25N5MKze, M25N6FKxe, M25N6FKye, M25N6FKze, M25N6MKxe, M25N6MKye, M25N6MKze, & + M25N7FKxe, M25N7FKye, M25N7FKze, M25N7MKxe, M25N7MKye, M25N7MKze, M25N8FKxe, M25N8FKye, M25N8FKze, M25N8MKxe, M25N8MKye, M25N8MKze, & + M25N9FKxe, M25N9FKye, M25N9FKze, M25N9MKxe, M25N9MKye, M25N9MKze, M26N1FKxe, M26N1FKye, M26N1FKze, M26N1MKxe, M26N1MKye, M26N1MKze, & + M26N2FKxe, M26N2FKye, M26N2FKze, M26N2MKxe, M26N2MKye, M26N2MKze, M26N3FKxe, M26N3FKye, M26N3FKze, M26N3MKxe, M26N3MKye, M26N3MKze, & + M26N4FKxe, M26N4FKye, M26N4FKze, M26N4MKxe, M26N4MKye, M26N4MKze, M26N5FKxe, M26N5FKye, M26N5FKze, M26N5MKxe, M26N5MKye, M26N5MKze, & + M26N6FKxe, M26N6FKye, M26N6FKze, M26N6MKxe, M26N6MKye, M26N6MKze, M26N7FKxe, M26N7FKye, M26N7FKze, M26N7MKxe, M26N7MKye, M26N7MKze, & + M26N8FKxe, M26N8FKye, M26N8FKze, M26N8MKxe, M26N8MKye, M26N8MKze, M26N9FKxe, M26N9FKye, M26N9FKze, M26N9MKxe, M26N9MKye, M26N9MKze, & + M27N1FKxe, M27N1FKye, M27N1FKze, M27N1MKxe, M27N1MKye, M27N1MKze, M27N2FKxe, M27N2FKye, M27N2FKze, M27N2MKxe, M27N2MKye, M27N2MKze, & + M27N3FKxe, M27N3FKye, M27N3FKze, M27N3MKxe, M27N3MKye, M27N3MKze, M27N4FKxe, M27N4FKye, M27N4FKze, M27N4MKxe, M27N4MKye, M27N4MKze, & + M27N5FKxe, M27N5FKye, M27N5FKze, M27N5MKxe, M27N5MKye, M27N5MKze, M27N6FKxe, M27N6FKye, M27N6FKze, M27N6MKxe, M27N6MKye, M27N6MKze, & + M27N7FKxe, M27N7FKye, M27N7FKze, M27N7MKxe, M27N7MKye, M27N7MKze, M27N8FKxe, M27N8FKye, M27N8FKze, M27N8MKxe, M27N8MKye, M27N8MKze, & + M27N9FKxe, M27N9FKye, M27N9FKze, M27N9MKxe, M27N9MKye, M27N9MKze, M28N1FKxe, M28N1FKye, M28N1FKze, M28N1MKxe, M28N1MKye, M28N1MKze, & + M28N2FKxe, M28N2FKye, M28N2FKze, M28N2MKxe, M28N2MKye, M28N2MKze, M28N3FKxe, M28N3FKye, M28N3FKze, M28N3MKxe, M28N3MKye, M28N3MKze, & + M28N4FKxe, M28N4FKye, M28N4FKze, M28N4MKxe, M28N4MKye, M28N4MKze, M28N5FKxe, M28N5FKye, M28N5FKze, M28N5MKxe, M28N5MKye, M28N5MKze, & + M28N6FKxe, M28N6FKye, M28N6FKze, M28N6MKxe, M28N6MKye, M28N6MKze, M28N7FKxe, M28N7FKye, M28N7FKze, M28N7MKxe, M28N7MKye, M28N7MKze, & + M28N8FKxe, M28N8FKye, M28N8FKze, M28N8MKxe, M28N8MKye, M28N8MKze, M28N9FKxe, M28N9FKye, M28N9FKze, M28N9MKxe, M28N9MKye, M28N9MKze, & + M29N1FKxe, M29N1FKye, M29N1FKze, M29N1MKxe, M29N1MKye, M29N1MKze, M29N2FKxe, M29N2FKye, M29N2FKze, M29N2MKxe, M29N2MKye, M29N2MKze, & + M29N3FKxe, M29N3FKye, M29N3FKze, M29N3MKxe, M29N3MKye, M29N3MKze, M29N4FKxe, M29N4FKye, M29N4FKze, M29N4MKxe, M29N4MKye, M29N4MKze, & + M29N5FKxe, M29N5FKye, M29N5FKze, M29N5MKxe, M29N5MKye, M29N5MKze, M29N6FKxe, M29N6FKye, M29N6FKze, M29N6MKxe, M29N6MKye, M29N6MKze, & + M29N7FKxe, M29N7FKye, M29N7FKze, M29N7MKxe, M29N7MKye, M29N7MKze, M29N8FKxe, M29N8FKye, M29N8FKze, M29N8MKxe, M29N8MKye, M29N8MKze, & + M29N9FKxe, M29N9FKye, M29N9FKze, M29N9MKxe, M29N9MKye, M29N9MKze, M30N1FKxe, M30N1FKye, M30N1FKze, M30N1MKxe, M30N1MKye, M30N1MKze, & + M30N2FKxe, M30N2FKye, M30N2FKze, M30N2MKxe, M30N2MKye, M30N2MKze, M30N3FKxe, M30N3FKye, M30N3FKze, M30N3MKxe, M30N3MKye, M30N3MKze, & + M30N4FKxe, M30N4FKye, M30N4FKze, M30N4MKxe, M30N4MKye, M30N4MKze, M30N5FKxe, M30N5FKye, M30N5FKze, M30N5MKxe, M30N5MKye, M30N5MKze, & + M30N6FKxe, M30N6FKye, M30N6FKze, M30N6MKxe, M30N6MKye, M30N6MKze, M30N7FKxe, M30N7FKye, M30N7FKze, M30N7MKxe, M30N7MKye, M30N7MKze, & + M30N8FKxe, M30N8FKye, M30N8FKze, M30N8MKxe, M30N8MKye, M30N8MKze, M30N9FKxe, M30N9FKye, M30N9FKze, M30N9MKxe, M30N9MKye, M30N9MKze, & + M31N1FKxe, M31N1FKye, M31N1FKze, M31N1MKxe, M31N1MKye, M31N1MKze, M31N2FKxe, M31N2FKye, M31N2FKze, M31N2MKxe, M31N2MKye, M31N2MKze, & + M31N3FKxe, M31N3FKye, M31N3FKze, M31N3MKxe, M31N3MKye, M31N3MKze, M31N4FKxe, M31N4FKye, M31N4FKze, M31N4MKxe, M31N4MKye, M31N4MKze, & + M31N5FKxe, M31N5FKye, M31N5FKze, M31N5MKxe, M31N5MKye, M31N5MKze, M31N6FKxe, M31N6FKye, M31N6FKze, M31N6MKxe, M31N6MKye, M31N6MKze, & + M31N7FKxe, M31N7FKye, M31N7FKze, M31N7MKxe, M31N7MKye, M31N7MKze, M31N8FKxe, M31N8FKye, M31N8FKze, M31N8MKxe, M31N8MKye, M31N8MKze, & + M31N9FKxe, M31N9FKye, M31N9FKze, M31N9MKxe, M31N9MKye, M31N9MKze, M32N1FKxe, M32N1FKye, M32N1FKze, M32N1MKxe, M32N1MKye, M32N1MKze, & + M32N2FKxe, M32N2FKye, M32N2FKze, M32N2MKxe, M32N2MKye, M32N2MKze, M32N3FKxe, M32N3FKye, M32N3FKze, M32N3MKxe, M32N3MKye, M32N3MKze, & + M32N4FKxe, M32N4FKye, M32N4FKze, M32N4MKxe, M32N4MKye, M32N4MKze, M32N5FKxe, M32N5FKye, M32N5FKze, M32N5MKxe, M32N5MKye, M32N5MKze, & + M32N6FKxe, M32N6FKye, M32N6FKze, M32N6MKxe, M32N6MKye, M32N6MKze, M32N7FKxe, M32N7FKye, M32N7FKze, M32N7MKxe, M32N7MKye, M32N7MKze, & + M32N8FKxe, M32N8FKye, M32N8FKze, M32N8MKxe, M32N8MKye, M32N8MKze, M32N9FKxe, M32N9FKye, M32N9FKze, M32N9MKxe, M32N9MKye, M32N9MKze, & + M33N1FKxe, M33N1FKye, M33N1FKze, M33N1MKxe, M33N1MKye, M33N1MKze, M33N2FKxe, M33N2FKye, M33N2FKze, M33N2MKxe, M33N2MKye, M33N2MKze, & + M33N3FKxe, M33N3FKye, M33N3FKze, M33N3MKxe, M33N3MKye, M33N3MKze, M33N4FKxe, M33N4FKye, M33N4FKze, M33N4MKxe, M33N4MKye, M33N4MKze, & + M33N5FKxe, M33N5FKye, M33N5FKze, M33N5MKxe, M33N5MKye, M33N5MKze, M33N6FKxe, M33N6FKye, M33N6FKze, M33N6MKxe, M33N6MKye, M33N6MKze, & + M33N7FKxe, M33N7FKye, M33N7FKze, M33N7MKxe, M33N7MKye, M33N7MKze, M33N8FKxe, M33N8FKye, M33N8FKze, M33N8MKxe, M33N8MKye, M33N8MKze, & + M33N9FKxe, M33N9FKye, M33N9FKze, M33N9MKxe, M33N9MKye, M33N9MKze, M34N1FKxe, M34N1FKye, M34N1FKze, M34N1MKxe, M34N1MKye, M34N1MKze, & + M34N2FKxe, M34N2FKye, M34N2FKze, M34N2MKxe, M34N2MKye, M34N2MKze, M34N3FKxe, M34N3FKye, M34N3FKze, M34N3MKxe, M34N3MKye, M34N3MKze, & + M34N4FKxe, M34N4FKye, M34N4FKze, M34N4MKxe, M34N4MKye, M34N4MKze, M34N5FKxe, M34N5FKye, M34N5FKze, M34N5MKxe, M34N5MKye, M34N5MKze, & + M34N6FKxe, M34N6FKye, M34N6FKze, M34N6MKxe, M34N6MKye, M34N6MKze, M34N7FKxe, M34N7FKye, M34N7FKze, M34N7MKxe, M34N7MKye, M34N7MKze, & + M34N8FKxe, M34N8FKye, M34N8FKze, M34N8MKxe, M34N8MKye, M34N8MKze, M34N9FKxe, M34N9FKye, M34N9FKze, M34N9MKxe, M34N9MKye, M34N9MKze, & + M35N1FKxe, M35N1FKye, M35N1FKze, M35N1MKxe, M35N1MKye, M35N1MKze, M35N2FKxe, M35N2FKye, M35N2FKze, M35N2MKxe, M35N2MKye, M35N2MKze, & + M35N3FKxe, M35N3FKye, M35N3FKze, M35N3MKxe, M35N3MKye, M35N3MKze, M35N4FKxe, M35N4FKye, M35N4FKze, M35N4MKxe, M35N4MKye, M35N4MKze, & + M35N5FKxe, M35N5FKye, M35N5FKze, M35N5MKxe, M35N5MKye, M35N5MKze, M35N6FKxe, M35N6FKye, M35N6FKze, M35N6MKxe, M35N6MKye, M35N6MKze, & + M35N7FKxe, M35N7FKye, M35N7FKze, M35N7MKxe, M35N7MKye, M35N7MKze, M35N8FKxe, M35N8FKye, M35N8FKze, M35N8MKxe, M35N8MKye, M35N8MKze, & + M35N9FKxe, M35N9FKye, M35N9FKze, M35N9MKxe, M35N9MKye, M35N9MKze, M36N1FKxe, M36N1FKye, M36N1FKze, M36N1MKxe, M36N1MKye, M36N1MKze, & + M36N2FKxe, M36N2FKye, M36N2FKze, M36N2MKxe, M36N2MKye, M36N2MKze, M36N3FKxe, M36N3FKye, M36N3FKze, M36N3MKxe, M36N3MKye, M36N3MKze, & + M36N4FKxe, M36N4FKye, M36N4FKze, M36N4MKxe, M36N4MKye, M36N4MKze, M36N5FKxe, M36N5FKye, M36N5FKze, M36N5MKxe, M36N5MKye, M36N5MKze, & + M36N6FKxe, M36N6FKye, M36N6FKze, M36N6MKxe, M36N6MKye, M36N6MKze, M36N7FKxe, M36N7FKye, M36N7FKze, M36N7MKxe, M36N7MKye, M36N7MKze, & + M36N8FKxe, M36N8FKye, M36N8FKze, M36N8MKxe, M36N8MKye, M36N8MKze, M36N9FKxe, M36N9FKye, M36N9FKze, M36N9MKxe, M36N9MKye, M36N9MKze, & + M37N1FKxe, M37N1FKye, M37N1FKze, M37N1MKxe, M37N1MKye, M37N1MKze, M37N2FKxe, M37N2FKye, M37N2FKze, M37N2MKxe, M37N2MKye, M37N2MKze, & + M37N3FKxe, M37N3FKye, M37N3FKze, M37N3MKxe, M37N3MKye, M37N3MKze, M37N4FKxe, M37N4FKye, M37N4FKze, M37N4MKxe, M37N4MKye, M37N4MKze, & + M37N5FKxe, M37N5FKye, M37N5FKze, M37N5MKxe, M37N5MKye, M37N5MKze, M37N6FKxe, M37N6FKye, M37N6FKze, M37N6MKxe, M37N6MKye, M37N6MKze, & + M37N7FKxe, M37N7FKye, M37N7FKze, M37N7MKxe, M37N7MKye, M37N7MKze, M37N8FKxe, M37N8FKye, M37N8FKze, M37N8MKxe, M37N8MKye, M37N8MKze, & + M37N9FKxe, M37N9FKye, M37N9FKze, M37N9MKxe, M37N9MKye, M37N9MKze, M38N1FKxe, M38N1FKye, M38N1FKze, M38N1MKxe, M38N1MKye, M38N1MKze, & + M38N2FKxe, M38N2FKye, M38N2FKze, M38N2MKxe, M38N2MKye, M38N2MKze, M38N3FKxe, M38N3FKye, M38N3FKze, M38N3MKxe, M38N3MKye, M38N3MKze, & + M38N4FKxe, M38N4FKye, M38N4FKze, M38N4MKxe, M38N4MKye, M38N4MKze, M38N5FKxe, M38N5FKye, M38N5FKze, M38N5MKxe, M38N5MKye, M38N5MKze, & + M38N6FKxe, M38N6FKye, M38N6FKze, M38N6MKxe, M38N6MKye, M38N6MKze, M38N7FKxe, M38N7FKye, M38N7FKze, M38N7MKxe, M38N7MKye, M38N7MKze, & + M38N8FKxe, M38N8FKye, M38N8FKze, M38N8MKxe, M38N8MKye, M38N8MKze, M38N9FKxe, M38N9FKye, M38N9FKze, M38N9MKxe, M38N9MKye, M38N9MKze, & + M39N1FKxe, M39N1FKye, M39N1FKze, M39N1MKxe, M39N1MKye, M39N1MKze, M39N2FKxe, M39N2FKye, M39N2FKze, M39N2MKxe, M39N2MKye, M39N2MKze, & + M39N3FKxe, M39N3FKye, M39N3FKze, M39N3MKxe, M39N3MKye, M39N3MKze, M39N4FKxe, M39N4FKye, M39N4FKze, M39N4MKxe, M39N4MKye, M39N4MKze, & + M39N5FKxe, M39N5FKye, M39N5FKze, M39N5MKxe, M39N5MKye, M39N5MKze, M39N6FKxe, M39N6FKye, M39N6FKze, M39N6MKxe, M39N6MKye, M39N6MKze, & + M39N7FKxe, M39N7FKye, M39N7FKze, M39N7MKxe, M39N7MKye, M39N7MKze, M39N8FKxe, M39N8FKye, M39N8FKze, M39N8MKxe, M39N8MKye, M39N8MKze, & + M39N9FKxe, M39N9FKye, M39N9FKze, M39N9MKxe, M39N9MKye, M39N9MKze, M40N1FKxe, M40N1FKye, M40N1FKze, M40N1MKxe, M40N1MKye, M40N1MKze, & + M40N2FKxe, M40N2FKye, M40N2FKze, M40N2MKxe, M40N2MKye, M40N2MKze, M40N3FKxe, M40N3FKye, M40N3FKze, M40N3MKxe, M40N3MKye, M40N3MKze, & + M40N4FKxe, M40N4FKye, M40N4FKze, M40N4MKxe, M40N4MKye, M40N4MKze, M40N5FKxe, M40N5FKye, M40N5FKze, M40N5MKxe, M40N5MKye, M40N5MKze, & + M40N6FKxe, M40N6FKye, M40N6FKze, M40N6MKxe, M40N6MKye, M40N6MKze, M40N7FKxe, M40N7FKye, M40N7FKze, M40N7MKxe, M40N7MKye, M40N7MKze, & + M40N8FKxe, M40N8FKye, M40N8FKze, M40N8MKxe, M40N8MKye, M40N8MKze, M40N9FKxe, M40N9FKye, M40N9FKze, M40N9MKxe, M40N9MKye, M40N9MKze, & + M41N1FKxe, M41N1FKye, M41N1FKze, M41N1MKxe, M41N1MKye, M41N1MKze, M41N2FKxe, M41N2FKye, M41N2FKze, M41N2MKxe, M41N2MKye, M41N2MKze, & + M41N3FKxe, M41N3FKye, M41N3FKze, M41N3MKxe, M41N3MKye, M41N3MKze, M41N4FKxe, M41N4FKye, M41N4FKze, M41N4MKxe, M41N4MKye, M41N4MKze, & + M41N5FKxe, M41N5FKye, M41N5FKze, M41N5MKxe, M41N5MKye, M41N5MKze, M41N6FKxe, M41N6FKye, M41N6FKze, M41N6MKxe, M41N6MKye, M41N6MKze, & + M41N7FKxe, M41N7FKye, M41N7FKze, M41N7MKxe, M41N7MKye, M41N7MKze, M41N8FKxe, M41N8FKye, M41N8FKze, M41N8MKxe, M41N8MKye, M41N8MKze, & + M41N9FKxe, M41N9FKye, M41N9FKze, M41N9MKxe, M41N9MKye, M41N9MKze, M42N1FKxe, M42N1FKye, M42N1FKze, M42N1MKxe, M42N1MKye, M42N1MKze, & + M42N2FKxe, M42N2FKye, M42N2FKze, M42N2MKxe, M42N2MKye, M42N2MKze, M42N3FKxe, M42N3FKye, M42N3FKze, M42N3MKxe, M42N3MKye, M42N3MKze, & + M42N4FKxe, M42N4FKye, M42N4FKze, M42N4MKxe, M42N4MKye, M42N4MKze, M42N5FKxe, M42N5FKye, M42N5FKze, M42N5MKxe, M42N5MKye, M42N5MKze, & + M42N6FKxe, M42N6FKye, M42N6FKze, M42N6MKxe, M42N6MKye, M42N6MKze, M42N7FKxe, M42N7FKye, M42N7FKze, M42N7MKxe, M42N7MKye, M42N7MKze, & + M42N8FKxe, M42N8FKye, M42N8FKze, M42N8MKxe, M42N8MKye, M42N8MKze, M42N9FKxe, M42N9FKye, M42N9FKze, M42N9MKxe, M42N9MKye, M42N9MKze, & + M43N1FKxe, M43N1FKye, M43N1FKze, M43N1MKxe, M43N1MKye, M43N1MKze, M43N2FKxe, M43N2FKye, M43N2FKze, M43N2MKxe, M43N2MKye, M43N2MKze, & + M43N3FKxe, M43N3FKye, M43N3FKze, M43N3MKxe, M43N3MKye, M43N3MKze, M43N4FKxe, M43N4FKye, M43N4FKze, M43N4MKxe, M43N4MKye, M43N4MKze, & + M43N5FKxe, M43N5FKye, M43N5FKze, M43N5MKxe, M43N5MKye, M43N5MKze, M43N6FKxe, M43N6FKye, M43N6FKze, M43N6MKxe, M43N6MKye, M43N6MKze, & + M43N7FKxe, M43N7FKye, M43N7FKze, M43N7MKxe, M43N7MKye, M43N7MKze, M43N8FKxe, M43N8FKye, M43N8FKze, M43N8MKxe, M43N8MKye, M43N8MKze, & + M43N9FKxe, M43N9FKye, M43N9FKze, M43N9MKxe, M43N9MKye, M43N9MKze, M44N1FKxe, M44N1FKye, M44N1FKze, M44N1MKxe, M44N1MKye, M44N1MKze, & + M44N2FKxe, M44N2FKye, M44N2FKze, M44N2MKxe, M44N2MKye, M44N2MKze, M44N3FKxe, M44N3FKye, M44N3FKze, M44N3MKxe, M44N3MKye, M44N3MKze, & + M44N4FKxe, M44N4FKye, M44N4FKze, M44N4MKxe, M44N4MKye, M44N4MKze, M44N5FKxe, M44N5FKye, M44N5FKze, M44N5MKxe, M44N5MKye, M44N5MKze, & + M44N6FKxe, M44N6FKye, M44N6FKze, M44N6MKxe, M44N6MKye, M44N6MKze, M44N7FKxe, M44N7FKye, M44N7FKze, M44N7MKxe, M44N7MKye, M44N7MKze, & + M44N8FKxe, M44N8FKye, M44N8FKze, M44N8MKxe, M44N8MKye, M44N8MKze, M44N9FKxe, M44N9FKye, M44N9FKze, M44N9MKxe, M44N9MKye, M44N9MKze, & + M45N1FKxe, M45N1FKye, M45N1FKze, M45N1MKxe, M45N1MKye, M45N1MKze, M45N2FKxe, M45N2FKye, M45N2FKze, M45N2MKxe, M45N2MKye, M45N2MKze, & + M45N3FKxe, M45N3FKye, M45N3FKze, M45N3MKxe, M45N3MKye, M45N3MKze, M45N4FKxe, M45N4FKye, M45N4FKze, M45N4MKxe, M45N4MKye, M45N4MKze, & + M45N5FKxe, M45N5FKye, M45N5FKze, M45N5MKxe, M45N5MKye, M45N5MKze, M45N6FKxe, M45N6FKye, M45N6FKze, M45N6MKxe, M45N6MKye, M45N6MKze, & + M45N7FKxe, M45N7FKye, M45N7FKze, M45N7MKxe, M45N7MKye, M45N7MKze, M45N8FKxe, M45N8FKye, M45N8FKze, M45N8MKxe, M45N8MKye, M45N8MKze, & + M45N9FKxe, M45N9FKye, M45N9FKze, M45N9MKxe, M45N9MKye, M45N9MKze, M46N1FKxe, M46N1FKye, M46N1FKze, M46N1MKxe, M46N1MKye, M46N1MKze, & + M46N2FKxe, M46N2FKye, M46N2FKze, M46N2MKxe, M46N2MKye, M46N2MKze, M46N3FKxe, M46N3FKye, M46N3FKze, M46N3MKxe, M46N3MKye, M46N3MKze, & + M46N4FKxe, M46N4FKye, M46N4FKze, M46N4MKxe, M46N4MKye, M46N4MKze, M46N5FKxe, M46N5FKye, M46N5FKze, M46N5MKxe, M46N5MKye, M46N5MKze, & + M46N6FKxe, M46N6FKye, M46N6FKze, M46N6MKxe, M46N6MKye, M46N6MKze, M46N7FKxe, M46N7FKye, M46N7FKze, M46N7MKxe, M46N7MKye, M46N7MKze, & + M46N8FKxe, M46N8FKye, M46N8FKze, M46N8MKxe, M46N8MKye, M46N8MKze, M46N9FKxe, M46N9FKye, M46N9FKze, M46N9MKxe, M46N9MKye, M46N9MKze, & + M47N1FKxe, M47N1FKye, M47N1FKze, M47N1MKxe, M47N1MKye, M47N1MKze, M47N2FKxe, M47N2FKye, M47N2FKze, M47N2MKxe, M47N2MKye, M47N2MKze, & + M47N3FKxe, M47N3FKye, M47N3FKze, M47N3MKxe, M47N3MKye, M47N3MKze, M47N4FKxe, M47N4FKye, M47N4FKze, M47N4MKxe, M47N4MKye, M47N4MKze, & + M47N5FKxe, M47N5FKye, M47N5FKze, M47N5MKxe, M47N5MKye, M47N5MKze, M47N6FKxe, M47N6FKye, M47N6FKze, M47N6MKxe, M47N6MKye, M47N6MKze, & + M47N7FKxe, M47N7FKye, M47N7FKze, M47N7MKxe, M47N7MKye, M47N7MKze, M47N8FKxe, M47N8FKye, M47N8FKze, M47N8MKxe, M47N8MKye, M47N8MKze, & + M47N9FKxe, M47N9FKye, M47N9FKze, M47N9MKxe, M47N9MKye, M47N9MKze, M48N1FKxe, M48N1FKye, M48N1FKze, M48N1MKxe, M48N1MKye, M48N1MKze, & + M48N2FKxe, M48N2FKye, M48N2FKze, M48N2MKxe, M48N2MKye, M48N2MKze, M48N3FKxe, M48N3FKye, M48N3FKze, M48N3MKxe, M48N3MKye, M48N3MKze, & + M48N4FKxe, M48N4FKye, M48N4FKze, M48N4MKxe, M48N4MKye, M48N4MKze, M48N5FKxe, M48N5FKye, M48N5FKze, M48N5MKxe, M48N5MKye, M48N5MKze, & + M48N6FKxe, M48N6FKye, M48N6FKze, M48N6MKxe, M48N6MKye, M48N6MKze, M48N7FKxe, M48N7FKye, M48N7FKze, M48N7MKxe, M48N7MKye, M48N7MKze, & + M48N8FKxe, M48N8FKye, M48N8FKze, M48N8MKxe, M48N8MKye, M48N8MKze, M48N9FKxe, M48N9FKye, M48N9FKze, M48N9MKxe, M48N9MKye, M48N9MKze, & + M49N1FKxe, M49N1FKye, M49N1FKze, M49N1MKxe, M49N1MKye, M49N1MKze, M49N2FKxe, M49N2FKye, M49N2FKze, M49N2MKxe, M49N2MKye, M49N2MKze, & + M49N3FKxe, M49N3FKye, M49N3FKze, M49N3MKxe, M49N3MKye, M49N3MKze, M49N4FKxe, M49N4FKye, M49N4FKze, M49N4MKxe, M49N4MKye, M49N4MKze, & + M49N5FKxe, M49N5FKye, M49N5FKze, M49N5MKxe, M49N5MKye, M49N5MKze, M49N6FKxe, M49N6FKye, M49N6FKze, M49N6MKxe, M49N6MKye, M49N6MKze, & + M49N7FKxe, M49N7FKye, M49N7FKze, M49N7MKxe, M49N7MKye, M49N7MKze, M49N8FKxe, M49N8FKye, M49N8FKze, M49N8MKxe, M49N8MKye, M49N8MKze, & + M49N9FKxe, M49N9FKye, M49N9FKze, M49N9MKxe, M49N9MKye, M49N9MKze, M50N1FKxe, M50N1FKye, M50N1FKze, M50N1MKxe, M50N1MKye, M50N1MKze, & + M50N2FKxe, M50N2FKye, M50N2FKze, M50N2MKxe, M50N2MKye, M50N2MKze, M50N3FKxe, M50N3FKye, M50N3FKze, M50N3MKxe, M50N3MKye, M50N3MKze, & + M50N4FKxe, M50N4FKye, M50N4FKze, M50N4MKxe, M50N4MKye, M50N4MKze, M50N5FKxe, M50N5FKye, M50N5FKze, M50N5MKxe, M50N5MKye, M50N5MKze, & + M50N6FKxe, M50N6FKye, M50N6FKze, M50N6MKxe, M50N6MKye, M50N6MKze, M50N7FKxe, M50N7FKye, M50N7FKze, M50N7MKxe, M50N7MKye, M50N7MKze, & + M50N8FKxe, M50N8FKye, M50N8FKze, M50N8MKxe, M50N8MKye, M50N8MKze, M50N9FKxe, M50N9FKye, M50N9FKze, M50N9MKxe, M50N9MKye, M50N9MKze, & + M51N1FKxe, M51N1FKye, M51N1FKze, M51N1MKxe, M51N1MKye, M51N1MKze, M51N2FKxe, M51N2FKye, M51N2FKze, M51N2MKxe, M51N2MKye, M51N2MKze, & + M51N3FKxe, M51N3FKye, M51N3FKze, M51N3MKxe, M51N3MKye, M51N3MKze, M51N4FKxe, M51N4FKye, M51N4FKze, M51N4MKxe, M51N4MKye, M51N4MKze, & + M51N5FKxe, M51N5FKye, M51N5FKze, M51N5MKxe, M51N5MKye, M51N5MKze, M51N6FKxe, M51N6FKye, M51N6FKze, M51N6MKxe, M51N6MKye, M51N6MKze, & + M51N7FKxe, M51N7FKye, M51N7FKze, M51N7MKxe, M51N7MKye, M51N7MKze, M51N8FKxe, M51N8FKye, M51N8FKze, M51N8MKxe, M51N8MKye, M51N8MKze, & + M51N9FKxe, M51N9FKye, M51N9FKze, M51N9MKxe, M51N9MKye, M51N9MKze, M52N1FKxe, M52N1FKye, M52N1FKze, M52N1MKxe, M52N1MKye, M52N1MKze, & + M52N2FKxe, M52N2FKye, M52N2FKze, M52N2MKxe, M52N2MKye, M52N2MKze, M52N3FKxe, M52N3FKye, M52N3FKze, M52N3MKxe, M52N3MKye, M52N3MKze, & + M52N4FKxe, M52N4FKye, M52N4FKze, M52N4MKxe, M52N4MKye, M52N4MKze, M52N5FKxe, M52N5FKye, M52N5FKze, M52N5MKxe, M52N5MKye, M52N5MKze, & + M52N6FKxe, M52N6FKye, M52N6FKze, M52N6MKxe, M52N6MKye, M52N6MKze, M52N7FKxe, M52N7FKye, M52N7FKze, M52N7MKxe, M52N7MKye, M52N7MKze, & + M52N8FKxe, M52N8FKye, M52N8FKze, M52N8MKxe, M52N8MKye, M52N8MKze, M52N9FKxe, M52N9FKye, M52N9FKze, M52N9MKxe, M52N9MKye, M52N9MKze, & + M53N1FKxe, M53N1FKye, M53N1FKze, M53N1MKxe, M53N1MKye, M53N1MKze, M53N2FKxe, M53N2FKye, M53N2FKze, M53N2MKxe, M53N2MKye, M53N2MKze, & + M53N3FKxe, M53N3FKye, M53N3FKze, M53N3MKxe, M53N3MKye, M53N3MKze, M53N4FKxe, M53N4FKye, M53N4FKze, M53N4MKxe, M53N4MKye, M53N4MKze, & + M53N5FKxe, M53N5FKye, M53N5FKze, M53N5MKxe, M53N5MKye, M53N5MKze, M53N6FKxe, M53N6FKye, M53N6FKze, M53N6MKxe, M53N6MKye, M53N6MKze, & + M53N7FKxe, M53N7FKye, M53N7FKze, M53N7MKxe, M53N7MKye, M53N7MKze, M53N8FKxe, M53N8FKye, M53N8FKze, M53N8MKxe, M53N8MKye, M53N8MKze, & + M53N9FKxe, M53N9FKye, M53N9FKze, M53N9MKxe, M53N9MKye, M53N9MKze, M54N1FKxe, M54N1FKye, M54N1FKze, M54N1MKxe, M54N1MKye, M54N1MKze, & + M54N2FKxe, M54N2FKye, M54N2FKze, M54N2MKxe, M54N2MKye, M54N2MKze, M54N3FKxe, M54N3FKye, M54N3FKze, M54N3MKxe, M54N3MKye, M54N3MKze, & + M54N4FKxe, M54N4FKye, M54N4FKze, M54N4MKxe, M54N4MKye, M54N4MKze, M54N5FKxe, M54N5FKye, M54N5FKze, M54N5MKxe, M54N5MKye, M54N5MKze, & + M54N6FKxe, M54N6FKye, M54N6FKze, M54N6MKxe, M54N6MKye, M54N6MKze, M54N7FKxe, M54N7FKye, M54N7FKze, M54N7MKxe, M54N7MKye, M54N7MKze, & + M54N8FKxe, M54N8FKye, M54N8FKze, M54N8MKxe, M54N8MKye, M54N8MKze, M54N9FKxe, M54N9FKye, M54N9FKze, M54N9MKxe, M54N9MKye, M54N9MKze, & + M55N1FKxe, M55N1FKye, M55N1FKze, M55N1MKxe, M55N1MKye, M55N1MKze, M55N2FKxe, M55N2FKye, M55N2FKze, M55N2MKxe, M55N2MKye, M55N2MKze, & + M55N3FKxe, M55N3FKye, M55N3FKze, M55N3MKxe, M55N3MKye, M55N3MKze, M55N4FKxe, M55N4FKye, M55N4FKze, M55N4MKxe, M55N4MKye, M55N4MKze, & + M55N5FKxe, M55N5FKye, M55N5FKze, M55N5MKxe, M55N5MKye, M55N5MKze, M55N6FKxe, M55N6FKye, M55N6FKze, M55N6MKxe, M55N6MKye, M55N6MKze, & + M55N7FKxe, M55N7FKye, M55N7FKze, M55N7MKxe, M55N7MKye, M55N7MKze, M55N8FKxe, M55N8FKye, M55N8FKze, M55N8MKxe, M55N8MKye, M55N8MKze, & + M55N9FKxe, M55N9FKye, M55N9FKze, M55N9MKxe, M55N9MKye, M55N9MKze, M56N1FKxe, M56N1FKye, M56N1FKze, M56N1MKxe, M56N1MKye, M56N1MKze, & + M56N2FKxe, M56N2FKye, M56N2FKze, M56N2MKxe, M56N2MKye, M56N2MKze, M56N3FKxe, M56N3FKye, M56N3FKze, M56N3MKxe, M56N3MKye, M56N3MKze, & + M56N4FKxe, M56N4FKye, M56N4FKze, M56N4MKxe, M56N4MKye, M56N4MKze, M56N5FKxe, M56N5FKye, M56N5FKze, M56N5MKxe, M56N5MKye, M56N5MKze, & + M56N6FKxe, M56N6FKye, M56N6FKze, M56N6MKxe, M56N6MKye, M56N6MKze, M56N7FKxe, M56N7FKye, M56N7FKze, M56N7MKxe, M56N7MKye, M56N7MKze, & + M56N8FKxe, M56N8FKye, M56N8FKze, M56N8MKxe, M56N8MKye, M56N8MKze, M56N9FKxe, M56N9FKye, M56N9FKze, M56N9MKxe, M56N9MKye, M56N9MKze, & + M57N1FKxe, M57N1FKye, M57N1FKze, M57N1MKxe, M57N1MKye, M57N1MKze, M57N2FKxe, M57N2FKye, M57N2FKze, M57N2MKxe, M57N2MKye, M57N2MKze, & + M57N3FKxe, M57N3FKye, M57N3FKze, M57N3MKxe, M57N3MKye, M57N3MKze, M57N4FKxe, M57N4FKye, M57N4FKze, M57N4MKxe, M57N4MKye, M57N4MKze, & + M57N5FKxe, M57N5FKye, M57N5FKze, M57N5MKxe, M57N5MKye, M57N5MKze, M57N6FKxe, M57N6FKye, M57N6FKze, M57N6MKxe, M57N6MKye, M57N6MKze, & + M57N7FKxe, M57N7FKye, M57N7FKze, M57N7MKxe, M57N7MKye, M57N7MKze, M57N8FKxe, M57N8FKye, M57N8FKze, M57N8MKxe, M57N8MKye, M57N8MKze, & + M57N9FKxe, M57N9FKye, M57N9FKze, M57N9MKxe, M57N9MKye, M57N9MKze, M58N1FKxe, M58N1FKye, M58N1FKze, M58N1MKxe, M58N1MKye, M58N1MKze, & + M58N2FKxe, M58N2FKye, M58N2FKze, M58N2MKxe, M58N2MKye, M58N2MKze, M58N3FKxe, M58N3FKye, M58N3FKze, M58N3MKxe, M58N3MKye, M58N3MKze, & + M58N4FKxe, M58N4FKye, M58N4FKze, M58N4MKxe, M58N4MKye, M58N4MKze, M58N5FKxe, M58N5FKye, M58N5FKze, M58N5MKxe, M58N5MKye, M58N5MKze, & + M58N6FKxe, M58N6FKye, M58N6FKze, M58N6MKxe, M58N6MKye, M58N6MKze, M58N7FKxe, M58N7FKye, M58N7FKze, M58N7MKxe, M58N7MKye, M58N7MKze, & + M58N8FKxe, M58N8FKye, M58N8FKze, M58N8MKxe, M58N8MKye, M58N8MKze, M58N9FKxe, M58N9FKye, M58N9FKze, M58N9MKxe, M58N9MKye, M58N9MKze, & + M59N1FKxe, M59N1FKye, M59N1FKze, M59N1MKxe, M59N1MKye, M59N1MKze, M59N2FKxe, M59N2FKye, M59N2FKze, M59N2MKxe, M59N2MKye, M59N2MKze, & + M59N3FKxe, M59N3FKye, M59N3FKze, M59N3MKxe, M59N3MKye, M59N3MKze, M59N4FKxe, M59N4FKye, M59N4FKze, M59N4MKxe, M59N4MKye, M59N4MKze, & + M59N5FKxe, M59N5FKye, M59N5FKze, M59N5MKxe, M59N5MKye, M59N5MKze, M59N6FKxe, M59N6FKye, M59N6FKze, M59N6MKxe, M59N6MKye, M59N6MKze, & + M59N7FKxe, M59N7FKye, M59N7FKze, M59N7MKxe, M59N7MKye, M59N7MKze, M59N8FKxe, M59N8FKye, M59N8FKze, M59N8MKxe, M59N8MKye, M59N8MKze, & + M59N9FKxe, M59N9FKye, M59N9FKze, M59N9MKxe, M59N9MKye, M59N9MKze, M60N1FKxe, M60N1FKye, M60N1FKze, M60N1MKxe, M60N1MKye, M60N1MKze, & + M60N2FKxe, M60N2FKye, M60N2FKze, M60N2MKxe, M60N2MKye, M60N2MKze, M60N3FKxe, M60N3FKye, M60N3FKze, M60N3MKxe, M60N3MKye, M60N3MKze, & + M60N4FKxe, M60N4FKye, M60N4FKze, M60N4MKxe, M60N4MKye, M60N4MKze, M60N5FKxe, M60N5FKye, M60N5FKze, M60N5MKxe, M60N5MKye, M60N5MKze, & + M60N6FKxe, M60N6FKye, M60N6FKze, M60N6MKxe, M60N6MKye, M60N6MKze, M60N7FKxe, M60N7FKye, M60N7FKze, M60N7MKxe, M60N7MKye, M60N7MKze, & + M60N8FKxe, M60N8FKye, M60N8FKze, M60N8MKxe, M60N8MKye, M60N8MKze, M60N9FKxe, M60N9FKye, M60N9FKze, M60N9MKxe, M60N9MKye, M60N9MKze, & + M61N1FKxe, M61N1FKye, M61N1FKze, M61N1MKxe, M61N1MKye, M61N1MKze, M61N2FKxe, M61N2FKye, M61N2FKze, M61N2MKxe, M61N2MKye, M61N2MKze, & + M61N3FKxe, M61N3FKye, M61N3FKze, M61N3MKxe, M61N3MKye, M61N3MKze, M61N4FKxe, M61N4FKye, M61N4FKze, M61N4MKxe, M61N4MKye, M61N4MKze, & + M61N5FKxe, M61N5FKye, M61N5FKze, M61N5MKxe, M61N5MKye, M61N5MKze, M61N6FKxe, M61N6FKye, M61N6FKze, M61N6MKxe, M61N6MKye, M61N6MKze, & + M61N7FKxe, M61N7FKye, M61N7FKze, M61N7MKxe, M61N7MKye, M61N7MKze, M61N8FKxe, M61N8FKye, M61N8FKze, M61N8MKxe, M61N8MKye, M61N8MKze, & + M61N9FKxe, M61N9FKye, M61N9FKze, M61N9MKxe, M61N9MKye, M61N9MKze, M62N1FKxe, M62N1FKye, M62N1FKze, M62N1MKxe, M62N1MKye, M62N1MKze, & + M62N2FKxe, M62N2FKye, M62N2FKze, M62N2MKxe, M62N2MKye, M62N2MKze, M62N3FKxe, M62N3FKye, M62N3FKze, M62N3MKxe, M62N3MKye, M62N3MKze, & + M62N4FKxe, M62N4FKye, M62N4FKze, M62N4MKxe, M62N4MKye, M62N4MKze, M62N5FKxe, M62N5FKye, M62N5FKze, M62N5MKxe, M62N5MKye, M62N5MKze, & + M62N6FKxe, M62N6FKye, M62N6FKze, M62N6MKxe, M62N6MKye, M62N6MKze, M62N7FKxe, M62N7FKye, M62N7FKze, M62N7MKxe, M62N7MKye, M62N7MKze, & + M62N8FKxe, M62N8FKye, M62N8FKze, M62N8MKxe, M62N8MKye, M62N8MKze, M62N9FKxe, M62N9FKye, M62N9FKze, M62N9MKxe, M62N9MKye, M62N9MKze, & + M63N1FKxe, M63N1FKye, M63N1FKze, M63N1MKxe, M63N1MKye, M63N1MKze, M63N2FKxe, M63N2FKye, M63N2FKze, M63N2MKxe, M63N2MKye, M63N2MKze, & + M63N3FKxe, M63N3FKye, M63N3FKze, M63N3MKxe, M63N3MKye, M63N3MKze, M63N4FKxe, M63N4FKye, M63N4FKze, M63N4MKxe, M63N4MKye, M63N4MKze, & + M63N5FKxe, M63N5FKye, M63N5FKze, M63N5MKxe, M63N5MKye, M63N5MKze, M63N6FKxe, M63N6FKye, M63N6FKze, M63N6MKxe, M63N6MKye, M63N6MKze, & + M63N7FKxe, M63N7FKye, M63N7FKze, M63N7MKxe, M63N7MKye, M63N7MKze, M63N8FKxe, M63N8FKye, M63N8FKze, M63N8MKxe, M63N8MKye, M63N8MKze, & + M63N9FKxe, M63N9FKye, M63N9FKze, M63N9MKxe, M63N9MKye, M63N9MKze, M64N1FKxe, M64N1FKye, M64N1FKze, M64N1MKxe, M64N1MKye, M64N1MKze, & + M64N2FKxe, M64N2FKye, M64N2FKze, M64N2MKxe, M64N2MKye, M64N2MKze, M64N3FKxe, M64N3FKye, M64N3FKze, M64N3MKxe, M64N3MKye, M64N3MKze, & + M64N4FKxe, M64N4FKye, M64N4FKze, M64N4MKxe, M64N4MKye, M64N4MKze, M64N5FKxe, M64N5FKye, M64N5FKze, M64N5MKxe, M64N5MKye, M64N5MKze, & + M64N6FKxe, M64N6FKye, M64N6FKze, M64N6MKxe, M64N6MKye, M64N6MKze, M64N7FKxe, M64N7FKye, M64N7FKze, M64N7MKxe, M64N7MKye, M64N7MKze, & + M64N8FKxe, M64N8FKye, M64N8FKze, M64N8MKxe, M64N8MKye, M64N8MKze, M64N9FKxe, M64N9FKye, M64N9FKze, M64N9MKxe, M64N9MKye, M64N9MKze, & + M65N1FKxe, M65N1FKye, M65N1FKze, M65N1MKxe, M65N1MKye, M65N1MKze, M65N2FKxe, M65N2FKye, M65N2FKze, M65N2MKxe, M65N2MKye, M65N2MKze, & + M65N3FKxe, M65N3FKye, M65N3FKze, M65N3MKxe, M65N3MKye, M65N3MKze, M65N4FKxe, M65N4FKye, M65N4FKze, M65N4MKxe, M65N4MKye, M65N4MKze, & + M65N5FKxe, M65N5FKye, M65N5FKze, M65N5MKxe, M65N5MKye, M65N5MKze, M65N6FKxe, M65N6FKye, M65N6FKze, M65N6MKxe, M65N6MKye, M65N6MKze, & + M65N7FKxe, M65N7FKye, M65N7FKze, M65N7MKxe, M65N7MKye, M65N7MKze, M65N8FKxe, M65N8FKye, M65N8FKze, M65N8MKxe, M65N8MKye, M65N8MKze, & + M65N9FKxe, M65N9FKye, M65N9FKze, M65N9MKxe, M65N9MKye, M65N9MKze, M66N1FKxe, M66N1FKye, M66N1FKze, M66N1MKxe, M66N1MKye, M66N1MKze, & + M66N2FKxe, M66N2FKye, M66N2FKze, M66N2MKxe, M66N2MKye, M66N2MKze, M66N3FKxe, M66N3FKye, M66N3FKze, M66N3MKxe, M66N3MKye, M66N3MKze, & + M66N4FKxe, M66N4FKye, M66N4FKze, M66N4MKxe, M66N4MKye, M66N4MKze, M66N5FKxe, M66N5FKye, M66N5FKze, M66N5MKxe, M66N5MKye, M66N5MKze, & + M66N6FKxe, M66N6FKye, M66N6FKze, M66N6MKxe, M66N6MKye, M66N6MKze, M66N7FKxe, M66N7FKye, M66N7FKze, M66N7MKxe, M66N7MKye, M66N7MKze, & + M66N8FKxe, M66N8FKye, M66N8FKze, M66N8MKxe, M66N8MKye, M66N8MKze, M66N9FKxe, M66N9FKye, M66N9FKze, M66N9MKxe, M66N9MKye, M66N9MKze, & + M67N1FKxe, M67N1FKye, M67N1FKze, M67N1MKxe, M67N1MKye, M67N1MKze, M67N2FKxe, M67N2FKye, M67N2FKze, M67N2MKxe, M67N2MKye, M67N2MKze, & + M67N3FKxe, M67N3FKye, M67N3FKze, M67N3MKxe, M67N3MKye, M67N3MKze, M67N4FKxe, M67N4FKye, M67N4FKze, M67N4MKxe, M67N4MKye, M67N4MKze, & + M67N5FKxe, M67N5FKye, M67N5FKze, M67N5MKxe, M67N5MKye, M67N5MKze, M67N6FKxe, M67N6FKye, M67N6FKze, M67N6MKxe, M67N6MKye, M67N6MKze, & + M67N7FKxe, M67N7FKye, M67N7FKze, M67N7MKxe, M67N7MKye, M67N7MKze, M67N8FKxe, M67N8FKye, M67N8FKze, M67N8MKxe, M67N8MKye, M67N8MKze, & + M67N9FKxe, M67N9FKye, M67N9FKze, M67N9MKxe, M67N9MKye, M67N9MKze, M68N1FKxe, M68N1FKye, M68N1FKze, M68N1MKxe, M68N1MKye, M68N1MKze, & + M68N2FKxe, M68N2FKye, M68N2FKze, M68N2MKxe, M68N2MKye, M68N2MKze, M68N3FKxe, M68N3FKye, M68N3FKze, M68N3MKxe, M68N3MKye, M68N3MKze, & + M68N4FKxe, M68N4FKye, M68N4FKze, M68N4MKxe, M68N4MKye, M68N4MKze, M68N5FKxe, M68N5FKye, M68N5FKze, M68N5MKxe, M68N5MKye, M68N5MKze, & + M68N6FKxe, M68N6FKye, M68N6FKze, M68N6MKxe, M68N6MKye, M68N6MKze, M68N7FKxe, M68N7FKye, M68N7FKze, M68N7MKxe, M68N7MKye, M68N7MKze, & + M68N8FKxe, M68N8FKye, M68N8FKze, M68N8MKxe, M68N8MKye, M68N8MKze, M68N9FKxe, M68N9FKye, M68N9FKze, M68N9MKxe, M68N9MKye, M68N9MKze, & + M69N1FKxe, M69N1FKye, M69N1FKze, M69N1MKxe, M69N1MKye, M69N1MKze, M69N2FKxe, M69N2FKye, M69N2FKze, M69N2MKxe, M69N2MKye, M69N2MKze, & + M69N3FKxe, M69N3FKye, M69N3FKze, M69N3MKxe, M69N3MKye, M69N3MKze, M69N4FKxe, M69N4FKye, M69N4FKze, M69N4MKxe, M69N4MKye, M69N4MKze, & + M69N5FKxe, M69N5FKye, M69N5FKze, M69N5MKxe, M69N5MKye, M69N5MKze, M69N6FKxe, M69N6FKye, M69N6FKze, M69N6MKxe, M69N6MKye, M69N6MKze, & + M69N7FKxe, M69N7FKye, M69N7FKze, M69N7MKxe, M69N7MKye, M69N7MKze, M69N8FKxe, M69N8FKye, M69N8FKze, M69N8MKxe, M69N8MKye, M69N8MKze, & + M69N9FKxe, M69N9FKye, M69N9FKze, M69N9MKxe, M69N9MKye, M69N9MKze, M70N1FKxe, M70N1FKye, M70N1FKze, M70N1MKxe, M70N1MKye, M70N1MKze, & + M70N2FKxe, M70N2FKye, M70N2FKze, M70N2MKxe, M70N2MKye, M70N2MKze, M70N3FKxe, M70N3FKye, M70N3FKze, M70N3MKxe, M70N3MKye, M70N3MKze, & + M70N4FKxe, M70N4FKye, M70N4FKze, M70N4MKxe, M70N4MKye, M70N4MKze, M70N5FKxe, M70N5FKye, M70N5FKze, M70N5MKxe, M70N5MKye, M70N5MKze, & + M70N6FKxe, M70N6FKye, M70N6FKze, M70N6MKxe, M70N6MKye, M70N6MKze, M70N7FKxe, M70N7FKye, M70N7FKze, M70N7MKxe, M70N7MKye, M70N7MKze, & + M70N8FKxe, M70N8FKye, M70N8FKze, M70N8MKxe, M70N8MKye, M70N8MKze, M70N9FKxe, M70N9FKye, M70N9FKze, M70N9MKxe, M70N9MKye, M70N9MKze, & + M71N1FKxe, M71N1FKye, M71N1FKze, M71N1MKxe, M71N1MKye, M71N1MKze, M71N2FKxe, M71N2FKye, M71N2FKze, M71N2MKxe, M71N2MKye, M71N2MKze, & + M71N3FKxe, M71N3FKye, M71N3FKze, M71N3MKxe, M71N3MKye, M71N3MKze, M71N4FKxe, M71N4FKye, M71N4FKze, M71N4MKxe, M71N4MKye, M71N4MKze, & + M71N5FKxe, M71N5FKye, M71N5FKze, M71N5MKxe, M71N5MKye, M71N5MKze, M71N6FKxe, M71N6FKye, M71N6FKze, M71N6MKxe, M71N6MKye, M71N6MKze, & + M71N7FKxe, M71N7FKye, M71N7FKze, M71N7MKxe, M71N7MKye, M71N7MKze, M71N8FKxe, M71N8FKye, M71N8FKze, M71N8MKxe, M71N8MKye, M71N8MKze, & + M71N9FKxe, M71N9FKye, M71N9FKze, M71N9MKxe, M71N9MKye, M71N9MKze, M72N1FKxe, M72N1FKye, M72N1FKze, M72N1MKxe, M72N1MKye, M72N1MKze, & + M72N2FKxe, M72N2FKye, M72N2FKze, M72N2MKxe, M72N2MKye, M72N2MKze, M72N3FKxe, M72N3FKye, M72N3FKze, M72N3MKxe, M72N3MKye, M72N3MKze, & + M72N4FKxe, M72N4FKye, M72N4FKze, M72N4MKxe, M72N4MKye, M72N4MKze, M72N5FKxe, M72N5FKye, M72N5FKze, M72N5MKxe, M72N5MKye, M72N5MKze, & + M72N6FKxe, M72N6FKye, M72N6FKze, M72N6MKxe, M72N6MKye, M72N6MKze, M72N7FKxe, M72N7FKye, M72N7FKze, M72N7MKxe, M72N7MKye, M72N7MKze, & + M72N8FKxe, M72N8FKye, M72N8FKze, M72N8MKxe, M72N8MKye, M72N8MKze, M72N9FKxe, M72N9FKye, M72N9FKze, M72N9MKxe, M72N9MKye, M72N9MKze, & + M73N1FKxe, M73N1FKye, M73N1FKze, M73N1MKxe, M73N1MKye, M73N1MKze, M73N2FKxe, M73N2FKye, M73N2FKze, M73N2MKxe, M73N2MKye, M73N2MKze, & + M73N3FKxe, M73N3FKye, M73N3FKze, M73N3MKxe, M73N3MKye, M73N3MKze, M73N4FKxe, M73N4FKye, M73N4FKze, M73N4MKxe, M73N4MKye, M73N4MKze, & + M73N5FKxe, M73N5FKye, M73N5FKze, M73N5MKxe, M73N5MKye, M73N5MKze, M73N6FKxe, M73N6FKye, M73N6FKze, M73N6MKxe, M73N6MKye, M73N6MKze, & + M73N7FKxe, M73N7FKye, M73N7FKze, M73N7MKxe, M73N7MKye, M73N7MKze, M73N8FKxe, M73N8FKye, M73N8FKze, M73N8MKxe, M73N8MKye, M73N8MKze, & + M73N9FKxe, M73N9FKye, M73N9FKze, M73N9MKxe, M73N9MKye, M73N9MKze, M74N1FKxe, M74N1FKye, M74N1FKze, M74N1MKxe, M74N1MKye, M74N1MKze, & + M74N2FKxe, M74N2FKye, M74N2FKze, M74N2MKxe, M74N2MKye, M74N2MKze, M74N3FKxe, M74N3FKye, M74N3FKze, M74N3MKxe, M74N3MKye, M74N3MKze, & + M74N4FKxe, M74N4FKye, M74N4FKze, M74N4MKxe, M74N4MKye, M74N4MKze, M74N5FKxe, M74N5FKye, M74N5FKze, M74N5MKxe, M74N5MKye, M74N5MKze, & + M74N6FKxe, M74N6FKye, M74N6FKze, M74N6MKxe, M74N6MKye, M74N6MKze, M74N7FKxe, M74N7FKye, M74N7FKze, M74N7MKxe, M74N7MKye, M74N7MKze, & + M74N8FKxe, M74N8FKye, M74N8FKze, M74N8MKxe, M74N8MKye, M74N8MKze, M74N9FKxe, M74N9FKye, M74N9FKze, M74N9MKxe, M74N9MKye, M74N9MKze, & + M75N1FKxe, M75N1FKye, M75N1FKze, M75N1MKxe, M75N1MKye, M75N1MKze, M75N2FKxe, M75N2FKye, M75N2FKze, M75N2MKxe, M75N2MKye, M75N2MKze, & + M75N3FKxe, M75N3FKye, M75N3FKze, M75N3MKxe, M75N3MKye, M75N3MKze, M75N4FKxe, M75N4FKye, M75N4FKze, M75N4MKxe, M75N4MKye, M75N4MKze, & + M75N5FKxe, M75N5FKye, M75N5FKze, M75N5MKxe, M75N5MKye, M75N5MKze, M75N6FKxe, M75N6FKye, M75N6FKze, M75N6MKxe, M75N6MKye, M75N6MKze, & + M75N7FKxe, M75N7FKye, M75N7FKze, M75N7MKxe, M75N7MKye, M75N7MKze, M75N8FKxe, M75N8FKye, M75N8FKze, M75N8MKxe, M75N8MKye, M75N8MKze, & + M75N9FKxe, M75N9FKye, M75N9FKze, M75N9MKxe, M75N9MKye, M75N9MKze, M76N1FKxe, M76N1FKye, M76N1FKze, M76N1MKxe, M76N1MKye, M76N1MKze, & + M76N2FKxe, M76N2FKye, M76N2FKze, M76N2MKxe, M76N2MKye, M76N2MKze, M76N3FKxe, M76N3FKye, M76N3FKze, M76N3MKxe, M76N3MKye, M76N3MKze, & + M76N4FKxe, M76N4FKye, M76N4FKze, M76N4MKxe, M76N4MKye, M76N4MKze, M76N5FKxe, M76N5FKye, M76N5FKze, M76N5MKxe, M76N5MKye, M76N5MKze, & + M76N6FKxe, M76N6FKye, M76N6FKze, M76N6MKxe, M76N6MKye, M76N6MKze, M76N7FKxe, M76N7FKye, M76N7FKze, M76N7MKxe, M76N7MKye, M76N7MKze, & + M76N8FKxe, M76N8FKye, M76N8FKze, M76N8MKxe, M76N8MKye, M76N8MKze, M76N9FKxe, M76N9FKye, M76N9FKze, M76N9MKxe, M76N9MKye, M76N9MKze, & + M77N1FKxe, M77N1FKye, M77N1FKze, M77N1MKxe, M77N1MKye, M77N1MKze, M77N2FKxe, M77N2FKye, M77N2FKze, M77N2MKxe, M77N2MKye, M77N2MKze, & + M77N3FKxe, M77N3FKye, M77N3FKze, M77N3MKxe, M77N3MKye, M77N3MKze, M77N4FKxe, M77N4FKye, M77N4FKze, M77N4MKxe, M77N4MKye, M77N4MKze, & + M77N5FKxe, M77N5FKye, M77N5FKze, M77N5MKxe, M77N5MKye, M77N5MKze, M77N6FKxe, M77N6FKye, M77N6FKze, M77N6MKxe, M77N6MKye, M77N6MKze, & + M77N7FKxe, M77N7FKye, M77N7FKze, M77N7MKxe, M77N7MKye, M77N7MKze, M77N8FKxe, M77N8FKye, M77N8FKze, M77N8MKxe, M77N8MKye, M77N8MKze, & + M77N9FKxe, M77N9FKye, M77N9FKze, M77N9MKxe, M77N9MKye, M77N9MKze, M78N1FKxe, M78N1FKye, M78N1FKze, M78N1MKxe, M78N1MKye, M78N1MKze, & + M78N2FKxe, M78N2FKye, M78N2FKze, M78N2MKxe, M78N2MKye, M78N2MKze, M78N3FKxe, M78N3FKye, M78N3FKze, M78N3MKxe, M78N3MKye, M78N3MKze, & + M78N4FKxe, M78N4FKye, M78N4FKze, M78N4MKxe, M78N4MKye, M78N4MKze, M78N5FKxe, M78N5FKye, M78N5FKze, M78N5MKxe, M78N5MKye, M78N5MKze, & + M78N6FKxe, M78N6FKye, M78N6FKze, M78N6MKxe, M78N6MKye, M78N6MKze, M78N7FKxe, M78N7FKye, M78N7FKze, M78N7MKxe, M78N7MKye, M78N7MKze, & + M78N8FKxe, M78N8FKye, M78N8FKze, M78N8MKxe, M78N8MKye, M78N8MKze, M78N9FKxe, M78N9FKye, M78N9FKze, M78N9MKxe, M78N9MKye, M78N9MKze, & + M79N1FKxe, M79N1FKye, M79N1FKze, M79N1MKxe, M79N1MKye, M79N1MKze, M79N2FKxe, M79N2FKye, M79N2FKze, M79N2MKxe, M79N2MKye, M79N2MKze, & + M79N3FKxe, M79N3FKye, M79N3FKze, M79N3MKxe, M79N3MKye, M79N3MKze, M79N4FKxe, M79N4FKye, M79N4FKze, M79N4MKxe, M79N4MKye, M79N4MKze, & + M79N5FKxe, M79N5FKye, M79N5FKze, M79N5MKxe, M79N5MKye, M79N5MKze, M79N6FKxe, M79N6FKye, M79N6FKze, M79N6MKxe, M79N6MKye, M79N6MKze, & + M79N7FKxe, M79N7FKye, M79N7FKze, M79N7MKxe, M79N7MKye, M79N7MKze, M79N8FKxe, M79N8FKye, M79N8FKze, M79N8MKxe, M79N8MKye, M79N8MKze, & + M79N9FKxe, M79N9FKye, M79N9FKze, M79N9MKxe, M79N9MKye, M79N9MKze, M80N1FKxe, M80N1FKye, M80N1FKze, M80N1MKxe, M80N1MKye, M80N1MKze, & + M80N2FKxe, M80N2FKye, M80N2FKze, M80N2MKxe, M80N2MKye, M80N2MKze, M80N3FKxe, M80N3FKye, M80N3FKze, M80N3MKxe, M80N3MKye, M80N3MKze, & + M80N4FKxe, M80N4FKye, M80N4FKze, M80N4MKxe, M80N4MKye, M80N4MKze, M80N5FKxe, M80N5FKye, M80N5FKze, M80N5MKxe, M80N5MKye, M80N5MKze, & + M80N6FKxe, M80N6FKye, M80N6FKze, M80N6MKxe, M80N6MKye, M80N6MKze, M80N7FKxe, M80N7FKye, M80N7FKze, M80N7MKxe, M80N7MKye, M80N7MKze, & + M80N8FKxe, M80N8FKye, M80N8FKze, M80N8MKxe, M80N8MKye, M80N8MKze, M80N9FKxe, M80N9FKye, M80N9FKze, M80N9MKxe, M80N9MKye, M80N9MKze, & + M81N1FKxe, M81N1FKye, M81N1FKze, M81N1MKxe, M81N1MKye, M81N1MKze, M81N2FKxe, M81N2FKye, M81N2FKze, M81N2MKxe, M81N2MKye, M81N2MKze, & + M81N3FKxe, M81N3FKye, M81N3FKze, M81N3MKxe, M81N3MKye, M81N3MKze, M81N4FKxe, M81N4FKye, M81N4FKze, M81N4MKxe, M81N4MKye, M81N4MKze, & + M81N5FKxe, M81N5FKye, M81N5FKze, M81N5MKxe, M81N5MKye, M81N5MKze, M81N6FKxe, M81N6FKye, M81N6FKze, M81N6MKxe, M81N6MKye, M81N6MKze, & + M81N7FKxe, M81N7FKye, M81N7FKze, M81N7MKxe, M81N7MKye, M81N7MKze, M81N8FKxe, M81N8FKye, M81N8FKze, M81N8MKxe, M81N8MKye, M81N8MKze, & + M81N9FKxe, M81N9FKye, M81N9FKze, M81N9MKxe, M81N9MKye, M81N9MKze, M82N1FKxe, M82N1FKye, M82N1FKze, M82N1MKxe, M82N1MKye, M82N1MKze, & + M82N2FKxe, M82N2FKye, M82N2FKze, M82N2MKxe, M82N2MKye, M82N2MKze, M82N3FKxe, M82N3FKye, M82N3FKze, M82N3MKxe, M82N3MKye, M82N3MKze, & + M82N4FKxe, M82N4FKye, M82N4FKze, M82N4MKxe, M82N4MKye, M82N4MKze, M82N5FKxe, M82N5FKye, M82N5FKze, M82N5MKxe, M82N5MKye, M82N5MKze, & + M82N6FKxe, M82N6FKye, M82N6FKze, M82N6MKxe, M82N6MKye, M82N6MKze, M82N7FKxe, M82N7FKye, M82N7FKze, M82N7MKxe, M82N7MKye, M82N7MKze, & + M82N8FKxe, M82N8FKye, M82N8FKze, M82N8MKxe, M82N8MKye, M82N8MKze, M82N9FKxe, M82N9FKye, M82N9FKze, M82N9MKxe, M82N9MKye, M82N9MKze, & + M83N1FKxe, M83N1FKye, M83N1FKze, M83N1MKxe, M83N1MKye, M83N1MKze, M83N2FKxe, M83N2FKye, M83N2FKze, M83N2MKxe, M83N2MKye, M83N2MKze, & + M83N3FKxe, M83N3FKye, M83N3FKze, M83N3MKxe, M83N3MKye, M83N3MKze, M83N4FKxe, M83N4FKye, M83N4FKze, M83N4MKxe, M83N4MKye, M83N4MKze, & + M83N5FKxe, M83N5FKye, M83N5FKze, M83N5MKxe, M83N5MKye, M83N5MKze, M83N6FKxe, M83N6FKye, M83N6FKze, M83N6MKxe, M83N6MKye, M83N6MKze, & + M83N7FKxe, M83N7FKye, M83N7FKze, M83N7MKxe, M83N7MKye, M83N7MKze, M83N8FKxe, M83N8FKye, M83N8FKze, M83N8MKxe, M83N8MKye, M83N8MKze, & + M83N9FKxe, M83N9FKye, M83N9FKze, M83N9MKxe, M83N9MKye, M83N9MKze, M84N1FKxe, M84N1FKye, M84N1FKze, M84N1MKxe, M84N1MKye, M84N1MKze, & + M84N2FKxe, M84N2FKye, M84N2FKze, M84N2MKxe, M84N2MKye, M84N2MKze, M84N3FKxe, M84N3FKye, M84N3FKze, M84N3MKxe, M84N3MKye, M84N3MKze, & + M84N4FKxe, M84N4FKye, M84N4FKze, M84N4MKxe, M84N4MKye, M84N4MKze, M84N5FKxe, M84N5FKye, M84N5FKze, M84N5MKxe, M84N5MKye, M84N5MKze, & + M84N6FKxe, M84N6FKye, M84N6FKze, M84N6MKxe, M84N6MKye, M84N6MKze, M84N7FKxe, M84N7FKye, M84N7FKze, M84N7MKxe, M84N7MKye, M84N7MKze, & + M84N8FKxe, M84N8FKye, M84N8FKze, M84N8MKxe, M84N8MKye, M84N8MKze, M84N9FKxe, M84N9FKye, M84N9FKze, M84N9MKxe, M84N9MKye, M84N9MKze, & + M85N1FKxe, M85N1FKye, M85N1FKze, M85N1MKxe, M85N1MKye, M85N1MKze, M85N2FKxe, M85N2FKye, M85N2FKze, M85N2MKxe, M85N2MKye, M85N2MKze, & + M85N3FKxe, M85N3FKye, M85N3FKze, M85N3MKxe, M85N3MKye, M85N3MKze, M85N4FKxe, M85N4FKye, M85N4FKze, M85N4MKxe, M85N4MKye, M85N4MKze, & + M85N5FKxe, M85N5FKye, M85N5FKze, M85N5MKxe, M85N5MKye, M85N5MKze, M85N6FKxe, M85N6FKye, M85N6FKze, M85N6MKxe, M85N6MKye, M85N6MKze, & + M85N7FKxe, M85N7FKye, M85N7FKze, M85N7MKxe, M85N7MKye, M85N7MKze, M85N8FKxe, M85N8FKye, M85N8FKze, M85N8MKxe, M85N8MKye, M85N8MKze, & + M85N9FKxe, M85N9FKye, M85N9FKze, M85N9MKxe, M85N9MKye, M85N9MKze, M86N1FKxe, M86N1FKye, M86N1FKze, M86N1MKxe, M86N1MKye, M86N1MKze, & + M86N2FKxe, M86N2FKye, M86N2FKze, M86N2MKxe, M86N2MKye, M86N2MKze, M86N3FKxe, M86N3FKye, M86N3FKze, M86N3MKxe, M86N3MKye, M86N3MKze, & + M86N4FKxe, M86N4FKye, M86N4FKze, M86N4MKxe, M86N4MKye, M86N4MKze, M86N5FKxe, M86N5FKye, M86N5FKze, M86N5MKxe, M86N5MKye, M86N5MKze, & + M86N6FKxe, M86N6FKye, M86N6FKze, M86N6MKxe, M86N6MKye, M86N6MKze, M86N7FKxe, M86N7FKye, M86N7FKze, M86N7MKxe, M86N7MKye, M86N7MKze, & + M86N8FKxe, M86N8FKye, M86N8FKze, M86N8MKxe, M86N8MKye, M86N8MKze, M86N9FKxe, M86N9FKye, M86N9FKze, M86N9MKxe, M86N9MKye, M86N9MKze, & + M87N1FKxe, M87N1FKye, M87N1FKze, M87N1MKxe, M87N1MKye, M87N1MKze, M87N2FKxe, M87N2FKye, M87N2FKze, M87N2MKxe, M87N2MKye, M87N2MKze, & + M87N3FKxe, M87N3FKye, M87N3FKze, M87N3MKxe, M87N3MKye, M87N3MKze, M87N4FKxe, M87N4FKye, M87N4FKze, M87N4MKxe, M87N4MKye, M87N4MKze, & + M87N5FKxe, M87N5FKye, M87N5FKze, M87N5MKxe, M87N5MKye, M87N5MKze, M87N6FKxe, M87N6FKye, M87N6FKze, M87N6MKxe, M87N6MKye, M87N6MKze, & + M87N7FKxe, M87N7FKye, M87N7FKze, M87N7MKxe, M87N7MKye, M87N7MKze, M87N8FKxe, M87N8FKye, M87N8FKze, M87N8MKxe, M87N8MKye, M87N8MKze, & + M87N9FKxe, M87N9FKye, M87N9FKze, M87N9MKxe, M87N9MKye, M87N9MKze, M88N1FKxe, M88N1FKye, M88N1FKze, M88N1MKxe, M88N1MKye, M88N1MKze, & + M88N2FKxe, M88N2FKye, M88N2FKze, M88N2MKxe, M88N2MKye, M88N2MKze, M88N3FKxe, M88N3FKye, M88N3FKze, M88N3MKxe, M88N3MKye, M88N3MKze, & + M88N4FKxe, M88N4FKye, M88N4FKze, M88N4MKxe, M88N4MKye, M88N4MKze, M88N5FKxe, M88N5FKye, M88N5FKze, M88N5MKxe, M88N5MKye, M88N5MKze, & + M88N6FKxe, M88N6FKye, M88N6FKze, M88N6MKxe, M88N6MKye, M88N6MKze, M88N7FKxe, M88N7FKye, M88N7FKze, M88N7MKxe, M88N7MKye, M88N7MKze, & + M88N8FKxe, M88N8FKye, M88N8FKze, M88N8MKxe, M88N8MKye, M88N8MKze, M88N9FKxe, M88N9FKye, M88N9FKze, M88N9MKxe, M88N9MKye, M88N9MKze, & + M89N1FKxe, M89N1FKye, M89N1FKze, M89N1MKxe, M89N1MKye, M89N1MKze, M89N2FKxe, M89N2FKye, M89N2FKze, M89N2MKxe, M89N2MKye, M89N2MKze, & + M89N3FKxe, M89N3FKye, M89N3FKze, M89N3MKxe, M89N3MKye, M89N3MKze, M89N4FKxe, M89N4FKye, M89N4FKze, M89N4MKxe, M89N4MKye, M89N4MKze, & + M89N5FKxe, M89N5FKye, M89N5FKze, M89N5MKxe, M89N5MKye, M89N5MKze, M89N6FKxe, M89N6FKye, M89N6FKze, M89N6MKxe, M89N6MKye, M89N6MKze, & + M89N7FKxe, M89N7FKye, M89N7FKze, M89N7MKxe, M89N7MKye, M89N7MKze, M89N8FKxe, M89N8FKye, M89N8FKze, M89N8MKxe, M89N8MKye, M89N8MKze, & + M89N9FKxe, M89N9FKye, M89N9FKze, M89N9MKxe, M89N9MKye, M89N9MKze, M90N1FKxe, M90N1FKye, M90N1FKze, M90N1MKxe, M90N1MKye, M90N1MKze, & + M90N2FKxe, M90N2FKye, M90N2FKze, M90N2MKxe, M90N2MKye, M90N2MKze, M90N3FKxe, M90N3FKye, M90N3FKze, M90N3MKxe, M90N3MKye, M90N3MKze, & + M90N4FKxe, M90N4FKye, M90N4FKze, M90N4MKxe, M90N4MKye, M90N4MKze, M90N5FKxe, M90N5FKye, M90N5FKze, M90N5MKxe, M90N5MKye, M90N5MKze, & + M90N6FKxe, M90N6FKye, M90N6FKze, M90N6MKxe, M90N6MKye, M90N6MKze, M90N7FKxe, M90N7FKye, M90N7FKze, M90N7MKxe, M90N7MKye, M90N7MKze, & + M90N8FKxe, M90N8FKye, M90N8FKze, M90N8MKxe, M90N8MKye, M90N8MKze, M90N9FKxe, M90N9FKye, M90N9FKze, M90N9MKxe, M90N9MKye, M90N9MKze, & + M91N1FKxe, M91N1FKye, M91N1FKze, M91N1MKxe, M91N1MKye, M91N1MKze, M91N2FKxe, M91N2FKye, M91N2FKze, M91N2MKxe, M91N2MKye, M91N2MKze, & + M91N3FKxe, M91N3FKye, M91N3FKze, M91N3MKxe, M91N3MKye, M91N3MKze, M91N4FKxe, M91N4FKye, M91N4FKze, M91N4MKxe, M91N4MKye, M91N4MKze, & + M91N5FKxe, M91N5FKye, M91N5FKze, M91N5MKxe, M91N5MKye, M91N5MKze, M91N6FKxe, M91N6FKye, M91N6FKze, M91N6MKxe, M91N6MKye, M91N6MKze, & + M91N7FKxe, M91N7FKye, M91N7FKze, M91N7MKxe, M91N7MKye, M91N7MKze, M91N8FKxe, M91N8FKye, M91N8FKze, M91N8MKxe, M91N8MKye, M91N8MKze, & + M91N9FKxe, M91N9FKye, M91N9FKze, M91N9MKxe, M91N9MKye, M91N9MKze, M92N1FKxe, M92N1FKye, M92N1FKze, M92N1MKxe, M92N1MKye, M92N1MKze, & + M92N2FKxe, M92N2FKye, M92N2FKze, M92N2MKxe, M92N2MKye, M92N2MKze, M92N3FKxe, M92N3FKye, M92N3FKze, M92N3MKxe, M92N3MKye, M92N3MKze, & + M92N4FKxe, M92N4FKye, M92N4FKze, M92N4MKxe, M92N4MKye, M92N4MKze, M92N5FKxe, M92N5FKye, M92N5FKze, M92N5MKxe, M92N5MKye, M92N5MKze, & + M92N6FKxe, M92N6FKye, M92N6FKze, M92N6MKxe, M92N6MKye, M92N6MKze, M92N7FKxe, M92N7FKye, M92N7FKze, M92N7MKxe, M92N7MKye, M92N7MKze, & + M92N8FKxe, M92N8FKye, M92N8FKze, M92N8MKxe, M92N8MKye, M92N8MKze, M92N9FKxe, M92N9FKye, M92N9FKze, M92N9MKxe, M92N9MKye, M92N9MKze, & + M93N1FKxe, M93N1FKye, M93N1FKze, M93N1MKxe, M93N1MKye, M93N1MKze, M93N2FKxe, M93N2FKye, M93N2FKze, M93N2MKxe, M93N2MKye, M93N2MKze, & + M93N3FKxe, M93N3FKye, M93N3FKze, M93N3MKxe, M93N3MKye, M93N3MKze, M93N4FKxe, M93N4FKye, M93N4FKze, M93N4MKxe, M93N4MKye, M93N4MKze, & + M93N5FKxe, M93N5FKye, M93N5FKze, M93N5MKxe, M93N5MKye, M93N5MKze, M93N6FKxe, M93N6FKye, M93N6FKze, M93N6MKxe, M93N6MKye, M93N6MKze, & + M93N7FKxe, M93N7FKye, M93N7FKze, M93N7MKxe, M93N7MKye, M93N7MKze, M93N8FKxe, M93N8FKye, M93N8FKze, M93N8MKxe, M93N8MKye, M93N8MKze, & + M93N9FKxe, M93N9FKye, M93N9FKze, M93N9MKxe, M93N9MKye, M93N9MKze, M94N1FKxe, M94N1FKye, M94N1FKze, M94N1MKxe, M94N1MKye, M94N1MKze, & + M94N2FKxe, M94N2FKye, M94N2FKze, M94N2MKxe, M94N2MKye, M94N2MKze, M94N3FKxe, M94N3FKye, M94N3FKze, M94N3MKxe, M94N3MKye, M94N3MKze, & + M94N4FKxe, M94N4FKye, M94N4FKze, M94N4MKxe, M94N4MKye, M94N4MKze, M94N5FKxe, M94N5FKye, M94N5FKze, M94N5MKxe, M94N5MKye, M94N5MKze, & + M94N6FKxe, M94N6FKye, M94N6FKze, M94N6MKxe, M94N6MKye, M94N6MKze, M94N7FKxe, M94N7FKye, M94N7FKze, M94N7MKxe, M94N7MKye, M94N7MKze, & + M94N8FKxe, M94N8FKye, M94N8FKze, M94N8MKxe, M94N8MKye, M94N8MKze, M94N9FKxe, M94N9FKye, M94N9FKze, M94N9MKxe, M94N9MKye, M94N9MKze, & + M95N1FKxe, M95N1FKye, M95N1FKze, M95N1MKxe, M95N1MKye, M95N1MKze, M95N2FKxe, M95N2FKye, M95N2FKze, M95N2MKxe, M95N2MKye, M95N2MKze, & + M95N3FKxe, M95N3FKye, M95N3FKze, M95N3MKxe, M95N3MKye, M95N3MKze, M95N4FKxe, M95N4FKye, M95N4FKze, M95N4MKxe, M95N4MKye, M95N4MKze, & + M95N5FKxe, M95N5FKye, M95N5FKze, M95N5MKxe, M95N5MKye, M95N5MKze, M95N6FKxe, M95N6FKye, M95N6FKze, M95N6MKxe, M95N6MKye, M95N6MKze, & + M95N7FKxe, M95N7FKye, M95N7FKze, M95N7MKxe, M95N7MKye, M95N7MKze, M95N8FKxe, M95N8FKye, M95N8FKze, M95N8MKxe, M95N8MKye, M95N8MKze, & + M95N9FKxe, M95N9FKye, M95N9FKze, M95N9MKxe, M95N9MKye, M95N9MKze, M96N1FKxe, M96N1FKye, M96N1FKze, M96N1MKxe, M96N1MKye, M96N1MKze, & + M96N2FKxe, M96N2FKye, M96N2FKze, M96N2MKxe, M96N2MKye, M96N2MKze, M96N3FKxe, M96N3FKye, M96N3FKze, M96N3MKxe, M96N3MKye, M96N3MKze, & + M96N4FKxe, M96N4FKye, M96N4FKze, M96N4MKxe, M96N4MKye, M96N4MKze, M96N5FKxe, M96N5FKye, M96N5FKze, M96N5MKxe, M96N5MKye, M96N5MKze, & + M96N6FKxe, M96N6FKye, M96N6FKze, M96N6MKxe, M96N6MKye, M96N6MKze, M96N7FKxe, M96N7FKye, M96N7FKze, M96N7MKxe, M96N7MKye, M96N7MKze, & + M96N8FKxe, M96N8FKye, M96N8FKze, M96N8MKxe, M96N8MKye, M96N8MKze, M96N9FKxe, M96N9FKye, M96N9FKze, M96N9MKxe, M96N9MKye, M96N9MKze, & + M97N1FKxe, M97N1FKye, M97N1FKze, M97N1MKxe, M97N1MKye, M97N1MKze, M97N2FKxe, M97N2FKye, M97N2FKze, M97N2MKxe, M97N2MKye, M97N2MKze, & + M97N3FKxe, M97N3FKye, M97N3FKze, M97N3MKxe, M97N3MKye, M97N3MKze, M97N4FKxe, M97N4FKye, M97N4FKze, M97N4MKxe, M97N4MKye, M97N4MKze, & + M97N5FKxe, M97N5FKye, M97N5FKze, M97N5MKxe, M97N5MKye, M97N5MKze, M97N6FKxe, M97N6FKye, M97N6FKze, M97N6MKxe, M97N6MKye, M97N6MKze, & + M97N7FKxe, M97N7FKye, M97N7FKze, M97N7MKxe, M97N7MKye, M97N7MKze, M97N8FKxe, M97N8FKye, M97N8FKze, M97N8MKxe, M97N8MKye, M97N8MKze, & + M97N9FKxe, M97N9FKye, M97N9FKze, M97N9MKxe, M97N9MKye, M97N9MKze, M98N1FKxe, M98N1FKye, M98N1FKze, M98N1MKxe, M98N1MKye, M98N1MKze, & + M98N2FKxe, M98N2FKye, M98N2FKze, M98N2MKxe, M98N2MKye, M98N2MKze, M98N3FKxe, M98N3FKye, M98N3FKze, M98N3MKxe, M98N3MKye, M98N3MKze, & + M98N4FKxe, M98N4FKye, M98N4FKze, M98N4MKxe, M98N4MKye, M98N4MKze, M98N5FKxe, M98N5FKye, M98N5FKze, M98N5MKxe, M98N5MKye, M98N5MKze, & + M98N6FKxe, M98N6FKye, M98N6FKze, M98N6MKxe, M98N6MKye, M98N6MKze, M98N7FKxe, M98N7FKye, M98N7FKze, M98N7MKxe, M98N7MKye, M98N7MKze, & + M98N8FKxe, M98N8FKye, M98N8FKze, M98N8MKxe, M98N8MKye, M98N8MKze, M98N9FKxe, M98N9FKye, M98N9FKze, M98N9MKxe, M98N9MKye, M98N9MKze, & + M99N1FKxe, M99N1FKye, M99N1FKze, M99N1MKxe, M99N1MKye, M99N1MKze, M99N2FKxe, M99N2FKye, M99N2FKze, M99N2MKxe, M99N2MKye, M99N2MKze, & + M99N3FKxe, M99N3FKye, M99N3FKze, M99N3MKxe, M99N3MKye, M99N3MKze, M99N4FKxe, M99N4FKye, M99N4FKze, M99N4MKxe, M99N4MKye, M99N4MKze, & + M99N5FKxe, M99N5FKye, M99N5FKze, M99N5MKxe, M99N5MKye, M99N5MKze, M99N6FKxe, M99N6FKye, M99N6FKze, M99N6MKxe, M99N6MKye, M99N6MKze, & + M99N7FKxe, M99N7FKye, M99N7FKze, M99N7MKxe, M99N7MKye, M99N7MKze, M99N8FKxe, M99N8FKye, M99N8FKze, M99N8MKxe, M99N8MKye, M99N8MKze, & + M99N9FKxe, M99N9FKye, M99N9FKze, M99N9MKxe, M99N9MKye, M99N9MKze/),(/6,9,99/)) -!End of code generated by Matlab script - INTEGER, PARAMETER :: MNfmKe(6,9,9) = reshape((/ M1N1FKxe,M1N1FKye,M1N1FKze,M1N1MKxe,M1N1MKye,M1N1MKze, & - M1N2FKxe,M1N2FKye,M1N2FKze,M1N2MKxe,M1N2MKye,M1N2MKze, & - M1N3FKxe,M1N3FKye,M1N3FKze,M1N3MKxe,M1N3MKye,M1N3MKze, & - M1N4FKxe,M1N4FKye,M1N4FKze,M1N4MKxe,M1N4MKye,M1N4MKze, & - M1N5FKxe,M1N5FKye,M1N5FKze,M1N5MKxe,M1N5MKye,M1N5MKze, & - M1N6FKxe,M1N6FKye,M1N6FKze,M1N6MKxe,M1N6MKye,M1N6MKze, & - M1N7FKxe,M1N7FKye,M1N7FKze,M1N7MKxe,M1N7MKye,M1N7MKze, & - M1N8FKxe,M1N8FKye,M1N8FKze,M1N8MKxe,M1N8MKye,M1N8MKze, & - M1N9FKxe,M1N9FKye,M1N9FKze,M1N9MKxe,M1N9MKye,M1N9MKze, & - M2N1FKxe,M2N1FKye,M2N1FKze,M2N1MKxe,M2N1MKye,M2N1MKze, & - M2N2FKxe,M2N2FKye,M2N2FKze,M2N2MKxe,M2N2MKye,M2N2MKze, & - M2N3FKxe,M2N3FKye,M2N3FKze,M2N3MKxe,M2N3MKye,M2N3MKze, & - M2N4FKxe,M2N4FKye,M2N4FKze,M2N4MKxe,M2N4MKye,M2N4MKze, & - M2N5FKxe,M2N5FKye,M2N5FKze,M2N5MKxe,M2N5MKye,M2N5MKze, & - M2N6FKxe,M2N6FKye,M2N6FKze,M2N6MKxe,M2N6MKye,M2N6MKze, & - M2N7FKxe,M2N7FKye,M2N7FKze,M2N7MKxe,M2N7MKye,M2N7MKze, & - M2N8FKxe,M2N8FKye,M2N8FKze,M2N8MKxe,M2N8MKye,M2N8MKze, & - M2N9FKxe,M2N9FKye,M2N9FKze,M2N9MKxe,M2N9MKye,M2N9MKze, & - M3N1FKxe,M3N1FKye,M3N1FKze,M3N1MKxe,M3N1MKye,M3N1MKze, & - M3N2FKxe,M3N2FKye,M3N2FKze,M3N2MKxe,M3N2MKye,M3N2MKze, & - M3N3FKxe,M3N3FKye,M3N3FKze,M3N3MKxe,M3N3MKye,M3N3MKze, & - M3N4FKxe,M3N4FKye,M3N4FKze,M3N4MKxe,M3N4MKye,M3N4MKze, & - M3N5FKxe,M3N5FKye,M3N5FKze,M3N5MKxe,M3N5MKye,M3N5MKze, & - M3N6FKxe,M3N6FKye,M3N6FKze,M3N6MKxe,M3N6MKye,M3N6MKze, & - M3N7FKxe,M3N7FKye,M3N7FKze,M3N7MKxe,M3N7MKye,M3N7MKze, & - M3N8FKxe,M3N8FKye,M3N8FKze,M3N8MKxe,M3N8MKye,M3N8MKze, & - M3N9FKxe,M3N9FKye,M3N9FKze,M3N9MKxe,M3N9MKye,M3N9MKze, & - M4N1FKxe,M4N1FKye,M4N1FKze,M4N1MKxe,M4N1MKye,M4N1MKze, & - M4N2FKxe,M4N2FKye,M4N2FKze,M4N2MKxe,M4N2MKye,M4N2MKze, & - M4N3FKxe,M4N3FKye,M4N3FKze,M4N3MKxe,M4N3MKye,M4N3MKze, & - M4N4FKxe,M4N4FKye,M4N4FKze,M4N4MKxe,M4N4MKye,M4N4MKze, & - M4N5FKxe,M4N5FKye,M4N5FKze,M4N5MKxe,M4N5MKye,M4N5MKze, & - M4N6FKxe,M4N6FKye,M4N6FKze,M4N6MKxe,M4N6MKye,M4N6MKze, & - M4N7FKxe,M4N7FKye,M4N7FKze,M4N7MKxe,M4N7MKye,M4N7MKze, & - M4N8FKxe,M4N8FKye,M4N8FKze,M4N8MKxe,M4N8MKye,M4N8MKze, & - M4N9FKxe,M4N9FKye,M4N9FKze,M4N9MKxe,M4N9MKye,M4N9MKze, & - M5N1FKxe,M5N1FKye,M5N1FKze,M5N1MKxe,M5N1MKye,M5N1MKze, & - M5N2FKxe,M5N2FKye,M5N2FKze,M5N2MKxe,M5N2MKye,M5N2MKze, & - M5N3FKxe,M5N3FKye,M5N3FKze,M5N3MKxe,M5N3MKye,M5N3MKze, & - M5N4FKxe,M5N4FKye,M5N4FKze,M5N4MKxe,M5N4MKye,M5N4MKze, & - M5N5FKxe,M5N5FKye,M5N5FKze,M5N5MKxe,M5N5MKye,M5N5MKze, & - M5N6FKxe,M5N6FKye,M5N6FKze,M5N6MKxe,M5N6MKye,M5N6MKze, & - M5N7FKxe,M5N7FKye,M5N7FKze,M5N7MKxe,M5N7MKye,M5N7MKze, & - M5N8FKxe,M5N8FKye,M5N8FKze,M5N8MKxe,M5N8MKye,M5N8MKze, & - M5N9FKxe,M5N9FKye,M5N9FKze,M5N9MKxe,M5N9MKye,M5N9MKze, & - M6N1FKxe,M6N1FKye,M6N1FKze,M6N1MKxe,M6N1MKye,M6N1MKze, & - M6N2FKxe,M6N2FKye,M6N2FKze,M6N2MKxe,M6N2MKye,M6N2MKze, & - M6N3FKxe,M6N3FKye,M6N3FKze,M6N3MKxe,M6N3MKye,M6N3MKze, & - M6N4FKxe,M6N4FKye,M6N4FKze,M6N4MKxe,M6N4MKye,M6N4MKze, & - M6N5FKxe,M6N5FKye,M6N5FKze,M6N5MKxe,M6N5MKye,M6N5MKze, & - M6N6FKxe,M6N6FKye,M6N6FKze,M6N6MKxe,M6N6MKye,M6N6MKze, & - M6N7FKxe,M6N7FKye,M6N7FKze,M6N7MKxe,M6N7MKye,M6N7MKze, & - M6N8FKxe,M6N8FKye,M6N8FKze,M6N8MKxe,M6N8MKye,M6N8MKze, & - M6N9FKxe,M6N9FKye,M6N9FKze,M6N9MKxe,M6N9MKye,M6N9MKze, & - M7N1FKxe,M7N1FKye,M7N1FKze,M7N1MKxe,M7N1MKye,M7N1MKze, & - M7N2FKxe,M7N2FKye,M7N2FKze,M7N2MKxe,M7N2MKye,M7N2MKze, & - M7N3FKxe,M7N3FKye,M7N3FKze,M7N3MKxe,M7N3MKye,M7N3MKze, & - M7N4FKxe,M7N4FKye,M7N4FKze,M7N4MKxe,M7N4MKye,M7N4MKze, & - M7N5FKxe,M7N5FKye,M7N5FKze,M7N5MKxe,M7N5MKye,M7N5MKze, & - M7N6FKxe,M7N6FKye,M7N6FKze,M7N6MKxe,M7N6MKye,M7N6MKze, & - M7N7FKxe,M7N7FKye,M7N7FKze,M7N7MKxe,M7N7MKye,M7N7MKze, & - M7N8FKxe,M7N8FKye,M7N8FKze,M7N8MKxe,M7N8MKye,M7N8MKze, & - M7N9FKxe,M7N9FKye,M7N9FKze,M7N9MKxe,M7N9MKye,M7N9MKze, & - M8N1FKxe,M8N1FKye,M8N1FKze,M8N1MKxe,M8N1MKye,M8N1MKze, & - M8N2FKxe,M8N2FKye,M8N2FKze,M8N2MKxe,M8N2MKye,M8N2MKze, & - M8N3FKxe,M8N3FKye,M8N3FKze,M8N3MKxe,M8N3MKye,M8N3MKze, & - M8N4FKxe,M8N4FKye,M8N4FKze,M8N4MKxe,M8N4MKye,M8N4MKze, & - M8N5FKxe,M8N5FKye,M8N5FKze,M8N5MKxe,M8N5MKye,M8N5MKze, & - M8N6FKxe,M8N6FKye,M8N6FKze,M8N6MKxe,M8N6MKye,M8N6MKze, & - M8N7FKxe,M8N7FKye,M8N7FKze,M8N7MKxe,M8N7MKye,M8N7MKze, & - M8N8FKxe,M8N8FKye,M8N8FKze,M8N8MKxe,M8N8MKye,M8N8MKze, & - M8N9FKxe,M8N9FKye,M8N9FKze,M8N9MKxe,M8N9MKye,M8N9MKze, & - M9N1FKxe,M9N1FKye,M9N1FKze,M9N1MKxe,M9N1MKye,M9N1MKze, & - M9N2FKxe,M9N2FKye,M9N2FKze,M9N2MKxe,M9N2MKye,M9N2MKze, & - M9N3FKxe,M9N3FKye,M9N3FKze,M9N3MKxe,M9N3MKye,M9N3MKze, & - M9N4FKxe,M9N4FKye,M9N4FKze,M9N4MKxe,M9N4MKye,M9N4MKze, & - M9N5FKxe,M9N5FKye,M9N5FKze,M9N5MKxe,M9N5MKye,M9N5MKze, & - M9N6FKxe,M9N6FKye,M9N6FKze,M9N6MKxe,M9N6MKye,M9N6MKze, & - M9N7FKxe,M9N7FKye,M9N7FKze,M9N7MKxe,M9N7MKye,M9N7MKze, & - M9N8FKxe,M9N8FKye,M9N8FKze,M9N8MKxe,M9N8MKye,M9N8MKze, & - M9N9FKxe,M9N9FKye,M9N9FKze,M9N9MKxe,M9N9MKye,M9N9MKze /),(/6,9,9/)) - - - - INTEGER, PARAMETER :: MNfmMe(6,9,9) = reshape((/ M1N1FMxe,M1N1FMye,M1N1FMze,M1N1MMxe,M1N1MMye,M1N1MMze, & - M1N2FMxe,M1N2FMye,M1N2FMze,M1N2MMxe,M1N2MMye,M1N2MMze, & - M1N3FMxe,M1N3FMye,M1N3FMze,M1N3MMxe,M1N3MMye,M1N3MMze, & - M1N4FMxe,M1N4FMye,M1N4FMze,M1N4MMxe,M1N4MMye,M1N4MMze, & - M1N5FMxe,M1N5FMye,M1N5FMze,M1N5MMxe,M1N5MMye,M1N5MMze, & - M1N6FMxe,M1N6FMye,M1N6FMze,M1N6MMxe,M1N6MMye,M1N6MMze, & - M1N7FMxe,M1N7FMye,M1N7FMze,M1N7MMxe,M1N7MMye,M1N7MMze, & - M1N8FMxe,M1N8FMye,M1N8FMze,M1N8MMxe,M1N8MMye,M1N8MMze, & - M1N9FMxe,M1N9FMye,M1N9FMze,M1N9MMxe,M1N9MMye,M1N9MMze, & - M2N1FMxe,M2N1FMye,M2N1FMze,M2N1MMxe,M2N1MMye,M2N1MMze, & - M2N2FMxe,M2N2FMye,M2N2FMze,M2N2MMxe,M2N2MMye,M2N2MMze, & - M2N3FMxe,M2N3FMye,M2N3FMze,M2N3MMxe,M2N3MMye,M2N3MMze, & - M2N4FMxe,M2N4FMye,M2N4FMze,M2N4MMxe,M2N4MMye,M2N4MMze, & - M2N5FMxe,M2N5FMye,M2N5FMze,M2N5MMxe,M2N5MMye,M2N5MMze, & - M2N6FMxe,M2N6FMye,M2N6FMze,M2N6MMxe,M2N6MMye,M2N6MMze, & - M2N7FMxe,M2N7FMye,M2N7FMze,M2N7MMxe,M2N7MMye,M2N7MMze, & - M2N8FMxe,M2N8FMye,M2N8FMze,M2N8MMxe,M2N8MMye,M2N8MMze, & - M2N9FMxe,M2N9FMye,M2N9FMze,M2N9MMxe,M2N9MMye,M2N9MMze, & - M3N1FMxe,M3N1FMye,M3N1FMze,M3N1MMxe,M3N1MMye,M3N1MMze, & - M3N2FMxe,M3N2FMye,M3N2FMze,M3N2MMxe,M3N2MMye,M3N2MMze, & - M3N3FMxe,M3N3FMye,M3N3FMze,M3N3MMxe,M3N3MMye,M3N3MMze, & - M3N4FMxe,M3N4FMye,M3N4FMze,M3N4MMxe,M3N4MMye,M3N4MMze, & - M3N5FMxe,M3N5FMye,M3N5FMze,M3N5MMxe,M3N5MMye,M3N5MMze, & - M3N6FMxe,M3N6FMye,M3N6FMze,M3N6MMxe,M3N6MMye,M3N6MMze, & - M3N7FMxe,M3N7FMye,M3N7FMze,M3N7MMxe,M3N7MMye,M3N7MMze, & - M3N8FMxe,M3N8FMye,M3N8FMze,M3N8MMxe,M3N8MMye,M3N8MMze, & - M3N9FMxe,M3N9FMye,M3N9FMze,M3N9MMxe,M3N9MMye,M3N9MMze, & - M4N1FMxe,M4N1FMye,M4N1FMze,M4N1MMxe,M4N1MMye,M4N1MMze, & - M4N2FMxe,M4N2FMye,M4N2FMze,M4N2MMxe,M4N2MMye,M4N2MMze, & - M4N3FMxe,M4N3FMye,M4N3FMze,M4N3MMxe,M4N3MMye,M4N3MMze, & - M4N4FMxe,M4N4FMye,M4N4FMze,M4N4MMxe,M4N4MMye,M4N4MMze, & - M4N5FMxe,M4N5FMye,M4N5FMze,M4N5MMxe,M4N5MMye,M4N5MMze, & - M4N6FMxe,M4N6FMye,M4N6FMze,M4N6MMxe,M4N6MMye,M4N6MMze, & - M4N7FMxe,M4N7FMye,M4N7FMze,M4N7MMxe,M4N7MMye,M4N7MMze, & - M4N8FMxe,M4N8FMye,M4N8FMze,M4N8MMxe,M4N8MMye,M4N8MMze, & - M4N9FMxe,M4N9FMye,M4N9FMze,M4N9MMxe,M4N9MMye,M4N9MMze, & - M5N1FMxe,M5N1FMye,M5N1FMze,M5N1MMxe,M5N1MMye,M5N1MMze, & - M5N2FMxe,M5N2FMye,M5N2FMze,M5N2MMxe,M5N2MMye,M5N2MMze, & - M5N3FMxe,M5N3FMye,M5N3FMze,M5N3MMxe,M5N3MMye,M5N3MMze, & - M5N4FMxe,M5N4FMye,M5N4FMze,M5N4MMxe,M5N4MMye,M5N4MMze, & - M5N5FMxe,M5N5FMye,M5N5FMze,M5N5MMxe,M5N5MMye,M5N5MMze, & - M5N6FMxe,M5N6FMye,M5N6FMze,M5N6MMxe,M5N6MMye,M5N6MMze, & - M5N7FMxe,M5N7FMye,M5N7FMze,M5N7MMxe,M5N7MMye,M5N7MMze, & - M5N8FMxe,M5N8FMye,M5N8FMze,M5N8MMxe,M5N8MMye,M5N8MMze, & - M5N9FMxe,M5N9FMye,M5N9FMze,M5N9MMxe,M5N9MMye,M5N9MMze, & - M6N1FMxe,M6N1FMye,M6N1FMze,M6N1MMxe,M6N1MMye,M6N1MMze, & - M6N2FMxe,M6N2FMye,M6N2FMze,M6N2MMxe,M6N2MMye,M6N2MMze, & - M6N3FMxe,M6N3FMye,M6N3FMze,M6N3MMxe,M6N3MMye,M6N3MMze, & - M6N4FMxe,M6N4FMye,M6N4FMze,M6N4MMxe,M6N4MMye,M6N4MMze, & - M6N5FMxe,M6N5FMye,M6N5FMze,M6N5MMxe,M6N5MMye,M6N5MMze, & - M6N6FMxe,M6N6FMye,M6N6FMze,M6N6MMxe,M6N6MMye,M6N6MMze, & - M6N7FMxe,M6N7FMye,M6N7FMze,M6N7MMxe,M6N7MMye,M6N7MMze, & - M6N8FMxe,M6N8FMye,M6N8FMze,M6N8MMxe,M6N8MMye,M6N8MMze, & - M6N9FMxe,M6N9FMye,M6N9FMze,M6N9MMxe,M6N9MMye,M6N9MMze, & - M7N1FMxe,M7N1FMye,M7N1FMze,M7N1MMxe,M7N1MMye,M7N1MMze, & - M7N2FMxe,M7N2FMye,M7N2FMze,M7N2MMxe,M7N2MMye,M7N2MMze, & - M7N3FMxe,M7N3FMye,M7N3FMze,M7N3MMxe,M7N3MMye,M7N3MMze, & - M7N4FMxe,M7N4FMye,M7N4FMze,M7N4MMxe,M7N4MMye,M7N4MMze, & - M7N5FMxe,M7N5FMye,M7N5FMze,M7N5MMxe,M7N5MMye,M7N5MMze, & - M7N6FMxe,M7N6FMye,M7N6FMze,M7N6MMxe,M7N6MMye,M7N6MMze, & - M7N7FMxe,M7N7FMye,M7N7FMze,M7N7MMxe,M7N7MMye,M7N7MMze, & - M7N8FMxe,M7N8FMye,M7N8FMze,M7N8MMxe,M7N8MMye,M7N8MMze, & - M7N9FMxe,M7N9FMye,M7N9FMze,M7N9MMxe,M7N9MMye,M7N9MMze, & - M8N1FMxe,M8N1FMye,M8N1FMze,M8N1MMxe,M8N1MMye,M8N1MMze, & - M8N2FMxe,M8N2FMye,M8N2FMze,M8N2MMxe,M8N2MMye,M8N2MMze, & - M8N3FMxe,M8N3FMye,M8N3FMze,M8N3MMxe,M8N3MMye,M8N3MMze, & - M8N4FMxe,M8N4FMye,M8N4FMze,M8N4MMxe,M8N4MMye,M8N4MMze, & - M8N5FMxe,M8N5FMye,M8N5FMze,M8N5MMxe,M8N5MMye,M8N5MMze, & - M8N6FMxe,M8N6FMye,M8N6FMze,M8N6MMxe,M8N6MMye,M8N6MMze, & - M8N7FMxe,M8N7FMye,M8N7FMze,M8N7MMxe,M8N7MMye,M8N7MMze, & - M8N8FMxe,M8N8FMye,M8N8FMze,M8N8MMxe,M8N8MMye,M8N8MMze, & - M8N9FMxe,M8N9FMye,M8N9FMze,M8N9MMxe,M8N9MMye,M8N9MMze, & - M9N1FMxe,M9N1FMye,M9N1FMze,M9N1MMxe,M9N1MMye,M9N1MMze, & - M9N2FMxe,M9N2FMye,M9N2FMze,M9N2MMxe,M9N2MMye,M9N2MMze, & - M9N3FMxe,M9N3FMye,M9N3FMze,M9N3MMxe,M9N3MMye,M9N3MMze, & - M9N4FMxe,M9N4FMye,M9N4FMze,M9N4MMxe,M9N4MMye,M9N4MMze, & - M9N5FMxe,M9N5FMye,M9N5FMze,M9N5MMxe,M9N5MMye,M9N5MMze, & - M9N6FMxe,M9N6FMye,M9N6FMze,M9N6MMxe,M9N6MMye,M9N6MMze, & - M9N7FMxe,M9N7FMye,M9N7FMze,M9N7MMxe,M9N7MMye,M9N7MMze, & - M9N8FMxe,M9N8FMye,M9N8FMze,M9N8MMxe,M9N8MMye,M9N8MMze, & - M9N9FMxe,M9N9FMye,M9N9FMze,M9N9MMxe,M9N9MMye,M9N9MMze /),(/6,9,9/)) - - INTEGER, PARAMETER :: MNTDss(3,9,9) = reshape((/M1N1TDxss,M1N1TDyss,M1N1TDzss, & - M1N2TDxss,M1N2TDyss,M1N2TDzss, & - M1N3TDxss,M1N3TDyss,M1N3TDzss, & - M1N4TDxss,M1N4TDyss,M1N4TDzss, & - M1N5TDxss,M1N5TDyss,M1N5TDzss, & - M1N6TDxss,M1N6TDyss,M1N6TDzss, & - M1N7TDxss,M1N7TDyss,M1N7TDzss, & - M1N8TDxss,M1N8TDyss,M1N8TDzss, & - M1N9TDxss,M1N9TDyss,M1N9TDzss, & - M2N1TDxss,M2N1TDyss,M2N1TDzss, & - M2N2TDxss,M2N2TDyss,M2N2TDzss, & - M2N3TDxss,M2N3TDyss,M2N3TDzss, & - M2N4TDxss,M2N4TDyss,M2N4TDzss, & - M2N5TDxss,M2N5TDyss,M2N5TDzss, & - M2N6TDxss,M2N6TDyss,M2N6TDzss, & - M2N7TDxss,M2N7TDyss,M2N7TDzss, & - M2N8TDxss,M2N8TDyss,M2N8TDzss, & - M2N9TDxss,M2N9TDyss,M2N9TDzss, & - M3N1TDxss,M3N1TDyss,M3N1TDzss, & - M3N2TDxss,M3N2TDyss,M3N2TDzss, & - M3N3TDxss,M3N3TDyss,M3N3TDzss, & - M3N4TDxss,M3N4TDyss,M3N4TDzss, & - M3N5TDxss,M3N5TDyss,M3N5TDzss, & - M3N6TDxss,M3N6TDyss,M3N6TDzss, & - M3N7TDxss,M3N7TDyss,M3N7TDzss, & - M3N8TDxss,M3N8TDyss,M3N8TDzss, & - M3N9TDxss,M3N9TDyss,M3N9TDzss, & - M4N1TDxss,M4N1TDyss,M4N1TDzss, & - M4N2TDxss,M4N2TDyss,M4N2TDzss, & - M4N3TDxss,M4N3TDyss,M4N3TDzss, & - M4N4TDxss,M4N4TDyss,M4N4TDzss, & - M4N5TDxss,M4N5TDyss,M4N5TDzss, & - M4N6TDxss,M4N6TDyss,M4N6TDzss, & - M4N7TDxss,M4N7TDyss,M4N7TDzss, & - M4N8TDxss,M4N8TDyss,M4N8TDzss, & - M4N9TDxss,M4N9TDyss,M4N9TDzss, & - M5N1TDxss,M5N1TDyss,M5N1TDzss, & - M5N2TDxss,M5N2TDyss,M5N2TDzss, & - M5N3TDxss,M5N3TDyss,M5N3TDzss, & - M5N4TDxss,M5N4TDyss,M5N4TDzss, & - M5N5TDxss,M5N5TDyss,M5N5TDzss, & - M5N6TDxss,M5N6TDyss,M5N6TDzss, & - M5N7TDxss,M5N7TDyss,M5N7TDzss, & - M5N8TDxss,M5N8TDyss,M5N8TDzss, & - M5N9TDxss,M5N9TDyss,M5N9TDzss, & - M6N1TDxss,M6N1TDyss,M6N1TDzss, & - M6N2TDxss,M6N2TDyss,M6N2TDzss, & - M6N3TDxss,M6N3TDyss,M6N3TDzss, & - M6N4TDxss,M6N4TDyss,M6N4TDzss, & - M6N5TDxss,M6N5TDyss,M6N5TDzss, & - M6N6TDxss,M6N6TDyss,M6N6TDzss, & - M6N7TDxss,M6N7TDyss,M6N7TDzss, & - M6N8TDxss,M6N8TDyss,M6N8TDzss, & - M6N9TDxss,M6N9TDyss,M6N9TDzss, & - M7N1TDxss,M7N1TDyss,M7N1TDzss, & - M7N2TDxss,M7N2TDyss,M7N2TDzss, & - M7N3TDxss,M7N3TDyss,M7N3TDzss, & - M7N4TDxss,M7N4TDyss,M7N4TDzss, & - M7N5TDxss,M7N5TDyss,M7N5TDzss, & - M7N6TDxss,M7N6TDyss,M7N6TDzss, & - M7N7TDxss,M7N7TDyss,M7N7TDzss, & - M7N8TDxss,M7N8TDyss,M7N8TDzss, & - M7N9TDxss,M7N9TDyss,M7N9TDzss, & - M8N1TDxss,M8N1TDyss,M8N1TDzss, & - M8N2TDxss,M8N2TDyss,M8N2TDzss, & - M8N3TDxss,M8N3TDyss,M8N3TDzss, & - M8N4TDxss,M8N4TDyss,M8N4TDzss, & - M8N5TDxss,M8N5TDyss,M8N5TDzss, & - M8N6TDxss,M8N6TDyss,M8N6TDzss, & - M8N7TDxss,M8N7TDyss,M8N7TDzss, & - M8N8TDxss,M8N8TDyss,M8N8TDzss, & - M8N9TDxss,M8N9TDyss,M8N9TDzss, & - M9N1TDxss,M9N1TDyss,M9N1TDzss, & - M9N2TDxss,M9N2TDyss,M9N2TDzss, & - M9N3TDxss,M9N3TDyss,M9N3TDzss, & - M9N4TDxss,M9N4TDyss,M9N4TDzss, & - M9N5TDxss,M9N5TDyss,M9N5TDzss, & - M9N6TDxss,M9N6TDyss,M9N6TDzss, & - M9N7TDxss,M9N7TDyss,M9N7TDzss, & - M9N8TDxss,M9N8TDyss,M9N8TDzss, & - M9N9TDxss,M9N9TDyss,M9N9TDzss/), (/3,9,9/)) + INTEGER(IntKi), PARAMETER ::MNfmMe(6,9,99) = reshape((/ & + M01N1FMxe, M01N1FMye, M01N1FMze, M01N1MMxe, M01N1MMye, M01N1MMze, M01N2FMxe, M01N2FMye, M01N2FMze, M01N2MMxe, M01N2MMye, M01N2MMze, & + M01N3FMxe, M01N3FMye, M01N3FMze, M01N3MMxe, M01N3MMye, M01N3MMze, M01N4FMxe, M01N4FMye, M01N4FMze, M01N4MMxe, M01N4MMye, M01N4MMze, & + M01N5FMxe, M01N5FMye, M01N5FMze, M01N5MMxe, M01N5MMye, M01N5MMze, M01N6FMxe, M01N6FMye, M01N6FMze, M01N6MMxe, M01N6MMye, M01N6MMze, & + M01N7FMxe, M01N7FMye, M01N7FMze, M01N7MMxe, M01N7MMye, M01N7MMze, M01N8FMxe, M01N8FMye, M01N8FMze, M01N8MMxe, M01N8MMye, M01N8MMze, & + M01N9FMxe, M01N9FMye, M01N9FMze, M01N9MMxe, M01N9MMye, M01N9MMze, M02N1FMxe, M02N1FMye, M02N1FMze, M02N1MMxe, M02N1MMye, M02N1MMze, & + M02N2FMxe, M02N2FMye, M02N2FMze, M02N2MMxe, M02N2MMye, M02N2MMze, M02N3FMxe, M02N3FMye, M02N3FMze, M02N3MMxe, M02N3MMye, M02N3MMze, & + M02N4FMxe, M02N4FMye, M02N4FMze, M02N4MMxe, M02N4MMye, M02N4MMze, M02N5FMxe, M02N5FMye, M02N5FMze, M02N5MMxe, M02N5MMye, M02N5MMze, & + M02N6FMxe, M02N6FMye, M02N6FMze, M02N6MMxe, M02N6MMye, M02N6MMze, M02N7FMxe, M02N7FMye, M02N7FMze, M02N7MMxe, M02N7MMye, M02N7MMze, & + M02N8FMxe, M02N8FMye, M02N8FMze, M02N8MMxe, M02N8MMye, M02N8MMze, M02N9FMxe, M02N9FMye, M02N9FMze, M02N9MMxe, M02N9MMye, M02N9MMze, & + M03N1FMxe, M03N1FMye, M03N1FMze, M03N1MMxe, M03N1MMye, M03N1MMze, M03N2FMxe, M03N2FMye, M03N2FMze, M03N2MMxe, M03N2MMye, M03N2MMze, & + M03N3FMxe, M03N3FMye, M03N3FMze, M03N3MMxe, M03N3MMye, M03N3MMze, M03N4FMxe, M03N4FMye, M03N4FMze, M03N4MMxe, M03N4MMye, M03N4MMze, & + M03N5FMxe, M03N5FMye, M03N5FMze, M03N5MMxe, M03N5MMye, M03N5MMze, M03N6FMxe, M03N6FMye, M03N6FMze, M03N6MMxe, M03N6MMye, M03N6MMze, & + M03N7FMxe, M03N7FMye, M03N7FMze, M03N7MMxe, M03N7MMye, M03N7MMze, M03N8FMxe, M03N8FMye, M03N8FMze, M03N8MMxe, M03N8MMye, M03N8MMze, & + M03N9FMxe, M03N9FMye, M03N9FMze, M03N9MMxe, M03N9MMye, M03N9MMze, M04N1FMxe, M04N1FMye, M04N1FMze, M04N1MMxe, M04N1MMye, M04N1MMze, & + M04N2FMxe, M04N2FMye, M04N2FMze, M04N2MMxe, M04N2MMye, M04N2MMze, M04N3FMxe, M04N3FMye, M04N3FMze, M04N3MMxe, M04N3MMye, M04N3MMze, & + M04N4FMxe, M04N4FMye, M04N4FMze, M04N4MMxe, M04N4MMye, M04N4MMze, M04N5FMxe, M04N5FMye, M04N5FMze, M04N5MMxe, M04N5MMye, M04N5MMze, & + M04N6FMxe, M04N6FMye, M04N6FMze, M04N6MMxe, M04N6MMye, M04N6MMze, M04N7FMxe, M04N7FMye, M04N7FMze, M04N7MMxe, M04N7MMye, M04N7MMze, & + M04N8FMxe, M04N8FMye, M04N8FMze, M04N8MMxe, M04N8MMye, M04N8MMze, M04N9FMxe, M04N9FMye, M04N9FMze, M04N9MMxe, M04N9MMye, M04N9MMze, & + M05N1FMxe, M05N1FMye, M05N1FMze, M05N1MMxe, M05N1MMye, M05N1MMze, M05N2FMxe, M05N2FMye, M05N2FMze, M05N2MMxe, M05N2MMye, M05N2MMze, & + M05N3FMxe, M05N3FMye, M05N3FMze, M05N3MMxe, M05N3MMye, M05N3MMze, M05N4FMxe, M05N4FMye, M05N4FMze, M05N4MMxe, M05N4MMye, M05N4MMze, & + M05N5FMxe, M05N5FMye, M05N5FMze, M05N5MMxe, M05N5MMye, M05N5MMze, M05N6FMxe, M05N6FMye, M05N6FMze, M05N6MMxe, M05N6MMye, M05N6MMze, & + M05N7FMxe, M05N7FMye, M05N7FMze, M05N7MMxe, M05N7MMye, M05N7MMze, M05N8FMxe, M05N8FMye, M05N8FMze, M05N8MMxe, M05N8MMye, M05N8MMze, & + M05N9FMxe, M05N9FMye, M05N9FMze, M05N9MMxe, M05N9MMye, M05N9MMze, M06N1FMxe, M06N1FMye, M06N1FMze, M06N1MMxe, M06N1MMye, M06N1MMze, & + M06N2FMxe, M06N2FMye, M06N2FMze, M06N2MMxe, M06N2MMye, M06N2MMze, M06N3FMxe, M06N3FMye, M06N3FMze, M06N3MMxe, M06N3MMye, M06N3MMze, & + M06N4FMxe, M06N4FMye, M06N4FMze, M06N4MMxe, M06N4MMye, M06N4MMze, M06N5FMxe, M06N5FMye, M06N5FMze, M06N5MMxe, M06N5MMye, M06N5MMze, & + M06N6FMxe, M06N6FMye, M06N6FMze, M06N6MMxe, M06N6MMye, M06N6MMze, M06N7FMxe, M06N7FMye, M06N7FMze, M06N7MMxe, M06N7MMye, M06N7MMze, & + M06N8FMxe, M06N8FMye, M06N8FMze, M06N8MMxe, M06N8MMye, M06N8MMze, M06N9FMxe, M06N9FMye, M06N9FMze, M06N9MMxe, M06N9MMye, M06N9MMze, & + M07N1FMxe, M07N1FMye, M07N1FMze, M07N1MMxe, M07N1MMye, M07N1MMze, M07N2FMxe, M07N2FMye, M07N2FMze, M07N2MMxe, M07N2MMye, M07N2MMze, & + M07N3FMxe, M07N3FMye, M07N3FMze, M07N3MMxe, M07N3MMye, M07N3MMze, M07N4FMxe, M07N4FMye, M07N4FMze, M07N4MMxe, M07N4MMye, M07N4MMze, & + M07N5FMxe, M07N5FMye, M07N5FMze, M07N5MMxe, M07N5MMye, M07N5MMze, M07N6FMxe, M07N6FMye, M07N6FMze, M07N6MMxe, M07N6MMye, M07N6MMze, & + M07N7FMxe, M07N7FMye, M07N7FMze, M07N7MMxe, M07N7MMye, M07N7MMze, M07N8FMxe, M07N8FMye, M07N8FMze, M07N8MMxe, M07N8MMye, M07N8MMze, & + M07N9FMxe, M07N9FMye, M07N9FMze, M07N9MMxe, M07N9MMye, M07N9MMze, M08N1FMxe, M08N1FMye, M08N1FMze, M08N1MMxe, M08N1MMye, M08N1MMze, & + M08N2FMxe, M08N2FMye, M08N2FMze, M08N2MMxe, M08N2MMye, M08N2MMze, M08N3FMxe, M08N3FMye, M08N3FMze, M08N3MMxe, M08N3MMye, M08N3MMze, & + M08N4FMxe, M08N4FMye, M08N4FMze, M08N4MMxe, M08N4MMye, M08N4MMze, M08N5FMxe, M08N5FMye, M08N5FMze, M08N5MMxe, M08N5MMye, M08N5MMze, & + M08N6FMxe, M08N6FMye, M08N6FMze, M08N6MMxe, M08N6MMye, M08N6MMze, M08N7FMxe, M08N7FMye, M08N7FMze, M08N7MMxe, M08N7MMye, M08N7MMze, & + M08N8FMxe, M08N8FMye, M08N8FMze, M08N8MMxe, M08N8MMye, M08N8MMze, M08N9FMxe, M08N9FMye, M08N9FMze, M08N9MMxe, M08N9MMye, M08N9MMze, & + M09N1FMxe, M09N1FMye, M09N1FMze, M09N1MMxe, M09N1MMye, M09N1MMze, M09N2FMxe, M09N2FMye, M09N2FMze, M09N2MMxe, M09N2MMye, M09N2MMze, & + M09N3FMxe, M09N3FMye, M09N3FMze, M09N3MMxe, M09N3MMye, M09N3MMze, M09N4FMxe, M09N4FMye, M09N4FMze, M09N4MMxe, M09N4MMye, M09N4MMze, & + M09N5FMxe, M09N5FMye, M09N5FMze, M09N5MMxe, M09N5MMye, M09N5MMze, M09N6FMxe, M09N6FMye, M09N6FMze, M09N6MMxe, M09N6MMye, M09N6MMze, & + M09N7FMxe, M09N7FMye, M09N7FMze, M09N7MMxe, M09N7MMye, M09N7MMze, M09N8FMxe, M09N8FMye, M09N8FMze, M09N8MMxe, M09N8MMye, M09N8MMze, & + M09N9FMxe, M09N9FMye, M09N9FMze, M09N9MMxe, M09N9MMye, M09N9MMze, M10N1FMxe, M10N1FMye, M10N1FMze, M10N1MMxe, M10N1MMye, M10N1MMze, & + M10N2FMxe, M10N2FMye, M10N2FMze, M10N2MMxe, M10N2MMye, M10N2MMze, M10N3FMxe, M10N3FMye, M10N3FMze, M10N3MMxe, M10N3MMye, M10N3MMze, & + M10N4FMxe, M10N4FMye, M10N4FMze, M10N4MMxe, M10N4MMye, M10N4MMze, M10N5FMxe, M10N5FMye, M10N5FMze, M10N5MMxe, M10N5MMye, M10N5MMze, & + M10N6FMxe, M10N6FMye, M10N6FMze, M10N6MMxe, M10N6MMye, M10N6MMze, M10N7FMxe, M10N7FMye, M10N7FMze, M10N7MMxe, M10N7MMye, M10N7MMze, & + M10N8FMxe, M10N8FMye, M10N8FMze, M10N8MMxe, M10N8MMye, M10N8MMze, M10N9FMxe, M10N9FMye, M10N9FMze, M10N9MMxe, M10N9MMye, M10N9MMze, & + M11N1FMxe, M11N1FMye, M11N1FMze, M11N1MMxe, M11N1MMye, M11N1MMze, M11N2FMxe, M11N2FMye, M11N2FMze, M11N2MMxe, M11N2MMye, M11N2MMze, & + M11N3FMxe, M11N3FMye, M11N3FMze, M11N3MMxe, M11N3MMye, M11N3MMze, M11N4FMxe, M11N4FMye, M11N4FMze, M11N4MMxe, M11N4MMye, M11N4MMze, & + M11N5FMxe, M11N5FMye, M11N5FMze, M11N5MMxe, M11N5MMye, M11N5MMze, M11N6FMxe, M11N6FMye, M11N6FMze, M11N6MMxe, M11N6MMye, M11N6MMze, & + M11N7FMxe, M11N7FMye, M11N7FMze, M11N7MMxe, M11N7MMye, M11N7MMze, M11N8FMxe, M11N8FMye, M11N8FMze, M11N8MMxe, M11N8MMye, M11N8MMze, & + M11N9FMxe, M11N9FMye, M11N9FMze, M11N9MMxe, M11N9MMye, M11N9MMze, M12N1FMxe, M12N1FMye, M12N1FMze, M12N1MMxe, M12N1MMye, M12N1MMze, & + M12N2FMxe, M12N2FMye, M12N2FMze, M12N2MMxe, M12N2MMye, M12N2MMze, M12N3FMxe, M12N3FMye, M12N3FMze, M12N3MMxe, M12N3MMye, M12N3MMze, & + M12N4FMxe, M12N4FMye, M12N4FMze, M12N4MMxe, M12N4MMye, M12N4MMze, M12N5FMxe, M12N5FMye, M12N5FMze, M12N5MMxe, M12N5MMye, M12N5MMze, & + M12N6FMxe, M12N6FMye, M12N6FMze, M12N6MMxe, M12N6MMye, M12N6MMze, M12N7FMxe, M12N7FMye, M12N7FMze, M12N7MMxe, M12N7MMye, M12N7MMze, & + M12N8FMxe, M12N8FMye, M12N8FMze, M12N8MMxe, M12N8MMye, M12N8MMze, M12N9FMxe, M12N9FMye, M12N9FMze, M12N9MMxe, M12N9MMye, M12N9MMze, & + M13N1FMxe, M13N1FMye, M13N1FMze, M13N1MMxe, M13N1MMye, M13N1MMze, M13N2FMxe, M13N2FMye, M13N2FMze, M13N2MMxe, M13N2MMye, M13N2MMze, & + M13N3FMxe, M13N3FMye, M13N3FMze, M13N3MMxe, M13N3MMye, M13N3MMze, M13N4FMxe, M13N4FMye, M13N4FMze, M13N4MMxe, M13N4MMye, M13N4MMze, & + M13N5FMxe, M13N5FMye, M13N5FMze, M13N5MMxe, M13N5MMye, M13N5MMze, M13N6FMxe, M13N6FMye, M13N6FMze, M13N6MMxe, M13N6MMye, M13N6MMze, & + M13N7FMxe, M13N7FMye, M13N7FMze, M13N7MMxe, M13N7MMye, M13N7MMze, M13N8FMxe, M13N8FMye, M13N8FMze, M13N8MMxe, M13N8MMye, M13N8MMze, & + M13N9FMxe, M13N9FMye, M13N9FMze, M13N9MMxe, M13N9MMye, M13N9MMze, M14N1FMxe, M14N1FMye, M14N1FMze, M14N1MMxe, M14N1MMye, M14N1MMze, & + M14N2FMxe, M14N2FMye, M14N2FMze, M14N2MMxe, M14N2MMye, M14N2MMze, M14N3FMxe, M14N3FMye, M14N3FMze, M14N3MMxe, M14N3MMye, M14N3MMze, & + M14N4FMxe, M14N4FMye, M14N4FMze, M14N4MMxe, M14N4MMye, M14N4MMze, M14N5FMxe, M14N5FMye, M14N5FMze, M14N5MMxe, M14N5MMye, M14N5MMze, & + M14N6FMxe, M14N6FMye, M14N6FMze, M14N6MMxe, M14N6MMye, M14N6MMze, M14N7FMxe, M14N7FMye, M14N7FMze, M14N7MMxe, M14N7MMye, M14N7MMze, & + M14N8FMxe, M14N8FMye, M14N8FMze, M14N8MMxe, M14N8MMye, M14N8MMze, M14N9FMxe, M14N9FMye, M14N9FMze, M14N9MMxe, M14N9MMye, M14N9MMze, & + M15N1FMxe, M15N1FMye, M15N1FMze, M15N1MMxe, M15N1MMye, M15N1MMze, M15N2FMxe, M15N2FMye, M15N2FMze, M15N2MMxe, M15N2MMye, M15N2MMze, & + M15N3FMxe, M15N3FMye, M15N3FMze, M15N3MMxe, M15N3MMye, M15N3MMze, M15N4FMxe, M15N4FMye, M15N4FMze, M15N4MMxe, M15N4MMye, M15N4MMze, & + M15N5FMxe, M15N5FMye, M15N5FMze, M15N5MMxe, M15N5MMye, M15N5MMze, M15N6FMxe, M15N6FMye, M15N6FMze, M15N6MMxe, M15N6MMye, M15N6MMze, & + M15N7FMxe, M15N7FMye, M15N7FMze, M15N7MMxe, M15N7MMye, M15N7MMze, M15N8FMxe, M15N8FMye, M15N8FMze, M15N8MMxe, M15N8MMye, M15N8MMze, & + M15N9FMxe, M15N9FMye, M15N9FMze, M15N9MMxe, M15N9MMye, M15N9MMze, M16N1FMxe, M16N1FMye, M16N1FMze, M16N1MMxe, M16N1MMye, M16N1MMze, & + M16N2FMxe, M16N2FMye, M16N2FMze, M16N2MMxe, M16N2MMye, M16N2MMze, M16N3FMxe, M16N3FMye, M16N3FMze, M16N3MMxe, M16N3MMye, M16N3MMze, & + M16N4FMxe, M16N4FMye, M16N4FMze, M16N4MMxe, M16N4MMye, M16N4MMze, M16N5FMxe, M16N5FMye, M16N5FMze, M16N5MMxe, M16N5MMye, M16N5MMze, & + M16N6FMxe, M16N6FMye, M16N6FMze, M16N6MMxe, M16N6MMye, M16N6MMze, M16N7FMxe, M16N7FMye, M16N7FMze, M16N7MMxe, M16N7MMye, M16N7MMze, & + M16N8FMxe, M16N8FMye, M16N8FMze, M16N8MMxe, M16N8MMye, M16N8MMze, M16N9FMxe, M16N9FMye, M16N9FMze, M16N9MMxe, M16N9MMye, M16N9MMze, & + M17N1FMxe, M17N1FMye, M17N1FMze, M17N1MMxe, M17N1MMye, M17N1MMze, M17N2FMxe, M17N2FMye, M17N2FMze, M17N2MMxe, M17N2MMye, M17N2MMze, & + M17N3FMxe, M17N3FMye, M17N3FMze, M17N3MMxe, M17N3MMye, M17N3MMze, M17N4FMxe, M17N4FMye, M17N4FMze, M17N4MMxe, M17N4MMye, M17N4MMze, & + M17N5FMxe, M17N5FMye, M17N5FMze, M17N5MMxe, M17N5MMye, M17N5MMze, M17N6FMxe, M17N6FMye, M17N6FMze, M17N6MMxe, M17N6MMye, M17N6MMze, & + M17N7FMxe, M17N7FMye, M17N7FMze, M17N7MMxe, M17N7MMye, M17N7MMze, M17N8FMxe, M17N8FMye, M17N8FMze, M17N8MMxe, M17N8MMye, M17N8MMze, & + M17N9FMxe, M17N9FMye, M17N9FMze, M17N9MMxe, M17N9MMye, M17N9MMze, M18N1FMxe, M18N1FMye, M18N1FMze, M18N1MMxe, M18N1MMye, M18N1MMze, & + M18N2FMxe, M18N2FMye, M18N2FMze, M18N2MMxe, M18N2MMye, M18N2MMze, M18N3FMxe, M18N3FMye, M18N3FMze, M18N3MMxe, M18N3MMye, M18N3MMze, & + M18N4FMxe, M18N4FMye, M18N4FMze, M18N4MMxe, M18N4MMye, M18N4MMze, M18N5FMxe, M18N5FMye, M18N5FMze, M18N5MMxe, M18N5MMye, M18N5MMze, & + M18N6FMxe, M18N6FMye, M18N6FMze, M18N6MMxe, M18N6MMye, M18N6MMze, M18N7FMxe, M18N7FMye, M18N7FMze, M18N7MMxe, M18N7MMye, M18N7MMze, & + M18N8FMxe, M18N8FMye, M18N8FMze, M18N8MMxe, M18N8MMye, M18N8MMze, M18N9FMxe, M18N9FMye, M18N9FMze, M18N9MMxe, M18N9MMye, M18N9MMze, & + M19N1FMxe, M19N1FMye, M19N1FMze, M19N1MMxe, M19N1MMye, M19N1MMze, M19N2FMxe, M19N2FMye, M19N2FMze, M19N2MMxe, M19N2MMye, M19N2MMze, & + M19N3FMxe, M19N3FMye, M19N3FMze, M19N3MMxe, M19N3MMye, M19N3MMze, M19N4FMxe, M19N4FMye, M19N4FMze, M19N4MMxe, M19N4MMye, M19N4MMze, & + M19N5FMxe, M19N5FMye, M19N5FMze, M19N5MMxe, M19N5MMye, M19N5MMze, M19N6FMxe, M19N6FMye, M19N6FMze, M19N6MMxe, M19N6MMye, M19N6MMze, & + M19N7FMxe, M19N7FMye, M19N7FMze, M19N7MMxe, M19N7MMye, M19N7MMze, M19N8FMxe, M19N8FMye, M19N8FMze, M19N8MMxe, M19N8MMye, M19N8MMze, & + M19N9FMxe, M19N9FMye, M19N9FMze, M19N9MMxe, M19N9MMye, M19N9MMze, M20N1FMxe, M20N1FMye, M20N1FMze, M20N1MMxe, M20N1MMye, M20N1MMze, & + M20N2FMxe, M20N2FMye, M20N2FMze, M20N2MMxe, M20N2MMye, M20N2MMze, M20N3FMxe, M20N3FMye, M20N3FMze, M20N3MMxe, M20N3MMye, M20N3MMze, & + M20N4FMxe, M20N4FMye, M20N4FMze, M20N4MMxe, M20N4MMye, M20N4MMze, M20N5FMxe, M20N5FMye, M20N5FMze, M20N5MMxe, M20N5MMye, M20N5MMze, & + M20N6FMxe, M20N6FMye, M20N6FMze, M20N6MMxe, M20N6MMye, M20N6MMze, M20N7FMxe, M20N7FMye, M20N7FMze, M20N7MMxe, M20N7MMye, M20N7MMze, & + M20N8FMxe, M20N8FMye, M20N8FMze, M20N8MMxe, M20N8MMye, M20N8MMze, M20N9FMxe, M20N9FMye, M20N9FMze, M20N9MMxe, M20N9MMye, M20N9MMze, & + M21N1FMxe, M21N1FMye, M21N1FMze, M21N1MMxe, M21N1MMye, M21N1MMze, M21N2FMxe, M21N2FMye, M21N2FMze, M21N2MMxe, M21N2MMye, M21N2MMze, & + M21N3FMxe, M21N3FMye, M21N3FMze, M21N3MMxe, M21N3MMye, M21N3MMze, M21N4FMxe, M21N4FMye, M21N4FMze, M21N4MMxe, M21N4MMye, M21N4MMze, & + M21N5FMxe, M21N5FMye, M21N5FMze, M21N5MMxe, M21N5MMye, M21N5MMze, M21N6FMxe, M21N6FMye, M21N6FMze, M21N6MMxe, M21N6MMye, M21N6MMze, & + M21N7FMxe, M21N7FMye, M21N7FMze, M21N7MMxe, M21N7MMye, M21N7MMze, M21N8FMxe, M21N8FMye, M21N8FMze, M21N8MMxe, M21N8MMye, M21N8MMze, & + M21N9FMxe, M21N9FMye, M21N9FMze, M21N9MMxe, M21N9MMye, M21N9MMze, M22N1FMxe, M22N1FMye, M22N1FMze, M22N1MMxe, M22N1MMye, M22N1MMze, & + M22N2FMxe, M22N2FMye, M22N2FMze, M22N2MMxe, M22N2MMye, M22N2MMze, M22N3FMxe, M22N3FMye, M22N3FMze, M22N3MMxe, M22N3MMye, M22N3MMze, & + M22N4FMxe, M22N4FMye, M22N4FMze, M22N4MMxe, M22N4MMye, M22N4MMze, M22N5FMxe, M22N5FMye, M22N5FMze, M22N5MMxe, M22N5MMye, M22N5MMze, & + M22N6FMxe, M22N6FMye, M22N6FMze, M22N6MMxe, M22N6MMye, M22N6MMze, M22N7FMxe, M22N7FMye, M22N7FMze, M22N7MMxe, M22N7MMye, M22N7MMze, & + M22N8FMxe, M22N8FMye, M22N8FMze, M22N8MMxe, M22N8MMye, M22N8MMze, M22N9FMxe, M22N9FMye, M22N9FMze, M22N9MMxe, M22N9MMye, M22N9MMze, & + M23N1FMxe, M23N1FMye, M23N1FMze, M23N1MMxe, M23N1MMye, M23N1MMze, M23N2FMxe, M23N2FMye, M23N2FMze, M23N2MMxe, M23N2MMye, M23N2MMze, & + M23N3FMxe, M23N3FMye, M23N3FMze, M23N3MMxe, M23N3MMye, M23N3MMze, M23N4FMxe, M23N4FMye, M23N4FMze, M23N4MMxe, M23N4MMye, M23N4MMze, & + M23N5FMxe, M23N5FMye, M23N5FMze, M23N5MMxe, M23N5MMye, M23N5MMze, M23N6FMxe, M23N6FMye, M23N6FMze, M23N6MMxe, M23N6MMye, M23N6MMze, & + M23N7FMxe, M23N7FMye, M23N7FMze, M23N7MMxe, M23N7MMye, M23N7MMze, M23N8FMxe, M23N8FMye, M23N8FMze, M23N8MMxe, M23N8MMye, M23N8MMze, & + M23N9FMxe, M23N9FMye, M23N9FMze, M23N9MMxe, M23N9MMye, M23N9MMze, M24N1FMxe, M24N1FMye, M24N1FMze, M24N1MMxe, M24N1MMye, M24N1MMze, & + M24N2FMxe, M24N2FMye, M24N2FMze, M24N2MMxe, M24N2MMye, M24N2MMze, M24N3FMxe, M24N3FMye, M24N3FMze, M24N3MMxe, M24N3MMye, M24N3MMze, & + M24N4FMxe, M24N4FMye, M24N4FMze, M24N4MMxe, M24N4MMye, M24N4MMze, M24N5FMxe, M24N5FMye, M24N5FMze, M24N5MMxe, M24N5MMye, M24N5MMze, & + M24N6FMxe, M24N6FMye, M24N6FMze, M24N6MMxe, M24N6MMye, M24N6MMze, M24N7FMxe, M24N7FMye, M24N7FMze, M24N7MMxe, M24N7MMye, M24N7MMze, & + M24N8FMxe, M24N8FMye, M24N8FMze, M24N8MMxe, M24N8MMye, M24N8MMze, M24N9FMxe, M24N9FMye, M24N9FMze, M24N9MMxe, M24N9MMye, M24N9MMze, & + M25N1FMxe, M25N1FMye, M25N1FMze, M25N1MMxe, M25N1MMye, M25N1MMze, M25N2FMxe, M25N2FMye, M25N2FMze, M25N2MMxe, M25N2MMye, M25N2MMze, & + M25N3FMxe, M25N3FMye, M25N3FMze, M25N3MMxe, M25N3MMye, M25N3MMze, M25N4FMxe, M25N4FMye, M25N4FMze, M25N4MMxe, M25N4MMye, M25N4MMze, & + M25N5FMxe, M25N5FMye, M25N5FMze, M25N5MMxe, M25N5MMye, M25N5MMze, M25N6FMxe, M25N6FMye, M25N6FMze, M25N6MMxe, M25N6MMye, M25N6MMze, & + M25N7FMxe, M25N7FMye, M25N7FMze, M25N7MMxe, M25N7MMye, M25N7MMze, M25N8FMxe, M25N8FMye, M25N8FMze, M25N8MMxe, M25N8MMye, M25N8MMze, & + M25N9FMxe, M25N9FMye, M25N9FMze, M25N9MMxe, M25N9MMye, M25N9MMze, M26N1FMxe, M26N1FMye, M26N1FMze, M26N1MMxe, M26N1MMye, M26N1MMze, & + M26N2FMxe, M26N2FMye, M26N2FMze, M26N2MMxe, M26N2MMye, M26N2MMze, M26N3FMxe, M26N3FMye, M26N3FMze, M26N3MMxe, M26N3MMye, M26N3MMze, & + M26N4FMxe, M26N4FMye, M26N4FMze, M26N4MMxe, M26N4MMye, M26N4MMze, M26N5FMxe, M26N5FMye, M26N5FMze, M26N5MMxe, M26N5MMye, M26N5MMze, & + M26N6FMxe, M26N6FMye, M26N6FMze, M26N6MMxe, M26N6MMye, M26N6MMze, M26N7FMxe, M26N7FMye, M26N7FMze, M26N7MMxe, M26N7MMye, M26N7MMze, & + M26N8FMxe, M26N8FMye, M26N8FMze, M26N8MMxe, M26N8MMye, M26N8MMze, M26N9FMxe, M26N9FMye, M26N9FMze, M26N9MMxe, M26N9MMye, M26N9MMze, & + M27N1FMxe, M27N1FMye, M27N1FMze, M27N1MMxe, M27N1MMye, M27N1MMze, M27N2FMxe, M27N2FMye, M27N2FMze, M27N2MMxe, M27N2MMye, M27N2MMze, & + M27N3FMxe, M27N3FMye, M27N3FMze, M27N3MMxe, M27N3MMye, M27N3MMze, M27N4FMxe, M27N4FMye, M27N4FMze, M27N4MMxe, M27N4MMye, M27N4MMze, & + M27N5FMxe, M27N5FMye, M27N5FMze, M27N5MMxe, M27N5MMye, M27N5MMze, M27N6FMxe, M27N6FMye, M27N6FMze, M27N6MMxe, M27N6MMye, M27N6MMze, & + M27N7FMxe, M27N7FMye, M27N7FMze, M27N7MMxe, M27N7MMye, M27N7MMze, M27N8FMxe, M27N8FMye, M27N8FMze, M27N8MMxe, M27N8MMye, M27N8MMze, & + M27N9FMxe, M27N9FMye, M27N9FMze, M27N9MMxe, M27N9MMye, M27N9MMze, M28N1FMxe, M28N1FMye, M28N1FMze, M28N1MMxe, M28N1MMye, M28N1MMze, & + M28N2FMxe, M28N2FMye, M28N2FMze, M28N2MMxe, M28N2MMye, M28N2MMze, M28N3FMxe, M28N3FMye, M28N3FMze, M28N3MMxe, M28N3MMye, M28N3MMze, & + M28N4FMxe, M28N4FMye, M28N4FMze, M28N4MMxe, M28N4MMye, M28N4MMze, M28N5FMxe, M28N5FMye, M28N5FMze, M28N5MMxe, M28N5MMye, M28N5MMze, & + M28N6FMxe, M28N6FMye, M28N6FMze, M28N6MMxe, M28N6MMye, M28N6MMze, M28N7FMxe, M28N7FMye, M28N7FMze, M28N7MMxe, M28N7MMye, M28N7MMze, & + M28N8FMxe, M28N8FMye, M28N8FMze, M28N8MMxe, M28N8MMye, M28N8MMze, M28N9FMxe, M28N9FMye, M28N9FMze, M28N9MMxe, M28N9MMye, M28N9MMze, & + M29N1FMxe, M29N1FMye, M29N1FMze, M29N1MMxe, M29N1MMye, M29N1MMze, M29N2FMxe, M29N2FMye, M29N2FMze, M29N2MMxe, M29N2MMye, M29N2MMze, & + M29N3FMxe, M29N3FMye, M29N3FMze, M29N3MMxe, M29N3MMye, M29N3MMze, M29N4FMxe, M29N4FMye, M29N4FMze, M29N4MMxe, M29N4MMye, M29N4MMze, & + M29N5FMxe, M29N5FMye, M29N5FMze, M29N5MMxe, M29N5MMye, M29N5MMze, M29N6FMxe, M29N6FMye, M29N6FMze, M29N6MMxe, M29N6MMye, M29N6MMze, & + M29N7FMxe, M29N7FMye, M29N7FMze, M29N7MMxe, M29N7MMye, M29N7MMze, M29N8FMxe, M29N8FMye, M29N8FMze, M29N8MMxe, M29N8MMye, M29N8MMze, & + M29N9FMxe, M29N9FMye, M29N9FMze, M29N9MMxe, M29N9MMye, M29N9MMze, M30N1FMxe, M30N1FMye, M30N1FMze, M30N1MMxe, M30N1MMye, M30N1MMze, & + M30N2FMxe, M30N2FMye, M30N2FMze, M30N2MMxe, M30N2MMye, M30N2MMze, M30N3FMxe, M30N3FMye, M30N3FMze, M30N3MMxe, M30N3MMye, M30N3MMze, & + M30N4FMxe, M30N4FMye, M30N4FMze, M30N4MMxe, M30N4MMye, M30N4MMze, M30N5FMxe, M30N5FMye, M30N5FMze, M30N5MMxe, M30N5MMye, M30N5MMze, & + M30N6FMxe, M30N6FMye, M30N6FMze, M30N6MMxe, M30N6MMye, M30N6MMze, M30N7FMxe, M30N7FMye, M30N7FMze, M30N7MMxe, M30N7MMye, M30N7MMze, & + M30N8FMxe, M30N8FMye, M30N8FMze, M30N8MMxe, M30N8MMye, M30N8MMze, M30N9FMxe, M30N9FMye, M30N9FMze, M30N9MMxe, M30N9MMye, M30N9MMze, & + M31N1FMxe, M31N1FMye, M31N1FMze, M31N1MMxe, M31N1MMye, M31N1MMze, M31N2FMxe, M31N2FMye, M31N2FMze, M31N2MMxe, M31N2MMye, M31N2MMze, & + M31N3FMxe, M31N3FMye, M31N3FMze, M31N3MMxe, M31N3MMye, M31N3MMze, M31N4FMxe, M31N4FMye, M31N4FMze, M31N4MMxe, M31N4MMye, M31N4MMze, & + M31N5FMxe, M31N5FMye, M31N5FMze, M31N5MMxe, M31N5MMye, M31N5MMze, M31N6FMxe, M31N6FMye, M31N6FMze, M31N6MMxe, M31N6MMye, M31N6MMze, & + M31N7FMxe, M31N7FMye, M31N7FMze, M31N7MMxe, M31N7MMye, M31N7MMze, M31N8FMxe, M31N8FMye, M31N8FMze, M31N8MMxe, M31N8MMye, M31N8MMze, & + M31N9FMxe, M31N9FMye, M31N9FMze, M31N9MMxe, M31N9MMye, M31N9MMze, M32N1FMxe, M32N1FMye, M32N1FMze, M32N1MMxe, M32N1MMye, M32N1MMze, & + M32N2FMxe, M32N2FMye, M32N2FMze, M32N2MMxe, M32N2MMye, M32N2MMze, M32N3FMxe, M32N3FMye, M32N3FMze, M32N3MMxe, M32N3MMye, M32N3MMze, & + M32N4FMxe, M32N4FMye, M32N4FMze, M32N4MMxe, M32N4MMye, M32N4MMze, M32N5FMxe, M32N5FMye, M32N5FMze, M32N5MMxe, M32N5MMye, M32N5MMze, & + M32N6FMxe, M32N6FMye, M32N6FMze, M32N6MMxe, M32N6MMye, M32N6MMze, M32N7FMxe, M32N7FMye, M32N7FMze, M32N7MMxe, M32N7MMye, M32N7MMze, & + M32N8FMxe, M32N8FMye, M32N8FMze, M32N8MMxe, M32N8MMye, M32N8MMze, M32N9FMxe, M32N9FMye, M32N9FMze, M32N9MMxe, M32N9MMye, M32N9MMze, & + M33N1FMxe, M33N1FMye, M33N1FMze, M33N1MMxe, M33N1MMye, M33N1MMze, M33N2FMxe, M33N2FMye, M33N2FMze, M33N2MMxe, M33N2MMye, M33N2MMze, & + M33N3FMxe, M33N3FMye, M33N3FMze, M33N3MMxe, M33N3MMye, M33N3MMze, M33N4FMxe, M33N4FMye, M33N4FMze, M33N4MMxe, M33N4MMye, M33N4MMze, & + M33N5FMxe, M33N5FMye, M33N5FMze, M33N5MMxe, M33N5MMye, M33N5MMze, M33N6FMxe, M33N6FMye, M33N6FMze, M33N6MMxe, M33N6MMye, M33N6MMze, & + M33N7FMxe, M33N7FMye, M33N7FMze, M33N7MMxe, M33N7MMye, M33N7MMze, M33N8FMxe, M33N8FMye, M33N8FMze, M33N8MMxe, M33N8MMye, M33N8MMze, & + M33N9FMxe, M33N9FMye, M33N9FMze, M33N9MMxe, M33N9MMye, M33N9MMze, M34N1FMxe, M34N1FMye, M34N1FMze, M34N1MMxe, M34N1MMye, M34N1MMze, & + M34N2FMxe, M34N2FMye, M34N2FMze, M34N2MMxe, M34N2MMye, M34N2MMze, M34N3FMxe, M34N3FMye, M34N3FMze, M34N3MMxe, M34N3MMye, M34N3MMze, & + M34N4FMxe, M34N4FMye, M34N4FMze, M34N4MMxe, M34N4MMye, M34N4MMze, M34N5FMxe, M34N5FMye, M34N5FMze, M34N5MMxe, M34N5MMye, M34N5MMze, & + M34N6FMxe, M34N6FMye, M34N6FMze, M34N6MMxe, M34N6MMye, M34N6MMze, M34N7FMxe, M34N7FMye, M34N7FMze, M34N7MMxe, M34N7MMye, M34N7MMze, & + M34N8FMxe, M34N8FMye, M34N8FMze, M34N8MMxe, M34N8MMye, M34N8MMze, M34N9FMxe, M34N9FMye, M34N9FMze, M34N9MMxe, M34N9MMye, M34N9MMze, & + M35N1FMxe, M35N1FMye, M35N1FMze, M35N1MMxe, M35N1MMye, M35N1MMze, M35N2FMxe, M35N2FMye, M35N2FMze, M35N2MMxe, M35N2MMye, M35N2MMze, & + M35N3FMxe, M35N3FMye, M35N3FMze, M35N3MMxe, M35N3MMye, M35N3MMze, M35N4FMxe, M35N4FMye, M35N4FMze, M35N4MMxe, M35N4MMye, M35N4MMze, & + M35N5FMxe, M35N5FMye, M35N5FMze, M35N5MMxe, M35N5MMye, M35N5MMze, M35N6FMxe, M35N6FMye, M35N6FMze, M35N6MMxe, M35N6MMye, M35N6MMze, & + M35N7FMxe, M35N7FMye, M35N7FMze, M35N7MMxe, M35N7MMye, M35N7MMze, M35N8FMxe, M35N8FMye, M35N8FMze, M35N8MMxe, M35N8MMye, M35N8MMze, & + M35N9FMxe, M35N9FMye, M35N9FMze, M35N9MMxe, M35N9MMye, M35N9MMze, M36N1FMxe, M36N1FMye, M36N1FMze, M36N1MMxe, M36N1MMye, M36N1MMze, & + M36N2FMxe, M36N2FMye, M36N2FMze, M36N2MMxe, M36N2MMye, M36N2MMze, M36N3FMxe, M36N3FMye, M36N3FMze, M36N3MMxe, M36N3MMye, M36N3MMze, & + M36N4FMxe, M36N4FMye, M36N4FMze, M36N4MMxe, M36N4MMye, M36N4MMze, M36N5FMxe, M36N5FMye, M36N5FMze, M36N5MMxe, M36N5MMye, M36N5MMze, & + M36N6FMxe, M36N6FMye, M36N6FMze, M36N6MMxe, M36N6MMye, M36N6MMze, M36N7FMxe, M36N7FMye, M36N7FMze, M36N7MMxe, M36N7MMye, M36N7MMze, & + M36N8FMxe, M36N8FMye, M36N8FMze, M36N8MMxe, M36N8MMye, M36N8MMze, M36N9FMxe, M36N9FMye, M36N9FMze, M36N9MMxe, M36N9MMye, M36N9MMze, & + M37N1FMxe, M37N1FMye, M37N1FMze, M37N1MMxe, M37N1MMye, M37N1MMze, M37N2FMxe, M37N2FMye, M37N2FMze, M37N2MMxe, M37N2MMye, M37N2MMze, & + M37N3FMxe, M37N3FMye, M37N3FMze, M37N3MMxe, M37N3MMye, M37N3MMze, M37N4FMxe, M37N4FMye, M37N4FMze, M37N4MMxe, M37N4MMye, M37N4MMze, & + M37N5FMxe, M37N5FMye, M37N5FMze, M37N5MMxe, M37N5MMye, M37N5MMze, M37N6FMxe, M37N6FMye, M37N6FMze, M37N6MMxe, M37N6MMye, M37N6MMze, & + M37N7FMxe, M37N7FMye, M37N7FMze, M37N7MMxe, M37N7MMye, M37N7MMze, M37N8FMxe, M37N8FMye, M37N8FMze, M37N8MMxe, M37N8MMye, M37N8MMze, & + M37N9FMxe, M37N9FMye, M37N9FMze, M37N9MMxe, M37N9MMye, M37N9MMze, M38N1FMxe, M38N1FMye, M38N1FMze, M38N1MMxe, M38N1MMye, M38N1MMze, & + M38N2FMxe, M38N2FMye, M38N2FMze, M38N2MMxe, M38N2MMye, M38N2MMze, M38N3FMxe, M38N3FMye, M38N3FMze, M38N3MMxe, M38N3MMye, M38N3MMze, & + M38N4FMxe, M38N4FMye, M38N4FMze, M38N4MMxe, M38N4MMye, M38N4MMze, M38N5FMxe, M38N5FMye, M38N5FMze, M38N5MMxe, M38N5MMye, M38N5MMze, & + M38N6FMxe, M38N6FMye, M38N6FMze, M38N6MMxe, M38N6MMye, M38N6MMze, M38N7FMxe, M38N7FMye, M38N7FMze, M38N7MMxe, M38N7MMye, M38N7MMze, & + M38N8FMxe, M38N8FMye, M38N8FMze, M38N8MMxe, M38N8MMye, M38N8MMze, M38N9FMxe, M38N9FMye, M38N9FMze, M38N9MMxe, M38N9MMye, M38N9MMze, & + M39N1FMxe, M39N1FMye, M39N1FMze, M39N1MMxe, M39N1MMye, M39N1MMze, M39N2FMxe, M39N2FMye, M39N2FMze, M39N2MMxe, M39N2MMye, M39N2MMze, & + M39N3FMxe, M39N3FMye, M39N3FMze, M39N3MMxe, M39N3MMye, M39N3MMze, M39N4FMxe, M39N4FMye, M39N4FMze, M39N4MMxe, M39N4MMye, M39N4MMze, & + M39N5FMxe, M39N5FMye, M39N5FMze, M39N5MMxe, M39N5MMye, M39N5MMze, M39N6FMxe, M39N6FMye, M39N6FMze, M39N6MMxe, M39N6MMye, M39N6MMze, & + M39N7FMxe, M39N7FMye, M39N7FMze, M39N7MMxe, M39N7MMye, M39N7MMze, M39N8FMxe, M39N8FMye, M39N8FMze, M39N8MMxe, M39N8MMye, M39N8MMze, & + M39N9FMxe, M39N9FMye, M39N9FMze, M39N9MMxe, M39N9MMye, M39N9MMze, M40N1FMxe, M40N1FMye, M40N1FMze, M40N1MMxe, M40N1MMye, M40N1MMze, & + M40N2FMxe, M40N2FMye, M40N2FMze, M40N2MMxe, M40N2MMye, M40N2MMze, M40N3FMxe, M40N3FMye, M40N3FMze, M40N3MMxe, M40N3MMye, M40N3MMze, & + M40N4FMxe, M40N4FMye, M40N4FMze, M40N4MMxe, M40N4MMye, M40N4MMze, M40N5FMxe, M40N5FMye, M40N5FMze, M40N5MMxe, M40N5MMye, M40N5MMze, & + M40N6FMxe, M40N6FMye, M40N6FMze, M40N6MMxe, M40N6MMye, M40N6MMze, M40N7FMxe, M40N7FMye, M40N7FMze, M40N7MMxe, M40N7MMye, M40N7MMze, & + M40N8FMxe, M40N8FMye, M40N8FMze, M40N8MMxe, M40N8MMye, M40N8MMze, M40N9FMxe, M40N9FMye, M40N9FMze, M40N9MMxe, M40N9MMye, M40N9MMze, & + M41N1FMxe, M41N1FMye, M41N1FMze, M41N1MMxe, M41N1MMye, M41N1MMze, M41N2FMxe, M41N2FMye, M41N2FMze, M41N2MMxe, M41N2MMye, M41N2MMze, & + M41N3FMxe, M41N3FMye, M41N3FMze, M41N3MMxe, M41N3MMye, M41N3MMze, M41N4FMxe, M41N4FMye, M41N4FMze, M41N4MMxe, M41N4MMye, M41N4MMze, & + M41N5FMxe, M41N5FMye, M41N5FMze, M41N5MMxe, M41N5MMye, M41N5MMze, M41N6FMxe, M41N6FMye, M41N6FMze, M41N6MMxe, M41N6MMye, M41N6MMze, & + M41N7FMxe, M41N7FMye, M41N7FMze, M41N7MMxe, M41N7MMye, M41N7MMze, M41N8FMxe, M41N8FMye, M41N8FMze, M41N8MMxe, M41N8MMye, M41N8MMze, & + M41N9FMxe, M41N9FMye, M41N9FMze, M41N9MMxe, M41N9MMye, M41N9MMze, M42N1FMxe, M42N1FMye, M42N1FMze, M42N1MMxe, M42N1MMye, M42N1MMze, & + M42N2FMxe, M42N2FMye, M42N2FMze, M42N2MMxe, M42N2MMye, M42N2MMze, M42N3FMxe, M42N3FMye, M42N3FMze, M42N3MMxe, M42N3MMye, M42N3MMze, & + M42N4FMxe, M42N4FMye, M42N4FMze, M42N4MMxe, M42N4MMye, M42N4MMze, M42N5FMxe, M42N5FMye, M42N5FMze, M42N5MMxe, M42N5MMye, M42N5MMze, & + M42N6FMxe, M42N6FMye, M42N6FMze, M42N6MMxe, M42N6MMye, M42N6MMze, M42N7FMxe, M42N7FMye, M42N7FMze, M42N7MMxe, M42N7MMye, M42N7MMze, & + M42N8FMxe, M42N8FMye, M42N8FMze, M42N8MMxe, M42N8MMye, M42N8MMze, M42N9FMxe, M42N9FMye, M42N9FMze, M42N9MMxe, M42N9MMye, M42N9MMze, & + M43N1FMxe, M43N1FMye, M43N1FMze, M43N1MMxe, M43N1MMye, M43N1MMze, M43N2FMxe, M43N2FMye, M43N2FMze, M43N2MMxe, M43N2MMye, M43N2MMze, & + M43N3FMxe, M43N3FMye, M43N3FMze, M43N3MMxe, M43N3MMye, M43N3MMze, M43N4FMxe, M43N4FMye, M43N4FMze, M43N4MMxe, M43N4MMye, M43N4MMze, & + M43N5FMxe, M43N5FMye, M43N5FMze, M43N5MMxe, M43N5MMye, M43N5MMze, M43N6FMxe, M43N6FMye, M43N6FMze, M43N6MMxe, M43N6MMye, M43N6MMze, & + M43N7FMxe, M43N7FMye, M43N7FMze, M43N7MMxe, M43N7MMye, M43N7MMze, M43N8FMxe, M43N8FMye, M43N8FMze, M43N8MMxe, M43N8MMye, M43N8MMze, & + M43N9FMxe, M43N9FMye, M43N9FMze, M43N9MMxe, M43N9MMye, M43N9MMze, M44N1FMxe, M44N1FMye, M44N1FMze, M44N1MMxe, M44N1MMye, M44N1MMze, & + M44N2FMxe, M44N2FMye, M44N2FMze, M44N2MMxe, M44N2MMye, M44N2MMze, M44N3FMxe, M44N3FMye, M44N3FMze, M44N3MMxe, M44N3MMye, M44N3MMze, & + M44N4FMxe, M44N4FMye, M44N4FMze, M44N4MMxe, M44N4MMye, M44N4MMze, M44N5FMxe, M44N5FMye, M44N5FMze, M44N5MMxe, M44N5MMye, M44N5MMze, & + M44N6FMxe, M44N6FMye, M44N6FMze, M44N6MMxe, M44N6MMye, M44N6MMze, M44N7FMxe, M44N7FMye, M44N7FMze, M44N7MMxe, M44N7MMye, M44N7MMze, & + M44N8FMxe, M44N8FMye, M44N8FMze, M44N8MMxe, M44N8MMye, M44N8MMze, M44N9FMxe, M44N9FMye, M44N9FMze, M44N9MMxe, M44N9MMye, M44N9MMze, & + M45N1FMxe, M45N1FMye, M45N1FMze, M45N1MMxe, M45N1MMye, M45N1MMze, M45N2FMxe, M45N2FMye, M45N2FMze, M45N2MMxe, M45N2MMye, M45N2MMze, & + M45N3FMxe, M45N3FMye, M45N3FMze, M45N3MMxe, M45N3MMye, M45N3MMze, M45N4FMxe, M45N4FMye, M45N4FMze, M45N4MMxe, M45N4MMye, M45N4MMze, & + M45N5FMxe, M45N5FMye, M45N5FMze, M45N5MMxe, M45N5MMye, M45N5MMze, M45N6FMxe, M45N6FMye, M45N6FMze, M45N6MMxe, M45N6MMye, M45N6MMze, & + M45N7FMxe, M45N7FMye, M45N7FMze, M45N7MMxe, M45N7MMye, M45N7MMze, M45N8FMxe, M45N8FMye, M45N8FMze, M45N8MMxe, M45N8MMye, M45N8MMze, & + M45N9FMxe, M45N9FMye, M45N9FMze, M45N9MMxe, M45N9MMye, M45N9MMze, M46N1FMxe, M46N1FMye, M46N1FMze, M46N1MMxe, M46N1MMye, M46N1MMze, & + M46N2FMxe, M46N2FMye, M46N2FMze, M46N2MMxe, M46N2MMye, M46N2MMze, M46N3FMxe, M46N3FMye, M46N3FMze, M46N3MMxe, M46N3MMye, M46N3MMze, & + M46N4FMxe, M46N4FMye, M46N4FMze, M46N4MMxe, M46N4MMye, M46N4MMze, M46N5FMxe, M46N5FMye, M46N5FMze, M46N5MMxe, M46N5MMye, M46N5MMze, & + M46N6FMxe, M46N6FMye, M46N6FMze, M46N6MMxe, M46N6MMye, M46N6MMze, M46N7FMxe, M46N7FMye, M46N7FMze, M46N7MMxe, M46N7MMye, M46N7MMze, & + M46N8FMxe, M46N8FMye, M46N8FMze, M46N8MMxe, M46N8MMye, M46N8MMze, M46N9FMxe, M46N9FMye, M46N9FMze, M46N9MMxe, M46N9MMye, M46N9MMze, & + M47N1FMxe, M47N1FMye, M47N1FMze, M47N1MMxe, M47N1MMye, M47N1MMze, M47N2FMxe, M47N2FMye, M47N2FMze, M47N2MMxe, M47N2MMye, M47N2MMze, & + M47N3FMxe, M47N3FMye, M47N3FMze, M47N3MMxe, M47N3MMye, M47N3MMze, M47N4FMxe, M47N4FMye, M47N4FMze, M47N4MMxe, M47N4MMye, M47N4MMze, & + M47N5FMxe, M47N5FMye, M47N5FMze, M47N5MMxe, M47N5MMye, M47N5MMze, M47N6FMxe, M47N6FMye, M47N6FMze, M47N6MMxe, M47N6MMye, M47N6MMze, & + M47N7FMxe, M47N7FMye, M47N7FMze, M47N7MMxe, M47N7MMye, M47N7MMze, M47N8FMxe, M47N8FMye, M47N8FMze, M47N8MMxe, M47N8MMye, M47N8MMze, & + M47N9FMxe, M47N9FMye, M47N9FMze, M47N9MMxe, M47N9MMye, M47N9MMze, M48N1FMxe, M48N1FMye, M48N1FMze, M48N1MMxe, M48N1MMye, M48N1MMze, & + M48N2FMxe, M48N2FMye, M48N2FMze, M48N2MMxe, M48N2MMye, M48N2MMze, M48N3FMxe, M48N3FMye, M48N3FMze, M48N3MMxe, M48N3MMye, M48N3MMze, & + M48N4FMxe, M48N4FMye, M48N4FMze, M48N4MMxe, M48N4MMye, M48N4MMze, M48N5FMxe, M48N5FMye, M48N5FMze, M48N5MMxe, M48N5MMye, M48N5MMze, & + M48N6FMxe, M48N6FMye, M48N6FMze, M48N6MMxe, M48N6MMye, M48N6MMze, M48N7FMxe, M48N7FMye, M48N7FMze, M48N7MMxe, M48N7MMye, M48N7MMze, & + M48N8FMxe, M48N8FMye, M48N8FMze, M48N8MMxe, M48N8MMye, M48N8MMze, M48N9FMxe, M48N9FMye, M48N9FMze, M48N9MMxe, M48N9MMye, M48N9MMze, & + M49N1FMxe, M49N1FMye, M49N1FMze, M49N1MMxe, M49N1MMye, M49N1MMze, M49N2FMxe, M49N2FMye, M49N2FMze, M49N2MMxe, M49N2MMye, M49N2MMze, & + M49N3FMxe, M49N3FMye, M49N3FMze, M49N3MMxe, M49N3MMye, M49N3MMze, M49N4FMxe, M49N4FMye, M49N4FMze, M49N4MMxe, M49N4MMye, M49N4MMze, & + M49N5FMxe, M49N5FMye, M49N5FMze, M49N5MMxe, M49N5MMye, M49N5MMze, M49N6FMxe, M49N6FMye, M49N6FMze, M49N6MMxe, M49N6MMye, M49N6MMze, & + M49N7FMxe, M49N7FMye, M49N7FMze, M49N7MMxe, M49N7MMye, M49N7MMze, M49N8FMxe, M49N8FMye, M49N8FMze, M49N8MMxe, M49N8MMye, M49N8MMze, & + M49N9FMxe, M49N9FMye, M49N9FMze, M49N9MMxe, M49N9MMye, M49N9MMze, M50N1FMxe, M50N1FMye, M50N1FMze, M50N1MMxe, M50N1MMye, M50N1MMze, & + M50N2FMxe, M50N2FMye, M50N2FMze, M50N2MMxe, M50N2MMye, M50N2MMze, M50N3FMxe, M50N3FMye, M50N3FMze, M50N3MMxe, M50N3MMye, M50N3MMze, & + M50N4FMxe, M50N4FMye, M50N4FMze, M50N4MMxe, M50N4MMye, M50N4MMze, M50N5FMxe, M50N5FMye, M50N5FMze, M50N5MMxe, M50N5MMye, M50N5MMze, & + M50N6FMxe, M50N6FMye, M50N6FMze, M50N6MMxe, M50N6MMye, M50N6MMze, M50N7FMxe, M50N7FMye, M50N7FMze, M50N7MMxe, M50N7MMye, M50N7MMze, & + M50N8FMxe, M50N8FMye, M50N8FMze, M50N8MMxe, M50N8MMye, M50N8MMze, M50N9FMxe, M50N9FMye, M50N9FMze, M50N9MMxe, M50N9MMye, M50N9MMze, & + M51N1FMxe, M51N1FMye, M51N1FMze, M51N1MMxe, M51N1MMye, M51N1MMze, M51N2FMxe, M51N2FMye, M51N2FMze, M51N2MMxe, M51N2MMye, M51N2MMze, & + M51N3FMxe, M51N3FMye, M51N3FMze, M51N3MMxe, M51N3MMye, M51N3MMze, M51N4FMxe, M51N4FMye, M51N4FMze, M51N4MMxe, M51N4MMye, M51N4MMze, & + M51N5FMxe, M51N5FMye, M51N5FMze, M51N5MMxe, M51N5MMye, M51N5MMze, M51N6FMxe, M51N6FMye, M51N6FMze, M51N6MMxe, M51N6MMye, M51N6MMze, & + M51N7FMxe, M51N7FMye, M51N7FMze, M51N7MMxe, M51N7MMye, M51N7MMze, M51N8FMxe, M51N8FMye, M51N8FMze, M51N8MMxe, M51N8MMye, M51N8MMze, & + M51N9FMxe, M51N9FMye, M51N9FMze, M51N9MMxe, M51N9MMye, M51N9MMze, M52N1FMxe, M52N1FMye, M52N1FMze, M52N1MMxe, M52N1MMye, M52N1MMze, & + M52N2FMxe, M52N2FMye, M52N2FMze, M52N2MMxe, M52N2MMye, M52N2MMze, M52N3FMxe, M52N3FMye, M52N3FMze, M52N3MMxe, M52N3MMye, M52N3MMze, & + M52N4FMxe, M52N4FMye, M52N4FMze, M52N4MMxe, M52N4MMye, M52N4MMze, M52N5FMxe, M52N5FMye, M52N5FMze, M52N5MMxe, M52N5MMye, M52N5MMze, & + M52N6FMxe, M52N6FMye, M52N6FMze, M52N6MMxe, M52N6MMye, M52N6MMze, M52N7FMxe, M52N7FMye, M52N7FMze, M52N7MMxe, M52N7MMye, M52N7MMze, & + M52N8FMxe, M52N8FMye, M52N8FMze, M52N8MMxe, M52N8MMye, M52N8MMze, M52N9FMxe, M52N9FMye, M52N9FMze, M52N9MMxe, M52N9MMye, M52N9MMze, & + M53N1FMxe, M53N1FMye, M53N1FMze, M53N1MMxe, M53N1MMye, M53N1MMze, M53N2FMxe, M53N2FMye, M53N2FMze, M53N2MMxe, M53N2MMye, M53N2MMze, & + M53N3FMxe, M53N3FMye, M53N3FMze, M53N3MMxe, M53N3MMye, M53N3MMze, M53N4FMxe, M53N4FMye, M53N4FMze, M53N4MMxe, M53N4MMye, M53N4MMze, & + M53N5FMxe, M53N5FMye, M53N5FMze, M53N5MMxe, M53N5MMye, M53N5MMze, M53N6FMxe, M53N6FMye, M53N6FMze, M53N6MMxe, M53N6MMye, M53N6MMze, & + M53N7FMxe, M53N7FMye, M53N7FMze, M53N7MMxe, M53N7MMye, M53N7MMze, M53N8FMxe, M53N8FMye, M53N8FMze, M53N8MMxe, M53N8MMye, M53N8MMze, & + M53N9FMxe, M53N9FMye, M53N9FMze, M53N9MMxe, M53N9MMye, M53N9MMze, M54N1FMxe, M54N1FMye, M54N1FMze, M54N1MMxe, M54N1MMye, M54N1MMze, & + M54N2FMxe, M54N2FMye, M54N2FMze, M54N2MMxe, M54N2MMye, M54N2MMze, M54N3FMxe, M54N3FMye, M54N3FMze, M54N3MMxe, M54N3MMye, M54N3MMze, & + M54N4FMxe, M54N4FMye, M54N4FMze, M54N4MMxe, M54N4MMye, M54N4MMze, M54N5FMxe, M54N5FMye, M54N5FMze, M54N5MMxe, M54N5MMye, M54N5MMze, & + M54N6FMxe, M54N6FMye, M54N6FMze, M54N6MMxe, M54N6MMye, M54N6MMze, M54N7FMxe, M54N7FMye, M54N7FMze, M54N7MMxe, M54N7MMye, M54N7MMze, & + M54N8FMxe, M54N8FMye, M54N8FMze, M54N8MMxe, M54N8MMye, M54N8MMze, M54N9FMxe, M54N9FMye, M54N9FMze, M54N9MMxe, M54N9MMye, M54N9MMze, & + M55N1FMxe, M55N1FMye, M55N1FMze, M55N1MMxe, M55N1MMye, M55N1MMze, M55N2FMxe, M55N2FMye, M55N2FMze, M55N2MMxe, M55N2MMye, M55N2MMze, & + M55N3FMxe, M55N3FMye, M55N3FMze, M55N3MMxe, M55N3MMye, M55N3MMze, M55N4FMxe, M55N4FMye, M55N4FMze, M55N4MMxe, M55N4MMye, M55N4MMze, & + M55N5FMxe, M55N5FMye, M55N5FMze, M55N5MMxe, M55N5MMye, M55N5MMze, M55N6FMxe, M55N6FMye, M55N6FMze, M55N6MMxe, M55N6MMye, M55N6MMze, & + M55N7FMxe, M55N7FMye, M55N7FMze, M55N7MMxe, M55N7MMye, M55N7MMze, M55N8FMxe, M55N8FMye, M55N8FMze, M55N8MMxe, M55N8MMye, M55N8MMze, & + M55N9FMxe, M55N9FMye, M55N9FMze, M55N9MMxe, M55N9MMye, M55N9MMze, M56N1FMxe, M56N1FMye, M56N1FMze, M56N1MMxe, M56N1MMye, M56N1MMze, & + M56N2FMxe, M56N2FMye, M56N2FMze, M56N2MMxe, M56N2MMye, M56N2MMze, M56N3FMxe, M56N3FMye, M56N3FMze, M56N3MMxe, M56N3MMye, M56N3MMze, & + M56N4FMxe, M56N4FMye, M56N4FMze, M56N4MMxe, M56N4MMye, M56N4MMze, M56N5FMxe, M56N5FMye, M56N5FMze, M56N5MMxe, M56N5MMye, M56N5MMze, & + M56N6FMxe, M56N6FMye, M56N6FMze, M56N6MMxe, M56N6MMye, M56N6MMze, M56N7FMxe, M56N7FMye, M56N7FMze, M56N7MMxe, M56N7MMye, M56N7MMze, & + M56N8FMxe, M56N8FMye, M56N8FMze, M56N8MMxe, M56N8MMye, M56N8MMze, M56N9FMxe, M56N9FMye, M56N9FMze, M56N9MMxe, M56N9MMye, M56N9MMze, & + M57N1FMxe, M57N1FMye, M57N1FMze, M57N1MMxe, M57N1MMye, M57N1MMze, M57N2FMxe, M57N2FMye, M57N2FMze, M57N2MMxe, M57N2MMye, M57N2MMze, & + M57N3FMxe, M57N3FMye, M57N3FMze, M57N3MMxe, M57N3MMye, M57N3MMze, M57N4FMxe, M57N4FMye, M57N4FMze, M57N4MMxe, M57N4MMye, M57N4MMze, & + M57N5FMxe, M57N5FMye, M57N5FMze, M57N5MMxe, M57N5MMye, M57N5MMze, M57N6FMxe, M57N6FMye, M57N6FMze, M57N6MMxe, M57N6MMye, M57N6MMze, & + M57N7FMxe, M57N7FMye, M57N7FMze, M57N7MMxe, M57N7MMye, M57N7MMze, M57N8FMxe, M57N8FMye, M57N8FMze, M57N8MMxe, M57N8MMye, M57N8MMze, & + M57N9FMxe, M57N9FMye, M57N9FMze, M57N9MMxe, M57N9MMye, M57N9MMze, M58N1FMxe, M58N1FMye, M58N1FMze, M58N1MMxe, M58N1MMye, M58N1MMze, & + M58N2FMxe, M58N2FMye, M58N2FMze, M58N2MMxe, M58N2MMye, M58N2MMze, M58N3FMxe, M58N3FMye, M58N3FMze, M58N3MMxe, M58N3MMye, M58N3MMze, & + M58N4FMxe, M58N4FMye, M58N4FMze, M58N4MMxe, M58N4MMye, M58N4MMze, M58N5FMxe, M58N5FMye, M58N5FMze, M58N5MMxe, M58N5MMye, M58N5MMze, & + M58N6FMxe, M58N6FMye, M58N6FMze, M58N6MMxe, M58N6MMye, M58N6MMze, M58N7FMxe, M58N7FMye, M58N7FMze, M58N7MMxe, M58N7MMye, M58N7MMze, & + M58N8FMxe, M58N8FMye, M58N8FMze, M58N8MMxe, M58N8MMye, M58N8MMze, M58N9FMxe, M58N9FMye, M58N9FMze, M58N9MMxe, M58N9MMye, M58N9MMze, & + M59N1FMxe, M59N1FMye, M59N1FMze, M59N1MMxe, M59N1MMye, M59N1MMze, M59N2FMxe, M59N2FMye, M59N2FMze, M59N2MMxe, M59N2MMye, M59N2MMze, & + M59N3FMxe, M59N3FMye, M59N3FMze, M59N3MMxe, M59N3MMye, M59N3MMze, M59N4FMxe, M59N4FMye, M59N4FMze, M59N4MMxe, M59N4MMye, M59N4MMze, & + M59N5FMxe, M59N5FMye, M59N5FMze, M59N5MMxe, M59N5MMye, M59N5MMze, M59N6FMxe, M59N6FMye, M59N6FMze, M59N6MMxe, M59N6MMye, M59N6MMze, & + M59N7FMxe, M59N7FMye, M59N7FMze, M59N7MMxe, M59N7MMye, M59N7MMze, M59N8FMxe, M59N8FMye, M59N8FMze, M59N8MMxe, M59N8MMye, M59N8MMze, & + M59N9FMxe, M59N9FMye, M59N9FMze, M59N9MMxe, M59N9MMye, M59N9MMze, M60N1FMxe, M60N1FMye, M60N1FMze, M60N1MMxe, M60N1MMye, M60N1MMze, & + M60N2FMxe, M60N2FMye, M60N2FMze, M60N2MMxe, M60N2MMye, M60N2MMze, M60N3FMxe, M60N3FMye, M60N3FMze, M60N3MMxe, M60N3MMye, M60N3MMze, & + M60N4FMxe, M60N4FMye, M60N4FMze, M60N4MMxe, M60N4MMye, M60N4MMze, M60N5FMxe, M60N5FMye, M60N5FMze, M60N5MMxe, M60N5MMye, M60N5MMze, & + M60N6FMxe, M60N6FMye, M60N6FMze, M60N6MMxe, M60N6MMye, M60N6MMze, M60N7FMxe, M60N7FMye, M60N7FMze, M60N7MMxe, M60N7MMye, M60N7MMze, & + M60N8FMxe, M60N8FMye, M60N8FMze, M60N8MMxe, M60N8MMye, M60N8MMze, M60N9FMxe, M60N9FMye, M60N9FMze, M60N9MMxe, M60N9MMye, M60N9MMze, & + M61N1FMxe, M61N1FMye, M61N1FMze, M61N1MMxe, M61N1MMye, M61N1MMze, M61N2FMxe, M61N2FMye, M61N2FMze, M61N2MMxe, M61N2MMye, M61N2MMze, & + M61N3FMxe, M61N3FMye, M61N3FMze, M61N3MMxe, M61N3MMye, M61N3MMze, M61N4FMxe, M61N4FMye, M61N4FMze, M61N4MMxe, M61N4MMye, M61N4MMze, & + M61N5FMxe, M61N5FMye, M61N5FMze, M61N5MMxe, M61N5MMye, M61N5MMze, M61N6FMxe, M61N6FMye, M61N6FMze, M61N6MMxe, M61N6MMye, M61N6MMze, & + M61N7FMxe, M61N7FMye, M61N7FMze, M61N7MMxe, M61N7MMye, M61N7MMze, M61N8FMxe, M61N8FMye, M61N8FMze, M61N8MMxe, M61N8MMye, M61N8MMze, & + M61N9FMxe, M61N9FMye, M61N9FMze, M61N9MMxe, M61N9MMye, M61N9MMze, M62N1FMxe, M62N1FMye, M62N1FMze, M62N1MMxe, M62N1MMye, M62N1MMze, & + M62N2FMxe, M62N2FMye, M62N2FMze, M62N2MMxe, M62N2MMye, M62N2MMze, M62N3FMxe, M62N3FMye, M62N3FMze, M62N3MMxe, M62N3MMye, M62N3MMze, & + M62N4FMxe, M62N4FMye, M62N4FMze, M62N4MMxe, M62N4MMye, M62N4MMze, M62N5FMxe, M62N5FMye, M62N5FMze, M62N5MMxe, M62N5MMye, M62N5MMze, & + M62N6FMxe, M62N6FMye, M62N6FMze, M62N6MMxe, M62N6MMye, M62N6MMze, M62N7FMxe, M62N7FMye, M62N7FMze, M62N7MMxe, M62N7MMye, M62N7MMze, & + M62N8FMxe, M62N8FMye, M62N8FMze, M62N8MMxe, M62N8MMye, M62N8MMze, M62N9FMxe, M62N9FMye, M62N9FMze, M62N9MMxe, M62N9MMye, M62N9MMze, & + M63N1FMxe, M63N1FMye, M63N1FMze, M63N1MMxe, M63N1MMye, M63N1MMze, M63N2FMxe, M63N2FMye, M63N2FMze, M63N2MMxe, M63N2MMye, M63N2MMze, & + M63N3FMxe, M63N3FMye, M63N3FMze, M63N3MMxe, M63N3MMye, M63N3MMze, M63N4FMxe, M63N4FMye, M63N4FMze, M63N4MMxe, M63N4MMye, M63N4MMze, & + M63N5FMxe, M63N5FMye, M63N5FMze, M63N5MMxe, M63N5MMye, M63N5MMze, M63N6FMxe, M63N6FMye, M63N6FMze, M63N6MMxe, M63N6MMye, M63N6MMze, & + M63N7FMxe, M63N7FMye, M63N7FMze, M63N7MMxe, M63N7MMye, M63N7MMze, M63N8FMxe, M63N8FMye, M63N8FMze, M63N8MMxe, M63N8MMye, M63N8MMze, & + M63N9FMxe, M63N9FMye, M63N9FMze, M63N9MMxe, M63N9MMye, M63N9MMze, M64N1FMxe, M64N1FMye, M64N1FMze, M64N1MMxe, M64N1MMye, M64N1MMze, & + M64N2FMxe, M64N2FMye, M64N2FMze, M64N2MMxe, M64N2MMye, M64N2MMze, M64N3FMxe, M64N3FMye, M64N3FMze, M64N3MMxe, M64N3MMye, M64N3MMze, & + M64N4FMxe, M64N4FMye, M64N4FMze, M64N4MMxe, M64N4MMye, M64N4MMze, M64N5FMxe, M64N5FMye, M64N5FMze, M64N5MMxe, M64N5MMye, M64N5MMze, & + M64N6FMxe, M64N6FMye, M64N6FMze, M64N6MMxe, M64N6MMye, M64N6MMze, M64N7FMxe, M64N7FMye, M64N7FMze, M64N7MMxe, M64N7MMye, M64N7MMze, & + M64N8FMxe, M64N8FMye, M64N8FMze, M64N8MMxe, M64N8MMye, M64N8MMze, M64N9FMxe, M64N9FMye, M64N9FMze, M64N9MMxe, M64N9MMye, M64N9MMze, & + M65N1FMxe, M65N1FMye, M65N1FMze, M65N1MMxe, M65N1MMye, M65N1MMze, M65N2FMxe, M65N2FMye, M65N2FMze, M65N2MMxe, M65N2MMye, M65N2MMze, & + M65N3FMxe, M65N3FMye, M65N3FMze, M65N3MMxe, M65N3MMye, M65N3MMze, M65N4FMxe, M65N4FMye, M65N4FMze, M65N4MMxe, M65N4MMye, M65N4MMze, & + M65N5FMxe, M65N5FMye, M65N5FMze, M65N5MMxe, M65N5MMye, M65N5MMze, M65N6FMxe, M65N6FMye, M65N6FMze, M65N6MMxe, M65N6MMye, M65N6MMze, & + M65N7FMxe, M65N7FMye, M65N7FMze, M65N7MMxe, M65N7MMye, M65N7MMze, M65N8FMxe, M65N8FMye, M65N8FMze, M65N8MMxe, M65N8MMye, M65N8MMze, & + M65N9FMxe, M65N9FMye, M65N9FMze, M65N9MMxe, M65N9MMye, M65N9MMze, M66N1FMxe, M66N1FMye, M66N1FMze, M66N1MMxe, M66N1MMye, M66N1MMze, & + M66N2FMxe, M66N2FMye, M66N2FMze, M66N2MMxe, M66N2MMye, M66N2MMze, M66N3FMxe, M66N3FMye, M66N3FMze, M66N3MMxe, M66N3MMye, M66N3MMze, & + M66N4FMxe, M66N4FMye, M66N4FMze, M66N4MMxe, M66N4MMye, M66N4MMze, M66N5FMxe, M66N5FMye, M66N5FMze, M66N5MMxe, M66N5MMye, M66N5MMze, & + M66N6FMxe, M66N6FMye, M66N6FMze, M66N6MMxe, M66N6MMye, M66N6MMze, M66N7FMxe, M66N7FMye, M66N7FMze, M66N7MMxe, M66N7MMye, M66N7MMze, & + M66N8FMxe, M66N8FMye, M66N8FMze, M66N8MMxe, M66N8MMye, M66N8MMze, M66N9FMxe, M66N9FMye, M66N9FMze, M66N9MMxe, M66N9MMye, M66N9MMze, & + M67N1FMxe, M67N1FMye, M67N1FMze, M67N1MMxe, M67N1MMye, M67N1MMze, M67N2FMxe, M67N2FMye, M67N2FMze, M67N2MMxe, M67N2MMye, M67N2MMze, & + M67N3FMxe, M67N3FMye, M67N3FMze, M67N3MMxe, M67N3MMye, M67N3MMze, M67N4FMxe, M67N4FMye, M67N4FMze, M67N4MMxe, M67N4MMye, M67N4MMze, & + M67N5FMxe, M67N5FMye, M67N5FMze, M67N5MMxe, M67N5MMye, M67N5MMze, M67N6FMxe, M67N6FMye, M67N6FMze, M67N6MMxe, M67N6MMye, M67N6MMze, & + M67N7FMxe, M67N7FMye, M67N7FMze, M67N7MMxe, M67N7MMye, M67N7MMze, M67N8FMxe, M67N8FMye, M67N8FMze, M67N8MMxe, M67N8MMye, M67N8MMze, & + M67N9FMxe, M67N9FMye, M67N9FMze, M67N9MMxe, M67N9MMye, M67N9MMze, M68N1FMxe, M68N1FMye, M68N1FMze, M68N1MMxe, M68N1MMye, M68N1MMze, & + M68N2FMxe, M68N2FMye, M68N2FMze, M68N2MMxe, M68N2MMye, M68N2MMze, M68N3FMxe, M68N3FMye, M68N3FMze, M68N3MMxe, M68N3MMye, M68N3MMze, & + M68N4FMxe, M68N4FMye, M68N4FMze, M68N4MMxe, M68N4MMye, M68N4MMze, M68N5FMxe, M68N5FMye, M68N5FMze, M68N5MMxe, M68N5MMye, M68N5MMze, & + M68N6FMxe, M68N6FMye, M68N6FMze, M68N6MMxe, M68N6MMye, M68N6MMze, M68N7FMxe, M68N7FMye, M68N7FMze, M68N7MMxe, M68N7MMye, M68N7MMze, & + M68N8FMxe, M68N8FMye, M68N8FMze, M68N8MMxe, M68N8MMye, M68N8MMze, M68N9FMxe, M68N9FMye, M68N9FMze, M68N9MMxe, M68N9MMye, M68N9MMze, & + M69N1FMxe, M69N1FMye, M69N1FMze, M69N1MMxe, M69N1MMye, M69N1MMze, M69N2FMxe, M69N2FMye, M69N2FMze, M69N2MMxe, M69N2MMye, M69N2MMze, & + M69N3FMxe, M69N3FMye, M69N3FMze, M69N3MMxe, M69N3MMye, M69N3MMze, M69N4FMxe, M69N4FMye, M69N4FMze, M69N4MMxe, M69N4MMye, M69N4MMze, & + M69N5FMxe, M69N5FMye, M69N5FMze, M69N5MMxe, M69N5MMye, M69N5MMze, M69N6FMxe, M69N6FMye, M69N6FMze, M69N6MMxe, M69N6MMye, M69N6MMze, & + M69N7FMxe, M69N7FMye, M69N7FMze, M69N7MMxe, M69N7MMye, M69N7MMze, M69N8FMxe, M69N8FMye, M69N8FMze, M69N8MMxe, M69N8MMye, M69N8MMze, & + M69N9FMxe, M69N9FMye, M69N9FMze, M69N9MMxe, M69N9MMye, M69N9MMze, M70N1FMxe, M70N1FMye, M70N1FMze, M70N1MMxe, M70N1MMye, M70N1MMze, & + M70N2FMxe, M70N2FMye, M70N2FMze, M70N2MMxe, M70N2MMye, M70N2MMze, M70N3FMxe, M70N3FMye, M70N3FMze, M70N3MMxe, M70N3MMye, M70N3MMze, & + M70N4FMxe, M70N4FMye, M70N4FMze, M70N4MMxe, M70N4MMye, M70N4MMze, M70N5FMxe, M70N5FMye, M70N5FMze, M70N5MMxe, M70N5MMye, M70N5MMze, & + M70N6FMxe, M70N6FMye, M70N6FMze, M70N6MMxe, M70N6MMye, M70N6MMze, M70N7FMxe, M70N7FMye, M70N7FMze, M70N7MMxe, M70N7MMye, M70N7MMze, & + M70N8FMxe, M70N8FMye, M70N8FMze, M70N8MMxe, M70N8MMye, M70N8MMze, M70N9FMxe, M70N9FMye, M70N9FMze, M70N9MMxe, M70N9MMye, M70N9MMze, & + M71N1FMxe, M71N1FMye, M71N1FMze, M71N1MMxe, M71N1MMye, M71N1MMze, M71N2FMxe, M71N2FMye, M71N2FMze, M71N2MMxe, M71N2MMye, M71N2MMze, & + M71N3FMxe, M71N3FMye, M71N3FMze, M71N3MMxe, M71N3MMye, M71N3MMze, M71N4FMxe, M71N4FMye, M71N4FMze, M71N4MMxe, M71N4MMye, M71N4MMze, & + M71N5FMxe, M71N5FMye, M71N5FMze, M71N5MMxe, M71N5MMye, M71N5MMze, M71N6FMxe, M71N6FMye, M71N6FMze, M71N6MMxe, M71N6MMye, M71N6MMze, & + M71N7FMxe, M71N7FMye, M71N7FMze, M71N7MMxe, M71N7MMye, M71N7MMze, M71N8FMxe, M71N8FMye, M71N8FMze, M71N8MMxe, M71N8MMye, M71N8MMze, & + M71N9FMxe, M71N9FMye, M71N9FMze, M71N9MMxe, M71N9MMye, M71N9MMze, M72N1FMxe, M72N1FMye, M72N1FMze, M72N1MMxe, M72N1MMye, M72N1MMze, & + M72N2FMxe, M72N2FMye, M72N2FMze, M72N2MMxe, M72N2MMye, M72N2MMze, M72N3FMxe, M72N3FMye, M72N3FMze, M72N3MMxe, M72N3MMye, M72N3MMze, & + M72N4FMxe, M72N4FMye, M72N4FMze, M72N4MMxe, M72N4MMye, M72N4MMze, M72N5FMxe, M72N5FMye, M72N5FMze, M72N5MMxe, M72N5MMye, M72N5MMze, & + M72N6FMxe, M72N6FMye, M72N6FMze, M72N6MMxe, M72N6MMye, M72N6MMze, M72N7FMxe, M72N7FMye, M72N7FMze, M72N7MMxe, M72N7MMye, M72N7MMze, & + M72N8FMxe, M72N8FMye, M72N8FMze, M72N8MMxe, M72N8MMye, M72N8MMze, M72N9FMxe, M72N9FMye, M72N9FMze, M72N9MMxe, M72N9MMye, M72N9MMze, & + M73N1FMxe, M73N1FMye, M73N1FMze, M73N1MMxe, M73N1MMye, M73N1MMze, M73N2FMxe, M73N2FMye, M73N2FMze, M73N2MMxe, M73N2MMye, M73N2MMze, & + M73N3FMxe, M73N3FMye, M73N3FMze, M73N3MMxe, M73N3MMye, M73N3MMze, M73N4FMxe, M73N4FMye, M73N4FMze, M73N4MMxe, M73N4MMye, M73N4MMze, & + M73N5FMxe, M73N5FMye, M73N5FMze, M73N5MMxe, M73N5MMye, M73N5MMze, M73N6FMxe, M73N6FMye, M73N6FMze, M73N6MMxe, M73N6MMye, M73N6MMze, & + M73N7FMxe, M73N7FMye, M73N7FMze, M73N7MMxe, M73N7MMye, M73N7MMze, M73N8FMxe, M73N8FMye, M73N8FMze, M73N8MMxe, M73N8MMye, M73N8MMze, & + M73N9FMxe, M73N9FMye, M73N9FMze, M73N9MMxe, M73N9MMye, M73N9MMze, M74N1FMxe, M74N1FMye, M74N1FMze, M74N1MMxe, M74N1MMye, M74N1MMze, & + M74N2FMxe, M74N2FMye, M74N2FMze, M74N2MMxe, M74N2MMye, M74N2MMze, M74N3FMxe, M74N3FMye, M74N3FMze, M74N3MMxe, M74N3MMye, M74N3MMze, & + M74N4FMxe, M74N4FMye, M74N4FMze, M74N4MMxe, M74N4MMye, M74N4MMze, M74N5FMxe, M74N5FMye, M74N5FMze, M74N5MMxe, M74N5MMye, M74N5MMze, & + M74N6FMxe, M74N6FMye, M74N6FMze, M74N6MMxe, M74N6MMye, M74N6MMze, M74N7FMxe, M74N7FMye, M74N7FMze, M74N7MMxe, M74N7MMye, M74N7MMze, & + M74N8FMxe, M74N8FMye, M74N8FMze, M74N8MMxe, M74N8MMye, M74N8MMze, M74N9FMxe, M74N9FMye, M74N9FMze, M74N9MMxe, M74N9MMye, M74N9MMze, & + M75N1FMxe, M75N1FMye, M75N1FMze, M75N1MMxe, M75N1MMye, M75N1MMze, M75N2FMxe, M75N2FMye, M75N2FMze, M75N2MMxe, M75N2MMye, M75N2MMze, & + M75N3FMxe, M75N3FMye, M75N3FMze, M75N3MMxe, M75N3MMye, M75N3MMze, M75N4FMxe, M75N4FMye, M75N4FMze, M75N4MMxe, M75N4MMye, M75N4MMze, & + M75N5FMxe, M75N5FMye, M75N5FMze, M75N5MMxe, M75N5MMye, M75N5MMze, M75N6FMxe, M75N6FMye, M75N6FMze, M75N6MMxe, M75N6MMye, M75N6MMze, & + M75N7FMxe, M75N7FMye, M75N7FMze, M75N7MMxe, M75N7MMye, M75N7MMze, M75N8FMxe, M75N8FMye, M75N8FMze, M75N8MMxe, M75N8MMye, M75N8MMze, & + M75N9FMxe, M75N9FMye, M75N9FMze, M75N9MMxe, M75N9MMye, M75N9MMze, M76N1FMxe, M76N1FMye, M76N1FMze, M76N1MMxe, M76N1MMye, M76N1MMze, & + M76N2FMxe, M76N2FMye, M76N2FMze, M76N2MMxe, M76N2MMye, M76N2MMze, M76N3FMxe, M76N3FMye, M76N3FMze, M76N3MMxe, M76N3MMye, M76N3MMze, & + M76N4FMxe, M76N4FMye, M76N4FMze, M76N4MMxe, M76N4MMye, M76N4MMze, M76N5FMxe, M76N5FMye, M76N5FMze, M76N5MMxe, M76N5MMye, M76N5MMze, & + M76N6FMxe, M76N6FMye, M76N6FMze, M76N6MMxe, M76N6MMye, M76N6MMze, M76N7FMxe, M76N7FMye, M76N7FMze, M76N7MMxe, M76N7MMye, M76N7MMze, & + M76N8FMxe, M76N8FMye, M76N8FMze, M76N8MMxe, M76N8MMye, M76N8MMze, M76N9FMxe, M76N9FMye, M76N9FMze, M76N9MMxe, M76N9MMye, M76N9MMze, & + M77N1FMxe, M77N1FMye, M77N1FMze, M77N1MMxe, M77N1MMye, M77N1MMze, M77N2FMxe, M77N2FMye, M77N2FMze, M77N2MMxe, M77N2MMye, M77N2MMze, & + M77N3FMxe, M77N3FMye, M77N3FMze, M77N3MMxe, M77N3MMye, M77N3MMze, M77N4FMxe, M77N4FMye, M77N4FMze, M77N4MMxe, M77N4MMye, M77N4MMze, & + M77N5FMxe, M77N5FMye, M77N5FMze, M77N5MMxe, M77N5MMye, M77N5MMze, M77N6FMxe, M77N6FMye, M77N6FMze, M77N6MMxe, M77N6MMye, M77N6MMze, & + M77N7FMxe, M77N7FMye, M77N7FMze, M77N7MMxe, M77N7MMye, M77N7MMze, M77N8FMxe, M77N8FMye, M77N8FMze, M77N8MMxe, M77N8MMye, M77N8MMze, & + M77N9FMxe, M77N9FMye, M77N9FMze, M77N9MMxe, M77N9MMye, M77N9MMze, M78N1FMxe, M78N1FMye, M78N1FMze, M78N1MMxe, M78N1MMye, M78N1MMze, & + M78N2FMxe, M78N2FMye, M78N2FMze, M78N2MMxe, M78N2MMye, M78N2MMze, M78N3FMxe, M78N3FMye, M78N3FMze, M78N3MMxe, M78N3MMye, M78N3MMze, & + M78N4FMxe, M78N4FMye, M78N4FMze, M78N4MMxe, M78N4MMye, M78N4MMze, M78N5FMxe, M78N5FMye, M78N5FMze, M78N5MMxe, M78N5MMye, M78N5MMze, & + M78N6FMxe, M78N6FMye, M78N6FMze, M78N6MMxe, M78N6MMye, M78N6MMze, M78N7FMxe, M78N7FMye, M78N7FMze, M78N7MMxe, M78N7MMye, M78N7MMze, & + M78N8FMxe, M78N8FMye, M78N8FMze, M78N8MMxe, M78N8MMye, M78N8MMze, M78N9FMxe, M78N9FMye, M78N9FMze, M78N9MMxe, M78N9MMye, M78N9MMze, & + M79N1FMxe, M79N1FMye, M79N1FMze, M79N1MMxe, M79N1MMye, M79N1MMze, M79N2FMxe, M79N2FMye, M79N2FMze, M79N2MMxe, M79N2MMye, M79N2MMze, & + M79N3FMxe, M79N3FMye, M79N3FMze, M79N3MMxe, M79N3MMye, M79N3MMze, M79N4FMxe, M79N4FMye, M79N4FMze, M79N4MMxe, M79N4MMye, M79N4MMze, & + M79N5FMxe, M79N5FMye, M79N5FMze, M79N5MMxe, M79N5MMye, M79N5MMze, M79N6FMxe, M79N6FMye, M79N6FMze, M79N6MMxe, M79N6MMye, M79N6MMze, & + M79N7FMxe, M79N7FMye, M79N7FMze, M79N7MMxe, M79N7MMye, M79N7MMze, M79N8FMxe, M79N8FMye, M79N8FMze, M79N8MMxe, M79N8MMye, M79N8MMze, & + M79N9FMxe, M79N9FMye, M79N9FMze, M79N9MMxe, M79N9MMye, M79N9MMze, M80N1FMxe, M80N1FMye, M80N1FMze, M80N1MMxe, M80N1MMye, M80N1MMze, & + M80N2FMxe, M80N2FMye, M80N2FMze, M80N2MMxe, M80N2MMye, M80N2MMze, M80N3FMxe, M80N3FMye, M80N3FMze, M80N3MMxe, M80N3MMye, M80N3MMze, & + M80N4FMxe, M80N4FMye, M80N4FMze, M80N4MMxe, M80N4MMye, M80N4MMze, M80N5FMxe, M80N5FMye, M80N5FMze, M80N5MMxe, M80N5MMye, M80N5MMze, & + M80N6FMxe, M80N6FMye, M80N6FMze, M80N6MMxe, M80N6MMye, M80N6MMze, M80N7FMxe, M80N7FMye, M80N7FMze, M80N7MMxe, M80N7MMye, M80N7MMze, & + M80N8FMxe, M80N8FMye, M80N8FMze, M80N8MMxe, M80N8MMye, M80N8MMze, M80N9FMxe, M80N9FMye, M80N9FMze, M80N9MMxe, M80N9MMye, M80N9MMze, & + M81N1FMxe, M81N1FMye, M81N1FMze, M81N1MMxe, M81N1MMye, M81N1MMze, M81N2FMxe, M81N2FMye, M81N2FMze, M81N2MMxe, M81N2MMye, M81N2MMze, & + M81N3FMxe, M81N3FMye, M81N3FMze, M81N3MMxe, M81N3MMye, M81N3MMze, M81N4FMxe, M81N4FMye, M81N4FMze, M81N4MMxe, M81N4MMye, M81N4MMze, & + M81N5FMxe, M81N5FMye, M81N5FMze, M81N5MMxe, M81N5MMye, M81N5MMze, M81N6FMxe, M81N6FMye, M81N6FMze, M81N6MMxe, M81N6MMye, M81N6MMze, & + M81N7FMxe, M81N7FMye, M81N7FMze, M81N7MMxe, M81N7MMye, M81N7MMze, M81N8FMxe, M81N8FMye, M81N8FMze, M81N8MMxe, M81N8MMye, M81N8MMze, & + M81N9FMxe, M81N9FMye, M81N9FMze, M81N9MMxe, M81N9MMye, M81N9MMze, M82N1FMxe, M82N1FMye, M82N1FMze, M82N1MMxe, M82N1MMye, M82N1MMze, & + M82N2FMxe, M82N2FMye, M82N2FMze, M82N2MMxe, M82N2MMye, M82N2MMze, M82N3FMxe, M82N3FMye, M82N3FMze, M82N3MMxe, M82N3MMye, M82N3MMze, & + M82N4FMxe, M82N4FMye, M82N4FMze, M82N4MMxe, M82N4MMye, M82N4MMze, M82N5FMxe, M82N5FMye, M82N5FMze, M82N5MMxe, M82N5MMye, M82N5MMze, & + M82N6FMxe, M82N6FMye, M82N6FMze, M82N6MMxe, M82N6MMye, M82N6MMze, M82N7FMxe, M82N7FMye, M82N7FMze, M82N7MMxe, M82N7MMye, M82N7MMze, & + M82N8FMxe, M82N8FMye, M82N8FMze, M82N8MMxe, M82N8MMye, M82N8MMze, M82N9FMxe, M82N9FMye, M82N9FMze, M82N9MMxe, M82N9MMye, M82N9MMze, & + M83N1FMxe, M83N1FMye, M83N1FMze, M83N1MMxe, M83N1MMye, M83N1MMze, M83N2FMxe, M83N2FMye, M83N2FMze, M83N2MMxe, M83N2MMye, M83N2MMze, & + M83N3FMxe, M83N3FMye, M83N3FMze, M83N3MMxe, M83N3MMye, M83N3MMze, M83N4FMxe, M83N4FMye, M83N4FMze, M83N4MMxe, M83N4MMye, M83N4MMze, & + M83N5FMxe, M83N5FMye, M83N5FMze, M83N5MMxe, M83N5MMye, M83N5MMze, M83N6FMxe, M83N6FMye, M83N6FMze, M83N6MMxe, M83N6MMye, M83N6MMze, & + M83N7FMxe, M83N7FMye, M83N7FMze, M83N7MMxe, M83N7MMye, M83N7MMze, M83N8FMxe, M83N8FMye, M83N8FMze, M83N8MMxe, M83N8MMye, M83N8MMze, & + M83N9FMxe, M83N9FMye, M83N9FMze, M83N9MMxe, M83N9MMye, M83N9MMze, M84N1FMxe, M84N1FMye, M84N1FMze, M84N1MMxe, M84N1MMye, M84N1MMze, & + M84N2FMxe, M84N2FMye, M84N2FMze, M84N2MMxe, M84N2MMye, M84N2MMze, M84N3FMxe, M84N3FMye, M84N3FMze, M84N3MMxe, M84N3MMye, M84N3MMze, & + M84N4FMxe, M84N4FMye, M84N4FMze, M84N4MMxe, M84N4MMye, M84N4MMze, M84N5FMxe, M84N5FMye, M84N5FMze, M84N5MMxe, M84N5MMye, M84N5MMze, & + M84N6FMxe, M84N6FMye, M84N6FMze, M84N6MMxe, M84N6MMye, M84N6MMze, M84N7FMxe, M84N7FMye, M84N7FMze, M84N7MMxe, M84N7MMye, M84N7MMze, & + M84N8FMxe, M84N8FMye, M84N8FMze, M84N8MMxe, M84N8MMye, M84N8MMze, M84N9FMxe, M84N9FMye, M84N9FMze, M84N9MMxe, M84N9MMye, M84N9MMze, & + M85N1FMxe, M85N1FMye, M85N1FMze, M85N1MMxe, M85N1MMye, M85N1MMze, M85N2FMxe, M85N2FMye, M85N2FMze, M85N2MMxe, M85N2MMye, M85N2MMze, & + M85N3FMxe, M85N3FMye, M85N3FMze, M85N3MMxe, M85N3MMye, M85N3MMze, M85N4FMxe, M85N4FMye, M85N4FMze, M85N4MMxe, M85N4MMye, M85N4MMze, & + M85N5FMxe, M85N5FMye, M85N5FMze, M85N5MMxe, M85N5MMye, M85N5MMze, M85N6FMxe, M85N6FMye, M85N6FMze, M85N6MMxe, M85N6MMye, M85N6MMze, & + M85N7FMxe, M85N7FMye, M85N7FMze, M85N7MMxe, M85N7MMye, M85N7MMze, M85N8FMxe, M85N8FMye, M85N8FMze, M85N8MMxe, M85N8MMye, M85N8MMze, & + M85N9FMxe, M85N9FMye, M85N9FMze, M85N9MMxe, M85N9MMye, M85N9MMze, M86N1FMxe, M86N1FMye, M86N1FMze, M86N1MMxe, M86N1MMye, M86N1MMze, & + M86N2FMxe, M86N2FMye, M86N2FMze, M86N2MMxe, M86N2MMye, M86N2MMze, M86N3FMxe, M86N3FMye, M86N3FMze, M86N3MMxe, M86N3MMye, M86N3MMze, & + M86N4FMxe, M86N4FMye, M86N4FMze, M86N4MMxe, M86N4MMye, M86N4MMze, M86N5FMxe, M86N5FMye, M86N5FMze, M86N5MMxe, M86N5MMye, M86N5MMze, & + M86N6FMxe, M86N6FMye, M86N6FMze, M86N6MMxe, M86N6MMye, M86N6MMze, M86N7FMxe, M86N7FMye, M86N7FMze, M86N7MMxe, M86N7MMye, M86N7MMze, & + M86N8FMxe, M86N8FMye, M86N8FMze, M86N8MMxe, M86N8MMye, M86N8MMze, M86N9FMxe, M86N9FMye, M86N9FMze, M86N9MMxe, M86N9MMye, M86N9MMze, & + M87N1FMxe, M87N1FMye, M87N1FMze, M87N1MMxe, M87N1MMye, M87N1MMze, M87N2FMxe, M87N2FMye, M87N2FMze, M87N2MMxe, M87N2MMye, M87N2MMze, & + M87N3FMxe, M87N3FMye, M87N3FMze, M87N3MMxe, M87N3MMye, M87N3MMze, M87N4FMxe, M87N4FMye, M87N4FMze, M87N4MMxe, M87N4MMye, M87N4MMze, & + M87N5FMxe, M87N5FMye, M87N5FMze, M87N5MMxe, M87N5MMye, M87N5MMze, M87N6FMxe, M87N6FMye, M87N6FMze, M87N6MMxe, M87N6MMye, M87N6MMze, & + M87N7FMxe, M87N7FMye, M87N7FMze, M87N7MMxe, M87N7MMye, M87N7MMze, M87N8FMxe, M87N8FMye, M87N8FMze, M87N8MMxe, M87N8MMye, M87N8MMze, & + M87N9FMxe, M87N9FMye, M87N9FMze, M87N9MMxe, M87N9MMye, M87N9MMze, M88N1FMxe, M88N1FMye, M88N1FMze, M88N1MMxe, M88N1MMye, M88N1MMze, & + M88N2FMxe, M88N2FMye, M88N2FMze, M88N2MMxe, M88N2MMye, M88N2MMze, M88N3FMxe, M88N3FMye, M88N3FMze, M88N3MMxe, M88N3MMye, M88N3MMze, & + M88N4FMxe, M88N4FMye, M88N4FMze, M88N4MMxe, M88N4MMye, M88N4MMze, M88N5FMxe, M88N5FMye, M88N5FMze, M88N5MMxe, M88N5MMye, M88N5MMze, & + M88N6FMxe, M88N6FMye, M88N6FMze, M88N6MMxe, M88N6MMye, M88N6MMze, M88N7FMxe, M88N7FMye, M88N7FMze, M88N7MMxe, M88N7MMye, M88N7MMze, & + M88N8FMxe, M88N8FMye, M88N8FMze, M88N8MMxe, M88N8MMye, M88N8MMze, M88N9FMxe, M88N9FMye, M88N9FMze, M88N9MMxe, M88N9MMye, M88N9MMze, & + M89N1FMxe, M89N1FMye, M89N1FMze, M89N1MMxe, M89N1MMye, M89N1MMze, M89N2FMxe, M89N2FMye, M89N2FMze, M89N2MMxe, M89N2MMye, M89N2MMze, & + M89N3FMxe, M89N3FMye, M89N3FMze, M89N3MMxe, M89N3MMye, M89N3MMze, M89N4FMxe, M89N4FMye, M89N4FMze, M89N4MMxe, M89N4MMye, M89N4MMze, & + M89N5FMxe, M89N5FMye, M89N5FMze, M89N5MMxe, M89N5MMye, M89N5MMze, M89N6FMxe, M89N6FMye, M89N6FMze, M89N6MMxe, M89N6MMye, M89N6MMze, & + M89N7FMxe, M89N7FMye, M89N7FMze, M89N7MMxe, M89N7MMye, M89N7MMze, M89N8FMxe, M89N8FMye, M89N8FMze, M89N8MMxe, M89N8MMye, M89N8MMze, & + M89N9FMxe, M89N9FMye, M89N9FMze, M89N9MMxe, M89N9MMye, M89N9MMze, M90N1FMxe, M90N1FMye, M90N1FMze, M90N1MMxe, M90N1MMye, M90N1MMze, & + M90N2FMxe, M90N2FMye, M90N2FMze, M90N2MMxe, M90N2MMye, M90N2MMze, M90N3FMxe, M90N3FMye, M90N3FMze, M90N3MMxe, M90N3MMye, M90N3MMze, & + M90N4FMxe, M90N4FMye, M90N4FMze, M90N4MMxe, M90N4MMye, M90N4MMze, M90N5FMxe, M90N5FMye, M90N5FMze, M90N5MMxe, M90N5MMye, M90N5MMze, & + M90N6FMxe, M90N6FMye, M90N6FMze, M90N6MMxe, M90N6MMye, M90N6MMze, M90N7FMxe, M90N7FMye, M90N7FMze, M90N7MMxe, M90N7MMye, M90N7MMze, & + M90N8FMxe, M90N8FMye, M90N8FMze, M90N8MMxe, M90N8MMye, M90N8MMze, M90N9FMxe, M90N9FMye, M90N9FMze, M90N9MMxe, M90N9MMye, M90N9MMze, & + M91N1FMxe, M91N1FMye, M91N1FMze, M91N1MMxe, M91N1MMye, M91N1MMze, M91N2FMxe, M91N2FMye, M91N2FMze, M91N2MMxe, M91N2MMye, M91N2MMze, & + M91N3FMxe, M91N3FMye, M91N3FMze, M91N3MMxe, M91N3MMye, M91N3MMze, M91N4FMxe, M91N4FMye, M91N4FMze, M91N4MMxe, M91N4MMye, M91N4MMze, & + M91N5FMxe, M91N5FMye, M91N5FMze, M91N5MMxe, M91N5MMye, M91N5MMze, M91N6FMxe, M91N6FMye, M91N6FMze, M91N6MMxe, M91N6MMye, M91N6MMze, & + M91N7FMxe, M91N7FMye, M91N7FMze, M91N7MMxe, M91N7MMye, M91N7MMze, M91N8FMxe, M91N8FMye, M91N8FMze, M91N8MMxe, M91N8MMye, M91N8MMze, & + M91N9FMxe, M91N9FMye, M91N9FMze, M91N9MMxe, M91N9MMye, M91N9MMze, M92N1FMxe, M92N1FMye, M92N1FMze, M92N1MMxe, M92N1MMye, M92N1MMze, & + M92N2FMxe, M92N2FMye, M92N2FMze, M92N2MMxe, M92N2MMye, M92N2MMze, M92N3FMxe, M92N3FMye, M92N3FMze, M92N3MMxe, M92N3MMye, M92N3MMze, & + M92N4FMxe, M92N4FMye, M92N4FMze, M92N4MMxe, M92N4MMye, M92N4MMze, M92N5FMxe, M92N5FMye, M92N5FMze, M92N5MMxe, M92N5MMye, M92N5MMze, & + M92N6FMxe, M92N6FMye, M92N6FMze, M92N6MMxe, M92N6MMye, M92N6MMze, M92N7FMxe, M92N7FMye, M92N7FMze, M92N7MMxe, M92N7MMye, M92N7MMze, & + M92N8FMxe, M92N8FMye, M92N8FMze, M92N8MMxe, M92N8MMye, M92N8MMze, M92N9FMxe, M92N9FMye, M92N9FMze, M92N9MMxe, M92N9MMye, M92N9MMze, & + M93N1FMxe, M93N1FMye, M93N1FMze, M93N1MMxe, M93N1MMye, M93N1MMze, M93N2FMxe, M93N2FMye, M93N2FMze, M93N2MMxe, M93N2MMye, M93N2MMze, & + M93N3FMxe, M93N3FMye, M93N3FMze, M93N3MMxe, M93N3MMye, M93N3MMze, M93N4FMxe, M93N4FMye, M93N4FMze, M93N4MMxe, M93N4MMye, M93N4MMze, & + M93N5FMxe, M93N5FMye, M93N5FMze, M93N5MMxe, M93N5MMye, M93N5MMze, M93N6FMxe, M93N6FMye, M93N6FMze, M93N6MMxe, M93N6MMye, M93N6MMze, & + M93N7FMxe, M93N7FMye, M93N7FMze, M93N7MMxe, M93N7MMye, M93N7MMze, M93N8FMxe, M93N8FMye, M93N8FMze, M93N8MMxe, M93N8MMye, M93N8MMze, & + M93N9FMxe, M93N9FMye, M93N9FMze, M93N9MMxe, M93N9MMye, M93N9MMze, M94N1FMxe, M94N1FMye, M94N1FMze, M94N1MMxe, M94N1MMye, M94N1MMze, & + M94N2FMxe, M94N2FMye, M94N2FMze, M94N2MMxe, M94N2MMye, M94N2MMze, M94N3FMxe, M94N3FMye, M94N3FMze, M94N3MMxe, M94N3MMye, M94N3MMze, & + M94N4FMxe, M94N4FMye, M94N4FMze, M94N4MMxe, M94N4MMye, M94N4MMze, M94N5FMxe, M94N5FMye, M94N5FMze, M94N5MMxe, M94N5MMye, M94N5MMze, & + M94N6FMxe, M94N6FMye, M94N6FMze, M94N6MMxe, M94N6MMye, M94N6MMze, M94N7FMxe, M94N7FMye, M94N7FMze, M94N7MMxe, M94N7MMye, M94N7MMze, & + M94N8FMxe, M94N8FMye, M94N8FMze, M94N8MMxe, M94N8MMye, M94N8MMze, M94N9FMxe, M94N9FMye, M94N9FMze, M94N9MMxe, M94N9MMye, M94N9MMze, & + M95N1FMxe, M95N1FMye, M95N1FMze, M95N1MMxe, M95N1MMye, M95N1MMze, M95N2FMxe, M95N2FMye, M95N2FMze, M95N2MMxe, M95N2MMye, M95N2MMze, & + M95N3FMxe, M95N3FMye, M95N3FMze, M95N3MMxe, M95N3MMye, M95N3MMze, M95N4FMxe, M95N4FMye, M95N4FMze, M95N4MMxe, M95N4MMye, M95N4MMze, & + M95N5FMxe, M95N5FMye, M95N5FMze, M95N5MMxe, M95N5MMye, M95N5MMze, M95N6FMxe, M95N6FMye, M95N6FMze, M95N6MMxe, M95N6MMye, M95N6MMze, & + M95N7FMxe, M95N7FMye, M95N7FMze, M95N7MMxe, M95N7MMye, M95N7MMze, M95N8FMxe, M95N8FMye, M95N8FMze, M95N8MMxe, M95N8MMye, M95N8MMze, & + M95N9FMxe, M95N9FMye, M95N9FMze, M95N9MMxe, M95N9MMye, M95N9MMze, M96N1FMxe, M96N1FMye, M96N1FMze, M96N1MMxe, M96N1MMye, M96N1MMze, & + M96N2FMxe, M96N2FMye, M96N2FMze, M96N2MMxe, M96N2MMye, M96N2MMze, M96N3FMxe, M96N3FMye, M96N3FMze, M96N3MMxe, M96N3MMye, M96N3MMze, & + M96N4FMxe, M96N4FMye, M96N4FMze, M96N4MMxe, M96N4MMye, M96N4MMze, M96N5FMxe, M96N5FMye, M96N5FMze, M96N5MMxe, M96N5MMye, M96N5MMze, & + M96N6FMxe, M96N6FMye, M96N6FMze, M96N6MMxe, M96N6MMye, M96N6MMze, M96N7FMxe, M96N7FMye, M96N7FMze, M96N7MMxe, M96N7MMye, M96N7MMze, & + M96N8FMxe, M96N8FMye, M96N8FMze, M96N8MMxe, M96N8MMye, M96N8MMze, M96N9FMxe, M96N9FMye, M96N9FMze, M96N9MMxe, M96N9MMye, M96N9MMze, & + M97N1FMxe, M97N1FMye, M97N1FMze, M97N1MMxe, M97N1MMye, M97N1MMze, M97N2FMxe, M97N2FMye, M97N2FMze, M97N2MMxe, M97N2MMye, M97N2MMze, & + M97N3FMxe, M97N3FMye, M97N3FMze, M97N3MMxe, M97N3MMye, M97N3MMze, M97N4FMxe, M97N4FMye, M97N4FMze, M97N4MMxe, M97N4MMye, M97N4MMze, & + M97N5FMxe, M97N5FMye, M97N5FMze, M97N5MMxe, M97N5MMye, M97N5MMze, M97N6FMxe, M97N6FMye, M97N6FMze, M97N6MMxe, M97N6MMye, M97N6MMze, & + M97N7FMxe, M97N7FMye, M97N7FMze, M97N7MMxe, M97N7MMye, M97N7MMze, M97N8FMxe, M97N8FMye, M97N8FMze, M97N8MMxe, M97N8MMye, M97N8MMze, & + M97N9FMxe, M97N9FMye, M97N9FMze, M97N9MMxe, M97N9MMye, M97N9MMze, M98N1FMxe, M98N1FMye, M98N1FMze, M98N1MMxe, M98N1MMye, M98N1MMze, & + M98N2FMxe, M98N2FMye, M98N2FMze, M98N2MMxe, M98N2MMye, M98N2MMze, M98N3FMxe, M98N3FMye, M98N3FMze, M98N3MMxe, M98N3MMye, M98N3MMze, & + M98N4FMxe, M98N4FMye, M98N4FMze, M98N4MMxe, M98N4MMye, M98N4MMze, M98N5FMxe, M98N5FMye, M98N5FMze, M98N5MMxe, M98N5MMye, M98N5MMze, & + M98N6FMxe, M98N6FMye, M98N6FMze, M98N6MMxe, M98N6MMye, M98N6MMze, M98N7FMxe, M98N7FMye, M98N7FMze, M98N7MMxe, M98N7MMye, M98N7MMze, & + M98N8FMxe, M98N8FMye, M98N8FMze, M98N8MMxe, M98N8MMye, M98N8MMze, M98N9FMxe, M98N9FMye, M98N9FMze, M98N9MMxe, M98N9MMye, M98N9MMze, & + M99N1FMxe, M99N1FMye, M99N1FMze, M99N1MMxe, M99N1MMye, M99N1MMze, M99N2FMxe, M99N2FMye, M99N2FMze, M99N2MMxe, M99N2MMye, M99N2MMze, & + M99N3FMxe, M99N3FMye, M99N3FMze, M99N3MMxe, M99N3MMye, M99N3MMze, M99N4FMxe, M99N4FMye, M99N4FMze, M99N4MMxe, M99N4MMye, M99N4MMze, & + M99N5FMxe, M99N5FMye, M99N5FMze, M99N5MMxe, M99N5MMye, M99N5MMze, M99N6FMxe, M99N6FMye, M99N6FMze, M99N6MMxe, M99N6MMye, M99N6MMze, & + M99N7FMxe, M99N7FMye, M99N7FMze, M99N7MMxe, M99N7MMye, M99N7MMze, M99N8FMxe, M99N8FMye, M99N8FMze, M99N8MMxe, M99N8MMye, M99N8MMze, & + M99N9FMxe, M99N9FMye, M99N9FMze, M99N9MMxe, M99N9MMye, M99N9MMze/),(/6,9,99/)) -INTEGER, PARAMETER :: MNRDe (3,9,9) = reshape((/M1N1RDxe,M1N1RDye,M1N1RDze, & - M1N2RDxe,M1N2RDye,M1N2RDze, & - M1N3RDxe,M1N3RDye,M1N3RDze, & - M1N4RDxe,M1N4RDye,M1N4RDze, & - M1N5RDxe,M1N5RDye,M1N5RDze, & - M1N6RDxe,M1N6RDye,M1N6RDze, & - M1N7RDxe,M1N7RDye,M1N7RDze, & - M1N8RDxe,M1N8RDye,M1N8RDze, & - M1N9RDxe,M1N9RDye,M1N9RDze, & - M2N1RDxe,M2N1RDye,M2N1RDze, & - M2N2RDxe,M2N2RDye,M2N2RDze, & - M2N3RDxe,M2N3RDye,M2N3RDze, & - M2N4RDxe,M2N4RDye,M2N4RDze, & - M2N5RDxe,M2N5RDye,M2N5RDze, & - M2N6RDxe,M2N6RDye,M2N6RDze, & - M2N7RDxe,M2N7RDye,M2N7RDze, & - M2N8RDxe,M2N8RDye,M2N8RDze, & - M2N9RDxe,M2N9RDye,M2N9RDze, & - M3N1RDxe,M3N1RDye,M3N1RDze, & - M3N2RDxe,M3N2RDye,M3N2RDze, & - M3N3RDxe,M3N3RDye,M3N3RDze, & - M3N4RDxe,M3N4RDye,M3N4RDze, & - M3N5RDxe,M3N5RDye,M3N5RDze, & - M3N6RDxe,M3N6RDye,M3N6RDze, & - M3N7RDxe,M3N7RDye,M3N7RDze, & - M3N8RDxe,M3N8RDye,M3N8RDze, & - M3N9RDxe,M3N9RDye,M3N9RDze, & - M4N1RDxe,M4N1RDye,M4N1RDze, & - M4N2RDxe,M4N2RDye,M4N2RDze, & - M4N3RDxe,M4N3RDye,M4N3RDze, & - M4N4RDxe,M4N4RDye,M4N4RDze, & - M4N5RDxe,M4N5RDye,M4N5RDze, & - M4N6RDxe,M4N6RDye,M4N6RDze, & - M4N7RDxe,M4N7RDye,M4N7RDze, & - M4N8RDxe,M4N8RDye,M4N8RDze, & - M4N9RDxe,M4N9RDye,M4N9RDze, & - M5N1RDxe,M5N1RDye,M5N1RDze, & - M5N2RDxe,M5N2RDye,M5N2RDze, & - M5N3RDxe,M5N3RDye,M5N3RDze, & - M5N4RDxe,M5N4RDye,M5N4RDze, & - M5N5RDxe,M5N5RDye,M5N5RDze, & - M5N6RDxe,M5N6RDye,M5N6RDze, & - M5N7RDxe,M5N7RDye,M5N7RDze, & - M5N8RDxe,M5N8RDye,M5N8RDze, & - M5N9RDxe,M5N9RDye,M5N9RDze, & - M6N1RDxe,M6N1RDye,M6N1RDze, & - M6N2RDxe,M6N2RDye,M6N2RDze, & - M6N3RDxe,M6N3RDye,M6N3RDze, & - M6N4RDxe,M6N4RDye,M6N4RDze, & - M6N5RDxe,M6N5RDye,M6N5RDze, & - M6N6RDxe,M6N6RDye,M6N6RDze, & - M6N7RDxe,M6N7RDye,M6N7RDze, & - M6N8RDxe,M6N8RDye,M6N8RDze, & - M6N9RDxe,M6N9RDye,M6N9RDze, & - M7N1RDxe,M7N1RDye,M7N1RDze, & - M7N2RDxe,M7N2RDye,M7N2RDze, & - M7N3RDxe,M7N3RDye,M7N3RDze, & - M7N4RDxe,M7N4RDye,M7N4RDze, & - M7N5RDxe,M7N5RDye,M7N5RDze, & - M7N6RDxe,M7N6RDye,M7N6RDze, & - M7N7RDxe,M7N7RDye,M7N7RDze, & - M7N8RDxe,M7N8RDye,M7N8RDze, & - M7N9RDxe,M7N9RDye,M7N9RDze, & - M8N1RDxe,M8N1RDye,M8N1RDze, & - M8N2RDxe,M8N2RDye,M8N2RDze, & - M8N3RDxe,M8N3RDye,M8N3RDze, & - M8N4RDxe,M8N4RDye,M8N4RDze, & - M8N5RDxe,M8N5RDye,M8N5RDze, & - M8N6RDxe,M8N6RDye,M8N6RDze, & - M8N7RDxe,M8N7RDye,M8N7RDze, & - M8N8RDxe,M8N8RDye,M8N8RDze, & - M8N9RDxe,M8N9RDye,M8N9RDze, & - M9N1RDxe,M9N1RDye,M9N1RDze, & - M9N2RDxe,M9N2RDye,M9N2RDze, & - M9N3RDxe,M9N3RDye,M9N3RDze, & - M9N4RDxe,M9N4RDye,M9N4RDze, & - M9N5RDxe,M9N5RDye,M9N5RDze, & - M9N6RDxe,M9N6RDye,M9N6RDze, & - M9N7RDxe,M9N7RDye,M9N7RDze, & - M9N8RDxe,M9N8RDye,M9N8RDze, & - M9N9RDxe,M9N9RDye,M9N9RDze/), (/3,9,9/)) - - - INTEGER, PARAMETER :: MNTRAe(6,9,9) = reshape( (/M1N1TAxe,M1N1TAye,M1N1TAze,M1N1RAxe,M1N1RAye,M1N1RAze, & - M1N2TAxe,M1N2TAye,M1N2TAze,M1N2RAxe,M1N2RAye,M1N2RAze, & - M1N3TAxe,M1N3TAye,M1N3TAze,M1N3RAxe,M1N3RAye,M1N3RAze, & - M1N4TAxe,M1N4TAye,M1N4TAze,M1N4RAxe,M1N4RAye,M1N4RAze, & - M1N5TAxe,M1N5TAye,M1N5TAze,M1N5RAxe,M1N5RAye,M1N5RAze, & - M1N6TAxe,M1N6TAye,M1N6TAze,M1N6RAxe,M1N6RAye,M1N6RAze, & - M1N7TAxe,M1N7TAye,M1N7TAze,M1N7RAxe,M1N7RAye,M1N7RAze, & - M1N8TAxe,M1N8TAye,M1N8TAze,M1N8RAxe,M1N8RAye,M1N8RAze, & - M1N9TAxe,M1N9TAye,M1N9TAze,M1N9RAxe,M1N9RAye,M1N9RAze, & - M2N1TAxe,M2N1TAye,M2N1TAze,M2N1RAxe,M2N1RAye,M2N1RAze, & - M2N2TAxe,M2N2TAye,M2N2TAze,M2N2RAxe,M2N2RAye,M2N2RAze, & - M2N3TAxe,M2N3TAye,M2N3TAze,M2N3RAxe,M2N3RAye,M2N3RAze, & - M2N4TAxe,M2N4TAye,M2N4TAze,M2N4RAxe,M2N4RAye,M2N4RAze, & - M2N5TAxe,M2N5TAye,M2N5TAze,M2N5RAxe,M2N5RAye,M2N5RAze, & - M2N6TAxe,M2N6TAye,M2N6TAze,M2N6RAxe,M2N6RAye,M2N6RAze, & - M2N7TAxe,M2N7TAye,M2N7TAze,M2N7RAxe,M2N7RAye,M2N7RAze, & - M2N8TAxe,M2N8TAye,M2N8TAze,M2N8RAxe,M2N8RAye,M2N8RAze, & - M2N9TAxe,M2N9TAye,M2N9TAze,M2N9RAxe,M2N9RAye,M2N9RAze, & - M3N1TAxe,M3N1TAye,M3N1TAze,M3N1RAxe,M3N1RAye,M3N1RAze, & - M3N2TAxe,M3N2TAye,M3N2TAze,M3N2RAxe,M3N2RAye,M3N2RAze, & - M3N3TAxe,M3N3TAye,M3N3TAze,M3N3RAxe,M3N3RAye,M3N3RAze, & - M3N4TAxe,M3N4TAye,M3N4TAze,M3N4RAxe,M3N4RAye,M3N4RAze, & - M3N5TAxe,M3N5TAye,M3N5TAze,M3N5RAxe,M3N5RAye,M3N5RAze, & - M3N6TAxe,M3N6TAye,M3N6TAze,M3N6RAxe,M3N6RAye,M3N6RAze, & - M3N7TAxe,M3N7TAye,M3N7TAze,M3N7RAxe,M3N7RAye,M3N7RAze, & - M3N8TAxe,M3N8TAye,M3N8TAze,M3N8RAxe,M3N8RAye,M3N8RAze, & - M3N9TAxe,M3N9TAye,M3N9TAze,M3N9RAxe,M3N9RAye,M3N9RAze, & - M4N1TAxe,M4N1TAye,M4N1TAze,M4N1RAxe,M4N1RAye,M4N1RAze, & - M4N2TAxe,M4N2TAye,M4N2TAze,M4N2RAxe,M4N2RAye,M4N2RAze, & - M4N3TAxe,M4N3TAye,M4N3TAze,M4N3RAxe,M4N3RAye,M4N3RAze, & - M4N4TAxe,M4N4TAye,M4N4TAze,M4N4RAxe,M4N4RAye,M4N4RAze, & - M4N5TAxe,M4N5TAye,M4N5TAze,M4N5RAxe,M4N5RAye,M4N5RAze, & - M4N6TAxe,M4N6TAye,M4N6TAze,M4N6RAxe,M4N6RAye,M4N6RAze, & - M4N7TAxe,M4N7TAye,M4N7TAze,M4N7RAxe,M4N7RAye,M4N7RAze, & - M4N8TAxe,M4N8TAye,M4N8TAze,M4N8RAxe,M4N8RAye,M4N8RAze, & - M4N9TAxe,M4N9TAye,M4N9TAze,M4N9RAxe,M4N9RAye,M4N9RAze, & - M5N1TAxe,M5N1TAye,M5N1TAze,M5N1RAxe,M5N1RAye,M5N1RAze, & - M5N2TAxe,M5N2TAye,M5N2TAze,M5N2RAxe,M5N2RAye,M5N2RAze, & - M5N3TAxe,M5N3TAye,M5N3TAze,M5N3RAxe,M5N3RAye,M5N3RAze, & - M5N4TAxe,M5N4TAye,M5N4TAze,M5N4RAxe,M5N4RAye,M5N4RAze, & - M5N5TAxe,M5N5TAye,M5N5TAze,M5N5RAxe,M5N5RAye,M5N5RAze, & - M5N6TAxe,M5N6TAye,M5N6TAze,M5N6RAxe,M5N6RAye,M5N6RAze, & - M5N7TAxe,M5N7TAye,M5N7TAze,M5N7RAxe,M5N7RAye,M5N7RAze, & - M5N8TAxe,M5N8TAye,M5N8TAze,M5N8RAxe,M5N8RAye,M5N8RAze, & - M5N9TAxe,M5N9TAye,M5N9TAze,M5N9RAxe,M5N9RAye,M5N9RAze, & - M6N1TAxe,M6N1TAye,M6N1TAze,M6N1RAxe,M6N1RAye,M6N1RAze, & - M6N2TAxe,M6N2TAye,M6N2TAze,M6N2RAxe,M6N2RAye,M6N2RAze, & - M6N3TAxe,M6N3TAye,M6N3TAze,M6N3RAxe,M6N3RAye,M6N3RAze, & - M6N4TAxe,M6N4TAye,M6N4TAze,M6N4RAxe,M6N4RAye,M6N4RAze, & - M6N5TAxe,M6N5TAye,M6N5TAze,M6N5RAxe,M6N5RAye,M6N5RAze, & - M6N6TAxe,M6N6TAye,M6N6TAze,M6N6RAxe,M6N6RAye,M6N6RAze, & - M6N7TAxe,M6N7TAye,M6N7TAze,M6N7RAxe,M6N7RAye,M6N7RAze, & - M6N8TAxe,M6N8TAye,M6N8TAze,M6N8RAxe,M6N8RAye,M6N8RAze, & - M6N9TAxe,M6N9TAye,M6N9TAze,M6N9RAxe,M6N9RAye,M6N9RAze, & - M7N1TAxe,M7N1TAye,M7N1TAze,M7N1RAxe,M7N1RAye,M7N1RAze, & - M7N2TAxe,M7N2TAye,M7N2TAze,M7N2RAxe,M7N2RAye,M7N2RAze, & - M7N3TAxe,M7N3TAye,M7N3TAze,M7N3RAxe,M7N3RAye,M7N3RAze, & - M7N4TAxe,M7N4TAye,M7N4TAze,M7N4RAxe,M7N4RAye,M7N4RAze, & - M7N5TAxe,M7N5TAye,M7N5TAze,M7N5RAxe,M7N5RAye,M7N5RAze, & - M7N6TAxe,M7N6TAye,M7N6TAze,M7N6RAxe,M7N6RAye,M7N6RAze, & - M7N7TAxe,M7N7TAye,M7N7TAze,M7N7RAxe,M7N7RAye,M7N7RAze, & - M7N8TAxe,M7N8TAye,M7N8TAze,M7N8RAxe,M7N8RAye,M7N8RAze, & - M7N9TAxe,M7N9TAye,M7N9TAze,M7N9RAxe,M7N9RAye,M7N9RAze, & - M8N1TAxe,M8N1TAye,M8N1TAze,M8N1RAxe,M8N1RAye,M8N1RAze, & - M8N2TAxe,M8N2TAye,M8N2TAze,M8N2RAxe,M8N2RAye,M8N2RAze, & - M8N3TAxe,M8N3TAye,M8N3TAze,M8N3RAxe,M8N3RAye,M8N3RAze, & - M8N4TAxe,M8N4TAye,M8N4TAze,M8N4RAxe,M8N4RAye,M8N4RAze, & - M8N5TAxe,M8N5TAye,M8N5TAze,M8N5RAxe,M8N5RAye,M8N5RAze, & - M8N6TAxe,M8N6TAye,M8N6TAze,M8N6RAxe,M8N6RAye,M8N6RAze, & - M8N7TAxe,M8N7TAye,M8N7TAze,M8N7RAxe,M8N7RAye,M8N7RAze, & - M8N8TAxe,M8N8TAye,M8N8TAze,M8N8RAxe,M8N8RAye,M8N8RAze, & - M8N9TAxe,M8N9TAye,M8N9TAze,M8N9RAxe,M8N9RAye,M8N9RAze, & - M9N1TAxe,M9N1TAye,M9N1TAze,M9N1RAxe,M9N1RAye,M9N1RAze, & - M9N2TAxe,M9N2TAye,M9N2TAze,M9N2RAxe,M9N2RAye,M9N2RAze, & - M9N3TAxe,M9N3TAye,M9N3TAze,M9N3RAxe,M9N3RAye,M9N3RAze, & - M9N4TAxe,M9N4TAye,M9N4TAze,M9N4RAxe,M9N4RAye,M9N4RAze, & - M9N5TAxe,M9N5TAye,M9N5TAze,M9N5RAxe,M9N5RAye,M9N5RAze, & - M9N6TAxe,M9N6TAye,M9N6TAze,M9N6RAxe,M9N6RAye,M9N6RAze, & - M9N7TAxe,M9N7TAye,M9N7TAze,M9N7RAxe,M9N7RAye,M9N7RAze, & - M9N8TAxe,M9N8TAye,M9N8TAze,M9N8RAxe,M9N8RAye,M9N8RAze, & - M9N9TAxe,M9N9TAye,M9N9TAze,M9N9RAxe,M9N9RAye,M9N9RAze/), (/6,9,9/)) - - INTEGER, PARAMETER :: ReactSS(6) = (/ReactFXss, ReactFYss, ReactFZss , & - ReactMXss, ReactMYss, ReactMZss/) - INTEGER, PARAMETER :: IntfSS(6) = (/IntfFXss, IntfFYss, IntfFZss , & - IntfMXss, IntfMYss, IntfMZss/) + INTEGER(IntKi), PARAMETER ::MNTDss(3,9,99) = reshape((/ & + M01N1TDxss,M01N1TDyss,M01N1TDzss,M01N2TDxss,M01N2TDyss,M01N2TDzss,M01N3TDxss,M01N3TDyss,M01N3TDzss,M01N4TDxss,M01N4TDyss,M01N4TDzss, & + M01N5TDxss,M01N5TDyss,M01N5TDzss,M01N6TDxss,M01N6TDyss,M01N6TDzss,M01N7TDxss,M01N7TDyss,M01N7TDzss,M01N8TDxss,M01N8TDyss,M01N8TDzss, & + M01N9TDxss,M01N9TDyss,M01N9TDzss,M02N1TDxss,M02N1TDyss,M02N1TDzss,M02N2TDxss,M02N2TDyss,M02N2TDzss,M02N3TDxss,M02N3TDyss,M02N3TDzss, & + M02N4TDxss,M02N4TDyss,M02N4TDzss,M02N5TDxss,M02N5TDyss,M02N5TDzss,M02N6TDxss,M02N6TDyss,M02N6TDzss,M02N7TDxss,M02N7TDyss,M02N7TDzss, & + M02N8TDxss,M02N8TDyss,M02N8TDzss,M02N9TDxss,M02N9TDyss,M02N9TDzss,M03N1TDxss,M03N1TDyss,M03N1TDzss,M03N2TDxss,M03N2TDyss,M03N2TDzss, & + M03N3TDxss,M03N3TDyss,M03N3TDzss,M03N4TDxss,M03N4TDyss,M03N4TDzss,M03N5TDxss,M03N5TDyss,M03N5TDzss,M03N6TDxss,M03N6TDyss,M03N6TDzss, & + M03N7TDxss,M03N7TDyss,M03N7TDzss,M03N8TDxss,M03N8TDyss,M03N8TDzss,M03N9TDxss,M03N9TDyss,M03N9TDzss,M04N1TDxss,M04N1TDyss,M04N1TDzss, & + M04N2TDxss,M04N2TDyss,M04N2TDzss,M04N3TDxss,M04N3TDyss,M04N3TDzss,M04N4TDxss,M04N4TDyss,M04N4TDzss,M04N5TDxss,M04N5TDyss,M04N5TDzss, & + M04N6TDxss,M04N6TDyss,M04N6TDzss,M04N7TDxss,M04N7TDyss,M04N7TDzss,M04N8TDxss,M04N8TDyss,M04N8TDzss,M04N9TDxss,M04N9TDyss,M04N9TDzss, & + M05N1TDxss,M05N1TDyss,M05N1TDzss,M05N2TDxss,M05N2TDyss,M05N2TDzss,M05N3TDxss,M05N3TDyss,M05N3TDzss,M05N4TDxss,M05N4TDyss,M05N4TDzss, & + M05N5TDxss,M05N5TDyss,M05N5TDzss,M05N6TDxss,M05N6TDyss,M05N6TDzss,M05N7TDxss,M05N7TDyss,M05N7TDzss,M05N8TDxss,M05N8TDyss,M05N8TDzss, & + M05N9TDxss,M05N9TDyss,M05N9TDzss,M06N1TDxss,M06N1TDyss,M06N1TDzss,M06N2TDxss,M06N2TDyss,M06N2TDzss,M06N3TDxss,M06N3TDyss,M06N3TDzss, & + M06N4TDxss,M06N4TDyss,M06N4TDzss,M06N5TDxss,M06N5TDyss,M06N5TDzss,M06N6TDxss,M06N6TDyss,M06N6TDzss,M06N7TDxss,M06N7TDyss,M06N7TDzss, & + M06N8TDxss,M06N8TDyss,M06N8TDzss,M06N9TDxss,M06N9TDyss,M06N9TDzss,M07N1TDxss,M07N1TDyss,M07N1TDzss,M07N2TDxss,M07N2TDyss,M07N2TDzss, & + M07N3TDxss,M07N3TDyss,M07N3TDzss,M07N4TDxss,M07N4TDyss,M07N4TDzss,M07N5TDxss,M07N5TDyss,M07N5TDzss,M07N6TDxss,M07N6TDyss,M07N6TDzss, & + M07N7TDxss,M07N7TDyss,M07N7TDzss,M07N8TDxss,M07N8TDyss,M07N8TDzss,M07N9TDxss,M07N9TDyss,M07N9TDzss,M08N1TDxss,M08N1TDyss,M08N1TDzss, & + M08N2TDxss,M08N2TDyss,M08N2TDzss,M08N3TDxss,M08N3TDyss,M08N3TDzss,M08N4TDxss,M08N4TDyss,M08N4TDzss,M08N5TDxss,M08N5TDyss,M08N5TDzss, & + M08N6TDxss,M08N6TDyss,M08N6TDzss,M08N7TDxss,M08N7TDyss,M08N7TDzss,M08N8TDxss,M08N8TDyss,M08N8TDzss,M08N9TDxss,M08N9TDyss,M08N9TDzss, & + M09N1TDxss,M09N1TDyss,M09N1TDzss,M09N2TDxss,M09N2TDyss,M09N2TDzss,M09N3TDxss,M09N3TDyss,M09N3TDzss,M09N4TDxss,M09N4TDyss,M09N4TDzss, & + M09N5TDxss,M09N5TDyss,M09N5TDzss,M09N6TDxss,M09N6TDyss,M09N6TDzss,M09N7TDxss,M09N7TDyss,M09N7TDzss,M09N8TDxss,M09N8TDyss,M09N8TDzss, & + M09N9TDxss,M09N9TDyss,M09N9TDzss,M10N1TDxss,M10N1TDyss,M10N1TDzss,M10N2TDxss,M10N2TDyss,M10N2TDzss,M10N3TDxss,M10N3TDyss,M10N3TDzss, & + M10N4TDxss,M10N4TDyss,M10N4TDzss,M10N5TDxss,M10N5TDyss,M10N5TDzss,M10N6TDxss,M10N6TDyss,M10N6TDzss,M10N7TDxss,M10N7TDyss,M10N7TDzss, & + M10N8TDxss,M10N8TDyss,M10N8TDzss,M10N9TDxss,M10N9TDyss,M10N9TDzss,M11N1TDxss,M11N1TDyss,M11N1TDzss,M11N2TDxss,M11N2TDyss,M11N2TDzss, & + M11N3TDxss,M11N3TDyss,M11N3TDzss,M11N4TDxss,M11N4TDyss,M11N4TDzss,M11N5TDxss,M11N5TDyss,M11N5TDzss,M11N6TDxss,M11N6TDyss,M11N6TDzss, & + M11N7TDxss,M11N7TDyss,M11N7TDzss,M11N8TDxss,M11N8TDyss,M11N8TDzss,M11N9TDxss,M11N9TDyss,M11N9TDzss,M12N1TDxss,M12N1TDyss,M12N1TDzss, & + M12N2TDxss,M12N2TDyss,M12N2TDzss,M12N3TDxss,M12N3TDyss,M12N3TDzss,M12N4TDxss,M12N4TDyss,M12N4TDzss,M12N5TDxss,M12N5TDyss,M12N5TDzss, & + M12N6TDxss,M12N6TDyss,M12N6TDzss,M12N7TDxss,M12N7TDyss,M12N7TDzss,M12N8TDxss,M12N8TDyss,M12N8TDzss,M12N9TDxss,M12N9TDyss,M12N9TDzss, & + M13N1TDxss,M13N1TDyss,M13N1TDzss,M13N2TDxss,M13N2TDyss,M13N2TDzss,M13N3TDxss,M13N3TDyss,M13N3TDzss,M13N4TDxss,M13N4TDyss,M13N4TDzss, & + M13N5TDxss,M13N5TDyss,M13N5TDzss,M13N6TDxss,M13N6TDyss,M13N6TDzss,M13N7TDxss,M13N7TDyss,M13N7TDzss,M13N8TDxss,M13N8TDyss,M13N8TDzss, & + M13N9TDxss,M13N9TDyss,M13N9TDzss,M14N1TDxss,M14N1TDyss,M14N1TDzss,M14N2TDxss,M14N2TDyss,M14N2TDzss,M14N3TDxss,M14N3TDyss,M14N3TDzss, & + M14N4TDxss,M14N4TDyss,M14N4TDzss,M14N5TDxss,M14N5TDyss,M14N5TDzss,M14N6TDxss,M14N6TDyss,M14N6TDzss,M14N7TDxss,M14N7TDyss,M14N7TDzss, & + M14N8TDxss,M14N8TDyss,M14N8TDzss,M14N9TDxss,M14N9TDyss,M14N9TDzss,M15N1TDxss,M15N1TDyss,M15N1TDzss,M15N2TDxss,M15N2TDyss,M15N2TDzss, & + M15N3TDxss,M15N3TDyss,M15N3TDzss,M15N4TDxss,M15N4TDyss,M15N4TDzss,M15N5TDxss,M15N5TDyss,M15N5TDzss,M15N6TDxss,M15N6TDyss,M15N6TDzss, & + M15N7TDxss,M15N7TDyss,M15N7TDzss,M15N8TDxss,M15N8TDyss,M15N8TDzss,M15N9TDxss,M15N9TDyss,M15N9TDzss,M16N1TDxss,M16N1TDyss,M16N1TDzss, & + M16N2TDxss,M16N2TDyss,M16N2TDzss,M16N3TDxss,M16N3TDyss,M16N3TDzss,M16N4TDxss,M16N4TDyss,M16N4TDzss,M16N5TDxss,M16N5TDyss,M16N5TDzss, & + M16N6TDxss,M16N6TDyss,M16N6TDzss,M16N7TDxss,M16N7TDyss,M16N7TDzss,M16N8TDxss,M16N8TDyss,M16N8TDzss,M16N9TDxss,M16N9TDyss,M16N9TDzss, & + M17N1TDxss,M17N1TDyss,M17N1TDzss,M17N2TDxss,M17N2TDyss,M17N2TDzss,M17N3TDxss,M17N3TDyss,M17N3TDzss,M17N4TDxss,M17N4TDyss,M17N4TDzss, & + M17N5TDxss,M17N5TDyss,M17N5TDzss,M17N6TDxss,M17N6TDyss,M17N6TDzss,M17N7TDxss,M17N7TDyss,M17N7TDzss,M17N8TDxss,M17N8TDyss,M17N8TDzss, & + M17N9TDxss,M17N9TDyss,M17N9TDzss,M18N1TDxss,M18N1TDyss,M18N1TDzss,M18N2TDxss,M18N2TDyss,M18N2TDzss,M18N3TDxss,M18N3TDyss,M18N3TDzss, & + M18N4TDxss,M18N4TDyss,M18N4TDzss,M18N5TDxss,M18N5TDyss,M18N5TDzss,M18N6TDxss,M18N6TDyss,M18N6TDzss,M18N7TDxss,M18N7TDyss,M18N7TDzss, & + M18N8TDxss,M18N8TDyss,M18N8TDzss,M18N9TDxss,M18N9TDyss,M18N9TDzss,M19N1TDxss,M19N1TDyss,M19N1TDzss,M19N2TDxss,M19N2TDyss,M19N2TDzss, & + M19N3TDxss,M19N3TDyss,M19N3TDzss,M19N4TDxss,M19N4TDyss,M19N4TDzss,M19N5TDxss,M19N5TDyss,M19N5TDzss,M19N6TDxss,M19N6TDyss,M19N6TDzss, & + M19N7TDxss,M19N7TDyss,M19N7TDzss,M19N8TDxss,M19N8TDyss,M19N8TDzss,M19N9TDxss,M19N9TDyss,M19N9TDzss,M20N1TDxss,M20N1TDyss,M20N1TDzss, & + M20N2TDxss,M20N2TDyss,M20N2TDzss,M20N3TDxss,M20N3TDyss,M20N3TDzss,M20N4TDxss,M20N4TDyss,M20N4TDzss,M20N5TDxss,M20N5TDyss,M20N5TDzss, & + M20N6TDxss,M20N6TDyss,M20N6TDzss,M20N7TDxss,M20N7TDyss,M20N7TDzss,M20N8TDxss,M20N8TDyss,M20N8TDzss,M20N9TDxss,M20N9TDyss,M20N9TDzss, & + M21N1TDxss,M21N1TDyss,M21N1TDzss,M21N2TDxss,M21N2TDyss,M21N2TDzss,M21N3TDxss,M21N3TDyss,M21N3TDzss,M21N4TDxss,M21N4TDyss,M21N4TDzss, & + M21N5TDxss,M21N5TDyss,M21N5TDzss,M21N6TDxss,M21N6TDyss,M21N6TDzss,M21N7TDxss,M21N7TDyss,M21N7TDzss,M21N8TDxss,M21N8TDyss,M21N8TDzss, & + M21N9TDxss,M21N9TDyss,M21N9TDzss,M22N1TDxss,M22N1TDyss,M22N1TDzss,M22N2TDxss,M22N2TDyss,M22N2TDzss,M22N3TDxss,M22N3TDyss,M22N3TDzss, & + M22N4TDxss,M22N4TDyss,M22N4TDzss,M22N5TDxss,M22N5TDyss,M22N5TDzss,M22N6TDxss,M22N6TDyss,M22N6TDzss,M22N7TDxss,M22N7TDyss,M22N7TDzss, & + M22N8TDxss,M22N8TDyss,M22N8TDzss,M22N9TDxss,M22N9TDyss,M22N9TDzss,M23N1TDxss,M23N1TDyss,M23N1TDzss,M23N2TDxss,M23N2TDyss,M23N2TDzss, & + M23N3TDxss,M23N3TDyss,M23N3TDzss,M23N4TDxss,M23N4TDyss,M23N4TDzss,M23N5TDxss,M23N5TDyss,M23N5TDzss,M23N6TDxss,M23N6TDyss,M23N6TDzss, & + M23N7TDxss,M23N7TDyss,M23N7TDzss,M23N8TDxss,M23N8TDyss,M23N8TDzss,M23N9TDxss,M23N9TDyss,M23N9TDzss,M24N1TDxss,M24N1TDyss,M24N1TDzss, & + M24N2TDxss,M24N2TDyss,M24N2TDzss,M24N3TDxss,M24N3TDyss,M24N3TDzss,M24N4TDxss,M24N4TDyss,M24N4TDzss,M24N5TDxss,M24N5TDyss,M24N5TDzss, & + M24N6TDxss,M24N6TDyss,M24N6TDzss,M24N7TDxss,M24N7TDyss,M24N7TDzss,M24N8TDxss,M24N8TDyss,M24N8TDzss,M24N9TDxss,M24N9TDyss,M24N9TDzss, & + M25N1TDxss,M25N1TDyss,M25N1TDzss,M25N2TDxss,M25N2TDyss,M25N2TDzss,M25N3TDxss,M25N3TDyss,M25N3TDzss,M25N4TDxss,M25N4TDyss,M25N4TDzss, & + M25N5TDxss,M25N5TDyss,M25N5TDzss,M25N6TDxss,M25N6TDyss,M25N6TDzss,M25N7TDxss,M25N7TDyss,M25N7TDzss,M25N8TDxss,M25N8TDyss,M25N8TDzss, & + M25N9TDxss,M25N9TDyss,M25N9TDzss,M26N1TDxss,M26N1TDyss,M26N1TDzss,M26N2TDxss,M26N2TDyss,M26N2TDzss,M26N3TDxss,M26N3TDyss,M26N3TDzss, & + M26N4TDxss,M26N4TDyss,M26N4TDzss,M26N5TDxss,M26N5TDyss,M26N5TDzss,M26N6TDxss,M26N6TDyss,M26N6TDzss,M26N7TDxss,M26N7TDyss,M26N7TDzss, & + M26N8TDxss,M26N8TDyss,M26N8TDzss,M26N9TDxss,M26N9TDyss,M26N9TDzss,M27N1TDxss,M27N1TDyss,M27N1TDzss,M27N2TDxss,M27N2TDyss,M27N2TDzss, & + M27N3TDxss,M27N3TDyss,M27N3TDzss,M27N4TDxss,M27N4TDyss,M27N4TDzss,M27N5TDxss,M27N5TDyss,M27N5TDzss,M27N6TDxss,M27N6TDyss,M27N6TDzss, & + M27N7TDxss,M27N7TDyss,M27N7TDzss,M27N8TDxss,M27N8TDyss,M27N8TDzss,M27N9TDxss,M27N9TDyss,M27N9TDzss,M28N1TDxss,M28N1TDyss,M28N1TDzss, & + M28N2TDxss,M28N2TDyss,M28N2TDzss,M28N3TDxss,M28N3TDyss,M28N3TDzss,M28N4TDxss,M28N4TDyss,M28N4TDzss,M28N5TDxss,M28N5TDyss,M28N5TDzss, & + M28N6TDxss,M28N6TDyss,M28N6TDzss,M28N7TDxss,M28N7TDyss,M28N7TDzss,M28N8TDxss,M28N8TDyss,M28N8TDzss,M28N9TDxss,M28N9TDyss,M28N9TDzss, & + M29N1TDxss,M29N1TDyss,M29N1TDzss,M29N2TDxss,M29N2TDyss,M29N2TDzss,M29N3TDxss,M29N3TDyss,M29N3TDzss,M29N4TDxss,M29N4TDyss,M29N4TDzss, & + M29N5TDxss,M29N5TDyss,M29N5TDzss,M29N6TDxss,M29N6TDyss,M29N6TDzss,M29N7TDxss,M29N7TDyss,M29N7TDzss,M29N8TDxss,M29N8TDyss,M29N8TDzss, & + M29N9TDxss,M29N9TDyss,M29N9TDzss,M30N1TDxss,M30N1TDyss,M30N1TDzss,M30N2TDxss,M30N2TDyss,M30N2TDzss,M30N3TDxss,M30N3TDyss,M30N3TDzss, & + M30N4TDxss,M30N4TDyss,M30N4TDzss,M30N5TDxss,M30N5TDyss,M30N5TDzss,M30N6TDxss,M30N6TDyss,M30N6TDzss,M30N7TDxss,M30N7TDyss,M30N7TDzss, & + M30N8TDxss,M30N8TDyss,M30N8TDzss,M30N9TDxss,M30N9TDyss,M30N9TDzss,M31N1TDxss,M31N1TDyss,M31N1TDzss,M31N2TDxss,M31N2TDyss,M31N2TDzss, & + M31N3TDxss,M31N3TDyss,M31N3TDzss,M31N4TDxss,M31N4TDyss,M31N4TDzss,M31N5TDxss,M31N5TDyss,M31N5TDzss,M31N6TDxss,M31N6TDyss,M31N6TDzss, & + M31N7TDxss,M31N7TDyss,M31N7TDzss,M31N8TDxss,M31N8TDyss,M31N8TDzss,M31N9TDxss,M31N9TDyss,M31N9TDzss,M32N1TDxss,M32N1TDyss,M32N1TDzss, & + M32N2TDxss,M32N2TDyss,M32N2TDzss,M32N3TDxss,M32N3TDyss,M32N3TDzss,M32N4TDxss,M32N4TDyss,M32N4TDzss,M32N5TDxss,M32N5TDyss,M32N5TDzss, & + M32N6TDxss,M32N6TDyss,M32N6TDzss,M32N7TDxss,M32N7TDyss,M32N7TDzss,M32N8TDxss,M32N8TDyss,M32N8TDzss,M32N9TDxss,M32N9TDyss,M32N9TDzss, & + M33N1TDxss,M33N1TDyss,M33N1TDzss,M33N2TDxss,M33N2TDyss,M33N2TDzss,M33N3TDxss,M33N3TDyss,M33N3TDzss,M33N4TDxss,M33N4TDyss,M33N4TDzss, & + M33N5TDxss,M33N5TDyss,M33N5TDzss,M33N6TDxss,M33N6TDyss,M33N6TDzss,M33N7TDxss,M33N7TDyss,M33N7TDzss,M33N8TDxss,M33N8TDyss,M33N8TDzss, & + M33N9TDxss,M33N9TDyss,M33N9TDzss,M34N1TDxss,M34N1TDyss,M34N1TDzss,M34N2TDxss,M34N2TDyss,M34N2TDzss,M34N3TDxss,M34N3TDyss,M34N3TDzss, & + M34N4TDxss,M34N4TDyss,M34N4TDzss,M34N5TDxss,M34N5TDyss,M34N5TDzss,M34N6TDxss,M34N6TDyss,M34N6TDzss,M34N7TDxss,M34N7TDyss,M34N7TDzss, & + M34N8TDxss,M34N8TDyss,M34N8TDzss,M34N9TDxss,M34N9TDyss,M34N9TDzss,M35N1TDxss,M35N1TDyss,M35N1TDzss,M35N2TDxss,M35N2TDyss,M35N2TDzss, & + M35N3TDxss,M35N3TDyss,M35N3TDzss,M35N4TDxss,M35N4TDyss,M35N4TDzss,M35N5TDxss,M35N5TDyss,M35N5TDzss,M35N6TDxss,M35N6TDyss,M35N6TDzss, & + M35N7TDxss,M35N7TDyss,M35N7TDzss,M35N8TDxss,M35N8TDyss,M35N8TDzss,M35N9TDxss,M35N9TDyss,M35N9TDzss,M36N1TDxss,M36N1TDyss,M36N1TDzss, & + M36N2TDxss,M36N2TDyss,M36N2TDzss,M36N3TDxss,M36N3TDyss,M36N3TDzss,M36N4TDxss,M36N4TDyss,M36N4TDzss,M36N5TDxss,M36N5TDyss,M36N5TDzss, & + M36N6TDxss,M36N6TDyss,M36N6TDzss,M36N7TDxss,M36N7TDyss,M36N7TDzss,M36N8TDxss,M36N8TDyss,M36N8TDzss,M36N9TDxss,M36N9TDyss,M36N9TDzss, & + M37N1TDxss,M37N1TDyss,M37N1TDzss,M37N2TDxss,M37N2TDyss,M37N2TDzss,M37N3TDxss,M37N3TDyss,M37N3TDzss,M37N4TDxss,M37N4TDyss,M37N4TDzss, & + M37N5TDxss,M37N5TDyss,M37N5TDzss,M37N6TDxss,M37N6TDyss,M37N6TDzss,M37N7TDxss,M37N7TDyss,M37N7TDzss,M37N8TDxss,M37N8TDyss,M37N8TDzss, & + M37N9TDxss,M37N9TDyss,M37N9TDzss,M38N1TDxss,M38N1TDyss,M38N1TDzss,M38N2TDxss,M38N2TDyss,M38N2TDzss,M38N3TDxss,M38N3TDyss,M38N3TDzss, & + M38N4TDxss,M38N4TDyss,M38N4TDzss,M38N5TDxss,M38N5TDyss,M38N5TDzss,M38N6TDxss,M38N6TDyss,M38N6TDzss,M38N7TDxss,M38N7TDyss,M38N7TDzss, & + M38N8TDxss,M38N8TDyss,M38N8TDzss,M38N9TDxss,M38N9TDyss,M38N9TDzss,M39N1TDxss,M39N1TDyss,M39N1TDzss,M39N2TDxss,M39N2TDyss,M39N2TDzss, & + M39N3TDxss,M39N3TDyss,M39N3TDzss,M39N4TDxss,M39N4TDyss,M39N4TDzss,M39N5TDxss,M39N5TDyss,M39N5TDzss,M39N6TDxss,M39N6TDyss,M39N6TDzss, & + M39N7TDxss,M39N7TDyss,M39N7TDzss,M39N8TDxss,M39N8TDyss,M39N8TDzss,M39N9TDxss,M39N9TDyss,M39N9TDzss,M40N1TDxss,M40N1TDyss,M40N1TDzss, & + M40N2TDxss,M40N2TDyss,M40N2TDzss,M40N3TDxss,M40N3TDyss,M40N3TDzss,M40N4TDxss,M40N4TDyss,M40N4TDzss,M40N5TDxss,M40N5TDyss,M40N5TDzss, & + M40N6TDxss,M40N6TDyss,M40N6TDzss,M40N7TDxss,M40N7TDyss,M40N7TDzss,M40N8TDxss,M40N8TDyss,M40N8TDzss,M40N9TDxss,M40N9TDyss,M40N9TDzss, & + M41N1TDxss,M41N1TDyss,M41N1TDzss,M41N2TDxss,M41N2TDyss,M41N2TDzss,M41N3TDxss,M41N3TDyss,M41N3TDzss,M41N4TDxss,M41N4TDyss,M41N4TDzss, & + M41N5TDxss,M41N5TDyss,M41N5TDzss,M41N6TDxss,M41N6TDyss,M41N6TDzss,M41N7TDxss,M41N7TDyss,M41N7TDzss,M41N8TDxss,M41N8TDyss,M41N8TDzss, & + M41N9TDxss,M41N9TDyss,M41N9TDzss,M42N1TDxss,M42N1TDyss,M42N1TDzss,M42N2TDxss,M42N2TDyss,M42N2TDzss,M42N3TDxss,M42N3TDyss,M42N3TDzss, & + M42N4TDxss,M42N4TDyss,M42N4TDzss,M42N5TDxss,M42N5TDyss,M42N5TDzss,M42N6TDxss,M42N6TDyss,M42N6TDzss,M42N7TDxss,M42N7TDyss,M42N7TDzss, & + M42N8TDxss,M42N8TDyss,M42N8TDzss,M42N9TDxss,M42N9TDyss,M42N9TDzss,M43N1TDxss,M43N1TDyss,M43N1TDzss,M43N2TDxss,M43N2TDyss,M43N2TDzss, & + M43N3TDxss,M43N3TDyss,M43N3TDzss,M43N4TDxss,M43N4TDyss,M43N4TDzss,M43N5TDxss,M43N5TDyss,M43N5TDzss,M43N6TDxss,M43N6TDyss,M43N6TDzss, & + M43N7TDxss,M43N7TDyss,M43N7TDzss,M43N8TDxss,M43N8TDyss,M43N8TDzss,M43N9TDxss,M43N9TDyss,M43N9TDzss,M44N1TDxss,M44N1TDyss,M44N1TDzss, & + M44N2TDxss,M44N2TDyss,M44N2TDzss,M44N3TDxss,M44N3TDyss,M44N3TDzss,M44N4TDxss,M44N4TDyss,M44N4TDzss,M44N5TDxss,M44N5TDyss,M44N5TDzss, & + M44N6TDxss,M44N6TDyss,M44N6TDzss,M44N7TDxss,M44N7TDyss,M44N7TDzss,M44N8TDxss,M44N8TDyss,M44N8TDzss,M44N9TDxss,M44N9TDyss,M44N9TDzss, & + M45N1TDxss,M45N1TDyss,M45N1TDzss,M45N2TDxss,M45N2TDyss,M45N2TDzss,M45N3TDxss,M45N3TDyss,M45N3TDzss,M45N4TDxss,M45N4TDyss,M45N4TDzss, & + M45N5TDxss,M45N5TDyss,M45N5TDzss,M45N6TDxss,M45N6TDyss,M45N6TDzss,M45N7TDxss,M45N7TDyss,M45N7TDzss,M45N8TDxss,M45N8TDyss,M45N8TDzss, & + M45N9TDxss,M45N9TDyss,M45N9TDzss,M46N1TDxss,M46N1TDyss,M46N1TDzss,M46N2TDxss,M46N2TDyss,M46N2TDzss,M46N3TDxss,M46N3TDyss,M46N3TDzss, & + M46N4TDxss,M46N4TDyss,M46N4TDzss,M46N5TDxss,M46N5TDyss,M46N5TDzss,M46N6TDxss,M46N6TDyss,M46N6TDzss,M46N7TDxss,M46N7TDyss,M46N7TDzss, & + M46N8TDxss,M46N8TDyss,M46N8TDzss,M46N9TDxss,M46N9TDyss,M46N9TDzss,M47N1TDxss,M47N1TDyss,M47N1TDzss,M47N2TDxss,M47N2TDyss,M47N2TDzss, & + M47N3TDxss,M47N3TDyss,M47N3TDzss,M47N4TDxss,M47N4TDyss,M47N4TDzss,M47N5TDxss,M47N5TDyss,M47N5TDzss,M47N6TDxss,M47N6TDyss,M47N6TDzss, & + M47N7TDxss,M47N7TDyss,M47N7TDzss,M47N8TDxss,M47N8TDyss,M47N8TDzss,M47N9TDxss,M47N9TDyss,M47N9TDzss,M48N1TDxss,M48N1TDyss,M48N1TDzss, & + M48N2TDxss,M48N2TDyss,M48N2TDzss,M48N3TDxss,M48N3TDyss,M48N3TDzss,M48N4TDxss,M48N4TDyss,M48N4TDzss,M48N5TDxss,M48N5TDyss,M48N5TDzss, & + M48N6TDxss,M48N6TDyss,M48N6TDzss,M48N7TDxss,M48N7TDyss,M48N7TDzss,M48N8TDxss,M48N8TDyss,M48N8TDzss,M48N9TDxss,M48N9TDyss,M48N9TDzss, & + M49N1TDxss,M49N1TDyss,M49N1TDzss,M49N2TDxss,M49N2TDyss,M49N2TDzss,M49N3TDxss,M49N3TDyss,M49N3TDzss,M49N4TDxss,M49N4TDyss,M49N4TDzss, & + M49N5TDxss,M49N5TDyss,M49N5TDzss,M49N6TDxss,M49N6TDyss,M49N6TDzss,M49N7TDxss,M49N7TDyss,M49N7TDzss,M49N8TDxss,M49N8TDyss,M49N8TDzss, & + M49N9TDxss,M49N9TDyss,M49N9TDzss,M50N1TDxss,M50N1TDyss,M50N1TDzss,M50N2TDxss,M50N2TDyss,M50N2TDzss,M50N3TDxss,M50N3TDyss,M50N3TDzss, & + M50N4TDxss,M50N4TDyss,M50N4TDzss,M50N5TDxss,M50N5TDyss,M50N5TDzss,M50N6TDxss,M50N6TDyss,M50N6TDzss,M50N7TDxss,M50N7TDyss,M50N7TDzss, & + M50N8TDxss,M50N8TDyss,M50N8TDzss,M50N9TDxss,M50N9TDyss,M50N9TDzss,M51N1TDxss,M51N1TDyss,M51N1TDzss,M51N2TDxss,M51N2TDyss,M51N2TDzss, & + M51N3TDxss,M51N3TDyss,M51N3TDzss,M51N4TDxss,M51N4TDyss,M51N4TDzss,M51N5TDxss,M51N5TDyss,M51N5TDzss,M51N6TDxss,M51N6TDyss,M51N6TDzss, & + M51N7TDxss,M51N7TDyss,M51N7TDzss,M51N8TDxss,M51N8TDyss,M51N8TDzss,M51N9TDxss,M51N9TDyss,M51N9TDzss,M52N1TDxss,M52N1TDyss,M52N1TDzss, & + M52N2TDxss,M52N2TDyss,M52N2TDzss,M52N3TDxss,M52N3TDyss,M52N3TDzss,M52N4TDxss,M52N4TDyss,M52N4TDzss,M52N5TDxss,M52N5TDyss,M52N5TDzss, & + M52N6TDxss,M52N6TDyss,M52N6TDzss,M52N7TDxss,M52N7TDyss,M52N7TDzss,M52N8TDxss,M52N8TDyss,M52N8TDzss,M52N9TDxss,M52N9TDyss,M52N9TDzss, & + M53N1TDxss,M53N1TDyss,M53N1TDzss,M53N2TDxss,M53N2TDyss,M53N2TDzss,M53N3TDxss,M53N3TDyss,M53N3TDzss,M53N4TDxss,M53N4TDyss,M53N4TDzss, & + M53N5TDxss,M53N5TDyss,M53N5TDzss,M53N6TDxss,M53N6TDyss,M53N6TDzss,M53N7TDxss,M53N7TDyss,M53N7TDzss,M53N8TDxss,M53N8TDyss,M53N8TDzss, & + M53N9TDxss,M53N9TDyss,M53N9TDzss,M54N1TDxss,M54N1TDyss,M54N1TDzss,M54N2TDxss,M54N2TDyss,M54N2TDzss,M54N3TDxss,M54N3TDyss,M54N3TDzss, & + M54N4TDxss,M54N4TDyss,M54N4TDzss,M54N5TDxss,M54N5TDyss,M54N5TDzss,M54N6TDxss,M54N6TDyss,M54N6TDzss,M54N7TDxss,M54N7TDyss,M54N7TDzss, & + M54N8TDxss,M54N8TDyss,M54N8TDzss,M54N9TDxss,M54N9TDyss,M54N9TDzss,M55N1TDxss,M55N1TDyss,M55N1TDzss,M55N2TDxss,M55N2TDyss,M55N2TDzss, & + M55N3TDxss,M55N3TDyss,M55N3TDzss,M55N4TDxss,M55N4TDyss,M55N4TDzss,M55N5TDxss,M55N5TDyss,M55N5TDzss,M55N6TDxss,M55N6TDyss,M55N6TDzss, & + M55N7TDxss,M55N7TDyss,M55N7TDzss,M55N8TDxss,M55N8TDyss,M55N8TDzss,M55N9TDxss,M55N9TDyss,M55N9TDzss,M56N1TDxss,M56N1TDyss,M56N1TDzss, & + M56N2TDxss,M56N2TDyss,M56N2TDzss,M56N3TDxss,M56N3TDyss,M56N3TDzss,M56N4TDxss,M56N4TDyss,M56N4TDzss,M56N5TDxss,M56N5TDyss,M56N5TDzss, & + M56N6TDxss,M56N6TDyss,M56N6TDzss,M56N7TDxss,M56N7TDyss,M56N7TDzss,M56N8TDxss,M56N8TDyss,M56N8TDzss,M56N9TDxss,M56N9TDyss,M56N9TDzss, & + M57N1TDxss,M57N1TDyss,M57N1TDzss,M57N2TDxss,M57N2TDyss,M57N2TDzss,M57N3TDxss,M57N3TDyss,M57N3TDzss,M57N4TDxss,M57N4TDyss,M57N4TDzss, & + M57N5TDxss,M57N5TDyss,M57N5TDzss,M57N6TDxss,M57N6TDyss,M57N6TDzss,M57N7TDxss,M57N7TDyss,M57N7TDzss,M57N8TDxss,M57N8TDyss,M57N8TDzss, & + M57N9TDxss,M57N9TDyss,M57N9TDzss,M58N1TDxss,M58N1TDyss,M58N1TDzss,M58N2TDxss,M58N2TDyss,M58N2TDzss,M58N3TDxss,M58N3TDyss,M58N3TDzss, & + M58N4TDxss,M58N4TDyss,M58N4TDzss,M58N5TDxss,M58N5TDyss,M58N5TDzss,M58N6TDxss,M58N6TDyss,M58N6TDzss,M58N7TDxss,M58N7TDyss,M58N7TDzss, & + M58N8TDxss,M58N8TDyss,M58N8TDzss,M58N9TDxss,M58N9TDyss,M58N9TDzss,M59N1TDxss,M59N1TDyss,M59N1TDzss,M59N2TDxss,M59N2TDyss,M59N2TDzss, & + M59N3TDxss,M59N3TDyss,M59N3TDzss,M59N4TDxss,M59N4TDyss,M59N4TDzss,M59N5TDxss,M59N5TDyss,M59N5TDzss,M59N6TDxss,M59N6TDyss,M59N6TDzss, & + M59N7TDxss,M59N7TDyss,M59N7TDzss,M59N8TDxss,M59N8TDyss,M59N8TDzss,M59N9TDxss,M59N9TDyss,M59N9TDzss,M60N1TDxss,M60N1TDyss,M60N1TDzss, & + M60N2TDxss,M60N2TDyss,M60N2TDzss,M60N3TDxss,M60N3TDyss,M60N3TDzss,M60N4TDxss,M60N4TDyss,M60N4TDzss,M60N5TDxss,M60N5TDyss,M60N5TDzss, & + M60N6TDxss,M60N6TDyss,M60N6TDzss,M60N7TDxss,M60N7TDyss,M60N7TDzss,M60N8TDxss,M60N8TDyss,M60N8TDzss,M60N9TDxss,M60N9TDyss,M60N9TDzss, & + M61N1TDxss,M61N1TDyss,M61N1TDzss,M61N2TDxss,M61N2TDyss,M61N2TDzss,M61N3TDxss,M61N3TDyss,M61N3TDzss,M61N4TDxss,M61N4TDyss,M61N4TDzss, & + M61N5TDxss,M61N5TDyss,M61N5TDzss,M61N6TDxss,M61N6TDyss,M61N6TDzss,M61N7TDxss,M61N7TDyss,M61N7TDzss,M61N8TDxss,M61N8TDyss,M61N8TDzss, & + M61N9TDxss,M61N9TDyss,M61N9TDzss,M62N1TDxss,M62N1TDyss,M62N1TDzss,M62N2TDxss,M62N2TDyss,M62N2TDzss,M62N3TDxss,M62N3TDyss,M62N3TDzss, & + M62N4TDxss,M62N4TDyss,M62N4TDzss,M62N5TDxss,M62N5TDyss,M62N5TDzss,M62N6TDxss,M62N6TDyss,M62N6TDzss,M62N7TDxss,M62N7TDyss,M62N7TDzss, & + M62N8TDxss,M62N8TDyss,M62N8TDzss,M62N9TDxss,M62N9TDyss,M62N9TDzss,M63N1TDxss,M63N1TDyss,M63N1TDzss,M63N2TDxss,M63N2TDyss,M63N2TDzss, & + M63N3TDxss,M63N3TDyss,M63N3TDzss,M63N4TDxss,M63N4TDyss,M63N4TDzss,M63N5TDxss,M63N5TDyss,M63N5TDzss,M63N6TDxss,M63N6TDyss,M63N6TDzss, & + M63N7TDxss,M63N7TDyss,M63N7TDzss,M63N8TDxss,M63N8TDyss,M63N8TDzss,M63N9TDxss,M63N9TDyss,M63N9TDzss,M64N1TDxss,M64N1TDyss,M64N1TDzss, & + M64N2TDxss,M64N2TDyss,M64N2TDzss,M64N3TDxss,M64N3TDyss,M64N3TDzss,M64N4TDxss,M64N4TDyss,M64N4TDzss,M64N5TDxss,M64N5TDyss,M64N5TDzss, & + M64N6TDxss,M64N6TDyss,M64N6TDzss,M64N7TDxss,M64N7TDyss,M64N7TDzss,M64N8TDxss,M64N8TDyss,M64N8TDzss,M64N9TDxss,M64N9TDyss,M64N9TDzss, & + M65N1TDxss,M65N1TDyss,M65N1TDzss,M65N2TDxss,M65N2TDyss,M65N2TDzss,M65N3TDxss,M65N3TDyss,M65N3TDzss,M65N4TDxss,M65N4TDyss,M65N4TDzss, & + M65N5TDxss,M65N5TDyss,M65N5TDzss,M65N6TDxss,M65N6TDyss,M65N6TDzss,M65N7TDxss,M65N7TDyss,M65N7TDzss,M65N8TDxss,M65N8TDyss,M65N8TDzss, & + M65N9TDxss,M65N9TDyss,M65N9TDzss,M66N1TDxss,M66N1TDyss,M66N1TDzss,M66N2TDxss,M66N2TDyss,M66N2TDzss,M66N3TDxss,M66N3TDyss,M66N3TDzss, & + M66N4TDxss,M66N4TDyss,M66N4TDzss,M66N5TDxss,M66N5TDyss,M66N5TDzss,M66N6TDxss,M66N6TDyss,M66N6TDzss,M66N7TDxss,M66N7TDyss,M66N7TDzss, & + M66N8TDxss,M66N8TDyss,M66N8TDzss,M66N9TDxss,M66N9TDyss,M66N9TDzss,M67N1TDxss,M67N1TDyss,M67N1TDzss,M67N2TDxss,M67N2TDyss,M67N2TDzss, & + M67N3TDxss,M67N3TDyss,M67N3TDzss,M67N4TDxss,M67N4TDyss,M67N4TDzss,M67N5TDxss,M67N5TDyss,M67N5TDzss,M67N6TDxss,M67N6TDyss,M67N6TDzss, & + M67N7TDxss,M67N7TDyss,M67N7TDzss,M67N8TDxss,M67N8TDyss,M67N8TDzss,M67N9TDxss,M67N9TDyss,M67N9TDzss,M68N1TDxss,M68N1TDyss,M68N1TDzss, & + M68N2TDxss,M68N2TDyss,M68N2TDzss,M68N3TDxss,M68N3TDyss,M68N3TDzss,M68N4TDxss,M68N4TDyss,M68N4TDzss,M68N5TDxss,M68N5TDyss,M68N5TDzss, & + M68N6TDxss,M68N6TDyss,M68N6TDzss,M68N7TDxss,M68N7TDyss,M68N7TDzss,M68N8TDxss,M68N8TDyss,M68N8TDzss,M68N9TDxss,M68N9TDyss,M68N9TDzss, & + M69N1TDxss,M69N1TDyss,M69N1TDzss,M69N2TDxss,M69N2TDyss,M69N2TDzss,M69N3TDxss,M69N3TDyss,M69N3TDzss,M69N4TDxss,M69N4TDyss,M69N4TDzss, & + M69N5TDxss,M69N5TDyss,M69N5TDzss,M69N6TDxss,M69N6TDyss,M69N6TDzss,M69N7TDxss,M69N7TDyss,M69N7TDzss,M69N8TDxss,M69N8TDyss,M69N8TDzss, & + M69N9TDxss,M69N9TDyss,M69N9TDzss,M70N1TDxss,M70N1TDyss,M70N1TDzss,M70N2TDxss,M70N2TDyss,M70N2TDzss,M70N3TDxss,M70N3TDyss,M70N3TDzss, & + M70N4TDxss,M70N4TDyss,M70N4TDzss,M70N5TDxss,M70N5TDyss,M70N5TDzss,M70N6TDxss,M70N6TDyss,M70N6TDzss,M70N7TDxss,M70N7TDyss,M70N7TDzss, & + M70N8TDxss,M70N8TDyss,M70N8TDzss,M70N9TDxss,M70N9TDyss,M70N9TDzss,M71N1TDxss,M71N1TDyss,M71N1TDzss,M71N2TDxss,M71N2TDyss,M71N2TDzss, & + M71N3TDxss,M71N3TDyss,M71N3TDzss,M71N4TDxss,M71N4TDyss,M71N4TDzss,M71N5TDxss,M71N5TDyss,M71N5TDzss,M71N6TDxss,M71N6TDyss,M71N6TDzss, & + M71N7TDxss,M71N7TDyss,M71N7TDzss,M71N8TDxss,M71N8TDyss,M71N8TDzss,M71N9TDxss,M71N9TDyss,M71N9TDzss,M72N1TDxss,M72N1TDyss,M72N1TDzss, & + M72N2TDxss,M72N2TDyss,M72N2TDzss,M72N3TDxss,M72N3TDyss,M72N3TDzss,M72N4TDxss,M72N4TDyss,M72N4TDzss,M72N5TDxss,M72N5TDyss,M72N5TDzss, & + M72N6TDxss,M72N6TDyss,M72N6TDzss,M72N7TDxss,M72N7TDyss,M72N7TDzss,M72N8TDxss,M72N8TDyss,M72N8TDzss,M72N9TDxss,M72N9TDyss,M72N9TDzss, & + M73N1TDxss,M73N1TDyss,M73N1TDzss,M73N2TDxss,M73N2TDyss,M73N2TDzss,M73N3TDxss,M73N3TDyss,M73N3TDzss,M73N4TDxss,M73N4TDyss,M73N4TDzss, & + M73N5TDxss,M73N5TDyss,M73N5TDzss,M73N6TDxss,M73N6TDyss,M73N6TDzss,M73N7TDxss,M73N7TDyss,M73N7TDzss,M73N8TDxss,M73N8TDyss,M73N8TDzss, & + M73N9TDxss,M73N9TDyss,M73N9TDzss,M74N1TDxss,M74N1TDyss,M74N1TDzss,M74N2TDxss,M74N2TDyss,M74N2TDzss,M74N3TDxss,M74N3TDyss,M74N3TDzss, & + M74N4TDxss,M74N4TDyss,M74N4TDzss,M74N5TDxss,M74N5TDyss,M74N5TDzss,M74N6TDxss,M74N6TDyss,M74N6TDzss,M74N7TDxss,M74N7TDyss,M74N7TDzss, & + M74N8TDxss,M74N8TDyss,M74N8TDzss,M74N9TDxss,M74N9TDyss,M74N9TDzss,M75N1TDxss,M75N1TDyss,M75N1TDzss,M75N2TDxss,M75N2TDyss,M75N2TDzss, & + M75N3TDxss,M75N3TDyss,M75N3TDzss,M75N4TDxss,M75N4TDyss,M75N4TDzss,M75N5TDxss,M75N5TDyss,M75N5TDzss,M75N6TDxss,M75N6TDyss,M75N6TDzss, & + M75N7TDxss,M75N7TDyss,M75N7TDzss,M75N8TDxss,M75N8TDyss,M75N8TDzss,M75N9TDxss,M75N9TDyss,M75N9TDzss,M76N1TDxss,M76N1TDyss,M76N1TDzss, & + M76N2TDxss,M76N2TDyss,M76N2TDzss,M76N3TDxss,M76N3TDyss,M76N3TDzss,M76N4TDxss,M76N4TDyss,M76N4TDzss,M76N5TDxss,M76N5TDyss,M76N5TDzss, & + M76N6TDxss,M76N6TDyss,M76N6TDzss,M76N7TDxss,M76N7TDyss,M76N7TDzss,M76N8TDxss,M76N8TDyss,M76N8TDzss,M76N9TDxss,M76N9TDyss,M76N9TDzss, & + M77N1TDxss,M77N1TDyss,M77N1TDzss,M77N2TDxss,M77N2TDyss,M77N2TDzss,M77N3TDxss,M77N3TDyss,M77N3TDzss,M77N4TDxss,M77N4TDyss,M77N4TDzss, & + M77N5TDxss,M77N5TDyss,M77N5TDzss,M77N6TDxss,M77N6TDyss,M77N6TDzss,M77N7TDxss,M77N7TDyss,M77N7TDzss,M77N8TDxss,M77N8TDyss,M77N8TDzss, & + M77N9TDxss,M77N9TDyss,M77N9TDzss,M78N1TDxss,M78N1TDyss,M78N1TDzss,M78N2TDxss,M78N2TDyss,M78N2TDzss,M78N3TDxss,M78N3TDyss,M78N3TDzss, & + M78N4TDxss,M78N4TDyss,M78N4TDzss,M78N5TDxss,M78N5TDyss,M78N5TDzss,M78N6TDxss,M78N6TDyss,M78N6TDzss,M78N7TDxss,M78N7TDyss,M78N7TDzss, & + M78N8TDxss,M78N8TDyss,M78N8TDzss,M78N9TDxss,M78N9TDyss,M78N9TDzss,M79N1TDxss,M79N1TDyss,M79N1TDzss,M79N2TDxss,M79N2TDyss,M79N2TDzss, & + M79N3TDxss,M79N3TDyss,M79N3TDzss,M79N4TDxss,M79N4TDyss,M79N4TDzss,M79N5TDxss,M79N5TDyss,M79N5TDzss,M79N6TDxss,M79N6TDyss,M79N6TDzss, & + M79N7TDxss,M79N7TDyss,M79N7TDzss,M79N8TDxss,M79N8TDyss,M79N8TDzss,M79N9TDxss,M79N9TDyss,M79N9TDzss,M80N1TDxss,M80N1TDyss,M80N1TDzss, & + M80N2TDxss,M80N2TDyss,M80N2TDzss,M80N3TDxss,M80N3TDyss,M80N3TDzss,M80N4TDxss,M80N4TDyss,M80N4TDzss,M80N5TDxss,M80N5TDyss,M80N5TDzss, & + M80N6TDxss,M80N6TDyss,M80N6TDzss,M80N7TDxss,M80N7TDyss,M80N7TDzss,M80N8TDxss,M80N8TDyss,M80N8TDzss,M80N9TDxss,M80N9TDyss,M80N9TDzss, & + M81N1TDxss,M81N1TDyss,M81N1TDzss,M81N2TDxss,M81N2TDyss,M81N2TDzss,M81N3TDxss,M81N3TDyss,M81N3TDzss,M81N4TDxss,M81N4TDyss,M81N4TDzss, & + M81N5TDxss,M81N5TDyss,M81N5TDzss,M81N6TDxss,M81N6TDyss,M81N6TDzss,M81N7TDxss,M81N7TDyss,M81N7TDzss,M81N8TDxss,M81N8TDyss,M81N8TDzss, & + M81N9TDxss,M81N9TDyss,M81N9TDzss,M82N1TDxss,M82N1TDyss,M82N1TDzss,M82N2TDxss,M82N2TDyss,M82N2TDzss,M82N3TDxss,M82N3TDyss,M82N3TDzss, & + M82N4TDxss,M82N4TDyss,M82N4TDzss,M82N5TDxss,M82N5TDyss,M82N5TDzss,M82N6TDxss,M82N6TDyss,M82N6TDzss,M82N7TDxss,M82N7TDyss,M82N7TDzss, & + M82N8TDxss,M82N8TDyss,M82N8TDzss,M82N9TDxss,M82N9TDyss,M82N9TDzss,M83N1TDxss,M83N1TDyss,M83N1TDzss,M83N2TDxss,M83N2TDyss,M83N2TDzss, & + M83N3TDxss,M83N3TDyss,M83N3TDzss,M83N4TDxss,M83N4TDyss,M83N4TDzss,M83N5TDxss,M83N5TDyss,M83N5TDzss,M83N6TDxss,M83N6TDyss,M83N6TDzss, & + M83N7TDxss,M83N7TDyss,M83N7TDzss,M83N8TDxss,M83N8TDyss,M83N8TDzss,M83N9TDxss,M83N9TDyss,M83N9TDzss,M84N1TDxss,M84N1TDyss,M84N1TDzss, & + M84N2TDxss,M84N2TDyss,M84N2TDzss,M84N3TDxss,M84N3TDyss,M84N3TDzss,M84N4TDxss,M84N4TDyss,M84N4TDzss,M84N5TDxss,M84N5TDyss,M84N5TDzss, & + M84N6TDxss,M84N6TDyss,M84N6TDzss,M84N7TDxss,M84N7TDyss,M84N7TDzss,M84N8TDxss,M84N8TDyss,M84N8TDzss,M84N9TDxss,M84N9TDyss,M84N9TDzss, & + M85N1TDxss,M85N1TDyss,M85N1TDzss,M85N2TDxss,M85N2TDyss,M85N2TDzss,M85N3TDxss,M85N3TDyss,M85N3TDzss,M85N4TDxss,M85N4TDyss,M85N4TDzss, & + M85N5TDxss,M85N5TDyss,M85N5TDzss,M85N6TDxss,M85N6TDyss,M85N6TDzss,M85N7TDxss,M85N7TDyss,M85N7TDzss,M85N8TDxss,M85N8TDyss,M85N8TDzss, & + M85N9TDxss,M85N9TDyss,M85N9TDzss,M86N1TDxss,M86N1TDyss,M86N1TDzss,M86N2TDxss,M86N2TDyss,M86N2TDzss,M86N3TDxss,M86N3TDyss,M86N3TDzss, & + M86N4TDxss,M86N4TDyss,M86N4TDzss,M86N5TDxss,M86N5TDyss,M86N5TDzss,M86N6TDxss,M86N6TDyss,M86N6TDzss,M86N7TDxss,M86N7TDyss,M86N7TDzss, & + M86N8TDxss,M86N8TDyss,M86N8TDzss,M86N9TDxss,M86N9TDyss,M86N9TDzss,M87N1TDxss,M87N1TDyss,M87N1TDzss,M87N2TDxss,M87N2TDyss,M87N2TDzss, & + M87N3TDxss,M87N3TDyss,M87N3TDzss,M87N4TDxss,M87N4TDyss,M87N4TDzss,M87N5TDxss,M87N5TDyss,M87N5TDzss,M87N6TDxss,M87N6TDyss,M87N6TDzss, & + M87N7TDxss,M87N7TDyss,M87N7TDzss,M87N8TDxss,M87N8TDyss,M87N8TDzss,M87N9TDxss,M87N9TDyss,M87N9TDzss,M88N1TDxss,M88N1TDyss,M88N1TDzss, & + M88N2TDxss,M88N2TDyss,M88N2TDzss,M88N3TDxss,M88N3TDyss,M88N3TDzss,M88N4TDxss,M88N4TDyss,M88N4TDzss,M88N5TDxss,M88N5TDyss,M88N5TDzss, & + M88N6TDxss,M88N6TDyss,M88N6TDzss,M88N7TDxss,M88N7TDyss,M88N7TDzss,M88N8TDxss,M88N8TDyss,M88N8TDzss,M88N9TDxss,M88N9TDyss,M88N9TDzss, & + M89N1TDxss,M89N1TDyss,M89N1TDzss,M89N2TDxss,M89N2TDyss,M89N2TDzss,M89N3TDxss,M89N3TDyss,M89N3TDzss,M89N4TDxss,M89N4TDyss,M89N4TDzss, & + M89N5TDxss,M89N5TDyss,M89N5TDzss,M89N6TDxss,M89N6TDyss,M89N6TDzss,M89N7TDxss,M89N7TDyss,M89N7TDzss,M89N8TDxss,M89N8TDyss,M89N8TDzss, & + M89N9TDxss,M89N9TDyss,M89N9TDzss,M90N1TDxss,M90N1TDyss,M90N1TDzss,M90N2TDxss,M90N2TDyss,M90N2TDzss,M90N3TDxss,M90N3TDyss,M90N3TDzss, & + M90N4TDxss,M90N4TDyss,M90N4TDzss,M90N5TDxss,M90N5TDyss,M90N5TDzss,M90N6TDxss,M90N6TDyss,M90N6TDzss,M90N7TDxss,M90N7TDyss,M90N7TDzss, & + M90N8TDxss,M90N8TDyss,M90N8TDzss,M90N9TDxss,M90N9TDyss,M90N9TDzss,M91N1TDxss,M91N1TDyss,M91N1TDzss,M91N2TDxss,M91N2TDyss,M91N2TDzss, & + M91N3TDxss,M91N3TDyss,M91N3TDzss,M91N4TDxss,M91N4TDyss,M91N4TDzss,M91N5TDxss,M91N5TDyss,M91N5TDzss,M91N6TDxss,M91N6TDyss,M91N6TDzss, & + M91N7TDxss,M91N7TDyss,M91N7TDzss,M91N8TDxss,M91N8TDyss,M91N8TDzss,M91N9TDxss,M91N9TDyss,M91N9TDzss,M92N1TDxss,M92N1TDyss,M92N1TDzss, & + M92N2TDxss,M92N2TDyss,M92N2TDzss,M92N3TDxss,M92N3TDyss,M92N3TDzss,M92N4TDxss,M92N4TDyss,M92N4TDzss,M92N5TDxss,M92N5TDyss,M92N5TDzss, & + M92N6TDxss,M92N6TDyss,M92N6TDzss,M92N7TDxss,M92N7TDyss,M92N7TDzss,M92N8TDxss,M92N8TDyss,M92N8TDzss,M92N9TDxss,M92N9TDyss,M92N9TDzss, & + M93N1TDxss,M93N1TDyss,M93N1TDzss,M93N2TDxss,M93N2TDyss,M93N2TDzss,M93N3TDxss,M93N3TDyss,M93N3TDzss,M93N4TDxss,M93N4TDyss,M93N4TDzss, & + M93N5TDxss,M93N5TDyss,M93N5TDzss,M93N6TDxss,M93N6TDyss,M93N6TDzss,M93N7TDxss,M93N7TDyss,M93N7TDzss,M93N8TDxss,M93N8TDyss,M93N8TDzss, & + M93N9TDxss,M93N9TDyss,M93N9TDzss,M94N1TDxss,M94N1TDyss,M94N1TDzss,M94N2TDxss,M94N2TDyss,M94N2TDzss,M94N3TDxss,M94N3TDyss,M94N3TDzss, & + M94N4TDxss,M94N4TDyss,M94N4TDzss,M94N5TDxss,M94N5TDyss,M94N5TDzss,M94N6TDxss,M94N6TDyss,M94N6TDzss,M94N7TDxss,M94N7TDyss,M94N7TDzss, & + M94N8TDxss,M94N8TDyss,M94N8TDzss,M94N9TDxss,M94N9TDyss,M94N9TDzss,M95N1TDxss,M95N1TDyss,M95N1TDzss,M95N2TDxss,M95N2TDyss,M95N2TDzss, & + M95N3TDxss,M95N3TDyss,M95N3TDzss,M95N4TDxss,M95N4TDyss,M95N4TDzss,M95N5TDxss,M95N5TDyss,M95N5TDzss,M95N6TDxss,M95N6TDyss,M95N6TDzss, & + M95N7TDxss,M95N7TDyss,M95N7TDzss,M95N8TDxss,M95N8TDyss,M95N8TDzss,M95N9TDxss,M95N9TDyss,M95N9TDzss,M96N1TDxss,M96N1TDyss,M96N1TDzss, & + M96N2TDxss,M96N2TDyss,M96N2TDzss,M96N3TDxss,M96N3TDyss,M96N3TDzss,M96N4TDxss,M96N4TDyss,M96N4TDzss,M96N5TDxss,M96N5TDyss,M96N5TDzss, & + M96N6TDxss,M96N6TDyss,M96N6TDzss,M96N7TDxss,M96N7TDyss,M96N7TDzss,M96N8TDxss,M96N8TDyss,M96N8TDzss,M96N9TDxss,M96N9TDyss,M96N9TDzss, & + M97N1TDxss,M97N1TDyss,M97N1TDzss,M97N2TDxss,M97N2TDyss,M97N2TDzss,M97N3TDxss,M97N3TDyss,M97N3TDzss,M97N4TDxss,M97N4TDyss,M97N4TDzss, & + M97N5TDxss,M97N5TDyss,M97N5TDzss,M97N6TDxss,M97N6TDyss,M97N6TDzss,M97N7TDxss,M97N7TDyss,M97N7TDzss,M97N8TDxss,M97N8TDyss,M97N8TDzss, & + M97N9TDxss,M97N9TDyss,M97N9TDzss,M98N1TDxss,M98N1TDyss,M98N1TDzss,M98N2TDxss,M98N2TDyss,M98N2TDzss,M98N3TDxss,M98N3TDyss,M98N3TDzss, & + M98N4TDxss,M98N4TDyss,M98N4TDzss,M98N5TDxss,M98N5TDyss,M98N5TDzss,M98N6TDxss,M98N6TDyss,M98N6TDzss,M98N7TDxss,M98N7TDyss,M98N7TDzss, & + M98N8TDxss,M98N8TDyss,M98N8TDzss,M98N9TDxss,M98N9TDyss,M98N9TDzss,M99N1TDxss,M99N1TDyss,M99N1TDzss,M99N2TDxss,M99N2TDyss,M99N2TDzss, & + M99N3TDxss,M99N3TDyss,M99N3TDzss,M99N4TDxss,M99N4TDyss,M99N4TDzss,M99N5TDxss,M99N5TDyss,M99N5TDzss,M99N6TDxss,M99N6TDyss,M99N6TDzss, & + M99N7TDxss,M99N7TDyss,M99N7TDzss,M99N8TDxss,M99N8TDyss,M99N8TDzss,M99N9TDxss,M99N9TDyss,M99N9TDzss/),(/3,9,99/)) - INTEGER, PARAMETER :: IntfTRss(6) = (/IntfTDXss, IntfTDYss, IntfTDZss , & - IntfRDXss, IntfRDYss, IntfRDZss/) - - INTEGER, PARAMETER :: IntfTRAss(6) = (/IntfTAXss, IntfTAYss, IntfTAZss , & - IntfRAXss, IntfRAYss, IntfRAZss/) + INTEGER(IntKi), PARAMETER ::MNRDe(3,9,99) = reshape((/ & + M01N1RDxe, M01N1RDye, M01N1RDze, M01N2RDxe, M01N2RDye, M01N2RDze, M01N3RDxe, M01N3RDye, M01N3RDze, M01N4RDxe, M01N4RDye, M01N4RDze, & + M01N5RDxe, M01N5RDye, M01N5RDze, M01N6RDxe, M01N6RDye, M01N6RDze, M01N7RDxe, M01N7RDye, M01N7RDze, M01N8RDxe, M01N8RDye, M01N8RDze, & + M01N9RDxe, M01N9RDye, M01N9RDze, M02N1RDxe, M02N1RDye, M02N1RDze, M02N2RDxe, M02N2RDye, M02N2RDze, M02N3RDxe, M02N3RDye, M02N3RDze, & + M02N4RDxe, M02N4RDye, M02N4RDze, M02N5RDxe, M02N5RDye, M02N5RDze, M02N6RDxe, M02N6RDye, M02N6RDze, M02N7RDxe, M02N7RDye, M02N7RDze, & + M02N8RDxe, M02N8RDye, M02N8RDze, M02N9RDxe, M02N9RDye, M02N9RDze, M03N1RDxe, M03N1RDye, M03N1RDze, M03N2RDxe, M03N2RDye, M03N2RDze, & + M03N3RDxe, M03N3RDye, M03N3RDze, M03N4RDxe, M03N4RDye, M03N4RDze, M03N5RDxe, M03N5RDye, M03N5RDze, M03N6RDxe, M03N6RDye, M03N6RDze, & + M03N7RDxe, M03N7RDye, M03N7RDze, M03N8RDxe, M03N8RDye, M03N8RDze, M03N9RDxe, M03N9RDye, M03N9RDze, M04N1RDxe, M04N1RDye, M04N1RDze, & + M04N2RDxe, M04N2RDye, M04N2RDze, M04N3RDxe, M04N3RDye, M04N3RDze, M04N4RDxe, M04N4RDye, M04N4RDze, M04N5RDxe, M04N5RDye, M04N5RDze, & + M04N6RDxe, M04N6RDye, M04N6RDze, M04N7RDxe, M04N7RDye, M04N7RDze, M04N8RDxe, M04N8RDye, M04N8RDze, M04N9RDxe, M04N9RDye, M04N9RDze, & + M05N1RDxe, M05N1RDye, M05N1RDze, M05N2RDxe, M05N2RDye, M05N2RDze, M05N3RDxe, M05N3RDye, M05N3RDze, M05N4RDxe, M05N4RDye, M05N4RDze, & + M05N5RDxe, M05N5RDye, M05N5RDze, M05N6RDxe, M05N6RDye, M05N6RDze, M05N7RDxe, M05N7RDye, M05N7RDze, M05N8RDxe, M05N8RDye, M05N8RDze, & + M05N9RDxe, M05N9RDye, M05N9RDze, M06N1RDxe, M06N1RDye, M06N1RDze, M06N2RDxe, M06N2RDye, M06N2RDze, M06N3RDxe, M06N3RDye, M06N3RDze, & + M06N4RDxe, M06N4RDye, M06N4RDze, M06N5RDxe, M06N5RDye, M06N5RDze, M06N6RDxe, M06N6RDye, M06N6RDze, M06N7RDxe, M06N7RDye, M06N7RDze, & + M06N8RDxe, M06N8RDye, M06N8RDze, M06N9RDxe, M06N9RDye, M06N9RDze, M07N1RDxe, M07N1RDye, M07N1RDze, M07N2RDxe, M07N2RDye, M07N2RDze, & + M07N3RDxe, M07N3RDye, M07N3RDze, M07N4RDxe, M07N4RDye, M07N4RDze, M07N5RDxe, M07N5RDye, M07N5RDze, M07N6RDxe, M07N6RDye, M07N6RDze, & + M07N7RDxe, M07N7RDye, M07N7RDze, M07N8RDxe, M07N8RDye, M07N8RDze, M07N9RDxe, M07N9RDye, M07N9RDze, M08N1RDxe, M08N1RDye, M08N1RDze, & + M08N2RDxe, M08N2RDye, M08N2RDze, M08N3RDxe, M08N3RDye, M08N3RDze, M08N4RDxe, M08N4RDye, M08N4RDze, M08N5RDxe, M08N5RDye, M08N5RDze, & + M08N6RDxe, M08N6RDye, M08N6RDze, M08N7RDxe, M08N7RDye, M08N7RDze, M08N8RDxe, M08N8RDye, M08N8RDze, M08N9RDxe, M08N9RDye, M08N9RDze, & + M09N1RDxe, M09N1RDye, M09N1RDze, M09N2RDxe, M09N2RDye, M09N2RDze, M09N3RDxe, M09N3RDye, M09N3RDze, M09N4RDxe, M09N4RDye, M09N4RDze, & + M09N5RDxe, M09N5RDye, M09N5RDze, M09N6RDxe, M09N6RDye, M09N6RDze, M09N7RDxe, M09N7RDye, M09N7RDze, M09N8RDxe, M09N8RDye, M09N8RDze, & + M09N9RDxe, M09N9RDye, M09N9RDze, M10N1RDxe, M10N1RDye, M10N1RDze, M10N2RDxe, M10N2RDye, M10N2RDze, M10N3RDxe, M10N3RDye, M10N3RDze, & + M10N4RDxe, M10N4RDye, M10N4RDze, M10N5RDxe, M10N5RDye, M10N5RDze, M10N6RDxe, M10N6RDye, M10N6RDze, M10N7RDxe, M10N7RDye, M10N7RDze, & + M10N8RDxe, M10N8RDye, M10N8RDze, M10N9RDxe, M10N9RDye, M10N9RDze, M11N1RDxe, M11N1RDye, M11N1RDze, M11N2RDxe, M11N2RDye, M11N2RDze, & + M11N3RDxe, M11N3RDye, M11N3RDze, M11N4RDxe, M11N4RDye, M11N4RDze, M11N5RDxe, M11N5RDye, M11N5RDze, M11N6RDxe, M11N6RDye, M11N6RDze, & + M11N7RDxe, M11N7RDye, M11N7RDze, M11N8RDxe, M11N8RDye, M11N8RDze, M11N9RDxe, M11N9RDye, M11N9RDze, M12N1RDxe, M12N1RDye, M12N1RDze, & + M12N2RDxe, M12N2RDye, M12N2RDze, M12N3RDxe, M12N3RDye, M12N3RDze, M12N4RDxe, M12N4RDye, M12N4RDze, M12N5RDxe, M12N5RDye, M12N5RDze, & + M12N6RDxe, M12N6RDye, M12N6RDze, M12N7RDxe, M12N7RDye, M12N7RDze, M12N8RDxe, M12N8RDye, M12N8RDze, M12N9RDxe, M12N9RDye, M12N9RDze, & + M13N1RDxe, M13N1RDye, M13N1RDze, M13N2RDxe, M13N2RDye, M13N2RDze, M13N3RDxe, M13N3RDye, M13N3RDze, M13N4RDxe, M13N4RDye, M13N4RDze, & + M13N5RDxe, M13N5RDye, M13N5RDze, M13N6RDxe, M13N6RDye, M13N6RDze, M13N7RDxe, M13N7RDye, M13N7RDze, M13N8RDxe, M13N8RDye, M13N8RDze, & + M13N9RDxe, M13N9RDye, M13N9RDze, M14N1RDxe, M14N1RDye, M14N1RDze, M14N2RDxe, M14N2RDye, M14N2RDze, M14N3RDxe, M14N3RDye, M14N3RDze, & + M14N4RDxe, M14N4RDye, M14N4RDze, M14N5RDxe, M14N5RDye, M14N5RDze, M14N6RDxe, M14N6RDye, M14N6RDze, M14N7RDxe, M14N7RDye, M14N7RDze, & + M14N8RDxe, M14N8RDye, M14N8RDze, M14N9RDxe, M14N9RDye, M14N9RDze, M15N1RDxe, M15N1RDye, M15N1RDze, M15N2RDxe, M15N2RDye, M15N2RDze, & + M15N3RDxe, M15N3RDye, M15N3RDze, M15N4RDxe, M15N4RDye, M15N4RDze, M15N5RDxe, M15N5RDye, M15N5RDze, M15N6RDxe, M15N6RDye, M15N6RDze, & + M15N7RDxe, M15N7RDye, M15N7RDze, M15N8RDxe, M15N8RDye, M15N8RDze, M15N9RDxe, M15N9RDye, M15N9RDze, M16N1RDxe, M16N1RDye, M16N1RDze, & + M16N2RDxe, M16N2RDye, M16N2RDze, M16N3RDxe, M16N3RDye, M16N3RDze, M16N4RDxe, M16N4RDye, M16N4RDze, M16N5RDxe, M16N5RDye, M16N5RDze, & + M16N6RDxe, M16N6RDye, M16N6RDze, M16N7RDxe, M16N7RDye, M16N7RDze, M16N8RDxe, M16N8RDye, M16N8RDze, M16N9RDxe, M16N9RDye, M16N9RDze, & + M17N1RDxe, M17N1RDye, M17N1RDze, M17N2RDxe, M17N2RDye, M17N2RDze, M17N3RDxe, M17N3RDye, M17N3RDze, M17N4RDxe, M17N4RDye, M17N4RDze, & + M17N5RDxe, M17N5RDye, M17N5RDze, M17N6RDxe, M17N6RDye, M17N6RDze, M17N7RDxe, M17N7RDye, M17N7RDze, M17N8RDxe, M17N8RDye, M17N8RDze, & + M17N9RDxe, M17N9RDye, M17N9RDze, M18N1RDxe, M18N1RDye, M18N1RDze, M18N2RDxe, M18N2RDye, M18N2RDze, M18N3RDxe, M18N3RDye, M18N3RDze, & + M18N4RDxe, M18N4RDye, M18N4RDze, M18N5RDxe, M18N5RDye, M18N5RDze, M18N6RDxe, M18N6RDye, M18N6RDze, M18N7RDxe, M18N7RDye, M18N7RDze, & + M18N8RDxe, M18N8RDye, M18N8RDze, M18N9RDxe, M18N9RDye, M18N9RDze, M19N1RDxe, M19N1RDye, M19N1RDze, M19N2RDxe, M19N2RDye, M19N2RDze, & + M19N3RDxe, M19N3RDye, M19N3RDze, M19N4RDxe, M19N4RDye, M19N4RDze, M19N5RDxe, M19N5RDye, M19N5RDze, M19N6RDxe, M19N6RDye, M19N6RDze, & + M19N7RDxe, M19N7RDye, M19N7RDze, M19N8RDxe, M19N8RDye, M19N8RDze, M19N9RDxe, M19N9RDye, M19N9RDze, M20N1RDxe, M20N1RDye, M20N1RDze, & + M20N2RDxe, M20N2RDye, M20N2RDze, M20N3RDxe, M20N3RDye, M20N3RDze, M20N4RDxe, M20N4RDye, M20N4RDze, M20N5RDxe, M20N5RDye, M20N5RDze, & + M20N6RDxe, M20N6RDye, M20N6RDze, M20N7RDxe, M20N7RDye, M20N7RDze, M20N8RDxe, M20N8RDye, M20N8RDze, M20N9RDxe, M20N9RDye, M20N9RDze, & + M21N1RDxe, M21N1RDye, M21N1RDze, M21N2RDxe, M21N2RDye, M21N2RDze, M21N3RDxe, M21N3RDye, M21N3RDze, M21N4RDxe, M21N4RDye, M21N4RDze, & + M21N5RDxe, M21N5RDye, M21N5RDze, M21N6RDxe, M21N6RDye, M21N6RDze, M21N7RDxe, M21N7RDye, M21N7RDze, M21N8RDxe, M21N8RDye, M21N8RDze, & + M21N9RDxe, M21N9RDye, M21N9RDze, M22N1RDxe, M22N1RDye, M22N1RDze, M22N2RDxe, M22N2RDye, M22N2RDze, M22N3RDxe, M22N3RDye, M22N3RDze, & + M22N4RDxe, M22N4RDye, M22N4RDze, M22N5RDxe, M22N5RDye, M22N5RDze, M22N6RDxe, M22N6RDye, M22N6RDze, M22N7RDxe, M22N7RDye, M22N7RDze, & + M22N8RDxe, M22N8RDye, M22N8RDze, M22N9RDxe, M22N9RDye, M22N9RDze, M23N1RDxe, M23N1RDye, M23N1RDze, M23N2RDxe, M23N2RDye, M23N2RDze, & + M23N3RDxe, M23N3RDye, M23N3RDze, M23N4RDxe, M23N4RDye, M23N4RDze, M23N5RDxe, M23N5RDye, M23N5RDze, M23N6RDxe, M23N6RDye, M23N6RDze, & + M23N7RDxe, M23N7RDye, M23N7RDze, M23N8RDxe, M23N8RDye, M23N8RDze, M23N9RDxe, M23N9RDye, M23N9RDze, M24N1RDxe, M24N1RDye, M24N1RDze, & + M24N2RDxe, M24N2RDye, M24N2RDze, M24N3RDxe, M24N3RDye, M24N3RDze, M24N4RDxe, M24N4RDye, M24N4RDze, M24N5RDxe, M24N5RDye, M24N5RDze, & + M24N6RDxe, M24N6RDye, M24N6RDze, M24N7RDxe, M24N7RDye, M24N7RDze, M24N8RDxe, M24N8RDye, M24N8RDze, M24N9RDxe, M24N9RDye, M24N9RDze, & + M25N1RDxe, M25N1RDye, M25N1RDze, M25N2RDxe, M25N2RDye, M25N2RDze, M25N3RDxe, M25N3RDye, M25N3RDze, M25N4RDxe, M25N4RDye, M25N4RDze, & + M25N5RDxe, M25N5RDye, M25N5RDze, M25N6RDxe, M25N6RDye, M25N6RDze, M25N7RDxe, M25N7RDye, M25N7RDze, M25N8RDxe, M25N8RDye, M25N8RDze, & + M25N9RDxe, M25N9RDye, M25N9RDze, M26N1RDxe, M26N1RDye, M26N1RDze, M26N2RDxe, M26N2RDye, M26N2RDze, M26N3RDxe, M26N3RDye, M26N3RDze, & + M26N4RDxe, M26N4RDye, M26N4RDze, M26N5RDxe, M26N5RDye, M26N5RDze, M26N6RDxe, M26N6RDye, M26N6RDze, M26N7RDxe, M26N7RDye, M26N7RDze, & + M26N8RDxe, M26N8RDye, M26N8RDze, M26N9RDxe, M26N9RDye, M26N9RDze, M27N1RDxe, M27N1RDye, M27N1RDze, M27N2RDxe, M27N2RDye, M27N2RDze, & + M27N3RDxe, M27N3RDye, M27N3RDze, M27N4RDxe, M27N4RDye, M27N4RDze, M27N5RDxe, M27N5RDye, M27N5RDze, M27N6RDxe, M27N6RDye, M27N6RDze, & + M27N7RDxe, M27N7RDye, M27N7RDze, M27N8RDxe, M27N8RDye, M27N8RDze, M27N9RDxe, M27N9RDye, M27N9RDze, M28N1RDxe, M28N1RDye, M28N1RDze, & + M28N2RDxe, M28N2RDye, M28N2RDze, M28N3RDxe, M28N3RDye, M28N3RDze, M28N4RDxe, M28N4RDye, M28N4RDze, M28N5RDxe, M28N5RDye, M28N5RDze, & + M28N6RDxe, M28N6RDye, M28N6RDze, M28N7RDxe, M28N7RDye, M28N7RDze, M28N8RDxe, M28N8RDye, M28N8RDze, M28N9RDxe, M28N9RDye, M28N9RDze, & + M29N1RDxe, M29N1RDye, M29N1RDze, M29N2RDxe, M29N2RDye, M29N2RDze, M29N3RDxe, M29N3RDye, M29N3RDze, M29N4RDxe, M29N4RDye, M29N4RDze, & + M29N5RDxe, M29N5RDye, M29N5RDze, M29N6RDxe, M29N6RDye, M29N6RDze, M29N7RDxe, M29N7RDye, M29N7RDze, M29N8RDxe, M29N8RDye, M29N8RDze, & + M29N9RDxe, M29N9RDye, M29N9RDze, M30N1RDxe, M30N1RDye, M30N1RDze, M30N2RDxe, M30N2RDye, M30N2RDze, M30N3RDxe, M30N3RDye, M30N3RDze, & + M30N4RDxe, M30N4RDye, M30N4RDze, M30N5RDxe, M30N5RDye, M30N5RDze, M30N6RDxe, M30N6RDye, M30N6RDze, M30N7RDxe, M30N7RDye, M30N7RDze, & + M30N8RDxe, M30N8RDye, M30N8RDze, M30N9RDxe, M30N9RDye, M30N9RDze, M31N1RDxe, M31N1RDye, M31N1RDze, M31N2RDxe, M31N2RDye, M31N2RDze, & + M31N3RDxe, M31N3RDye, M31N3RDze, M31N4RDxe, M31N4RDye, M31N4RDze, M31N5RDxe, M31N5RDye, M31N5RDze, M31N6RDxe, M31N6RDye, M31N6RDze, & + M31N7RDxe, M31N7RDye, M31N7RDze, M31N8RDxe, M31N8RDye, M31N8RDze, M31N9RDxe, M31N9RDye, M31N9RDze, M32N1RDxe, M32N1RDye, M32N1RDze, & + M32N2RDxe, M32N2RDye, M32N2RDze, M32N3RDxe, M32N3RDye, M32N3RDze, M32N4RDxe, M32N4RDye, M32N4RDze, M32N5RDxe, M32N5RDye, M32N5RDze, & + M32N6RDxe, M32N6RDye, M32N6RDze, M32N7RDxe, M32N7RDye, M32N7RDze, M32N8RDxe, M32N8RDye, M32N8RDze, M32N9RDxe, M32N9RDye, M32N9RDze, & + M33N1RDxe, M33N1RDye, M33N1RDze, M33N2RDxe, M33N2RDye, M33N2RDze, M33N3RDxe, M33N3RDye, M33N3RDze, M33N4RDxe, M33N4RDye, M33N4RDze, & + M33N5RDxe, M33N5RDye, M33N5RDze, M33N6RDxe, M33N6RDye, M33N6RDze, M33N7RDxe, M33N7RDye, M33N7RDze, M33N8RDxe, M33N8RDye, M33N8RDze, & + M33N9RDxe, M33N9RDye, M33N9RDze, M34N1RDxe, M34N1RDye, M34N1RDze, M34N2RDxe, M34N2RDye, M34N2RDze, M34N3RDxe, M34N3RDye, M34N3RDze, & + M34N4RDxe, M34N4RDye, M34N4RDze, M34N5RDxe, M34N5RDye, M34N5RDze, M34N6RDxe, M34N6RDye, M34N6RDze, M34N7RDxe, M34N7RDye, M34N7RDze, & + M34N8RDxe, M34N8RDye, M34N8RDze, M34N9RDxe, M34N9RDye, M34N9RDze, M35N1RDxe, M35N1RDye, M35N1RDze, M35N2RDxe, M35N2RDye, M35N2RDze, & + M35N3RDxe, M35N3RDye, M35N3RDze, M35N4RDxe, M35N4RDye, M35N4RDze, M35N5RDxe, M35N5RDye, M35N5RDze, M35N6RDxe, M35N6RDye, M35N6RDze, & + M35N7RDxe, M35N7RDye, M35N7RDze, M35N8RDxe, M35N8RDye, M35N8RDze, M35N9RDxe, M35N9RDye, M35N9RDze, M36N1RDxe, M36N1RDye, M36N1RDze, & + M36N2RDxe, M36N2RDye, M36N2RDze, M36N3RDxe, M36N3RDye, M36N3RDze, M36N4RDxe, M36N4RDye, M36N4RDze, M36N5RDxe, M36N5RDye, M36N5RDze, & + M36N6RDxe, M36N6RDye, M36N6RDze, M36N7RDxe, M36N7RDye, M36N7RDze, M36N8RDxe, M36N8RDye, M36N8RDze, M36N9RDxe, M36N9RDye, M36N9RDze, & + M37N1RDxe, M37N1RDye, M37N1RDze, M37N2RDxe, M37N2RDye, M37N2RDze, M37N3RDxe, M37N3RDye, M37N3RDze, M37N4RDxe, M37N4RDye, M37N4RDze, & + M37N5RDxe, M37N5RDye, M37N5RDze, M37N6RDxe, M37N6RDye, M37N6RDze, M37N7RDxe, M37N7RDye, M37N7RDze, M37N8RDxe, M37N8RDye, M37N8RDze, & + M37N9RDxe, M37N9RDye, M37N9RDze, M38N1RDxe, M38N1RDye, M38N1RDze, M38N2RDxe, M38N2RDye, M38N2RDze, M38N3RDxe, M38N3RDye, M38N3RDze, & + M38N4RDxe, M38N4RDye, M38N4RDze, M38N5RDxe, M38N5RDye, M38N5RDze, M38N6RDxe, M38N6RDye, M38N6RDze, M38N7RDxe, M38N7RDye, M38N7RDze, & + M38N8RDxe, M38N8RDye, M38N8RDze, M38N9RDxe, M38N9RDye, M38N9RDze, M39N1RDxe, M39N1RDye, M39N1RDze, M39N2RDxe, M39N2RDye, M39N2RDze, & + M39N3RDxe, M39N3RDye, M39N3RDze, M39N4RDxe, M39N4RDye, M39N4RDze, M39N5RDxe, M39N5RDye, M39N5RDze, M39N6RDxe, M39N6RDye, M39N6RDze, & + M39N7RDxe, M39N7RDye, M39N7RDze, M39N8RDxe, M39N8RDye, M39N8RDze, M39N9RDxe, M39N9RDye, M39N9RDze, M40N1RDxe, M40N1RDye, M40N1RDze, & + M40N2RDxe, M40N2RDye, M40N2RDze, M40N3RDxe, M40N3RDye, M40N3RDze, M40N4RDxe, M40N4RDye, M40N4RDze, M40N5RDxe, M40N5RDye, M40N5RDze, & + M40N6RDxe, M40N6RDye, M40N6RDze, M40N7RDxe, M40N7RDye, M40N7RDze, M40N8RDxe, M40N8RDye, M40N8RDze, M40N9RDxe, M40N9RDye, M40N9RDze, & + M41N1RDxe, M41N1RDye, M41N1RDze, M41N2RDxe, M41N2RDye, M41N2RDze, M41N3RDxe, M41N3RDye, M41N3RDze, M41N4RDxe, M41N4RDye, M41N4RDze, & + M41N5RDxe, M41N5RDye, M41N5RDze, M41N6RDxe, M41N6RDye, M41N6RDze, M41N7RDxe, M41N7RDye, M41N7RDze, M41N8RDxe, M41N8RDye, M41N8RDze, & + M41N9RDxe, M41N9RDye, M41N9RDze, M42N1RDxe, M42N1RDye, M42N1RDze, M42N2RDxe, M42N2RDye, M42N2RDze, M42N3RDxe, M42N3RDye, M42N3RDze, & + M42N4RDxe, M42N4RDye, M42N4RDze, M42N5RDxe, M42N5RDye, M42N5RDze, M42N6RDxe, M42N6RDye, M42N6RDze, M42N7RDxe, M42N7RDye, M42N7RDze, & + M42N8RDxe, M42N8RDye, M42N8RDze, M42N9RDxe, M42N9RDye, M42N9RDze, M43N1RDxe, M43N1RDye, M43N1RDze, M43N2RDxe, M43N2RDye, M43N2RDze, & + M43N3RDxe, M43N3RDye, M43N3RDze, M43N4RDxe, M43N4RDye, M43N4RDze, M43N5RDxe, M43N5RDye, M43N5RDze, M43N6RDxe, M43N6RDye, M43N6RDze, & + M43N7RDxe, M43N7RDye, M43N7RDze, M43N8RDxe, M43N8RDye, M43N8RDze, M43N9RDxe, M43N9RDye, M43N9RDze, M44N1RDxe, M44N1RDye, M44N1RDze, & + M44N2RDxe, M44N2RDye, M44N2RDze, M44N3RDxe, M44N3RDye, M44N3RDze, M44N4RDxe, M44N4RDye, M44N4RDze, M44N5RDxe, M44N5RDye, M44N5RDze, & + M44N6RDxe, M44N6RDye, M44N6RDze, M44N7RDxe, M44N7RDye, M44N7RDze, M44N8RDxe, M44N8RDye, M44N8RDze, M44N9RDxe, M44N9RDye, M44N9RDze, & + M45N1RDxe, M45N1RDye, M45N1RDze, M45N2RDxe, M45N2RDye, M45N2RDze, M45N3RDxe, M45N3RDye, M45N3RDze, M45N4RDxe, M45N4RDye, M45N4RDze, & + M45N5RDxe, M45N5RDye, M45N5RDze, M45N6RDxe, M45N6RDye, M45N6RDze, M45N7RDxe, M45N7RDye, M45N7RDze, M45N8RDxe, M45N8RDye, M45N8RDze, & + M45N9RDxe, M45N9RDye, M45N9RDze, M46N1RDxe, M46N1RDye, M46N1RDze, M46N2RDxe, M46N2RDye, M46N2RDze, M46N3RDxe, M46N3RDye, M46N3RDze, & + M46N4RDxe, M46N4RDye, M46N4RDze, M46N5RDxe, M46N5RDye, M46N5RDze, M46N6RDxe, M46N6RDye, M46N6RDze, M46N7RDxe, M46N7RDye, M46N7RDze, & + M46N8RDxe, M46N8RDye, M46N8RDze, M46N9RDxe, M46N9RDye, M46N9RDze, M47N1RDxe, M47N1RDye, M47N1RDze, M47N2RDxe, M47N2RDye, M47N2RDze, & + M47N3RDxe, M47N3RDye, M47N3RDze, M47N4RDxe, M47N4RDye, M47N4RDze, M47N5RDxe, M47N5RDye, M47N5RDze, M47N6RDxe, M47N6RDye, M47N6RDze, & + M47N7RDxe, M47N7RDye, M47N7RDze, M47N8RDxe, M47N8RDye, M47N8RDze, M47N9RDxe, M47N9RDye, M47N9RDze, M48N1RDxe, M48N1RDye, M48N1RDze, & + M48N2RDxe, M48N2RDye, M48N2RDze, M48N3RDxe, M48N3RDye, M48N3RDze, M48N4RDxe, M48N4RDye, M48N4RDze, M48N5RDxe, M48N5RDye, M48N5RDze, & + M48N6RDxe, M48N6RDye, M48N6RDze, M48N7RDxe, M48N7RDye, M48N7RDze, M48N8RDxe, M48N8RDye, M48N8RDze, M48N9RDxe, M48N9RDye, M48N9RDze, & + M49N1RDxe, M49N1RDye, M49N1RDze, M49N2RDxe, M49N2RDye, M49N2RDze, M49N3RDxe, M49N3RDye, M49N3RDze, M49N4RDxe, M49N4RDye, M49N4RDze, & + M49N5RDxe, M49N5RDye, M49N5RDze, M49N6RDxe, M49N6RDye, M49N6RDze, M49N7RDxe, M49N7RDye, M49N7RDze, M49N8RDxe, M49N8RDye, M49N8RDze, & + M49N9RDxe, M49N9RDye, M49N9RDze, M50N1RDxe, M50N1RDye, M50N1RDze, M50N2RDxe, M50N2RDye, M50N2RDze, M50N3RDxe, M50N3RDye, M50N3RDze, & + M50N4RDxe, M50N4RDye, M50N4RDze, M50N5RDxe, M50N5RDye, M50N5RDze, M50N6RDxe, M50N6RDye, M50N6RDze, M50N7RDxe, M50N7RDye, M50N7RDze, & + M50N8RDxe, M50N8RDye, M50N8RDze, M50N9RDxe, M50N9RDye, M50N9RDze, M51N1RDxe, M51N1RDye, M51N1RDze, M51N2RDxe, M51N2RDye, M51N2RDze, & + M51N3RDxe, M51N3RDye, M51N3RDze, M51N4RDxe, M51N4RDye, M51N4RDze, M51N5RDxe, M51N5RDye, M51N5RDze, M51N6RDxe, M51N6RDye, M51N6RDze, & + M51N7RDxe, M51N7RDye, M51N7RDze, M51N8RDxe, M51N8RDye, M51N8RDze, M51N9RDxe, M51N9RDye, M51N9RDze, M52N1RDxe, M52N1RDye, M52N1RDze, & + M52N2RDxe, M52N2RDye, M52N2RDze, M52N3RDxe, M52N3RDye, M52N3RDze, M52N4RDxe, M52N4RDye, M52N4RDze, M52N5RDxe, M52N5RDye, M52N5RDze, & + M52N6RDxe, M52N6RDye, M52N6RDze, M52N7RDxe, M52N7RDye, M52N7RDze, M52N8RDxe, M52N8RDye, M52N8RDze, M52N9RDxe, M52N9RDye, M52N9RDze, & + M53N1RDxe, M53N1RDye, M53N1RDze, M53N2RDxe, M53N2RDye, M53N2RDze, M53N3RDxe, M53N3RDye, M53N3RDze, M53N4RDxe, M53N4RDye, M53N4RDze, & + M53N5RDxe, M53N5RDye, M53N5RDze, M53N6RDxe, M53N6RDye, M53N6RDze, M53N7RDxe, M53N7RDye, M53N7RDze, M53N8RDxe, M53N8RDye, M53N8RDze, & + M53N9RDxe, M53N9RDye, M53N9RDze, M54N1RDxe, M54N1RDye, M54N1RDze, M54N2RDxe, M54N2RDye, M54N2RDze, M54N3RDxe, M54N3RDye, M54N3RDze, & + M54N4RDxe, M54N4RDye, M54N4RDze, M54N5RDxe, M54N5RDye, M54N5RDze, M54N6RDxe, M54N6RDye, M54N6RDze, M54N7RDxe, M54N7RDye, M54N7RDze, & + M54N8RDxe, M54N8RDye, M54N8RDze, M54N9RDxe, M54N9RDye, M54N9RDze, M55N1RDxe, M55N1RDye, M55N1RDze, M55N2RDxe, M55N2RDye, M55N2RDze, & + M55N3RDxe, M55N3RDye, M55N3RDze, M55N4RDxe, M55N4RDye, M55N4RDze, M55N5RDxe, M55N5RDye, M55N5RDze, M55N6RDxe, M55N6RDye, M55N6RDze, & + M55N7RDxe, M55N7RDye, M55N7RDze, M55N8RDxe, M55N8RDye, M55N8RDze, M55N9RDxe, M55N9RDye, M55N9RDze, M56N1RDxe, M56N1RDye, M56N1RDze, & + M56N2RDxe, M56N2RDye, M56N2RDze, M56N3RDxe, M56N3RDye, M56N3RDze, M56N4RDxe, M56N4RDye, M56N4RDze, M56N5RDxe, M56N5RDye, M56N5RDze, & + M56N6RDxe, M56N6RDye, M56N6RDze, M56N7RDxe, M56N7RDye, M56N7RDze, M56N8RDxe, M56N8RDye, M56N8RDze, M56N9RDxe, M56N9RDye, M56N9RDze, & + M57N1RDxe, M57N1RDye, M57N1RDze, M57N2RDxe, M57N2RDye, M57N2RDze, M57N3RDxe, M57N3RDye, M57N3RDze, M57N4RDxe, M57N4RDye, M57N4RDze, & + M57N5RDxe, M57N5RDye, M57N5RDze, M57N6RDxe, M57N6RDye, M57N6RDze, M57N7RDxe, M57N7RDye, M57N7RDze, M57N8RDxe, M57N8RDye, M57N8RDze, & + M57N9RDxe, M57N9RDye, M57N9RDze, M58N1RDxe, M58N1RDye, M58N1RDze, M58N2RDxe, M58N2RDye, M58N2RDze, M58N3RDxe, M58N3RDye, M58N3RDze, & + M58N4RDxe, M58N4RDye, M58N4RDze, M58N5RDxe, M58N5RDye, M58N5RDze, M58N6RDxe, M58N6RDye, M58N6RDze, M58N7RDxe, M58N7RDye, M58N7RDze, & + M58N8RDxe, M58N8RDye, M58N8RDze, M58N9RDxe, M58N9RDye, M58N9RDze, M59N1RDxe, M59N1RDye, M59N1RDze, M59N2RDxe, M59N2RDye, M59N2RDze, & + M59N3RDxe, M59N3RDye, M59N3RDze, M59N4RDxe, M59N4RDye, M59N4RDze, M59N5RDxe, M59N5RDye, M59N5RDze, M59N6RDxe, M59N6RDye, M59N6RDze, & + M59N7RDxe, M59N7RDye, M59N7RDze, M59N8RDxe, M59N8RDye, M59N8RDze, M59N9RDxe, M59N9RDye, M59N9RDze, M60N1RDxe, M60N1RDye, M60N1RDze, & + M60N2RDxe, M60N2RDye, M60N2RDze, M60N3RDxe, M60N3RDye, M60N3RDze, M60N4RDxe, M60N4RDye, M60N4RDze, M60N5RDxe, M60N5RDye, M60N5RDze, & + M60N6RDxe, M60N6RDye, M60N6RDze, M60N7RDxe, M60N7RDye, M60N7RDze, M60N8RDxe, M60N8RDye, M60N8RDze, M60N9RDxe, M60N9RDye, M60N9RDze, & + M61N1RDxe, M61N1RDye, M61N1RDze, M61N2RDxe, M61N2RDye, M61N2RDze, M61N3RDxe, M61N3RDye, M61N3RDze, M61N4RDxe, M61N4RDye, M61N4RDze, & + M61N5RDxe, M61N5RDye, M61N5RDze, M61N6RDxe, M61N6RDye, M61N6RDze, M61N7RDxe, M61N7RDye, M61N7RDze, M61N8RDxe, M61N8RDye, M61N8RDze, & + M61N9RDxe, M61N9RDye, M61N9RDze, M62N1RDxe, M62N1RDye, M62N1RDze, M62N2RDxe, M62N2RDye, M62N2RDze, M62N3RDxe, M62N3RDye, M62N3RDze, & + M62N4RDxe, M62N4RDye, M62N4RDze, M62N5RDxe, M62N5RDye, M62N5RDze, M62N6RDxe, M62N6RDye, M62N6RDze, M62N7RDxe, M62N7RDye, M62N7RDze, & + M62N8RDxe, M62N8RDye, M62N8RDze, M62N9RDxe, M62N9RDye, M62N9RDze, M63N1RDxe, M63N1RDye, M63N1RDze, M63N2RDxe, M63N2RDye, M63N2RDze, & + M63N3RDxe, M63N3RDye, M63N3RDze, M63N4RDxe, M63N4RDye, M63N4RDze, M63N5RDxe, M63N5RDye, M63N5RDze, M63N6RDxe, M63N6RDye, M63N6RDze, & + M63N7RDxe, M63N7RDye, M63N7RDze, M63N8RDxe, M63N8RDye, M63N8RDze, M63N9RDxe, M63N9RDye, M63N9RDze, M64N1RDxe, M64N1RDye, M64N1RDze, & + M64N2RDxe, M64N2RDye, M64N2RDze, M64N3RDxe, M64N3RDye, M64N3RDze, M64N4RDxe, M64N4RDye, M64N4RDze, M64N5RDxe, M64N5RDye, M64N5RDze, & + M64N6RDxe, M64N6RDye, M64N6RDze, M64N7RDxe, M64N7RDye, M64N7RDze, M64N8RDxe, M64N8RDye, M64N8RDze, M64N9RDxe, M64N9RDye, M64N9RDze, & + M65N1RDxe, M65N1RDye, M65N1RDze, M65N2RDxe, M65N2RDye, M65N2RDze, M65N3RDxe, M65N3RDye, M65N3RDze, M65N4RDxe, M65N4RDye, M65N4RDze, & + M65N5RDxe, M65N5RDye, M65N5RDze, M65N6RDxe, M65N6RDye, M65N6RDze, M65N7RDxe, M65N7RDye, M65N7RDze, M65N8RDxe, M65N8RDye, M65N8RDze, & + M65N9RDxe, M65N9RDye, M65N9RDze, M66N1RDxe, M66N1RDye, M66N1RDze, M66N2RDxe, M66N2RDye, M66N2RDze, M66N3RDxe, M66N3RDye, M66N3RDze, & + M66N4RDxe, M66N4RDye, M66N4RDze, M66N5RDxe, M66N5RDye, M66N5RDze, M66N6RDxe, M66N6RDye, M66N6RDze, M66N7RDxe, M66N7RDye, M66N7RDze, & + M66N8RDxe, M66N8RDye, M66N8RDze, M66N9RDxe, M66N9RDye, M66N9RDze, M67N1RDxe, M67N1RDye, M67N1RDze, M67N2RDxe, M67N2RDye, M67N2RDze, & + M67N3RDxe, M67N3RDye, M67N3RDze, M67N4RDxe, M67N4RDye, M67N4RDze, M67N5RDxe, M67N5RDye, M67N5RDze, M67N6RDxe, M67N6RDye, M67N6RDze, & + M67N7RDxe, M67N7RDye, M67N7RDze, M67N8RDxe, M67N8RDye, M67N8RDze, M67N9RDxe, M67N9RDye, M67N9RDze, M68N1RDxe, M68N1RDye, M68N1RDze, & + M68N2RDxe, M68N2RDye, M68N2RDze, M68N3RDxe, M68N3RDye, M68N3RDze, M68N4RDxe, M68N4RDye, M68N4RDze, M68N5RDxe, M68N5RDye, M68N5RDze, & + M68N6RDxe, M68N6RDye, M68N6RDze, M68N7RDxe, M68N7RDye, M68N7RDze, M68N8RDxe, M68N8RDye, M68N8RDze, M68N9RDxe, M68N9RDye, M68N9RDze, & + M69N1RDxe, M69N1RDye, M69N1RDze, M69N2RDxe, M69N2RDye, M69N2RDze, M69N3RDxe, M69N3RDye, M69N3RDze, M69N4RDxe, M69N4RDye, M69N4RDze, & + M69N5RDxe, M69N5RDye, M69N5RDze, M69N6RDxe, M69N6RDye, M69N6RDze, M69N7RDxe, M69N7RDye, M69N7RDze, M69N8RDxe, M69N8RDye, M69N8RDze, & + M69N9RDxe, M69N9RDye, M69N9RDze, M70N1RDxe, M70N1RDye, M70N1RDze, M70N2RDxe, M70N2RDye, M70N2RDze, M70N3RDxe, M70N3RDye, M70N3RDze, & + M70N4RDxe, M70N4RDye, M70N4RDze, M70N5RDxe, M70N5RDye, M70N5RDze, M70N6RDxe, M70N6RDye, M70N6RDze, M70N7RDxe, M70N7RDye, M70N7RDze, & + M70N8RDxe, M70N8RDye, M70N8RDze, M70N9RDxe, M70N9RDye, M70N9RDze, M71N1RDxe, M71N1RDye, M71N1RDze, M71N2RDxe, M71N2RDye, M71N2RDze, & + M71N3RDxe, M71N3RDye, M71N3RDze, M71N4RDxe, M71N4RDye, M71N4RDze, M71N5RDxe, M71N5RDye, M71N5RDze, M71N6RDxe, M71N6RDye, M71N6RDze, & + M71N7RDxe, M71N7RDye, M71N7RDze, M71N8RDxe, M71N8RDye, M71N8RDze, M71N9RDxe, M71N9RDye, M71N9RDze, M72N1RDxe, M72N1RDye, M72N1RDze, & + M72N2RDxe, M72N2RDye, M72N2RDze, M72N3RDxe, M72N3RDye, M72N3RDze, M72N4RDxe, M72N4RDye, M72N4RDze, M72N5RDxe, M72N5RDye, M72N5RDze, & + M72N6RDxe, M72N6RDye, M72N6RDze, M72N7RDxe, M72N7RDye, M72N7RDze, M72N8RDxe, M72N8RDye, M72N8RDze, M72N9RDxe, M72N9RDye, M72N9RDze, & + M73N1RDxe, M73N1RDye, M73N1RDze, M73N2RDxe, M73N2RDye, M73N2RDze, M73N3RDxe, M73N3RDye, M73N3RDze, M73N4RDxe, M73N4RDye, M73N4RDze, & + M73N5RDxe, M73N5RDye, M73N5RDze, M73N6RDxe, M73N6RDye, M73N6RDze, M73N7RDxe, M73N7RDye, M73N7RDze, M73N8RDxe, M73N8RDye, M73N8RDze, & + M73N9RDxe, M73N9RDye, M73N9RDze, M74N1RDxe, M74N1RDye, M74N1RDze, M74N2RDxe, M74N2RDye, M74N2RDze, M74N3RDxe, M74N3RDye, M74N3RDze, & + M74N4RDxe, M74N4RDye, M74N4RDze, M74N5RDxe, M74N5RDye, M74N5RDze, M74N6RDxe, M74N6RDye, M74N6RDze, M74N7RDxe, M74N7RDye, M74N7RDze, & + M74N8RDxe, M74N8RDye, M74N8RDze, M74N9RDxe, M74N9RDye, M74N9RDze, M75N1RDxe, M75N1RDye, M75N1RDze, M75N2RDxe, M75N2RDye, M75N2RDze, & + M75N3RDxe, M75N3RDye, M75N3RDze, M75N4RDxe, M75N4RDye, M75N4RDze, M75N5RDxe, M75N5RDye, M75N5RDze, M75N6RDxe, M75N6RDye, M75N6RDze, & + M75N7RDxe, M75N7RDye, M75N7RDze, M75N8RDxe, M75N8RDye, M75N8RDze, M75N9RDxe, M75N9RDye, M75N9RDze, M76N1RDxe, M76N1RDye, M76N1RDze, & + M76N2RDxe, M76N2RDye, M76N2RDze, M76N3RDxe, M76N3RDye, M76N3RDze, M76N4RDxe, M76N4RDye, M76N4RDze, M76N5RDxe, M76N5RDye, M76N5RDze, & + M76N6RDxe, M76N6RDye, M76N6RDze, M76N7RDxe, M76N7RDye, M76N7RDze, M76N8RDxe, M76N8RDye, M76N8RDze, M76N9RDxe, M76N9RDye, M76N9RDze, & + M77N1RDxe, M77N1RDye, M77N1RDze, M77N2RDxe, M77N2RDye, M77N2RDze, M77N3RDxe, M77N3RDye, M77N3RDze, M77N4RDxe, M77N4RDye, M77N4RDze, & + M77N5RDxe, M77N5RDye, M77N5RDze, M77N6RDxe, M77N6RDye, M77N6RDze, M77N7RDxe, M77N7RDye, M77N7RDze, M77N8RDxe, M77N8RDye, M77N8RDze, & + M77N9RDxe, M77N9RDye, M77N9RDze, M78N1RDxe, M78N1RDye, M78N1RDze, M78N2RDxe, M78N2RDye, M78N2RDze, M78N3RDxe, M78N3RDye, M78N3RDze, & + M78N4RDxe, M78N4RDye, M78N4RDze, M78N5RDxe, M78N5RDye, M78N5RDze, M78N6RDxe, M78N6RDye, M78N6RDze, M78N7RDxe, M78N7RDye, M78N7RDze, & + M78N8RDxe, M78N8RDye, M78N8RDze, M78N9RDxe, M78N9RDye, M78N9RDze, M79N1RDxe, M79N1RDye, M79N1RDze, M79N2RDxe, M79N2RDye, M79N2RDze, & + M79N3RDxe, M79N3RDye, M79N3RDze, M79N4RDxe, M79N4RDye, M79N4RDze, M79N5RDxe, M79N5RDye, M79N5RDze, M79N6RDxe, M79N6RDye, M79N6RDze, & + M79N7RDxe, M79N7RDye, M79N7RDze, M79N8RDxe, M79N8RDye, M79N8RDze, M79N9RDxe, M79N9RDye, M79N9RDze, M80N1RDxe, M80N1RDye, M80N1RDze, & + M80N2RDxe, M80N2RDye, M80N2RDze, M80N3RDxe, M80N3RDye, M80N3RDze, M80N4RDxe, M80N4RDye, M80N4RDze, M80N5RDxe, M80N5RDye, M80N5RDze, & + M80N6RDxe, M80N6RDye, M80N6RDze, M80N7RDxe, M80N7RDye, M80N7RDze, M80N8RDxe, M80N8RDye, M80N8RDze, M80N9RDxe, M80N9RDye, M80N9RDze, & + M81N1RDxe, M81N1RDye, M81N1RDze, M81N2RDxe, M81N2RDye, M81N2RDze, M81N3RDxe, M81N3RDye, M81N3RDze, M81N4RDxe, M81N4RDye, M81N4RDze, & + M81N5RDxe, M81N5RDye, M81N5RDze, M81N6RDxe, M81N6RDye, M81N6RDze, M81N7RDxe, M81N7RDye, M81N7RDze, M81N8RDxe, M81N8RDye, M81N8RDze, & + M81N9RDxe, M81N9RDye, M81N9RDze, M82N1RDxe, M82N1RDye, M82N1RDze, M82N2RDxe, M82N2RDye, M82N2RDze, M82N3RDxe, M82N3RDye, M82N3RDze, & + M82N4RDxe, M82N4RDye, M82N4RDze, M82N5RDxe, M82N5RDye, M82N5RDze, M82N6RDxe, M82N6RDye, M82N6RDze, M82N7RDxe, M82N7RDye, M82N7RDze, & + M82N8RDxe, M82N8RDye, M82N8RDze, M82N9RDxe, M82N9RDye, M82N9RDze, M83N1RDxe, M83N1RDye, M83N1RDze, M83N2RDxe, M83N2RDye, M83N2RDze, & + M83N3RDxe, M83N3RDye, M83N3RDze, M83N4RDxe, M83N4RDye, M83N4RDze, M83N5RDxe, M83N5RDye, M83N5RDze, M83N6RDxe, M83N6RDye, M83N6RDze, & + M83N7RDxe, M83N7RDye, M83N7RDze, M83N8RDxe, M83N8RDye, M83N8RDze, M83N9RDxe, M83N9RDye, M83N9RDze, M84N1RDxe, M84N1RDye, M84N1RDze, & + M84N2RDxe, M84N2RDye, M84N2RDze, M84N3RDxe, M84N3RDye, M84N3RDze, M84N4RDxe, M84N4RDye, M84N4RDze, M84N5RDxe, M84N5RDye, M84N5RDze, & + M84N6RDxe, M84N6RDye, M84N6RDze, M84N7RDxe, M84N7RDye, M84N7RDze, M84N8RDxe, M84N8RDye, M84N8RDze, M84N9RDxe, M84N9RDye, M84N9RDze, & + M85N1RDxe, M85N1RDye, M85N1RDze, M85N2RDxe, M85N2RDye, M85N2RDze, M85N3RDxe, M85N3RDye, M85N3RDze, M85N4RDxe, M85N4RDye, M85N4RDze, & + M85N5RDxe, M85N5RDye, M85N5RDze, M85N6RDxe, M85N6RDye, M85N6RDze, M85N7RDxe, M85N7RDye, M85N7RDze, M85N8RDxe, M85N8RDye, M85N8RDze, & + M85N9RDxe, M85N9RDye, M85N9RDze, M86N1RDxe, M86N1RDye, M86N1RDze, M86N2RDxe, M86N2RDye, M86N2RDze, M86N3RDxe, M86N3RDye, M86N3RDze, & + M86N4RDxe, M86N4RDye, M86N4RDze, M86N5RDxe, M86N5RDye, M86N5RDze, M86N6RDxe, M86N6RDye, M86N6RDze, M86N7RDxe, M86N7RDye, M86N7RDze, & + M86N8RDxe, M86N8RDye, M86N8RDze, M86N9RDxe, M86N9RDye, M86N9RDze, M87N1RDxe, M87N1RDye, M87N1RDze, M87N2RDxe, M87N2RDye, M87N2RDze, & + M87N3RDxe, M87N3RDye, M87N3RDze, M87N4RDxe, M87N4RDye, M87N4RDze, M87N5RDxe, M87N5RDye, M87N5RDze, M87N6RDxe, M87N6RDye, M87N6RDze, & + M87N7RDxe, M87N7RDye, M87N7RDze, M87N8RDxe, M87N8RDye, M87N8RDze, M87N9RDxe, M87N9RDye, M87N9RDze, M88N1RDxe, M88N1RDye, M88N1RDze, & + M88N2RDxe, M88N2RDye, M88N2RDze, M88N3RDxe, M88N3RDye, M88N3RDze, M88N4RDxe, M88N4RDye, M88N4RDze, M88N5RDxe, M88N5RDye, M88N5RDze, & + M88N6RDxe, M88N6RDye, M88N6RDze, M88N7RDxe, M88N7RDye, M88N7RDze, M88N8RDxe, M88N8RDye, M88N8RDze, M88N9RDxe, M88N9RDye, M88N9RDze, & + M89N1RDxe, M89N1RDye, M89N1RDze, M89N2RDxe, M89N2RDye, M89N2RDze, M89N3RDxe, M89N3RDye, M89N3RDze, M89N4RDxe, M89N4RDye, M89N4RDze, & + M89N5RDxe, M89N5RDye, M89N5RDze, M89N6RDxe, M89N6RDye, M89N6RDze, M89N7RDxe, M89N7RDye, M89N7RDze, M89N8RDxe, M89N8RDye, M89N8RDze, & + M89N9RDxe, M89N9RDye, M89N9RDze, M90N1RDxe, M90N1RDye, M90N1RDze, M90N2RDxe, M90N2RDye, M90N2RDze, M90N3RDxe, M90N3RDye, M90N3RDze, & + M90N4RDxe, M90N4RDye, M90N4RDze, M90N5RDxe, M90N5RDye, M90N5RDze, M90N6RDxe, M90N6RDye, M90N6RDze, M90N7RDxe, M90N7RDye, M90N7RDze, & + M90N8RDxe, M90N8RDye, M90N8RDze, M90N9RDxe, M90N9RDye, M90N9RDze, M91N1RDxe, M91N1RDye, M91N1RDze, M91N2RDxe, M91N2RDye, M91N2RDze, & + M91N3RDxe, M91N3RDye, M91N3RDze, M91N4RDxe, M91N4RDye, M91N4RDze, M91N5RDxe, M91N5RDye, M91N5RDze, M91N6RDxe, M91N6RDye, M91N6RDze, & + M91N7RDxe, M91N7RDye, M91N7RDze, M91N8RDxe, M91N8RDye, M91N8RDze, M91N9RDxe, M91N9RDye, M91N9RDze, M92N1RDxe, M92N1RDye, M92N1RDze, & + M92N2RDxe, M92N2RDye, M92N2RDze, M92N3RDxe, M92N3RDye, M92N3RDze, M92N4RDxe, M92N4RDye, M92N4RDze, M92N5RDxe, M92N5RDye, M92N5RDze, & + M92N6RDxe, M92N6RDye, M92N6RDze, M92N7RDxe, M92N7RDye, M92N7RDze, M92N8RDxe, M92N8RDye, M92N8RDze, M92N9RDxe, M92N9RDye, M92N9RDze, & + M93N1RDxe, M93N1RDye, M93N1RDze, M93N2RDxe, M93N2RDye, M93N2RDze, M93N3RDxe, M93N3RDye, M93N3RDze, M93N4RDxe, M93N4RDye, M93N4RDze, & + M93N5RDxe, M93N5RDye, M93N5RDze, M93N6RDxe, M93N6RDye, M93N6RDze, M93N7RDxe, M93N7RDye, M93N7RDze, M93N8RDxe, M93N8RDye, M93N8RDze, & + M93N9RDxe, M93N9RDye, M93N9RDze, M94N1RDxe, M94N1RDye, M94N1RDze, M94N2RDxe, M94N2RDye, M94N2RDze, M94N3RDxe, M94N3RDye, M94N3RDze, & + M94N4RDxe, M94N4RDye, M94N4RDze, M94N5RDxe, M94N5RDye, M94N5RDze, M94N6RDxe, M94N6RDye, M94N6RDze, M94N7RDxe, M94N7RDye, M94N7RDze, & + M94N8RDxe, M94N8RDye, M94N8RDze, M94N9RDxe, M94N9RDye, M94N9RDze, M95N1RDxe, M95N1RDye, M95N1RDze, M95N2RDxe, M95N2RDye, M95N2RDze, & + M95N3RDxe, M95N3RDye, M95N3RDze, M95N4RDxe, M95N4RDye, M95N4RDze, M95N5RDxe, M95N5RDye, M95N5RDze, M95N6RDxe, M95N6RDye, M95N6RDze, & + M95N7RDxe, M95N7RDye, M95N7RDze, M95N8RDxe, M95N8RDye, M95N8RDze, M95N9RDxe, M95N9RDye, M95N9RDze, M96N1RDxe, M96N1RDye, M96N1RDze, & + M96N2RDxe, M96N2RDye, M96N2RDze, M96N3RDxe, M96N3RDye, M96N3RDze, M96N4RDxe, M96N4RDye, M96N4RDze, M96N5RDxe, M96N5RDye, M96N5RDze, & + M96N6RDxe, M96N6RDye, M96N6RDze, M96N7RDxe, M96N7RDye, M96N7RDze, M96N8RDxe, M96N8RDye, M96N8RDze, M96N9RDxe, M96N9RDye, M96N9RDze, & + M97N1RDxe, M97N1RDye, M97N1RDze, M97N2RDxe, M97N2RDye, M97N2RDze, M97N3RDxe, M97N3RDye, M97N3RDze, M97N4RDxe, M97N4RDye, M97N4RDze, & + M97N5RDxe, M97N5RDye, M97N5RDze, M97N6RDxe, M97N6RDye, M97N6RDze, M97N7RDxe, M97N7RDye, M97N7RDze, M97N8RDxe, M97N8RDye, M97N8RDze, & + M97N9RDxe, M97N9RDye, M97N9RDze, M98N1RDxe, M98N1RDye, M98N1RDze, M98N2RDxe, M98N2RDye, M98N2RDze, M98N3RDxe, M98N3RDye, M98N3RDze, & + M98N4RDxe, M98N4RDye, M98N4RDze, M98N5RDxe, M98N5RDye, M98N5RDze, M98N6RDxe, M98N6RDye, M98N6RDze, M98N7RDxe, M98N7RDye, M98N7RDze, & + M98N8RDxe, M98N8RDye, M98N8RDze, M98N9RDxe, M98N9RDye, M98N9RDze, M99N1RDxe, M99N1RDye, M99N1RDze, M99N2RDxe, M99N2RDye, M99N2RDze, & + M99N3RDxe, M99N3RDye, M99N3RDze, M99N4RDxe, M99N4RDye, M99N4RDze, M99N5RDxe, M99N5RDye, M99N5RDze, M99N6RDxe, M99N6RDye, M99N6RDze, & + M99N7RDxe, M99N7RDye, M99N7RDze, M99N8RDxe, M99N8RDye, M99N8RDze, M99N9RDxe, M99N9RDye, M99N9RDze/),(/3,9,99/)) - - - - + INTEGER(IntKi), PARAMETER ::MNTRAe(6,9,99) = reshape((/ & + M01N1TAxe, M01N1TAye, M01N1TAze, M01N1RAxe, M01N1RAye, M01N1RAze, M01N2TAxe, M01N2TAye, M01N2TAze, M01N2RAxe, M01N2RAye, M01N2RAze, & + M01N3TAxe, M01N3TAye, M01N3TAze, M01N3RAxe, M01N3RAye, M01N3RAze, M01N4TAxe, M01N4TAye, M01N4TAze, M01N4RAxe, M01N4RAye, M01N4RAze, & + M01N5TAxe, M01N5TAye, M01N5TAze, M01N5RAxe, M01N5RAye, M01N5RAze, M01N6TAxe, M01N6TAye, M01N6TAze, M01N6RAxe, M01N6RAye, M01N6RAze, & + M01N7TAxe, M01N7TAye, M01N7TAze, M01N7RAxe, M01N7RAye, M01N7RAze, M01N8TAxe, M01N8TAye, M01N8TAze, M01N8RAxe, M01N8RAye, M01N8RAze, & + M01N9TAxe, M01N9TAye, M01N9TAze, M01N9RAxe, M01N9RAye, M01N9RAze, M02N1TAxe, M02N1TAye, M02N1TAze, M02N1RAxe, M02N1RAye, M02N1RAze, & + M02N2TAxe, M02N2TAye, M02N2TAze, M02N2RAxe, M02N2RAye, M02N2RAze, M02N3TAxe, M02N3TAye, M02N3TAze, M02N3RAxe, M02N3RAye, M02N3RAze, & + M02N4TAxe, M02N4TAye, M02N4TAze, M02N4RAxe, M02N4RAye, M02N4RAze, M02N5TAxe, M02N5TAye, M02N5TAze, M02N5RAxe, M02N5RAye, M02N5RAze, & + M02N6TAxe, M02N6TAye, M02N6TAze, M02N6RAxe, M02N6RAye, M02N6RAze, M02N7TAxe, M02N7TAye, M02N7TAze, M02N7RAxe, M02N7RAye, M02N7RAze, & + M02N8TAxe, M02N8TAye, M02N8TAze, M02N8RAxe, M02N8RAye, M02N8RAze, M02N9TAxe, M02N9TAye, M02N9TAze, M02N9RAxe, M02N9RAye, M02N9RAze, & + M03N1TAxe, M03N1TAye, M03N1TAze, M03N1RAxe, M03N1RAye, M03N1RAze, M03N2TAxe, M03N2TAye, M03N2TAze, M03N2RAxe, M03N2RAye, M03N2RAze, & + M03N3TAxe, M03N3TAye, M03N3TAze, M03N3RAxe, M03N3RAye, M03N3RAze, M03N4TAxe, M03N4TAye, M03N4TAze, M03N4RAxe, M03N4RAye, M03N4RAze, & + M03N5TAxe, M03N5TAye, M03N5TAze, M03N5RAxe, M03N5RAye, M03N5RAze, M03N6TAxe, M03N6TAye, M03N6TAze, M03N6RAxe, M03N6RAye, M03N6RAze, & + M03N7TAxe, M03N7TAye, M03N7TAze, M03N7RAxe, M03N7RAye, M03N7RAze, M03N8TAxe, M03N8TAye, M03N8TAze, M03N8RAxe, M03N8RAye, M03N8RAze, & + M03N9TAxe, M03N9TAye, M03N9TAze, M03N9RAxe, M03N9RAye, M03N9RAze, M04N1TAxe, M04N1TAye, M04N1TAze, M04N1RAxe, M04N1RAye, M04N1RAze, & + M04N2TAxe, M04N2TAye, M04N2TAze, M04N2RAxe, M04N2RAye, M04N2RAze, M04N3TAxe, M04N3TAye, M04N3TAze, M04N3RAxe, M04N3RAye, M04N3RAze, & + M04N4TAxe, M04N4TAye, M04N4TAze, M04N4RAxe, M04N4RAye, M04N4RAze, M04N5TAxe, M04N5TAye, M04N5TAze, M04N5RAxe, M04N5RAye, M04N5RAze, & + M04N6TAxe, M04N6TAye, M04N6TAze, M04N6RAxe, M04N6RAye, M04N6RAze, M04N7TAxe, M04N7TAye, M04N7TAze, M04N7RAxe, M04N7RAye, M04N7RAze, & + M04N8TAxe, M04N8TAye, M04N8TAze, M04N8RAxe, M04N8RAye, M04N8RAze, M04N9TAxe, M04N9TAye, M04N9TAze, M04N9RAxe, M04N9RAye, M04N9RAze, & + M05N1TAxe, M05N1TAye, M05N1TAze, M05N1RAxe, M05N1RAye, M05N1RAze, M05N2TAxe, M05N2TAye, M05N2TAze, M05N2RAxe, M05N2RAye, M05N2RAze, & + M05N3TAxe, M05N3TAye, M05N3TAze, M05N3RAxe, M05N3RAye, M05N3RAze, M05N4TAxe, M05N4TAye, M05N4TAze, M05N4RAxe, M05N4RAye, M05N4RAze, & + M05N5TAxe, M05N5TAye, M05N5TAze, M05N5RAxe, M05N5RAye, M05N5RAze, M05N6TAxe, M05N6TAye, M05N6TAze, M05N6RAxe, M05N6RAye, M05N6RAze, & + M05N7TAxe, M05N7TAye, M05N7TAze, M05N7RAxe, M05N7RAye, M05N7RAze, M05N8TAxe, M05N8TAye, M05N8TAze, M05N8RAxe, M05N8RAye, M05N8RAze, & + M05N9TAxe, M05N9TAye, M05N9TAze, M05N9RAxe, M05N9RAye, M05N9RAze, M06N1TAxe, M06N1TAye, M06N1TAze, M06N1RAxe, M06N1RAye, M06N1RAze, & + M06N2TAxe, M06N2TAye, M06N2TAze, M06N2RAxe, M06N2RAye, M06N2RAze, M06N3TAxe, M06N3TAye, M06N3TAze, M06N3RAxe, M06N3RAye, M06N3RAze, & + M06N4TAxe, M06N4TAye, M06N4TAze, M06N4RAxe, M06N4RAye, M06N4RAze, M06N5TAxe, M06N5TAye, M06N5TAze, M06N5RAxe, M06N5RAye, M06N5RAze, & + M06N6TAxe, M06N6TAye, M06N6TAze, M06N6RAxe, M06N6RAye, M06N6RAze, M06N7TAxe, M06N7TAye, M06N7TAze, M06N7RAxe, M06N7RAye, M06N7RAze, & + M06N8TAxe, M06N8TAye, M06N8TAze, M06N8RAxe, M06N8RAye, M06N8RAze, M06N9TAxe, M06N9TAye, M06N9TAze, M06N9RAxe, M06N9RAye, M06N9RAze, & + M07N1TAxe, M07N1TAye, M07N1TAze, M07N1RAxe, M07N1RAye, M07N1RAze, M07N2TAxe, M07N2TAye, M07N2TAze, M07N2RAxe, M07N2RAye, M07N2RAze, & + M07N3TAxe, M07N3TAye, M07N3TAze, M07N3RAxe, M07N3RAye, M07N3RAze, M07N4TAxe, M07N4TAye, M07N4TAze, M07N4RAxe, M07N4RAye, M07N4RAze, & + M07N5TAxe, M07N5TAye, M07N5TAze, M07N5RAxe, M07N5RAye, M07N5RAze, M07N6TAxe, M07N6TAye, M07N6TAze, M07N6RAxe, M07N6RAye, M07N6RAze, & + M07N7TAxe, M07N7TAye, M07N7TAze, M07N7RAxe, M07N7RAye, M07N7RAze, M07N8TAxe, M07N8TAye, M07N8TAze, M07N8RAxe, M07N8RAye, M07N8RAze, & + M07N9TAxe, M07N9TAye, M07N9TAze, M07N9RAxe, M07N9RAye, M07N9RAze, M08N1TAxe, M08N1TAye, M08N1TAze, M08N1RAxe, M08N1RAye, M08N1RAze, & + M08N2TAxe, M08N2TAye, M08N2TAze, M08N2RAxe, M08N2RAye, M08N2RAze, M08N3TAxe, M08N3TAye, M08N3TAze, M08N3RAxe, M08N3RAye, M08N3RAze, & + M08N4TAxe, M08N4TAye, M08N4TAze, M08N4RAxe, M08N4RAye, M08N4RAze, M08N5TAxe, M08N5TAye, M08N5TAze, M08N5RAxe, M08N5RAye, M08N5RAze, & + M08N6TAxe, M08N6TAye, M08N6TAze, M08N6RAxe, M08N6RAye, M08N6RAze, M08N7TAxe, M08N7TAye, M08N7TAze, M08N7RAxe, M08N7RAye, M08N7RAze, & + M08N8TAxe, M08N8TAye, M08N8TAze, M08N8RAxe, M08N8RAye, M08N8RAze, M08N9TAxe, M08N9TAye, M08N9TAze, M08N9RAxe, M08N9RAye, M08N9RAze, & + M09N1TAxe, M09N1TAye, M09N1TAze, M09N1RAxe, M09N1RAye, M09N1RAze, M09N2TAxe, M09N2TAye, M09N2TAze, M09N2RAxe, M09N2RAye, M09N2RAze, & + M09N3TAxe, M09N3TAye, M09N3TAze, M09N3RAxe, M09N3RAye, M09N3RAze, M09N4TAxe, M09N4TAye, M09N4TAze, M09N4RAxe, M09N4RAye, M09N4RAze, & + M09N5TAxe, M09N5TAye, M09N5TAze, M09N5RAxe, M09N5RAye, M09N5RAze, M09N6TAxe, M09N6TAye, M09N6TAze, M09N6RAxe, M09N6RAye, M09N6RAze, & + M09N7TAxe, M09N7TAye, M09N7TAze, M09N7RAxe, M09N7RAye, M09N7RAze, M09N8TAxe, M09N8TAye, M09N8TAze, M09N8RAxe, M09N8RAye, M09N8RAze, & + M09N9TAxe, M09N9TAye, M09N9TAze, M09N9RAxe, M09N9RAye, M09N9RAze, M10N1TAxe, M10N1TAye, M10N1TAze, M10N1RAxe, M10N1RAye, M10N1RAze, & + M10N2TAxe, M10N2TAye, M10N2TAze, M10N2RAxe, M10N2RAye, M10N2RAze, M10N3TAxe, M10N3TAye, M10N3TAze, M10N3RAxe, M10N3RAye, M10N3RAze, & + M10N4TAxe, M10N4TAye, M10N4TAze, M10N4RAxe, M10N4RAye, M10N4RAze, M10N5TAxe, M10N5TAye, M10N5TAze, M10N5RAxe, M10N5RAye, M10N5RAze, & + M10N6TAxe, M10N6TAye, M10N6TAze, M10N6RAxe, M10N6RAye, M10N6RAze, M10N7TAxe, M10N7TAye, M10N7TAze, M10N7RAxe, M10N7RAye, M10N7RAze, & + M10N8TAxe, M10N8TAye, M10N8TAze, M10N8RAxe, M10N8RAye, M10N8RAze, M10N9TAxe, M10N9TAye, M10N9TAze, M10N9RAxe, M10N9RAye, M10N9RAze, & + M11N1TAxe, M11N1TAye, M11N1TAze, M11N1RAxe, M11N1RAye, M11N1RAze, M11N2TAxe, M11N2TAye, M11N2TAze, M11N2RAxe, M11N2RAye, M11N2RAze, & + M11N3TAxe, M11N3TAye, M11N3TAze, M11N3RAxe, M11N3RAye, M11N3RAze, M11N4TAxe, M11N4TAye, M11N4TAze, M11N4RAxe, M11N4RAye, M11N4RAze, & + M11N5TAxe, M11N5TAye, M11N5TAze, M11N5RAxe, M11N5RAye, M11N5RAze, M11N6TAxe, M11N6TAye, M11N6TAze, M11N6RAxe, M11N6RAye, M11N6RAze, & + M11N7TAxe, M11N7TAye, M11N7TAze, M11N7RAxe, M11N7RAye, M11N7RAze, M11N8TAxe, M11N8TAye, M11N8TAze, M11N8RAxe, M11N8RAye, M11N8RAze, & + M11N9TAxe, M11N9TAye, M11N9TAze, M11N9RAxe, M11N9RAye, M11N9RAze, M12N1TAxe, M12N1TAye, M12N1TAze, M12N1RAxe, M12N1RAye, M12N1RAze, & + M12N2TAxe, M12N2TAye, M12N2TAze, M12N2RAxe, M12N2RAye, M12N2RAze, M12N3TAxe, M12N3TAye, M12N3TAze, M12N3RAxe, M12N3RAye, M12N3RAze, & + M12N4TAxe, M12N4TAye, M12N4TAze, M12N4RAxe, M12N4RAye, M12N4RAze, M12N5TAxe, M12N5TAye, M12N5TAze, M12N5RAxe, M12N5RAye, M12N5RAze, & + M12N6TAxe, M12N6TAye, M12N6TAze, M12N6RAxe, M12N6RAye, M12N6RAze, M12N7TAxe, M12N7TAye, M12N7TAze, M12N7RAxe, M12N7RAye, M12N7RAze, & + M12N8TAxe, M12N8TAye, M12N8TAze, M12N8RAxe, M12N8RAye, M12N8RAze, M12N9TAxe, M12N9TAye, M12N9TAze, M12N9RAxe, M12N9RAye, M12N9RAze, & + M13N1TAxe, M13N1TAye, M13N1TAze, M13N1RAxe, M13N1RAye, M13N1RAze, M13N2TAxe, M13N2TAye, M13N2TAze, M13N2RAxe, M13N2RAye, M13N2RAze, & + M13N3TAxe, M13N3TAye, M13N3TAze, M13N3RAxe, M13N3RAye, M13N3RAze, M13N4TAxe, M13N4TAye, M13N4TAze, M13N4RAxe, M13N4RAye, M13N4RAze, & + M13N5TAxe, M13N5TAye, M13N5TAze, M13N5RAxe, M13N5RAye, M13N5RAze, M13N6TAxe, M13N6TAye, M13N6TAze, M13N6RAxe, M13N6RAye, M13N6RAze, & + M13N7TAxe, M13N7TAye, M13N7TAze, M13N7RAxe, M13N7RAye, M13N7RAze, M13N8TAxe, M13N8TAye, M13N8TAze, M13N8RAxe, M13N8RAye, M13N8RAze, & + M13N9TAxe, M13N9TAye, M13N9TAze, M13N9RAxe, M13N9RAye, M13N9RAze, M14N1TAxe, M14N1TAye, M14N1TAze, M14N1RAxe, M14N1RAye, M14N1RAze, & + M14N2TAxe, M14N2TAye, M14N2TAze, M14N2RAxe, M14N2RAye, M14N2RAze, M14N3TAxe, M14N3TAye, M14N3TAze, M14N3RAxe, M14N3RAye, M14N3RAze, & + M14N4TAxe, M14N4TAye, M14N4TAze, M14N4RAxe, M14N4RAye, M14N4RAze, M14N5TAxe, M14N5TAye, M14N5TAze, M14N5RAxe, M14N5RAye, M14N5RAze, & + M14N6TAxe, M14N6TAye, M14N6TAze, M14N6RAxe, M14N6RAye, M14N6RAze, M14N7TAxe, M14N7TAye, M14N7TAze, M14N7RAxe, M14N7RAye, M14N7RAze, & + M14N8TAxe, M14N8TAye, M14N8TAze, M14N8RAxe, M14N8RAye, M14N8RAze, M14N9TAxe, M14N9TAye, M14N9TAze, M14N9RAxe, M14N9RAye, M14N9RAze, & + M15N1TAxe, M15N1TAye, M15N1TAze, M15N1RAxe, M15N1RAye, M15N1RAze, M15N2TAxe, M15N2TAye, M15N2TAze, M15N2RAxe, M15N2RAye, M15N2RAze, & + M15N3TAxe, M15N3TAye, M15N3TAze, M15N3RAxe, M15N3RAye, M15N3RAze, M15N4TAxe, M15N4TAye, M15N4TAze, M15N4RAxe, M15N4RAye, M15N4RAze, & + M15N5TAxe, M15N5TAye, M15N5TAze, M15N5RAxe, M15N5RAye, M15N5RAze, M15N6TAxe, M15N6TAye, M15N6TAze, M15N6RAxe, M15N6RAye, M15N6RAze, & + M15N7TAxe, M15N7TAye, M15N7TAze, M15N7RAxe, M15N7RAye, M15N7RAze, M15N8TAxe, M15N8TAye, M15N8TAze, M15N8RAxe, M15N8RAye, M15N8RAze, & + M15N9TAxe, M15N9TAye, M15N9TAze, M15N9RAxe, M15N9RAye, M15N9RAze, M16N1TAxe, M16N1TAye, M16N1TAze, M16N1RAxe, M16N1RAye, M16N1RAze, & + M16N2TAxe, M16N2TAye, M16N2TAze, M16N2RAxe, M16N2RAye, M16N2RAze, M16N3TAxe, M16N3TAye, M16N3TAze, M16N3RAxe, M16N3RAye, M16N3RAze, & + M16N4TAxe, M16N4TAye, M16N4TAze, M16N4RAxe, M16N4RAye, M16N4RAze, M16N5TAxe, M16N5TAye, M16N5TAze, M16N5RAxe, M16N5RAye, M16N5RAze, & + M16N6TAxe, M16N6TAye, M16N6TAze, M16N6RAxe, M16N6RAye, M16N6RAze, M16N7TAxe, M16N7TAye, M16N7TAze, M16N7RAxe, M16N7RAye, M16N7RAze, & + M16N8TAxe, M16N8TAye, M16N8TAze, M16N8RAxe, M16N8RAye, M16N8RAze, M16N9TAxe, M16N9TAye, M16N9TAze, M16N9RAxe, M16N9RAye, M16N9RAze, & + M17N1TAxe, M17N1TAye, M17N1TAze, M17N1RAxe, M17N1RAye, M17N1RAze, M17N2TAxe, M17N2TAye, M17N2TAze, M17N2RAxe, M17N2RAye, M17N2RAze, & + M17N3TAxe, M17N3TAye, M17N3TAze, M17N3RAxe, M17N3RAye, M17N3RAze, M17N4TAxe, M17N4TAye, M17N4TAze, M17N4RAxe, M17N4RAye, M17N4RAze, & + M17N5TAxe, M17N5TAye, M17N5TAze, M17N5RAxe, M17N5RAye, M17N5RAze, M17N6TAxe, M17N6TAye, M17N6TAze, M17N6RAxe, M17N6RAye, M17N6RAze, & + M17N7TAxe, M17N7TAye, M17N7TAze, M17N7RAxe, M17N7RAye, M17N7RAze, M17N8TAxe, M17N8TAye, M17N8TAze, M17N8RAxe, M17N8RAye, M17N8RAze, & + M17N9TAxe, M17N9TAye, M17N9TAze, M17N9RAxe, M17N9RAye, M17N9RAze, M18N1TAxe, M18N1TAye, M18N1TAze, M18N1RAxe, M18N1RAye, M18N1RAze, & + M18N2TAxe, M18N2TAye, M18N2TAze, M18N2RAxe, M18N2RAye, M18N2RAze, M18N3TAxe, M18N3TAye, M18N3TAze, M18N3RAxe, M18N3RAye, M18N3RAze, & + M18N4TAxe, M18N4TAye, M18N4TAze, M18N4RAxe, M18N4RAye, M18N4RAze, M18N5TAxe, M18N5TAye, M18N5TAze, M18N5RAxe, M18N5RAye, M18N5RAze, & + M18N6TAxe, M18N6TAye, M18N6TAze, M18N6RAxe, M18N6RAye, M18N6RAze, M18N7TAxe, M18N7TAye, M18N7TAze, M18N7RAxe, M18N7RAye, M18N7RAze, & + M18N8TAxe, M18N8TAye, M18N8TAze, M18N8RAxe, M18N8RAye, M18N8RAze, M18N9TAxe, M18N9TAye, M18N9TAze, M18N9RAxe, M18N9RAye, M18N9RAze, & + M19N1TAxe, M19N1TAye, M19N1TAze, M19N1RAxe, M19N1RAye, M19N1RAze, M19N2TAxe, M19N2TAye, M19N2TAze, M19N2RAxe, M19N2RAye, M19N2RAze, & + M19N3TAxe, M19N3TAye, M19N3TAze, M19N3RAxe, M19N3RAye, M19N3RAze, M19N4TAxe, M19N4TAye, M19N4TAze, M19N4RAxe, M19N4RAye, M19N4RAze, & + M19N5TAxe, M19N5TAye, M19N5TAze, M19N5RAxe, M19N5RAye, M19N5RAze, M19N6TAxe, M19N6TAye, M19N6TAze, M19N6RAxe, M19N6RAye, M19N6RAze, & + M19N7TAxe, M19N7TAye, M19N7TAze, M19N7RAxe, M19N7RAye, M19N7RAze, M19N8TAxe, M19N8TAye, M19N8TAze, M19N8RAxe, M19N8RAye, M19N8RAze, & + M19N9TAxe, M19N9TAye, M19N9TAze, M19N9RAxe, M19N9RAye, M19N9RAze, M20N1TAxe, M20N1TAye, M20N1TAze, M20N1RAxe, M20N1RAye, M20N1RAze, & + M20N2TAxe, M20N2TAye, M20N2TAze, M20N2RAxe, M20N2RAye, M20N2RAze, M20N3TAxe, M20N3TAye, M20N3TAze, M20N3RAxe, M20N3RAye, M20N3RAze, & + M20N4TAxe, M20N4TAye, M20N4TAze, M20N4RAxe, M20N4RAye, M20N4RAze, M20N5TAxe, M20N5TAye, M20N5TAze, M20N5RAxe, M20N5RAye, M20N5RAze, & + M20N6TAxe, M20N6TAye, M20N6TAze, M20N6RAxe, M20N6RAye, M20N6RAze, M20N7TAxe, M20N7TAye, M20N7TAze, M20N7RAxe, M20N7RAye, M20N7RAze, & + M20N8TAxe, M20N8TAye, M20N8TAze, M20N8RAxe, M20N8RAye, M20N8RAze, M20N9TAxe, M20N9TAye, M20N9TAze, M20N9RAxe, M20N9RAye, M20N9RAze, & + M21N1TAxe, M21N1TAye, M21N1TAze, M21N1RAxe, M21N1RAye, M21N1RAze, M21N2TAxe, M21N2TAye, M21N2TAze, M21N2RAxe, M21N2RAye, M21N2RAze, & + M21N3TAxe, M21N3TAye, M21N3TAze, M21N3RAxe, M21N3RAye, M21N3RAze, M21N4TAxe, M21N4TAye, M21N4TAze, M21N4RAxe, M21N4RAye, M21N4RAze, & + M21N5TAxe, M21N5TAye, M21N5TAze, M21N5RAxe, M21N5RAye, M21N5RAze, M21N6TAxe, M21N6TAye, M21N6TAze, M21N6RAxe, M21N6RAye, M21N6RAze, & + M21N7TAxe, M21N7TAye, M21N7TAze, M21N7RAxe, M21N7RAye, M21N7RAze, M21N8TAxe, M21N8TAye, M21N8TAze, M21N8RAxe, M21N8RAye, M21N8RAze, & + M21N9TAxe, M21N9TAye, M21N9TAze, M21N9RAxe, M21N9RAye, M21N9RAze, M22N1TAxe, M22N1TAye, M22N1TAze, M22N1RAxe, M22N1RAye, M22N1RAze, & + M22N2TAxe, M22N2TAye, M22N2TAze, M22N2RAxe, M22N2RAye, M22N2RAze, M22N3TAxe, M22N3TAye, M22N3TAze, M22N3RAxe, M22N3RAye, M22N3RAze, & + M22N4TAxe, M22N4TAye, M22N4TAze, M22N4RAxe, M22N4RAye, M22N4RAze, M22N5TAxe, M22N5TAye, M22N5TAze, M22N5RAxe, M22N5RAye, M22N5RAze, & + M22N6TAxe, M22N6TAye, M22N6TAze, M22N6RAxe, M22N6RAye, M22N6RAze, M22N7TAxe, M22N7TAye, M22N7TAze, M22N7RAxe, M22N7RAye, M22N7RAze, & + M22N8TAxe, M22N8TAye, M22N8TAze, M22N8RAxe, M22N8RAye, M22N8RAze, M22N9TAxe, M22N9TAye, M22N9TAze, M22N9RAxe, M22N9RAye, M22N9RAze, & + M23N1TAxe, M23N1TAye, M23N1TAze, M23N1RAxe, M23N1RAye, M23N1RAze, M23N2TAxe, M23N2TAye, M23N2TAze, M23N2RAxe, M23N2RAye, M23N2RAze, & + M23N3TAxe, M23N3TAye, M23N3TAze, M23N3RAxe, M23N3RAye, M23N3RAze, M23N4TAxe, M23N4TAye, M23N4TAze, M23N4RAxe, M23N4RAye, M23N4RAze, & + M23N5TAxe, M23N5TAye, M23N5TAze, M23N5RAxe, M23N5RAye, M23N5RAze, M23N6TAxe, M23N6TAye, M23N6TAze, M23N6RAxe, M23N6RAye, M23N6RAze, & + M23N7TAxe, M23N7TAye, M23N7TAze, M23N7RAxe, M23N7RAye, M23N7RAze, M23N8TAxe, M23N8TAye, M23N8TAze, M23N8RAxe, M23N8RAye, M23N8RAze, & + M23N9TAxe, M23N9TAye, M23N9TAze, M23N9RAxe, M23N9RAye, M23N9RAze, M24N1TAxe, M24N1TAye, M24N1TAze, M24N1RAxe, M24N1RAye, M24N1RAze, & + M24N2TAxe, M24N2TAye, M24N2TAze, M24N2RAxe, M24N2RAye, M24N2RAze, M24N3TAxe, M24N3TAye, M24N3TAze, M24N3RAxe, M24N3RAye, M24N3RAze, & + M24N4TAxe, M24N4TAye, M24N4TAze, M24N4RAxe, M24N4RAye, M24N4RAze, M24N5TAxe, M24N5TAye, M24N5TAze, M24N5RAxe, M24N5RAye, M24N5RAze, & + M24N6TAxe, M24N6TAye, M24N6TAze, M24N6RAxe, M24N6RAye, M24N6RAze, M24N7TAxe, M24N7TAye, M24N7TAze, M24N7RAxe, M24N7RAye, M24N7RAze, & + M24N8TAxe, M24N8TAye, M24N8TAze, M24N8RAxe, M24N8RAye, M24N8RAze, M24N9TAxe, M24N9TAye, M24N9TAze, M24N9RAxe, M24N9RAye, M24N9RAze, & + M25N1TAxe, M25N1TAye, M25N1TAze, M25N1RAxe, M25N1RAye, M25N1RAze, M25N2TAxe, M25N2TAye, M25N2TAze, M25N2RAxe, M25N2RAye, M25N2RAze, & + M25N3TAxe, M25N3TAye, M25N3TAze, M25N3RAxe, M25N3RAye, M25N3RAze, M25N4TAxe, M25N4TAye, M25N4TAze, M25N4RAxe, M25N4RAye, M25N4RAze, & + M25N5TAxe, M25N5TAye, M25N5TAze, M25N5RAxe, M25N5RAye, M25N5RAze, M25N6TAxe, M25N6TAye, M25N6TAze, M25N6RAxe, M25N6RAye, M25N6RAze, & + M25N7TAxe, M25N7TAye, M25N7TAze, M25N7RAxe, M25N7RAye, M25N7RAze, M25N8TAxe, M25N8TAye, M25N8TAze, M25N8RAxe, M25N8RAye, M25N8RAze, & + M25N9TAxe, M25N9TAye, M25N9TAze, M25N9RAxe, M25N9RAye, M25N9RAze, M26N1TAxe, M26N1TAye, M26N1TAze, M26N1RAxe, M26N1RAye, M26N1RAze, & + M26N2TAxe, M26N2TAye, M26N2TAze, M26N2RAxe, M26N2RAye, M26N2RAze, M26N3TAxe, M26N3TAye, M26N3TAze, M26N3RAxe, M26N3RAye, M26N3RAze, & + M26N4TAxe, M26N4TAye, M26N4TAze, M26N4RAxe, M26N4RAye, M26N4RAze, M26N5TAxe, M26N5TAye, M26N5TAze, M26N5RAxe, M26N5RAye, M26N5RAze, & + M26N6TAxe, M26N6TAye, M26N6TAze, M26N6RAxe, M26N6RAye, M26N6RAze, M26N7TAxe, M26N7TAye, M26N7TAze, M26N7RAxe, M26N7RAye, M26N7RAze, & + M26N8TAxe, M26N8TAye, M26N8TAze, M26N8RAxe, M26N8RAye, M26N8RAze, M26N9TAxe, M26N9TAye, M26N9TAze, M26N9RAxe, M26N9RAye, M26N9RAze, & + M27N1TAxe, M27N1TAye, M27N1TAze, M27N1RAxe, M27N1RAye, M27N1RAze, M27N2TAxe, M27N2TAye, M27N2TAze, M27N2RAxe, M27N2RAye, M27N2RAze, & + M27N3TAxe, M27N3TAye, M27N3TAze, M27N3RAxe, M27N3RAye, M27N3RAze, M27N4TAxe, M27N4TAye, M27N4TAze, M27N4RAxe, M27N4RAye, M27N4RAze, & + M27N5TAxe, M27N5TAye, M27N5TAze, M27N5RAxe, M27N5RAye, M27N5RAze, M27N6TAxe, M27N6TAye, M27N6TAze, M27N6RAxe, M27N6RAye, M27N6RAze, & + M27N7TAxe, M27N7TAye, M27N7TAze, M27N7RAxe, M27N7RAye, M27N7RAze, M27N8TAxe, M27N8TAye, M27N8TAze, M27N8RAxe, M27N8RAye, M27N8RAze, & + M27N9TAxe, M27N9TAye, M27N9TAze, M27N9RAxe, M27N9RAye, M27N9RAze, M28N1TAxe, M28N1TAye, M28N1TAze, M28N1RAxe, M28N1RAye, M28N1RAze, & + M28N2TAxe, M28N2TAye, M28N2TAze, M28N2RAxe, M28N2RAye, M28N2RAze, M28N3TAxe, M28N3TAye, M28N3TAze, M28N3RAxe, M28N3RAye, M28N3RAze, & + M28N4TAxe, M28N4TAye, M28N4TAze, M28N4RAxe, M28N4RAye, M28N4RAze, M28N5TAxe, M28N5TAye, M28N5TAze, M28N5RAxe, M28N5RAye, M28N5RAze, & + M28N6TAxe, M28N6TAye, M28N6TAze, M28N6RAxe, M28N6RAye, M28N6RAze, M28N7TAxe, M28N7TAye, M28N7TAze, M28N7RAxe, M28N7RAye, M28N7RAze, & + M28N8TAxe, M28N8TAye, M28N8TAze, M28N8RAxe, M28N8RAye, M28N8RAze, M28N9TAxe, M28N9TAye, M28N9TAze, M28N9RAxe, M28N9RAye, M28N9RAze, & + M29N1TAxe, M29N1TAye, M29N1TAze, M29N1RAxe, M29N1RAye, M29N1RAze, M29N2TAxe, M29N2TAye, M29N2TAze, M29N2RAxe, M29N2RAye, M29N2RAze, & + M29N3TAxe, M29N3TAye, M29N3TAze, M29N3RAxe, M29N3RAye, M29N3RAze, M29N4TAxe, M29N4TAye, M29N4TAze, M29N4RAxe, M29N4RAye, M29N4RAze, & + M29N5TAxe, M29N5TAye, M29N5TAze, M29N5RAxe, M29N5RAye, M29N5RAze, M29N6TAxe, M29N6TAye, M29N6TAze, M29N6RAxe, M29N6RAye, M29N6RAze, & + M29N7TAxe, M29N7TAye, M29N7TAze, M29N7RAxe, M29N7RAye, M29N7RAze, M29N8TAxe, M29N8TAye, M29N8TAze, M29N8RAxe, M29N8RAye, M29N8RAze, & + M29N9TAxe, M29N9TAye, M29N9TAze, M29N9RAxe, M29N9RAye, M29N9RAze, M30N1TAxe, M30N1TAye, M30N1TAze, M30N1RAxe, M30N1RAye, M30N1RAze, & + M30N2TAxe, M30N2TAye, M30N2TAze, M30N2RAxe, M30N2RAye, M30N2RAze, M30N3TAxe, M30N3TAye, M30N3TAze, M30N3RAxe, M30N3RAye, M30N3RAze, & + M30N4TAxe, M30N4TAye, M30N4TAze, M30N4RAxe, M30N4RAye, M30N4RAze, M30N5TAxe, M30N5TAye, M30N5TAze, M30N5RAxe, M30N5RAye, M30N5RAze, & + M30N6TAxe, M30N6TAye, M30N6TAze, M30N6RAxe, M30N6RAye, M30N6RAze, M30N7TAxe, M30N7TAye, M30N7TAze, M30N7RAxe, M30N7RAye, M30N7RAze, & + M30N8TAxe, M30N8TAye, M30N8TAze, M30N8RAxe, M30N8RAye, M30N8RAze, M30N9TAxe, M30N9TAye, M30N9TAze, M30N9RAxe, M30N9RAye, M30N9RAze, & + M31N1TAxe, M31N1TAye, M31N1TAze, M31N1RAxe, M31N1RAye, M31N1RAze, M31N2TAxe, M31N2TAye, M31N2TAze, M31N2RAxe, M31N2RAye, M31N2RAze, & + M31N3TAxe, M31N3TAye, M31N3TAze, M31N3RAxe, M31N3RAye, M31N3RAze, M31N4TAxe, M31N4TAye, M31N4TAze, M31N4RAxe, M31N4RAye, M31N4RAze, & + M31N5TAxe, M31N5TAye, M31N5TAze, M31N5RAxe, M31N5RAye, M31N5RAze, M31N6TAxe, M31N6TAye, M31N6TAze, M31N6RAxe, M31N6RAye, M31N6RAze, & + M31N7TAxe, M31N7TAye, M31N7TAze, M31N7RAxe, M31N7RAye, M31N7RAze, M31N8TAxe, M31N8TAye, M31N8TAze, M31N8RAxe, M31N8RAye, M31N8RAze, & + M31N9TAxe, M31N9TAye, M31N9TAze, M31N9RAxe, M31N9RAye, M31N9RAze, M32N1TAxe, M32N1TAye, M32N1TAze, M32N1RAxe, M32N1RAye, M32N1RAze, & + M32N2TAxe, M32N2TAye, M32N2TAze, M32N2RAxe, M32N2RAye, M32N2RAze, M32N3TAxe, M32N3TAye, M32N3TAze, M32N3RAxe, M32N3RAye, M32N3RAze, & + M32N4TAxe, M32N4TAye, M32N4TAze, M32N4RAxe, M32N4RAye, M32N4RAze, M32N5TAxe, M32N5TAye, M32N5TAze, M32N5RAxe, M32N5RAye, M32N5RAze, & + M32N6TAxe, M32N6TAye, M32N6TAze, M32N6RAxe, M32N6RAye, M32N6RAze, M32N7TAxe, M32N7TAye, M32N7TAze, M32N7RAxe, M32N7RAye, M32N7RAze, & + M32N8TAxe, M32N8TAye, M32N8TAze, M32N8RAxe, M32N8RAye, M32N8RAze, M32N9TAxe, M32N9TAye, M32N9TAze, M32N9RAxe, M32N9RAye, M32N9RAze, & + M33N1TAxe, M33N1TAye, M33N1TAze, M33N1RAxe, M33N1RAye, M33N1RAze, M33N2TAxe, M33N2TAye, M33N2TAze, M33N2RAxe, M33N2RAye, M33N2RAze, & + M33N3TAxe, M33N3TAye, M33N3TAze, M33N3RAxe, M33N3RAye, M33N3RAze, M33N4TAxe, M33N4TAye, M33N4TAze, M33N4RAxe, M33N4RAye, M33N4RAze, & + M33N5TAxe, M33N5TAye, M33N5TAze, M33N5RAxe, M33N5RAye, M33N5RAze, M33N6TAxe, M33N6TAye, M33N6TAze, M33N6RAxe, M33N6RAye, M33N6RAze, & + M33N7TAxe, M33N7TAye, M33N7TAze, M33N7RAxe, M33N7RAye, M33N7RAze, M33N8TAxe, M33N8TAye, M33N8TAze, M33N8RAxe, M33N8RAye, M33N8RAze, & + M33N9TAxe, M33N9TAye, M33N9TAze, M33N9RAxe, M33N9RAye, M33N9RAze, M34N1TAxe, M34N1TAye, M34N1TAze, M34N1RAxe, M34N1RAye, M34N1RAze, & + M34N2TAxe, M34N2TAye, M34N2TAze, M34N2RAxe, M34N2RAye, M34N2RAze, M34N3TAxe, M34N3TAye, M34N3TAze, M34N3RAxe, M34N3RAye, M34N3RAze, & + M34N4TAxe, M34N4TAye, M34N4TAze, M34N4RAxe, M34N4RAye, M34N4RAze, M34N5TAxe, M34N5TAye, M34N5TAze, M34N5RAxe, M34N5RAye, M34N5RAze, & + M34N6TAxe, M34N6TAye, M34N6TAze, M34N6RAxe, M34N6RAye, M34N6RAze, M34N7TAxe, M34N7TAye, M34N7TAze, M34N7RAxe, M34N7RAye, M34N7RAze, & + M34N8TAxe, M34N8TAye, M34N8TAze, M34N8RAxe, M34N8RAye, M34N8RAze, M34N9TAxe, M34N9TAye, M34N9TAze, M34N9RAxe, M34N9RAye, M34N9RAze, & + M35N1TAxe, M35N1TAye, M35N1TAze, M35N1RAxe, M35N1RAye, M35N1RAze, M35N2TAxe, M35N2TAye, M35N2TAze, M35N2RAxe, M35N2RAye, M35N2RAze, & + M35N3TAxe, M35N3TAye, M35N3TAze, M35N3RAxe, M35N3RAye, M35N3RAze, M35N4TAxe, M35N4TAye, M35N4TAze, M35N4RAxe, M35N4RAye, M35N4RAze, & + M35N5TAxe, M35N5TAye, M35N5TAze, M35N5RAxe, M35N5RAye, M35N5RAze, M35N6TAxe, M35N6TAye, M35N6TAze, M35N6RAxe, M35N6RAye, M35N6RAze, & + M35N7TAxe, M35N7TAye, M35N7TAze, M35N7RAxe, M35N7RAye, M35N7RAze, M35N8TAxe, M35N8TAye, M35N8TAze, M35N8RAxe, M35N8RAye, M35N8RAze, & + M35N9TAxe, M35N9TAye, M35N9TAze, M35N9RAxe, M35N9RAye, M35N9RAze, M36N1TAxe, M36N1TAye, M36N1TAze, M36N1RAxe, M36N1RAye, M36N1RAze, & + M36N2TAxe, M36N2TAye, M36N2TAze, M36N2RAxe, M36N2RAye, M36N2RAze, M36N3TAxe, M36N3TAye, M36N3TAze, M36N3RAxe, M36N3RAye, M36N3RAze, & + M36N4TAxe, M36N4TAye, M36N4TAze, M36N4RAxe, M36N4RAye, M36N4RAze, M36N5TAxe, M36N5TAye, M36N5TAze, M36N5RAxe, M36N5RAye, M36N5RAze, & + M36N6TAxe, M36N6TAye, M36N6TAze, M36N6RAxe, M36N6RAye, M36N6RAze, M36N7TAxe, M36N7TAye, M36N7TAze, M36N7RAxe, M36N7RAye, M36N7RAze, & + M36N8TAxe, M36N8TAye, M36N8TAze, M36N8RAxe, M36N8RAye, M36N8RAze, M36N9TAxe, M36N9TAye, M36N9TAze, M36N9RAxe, M36N9RAye, M36N9RAze, & + M37N1TAxe, M37N1TAye, M37N1TAze, M37N1RAxe, M37N1RAye, M37N1RAze, M37N2TAxe, M37N2TAye, M37N2TAze, M37N2RAxe, M37N2RAye, M37N2RAze, & + M37N3TAxe, M37N3TAye, M37N3TAze, M37N3RAxe, M37N3RAye, M37N3RAze, M37N4TAxe, M37N4TAye, M37N4TAze, M37N4RAxe, M37N4RAye, M37N4RAze, & + M37N5TAxe, M37N5TAye, M37N5TAze, M37N5RAxe, M37N5RAye, M37N5RAze, M37N6TAxe, M37N6TAye, M37N6TAze, M37N6RAxe, M37N6RAye, M37N6RAze, & + M37N7TAxe, M37N7TAye, M37N7TAze, M37N7RAxe, M37N7RAye, M37N7RAze, M37N8TAxe, M37N8TAye, M37N8TAze, M37N8RAxe, M37N8RAye, M37N8RAze, & + M37N9TAxe, M37N9TAye, M37N9TAze, M37N9RAxe, M37N9RAye, M37N9RAze, M38N1TAxe, M38N1TAye, M38N1TAze, M38N1RAxe, M38N1RAye, M38N1RAze, & + M38N2TAxe, M38N2TAye, M38N2TAze, M38N2RAxe, M38N2RAye, M38N2RAze, M38N3TAxe, M38N3TAye, M38N3TAze, M38N3RAxe, M38N3RAye, M38N3RAze, & + M38N4TAxe, M38N4TAye, M38N4TAze, M38N4RAxe, M38N4RAye, M38N4RAze, M38N5TAxe, M38N5TAye, M38N5TAze, M38N5RAxe, M38N5RAye, M38N5RAze, & + M38N6TAxe, M38N6TAye, M38N6TAze, M38N6RAxe, M38N6RAye, M38N6RAze, M38N7TAxe, M38N7TAye, M38N7TAze, M38N7RAxe, M38N7RAye, M38N7RAze, & + M38N8TAxe, M38N8TAye, M38N8TAze, M38N8RAxe, M38N8RAye, M38N8RAze, M38N9TAxe, M38N9TAye, M38N9TAze, M38N9RAxe, M38N9RAye, M38N9RAze, & + M39N1TAxe, M39N1TAye, M39N1TAze, M39N1RAxe, M39N1RAye, M39N1RAze, M39N2TAxe, M39N2TAye, M39N2TAze, M39N2RAxe, M39N2RAye, M39N2RAze, & + M39N3TAxe, M39N3TAye, M39N3TAze, M39N3RAxe, M39N3RAye, M39N3RAze, M39N4TAxe, M39N4TAye, M39N4TAze, M39N4RAxe, M39N4RAye, M39N4RAze, & + M39N5TAxe, M39N5TAye, M39N5TAze, M39N5RAxe, M39N5RAye, M39N5RAze, M39N6TAxe, M39N6TAye, M39N6TAze, M39N6RAxe, M39N6RAye, M39N6RAze, & + M39N7TAxe, M39N7TAye, M39N7TAze, M39N7RAxe, M39N7RAye, M39N7RAze, M39N8TAxe, M39N8TAye, M39N8TAze, M39N8RAxe, M39N8RAye, M39N8RAze, & + M39N9TAxe, M39N9TAye, M39N9TAze, M39N9RAxe, M39N9RAye, M39N9RAze, M40N1TAxe, M40N1TAye, M40N1TAze, M40N1RAxe, M40N1RAye, M40N1RAze, & + M40N2TAxe, M40N2TAye, M40N2TAze, M40N2RAxe, M40N2RAye, M40N2RAze, M40N3TAxe, M40N3TAye, M40N3TAze, M40N3RAxe, M40N3RAye, M40N3RAze, & + M40N4TAxe, M40N4TAye, M40N4TAze, M40N4RAxe, M40N4RAye, M40N4RAze, M40N5TAxe, M40N5TAye, M40N5TAze, M40N5RAxe, M40N5RAye, M40N5RAze, & + M40N6TAxe, M40N6TAye, M40N6TAze, M40N6RAxe, M40N6RAye, M40N6RAze, M40N7TAxe, M40N7TAye, M40N7TAze, M40N7RAxe, M40N7RAye, M40N7RAze, & + M40N8TAxe, M40N8TAye, M40N8TAze, M40N8RAxe, M40N8RAye, M40N8RAze, M40N9TAxe, M40N9TAye, M40N9TAze, M40N9RAxe, M40N9RAye, M40N9RAze, & + M41N1TAxe, M41N1TAye, M41N1TAze, M41N1RAxe, M41N1RAye, M41N1RAze, M41N2TAxe, M41N2TAye, M41N2TAze, M41N2RAxe, M41N2RAye, M41N2RAze, & + M41N3TAxe, M41N3TAye, M41N3TAze, M41N3RAxe, M41N3RAye, M41N3RAze, M41N4TAxe, M41N4TAye, M41N4TAze, M41N4RAxe, M41N4RAye, M41N4RAze, & + M41N5TAxe, M41N5TAye, M41N5TAze, M41N5RAxe, M41N5RAye, M41N5RAze, M41N6TAxe, M41N6TAye, M41N6TAze, M41N6RAxe, M41N6RAye, M41N6RAze, & + M41N7TAxe, M41N7TAye, M41N7TAze, M41N7RAxe, M41N7RAye, M41N7RAze, M41N8TAxe, M41N8TAye, M41N8TAze, M41N8RAxe, M41N8RAye, M41N8RAze, & + M41N9TAxe, M41N9TAye, M41N9TAze, M41N9RAxe, M41N9RAye, M41N9RAze, M42N1TAxe, M42N1TAye, M42N1TAze, M42N1RAxe, M42N1RAye, M42N1RAze, & + M42N2TAxe, M42N2TAye, M42N2TAze, M42N2RAxe, M42N2RAye, M42N2RAze, M42N3TAxe, M42N3TAye, M42N3TAze, M42N3RAxe, M42N3RAye, M42N3RAze, & + M42N4TAxe, M42N4TAye, M42N4TAze, M42N4RAxe, M42N4RAye, M42N4RAze, M42N5TAxe, M42N5TAye, M42N5TAze, M42N5RAxe, M42N5RAye, M42N5RAze, & + M42N6TAxe, M42N6TAye, M42N6TAze, M42N6RAxe, M42N6RAye, M42N6RAze, M42N7TAxe, M42N7TAye, M42N7TAze, M42N7RAxe, M42N7RAye, M42N7RAze, & + M42N8TAxe, M42N8TAye, M42N8TAze, M42N8RAxe, M42N8RAye, M42N8RAze, M42N9TAxe, M42N9TAye, M42N9TAze, M42N9RAxe, M42N9RAye, M42N9RAze, & + M43N1TAxe, M43N1TAye, M43N1TAze, M43N1RAxe, M43N1RAye, M43N1RAze, M43N2TAxe, M43N2TAye, M43N2TAze, M43N2RAxe, M43N2RAye, M43N2RAze, & + M43N3TAxe, M43N3TAye, M43N3TAze, M43N3RAxe, M43N3RAye, M43N3RAze, M43N4TAxe, M43N4TAye, M43N4TAze, M43N4RAxe, M43N4RAye, M43N4RAze, & + M43N5TAxe, M43N5TAye, M43N5TAze, M43N5RAxe, M43N5RAye, M43N5RAze, M43N6TAxe, M43N6TAye, M43N6TAze, M43N6RAxe, M43N6RAye, M43N6RAze, & + M43N7TAxe, M43N7TAye, M43N7TAze, M43N7RAxe, M43N7RAye, M43N7RAze, M43N8TAxe, M43N8TAye, M43N8TAze, M43N8RAxe, M43N8RAye, M43N8RAze, & + M43N9TAxe, M43N9TAye, M43N9TAze, M43N9RAxe, M43N9RAye, M43N9RAze, M44N1TAxe, M44N1TAye, M44N1TAze, M44N1RAxe, M44N1RAye, M44N1RAze, & + M44N2TAxe, M44N2TAye, M44N2TAze, M44N2RAxe, M44N2RAye, M44N2RAze, M44N3TAxe, M44N3TAye, M44N3TAze, M44N3RAxe, M44N3RAye, M44N3RAze, & + M44N4TAxe, M44N4TAye, M44N4TAze, M44N4RAxe, M44N4RAye, M44N4RAze, M44N5TAxe, M44N5TAye, M44N5TAze, M44N5RAxe, M44N5RAye, M44N5RAze, & + M44N6TAxe, M44N6TAye, M44N6TAze, M44N6RAxe, M44N6RAye, M44N6RAze, M44N7TAxe, M44N7TAye, M44N7TAze, M44N7RAxe, M44N7RAye, M44N7RAze, & + M44N8TAxe, M44N8TAye, M44N8TAze, M44N8RAxe, M44N8RAye, M44N8RAze, M44N9TAxe, M44N9TAye, M44N9TAze, M44N9RAxe, M44N9RAye, M44N9RAze, & + M45N1TAxe, M45N1TAye, M45N1TAze, M45N1RAxe, M45N1RAye, M45N1RAze, M45N2TAxe, M45N2TAye, M45N2TAze, M45N2RAxe, M45N2RAye, M45N2RAze, & + M45N3TAxe, M45N3TAye, M45N3TAze, M45N3RAxe, M45N3RAye, M45N3RAze, M45N4TAxe, M45N4TAye, M45N4TAze, M45N4RAxe, M45N4RAye, M45N4RAze, & + M45N5TAxe, M45N5TAye, M45N5TAze, M45N5RAxe, M45N5RAye, M45N5RAze, M45N6TAxe, M45N6TAye, M45N6TAze, M45N6RAxe, M45N6RAye, M45N6RAze, & + M45N7TAxe, M45N7TAye, M45N7TAze, M45N7RAxe, M45N7RAye, M45N7RAze, M45N8TAxe, M45N8TAye, M45N8TAze, M45N8RAxe, M45N8RAye, M45N8RAze, & + M45N9TAxe, M45N9TAye, M45N9TAze, M45N9RAxe, M45N9RAye, M45N9RAze, M46N1TAxe, M46N1TAye, M46N1TAze, M46N1RAxe, M46N1RAye, M46N1RAze, & + M46N2TAxe, M46N2TAye, M46N2TAze, M46N2RAxe, M46N2RAye, M46N2RAze, M46N3TAxe, M46N3TAye, M46N3TAze, M46N3RAxe, M46N3RAye, M46N3RAze, & + M46N4TAxe, M46N4TAye, M46N4TAze, M46N4RAxe, M46N4RAye, M46N4RAze, M46N5TAxe, M46N5TAye, M46N5TAze, M46N5RAxe, M46N5RAye, M46N5RAze, & + M46N6TAxe, M46N6TAye, M46N6TAze, M46N6RAxe, M46N6RAye, M46N6RAze, M46N7TAxe, M46N7TAye, M46N7TAze, M46N7RAxe, M46N7RAye, M46N7RAze, & + M46N8TAxe, M46N8TAye, M46N8TAze, M46N8RAxe, M46N8RAye, M46N8RAze, M46N9TAxe, M46N9TAye, M46N9TAze, M46N9RAxe, M46N9RAye, M46N9RAze, & + M47N1TAxe, M47N1TAye, M47N1TAze, M47N1RAxe, M47N1RAye, M47N1RAze, M47N2TAxe, M47N2TAye, M47N2TAze, M47N2RAxe, M47N2RAye, M47N2RAze, & + M47N3TAxe, M47N3TAye, M47N3TAze, M47N3RAxe, M47N3RAye, M47N3RAze, M47N4TAxe, M47N4TAye, M47N4TAze, M47N4RAxe, M47N4RAye, M47N4RAze, & + M47N5TAxe, M47N5TAye, M47N5TAze, M47N5RAxe, M47N5RAye, M47N5RAze, M47N6TAxe, M47N6TAye, M47N6TAze, M47N6RAxe, M47N6RAye, M47N6RAze, & + M47N7TAxe, M47N7TAye, M47N7TAze, M47N7RAxe, M47N7RAye, M47N7RAze, M47N8TAxe, M47N8TAye, M47N8TAze, M47N8RAxe, M47N8RAye, M47N8RAze, & + M47N9TAxe, M47N9TAye, M47N9TAze, M47N9RAxe, M47N9RAye, M47N9RAze, M48N1TAxe, M48N1TAye, M48N1TAze, M48N1RAxe, M48N1RAye, M48N1RAze, & + M48N2TAxe, M48N2TAye, M48N2TAze, M48N2RAxe, M48N2RAye, M48N2RAze, M48N3TAxe, M48N3TAye, M48N3TAze, M48N3RAxe, M48N3RAye, M48N3RAze, & + M48N4TAxe, M48N4TAye, M48N4TAze, M48N4RAxe, M48N4RAye, M48N4RAze, M48N5TAxe, M48N5TAye, M48N5TAze, M48N5RAxe, M48N5RAye, M48N5RAze, & + M48N6TAxe, M48N6TAye, M48N6TAze, M48N6RAxe, M48N6RAye, M48N6RAze, M48N7TAxe, M48N7TAye, M48N7TAze, M48N7RAxe, M48N7RAye, M48N7RAze, & + M48N8TAxe, M48N8TAye, M48N8TAze, M48N8RAxe, M48N8RAye, M48N8RAze, M48N9TAxe, M48N9TAye, M48N9TAze, M48N9RAxe, M48N9RAye, M48N9RAze, & + M49N1TAxe, M49N1TAye, M49N1TAze, M49N1RAxe, M49N1RAye, M49N1RAze, M49N2TAxe, M49N2TAye, M49N2TAze, M49N2RAxe, M49N2RAye, M49N2RAze, & + M49N3TAxe, M49N3TAye, M49N3TAze, M49N3RAxe, M49N3RAye, M49N3RAze, M49N4TAxe, M49N4TAye, M49N4TAze, M49N4RAxe, M49N4RAye, M49N4RAze, & + M49N5TAxe, M49N5TAye, M49N5TAze, M49N5RAxe, M49N5RAye, M49N5RAze, M49N6TAxe, M49N6TAye, M49N6TAze, M49N6RAxe, M49N6RAye, M49N6RAze, & + M49N7TAxe, M49N7TAye, M49N7TAze, M49N7RAxe, M49N7RAye, M49N7RAze, M49N8TAxe, M49N8TAye, M49N8TAze, M49N8RAxe, M49N8RAye, M49N8RAze, & + M49N9TAxe, M49N9TAye, M49N9TAze, M49N9RAxe, M49N9RAye, M49N9RAze, M50N1TAxe, M50N1TAye, M50N1TAze, M50N1RAxe, M50N1RAye, M50N1RAze, & + M50N2TAxe, M50N2TAye, M50N2TAze, M50N2RAxe, M50N2RAye, M50N2RAze, M50N3TAxe, M50N3TAye, M50N3TAze, M50N3RAxe, M50N3RAye, M50N3RAze, & + M50N4TAxe, M50N4TAye, M50N4TAze, M50N4RAxe, M50N4RAye, M50N4RAze, M50N5TAxe, M50N5TAye, M50N5TAze, M50N5RAxe, M50N5RAye, M50N5RAze, & + M50N6TAxe, M50N6TAye, M50N6TAze, M50N6RAxe, M50N6RAye, M50N6RAze, M50N7TAxe, M50N7TAye, M50N7TAze, M50N7RAxe, M50N7RAye, M50N7RAze, & + M50N8TAxe, M50N8TAye, M50N8TAze, M50N8RAxe, M50N8RAye, M50N8RAze, M50N9TAxe, M50N9TAye, M50N9TAze, M50N9RAxe, M50N9RAye, M50N9RAze, & + M51N1TAxe, M51N1TAye, M51N1TAze, M51N1RAxe, M51N1RAye, M51N1RAze, M51N2TAxe, M51N2TAye, M51N2TAze, M51N2RAxe, M51N2RAye, M51N2RAze, & + M51N3TAxe, M51N3TAye, M51N3TAze, M51N3RAxe, M51N3RAye, M51N3RAze, M51N4TAxe, M51N4TAye, M51N4TAze, M51N4RAxe, M51N4RAye, M51N4RAze, & + M51N5TAxe, M51N5TAye, M51N5TAze, M51N5RAxe, M51N5RAye, M51N5RAze, M51N6TAxe, M51N6TAye, M51N6TAze, M51N6RAxe, M51N6RAye, M51N6RAze, & + M51N7TAxe, M51N7TAye, M51N7TAze, M51N7RAxe, M51N7RAye, M51N7RAze, M51N8TAxe, M51N8TAye, M51N8TAze, M51N8RAxe, M51N8RAye, M51N8RAze, & + M51N9TAxe, M51N9TAye, M51N9TAze, M51N9RAxe, M51N9RAye, M51N9RAze, M52N1TAxe, M52N1TAye, M52N1TAze, M52N1RAxe, M52N1RAye, M52N1RAze, & + M52N2TAxe, M52N2TAye, M52N2TAze, M52N2RAxe, M52N2RAye, M52N2RAze, M52N3TAxe, M52N3TAye, M52N3TAze, M52N3RAxe, M52N3RAye, M52N3RAze, & + M52N4TAxe, M52N4TAye, M52N4TAze, M52N4RAxe, M52N4RAye, M52N4RAze, M52N5TAxe, M52N5TAye, M52N5TAze, M52N5RAxe, M52N5RAye, M52N5RAze, & + M52N6TAxe, M52N6TAye, M52N6TAze, M52N6RAxe, M52N6RAye, M52N6RAze, M52N7TAxe, M52N7TAye, M52N7TAze, M52N7RAxe, M52N7RAye, M52N7RAze, & + M52N8TAxe, M52N8TAye, M52N8TAze, M52N8RAxe, M52N8RAye, M52N8RAze, M52N9TAxe, M52N9TAye, M52N9TAze, M52N9RAxe, M52N9RAye, M52N9RAze, & + M53N1TAxe, M53N1TAye, M53N1TAze, M53N1RAxe, M53N1RAye, M53N1RAze, M53N2TAxe, M53N2TAye, M53N2TAze, M53N2RAxe, M53N2RAye, M53N2RAze, & + M53N3TAxe, M53N3TAye, M53N3TAze, M53N3RAxe, M53N3RAye, M53N3RAze, M53N4TAxe, M53N4TAye, M53N4TAze, M53N4RAxe, M53N4RAye, M53N4RAze, & + M53N5TAxe, M53N5TAye, M53N5TAze, M53N5RAxe, M53N5RAye, M53N5RAze, M53N6TAxe, M53N6TAye, M53N6TAze, M53N6RAxe, M53N6RAye, M53N6RAze, & + M53N7TAxe, M53N7TAye, M53N7TAze, M53N7RAxe, M53N7RAye, M53N7RAze, M53N8TAxe, M53N8TAye, M53N8TAze, M53N8RAxe, M53N8RAye, M53N8RAze, & + M53N9TAxe, M53N9TAye, M53N9TAze, M53N9RAxe, M53N9RAye, M53N9RAze, M54N1TAxe, M54N1TAye, M54N1TAze, M54N1RAxe, M54N1RAye, M54N1RAze, & + M54N2TAxe, M54N2TAye, M54N2TAze, M54N2RAxe, M54N2RAye, M54N2RAze, M54N3TAxe, M54N3TAye, M54N3TAze, M54N3RAxe, M54N3RAye, M54N3RAze, & + M54N4TAxe, M54N4TAye, M54N4TAze, M54N4RAxe, M54N4RAye, M54N4RAze, M54N5TAxe, M54N5TAye, M54N5TAze, M54N5RAxe, M54N5RAye, M54N5RAze, & + M54N6TAxe, M54N6TAye, M54N6TAze, M54N6RAxe, M54N6RAye, M54N6RAze, M54N7TAxe, M54N7TAye, M54N7TAze, M54N7RAxe, M54N7RAye, M54N7RAze, & + M54N8TAxe, M54N8TAye, M54N8TAze, M54N8RAxe, M54N8RAye, M54N8RAze, M54N9TAxe, M54N9TAye, M54N9TAze, M54N9RAxe, M54N9RAye, M54N9RAze, & + M55N1TAxe, M55N1TAye, M55N1TAze, M55N1RAxe, M55N1RAye, M55N1RAze, M55N2TAxe, M55N2TAye, M55N2TAze, M55N2RAxe, M55N2RAye, M55N2RAze, & + M55N3TAxe, M55N3TAye, M55N3TAze, M55N3RAxe, M55N3RAye, M55N3RAze, M55N4TAxe, M55N4TAye, M55N4TAze, M55N4RAxe, M55N4RAye, M55N4RAze, & + M55N5TAxe, M55N5TAye, M55N5TAze, M55N5RAxe, M55N5RAye, M55N5RAze, M55N6TAxe, M55N6TAye, M55N6TAze, M55N6RAxe, M55N6RAye, M55N6RAze, & + M55N7TAxe, M55N7TAye, M55N7TAze, M55N7RAxe, M55N7RAye, M55N7RAze, M55N8TAxe, M55N8TAye, M55N8TAze, M55N8RAxe, M55N8RAye, M55N8RAze, & + M55N9TAxe, M55N9TAye, M55N9TAze, M55N9RAxe, M55N9RAye, M55N9RAze, M56N1TAxe, M56N1TAye, M56N1TAze, M56N1RAxe, M56N1RAye, M56N1RAze, & + M56N2TAxe, M56N2TAye, M56N2TAze, M56N2RAxe, M56N2RAye, M56N2RAze, M56N3TAxe, M56N3TAye, M56N3TAze, M56N3RAxe, M56N3RAye, M56N3RAze, & + M56N4TAxe, M56N4TAye, M56N4TAze, M56N4RAxe, M56N4RAye, M56N4RAze, M56N5TAxe, M56N5TAye, M56N5TAze, M56N5RAxe, M56N5RAye, M56N5RAze, & + M56N6TAxe, M56N6TAye, M56N6TAze, M56N6RAxe, M56N6RAye, M56N6RAze, M56N7TAxe, M56N7TAye, M56N7TAze, M56N7RAxe, M56N7RAye, M56N7RAze, & + M56N8TAxe, M56N8TAye, M56N8TAze, M56N8RAxe, M56N8RAye, M56N8RAze, M56N9TAxe, M56N9TAye, M56N9TAze, M56N9RAxe, M56N9RAye, M56N9RAze, & + M57N1TAxe, M57N1TAye, M57N1TAze, M57N1RAxe, M57N1RAye, M57N1RAze, M57N2TAxe, M57N2TAye, M57N2TAze, M57N2RAxe, M57N2RAye, M57N2RAze, & + M57N3TAxe, M57N3TAye, M57N3TAze, M57N3RAxe, M57N3RAye, M57N3RAze, M57N4TAxe, M57N4TAye, M57N4TAze, M57N4RAxe, M57N4RAye, M57N4RAze, & + M57N5TAxe, M57N5TAye, M57N5TAze, M57N5RAxe, M57N5RAye, M57N5RAze, M57N6TAxe, M57N6TAye, M57N6TAze, M57N6RAxe, M57N6RAye, M57N6RAze, & + M57N7TAxe, M57N7TAye, M57N7TAze, M57N7RAxe, M57N7RAye, M57N7RAze, M57N8TAxe, M57N8TAye, M57N8TAze, M57N8RAxe, M57N8RAye, M57N8RAze, & + M57N9TAxe, M57N9TAye, M57N9TAze, M57N9RAxe, M57N9RAye, M57N9RAze, M58N1TAxe, M58N1TAye, M58N1TAze, M58N1RAxe, M58N1RAye, M58N1RAze, & + M58N2TAxe, M58N2TAye, M58N2TAze, M58N2RAxe, M58N2RAye, M58N2RAze, M58N3TAxe, M58N3TAye, M58N3TAze, M58N3RAxe, M58N3RAye, M58N3RAze, & + M58N4TAxe, M58N4TAye, M58N4TAze, M58N4RAxe, M58N4RAye, M58N4RAze, M58N5TAxe, M58N5TAye, M58N5TAze, M58N5RAxe, M58N5RAye, M58N5RAze, & + M58N6TAxe, M58N6TAye, M58N6TAze, M58N6RAxe, M58N6RAye, M58N6RAze, M58N7TAxe, M58N7TAye, M58N7TAze, M58N7RAxe, M58N7RAye, M58N7RAze, & + M58N8TAxe, M58N8TAye, M58N8TAze, M58N8RAxe, M58N8RAye, M58N8RAze, M58N9TAxe, M58N9TAye, M58N9TAze, M58N9RAxe, M58N9RAye, M58N9RAze, & + M59N1TAxe, M59N1TAye, M59N1TAze, M59N1RAxe, M59N1RAye, M59N1RAze, M59N2TAxe, M59N2TAye, M59N2TAze, M59N2RAxe, M59N2RAye, M59N2RAze, & + M59N3TAxe, M59N3TAye, M59N3TAze, M59N3RAxe, M59N3RAye, M59N3RAze, M59N4TAxe, M59N4TAye, M59N4TAze, M59N4RAxe, M59N4RAye, M59N4RAze, & + M59N5TAxe, M59N5TAye, M59N5TAze, M59N5RAxe, M59N5RAye, M59N5RAze, M59N6TAxe, M59N6TAye, M59N6TAze, M59N6RAxe, M59N6RAye, M59N6RAze, & + M59N7TAxe, M59N7TAye, M59N7TAze, M59N7RAxe, M59N7RAye, M59N7RAze, M59N8TAxe, M59N8TAye, M59N8TAze, M59N8RAxe, M59N8RAye, M59N8RAze, & + M59N9TAxe, M59N9TAye, M59N9TAze, M59N9RAxe, M59N9RAye, M59N9RAze, M60N1TAxe, M60N1TAye, M60N1TAze, M60N1RAxe, M60N1RAye, M60N1RAze, & + M60N2TAxe, M60N2TAye, M60N2TAze, M60N2RAxe, M60N2RAye, M60N2RAze, M60N3TAxe, M60N3TAye, M60N3TAze, M60N3RAxe, M60N3RAye, M60N3RAze, & + M60N4TAxe, M60N4TAye, M60N4TAze, M60N4RAxe, M60N4RAye, M60N4RAze, M60N5TAxe, M60N5TAye, M60N5TAze, M60N5RAxe, M60N5RAye, M60N5RAze, & + M60N6TAxe, M60N6TAye, M60N6TAze, M60N6RAxe, M60N6RAye, M60N6RAze, M60N7TAxe, M60N7TAye, M60N7TAze, M60N7RAxe, M60N7RAye, M60N7RAze, & + M60N8TAxe, M60N8TAye, M60N8TAze, M60N8RAxe, M60N8RAye, M60N8RAze, M60N9TAxe, M60N9TAye, M60N9TAze, M60N9RAxe, M60N9RAye, M60N9RAze, & + M61N1TAxe, M61N1TAye, M61N1TAze, M61N1RAxe, M61N1RAye, M61N1RAze, M61N2TAxe, M61N2TAye, M61N2TAze, M61N2RAxe, M61N2RAye, M61N2RAze, & + M61N3TAxe, M61N3TAye, M61N3TAze, M61N3RAxe, M61N3RAye, M61N3RAze, M61N4TAxe, M61N4TAye, M61N4TAze, M61N4RAxe, M61N4RAye, M61N4RAze, & + M61N5TAxe, M61N5TAye, M61N5TAze, M61N5RAxe, M61N5RAye, M61N5RAze, M61N6TAxe, M61N6TAye, M61N6TAze, M61N6RAxe, M61N6RAye, M61N6RAze, & + M61N7TAxe, M61N7TAye, M61N7TAze, M61N7RAxe, M61N7RAye, M61N7RAze, M61N8TAxe, M61N8TAye, M61N8TAze, M61N8RAxe, M61N8RAye, M61N8RAze, & + M61N9TAxe, M61N9TAye, M61N9TAze, M61N9RAxe, M61N9RAye, M61N9RAze, M62N1TAxe, M62N1TAye, M62N1TAze, M62N1RAxe, M62N1RAye, M62N1RAze, & + M62N2TAxe, M62N2TAye, M62N2TAze, M62N2RAxe, M62N2RAye, M62N2RAze, M62N3TAxe, M62N3TAye, M62N3TAze, M62N3RAxe, M62N3RAye, M62N3RAze, & + M62N4TAxe, M62N4TAye, M62N4TAze, M62N4RAxe, M62N4RAye, M62N4RAze, M62N5TAxe, M62N5TAye, M62N5TAze, M62N5RAxe, M62N5RAye, M62N5RAze, & + M62N6TAxe, M62N6TAye, M62N6TAze, M62N6RAxe, M62N6RAye, M62N6RAze, M62N7TAxe, M62N7TAye, M62N7TAze, M62N7RAxe, M62N7RAye, M62N7RAze, & + M62N8TAxe, M62N8TAye, M62N8TAze, M62N8RAxe, M62N8RAye, M62N8RAze, M62N9TAxe, M62N9TAye, M62N9TAze, M62N9RAxe, M62N9RAye, M62N9RAze, & + M63N1TAxe, M63N1TAye, M63N1TAze, M63N1RAxe, M63N1RAye, M63N1RAze, M63N2TAxe, M63N2TAye, M63N2TAze, M63N2RAxe, M63N2RAye, M63N2RAze, & + M63N3TAxe, M63N3TAye, M63N3TAze, M63N3RAxe, M63N3RAye, M63N3RAze, M63N4TAxe, M63N4TAye, M63N4TAze, M63N4RAxe, M63N4RAye, M63N4RAze, & + M63N5TAxe, M63N5TAye, M63N5TAze, M63N5RAxe, M63N5RAye, M63N5RAze, M63N6TAxe, M63N6TAye, M63N6TAze, M63N6RAxe, M63N6RAye, M63N6RAze, & + M63N7TAxe, M63N7TAye, M63N7TAze, M63N7RAxe, M63N7RAye, M63N7RAze, M63N8TAxe, M63N8TAye, M63N8TAze, M63N8RAxe, M63N8RAye, M63N8RAze, & + M63N9TAxe, M63N9TAye, M63N9TAze, M63N9RAxe, M63N9RAye, M63N9RAze, M64N1TAxe, M64N1TAye, M64N1TAze, M64N1RAxe, M64N1RAye, M64N1RAze, & + M64N2TAxe, M64N2TAye, M64N2TAze, M64N2RAxe, M64N2RAye, M64N2RAze, M64N3TAxe, M64N3TAye, M64N3TAze, M64N3RAxe, M64N3RAye, M64N3RAze, & + M64N4TAxe, M64N4TAye, M64N4TAze, M64N4RAxe, M64N4RAye, M64N4RAze, M64N5TAxe, M64N5TAye, M64N5TAze, M64N5RAxe, M64N5RAye, M64N5RAze, & + M64N6TAxe, M64N6TAye, M64N6TAze, M64N6RAxe, M64N6RAye, M64N6RAze, M64N7TAxe, M64N7TAye, M64N7TAze, M64N7RAxe, M64N7RAye, M64N7RAze, & + M64N8TAxe, M64N8TAye, M64N8TAze, M64N8RAxe, M64N8RAye, M64N8RAze, M64N9TAxe, M64N9TAye, M64N9TAze, M64N9RAxe, M64N9RAye, M64N9RAze, & + M65N1TAxe, M65N1TAye, M65N1TAze, M65N1RAxe, M65N1RAye, M65N1RAze, M65N2TAxe, M65N2TAye, M65N2TAze, M65N2RAxe, M65N2RAye, M65N2RAze, & + M65N3TAxe, M65N3TAye, M65N3TAze, M65N3RAxe, M65N3RAye, M65N3RAze, M65N4TAxe, M65N4TAye, M65N4TAze, M65N4RAxe, M65N4RAye, M65N4RAze, & + M65N5TAxe, M65N5TAye, M65N5TAze, M65N5RAxe, M65N5RAye, M65N5RAze, M65N6TAxe, M65N6TAye, M65N6TAze, M65N6RAxe, M65N6RAye, M65N6RAze, & + M65N7TAxe, M65N7TAye, M65N7TAze, M65N7RAxe, M65N7RAye, M65N7RAze, M65N8TAxe, M65N8TAye, M65N8TAze, M65N8RAxe, M65N8RAye, M65N8RAze, & + M65N9TAxe, M65N9TAye, M65N9TAze, M65N9RAxe, M65N9RAye, M65N9RAze, M66N1TAxe, M66N1TAye, M66N1TAze, M66N1RAxe, M66N1RAye, M66N1RAze, & + M66N2TAxe, M66N2TAye, M66N2TAze, M66N2RAxe, M66N2RAye, M66N2RAze, M66N3TAxe, M66N3TAye, M66N3TAze, M66N3RAxe, M66N3RAye, M66N3RAze, & + M66N4TAxe, M66N4TAye, M66N4TAze, M66N4RAxe, M66N4RAye, M66N4RAze, M66N5TAxe, M66N5TAye, M66N5TAze, M66N5RAxe, M66N5RAye, M66N5RAze, & + M66N6TAxe, M66N6TAye, M66N6TAze, M66N6RAxe, M66N6RAye, M66N6RAze, M66N7TAxe, M66N7TAye, M66N7TAze, M66N7RAxe, M66N7RAye, M66N7RAze, & + M66N8TAxe, M66N8TAye, M66N8TAze, M66N8RAxe, M66N8RAye, M66N8RAze, M66N9TAxe, M66N9TAye, M66N9TAze, M66N9RAxe, M66N9RAye, M66N9RAze, & + M67N1TAxe, M67N1TAye, M67N1TAze, M67N1RAxe, M67N1RAye, M67N1RAze, M67N2TAxe, M67N2TAye, M67N2TAze, M67N2RAxe, M67N2RAye, M67N2RAze, & + M67N3TAxe, M67N3TAye, M67N3TAze, M67N3RAxe, M67N3RAye, M67N3RAze, M67N4TAxe, M67N4TAye, M67N4TAze, M67N4RAxe, M67N4RAye, M67N4RAze, & + M67N5TAxe, M67N5TAye, M67N5TAze, M67N5RAxe, M67N5RAye, M67N5RAze, M67N6TAxe, M67N6TAye, M67N6TAze, M67N6RAxe, M67N6RAye, M67N6RAze, & + M67N7TAxe, M67N7TAye, M67N7TAze, M67N7RAxe, M67N7RAye, M67N7RAze, M67N8TAxe, M67N8TAye, M67N8TAze, M67N8RAxe, M67N8RAye, M67N8RAze, & + M67N9TAxe, M67N9TAye, M67N9TAze, M67N9RAxe, M67N9RAye, M67N9RAze, M68N1TAxe, M68N1TAye, M68N1TAze, M68N1RAxe, M68N1RAye, M68N1RAze, & + M68N2TAxe, M68N2TAye, M68N2TAze, M68N2RAxe, M68N2RAye, M68N2RAze, M68N3TAxe, M68N3TAye, M68N3TAze, M68N3RAxe, M68N3RAye, M68N3RAze, & + M68N4TAxe, M68N4TAye, M68N4TAze, M68N4RAxe, M68N4RAye, M68N4RAze, M68N5TAxe, M68N5TAye, M68N5TAze, M68N5RAxe, M68N5RAye, M68N5RAze, & + M68N6TAxe, M68N6TAye, M68N6TAze, M68N6RAxe, M68N6RAye, M68N6RAze, M68N7TAxe, M68N7TAye, M68N7TAze, M68N7RAxe, M68N7RAye, M68N7RAze, & + M68N8TAxe, M68N8TAye, M68N8TAze, M68N8RAxe, M68N8RAye, M68N8RAze, M68N9TAxe, M68N9TAye, M68N9TAze, M68N9RAxe, M68N9RAye, M68N9RAze, & + M69N1TAxe, M69N1TAye, M69N1TAze, M69N1RAxe, M69N1RAye, M69N1RAze, M69N2TAxe, M69N2TAye, M69N2TAze, M69N2RAxe, M69N2RAye, M69N2RAze, & + M69N3TAxe, M69N3TAye, M69N3TAze, M69N3RAxe, M69N3RAye, M69N3RAze, M69N4TAxe, M69N4TAye, M69N4TAze, M69N4RAxe, M69N4RAye, M69N4RAze, & + M69N5TAxe, M69N5TAye, M69N5TAze, M69N5RAxe, M69N5RAye, M69N5RAze, M69N6TAxe, M69N6TAye, M69N6TAze, M69N6RAxe, M69N6RAye, M69N6RAze, & + M69N7TAxe, M69N7TAye, M69N7TAze, M69N7RAxe, M69N7RAye, M69N7RAze, M69N8TAxe, M69N8TAye, M69N8TAze, M69N8RAxe, M69N8RAye, M69N8RAze, & + M69N9TAxe, M69N9TAye, M69N9TAze, M69N9RAxe, M69N9RAye, M69N9RAze, M70N1TAxe, M70N1TAye, M70N1TAze, M70N1RAxe, M70N1RAye, M70N1RAze, & + M70N2TAxe, M70N2TAye, M70N2TAze, M70N2RAxe, M70N2RAye, M70N2RAze, M70N3TAxe, M70N3TAye, M70N3TAze, M70N3RAxe, M70N3RAye, M70N3RAze, & + M70N4TAxe, M70N4TAye, M70N4TAze, M70N4RAxe, M70N4RAye, M70N4RAze, M70N5TAxe, M70N5TAye, M70N5TAze, M70N5RAxe, M70N5RAye, M70N5RAze, & + M70N6TAxe, M70N6TAye, M70N6TAze, M70N6RAxe, M70N6RAye, M70N6RAze, M70N7TAxe, M70N7TAye, M70N7TAze, M70N7RAxe, M70N7RAye, M70N7RAze, & + M70N8TAxe, M70N8TAye, M70N8TAze, M70N8RAxe, M70N8RAye, M70N8RAze, M70N9TAxe, M70N9TAye, M70N9TAze, M70N9RAxe, M70N9RAye, M70N9RAze, & + M71N1TAxe, M71N1TAye, M71N1TAze, M71N1RAxe, M71N1RAye, M71N1RAze, M71N2TAxe, M71N2TAye, M71N2TAze, M71N2RAxe, M71N2RAye, M71N2RAze, & + M71N3TAxe, M71N3TAye, M71N3TAze, M71N3RAxe, M71N3RAye, M71N3RAze, M71N4TAxe, M71N4TAye, M71N4TAze, M71N4RAxe, M71N4RAye, M71N4RAze, & + M71N5TAxe, M71N5TAye, M71N5TAze, M71N5RAxe, M71N5RAye, M71N5RAze, M71N6TAxe, M71N6TAye, M71N6TAze, M71N6RAxe, M71N6RAye, M71N6RAze, & + M71N7TAxe, M71N7TAye, M71N7TAze, M71N7RAxe, M71N7RAye, M71N7RAze, M71N8TAxe, M71N8TAye, M71N8TAze, M71N8RAxe, M71N8RAye, M71N8RAze, & + M71N9TAxe, M71N9TAye, M71N9TAze, M71N9RAxe, M71N9RAye, M71N9RAze, M72N1TAxe, M72N1TAye, M72N1TAze, M72N1RAxe, M72N1RAye, M72N1RAze, & + M72N2TAxe, M72N2TAye, M72N2TAze, M72N2RAxe, M72N2RAye, M72N2RAze, M72N3TAxe, M72N3TAye, M72N3TAze, M72N3RAxe, M72N3RAye, M72N3RAze, & + M72N4TAxe, M72N4TAye, M72N4TAze, M72N4RAxe, M72N4RAye, M72N4RAze, M72N5TAxe, M72N5TAye, M72N5TAze, M72N5RAxe, M72N5RAye, M72N5RAze, & + M72N6TAxe, M72N6TAye, M72N6TAze, M72N6RAxe, M72N6RAye, M72N6RAze, M72N7TAxe, M72N7TAye, M72N7TAze, M72N7RAxe, M72N7RAye, M72N7RAze, & + M72N8TAxe, M72N8TAye, M72N8TAze, M72N8RAxe, M72N8RAye, M72N8RAze, M72N9TAxe, M72N9TAye, M72N9TAze, M72N9RAxe, M72N9RAye, M72N9RAze, & + M73N1TAxe, M73N1TAye, M73N1TAze, M73N1RAxe, M73N1RAye, M73N1RAze, M73N2TAxe, M73N2TAye, M73N2TAze, M73N2RAxe, M73N2RAye, M73N2RAze, & + M73N3TAxe, M73N3TAye, M73N3TAze, M73N3RAxe, M73N3RAye, M73N3RAze, M73N4TAxe, M73N4TAye, M73N4TAze, M73N4RAxe, M73N4RAye, M73N4RAze, & + M73N5TAxe, M73N5TAye, M73N5TAze, M73N5RAxe, M73N5RAye, M73N5RAze, M73N6TAxe, M73N6TAye, M73N6TAze, M73N6RAxe, M73N6RAye, M73N6RAze, & + M73N7TAxe, M73N7TAye, M73N7TAze, M73N7RAxe, M73N7RAye, M73N7RAze, M73N8TAxe, M73N8TAye, M73N8TAze, M73N8RAxe, M73N8RAye, M73N8RAze, & + M73N9TAxe, M73N9TAye, M73N9TAze, M73N9RAxe, M73N9RAye, M73N9RAze, M74N1TAxe, M74N1TAye, M74N1TAze, M74N1RAxe, M74N1RAye, M74N1RAze, & + M74N2TAxe, M74N2TAye, M74N2TAze, M74N2RAxe, M74N2RAye, M74N2RAze, M74N3TAxe, M74N3TAye, M74N3TAze, M74N3RAxe, M74N3RAye, M74N3RAze, & + M74N4TAxe, M74N4TAye, M74N4TAze, M74N4RAxe, M74N4RAye, M74N4RAze, M74N5TAxe, M74N5TAye, M74N5TAze, M74N5RAxe, M74N5RAye, M74N5RAze, & + M74N6TAxe, M74N6TAye, M74N6TAze, M74N6RAxe, M74N6RAye, M74N6RAze, M74N7TAxe, M74N7TAye, M74N7TAze, M74N7RAxe, M74N7RAye, M74N7RAze, & + M74N8TAxe, M74N8TAye, M74N8TAze, M74N8RAxe, M74N8RAye, M74N8RAze, M74N9TAxe, M74N9TAye, M74N9TAze, M74N9RAxe, M74N9RAye, M74N9RAze, & + M75N1TAxe, M75N1TAye, M75N1TAze, M75N1RAxe, M75N1RAye, M75N1RAze, M75N2TAxe, M75N2TAye, M75N2TAze, M75N2RAxe, M75N2RAye, M75N2RAze, & + M75N3TAxe, M75N3TAye, M75N3TAze, M75N3RAxe, M75N3RAye, M75N3RAze, M75N4TAxe, M75N4TAye, M75N4TAze, M75N4RAxe, M75N4RAye, M75N4RAze, & + M75N5TAxe, M75N5TAye, M75N5TAze, M75N5RAxe, M75N5RAye, M75N5RAze, M75N6TAxe, M75N6TAye, M75N6TAze, M75N6RAxe, M75N6RAye, M75N6RAze, & + M75N7TAxe, M75N7TAye, M75N7TAze, M75N7RAxe, M75N7RAye, M75N7RAze, M75N8TAxe, M75N8TAye, M75N8TAze, M75N8RAxe, M75N8RAye, M75N8RAze, & + M75N9TAxe, M75N9TAye, M75N9TAze, M75N9RAxe, M75N9RAye, M75N9RAze, M76N1TAxe, M76N1TAye, M76N1TAze, M76N1RAxe, M76N1RAye, M76N1RAze, & + M76N2TAxe, M76N2TAye, M76N2TAze, M76N2RAxe, M76N2RAye, M76N2RAze, M76N3TAxe, M76N3TAye, M76N3TAze, M76N3RAxe, M76N3RAye, M76N3RAze, & + M76N4TAxe, M76N4TAye, M76N4TAze, M76N4RAxe, M76N4RAye, M76N4RAze, M76N5TAxe, M76N5TAye, M76N5TAze, M76N5RAxe, M76N5RAye, M76N5RAze, & + M76N6TAxe, M76N6TAye, M76N6TAze, M76N6RAxe, M76N6RAye, M76N6RAze, M76N7TAxe, M76N7TAye, M76N7TAze, M76N7RAxe, M76N7RAye, M76N7RAze, & + M76N8TAxe, M76N8TAye, M76N8TAze, M76N8RAxe, M76N8RAye, M76N8RAze, M76N9TAxe, M76N9TAye, M76N9TAze, M76N9RAxe, M76N9RAye, M76N9RAze, & + M77N1TAxe, M77N1TAye, M77N1TAze, M77N1RAxe, M77N1RAye, M77N1RAze, M77N2TAxe, M77N2TAye, M77N2TAze, M77N2RAxe, M77N2RAye, M77N2RAze, & + M77N3TAxe, M77N3TAye, M77N3TAze, M77N3RAxe, M77N3RAye, M77N3RAze, M77N4TAxe, M77N4TAye, M77N4TAze, M77N4RAxe, M77N4RAye, M77N4RAze, & + M77N5TAxe, M77N5TAye, M77N5TAze, M77N5RAxe, M77N5RAye, M77N5RAze, M77N6TAxe, M77N6TAye, M77N6TAze, M77N6RAxe, M77N6RAye, M77N6RAze, & + M77N7TAxe, M77N7TAye, M77N7TAze, M77N7RAxe, M77N7RAye, M77N7RAze, M77N8TAxe, M77N8TAye, M77N8TAze, M77N8RAxe, M77N8RAye, M77N8RAze, & + M77N9TAxe, M77N9TAye, M77N9TAze, M77N9RAxe, M77N9RAye, M77N9RAze, M78N1TAxe, M78N1TAye, M78N1TAze, M78N1RAxe, M78N1RAye, M78N1RAze, & + M78N2TAxe, M78N2TAye, M78N2TAze, M78N2RAxe, M78N2RAye, M78N2RAze, M78N3TAxe, M78N3TAye, M78N3TAze, M78N3RAxe, M78N3RAye, M78N3RAze, & + M78N4TAxe, M78N4TAye, M78N4TAze, M78N4RAxe, M78N4RAye, M78N4RAze, M78N5TAxe, M78N5TAye, M78N5TAze, M78N5RAxe, M78N5RAye, M78N5RAze, & + M78N6TAxe, M78N6TAye, M78N6TAze, M78N6RAxe, M78N6RAye, M78N6RAze, M78N7TAxe, M78N7TAye, M78N7TAze, M78N7RAxe, M78N7RAye, M78N7RAze, & + M78N8TAxe, M78N8TAye, M78N8TAze, M78N8RAxe, M78N8RAye, M78N8RAze, M78N9TAxe, M78N9TAye, M78N9TAze, M78N9RAxe, M78N9RAye, M78N9RAze, & + M79N1TAxe, M79N1TAye, M79N1TAze, M79N1RAxe, M79N1RAye, M79N1RAze, M79N2TAxe, M79N2TAye, M79N2TAze, M79N2RAxe, M79N2RAye, M79N2RAze, & + M79N3TAxe, M79N3TAye, M79N3TAze, M79N3RAxe, M79N3RAye, M79N3RAze, M79N4TAxe, M79N4TAye, M79N4TAze, M79N4RAxe, M79N4RAye, M79N4RAze, & + M79N5TAxe, M79N5TAye, M79N5TAze, M79N5RAxe, M79N5RAye, M79N5RAze, M79N6TAxe, M79N6TAye, M79N6TAze, M79N6RAxe, M79N6RAye, M79N6RAze, & + M79N7TAxe, M79N7TAye, M79N7TAze, M79N7RAxe, M79N7RAye, M79N7RAze, M79N8TAxe, M79N8TAye, M79N8TAze, M79N8RAxe, M79N8RAye, M79N8RAze, & + M79N9TAxe, M79N9TAye, M79N9TAze, M79N9RAxe, M79N9RAye, M79N9RAze, M80N1TAxe, M80N1TAye, M80N1TAze, M80N1RAxe, M80N1RAye, M80N1RAze, & + M80N2TAxe, M80N2TAye, M80N2TAze, M80N2RAxe, M80N2RAye, M80N2RAze, M80N3TAxe, M80N3TAye, M80N3TAze, M80N3RAxe, M80N3RAye, M80N3RAze, & + M80N4TAxe, M80N4TAye, M80N4TAze, M80N4RAxe, M80N4RAye, M80N4RAze, M80N5TAxe, M80N5TAye, M80N5TAze, M80N5RAxe, M80N5RAye, M80N5RAze, & + M80N6TAxe, M80N6TAye, M80N6TAze, M80N6RAxe, M80N6RAye, M80N6RAze, M80N7TAxe, M80N7TAye, M80N7TAze, M80N7RAxe, M80N7RAye, M80N7RAze, & + M80N8TAxe, M80N8TAye, M80N8TAze, M80N8RAxe, M80N8RAye, M80N8RAze, M80N9TAxe, M80N9TAye, M80N9TAze, M80N9RAxe, M80N9RAye, M80N9RAze, & + M81N1TAxe, M81N1TAye, M81N1TAze, M81N1RAxe, M81N1RAye, M81N1RAze, M81N2TAxe, M81N2TAye, M81N2TAze, M81N2RAxe, M81N2RAye, M81N2RAze, & + M81N3TAxe, M81N3TAye, M81N3TAze, M81N3RAxe, M81N3RAye, M81N3RAze, M81N4TAxe, M81N4TAye, M81N4TAze, M81N4RAxe, M81N4RAye, M81N4RAze, & + M81N5TAxe, M81N5TAye, M81N5TAze, M81N5RAxe, M81N5RAye, M81N5RAze, M81N6TAxe, M81N6TAye, M81N6TAze, M81N6RAxe, M81N6RAye, M81N6RAze, & + M81N7TAxe, M81N7TAye, M81N7TAze, M81N7RAxe, M81N7RAye, M81N7RAze, M81N8TAxe, M81N8TAye, M81N8TAze, M81N8RAxe, M81N8RAye, M81N8RAze, & + M81N9TAxe, M81N9TAye, M81N9TAze, M81N9RAxe, M81N9RAye, M81N9RAze, M82N1TAxe, M82N1TAye, M82N1TAze, M82N1RAxe, M82N1RAye, M82N1RAze, & + M82N2TAxe, M82N2TAye, M82N2TAze, M82N2RAxe, M82N2RAye, M82N2RAze, M82N3TAxe, M82N3TAye, M82N3TAze, M82N3RAxe, M82N3RAye, M82N3RAze, & + M82N4TAxe, M82N4TAye, M82N4TAze, M82N4RAxe, M82N4RAye, M82N4RAze, M82N5TAxe, M82N5TAye, M82N5TAze, M82N5RAxe, M82N5RAye, M82N5RAze, & + M82N6TAxe, M82N6TAye, M82N6TAze, M82N6RAxe, M82N6RAye, M82N6RAze, M82N7TAxe, M82N7TAye, M82N7TAze, M82N7RAxe, M82N7RAye, M82N7RAze, & + M82N8TAxe, M82N8TAye, M82N8TAze, M82N8RAxe, M82N8RAye, M82N8RAze, M82N9TAxe, M82N9TAye, M82N9TAze, M82N9RAxe, M82N9RAye, M82N9RAze, & + M83N1TAxe, M83N1TAye, M83N1TAze, M83N1RAxe, M83N1RAye, M83N1RAze, M83N2TAxe, M83N2TAye, M83N2TAze, M83N2RAxe, M83N2RAye, M83N2RAze, & + M83N3TAxe, M83N3TAye, M83N3TAze, M83N3RAxe, M83N3RAye, M83N3RAze, M83N4TAxe, M83N4TAye, M83N4TAze, M83N4RAxe, M83N4RAye, M83N4RAze, & + M83N5TAxe, M83N5TAye, M83N5TAze, M83N5RAxe, M83N5RAye, M83N5RAze, M83N6TAxe, M83N6TAye, M83N6TAze, M83N6RAxe, M83N6RAye, M83N6RAze, & + M83N7TAxe, M83N7TAye, M83N7TAze, M83N7RAxe, M83N7RAye, M83N7RAze, M83N8TAxe, M83N8TAye, M83N8TAze, M83N8RAxe, M83N8RAye, M83N8RAze, & + M83N9TAxe, M83N9TAye, M83N9TAze, M83N9RAxe, M83N9RAye, M83N9RAze, M84N1TAxe, M84N1TAye, M84N1TAze, M84N1RAxe, M84N1RAye, M84N1RAze, & + M84N2TAxe, M84N2TAye, M84N2TAze, M84N2RAxe, M84N2RAye, M84N2RAze, M84N3TAxe, M84N3TAye, M84N3TAze, M84N3RAxe, M84N3RAye, M84N3RAze, & + M84N4TAxe, M84N4TAye, M84N4TAze, M84N4RAxe, M84N4RAye, M84N4RAze, M84N5TAxe, M84N5TAye, M84N5TAze, M84N5RAxe, M84N5RAye, M84N5RAze, & + M84N6TAxe, M84N6TAye, M84N6TAze, M84N6RAxe, M84N6RAye, M84N6RAze, M84N7TAxe, M84N7TAye, M84N7TAze, M84N7RAxe, M84N7RAye, M84N7RAze, & + M84N8TAxe, M84N8TAye, M84N8TAze, M84N8RAxe, M84N8RAye, M84N8RAze, M84N9TAxe, M84N9TAye, M84N9TAze, M84N9RAxe, M84N9RAye, M84N9RAze, & + M85N1TAxe, M85N1TAye, M85N1TAze, M85N1RAxe, M85N1RAye, M85N1RAze, M85N2TAxe, M85N2TAye, M85N2TAze, M85N2RAxe, M85N2RAye, M85N2RAze, & + M85N3TAxe, M85N3TAye, M85N3TAze, M85N3RAxe, M85N3RAye, M85N3RAze, M85N4TAxe, M85N4TAye, M85N4TAze, M85N4RAxe, M85N4RAye, M85N4RAze, & + M85N5TAxe, M85N5TAye, M85N5TAze, M85N5RAxe, M85N5RAye, M85N5RAze, M85N6TAxe, M85N6TAye, M85N6TAze, M85N6RAxe, M85N6RAye, M85N6RAze, & + M85N7TAxe, M85N7TAye, M85N7TAze, M85N7RAxe, M85N7RAye, M85N7RAze, M85N8TAxe, M85N8TAye, M85N8TAze, M85N8RAxe, M85N8RAye, M85N8RAze, & + M85N9TAxe, M85N9TAye, M85N9TAze, M85N9RAxe, M85N9RAye, M85N9RAze, M86N1TAxe, M86N1TAye, M86N1TAze, M86N1RAxe, M86N1RAye, M86N1RAze, & + M86N2TAxe, M86N2TAye, M86N2TAze, M86N2RAxe, M86N2RAye, M86N2RAze, M86N3TAxe, M86N3TAye, M86N3TAze, M86N3RAxe, M86N3RAye, M86N3RAze, & + M86N4TAxe, M86N4TAye, M86N4TAze, M86N4RAxe, M86N4RAye, M86N4RAze, M86N5TAxe, M86N5TAye, M86N5TAze, M86N5RAxe, M86N5RAye, M86N5RAze, & + M86N6TAxe, M86N6TAye, M86N6TAze, M86N6RAxe, M86N6RAye, M86N6RAze, M86N7TAxe, M86N7TAye, M86N7TAze, M86N7RAxe, M86N7RAye, M86N7RAze, & + M86N8TAxe, M86N8TAye, M86N8TAze, M86N8RAxe, M86N8RAye, M86N8RAze, M86N9TAxe, M86N9TAye, M86N9TAze, M86N9RAxe, M86N9RAye, M86N9RAze, & + M87N1TAxe, M87N1TAye, M87N1TAze, M87N1RAxe, M87N1RAye, M87N1RAze, M87N2TAxe, M87N2TAye, M87N2TAze, M87N2RAxe, M87N2RAye, M87N2RAze, & + M87N3TAxe, M87N3TAye, M87N3TAze, M87N3RAxe, M87N3RAye, M87N3RAze, M87N4TAxe, M87N4TAye, M87N4TAze, M87N4RAxe, M87N4RAye, M87N4RAze, & + M87N5TAxe, M87N5TAye, M87N5TAze, M87N5RAxe, M87N5RAye, M87N5RAze, M87N6TAxe, M87N6TAye, M87N6TAze, M87N6RAxe, M87N6RAye, M87N6RAze, & + M87N7TAxe, M87N7TAye, M87N7TAze, M87N7RAxe, M87N7RAye, M87N7RAze, M87N8TAxe, M87N8TAye, M87N8TAze, M87N8RAxe, M87N8RAye, M87N8RAze, & + M87N9TAxe, M87N9TAye, M87N9TAze, M87N9RAxe, M87N9RAye, M87N9RAze, M88N1TAxe, M88N1TAye, M88N1TAze, M88N1RAxe, M88N1RAye, M88N1RAze, & + M88N2TAxe, M88N2TAye, M88N2TAze, M88N2RAxe, M88N2RAye, M88N2RAze, M88N3TAxe, M88N3TAye, M88N3TAze, M88N3RAxe, M88N3RAye, M88N3RAze, & + M88N4TAxe, M88N4TAye, M88N4TAze, M88N4RAxe, M88N4RAye, M88N4RAze, M88N5TAxe, M88N5TAye, M88N5TAze, M88N5RAxe, M88N5RAye, M88N5RAze, & + M88N6TAxe, M88N6TAye, M88N6TAze, M88N6RAxe, M88N6RAye, M88N6RAze, M88N7TAxe, M88N7TAye, M88N7TAze, M88N7RAxe, M88N7RAye, M88N7RAze, & + M88N8TAxe, M88N8TAye, M88N8TAze, M88N8RAxe, M88N8RAye, M88N8RAze, M88N9TAxe, M88N9TAye, M88N9TAze, M88N9RAxe, M88N9RAye, M88N9RAze, & + M89N1TAxe, M89N1TAye, M89N1TAze, M89N1RAxe, M89N1RAye, M89N1RAze, M89N2TAxe, M89N2TAye, M89N2TAze, M89N2RAxe, M89N2RAye, M89N2RAze, & + M89N3TAxe, M89N3TAye, M89N3TAze, M89N3RAxe, M89N3RAye, M89N3RAze, M89N4TAxe, M89N4TAye, M89N4TAze, M89N4RAxe, M89N4RAye, M89N4RAze, & + M89N5TAxe, M89N5TAye, M89N5TAze, M89N5RAxe, M89N5RAye, M89N5RAze, M89N6TAxe, M89N6TAye, M89N6TAze, M89N6RAxe, M89N6RAye, M89N6RAze, & + M89N7TAxe, M89N7TAye, M89N7TAze, M89N7RAxe, M89N7RAye, M89N7RAze, M89N8TAxe, M89N8TAye, M89N8TAze, M89N8RAxe, M89N8RAye, M89N8RAze, & + M89N9TAxe, M89N9TAye, M89N9TAze, M89N9RAxe, M89N9RAye, M89N9RAze, M90N1TAxe, M90N1TAye, M90N1TAze, M90N1RAxe, M90N1RAye, M90N1RAze, & + M90N2TAxe, M90N2TAye, M90N2TAze, M90N2RAxe, M90N2RAye, M90N2RAze, M90N3TAxe, M90N3TAye, M90N3TAze, M90N3RAxe, M90N3RAye, M90N3RAze, & + M90N4TAxe, M90N4TAye, M90N4TAze, M90N4RAxe, M90N4RAye, M90N4RAze, M90N5TAxe, M90N5TAye, M90N5TAze, M90N5RAxe, M90N5RAye, M90N5RAze, & + M90N6TAxe, M90N6TAye, M90N6TAze, M90N6RAxe, M90N6RAye, M90N6RAze, M90N7TAxe, M90N7TAye, M90N7TAze, M90N7RAxe, M90N7RAye, M90N7RAze, & + M90N8TAxe, M90N8TAye, M90N8TAze, M90N8RAxe, M90N8RAye, M90N8RAze, M90N9TAxe, M90N9TAye, M90N9TAze, M90N9RAxe, M90N9RAye, M90N9RAze, & + M91N1TAxe, M91N1TAye, M91N1TAze, M91N1RAxe, M91N1RAye, M91N1RAze, M91N2TAxe, M91N2TAye, M91N2TAze, M91N2RAxe, M91N2RAye, M91N2RAze, & + M91N3TAxe, M91N3TAye, M91N3TAze, M91N3RAxe, M91N3RAye, M91N3RAze, M91N4TAxe, M91N4TAye, M91N4TAze, M91N4RAxe, M91N4RAye, M91N4RAze, & + M91N5TAxe, M91N5TAye, M91N5TAze, M91N5RAxe, M91N5RAye, M91N5RAze, M91N6TAxe, M91N6TAye, M91N6TAze, M91N6RAxe, M91N6RAye, M91N6RAze, & + M91N7TAxe, M91N7TAye, M91N7TAze, M91N7RAxe, M91N7RAye, M91N7RAze, M91N8TAxe, M91N8TAye, M91N8TAze, M91N8RAxe, M91N8RAye, M91N8RAze, & + M91N9TAxe, M91N9TAye, M91N9TAze, M91N9RAxe, M91N9RAye, M91N9RAze, M92N1TAxe, M92N1TAye, M92N1TAze, M92N1RAxe, M92N1RAye, M92N1RAze, & + M92N2TAxe, M92N2TAye, M92N2TAze, M92N2RAxe, M92N2RAye, M92N2RAze, M92N3TAxe, M92N3TAye, M92N3TAze, M92N3RAxe, M92N3RAye, M92N3RAze, & + M92N4TAxe, M92N4TAye, M92N4TAze, M92N4RAxe, M92N4RAye, M92N4RAze, M92N5TAxe, M92N5TAye, M92N5TAze, M92N5RAxe, M92N5RAye, M92N5RAze, & + M92N6TAxe, M92N6TAye, M92N6TAze, M92N6RAxe, M92N6RAye, M92N6RAze, M92N7TAxe, M92N7TAye, M92N7TAze, M92N7RAxe, M92N7RAye, M92N7RAze, & + M92N8TAxe, M92N8TAye, M92N8TAze, M92N8RAxe, M92N8RAye, M92N8RAze, M92N9TAxe, M92N9TAye, M92N9TAze, M92N9RAxe, M92N9RAye, M92N9RAze, & + M93N1TAxe, M93N1TAye, M93N1TAze, M93N1RAxe, M93N1RAye, M93N1RAze, M93N2TAxe, M93N2TAye, M93N2TAze, M93N2RAxe, M93N2RAye, M93N2RAze, & + M93N3TAxe, M93N3TAye, M93N3TAze, M93N3RAxe, M93N3RAye, M93N3RAze, M93N4TAxe, M93N4TAye, M93N4TAze, M93N4RAxe, M93N4RAye, M93N4RAze, & + M93N5TAxe, M93N5TAye, M93N5TAze, M93N5RAxe, M93N5RAye, M93N5RAze, M93N6TAxe, M93N6TAye, M93N6TAze, M93N6RAxe, M93N6RAye, M93N6RAze, & + M93N7TAxe, M93N7TAye, M93N7TAze, M93N7RAxe, M93N7RAye, M93N7RAze, M93N8TAxe, M93N8TAye, M93N8TAze, M93N8RAxe, M93N8RAye, M93N8RAze, & + M93N9TAxe, M93N9TAye, M93N9TAze, M93N9RAxe, M93N9RAye, M93N9RAze, M94N1TAxe, M94N1TAye, M94N1TAze, M94N1RAxe, M94N1RAye, M94N1RAze, & + M94N2TAxe, M94N2TAye, M94N2TAze, M94N2RAxe, M94N2RAye, M94N2RAze, M94N3TAxe, M94N3TAye, M94N3TAze, M94N3RAxe, M94N3RAye, M94N3RAze, & + M94N4TAxe, M94N4TAye, M94N4TAze, M94N4RAxe, M94N4RAye, M94N4RAze, M94N5TAxe, M94N5TAye, M94N5TAze, M94N5RAxe, M94N5RAye, M94N5RAze, & + M94N6TAxe, M94N6TAye, M94N6TAze, M94N6RAxe, M94N6RAye, M94N6RAze, M94N7TAxe, M94N7TAye, M94N7TAze, M94N7RAxe, M94N7RAye, M94N7RAze, & + M94N8TAxe, M94N8TAye, M94N8TAze, M94N8RAxe, M94N8RAye, M94N8RAze, M94N9TAxe, M94N9TAye, M94N9TAze, M94N9RAxe, M94N9RAye, M94N9RAze, & + M95N1TAxe, M95N1TAye, M95N1TAze, M95N1RAxe, M95N1RAye, M95N1RAze, M95N2TAxe, M95N2TAye, M95N2TAze, M95N2RAxe, M95N2RAye, M95N2RAze, & + M95N3TAxe, M95N3TAye, M95N3TAze, M95N3RAxe, M95N3RAye, M95N3RAze, M95N4TAxe, M95N4TAye, M95N4TAze, M95N4RAxe, M95N4RAye, M95N4RAze, & + M95N5TAxe, M95N5TAye, M95N5TAze, M95N5RAxe, M95N5RAye, M95N5RAze, M95N6TAxe, M95N6TAye, M95N6TAze, M95N6RAxe, M95N6RAye, M95N6RAze, & + M95N7TAxe, M95N7TAye, M95N7TAze, M95N7RAxe, M95N7RAye, M95N7RAze, M95N8TAxe, M95N8TAye, M95N8TAze, M95N8RAxe, M95N8RAye, M95N8RAze, & + M95N9TAxe, M95N9TAye, M95N9TAze, M95N9RAxe, M95N9RAye, M95N9RAze, M96N1TAxe, M96N1TAye, M96N1TAze, M96N1RAxe, M96N1RAye, M96N1RAze, & + M96N2TAxe, M96N2TAye, M96N2TAze, M96N2RAxe, M96N2RAye, M96N2RAze, M96N3TAxe, M96N3TAye, M96N3TAze, M96N3RAxe, M96N3RAye, M96N3RAze, & + M96N4TAxe, M96N4TAye, M96N4TAze, M96N4RAxe, M96N4RAye, M96N4RAze, M96N5TAxe, M96N5TAye, M96N5TAze, M96N5RAxe, M96N5RAye, M96N5RAze, & + M96N6TAxe, M96N6TAye, M96N6TAze, M96N6RAxe, M96N6RAye, M96N6RAze, M96N7TAxe, M96N7TAye, M96N7TAze, M96N7RAxe, M96N7RAye, M96N7RAze, & + M96N8TAxe, M96N8TAye, M96N8TAze, M96N8RAxe, M96N8RAye, M96N8RAze, M96N9TAxe, M96N9TAye, M96N9TAze, M96N9RAxe, M96N9RAye, M96N9RAze, & + M97N1TAxe, M97N1TAye, M97N1TAze, M97N1RAxe, M97N1RAye, M97N1RAze, M97N2TAxe, M97N2TAye, M97N2TAze, M97N2RAxe, M97N2RAye, M97N2RAze, & + M97N3TAxe, M97N3TAye, M97N3TAze, M97N3RAxe, M97N3RAye, M97N3RAze, M97N4TAxe, M97N4TAye, M97N4TAze, M97N4RAxe, M97N4RAye, M97N4RAze, & + M97N5TAxe, M97N5TAye, M97N5TAze, M97N5RAxe, M97N5RAye, M97N5RAze, M97N6TAxe, M97N6TAye, M97N6TAze, M97N6RAxe, M97N6RAye, M97N6RAze, & + M97N7TAxe, M97N7TAye, M97N7TAze, M97N7RAxe, M97N7RAye, M97N7RAze, M97N8TAxe, M97N8TAye, M97N8TAze, M97N8RAxe, M97N8RAye, M97N8RAze, & + M97N9TAxe, M97N9TAye, M97N9TAze, M97N9RAxe, M97N9RAye, M97N9RAze, M98N1TAxe, M98N1TAye, M98N1TAze, M98N1RAxe, M98N1RAye, M98N1RAze, & + M98N2TAxe, M98N2TAye, M98N2TAze, M98N2RAxe, M98N2RAye, M98N2RAze, M98N3TAxe, M98N3TAye, M98N3TAze, M98N3RAxe, M98N3RAye, M98N3RAze, & + M98N4TAxe, M98N4TAye, M98N4TAze, M98N4RAxe, M98N4RAye, M98N4RAze, M98N5TAxe, M98N5TAye, M98N5TAze, M98N5RAxe, M98N5RAye, M98N5RAze, & + M98N6TAxe, M98N6TAye, M98N6TAze, M98N6RAxe, M98N6RAye, M98N6RAze, M98N7TAxe, M98N7TAye, M98N7TAze, M98N7RAxe, M98N7RAye, M98N7RAze, & + M98N8TAxe, M98N8TAye, M98N8TAze, M98N8RAxe, M98N8RAye, M98N8RAze, M98N9TAxe, M98N9TAye, M98N9TAze, M98N9RAxe, M98N9RAye, M98N9RAze, & + M99N1TAxe, M99N1TAye, M99N1TAze, M99N1RAxe, M99N1RAye, M99N1RAze, M99N2TAxe, M99N2TAye, M99N2TAze, M99N2RAxe, M99N2RAye, M99N2RAze, & + M99N3TAxe, M99N3TAye, M99N3TAze, M99N3RAxe, M99N3RAye, M99N3RAze, M99N4TAxe, M99N4TAye, M99N4TAze, M99N4RAxe, M99N4RAye, M99N4RAze, & + M99N5TAxe, M99N5TAye, M99N5TAze, M99N5RAxe, M99N5RAye, M99N5RAze, M99N6TAxe, M99N6TAye, M99N6TAze, M99N6RAxe, M99N6RAye, M99N6RAze, & + M99N7TAxe, M99N7TAye, M99N7TAze, M99N7RAxe, M99N7RAye, M99N7RAze, M99N8TAxe, M99N8TAye, M99N8TAze, M99N8RAxe, M99N8RAye, M99N8RAze, & + M99N9TAxe, M99N9TAye, M99N9TAze, M99N9RAxe, M99N9RAye, M99N9RAze/),(/6,9,99/)) + + + +!End of code generated by Matlab script Write_ChckOutLst +! =================================================================================================== + + INTEGER, PARAMETER :: ReactSS(6) = (/ReactFXss, ReactFYss, ReactFZss, & + ReactMXss, ReactMYss, ReactMZss/) + INTEGER, PARAMETER :: IntfSS(6) = (/IntfFXss, IntfFYss, IntfFZss , & + IntfMXss, IntfMYss, IntfMZss/) + INTEGER, PARAMETER :: IntfTRss(6) = (/IntfTDXss, IntfTDYss, IntfTDZss, & + IntfRDXss, IntfRDYss, IntfRDZss/) + INTEGER, PARAMETER :: IntfTRAss(6) = (/IntfTAXss, IntfTAYss, IntfTAZss, & + IntfRAXss, IntfRAYss, IntfRAZss/) - CHARACTER(10), PARAMETER :: ValidParamAry(2265) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "INTFFXSS ","INTFFYSS ","INTFFZSS ","INTFMXSS ","INTFMYSS ","INTFMZSS ","INTFRAXSS", & - "INTFRAYSS","INTFRAZSS","INTFRDXSS","INTFRDYSS","INTFRDZSS","INTFTAXSS","INTFTAYSS", & - "INTFTAZSS","INTFTDXSS","INTFTDYSS","INTFTDZSS","M1N1FKXE ","M1N1FKYE ","M1N1FKZE ", & - "M1N1FMXE ","M1N1FMYE ","M1N1FMZE ","M1N1MKXE ","M1N1MKYE ","M1N1MKZE ","M1N1MMXE ", & - "M1N1MMYE ","M1N1MMZE ","M1N1RAXE ","M1N1RAYE ","M1N1RAZE ","M1N1RDXE ","M1N1RDYE ", & - "M1N1RDZE ","M1N1TAXE ","M1N1TAYE ","M1N1TAZE ","M1N1TDXSS","M1N1TDYSS","M1N1TDZSS", & - "M1N2FKXE ","M1N2FKYE ","M1N2FKZE ","M1N2FMXE ","M1N2FMYE ","M1N2FMZE ","M1N2MKXE ", & - "M1N2MKYE ","M1N2MKZE ","M1N2MMXE ","M1N2MMYE ","M1N2MMZE ","M1N2RAXE ","M1N2RAYE ", & - "M1N2RAZE ","M1N2RDXE ","M1N2RDYE ","M1N2RDZE ","M1N2TAXE ","M1N2TAYE ","M1N2TAZE ", & - "M1N2TDXSS","M1N2TDYSS","M1N2TDZSS","M1N3FKXE ","M1N3FKYE ","M1N3FKZE ","M1N3FMXE ", & - "M1N3FMYE ","M1N3FMZE ","M1N3MKXE ","M1N3MKYE ","M1N3MKZE ","M1N3MMXE ","M1N3MMYE ", & - "M1N3MMZE ","M1N3RAXE ","M1N3RAYE ","M1N3RAZE ","M1N3RDXE ","M1N3RDYE ","M1N3RDZE ", & - "M1N3TAXE ","M1N3TAYE ","M1N3TAZE ","M1N3TDXSS","M1N3TDYSS","M1N3TDZSS","M1N4FKXE ", & - "M1N4FKYE ","M1N4FKZE ","M1N4FMXE ","M1N4FMYE ","M1N4FMZE ","M1N4MKXE ","M1N4MKYE ", & - "M1N4MKZE ","M1N4MMXE ","M1N4MMYE ","M1N4MMZE ","M1N4RAXE ","M1N4RAYE ","M1N4RAZE ", & - "M1N4RDXE ","M1N4RDYE ","M1N4RDZE ","M1N4TAXE ","M1N4TAYE ","M1N4TAZE ","M1N4TDXSS", & - "M1N4TDYSS","M1N4TDZSS","M1N5FKXE ","M1N5FKYE ","M1N5FKZE ","M1N5FMXE ","M1N5FMYE ", & - "M1N5FMZE ","M1N5MKXE ","M1N5MKYE ","M1N5MKZE ","M1N5MMXE ","M1N5MMYE ","M1N5MMZE ", & - "M1N5RAXE ","M1N5RAYE ","M1N5RAZE ","M1N5RDXE ","M1N5RDYE ","M1N5RDZE ","M1N5TAXE ", & - "M1N5TAYE ","M1N5TAZE ","M1N5TDXSS","M1N5TDYSS","M1N5TDZSS","M1N6FKXE ","M1N6FKYE ", & - "M1N6FKZE ","M1N6FMXE ","M1N6FMYE ","M1N6FMZE ","M1N6MKXE ","M1N6MKYE ","M1N6MKZE ", & - "M1N6MMXE ","M1N6MMYE ","M1N6MMZE ","M1N6RAXE ","M1N6RAYE ","M1N6RAZE ","M1N6RDXE ", & - "M1N6RDYE ","M1N6RDZE ","M1N6TAXE ","M1N6TAYE ","M1N6TAZE ","M1N6TDXSS","M1N6TDYSS", & - "M1N6TDZSS","M1N7FKXE ","M1N7FKYE ","M1N7FKZE ","M1N7FMXE ","M1N7FMYE ","M1N7FMZE ", & - "M1N7MKXE ","M1N7MKYE ","M1N7MKZE ","M1N7MMXE ","M1N7MMYE ","M1N7MMZE ","M1N7RAXE ", & - "M1N7RAYE ","M1N7RAZE ","M1N7RDXE ","M1N7RDYE ","M1N7RDZE ","M1N7TAXE ","M1N7TAYE ", & - "M1N7TAZE ","M1N7TDXSS","M1N7TDYSS","M1N7TDZSS","M1N8FKXE ","M1N8FKYE ","M1N8FKZE ", & - "M1N8FMXE ","M1N8FMYE ","M1N8FMZE ","M1N8MKXE ","M1N8MKYE ","M1N8MKZE ","M1N8MMXE ", & - "M1N8MMYE ","M1N8MMZE ","M1N8RAXE ","M1N8RAYE ","M1N8RAZE ","M1N8RDXE ","M1N8RDYE ", & - "M1N8RDZE ","M1N8TAXE ","M1N8TAYE ","M1N8TAZE ","M1N8TDXSS","M1N8TDYSS","M1N8TDZSS", & - "M1N9FKXE ","M1N9FKYE ","M1N9FKZE ","M1N9FMXE ","M1N9FMYE ","M1N9FMZE ","M1N9MKXE ", & - "M1N9MKYE ","M1N9MKZE ","M1N9MMXE ","M1N9MMYE ","M1N9MMZE ","M1N9RAXE ","M1N9RAYE ", & - "M1N9RAZE ","M1N9RDXE ","M1N9RDYE ","M1N9RDZE ","M1N9TAXE ","M1N9TAYE ","M1N9TAZE ", & - "M1N9TDXSS","M1N9TDYSS","M1N9TDZSS","M2N1FKXE ","M2N1FKYE ","M2N1FKZE ","M2N1FMXE ", & - "M2N1FMYE ","M2N1FMZE ","M2N1MKXE ","M2N1MKYE ","M2N1MKZE ","M2N1MMXE ","M2N1MMYE ", & - "M2N1MMZE ","M2N1RAXE ","M2N1RAYE ","M2N1RAZE ","M2N1RDXE ","M2N1RDYE ","M2N1RDZE ", & - "M2N1TAXE ","M2N1TAYE ","M2N1TAZE ","M2N1TDXSS","M2N1TDYSS","M2N1TDZSS","M2N2FKXE ", & - "M2N2FKYE ","M2N2FKZE ","M2N2FMXE ","M2N2FMYE ","M2N2FMZE ","M2N2MKXE ","M2N2MKYE ", & - "M2N2MKZE ","M2N2MMXE ","M2N2MMYE ","M2N2MMZE ","M2N2RAXE ","M2N2RAYE ","M2N2RAZE ", & - "M2N2RDXE ","M2N2RDYE ","M2N2RDZE ","M2N2TAXE ","M2N2TAYE ","M2N2TAZE ","M2N2TDXSS", & - "M2N2TDYSS","M2N2TDZSS","M2N3FKXE ","M2N3FKYE ","M2N3FKZE ","M2N3FMXE ","M2N3FMYE ", & - "M2N3FMZE ","M2N3MKXE ","M2N3MKYE ","M2N3MKZE ","M2N3MMXE ","M2N3MMYE ","M2N3MMZE ", & - "M2N3RAXE ","M2N3RAYE ","M2N3RAZE ","M2N3RDXE ","M2N3RDYE ","M2N3RDZE ","M2N3TAXE ", & - "M2N3TAYE ","M2N3TAZE ","M2N3TDXSS","M2N3TDYSS","M2N3TDZSS","M2N4FKXE ","M2N4FKYE ", & - "M2N4FKZE ","M2N4FMXE ","M2N4FMYE ","M2N4FMZE ","M2N4MKXE ","M2N4MKYE ","M2N4MKZE ", & - "M2N4MMXE ","M2N4MMYE ","M2N4MMZE ","M2N4RAXE ","M2N4RAYE ","M2N4RAZE ","M2N4RDXE ", & - "M2N4RDYE ","M2N4RDZE ","M2N4TAXE ","M2N4TAYE ","M2N4TAZE ","M2N4TDXSS","M2N4TDYSS", & - "M2N4TDZSS","M2N5FKXE ","M2N5FKYE ","M2N5FKZE ","M2N5FMXE ","M2N5FMYE ","M2N5FMZE ", & - "M2N5MKXE ","M2N5MKYE ","M2N5MKZE ","M2N5MMXE ","M2N5MMYE ","M2N5MMZE ","M2N5RAXE ", & - "M2N5RAYE ","M2N5RAZE ","M2N5RDXE ","M2N5RDYE ","M2N5RDZE ","M2N5TAXE ","M2N5TAYE ", & - "M2N5TAZE ","M2N5TDXSS","M2N5TDYSS","M2N5TDZSS","M2N6FKXE ","M2N6FKYE ","M2N6FKZE ", & - "M2N6FMXE ","M2N6FMYE ","M2N6FMZE ","M2N6MKXE ","M2N6MKYE ","M2N6MKZE ","M2N6MMXE ", & - "M2N6MMYE ","M2N6MMZE ","M2N6RAXE ","M2N6RAYE ","M2N6RAZE ","M2N6RDXE ","M2N6RDYE ", & - "M2N6RDZE ","M2N6TAXE ","M2N6TAYE ","M2N6TAZE ","M2N6TDXSS","M2N6TDYSS","M2N6TDZSS", & - "M2N7FKXE ","M2N7FKYE ","M2N7FKZE ","M2N7FMXE ","M2N7FMYE ","M2N7FMZE ","M2N7MKXE ", & - "M2N7MKYE ","M2N7MKZE ","M2N7MMXE ","M2N7MMYE ","M2N7MMZE ","M2N7RAXE ","M2N7RAYE ", & - "M2N7RAZE ","M2N7RDXE ","M2N7RDYE ","M2N7RDZE ","M2N7TAXE ","M2N7TAYE ","M2N7TAZE ", & - "M2N7TDXSS","M2N7TDYSS","M2N7TDZSS","M2N8FKXE ","M2N8FKYE ","M2N8FKZE ","M2N8FMXE ", & - "M2N8FMYE ","M2N8FMZE ","M2N8MKXE ","M2N8MKYE ","M2N8MKZE ","M2N8MMXE ","M2N8MMYE ", & - "M2N8MMZE ","M2N8RAXE ","M2N8RAYE ","M2N8RAZE ","M2N8RDXE ","M2N8RDYE ","M2N8RDZE ", & - "M2N8TAXE ","M2N8TAYE ","M2N8TAZE ","M2N8TDXSS","M2N8TDYSS","M2N8TDZSS","M2N9FKXE ", & - "M2N9FKYE ","M2N9FKZE ","M2N9FMXE ","M2N9FMYE ","M2N9FMZE ","M2N9MKXE ","M2N9MKYE ", & - "M2N9MKZE ","M2N9MMXE ","M2N9MMYE ","M2N9MMZE ","M2N9RAXE ","M2N9RAYE ","M2N9RAZE ", & - "M2N9RDXE ","M2N9RDYE ","M2N9RDZE ","M2N9TAXE ","M2N9TAYE ","M2N9TAZE ","M2N9TDXSS", & - "M2N9TDYSS","M2N9TDZSS","M3N1FKXE ","M3N1FKYE ","M3N1FKZE ","M3N1FMXE ","M3N1FMYE ", & - "M3N1FMZE ","M3N1MKXE ","M3N1MKYE ","M3N1MKZE ","M3N1MMXE ","M3N1MMYE ","M3N1MMZE ", & - "M3N1RAXE ","M3N1RAYE ","M3N1RAZE ","M3N1RDXE ","M3N1RDYE ","M3N1RDZE ","M3N1TAXE ", & - "M3N1TAYE ","M3N1TAZE ","M3N1TDXSS","M3N1TDYSS","M3N1TDZSS","M3N2FKXE ","M3N2FKYE ", & - "M3N2FKZE ","M3N2FMXE ","M3N2FMYE ","M3N2FMZE ","M3N2MKXE ","M3N2MKYE ","M3N2MKZE ", & - "M3N2MMXE ","M3N2MMYE ","M3N2MMZE ","M3N2RAXE ","M3N2RAYE ","M3N2RAZE ","M3N2RDXE ", & - "M3N2RDYE ","M3N2RDZE ","M3N2TAXE ","M3N2TAYE ","M3N2TAZE ","M3N2TDXSS","M3N2TDYSS", & - "M3N2TDZSS","M3N3FKXE ","M3N3FKYE ","M3N3FKZE ","M3N3FMXE ","M3N3FMYE ","M3N3FMZE ", & - "M3N3MKXE ","M3N3MKYE ","M3N3MKZE ","M3N3MMXE ","M3N3MMYE ","M3N3MMZE ","M3N3RAXE ", & - "M3N3RAYE ","M3N3RAZE ","M3N3RDXE ","M3N3RDYE ","M3N3RDZE ","M3N3TAXE ","M3N3TAYE ", & - "M3N3TAZE ","M3N3TDXSS","M3N3TDYSS","M3N3TDZSS","M3N4FKXE ","M3N4FKYE ","M3N4FKZE ", & - "M3N4FMXE ","M3N4FMYE ","M3N4FMZE ","M3N4MKXE ","M3N4MKYE ","M3N4MKZE ","M3N4MMXE ", & - "M3N4MMYE ","M3N4MMZE ","M3N4RAXE ","M3N4RAYE ","M3N4RAZE ","M3N4RDXE ","M3N4RDYE ", & - "M3N4RDZE ","M3N4TAXE ","M3N4TAYE ","M3N4TAZE ","M3N4TDXSS","M3N4TDYSS","M3N4TDZSS", & - "M3N5FKXE ","M3N5FKYE ","M3N5FKZE ","M3N5FMXE ","M3N5FMYE ","M3N5FMZE ","M3N5MKXE ", & - "M3N5MKYE ","M3N5MKZE ","M3N5MMXE ","M3N5MMYE ","M3N5MMZE ","M3N5RAXE ","M3N5RAYE ", & - "M3N5RAZE ","M3N5RDXE ","M3N5RDYE ","M3N5RDZE ","M3N5TAXE ","M3N5TAYE ","M3N5TAZE ", & - "M3N5TDXSS","M3N5TDYSS","M3N5TDZSS","M3N6FKXE ","M3N6FKYE ","M3N6FKZE ","M3N6FMXE ", & - "M3N6FMYE ","M3N6FMZE ","M3N6MKXE ","M3N6MKYE ","M3N6MKZE ","M3N6MMXE ","M3N6MMYE ", & - "M3N6MMZE ","M3N6RAXE ","M3N6RAYE ","M3N6RAZE ","M3N6RDXE ","M3N6RDYE ","M3N6RDZE ", & - "M3N6TAXE ","M3N6TAYE ","M3N6TAZE ","M3N6TDXSS","M3N6TDYSS","M3N6TDZSS","M3N7FKXE ", & - "M3N7FKYE ","M3N7FKZE ","M3N7FMXE ","M3N7FMYE ","M3N7FMZE ","M3N7MKXE ","M3N7MKYE ", & - "M3N7MKZE ","M3N7MMXE ","M3N7MMYE ","M3N7MMZE ","M3N7RAXE ","M3N7RAYE ","M3N7RAZE ", & - "M3N7RDXE ","M3N7RDYE ","M3N7RDZE ","M3N7TAXE ","M3N7TAYE ","M3N7TAZE ","M3N7TDXSS", & - "M3N7TDYSS","M3N7TDZSS","M3N8FKXE ","M3N8FKYE ","M3N8FKZE ","M3N8FMXE ","M3N8FMYE ", & - "M3N8FMZE ","M3N8MKXE ","M3N8MKYE ","M3N8MKZE ","M3N8MMXE ","M3N8MMYE ","M3N8MMZE ", & - "M3N8RAXE ","M3N8RAYE ","M3N8RAZE ","M3N8RDXE ","M3N8RDYE ","M3N8RDZE ","M3N8TAXE ", & - "M3N8TAYE ","M3N8TAZE ","M3N8TDXSS","M3N8TDYSS","M3N8TDZSS","M3N9FKXE ","M3N9FKYE ", & - "M3N9FKZE ","M3N9FMXE ","M3N9FMYE ","M3N9FMZE ","M3N9MKXE ","M3N9MKYE ","M3N9MKZE ", & - "M3N9MMXE ","M3N9MMYE ","M3N9MMZE ","M3N9RAXE ","M3N9RAYE ","M3N9RAZE ","M3N9RDXE ", & - "M3N9RDYE ","M3N9RDZE ","M3N9TAXE ","M3N9TAYE ","M3N9TAZE ","M3N9TDXSS","M3N9TDYSS", & - "M3N9TDZSS","M4N1FKXE ","M4N1FKYE ","M4N1FKZE ","M4N1FMXE ","M4N1FMYE ","M4N1FMZE ", & - "M4N1MKXE ","M4N1MKYE ","M4N1MKZE ","M4N1MMXE ","M4N1MMYE ","M4N1MMZE ","M4N1RAXE ", & - "M4N1RAYE ","M4N1RAZE ","M4N1RDXE ","M4N1RDYE ","M4N1RDZE ","M4N1TAXE ","M4N1TAYE ", & - "M4N1TAZE ","M4N1TDXSS","M4N1TDYSS","M4N1TDZSS","M4N2FKXE ","M4N2FKYE ","M4N2FKZE ", & - "M4N2FMXE ","M4N2FMYE ","M4N2FMZE ","M4N2MKXE ","M4N2MKYE ","M4N2MKZE ","M4N2MMXE ", & - "M4N2MMYE ","M4N2MMZE ","M4N2RAXE ","M4N2RAYE ","M4N2RAZE ","M4N2RDXE ","M4N2RDYE ", & - "M4N2RDZE ","M4N2TAXE ","M4N2TAYE ","M4N2TAZE ","M4N2TDXSS","M4N2TDYSS","M4N2TDZSS", & - "M4N3FKXE ","M4N3FKYE ","M4N3FKZE ","M4N3FMXE ","M4N3FMYE ","M4N3FMZE ","M4N3MKXE ", & - "M4N3MKYE ","M4N3MKZE ","M4N3MMXE ","M4N3MMYE ","M4N3MMZE ","M4N3RAXE ","M4N3RAYE ", & - "M4N3RAZE ","M4N3RDXE ","M4N3RDYE ","M4N3RDZE ","M4N3TAXE ","M4N3TAYE ","M4N3TAZE ", & - "M4N3TDXSS","M4N3TDYSS","M4N3TDZSS","M4N4FKXE ","M4N4FKYE ","M4N4FKZE ","M4N4FMXE ", & - "M4N4FMYE ","M4N4FMZE ","M4N4MKXE ","M4N4MKYE ","M4N4MKZE ","M4N4MMXE ","M4N4MMYE ", & - "M4N4MMZE ","M4N4RAXE ","M4N4RAYE ","M4N4RAZE ","M4N4RDXE ","M4N4RDYE ","M4N4RDZE ", & - "M4N4TAXE ","M4N4TAYE ","M4N4TAZE ","M4N4TDXSS","M4N4TDYSS","M4N4TDZSS","M4N5FKXE ", & - "M4N5FKYE ","M4N5FKZE ","M4N5FMXE ","M4N5FMYE ","M4N5FMZE ","M4N5MKXE ","M4N5MKYE ", & - "M4N5MKZE ","M4N5MMXE ","M4N5MMYE ","M4N5MMZE ","M4N5RAXE ","M4N5RAYE ","M4N5RAZE ", & - "M4N5RDXE ","M4N5RDYE ","M4N5RDZE ","M4N5TAXE ","M4N5TAYE ","M4N5TAZE ","M4N5TDXSS", & - "M4N5TDYSS","M4N5TDZSS","M4N6FKXE ","M4N6FKYE ","M4N6FKZE ","M4N6FMXE ","M4N6FMYE ", & - "M4N6FMZE ","M4N6MKXE ","M4N6MKYE ","M4N6MKZE ","M4N6MMXE ","M4N6MMYE ","M4N6MMZE ", & - "M4N6RAXE ","M4N6RAYE ","M4N6RAZE ","M4N6RDXE ","M4N6RDYE ","M4N6RDZE ","M4N6TAXE ", & - "M4N6TAYE ","M4N6TAZE ","M4N6TDXSS","M4N6TDYSS","M4N6TDZSS","M4N7FKXE ","M4N7FKYE ", & - "M4N7FKZE ","M4N7FMXE ","M4N7FMYE ","M4N7FMZE ","M4N7MKXE ","M4N7MKYE ","M4N7MKZE ", & - "M4N7MMXE ","M4N7MMYE ","M4N7MMZE ","M4N7RAXE ","M4N7RAYE ","M4N7RAZE ","M4N7RDXE ", & - "M4N7RDYE ","M4N7RDZE ","M4N7TAXE ","M4N7TAYE ","M4N7TAZE ","M4N7TDXSS","M4N7TDYSS", & - "M4N7TDZSS","M4N8FKXE ","M4N8FKYE ","M4N8FKZE ","M4N8FMXE ","M4N8FMYE ","M4N8FMZE ", & - "M4N8MKXE ","M4N8MKYE ","M4N8MKZE ","M4N8MMXE ","M4N8MMYE ","M4N8MMZE ","M4N8RAXE ", & - "M4N8RAYE ","M4N8RAZE ","M4N8RDXE ","M4N8RDYE ","M4N8RDZE ","M4N8TAXE ","M4N8TAYE ", & - "M4N8TAZE ","M4N8TDXSS","M4N8TDYSS","M4N8TDZSS","M4N9FKXE ","M4N9FKYE ","M4N9FKZE ", & - "M4N9FMXE ","M4N9FMYE ","M4N9FMZE ","M4N9MKXE ","M4N9MKYE ","M4N9MKZE ","M4N9MMXE ", & - "M4N9MMYE ","M4N9MMZE ","M4N9RAXE ","M4N9RAYE ","M4N9RAZE ","M4N9RDXE ","M4N9RDYE ", & - "M4N9RDZE ","M4N9TAXE ","M4N9TAYE ","M4N9TAZE ","M4N9TDXSS","M4N9TDYSS","M4N9TDZSS", & - "M5N1FKXE ","M5N1FKYE ","M5N1FKZE ","M5N1FMXE ","M5N1FMYE ","M5N1FMZE ","M5N1MKXE ", & - "M5N1MKYE ","M5N1MKZE ","M5N1MMXE ","M5N1MMYE ","M5N1MMZE ","M5N1RAXE ","M5N1RAYE ", & - "M5N1RAZE ","M5N1RDXE ","M5N1RDYE ","M5N1RDZE ","M5N1TAXE ","M5N1TAYE ","M5N1TAZE ", & - "M5N1TDXSS","M5N1TDYSS","M5N1TDZSS","M5N2FKXE ","M5N2FKYE ","M5N2FKZE ","M5N2FMXE ", & - "M5N2FMYE ","M5N2FMZE ","M5N2MKXE ","M5N2MKYE ","M5N2MKZE ","M5N2MMXE ","M5N2MMYE ", & - "M5N2MMZE ","M5N2RAXE ","M5N2RAYE ","M5N2RAZE ","M5N2RDXE ","M5N2RDYE ","M5N2RDZE ", & - "M5N2TAXE ","M5N2TAYE ","M5N2TAZE ","M5N2TDXSS","M5N2TDYSS","M5N2TDZSS","M5N3FKXE ", & - "M5N3FKYE ","M5N3FKZE ","M5N3FMXE ","M5N3FMYE ","M5N3FMZE ","M5N3MKXE ","M5N3MKYE ", & - "M5N3MKZE ","M5N3MMXE ","M5N3MMYE ","M5N3MMZE ","M5N3RAXE ","M5N3RAYE ","M5N3RAZE ", & - "M5N3RDXE ","M5N3RDYE ","M5N3RDZE ","M5N3TAXE ","M5N3TAYE ","M5N3TAZE ","M5N3TDXSS", & - "M5N3TDYSS","M5N3TDZSS","M5N4FKXE ","M5N4FKYE ","M5N4FKZE ","M5N4FMXE ","M5N4FMYE ", & - "M5N4FMZE ","M5N4MKXE ","M5N4MKYE ","M5N4MKZE ","M5N4MMXE ","M5N4MMYE ","M5N4MMZE ", & - "M5N4RAXE ","M5N4RAYE ","M5N4RAZE ","M5N4RDXE ","M5N4RDYE ","M5N4RDZE ","M5N4TAXE ", & - "M5N4TAYE ","M5N4TAZE ","M5N4TDXSS","M5N4TDYSS","M5N4TDZSS","M5N5FKXE ","M5N5FKYE ", & - "M5N5FKZE ","M5N5FMXE ","M5N5FMYE ","M5N5FMZE ","M5N5MKXE ","M5N5MKYE ","M5N5MKZE ", & - "M5N5MMXE ","M5N5MMYE ","M5N5MMZE ","M5N5RAXE ","M5N5RAYE ","M5N5RAZE ","M5N5RDXE ", & - "M5N5RDYE ","M5N5RDZE ","M5N5TAXE ","M5N5TAYE ","M5N5TAZE ","M5N5TDXSS","M5N5TDYSS", & - "M5N5TDZSS","M5N6FKXE ","M5N6FKYE ","M5N6FKZE ","M5N6FMXE ","M5N6FMYE ","M5N6FMZE ", & - "M5N6MKXE ","M5N6MKYE ","M5N6MKZE ","M5N6MMXE ","M5N6MMYE ","M5N6MMZE ","M5N6RAXE ", & - "M5N6RAYE ","M5N6RAZE ","M5N6RDXE ","M5N6RDYE ","M5N6RDZE ","M5N6TAXE ","M5N6TAYE ", & - "M5N6TAZE ","M5N6TDXSS","M5N6TDYSS","M5N6TDZSS","M5N7FKXE ","M5N7FKYE ","M5N7FKZE ", & - "M5N7FMXE ","M5N7FMYE ","M5N7FMZE ","M5N7MKXE ","M5N7MKYE ","M5N7MKZE ","M5N7MMXE ", & - "M5N7MMYE ","M5N7MMZE ","M5N7RAXE ","M5N7RAYE ","M5N7RAZE ","M5N7RDXE ","M5N7RDYE ", & - "M5N7RDZE ","M5N7TAXE ","M5N7TAYE ","M5N7TAZE ","M5N7TDXSS","M5N7TDYSS","M5N7TDZSS", & - "M5N8FKXE ","M5N8FKYE ","M5N8FKZE ","M5N8FMXE ","M5N8FMYE ","M5N8FMZE ","M5N8MKXE ", & - "M5N8MKYE ","M5N8MKZE ","M5N8MMXE ","M5N8MMYE ","M5N8MMZE ","M5N8RAXE ","M5N8RAYE ", & - "M5N8RAZE ","M5N8RDXE ","M5N8RDYE ","M5N8RDZE ","M5N8TAXE ","M5N8TAYE ","M5N8TAZE ", & - "M5N8TDXSS","M5N8TDYSS","M5N8TDZSS","M5N9FKXE ","M5N9FKYE ","M5N9FKZE ","M5N9FMXE ", & - "M5N9FMYE ","M5N9FMZE ","M5N9MKXE ","M5N9MKYE ","M5N9MKZE ","M5N9MMXE ","M5N9MMYE ", & - "M5N9MMZE ","M5N9RAXE ","M5N9RAYE ","M5N9RAZE ","M5N9RDXE ","M5N9RDYE ","M5N9RDZE ", & - "M5N9TAXE ","M5N9TAYE ","M5N9TAZE ","M5N9TDXSS","M5N9TDYSS","M5N9TDZSS","M6N1FKXE ", & - "M6N1FKYE ","M6N1FKZE ","M6N1FMXE ","M6N1FMYE ","M6N1FMZE ","M6N1MKXE ","M6N1MKYE ", & - "M6N1MKZE ","M6N1MMXE ","M6N1MMYE ","M6N1MMZE ","M6N1RAXE ","M6N1RAYE ","M6N1RAZE ", & - "M6N1RDXE ","M6N1RDYE ","M6N1RDZE ","M6N1TAXE ","M6N1TAYE ","M6N1TAZE ","M6N1TDXSS", & - "M6N1TDYSS","M6N1TDZSS","M6N2FKXE ","M6N2FKYE ","M6N2FKZE ","M6N2FMXE ","M6N2FMYE ", & - "M6N2FMZE ","M6N2MKXE ","M6N2MKYE ","M6N2MKZE ","M6N2MMXE ","M6N2MMYE ","M6N2MMZE ", & - "M6N2RAXE ","M6N2RAYE ","M6N2RAZE ","M6N2RDXE ","M6N2RDYE ","M6N2RDZE ","M6N2TAXE ", & - "M6N2TAYE ","M6N2TAZE ","M6N2TDXSS","M6N2TDYSS","M6N2TDZSS","M6N3FKXE ","M6N3FKYE ", & - "M6N3FKZE ","M6N3FMXE ","M6N3FMYE ","M6N3FMZE ","M6N3MKXE ","M6N3MKYE ","M6N3MKZE ", & - "M6N3MMXE ","M6N3MMYE ","M6N3MMZE ","M6N3RAXE ","M6N3RAYE ","M6N3RAZE ","M6N3RDXE ", & - "M6N3RDYE ","M6N3RDZE ","M6N3TAXE ","M6N3TAYE ","M6N3TAZE ","M6N3TDXSS","M6N3TDYSS", & - "M6N3TDZSS","M6N4FKXE ","M6N4FKYE ","M6N4FKZE ","M6N4FMXE ","M6N4FMYE ","M6N4FMZE ", & - "M6N4MKXE ","M6N4MKYE ","M6N4MKZE ","M6N4MMXE ","M6N4MMYE ","M6N4MMZE ","M6N4RAXE ", & - "M6N4RAYE ","M6N4RAZE ","M6N4RDXE ","M6N4RDYE ","M6N4RDZE ","M6N4TAXE ","M6N4TAYE ", & - "M6N4TAZE ","M6N4TDXSS","M6N4TDYSS","M6N4TDZSS","M6N5FKXE ","M6N5FKYE ","M6N5FKZE ", & - "M6N5FMXE ","M6N5FMYE ","M6N5FMZE ","M6N5MKXE ","M6N5MKYE ","M6N5MKZE ","M6N5MMXE ", & - "M6N5MMYE ","M6N5MMZE ","M6N5RAXE ","M6N5RAYE ","M6N5RAZE ","M6N5RDXE ","M6N5RDYE ", & - "M6N5RDZE ","M6N5TAXE ","M6N5TAYE ","M6N5TAZE ","M6N5TDXSS","M6N5TDYSS","M6N5TDZSS", & - "M6N6FKXE ","M6N6FKYE ","M6N6FKZE ","M6N6FMXE ","M6N6FMYE ","M6N6FMZE ","M6N6MKXE ", & - "M6N6MKYE ","M6N6MKZE ","M6N6MMXE ","M6N6MMYE ","M6N6MMZE ","M6N6RAXE ","M6N6RAYE ", & - "M6N6RAZE ","M6N6RDXE ","M6N6RDYE ","M6N6RDZE ","M6N6TAXE ","M6N6TAYE ","M6N6TAZE ", & - "M6N6TDXSS","M6N6TDYSS","M6N6TDZSS","M6N7FKXE ","M6N7FKYE ","M6N7FKZE ","M6N7FMXE ", & - "M6N7FMYE ","M6N7FMZE ","M6N7MKXE ","M6N7MKYE ","M6N7MKZE ","M6N7MMXE ","M6N7MMYE ", & - "M6N7MMZE ","M6N7RAXE ","M6N7RAYE ","M6N7RAZE ","M6N7RDXE ","M6N7RDYE ","M6N7RDZE ", & - "M6N7TAXE ","M6N7TAYE ","M6N7TAZE ","M6N7TDXSS","M6N7TDYSS","M6N7TDZSS","M6N8FKXE ", & - "M6N8FKYE ","M6N8FKZE ","M6N8FMXE ","M6N8FMYE ","M6N8FMZE ","M6N8MKXE ","M6N8MKYE ", & - "M6N8MKZE ","M6N8MMXE ","M6N8MMYE ","M6N8MMZE ","M6N8RAXE ","M6N8RAYE ","M6N8RAZE ", & - "M6N8RDXE ","M6N8RDYE ","M6N8RDZE ","M6N8TAXE ","M6N8TAYE ","M6N8TAZE ","M6N8TDXSS", & - "M6N8TDYSS","M6N8TDZSS","M6N9FKXE ","M6N9FKYE ","M6N9FKZE ","M6N9FMXE ","M6N9FMYE ", & - "M6N9FMZE ","M6N9MKXE ","M6N9MKYE ","M6N9MKZE ","M6N9MMXE ","M6N9MMYE ","M6N9MMZE ", & - "M6N9RAXE ","M6N9RAYE ","M6N9RAZE ","M6N9RDXE ","M6N9RDYE ","M6N9RDZE ","M6N9TAXE ", & - "M6N9TAYE ","M6N9TAZE ","M6N9TDXSS","M6N9TDYSS","M6N9TDZSS","M7N1FKXE ","M7N1FKYE ", & - "M7N1FKZE ","M7N1FMXE ","M7N1FMYE ","M7N1FMZE ","M7N1MKXE ","M7N1MKYE ","M7N1MKZE ", & - "M7N1MMXE ","M7N1MMYE ","M7N1MMZE ","M7N1RAXE ","M7N1RAYE ","M7N1RAZE ","M7N1RDXE ", & - "M7N1RDYE ","M7N1RDZE ","M7N1TAXE ","M7N1TAYE ","M7N1TAZE ","M7N1TDXSS","M7N1TDYSS", & - "M7N1TDZSS","M7N2FKXE ","M7N2FKYE ","M7N2FKZE ","M7N2FMXE ","M7N2FMYE ","M7N2FMZE ", & - "M7N2MKXE ","M7N2MKYE ","M7N2MKZE ","M7N2MMXE ","M7N2MMYE ","M7N2MMZE ","M7N2RAXE ", & - "M7N2RAYE ","M7N2RAZE ","M7N2RDXE ","M7N2RDYE ","M7N2RDZE ","M7N2TAXE ","M7N2TAYE ", & - "M7N2TAZE ","M7N2TDXSS","M7N2TDYSS","M7N2TDZSS","M7N3FKXE ","M7N3FKYE ","M7N3FKZE ", & - "M7N3FMXE ","M7N3FMYE ","M7N3FMZE ","M7N3MKXE ","M7N3MKYE ","M7N3MKZE ","M7N3MMXE ", & - "M7N3MMYE ","M7N3MMZE ","M7N3RAXE ","M7N3RAYE ","M7N3RAZE ","M7N3RDXE ","M7N3RDYE ", & - "M7N3RDZE ","M7N3TAXE ","M7N3TAYE ","M7N3TAZE ","M7N3TDXSS","M7N3TDYSS","M7N3TDZSS", & - "M7N4FKXE ","M7N4FKYE ","M7N4FKZE ","M7N4FMXE ","M7N4FMYE ","M7N4FMZE ","M7N4MKXE ", & - "M7N4MKYE ","M7N4MKZE ","M7N4MMXE ","M7N4MMYE ","M7N4MMZE ","M7N4RAXE ","M7N4RAYE ", & - "M7N4RAZE ","M7N4RDXE ","M7N4RDYE ","M7N4RDZE ","M7N4TAXE ","M7N4TAYE ","M7N4TAZE ", & - "M7N4TDXSS","M7N4TDYSS","M7N4TDZSS","M7N5FKXE ","M7N5FKYE ","M7N5FKZE ","M7N5FMXE ", & - "M7N5FMYE ","M7N5FMZE ","M7N5MKXE ","M7N5MKYE ","M7N5MKZE ","M7N5MMXE ","M7N5MMYE ", & - "M7N5MMZE ","M7N5RAXE ","M7N5RAYE ","M7N5RAZE ","M7N5RDXE ","M7N5RDYE ","M7N5RDZE ", & - "M7N5TAXE ","M7N5TAYE ","M7N5TAZE ","M7N5TDXSS","M7N5TDYSS","M7N5TDZSS","M7N6FKXE ", & - "M7N6FKYE ","M7N6FKZE ","M7N6FMXE ","M7N6FMYE ","M7N6FMZE ","M7N6MKXE ","M7N6MKYE ", & - "M7N6MKZE ","M7N6MMXE ","M7N6MMYE ","M7N6MMZE ","M7N6RAXE ","M7N6RAYE ","M7N6RAZE ", & - "M7N6RDXE ","M7N6RDYE ","M7N6RDZE ","M7N6TAXE ","M7N6TAYE ","M7N6TAZE ","M7N6TDXSS", & - "M7N6TDYSS","M7N6TDZSS","M7N7FKXE ","M7N7FKYE ","M7N7FKZE ","M7N7FMXE ","M7N7FMYE ", & - "M7N7FMZE ","M7N7MKXE ","M7N7MKYE ","M7N7MKZE ","M7N7MMXE ","M7N7MMYE ","M7N7MMZE ", & - "M7N7RAXE ","M7N7RAYE ","M7N7RAZE ","M7N7RDXE ","M7N7RDYE ","M7N7RDZE ","M7N7TAXE ", & - "M7N7TAYE ","M7N7TAZE ","M7N7TDXSS","M7N7TDYSS","M7N7TDZSS","M7N8FKXE ","M7N8FKYE ", & - "M7N8FKZE ","M7N8FMXE ","M7N8FMYE ","M7N8FMZE ","M7N8MKXE ","M7N8MKYE ","M7N8MKZE ", & - "M7N8MMXE ","M7N8MMYE ","M7N8MMZE ","M7N8RAXE ","M7N8RAYE ","M7N8RAZE ","M7N8RDXE ", & - "M7N8RDYE ","M7N8RDZE ","M7N8TAXE ","M7N8TAYE ","M7N8TAZE ","M7N8TDXSS","M7N8TDYSS", & - "M7N8TDZSS","M7N9FKXE ","M7N9FKYE ","M7N9FKZE ","M7N9FMXE ","M7N9FMYE ","M7N9FMZE ", & - "M7N9MKXE ","M7N9MKYE ","M7N9MKZE ","M7N9MMXE ","M7N9MMYE ","M7N9MMZE ","M7N9RAXE ", & - "M7N9RAYE ","M7N9RAZE ","M7N9RDXE ","M7N9RDYE ","M7N9RDZE ","M7N9TAXE ","M7N9TAYE ", & - "M7N9TAZE ","M7N9TDXSS","M7N9TDYSS","M7N9TDZSS","M8N1FKXE ","M8N1FKYE ","M8N1FKZE ", & - "M8N1FMXE ","M8N1FMYE ","M8N1FMZE ","M8N1MKXE ","M8N1MKYE ","M8N1MKZE ","M8N1MMXE ", & - "M8N1MMYE ","M8N1MMZE ","M8N1RAXE ","M8N1RAYE ","M8N1RAZE ","M8N1RDXE ","M8N1RDYE ", & - "M8N1RDZE ","M8N1TAXE ","M8N1TAYE ","M8N1TAZE ","M8N1TDXSS","M8N1TDYSS","M8N1TDZSS", & - "M8N2FKXE ","M8N2FKYE ","M8N2FKZE ","M8N2FMXE ","M8N2FMYE ","M8N2FMZE ","M8N2MKXE ", & - "M8N2MKYE ","M8N2MKZE ","M8N2MMXE ","M8N2MMYE ","M8N2MMZE ","M8N2RAXE ","M8N2RAYE ", & - "M8N2RAZE ","M8N2RDXE ","M8N2RDYE ","M8N2RDZE ","M8N2TAXE ","M8N2TAYE ","M8N2TAZE ", & - "M8N2TDXSS","M8N2TDYSS","M8N2TDZSS","M8N3FKXE ","M8N3FKYE ","M8N3FKZE ","M8N3FMXE ", & - "M8N3FMYE ","M8N3FMZE ","M8N3MKXE ","M8N3MKYE ","M8N3MKZE ","M8N3MMXE ","M8N3MMYE ", & - "M8N3MMZE ","M8N3RAXE ","M8N3RAYE ","M8N3RAZE ","M8N3RDXE ","M8N3RDYE ","M8N3RDZE ", & - "M8N3TAXE ","M8N3TAYE ","M8N3TAZE ","M8N3TDXSS","M8N3TDYSS","M8N3TDZSS","M8N4FKXE ", & - "M8N4FKYE ","M8N4FKZE ","M8N4FMXE ","M8N4FMYE ","M8N4FMZE ","M8N4MKXE ","M8N4MKYE ", & - "M8N4MKZE ","M8N4MMXE ","M8N4MMYE ","M8N4MMZE ","M8N4RAXE ","M8N4RAYE ","M8N4RAZE ", & - "M8N4RDXE ","M8N4RDYE ","M8N4RDZE ","M8N4TAXE ","M8N4TAYE ","M8N4TAZE ","M8N4TDXSS", & - "M8N4TDYSS","M8N4TDZSS","M8N5FKXE ","M8N5FKYE ","M8N5FKZE ","M8N5FMXE ","M8N5FMYE ", & - "M8N5FMZE ","M8N5MKXE ","M8N5MKYE ","M8N5MKZE ","M8N5MMXE ","M8N5MMYE ","M8N5MMZE ", & - "M8N5RAXE ","M8N5RAYE ","M8N5RAZE ","M8N5RDXE ","M8N5RDYE ","M8N5RDZE ","M8N5TAXE ", & - "M8N5TAYE ","M8N5TAZE ","M8N5TDXSS","M8N5TDYSS","M8N5TDZSS","M8N6FKXE ","M8N6FKYE ", & - "M8N6FKZE ","M8N6FMXE ","M8N6FMYE ","M8N6FMZE ","M8N6MKXE ","M8N6MKYE ","M8N6MKZE ", & - "M8N6MMXE ","M8N6MMYE ","M8N6MMZE ","M8N6RAXE ","M8N6RAYE ","M8N6RAZE ","M8N6RDXE ", & - "M8N6RDYE ","M8N6RDZE ","M8N6TAXE ","M8N6TAYE ","M8N6TAZE ","M8N6TDXSS","M8N6TDYSS", & - "M8N6TDZSS","M8N7FKXE ","M8N7FKYE ","M8N7FKZE ","M8N7FMXE ","M8N7FMYE ","M8N7FMZE ", & - "M8N7MKXE ","M8N7MKYE ","M8N7MKZE ","M8N7MMXE ","M8N7MMYE ","M8N7MMZE ","M8N7RAXE ", & - "M8N7RAYE ","M8N7RAZE ","M8N7RDXE ","M8N7RDYE ","M8N7RDZE ","M8N7TAXE ","M8N7TAYE ", & - "M8N7TAZE ","M8N7TDXSS","M8N7TDYSS","M8N7TDZSS","M8N8FKXE ","M8N8FKYE ","M8N8FKZE ", & - "M8N8FMXE ","M8N8FMYE ","M8N8FMZE ","M8N8MKXE ","M8N8MKYE ","M8N8MKZE ","M8N8MMXE ", & - "M8N8MMYE ","M8N8MMZE ","M8N8RAXE ","M8N8RAYE ","M8N8RAZE ","M8N8RDXE ","M8N8RDYE ", & - "M8N8RDZE ","M8N8TAXE ","M8N8TAYE ","M8N8TAZE ","M8N8TDXSS","M8N8TDYSS","M8N8TDZSS", & - "M8N9FKXE ","M8N9FKYE ","M8N9FKZE ","M8N9FMXE ","M8N9FMYE ","M8N9FMZE ","M8N9MKXE ", & - "M8N9MKYE ","M8N9MKZE ","M8N9MMXE ","M8N9MMYE ","M8N9MMZE ","M8N9RAXE ","M8N9RAYE ", & - "M8N9RAZE ","M8N9RDXE ","M8N9RDYE ","M8N9RDZE ","M8N9TAXE ","M8N9TAYE ","M8N9TAZE ", & - "M8N9TDXSS","M8N9TDYSS","M8N9TDZSS","M9N1FKXE ","M9N1FKYE ","M9N1FKZE ","M9N1FMXE ", & - "M9N1FMYE ","M9N1FMZE ","M9N1MKXE ","M9N1MKYE ","M9N1MKZE ","M9N1MMXE ","M9N1MMYE ", & - "M9N1MMZE ","M9N1RAXE ","M9N1RAYE ","M9N1RAZE ","M9N1RDXE ","M9N1RDYE ","M9N1RDZE ", & - "M9N1TAXE ","M9N1TAYE ","M9N1TAZE ","M9N1TDXSS","M9N1TDYSS","M9N1TDZSS","M9N2FKXE ", & - "M9N2FKYE ","M9N2FKZE ","M9N2FMXE ","M9N2FMYE ","M9N2FMZE ","M9N2MKXE ","M9N2MKYE ", & - "M9N2MKZE ","M9N2MMXE ","M9N2MMYE ","M9N2MMZE ","M9N2RAXE ","M9N2RAYE ","M9N2RAZE ", & - "M9N2RDXE ","M9N2RDYE ","M9N2RDZE ","M9N2TAXE ","M9N2TAYE ","M9N2TAZE ","M9N2TDXSS", & - "M9N2TDYSS","M9N2TDZSS","M9N3FKXE ","M9N3FKYE ","M9N3FKZE ","M9N3FMXE ","M9N3FMYE ", & - "M9N3FMZE ","M9N3MKXE ","M9N3MKYE ","M9N3MKZE ","M9N3MMXE ","M9N3MMYE ","M9N3MMZE ", & - "M9N3RAXE ","M9N3RAYE ","M9N3RAZE ","M9N3RDXE ","M9N3RDYE ","M9N3RDZE ","M9N3TAXE ", & - "M9N3TAYE ","M9N3TAZE ","M9N3TDXSS","M9N3TDYSS","M9N3TDZSS","M9N4FKXE ","M9N4FKYE ", & - "M9N4FKZE ","M9N4FMXE ","M9N4FMYE ","M9N4FMZE ","M9N4MKXE ","M9N4MKYE ","M9N4MKZE ", & - "M9N4MMXE ","M9N4MMYE ","M9N4MMZE ","M9N4RAXE ","M9N4RAYE ","M9N4RAZE ","M9N4RDXE ", & - "M9N4RDYE ","M9N4RDZE ","M9N4TAXE ","M9N4TAYE ","M9N4TAZE ","M9N4TDXSS","M9N4TDYSS", & - "M9N4TDZSS","M9N5FKXE ","M9N5FKYE ","M9N5FKZE ","M9N5FMXE ","M9N5FMYE ","M9N5FMZE ", & - "M9N5MKXE ","M9N5MKYE ","M9N5MKZE ","M9N5MMXE ","M9N5MMYE ","M9N5MMZE ","M9N5RAXE ", & - "M9N5RAYE ","M9N5RAZE ","M9N5RDXE ","M9N5RDYE ","M9N5RDZE ","M9N5TAXE ","M9N5TAYE ", & - "M9N5TAZE ","M9N5TDXSS","M9N5TDYSS","M9N5TDZSS","M9N6FKXE ","M9N6FKYE ","M9N6FKZE ", & - "M9N6FMXE ","M9N6FMYE ","M9N6FMZE ","M9N6MKXE ","M9N6MKYE ","M9N6MKZE ","M9N6MMXE ", & - "M9N6MMYE ","M9N6MMZE ","M9N6RAXE ","M9N6RAYE ","M9N6RAZE ","M9N6RDXE ","M9N6RDYE ", & - "M9N6RDZE ","M9N6TAXE ","M9N6TAYE ","M9N6TAZE ","M9N6TDXSS","M9N6TDYSS","M9N6TDZSS", & - "M9N7FKXE ","M9N7FKYE ","M9N7FKZE ","M9N7FMXE ","M9N7FMYE ","M9N7FMZE ","M9N7MKXE ", & - "M9N7MKYE ","M9N7MKZE ","M9N7MMXE ","M9N7MMYE ","M9N7MMZE ","M9N7RAXE ","M9N7RAYE ", & - "M9N7RAZE ","M9N7RDXE ","M9N7RDYE ","M9N7RDZE ","M9N7TAXE ","M9N7TAYE ","M9N7TAZE ", & - "M9N7TDXSS","M9N7TDYSS","M9N7TDZSS","M9N8FKXE ","M9N8FKYE ","M9N8FKZE ","M9N8FMXE ", & - "M9N8FMYE ","M9N8FMZE ","M9N8MKXE ","M9N8MKYE ","M9N8MKZE ","M9N8MMXE ","M9N8MMYE ", & - "M9N8MMZE ","M9N8RAXE ","M9N8RAYE ","M9N8RAZE ","M9N8RDXE ","M9N8RDYE ","M9N8RDZE ", & - "M9N8TAXE ","M9N8TAYE ","M9N8TAZE ","M9N8TDXSS","M9N8TDYSS","M9N8TDZSS","M9N9FKXE ", & - "M9N9FKYE ","M9N9FKZE ","M9N9FMXE ","M9N9FMYE ","M9N9FMZE ","M9N9MKXE ","M9N9MKYE ", & - "M9N9MKZE ","M9N9MMXE ","M9N9MMYE ","M9N9MMZE ","M9N9RAXE ","M9N9RAYE ","M9N9RAZE ", & - "M9N9RDXE ","M9N9RDYE ","M9N9RDZE ","M9N9TAXE ","M9N9TAYE ","M9N9TAZE ","M9N9TDXSS", & - "M9N9TDYSS","M9N9TDZSS","REACTFXSS","REACTFYSS","REACTFZSS","REACTMXSS","REACTMYSS", & - "REACTMZSS","SSQM01 ","SSQM02 ","SSQM03 ","SSQM04 ","SSQM05 ","SSQM06 ", & - "SSQM07 ","SSQM08 ","SSQM09 ","SSQM10 ","SSQM11 ","SSQM12 ","SSQM13 ", & - "SSQM14 ","SSQM15 ","SSQM16 ","SSQM17 ","SSQM18 ","SSQM19 ","SSQM20 ", & - "SSQM21 ","SSQM22 ","SSQM23 ","SSQM24 ","SSQM25 ","SSQM26 ","SSQM27 ", & - "SSQM28 ","SSQM29 ","SSQM30 ","SSQM31 ","SSQM32 ","SSQM33 ","SSQM34 ", & - "SSQM35 ","SSQM36 ","SSQM37 ","SSQM38 ","SSQM39 ","SSQM40 ","SSQM41 ", & - "SSQM42 ","SSQM43 ","SSQM44 ","SSQM45 ","SSQM46 ","SSQM47 ","SSQM48 ", & - "SSQM49 ","SSQM50 ","SSQM51 ","SSQM52 ","SSQM53 ","SSQM54 ","SSQM55 ", & - "SSQM56 ","SSQM57 ","SSQM58 ","SSQM59 ","SSQM60 ","SSQM61 ","SSQM62 ", & - "SSQM63 ","SSQM64 ","SSQM65 ","SSQM66 ","SSQM67 ","SSQM68 ","SSQM69 ", & - "SSQM70 ","SSQM71 ","SSQM72 ","SSQM73 ","SSQM74 ","SSQM75 ","SSQM76 ", & - "SSQM77 ","SSQM78 ","SSQM79 ","SSQM80 ","SSQM81 ","SSQM82 ","SSQM83 ", & - "SSQM84 ","SSQM85 ","SSQM86 ","SSQM87 ","SSQM88 ","SSQM89 ","SSQM90 ", & - "SSQM91 ","SSQM92 ","SSQM93 ","SSQM94 ","SSQM95 ","SSQM96 ","SSQM97 ", & - "SSQM98 ","SSQM99 ","SSQMD01 ","SSQMD02 ","SSQMD03 ","SSQMD04 ","SSQMD05 ", & - "SSQMD06 ","SSQMD07 ","SSQMD08 ","SSQMD09 ","SSQMD10 ","SSQMD11 ","SSQMD12 ", & - "SSQMD13 ","SSQMD14 ","SSQMD15 ","SSQMD16 ","SSQMD17 ","SSQMD18 ","SSQMD19 ", & - "SSQMD20 ","SSQMD21 ","SSQMD22 ","SSQMD23 ","SSQMD24 ","SSQMD25 ","SSQMD26 ", & - "SSQMD27 ","SSQMD28 ","SSQMD29 ","SSQMD30 ","SSQMD31 ","SSQMD32 ","SSQMD33 ", & - "SSQMD34 ","SSQMD35 ","SSQMD36 ","SSQMD37 ","SSQMD38 ","SSQMD39 ","SSQMD40 ", & - "SSQMD41 ","SSQMD42 ","SSQMD43 ","SSQMD44 ","SSQMD45 ","SSQMD46 ","SSQMD47 ", & - "SSQMD48 ","SSQMD49 ","SSQMD50 ","SSQMD51 ","SSQMD52 ","SSQMD53 ","SSQMD54 ", & - "SSQMD55 ","SSQMD56 ","SSQMD57 ","SSQMD58 ","SSQMD59 ","SSQMD60 ","SSQMD61 ", & - "SSQMD62 ","SSQMD63 ","SSQMD64 ","SSQMD65 ","SSQMD66 ","SSQMD67 ","SSQMD68 ", & - "SSQMD69 ","SSQMD70 ","SSQMD71 ","SSQMD72 ","SSQMD73 ","SSQMD74 ","SSQMD75 ", & - "SSQMD76 ","SSQMD77 ","SSQMD78 ","SSQMD79 ","SSQMD80 ","SSQMD81 ","SSQMD82 ", & - "SSQMD83 ","SSQMD84 ","SSQMD85 ","SSQMD86 ","SSQMD87 ","SSQMD88 ","SSQMD89 ", & - "SSQMD90 ","SSQMD91 ","SSQMD92 ","SSQMD93 ","SSQMD94 ","SSQMD95 ","SSQMD96 ", & - "SSQMD97 ","SSQMD98 ","SSQMD99 ","SSQMDD01 ","SSQMDD02 ","SSQMDD03 ","SSQMDD04 ", & - "SSQMDD05 ","SSQMDD06 ","SSQMDD07 ","SSQMDD08 ","SSQMDD09 ","SSQMDD10 ","SSQMDD11 ", & - "SSQMDD12 ","SSQMDD13 ","SSQMDD14 ","SSQMDD15 ","SSQMDD16 ","SSQMDD17 ","SSQMDD18 ", & - "SSQMDD19 ","SSQMDD20 ","SSQMDD21 ","SSQMDD22 ","SSQMDD23 ","SSQMDD24 ","SSQMDD25 ", & - "SSQMDD26 ","SSQMDD27 ","SSQMDD28 ","SSQMDD29 ","SSQMDD30 ","SSQMDD31 ","SSQMDD32 ", & - "SSQMDD33 ","SSQMDD34 ","SSQMDD35 ","SSQMDD36 ","SSQMDD37 ","SSQMDD38 ","SSQMDD39 ", & - "SSQMDD40 ","SSQMDD41 ","SSQMDD42 ","SSQMDD43 ","SSQMDD44 ","SSQMDD45 ","SSQMDD46 ", & - "SSQMDD47 ","SSQMDD48 ","SSQMDD49 ","SSQMDD50 ","SSQMDD51 ","SSQMDD52 ","SSQMDD53 ", & - "SSQMDD54 ","SSQMDD55 ","SSQMDD56 ","SSQMDD57 ","SSQMDD58 ","SSQMDD59 ","SSQMDD60 ", & - "SSQMDD61 ","SSQMDD62 ","SSQMDD63 ","SSQMDD64 ","SSQMDD65 ","SSQMDD66 ","SSQMDD67 ", & - "SSQMDD68 ","SSQMDD69 ","SSQMDD70 ","SSQMDD71 ","SSQMDD72 ","SSQMDD73 ","SSQMDD74 ", & - "SSQMDD75 ","SSQMDD76 ","SSQMDD77 ","SSQMDD78 ","SSQMDD79 ","SSQMDD80 ","SSQMDD81 ", & - "SSQMDD82 ","SSQMDD83 ","SSQMDD84 ","SSQMDD85 ","SSQMDD86 ","SSQMDD87 ","SSQMDD88 ", & - "SSQMDD89 ","SSQMDD90 ","SSQMDD91 ","SSQMDD92 ","SSQMDD93 ","SSQMDD94 ","SSQMDD95 ", & - "SSQMDD96 ","SSQMDD97 ","SSQMDD98 ","SSQMDD99 "/) - INTEGER(IntKi), PARAMETER :: ParamIndxAry(2265) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) - IntfFXss , IntfFYss , IntfFZss , IntfMXss , IntfMYss , IntfMZss , IntfRAXss , & - IntfRAYss , IntfRAZss , IntfRDXss , IntfRDYss , IntfRDZss , IntfTAXss , IntfTAYss , & - IntfTAZss , IntfTDXss , IntfTDYss , IntfTDZss , M1N1FKxe , M1N1FKye , M1N1FKze , & - M1N1FMxe , M1N1FMye , M1N1FMze , M1N1MKxe , M1N1MKye , M1N1MKze , M1N1MMxe , & - M1N1MMye , M1N1MMze , M1N1RAxe , M1N1RAye , M1N1RAze , M1N1RDxe , M1N1RDye , & - M1N1RDze , M1N1TAxe , M1N1TAye , M1N1TAze , M1N1TDxss , M1N1TDyss , M1N1TDzss , & - M1N2FKxe , M1N2FKye , M1N2FKze , M1N2FMxe , M1N2FMye , M1N2FMze , M1N2MKxe , & - M1N2MKye , M1N2MKze , M1N2MMxe , M1N2MMye , M1N2MMze , M1N2RAxe , M1N2RAye , & - M1N2RAze , M1N2RDxe , M1N2RDye , M1N2RDze , M1N2TAxe , M1N2TAye , M1N2TAze , & - M1N2TDxss , M1N2TDyss , M1N2TDzss , M1N3FKxe , M1N3FKye , M1N3FKze , M1N3FMxe , & - M1N3FMye , M1N3FMze , M1N3MKxe , M1N3MKye , M1N3MKze , M1N3MMxe , M1N3MMye , & - M1N3MMze , M1N3RAxe , M1N3RAye , M1N3RAze , M1N3RDxe , M1N3RDye , M1N3RDze , & - M1N3TAxe , M1N3TAye , M1N3TAze , M1N3TDxss , M1N3TDyss , M1N3TDzss , M1N4FKxe , & - M1N4FKye , M1N4FKze , M1N4FMxe , M1N4FMye , M1N4FMze , M1N4MKxe , M1N4MKye , & - M1N4MKze , M1N4MMxe , M1N4MMye , M1N4MMze , M1N4RAxe , M1N4RAye , M1N4RAze , & - M1N4RDxe , M1N4RDye , M1N4RDze , M1N4TAxe , M1N4TAye , M1N4TAze , M1N4TDxss , & - M1N4TDyss , M1N4TDzss , M1N5FKxe , M1N5FKye , M1N5FKze , M1N5FMxe , M1N5FMye , & - M1N5FMze , M1N5MKxe , M1N5MKye , M1N5MKze , M1N5MMxe , M1N5MMye , M1N5MMze , & - M1N5RAxe , M1N5RAye , M1N5RAze , M1N5RDxe , M1N5RDye , M1N5RDze , M1N5TAxe , & - M1N5TAye , M1N5TAze , M1N5TDxss , M1N5TDyss , M1N5TDzss , M1N6FKxe , M1N6FKye , & - M1N6FKze , M1N6FMxe , M1N6FMye , M1N6FMze , M1N6MKxe , M1N6MKye , M1N6MKze , & - M1N6MMxe , M1N6MMye , M1N6MMze , M1N6RAxe , M1N6RAye , M1N6RAze , M1N6RDxe , & - M1N6RDye , M1N6RDze , M1N6TAxe , M1N6TAye , M1N6TAze , M1N6TDxss , M1N6TDyss , & - M1N6TDzss , M1N7FKxe , M1N7FKye , M1N7FKze , M1N7FMxe , M1N7FMye , M1N7FMze , & - M1N7MKxe , M1N7MKye , M1N7MKze , M1N7MMxe , M1N7MMye , M1N7MMze , M1N7RAxe , & - M1N7RAye , M1N7RAze , M1N7RDxe , M1N7RDye , M1N7RDze , M1N7TAxe , M1N7TAye , & - M1N7TAze , M1N7TDxss , M1N7TDyss , M1N7TDzss , M1N8FKxe , M1N8FKye , M1N8FKze , & - M1N8FMxe , M1N8FMye , M1N8FMze , M1N8MKxe , M1N8MKye , M1N8MKze , M1N8MMxe , & - M1N8MMye , M1N8MMze , M1N8RAxe , M1N8RAye , M1N8RAze , M1N8RDxe , M1N8RDye , & - M1N8RDze , M1N8TAxe , M1N8TAye , M1N8TAze , M1N8TDxss , M1N8TDyss , M1N8TDzss , & - M1N9FKxe , M1N9FKye , M1N9FKze , M1N9FMxe , M1N9FMye , M1N9FMze , M1N9MKxe , & - M1N9MKye , M1N9MKze , M1N9MMxe , M1N9MMye , M1N9MMze , M1N9RAxe , M1N9RAye , & - M1N9RAze , M1N9RDxe , M1N9RDye , M1N9RDze , M1N9TAxe , M1N9TAye , M1N9TAze , & - M1N9TDxss , M1N9TDyss , M1N9TDzss , M2N1FKxe , M2N1FKye , M2N1FKze , M2N1FMxe , & - M2N1FMye , M2N1FMze , M2N1MKxe , M2N1MKye , M2N1MKze , M2N1MMxe , M2N1MMye , & - M2N1MMze , M2N1RAxe , M2N1RAye , M2N1RAze , M2N1RDxe , M2N1RDye , M2N1RDze , & - M2N1TAxe , M2N1TAye , M2N1TAze , M2N1TDxss , M2N1TDyss , M2N1TDzss , M2N2FKxe , & - M2N2FKye , M2N2FKze , M2N2FMxe , M2N2FMye , M2N2FMze , M2N2MKxe , M2N2MKye , & - M2N2MKze , M2N2MMxe , M2N2MMye , M2N2MMze , M2N2RAxe , M2N2RAye , M2N2RAze , & - M2N2RDxe , M2N2RDye , M2N2RDze , M2N2TAxe , M2N2TAye , M2N2TAze , M2N2TDxss , & - M2N2TDyss , M2N2TDzss , M2N3FKxe , M2N3FKye , M2N3FKze , M2N3FMxe , M2N3FMye , & - M2N3FMze , M2N3MKxe , M2N3MKye , M2N3MKze , M2N3MMxe , M2N3MMye , M2N3MMze , & - M2N3RAxe , M2N3RAye , M2N3RAze , M2N3RDxe , M2N3RDye , M2N3RDze , M2N3TAxe , & - M2N3TAye , M2N3TAze , M2N3TDxss , M2N3TDyss , M2N3TDzss , M2N4FKxe , M2N4FKye , & - M2N4FKze , M2N4FMxe , M2N4FMye , M2N4FMze , M2N4MKxe , M2N4MKye , M2N4MKze , & - M2N4MMxe , M2N4MMye , M2N4MMze , M2N4RAxe , M2N4RAye , M2N4RAze , M2N4RDxe , & - M2N4RDye , M2N4RDze , M2N4TAxe , M2N4TAye , M2N4TAze , M2N4TDxss , M2N4TDyss , & - M2N4TDzss , M2N5FKxe , M2N5FKye , M2N5FKze , M2N5FMxe , M2N5FMye , M2N5FMze , & - M2N5MKxe , M2N5MKye , M2N5MKze , M2N5MMxe , M2N5MMye , M2N5MMze , M2N5RAxe , & - M2N5RAye , M2N5RAze , M2N5RDxe , M2N5RDye , M2N5RDze , M2N5TAxe , M2N5TAye , & - M2N5TAze , M2N5TDxss , M2N5TDyss , M2N5TDzss , M2N6FKxe , M2N6FKye , M2N6FKze , & - M2N6FMxe , M2N6FMye , M2N6FMze , M2N6MKxe , M2N6MKye , M2N6MKze , M2N6MMxe , & - M2N6MMye , M2N6MMze , M2N6RAxe , M2N6RAye , M2N6RAze , M2N6RDxe , M2N6RDye , & - M2N6RDze , M2N6TAxe , M2N6TAye , M2N6TAze , M2N6TDxss , M2N6TDyss , M2N6TDzss , & - M2N7FKxe , M2N7FKye , M2N7FKze , M2N7FMxe , M2N7FMye , M2N7FMze , M2N7MKxe , & - M2N7MKye , M2N7MKze , M2N7MMxe , M2N7MMye , M2N7MMze , M2N7RAxe , M2N7RAye , & - M2N7RAze , M2N7RDxe , M2N7RDye , M2N7RDze , M2N7TAxe , M2N7TAye , M2N7TAze , & - M2N7TDxss , M2N7TDyss , M2N7TDzss , M2N8FKxe , M2N8FKye , M2N8FKze , M2N8FMxe , & - M2N8FMye , M2N8FMze , M2N8MKxe , M2N8MKye , M2N8MKze , M2N8MMxe , M2N8MMye , & - M2N8MMze , M2N8RAxe , M2N8RAye , M2N8RAze , M2N8RDxe , M2N8RDye , M2N8RDze , & - M2N8TAxe , M2N8TAye , M2N8TAze , M2N8TDxss , M2N8TDyss , M2N8TDzss , M2N9FKxe , & - M2N9FKye , M2N9FKze , M2N9FMxe , M2N9FMye , M2N9FMze , M2N9MKxe , M2N9MKye , & - M2N9MKze , M2N9MMxe , M2N9MMye , M2N9MMze , M2N9RAxe , M2N9RAye , M2N9RAze , & - M2N9RDxe , M2N9RDye , M2N9RDze , M2N9TAxe , M2N9TAye , M2N9TAze , M2N9TDxss , & - M2N9TDyss , M2N9TDzss , M3N1FKxe , M3N1FKye , M3N1FKze , M3N1FMxe , M3N1FMye , & - M3N1FMze , M3N1MKxe , M3N1MKye , M3N1MKze , M3N1MMxe , M3N1MMye , M3N1MMze , & - M3N1RAxe , M3N1RAye , M3N1RAze , M3N1RDxe , M3N1RDye , M3N1RDze , M3N1TAxe , & - M3N1TAye , M3N1TAze , M3N1TDxss , M3N1TDyss , M3N1TDzss , M3N2FKxe , M3N2FKye , & - M3N2FKze , M3N2FMxe , M3N2FMye , M3N2FMze , M3N2MKxe , M3N2MKye , M3N2MKze , & - M3N2MMxe , M3N2MMye , M3N2MMze , M3N2RAxe , M3N2RAye , M3N2RAze , M3N2RDxe , & - M3N2RDye , M3N2RDze , M3N2TAxe , M3N2TAye , M3N2TAze , M3N2TDxss , M3N2TDyss , & - M3N2TDzss , M3N3FKxe , M3N3FKye , M3N3FKze , M3N3FMxe , M3N3FMye , M3N3FMze , & - M3N3MKxe , M3N3MKye , M3N3MKze , M3N3MMxe , M3N3MMye , M3N3MMze , M3N3RAxe , & - M3N3RAye , M3N3RAze , M3N3RDxe , M3N3RDye , M3N3RDze , M3N3TAxe , M3N3TAye , & - M3N3TAze , M3N3TDxss , M3N3TDyss , M3N3TDzss , M3N4FKxe , M3N4FKye , M3N4FKze , & - M3N4FMxe , M3N4FMye , M3N4FMze , M3N4MKxe , M3N4MKye , M3N4MKze , M3N4MMxe , & - M3N4MMye , M3N4MMze , M3N4RAxe , M3N4RAye , M3N4RAze , M3N4RDxe , M3N4RDye , & - M3N4RDze , M3N4TAxe , M3N4TAye , M3N4TAze , M3N4TDxss , M3N4TDyss , M3N4TDzss , & - M3N5FKxe , M3N5FKye , M3N5FKze , M3N5FMxe , M3N5FMye , M3N5FMze , M3N5MKxe , & - M3N5MKye , M3N5MKze , M3N5MMxe , M3N5MMye , M3N5MMze , M3N5RAxe , M3N5RAye , & - M3N5RAze , M3N5RDxe , M3N5RDye , M3N5RDze , M3N5TAxe , M3N5TAye , M3N5TAze , & - M3N5TDxss , M3N5TDyss , M3N5TDzss , M3N6FKxe , M3N6FKye , M3N6FKze , M3N6FMxe , & - M3N6FMye , M3N6FMze , M3N6MKxe , M3N6MKye , M3N6MKze , M3N6MMxe , M3N6MMye , & - M3N6MMze , M3N6RAxe , M3N6RAye , M3N6RAze , M3N6RDxe , M3N6RDye , M3N6RDze , & - M3N6TAxe , M3N6TAye , M3N6TAze , M3N6TDxss , M3N6TDyss , M3N6TDzss , M3N7FKxe , & - M3N7FKye , M3N7FKze , M3N7FMxe , M3N7FMye , M3N7FMze , M3N7MKxe , M3N7MKye , & - M3N7MKze , M3N7MMxe , M3N7MMye , M3N7MMze , M3N7RAxe , M3N7RAye , M3N7RAze , & - M3N7RDxe , M3N7RDye , M3N7RDze , M3N7TAxe , M3N7TAye , M3N7TAze , M3N7TDxss , & - M3N7TDyss , M3N7TDzss , M3N8FKxe , M3N8FKye , M3N8FKze , M3N8FMxe , M3N8FMye , & - M3N8FMze , M3N8MKxe , M3N8MKye , M3N8MKze , M3N8MMxe , M3N8MMye , M3N8MMze , & - M3N8RAxe , M3N8RAye , M3N8RAze , M3N8RDxe , M3N8RDye , M3N8RDze , M3N8TAxe , & - M3N8TAye , M3N8TAze , M3N8TDxss , M3N8TDyss , M3N8TDzss , M3N9FKxe , M3N9FKye , & - M3N9FKze , M3N9FMxe , M3N9FMye , M3N9FMze , M3N9MKxe , M3N9MKye , M3N9MKze , & - M3N9MMxe , M3N9MMye , M3N9MMze , M3N9RAxe , M3N9RAye , M3N9RAze , M3N9RDxe , & - M3N9RDye , M3N9RDze , M3N9TAxe , M3N9TAye , M3N9TAze , M3N9TDxss , M3N9TDyss , & - M3N9TDzss , M4N1FKxe , M4N1FKye , M4N1FKze , M4N1FMxe , M4N1FMye , M4N1FMze , & - M4N1MKxe , M4N1MKye , M4N1MKze , M4N1MMxe , M4N1MMye , M4N1MMze , M4N1RAxe , & - M4N1RAye , M4N1RAze , M4N1RDxe , M4N1RDye , M4N1RDze , M4N1TAxe , M4N1TAye , & - M4N1TAze , M4N1TDxss , M4N1TDyss , M4N1TDzss , M4N2FKxe , M4N2FKye , M4N2FKze , & - M4N2FMxe , M4N2FMye , M4N2FMze , M4N2MKxe , M4N2MKye , M4N2MKze , M4N2MMxe , & - M4N2MMye , M4N2MMze , M4N2RAxe , M4N2RAye , M4N2RAze , M4N2RDxe , M4N2RDye , & - M4N2RDze , M4N2TAxe , M4N2TAye , M4N2TAze , M4N2TDxss , M4N2TDyss , M4N2TDzss , & - M4N3FKxe , M4N3FKye , M4N3FKze , M4N3FMxe , M4N3FMye , M4N3FMze , M4N3MKxe , & - M4N3MKye , M4N3MKze , M4N3MMxe , M4N3MMye , M4N3MMze , M4N3RAxe , M4N3RAye , & - M4N3RAze , M4N3RDxe , M4N3RDye , M4N3RDze , M4N3TAxe , M4N3TAye , M4N3TAze , & - M4N3TDxss , M4N3TDyss , M4N3TDzss , M4N4FKxe , M4N4FKye , M4N4FKze , M4N4FMxe , & - M4N4FMye , M4N4FMze , M4N4MKxe , M4N4MKye , M4N4MKze , M4N4MMxe , M4N4MMye , & - M4N4MMze , M4N4RAxe , M4N4RAye , M4N4RAze , M4N4RDxe , M4N4RDye , M4N4RDze , & - M4N4TAxe , M4N4TAye , M4N4TAze , M4N4TDxss , M4N4TDyss , M4N4TDzss , M4N5FKxe , & - M4N5FKye , M4N5FKze , M4N5FMxe , M4N5FMye , M4N5FMze , M4N5MKxe , M4N5MKye , & - M4N5MKze , M4N5MMxe , M4N5MMye , M4N5MMze , M4N5RAxe , M4N5RAye , M4N5RAze , & - M4N5RDxe , M4N5RDye , M4N5RDze , M4N5TAxe , M4N5TAye , M4N5TAze , M4N5TDxss , & - M4N5TDyss , M4N5TDzss , M4N6FKxe , M4N6FKye , M4N6FKze , M4N6FMxe , M4N6FMye , & - M4N6FMze , M4N6MKxe , M4N6MKye , M4N6MKze , M4N6MMxe , M4N6MMye , M4N6MMze , & - M4N6RAxe , M4N6RAye , M4N6RAze , M4N6RDxe , M4N6RDye , M4N6RDze , M4N6TAxe , & - M4N6TAye , M4N6TAze , M4N6TDxss , M4N6TDyss , M4N6TDzss , M4N7FKxe , M4N7FKye , & - M4N7FKze , M4N7FMxe , M4N7FMye , M4N7FMze , M4N7MKxe , M4N7MKye , M4N7MKze , & - M4N7MMxe , M4N7MMye , M4N7MMze , M4N7RAxe , M4N7RAye , M4N7RAze , M4N7RDxe , & - M4N7RDye , M4N7RDze , M4N7TAxe , M4N7TAye , M4N7TAze , M4N7TDxss , M4N7TDyss , & - M4N7TDzss , M4N8FKxe , M4N8FKye , M4N8FKze , M4N8FMxe , M4N8FMye , M4N8FMze , & - M4N8MKxe , M4N8MKye , M4N8MKze , M4N8MMxe , M4N8MMye , M4N8MMze , M4N8RAxe , & - M4N8RAye , M4N8RAze , M4N8RDxe , M4N8RDye , M4N8RDze , M4N8TAxe , M4N8TAye , & - M4N8TAze , M4N8TDxss , M4N8TDyss , M4N8TDzss , M4N9FKxe , M4N9FKye , M4N9FKze , & - M4N9FMxe , M4N9FMye , M4N9FMze , M4N9MKxe , M4N9MKye , M4N9MKze , M4N9MMxe , & - M4N9MMye , M4N9MMze , M4N9RAxe , M4N9RAye , M4N9RAze , M4N9RDxe , M4N9RDye , & - M4N9RDze , M4N9TAxe , M4N9TAye , M4N9TAze , M4N9TDxss , M4N9TDyss , M4N9TDzss , & - M5N1FKxe , M5N1FKye , M5N1FKze , M5N1FMxe , M5N1FMye , M5N1FMze , M5N1MKxe , & - M5N1MKye , M5N1MKze , M5N1MMxe , M5N1MMye , M5N1MMze , M5N1RAxe , M5N1RAye , & - M5N1RAze , M5N1RDxe , M5N1RDye , M5N1RDze , M5N1TAxe , M5N1TAye , M5N1TAze , & - M5N1TDxss , M5N1TDyss , M5N1TDzss , M5N2FKxe , M5N2FKye , M5N2FKze , M5N2FMxe , & - M5N2FMye , M5N2FMze , M5N2MKxe , M5N2MKye , M5N2MKze , M5N2MMxe , M5N2MMye , & - M5N2MMze , M5N2RAxe , M5N2RAye , M5N2RAze , M5N2RDxe , M5N2RDye , M5N2RDze , & - M5N2TAxe , M5N2TAye , M5N2TAze , M5N2TDxss , M5N2TDyss , M5N2TDzss , M5N3FKxe , & - M5N3FKye , M5N3FKze , M5N3FMxe , M5N3FMye , M5N3FMze , M5N3MKxe , M5N3MKye , & - M5N3MKze , M5N3MMxe , M5N3MMye , M5N3MMze , M5N3RAxe , M5N3RAye , M5N3RAze , & - M5N3RDxe , M5N3RDye , M5N3RDze , M5N3TAxe , M5N3TAye , M5N3TAze , M5N3TDxss , & - M5N3TDyss , M5N3TDzss , M5N4FKxe , M5N4FKye , M5N4FKze , M5N4FMxe , M5N4FMye , & - M5N4FMze , M5N4MKxe , M5N4MKye , M5N4MKze , M5N4MMxe , M5N4MMye , M5N4MMze , & - M5N4RAxe , M5N4RAye , M5N4RAze , M5N4RDxe , M5N4RDye , M5N4RDze , M5N4TAxe , & - M5N4TAye , M5N4TAze , M5N4TDxss , M5N4TDyss , M5N4TDzss , M5N5FKxe , M5N5FKye , & - M5N5FKze , M5N5FMxe , M5N5FMye , M5N5FMze , M5N5MKxe , M5N5MKye , M5N5MKze , & - M5N5MMxe , M5N5MMye , M5N5MMze , M5N5RAxe , M5N5RAye , M5N5RAze , M5N5RDxe , & - M5N5RDye , M5N5RDze , M5N5TAxe , M5N5TAye , M5N5TAze , M5N5TDxss , M5N5TDyss , & - M5N5TDzss , M5N6FKxe , M5N6FKye , M5N6FKze , M5N6FMxe , M5N6FMye , M5N6FMze , & - M5N6MKxe , M5N6MKye , M5N6MKze , M5N6MMxe , M5N6MMye , M5N6MMze , M5N6RAxe , & - M5N6RAye , M5N6RAze , M5N6RDxe , M5N6RDye , M5N6RDze , M5N6TAxe , M5N6TAye , & - M5N6TAze , M5N6TDxss , M5N6TDyss , M5N6TDzss , M5N7FKxe , M5N7FKye , M5N7FKze , & - M5N7FMxe , M5N7FMye , M5N7FMze , M5N7MKxe , M5N7MKye , M5N7MKze , M5N7MMxe , & - M5N7MMye , M5N7MMze , M5N7RAxe , M5N7RAye , M5N7RAze , M5N7RDxe , M5N7RDye , & - M5N7RDze , M5N7TAxe , M5N7TAye , M5N7TAze , M5N7TDxss , M5N7TDyss , M5N7TDzss , & - M5N8FKxe , M5N8FKye , M5N8FKze , M5N8FMxe , M5N8FMye , M5N8FMze , M5N8MKxe , & - M5N8MKye , M5N8MKze , M5N8MMxe , M5N8MMye , M5N8MMze , M5N8RAxe , M5N8RAye , & - M5N8RAze , M5N8RDxe , M5N8RDye , M5N8RDze , M5N8TAxe , M5N8TAye , M5N8TAze , & - M5N8TDxss , M5N8TDyss , M5N8TDzss , M5N9FKxe , M5N9FKye , M5N9FKze , M5N9FMxe , & - M5N9FMye , M5N9FMze , M5N9MKxe , M5N9MKye , M5N9MKze , M5N9MMxe , M5N9MMye , & - M5N9MMze , M5N9RAxe , M5N9RAye , M5N9RAze , M5N9RDxe , M5N9RDye , M5N9RDze , & - M5N9TAxe , M5N9TAye , M5N9TAze , M5N9TDxss , M5N9TDyss , M5N9TDzss , M6N1FKxe , & - M6N1FKye , M6N1FKze , M6N1FMxe , M6N1FMye , M6N1FMze , M6N1MKxe , M6N1MKye , & - M6N1MKze , M6N1MMxe , M6N1MMye , M6N1MMze , M6N1RAxe , M6N1RAye , M6N1RAze , & - M6N1RDxe , M6N1RDye , M6N1RDze , M6N1TAxe , M6N1TAye , M6N1TAze , M6N1TDxss , & - M6N1TDyss , M6N1TDzss , M6N2FKxe , M6N2FKye , M6N2FKze , M6N2FMxe , M6N2FMye , & - M6N2FMze , M6N2MKxe , M6N2MKye , M6N2MKze , M6N2MMxe , M6N2MMye , M6N2MMze , & - M6N2RAxe , M6N2RAye , M6N2RAze , M6N2RDxe , M6N2RDye , M6N2RDze , M6N2TAxe , & - M6N2TAye , M6N2TAze , M6N2TDxss , M6N2TDyss , M6N2TDzss , M6N3FKxe , M6N3FKye , & - M6N3FKze , M6N3FMxe , M6N3FMye , M6N3FMze , M6N3MKxe , M6N3MKye , M6N3MKze , & - M6N3MMxe , M6N3MMye , M6N3MMze , M6N3RAxe , M6N3RAye , M6N3RAze , M6N3RDxe , & - M6N3RDye , M6N3RDze , M6N3TAxe , M6N3TAye , M6N3TAze , M6N3TDxss , M6N3TDyss , & - M6N3TDzss , M6N4FKxe , M6N4FKye , M6N4FKze , M6N4FMxe , M6N4FMye , M6N4FMze , & - M6N4MKxe , M6N4MKye , M6N4MKze , M6N4MMxe , M6N4MMye , M6N4MMze , M6N4RAxe , & - M6N4RAye , M6N4RAze , M6N4RDxe , M6N4RDye , M6N4RDze , M6N4TAxe , M6N4TAye , & - M6N4TAze , M6N4TDxss , M6N4TDyss , M6N4TDzss , M6N5FKxe , M6N5FKye , M6N5FKze , & - M6N5FMxe , M6N5FMye , M6N5FMze , M6N5MKxe , M6N5MKye , M6N5MKze , M6N5MMxe , & - M6N5MMye , M6N5MMze , M6N5RAxe , M6N5RAye , M6N5RAze , M6N5RDxe , M6N5RDye , & - M6N5RDze , M6N5TAxe , M6N5TAye , M6N5TAze , M6N5TDxss , M6N5TDyss , M6N5TDzss , & - M6N6FKxe , M6N6FKye , M6N6FKze , M6N6FMxe , M6N6FMye , M6N6FMze , M6N6MKxe , & - M6N6MKye , M6N6MKze , M6N6MMxe , M6N6MMye , M6N6MMze , M6N6RAxe , M6N6RAye , & - M6N6RAze , M6N6RDxe , M6N6RDye , M6N6RDze , M6N6TAxe , M6N6TAye , M6N6TAze , & - M6N6TDxss , M6N6TDyss , M6N6TDzss , M6N7FKxe , M6N7FKye , M6N7FKze , M6N7FMxe , & - M6N7FMye , M6N7FMze , M6N7MKxe , M6N7MKye , M6N7MKze , M6N7MMxe , M6N7MMye , & - M6N7MMze , M6N7RAxe , M6N7RAye , M6N7RAze , M6N7RDxe , M6N7RDye , M6N7RDze , & - M6N7TAxe , M6N7TAye , M6N7TAze , M6N7TDxss , M6N7TDyss , M6N7TDzss , M6N8FKxe , & - M6N8FKye , M6N8FKze , M6N8FMxe , M6N8FMye , M6N8FMze , M6N8MKxe , M6N8MKye , & - M6N8MKze , M6N8MMxe , M6N8MMye , M6N8MMze , M6N8RAxe , M6N8RAye , M6N8RAze , & - M6N8RDxe , M6N8RDye , M6N8RDze , M6N8TAxe , M6N8TAye , M6N8TAze , M6N8TDxss , & - M6N8TDyss , M6N8TDzss , M6N9FKxe , M6N9FKye , M6N9FKze , M6N9FMxe , M6N9FMye , & - M6N9FMze , M6N9MKxe , M6N9MKye , M6N9MKze , M6N9MMxe , M6N9MMye , M6N9MMze , & - M6N9RAxe , M6N9RAye , M6N9RAze , M6N9RDxe , M6N9RDye , M6N9RDze , M6N9TAxe , & - M6N9TAye , M6N9TAze , M6N9TDxss , M6N9TDyss , M6N9TDzss , M7N1FKxe , M7N1FKye , & - M7N1FKze , M7N1FMxe , M7N1FMye , M7N1FMze , M7N1MKxe , M7N1MKye , M7N1MKze , & - M7N1MMxe , M7N1MMye , M7N1MMze , M7N1RAxe , M7N1RAye , M7N1RAze , M7N1RDxe , & - M7N1RDye , M7N1RDze , M7N1TAxe , M7N1TAye , M7N1TAze , M7N1TDxss , M7N1TDyss , & - M7N1TDzss , M7N2FKxe , M7N2FKye , M7N2FKze , M7N2FMxe , M7N2FMye , M7N2FMze , & - M7N2MKxe , M7N2MKye , M7N2MKze , M7N2MMxe , M7N2MMye , M7N2MMze , M7N2RAxe , & - M7N2RAye , M7N2RAze , M7N2RDxe , M7N2RDye , M7N2RDze , M7N2TAxe , M7N2TAye , & - M7N2TAze , M7N2TDxss , M7N2TDyss , M7N2TDzss , M7N3FKxe , M7N3FKye , M7N3FKze , & - M7N3FMxe , M7N3FMye , M7N3FMze , M7N3MKxe , M7N3MKye , M7N3MKze , M7N3MMxe , & - M7N3MMye , M7N3MMze , M7N3RAxe , M7N3RAye , M7N3RAze , M7N3RDxe , M7N3RDye , & - M7N3RDze , M7N3TAxe , M7N3TAye , M7N3TAze , M7N3TDxss , M7N3TDyss , M7N3TDzss , & - M7N4FKxe , M7N4FKye , M7N4FKze , M7N4FMxe , M7N4FMye , M7N4FMze , M7N4MKxe , & - M7N4MKye , M7N4MKze , M7N4MMxe , M7N4MMye , M7N4MMze , M7N4RAxe , M7N4RAye , & - M7N4RAze , M7N4RDxe , M7N4RDye , M7N4RDze , M7N4TAxe , M7N4TAye , M7N4TAze , & - M7N4TDxss , M7N4TDyss , M7N4TDzss , M7N5FKxe , M7N5FKye , M7N5FKze , M7N5FMxe , & - M7N5FMye , M7N5FMze , M7N5MKxe , M7N5MKye , M7N5MKze , M7N5MMxe , M7N5MMye , & - M7N5MMze , M7N5RAxe , M7N5RAye , M7N5RAze , M7N5RDxe , M7N5RDye , M7N5RDze , & - M7N5TAxe , M7N5TAye , M7N5TAze , M7N5TDxss , M7N5TDyss , M7N5TDzss , M7N6FKxe , & - M7N6FKye , M7N6FKze , M7N6FMxe , M7N6FMye , M7N6FMze , M7N6MKxe , M7N6MKye , & - M7N6MKze , M7N6MMxe , M7N6MMye , M7N6MMze , M7N6RAxe , M7N6RAye , M7N6RAze , & - M7N6RDxe , M7N6RDye , M7N6RDze , M7N6TAxe , M7N6TAye , M7N6TAze , M7N6TDxss , & - M7N6TDyss , M7N6TDzss , M7N7FKxe , M7N7FKye , M7N7FKze , M7N7FMxe , M7N7FMye , & - M7N7FMze , M7N7MKxe , M7N7MKye , M7N7MKze , M7N7MMxe , M7N7MMye , M7N7MMze , & - M7N7RAxe , M7N7RAye , M7N7RAze , M7N7RDxe , M7N7RDye , M7N7RDze , M7N7TAxe , & - M7N7TAye , M7N7TAze , M7N7TDxss , M7N7TDyss , M7N7TDzss , M7N8FKxe , M7N8FKye , & - M7N8FKze , M7N8FMxe , M7N8FMye , M7N8FMze , M7N8MKxe , M7N8MKye , M7N8MKze , & - M7N8MMxe , M7N8MMye , M7N8MMze , M7N8RAxe , M7N8RAye , M7N8RAze , M7N8RDxe , & - M7N8RDye , M7N8RDze , M7N8TAxe , M7N8TAye , M7N8TAze , M7N8TDxss , M7N8TDyss , & - M7N8TDzss , M7N9FKxe , M7N9FKye , M7N9FKze , M7N9FMxe , M7N9FMye , M7N9FMze , & - M7N9MKxe , M7N9MKye , M7N9MKze , M7N9MMxe , M7N9MMye , M7N9MMze , M7N9RAxe , & - M7N9RAye , M7N9RAze , M7N9RDxe , M7N9RDye , M7N9RDze , M7N9TAxe , M7N9TAye , & - M7N9TAze , M7N9TDxss , M7N9TDyss , M7N9TDzss , M8N1FKxe , M8N1FKye , M8N1FKze , & - M8N1FMxe , M8N1FMye , M8N1FMze , M8N1MKxe , M8N1MKye , M8N1MKze , M8N1MMxe , & - M8N1MMye , M8N1MMze , M8N1RAxe , M8N1RAye , M8N1RAze , M8N1RDxe , M8N1RDye , & - M8N1RDze , M8N1TAxe , M8N1TAye , M8N1TAze , M8N1TDxss , M8N1TDyss , M8N1TDzss , & - M8N2FKxe , M8N2FKye , M8N2FKze , M8N2FMxe , M8N2FMye , M8N2FMze , M8N2MKxe , & - M8N2MKye , M8N2MKze , M8N2MMxe , M8N2MMye , M8N2MMze , M8N2RAxe , M8N2RAye , & - M8N2RAze , M8N2RDxe , M8N2RDye , M8N2RDze , M8N2TAxe , M8N2TAye , M8N2TAze , & - M8N2TDxss , M8N2TDyss , M8N2TDzss , M8N3FKxe , M8N3FKye , M8N3FKze , M8N3FMxe , & - M8N3FMye , M8N3FMze , M8N3MKxe , M8N3MKye , M8N3MKze , M8N3MMxe , M8N3MMye , & - M8N3MMze , M8N3RAxe , M8N3RAye , M8N3RAze , M8N3RDxe , M8N3RDye , M8N3RDze , & - M8N3TAxe , M8N3TAye , M8N3TAze , M8N3TDxss , M8N3TDyss , M8N3TDzss , M8N4FKxe , & - M8N4FKye , M8N4FKze , M8N4FMxe , M8N4FMye , M8N4FMze , M8N4MKxe , M8N4MKye , & - M8N4MKze , M8N4MMxe , M8N4MMye , M8N4MMze , M8N4RAxe , M8N4RAye , M8N4RAze , & - M8N4RDxe , M8N4RDye , M8N4RDze , M8N4TAxe , M8N4TAye , M8N4TAze , M8N4TDxss , & - M8N4TDyss , M8N4TDzss , M8N5FKxe , M8N5FKye , M8N5FKze , M8N5FMxe , M8N5FMye , & - M8N5FMze , M8N5MKxe , M8N5MKye , M8N5MKze , M8N5MMxe , M8N5MMye , M8N5MMze , & - M8N5RAxe , M8N5RAye , M8N5RAze , M8N5RDxe , M8N5RDye , M8N5RDze , M8N5TAxe , & - M8N5TAye , M8N5TAze , M8N5TDxss , M8N5TDyss , M8N5TDzss , M8N6FKxe , M8N6FKye , & - M8N6FKze , M8N6FMxe , M8N6FMye , M8N6FMze , M8N6MKxe , M8N6MKye , M8N6MKze , & - M8N6MMxe , M8N6MMye , M8N6MMze , M8N6RAxe , M8N6RAye , M8N6RAze , M8N6RDxe , & - M8N6RDye , M8N6RDze , M8N6TAxe , M8N6TAye , M8N6TAze , M8N6TDxss , M8N6TDyss , & - M8N6TDzss , M8N7FKxe , M8N7FKye , M8N7FKze , M8N7FMxe , M8N7FMye , M8N7FMze , & - M8N7MKxe , M8N7MKye , M8N7MKze , M8N7MMxe , M8N7MMye , M8N7MMze , M8N7RAxe , & - M8N7RAye , M8N7RAze , M8N7RDxe , M8N7RDye , M8N7RDze , M8N7TAxe , M8N7TAye , & - M8N7TAze , M8N7TDxss , M8N7TDyss , M8N7TDzss , M8N8FKxe , M8N8FKye , M8N8FKze , & - M8N8FMxe , M8N8FMye , M8N8FMze , M8N8MKxe , M8N8MKye , M8N8MKze , M8N8MMxe , & - M8N8MMye , M8N8MMze , M8N8RAxe , M8N8RAye , M8N8RAze , M8N8RDxe , M8N8RDye , & - M8N8RDze , M8N8TAxe , M8N8TAye , M8N8TAze , M8N8TDxss , M8N8TDyss , M8N8TDzss , & - M8N9FKxe , M8N9FKye , M8N9FKze , M8N9FMxe , M8N9FMye , M8N9FMze , M8N9MKxe , & - M8N9MKye , M8N9MKze , M8N9MMxe , M8N9MMye , M8N9MMze , M8N9RAxe , M8N9RAye , & - M8N9RAze , M8N9RDxe , M8N9RDye , M8N9RDze , M8N9TAxe , M8N9TAye , M8N9TAze , & - M8N9TDxss , M8N9TDyss , M8N9TDzss , M9N1FKxe , M9N1FKye , M9N1FKze , M9N1FMxe , & - M9N1FMye , M9N1FMze , M9N1MKxe , M9N1MKye , M9N1MKze , M9N1MMxe , M9N1MMye , & - M9N1MMze , M9N1RAxe , M9N1RAye , M9N1RAze , M9N1RDxe , M9N1RDye , M9N1RDze , & - M9N1TAxe , M9N1TAye , M9N1TAze , M9N1TDxss , M9N1TDyss , M9N1TDzss , M9N2FKxe , & - M9N2FKye , M9N2FKze , M9N2FMxe , M9N2FMye , M9N2FMze , M9N2MKxe , M9N2MKye , & - M9N2MKze , M9N2MMxe , M9N2MMye , M9N2MMze , M9N2RAxe , M9N2RAye , M9N2RAze , & - M9N2RDxe , M9N2RDye , M9N2RDze , M9N2TAxe , M9N2TAye , M9N2TAze , M9N2TDxss , & - M9N2TDyss , M9N2TDzss , M9N3FKxe , M9N3FKye , M9N3FKze , M9N3FMxe , M9N3FMye , & - M9N3FMze , M9N3MKxe , M9N3MKye , M9N3MKze , M9N3MMxe , M9N3MMye , M9N3MMze , & - M9N3RAxe , M9N3RAye , M9N3RAze , M9N3RDxe , M9N3RDye , M9N3RDze , M9N3TAxe , & - M9N3TAye , M9N3TAze , M9N3TDxss , M9N3TDyss , M9N3TDzss , M9N4FKxe , M9N4FKye , & - M9N4FKze , M9N4FMxe , M9N4FMye , M9N4FMze , M9N4MKxe , M9N4MKye , M9N4MKze , & - M9N4MMxe , M9N4MMye , M9N4MMze , M9N4RAxe , M9N4RAye , M9N4RAze , M9N4RDxe , & - M9N4RDye , M9N4RDze , M9N4TAxe , M9N4TAye , M9N4TAze , M9N4TDxss , M9N4TDyss , & - M9N4TDzss , M9N5FKxe , M9N5FKye , M9N5FKze , M9N5FMxe , M9N5FMye , M9N5FMze , & - M9N5MKxe , M9N5MKye , M9N5MKze , M9N5MMxe , M9N5MMye , M9N5MMze , M9N5RAxe , & - M9N5RAye , M9N5RAze , M9N5RDxe , M9N5RDye , M9N5RDze , M9N5TAxe , M9N5TAye , & - M9N5TAze , M9N5TDxss , M9N5TDyss , M9N5TDzss , M9N6FKxe , M9N6FKye , M9N6FKze , & - M9N6FMxe , M9N6FMye , M9N6FMze , M9N6MKxe , M9N6MKye , M9N6MKze , M9N6MMxe , & - M9N6MMye , M9N6MMze , M9N6RAxe , M9N6RAye , M9N6RAze , M9N6RDxe , M9N6RDye , & - M9N6RDze , M9N6TAxe , M9N6TAye , M9N6TAze , M9N6TDxss , M9N6TDyss , M9N6TDzss , & - M9N7FKxe , M9N7FKye , M9N7FKze , M9N7FMxe , M9N7FMye , M9N7FMze , M9N7MKxe , & - M9N7MKye , M9N7MKze , M9N7MMxe , M9N7MMye , M9N7MMze , M9N7RAxe , M9N7RAye , & - M9N7RAze , M9N7RDxe , M9N7RDye , M9N7RDze , M9N7TAxe , M9N7TAye , M9N7TAze , & - M9N7TDxss , M9N7TDyss , M9N7TDzss , M9N8FKxe , M9N8FKye , M9N8FKze , M9N8FMxe , & - M9N8FMye , M9N8FMze , M9N8MKxe , M9N8MKye , M9N8MKze , M9N8MMxe , M9N8MMye , & - M9N8MMze , M9N8RAxe , M9N8RAye , M9N8RAze , M9N8RDxe , M9N8RDye , M9N8RDze , & - M9N8TAxe , M9N8TAye , M9N8TAze , M9N8TDxss , M9N8TDyss , M9N8TDzss , M9N9FKxe , & - M9N9FKye , M9N9FKze , M9N9FMxe , M9N9FMye , M9N9FMze , M9N9MKxe , M9N9MKye , & - M9N9MKze , M9N9MMxe , M9N9MMye , M9N9MMze , M9N9RAxe , M9N9RAye , M9N9RAze , & - M9N9RDxe , M9N9RDye , M9N9RDze , M9N9TAxe , M9N9TAye , M9N9TAze , M9N9TDxss , & - M9N9TDyss , M9N9TDzss , ReactFXss , ReactFYss , ReactFZss , ReactMXss , ReactMYss , & - ReactMZss , SSqm01 , SSqm02 , SSqm03 , SSqm04 , SSqm05 , SSqm06 , & - SSqm07 , SSqm08 , SSqm09 , SSqm10 , SSqm11 , SSqm12 , SSqm13 , & - SSqm14 , SSqm15 , SSqm16 , SSqm17 , SSqm18 , SSqm19 , SSqm20 , & - SSqm21 , SSqm22 , SSqm23 , SSqm24 , SSqm25 , SSqm26 , SSqm27 , & - SSqm28 , SSqm29 , SSqm30 , SSqm31 , SSqm32 , SSqm33 , SSqm34 , & - SSqm35 , SSqm36 , SSqm37 , SSqm38 , SSqm39 , SSqm40 , SSqm41 , & - SSqm42 , SSqm43 , SSqm44 , SSqm45 , SSqm46 , SSqm47 , SSqm48 , & - SSqm49 , SSqm50 , SSqm51 , SSqm52 , SSqm53 , SSqm54 , SSqm55 , & - SSqm56 , SSqm57 , SSqm58 , SSqm59 , SSqm60 , SSqm61 , SSqm62 , & - SSqm63 , SSqm64 , SSqm65 , SSqm66 , SSqm67 , SSqm68 , SSqm69 , & - SSqm70 , SSqm71 , SSqm72 , SSqm73 , SSqm74 , SSqm75 , SSqm76 , & - SSqm77 , SSqm78 , SSqm79 , SSqm80 , SSqm81 , SSqm82 , SSqm83 , & - SSqm84 , SSqm85 , SSqm86 , SSqm87 , SSqm88 , SSqm89 , SSqm90 , & - SSqm91 , SSqm92 , SSqm93 , SSqm94 , SSqm95 , SSqm96 , SSqm97 , & - SSqm98 , SSqm99 , SSqmd01 , SSqmd02 , SSqmd03 , SSqmd04 , SSqmd05 , & - SSqmd06 , SSqmd07 , SSqmd08 , SSqmd09 , SSqmd10 , SSqmd11 , SSqmd12 , & - SSqmd13 , SSqmd14 , SSqmd15 , SSqmd16 , SSqmd17 , SSqmd18 , SSqmd19 , & - SSqmd20 , SSqmd21 , SSqmd22 , SSqmd23 , SSqmd24 , SSqmd25 , SSqmd26 , & - SSqmd27 , SSqmd28 , SSqmd29 , SSqmd30 , SSqmd31 , SSqmd32 , SSqmd33 , & - SSqmd34 , SSqmd35 , SSqmd36 , SSqmd37 , SSqmd38 , SSqmd39 , SSqmd40 , & - SSqmd41 , SSqmd42 , SSqmd43 , SSqmd44 , SSqmd45 , SSqmd46 , SSqmd47 , & - SSqmd48 , SSqmd49 , SSqmd50 , SSqmd51 , SSqmd52 , SSqmd53 , SSqmd54 , & - SSqmd55 , SSqmd56 , SSqmd57 , SSqmd58 , SSqmd59 , SSqmd60 , SSqmd61 , & - SSqmd62 , SSqmd63 , SSqmd64 , SSqmd65 , SSqmd66 , SSqmd67 , SSqmd68 , & - SSqmd69 , SSqmd70 , SSqmd71 , SSqmd72 , SSqmd73 , SSqmd74 , SSqmd75 , & - SSqmd76 , SSqmd77 , SSqmd78 , SSqmd79 , SSqmd80 , SSqmd81 , SSqmd82 , & - SSqmd83 , SSqmd84 , SSqmd85 , SSqmd86 , SSqmd87 , SSqmd88 , SSqmd89 , & - SSqmd90 , SSqmd91 , SSqmd92 , SSqmd93 , SSqmd94 , SSqmd95 , SSqmd96 , & - SSqmd97 , SSqmd98 , SSqmd99 , SSqmdd01 , SSqmdd02 , SSqmdd03 , SSqmdd04 , & - SSqmdd05 , SSqmdd06 , SSqmdd07 , SSqmdd08 , SSqmdd09 , SSqmdd10 , SSqmdd11 , & - SSqmdd12 , SSqmdd13 , SSqmdd14 , SSqmdd15 , SSqmdd16 , SSqmdd17 , SSqmdd18 , & - SSqmdd19 , SSqmdd20 , SSqmdd21 , SSqmdd22 , SSqmdd23 , SSqmdd24 , SSqmdd25 , & - SSqmdd26 , SSqmdd27 , SSqmdd28 , SSqmdd29 , SSqmdd30 , SSqmdd31 , SSqmdd32 , & - SSqmdd33 , SSqmdd34 , SSqmdd35 , SSqmdd36 , SSqmdd37 , SSqmdd38 , SSqmdd39 , & - SSqmdd40 , SSqmdd41 , SSqmdd42 , SSqmdd43 , SSqmdd44 , SSqmdd45 , SSqmdd46 , & - SSqmdd47 , SSqmdd48 , SSqmdd49 , SSqmdd50 , SSqmdd51 , SSqmdd52 , SSqmdd53 , & - SSqmdd54 , SSqmdd55 , SSqmdd56 , SSqmdd57 , SSqmdd58 , SSqmdd59 , SSqmdd60 , & - SSqmdd61 , SSqmdd62 , SSqmdd63 , SSqmdd64 , SSqmdd65 , SSqmdd66 , SSqmdd67 , & - SSqmdd68 , SSqmdd69 , SSqmdd70 , SSqmdd71 , SSqmdd72 , SSqmdd73 , SSqmdd74 , & - SSqmdd75 , SSqmdd76 , SSqmdd77 , SSqmdd78 , SSqmdd79 , SSqmdd80 , SSqmdd81 , & - SSqmdd82 , SSqmdd83 , SSqmdd84 , SSqmdd85 , SSqmdd86 , SSqmdd87 , SSqmdd88 , & - SSqmdd89 , SSqmdd90 , SSqmdd91 , SSqmdd92 , SSqmdd93 , SSqmdd94 , SSqmdd95 , & - SSqmdd96 , SSqmdd97 , SSqmdd98 , SSqmdd99 /) - CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(2265) = (/ & ! This lists the units corresponding to the allowed parameters - "(N) ","(N) ","(N) ","(Nm) ","(Nm) ","(Nm) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ", & - "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ", & - "(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ", & - "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ", & - "(rad/s^2) ","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & - "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & - "(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ","(rad) ","(rad) ","(rad) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & - "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & - "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2) ","(rad/s^2) ","(rad/s^2) ", & - "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(N) ","(N) ","(N) ","(Nm) ","(Nm) ", & - "(Nm) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(--) ","(--) ","(--) ","(--) ","(--) ", & - "(--) ","(--) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & - "(1/s) ","(1/s) ","(1/s) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & - "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) "/) - -!End of code generated by Matlab script + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry1(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "INTFFXSS ","INTFFYSS ","INTFFZSS ","INTFMXSS ","INTFMYSS ","INTFMZSS ","INTFRAXSS ", & + "INTFRAYSS ","INTFRAZSS ","INTFRDXSS ","INTFRDYSS ","INTFRDZSS ","INTFTAXSS ","INTFTAYSS ", & + "INTFTAZSS ","INTFTDXSS ","INTFTDYSS ","INTFTDZSS ","M01N1FKXE ","M01N1FKYE ","M01N1FKZE ", & + "M01N1FMXE ","M01N1FMYE ","M01N1FMZE ","M01N1MKXE ","M01N1MKYE ","M01N1MKZE ","M01N1MMXE ", & + "M01N1MMYE ","M01N1MMZE ","M01N1RAXE ","M01N1RAYE ","M01N1RAZE ","M01N1RDXE ","M01N1RDYE ", & + "M01N1RDZE ","M01N1TAXE ","M01N1TAYE ","M01N1TAZE ","M01N1TDXSS","M01N1TDYSS","M01N1TDZSS", & + "M01N2FKXE ","M01N2FKYE ","M01N2FKZE ","M01N2FMXE ","M01N2FMYE ","M01N2FMZE ","M01N2MKXE ", & + "M01N2MKYE ","M01N2MKZE ","M01N2MMXE ","M01N2MMYE ","M01N2MMZE ","M01N2RAXE ","M01N2RAYE ", & + "M01N2RAZE ","M01N2RDXE ","M01N2RDYE ","M01N2RDZE ","M01N2TAXE ","M01N2TAYE ","M01N2TAZE ", & + "M01N2TDXSS","M01N2TDYSS","M01N2TDZSS","M01N3FKXE ","M01N3FKYE ","M01N3FKZE ","M01N3FMXE ", & + "M01N3FMYE ","M01N3FMZE ","M01N3MKXE ","M01N3MKYE ","M01N3MKZE ","M01N3MMXE ","M01N3MMYE ", & + "M01N3MMZE ","M01N3RAXE ","M01N3RAYE ","M01N3RAZE ","M01N3RDXE ","M01N3RDYE ","M01N3RDZE ", & + "M01N3TAXE ","M01N3TAYE ","M01N3TAZE ","M01N3TDXSS","M01N3TDYSS","M01N3TDZSS","M01N4FKXE ", & + "M01N4FKYE ","M01N4FKZE ","M01N4FMXE ","M01N4FMYE ","M01N4FMZE ","M01N4MKXE ","M01N4MKYE ", & + "M01N4MKZE ","M01N4MMXE ","M01N4MMYE ","M01N4MMZE ","M01N4RAXE ","M01N4RAYE ","M01N4RAZE ", & + "M01N4RDXE ","M01N4RDYE ","M01N4RDZE ","M01N4TAXE ","M01N4TAYE ","M01N4TAZE ","M01N4TDXSS", & + "M01N4TDYSS","M01N4TDZSS","M01N5FKXE ","M01N5FKYE ","M01N5FKZE ","M01N5FMXE ","M01N5FMYE ", & + "M01N5FMZE ","M01N5MKXE ","M01N5MKYE ","M01N5MKZE ","M01N5MMXE ","M01N5MMYE ","M01N5MMZE ", & + "M01N5RAXE ","M01N5RAYE ","M01N5RAZE ","M01N5RDXE ","M01N5RDYE ","M01N5RDZE ","M01N5TAXE ", & + "M01N5TAYE ","M01N5TAZE ","M01N5TDXSS","M01N5TDYSS","M01N5TDZSS","M01N6FKXE ","M01N6FKYE ", & + "M01N6FKZE ","M01N6FMXE ","M01N6FMYE ","M01N6FMZE ","M01N6MKXE ","M01N6MKYE ","M01N6MKZE ", & + "M01N6MMXE ","M01N6MMYE ","M01N6MMZE ","M01N6RAXE ","M01N6RAYE ","M01N6RAZE ","M01N6RDXE ", & + "M01N6RDYE ","M01N6RDZE ","M01N6TAXE ","M01N6TAYE ","M01N6TAZE ","M01N6TDXSS","M01N6TDYSS", & + "M01N6TDZSS","M01N7FKXE ","M01N7FKYE ","M01N7FKZE ","M01N7FMXE ","M01N7FMYE ","M01N7FMZE ", & + "M01N7MKXE ","M01N7MKYE ","M01N7MKZE ","M01N7MMXE ","M01N7MMYE ","M01N7MMZE ","M01N7RAXE ", & + "M01N7RAYE ","M01N7RAZE ","M01N7RDXE ","M01N7RDYE ","M01N7RDZE ","M01N7TAXE ","M01N7TAYE ", & + "M01N7TAZE ","M01N7TDXSS","M01N7TDYSS","M01N7TDZSS","M01N8FKXE ","M01N8FKYE ","M01N8FKZE ", & + "M01N8FMXE ","M01N8FMYE ","M01N8FMZE ","M01N8MKXE ","M01N8MKYE ","M01N8MKZE ","M01N8MMXE ", & + "M01N8MMYE ","M01N8MMZE ","M01N8RAXE ","M01N8RAYE ","M01N8RAZE ","M01N8RDXE ","M01N8RDYE ", & + "M01N8RDZE ","M01N8TAXE ","M01N8TAYE ","M01N8TAZE ","M01N8TDXSS","M01N8TDYSS","M01N8TDZSS", & + "M01N9FKXE ","M01N9FKYE ","M01N9FKZE ","M01N9FMXE ","M01N9FMYE ","M01N9FMZE ","M01N9MKXE ", & + "M01N9MKYE ","M01N9MKZE ","M01N9MMXE ","M01N9MMYE ","M01N9MMZE ","M01N9RAXE ","M01N9RAYE ", & + "M01N9RAZE ","M01N9RDXE ","M01N9RDYE ","M01N9RDZE ","M01N9TAXE ","M01N9TAYE ","M01N9TAZE ", & + "M01N9TDXSS","M01N9TDYSS","M01N9TDZSS","M02N1FKXE ","M02N1FKYE ","M02N1FKZE ","M02N1FMXE ", & + "M02N1FMYE ","M02N1FMZE ","M02N1MKXE ","M02N1MKYE ","M02N1MKZE ","M02N1MMXE ","M02N1MMYE ", & + "M02N1MMZE ","M02N1RAXE ","M02N1RAYE ","M02N1RAZE ","M02N1RDXE ","M02N1RDYE ","M02N1RDZE ", & + "M02N1TAXE ","M02N1TAYE ","M02N1TAZE ","M02N1TDXSS","M02N1TDYSS","M02N1TDZSS","M02N2FKXE ", & + "M02N2FKYE ","M02N2FKZE ","M02N2FMXE ","M02N2FMYE ","M02N2FMZE ","M02N2MKXE ","M02N2MKYE ", & + "M02N2MKZE ","M02N2MMXE ","M02N2MMYE ","M02N2MMZE ","M02N2RAXE ","M02N2RAYE ","M02N2RAZE ", & + "M02N2RDXE ","M02N2RDYE ","M02N2RDZE ","M02N2TAXE ","M02N2TAYE ","M02N2TAZE ","M02N2TDXSS", & + "M02N2TDYSS","M02N2TDZSS","M02N3FKXE ","M02N3FKYE ","M02N3FKZE ","M02N3FMXE ","M02N3FMYE ", & + "M02N3FMZE ","M02N3MKXE ","M02N3MKYE ","M02N3MKZE ","M02N3MMXE ","M02N3MMYE ","M02N3MMZE ", & + "M02N3RAXE ","M02N3RAYE ","M02N3RAZE ","M02N3RDXE ","M02N3RDYE ","M02N3RDZE ","M02N3TAXE ", & + "M02N3TAYE ","M02N3TAZE ","M02N3TDXSS","M02N3TDYSS","M02N3TDZSS","M02N4FKXE ","M02N4FKYE ", & + "M02N4FKZE ","M02N4FMXE ","M02N4FMYE ","M02N4FMZE ","M02N4MKXE ","M02N4MKYE ","M02N4MKZE ", & + "M02N4MMXE ","M02N4MMYE ","M02N4MMZE ","M02N4RAXE ","M02N4RAYE ","M02N4RAZE ","M02N4RDXE ", & + "M02N4RDYE ","M02N4RDZE ","M02N4TAXE ","M02N4TAYE ","M02N4TAZE ","M02N4TDXSS","M02N4TDYSS", & + "M02N4TDZSS","M02N5FKXE ","M02N5FKYE ","M02N5FKZE ","M02N5FMXE ","M02N5FMYE ","M02N5FMZE ", & + "M02N5MKXE ","M02N5MKYE ","M02N5MKZE ","M02N5MMXE ","M02N5MMYE ","M02N5MMZE ","M02N5RAXE ", & + "M02N5RAYE ","M02N5RAZE ","M02N5RDXE ","M02N5RDYE ","M02N5RDZE ","M02N5TAXE ","M02N5TAYE ", & + "M02N5TAZE ","M02N5TDXSS","M02N5TDYSS","M02N5TDZSS","M02N6FKXE ","M02N6FKYE ","M02N6FKZE ", & + "M02N6FMXE ","M02N6FMYE ","M02N6FMZE ","M02N6MKXE ","M02N6MKYE ","M02N6MKZE ","M02N6MMXE ", & + "M02N6MMYE ","M02N6MMZE ","M02N6RAXE ","M02N6RAYE ","M02N6RAZE ","M02N6RDXE ","M02N6RDYE ", & + "M02N6RDZE ","M02N6TAXE ","M02N6TAYE ","M02N6TAZE ","M02N6TDXSS","M02N6TDYSS","M02N6TDZSS", & + "M02N7FKXE ","M02N7FKYE ","M02N7FKZE ","M02N7FMXE ","M02N7FMYE ","M02N7FMZE ","M02N7MKXE ", & + "M02N7MKYE ","M02N7MKZE ","M02N7MMXE ","M02N7MMYE ","M02N7MMZE ","M02N7RAXE ","M02N7RAYE ", & + "M02N7RAZE ","M02N7RDXE ","M02N7RDYE ","M02N7RDZE ","M02N7TAXE ","M02N7TAYE ","M02N7TAZE ", & + "M02N7TDXSS","M02N7TDYSS","M02N7TDZSS","M02N8FKXE ","M02N8FKYE ","M02N8FKZE ","M02N8FMXE ", & + "M02N8FMYE ","M02N8FMZE ","M02N8MKXE ","M02N8MKYE ","M02N8MKZE ","M02N8MMXE ","M02N8MMYE ", & + "M02N8MMZE ","M02N8RAXE ","M02N8RAYE ","M02N8RAZE ","M02N8RDXE ","M02N8RDYE ","M02N8RDZE ", & + "M02N8TAXE ","M02N8TAYE ","M02N8TAZE ","M02N8TDXSS","M02N8TDYSS","M02N8TDZSS","M02N9FKXE ", & + "M02N9FKYE ","M02N9FKZE ","M02N9FMXE ","M02N9FMYE ","M02N9FMZE ","M02N9MKXE ","M02N9MKYE ", & + "M02N9MKZE ","M02N9MMXE ","M02N9MMYE ","M02N9MMZE ","M02N9RAXE ","M02N9RAYE ","M02N9RAZE ", & + "M02N9RDXE ","M02N9RDYE ","M02N9RDZE ","M02N9TAXE ","M02N9TAYE ","M02N9TAZE ","M02N9TDXSS", & + "M02N9TDYSS","M02N9TDZSS","M03N1FKXE ","M03N1FKYE ","M03N1FKZE ","M03N1FMXE ","M03N1FMYE ", & + "M03N1FMZE ","M03N1MKXE ","M03N1MKYE ","M03N1MKZE ","M03N1MMXE ","M03N1MMYE ","M03N1MMZE ", & + "M03N1RAXE ","M03N1RAYE ","M03N1RAZE ","M03N1RDXE ","M03N1RDYE ","M03N1RDZE ","M03N1TAXE ", & + "M03N1TAYE ","M03N1TAZE ","M03N1TDXSS","M03N1TDYSS","M03N1TDZSS","M03N2FKXE ","M03N2FKYE ", & + "M03N2FKZE ","M03N2FMXE ","M03N2FMYE ","M03N2FMZE ","M03N2MKXE ","M03N2MKYE ","M03N2MKZE ", & + "M03N2MMXE ","M03N2MMYE ","M03N2MMZE ","M03N2RAXE ","M03N2RAYE ","M03N2RAZE ","M03N2RDXE ", & + "M03N2RDYE ","M03N2RDZE ","M03N2TAXE ","M03N2TAYE ","M03N2TAZE ","M03N2TDXSS","M03N2TDYSS", & + "M03N2TDZSS","M03N3FKXE ","M03N3FKYE ","M03N3FKZE ","M03N3FMXE ","M03N3FMYE ","M03N3FMZE ", & + "M03N3MKXE ","M03N3MKYE ","M03N3MKZE ","M03N3MMXE ","M03N3MMYE ","M03N3MMZE ","M03N3RAXE ", & + "M03N3RAYE ","M03N3RAZE ","M03N3RDXE ","M03N3RDYE ","M03N3RDZE ","M03N3TAXE ","M03N3TAYE ", & + "M03N3TAZE ","M03N3TDXSS","M03N3TDYSS","M03N3TDZSS","M03N4FKXE ","M03N4FKYE ","M03N4FKZE ", & + "M03N4FMXE ","M03N4FMYE ","M03N4FMZE ","M03N4MKXE ","M03N4MKYE ","M03N4MKZE ","M03N4MMXE ", & + "M03N4MMYE ","M03N4MMZE ","M03N4RAXE ","M03N4RAYE ","M03N4RAZE ","M03N4RDXE ","M03N4RDYE ", & + "M03N4RDZE ","M03N4TAXE ","M03N4TAYE ","M03N4TAZE ","M03N4TDXSS","M03N4TDYSS","M03N4TDZSS", & + "M03N5FKXE ","M03N5FKYE ","M03N5FKZE ","M03N5FMXE ","M03N5FMYE ","M03N5FMZE ","M03N5MKXE ", & + "M03N5MKYE ","M03N5MKZE ","M03N5MMXE ","M03N5MMYE ","M03N5MMZE ","M03N5RAXE ","M03N5RAYE ", & + "M03N5RAZE ","M03N5RDXE ","M03N5RDYE ","M03N5RDZE ","M03N5TAXE ","M03N5TAYE ","M03N5TAZE ", & + "M03N5TDXSS","M03N5TDYSS","M03N5TDZSS","M03N6FKXE ","M03N6FKYE ","M03N6FKZE ","M03N6FMXE ", & + "M03N6FMYE ","M03N6FMZE ","M03N6MKXE ","M03N6MKYE ","M03N6MKZE ","M03N6MMXE ","M03N6MMYE ", & + "M03N6MMZE ","M03N6RAXE ","M03N6RAYE ","M03N6RAZE ","M03N6RDXE ","M03N6RDYE ","M03N6RDZE ", & + "M03N6TAXE ","M03N6TAYE ","M03N6TAZE ","M03N6TDXSS","M03N6TDYSS","M03N6TDZSS","M03N7FKXE ", & + "M03N7FKYE ","M03N7FKZE ","M03N7FMXE ","M03N7FMYE ","M03N7FMZE ","M03N7MKXE ","M03N7MKYE ", & + "M03N7MKZE ","M03N7MMXE ","M03N7MMYE ","M03N7MMZE ","M03N7RAXE ","M03N7RAYE ","M03N7RAZE ", & + "M03N7RDXE ","M03N7RDYE ","M03N7RDZE ","M03N7TAXE ","M03N7TAYE ","M03N7TAZE ","M03N7TDXSS", & + "M03N7TDYSS","M03N7TDZSS","M03N8FKXE ","M03N8FKYE ","M03N8FKZE ","M03N8FMXE ","M03N8FMYE ", & + "M03N8FMZE ","M03N8MKXE ","M03N8MKYE ","M03N8MKZE ","M03N8MMXE ","M03N8MMYE ","M03N8MMZE ", & + "M03N8RAXE ","M03N8RAYE ","M03N8RAZE ","M03N8RDXE ","M03N8RDYE ","M03N8RDZE ","M03N8TAXE ", & + "M03N8TAYE ","M03N8TAZE ","M03N8TDXSS","M03N8TDYSS","M03N8TDZSS","M03N9FKXE ","M03N9FKYE ", & + "M03N9FKZE ","M03N9FMXE ","M03N9FMYE ","M03N9FMZE ","M03N9MKXE ","M03N9MKYE ","M03N9MKZE ", & + "M03N9MMXE ","M03N9MMYE ","M03N9MMZE ","M03N9RAXE ","M03N9RAYE ","M03N9RAZE ","M03N9RDXE ", & + "M03N9RDYE ","M03N9RDZE ","M03N9TAXE ","M03N9TAYE ","M03N9TAZE ","M03N9TDXSS","M03N9TDYSS", & + "M03N9TDZSS","M04N1FKXE ","M04N1FKYE ","M04N1FKZE ","M04N1FMXE ","M04N1FMYE ","M04N1FMZE ", & + "M04N1MKXE ","M04N1MKYE ","M04N1MKZE ","M04N1MMXE ","M04N1MMYE ","M04N1MMZE ","M04N1RAXE ", & + "M04N1RAYE ","M04N1RAZE ","M04N1RDXE ","M04N1RDYE ","M04N1RDZE ","M04N1TAXE ","M04N1TAYE ", & + "M04N1TAZE ","M04N1TDXSS","M04N1TDYSS","M04N1TDZSS","M04N2FKXE ","M04N2FKYE ","M04N2FKZE ", & + "M04N2FMXE ","M04N2FMYE ","M04N2FMZE ","M04N2MKXE ","M04N2MKYE ","M04N2MKZE ","M04N2MMXE ", & + "M04N2MMYE ","M04N2MMZE ","M04N2RAXE ","M04N2RAYE ","M04N2RAZE ","M04N2RDXE ","M04N2RDYE ", & + "M04N2RDZE ","M04N2TAXE ","M04N2TAYE ","M04N2TAZE ","M04N2TDXSS","M04N2TDYSS","M04N2TDZSS", & + "M04N3FKXE ","M04N3FKYE ","M04N3FKZE ","M04N3FMXE ","M04N3FMYE ","M04N3FMZE ","M04N3MKXE ", & + "M04N3MKYE ","M04N3MKZE ","M04N3MMXE ","M04N3MMYE ","M04N3MMZE ","M04N3RAXE ","M04N3RAYE ", & + "M04N3RAZE ","M04N3RDXE ","M04N3RDYE ","M04N3RDZE ","M04N3TAXE ","M04N3TAYE ","M04N3TAZE ", & + "M04N3TDXSS","M04N3TDYSS","M04N3TDZSS","M04N4FKXE ","M04N4FKYE ","M04N4FKZE ","M04N4FMXE ", & + "M04N4FMYE ","M04N4FMZE ","M04N4MKXE ","M04N4MKYE ","M04N4MKZE ","M04N4MMXE ","M04N4MMYE ", & + "M04N4MMZE ","M04N4RAXE ","M04N4RAYE ","M04N4RAZE ","M04N4RDXE ","M04N4RDYE ","M04N4RDZE ", & + "M04N4TAXE ","M04N4TAYE ","M04N4TAZE ","M04N4TDXSS","M04N4TDYSS","M04N4TDZSS","M04N5FKXE ", & + "M04N5FKYE ","M04N5FKZE ","M04N5FMXE ","M04N5FMYE ","M04N5FMZE ","M04N5MKXE ","M04N5MKYE ", & + "M04N5MKZE ","M04N5MMXE ","M04N5MMYE ","M04N5MMZE ","M04N5RAXE ","M04N5RAYE ","M04N5RAZE ", & + "M04N5RDXE ","M04N5RDYE ","M04N5RDZE ","M04N5TAXE ","M04N5TAYE ","M04N5TAZE ","M04N5TDXSS", & + "M04N5TDYSS","M04N5TDZSS","M04N6FKXE ","M04N6FKYE ","M04N6FKZE ","M04N6FMXE ","M04N6FMYE ", & + "M04N6FMZE ","M04N6MKXE ","M04N6MKYE ","M04N6MKZE ","M04N6MMXE ","M04N6MMYE ","M04N6MMZE ", & + "M04N6RAXE ","M04N6RAYE ","M04N6RAZE ","M04N6RDXE ","M04N6RDYE ","M04N6RDZE ","M04N6TAXE ", & + "M04N6TAYE ","M04N6TAZE ","M04N6TDXSS","M04N6TDYSS","M04N6TDZSS","M04N7FKXE ","M04N7FKYE ", & + "M04N7FKZE ","M04N7FMXE ","M04N7FMYE ","M04N7FMZE ","M04N7MKXE ","M04N7MKYE ","M04N7MKZE ", & + "M04N7MMXE ","M04N7MMYE ","M04N7MMZE ","M04N7RAXE ","M04N7RAYE ","M04N7RAZE ","M04N7RDXE ", & + "M04N7RDYE ","M04N7RDZE ","M04N7TAXE ","M04N7TAYE ","M04N7TAZE ","M04N7TDXSS","M04N7TDYSS", & + "M04N7TDZSS","M04N8FKXE ","M04N8FKYE ","M04N8FKZE ","M04N8FMXE ","M04N8FMYE ","M04N8FMZE ", & + "M04N8MKXE ","M04N8MKYE ","M04N8MKZE ","M04N8MMXE ","M04N8MMYE ","M04N8MMZE ","M04N8RAXE ", & + "M04N8RAYE ","M04N8RAZE ","M04N8RDXE ","M04N8RDYE ","M04N8RDZE ","M04N8TAXE ","M04N8TAYE ", & + "M04N8TAZE ","M04N8TDXSS","M04N8TDYSS","M04N8TDZSS","M04N9FKXE ","M04N9FKYE ","M04N9FKZE ", & + "M04N9FMXE ","M04N9FMYE ","M04N9FMZE ","M04N9MKXE ","M04N9MKYE ","M04N9MKZE ","M04N9MMXE ", & + "M04N9MMYE ","M04N9MMZE ","M04N9RAXE ","M04N9RAYE ","M04N9RAZE ","M04N9RDXE ","M04N9RDYE ", & + "M04N9RDZE ","M04N9TAXE ","M04N9TAYE ","M04N9TAZE ","M04N9TDXSS","M04N9TDYSS","M04N9TDZSS", & + "M05N1FKXE ","M05N1FKYE ","M05N1FKZE ","M05N1FMXE ","M05N1FMYE ","M05N1FMZE ","M05N1MKXE ", & + "M05N1MKYE ","M05N1MKZE ","M05N1MMXE ","M05N1MMYE ","M05N1MMZE ","M05N1RAXE ","M05N1RAYE ", & + "M05N1RAZE ","M05N1RDXE ","M05N1RDYE ","M05N1RDZE ","M05N1TAXE ","M05N1TAYE ","M05N1TAZE ", & + "M05N1TDXSS","M05N1TDYSS","M05N1TDZSS","M05N2FKXE ","M05N2FKYE ","M05N2FKZE ","M05N2FMXE ", & + "M05N2FMYE ","M05N2FMZE ","M05N2MKXE ","M05N2MKYE ","M05N2MKZE ","M05N2MMXE ","M05N2MMYE ", & + "M05N2MMZE ","M05N2RAXE ","M05N2RAYE ","M05N2RAZE ","M05N2RDXE ","M05N2RDYE ","M05N2RDZE ", & + "M05N2TAXE ","M05N2TAYE ","M05N2TAZE ","M05N2TDXSS","M05N2TDYSS","M05N2TDZSS","M05N3FKXE ", & + "M05N3FKYE ","M05N3FKZE ","M05N3FMXE ","M05N3FMYE ","M05N3FMZE ","M05N3MKXE ","M05N3MKYE ", & + "M05N3MKZE ","M05N3MMXE ","M05N3MMYE ","M05N3MMZE ","M05N3RAXE ","M05N3RAYE ","M05N3RAZE ", & + "M05N3RDXE ","M05N3RDYE ","M05N3RDZE ","M05N3TAXE ","M05N3TAYE ","M05N3TAZE ","M05N3TDXSS", & + "M05N3TDYSS","M05N3TDZSS","M05N4FKXE ","M05N4FKYE ","M05N4FKZE ","M05N4FMXE ","M05N4FMYE ", & + "M05N4FMZE ","M05N4MKXE ","M05N4MKYE ","M05N4MKZE ","M05N4MMXE ","M05N4MMYE ","M05N4MMZE ", & + "M05N4RAXE ","M05N4RAYE ","M05N4RAZE ","M05N4RDXE ","M05N4RDYE ","M05N4RDZE ","M05N4TAXE ", & + "M05N4TAYE ","M05N4TAZE ","M05N4TDXSS","M05N4TDYSS","M05N4TDZSS","M05N5FKXE ","M05N5FKYE ", & + "M05N5FKZE ","M05N5FMXE ","M05N5FMYE ","M05N5FMZE ","M05N5MKXE ","M05N5MKYE ","M05N5MKZE ", & + "M05N5MMXE ","M05N5MMYE ","M05N5MMZE ","M05N5RAXE ","M05N5RAYE ","M05N5RAZE ","M05N5RDXE ", & + "M05N5RDYE ","M05N5RDZE ","M05N5TAXE ","M05N5TAYE ","M05N5TAZE ","M05N5TDXSS","M05N5TDYSS", & + "M05N5TDZSS","M05N6FKXE ","M05N6FKYE ","M05N6FKZE ","M05N6FMXE ","M05N6FMYE ","M05N6FMZE ", & + "M05N6MKXE ","M05N6MKYE ","M05N6MKZE ","M05N6MMXE ","M05N6MMYE ","M05N6MMZE ","M05N6RAXE ", & + "M05N6RAYE ","M05N6RAZE ","M05N6RDXE ","M05N6RDYE ","M05N6RDZE ","M05N6TAXE ","M05N6TAYE ", & + "M05N6TAZE ","M05N6TDXSS","M05N6TDYSS","M05N6TDZSS","M05N7FKXE ","M05N7FKYE ","M05N7FKZE ", & + "M05N7FMXE ","M05N7FMYE ","M05N7FMZE ","M05N7MKXE ","M05N7MKYE ","M05N7MKZE ","M05N7MMXE ", & + "M05N7MMYE ","M05N7MMZE ","M05N7RAXE ","M05N7RAYE ","M05N7RAZE ","M05N7RDXE ","M05N7RDYE ", & + "M05N7RDZE ","M05N7TAXE ","M05N7TAYE ","M05N7TAZE ","M05N7TDXSS","M05N7TDYSS","M05N7TDZSS", & + "M05N8FKXE ","M05N8FKYE ","M05N8FKZE ","M05N8FMXE ","M05N8FMYE ","M05N8FMZE ","M05N8MKXE ", & + "M05N8MKYE ","M05N8MKZE ","M05N8MMXE ","M05N8MMYE ","M05N8MMZE ","M05N8RAXE ","M05N8RAYE ", & + "M05N8RAZE ","M05N8RDXE ","M05N8RDYE ","M05N8RDZE ","M05N8TAXE ","M05N8TAYE ","M05N8TAZE ", & + "M05N8TDXSS","M05N8TDYSS","M05N8TDZSS","M05N9FKXE ","M05N9FKYE ","M05N9FKZE ","M05N9FMXE ", & + "M05N9FMYE ","M05N9FMZE ","M05N9MKXE ","M05N9MKYE ","M05N9MKZE ","M05N9MMXE ","M05N9MMYE ", & + "M05N9MMZE ","M05N9RAXE ","M05N9RAYE ","M05N9RAZE ","M05N9RDXE ","M05N9RDYE ","M05N9RDZE ", & + "M05N9TAXE ","M05N9TAYE ","M05N9TAZE ","M05N9TDXSS","M05N9TDYSS","M05N9TDZSS","M06N1FKXE ", & + "M06N1FKYE ","M06N1FKZE ","M06N1FMXE ","M06N1FMYE ","M06N1FMZE ","M06N1MKXE ","M06N1MKYE ", & + "M06N1MKZE ","M06N1MMXE ","M06N1MMYE ","M06N1MMZE ","M06N1RAXE ","M06N1RAYE ","M06N1RAZE ", & + "M06N1RDXE ","M06N1RDYE ","M06N1RDZE ","M06N1TAXE ","M06N1TAYE ","M06N1TAZE ","M06N1TDXSS", & + "M06N1TDYSS","M06N1TDZSS","M06N2FKXE ","M06N2FKYE ","M06N2FKZE ","M06N2FMXE ","M06N2FMYE ", & + "M06N2FMZE ","M06N2MKXE ","M06N2MKYE ","M06N2MKZE ","M06N2MMXE ","M06N2MMYE ","M06N2MMZE ", & + "M06N2RAXE ","M06N2RAYE ","M06N2RAZE ","M06N2RDXE ","M06N2RDYE ","M06N2RDZE ","M06N2TAXE ", & + "M06N2TAYE ","M06N2TAZE ","M06N2TDXSS","M06N2TDYSS","M06N2TDZSS","M06N3FKXE ","M06N3FKYE ", & + "M06N3FKZE ","M06N3FMXE ","M06N3FMYE ","M06N3FMZE ","M06N3MKXE ","M06N3MKYE ","M06N3MKZE ", & + "M06N3MMXE ","M06N3MMYE ","M06N3MMZE ","M06N3RAXE ","M06N3RAYE ","M06N3RAZE ","M06N3RDXE ", & + "M06N3RDYE ","M06N3RDZE ","M06N3TAXE ","M06N3TAYE ","M06N3TAZE ","M06N3TDXSS","M06N3TDYSS", & + "M06N3TDZSS","M06N4FKXE ","M06N4FKYE ","M06N4FKZE ","M06N4FMXE ","M06N4FMYE ","M06N4FMZE ", & + "M06N4MKXE ","M06N4MKYE ","M06N4MKZE ","M06N4MMXE ","M06N4MMYE ","M06N4MMZE ","M06N4RAXE ", & + "M06N4RAYE ","M06N4RAZE ","M06N4RDXE ","M06N4RDYE ","M06N4RDZE ","M06N4TAXE ","M06N4TAYE ", & + "M06N4TAZE ","M06N4TDXSS","M06N4TDYSS","M06N4TDZSS","M06N5FKXE ","M06N5FKYE ","M06N5FKZE ", & + "M06N5FMXE ","M06N5FMYE ","M06N5FMZE ","M06N5MKXE ","M06N5MKYE ","M06N5MKZE ","M06N5MMXE ", & + "M06N5MMYE ","M06N5MMZE ","M06N5RAXE ","M06N5RAYE ","M06N5RAZE ","M06N5RDXE ","M06N5RDYE ", & + "M06N5RDZE ","M06N5TAXE ","M06N5TAYE ","M06N5TAZE ","M06N5TDXSS","M06N5TDYSS","M06N5TDZSS", & + "M06N6FKXE ","M06N6FKYE ","M06N6FKZE ","M06N6FMXE ","M06N6FMYE ","M06N6FMZE ","M06N6MKXE ", & + "M06N6MKYE ","M06N6MKZE ","M06N6MMXE ","M06N6MMYE ","M06N6MMZE ","M06N6RAXE ","M06N6RAYE ", & + "M06N6RAZE ","M06N6RDXE ","M06N6RDYE ","M06N6RDZE ","M06N6TAXE ","M06N6TAYE ","M06N6TAZE ", & + "M06N6TDXSS","M06N6TDYSS","M06N6TDZSS","M06N7FKXE ","M06N7FKYE ","M06N7FKZE ","M06N7FMXE ", & + "M06N7FMYE ","M06N7FMZE ","M06N7MKXE ","M06N7MKYE ","M06N7MKZE ","M06N7MMXE ","M06N7MMYE ", & + "M06N7MMZE ","M06N7RAXE ","M06N7RAYE ","M06N7RAZE ","M06N7RDXE ","M06N7RDYE ","M06N7RDZE ", & + "M06N7TAXE ","M06N7TAYE ","M06N7TAZE ","M06N7TDXSS","M06N7TDYSS","M06N7TDZSS","M06N8FKXE ", & + "M06N8FKYE ","M06N8FKZE ","M06N8FMXE ","M06N8FMYE ","M06N8FMZE ","M06N8MKXE ","M06N8MKYE ", & + "M06N8MKZE ","M06N8MMXE ","M06N8MMYE ","M06N8MMZE ","M06N8RAXE ","M06N8RAYE ","M06N8RAZE ", & + "M06N8RDXE ","M06N8RDYE ","M06N8RDZE ","M06N8TAXE ","M06N8TAYE ","M06N8TAZE ","M06N8TDXSS", & + "M06N8TDYSS","M06N8TDZSS","M06N9FKXE ","M06N9FKYE ","M06N9FKZE ","M06N9FMXE ","M06N9FMYE ", & + "M06N9FMZE ","M06N9MKXE ","M06N9MKYE ","M06N9MKZE ","M06N9MMXE ","M06N9MMYE ","M06N9MMZE ", & + "M06N9RAXE ","M06N9RAYE ","M06N9RAZE ","M06N9RDXE ","M06N9RDYE ","M06N9RDZE ","M06N9TAXE ", & + "M06N9TAYE ","M06N9TAZE ","M06N9TDXSS","M06N9TDYSS","M06N9TDZSS","M07N1FKXE ","M07N1FKYE ", & + "M07N1FKZE ","M07N1FMXE ","M07N1FMYE ","M07N1FMZE ","M07N1MKXE ","M07N1MKYE ","M07N1MKZE ", & + "M07N1MMXE ","M07N1MMYE ","M07N1MMZE ","M07N1RAXE ","M07N1RAYE ","M07N1RAZE ","M07N1RDXE ", & + "M07N1RDYE ","M07N1RDZE ","M07N1TAXE ","M07N1TAYE ","M07N1TAZE ","M07N1TDXSS","M07N1TDYSS", & + "M07N1TDZSS","M07N2FKXE ","M07N2FKYE ","M07N2FKZE ","M07N2FMXE ","M07N2FMYE ","M07N2FMZE ", & + "M07N2MKXE ","M07N2MKYE ","M07N2MKZE ","M07N2MMXE ","M07N2MMYE ","M07N2MMZE ","M07N2RAXE ", & + "M07N2RAYE ","M07N2RAZE ","M07N2RDXE ","M07N2RDYE ","M07N2RDZE ","M07N2TAXE ","M07N2TAYE ", & + "M07N2TAZE ","M07N2TDXSS","M07N2TDYSS","M07N2TDZSS","M07N3FKXE ","M07N3FKYE ","M07N3FKZE ", & + "M07N3FMXE ","M07N3FMYE ","M07N3FMZE ","M07N3MKXE ","M07N3MKYE ","M07N3MKZE ","M07N3MMXE ", & + "M07N3MMYE ","M07N3MMZE ","M07N3RAXE ","M07N3RAYE ","M07N3RAZE ","M07N3RDXE ","M07N3RDYE ", & + "M07N3RDZE ","M07N3TAXE ","M07N3TAYE ","M07N3TAZE ","M07N3TDXSS","M07N3TDYSS","M07N3TDZSS", & + "M07N4FKXE ","M07N4FKYE ","M07N4FKZE ","M07N4FMXE ","M07N4FMYE ","M07N4FMZE ","M07N4MKXE ", & + "M07N4MKYE ","M07N4MKZE ","M07N4MMXE ","M07N4MMYE ","M07N4MMZE ","M07N4RAXE ","M07N4RAYE ", & + "M07N4RAZE ","M07N4RDXE ","M07N4RDYE ","M07N4RDZE ","M07N4TAXE ","M07N4TAYE ","M07N4TAZE ", & + "M07N4TDXSS","M07N4TDYSS","M07N4TDZSS","M07N5FKXE ","M07N5FKYE ","M07N5FKZE ","M07N5FMXE ", & + "M07N5FMYE ","M07N5FMZE ","M07N5MKXE ","M07N5MKYE ","M07N5MKZE ","M07N5MMXE ","M07N5MMYE ", & + "M07N5MMZE ","M07N5RAXE ","M07N5RAYE ","M07N5RAZE ","M07N5RDXE ","M07N5RDYE ","M07N5RDZE ", & + "M07N5TAXE ","M07N5TAYE ","M07N5TAZE ","M07N5TDXSS","M07N5TDYSS","M07N5TDZSS","M07N6FKXE ", & + "M07N6FKYE ","M07N6FKZE ","M07N6FMXE ","M07N6FMYE ","M07N6FMZE ","M07N6MKXE ","M07N6MKYE ", & + "M07N6MKZE ","M07N6MMXE ","M07N6MMYE ","M07N6MMZE ","M07N6RAXE ","M07N6RAYE ","M07N6RAZE ", & + "M07N6RDXE ","M07N6RDYE ","M07N6RDZE ","M07N6TAXE ","M07N6TAYE ","M07N6TAZE ","M07N6TDXSS", & + "M07N6TDYSS","M07N6TDZSS","M07N7FKXE ","M07N7FKYE ","M07N7FKZE ","M07N7FMXE ","M07N7FMYE ", & + "M07N7FMZE ","M07N7MKXE ","M07N7MKYE ","M07N7MKZE ","M07N7MMXE ","M07N7MMYE ","M07N7MMZE ", & + "M07N7RAXE ","M07N7RAYE ","M07N7RAZE ","M07N7RDXE ","M07N7RDYE ","M07N7RDZE ","M07N7TAXE ", & + "M07N7TAYE ","M07N7TAZE ","M07N7TDXSS","M07N7TDYSS","M07N7TDZSS","M07N8FKXE ","M07N8FKYE ", & + "M07N8FKZE ","M07N8FMXE ","M07N8FMYE ","M07N8FMZE ","M07N8MKXE ","M07N8MKYE ","M07N8MKZE ", & + "M07N8MMXE ","M07N8MMYE ","M07N8MMZE ","M07N8RAXE ","M07N8RAYE ","M07N8RAZE ","M07N8RDXE ", & + "M07N8RDYE ","M07N8RDZE ","M07N8TAXE ","M07N8TAYE ","M07N8TAZE ","M07N8TDXSS","M07N8TDYSS", & + "M07N8TDZSS","M07N9FKXE ","M07N9FKYE ","M07N9FKZE ","M07N9FMXE ","M07N9FMYE ","M07N9FMZE ", & + "M07N9MKXE ","M07N9MKYE ","M07N9MKZE ","M07N9MMXE ","M07N9MMYE ","M07N9MMZE ","M07N9RAXE ", & + "M07N9RAYE ","M07N9RAZE ","M07N9RDXE ","M07N9RDYE ","M07N9RDZE ","M07N9TAXE ","M07N9TAYE ", & + "M07N9TAZE ","M07N9TDXSS","M07N9TDYSS","M07N9TDZSS","M08N1FKXE ","M08N1FKYE ","M08N1FKZE ", & + "M08N1FMXE ","M08N1FMYE ","M08N1FMZE ","M08N1MKXE ","M08N1MKYE ","M08N1MKZE ","M08N1MMXE ", & + "M08N1MMYE ","M08N1MMZE ","M08N1RAXE ","M08N1RAYE ","M08N1RAZE ","M08N1RDXE ","M08N1RDYE ", & + "M08N1RDZE ","M08N1TAXE ","M08N1TAYE ","M08N1TAZE ","M08N1TDXSS","M08N1TDYSS","M08N1TDZSS", & + "M08N2FKXE ","M08N2FKYE ","M08N2FKZE ","M08N2FMXE ","M08N2FMYE ","M08N2FMZE ","M08N2MKXE ", & + "M08N2MKYE ","M08N2MKZE ","M08N2MMXE ","M08N2MMYE ","M08N2MMZE ","M08N2RAXE ","M08N2RAYE ", & + "M08N2RAZE ","M08N2RDXE ","M08N2RDYE ","M08N2RDZE ","M08N2TAXE ","M08N2TAYE ","M08N2TAZE ", & + "M08N2TDXSS","M08N2TDYSS","M08N2TDZSS","M08N3FKXE ","M08N3FKYE ","M08N3FKZE ","M08N3FMXE ", & + "M08N3FMYE ","M08N3FMZE ","M08N3MKXE ","M08N3MKYE ","M08N3MKZE ","M08N3MMXE ","M08N3MMYE ", & + "M08N3MMZE ","M08N3RAXE ","M08N3RAYE ","M08N3RAZE ","M08N3RDXE ","M08N3RDYE ","M08N3RDZE ", & + "M08N3TAXE ","M08N3TAYE ","M08N3TAZE ","M08N3TDXSS","M08N3TDYSS","M08N3TDZSS","M08N4FKXE ", & + "M08N4FKYE ","M08N4FKZE ","M08N4FMXE ","M08N4FMYE ","M08N4FMZE ","M08N4MKXE ","M08N4MKYE ", & + "M08N4MKZE ","M08N4MMXE ","M08N4MMYE ","M08N4MMZE ","M08N4RAXE ","M08N4RAYE ","M08N4RAZE ", & + "M08N4RDXE ","M08N4RDYE ","M08N4RDZE ","M08N4TAXE ","M08N4TAYE ","M08N4TAZE ","M08N4TDXSS", & + "M08N4TDYSS","M08N4TDZSS","M08N5FKXE ","M08N5FKYE ","M08N5FKZE ","M08N5FMXE ","M08N5FMYE ", & + "M08N5FMZE ","M08N5MKXE ","M08N5MKYE ","M08N5MKZE ","M08N5MMXE ","M08N5MMYE ","M08N5MMZE ", & + "M08N5RAXE ","M08N5RAYE ","M08N5RAZE ","M08N5RDXE ","M08N5RDYE ","M08N5RDZE ","M08N5TAXE ", & + "M08N5TAYE ","M08N5TAZE ","M08N5TDXSS","M08N5TDYSS","M08N5TDZSS","M08N6FKXE ","M08N6FKYE ", & + "M08N6FKZE ","M08N6FMXE ","M08N6FMYE ","M08N6FMZE ","M08N6MKXE ","M08N6MKYE ","M08N6MKZE ", & + "M08N6MMXE ","M08N6MMYE ","M08N6MMZE ","M08N6RAXE ","M08N6RAYE ","M08N6RAZE ","M08N6RDXE ", & + "M08N6RDYE ","M08N6RDZE ","M08N6TAXE ","M08N6TAYE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry2(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M08N6TAZE ","M08N6TDXSS","M08N6TDYSS","M08N6TDZSS","M08N7FKXE ","M08N7FKYE ","M08N7FKZE ", & + "M08N7FMXE ","M08N7FMYE ","M08N7FMZE ","M08N7MKXE ","M08N7MKYE ","M08N7MKZE ","M08N7MMXE ", & + "M08N7MMYE ","M08N7MMZE ","M08N7RAXE ","M08N7RAYE ","M08N7RAZE ","M08N7RDXE ","M08N7RDYE ", & + "M08N7RDZE ","M08N7TAXE ","M08N7TAYE ","M08N7TAZE ","M08N7TDXSS","M08N7TDYSS","M08N7TDZSS", & + "M08N8FKXE ","M08N8FKYE ","M08N8FKZE ","M08N8FMXE ","M08N8FMYE ","M08N8FMZE ","M08N8MKXE ", & + "M08N8MKYE ","M08N8MKZE ","M08N8MMXE ","M08N8MMYE ","M08N8MMZE ","M08N8RAXE ","M08N8RAYE ", & + "M08N8RAZE ","M08N8RDXE ","M08N8RDYE ","M08N8RDZE ","M08N8TAXE ","M08N8TAYE ","M08N8TAZE ", & + "M08N8TDXSS","M08N8TDYSS","M08N8TDZSS","M08N9FKXE ","M08N9FKYE ","M08N9FKZE ","M08N9FMXE ", & + "M08N9FMYE ","M08N9FMZE ","M08N9MKXE ","M08N9MKYE ","M08N9MKZE ","M08N9MMXE ","M08N9MMYE ", & + "M08N9MMZE ","M08N9RAXE ","M08N9RAYE ","M08N9RAZE ","M08N9RDXE ","M08N9RDYE ","M08N9RDZE ", & + "M08N9TAXE ","M08N9TAYE ","M08N9TAZE ","M08N9TDXSS","M08N9TDYSS","M08N9TDZSS","M09N1FKXE ", & + "M09N1FKYE ","M09N1FKZE ","M09N1FMXE ","M09N1FMYE ","M09N1FMZE ","M09N1MKXE ","M09N1MKYE ", & + "M09N1MKZE ","M09N1MMXE ","M09N1MMYE ","M09N1MMZE ","M09N1RAXE ","M09N1RAYE ","M09N1RAZE ", & + "M09N1RDXE ","M09N1RDYE ","M09N1RDZE ","M09N1TAXE ","M09N1TAYE ","M09N1TAZE ","M09N1TDXSS", & + "M09N1TDYSS","M09N1TDZSS","M09N2FKXE ","M09N2FKYE ","M09N2FKZE ","M09N2FMXE ","M09N2FMYE ", & + "M09N2FMZE ","M09N2MKXE ","M09N2MKYE ","M09N2MKZE ","M09N2MMXE ","M09N2MMYE ","M09N2MMZE ", & + "M09N2RAXE ","M09N2RAYE ","M09N2RAZE ","M09N2RDXE ","M09N2RDYE ","M09N2RDZE ","M09N2TAXE ", & + "M09N2TAYE ","M09N2TAZE ","M09N2TDXSS","M09N2TDYSS","M09N2TDZSS","M09N3FKXE ","M09N3FKYE ", & + "M09N3FKZE ","M09N3FMXE ","M09N3FMYE ","M09N3FMZE ","M09N3MKXE ","M09N3MKYE ","M09N3MKZE ", & + "M09N3MMXE ","M09N3MMYE ","M09N3MMZE ","M09N3RAXE ","M09N3RAYE ","M09N3RAZE ","M09N3RDXE ", & + "M09N3RDYE ","M09N3RDZE ","M09N3TAXE ","M09N3TAYE ","M09N3TAZE ","M09N3TDXSS","M09N3TDYSS", & + "M09N3TDZSS","M09N4FKXE ","M09N4FKYE ","M09N4FKZE ","M09N4FMXE ","M09N4FMYE ","M09N4FMZE ", & + "M09N4MKXE ","M09N4MKYE ","M09N4MKZE ","M09N4MMXE ","M09N4MMYE ","M09N4MMZE ","M09N4RAXE ", & + "M09N4RAYE ","M09N4RAZE ","M09N4RDXE ","M09N4RDYE ","M09N4RDZE ","M09N4TAXE ","M09N4TAYE ", & + "M09N4TAZE ","M09N4TDXSS","M09N4TDYSS","M09N4TDZSS","M09N5FKXE ","M09N5FKYE ","M09N5FKZE ", & + "M09N5FMXE ","M09N5FMYE ","M09N5FMZE ","M09N5MKXE ","M09N5MKYE ","M09N5MKZE ","M09N5MMXE ", & + "M09N5MMYE ","M09N5MMZE ","M09N5RAXE ","M09N5RAYE ","M09N5RAZE ","M09N5RDXE ","M09N5RDYE ", & + "M09N5RDZE ","M09N5TAXE ","M09N5TAYE ","M09N5TAZE ","M09N5TDXSS","M09N5TDYSS","M09N5TDZSS", & + "M09N6FKXE ","M09N6FKYE ","M09N6FKZE ","M09N6FMXE ","M09N6FMYE ","M09N6FMZE ","M09N6MKXE ", & + "M09N6MKYE ","M09N6MKZE ","M09N6MMXE ","M09N6MMYE ","M09N6MMZE ","M09N6RAXE ","M09N6RAYE ", & + "M09N6RAZE ","M09N6RDXE ","M09N6RDYE ","M09N6RDZE ","M09N6TAXE ","M09N6TAYE ","M09N6TAZE ", & + "M09N6TDXSS","M09N6TDYSS","M09N6TDZSS","M09N7FKXE ","M09N7FKYE ","M09N7FKZE ","M09N7FMXE ", & + "M09N7FMYE ","M09N7FMZE ","M09N7MKXE ","M09N7MKYE ","M09N7MKZE ","M09N7MMXE ","M09N7MMYE ", & + "M09N7MMZE ","M09N7RAXE ","M09N7RAYE ","M09N7RAZE ","M09N7RDXE ","M09N7RDYE ","M09N7RDZE ", & + "M09N7TAXE ","M09N7TAYE ","M09N7TAZE ","M09N7TDXSS","M09N7TDYSS","M09N7TDZSS","M09N8FKXE ", & + "M09N8FKYE ","M09N8FKZE ","M09N8FMXE ","M09N8FMYE ","M09N8FMZE ","M09N8MKXE ","M09N8MKYE ", & + "M09N8MKZE ","M09N8MMXE ","M09N8MMYE ","M09N8MMZE ","M09N8RAXE ","M09N8RAYE ","M09N8RAZE ", & + "M09N8RDXE ","M09N8RDYE ","M09N8RDZE ","M09N8TAXE ","M09N8TAYE ","M09N8TAZE ","M09N8TDXSS", & + "M09N8TDYSS","M09N8TDZSS","M09N9FKXE ","M09N9FKYE ","M09N9FKZE ","M09N9FMXE ","M09N9FMYE ", & + "M09N9FMZE ","M09N9MKXE ","M09N9MKYE ","M09N9MKZE ","M09N9MMXE ","M09N9MMYE ","M09N9MMZE ", & + "M09N9RAXE ","M09N9RAYE ","M09N9RAZE ","M09N9RDXE ","M09N9RDYE ","M09N9RDZE ","M09N9TAXE ", & + "M09N9TAYE ","M09N9TAZE ","M09N9TDXSS","M09N9TDYSS","M09N9TDZSS","M10N1FKXE ","M10N1FKYE ", & + "M10N1FKZE ","M10N1FMXE ","M10N1FMYE ","M10N1FMZE ","M10N1MKXE ","M10N1MKYE ","M10N1MKZE ", & + "M10N1MMXE ","M10N1MMYE ","M10N1MMZE ","M10N1RAXE ","M10N1RAYE ","M10N1RAZE ","M10N1RDXE ", & + "M10N1RDYE ","M10N1RDZE ","M10N1TAXE ","M10N1TAYE ","M10N1TAZE ","M10N1TDXSS","M10N1TDYSS", & + "M10N1TDZSS","M10N2FKXE ","M10N2FKYE ","M10N2FKZE ","M10N2FMXE ","M10N2FMYE ","M10N2FMZE ", & + "M10N2MKXE ","M10N2MKYE ","M10N2MKZE ","M10N2MMXE ","M10N2MMYE ","M10N2MMZE ","M10N2RAXE ", & + "M10N2RAYE ","M10N2RAZE ","M10N2RDXE ","M10N2RDYE ","M10N2RDZE ","M10N2TAXE ","M10N2TAYE ", & + "M10N2TAZE ","M10N2TDXSS","M10N2TDYSS","M10N2TDZSS","M10N3FKXE ","M10N3FKYE ","M10N3FKZE ", & + "M10N3FMXE ","M10N3FMYE ","M10N3FMZE ","M10N3MKXE ","M10N3MKYE ","M10N3MKZE ","M10N3MMXE ", & + "M10N3MMYE ","M10N3MMZE ","M10N3RAXE ","M10N3RAYE ","M10N3RAZE ","M10N3RDXE ","M10N3RDYE ", & + "M10N3RDZE ","M10N3TAXE ","M10N3TAYE ","M10N3TAZE ","M10N3TDXSS","M10N3TDYSS","M10N3TDZSS", & + "M10N4FKXE ","M10N4FKYE ","M10N4FKZE ","M10N4FMXE ","M10N4FMYE ","M10N4FMZE ","M10N4MKXE ", & + "M10N4MKYE ","M10N4MKZE ","M10N4MMXE ","M10N4MMYE ","M10N4MMZE ","M10N4RAXE ","M10N4RAYE ", & + "M10N4RAZE ","M10N4RDXE ","M10N4RDYE ","M10N4RDZE ","M10N4TAXE ","M10N4TAYE ","M10N4TAZE ", & + "M10N4TDXSS","M10N4TDYSS","M10N4TDZSS","M10N5FKXE ","M10N5FKYE ","M10N5FKZE ","M10N5FMXE ", & + "M10N5FMYE ","M10N5FMZE ","M10N5MKXE ","M10N5MKYE ","M10N5MKZE ","M10N5MMXE ","M10N5MMYE ", & + "M10N5MMZE ","M10N5RAXE ","M10N5RAYE ","M10N5RAZE ","M10N5RDXE ","M10N5RDYE ","M10N5RDZE ", & + "M10N5TAXE ","M10N5TAYE ","M10N5TAZE ","M10N5TDXSS","M10N5TDYSS","M10N5TDZSS","M10N6FKXE ", & + "M10N6FKYE ","M10N6FKZE ","M10N6FMXE ","M10N6FMYE ","M10N6FMZE ","M10N6MKXE ","M10N6MKYE ", & + "M10N6MKZE ","M10N6MMXE ","M10N6MMYE ","M10N6MMZE ","M10N6RAXE ","M10N6RAYE ","M10N6RAZE ", & + "M10N6RDXE ","M10N6RDYE ","M10N6RDZE ","M10N6TAXE ","M10N6TAYE ","M10N6TAZE ","M10N6TDXSS", & + "M10N6TDYSS","M10N6TDZSS","M10N7FKXE ","M10N7FKYE ","M10N7FKZE ","M10N7FMXE ","M10N7FMYE ", & + "M10N7FMZE ","M10N7MKXE ","M10N7MKYE ","M10N7MKZE ","M10N7MMXE ","M10N7MMYE ","M10N7MMZE ", & + "M10N7RAXE ","M10N7RAYE ","M10N7RAZE ","M10N7RDXE ","M10N7RDYE ","M10N7RDZE ","M10N7TAXE ", & + "M10N7TAYE ","M10N7TAZE ","M10N7TDXSS","M10N7TDYSS","M10N7TDZSS","M10N8FKXE ","M10N8FKYE ", & + "M10N8FKZE ","M10N8FMXE ","M10N8FMYE ","M10N8FMZE ","M10N8MKXE ","M10N8MKYE ","M10N8MKZE ", & + "M10N8MMXE ","M10N8MMYE ","M10N8MMZE ","M10N8RAXE ","M10N8RAYE ","M10N8RAZE ","M10N8RDXE ", & + "M10N8RDYE ","M10N8RDZE ","M10N8TAXE ","M10N8TAYE ","M10N8TAZE ","M10N8TDXSS","M10N8TDYSS", & + "M10N8TDZSS","M10N9FKXE ","M10N9FKYE ","M10N9FKZE ","M10N9FMXE ","M10N9FMYE ","M10N9FMZE ", & + "M10N9MKXE ","M10N9MKYE ","M10N9MKZE ","M10N9MMXE ","M10N9MMYE ","M10N9MMZE ","M10N9RAXE ", & + "M10N9RAYE ","M10N9RAZE ","M10N9RDXE ","M10N9RDYE ","M10N9RDZE ","M10N9TAXE ","M10N9TAYE ", & + "M10N9TAZE ","M10N9TDXSS","M10N9TDYSS","M10N9TDZSS","M11N1FKXE ","M11N1FKYE ","M11N1FKZE ", & + "M11N1FMXE ","M11N1FMYE ","M11N1FMZE ","M11N1MKXE ","M11N1MKYE ","M11N1MKZE ","M11N1MMXE ", & + "M11N1MMYE ","M11N1MMZE ","M11N1RAXE ","M11N1RAYE ","M11N1RAZE ","M11N1RDXE ","M11N1RDYE ", & + "M11N1RDZE ","M11N1TAXE ","M11N1TAYE ","M11N1TAZE ","M11N1TDXSS","M11N1TDYSS","M11N1TDZSS", & + "M11N2FKXE ","M11N2FKYE ","M11N2FKZE ","M11N2FMXE ","M11N2FMYE ","M11N2FMZE ","M11N2MKXE ", & + "M11N2MKYE ","M11N2MKZE ","M11N2MMXE ","M11N2MMYE ","M11N2MMZE ","M11N2RAXE ","M11N2RAYE ", & + "M11N2RAZE ","M11N2RDXE ","M11N2RDYE ","M11N2RDZE ","M11N2TAXE ","M11N2TAYE ","M11N2TAZE ", & + "M11N2TDXSS","M11N2TDYSS","M11N2TDZSS","M11N3FKXE ","M11N3FKYE ","M11N3FKZE ","M11N3FMXE ", & + "M11N3FMYE ","M11N3FMZE ","M11N3MKXE ","M11N3MKYE ","M11N3MKZE ","M11N3MMXE ","M11N3MMYE ", & + "M11N3MMZE ","M11N3RAXE ","M11N3RAYE ","M11N3RAZE ","M11N3RDXE ","M11N3RDYE ","M11N3RDZE ", & + "M11N3TAXE ","M11N3TAYE ","M11N3TAZE ","M11N3TDXSS","M11N3TDYSS","M11N3TDZSS","M11N4FKXE ", & + "M11N4FKYE ","M11N4FKZE ","M11N4FMXE ","M11N4FMYE ","M11N4FMZE ","M11N4MKXE ","M11N4MKYE ", & + "M11N4MKZE ","M11N4MMXE ","M11N4MMYE ","M11N4MMZE ","M11N4RAXE ","M11N4RAYE ","M11N4RAZE ", & + "M11N4RDXE ","M11N4RDYE ","M11N4RDZE ","M11N4TAXE ","M11N4TAYE ","M11N4TAZE ","M11N4TDXSS", & + "M11N4TDYSS","M11N4TDZSS","M11N5FKXE ","M11N5FKYE ","M11N5FKZE ","M11N5FMXE ","M11N5FMYE ", & + "M11N5FMZE ","M11N5MKXE ","M11N5MKYE ","M11N5MKZE ","M11N5MMXE ","M11N5MMYE ","M11N5MMZE ", & + "M11N5RAXE ","M11N5RAYE ","M11N5RAZE ","M11N5RDXE ","M11N5RDYE ","M11N5RDZE ","M11N5TAXE ", & + "M11N5TAYE ","M11N5TAZE ","M11N5TDXSS","M11N5TDYSS","M11N5TDZSS","M11N6FKXE ","M11N6FKYE ", & + "M11N6FKZE ","M11N6FMXE ","M11N6FMYE ","M11N6FMZE ","M11N6MKXE ","M11N6MKYE ","M11N6MKZE ", & + "M11N6MMXE ","M11N6MMYE ","M11N6MMZE ","M11N6RAXE ","M11N6RAYE ","M11N6RAZE ","M11N6RDXE ", & + "M11N6RDYE ","M11N6RDZE ","M11N6TAXE ","M11N6TAYE ","M11N6TAZE ","M11N6TDXSS","M11N6TDYSS", & + "M11N6TDZSS","M11N7FKXE ","M11N7FKYE ","M11N7FKZE ","M11N7FMXE ","M11N7FMYE ","M11N7FMZE ", & + "M11N7MKXE ","M11N7MKYE ","M11N7MKZE ","M11N7MMXE ","M11N7MMYE ","M11N7MMZE ","M11N7RAXE ", & + "M11N7RAYE ","M11N7RAZE ","M11N7RDXE ","M11N7RDYE ","M11N7RDZE ","M11N7TAXE ","M11N7TAYE ", & + "M11N7TAZE ","M11N7TDXSS","M11N7TDYSS","M11N7TDZSS","M11N8FKXE ","M11N8FKYE ","M11N8FKZE ", & + "M11N8FMXE ","M11N8FMYE ","M11N8FMZE ","M11N8MKXE ","M11N8MKYE ","M11N8MKZE ","M11N8MMXE ", & + "M11N8MMYE ","M11N8MMZE ","M11N8RAXE ","M11N8RAYE ","M11N8RAZE ","M11N8RDXE ","M11N8RDYE ", & + "M11N8RDZE ","M11N8TAXE ","M11N8TAYE ","M11N8TAZE ","M11N8TDXSS","M11N8TDYSS","M11N8TDZSS", & + "M11N9FKXE ","M11N9FKYE ","M11N9FKZE ","M11N9FMXE ","M11N9FMYE ","M11N9FMZE ","M11N9MKXE ", & + "M11N9MKYE ","M11N9MKZE ","M11N9MMXE ","M11N9MMYE ","M11N9MMZE ","M11N9RAXE ","M11N9RAYE ", & + "M11N9RAZE ","M11N9RDXE ","M11N9RDYE ","M11N9RDZE ","M11N9TAXE ","M11N9TAYE ","M11N9TAZE ", & + "M11N9TDXSS","M11N9TDYSS","M11N9TDZSS","M12N1FKXE ","M12N1FKYE ","M12N1FKZE ","M12N1FMXE ", & + "M12N1FMYE ","M12N1FMZE ","M12N1MKXE ","M12N1MKYE ","M12N1MKZE ","M12N1MMXE ","M12N1MMYE ", & + "M12N1MMZE ","M12N1RAXE ","M12N1RAYE ","M12N1RAZE ","M12N1RDXE ","M12N1RDYE ","M12N1RDZE ", & + "M12N1TAXE ","M12N1TAYE ","M12N1TAZE ","M12N1TDXSS","M12N1TDYSS","M12N1TDZSS","M12N2FKXE ", & + "M12N2FKYE ","M12N2FKZE ","M12N2FMXE ","M12N2FMYE ","M12N2FMZE ","M12N2MKXE ","M12N2MKYE ", & + "M12N2MKZE ","M12N2MMXE ","M12N2MMYE ","M12N2MMZE ","M12N2RAXE ","M12N2RAYE ","M12N2RAZE ", & + "M12N2RDXE ","M12N2RDYE ","M12N2RDZE ","M12N2TAXE ","M12N2TAYE ","M12N2TAZE ","M12N2TDXSS", & + "M12N2TDYSS","M12N2TDZSS","M12N3FKXE ","M12N3FKYE ","M12N3FKZE ","M12N3FMXE ","M12N3FMYE ", & + "M12N3FMZE ","M12N3MKXE ","M12N3MKYE ","M12N3MKZE ","M12N3MMXE ","M12N3MMYE ","M12N3MMZE ", & + "M12N3RAXE ","M12N3RAYE ","M12N3RAZE ","M12N3RDXE ","M12N3RDYE ","M12N3RDZE ","M12N3TAXE ", & + "M12N3TAYE ","M12N3TAZE ","M12N3TDXSS","M12N3TDYSS","M12N3TDZSS","M12N4FKXE ","M12N4FKYE ", & + "M12N4FKZE ","M12N4FMXE ","M12N4FMYE ","M12N4FMZE ","M12N4MKXE ","M12N4MKYE ","M12N4MKZE ", & + "M12N4MMXE ","M12N4MMYE ","M12N4MMZE ","M12N4RAXE ","M12N4RAYE ","M12N4RAZE ","M12N4RDXE ", & + "M12N4RDYE ","M12N4RDZE ","M12N4TAXE ","M12N4TAYE ","M12N4TAZE ","M12N4TDXSS","M12N4TDYSS", & + "M12N4TDZSS","M12N5FKXE ","M12N5FKYE ","M12N5FKZE ","M12N5FMXE ","M12N5FMYE ","M12N5FMZE ", & + "M12N5MKXE ","M12N5MKYE ","M12N5MKZE ","M12N5MMXE ","M12N5MMYE ","M12N5MMZE ","M12N5RAXE ", & + "M12N5RAYE ","M12N5RAZE ","M12N5RDXE ","M12N5RDYE ","M12N5RDZE ","M12N5TAXE ","M12N5TAYE ", & + "M12N5TAZE ","M12N5TDXSS","M12N5TDYSS","M12N5TDZSS","M12N6FKXE ","M12N6FKYE ","M12N6FKZE ", & + "M12N6FMXE ","M12N6FMYE ","M12N6FMZE ","M12N6MKXE ","M12N6MKYE ","M12N6MKZE ","M12N6MMXE ", & + "M12N6MMYE ","M12N6MMZE ","M12N6RAXE ","M12N6RAYE ","M12N6RAZE ","M12N6RDXE ","M12N6RDYE ", & + "M12N6RDZE ","M12N6TAXE ","M12N6TAYE ","M12N6TAZE ","M12N6TDXSS","M12N6TDYSS","M12N6TDZSS", & + "M12N7FKXE ","M12N7FKYE ","M12N7FKZE ","M12N7FMXE ","M12N7FMYE ","M12N7FMZE ","M12N7MKXE ", & + "M12N7MKYE ","M12N7MKZE ","M12N7MMXE ","M12N7MMYE ","M12N7MMZE ","M12N7RAXE ","M12N7RAYE ", & + "M12N7RAZE ","M12N7RDXE ","M12N7RDYE ","M12N7RDZE ","M12N7TAXE ","M12N7TAYE ","M12N7TAZE ", & + "M12N7TDXSS","M12N7TDYSS","M12N7TDZSS","M12N8FKXE ","M12N8FKYE ","M12N8FKZE ","M12N8FMXE ", & + "M12N8FMYE ","M12N8FMZE ","M12N8MKXE ","M12N8MKYE ","M12N8MKZE ","M12N8MMXE ","M12N8MMYE ", & + "M12N8MMZE ","M12N8RAXE ","M12N8RAYE ","M12N8RAZE ","M12N8RDXE ","M12N8RDYE ","M12N8RDZE ", & + "M12N8TAXE ","M12N8TAYE ","M12N8TAZE ","M12N8TDXSS","M12N8TDYSS","M12N8TDZSS","M12N9FKXE ", & + "M12N9FKYE ","M12N9FKZE ","M12N9FMXE ","M12N9FMYE ","M12N9FMZE ","M12N9MKXE ","M12N9MKYE ", & + "M12N9MKZE ","M12N9MMXE ","M12N9MMYE ","M12N9MMZE ","M12N9RAXE ","M12N9RAYE ","M12N9RAZE ", & + "M12N9RDXE ","M12N9RDYE ","M12N9RDZE ","M12N9TAXE ","M12N9TAYE ","M12N9TAZE ","M12N9TDXSS", & + "M12N9TDYSS","M12N9TDZSS","M13N1FKXE ","M13N1FKYE ","M13N1FKZE ","M13N1FMXE ","M13N1FMYE ", & + "M13N1FMZE ","M13N1MKXE ","M13N1MKYE ","M13N1MKZE ","M13N1MMXE ","M13N1MMYE ","M13N1MMZE ", & + "M13N1RAXE ","M13N1RAYE ","M13N1RAZE ","M13N1RDXE ","M13N1RDYE ","M13N1RDZE ","M13N1TAXE ", & + "M13N1TAYE ","M13N1TAZE ","M13N1TDXSS","M13N1TDYSS","M13N1TDZSS","M13N2FKXE ","M13N2FKYE ", & + "M13N2FKZE ","M13N2FMXE ","M13N2FMYE ","M13N2FMZE ","M13N2MKXE ","M13N2MKYE ","M13N2MKZE ", & + "M13N2MMXE ","M13N2MMYE ","M13N2MMZE ","M13N2RAXE ","M13N2RAYE ","M13N2RAZE ","M13N2RDXE ", & + "M13N2RDYE ","M13N2RDZE ","M13N2TAXE ","M13N2TAYE ","M13N2TAZE ","M13N2TDXSS","M13N2TDYSS", & + "M13N2TDZSS","M13N3FKXE ","M13N3FKYE ","M13N3FKZE ","M13N3FMXE ","M13N3FMYE ","M13N3FMZE ", & + "M13N3MKXE ","M13N3MKYE ","M13N3MKZE ","M13N3MMXE ","M13N3MMYE ","M13N3MMZE ","M13N3RAXE ", & + "M13N3RAYE ","M13N3RAZE ","M13N3RDXE ","M13N3RDYE ","M13N3RDZE ","M13N3TAXE ","M13N3TAYE ", & + "M13N3TAZE ","M13N3TDXSS","M13N3TDYSS","M13N3TDZSS","M13N4FKXE ","M13N4FKYE ","M13N4FKZE ", & + "M13N4FMXE ","M13N4FMYE ","M13N4FMZE ","M13N4MKXE ","M13N4MKYE ","M13N4MKZE ","M13N4MMXE ", & + "M13N4MMYE ","M13N4MMZE ","M13N4RAXE ","M13N4RAYE ","M13N4RAZE ","M13N4RDXE ","M13N4RDYE ", & + "M13N4RDZE ","M13N4TAXE ","M13N4TAYE ","M13N4TAZE ","M13N4TDXSS","M13N4TDYSS","M13N4TDZSS", & + "M13N5FKXE ","M13N5FKYE ","M13N5FKZE ","M13N5FMXE ","M13N5FMYE ","M13N5FMZE ","M13N5MKXE ", & + "M13N5MKYE ","M13N5MKZE ","M13N5MMXE ","M13N5MMYE ","M13N5MMZE ","M13N5RAXE ","M13N5RAYE ", & + "M13N5RAZE ","M13N5RDXE ","M13N5RDYE ","M13N5RDZE ","M13N5TAXE ","M13N5TAYE ","M13N5TAZE ", & + "M13N5TDXSS","M13N5TDYSS","M13N5TDZSS","M13N6FKXE ","M13N6FKYE ","M13N6FKZE ","M13N6FMXE ", & + "M13N6FMYE ","M13N6FMZE ","M13N6MKXE ","M13N6MKYE ","M13N6MKZE ","M13N6MMXE ","M13N6MMYE ", & + "M13N6MMZE ","M13N6RAXE ","M13N6RAYE ","M13N6RAZE ","M13N6RDXE ","M13N6RDYE ","M13N6RDZE ", & + "M13N6TAXE ","M13N6TAYE ","M13N6TAZE ","M13N6TDXSS","M13N6TDYSS","M13N6TDZSS","M13N7FKXE ", & + "M13N7FKYE ","M13N7FKZE ","M13N7FMXE ","M13N7FMYE ","M13N7FMZE ","M13N7MKXE ","M13N7MKYE ", & + "M13N7MKZE ","M13N7MMXE ","M13N7MMYE ","M13N7MMZE ","M13N7RAXE ","M13N7RAYE ","M13N7RAZE ", & + "M13N7RDXE ","M13N7RDYE ","M13N7RDZE ","M13N7TAXE ","M13N7TAYE ","M13N7TAZE ","M13N7TDXSS", & + "M13N7TDYSS","M13N7TDZSS","M13N8FKXE ","M13N8FKYE ","M13N8FKZE ","M13N8FMXE ","M13N8FMYE ", & + "M13N8FMZE ","M13N8MKXE ","M13N8MKYE ","M13N8MKZE ","M13N8MMXE ","M13N8MMYE ","M13N8MMZE ", & + "M13N8RAXE ","M13N8RAYE ","M13N8RAZE ","M13N8RDXE ","M13N8RDYE ","M13N8RDZE ","M13N8TAXE ", & + "M13N8TAYE ","M13N8TAZE ","M13N8TDXSS","M13N8TDYSS","M13N8TDZSS","M13N9FKXE ","M13N9FKYE ", & + "M13N9FKZE ","M13N9FMXE ","M13N9FMYE ","M13N9FMZE ","M13N9MKXE ","M13N9MKYE ","M13N9MKZE ", & + "M13N9MMXE ","M13N9MMYE ","M13N9MMZE ","M13N9RAXE ","M13N9RAYE ","M13N9RAZE ","M13N9RDXE ", & + "M13N9RDYE ","M13N9RDZE ","M13N9TAXE ","M13N9TAYE ","M13N9TAZE ","M13N9TDXSS","M13N9TDYSS", & + "M13N9TDZSS","M14N1FKXE ","M14N1FKYE ","M14N1FKZE ","M14N1FMXE ","M14N1FMYE ","M14N1FMZE ", & + "M14N1MKXE ","M14N1MKYE ","M14N1MKZE ","M14N1MMXE ","M14N1MMYE ","M14N1MMZE ","M14N1RAXE ", & + "M14N1RAYE ","M14N1RAZE ","M14N1RDXE ","M14N1RDYE ","M14N1RDZE ","M14N1TAXE ","M14N1TAYE ", & + "M14N1TAZE ","M14N1TDXSS","M14N1TDYSS","M14N1TDZSS","M14N2FKXE ","M14N2FKYE ","M14N2FKZE ", & + "M14N2FMXE ","M14N2FMYE ","M14N2FMZE ","M14N2MKXE ","M14N2MKYE ","M14N2MKZE ","M14N2MMXE ", & + "M14N2MMYE ","M14N2MMZE ","M14N2RAXE ","M14N2RAYE ","M14N2RAZE ","M14N2RDXE ","M14N2RDYE ", & + "M14N2RDZE ","M14N2TAXE ","M14N2TAYE ","M14N2TAZE ","M14N2TDXSS","M14N2TDYSS","M14N2TDZSS", & + "M14N3FKXE ","M14N3FKYE ","M14N3FKZE ","M14N3FMXE ","M14N3FMYE ","M14N3FMZE ","M14N3MKXE ", & + "M14N3MKYE ","M14N3MKZE ","M14N3MMXE ","M14N3MMYE ","M14N3MMZE ","M14N3RAXE ","M14N3RAYE ", & + "M14N3RAZE ","M14N3RDXE ","M14N3RDYE ","M14N3RDZE ","M14N3TAXE ","M14N3TAYE ","M14N3TAZE ", & + "M14N3TDXSS","M14N3TDYSS","M14N3TDZSS","M14N4FKXE ","M14N4FKYE ","M14N4FKZE ","M14N4FMXE ", & + "M14N4FMYE ","M14N4FMZE ","M14N4MKXE ","M14N4MKYE ","M14N4MKZE ","M14N4MMXE ","M14N4MMYE ", & + "M14N4MMZE ","M14N4RAXE ","M14N4RAYE ","M14N4RAZE ","M14N4RDXE ","M14N4RDYE ","M14N4RDZE ", & + "M14N4TAXE ","M14N4TAYE ","M14N4TAZE ","M14N4TDXSS","M14N4TDYSS","M14N4TDZSS","M14N5FKXE ", & + "M14N5FKYE ","M14N5FKZE ","M14N5FMXE ","M14N5FMYE ","M14N5FMZE ","M14N5MKXE ","M14N5MKYE ", & + "M14N5MKZE ","M14N5MMXE ","M14N5MMYE ","M14N5MMZE ","M14N5RAXE ","M14N5RAYE ","M14N5RAZE ", & + "M14N5RDXE ","M14N5RDYE ","M14N5RDZE ","M14N5TAXE ","M14N5TAYE ","M14N5TAZE ","M14N5TDXSS", & + "M14N5TDYSS","M14N5TDZSS","M14N6FKXE ","M14N6FKYE ","M14N6FKZE ","M14N6FMXE ","M14N6FMYE ", & + "M14N6FMZE ","M14N6MKXE ","M14N6MKYE ","M14N6MKZE ","M14N6MMXE ","M14N6MMYE ","M14N6MMZE ", & + "M14N6RAXE ","M14N6RAYE ","M14N6RAZE ","M14N6RDXE ","M14N6RDYE ","M14N6RDZE ","M14N6TAXE ", & + "M14N6TAYE ","M14N6TAZE ","M14N6TDXSS","M14N6TDYSS","M14N6TDZSS","M14N7FKXE ","M14N7FKYE ", & + "M14N7FKZE ","M14N7FMXE ","M14N7FMYE ","M14N7FMZE ","M14N7MKXE ","M14N7MKYE ","M14N7MKZE ", & + "M14N7MMXE ","M14N7MMYE ","M14N7MMZE ","M14N7RAXE ","M14N7RAYE ","M14N7RAZE ","M14N7RDXE ", & + "M14N7RDYE ","M14N7RDZE ","M14N7TAXE ","M14N7TAYE ","M14N7TAZE ","M14N7TDXSS","M14N7TDYSS", & + "M14N7TDZSS","M14N8FKXE ","M14N8FKYE ","M14N8FKZE ","M14N8FMXE ","M14N8FMYE ","M14N8FMZE ", & + "M14N8MKXE ","M14N8MKYE ","M14N8MKZE ","M14N8MMXE ","M14N8MMYE ","M14N8MMZE ","M14N8RAXE ", & + "M14N8RAYE ","M14N8RAZE ","M14N8RDXE ","M14N8RDYE ","M14N8RDZE ","M14N8TAXE ","M14N8TAYE ", & + "M14N8TAZE ","M14N8TDXSS","M14N8TDYSS","M14N8TDZSS","M14N9FKXE ","M14N9FKYE ","M14N9FKZE ", & + "M14N9FMXE ","M14N9FMYE ","M14N9FMZE ","M14N9MKXE ","M14N9MKYE ","M14N9MKZE ","M14N9MMXE ", & + "M14N9MMYE ","M14N9MMZE ","M14N9RAXE ","M14N9RAYE ","M14N9RAZE ","M14N9RDXE ","M14N9RDYE ", & + "M14N9RDZE ","M14N9TAXE ","M14N9TAYE ","M14N9TAZE ","M14N9TDXSS","M14N9TDYSS","M14N9TDZSS", & + "M15N1FKXE ","M15N1FKYE ","M15N1FKZE ","M15N1FMXE ","M15N1FMYE ","M15N1FMZE ","M15N1MKXE ", & + "M15N1MKYE ","M15N1MKZE ","M15N1MMXE ","M15N1MMYE ","M15N1MMZE ","M15N1RAXE ","M15N1RAYE ", & + "M15N1RAZE ","M15N1RDXE ","M15N1RDYE ","M15N1RDZE ","M15N1TAXE ","M15N1TAYE ","M15N1TAZE ", & + "M15N1TDXSS","M15N1TDYSS","M15N1TDZSS","M15N2FKXE ","M15N2FKYE ","M15N2FKZE ","M15N2FMXE ", & + "M15N2FMYE ","M15N2FMZE ","M15N2MKXE ","M15N2MKYE ","M15N2MKZE ","M15N2MMXE ","M15N2MMYE ", & + "M15N2MMZE ","M15N2RAXE ","M15N2RAYE ","M15N2RAZE ","M15N2RDXE ","M15N2RDYE ","M15N2RDZE ", & + "M15N2TAXE ","M15N2TAYE ","M15N2TAZE ","M15N2TDXSS","M15N2TDYSS","M15N2TDZSS","M15N3FKXE ", & + "M15N3FKYE ","M15N3FKZE ","M15N3FMXE ","M15N3FMYE ","M15N3FMZE ","M15N3MKXE ","M15N3MKYE ", & + "M15N3MKZE ","M15N3MMXE ","M15N3MMYE ","M15N3MMZE ","M15N3RAXE ","M15N3RAYE ","M15N3RAZE ", & + "M15N3RDXE ","M15N3RDYE ","M15N3RDZE ","M15N3TAXE ","M15N3TAYE ","M15N3TAZE ","M15N3TDXSS", & + "M15N3TDYSS","M15N3TDZSS","M15N4FKXE ","M15N4FKYE ","M15N4FKZE ","M15N4FMXE ","M15N4FMYE ", & + "M15N4FMZE ","M15N4MKXE ","M15N4MKYE ","M15N4MKZE ","M15N4MMXE ","M15N4MMYE ","M15N4MMZE ", & + "M15N4RAXE ","M15N4RAYE ","M15N4RAZE ","M15N4RDXE ","M15N4RDYE ","M15N4RDZE ","M15N4TAXE ", & + "M15N4TAYE ","M15N4TAZE ","M15N4TDXSS","M15N4TDYSS","M15N4TDZSS","M15N5FKXE ","M15N5FKYE ", & + "M15N5FKZE ","M15N5FMXE ","M15N5FMYE ","M15N5FMZE ","M15N5MKXE ","M15N5MKYE ","M15N5MKZE ", & + "M15N5MMXE ","M15N5MMYE ","M15N5MMZE ","M15N5RAXE ","M15N5RAYE ","M15N5RAZE ","M15N5RDXE ", & + "M15N5RDYE ","M15N5RDZE ","M15N5TAXE ","M15N5TAYE ","M15N5TAZE ","M15N5TDXSS","M15N5TDYSS", & + "M15N5TDZSS","M15N6FKXE ","M15N6FKYE ","M15N6FKZE ","M15N6FMXE ","M15N6FMYE ","M15N6FMZE ", & + "M15N6MKXE ","M15N6MKYE ","M15N6MKZE ","M15N6MMXE ","M15N6MMYE ","M15N6MMZE ","M15N6RAXE ", & + "M15N6RAYE ","M15N6RAZE ","M15N6RDXE ","M15N6RDYE ","M15N6RDZE ","M15N6TAXE ","M15N6TAYE ", & + "M15N6TAZE ","M15N6TDXSS","M15N6TDYSS","M15N6TDZSS","M15N7FKXE ","M15N7FKYE ","M15N7FKZE ", & + "M15N7FMXE ","M15N7FMYE ","M15N7FMZE ","M15N7MKXE ","M15N7MKYE ","M15N7MKZE ","M15N7MMXE ", & + "M15N7MMYE ","M15N7MMZE ","M15N7RAXE ","M15N7RAYE ","M15N7RAZE ","M15N7RDXE ","M15N7RDYE ", & + "M15N7RDZE ","M15N7TAXE ","M15N7TAYE ","M15N7TAZE ","M15N7TDXSS","M15N7TDYSS","M15N7TDZSS", & + "M15N8FKXE ","M15N8FKYE ","M15N8FKZE ","M15N8FMXE ","M15N8FMYE ","M15N8FMZE ","M15N8MKXE ", & + "M15N8MKYE ","M15N8MKZE ","M15N8MMXE ","M15N8MMYE ","M15N8MMZE ","M15N8RAXE ","M15N8RAYE ", & + "M15N8RAZE ","M15N8RDXE ","M15N8RDYE ","M15N8RDZE ","M15N8TAXE ","M15N8TAYE ","M15N8TAZE ", & + "M15N8TDXSS","M15N8TDYSS","M15N8TDZSS","M15N9FKXE ","M15N9FKYE ","M15N9FKZE ","M15N9FMXE ", & + "M15N9FMYE ","M15N9FMZE ","M15N9MKXE ","M15N9MKYE ","M15N9MKZE ","M15N9MMXE ","M15N9MMYE ", & + "M15N9MMZE ","M15N9RAXE ","M15N9RAYE ","M15N9RAZE ","M15N9RDXE ","M15N9RDYE ","M15N9RDZE ", & + "M15N9TAXE ","M15N9TAYE ","M15N9TAZE ","M15N9TDXSS","M15N9TDYSS","M15N9TDZSS","M16N1FKXE ", & + "M16N1FKYE ","M16N1FKZE ","M16N1FMXE ","M16N1FMYE ","M16N1FMZE ","M16N1MKXE ","M16N1MKYE ", & + "M16N1MKZE ","M16N1MMXE ","M16N1MMYE ","M16N1MMZE ","M16N1RAXE ","M16N1RAYE ","M16N1RAZE ", & + "M16N1RDXE ","M16N1RDYE ","M16N1RDZE ","M16N1TAXE ","M16N1TAYE ","M16N1TAZE ","M16N1TDXSS", & + "M16N1TDYSS","M16N1TDZSS","M16N2FKXE ","M16N2FKYE ","M16N2FKZE ","M16N2FMXE ","M16N2FMYE ", & + "M16N2FMZE ","M16N2MKXE ","M16N2MKYE ","M16N2MKZE ","M16N2MMXE ","M16N2MMYE ","M16N2MMZE ", & + "M16N2RAXE ","M16N2RAYE ","M16N2RAZE ","M16N2RDXE ","M16N2RDYE ","M16N2RDZE ","M16N2TAXE ", & + "M16N2TAYE ","M16N2TAZE ","M16N2TDXSS","M16N2TDYSS","M16N2TDZSS","M16N3FKXE ","M16N3FKYE ", & + "M16N3FKZE ","M16N3FMXE ","M16N3FMYE ","M16N3FMZE ","M16N3MKXE ","M16N3MKYE ","M16N3MKZE ", & + "M16N3MMXE ","M16N3MMYE ","M16N3MMZE ","M16N3RAXE ","M16N3RAYE ","M16N3RAZE ","M16N3RDXE ", & + "M16N3RDYE ","M16N3RDZE ","M16N3TAXE ","M16N3TAYE ","M16N3TAZE ","M16N3TDXSS","M16N3TDYSS", & + "M16N3TDZSS","M16N4FKXE ","M16N4FKYE ","M16N4FKZE ","M16N4FMXE ","M16N4FMYE ","M16N4FMZE ", & + "M16N4MKXE ","M16N4MKYE ","M16N4MKZE ","M16N4MMXE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry3(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M16N4MMYE ","M16N4MMZE ","M16N4RAXE ","M16N4RAYE ","M16N4RAZE ","M16N4RDXE ","M16N4RDYE ", & + "M16N4RDZE ","M16N4TAXE ","M16N4TAYE ","M16N4TAZE ","M16N4TDXSS","M16N4TDYSS","M16N4TDZSS", & + "M16N5FKXE ","M16N5FKYE ","M16N5FKZE ","M16N5FMXE ","M16N5FMYE ","M16N5FMZE ","M16N5MKXE ", & + "M16N5MKYE ","M16N5MKZE ","M16N5MMXE ","M16N5MMYE ","M16N5MMZE ","M16N5RAXE ","M16N5RAYE ", & + "M16N5RAZE ","M16N5RDXE ","M16N5RDYE ","M16N5RDZE ","M16N5TAXE ","M16N5TAYE ","M16N5TAZE ", & + "M16N5TDXSS","M16N5TDYSS","M16N5TDZSS","M16N6FKXE ","M16N6FKYE ","M16N6FKZE ","M16N6FMXE ", & + "M16N6FMYE ","M16N6FMZE ","M16N6MKXE ","M16N6MKYE ","M16N6MKZE ","M16N6MMXE ","M16N6MMYE ", & + "M16N6MMZE ","M16N6RAXE ","M16N6RAYE ","M16N6RAZE ","M16N6RDXE ","M16N6RDYE ","M16N6RDZE ", & + "M16N6TAXE ","M16N6TAYE ","M16N6TAZE ","M16N6TDXSS","M16N6TDYSS","M16N6TDZSS","M16N7FKXE ", & + "M16N7FKYE ","M16N7FKZE ","M16N7FMXE ","M16N7FMYE ","M16N7FMZE ","M16N7MKXE ","M16N7MKYE ", & + "M16N7MKZE ","M16N7MMXE ","M16N7MMYE ","M16N7MMZE ","M16N7RAXE ","M16N7RAYE ","M16N7RAZE ", & + "M16N7RDXE ","M16N7RDYE ","M16N7RDZE ","M16N7TAXE ","M16N7TAYE ","M16N7TAZE ","M16N7TDXSS", & + "M16N7TDYSS","M16N7TDZSS","M16N8FKXE ","M16N8FKYE ","M16N8FKZE ","M16N8FMXE ","M16N8FMYE ", & + "M16N8FMZE ","M16N8MKXE ","M16N8MKYE ","M16N8MKZE ","M16N8MMXE ","M16N8MMYE ","M16N8MMZE ", & + "M16N8RAXE ","M16N8RAYE ","M16N8RAZE ","M16N8RDXE ","M16N8RDYE ","M16N8RDZE ","M16N8TAXE ", & + "M16N8TAYE ","M16N8TAZE ","M16N8TDXSS","M16N8TDYSS","M16N8TDZSS","M16N9FKXE ","M16N9FKYE ", & + "M16N9FKZE ","M16N9FMXE ","M16N9FMYE ","M16N9FMZE ","M16N9MKXE ","M16N9MKYE ","M16N9MKZE ", & + "M16N9MMXE ","M16N9MMYE ","M16N9MMZE ","M16N9RAXE ","M16N9RAYE ","M16N9RAZE ","M16N9RDXE ", & + "M16N9RDYE ","M16N9RDZE ","M16N9TAXE ","M16N9TAYE ","M16N9TAZE ","M16N9TDXSS","M16N9TDYSS", & + "M16N9TDZSS","M17N1FKXE ","M17N1FKYE ","M17N1FKZE ","M17N1FMXE ","M17N1FMYE ","M17N1FMZE ", & + "M17N1MKXE ","M17N1MKYE ","M17N1MKZE ","M17N1MMXE ","M17N1MMYE ","M17N1MMZE ","M17N1RAXE ", & + "M17N1RAYE ","M17N1RAZE ","M17N1RDXE ","M17N1RDYE ","M17N1RDZE ","M17N1TAXE ","M17N1TAYE ", & + "M17N1TAZE ","M17N1TDXSS","M17N1TDYSS","M17N1TDZSS","M17N2FKXE ","M17N2FKYE ","M17N2FKZE ", & + "M17N2FMXE ","M17N2FMYE ","M17N2FMZE ","M17N2MKXE ","M17N2MKYE ","M17N2MKZE ","M17N2MMXE ", & + "M17N2MMYE ","M17N2MMZE ","M17N2RAXE ","M17N2RAYE ","M17N2RAZE ","M17N2RDXE ","M17N2RDYE ", & + "M17N2RDZE ","M17N2TAXE ","M17N2TAYE ","M17N2TAZE ","M17N2TDXSS","M17N2TDYSS","M17N2TDZSS", & + "M17N3FKXE ","M17N3FKYE ","M17N3FKZE ","M17N3FMXE ","M17N3FMYE ","M17N3FMZE ","M17N3MKXE ", & + "M17N3MKYE ","M17N3MKZE ","M17N3MMXE ","M17N3MMYE ","M17N3MMZE ","M17N3RAXE ","M17N3RAYE ", & + "M17N3RAZE ","M17N3RDXE ","M17N3RDYE ","M17N3RDZE ","M17N3TAXE ","M17N3TAYE ","M17N3TAZE ", & + "M17N3TDXSS","M17N3TDYSS","M17N3TDZSS","M17N4FKXE ","M17N4FKYE ","M17N4FKZE ","M17N4FMXE ", & + "M17N4FMYE ","M17N4FMZE ","M17N4MKXE ","M17N4MKYE ","M17N4MKZE ","M17N4MMXE ","M17N4MMYE ", & + "M17N4MMZE ","M17N4RAXE ","M17N4RAYE ","M17N4RAZE ","M17N4RDXE ","M17N4RDYE ","M17N4RDZE ", & + "M17N4TAXE ","M17N4TAYE ","M17N4TAZE ","M17N4TDXSS","M17N4TDYSS","M17N4TDZSS","M17N5FKXE ", & + "M17N5FKYE ","M17N5FKZE ","M17N5FMXE ","M17N5FMYE ","M17N5FMZE ","M17N5MKXE ","M17N5MKYE ", & + "M17N5MKZE ","M17N5MMXE ","M17N5MMYE ","M17N5MMZE ","M17N5RAXE ","M17N5RAYE ","M17N5RAZE ", & + "M17N5RDXE ","M17N5RDYE ","M17N5RDZE ","M17N5TAXE ","M17N5TAYE ","M17N5TAZE ","M17N5TDXSS", & + "M17N5TDYSS","M17N5TDZSS","M17N6FKXE ","M17N6FKYE ","M17N6FKZE ","M17N6FMXE ","M17N6FMYE ", & + "M17N6FMZE ","M17N6MKXE ","M17N6MKYE ","M17N6MKZE ","M17N6MMXE ","M17N6MMYE ","M17N6MMZE ", & + "M17N6RAXE ","M17N6RAYE ","M17N6RAZE ","M17N6RDXE ","M17N6RDYE ","M17N6RDZE ","M17N6TAXE ", & + "M17N6TAYE ","M17N6TAZE ","M17N6TDXSS","M17N6TDYSS","M17N6TDZSS","M17N7FKXE ","M17N7FKYE ", & + "M17N7FKZE ","M17N7FMXE ","M17N7FMYE ","M17N7FMZE ","M17N7MKXE ","M17N7MKYE ","M17N7MKZE ", & + "M17N7MMXE ","M17N7MMYE ","M17N7MMZE ","M17N7RAXE ","M17N7RAYE ","M17N7RAZE ","M17N7RDXE ", & + "M17N7RDYE ","M17N7RDZE ","M17N7TAXE ","M17N7TAYE ","M17N7TAZE ","M17N7TDXSS","M17N7TDYSS", & + "M17N7TDZSS","M17N8FKXE ","M17N8FKYE ","M17N8FKZE ","M17N8FMXE ","M17N8FMYE ","M17N8FMZE ", & + "M17N8MKXE ","M17N8MKYE ","M17N8MKZE ","M17N8MMXE ","M17N8MMYE ","M17N8MMZE ","M17N8RAXE ", & + "M17N8RAYE ","M17N8RAZE ","M17N8RDXE ","M17N8RDYE ","M17N8RDZE ","M17N8TAXE ","M17N8TAYE ", & + "M17N8TAZE ","M17N8TDXSS","M17N8TDYSS","M17N8TDZSS","M17N9FKXE ","M17N9FKYE ","M17N9FKZE ", & + "M17N9FMXE ","M17N9FMYE ","M17N9FMZE ","M17N9MKXE ","M17N9MKYE ","M17N9MKZE ","M17N9MMXE ", & + "M17N9MMYE ","M17N9MMZE ","M17N9RAXE ","M17N9RAYE ","M17N9RAZE ","M17N9RDXE ","M17N9RDYE ", & + "M17N9RDZE ","M17N9TAXE ","M17N9TAYE ","M17N9TAZE ","M17N9TDXSS","M17N9TDYSS","M17N9TDZSS", & + "M18N1FKXE ","M18N1FKYE ","M18N1FKZE ","M18N1FMXE ","M18N1FMYE ","M18N1FMZE ","M18N1MKXE ", & + "M18N1MKYE ","M18N1MKZE ","M18N1MMXE ","M18N1MMYE ","M18N1MMZE ","M18N1RAXE ","M18N1RAYE ", & + "M18N1RAZE ","M18N1RDXE ","M18N1RDYE ","M18N1RDZE ","M18N1TAXE ","M18N1TAYE ","M18N1TAZE ", & + "M18N1TDXSS","M18N1TDYSS","M18N1TDZSS","M18N2FKXE ","M18N2FKYE ","M18N2FKZE ","M18N2FMXE ", & + "M18N2FMYE ","M18N2FMZE ","M18N2MKXE ","M18N2MKYE ","M18N2MKZE ","M18N2MMXE ","M18N2MMYE ", & + "M18N2MMZE ","M18N2RAXE ","M18N2RAYE ","M18N2RAZE ","M18N2RDXE ","M18N2RDYE ","M18N2RDZE ", & + "M18N2TAXE ","M18N2TAYE ","M18N2TAZE ","M18N2TDXSS","M18N2TDYSS","M18N2TDZSS","M18N3FKXE ", & + "M18N3FKYE ","M18N3FKZE ","M18N3FMXE ","M18N3FMYE ","M18N3FMZE ","M18N3MKXE ","M18N3MKYE ", & + "M18N3MKZE ","M18N3MMXE ","M18N3MMYE ","M18N3MMZE ","M18N3RAXE ","M18N3RAYE ","M18N3RAZE ", & + "M18N3RDXE ","M18N3RDYE ","M18N3RDZE ","M18N3TAXE ","M18N3TAYE ","M18N3TAZE ","M18N3TDXSS", & + "M18N3TDYSS","M18N3TDZSS","M18N4FKXE ","M18N4FKYE ","M18N4FKZE ","M18N4FMXE ","M18N4FMYE ", & + "M18N4FMZE ","M18N4MKXE ","M18N4MKYE ","M18N4MKZE ","M18N4MMXE ","M18N4MMYE ","M18N4MMZE ", & + "M18N4RAXE ","M18N4RAYE ","M18N4RAZE ","M18N4RDXE ","M18N4RDYE ","M18N4RDZE ","M18N4TAXE ", & + "M18N4TAYE ","M18N4TAZE ","M18N4TDXSS","M18N4TDYSS","M18N4TDZSS","M18N5FKXE ","M18N5FKYE ", & + "M18N5FKZE ","M18N5FMXE ","M18N5FMYE ","M18N5FMZE ","M18N5MKXE ","M18N5MKYE ","M18N5MKZE ", & + "M18N5MMXE ","M18N5MMYE ","M18N5MMZE ","M18N5RAXE ","M18N5RAYE ","M18N5RAZE ","M18N5RDXE ", & + "M18N5RDYE ","M18N5RDZE ","M18N5TAXE ","M18N5TAYE ","M18N5TAZE ","M18N5TDXSS","M18N5TDYSS", & + "M18N5TDZSS","M18N6FKXE ","M18N6FKYE ","M18N6FKZE ","M18N6FMXE ","M18N6FMYE ","M18N6FMZE ", & + "M18N6MKXE ","M18N6MKYE ","M18N6MKZE ","M18N6MMXE ","M18N6MMYE ","M18N6MMZE ","M18N6RAXE ", & + "M18N6RAYE ","M18N6RAZE ","M18N6RDXE ","M18N6RDYE ","M18N6RDZE ","M18N6TAXE ","M18N6TAYE ", & + "M18N6TAZE ","M18N6TDXSS","M18N6TDYSS","M18N6TDZSS","M18N7FKXE ","M18N7FKYE ","M18N7FKZE ", & + "M18N7FMXE ","M18N7FMYE ","M18N7FMZE ","M18N7MKXE ","M18N7MKYE ","M18N7MKZE ","M18N7MMXE ", & + "M18N7MMYE ","M18N7MMZE ","M18N7RAXE ","M18N7RAYE ","M18N7RAZE ","M18N7RDXE ","M18N7RDYE ", & + "M18N7RDZE ","M18N7TAXE ","M18N7TAYE ","M18N7TAZE ","M18N7TDXSS","M18N7TDYSS","M18N7TDZSS", & + "M18N8FKXE ","M18N8FKYE ","M18N8FKZE ","M18N8FMXE ","M18N8FMYE ","M18N8FMZE ","M18N8MKXE ", & + "M18N8MKYE ","M18N8MKZE ","M18N8MMXE ","M18N8MMYE ","M18N8MMZE ","M18N8RAXE ","M18N8RAYE ", & + "M18N8RAZE ","M18N8RDXE ","M18N8RDYE ","M18N8RDZE ","M18N8TAXE ","M18N8TAYE ","M18N8TAZE ", & + "M18N8TDXSS","M18N8TDYSS","M18N8TDZSS","M18N9FKXE ","M18N9FKYE ","M18N9FKZE ","M18N9FMXE ", & + "M18N9FMYE ","M18N9FMZE ","M18N9MKXE ","M18N9MKYE ","M18N9MKZE ","M18N9MMXE ","M18N9MMYE ", & + "M18N9MMZE ","M18N9RAXE ","M18N9RAYE ","M18N9RAZE ","M18N9RDXE ","M18N9RDYE ","M18N9RDZE ", & + "M18N9TAXE ","M18N9TAYE ","M18N9TAZE ","M18N9TDXSS","M18N9TDYSS","M18N9TDZSS","M19N1FKXE ", & + "M19N1FKYE ","M19N1FKZE ","M19N1FMXE ","M19N1FMYE ","M19N1FMZE ","M19N1MKXE ","M19N1MKYE ", & + "M19N1MKZE ","M19N1MMXE ","M19N1MMYE ","M19N1MMZE ","M19N1RAXE ","M19N1RAYE ","M19N1RAZE ", & + "M19N1RDXE ","M19N1RDYE ","M19N1RDZE ","M19N1TAXE ","M19N1TAYE ","M19N1TAZE ","M19N1TDXSS", & + "M19N1TDYSS","M19N1TDZSS","M19N2FKXE ","M19N2FKYE ","M19N2FKZE ","M19N2FMXE ","M19N2FMYE ", & + "M19N2FMZE ","M19N2MKXE ","M19N2MKYE ","M19N2MKZE ","M19N2MMXE ","M19N2MMYE ","M19N2MMZE ", & + "M19N2RAXE ","M19N2RAYE ","M19N2RAZE ","M19N2RDXE ","M19N2RDYE ","M19N2RDZE ","M19N2TAXE ", & + "M19N2TAYE ","M19N2TAZE ","M19N2TDXSS","M19N2TDYSS","M19N2TDZSS","M19N3FKXE ","M19N3FKYE ", & + "M19N3FKZE ","M19N3FMXE ","M19N3FMYE ","M19N3FMZE ","M19N3MKXE ","M19N3MKYE ","M19N3MKZE ", & + "M19N3MMXE ","M19N3MMYE ","M19N3MMZE ","M19N3RAXE ","M19N3RAYE ","M19N3RAZE ","M19N3RDXE ", & + "M19N3RDYE ","M19N3RDZE ","M19N3TAXE ","M19N3TAYE ","M19N3TAZE ","M19N3TDXSS","M19N3TDYSS", & + "M19N3TDZSS","M19N4FKXE ","M19N4FKYE ","M19N4FKZE ","M19N4FMXE ","M19N4FMYE ","M19N4FMZE ", & + "M19N4MKXE ","M19N4MKYE ","M19N4MKZE ","M19N4MMXE ","M19N4MMYE ","M19N4MMZE ","M19N4RAXE ", & + "M19N4RAYE ","M19N4RAZE ","M19N4RDXE ","M19N4RDYE ","M19N4RDZE ","M19N4TAXE ","M19N4TAYE ", & + "M19N4TAZE ","M19N4TDXSS","M19N4TDYSS","M19N4TDZSS","M19N5FKXE ","M19N5FKYE ","M19N5FKZE ", & + "M19N5FMXE ","M19N5FMYE ","M19N5FMZE ","M19N5MKXE ","M19N5MKYE ","M19N5MKZE ","M19N5MMXE ", & + "M19N5MMYE ","M19N5MMZE ","M19N5RAXE ","M19N5RAYE ","M19N5RAZE ","M19N5RDXE ","M19N5RDYE ", & + "M19N5RDZE ","M19N5TAXE ","M19N5TAYE ","M19N5TAZE ","M19N5TDXSS","M19N5TDYSS","M19N5TDZSS", & + "M19N6FKXE ","M19N6FKYE ","M19N6FKZE ","M19N6FMXE ","M19N6FMYE ","M19N6FMZE ","M19N6MKXE ", & + "M19N6MKYE ","M19N6MKZE ","M19N6MMXE ","M19N6MMYE ","M19N6MMZE ","M19N6RAXE ","M19N6RAYE ", & + "M19N6RAZE ","M19N6RDXE ","M19N6RDYE ","M19N6RDZE ","M19N6TAXE ","M19N6TAYE ","M19N6TAZE ", & + "M19N6TDXSS","M19N6TDYSS","M19N6TDZSS","M19N7FKXE ","M19N7FKYE ","M19N7FKZE ","M19N7FMXE ", & + "M19N7FMYE ","M19N7FMZE ","M19N7MKXE ","M19N7MKYE ","M19N7MKZE ","M19N7MMXE ","M19N7MMYE ", & + "M19N7MMZE ","M19N7RAXE ","M19N7RAYE ","M19N7RAZE ","M19N7RDXE ","M19N7RDYE ","M19N7RDZE ", & + "M19N7TAXE ","M19N7TAYE ","M19N7TAZE ","M19N7TDXSS","M19N7TDYSS","M19N7TDZSS","M19N8FKXE ", & + "M19N8FKYE ","M19N8FKZE ","M19N8FMXE ","M19N8FMYE ","M19N8FMZE ","M19N8MKXE ","M19N8MKYE ", & + "M19N8MKZE ","M19N8MMXE ","M19N8MMYE ","M19N8MMZE ","M19N8RAXE ","M19N8RAYE ","M19N8RAZE ", & + "M19N8RDXE ","M19N8RDYE ","M19N8RDZE ","M19N8TAXE ","M19N8TAYE ","M19N8TAZE ","M19N8TDXSS", & + "M19N8TDYSS","M19N8TDZSS","M19N9FKXE ","M19N9FKYE ","M19N9FKZE ","M19N9FMXE ","M19N9FMYE ", & + "M19N9FMZE ","M19N9MKXE ","M19N9MKYE ","M19N9MKZE ","M19N9MMXE ","M19N9MMYE ","M19N9MMZE ", & + "M19N9RAXE ","M19N9RAYE ","M19N9RAZE ","M19N9RDXE ","M19N9RDYE ","M19N9RDZE ","M19N9TAXE ", & + "M19N9TAYE ","M19N9TAZE ","M19N9TDXSS","M19N9TDYSS","M19N9TDZSS","M20N1FKXE ","M20N1FKYE ", & + "M20N1FKZE ","M20N1FMXE ","M20N1FMYE ","M20N1FMZE ","M20N1MKXE ","M20N1MKYE ","M20N1MKZE ", & + "M20N1MMXE ","M20N1MMYE ","M20N1MMZE ","M20N1RAXE ","M20N1RAYE ","M20N1RAZE ","M20N1RDXE ", & + "M20N1RDYE ","M20N1RDZE ","M20N1TAXE ","M20N1TAYE ","M20N1TAZE ","M20N1TDXSS","M20N1TDYSS", & + "M20N1TDZSS","M20N2FKXE ","M20N2FKYE ","M20N2FKZE ","M20N2FMXE ","M20N2FMYE ","M20N2FMZE ", & + "M20N2MKXE ","M20N2MKYE ","M20N2MKZE ","M20N2MMXE ","M20N2MMYE ","M20N2MMZE ","M20N2RAXE ", & + "M20N2RAYE ","M20N2RAZE ","M20N2RDXE ","M20N2RDYE ","M20N2RDZE ","M20N2TAXE ","M20N2TAYE ", & + "M20N2TAZE ","M20N2TDXSS","M20N2TDYSS","M20N2TDZSS","M20N3FKXE ","M20N3FKYE ","M20N3FKZE ", & + "M20N3FMXE ","M20N3FMYE ","M20N3FMZE ","M20N3MKXE ","M20N3MKYE ","M20N3MKZE ","M20N3MMXE ", & + "M20N3MMYE ","M20N3MMZE ","M20N3RAXE ","M20N3RAYE ","M20N3RAZE ","M20N3RDXE ","M20N3RDYE ", & + "M20N3RDZE ","M20N3TAXE ","M20N3TAYE ","M20N3TAZE ","M20N3TDXSS","M20N3TDYSS","M20N3TDZSS", & + "M20N4FKXE ","M20N4FKYE ","M20N4FKZE ","M20N4FMXE ","M20N4FMYE ","M20N4FMZE ","M20N4MKXE ", & + "M20N4MKYE ","M20N4MKZE ","M20N4MMXE ","M20N4MMYE ","M20N4MMZE ","M20N4RAXE ","M20N4RAYE ", & + "M20N4RAZE ","M20N4RDXE ","M20N4RDYE ","M20N4RDZE ","M20N4TAXE ","M20N4TAYE ","M20N4TAZE ", & + "M20N4TDXSS","M20N4TDYSS","M20N4TDZSS","M20N5FKXE ","M20N5FKYE ","M20N5FKZE ","M20N5FMXE ", & + "M20N5FMYE ","M20N5FMZE ","M20N5MKXE ","M20N5MKYE ","M20N5MKZE ","M20N5MMXE ","M20N5MMYE ", & + "M20N5MMZE ","M20N5RAXE ","M20N5RAYE ","M20N5RAZE ","M20N5RDXE ","M20N5RDYE ","M20N5RDZE ", & + "M20N5TAXE ","M20N5TAYE ","M20N5TAZE ","M20N5TDXSS","M20N5TDYSS","M20N5TDZSS","M20N6FKXE ", & + "M20N6FKYE ","M20N6FKZE ","M20N6FMXE ","M20N6FMYE ","M20N6FMZE ","M20N6MKXE ","M20N6MKYE ", & + "M20N6MKZE ","M20N6MMXE ","M20N6MMYE ","M20N6MMZE ","M20N6RAXE ","M20N6RAYE ","M20N6RAZE ", & + "M20N6RDXE ","M20N6RDYE ","M20N6RDZE ","M20N6TAXE ","M20N6TAYE ","M20N6TAZE ","M20N6TDXSS", & + "M20N6TDYSS","M20N6TDZSS","M20N7FKXE ","M20N7FKYE ","M20N7FKZE ","M20N7FMXE ","M20N7FMYE ", & + "M20N7FMZE ","M20N7MKXE ","M20N7MKYE ","M20N7MKZE ","M20N7MMXE ","M20N7MMYE ","M20N7MMZE ", & + "M20N7RAXE ","M20N7RAYE ","M20N7RAZE ","M20N7RDXE ","M20N7RDYE ","M20N7RDZE ","M20N7TAXE ", & + "M20N7TAYE ","M20N7TAZE ","M20N7TDXSS","M20N7TDYSS","M20N7TDZSS","M20N8FKXE ","M20N8FKYE ", & + "M20N8FKZE ","M20N8FMXE ","M20N8FMYE ","M20N8FMZE ","M20N8MKXE ","M20N8MKYE ","M20N8MKZE ", & + "M20N8MMXE ","M20N8MMYE ","M20N8MMZE ","M20N8RAXE ","M20N8RAYE ","M20N8RAZE ","M20N8RDXE ", & + "M20N8RDYE ","M20N8RDZE ","M20N8TAXE ","M20N8TAYE ","M20N8TAZE ","M20N8TDXSS","M20N8TDYSS", & + "M20N8TDZSS","M20N9FKXE ","M20N9FKYE ","M20N9FKZE ","M20N9FMXE ","M20N9FMYE ","M20N9FMZE ", & + "M20N9MKXE ","M20N9MKYE ","M20N9MKZE ","M20N9MMXE ","M20N9MMYE ","M20N9MMZE ","M20N9RAXE ", & + "M20N9RAYE ","M20N9RAZE ","M20N9RDXE ","M20N9RDYE ","M20N9RDZE ","M20N9TAXE ","M20N9TAYE ", & + "M20N9TAZE ","M20N9TDXSS","M20N9TDYSS","M20N9TDZSS","M21N1FKXE ","M21N1FKYE ","M21N1FKZE ", & + "M21N1FMXE ","M21N1FMYE ","M21N1FMZE ","M21N1MKXE ","M21N1MKYE ","M21N1MKZE ","M21N1MMXE ", & + "M21N1MMYE ","M21N1MMZE ","M21N1RAXE ","M21N1RAYE ","M21N1RAZE ","M21N1RDXE ","M21N1RDYE ", & + "M21N1RDZE ","M21N1TAXE ","M21N1TAYE ","M21N1TAZE ","M21N1TDXSS","M21N1TDYSS","M21N1TDZSS", & + "M21N2FKXE ","M21N2FKYE ","M21N2FKZE ","M21N2FMXE ","M21N2FMYE ","M21N2FMZE ","M21N2MKXE ", & + "M21N2MKYE ","M21N2MKZE ","M21N2MMXE ","M21N2MMYE ","M21N2MMZE ","M21N2RAXE ","M21N2RAYE ", & + "M21N2RAZE ","M21N2RDXE ","M21N2RDYE ","M21N2RDZE ","M21N2TAXE ","M21N2TAYE ","M21N2TAZE ", & + "M21N2TDXSS","M21N2TDYSS","M21N2TDZSS","M21N3FKXE ","M21N3FKYE ","M21N3FKZE ","M21N3FMXE ", & + "M21N3FMYE ","M21N3FMZE ","M21N3MKXE ","M21N3MKYE ","M21N3MKZE ","M21N3MMXE ","M21N3MMYE ", & + "M21N3MMZE ","M21N3RAXE ","M21N3RAYE ","M21N3RAZE ","M21N3RDXE ","M21N3RDYE ","M21N3RDZE ", & + "M21N3TAXE ","M21N3TAYE ","M21N3TAZE ","M21N3TDXSS","M21N3TDYSS","M21N3TDZSS","M21N4FKXE ", & + "M21N4FKYE ","M21N4FKZE ","M21N4FMXE ","M21N4FMYE ","M21N4FMZE ","M21N4MKXE ","M21N4MKYE ", & + "M21N4MKZE ","M21N4MMXE ","M21N4MMYE ","M21N4MMZE ","M21N4RAXE ","M21N4RAYE ","M21N4RAZE ", & + "M21N4RDXE ","M21N4RDYE ","M21N4RDZE ","M21N4TAXE ","M21N4TAYE ","M21N4TAZE ","M21N4TDXSS", & + "M21N4TDYSS","M21N4TDZSS","M21N5FKXE ","M21N5FKYE ","M21N5FKZE ","M21N5FMXE ","M21N5FMYE ", & + "M21N5FMZE ","M21N5MKXE ","M21N5MKYE ","M21N5MKZE ","M21N5MMXE ","M21N5MMYE ","M21N5MMZE ", & + "M21N5RAXE ","M21N5RAYE ","M21N5RAZE ","M21N5RDXE ","M21N5RDYE ","M21N5RDZE ","M21N5TAXE ", & + "M21N5TAYE ","M21N5TAZE ","M21N5TDXSS","M21N5TDYSS","M21N5TDZSS","M21N6FKXE ","M21N6FKYE ", & + "M21N6FKZE ","M21N6FMXE ","M21N6FMYE ","M21N6FMZE ","M21N6MKXE ","M21N6MKYE ","M21N6MKZE ", & + "M21N6MMXE ","M21N6MMYE ","M21N6MMZE ","M21N6RAXE ","M21N6RAYE ","M21N6RAZE ","M21N6RDXE ", & + "M21N6RDYE ","M21N6RDZE ","M21N6TAXE ","M21N6TAYE ","M21N6TAZE ","M21N6TDXSS","M21N6TDYSS", & + "M21N6TDZSS","M21N7FKXE ","M21N7FKYE ","M21N7FKZE ","M21N7FMXE ","M21N7FMYE ","M21N7FMZE ", & + "M21N7MKXE ","M21N7MKYE ","M21N7MKZE ","M21N7MMXE ","M21N7MMYE ","M21N7MMZE ","M21N7RAXE ", & + "M21N7RAYE ","M21N7RAZE ","M21N7RDXE ","M21N7RDYE ","M21N7RDZE ","M21N7TAXE ","M21N7TAYE ", & + "M21N7TAZE ","M21N7TDXSS","M21N7TDYSS","M21N7TDZSS","M21N8FKXE ","M21N8FKYE ","M21N8FKZE ", & + "M21N8FMXE ","M21N8FMYE ","M21N8FMZE ","M21N8MKXE ","M21N8MKYE ","M21N8MKZE ","M21N8MMXE ", & + "M21N8MMYE ","M21N8MMZE ","M21N8RAXE ","M21N8RAYE ","M21N8RAZE ","M21N8RDXE ","M21N8RDYE ", & + "M21N8RDZE ","M21N8TAXE ","M21N8TAYE ","M21N8TAZE ","M21N8TDXSS","M21N8TDYSS","M21N8TDZSS", & + "M21N9FKXE ","M21N9FKYE ","M21N9FKZE ","M21N9FMXE ","M21N9FMYE ","M21N9FMZE ","M21N9MKXE ", & + "M21N9MKYE ","M21N9MKZE ","M21N9MMXE ","M21N9MMYE ","M21N9MMZE ","M21N9RAXE ","M21N9RAYE ", & + "M21N9RAZE ","M21N9RDXE ","M21N9RDYE ","M21N9RDZE ","M21N9TAXE ","M21N9TAYE ","M21N9TAZE ", & + "M21N9TDXSS","M21N9TDYSS","M21N9TDZSS","M22N1FKXE ","M22N1FKYE ","M22N1FKZE ","M22N1FMXE ", & + "M22N1FMYE ","M22N1FMZE ","M22N1MKXE ","M22N1MKYE ","M22N1MKZE ","M22N1MMXE ","M22N1MMYE ", & + "M22N1MMZE ","M22N1RAXE ","M22N1RAYE ","M22N1RAZE ","M22N1RDXE ","M22N1RDYE ","M22N1RDZE ", & + "M22N1TAXE ","M22N1TAYE ","M22N1TAZE ","M22N1TDXSS","M22N1TDYSS","M22N1TDZSS","M22N2FKXE ", & + "M22N2FKYE ","M22N2FKZE ","M22N2FMXE ","M22N2FMYE ","M22N2FMZE ","M22N2MKXE ","M22N2MKYE ", & + "M22N2MKZE ","M22N2MMXE ","M22N2MMYE ","M22N2MMZE ","M22N2RAXE ","M22N2RAYE ","M22N2RAZE ", & + "M22N2RDXE ","M22N2RDYE ","M22N2RDZE ","M22N2TAXE ","M22N2TAYE ","M22N2TAZE ","M22N2TDXSS", & + "M22N2TDYSS","M22N2TDZSS","M22N3FKXE ","M22N3FKYE ","M22N3FKZE ","M22N3FMXE ","M22N3FMYE ", & + "M22N3FMZE ","M22N3MKXE ","M22N3MKYE ","M22N3MKZE ","M22N3MMXE ","M22N3MMYE ","M22N3MMZE ", & + "M22N3RAXE ","M22N3RAYE ","M22N3RAZE ","M22N3RDXE ","M22N3RDYE ","M22N3RDZE ","M22N3TAXE ", & + "M22N3TAYE ","M22N3TAZE ","M22N3TDXSS","M22N3TDYSS","M22N3TDZSS","M22N4FKXE ","M22N4FKYE ", & + "M22N4FKZE ","M22N4FMXE ","M22N4FMYE ","M22N4FMZE ","M22N4MKXE ","M22N4MKYE ","M22N4MKZE ", & + "M22N4MMXE ","M22N4MMYE ","M22N4MMZE ","M22N4RAXE ","M22N4RAYE ","M22N4RAZE ","M22N4RDXE ", & + "M22N4RDYE ","M22N4RDZE ","M22N4TAXE ","M22N4TAYE ","M22N4TAZE ","M22N4TDXSS","M22N4TDYSS", & + "M22N4TDZSS","M22N5FKXE ","M22N5FKYE ","M22N5FKZE ","M22N5FMXE ","M22N5FMYE ","M22N5FMZE ", & + "M22N5MKXE ","M22N5MKYE ","M22N5MKZE ","M22N5MMXE ","M22N5MMYE ","M22N5MMZE ","M22N5RAXE ", & + "M22N5RAYE ","M22N5RAZE ","M22N5RDXE ","M22N5RDYE ","M22N5RDZE ","M22N5TAXE ","M22N5TAYE ", & + "M22N5TAZE ","M22N5TDXSS","M22N5TDYSS","M22N5TDZSS","M22N6FKXE ","M22N6FKYE ","M22N6FKZE ", & + "M22N6FMXE ","M22N6FMYE ","M22N6FMZE ","M22N6MKXE ","M22N6MKYE ","M22N6MKZE ","M22N6MMXE ", & + "M22N6MMYE ","M22N6MMZE ","M22N6RAXE ","M22N6RAYE ","M22N6RAZE ","M22N6RDXE ","M22N6RDYE ", & + "M22N6RDZE ","M22N6TAXE ","M22N6TAYE ","M22N6TAZE ","M22N6TDXSS","M22N6TDYSS","M22N6TDZSS", & + "M22N7FKXE ","M22N7FKYE ","M22N7FKZE ","M22N7FMXE ","M22N7FMYE ","M22N7FMZE ","M22N7MKXE ", & + "M22N7MKYE ","M22N7MKZE ","M22N7MMXE ","M22N7MMYE ","M22N7MMZE ","M22N7RAXE ","M22N7RAYE ", & + "M22N7RAZE ","M22N7RDXE ","M22N7RDYE ","M22N7RDZE ","M22N7TAXE ","M22N7TAYE ","M22N7TAZE ", & + "M22N7TDXSS","M22N7TDYSS","M22N7TDZSS","M22N8FKXE ","M22N8FKYE ","M22N8FKZE ","M22N8FMXE ", & + "M22N8FMYE ","M22N8FMZE ","M22N8MKXE ","M22N8MKYE ","M22N8MKZE ","M22N8MMXE ","M22N8MMYE ", & + "M22N8MMZE ","M22N8RAXE ","M22N8RAYE ","M22N8RAZE ","M22N8RDXE ","M22N8RDYE ","M22N8RDZE ", & + "M22N8TAXE ","M22N8TAYE ","M22N8TAZE ","M22N8TDXSS","M22N8TDYSS","M22N8TDZSS","M22N9FKXE ", & + "M22N9FKYE ","M22N9FKZE ","M22N9FMXE ","M22N9FMYE ","M22N9FMZE ","M22N9MKXE ","M22N9MKYE ", & + "M22N9MKZE ","M22N9MMXE ","M22N9MMYE ","M22N9MMZE ","M22N9RAXE ","M22N9RAYE ","M22N9RAZE ", & + "M22N9RDXE ","M22N9RDYE ","M22N9RDZE ","M22N9TAXE ","M22N9TAYE ","M22N9TAZE ","M22N9TDXSS", & + "M22N9TDYSS","M22N9TDZSS","M23N1FKXE ","M23N1FKYE ","M23N1FKZE ","M23N1FMXE ","M23N1FMYE ", & + "M23N1FMZE ","M23N1MKXE ","M23N1MKYE ","M23N1MKZE ","M23N1MMXE ","M23N1MMYE ","M23N1MMZE ", & + "M23N1RAXE ","M23N1RAYE ","M23N1RAZE ","M23N1RDXE ","M23N1RDYE ","M23N1RDZE ","M23N1TAXE ", & + "M23N1TAYE ","M23N1TAZE ","M23N1TDXSS","M23N1TDYSS","M23N1TDZSS","M23N2FKXE ","M23N2FKYE ", & + "M23N2FKZE ","M23N2FMXE ","M23N2FMYE ","M23N2FMZE ","M23N2MKXE ","M23N2MKYE ","M23N2MKZE ", & + "M23N2MMXE ","M23N2MMYE ","M23N2MMZE ","M23N2RAXE ","M23N2RAYE ","M23N2RAZE ","M23N2RDXE ", & + "M23N2RDYE ","M23N2RDZE ","M23N2TAXE ","M23N2TAYE ","M23N2TAZE ","M23N2TDXSS","M23N2TDYSS", & + "M23N2TDZSS","M23N3FKXE ","M23N3FKYE ","M23N3FKZE ","M23N3FMXE ","M23N3FMYE ","M23N3FMZE ", & + "M23N3MKXE ","M23N3MKYE ","M23N3MKZE ","M23N3MMXE ","M23N3MMYE ","M23N3MMZE ","M23N3RAXE ", & + "M23N3RAYE ","M23N3RAZE ","M23N3RDXE ","M23N3RDYE ","M23N3RDZE ","M23N3TAXE ","M23N3TAYE ", & + "M23N3TAZE ","M23N3TDXSS","M23N3TDYSS","M23N3TDZSS","M23N4FKXE ","M23N4FKYE ","M23N4FKZE ", & + "M23N4FMXE ","M23N4FMYE ","M23N4FMZE ","M23N4MKXE ","M23N4MKYE ","M23N4MKZE ","M23N4MMXE ", & + "M23N4MMYE ","M23N4MMZE ","M23N4RAXE ","M23N4RAYE ","M23N4RAZE ","M23N4RDXE ","M23N4RDYE ", & + "M23N4RDZE ","M23N4TAXE ","M23N4TAYE ","M23N4TAZE ","M23N4TDXSS","M23N4TDYSS","M23N4TDZSS", & + "M23N5FKXE ","M23N5FKYE ","M23N5FKZE ","M23N5FMXE ","M23N5FMYE ","M23N5FMZE ","M23N5MKXE ", & + "M23N5MKYE ","M23N5MKZE ","M23N5MMXE ","M23N5MMYE ","M23N5MMZE ","M23N5RAXE ","M23N5RAYE ", & + "M23N5RAZE ","M23N5RDXE ","M23N5RDYE ","M23N5RDZE ","M23N5TAXE ","M23N5TAYE ","M23N5TAZE ", & + "M23N5TDXSS","M23N5TDYSS","M23N5TDZSS","M23N6FKXE ","M23N6FKYE ","M23N6FKZE ","M23N6FMXE ", & + "M23N6FMYE ","M23N6FMZE ","M23N6MKXE ","M23N6MKYE ","M23N6MKZE ","M23N6MMXE ","M23N6MMYE ", & + "M23N6MMZE ","M23N6RAXE ","M23N6RAYE ","M23N6RAZE ","M23N6RDXE ","M23N6RDYE ","M23N6RDZE ", & + "M23N6TAXE ","M23N6TAYE ","M23N6TAZE ","M23N6TDXSS","M23N6TDYSS","M23N6TDZSS","M23N7FKXE ", & + "M23N7FKYE ","M23N7FKZE ","M23N7FMXE ","M23N7FMYE ","M23N7FMZE ","M23N7MKXE ","M23N7MKYE ", & + "M23N7MKZE ","M23N7MMXE ","M23N7MMYE ","M23N7MMZE ","M23N7RAXE ","M23N7RAYE ","M23N7RAZE ", & + "M23N7RDXE ","M23N7RDYE ","M23N7RDZE ","M23N7TAXE ","M23N7TAYE ","M23N7TAZE ","M23N7TDXSS", & + "M23N7TDYSS","M23N7TDZSS","M23N8FKXE ","M23N8FKYE ","M23N8FKZE ","M23N8FMXE ","M23N8FMYE ", & + "M23N8FMZE ","M23N8MKXE ","M23N8MKYE ","M23N8MKZE ","M23N8MMXE ","M23N8MMYE ","M23N8MMZE ", & + "M23N8RAXE ","M23N8RAYE ","M23N8RAZE ","M23N8RDXE ","M23N8RDYE ","M23N8RDZE ","M23N8TAXE ", & + "M23N8TAYE ","M23N8TAZE ","M23N8TDXSS","M23N8TDYSS","M23N8TDZSS","M23N9FKXE ","M23N9FKYE ", & + "M23N9FKZE ","M23N9FMXE ","M23N9FMYE ","M23N9FMZE ","M23N9MKXE ","M23N9MKYE ","M23N9MKZE ", & + "M23N9MMXE ","M23N9MMYE ","M23N9MMZE ","M23N9RAXE ","M23N9RAYE ","M23N9RAZE ","M23N9RDXE ", & + "M23N9RDYE ","M23N9RDZE ","M23N9TAXE ","M23N9TAYE ","M23N9TAZE ","M23N9TDXSS","M23N9TDYSS", & + "M23N9TDZSS","M24N1FKXE ","M24N1FKYE ","M24N1FKZE ","M24N1FMXE ","M24N1FMYE ","M24N1FMZE ", & + "M24N1MKXE ","M24N1MKYE ","M24N1MKZE ","M24N1MMXE ","M24N1MMYE ","M24N1MMZE ","M24N1RAXE ", & + "M24N1RAYE ","M24N1RAZE ","M24N1RDXE ","M24N1RDYE ","M24N1RDZE ","M24N1TAXE ","M24N1TAYE ", & + "M24N1TAZE ","M24N1TDXSS","M24N1TDYSS","M24N1TDZSS"/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry4(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M24N2FKXE ","M24N2FKYE ","M24N2FKZE ","M24N2FMXE ","M24N2FMYE ","M24N2FMZE ","M24N2MKXE ", & + "M24N2MKYE ","M24N2MKZE ","M24N2MMXE ","M24N2MMYE ","M24N2MMZE ","M24N2RAXE ","M24N2RAYE ", & + "M24N2RAZE ","M24N2RDXE ","M24N2RDYE ","M24N2RDZE ","M24N2TAXE ","M24N2TAYE ","M24N2TAZE ", & + "M24N2TDXSS","M24N2TDYSS","M24N2TDZSS","M24N3FKXE ","M24N3FKYE ","M24N3FKZE ","M24N3FMXE ", & + "M24N3FMYE ","M24N3FMZE ","M24N3MKXE ","M24N3MKYE ","M24N3MKZE ","M24N3MMXE ","M24N3MMYE ", & + "M24N3MMZE ","M24N3RAXE ","M24N3RAYE ","M24N3RAZE ","M24N3RDXE ","M24N3RDYE ","M24N3RDZE ", & + "M24N3TAXE ","M24N3TAYE ","M24N3TAZE ","M24N3TDXSS","M24N3TDYSS","M24N3TDZSS","M24N4FKXE ", & + "M24N4FKYE ","M24N4FKZE ","M24N4FMXE ","M24N4FMYE ","M24N4FMZE ","M24N4MKXE ","M24N4MKYE ", & + "M24N4MKZE ","M24N4MMXE ","M24N4MMYE ","M24N4MMZE ","M24N4RAXE ","M24N4RAYE ","M24N4RAZE ", & + "M24N4RDXE ","M24N4RDYE ","M24N4RDZE ","M24N4TAXE ","M24N4TAYE ","M24N4TAZE ","M24N4TDXSS", & + "M24N4TDYSS","M24N4TDZSS","M24N5FKXE ","M24N5FKYE ","M24N5FKZE ","M24N5FMXE ","M24N5FMYE ", & + "M24N5FMZE ","M24N5MKXE ","M24N5MKYE ","M24N5MKZE ","M24N5MMXE ","M24N5MMYE ","M24N5MMZE ", & + "M24N5RAXE ","M24N5RAYE ","M24N5RAZE ","M24N5RDXE ","M24N5RDYE ","M24N5RDZE ","M24N5TAXE ", & + "M24N5TAYE ","M24N5TAZE ","M24N5TDXSS","M24N5TDYSS","M24N5TDZSS","M24N6FKXE ","M24N6FKYE ", & + "M24N6FKZE ","M24N6FMXE ","M24N6FMYE ","M24N6FMZE ","M24N6MKXE ","M24N6MKYE ","M24N6MKZE ", & + "M24N6MMXE ","M24N6MMYE ","M24N6MMZE ","M24N6RAXE ","M24N6RAYE ","M24N6RAZE ","M24N6RDXE ", & + "M24N6RDYE ","M24N6RDZE ","M24N6TAXE ","M24N6TAYE ","M24N6TAZE ","M24N6TDXSS","M24N6TDYSS", & + "M24N6TDZSS","M24N7FKXE ","M24N7FKYE ","M24N7FKZE ","M24N7FMXE ","M24N7FMYE ","M24N7FMZE ", & + "M24N7MKXE ","M24N7MKYE ","M24N7MKZE ","M24N7MMXE ","M24N7MMYE ","M24N7MMZE ","M24N7RAXE ", & + "M24N7RAYE ","M24N7RAZE ","M24N7RDXE ","M24N7RDYE ","M24N7RDZE ","M24N7TAXE ","M24N7TAYE ", & + "M24N7TAZE ","M24N7TDXSS","M24N7TDYSS","M24N7TDZSS","M24N8FKXE ","M24N8FKYE ","M24N8FKZE ", & + "M24N8FMXE ","M24N8FMYE ","M24N8FMZE ","M24N8MKXE ","M24N8MKYE ","M24N8MKZE ","M24N8MMXE ", & + "M24N8MMYE ","M24N8MMZE ","M24N8RAXE ","M24N8RAYE ","M24N8RAZE ","M24N8RDXE ","M24N8RDYE ", & + "M24N8RDZE ","M24N8TAXE ","M24N8TAYE ","M24N8TAZE ","M24N8TDXSS","M24N8TDYSS","M24N8TDZSS", & + "M24N9FKXE ","M24N9FKYE ","M24N9FKZE ","M24N9FMXE ","M24N9FMYE ","M24N9FMZE ","M24N9MKXE ", & + "M24N9MKYE ","M24N9MKZE ","M24N9MMXE ","M24N9MMYE ","M24N9MMZE ","M24N9RAXE ","M24N9RAYE ", & + "M24N9RAZE ","M24N9RDXE ","M24N9RDYE ","M24N9RDZE ","M24N9TAXE ","M24N9TAYE ","M24N9TAZE ", & + "M24N9TDXSS","M24N9TDYSS","M24N9TDZSS","M25N1FKXE ","M25N1FKYE ","M25N1FKZE ","M25N1FMXE ", & + "M25N1FMYE ","M25N1FMZE ","M25N1MKXE ","M25N1MKYE ","M25N1MKZE ","M25N1MMXE ","M25N1MMYE ", & + "M25N1MMZE ","M25N1RAXE ","M25N1RAYE ","M25N1RAZE ","M25N1RDXE ","M25N1RDYE ","M25N1RDZE ", & + "M25N1TAXE ","M25N1TAYE ","M25N1TAZE ","M25N1TDXSS","M25N1TDYSS","M25N1TDZSS","M25N2FKXE ", & + "M25N2FKYE ","M25N2FKZE ","M25N2FMXE ","M25N2FMYE ","M25N2FMZE ","M25N2MKXE ","M25N2MKYE ", & + "M25N2MKZE ","M25N2MMXE ","M25N2MMYE ","M25N2MMZE ","M25N2RAXE ","M25N2RAYE ","M25N2RAZE ", & + "M25N2RDXE ","M25N2RDYE ","M25N2RDZE ","M25N2TAXE ","M25N2TAYE ","M25N2TAZE ","M25N2TDXSS", & + "M25N2TDYSS","M25N2TDZSS","M25N3FKXE ","M25N3FKYE ","M25N3FKZE ","M25N3FMXE ","M25N3FMYE ", & + "M25N3FMZE ","M25N3MKXE ","M25N3MKYE ","M25N3MKZE ","M25N3MMXE ","M25N3MMYE ","M25N3MMZE ", & + "M25N3RAXE ","M25N3RAYE ","M25N3RAZE ","M25N3RDXE ","M25N3RDYE ","M25N3RDZE ","M25N3TAXE ", & + "M25N3TAYE ","M25N3TAZE ","M25N3TDXSS","M25N3TDYSS","M25N3TDZSS","M25N4FKXE ","M25N4FKYE ", & + "M25N4FKZE ","M25N4FMXE ","M25N4FMYE ","M25N4FMZE ","M25N4MKXE ","M25N4MKYE ","M25N4MKZE ", & + "M25N4MMXE ","M25N4MMYE ","M25N4MMZE ","M25N4RAXE ","M25N4RAYE ","M25N4RAZE ","M25N4RDXE ", & + "M25N4RDYE ","M25N4RDZE ","M25N4TAXE ","M25N4TAYE ","M25N4TAZE ","M25N4TDXSS","M25N4TDYSS", & + "M25N4TDZSS","M25N5FKXE ","M25N5FKYE ","M25N5FKZE ","M25N5FMXE ","M25N5FMYE ","M25N5FMZE ", & + "M25N5MKXE ","M25N5MKYE ","M25N5MKZE ","M25N5MMXE ","M25N5MMYE ","M25N5MMZE ","M25N5RAXE ", & + "M25N5RAYE ","M25N5RAZE ","M25N5RDXE ","M25N5RDYE ","M25N5RDZE ","M25N5TAXE ","M25N5TAYE ", & + "M25N5TAZE ","M25N5TDXSS","M25N5TDYSS","M25N5TDZSS","M25N6FKXE ","M25N6FKYE ","M25N6FKZE ", & + "M25N6FMXE ","M25N6FMYE ","M25N6FMZE ","M25N6MKXE ","M25N6MKYE ","M25N6MKZE ","M25N6MMXE ", & + "M25N6MMYE ","M25N6MMZE ","M25N6RAXE ","M25N6RAYE ","M25N6RAZE ","M25N6RDXE ","M25N6RDYE ", & + "M25N6RDZE ","M25N6TAXE ","M25N6TAYE ","M25N6TAZE ","M25N6TDXSS","M25N6TDYSS","M25N6TDZSS", & + "M25N7FKXE ","M25N7FKYE ","M25N7FKZE ","M25N7FMXE ","M25N7FMYE ","M25N7FMZE ","M25N7MKXE ", & + "M25N7MKYE ","M25N7MKZE ","M25N7MMXE ","M25N7MMYE ","M25N7MMZE ","M25N7RAXE ","M25N7RAYE ", & + "M25N7RAZE ","M25N7RDXE ","M25N7RDYE ","M25N7RDZE ","M25N7TAXE ","M25N7TAYE ","M25N7TAZE ", & + "M25N7TDXSS","M25N7TDYSS","M25N7TDZSS","M25N8FKXE ","M25N8FKYE ","M25N8FKZE ","M25N8FMXE ", & + "M25N8FMYE ","M25N8FMZE ","M25N8MKXE ","M25N8MKYE ","M25N8MKZE ","M25N8MMXE ","M25N8MMYE ", & + "M25N8MMZE ","M25N8RAXE ","M25N8RAYE ","M25N8RAZE ","M25N8RDXE ","M25N8RDYE ","M25N8RDZE ", & + "M25N8TAXE ","M25N8TAYE ","M25N8TAZE ","M25N8TDXSS","M25N8TDYSS","M25N8TDZSS","M25N9FKXE ", & + "M25N9FKYE ","M25N9FKZE ","M25N9FMXE ","M25N9FMYE ","M25N9FMZE ","M25N9MKXE ","M25N9MKYE ", & + "M25N9MKZE ","M25N9MMXE ","M25N9MMYE ","M25N9MMZE ","M25N9RAXE ","M25N9RAYE ","M25N9RAZE ", & + "M25N9RDXE ","M25N9RDYE ","M25N9RDZE ","M25N9TAXE ","M25N9TAYE ","M25N9TAZE ","M25N9TDXSS", & + "M25N9TDYSS","M25N9TDZSS","M26N1FKXE ","M26N1FKYE ","M26N1FKZE ","M26N1FMXE ","M26N1FMYE ", & + "M26N1FMZE ","M26N1MKXE ","M26N1MKYE ","M26N1MKZE ","M26N1MMXE ","M26N1MMYE ","M26N1MMZE ", & + "M26N1RAXE ","M26N1RAYE ","M26N1RAZE ","M26N1RDXE ","M26N1RDYE ","M26N1RDZE ","M26N1TAXE ", & + "M26N1TAYE ","M26N1TAZE ","M26N1TDXSS","M26N1TDYSS","M26N1TDZSS","M26N2FKXE ","M26N2FKYE ", & + "M26N2FKZE ","M26N2FMXE ","M26N2FMYE ","M26N2FMZE ","M26N2MKXE ","M26N2MKYE ","M26N2MKZE ", & + "M26N2MMXE ","M26N2MMYE ","M26N2MMZE ","M26N2RAXE ","M26N2RAYE ","M26N2RAZE ","M26N2RDXE ", & + "M26N2RDYE ","M26N2RDZE ","M26N2TAXE ","M26N2TAYE ","M26N2TAZE ","M26N2TDXSS","M26N2TDYSS", & + "M26N2TDZSS","M26N3FKXE ","M26N3FKYE ","M26N3FKZE ","M26N3FMXE ","M26N3FMYE ","M26N3FMZE ", & + "M26N3MKXE ","M26N3MKYE ","M26N3MKZE ","M26N3MMXE ","M26N3MMYE ","M26N3MMZE ","M26N3RAXE ", & + "M26N3RAYE ","M26N3RAZE ","M26N3RDXE ","M26N3RDYE ","M26N3RDZE ","M26N3TAXE ","M26N3TAYE ", & + "M26N3TAZE ","M26N3TDXSS","M26N3TDYSS","M26N3TDZSS","M26N4FKXE ","M26N4FKYE ","M26N4FKZE ", & + "M26N4FMXE ","M26N4FMYE ","M26N4FMZE ","M26N4MKXE ","M26N4MKYE ","M26N4MKZE ","M26N4MMXE ", & + "M26N4MMYE ","M26N4MMZE ","M26N4RAXE ","M26N4RAYE ","M26N4RAZE ","M26N4RDXE ","M26N4RDYE ", & + "M26N4RDZE ","M26N4TAXE ","M26N4TAYE ","M26N4TAZE ","M26N4TDXSS","M26N4TDYSS","M26N4TDZSS", & + "M26N5FKXE ","M26N5FKYE ","M26N5FKZE ","M26N5FMXE ","M26N5FMYE ","M26N5FMZE ","M26N5MKXE ", & + "M26N5MKYE ","M26N5MKZE ","M26N5MMXE ","M26N5MMYE ","M26N5MMZE ","M26N5RAXE ","M26N5RAYE ", & + "M26N5RAZE ","M26N5RDXE ","M26N5RDYE ","M26N5RDZE ","M26N5TAXE ","M26N5TAYE ","M26N5TAZE ", & + "M26N5TDXSS","M26N5TDYSS","M26N5TDZSS","M26N6FKXE ","M26N6FKYE ","M26N6FKZE ","M26N6FMXE ", & + "M26N6FMYE ","M26N6FMZE ","M26N6MKXE ","M26N6MKYE ","M26N6MKZE ","M26N6MMXE ","M26N6MMYE ", & + "M26N6MMZE ","M26N6RAXE ","M26N6RAYE ","M26N6RAZE ","M26N6RDXE ","M26N6RDYE ","M26N6RDZE ", & + "M26N6TAXE ","M26N6TAYE ","M26N6TAZE ","M26N6TDXSS","M26N6TDYSS","M26N6TDZSS","M26N7FKXE ", & + "M26N7FKYE ","M26N7FKZE ","M26N7FMXE ","M26N7FMYE ","M26N7FMZE ","M26N7MKXE ","M26N7MKYE ", & + "M26N7MKZE ","M26N7MMXE ","M26N7MMYE ","M26N7MMZE ","M26N7RAXE ","M26N7RAYE ","M26N7RAZE ", & + "M26N7RDXE ","M26N7RDYE ","M26N7RDZE ","M26N7TAXE ","M26N7TAYE ","M26N7TAZE ","M26N7TDXSS", & + "M26N7TDYSS","M26N7TDZSS","M26N8FKXE ","M26N8FKYE ","M26N8FKZE ","M26N8FMXE ","M26N8FMYE ", & + "M26N8FMZE ","M26N8MKXE ","M26N8MKYE ","M26N8MKZE ","M26N8MMXE ","M26N8MMYE ","M26N8MMZE ", & + "M26N8RAXE ","M26N8RAYE ","M26N8RAZE ","M26N8RDXE ","M26N8RDYE ","M26N8RDZE ","M26N8TAXE ", & + "M26N8TAYE ","M26N8TAZE ","M26N8TDXSS","M26N8TDYSS","M26N8TDZSS","M26N9FKXE ","M26N9FKYE ", & + "M26N9FKZE ","M26N9FMXE ","M26N9FMYE ","M26N9FMZE ","M26N9MKXE ","M26N9MKYE ","M26N9MKZE ", & + "M26N9MMXE ","M26N9MMYE ","M26N9MMZE ","M26N9RAXE ","M26N9RAYE ","M26N9RAZE ","M26N9RDXE ", & + "M26N9RDYE ","M26N9RDZE ","M26N9TAXE ","M26N9TAYE ","M26N9TAZE ","M26N9TDXSS","M26N9TDYSS", & + "M26N9TDZSS","M27N1FKXE ","M27N1FKYE ","M27N1FKZE ","M27N1FMXE ","M27N1FMYE ","M27N1FMZE ", & + "M27N1MKXE ","M27N1MKYE ","M27N1MKZE ","M27N1MMXE ","M27N1MMYE ","M27N1MMZE ","M27N1RAXE ", & + "M27N1RAYE ","M27N1RAZE ","M27N1RDXE ","M27N1RDYE ","M27N1RDZE ","M27N1TAXE ","M27N1TAYE ", & + "M27N1TAZE ","M27N1TDXSS","M27N1TDYSS","M27N1TDZSS","M27N2FKXE ","M27N2FKYE ","M27N2FKZE ", & + "M27N2FMXE ","M27N2FMYE ","M27N2FMZE ","M27N2MKXE ","M27N2MKYE ","M27N2MKZE ","M27N2MMXE ", & + "M27N2MMYE ","M27N2MMZE ","M27N2RAXE ","M27N2RAYE ","M27N2RAZE ","M27N2RDXE ","M27N2RDYE ", & + "M27N2RDZE ","M27N2TAXE ","M27N2TAYE ","M27N2TAZE ","M27N2TDXSS","M27N2TDYSS","M27N2TDZSS", & + "M27N3FKXE ","M27N3FKYE ","M27N3FKZE ","M27N3FMXE ","M27N3FMYE ","M27N3FMZE ","M27N3MKXE ", & + "M27N3MKYE ","M27N3MKZE ","M27N3MMXE ","M27N3MMYE ","M27N3MMZE ","M27N3RAXE ","M27N3RAYE ", & + "M27N3RAZE ","M27N3RDXE ","M27N3RDYE ","M27N3RDZE ","M27N3TAXE ","M27N3TAYE ","M27N3TAZE ", & + "M27N3TDXSS","M27N3TDYSS","M27N3TDZSS","M27N4FKXE ","M27N4FKYE ","M27N4FKZE ","M27N4FMXE ", & + "M27N4FMYE ","M27N4FMZE ","M27N4MKXE ","M27N4MKYE ","M27N4MKZE ","M27N4MMXE ","M27N4MMYE ", & + "M27N4MMZE ","M27N4RAXE ","M27N4RAYE ","M27N4RAZE ","M27N4RDXE ","M27N4RDYE ","M27N4RDZE ", & + "M27N4TAXE ","M27N4TAYE ","M27N4TAZE ","M27N4TDXSS","M27N4TDYSS","M27N4TDZSS","M27N5FKXE ", & + "M27N5FKYE ","M27N5FKZE ","M27N5FMXE ","M27N5FMYE ","M27N5FMZE ","M27N5MKXE ","M27N5MKYE ", & + "M27N5MKZE ","M27N5MMXE ","M27N5MMYE ","M27N5MMZE ","M27N5RAXE ","M27N5RAYE ","M27N5RAZE ", & + "M27N5RDXE ","M27N5RDYE ","M27N5RDZE ","M27N5TAXE ","M27N5TAYE ","M27N5TAZE ","M27N5TDXSS", & + "M27N5TDYSS","M27N5TDZSS","M27N6FKXE ","M27N6FKYE ","M27N6FKZE ","M27N6FMXE ","M27N6FMYE ", & + "M27N6FMZE ","M27N6MKXE ","M27N6MKYE ","M27N6MKZE ","M27N6MMXE ","M27N6MMYE ","M27N6MMZE ", & + "M27N6RAXE ","M27N6RAYE ","M27N6RAZE ","M27N6RDXE ","M27N6RDYE ","M27N6RDZE ","M27N6TAXE ", & + "M27N6TAYE ","M27N6TAZE ","M27N6TDXSS","M27N6TDYSS","M27N6TDZSS","M27N7FKXE ","M27N7FKYE ", & + "M27N7FKZE ","M27N7FMXE ","M27N7FMYE ","M27N7FMZE ","M27N7MKXE ","M27N7MKYE ","M27N7MKZE ", & + "M27N7MMXE ","M27N7MMYE ","M27N7MMZE ","M27N7RAXE ","M27N7RAYE ","M27N7RAZE ","M27N7RDXE ", & + "M27N7RDYE ","M27N7RDZE ","M27N7TAXE ","M27N7TAYE ","M27N7TAZE ","M27N7TDXSS","M27N7TDYSS", & + "M27N7TDZSS","M27N8FKXE ","M27N8FKYE ","M27N8FKZE ","M27N8FMXE ","M27N8FMYE ","M27N8FMZE ", & + "M27N8MKXE ","M27N8MKYE ","M27N8MKZE ","M27N8MMXE ","M27N8MMYE ","M27N8MMZE ","M27N8RAXE ", & + "M27N8RAYE ","M27N8RAZE ","M27N8RDXE ","M27N8RDYE ","M27N8RDZE ","M27N8TAXE ","M27N8TAYE ", & + "M27N8TAZE ","M27N8TDXSS","M27N8TDYSS","M27N8TDZSS","M27N9FKXE ","M27N9FKYE ","M27N9FKZE ", & + "M27N9FMXE ","M27N9FMYE ","M27N9FMZE ","M27N9MKXE ","M27N9MKYE ","M27N9MKZE ","M27N9MMXE ", & + "M27N9MMYE ","M27N9MMZE ","M27N9RAXE ","M27N9RAYE ","M27N9RAZE ","M27N9RDXE ","M27N9RDYE ", & + "M27N9RDZE ","M27N9TAXE ","M27N9TAYE ","M27N9TAZE ","M27N9TDXSS","M27N9TDYSS","M27N9TDZSS", & + "M28N1FKXE ","M28N1FKYE ","M28N1FKZE ","M28N1FMXE ","M28N1FMYE ","M28N1FMZE ","M28N1MKXE ", & + "M28N1MKYE ","M28N1MKZE ","M28N1MMXE ","M28N1MMYE ","M28N1MMZE ","M28N1RAXE ","M28N1RAYE ", & + "M28N1RAZE ","M28N1RDXE ","M28N1RDYE ","M28N1RDZE ","M28N1TAXE ","M28N1TAYE ","M28N1TAZE ", & + "M28N1TDXSS","M28N1TDYSS","M28N1TDZSS","M28N2FKXE ","M28N2FKYE ","M28N2FKZE ","M28N2FMXE ", & + "M28N2FMYE ","M28N2FMZE ","M28N2MKXE ","M28N2MKYE ","M28N2MKZE ","M28N2MMXE ","M28N2MMYE ", & + "M28N2MMZE ","M28N2RAXE ","M28N2RAYE ","M28N2RAZE ","M28N2RDXE ","M28N2RDYE ","M28N2RDZE ", & + "M28N2TAXE ","M28N2TAYE ","M28N2TAZE ","M28N2TDXSS","M28N2TDYSS","M28N2TDZSS","M28N3FKXE ", & + "M28N3FKYE ","M28N3FKZE ","M28N3FMXE ","M28N3FMYE ","M28N3FMZE ","M28N3MKXE ","M28N3MKYE ", & + "M28N3MKZE ","M28N3MMXE ","M28N3MMYE ","M28N3MMZE ","M28N3RAXE ","M28N3RAYE ","M28N3RAZE ", & + "M28N3RDXE ","M28N3RDYE ","M28N3RDZE ","M28N3TAXE ","M28N3TAYE ","M28N3TAZE ","M28N3TDXSS", & + "M28N3TDYSS","M28N3TDZSS","M28N4FKXE ","M28N4FKYE ","M28N4FKZE ","M28N4FMXE ","M28N4FMYE ", & + "M28N4FMZE ","M28N4MKXE ","M28N4MKYE ","M28N4MKZE ","M28N4MMXE ","M28N4MMYE ","M28N4MMZE ", & + "M28N4RAXE ","M28N4RAYE ","M28N4RAZE ","M28N4RDXE ","M28N4RDYE ","M28N4RDZE ","M28N4TAXE ", & + "M28N4TAYE ","M28N4TAZE ","M28N4TDXSS","M28N4TDYSS","M28N4TDZSS","M28N5FKXE ","M28N5FKYE ", & + "M28N5FKZE ","M28N5FMXE ","M28N5FMYE ","M28N5FMZE ","M28N5MKXE ","M28N5MKYE ","M28N5MKZE ", & + "M28N5MMXE ","M28N5MMYE ","M28N5MMZE ","M28N5RAXE ","M28N5RAYE ","M28N5RAZE ","M28N5RDXE ", & + "M28N5RDYE ","M28N5RDZE ","M28N5TAXE ","M28N5TAYE ","M28N5TAZE ","M28N5TDXSS","M28N5TDYSS", & + "M28N5TDZSS","M28N6FKXE ","M28N6FKYE ","M28N6FKZE ","M28N6FMXE ","M28N6FMYE ","M28N6FMZE ", & + "M28N6MKXE ","M28N6MKYE ","M28N6MKZE ","M28N6MMXE ","M28N6MMYE ","M28N6MMZE ","M28N6RAXE ", & + "M28N6RAYE ","M28N6RAZE ","M28N6RDXE ","M28N6RDYE ","M28N6RDZE ","M28N6TAXE ","M28N6TAYE ", & + "M28N6TAZE ","M28N6TDXSS","M28N6TDYSS","M28N6TDZSS","M28N7FKXE ","M28N7FKYE ","M28N7FKZE ", & + "M28N7FMXE ","M28N7FMYE ","M28N7FMZE ","M28N7MKXE ","M28N7MKYE ","M28N7MKZE ","M28N7MMXE ", & + "M28N7MMYE ","M28N7MMZE ","M28N7RAXE ","M28N7RAYE ","M28N7RAZE ","M28N7RDXE ","M28N7RDYE ", & + "M28N7RDZE ","M28N7TAXE ","M28N7TAYE ","M28N7TAZE ","M28N7TDXSS","M28N7TDYSS","M28N7TDZSS", & + "M28N8FKXE ","M28N8FKYE ","M28N8FKZE ","M28N8FMXE ","M28N8FMYE ","M28N8FMZE ","M28N8MKXE ", & + "M28N8MKYE ","M28N8MKZE ","M28N8MMXE ","M28N8MMYE ","M28N8MMZE ","M28N8RAXE ","M28N8RAYE ", & + "M28N8RAZE ","M28N8RDXE ","M28N8RDYE ","M28N8RDZE ","M28N8TAXE ","M28N8TAYE ","M28N8TAZE ", & + "M28N8TDXSS","M28N8TDYSS","M28N8TDZSS","M28N9FKXE ","M28N9FKYE ","M28N9FKZE ","M28N9FMXE ", & + "M28N9FMYE ","M28N9FMZE ","M28N9MKXE ","M28N9MKYE ","M28N9MKZE ","M28N9MMXE ","M28N9MMYE ", & + "M28N9MMZE ","M28N9RAXE ","M28N9RAYE ","M28N9RAZE ","M28N9RDXE ","M28N9RDYE ","M28N9RDZE ", & + "M28N9TAXE ","M28N9TAYE ","M28N9TAZE ","M28N9TDXSS","M28N9TDYSS","M28N9TDZSS","M29N1FKXE ", & + "M29N1FKYE ","M29N1FKZE ","M29N1FMXE ","M29N1FMYE ","M29N1FMZE ","M29N1MKXE ","M29N1MKYE ", & + "M29N1MKZE ","M29N1MMXE ","M29N1MMYE ","M29N1MMZE ","M29N1RAXE ","M29N1RAYE ","M29N1RAZE ", & + "M29N1RDXE ","M29N1RDYE ","M29N1RDZE ","M29N1TAXE ","M29N1TAYE ","M29N1TAZE ","M29N1TDXSS", & + "M29N1TDYSS","M29N1TDZSS","M29N2FKXE ","M29N2FKYE ","M29N2FKZE ","M29N2FMXE ","M29N2FMYE ", & + "M29N2FMZE ","M29N2MKXE ","M29N2MKYE ","M29N2MKZE ","M29N2MMXE ","M29N2MMYE ","M29N2MMZE ", & + "M29N2RAXE ","M29N2RAYE ","M29N2RAZE ","M29N2RDXE ","M29N2RDYE ","M29N2RDZE ","M29N2TAXE ", & + "M29N2TAYE ","M29N2TAZE ","M29N2TDXSS","M29N2TDYSS","M29N2TDZSS","M29N3FKXE ","M29N3FKYE ", & + "M29N3FKZE ","M29N3FMXE ","M29N3FMYE ","M29N3FMZE ","M29N3MKXE ","M29N3MKYE ","M29N3MKZE ", & + "M29N3MMXE ","M29N3MMYE ","M29N3MMZE ","M29N3RAXE ","M29N3RAYE ","M29N3RAZE ","M29N3RDXE ", & + "M29N3RDYE ","M29N3RDZE ","M29N3TAXE ","M29N3TAYE ","M29N3TAZE ","M29N3TDXSS","M29N3TDYSS", & + "M29N3TDZSS","M29N4FKXE ","M29N4FKYE ","M29N4FKZE ","M29N4FMXE ","M29N4FMYE ","M29N4FMZE ", & + "M29N4MKXE ","M29N4MKYE ","M29N4MKZE ","M29N4MMXE ","M29N4MMYE ","M29N4MMZE ","M29N4RAXE ", & + "M29N4RAYE ","M29N4RAZE ","M29N4RDXE ","M29N4RDYE ","M29N4RDZE ","M29N4TAXE ","M29N4TAYE ", & + "M29N4TAZE ","M29N4TDXSS","M29N4TDYSS","M29N4TDZSS","M29N5FKXE ","M29N5FKYE ","M29N5FKZE ", & + "M29N5FMXE ","M29N5FMYE ","M29N5FMZE ","M29N5MKXE ","M29N5MKYE ","M29N5MKZE ","M29N5MMXE ", & + "M29N5MMYE ","M29N5MMZE ","M29N5RAXE ","M29N5RAYE ","M29N5RAZE ","M29N5RDXE ","M29N5RDYE ", & + "M29N5RDZE ","M29N5TAXE ","M29N5TAYE ","M29N5TAZE ","M29N5TDXSS","M29N5TDYSS","M29N5TDZSS", & + "M29N6FKXE ","M29N6FKYE ","M29N6FKZE ","M29N6FMXE ","M29N6FMYE ","M29N6FMZE ","M29N6MKXE ", & + "M29N6MKYE ","M29N6MKZE ","M29N6MMXE ","M29N6MMYE ","M29N6MMZE ","M29N6RAXE ","M29N6RAYE ", & + "M29N6RAZE ","M29N6RDXE ","M29N6RDYE ","M29N6RDZE ","M29N6TAXE ","M29N6TAYE ","M29N6TAZE ", & + "M29N6TDXSS","M29N6TDYSS","M29N6TDZSS","M29N7FKXE ","M29N7FKYE ","M29N7FKZE ","M29N7FMXE ", & + "M29N7FMYE ","M29N7FMZE ","M29N7MKXE ","M29N7MKYE ","M29N7MKZE ","M29N7MMXE ","M29N7MMYE ", & + "M29N7MMZE ","M29N7RAXE ","M29N7RAYE ","M29N7RAZE ","M29N7RDXE ","M29N7RDYE ","M29N7RDZE ", & + "M29N7TAXE ","M29N7TAYE ","M29N7TAZE ","M29N7TDXSS","M29N7TDYSS","M29N7TDZSS","M29N8FKXE ", & + "M29N8FKYE ","M29N8FKZE ","M29N8FMXE ","M29N8FMYE ","M29N8FMZE ","M29N8MKXE ","M29N8MKYE ", & + "M29N8MKZE ","M29N8MMXE ","M29N8MMYE ","M29N8MMZE ","M29N8RAXE ","M29N8RAYE ","M29N8RAZE ", & + "M29N8RDXE ","M29N8RDYE ","M29N8RDZE ","M29N8TAXE ","M29N8TAYE ","M29N8TAZE ","M29N8TDXSS", & + "M29N8TDYSS","M29N8TDZSS","M29N9FKXE ","M29N9FKYE ","M29N9FKZE ","M29N9FMXE ","M29N9FMYE ", & + "M29N9FMZE ","M29N9MKXE ","M29N9MKYE ","M29N9MKZE ","M29N9MMXE ","M29N9MMYE ","M29N9MMZE ", & + "M29N9RAXE ","M29N9RAYE ","M29N9RAZE ","M29N9RDXE ","M29N9RDYE ","M29N9RDZE ","M29N9TAXE ", & + "M29N9TAYE ","M29N9TAZE ","M29N9TDXSS","M29N9TDYSS","M29N9TDZSS","M30N1FKXE ","M30N1FKYE ", & + "M30N1FKZE ","M30N1FMXE ","M30N1FMYE ","M30N1FMZE ","M30N1MKXE ","M30N1MKYE ","M30N1MKZE ", & + "M30N1MMXE ","M30N1MMYE ","M30N1MMZE ","M30N1RAXE ","M30N1RAYE ","M30N1RAZE ","M30N1RDXE ", & + "M30N1RDYE ","M30N1RDZE ","M30N1TAXE ","M30N1TAYE ","M30N1TAZE ","M30N1TDXSS","M30N1TDYSS", & + "M30N1TDZSS","M30N2FKXE ","M30N2FKYE ","M30N2FKZE ","M30N2FMXE ","M30N2FMYE ","M30N2FMZE ", & + "M30N2MKXE ","M30N2MKYE ","M30N2MKZE ","M30N2MMXE ","M30N2MMYE ","M30N2MMZE ","M30N2RAXE ", & + "M30N2RAYE ","M30N2RAZE ","M30N2RDXE ","M30N2RDYE ","M30N2RDZE ","M30N2TAXE ","M30N2TAYE ", & + "M30N2TAZE ","M30N2TDXSS","M30N2TDYSS","M30N2TDZSS","M30N3FKXE ","M30N3FKYE ","M30N3FKZE ", & + "M30N3FMXE ","M30N3FMYE ","M30N3FMZE ","M30N3MKXE ","M30N3MKYE ","M30N3MKZE ","M30N3MMXE ", & + "M30N3MMYE ","M30N3MMZE ","M30N3RAXE ","M30N3RAYE ","M30N3RAZE ","M30N3RDXE ","M30N3RDYE ", & + "M30N3RDZE ","M30N3TAXE ","M30N3TAYE ","M30N3TAZE ","M30N3TDXSS","M30N3TDYSS","M30N3TDZSS", & + "M30N4FKXE ","M30N4FKYE ","M30N4FKZE ","M30N4FMXE ","M30N4FMYE ","M30N4FMZE ","M30N4MKXE ", & + "M30N4MKYE ","M30N4MKZE ","M30N4MMXE ","M30N4MMYE ","M30N4MMZE ","M30N4RAXE ","M30N4RAYE ", & + "M30N4RAZE ","M30N4RDXE ","M30N4RDYE ","M30N4RDZE ","M30N4TAXE ","M30N4TAYE ","M30N4TAZE ", & + "M30N4TDXSS","M30N4TDYSS","M30N4TDZSS","M30N5FKXE ","M30N5FKYE ","M30N5FKZE ","M30N5FMXE ", & + "M30N5FMYE ","M30N5FMZE ","M30N5MKXE ","M30N5MKYE ","M30N5MKZE ","M30N5MMXE ","M30N5MMYE ", & + "M30N5MMZE ","M30N5RAXE ","M30N5RAYE ","M30N5RAZE ","M30N5RDXE ","M30N5RDYE ","M30N5RDZE ", & + "M30N5TAXE ","M30N5TAYE ","M30N5TAZE ","M30N5TDXSS","M30N5TDYSS","M30N5TDZSS","M30N6FKXE ", & + "M30N6FKYE ","M30N6FKZE ","M30N6FMXE ","M30N6FMYE ","M30N6FMZE ","M30N6MKXE ","M30N6MKYE ", & + "M30N6MKZE ","M30N6MMXE ","M30N6MMYE ","M30N6MMZE ","M30N6RAXE ","M30N6RAYE ","M30N6RAZE ", & + "M30N6RDXE ","M30N6RDYE ","M30N6RDZE ","M30N6TAXE ","M30N6TAYE ","M30N6TAZE ","M30N6TDXSS", & + "M30N6TDYSS","M30N6TDZSS","M30N7FKXE ","M30N7FKYE ","M30N7FKZE ","M30N7FMXE ","M30N7FMYE ", & + "M30N7FMZE ","M30N7MKXE ","M30N7MKYE ","M30N7MKZE ","M30N7MMXE ","M30N7MMYE ","M30N7MMZE ", & + "M30N7RAXE ","M30N7RAYE ","M30N7RAZE ","M30N7RDXE ","M30N7RDYE ","M30N7RDZE ","M30N7TAXE ", & + "M30N7TAYE ","M30N7TAZE ","M30N7TDXSS","M30N7TDYSS","M30N7TDZSS","M30N8FKXE ","M30N8FKYE ", & + "M30N8FKZE ","M30N8FMXE ","M30N8FMYE ","M30N8FMZE ","M30N8MKXE ","M30N8MKYE ","M30N8MKZE ", & + "M30N8MMXE ","M30N8MMYE ","M30N8MMZE ","M30N8RAXE ","M30N8RAYE ","M30N8RAZE ","M30N8RDXE ", & + "M30N8RDYE ","M30N8RDZE ","M30N8TAXE ","M30N8TAYE ","M30N8TAZE ","M30N8TDXSS","M30N8TDYSS", & + "M30N8TDZSS","M30N9FKXE ","M30N9FKYE ","M30N9FKZE ","M30N9FMXE ","M30N9FMYE ","M30N9FMZE ", & + "M30N9MKXE ","M30N9MKYE ","M30N9MKZE ","M30N9MMXE ","M30N9MMYE ","M30N9MMZE ","M30N9RAXE ", & + "M30N9RAYE ","M30N9RAZE ","M30N9RDXE ","M30N9RDYE ","M30N9RDZE ","M30N9TAXE ","M30N9TAYE ", & + "M30N9TAZE ","M30N9TDXSS","M30N9TDYSS","M30N9TDZSS","M31N1FKXE ","M31N1FKYE ","M31N1FKZE ", & + "M31N1FMXE ","M31N1FMYE ","M31N1FMZE ","M31N1MKXE ","M31N1MKYE ","M31N1MKZE ","M31N1MMXE ", & + "M31N1MMYE ","M31N1MMZE ","M31N1RAXE ","M31N1RAYE ","M31N1RAZE ","M31N1RDXE ","M31N1RDYE ", & + "M31N1RDZE ","M31N1TAXE ","M31N1TAYE ","M31N1TAZE ","M31N1TDXSS","M31N1TDYSS","M31N1TDZSS", & + "M31N2FKXE ","M31N2FKYE ","M31N2FKZE ","M31N2FMXE ","M31N2FMYE ","M31N2FMZE ","M31N2MKXE ", & + "M31N2MKYE ","M31N2MKZE ","M31N2MMXE ","M31N2MMYE ","M31N2MMZE ","M31N2RAXE ","M31N2RAYE ", & + "M31N2RAZE ","M31N2RDXE ","M31N2RDYE ","M31N2RDZE ","M31N2TAXE ","M31N2TAYE ","M31N2TAZE ", & + "M31N2TDXSS","M31N2TDYSS","M31N2TDZSS","M31N3FKXE ","M31N3FKYE ","M31N3FKZE ","M31N3FMXE ", & + "M31N3FMYE ","M31N3FMZE ","M31N3MKXE ","M31N3MKYE ","M31N3MKZE ","M31N3MMXE ","M31N3MMYE ", & + "M31N3MMZE ","M31N3RAXE ","M31N3RAYE ","M31N3RAZE ","M31N3RDXE ","M31N3RDYE ","M31N3RDZE ", & + "M31N3TAXE ","M31N3TAYE ","M31N3TAZE ","M31N3TDXSS","M31N3TDYSS","M31N3TDZSS","M31N4FKXE ", & + "M31N4FKYE ","M31N4FKZE ","M31N4FMXE ","M31N4FMYE ","M31N4FMZE ","M31N4MKXE ","M31N4MKYE ", & + "M31N4MKZE ","M31N4MMXE ","M31N4MMYE ","M31N4MMZE ","M31N4RAXE ","M31N4RAYE ","M31N4RAZE ", & + "M31N4RDXE ","M31N4RDYE ","M31N4RDZE ","M31N4TAXE ","M31N4TAYE ","M31N4TAZE ","M31N4TDXSS", & + "M31N4TDYSS","M31N4TDZSS","M31N5FKXE ","M31N5FKYE ","M31N5FKZE ","M31N5FMXE ","M31N5FMYE ", & + "M31N5FMZE ","M31N5MKXE ","M31N5MKYE ","M31N5MKZE ","M31N5MMXE ","M31N5MMYE ","M31N5MMZE ", & + "M31N5RAXE ","M31N5RAYE ","M31N5RAZE ","M31N5RDXE ","M31N5RDYE ","M31N5RDZE ","M31N5TAXE ", & + "M31N5TAYE ","M31N5TAZE ","M31N5TDXSS","M31N5TDYSS","M31N5TDZSS","M31N6FKXE ","M31N6FKYE ", & + "M31N6FKZE ","M31N6FMXE ","M31N6FMYE ","M31N6FMZE ","M31N6MKXE ","M31N6MKYE ","M31N6MKZE ", & + "M31N6MMXE ","M31N6MMYE ","M31N6MMZE ","M31N6RAXE ","M31N6RAYE ","M31N6RAZE ","M31N6RDXE ", & + "M31N6RDYE ","M31N6RDZE ","M31N6TAXE ","M31N6TAYE ","M31N6TAZE ","M31N6TDXSS","M31N6TDYSS", & + "M31N6TDZSS","M31N7FKXE ","M31N7FKYE ","M31N7FKZE ","M31N7FMXE ","M31N7FMYE ","M31N7FMZE ", & + "M31N7MKXE ","M31N7MKYE ","M31N7MKZE ","M31N7MMXE ","M31N7MMYE ","M31N7MMZE ","M31N7RAXE ", & + "M31N7RAYE ","M31N7RAZE ","M31N7RDXE ","M31N7RDYE ","M31N7RDZE ","M31N7TAXE ","M31N7TAYE ", & + "M31N7TAZE ","M31N7TDXSS","M31N7TDYSS","M31N7TDZSS","M31N8FKXE ","M31N8FKYE ","M31N8FKZE ", & + "M31N8FMXE ","M31N8FMYE ","M31N8FMZE ","M31N8MKXE ","M31N8MKYE ","M31N8MKZE ","M31N8MMXE ", & + "M31N8MMYE ","M31N8MMZE ","M31N8RAXE ","M31N8RAYE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry5(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M31N8RAZE ","M31N8RDXE ","M31N8RDYE ","M31N8RDZE ","M31N8TAXE ","M31N8TAYE ","M31N8TAZE ", & + "M31N8TDXSS","M31N8TDYSS","M31N8TDZSS","M31N9FKXE ","M31N9FKYE ","M31N9FKZE ","M31N9FMXE ", & + "M31N9FMYE ","M31N9FMZE ","M31N9MKXE ","M31N9MKYE ","M31N9MKZE ","M31N9MMXE ","M31N9MMYE ", & + "M31N9MMZE ","M31N9RAXE ","M31N9RAYE ","M31N9RAZE ","M31N9RDXE ","M31N9RDYE ","M31N9RDZE ", & + "M31N9TAXE ","M31N9TAYE ","M31N9TAZE ","M31N9TDXSS","M31N9TDYSS","M31N9TDZSS","M32N1FKXE ", & + "M32N1FKYE ","M32N1FKZE ","M32N1FMXE ","M32N1FMYE ","M32N1FMZE ","M32N1MKXE ","M32N1MKYE ", & + "M32N1MKZE ","M32N1MMXE ","M32N1MMYE ","M32N1MMZE ","M32N1RAXE ","M32N1RAYE ","M32N1RAZE ", & + "M32N1RDXE ","M32N1RDYE ","M32N1RDZE ","M32N1TAXE ","M32N1TAYE ","M32N1TAZE ","M32N1TDXSS", & + "M32N1TDYSS","M32N1TDZSS","M32N2FKXE ","M32N2FKYE ","M32N2FKZE ","M32N2FMXE ","M32N2FMYE ", & + "M32N2FMZE ","M32N2MKXE ","M32N2MKYE ","M32N2MKZE ","M32N2MMXE ","M32N2MMYE ","M32N2MMZE ", & + "M32N2RAXE ","M32N2RAYE ","M32N2RAZE ","M32N2RDXE ","M32N2RDYE ","M32N2RDZE ","M32N2TAXE ", & + "M32N2TAYE ","M32N2TAZE ","M32N2TDXSS","M32N2TDYSS","M32N2TDZSS","M32N3FKXE ","M32N3FKYE ", & + "M32N3FKZE ","M32N3FMXE ","M32N3FMYE ","M32N3FMZE ","M32N3MKXE ","M32N3MKYE ","M32N3MKZE ", & + "M32N3MMXE ","M32N3MMYE ","M32N3MMZE ","M32N3RAXE ","M32N3RAYE ","M32N3RAZE ","M32N3RDXE ", & + "M32N3RDYE ","M32N3RDZE ","M32N3TAXE ","M32N3TAYE ","M32N3TAZE ","M32N3TDXSS","M32N3TDYSS", & + "M32N3TDZSS","M32N4FKXE ","M32N4FKYE ","M32N4FKZE ","M32N4FMXE ","M32N4FMYE ","M32N4FMZE ", & + "M32N4MKXE ","M32N4MKYE ","M32N4MKZE ","M32N4MMXE ","M32N4MMYE ","M32N4MMZE ","M32N4RAXE ", & + "M32N4RAYE ","M32N4RAZE ","M32N4RDXE ","M32N4RDYE ","M32N4RDZE ","M32N4TAXE ","M32N4TAYE ", & + "M32N4TAZE ","M32N4TDXSS","M32N4TDYSS","M32N4TDZSS","M32N5FKXE ","M32N5FKYE ","M32N5FKZE ", & + "M32N5FMXE ","M32N5FMYE ","M32N5FMZE ","M32N5MKXE ","M32N5MKYE ","M32N5MKZE ","M32N5MMXE ", & + "M32N5MMYE ","M32N5MMZE ","M32N5RAXE ","M32N5RAYE ","M32N5RAZE ","M32N5RDXE ","M32N5RDYE ", & + "M32N5RDZE ","M32N5TAXE ","M32N5TAYE ","M32N5TAZE ","M32N5TDXSS","M32N5TDYSS","M32N5TDZSS", & + "M32N6FKXE ","M32N6FKYE ","M32N6FKZE ","M32N6FMXE ","M32N6FMYE ","M32N6FMZE ","M32N6MKXE ", & + "M32N6MKYE ","M32N6MKZE ","M32N6MMXE ","M32N6MMYE ","M32N6MMZE ","M32N6RAXE ","M32N6RAYE ", & + "M32N6RAZE ","M32N6RDXE ","M32N6RDYE ","M32N6RDZE ","M32N6TAXE ","M32N6TAYE ","M32N6TAZE ", & + "M32N6TDXSS","M32N6TDYSS","M32N6TDZSS","M32N7FKXE ","M32N7FKYE ","M32N7FKZE ","M32N7FMXE ", & + "M32N7FMYE ","M32N7FMZE ","M32N7MKXE ","M32N7MKYE ","M32N7MKZE ","M32N7MMXE ","M32N7MMYE ", & + "M32N7MMZE ","M32N7RAXE ","M32N7RAYE ","M32N7RAZE ","M32N7RDXE ","M32N7RDYE ","M32N7RDZE ", & + "M32N7TAXE ","M32N7TAYE ","M32N7TAZE ","M32N7TDXSS","M32N7TDYSS","M32N7TDZSS","M32N8FKXE ", & + "M32N8FKYE ","M32N8FKZE ","M32N8FMXE ","M32N8FMYE ","M32N8FMZE ","M32N8MKXE ","M32N8MKYE ", & + "M32N8MKZE ","M32N8MMXE ","M32N8MMYE ","M32N8MMZE ","M32N8RAXE ","M32N8RAYE ","M32N8RAZE ", & + "M32N8RDXE ","M32N8RDYE ","M32N8RDZE ","M32N8TAXE ","M32N8TAYE ","M32N8TAZE ","M32N8TDXSS", & + "M32N8TDYSS","M32N8TDZSS","M32N9FKXE ","M32N9FKYE ","M32N9FKZE ","M32N9FMXE ","M32N9FMYE ", & + "M32N9FMZE ","M32N9MKXE ","M32N9MKYE ","M32N9MKZE ","M32N9MMXE ","M32N9MMYE ","M32N9MMZE ", & + "M32N9RAXE ","M32N9RAYE ","M32N9RAZE ","M32N9RDXE ","M32N9RDYE ","M32N9RDZE ","M32N9TAXE ", & + "M32N9TAYE ","M32N9TAZE ","M32N9TDXSS","M32N9TDYSS","M32N9TDZSS","M33N1FKXE ","M33N1FKYE ", & + "M33N1FKZE ","M33N1FMXE ","M33N1FMYE ","M33N1FMZE ","M33N1MKXE ","M33N1MKYE ","M33N1MKZE ", & + "M33N1MMXE ","M33N1MMYE ","M33N1MMZE ","M33N1RAXE ","M33N1RAYE ","M33N1RAZE ","M33N1RDXE ", & + "M33N1RDYE ","M33N1RDZE ","M33N1TAXE ","M33N1TAYE ","M33N1TAZE ","M33N1TDXSS","M33N1TDYSS", & + "M33N1TDZSS","M33N2FKXE ","M33N2FKYE ","M33N2FKZE ","M33N2FMXE ","M33N2FMYE ","M33N2FMZE ", & + "M33N2MKXE ","M33N2MKYE ","M33N2MKZE ","M33N2MMXE ","M33N2MMYE ","M33N2MMZE ","M33N2RAXE ", & + "M33N2RAYE ","M33N2RAZE ","M33N2RDXE ","M33N2RDYE ","M33N2RDZE ","M33N2TAXE ","M33N2TAYE ", & + "M33N2TAZE ","M33N2TDXSS","M33N2TDYSS","M33N2TDZSS","M33N3FKXE ","M33N3FKYE ","M33N3FKZE ", & + "M33N3FMXE ","M33N3FMYE ","M33N3FMZE ","M33N3MKXE ","M33N3MKYE ","M33N3MKZE ","M33N3MMXE ", & + "M33N3MMYE ","M33N3MMZE ","M33N3RAXE ","M33N3RAYE ","M33N3RAZE ","M33N3RDXE ","M33N3RDYE ", & + "M33N3RDZE ","M33N3TAXE ","M33N3TAYE ","M33N3TAZE ","M33N3TDXSS","M33N3TDYSS","M33N3TDZSS", & + "M33N4FKXE ","M33N4FKYE ","M33N4FKZE ","M33N4FMXE ","M33N4FMYE ","M33N4FMZE ","M33N4MKXE ", & + "M33N4MKYE ","M33N4MKZE ","M33N4MMXE ","M33N4MMYE ","M33N4MMZE ","M33N4RAXE ","M33N4RAYE ", & + "M33N4RAZE ","M33N4RDXE ","M33N4RDYE ","M33N4RDZE ","M33N4TAXE ","M33N4TAYE ","M33N4TAZE ", & + "M33N4TDXSS","M33N4TDYSS","M33N4TDZSS","M33N5FKXE ","M33N5FKYE ","M33N5FKZE ","M33N5FMXE ", & + "M33N5FMYE ","M33N5FMZE ","M33N5MKXE ","M33N5MKYE ","M33N5MKZE ","M33N5MMXE ","M33N5MMYE ", & + "M33N5MMZE ","M33N5RAXE ","M33N5RAYE ","M33N5RAZE ","M33N5RDXE ","M33N5RDYE ","M33N5RDZE ", & + "M33N5TAXE ","M33N5TAYE ","M33N5TAZE ","M33N5TDXSS","M33N5TDYSS","M33N5TDZSS","M33N6FKXE ", & + "M33N6FKYE ","M33N6FKZE ","M33N6FMXE ","M33N6FMYE ","M33N6FMZE ","M33N6MKXE ","M33N6MKYE ", & + "M33N6MKZE ","M33N6MMXE ","M33N6MMYE ","M33N6MMZE ","M33N6RAXE ","M33N6RAYE ","M33N6RAZE ", & + "M33N6RDXE ","M33N6RDYE ","M33N6RDZE ","M33N6TAXE ","M33N6TAYE ","M33N6TAZE ","M33N6TDXSS", & + "M33N6TDYSS","M33N6TDZSS","M33N7FKXE ","M33N7FKYE ","M33N7FKZE ","M33N7FMXE ","M33N7FMYE ", & + "M33N7FMZE ","M33N7MKXE ","M33N7MKYE ","M33N7MKZE ","M33N7MMXE ","M33N7MMYE ","M33N7MMZE ", & + "M33N7RAXE ","M33N7RAYE ","M33N7RAZE ","M33N7RDXE ","M33N7RDYE ","M33N7RDZE ","M33N7TAXE ", & + "M33N7TAYE ","M33N7TAZE ","M33N7TDXSS","M33N7TDYSS","M33N7TDZSS","M33N8FKXE ","M33N8FKYE ", & + "M33N8FKZE ","M33N8FMXE ","M33N8FMYE ","M33N8FMZE ","M33N8MKXE ","M33N8MKYE ","M33N8MKZE ", & + "M33N8MMXE ","M33N8MMYE ","M33N8MMZE ","M33N8RAXE ","M33N8RAYE ","M33N8RAZE ","M33N8RDXE ", & + "M33N8RDYE ","M33N8RDZE ","M33N8TAXE ","M33N8TAYE ","M33N8TAZE ","M33N8TDXSS","M33N8TDYSS", & + "M33N8TDZSS","M33N9FKXE ","M33N9FKYE ","M33N9FKZE ","M33N9FMXE ","M33N9FMYE ","M33N9FMZE ", & + "M33N9MKXE ","M33N9MKYE ","M33N9MKZE ","M33N9MMXE ","M33N9MMYE ","M33N9MMZE ","M33N9RAXE ", & + "M33N9RAYE ","M33N9RAZE ","M33N9RDXE ","M33N9RDYE ","M33N9RDZE ","M33N9TAXE ","M33N9TAYE ", & + "M33N9TAZE ","M33N9TDXSS","M33N9TDYSS","M33N9TDZSS","M34N1FKXE ","M34N1FKYE ","M34N1FKZE ", & + "M34N1FMXE ","M34N1FMYE ","M34N1FMZE ","M34N1MKXE ","M34N1MKYE ","M34N1MKZE ","M34N1MMXE ", & + "M34N1MMYE ","M34N1MMZE ","M34N1RAXE ","M34N1RAYE ","M34N1RAZE ","M34N1RDXE ","M34N1RDYE ", & + "M34N1RDZE ","M34N1TAXE ","M34N1TAYE ","M34N1TAZE ","M34N1TDXSS","M34N1TDYSS","M34N1TDZSS", & + "M34N2FKXE ","M34N2FKYE ","M34N2FKZE ","M34N2FMXE ","M34N2FMYE ","M34N2FMZE ","M34N2MKXE ", & + "M34N2MKYE ","M34N2MKZE ","M34N2MMXE ","M34N2MMYE ","M34N2MMZE ","M34N2RAXE ","M34N2RAYE ", & + "M34N2RAZE ","M34N2RDXE ","M34N2RDYE ","M34N2RDZE ","M34N2TAXE ","M34N2TAYE ","M34N2TAZE ", & + "M34N2TDXSS","M34N2TDYSS","M34N2TDZSS","M34N3FKXE ","M34N3FKYE ","M34N3FKZE ","M34N3FMXE ", & + "M34N3FMYE ","M34N3FMZE ","M34N3MKXE ","M34N3MKYE ","M34N3MKZE ","M34N3MMXE ","M34N3MMYE ", & + "M34N3MMZE ","M34N3RAXE ","M34N3RAYE ","M34N3RAZE ","M34N3RDXE ","M34N3RDYE ","M34N3RDZE ", & + "M34N3TAXE ","M34N3TAYE ","M34N3TAZE ","M34N3TDXSS","M34N3TDYSS","M34N3TDZSS","M34N4FKXE ", & + "M34N4FKYE ","M34N4FKZE ","M34N4FMXE ","M34N4FMYE ","M34N4FMZE ","M34N4MKXE ","M34N4MKYE ", & + "M34N4MKZE ","M34N4MMXE ","M34N4MMYE ","M34N4MMZE ","M34N4RAXE ","M34N4RAYE ","M34N4RAZE ", & + "M34N4RDXE ","M34N4RDYE ","M34N4RDZE ","M34N4TAXE ","M34N4TAYE ","M34N4TAZE ","M34N4TDXSS", & + "M34N4TDYSS","M34N4TDZSS","M34N5FKXE ","M34N5FKYE ","M34N5FKZE ","M34N5FMXE ","M34N5FMYE ", & + "M34N5FMZE ","M34N5MKXE ","M34N5MKYE ","M34N5MKZE ","M34N5MMXE ","M34N5MMYE ","M34N5MMZE ", & + "M34N5RAXE ","M34N5RAYE ","M34N5RAZE ","M34N5RDXE ","M34N5RDYE ","M34N5RDZE ","M34N5TAXE ", & + "M34N5TAYE ","M34N5TAZE ","M34N5TDXSS","M34N5TDYSS","M34N5TDZSS","M34N6FKXE ","M34N6FKYE ", & + "M34N6FKZE ","M34N6FMXE ","M34N6FMYE ","M34N6FMZE ","M34N6MKXE ","M34N6MKYE ","M34N6MKZE ", & + "M34N6MMXE ","M34N6MMYE ","M34N6MMZE ","M34N6RAXE ","M34N6RAYE ","M34N6RAZE ","M34N6RDXE ", & + "M34N6RDYE ","M34N6RDZE ","M34N6TAXE ","M34N6TAYE ","M34N6TAZE ","M34N6TDXSS","M34N6TDYSS", & + "M34N6TDZSS","M34N7FKXE ","M34N7FKYE ","M34N7FKZE ","M34N7FMXE ","M34N7FMYE ","M34N7FMZE ", & + "M34N7MKXE ","M34N7MKYE ","M34N7MKZE ","M34N7MMXE ","M34N7MMYE ","M34N7MMZE ","M34N7RAXE ", & + "M34N7RAYE ","M34N7RAZE ","M34N7RDXE ","M34N7RDYE ","M34N7RDZE ","M34N7TAXE ","M34N7TAYE ", & + "M34N7TAZE ","M34N7TDXSS","M34N7TDYSS","M34N7TDZSS","M34N8FKXE ","M34N8FKYE ","M34N8FKZE ", & + "M34N8FMXE ","M34N8FMYE ","M34N8FMZE ","M34N8MKXE ","M34N8MKYE ","M34N8MKZE ","M34N8MMXE ", & + "M34N8MMYE ","M34N8MMZE ","M34N8RAXE ","M34N8RAYE ","M34N8RAZE ","M34N8RDXE ","M34N8RDYE ", & + "M34N8RDZE ","M34N8TAXE ","M34N8TAYE ","M34N8TAZE ","M34N8TDXSS","M34N8TDYSS","M34N8TDZSS", & + "M34N9FKXE ","M34N9FKYE ","M34N9FKZE ","M34N9FMXE ","M34N9FMYE ","M34N9FMZE ","M34N9MKXE ", & + "M34N9MKYE ","M34N9MKZE ","M34N9MMXE ","M34N9MMYE ","M34N9MMZE ","M34N9RAXE ","M34N9RAYE ", & + "M34N9RAZE ","M34N9RDXE ","M34N9RDYE ","M34N9RDZE ","M34N9TAXE ","M34N9TAYE ","M34N9TAZE ", & + "M34N9TDXSS","M34N9TDYSS","M34N9TDZSS","M35N1FKXE ","M35N1FKYE ","M35N1FKZE ","M35N1FMXE ", & + "M35N1FMYE ","M35N1FMZE ","M35N1MKXE ","M35N1MKYE ","M35N1MKZE ","M35N1MMXE ","M35N1MMYE ", & + "M35N1MMZE ","M35N1RAXE ","M35N1RAYE ","M35N1RAZE ","M35N1RDXE ","M35N1RDYE ","M35N1RDZE ", & + "M35N1TAXE ","M35N1TAYE ","M35N1TAZE ","M35N1TDXSS","M35N1TDYSS","M35N1TDZSS","M35N2FKXE ", & + "M35N2FKYE ","M35N2FKZE ","M35N2FMXE ","M35N2FMYE ","M35N2FMZE ","M35N2MKXE ","M35N2MKYE ", & + "M35N2MKZE ","M35N2MMXE ","M35N2MMYE ","M35N2MMZE ","M35N2RAXE ","M35N2RAYE ","M35N2RAZE ", & + "M35N2RDXE ","M35N2RDYE ","M35N2RDZE ","M35N2TAXE ","M35N2TAYE ","M35N2TAZE ","M35N2TDXSS", & + "M35N2TDYSS","M35N2TDZSS","M35N3FKXE ","M35N3FKYE ","M35N3FKZE ","M35N3FMXE ","M35N3FMYE ", & + "M35N3FMZE ","M35N3MKXE ","M35N3MKYE ","M35N3MKZE ","M35N3MMXE ","M35N3MMYE ","M35N3MMZE ", & + "M35N3RAXE ","M35N3RAYE ","M35N3RAZE ","M35N3RDXE ","M35N3RDYE ","M35N3RDZE ","M35N3TAXE ", & + "M35N3TAYE ","M35N3TAZE ","M35N3TDXSS","M35N3TDYSS","M35N3TDZSS","M35N4FKXE ","M35N4FKYE ", & + "M35N4FKZE ","M35N4FMXE ","M35N4FMYE ","M35N4FMZE ","M35N4MKXE ","M35N4MKYE ","M35N4MKZE ", & + "M35N4MMXE ","M35N4MMYE ","M35N4MMZE ","M35N4RAXE ","M35N4RAYE ","M35N4RAZE ","M35N4RDXE ", & + "M35N4RDYE ","M35N4RDZE ","M35N4TAXE ","M35N4TAYE ","M35N4TAZE ","M35N4TDXSS","M35N4TDYSS", & + "M35N4TDZSS","M35N5FKXE ","M35N5FKYE ","M35N5FKZE ","M35N5FMXE ","M35N5FMYE ","M35N5FMZE ", & + "M35N5MKXE ","M35N5MKYE ","M35N5MKZE ","M35N5MMXE ","M35N5MMYE ","M35N5MMZE ","M35N5RAXE ", & + "M35N5RAYE ","M35N5RAZE ","M35N5RDXE ","M35N5RDYE ","M35N5RDZE ","M35N5TAXE ","M35N5TAYE ", & + "M35N5TAZE ","M35N5TDXSS","M35N5TDYSS","M35N5TDZSS","M35N6FKXE ","M35N6FKYE ","M35N6FKZE ", & + "M35N6FMXE ","M35N6FMYE ","M35N6FMZE ","M35N6MKXE ","M35N6MKYE ","M35N6MKZE ","M35N6MMXE ", & + "M35N6MMYE ","M35N6MMZE ","M35N6RAXE ","M35N6RAYE ","M35N6RAZE ","M35N6RDXE ","M35N6RDYE ", & + "M35N6RDZE ","M35N6TAXE ","M35N6TAYE ","M35N6TAZE ","M35N6TDXSS","M35N6TDYSS","M35N6TDZSS", & + "M35N7FKXE ","M35N7FKYE ","M35N7FKZE ","M35N7FMXE ","M35N7FMYE ","M35N7FMZE ","M35N7MKXE ", & + "M35N7MKYE ","M35N7MKZE ","M35N7MMXE ","M35N7MMYE ","M35N7MMZE ","M35N7RAXE ","M35N7RAYE ", & + "M35N7RAZE ","M35N7RDXE ","M35N7RDYE ","M35N7RDZE ","M35N7TAXE ","M35N7TAYE ","M35N7TAZE ", & + "M35N7TDXSS","M35N7TDYSS","M35N7TDZSS","M35N8FKXE ","M35N8FKYE ","M35N8FKZE ","M35N8FMXE ", & + "M35N8FMYE ","M35N8FMZE ","M35N8MKXE ","M35N8MKYE ","M35N8MKZE ","M35N8MMXE ","M35N8MMYE ", & + "M35N8MMZE ","M35N8RAXE ","M35N8RAYE ","M35N8RAZE ","M35N8RDXE ","M35N8RDYE ","M35N8RDZE ", & + "M35N8TAXE ","M35N8TAYE ","M35N8TAZE ","M35N8TDXSS","M35N8TDYSS","M35N8TDZSS","M35N9FKXE ", & + "M35N9FKYE ","M35N9FKZE ","M35N9FMXE ","M35N9FMYE ","M35N9FMZE ","M35N9MKXE ","M35N9MKYE ", & + "M35N9MKZE ","M35N9MMXE ","M35N9MMYE ","M35N9MMZE ","M35N9RAXE ","M35N9RAYE ","M35N9RAZE ", & + "M35N9RDXE ","M35N9RDYE ","M35N9RDZE ","M35N9TAXE ","M35N9TAYE ","M35N9TAZE ","M35N9TDXSS", & + "M35N9TDYSS","M35N9TDZSS","M36N1FKXE ","M36N1FKYE ","M36N1FKZE ","M36N1FMXE ","M36N1FMYE ", & + "M36N1FMZE ","M36N1MKXE ","M36N1MKYE ","M36N1MKZE ","M36N1MMXE ","M36N1MMYE ","M36N1MMZE ", & + "M36N1RAXE ","M36N1RAYE ","M36N1RAZE ","M36N1RDXE ","M36N1RDYE ","M36N1RDZE ","M36N1TAXE ", & + "M36N1TAYE ","M36N1TAZE ","M36N1TDXSS","M36N1TDYSS","M36N1TDZSS","M36N2FKXE ","M36N2FKYE ", & + "M36N2FKZE ","M36N2FMXE ","M36N2FMYE ","M36N2FMZE ","M36N2MKXE ","M36N2MKYE ","M36N2MKZE ", & + "M36N2MMXE ","M36N2MMYE ","M36N2MMZE ","M36N2RAXE ","M36N2RAYE ","M36N2RAZE ","M36N2RDXE ", & + "M36N2RDYE ","M36N2RDZE ","M36N2TAXE ","M36N2TAYE ","M36N2TAZE ","M36N2TDXSS","M36N2TDYSS", & + "M36N2TDZSS","M36N3FKXE ","M36N3FKYE ","M36N3FKZE ","M36N3FMXE ","M36N3FMYE ","M36N3FMZE ", & + "M36N3MKXE ","M36N3MKYE ","M36N3MKZE ","M36N3MMXE ","M36N3MMYE ","M36N3MMZE ","M36N3RAXE ", & + "M36N3RAYE ","M36N3RAZE ","M36N3RDXE ","M36N3RDYE ","M36N3RDZE ","M36N3TAXE ","M36N3TAYE ", & + "M36N3TAZE ","M36N3TDXSS","M36N3TDYSS","M36N3TDZSS","M36N4FKXE ","M36N4FKYE ","M36N4FKZE ", & + "M36N4FMXE ","M36N4FMYE ","M36N4FMZE ","M36N4MKXE ","M36N4MKYE ","M36N4MKZE ","M36N4MMXE ", & + "M36N4MMYE ","M36N4MMZE ","M36N4RAXE ","M36N4RAYE ","M36N4RAZE ","M36N4RDXE ","M36N4RDYE ", & + "M36N4RDZE ","M36N4TAXE ","M36N4TAYE ","M36N4TAZE ","M36N4TDXSS","M36N4TDYSS","M36N4TDZSS", & + "M36N5FKXE ","M36N5FKYE ","M36N5FKZE ","M36N5FMXE ","M36N5FMYE ","M36N5FMZE ","M36N5MKXE ", & + "M36N5MKYE ","M36N5MKZE ","M36N5MMXE ","M36N5MMYE ","M36N5MMZE ","M36N5RAXE ","M36N5RAYE ", & + "M36N5RAZE ","M36N5RDXE ","M36N5RDYE ","M36N5RDZE ","M36N5TAXE ","M36N5TAYE ","M36N5TAZE ", & + "M36N5TDXSS","M36N5TDYSS","M36N5TDZSS","M36N6FKXE ","M36N6FKYE ","M36N6FKZE ","M36N6FMXE ", & + "M36N6FMYE ","M36N6FMZE ","M36N6MKXE ","M36N6MKYE ","M36N6MKZE ","M36N6MMXE ","M36N6MMYE ", & + "M36N6MMZE ","M36N6RAXE ","M36N6RAYE ","M36N6RAZE ","M36N6RDXE ","M36N6RDYE ","M36N6RDZE ", & + "M36N6TAXE ","M36N6TAYE ","M36N6TAZE ","M36N6TDXSS","M36N6TDYSS","M36N6TDZSS","M36N7FKXE ", & + "M36N7FKYE ","M36N7FKZE ","M36N7FMXE ","M36N7FMYE ","M36N7FMZE ","M36N7MKXE ","M36N7MKYE ", & + "M36N7MKZE ","M36N7MMXE ","M36N7MMYE ","M36N7MMZE ","M36N7RAXE ","M36N7RAYE ","M36N7RAZE ", & + "M36N7RDXE ","M36N7RDYE ","M36N7RDZE ","M36N7TAXE ","M36N7TAYE ","M36N7TAZE ","M36N7TDXSS", & + "M36N7TDYSS","M36N7TDZSS","M36N8FKXE ","M36N8FKYE ","M36N8FKZE ","M36N8FMXE ","M36N8FMYE ", & + "M36N8FMZE ","M36N8MKXE ","M36N8MKYE ","M36N8MKZE ","M36N8MMXE ","M36N8MMYE ","M36N8MMZE ", & + "M36N8RAXE ","M36N8RAYE ","M36N8RAZE ","M36N8RDXE ","M36N8RDYE ","M36N8RDZE ","M36N8TAXE ", & + "M36N8TAYE ","M36N8TAZE ","M36N8TDXSS","M36N8TDYSS","M36N8TDZSS","M36N9FKXE ","M36N9FKYE ", & + "M36N9FKZE ","M36N9FMXE ","M36N9FMYE ","M36N9FMZE ","M36N9MKXE ","M36N9MKYE ","M36N9MKZE ", & + "M36N9MMXE ","M36N9MMYE ","M36N9MMZE ","M36N9RAXE ","M36N9RAYE ","M36N9RAZE ","M36N9RDXE ", & + "M36N9RDYE ","M36N9RDZE ","M36N9TAXE ","M36N9TAYE ","M36N9TAZE ","M36N9TDXSS","M36N9TDYSS", & + "M36N9TDZSS","M37N1FKXE ","M37N1FKYE ","M37N1FKZE ","M37N1FMXE ","M37N1FMYE ","M37N1FMZE ", & + "M37N1MKXE ","M37N1MKYE ","M37N1MKZE ","M37N1MMXE ","M37N1MMYE ","M37N1MMZE ","M37N1RAXE ", & + "M37N1RAYE ","M37N1RAZE ","M37N1RDXE ","M37N1RDYE ","M37N1RDZE ","M37N1TAXE ","M37N1TAYE ", & + "M37N1TAZE ","M37N1TDXSS","M37N1TDYSS","M37N1TDZSS","M37N2FKXE ","M37N2FKYE ","M37N2FKZE ", & + "M37N2FMXE ","M37N2FMYE ","M37N2FMZE ","M37N2MKXE ","M37N2MKYE ","M37N2MKZE ","M37N2MMXE ", & + "M37N2MMYE ","M37N2MMZE ","M37N2RAXE ","M37N2RAYE ","M37N2RAZE ","M37N2RDXE ","M37N2RDYE ", & + "M37N2RDZE ","M37N2TAXE ","M37N2TAYE ","M37N2TAZE ","M37N2TDXSS","M37N2TDYSS","M37N2TDZSS", & + "M37N3FKXE ","M37N3FKYE ","M37N3FKZE ","M37N3FMXE ","M37N3FMYE ","M37N3FMZE ","M37N3MKXE ", & + "M37N3MKYE ","M37N3MKZE ","M37N3MMXE ","M37N3MMYE ","M37N3MMZE ","M37N3RAXE ","M37N3RAYE ", & + "M37N3RAZE ","M37N3RDXE ","M37N3RDYE ","M37N3RDZE ","M37N3TAXE ","M37N3TAYE ","M37N3TAZE ", & + "M37N3TDXSS","M37N3TDYSS","M37N3TDZSS","M37N4FKXE ","M37N4FKYE ","M37N4FKZE ","M37N4FMXE ", & + "M37N4FMYE ","M37N4FMZE ","M37N4MKXE ","M37N4MKYE ","M37N4MKZE ","M37N4MMXE ","M37N4MMYE ", & + "M37N4MMZE ","M37N4RAXE ","M37N4RAYE ","M37N4RAZE ","M37N4RDXE ","M37N4RDYE ","M37N4RDZE ", & + "M37N4TAXE ","M37N4TAYE ","M37N4TAZE ","M37N4TDXSS","M37N4TDYSS","M37N4TDZSS","M37N5FKXE ", & + "M37N5FKYE ","M37N5FKZE ","M37N5FMXE ","M37N5FMYE ","M37N5FMZE ","M37N5MKXE ","M37N5MKYE ", & + "M37N5MKZE ","M37N5MMXE ","M37N5MMYE ","M37N5MMZE ","M37N5RAXE ","M37N5RAYE ","M37N5RAZE ", & + "M37N5RDXE ","M37N5RDYE ","M37N5RDZE ","M37N5TAXE ","M37N5TAYE ","M37N5TAZE ","M37N5TDXSS", & + "M37N5TDYSS","M37N5TDZSS","M37N6FKXE ","M37N6FKYE ","M37N6FKZE ","M37N6FMXE ","M37N6FMYE ", & + "M37N6FMZE ","M37N6MKXE ","M37N6MKYE ","M37N6MKZE ","M37N6MMXE ","M37N6MMYE ","M37N6MMZE ", & + "M37N6RAXE ","M37N6RAYE ","M37N6RAZE ","M37N6RDXE ","M37N6RDYE ","M37N6RDZE ","M37N6TAXE ", & + "M37N6TAYE ","M37N6TAZE ","M37N6TDXSS","M37N6TDYSS","M37N6TDZSS","M37N7FKXE ","M37N7FKYE ", & + "M37N7FKZE ","M37N7FMXE ","M37N7FMYE ","M37N7FMZE ","M37N7MKXE ","M37N7MKYE ","M37N7MKZE ", & + "M37N7MMXE ","M37N7MMYE ","M37N7MMZE ","M37N7RAXE ","M37N7RAYE ","M37N7RAZE ","M37N7RDXE ", & + "M37N7RDYE ","M37N7RDZE ","M37N7TAXE ","M37N7TAYE ","M37N7TAZE ","M37N7TDXSS","M37N7TDYSS", & + "M37N7TDZSS","M37N8FKXE ","M37N8FKYE ","M37N8FKZE ","M37N8FMXE ","M37N8FMYE ","M37N8FMZE ", & + "M37N8MKXE ","M37N8MKYE ","M37N8MKZE ","M37N8MMXE ","M37N8MMYE ","M37N8MMZE ","M37N8RAXE ", & + "M37N8RAYE ","M37N8RAZE ","M37N8RDXE ","M37N8RDYE ","M37N8RDZE ","M37N8TAXE ","M37N8TAYE ", & + "M37N8TAZE ","M37N8TDXSS","M37N8TDYSS","M37N8TDZSS","M37N9FKXE ","M37N9FKYE ","M37N9FKZE ", & + "M37N9FMXE ","M37N9FMYE ","M37N9FMZE ","M37N9MKXE ","M37N9MKYE ","M37N9MKZE ","M37N9MMXE ", & + "M37N9MMYE ","M37N9MMZE ","M37N9RAXE ","M37N9RAYE ","M37N9RAZE ","M37N9RDXE ","M37N9RDYE ", & + "M37N9RDZE ","M37N9TAXE ","M37N9TAYE ","M37N9TAZE ","M37N9TDXSS","M37N9TDYSS","M37N9TDZSS", & + "M38N1FKXE ","M38N1FKYE ","M38N1FKZE ","M38N1FMXE ","M38N1FMYE ","M38N1FMZE ","M38N1MKXE ", & + "M38N1MKYE ","M38N1MKZE ","M38N1MMXE ","M38N1MMYE ","M38N1MMZE ","M38N1RAXE ","M38N1RAYE ", & + "M38N1RAZE ","M38N1RDXE ","M38N1RDYE ","M38N1RDZE ","M38N1TAXE ","M38N1TAYE ","M38N1TAZE ", & + "M38N1TDXSS","M38N1TDYSS","M38N1TDZSS","M38N2FKXE ","M38N2FKYE ","M38N2FKZE ","M38N2FMXE ", & + "M38N2FMYE ","M38N2FMZE ","M38N2MKXE ","M38N2MKYE ","M38N2MKZE ","M38N2MMXE ","M38N2MMYE ", & + "M38N2MMZE ","M38N2RAXE ","M38N2RAYE ","M38N2RAZE ","M38N2RDXE ","M38N2RDYE ","M38N2RDZE ", & + "M38N2TAXE ","M38N2TAYE ","M38N2TAZE ","M38N2TDXSS","M38N2TDYSS","M38N2TDZSS","M38N3FKXE ", & + "M38N3FKYE ","M38N3FKZE ","M38N3FMXE ","M38N3FMYE ","M38N3FMZE ","M38N3MKXE ","M38N3MKYE ", & + "M38N3MKZE ","M38N3MMXE ","M38N3MMYE ","M38N3MMZE ","M38N3RAXE ","M38N3RAYE ","M38N3RAZE ", & + "M38N3RDXE ","M38N3RDYE ","M38N3RDZE ","M38N3TAXE ","M38N3TAYE ","M38N3TAZE ","M38N3TDXSS", & + "M38N3TDYSS","M38N3TDZSS","M38N4FKXE ","M38N4FKYE ","M38N4FKZE ","M38N4FMXE ","M38N4FMYE ", & + "M38N4FMZE ","M38N4MKXE ","M38N4MKYE ","M38N4MKZE ","M38N4MMXE ","M38N4MMYE ","M38N4MMZE ", & + "M38N4RAXE ","M38N4RAYE ","M38N4RAZE ","M38N4RDXE ","M38N4RDYE ","M38N4RDZE ","M38N4TAXE ", & + "M38N4TAYE ","M38N4TAZE ","M38N4TDXSS","M38N4TDYSS","M38N4TDZSS","M38N5FKXE ","M38N5FKYE ", & + "M38N5FKZE ","M38N5FMXE ","M38N5FMYE ","M38N5FMZE ","M38N5MKXE ","M38N5MKYE ","M38N5MKZE ", & + "M38N5MMXE ","M38N5MMYE ","M38N5MMZE ","M38N5RAXE ","M38N5RAYE ","M38N5RAZE ","M38N5RDXE ", & + "M38N5RDYE ","M38N5RDZE ","M38N5TAXE ","M38N5TAYE ","M38N5TAZE ","M38N5TDXSS","M38N5TDYSS", & + "M38N5TDZSS","M38N6FKXE ","M38N6FKYE ","M38N6FKZE ","M38N6FMXE ","M38N6FMYE ","M38N6FMZE ", & + "M38N6MKXE ","M38N6MKYE ","M38N6MKZE ","M38N6MMXE ","M38N6MMYE ","M38N6MMZE ","M38N6RAXE ", & + "M38N6RAYE ","M38N6RAZE ","M38N6RDXE ","M38N6RDYE ","M38N6RDZE ","M38N6TAXE ","M38N6TAYE ", & + "M38N6TAZE ","M38N6TDXSS","M38N6TDYSS","M38N6TDZSS","M38N7FKXE ","M38N7FKYE ","M38N7FKZE ", & + "M38N7FMXE ","M38N7FMYE ","M38N7FMZE ","M38N7MKXE ","M38N7MKYE ","M38N7MKZE ","M38N7MMXE ", & + "M38N7MMYE ","M38N7MMZE ","M38N7RAXE ","M38N7RAYE ","M38N7RAZE ","M38N7RDXE ","M38N7RDYE ", & + "M38N7RDZE ","M38N7TAXE ","M38N7TAYE ","M38N7TAZE ","M38N7TDXSS","M38N7TDYSS","M38N7TDZSS", & + "M38N8FKXE ","M38N8FKYE ","M38N8FKZE ","M38N8FMXE ","M38N8FMYE ","M38N8FMZE ","M38N8MKXE ", & + "M38N8MKYE ","M38N8MKZE ","M38N8MMXE ","M38N8MMYE ","M38N8MMZE ","M38N8RAXE ","M38N8RAYE ", & + "M38N8RAZE ","M38N8RDXE ","M38N8RDYE ","M38N8RDZE ","M38N8TAXE ","M38N8TAYE ","M38N8TAZE ", & + "M38N8TDXSS","M38N8TDYSS","M38N8TDZSS","M38N9FKXE ","M38N9FKYE ","M38N9FKZE ","M38N9FMXE ", & + "M38N9FMYE ","M38N9FMZE ","M38N9MKXE ","M38N9MKYE ","M38N9MKZE ","M38N9MMXE ","M38N9MMYE ", & + "M38N9MMZE ","M38N9RAXE ","M38N9RAYE ","M38N9RAZE ","M38N9RDXE ","M38N9RDYE ","M38N9RDZE ", & + "M38N9TAXE ","M38N9TAYE ","M38N9TAZE ","M38N9TDXSS","M38N9TDYSS","M38N9TDZSS","M39N1FKXE ", & + "M39N1FKYE ","M39N1FKZE ","M39N1FMXE ","M39N1FMYE ","M39N1FMZE ","M39N1MKXE ","M39N1MKYE ", & + "M39N1MKZE ","M39N1MMXE ","M39N1MMYE ","M39N1MMZE ","M39N1RAXE ","M39N1RAYE ","M39N1RAZE ", & + "M39N1RDXE ","M39N1RDYE ","M39N1RDZE ","M39N1TAXE ","M39N1TAYE ","M39N1TAZE ","M39N1TDXSS", & + "M39N1TDYSS","M39N1TDZSS","M39N2FKXE ","M39N2FKYE ","M39N2FKZE ","M39N2FMXE ","M39N2FMYE ", & + "M39N2FMZE ","M39N2MKXE ","M39N2MKYE ","M39N2MKZE ","M39N2MMXE ","M39N2MMYE ","M39N2MMZE ", & + "M39N2RAXE ","M39N2RAYE ","M39N2RAZE ","M39N2RDXE ","M39N2RDYE ","M39N2RDZE ","M39N2TAXE ", & + "M39N2TAYE ","M39N2TAZE ","M39N2TDXSS","M39N2TDYSS","M39N2TDZSS","M39N3FKXE ","M39N3FKYE ", & + "M39N3FKZE ","M39N3FMXE ","M39N3FMYE ","M39N3FMZE ","M39N3MKXE ","M39N3MKYE ","M39N3MKZE ", & + "M39N3MMXE ","M39N3MMYE ","M39N3MMZE ","M39N3RAXE ","M39N3RAYE ","M39N3RAZE ","M39N3RDXE ", & + "M39N3RDYE ","M39N3RDZE ","M39N3TAXE ","M39N3TAYE ","M39N3TAZE ","M39N3TDXSS","M39N3TDYSS", & + "M39N3TDZSS","M39N4FKXE ","M39N4FKYE ","M39N4FKZE ","M39N4FMXE ","M39N4FMYE ","M39N4FMZE ", & + "M39N4MKXE ","M39N4MKYE ","M39N4MKZE ","M39N4MMXE ","M39N4MMYE ","M39N4MMZE ","M39N4RAXE ", & + "M39N4RAYE ","M39N4RAZE ","M39N4RDXE ","M39N4RDYE ","M39N4RDZE ","M39N4TAXE ","M39N4TAYE ", & + "M39N4TAZE ","M39N4TDXSS","M39N4TDYSS","M39N4TDZSS","M39N5FKXE ","M39N5FKYE ","M39N5FKZE ", & + "M39N5FMXE ","M39N5FMYE ","M39N5FMZE ","M39N5MKXE ","M39N5MKYE ","M39N5MKZE ","M39N5MMXE ", & + "M39N5MMYE ","M39N5MMZE ","M39N5RAXE ","M39N5RAYE ","M39N5RAZE ","M39N5RDXE ","M39N5RDYE ", & + "M39N5RDZE ","M39N5TAXE ","M39N5TAYE ","M39N5TAZE ","M39N5TDXSS","M39N5TDYSS","M39N5TDZSS", & + "M39N6FKXE ","M39N6FKYE ","M39N6FKZE ","M39N6FMXE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry6(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M39N6FMYE ","M39N6FMZE ","M39N6MKXE ","M39N6MKYE ","M39N6MKZE ","M39N6MMXE ","M39N6MMYE ", & + "M39N6MMZE ","M39N6RAXE ","M39N6RAYE ","M39N6RAZE ","M39N6RDXE ","M39N6RDYE ","M39N6RDZE ", & + "M39N6TAXE ","M39N6TAYE ","M39N6TAZE ","M39N6TDXSS","M39N6TDYSS","M39N6TDZSS","M39N7FKXE ", & + "M39N7FKYE ","M39N7FKZE ","M39N7FMXE ","M39N7FMYE ","M39N7FMZE ","M39N7MKXE ","M39N7MKYE ", & + "M39N7MKZE ","M39N7MMXE ","M39N7MMYE ","M39N7MMZE ","M39N7RAXE ","M39N7RAYE ","M39N7RAZE ", & + "M39N7RDXE ","M39N7RDYE ","M39N7RDZE ","M39N7TAXE ","M39N7TAYE ","M39N7TAZE ","M39N7TDXSS", & + "M39N7TDYSS","M39N7TDZSS","M39N8FKXE ","M39N8FKYE ","M39N8FKZE ","M39N8FMXE ","M39N8FMYE ", & + "M39N8FMZE ","M39N8MKXE ","M39N8MKYE ","M39N8MKZE ","M39N8MMXE ","M39N8MMYE ","M39N8MMZE ", & + "M39N8RAXE ","M39N8RAYE ","M39N8RAZE ","M39N8RDXE ","M39N8RDYE ","M39N8RDZE ","M39N8TAXE ", & + "M39N8TAYE ","M39N8TAZE ","M39N8TDXSS","M39N8TDYSS","M39N8TDZSS","M39N9FKXE ","M39N9FKYE ", & + "M39N9FKZE ","M39N9FMXE ","M39N9FMYE ","M39N9FMZE ","M39N9MKXE ","M39N9MKYE ","M39N9MKZE ", & + "M39N9MMXE ","M39N9MMYE ","M39N9MMZE ","M39N9RAXE ","M39N9RAYE ","M39N9RAZE ","M39N9RDXE ", & + "M39N9RDYE ","M39N9RDZE ","M39N9TAXE ","M39N9TAYE ","M39N9TAZE ","M39N9TDXSS","M39N9TDYSS", & + "M39N9TDZSS","M40N1FKXE ","M40N1FKYE ","M40N1FKZE ","M40N1FMXE ","M40N1FMYE ","M40N1FMZE ", & + "M40N1MKXE ","M40N1MKYE ","M40N1MKZE ","M40N1MMXE ","M40N1MMYE ","M40N1MMZE ","M40N1RAXE ", & + "M40N1RAYE ","M40N1RAZE ","M40N1RDXE ","M40N1RDYE ","M40N1RDZE ","M40N1TAXE ","M40N1TAYE ", & + "M40N1TAZE ","M40N1TDXSS","M40N1TDYSS","M40N1TDZSS","M40N2FKXE ","M40N2FKYE ","M40N2FKZE ", & + "M40N2FMXE ","M40N2FMYE ","M40N2FMZE ","M40N2MKXE ","M40N2MKYE ","M40N2MKZE ","M40N2MMXE ", & + "M40N2MMYE ","M40N2MMZE ","M40N2RAXE ","M40N2RAYE ","M40N2RAZE ","M40N2RDXE ","M40N2RDYE ", & + "M40N2RDZE ","M40N2TAXE ","M40N2TAYE ","M40N2TAZE ","M40N2TDXSS","M40N2TDYSS","M40N2TDZSS", & + "M40N3FKXE ","M40N3FKYE ","M40N3FKZE ","M40N3FMXE ","M40N3FMYE ","M40N3FMZE ","M40N3MKXE ", & + "M40N3MKYE ","M40N3MKZE ","M40N3MMXE ","M40N3MMYE ","M40N3MMZE ","M40N3RAXE ","M40N3RAYE ", & + "M40N3RAZE ","M40N3RDXE ","M40N3RDYE ","M40N3RDZE ","M40N3TAXE ","M40N3TAYE ","M40N3TAZE ", & + "M40N3TDXSS","M40N3TDYSS","M40N3TDZSS","M40N4FKXE ","M40N4FKYE ","M40N4FKZE ","M40N4FMXE ", & + "M40N4FMYE ","M40N4FMZE ","M40N4MKXE ","M40N4MKYE ","M40N4MKZE ","M40N4MMXE ","M40N4MMYE ", & + "M40N4MMZE ","M40N4RAXE ","M40N4RAYE ","M40N4RAZE ","M40N4RDXE ","M40N4RDYE ","M40N4RDZE ", & + "M40N4TAXE ","M40N4TAYE ","M40N4TAZE ","M40N4TDXSS","M40N4TDYSS","M40N4TDZSS","M40N5FKXE ", & + "M40N5FKYE ","M40N5FKZE ","M40N5FMXE ","M40N5FMYE ","M40N5FMZE ","M40N5MKXE ","M40N5MKYE ", & + "M40N5MKZE ","M40N5MMXE ","M40N5MMYE ","M40N5MMZE ","M40N5RAXE ","M40N5RAYE ","M40N5RAZE ", & + "M40N5RDXE ","M40N5RDYE ","M40N5RDZE ","M40N5TAXE ","M40N5TAYE ","M40N5TAZE ","M40N5TDXSS", & + "M40N5TDYSS","M40N5TDZSS","M40N6FKXE ","M40N6FKYE ","M40N6FKZE ","M40N6FMXE ","M40N6FMYE ", & + "M40N6FMZE ","M40N6MKXE ","M40N6MKYE ","M40N6MKZE ","M40N6MMXE ","M40N6MMYE ","M40N6MMZE ", & + "M40N6RAXE ","M40N6RAYE ","M40N6RAZE ","M40N6RDXE ","M40N6RDYE ","M40N6RDZE ","M40N6TAXE ", & + "M40N6TAYE ","M40N6TAZE ","M40N6TDXSS","M40N6TDYSS","M40N6TDZSS","M40N7FKXE ","M40N7FKYE ", & + "M40N7FKZE ","M40N7FMXE ","M40N7FMYE ","M40N7FMZE ","M40N7MKXE ","M40N7MKYE ","M40N7MKZE ", & + "M40N7MMXE ","M40N7MMYE ","M40N7MMZE ","M40N7RAXE ","M40N7RAYE ","M40N7RAZE ","M40N7RDXE ", & + "M40N7RDYE ","M40N7RDZE ","M40N7TAXE ","M40N7TAYE ","M40N7TAZE ","M40N7TDXSS","M40N7TDYSS", & + "M40N7TDZSS","M40N8FKXE ","M40N8FKYE ","M40N8FKZE ","M40N8FMXE ","M40N8FMYE ","M40N8FMZE ", & + "M40N8MKXE ","M40N8MKYE ","M40N8MKZE ","M40N8MMXE ","M40N8MMYE ","M40N8MMZE ","M40N8RAXE ", & + "M40N8RAYE ","M40N8RAZE ","M40N8RDXE ","M40N8RDYE ","M40N8RDZE ","M40N8TAXE ","M40N8TAYE ", & + "M40N8TAZE ","M40N8TDXSS","M40N8TDYSS","M40N8TDZSS","M40N9FKXE ","M40N9FKYE ","M40N9FKZE ", & + "M40N9FMXE ","M40N9FMYE ","M40N9FMZE ","M40N9MKXE ","M40N9MKYE ","M40N9MKZE ","M40N9MMXE ", & + "M40N9MMYE ","M40N9MMZE ","M40N9RAXE ","M40N9RAYE ","M40N9RAZE ","M40N9RDXE ","M40N9RDYE ", & + "M40N9RDZE ","M40N9TAXE ","M40N9TAYE ","M40N9TAZE ","M40N9TDXSS","M40N9TDYSS","M40N9TDZSS", & + "M41N1FKXE ","M41N1FKYE ","M41N1FKZE ","M41N1FMXE ","M41N1FMYE ","M41N1FMZE ","M41N1MKXE ", & + "M41N1MKYE ","M41N1MKZE ","M41N1MMXE ","M41N1MMYE ","M41N1MMZE ","M41N1RAXE ","M41N1RAYE ", & + "M41N1RAZE ","M41N1RDXE ","M41N1RDYE ","M41N1RDZE ","M41N1TAXE ","M41N1TAYE ","M41N1TAZE ", & + "M41N1TDXSS","M41N1TDYSS","M41N1TDZSS","M41N2FKXE ","M41N2FKYE ","M41N2FKZE ","M41N2FMXE ", & + "M41N2FMYE ","M41N2FMZE ","M41N2MKXE ","M41N2MKYE ","M41N2MKZE ","M41N2MMXE ","M41N2MMYE ", & + "M41N2MMZE ","M41N2RAXE ","M41N2RAYE ","M41N2RAZE ","M41N2RDXE ","M41N2RDYE ","M41N2RDZE ", & + "M41N2TAXE ","M41N2TAYE ","M41N2TAZE ","M41N2TDXSS","M41N2TDYSS","M41N2TDZSS","M41N3FKXE ", & + "M41N3FKYE ","M41N3FKZE ","M41N3FMXE ","M41N3FMYE ","M41N3FMZE ","M41N3MKXE ","M41N3MKYE ", & + "M41N3MKZE ","M41N3MMXE ","M41N3MMYE ","M41N3MMZE ","M41N3RAXE ","M41N3RAYE ","M41N3RAZE ", & + "M41N3RDXE ","M41N3RDYE ","M41N3RDZE ","M41N3TAXE ","M41N3TAYE ","M41N3TAZE ","M41N3TDXSS", & + "M41N3TDYSS","M41N3TDZSS","M41N4FKXE ","M41N4FKYE ","M41N4FKZE ","M41N4FMXE ","M41N4FMYE ", & + "M41N4FMZE ","M41N4MKXE ","M41N4MKYE ","M41N4MKZE ","M41N4MMXE ","M41N4MMYE ","M41N4MMZE ", & + "M41N4RAXE ","M41N4RAYE ","M41N4RAZE ","M41N4RDXE ","M41N4RDYE ","M41N4RDZE ","M41N4TAXE ", & + "M41N4TAYE ","M41N4TAZE ","M41N4TDXSS","M41N4TDYSS","M41N4TDZSS","M41N5FKXE ","M41N5FKYE ", & + "M41N5FKZE ","M41N5FMXE ","M41N5FMYE ","M41N5FMZE ","M41N5MKXE ","M41N5MKYE ","M41N5MKZE ", & + "M41N5MMXE ","M41N5MMYE ","M41N5MMZE ","M41N5RAXE ","M41N5RAYE ","M41N5RAZE ","M41N5RDXE ", & + "M41N5RDYE ","M41N5RDZE ","M41N5TAXE ","M41N5TAYE ","M41N5TAZE ","M41N5TDXSS","M41N5TDYSS", & + "M41N5TDZSS","M41N6FKXE ","M41N6FKYE ","M41N6FKZE ","M41N6FMXE ","M41N6FMYE ","M41N6FMZE ", & + "M41N6MKXE ","M41N6MKYE ","M41N6MKZE ","M41N6MMXE ","M41N6MMYE ","M41N6MMZE ","M41N6RAXE ", & + "M41N6RAYE ","M41N6RAZE ","M41N6RDXE ","M41N6RDYE ","M41N6RDZE ","M41N6TAXE ","M41N6TAYE ", & + "M41N6TAZE ","M41N6TDXSS","M41N6TDYSS","M41N6TDZSS","M41N7FKXE ","M41N7FKYE ","M41N7FKZE ", & + "M41N7FMXE ","M41N7FMYE ","M41N7FMZE ","M41N7MKXE ","M41N7MKYE ","M41N7MKZE ","M41N7MMXE ", & + "M41N7MMYE ","M41N7MMZE ","M41N7RAXE ","M41N7RAYE ","M41N7RAZE ","M41N7RDXE ","M41N7RDYE ", & + "M41N7RDZE ","M41N7TAXE ","M41N7TAYE ","M41N7TAZE ","M41N7TDXSS","M41N7TDYSS","M41N7TDZSS", & + "M41N8FKXE ","M41N8FKYE ","M41N8FKZE ","M41N8FMXE ","M41N8FMYE ","M41N8FMZE ","M41N8MKXE ", & + "M41N8MKYE ","M41N8MKZE ","M41N8MMXE ","M41N8MMYE ","M41N8MMZE ","M41N8RAXE ","M41N8RAYE ", & + "M41N8RAZE ","M41N8RDXE ","M41N8RDYE ","M41N8RDZE ","M41N8TAXE ","M41N8TAYE ","M41N8TAZE ", & + "M41N8TDXSS","M41N8TDYSS","M41N8TDZSS","M41N9FKXE ","M41N9FKYE ","M41N9FKZE ","M41N9FMXE ", & + "M41N9FMYE ","M41N9FMZE ","M41N9MKXE ","M41N9MKYE ","M41N9MKZE ","M41N9MMXE ","M41N9MMYE ", & + "M41N9MMZE ","M41N9RAXE ","M41N9RAYE ","M41N9RAZE ","M41N9RDXE ","M41N9RDYE ","M41N9RDZE ", & + "M41N9TAXE ","M41N9TAYE ","M41N9TAZE ","M41N9TDXSS","M41N9TDYSS","M41N9TDZSS","M42N1FKXE ", & + "M42N1FKYE ","M42N1FKZE ","M42N1FMXE ","M42N1FMYE ","M42N1FMZE ","M42N1MKXE ","M42N1MKYE ", & + "M42N1MKZE ","M42N1MMXE ","M42N1MMYE ","M42N1MMZE ","M42N1RAXE ","M42N1RAYE ","M42N1RAZE ", & + "M42N1RDXE ","M42N1RDYE ","M42N1RDZE ","M42N1TAXE ","M42N1TAYE ","M42N1TAZE ","M42N1TDXSS", & + "M42N1TDYSS","M42N1TDZSS","M42N2FKXE ","M42N2FKYE ","M42N2FKZE ","M42N2FMXE ","M42N2FMYE ", & + "M42N2FMZE ","M42N2MKXE ","M42N2MKYE ","M42N2MKZE ","M42N2MMXE ","M42N2MMYE ","M42N2MMZE ", & + "M42N2RAXE ","M42N2RAYE ","M42N2RAZE ","M42N2RDXE ","M42N2RDYE ","M42N2RDZE ","M42N2TAXE ", & + "M42N2TAYE ","M42N2TAZE ","M42N2TDXSS","M42N2TDYSS","M42N2TDZSS","M42N3FKXE ","M42N3FKYE ", & + "M42N3FKZE ","M42N3FMXE ","M42N3FMYE ","M42N3FMZE ","M42N3MKXE ","M42N3MKYE ","M42N3MKZE ", & + "M42N3MMXE ","M42N3MMYE ","M42N3MMZE ","M42N3RAXE ","M42N3RAYE ","M42N3RAZE ","M42N3RDXE ", & + "M42N3RDYE ","M42N3RDZE ","M42N3TAXE ","M42N3TAYE ","M42N3TAZE ","M42N3TDXSS","M42N3TDYSS", & + "M42N3TDZSS","M42N4FKXE ","M42N4FKYE ","M42N4FKZE ","M42N4FMXE ","M42N4FMYE ","M42N4FMZE ", & + "M42N4MKXE ","M42N4MKYE ","M42N4MKZE ","M42N4MMXE ","M42N4MMYE ","M42N4MMZE ","M42N4RAXE ", & + "M42N4RAYE ","M42N4RAZE ","M42N4RDXE ","M42N4RDYE ","M42N4RDZE ","M42N4TAXE ","M42N4TAYE ", & + "M42N4TAZE ","M42N4TDXSS","M42N4TDYSS","M42N4TDZSS","M42N5FKXE ","M42N5FKYE ","M42N5FKZE ", & + "M42N5FMXE ","M42N5FMYE ","M42N5FMZE ","M42N5MKXE ","M42N5MKYE ","M42N5MKZE ","M42N5MMXE ", & + "M42N5MMYE ","M42N5MMZE ","M42N5RAXE ","M42N5RAYE ","M42N5RAZE ","M42N5RDXE ","M42N5RDYE ", & + "M42N5RDZE ","M42N5TAXE ","M42N5TAYE ","M42N5TAZE ","M42N5TDXSS","M42N5TDYSS","M42N5TDZSS", & + "M42N6FKXE ","M42N6FKYE ","M42N6FKZE ","M42N6FMXE ","M42N6FMYE ","M42N6FMZE ","M42N6MKXE ", & + "M42N6MKYE ","M42N6MKZE ","M42N6MMXE ","M42N6MMYE ","M42N6MMZE ","M42N6RAXE ","M42N6RAYE ", & + "M42N6RAZE ","M42N6RDXE ","M42N6RDYE ","M42N6RDZE ","M42N6TAXE ","M42N6TAYE ","M42N6TAZE ", & + "M42N6TDXSS","M42N6TDYSS","M42N6TDZSS","M42N7FKXE ","M42N7FKYE ","M42N7FKZE ","M42N7FMXE ", & + "M42N7FMYE ","M42N7FMZE ","M42N7MKXE ","M42N7MKYE ","M42N7MKZE ","M42N7MMXE ","M42N7MMYE ", & + "M42N7MMZE ","M42N7RAXE ","M42N7RAYE ","M42N7RAZE ","M42N7RDXE ","M42N7RDYE ","M42N7RDZE ", & + "M42N7TAXE ","M42N7TAYE ","M42N7TAZE ","M42N7TDXSS","M42N7TDYSS","M42N7TDZSS","M42N8FKXE ", & + "M42N8FKYE ","M42N8FKZE ","M42N8FMXE ","M42N8FMYE ","M42N8FMZE ","M42N8MKXE ","M42N8MKYE ", & + "M42N8MKZE ","M42N8MMXE ","M42N8MMYE ","M42N8MMZE ","M42N8RAXE ","M42N8RAYE ","M42N8RAZE ", & + "M42N8RDXE ","M42N8RDYE ","M42N8RDZE ","M42N8TAXE ","M42N8TAYE ","M42N8TAZE ","M42N8TDXSS", & + "M42N8TDYSS","M42N8TDZSS","M42N9FKXE ","M42N9FKYE ","M42N9FKZE ","M42N9FMXE ","M42N9FMYE ", & + "M42N9FMZE ","M42N9MKXE ","M42N9MKYE ","M42N9MKZE ","M42N9MMXE ","M42N9MMYE ","M42N9MMZE ", & + "M42N9RAXE ","M42N9RAYE ","M42N9RAZE ","M42N9RDXE ","M42N9RDYE ","M42N9RDZE ","M42N9TAXE ", & + "M42N9TAYE ","M42N9TAZE ","M42N9TDXSS","M42N9TDYSS","M42N9TDZSS","M43N1FKXE ","M43N1FKYE ", & + "M43N1FKZE ","M43N1FMXE ","M43N1FMYE ","M43N1FMZE ","M43N1MKXE ","M43N1MKYE ","M43N1MKZE ", & + "M43N1MMXE ","M43N1MMYE ","M43N1MMZE ","M43N1RAXE ","M43N1RAYE ","M43N1RAZE ","M43N1RDXE ", & + "M43N1RDYE ","M43N1RDZE ","M43N1TAXE ","M43N1TAYE ","M43N1TAZE ","M43N1TDXSS","M43N1TDYSS", & + "M43N1TDZSS","M43N2FKXE ","M43N2FKYE ","M43N2FKZE ","M43N2FMXE ","M43N2FMYE ","M43N2FMZE ", & + "M43N2MKXE ","M43N2MKYE ","M43N2MKZE ","M43N2MMXE ","M43N2MMYE ","M43N2MMZE ","M43N2RAXE ", & + "M43N2RAYE ","M43N2RAZE ","M43N2RDXE ","M43N2RDYE ","M43N2RDZE ","M43N2TAXE ","M43N2TAYE ", & + "M43N2TAZE ","M43N2TDXSS","M43N2TDYSS","M43N2TDZSS","M43N3FKXE ","M43N3FKYE ","M43N3FKZE ", & + "M43N3FMXE ","M43N3FMYE ","M43N3FMZE ","M43N3MKXE ","M43N3MKYE ","M43N3MKZE ","M43N3MMXE ", & + "M43N3MMYE ","M43N3MMZE ","M43N3RAXE ","M43N3RAYE ","M43N3RAZE ","M43N3RDXE ","M43N3RDYE ", & + "M43N3RDZE ","M43N3TAXE ","M43N3TAYE ","M43N3TAZE ","M43N3TDXSS","M43N3TDYSS","M43N3TDZSS", & + "M43N4FKXE ","M43N4FKYE ","M43N4FKZE ","M43N4FMXE ","M43N4FMYE ","M43N4FMZE ","M43N4MKXE ", & + "M43N4MKYE ","M43N4MKZE ","M43N4MMXE ","M43N4MMYE ","M43N4MMZE ","M43N4RAXE ","M43N4RAYE ", & + "M43N4RAZE ","M43N4RDXE ","M43N4RDYE ","M43N4RDZE ","M43N4TAXE ","M43N4TAYE ","M43N4TAZE ", & + "M43N4TDXSS","M43N4TDYSS","M43N4TDZSS","M43N5FKXE ","M43N5FKYE ","M43N5FKZE ","M43N5FMXE ", & + "M43N5FMYE ","M43N5FMZE ","M43N5MKXE ","M43N5MKYE ","M43N5MKZE ","M43N5MMXE ","M43N5MMYE ", & + "M43N5MMZE ","M43N5RAXE ","M43N5RAYE ","M43N5RAZE ","M43N5RDXE ","M43N5RDYE ","M43N5RDZE ", & + "M43N5TAXE ","M43N5TAYE ","M43N5TAZE ","M43N5TDXSS","M43N5TDYSS","M43N5TDZSS","M43N6FKXE ", & + "M43N6FKYE ","M43N6FKZE ","M43N6FMXE ","M43N6FMYE ","M43N6FMZE ","M43N6MKXE ","M43N6MKYE ", & + "M43N6MKZE ","M43N6MMXE ","M43N6MMYE ","M43N6MMZE ","M43N6RAXE ","M43N6RAYE ","M43N6RAZE ", & + "M43N6RDXE ","M43N6RDYE ","M43N6RDZE ","M43N6TAXE ","M43N6TAYE ","M43N6TAZE ","M43N6TDXSS", & + "M43N6TDYSS","M43N6TDZSS","M43N7FKXE ","M43N7FKYE ","M43N7FKZE ","M43N7FMXE ","M43N7FMYE ", & + "M43N7FMZE ","M43N7MKXE ","M43N7MKYE ","M43N7MKZE ","M43N7MMXE ","M43N7MMYE ","M43N7MMZE ", & + "M43N7RAXE ","M43N7RAYE ","M43N7RAZE ","M43N7RDXE ","M43N7RDYE ","M43N7RDZE ","M43N7TAXE ", & + "M43N7TAYE ","M43N7TAZE ","M43N7TDXSS","M43N7TDYSS","M43N7TDZSS","M43N8FKXE ","M43N8FKYE ", & + "M43N8FKZE ","M43N8FMXE ","M43N8FMYE ","M43N8FMZE ","M43N8MKXE ","M43N8MKYE ","M43N8MKZE ", & + "M43N8MMXE ","M43N8MMYE ","M43N8MMZE ","M43N8RAXE ","M43N8RAYE ","M43N8RAZE ","M43N8RDXE ", & + "M43N8RDYE ","M43N8RDZE ","M43N8TAXE ","M43N8TAYE ","M43N8TAZE ","M43N8TDXSS","M43N8TDYSS", & + "M43N8TDZSS","M43N9FKXE ","M43N9FKYE ","M43N9FKZE ","M43N9FMXE ","M43N9FMYE ","M43N9FMZE ", & + "M43N9MKXE ","M43N9MKYE ","M43N9MKZE ","M43N9MMXE ","M43N9MMYE ","M43N9MMZE ","M43N9RAXE ", & + "M43N9RAYE ","M43N9RAZE ","M43N9RDXE ","M43N9RDYE ","M43N9RDZE ","M43N9TAXE ","M43N9TAYE ", & + "M43N9TAZE ","M43N9TDXSS","M43N9TDYSS","M43N9TDZSS","M44N1FKXE ","M44N1FKYE ","M44N1FKZE ", & + "M44N1FMXE ","M44N1FMYE ","M44N1FMZE ","M44N1MKXE ","M44N1MKYE ","M44N1MKZE ","M44N1MMXE ", & + "M44N1MMYE ","M44N1MMZE ","M44N1RAXE ","M44N1RAYE ","M44N1RAZE ","M44N1RDXE ","M44N1RDYE ", & + "M44N1RDZE ","M44N1TAXE ","M44N1TAYE ","M44N1TAZE ","M44N1TDXSS","M44N1TDYSS","M44N1TDZSS", & + "M44N2FKXE ","M44N2FKYE ","M44N2FKZE ","M44N2FMXE ","M44N2FMYE ","M44N2FMZE ","M44N2MKXE ", & + "M44N2MKYE ","M44N2MKZE ","M44N2MMXE ","M44N2MMYE ","M44N2MMZE ","M44N2RAXE ","M44N2RAYE ", & + "M44N2RAZE ","M44N2RDXE ","M44N2RDYE ","M44N2RDZE ","M44N2TAXE ","M44N2TAYE ","M44N2TAZE ", & + "M44N2TDXSS","M44N2TDYSS","M44N2TDZSS","M44N3FKXE ","M44N3FKYE ","M44N3FKZE ","M44N3FMXE ", & + "M44N3FMYE ","M44N3FMZE ","M44N3MKXE ","M44N3MKYE ","M44N3MKZE ","M44N3MMXE ","M44N3MMYE ", & + "M44N3MMZE ","M44N3RAXE ","M44N3RAYE ","M44N3RAZE ","M44N3RDXE ","M44N3RDYE ","M44N3RDZE ", & + "M44N3TAXE ","M44N3TAYE ","M44N3TAZE ","M44N3TDXSS","M44N3TDYSS","M44N3TDZSS","M44N4FKXE ", & + "M44N4FKYE ","M44N4FKZE ","M44N4FMXE ","M44N4FMYE ","M44N4FMZE ","M44N4MKXE ","M44N4MKYE ", & + "M44N4MKZE ","M44N4MMXE ","M44N4MMYE ","M44N4MMZE ","M44N4RAXE ","M44N4RAYE ","M44N4RAZE ", & + "M44N4RDXE ","M44N4RDYE ","M44N4RDZE ","M44N4TAXE ","M44N4TAYE ","M44N4TAZE ","M44N4TDXSS", & + "M44N4TDYSS","M44N4TDZSS","M44N5FKXE ","M44N5FKYE ","M44N5FKZE ","M44N5FMXE ","M44N5FMYE ", & + "M44N5FMZE ","M44N5MKXE ","M44N5MKYE ","M44N5MKZE ","M44N5MMXE ","M44N5MMYE ","M44N5MMZE ", & + "M44N5RAXE ","M44N5RAYE ","M44N5RAZE ","M44N5RDXE ","M44N5RDYE ","M44N5RDZE ","M44N5TAXE ", & + "M44N5TAYE ","M44N5TAZE ","M44N5TDXSS","M44N5TDYSS","M44N5TDZSS","M44N6FKXE ","M44N6FKYE ", & + "M44N6FKZE ","M44N6FMXE ","M44N6FMYE ","M44N6FMZE ","M44N6MKXE ","M44N6MKYE ","M44N6MKZE ", & + "M44N6MMXE ","M44N6MMYE ","M44N6MMZE ","M44N6RAXE ","M44N6RAYE ","M44N6RAZE ","M44N6RDXE ", & + "M44N6RDYE ","M44N6RDZE ","M44N6TAXE ","M44N6TAYE ","M44N6TAZE ","M44N6TDXSS","M44N6TDYSS", & + "M44N6TDZSS","M44N7FKXE ","M44N7FKYE ","M44N7FKZE ","M44N7FMXE ","M44N7FMYE ","M44N7FMZE ", & + "M44N7MKXE ","M44N7MKYE ","M44N7MKZE ","M44N7MMXE ","M44N7MMYE ","M44N7MMZE ","M44N7RAXE ", & + "M44N7RAYE ","M44N7RAZE ","M44N7RDXE ","M44N7RDYE ","M44N7RDZE ","M44N7TAXE ","M44N7TAYE ", & + "M44N7TAZE ","M44N7TDXSS","M44N7TDYSS","M44N7TDZSS","M44N8FKXE ","M44N8FKYE ","M44N8FKZE ", & + "M44N8FMXE ","M44N8FMYE ","M44N8FMZE ","M44N8MKXE ","M44N8MKYE ","M44N8MKZE ","M44N8MMXE ", & + "M44N8MMYE ","M44N8MMZE ","M44N8RAXE ","M44N8RAYE ","M44N8RAZE ","M44N8RDXE ","M44N8RDYE ", & + "M44N8RDZE ","M44N8TAXE ","M44N8TAYE ","M44N8TAZE ","M44N8TDXSS","M44N8TDYSS","M44N8TDZSS", & + "M44N9FKXE ","M44N9FKYE ","M44N9FKZE ","M44N9FMXE ","M44N9FMYE ","M44N9FMZE ","M44N9MKXE ", & + "M44N9MKYE ","M44N9MKZE ","M44N9MMXE ","M44N9MMYE ","M44N9MMZE ","M44N9RAXE ","M44N9RAYE ", & + "M44N9RAZE ","M44N9RDXE ","M44N9RDYE ","M44N9RDZE ","M44N9TAXE ","M44N9TAYE ","M44N9TAZE ", & + "M44N9TDXSS","M44N9TDYSS","M44N9TDZSS","M45N1FKXE ","M45N1FKYE ","M45N1FKZE ","M45N1FMXE ", & + "M45N1FMYE ","M45N1FMZE ","M45N1MKXE ","M45N1MKYE ","M45N1MKZE ","M45N1MMXE ","M45N1MMYE ", & + "M45N1MMZE ","M45N1RAXE ","M45N1RAYE ","M45N1RAZE ","M45N1RDXE ","M45N1RDYE ","M45N1RDZE ", & + "M45N1TAXE ","M45N1TAYE ","M45N1TAZE ","M45N1TDXSS","M45N1TDYSS","M45N1TDZSS","M45N2FKXE ", & + "M45N2FKYE ","M45N2FKZE ","M45N2FMXE ","M45N2FMYE ","M45N2FMZE ","M45N2MKXE ","M45N2MKYE ", & + "M45N2MKZE ","M45N2MMXE ","M45N2MMYE ","M45N2MMZE ","M45N2RAXE ","M45N2RAYE ","M45N2RAZE ", & + "M45N2RDXE ","M45N2RDYE ","M45N2RDZE ","M45N2TAXE ","M45N2TAYE ","M45N2TAZE ","M45N2TDXSS", & + "M45N2TDYSS","M45N2TDZSS","M45N3FKXE ","M45N3FKYE ","M45N3FKZE ","M45N3FMXE ","M45N3FMYE ", & + "M45N3FMZE ","M45N3MKXE ","M45N3MKYE ","M45N3MKZE ","M45N3MMXE ","M45N3MMYE ","M45N3MMZE ", & + "M45N3RAXE ","M45N3RAYE ","M45N3RAZE ","M45N3RDXE ","M45N3RDYE ","M45N3RDZE ","M45N3TAXE ", & + "M45N3TAYE ","M45N3TAZE ","M45N3TDXSS","M45N3TDYSS","M45N3TDZSS","M45N4FKXE ","M45N4FKYE ", & + "M45N4FKZE ","M45N4FMXE ","M45N4FMYE ","M45N4FMZE ","M45N4MKXE ","M45N4MKYE ","M45N4MKZE ", & + "M45N4MMXE ","M45N4MMYE ","M45N4MMZE ","M45N4RAXE ","M45N4RAYE ","M45N4RAZE ","M45N4RDXE ", & + "M45N4RDYE ","M45N4RDZE ","M45N4TAXE ","M45N4TAYE ","M45N4TAZE ","M45N4TDXSS","M45N4TDYSS", & + "M45N4TDZSS","M45N5FKXE ","M45N5FKYE ","M45N5FKZE ","M45N5FMXE ","M45N5FMYE ","M45N5FMZE ", & + "M45N5MKXE ","M45N5MKYE ","M45N5MKZE ","M45N5MMXE ","M45N5MMYE ","M45N5MMZE ","M45N5RAXE ", & + "M45N5RAYE ","M45N5RAZE ","M45N5RDXE ","M45N5RDYE ","M45N5RDZE ","M45N5TAXE ","M45N5TAYE ", & + "M45N5TAZE ","M45N5TDXSS","M45N5TDYSS","M45N5TDZSS","M45N6FKXE ","M45N6FKYE ","M45N6FKZE ", & + "M45N6FMXE ","M45N6FMYE ","M45N6FMZE ","M45N6MKXE ","M45N6MKYE ","M45N6MKZE ","M45N6MMXE ", & + "M45N6MMYE ","M45N6MMZE ","M45N6RAXE ","M45N6RAYE ","M45N6RAZE ","M45N6RDXE ","M45N6RDYE ", & + "M45N6RDZE ","M45N6TAXE ","M45N6TAYE ","M45N6TAZE ","M45N6TDXSS","M45N6TDYSS","M45N6TDZSS", & + "M45N7FKXE ","M45N7FKYE ","M45N7FKZE ","M45N7FMXE ","M45N7FMYE ","M45N7FMZE ","M45N7MKXE ", & + "M45N7MKYE ","M45N7MKZE ","M45N7MMXE ","M45N7MMYE ","M45N7MMZE ","M45N7RAXE ","M45N7RAYE ", & + "M45N7RAZE ","M45N7RDXE ","M45N7RDYE ","M45N7RDZE ","M45N7TAXE ","M45N7TAYE ","M45N7TAZE ", & + "M45N7TDXSS","M45N7TDYSS","M45N7TDZSS","M45N8FKXE ","M45N8FKYE ","M45N8FKZE ","M45N8FMXE ", & + "M45N8FMYE ","M45N8FMZE ","M45N8MKXE ","M45N8MKYE ","M45N8MKZE ","M45N8MMXE ","M45N8MMYE ", & + "M45N8MMZE ","M45N8RAXE ","M45N8RAYE ","M45N8RAZE ","M45N8RDXE ","M45N8RDYE ","M45N8RDZE ", & + "M45N8TAXE ","M45N8TAYE ","M45N8TAZE ","M45N8TDXSS","M45N8TDYSS","M45N8TDZSS","M45N9FKXE ", & + "M45N9FKYE ","M45N9FKZE ","M45N9FMXE ","M45N9FMYE ","M45N9FMZE ","M45N9MKXE ","M45N9MKYE ", & + "M45N9MKZE ","M45N9MMXE ","M45N9MMYE ","M45N9MMZE ","M45N9RAXE ","M45N9RAYE ","M45N9RAZE ", & + "M45N9RDXE ","M45N9RDYE ","M45N9RDZE ","M45N9TAXE ","M45N9TAYE ","M45N9TAZE ","M45N9TDXSS", & + "M45N9TDYSS","M45N9TDZSS","M46N1FKXE ","M46N1FKYE ","M46N1FKZE ","M46N1FMXE ","M46N1FMYE ", & + "M46N1FMZE ","M46N1MKXE ","M46N1MKYE ","M46N1MKZE ","M46N1MMXE ","M46N1MMYE ","M46N1MMZE ", & + "M46N1RAXE ","M46N1RAYE ","M46N1RAZE ","M46N1RDXE ","M46N1RDYE ","M46N1RDZE ","M46N1TAXE ", & + "M46N1TAYE ","M46N1TAZE ","M46N1TDXSS","M46N1TDYSS","M46N1TDZSS","M46N2FKXE ","M46N2FKYE ", & + "M46N2FKZE ","M46N2FMXE ","M46N2FMYE ","M46N2FMZE ","M46N2MKXE ","M46N2MKYE ","M46N2MKZE ", & + "M46N2MMXE ","M46N2MMYE ","M46N2MMZE ","M46N2RAXE ","M46N2RAYE ","M46N2RAZE ","M46N2RDXE ", & + "M46N2RDYE ","M46N2RDZE ","M46N2TAXE ","M46N2TAYE ","M46N2TAZE ","M46N2TDXSS","M46N2TDYSS", & + "M46N2TDZSS","M46N3FKXE ","M46N3FKYE ","M46N3FKZE ","M46N3FMXE ","M46N3FMYE ","M46N3FMZE ", & + "M46N3MKXE ","M46N3MKYE ","M46N3MKZE ","M46N3MMXE ","M46N3MMYE ","M46N3MMZE ","M46N3RAXE ", & + "M46N3RAYE ","M46N3RAZE ","M46N3RDXE ","M46N3RDYE ","M46N3RDZE ","M46N3TAXE ","M46N3TAYE ", & + "M46N3TAZE ","M46N3TDXSS","M46N3TDYSS","M46N3TDZSS","M46N4FKXE ","M46N4FKYE ","M46N4FKZE ", & + "M46N4FMXE ","M46N4FMYE ","M46N4FMZE ","M46N4MKXE ","M46N4MKYE ","M46N4MKZE ","M46N4MMXE ", & + "M46N4MMYE ","M46N4MMZE ","M46N4RAXE ","M46N4RAYE ","M46N4RAZE ","M46N4RDXE ","M46N4RDYE ", & + "M46N4RDZE ","M46N4TAXE ","M46N4TAYE ","M46N4TAZE ","M46N4TDXSS","M46N4TDYSS","M46N4TDZSS", & + "M46N5FKXE ","M46N5FKYE ","M46N5FKZE ","M46N5FMXE ","M46N5FMYE ","M46N5FMZE ","M46N5MKXE ", & + "M46N5MKYE ","M46N5MKZE ","M46N5MMXE ","M46N5MMYE ","M46N5MMZE ","M46N5RAXE ","M46N5RAYE ", & + "M46N5RAZE ","M46N5RDXE ","M46N5RDYE ","M46N5RDZE ","M46N5TAXE ","M46N5TAYE ","M46N5TAZE ", & + "M46N5TDXSS","M46N5TDYSS","M46N5TDZSS","M46N6FKXE ","M46N6FKYE ","M46N6FKZE ","M46N6FMXE ", & + "M46N6FMYE ","M46N6FMZE ","M46N6MKXE ","M46N6MKYE ","M46N6MKZE ","M46N6MMXE ","M46N6MMYE ", & + "M46N6MMZE ","M46N6RAXE ","M46N6RAYE ","M46N6RAZE ","M46N6RDXE ","M46N6RDYE ","M46N6RDZE ", & + "M46N6TAXE ","M46N6TAYE ","M46N6TAZE ","M46N6TDXSS","M46N6TDYSS","M46N6TDZSS","M46N7FKXE ", & + "M46N7FKYE ","M46N7FKZE ","M46N7FMXE ","M46N7FMYE ","M46N7FMZE ","M46N7MKXE ","M46N7MKYE ", & + "M46N7MKZE ","M46N7MMXE ","M46N7MMYE ","M46N7MMZE ","M46N7RAXE ","M46N7RAYE ","M46N7RAZE ", & + "M46N7RDXE ","M46N7RDYE ","M46N7RDZE ","M46N7TAXE ","M46N7TAYE ","M46N7TAZE ","M46N7TDXSS", & + "M46N7TDYSS","M46N7TDZSS","M46N8FKXE ","M46N8FKYE ","M46N8FKZE ","M46N8FMXE ","M46N8FMYE ", & + "M46N8FMZE ","M46N8MKXE ","M46N8MKYE ","M46N8MKZE ","M46N8MMXE ","M46N8MMYE ","M46N8MMZE ", & + "M46N8RAXE ","M46N8RAYE ","M46N8RAZE ","M46N8RDXE ","M46N8RDYE ","M46N8RDZE ","M46N8TAXE ", & + "M46N8TAYE ","M46N8TAZE ","M46N8TDXSS","M46N8TDYSS","M46N8TDZSS","M46N9FKXE ","M46N9FKYE ", & + "M46N9FKZE ","M46N9FMXE ","M46N9FMYE ","M46N9FMZE ","M46N9MKXE ","M46N9MKYE ","M46N9MKZE ", & + "M46N9MMXE ","M46N9MMYE ","M46N9MMZE ","M46N9RAXE ","M46N9RAYE ","M46N9RAZE ","M46N9RDXE ", & + "M46N9RDYE ","M46N9RDZE ","M46N9TAXE ","M46N9TAYE ","M46N9TAZE ","M46N9TDXSS","M46N9TDYSS", & + "M46N9TDZSS","M47N1FKXE ","M47N1FKYE ","M47N1FKZE ","M47N1FMXE ","M47N1FMYE ","M47N1FMZE ", & + "M47N1MKXE ","M47N1MKYE ","M47N1MKZE ","M47N1MMXE ","M47N1MMYE ","M47N1MMZE ","M47N1RAXE ", & + "M47N1RAYE ","M47N1RAZE ","M47N1RDXE ","M47N1RDYE ","M47N1RDZE ","M47N1TAXE ","M47N1TAYE ", & + "M47N1TAZE ","M47N1TDXSS","M47N1TDYSS","M47N1TDZSS","M47N2FKXE ","M47N2FKYE ","M47N2FKZE ", & + "M47N2FMXE ","M47N2FMYE ","M47N2FMZE ","M47N2MKXE ","M47N2MKYE ","M47N2MKZE ","M47N2MMXE ", & + "M47N2MMYE ","M47N2MMZE ","M47N2RAXE ","M47N2RAYE ","M47N2RAZE ","M47N2RDXE ","M47N2RDYE ", & + "M47N2RDZE ","M47N2TAXE ","M47N2TAYE ","M47N2TAZE ","M47N2TDXSS","M47N2TDYSS","M47N2TDZSS", & + "M47N3FKXE ","M47N3FKYE ","M47N3FKZE ","M47N3FMXE ","M47N3FMYE ","M47N3FMZE ","M47N3MKXE ", & + "M47N3MKYE ","M47N3MKZE ","M47N3MMXE ","M47N3MMYE ","M47N3MMZE ","M47N3RAXE ","M47N3RAYE ", & + "M47N3RAZE ","M47N3RDXE ","M47N3RDYE ","M47N3RDZE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry7(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M47N3TAXE ","M47N3TAYE ","M47N3TAZE ","M47N3TDXSS","M47N3TDYSS","M47N3TDZSS","M47N4FKXE ", & + "M47N4FKYE ","M47N4FKZE ","M47N4FMXE ","M47N4FMYE ","M47N4FMZE ","M47N4MKXE ","M47N4MKYE ", & + "M47N4MKZE ","M47N4MMXE ","M47N4MMYE ","M47N4MMZE ","M47N4RAXE ","M47N4RAYE ","M47N4RAZE ", & + "M47N4RDXE ","M47N4RDYE ","M47N4RDZE ","M47N4TAXE ","M47N4TAYE ","M47N4TAZE ","M47N4TDXSS", & + "M47N4TDYSS","M47N4TDZSS","M47N5FKXE ","M47N5FKYE ","M47N5FKZE ","M47N5FMXE ","M47N5FMYE ", & + "M47N5FMZE ","M47N5MKXE ","M47N5MKYE ","M47N5MKZE ","M47N5MMXE ","M47N5MMYE ","M47N5MMZE ", & + "M47N5RAXE ","M47N5RAYE ","M47N5RAZE ","M47N5RDXE ","M47N5RDYE ","M47N5RDZE ","M47N5TAXE ", & + "M47N5TAYE ","M47N5TAZE ","M47N5TDXSS","M47N5TDYSS","M47N5TDZSS","M47N6FKXE ","M47N6FKYE ", & + "M47N6FKZE ","M47N6FMXE ","M47N6FMYE ","M47N6FMZE ","M47N6MKXE ","M47N6MKYE ","M47N6MKZE ", & + "M47N6MMXE ","M47N6MMYE ","M47N6MMZE ","M47N6RAXE ","M47N6RAYE ","M47N6RAZE ","M47N6RDXE ", & + "M47N6RDYE ","M47N6RDZE ","M47N6TAXE ","M47N6TAYE ","M47N6TAZE ","M47N6TDXSS","M47N6TDYSS", & + "M47N6TDZSS","M47N7FKXE ","M47N7FKYE ","M47N7FKZE ","M47N7FMXE ","M47N7FMYE ","M47N7FMZE ", & + "M47N7MKXE ","M47N7MKYE ","M47N7MKZE ","M47N7MMXE ","M47N7MMYE ","M47N7MMZE ","M47N7RAXE ", & + "M47N7RAYE ","M47N7RAZE ","M47N7RDXE ","M47N7RDYE ","M47N7RDZE ","M47N7TAXE ","M47N7TAYE ", & + "M47N7TAZE ","M47N7TDXSS","M47N7TDYSS","M47N7TDZSS","M47N8FKXE ","M47N8FKYE ","M47N8FKZE ", & + "M47N8FMXE ","M47N8FMYE ","M47N8FMZE ","M47N8MKXE ","M47N8MKYE ","M47N8MKZE ","M47N8MMXE ", & + "M47N8MMYE ","M47N8MMZE ","M47N8RAXE ","M47N8RAYE ","M47N8RAZE ","M47N8RDXE ","M47N8RDYE ", & + "M47N8RDZE ","M47N8TAXE ","M47N8TAYE ","M47N8TAZE ","M47N8TDXSS","M47N8TDYSS","M47N8TDZSS", & + "M47N9FKXE ","M47N9FKYE ","M47N9FKZE ","M47N9FMXE ","M47N9FMYE ","M47N9FMZE ","M47N9MKXE ", & + "M47N9MKYE ","M47N9MKZE ","M47N9MMXE ","M47N9MMYE ","M47N9MMZE ","M47N9RAXE ","M47N9RAYE ", & + "M47N9RAZE ","M47N9RDXE ","M47N9RDYE ","M47N9RDZE ","M47N9TAXE ","M47N9TAYE ","M47N9TAZE ", & + "M47N9TDXSS","M47N9TDYSS","M47N9TDZSS","M48N1FKXE ","M48N1FKYE ","M48N1FKZE ","M48N1FMXE ", & + "M48N1FMYE ","M48N1FMZE ","M48N1MKXE ","M48N1MKYE ","M48N1MKZE ","M48N1MMXE ","M48N1MMYE ", & + "M48N1MMZE ","M48N1RAXE ","M48N1RAYE ","M48N1RAZE ","M48N1RDXE ","M48N1RDYE ","M48N1RDZE ", & + "M48N1TAXE ","M48N1TAYE ","M48N1TAZE ","M48N1TDXSS","M48N1TDYSS","M48N1TDZSS","M48N2FKXE ", & + "M48N2FKYE ","M48N2FKZE ","M48N2FMXE ","M48N2FMYE ","M48N2FMZE ","M48N2MKXE ","M48N2MKYE ", & + "M48N2MKZE ","M48N2MMXE ","M48N2MMYE ","M48N2MMZE ","M48N2RAXE ","M48N2RAYE ","M48N2RAZE ", & + "M48N2RDXE ","M48N2RDYE ","M48N2RDZE ","M48N2TAXE ","M48N2TAYE ","M48N2TAZE ","M48N2TDXSS", & + "M48N2TDYSS","M48N2TDZSS","M48N3FKXE ","M48N3FKYE ","M48N3FKZE ","M48N3FMXE ","M48N3FMYE ", & + "M48N3FMZE ","M48N3MKXE ","M48N3MKYE ","M48N3MKZE ","M48N3MMXE ","M48N3MMYE ","M48N3MMZE ", & + "M48N3RAXE ","M48N3RAYE ","M48N3RAZE ","M48N3RDXE ","M48N3RDYE ","M48N3RDZE ","M48N3TAXE ", & + "M48N3TAYE ","M48N3TAZE ","M48N3TDXSS","M48N3TDYSS","M48N3TDZSS","M48N4FKXE ","M48N4FKYE ", & + "M48N4FKZE ","M48N4FMXE ","M48N4FMYE ","M48N4FMZE ","M48N4MKXE ","M48N4MKYE ","M48N4MKZE ", & + "M48N4MMXE ","M48N4MMYE ","M48N4MMZE ","M48N4RAXE ","M48N4RAYE ","M48N4RAZE ","M48N4RDXE ", & + "M48N4RDYE ","M48N4RDZE ","M48N4TAXE ","M48N4TAYE ","M48N4TAZE ","M48N4TDXSS","M48N4TDYSS", & + "M48N4TDZSS","M48N5FKXE ","M48N5FKYE ","M48N5FKZE ","M48N5FMXE ","M48N5FMYE ","M48N5FMZE ", & + "M48N5MKXE ","M48N5MKYE ","M48N5MKZE ","M48N5MMXE ","M48N5MMYE ","M48N5MMZE ","M48N5RAXE ", & + "M48N5RAYE ","M48N5RAZE ","M48N5RDXE ","M48N5RDYE ","M48N5RDZE ","M48N5TAXE ","M48N5TAYE ", & + "M48N5TAZE ","M48N5TDXSS","M48N5TDYSS","M48N5TDZSS","M48N6FKXE ","M48N6FKYE ","M48N6FKZE ", & + "M48N6FMXE ","M48N6FMYE ","M48N6FMZE ","M48N6MKXE ","M48N6MKYE ","M48N6MKZE ","M48N6MMXE ", & + "M48N6MMYE ","M48N6MMZE ","M48N6RAXE ","M48N6RAYE ","M48N6RAZE ","M48N6RDXE ","M48N6RDYE ", & + "M48N6RDZE ","M48N6TAXE ","M48N6TAYE ","M48N6TAZE ","M48N6TDXSS","M48N6TDYSS","M48N6TDZSS", & + "M48N7FKXE ","M48N7FKYE ","M48N7FKZE ","M48N7FMXE ","M48N7FMYE ","M48N7FMZE ","M48N7MKXE ", & + "M48N7MKYE ","M48N7MKZE ","M48N7MMXE ","M48N7MMYE ","M48N7MMZE ","M48N7RAXE ","M48N7RAYE ", & + "M48N7RAZE ","M48N7RDXE ","M48N7RDYE ","M48N7RDZE ","M48N7TAXE ","M48N7TAYE ","M48N7TAZE ", & + "M48N7TDXSS","M48N7TDYSS","M48N7TDZSS","M48N8FKXE ","M48N8FKYE ","M48N8FKZE ","M48N8FMXE ", & + "M48N8FMYE ","M48N8FMZE ","M48N8MKXE ","M48N8MKYE ","M48N8MKZE ","M48N8MMXE ","M48N8MMYE ", & + "M48N8MMZE ","M48N8RAXE ","M48N8RAYE ","M48N8RAZE ","M48N8RDXE ","M48N8RDYE ","M48N8RDZE ", & + "M48N8TAXE ","M48N8TAYE ","M48N8TAZE ","M48N8TDXSS","M48N8TDYSS","M48N8TDZSS","M48N9FKXE ", & + "M48N9FKYE ","M48N9FKZE ","M48N9FMXE ","M48N9FMYE ","M48N9FMZE ","M48N9MKXE ","M48N9MKYE ", & + "M48N9MKZE ","M48N9MMXE ","M48N9MMYE ","M48N9MMZE ","M48N9RAXE ","M48N9RAYE ","M48N9RAZE ", & + "M48N9RDXE ","M48N9RDYE ","M48N9RDZE ","M48N9TAXE ","M48N9TAYE ","M48N9TAZE ","M48N9TDXSS", & + "M48N9TDYSS","M48N9TDZSS","M49N1FKXE ","M49N1FKYE ","M49N1FKZE ","M49N1FMXE ","M49N1FMYE ", & + "M49N1FMZE ","M49N1MKXE ","M49N1MKYE ","M49N1MKZE ","M49N1MMXE ","M49N1MMYE ","M49N1MMZE ", & + "M49N1RAXE ","M49N1RAYE ","M49N1RAZE ","M49N1RDXE ","M49N1RDYE ","M49N1RDZE ","M49N1TAXE ", & + "M49N1TAYE ","M49N1TAZE ","M49N1TDXSS","M49N1TDYSS","M49N1TDZSS","M49N2FKXE ","M49N2FKYE ", & + "M49N2FKZE ","M49N2FMXE ","M49N2FMYE ","M49N2FMZE ","M49N2MKXE ","M49N2MKYE ","M49N2MKZE ", & + "M49N2MMXE ","M49N2MMYE ","M49N2MMZE ","M49N2RAXE ","M49N2RAYE ","M49N2RAZE ","M49N2RDXE ", & + "M49N2RDYE ","M49N2RDZE ","M49N2TAXE ","M49N2TAYE ","M49N2TAZE ","M49N2TDXSS","M49N2TDYSS", & + "M49N2TDZSS","M49N3FKXE ","M49N3FKYE ","M49N3FKZE ","M49N3FMXE ","M49N3FMYE ","M49N3FMZE ", & + "M49N3MKXE ","M49N3MKYE ","M49N3MKZE ","M49N3MMXE ","M49N3MMYE ","M49N3MMZE ","M49N3RAXE ", & + "M49N3RAYE ","M49N3RAZE ","M49N3RDXE ","M49N3RDYE ","M49N3RDZE ","M49N3TAXE ","M49N3TAYE ", & + "M49N3TAZE ","M49N3TDXSS","M49N3TDYSS","M49N3TDZSS","M49N4FKXE ","M49N4FKYE ","M49N4FKZE ", & + "M49N4FMXE ","M49N4FMYE ","M49N4FMZE ","M49N4MKXE ","M49N4MKYE ","M49N4MKZE ","M49N4MMXE ", & + "M49N4MMYE ","M49N4MMZE ","M49N4RAXE ","M49N4RAYE ","M49N4RAZE ","M49N4RDXE ","M49N4RDYE ", & + "M49N4RDZE ","M49N4TAXE ","M49N4TAYE ","M49N4TAZE ","M49N4TDXSS","M49N4TDYSS","M49N4TDZSS", & + "M49N5FKXE ","M49N5FKYE ","M49N5FKZE ","M49N5FMXE ","M49N5FMYE ","M49N5FMZE ","M49N5MKXE ", & + "M49N5MKYE ","M49N5MKZE ","M49N5MMXE ","M49N5MMYE ","M49N5MMZE ","M49N5RAXE ","M49N5RAYE ", & + "M49N5RAZE ","M49N5RDXE ","M49N5RDYE ","M49N5RDZE ","M49N5TAXE ","M49N5TAYE ","M49N5TAZE ", & + "M49N5TDXSS","M49N5TDYSS","M49N5TDZSS","M49N6FKXE ","M49N6FKYE ","M49N6FKZE ","M49N6FMXE ", & + "M49N6FMYE ","M49N6FMZE ","M49N6MKXE ","M49N6MKYE ","M49N6MKZE ","M49N6MMXE ","M49N6MMYE ", & + "M49N6MMZE ","M49N6RAXE ","M49N6RAYE ","M49N6RAZE ","M49N6RDXE ","M49N6RDYE ","M49N6RDZE ", & + "M49N6TAXE ","M49N6TAYE ","M49N6TAZE ","M49N6TDXSS","M49N6TDYSS","M49N6TDZSS","M49N7FKXE ", & + "M49N7FKYE ","M49N7FKZE ","M49N7FMXE ","M49N7FMYE ","M49N7FMZE ","M49N7MKXE ","M49N7MKYE ", & + "M49N7MKZE ","M49N7MMXE ","M49N7MMYE ","M49N7MMZE ","M49N7RAXE ","M49N7RAYE ","M49N7RAZE ", & + "M49N7RDXE ","M49N7RDYE ","M49N7RDZE ","M49N7TAXE ","M49N7TAYE ","M49N7TAZE ","M49N7TDXSS", & + "M49N7TDYSS","M49N7TDZSS","M49N8FKXE ","M49N8FKYE ","M49N8FKZE ","M49N8FMXE ","M49N8FMYE ", & + "M49N8FMZE ","M49N8MKXE ","M49N8MKYE ","M49N8MKZE ","M49N8MMXE ","M49N8MMYE ","M49N8MMZE ", & + "M49N8RAXE ","M49N8RAYE ","M49N8RAZE ","M49N8RDXE ","M49N8RDYE ","M49N8RDZE ","M49N8TAXE ", & + "M49N8TAYE ","M49N8TAZE ","M49N8TDXSS","M49N8TDYSS","M49N8TDZSS","M49N9FKXE ","M49N9FKYE ", & + "M49N9FKZE ","M49N9FMXE ","M49N9FMYE ","M49N9FMZE ","M49N9MKXE ","M49N9MKYE ","M49N9MKZE ", & + "M49N9MMXE ","M49N9MMYE ","M49N9MMZE ","M49N9RAXE ","M49N9RAYE ","M49N9RAZE ","M49N9RDXE ", & + "M49N9RDYE ","M49N9RDZE ","M49N9TAXE ","M49N9TAYE ","M49N9TAZE ","M49N9TDXSS","M49N9TDYSS", & + "M49N9TDZSS","M50N1FKXE ","M50N1FKYE ","M50N1FKZE ","M50N1FMXE ","M50N1FMYE ","M50N1FMZE ", & + "M50N1MKXE ","M50N1MKYE ","M50N1MKZE ","M50N1MMXE ","M50N1MMYE ","M50N1MMZE ","M50N1RAXE ", & + "M50N1RAYE ","M50N1RAZE ","M50N1RDXE ","M50N1RDYE ","M50N1RDZE ","M50N1TAXE ","M50N1TAYE ", & + "M50N1TAZE ","M50N1TDXSS","M50N1TDYSS","M50N1TDZSS","M50N2FKXE ","M50N2FKYE ","M50N2FKZE ", & + "M50N2FMXE ","M50N2FMYE ","M50N2FMZE ","M50N2MKXE ","M50N2MKYE ","M50N2MKZE ","M50N2MMXE ", & + "M50N2MMYE ","M50N2MMZE ","M50N2RAXE ","M50N2RAYE ","M50N2RAZE ","M50N2RDXE ","M50N2RDYE ", & + "M50N2RDZE ","M50N2TAXE ","M50N2TAYE ","M50N2TAZE ","M50N2TDXSS","M50N2TDYSS","M50N2TDZSS", & + "M50N3FKXE ","M50N3FKYE ","M50N3FKZE ","M50N3FMXE ","M50N3FMYE ","M50N3FMZE ","M50N3MKXE ", & + "M50N3MKYE ","M50N3MKZE ","M50N3MMXE ","M50N3MMYE ","M50N3MMZE ","M50N3RAXE ","M50N3RAYE ", & + "M50N3RAZE ","M50N3RDXE ","M50N3RDYE ","M50N3RDZE ","M50N3TAXE ","M50N3TAYE ","M50N3TAZE ", & + "M50N3TDXSS","M50N3TDYSS","M50N3TDZSS","M50N4FKXE ","M50N4FKYE ","M50N4FKZE ","M50N4FMXE ", & + "M50N4FMYE ","M50N4FMZE ","M50N4MKXE ","M50N4MKYE ","M50N4MKZE ","M50N4MMXE ","M50N4MMYE ", & + "M50N4MMZE ","M50N4RAXE ","M50N4RAYE ","M50N4RAZE ","M50N4RDXE ","M50N4RDYE ","M50N4RDZE ", & + "M50N4TAXE ","M50N4TAYE ","M50N4TAZE ","M50N4TDXSS","M50N4TDYSS","M50N4TDZSS","M50N5FKXE ", & + "M50N5FKYE ","M50N5FKZE ","M50N5FMXE ","M50N5FMYE ","M50N5FMZE ","M50N5MKXE ","M50N5MKYE ", & + "M50N5MKZE ","M50N5MMXE ","M50N5MMYE ","M50N5MMZE ","M50N5RAXE ","M50N5RAYE ","M50N5RAZE ", & + "M50N5RDXE ","M50N5RDYE ","M50N5RDZE ","M50N5TAXE ","M50N5TAYE ","M50N5TAZE ","M50N5TDXSS", & + "M50N5TDYSS","M50N5TDZSS","M50N6FKXE ","M50N6FKYE ","M50N6FKZE ","M50N6FMXE ","M50N6FMYE ", & + "M50N6FMZE ","M50N6MKXE ","M50N6MKYE ","M50N6MKZE ","M50N6MMXE ","M50N6MMYE ","M50N6MMZE ", & + "M50N6RAXE ","M50N6RAYE ","M50N6RAZE ","M50N6RDXE ","M50N6RDYE ","M50N6RDZE ","M50N6TAXE ", & + "M50N6TAYE ","M50N6TAZE ","M50N6TDXSS","M50N6TDYSS","M50N6TDZSS","M50N7FKXE ","M50N7FKYE ", & + "M50N7FKZE ","M50N7FMXE ","M50N7FMYE ","M50N7FMZE ","M50N7MKXE ","M50N7MKYE ","M50N7MKZE ", & + "M50N7MMXE ","M50N7MMYE ","M50N7MMZE ","M50N7RAXE ","M50N7RAYE ","M50N7RAZE ","M50N7RDXE ", & + "M50N7RDYE ","M50N7RDZE ","M50N7TAXE ","M50N7TAYE ","M50N7TAZE ","M50N7TDXSS","M50N7TDYSS", & + "M50N7TDZSS","M50N8FKXE ","M50N8FKYE ","M50N8FKZE ","M50N8FMXE ","M50N8FMYE ","M50N8FMZE ", & + "M50N8MKXE ","M50N8MKYE ","M50N8MKZE ","M50N8MMXE ","M50N8MMYE ","M50N8MMZE ","M50N8RAXE ", & + "M50N8RAYE ","M50N8RAZE ","M50N8RDXE ","M50N8RDYE ","M50N8RDZE ","M50N8TAXE ","M50N8TAYE ", & + "M50N8TAZE ","M50N8TDXSS","M50N8TDYSS","M50N8TDZSS","M50N9FKXE ","M50N9FKYE ","M50N9FKZE ", & + "M50N9FMXE ","M50N9FMYE ","M50N9FMZE ","M50N9MKXE ","M50N9MKYE ","M50N9MKZE ","M50N9MMXE ", & + "M50N9MMYE ","M50N9MMZE ","M50N9RAXE ","M50N9RAYE ","M50N9RAZE ","M50N9RDXE ","M50N9RDYE ", & + "M50N9RDZE ","M50N9TAXE ","M50N9TAYE ","M50N9TAZE ","M50N9TDXSS","M50N9TDYSS","M50N9TDZSS", & + "M51N1FKXE ","M51N1FKYE ","M51N1FKZE ","M51N1FMXE ","M51N1FMYE ","M51N1FMZE ","M51N1MKXE ", & + "M51N1MKYE ","M51N1MKZE ","M51N1MMXE ","M51N1MMYE ","M51N1MMZE ","M51N1RAXE ","M51N1RAYE ", & + "M51N1RAZE ","M51N1RDXE ","M51N1RDYE ","M51N1RDZE ","M51N1TAXE ","M51N1TAYE ","M51N1TAZE ", & + "M51N1TDXSS","M51N1TDYSS","M51N1TDZSS","M51N2FKXE ","M51N2FKYE ","M51N2FKZE ","M51N2FMXE ", & + "M51N2FMYE ","M51N2FMZE ","M51N2MKXE ","M51N2MKYE ","M51N2MKZE ","M51N2MMXE ","M51N2MMYE ", & + "M51N2MMZE ","M51N2RAXE ","M51N2RAYE ","M51N2RAZE ","M51N2RDXE ","M51N2RDYE ","M51N2RDZE ", & + "M51N2TAXE ","M51N2TAYE ","M51N2TAZE ","M51N2TDXSS","M51N2TDYSS","M51N2TDZSS","M51N3FKXE ", & + "M51N3FKYE ","M51N3FKZE ","M51N3FMXE ","M51N3FMYE ","M51N3FMZE ","M51N3MKXE ","M51N3MKYE ", & + "M51N3MKZE ","M51N3MMXE ","M51N3MMYE ","M51N3MMZE ","M51N3RAXE ","M51N3RAYE ","M51N3RAZE ", & + "M51N3RDXE ","M51N3RDYE ","M51N3RDZE ","M51N3TAXE ","M51N3TAYE ","M51N3TAZE ","M51N3TDXSS", & + "M51N3TDYSS","M51N3TDZSS","M51N4FKXE ","M51N4FKYE ","M51N4FKZE ","M51N4FMXE ","M51N4FMYE ", & + "M51N4FMZE ","M51N4MKXE ","M51N4MKYE ","M51N4MKZE ","M51N4MMXE ","M51N4MMYE ","M51N4MMZE ", & + "M51N4RAXE ","M51N4RAYE ","M51N4RAZE ","M51N4RDXE ","M51N4RDYE ","M51N4RDZE ","M51N4TAXE ", & + "M51N4TAYE ","M51N4TAZE ","M51N4TDXSS","M51N4TDYSS","M51N4TDZSS","M51N5FKXE ","M51N5FKYE ", & + "M51N5FKZE ","M51N5FMXE ","M51N5FMYE ","M51N5FMZE ","M51N5MKXE ","M51N5MKYE ","M51N5MKZE ", & + "M51N5MMXE ","M51N5MMYE ","M51N5MMZE ","M51N5RAXE ","M51N5RAYE ","M51N5RAZE ","M51N5RDXE ", & + "M51N5RDYE ","M51N5RDZE ","M51N5TAXE ","M51N5TAYE ","M51N5TAZE ","M51N5TDXSS","M51N5TDYSS", & + "M51N5TDZSS","M51N6FKXE ","M51N6FKYE ","M51N6FKZE ","M51N6FMXE ","M51N6FMYE ","M51N6FMZE ", & + "M51N6MKXE ","M51N6MKYE ","M51N6MKZE ","M51N6MMXE ","M51N6MMYE ","M51N6MMZE ","M51N6RAXE ", & + "M51N6RAYE ","M51N6RAZE ","M51N6RDXE ","M51N6RDYE ","M51N6RDZE ","M51N6TAXE ","M51N6TAYE ", & + "M51N6TAZE ","M51N6TDXSS","M51N6TDYSS","M51N6TDZSS","M51N7FKXE ","M51N7FKYE ","M51N7FKZE ", & + "M51N7FMXE ","M51N7FMYE ","M51N7FMZE ","M51N7MKXE ","M51N7MKYE ","M51N7MKZE ","M51N7MMXE ", & + "M51N7MMYE ","M51N7MMZE ","M51N7RAXE ","M51N7RAYE ","M51N7RAZE ","M51N7RDXE ","M51N7RDYE ", & + "M51N7RDZE ","M51N7TAXE ","M51N7TAYE ","M51N7TAZE ","M51N7TDXSS","M51N7TDYSS","M51N7TDZSS", & + "M51N8FKXE ","M51N8FKYE ","M51N8FKZE ","M51N8FMXE ","M51N8FMYE ","M51N8FMZE ","M51N8MKXE ", & + "M51N8MKYE ","M51N8MKZE ","M51N8MMXE ","M51N8MMYE ","M51N8MMZE ","M51N8RAXE ","M51N8RAYE ", & + "M51N8RAZE ","M51N8RDXE ","M51N8RDYE ","M51N8RDZE ","M51N8TAXE ","M51N8TAYE ","M51N8TAZE ", & + "M51N8TDXSS","M51N8TDYSS","M51N8TDZSS","M51N9FKXE ","M51N9FKYE ","M51N9FKZE ","M51N9FMXE ", & + "M51N9FMYE ","M51N9FMZE ","M51N9MKXE ","M51N9MKYE ","M51N9MKZE ","M51N9MMXE ","M51N9MMYE ", & + "M51N9MMZE ","M51N9RAXE ","M51N9RAYE ","M51N9RAZE ","M51N9RDXE ","M51N9RDYE ","M51N9RDZE ", & + "M51N9TAXE ","M51N9TAYE ","M51N9TAZE ","M51N9TDXSS","M51N9TDYSS","M51N9TDZSS","M52N1FKXE ", & + "M52N1FKYE ","M52N1FKZE ","M52N1FMXE ","M52N1FMYE ","M52N1FMZE ","M52N1MKXE ","M52N1MKYE ", & + "M52N1MKZE ","M52N1MMXE ","M52N1MMYE ","M52N1MMZE ","M52N1RAXE ","M52N1RAYE ","M52N1RAZE ", & + "M52N1RDXE ","M52N1RDYE ","M52N1RDZE ","M52N1TAXE ","M52N1TAYE ","M52N1TAZE ","M52N1TDXSS", & + "M52N1TDYSS","M52N1TDZSS","M52N2FKXE ","M52N2FKYE ","M52N2FKZE ","M52N2FMXE ","M52N2FMYE ", & + "M52N2FMZE ","M52N2MKXE ","M52N2MKYE ","M52N2MKZE ","M52N2MMXE ","M52N2MMYE ","M52N2MMZE ", & + "M52N2RAXE ","M52N2RAYE ","M52N2RAZE ","M52N2RDXE ","M52N2RDYE ","M52N2RDZE ","M52N2TAXE ", & + "M52N2TAYE ","M52N2TAZE ","M52N2TDXSS","M52N2TDYSS","M52N2TDZSS","M52N3FKXE ","M52N3FKYE ", & + "M52N3FKZE ","M52N3FMXE ","M52N3FMYE ","M52N3FMZE ","M52N3MKXE ","M52N3MKYE ","M52N3MKZE ", & + "M52N3MMXE ","M52N3MMYE ","M52N3MMZE ","M52N3RAXE ","M52N3RAYE ","M52N3RAZE ","M52N3RDXE ", & + "M52N3RDYE ","M52N3RDZE ","M52N3TAXE ","M52N3TAYE ","M52N3TAZE ","M52N3TDXSS","M52N3TDYSS", & + "M52N3TDZSS","M52N4FKXE ","M52N4FKYE ","M52N4FKZE ","M52N4FMXE ","M52N4FMYE ","M52N4FMZE ", & + "M52N4MKXE ","M52N4MKYE ","M52N4MKZE ","M52N4MMXE ","M52N4MMYE ","M52N4MMZE ","M52N4RAXE ", & + "M52N4RAYE ","M52N4RAZE ","M52N4RDXE ","M52N4RDYE ","M52N4RDZE ","M52N4TAXE ","M52N4TAYE ", & + "M52N4TAZE ","M52N4TDXSS","M52N4TDYSS","M52N4TDZSS","M52N5FKXE ","M52N5FKYE ","M52N5FKZE ", & + "M52N5FMXE ","M52N5FMYE ","M52N5FMZE ","M52N5MKXE ","M52N5MKYE ","M52N5MKZE ","M52N5MMXE ", & + "M52N5MMYE ","M52N5MMZE ","M52N5RAXE ","M52N5RAYE ","M52N5RAZE ","M52N5RDXE ","M52N5RDYE ", & + "M52N5RDZE ","M52N5TAXE ","M52N5TAYE ","M52N5TAZE ","M52N5TDXSS","M52N5TDYSS","M52N5TDZSS", & + "M52N6FKXE ","M52N6FKYE ","M52N6FKZE ","M52N6FMXE ","M52N6FMYE ","M52N6FMZE ","M52N6MKXE ", & + "M52N6MKYE ","M52N6MKZE ","M52N6MMXE ","M52N6MMYE ","M52N6MMZE ","M52N6RAXE ","M52N6RAYE ", & + "M52N6RAZE ","M52N6RDXE ","M52N6RDYE ","M52N6RDZE ","M52N6TAXE ","M52N6TAYE ","M52N6TAZE ", & + "M52N6TDXSS","M52N6TDYSS","M52N6TDZSS","M52N7FKXE ","M52N7FKYE ","M52N7FKZE ","M52N7FMXE ", & + "M52N7FMYE ","M52N7FMZE ","M52N7MKXE ","M52N7MKYE ","M52N7MKZE ","M52N7MMXE ","M52N7MMYE ", & + "M52N7MMZE ","M52N7RAXE ","M52N7RAYE ","M52N7RAZE ","M52N7RDXE ","M52N7RDYE ","M52N7RDZE ", & + "M52N7TAXE ","M52N7TAYE ","M52N7TAZE ","M52N7TDXSS","M52N7TDYSS","M52N7TDZSS","M52N8FKXE ", & + "M52N8FKYE ","M52N8FKZE ","M52N8FMXE ","M52N8FMYE ","M52N8FMZE ","M52N8MKXE ","M52N8MKYE ", & + "M52N8MKZE ","M52N8MMXE ","M52N8MMYE ","M52N8MMZE ","M52N8RAXE ","M52N8RAYE ","M52N8RAZE ", & + "M52N8RDXE ","M52N8RDYE ","M52N8RDZE ","M52N8TAXE ","M52N8TAYE ","M52N8TAZE ","M52N8TDXSS", & + "M52N8TDYSS","M52N8TDZSS","M52N9FKXE ","M52N9FKYE ","M52N9FKZE ","M52N9FMXE ","M52N9FMYE ", & + "M52N9FMZE ","M52N9MKXE ","M52N9MKYE ","M52N9MKZE ","M52N9MMXE ","M52N9MMYE ","M52N9MMZE ", & + "M52N9RAXE ","M52N9RAYE ","M52N9RAZE ","M52N9RDXE ","M52N9RDYE ","M52N9RDZE ","M52N9TAXE ", & + "M52N9TAYE ","M52N9TAZE ","M52N9TDXSS","M52N9TDYSS","M52N9TDZSS","M53N1FKXE ","M53N1FKYE ", & + "M53N1FKZE ","M53N1FMXE ","M53N1FMYE ","M53N1FMZE ","M53N1MKXE ","M53N1MKYE ","M53N1MKZE ", & + "M53N1MMXE ","M53N1MMYE ","M53N1MMZE ","M53N1RAXE ","M53N1RAYE ","M53N1RAZE ","M53N1RDXE ", & + "M53N1RDYE ","M53N1RDZE ","M53N1TAXE ","M53N1TAYE ","M53N1TAZE ","M53N1TDXSS","M53N1TDYSS", & + "M53N1TDZSS","M53N2FKXE ","M53N2FKYE ","M53N2FKZE ","M53N2FMXE ","M53N2FMYE ","M53N2FMZE ", & + "M53N2MKXE ","M53N2MKYE ","M53N2MKZE ","M53N2MMXE ","M53N2MMYE ","M53N2MMZE ","M53N2RAXE ", & + "M53N2RAYE ","M53N2RAZE ","M53N2RDXE ","M53N2RDYE ","M53N2RDZE ","M53N2TAXE ","M53N2TAYE ", & + "M53N2TAZE ","M53N2TDXSS","M53N2TDYSS","M53N2TDZSS","M53N3FKXE ","M53N3FKYE ","M53N3FKZE ", & + "M53N3FMXE ","M53N3FMYE ","M53N3FMZE ","M53N3MKXE ","M53N3MKYE ","M53N3MKZE ","M53N3MMXE ", & + "M53N3MMYE ","M53N3MMZE ","M53N3RAXE ","M53N3RAYE ","M53N3RAZE ","M53N3RDXE ","M53N3RDYE ", & + "M53N3RDZE ","M53N3TAXE ","M53N3TAYE ","M53N3TAZE ","M53N3TDXSS","M53N3TDYSS","M53N3TDZSS", & + "M53N4FKXE ","M53N4FKYE ","M53N4FKZE ","M53N4FMXE ","M53N4FMYE ","M53N4FMZE ","M53N4MKXE ", & + "M53N4MKYE ","M53N4MKZE ","M53N4MMXE ","M53N4MMYE ","M53N4MMZE ","M53N4RAXE ","M53N4RAYE ", & + "M53N4RAZE ","M53N4RDXE ","M53N4RDYE ","M53N4RDZE ","M53N4TAXE ","M53N4TAYE ","M53N4TAZE ", & + "M53N4TDXSS","M53N4TDYSS","M53N4TDZSS","M53N5FKXE ","M53N5FKYE ","M53N5FKZE ","M53N5FMXE ", & + "M53N5FMYE ","M53N5FMZE ","M53N5MKXE ","M53N5MKYE ","M53N5MKZE ","M53N5MMXE ","M53N5MMYE ", & + "M53N5MMZE ","M53N5RAXE ","M53N5RAYE ","M53N5RAZE ","M53N5RDXE ","M53N5RDYE ","M53N5RDZE ", & + "M53N5TAXE ","M53N5TAYE ","M53N5TAZE ","M53N5TDXSS","M53N5TDYSS","M53N5TDZSS","M53N6FKXE ", & + "M53N6FKYE ","M53N6FKZE ","M53N6FMXE ","M53N6FMYE ","M53N6FMZE ","M53N6MKXE ","M53N6MKYE ", & + "M53N6MKZE ","M53N6MMXE ","M53N6MMYE ","M53N6MMZE ","M53N6RAXE ","M53N6RAYE ","M53N6RAZE ", & + "M53N6RDXE ","M53N6RDYE ","M53N6RDZE ","M53N6TAXE ","M53N6TAYE ","M53N6TAZE ","M53N6TDXSS", & + "M53N6TDYSS","M53N6TDZSS","M53N7FKXE ","M53N7FKYE ","M53N7FKZE ","M53N7FMXE ","M53N7FMYE ", & + "M53N7FMZE ","M53N7MKXE ","M53N7MKYE ","M53N7MKZE ","M53N7MMXE ","M53N7MMYE ","M53N7MMZE ", & + "M53N7RAXE ","M53N7RAYE ","M53N7RAZE ","M53N7RDXE ","M53N7RDYE ","M53N7RDZE ","M53N7TAXE ", & + "M53N7TAYE ","M53N7TAZE ","M53N7TDXSS","M53N7TDYSS","M53N7TDZSS","M53N8FKXE ","M53N8FKYE ", & + "M53N8FKZE ","M53N8FMXE ","M53N8FMYE ","M53N8FMZE ","M53N8MKXE ","M53N8MKYE ","M53N8MKZE ", & + "M53N8MMXE ","M53N8MMYE ","M53N8MMZE ","M53N8RAXE ","M53N8RAYE ","M53N8RAZE ","M53N8RDXE ", & + "M53N8RDYE ","M53N8RDZE ","M53N8TAXE ","M53N8TAYE ","M53N8TAZE ","M53N8TDXSS","M53N8TDYSS", & + "M53N8TDZSS","M53N9FKXE ","M53N9FKYE ","M53N9FKZE ","M53N9FMXE ","M53N9FMYE ","M53N9FMZE ", & + "M53N9MKXE ","M53N9MKYE ","M53N9MKZE ","M53N9MMXE ","M53N9MMYE ","M53N9MMZE ","M53N9RAXE ", & + "M53N9RAYE ","M53N9RAZE ","M53N9RDXE ","M53N9RDYE ","M53N9RDZE ","M53N9TAXE ","M53N9TAYE ", & + "M53N9TAZE ","M53N9TDXSS","M53N9TDYSS","M53N9TDZSS","M54N1FKXE ","M54N1FKYE ","M54N1FKZE ", & + "M54N1FMXE ","M54N1FMYE ","M54N1FMZE ","M54N1MKXE ","M54N1MKYE ","M54N1MKZE ","M54N1MMXE ", & + "M54N1MMYE ","M54N1MMZE ","M54N1RAXE ","M54N1RAYE ","M54N1RAZE ","M54N1RDXE ","M54N1RDYE ", & + "M54N1RDZE ","M54N1TAXE ","M54N1TAYE ","M54N1TAZE ","M54N1TDXSS","M54N1TDYSS","M54N1TDZSS", & + "M54N2FKXE ","M54N2FKYE ","M54N2FKZE ","M54N2FMXE ","M54N2FMYE ","M54N2FMZE ","M54N2MKXE ", & + "M54N2MKYE ","M54N2MKZE ","M54N2MMXE ","M54N2MMYE ","M54N2MMZE ","M54N2RAXE ","M54N2RAYE ", & + "M54N2RAZE ","M54N2RDXE ","M54N2RDYE ","M54N2RDZE ","M54N2TAXE ","M54N2TAYE ","M54N2TAZE ", & + "M54N2TDXSS","M54N2TDYSS","M54N2TDZSS","M54N3FKXE ","M54N3FKYE ","M54N3FKZE ","M54N3FMXE ", & + "M54N3FMYE ","M54N3FMZE ","M54N3MKXE ","M54N3MKYE ","M54N3MKZE ","M54N3MMXE ","M54N3MMYE ", & + "M54N3MMZE ","M54N3RAXE ","M54N3RAYE ","M54N3RAZE ","M54N3RDXE ","M54N3RDYE ","M54N3RDZE ", & + "M54N3TAXE ","M54N3TAYE ","M54N3TAZE ","M54N3TDXSS","M54N3TDYSS","M54N3TDZSS","M54N4FKXE ", & + "M54N4FKYE ","M54N4FKZE ","M54N4FMXE ","M54N4FMYE ","M54N4FMZE ","M54N4MKXE ","M54N4MKYE ", & + "M54N4MKZE ","M54N4MMXE ","M54N4MMYE ","M54N4MMZE ","M54N4RAXE ","M54N4RAYE ","M54N4RAZE ", & + "M54N4RDXE ","M54N4RDYE ","M54N4RDZE ","M54N4TAXE ","M54N4TAYE ","M54N4TAZE ","M54N4TDXSS", & + "M54N4TDYSS","M54N4TDZSS","M54N5FKXE ","M54N5FKYE ","M54N5FKZE ","M54N5FMXE ","M54N5FMYE ", & + "M54N5FMZE ","M54N5MKXE ","M54N5MKYE ","M54N5MKZE ","M54N5MMXE ","M54N5MMYE ","M54N5MMZE ", & + "M54N5RAXE ","M54N5RAYE ","M54N5RAZE ","M54N5RDXE ","M54N5RDYE ","M54N5RDZE ","M54N5TAXE ", & + "M54N5TAYE ","M54N5TAZE ","M54N5TDXSS","M54N5TDYSS","M54N5TDZSS","M54N6FKXE ","M54N6FKYE ", & + "M54N6FKZE ","M54N6FMXE ","M54N6FMYE ","M54N6FMZE ","M54N6MKXE ","M54N6MKYE ","M54N6MKZE ", & + "M54N6MMXE ","M54N6MMYE ","M54N6MMZE ","M54N6RAXE ","M54N6RAYE ","M54N6RAZE ","M54N6RDXE ", & + "M54N6RDYE ","M54N6RDZE ","M54N6TAXE ","M54N6TAYE ","M54N6TAZE ","M54N6TDXSS","M54N6TDYSS", & + "M54N6TDZSS","M54N7FKXE ","M54N7FKYE ","M54N7FKZE ","M54N7FMXE ","M54N7FMYE ","M54N7FMZE ", & + "M54N7MKXE ","M54N7MKYE ","M54N7MKZE ","M54N7MMXE ","M54N7MMYE ","M54N7MMZE ","M54N7RAXE ", & + "M54N7RAYE ","M54N7RAZE ","M54N7RDXE ","M54N7RDYE ","M54N7RDZE ","M54N7TAXE ","M54N7TAYE ", & + "M54N7TAZE ","M54N7TDXSS","M54N7TDYSS","M54N7TDZSS","M54N8FKXE ","M54N8FKYE ","M54N8FKZE ", & + "M54N8FMXE ","M54N8FMYE ","M54N8FMZE ","M54N8MKXE ","M54N8MKYE ","M54N8MKZE ","M54N8MMXE ", & + "M54N8MMYE ","M54N8MMZE ","M54N8RAXE ","M54N8RAYE ","M54N8RAZE ","M54N8RDXE ","M54N8RDYE ", & + "M54N8RDZE ","M54N8TAXE ","M54N8TAYE ","M54N8TAZE ","M54N8TDXSS","M54N8TDYSS","M54N8TDZSS", & + "M54N9FKXE ","M54N9FKYE ","M54N9FKZE ","M54N9FMXE ","M54N9FMYE ","M54N9FMZE ","M54N9MKXE ", & + "M54N9MKYE ","M54N9MKZE ","M54N9MMXE ","M54N9MMYE ","M54N9MMZE ","M54N9RAXE ","M54N9RAYE ", & + "M54N9RAZE ","M54N9RDXE ","M54N9RDYE ","M54N9RDZE ","M54N9TAXE ","M54N9TAYE ","M54N9TAZE ", & + "M54N9TDXSS","M54N9TDYSS","M54N9TDZSS","M55N1FKXE ","M55N1FKYE ","M55N1FKZE ","M55N1FMXE ", & + "M55N1FMYE ","M55N1FMZE ","M55N1MKXE ","M55N1MKYE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry8(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M55N1MKZE ","M55N1MMXE ","M55N1MMYE ","M55N1MMZE ","M55N1RAXE ","M55N1RAYE ","M55N1RAZE ", & + "M55N1RDXE ","M55N1RDYE ","M55N1RDZE ","M55N1TAXE ","M55N1TAYE ","M55N1TAZE ","M55N1TDXSS", & + "M55N1TDYSS","M55N1TDZSS","M55N2FKXE ","M55N2FKYE ","M55N2FKZE ","M55N2FMXE ","M55N2FMYE ", & + "M55N2FMZE ","M55N2MKXE ","M55N2MKYE ","M55N2MKZE ","M55N2MMXE ","M55N2MMYE ","M55N2MMZE ", & + "M55N2RAXE ","M55N2RAYE ","M55N2RAZE ","M55N2RDXE ","M55N2RDYE ","M55N2RDZE ","M55N2TAXE ", & + "M55N2TAYE ","M55N2TAZE ","M55N2TDXSS","M55N2TDYSS","M55N2TDZSS","M55N3FKXE ","M55N3FKYE ", & + "M55N3FKZE ","M55N3FMXE ","M55N3FMYE ","M55N3FMZE ","M55N3MKXE ","M55N3MKYE ","M55N3MKZE ", & + "M55N3MMXE ","M55N3MMYE ","M55N3MMZE ","M55N3RAXE ","M55N3RAYE ","M55N3RAZE ","M55N3RDXE ", & + "M55N3RDYE ","M55N3RDZE ","M55N3TAXE ","M55N3TAYE ","M55N3TAZE ","M55N3TDXSS","M55N3TDYSS", & + "M55N3TDZSS","M55N4FKXE ","M55N4FKYE ","M55N4FKZE ","M55N4FMXE ","M55N4FMYE ","M55N4FMZE ", & + "M55N4MKXE ","M55N4MKYE ","M55N4MKZE ","M55N4MMXE ","M55N4MMYE ","M55N4MMZE ","M55N4RAXE ", & + "M55N4RAYE ","M55N4RAZE ","M55N4RDXE ","M55N4RDYE ","M55N4RDZE ","M55N4TAXE ","M55N4TAYE ", & + "M55N4TAZE ","M55N4TDXSS","M55N4TDYSS","M55N4TDZSS","M55N5FKXE ","M55N5FKYE ","M55N5FKZE ", & + "M55N5FMXE ","M55N5FMYE ","M55N5FMZE ","M55N5MKXE ","M55N5MKYE ","M55N5MKZE ","M55N5MMXE ", & + "M55N5MMYE ","M55N5MMZE ","M55N5RAXE ","M55N5RAYE ","M55N5RAZE ","M55N5RDXE ","M55N5RDYE ", & + "M55N5RDZE ","M55N5TAXE ","M55N5TAYE ","M55N5TAZE ","M55N5TDXSS","M55N5TDYSS","M55N5TDZSS", & + "M55N6FKXE ","M55N6FKYE ","M55N6FKZE ","M55N6FMXE ","M55N6FMYE ","M55N6FMZE ","M55N6MKXE ", & + "M55N6MKYE ","M55N6MKZE ","M55N6MMXE ","M55N6MMYE ","M55N6MMZE ","M55N6RAXE ","M55N6RAYE ", & + "M55N6RAZE ","M55N6RDXE ","M55N6RDYE ","M55N6RDZE ","M55N6TAXE ","M55N6TAYE ","M55N6TAZE ", & + "M55N6TDXSS","M55N6TDYSS","M55N6TDZSS","M55N7FKXE ","M55N7FKYE ","M55N7FKZE ","M55N7FMXE ", & + "M55N7FMYE ","M55N7FMZE ","M55N7MKXE ","M55N7MKYE ","M55N7MKZE ","M55N7MMXE ","M55N7MMYE ", & + "M55N7MMZE ","M55N7RAXE ","M55N7RAYE ","M55N7RAZE ","M55N7RDXE ","M55N7RDYE ","M55N7RDZE ", & + "M55N7TAXE ","M55N7TAYE ","M55N7TAZE ","M55N7TDXSS","M55N7TDYSS","M55N7TDZSS","M55N8FKXE ", & + "M55N8FKYE ","M55N8FKZE ","M55N8FMXE ","M55N8FMYE ","M55N8FMZE ","M55N8MKXE ","M55N8MKYE ", & + "M55N8MKZE ","M55N8MMXE ","M55N8MMYE ","M55N8MMZE ","M55N8RAXE ","M55N8RAYE ","M55N8RAZE ", & + "M55N8RDXE ","M55N8RDYE ","M55N8RDZE ","M55N8TAXE ","M55N8TAYE ","M55N8TAZE ","M55N8TDXSS", & + "M55N8TDYSS","M55N8TDZSS","M55N9FKXE ","M55N9FKYE ","M55N9FKZE ","M55N9FMXE ","M55N9FMYE ", & + "M55N9FMZE ","M55N9MKXE ","M55N9MKYE ","M55N9MKZE ","M55N9MMXE ","M55N9MMYE ","M55N9MMZE ", & + "M55N9RAXE ","M55N9RAYE ","M55N9RAZE ","M55N9RDXE ","M55N9RDYE ","M55N9RDZE ","M55N9TAXE ", & + "M55N9TAYE ","M55N9TAZE ","M55N9TDXSS","M55N9TDYSS","M55N9TDZSS","M56N1FKXE ","M56N1FKYE ", & + "M56N1FKZE ","M56N1FMXE ","M56N1FMYE ","M56N1FMZE ","M56N1MKXE ","M56N1MKYE ","M56N1MKZE ", & + "M56N1MMXE ","M56N1MMYE ","M56N1MMZE ","M56N1RAXE ","M56N1RAYE ","M56N1RAZE ","M56N1RDXE ", & + "M56N1RDYE ","M56N1RDZE ","M56N1TAXE ","M56N1TAYE ","M56N1TAZE ","M56N1TDXSS","M56N1TDYSS", & + "M56N1TDZSS","M56N2FKXE ","M56N2FKYE ","M56N2FKZE ","M56N2FMXE ","M56N2FMYE ","M56N2FMZE ", & + "M56N2MKXE ","M56N2MKYE ","M56N2MKZE ","M56N2MMXE ","M56N2MMYE ","M56N2MMZE ","M56N2RAXE ", & + "M56N2RAYE ","M56N2RAZE ","M56N2RDXE ","M56N2RDYE ","M56N2RDZE ","M56N2TAXE ","M56N2TAYE ", & + "M56N2TAZE ","M56N2TDXSS","M56N2TDYSS","M56N2TDZSS","M56N3FKXE ","M56N3FKYE ","M56N3FKZE ", & + "M56N3FMXE ","M56N3FMYE ","M56N3FMZE ","M56N3MKXE ","M56N3MKYE ","M56N3MKZE ","M56N3MMXE ", & + "M56N3MMYE ","M56N3MMZE ","M56N3RAXE ","M56N3RAYE ","M56N3RAZE ","M56N3RDXE ","M56N3RDYE ", & + "M56N3RDZE ","M56N3TAXE ","M56N3TAYE ","M56N3TAZE ","M56N3TDXSS","M56N3TDYSS","M56N3TDZSS", & + "M56N4FKXE ","M56N4FKYE ","M56N4FKZE ","M56N4FMXE ","M56N4FMYE ","M56N4FMZE ","M56N4MKXE ", & + "M56N4MKYE ","M56N4MKZE ","M56N4MMXE ","M56N4MMYE ","M56N4MMZE ","M56N4RAXE ","M56N4RAYE ", & + "M56N4RAZE ","M56N4RDXE ","M56N4RDYE ","M56N4RDZE ","M56N4TAXE ","M56N4TAYE ","M56N4TAZE ", & + "M56N4TDXSS","M56N4TDYSS","M56N4TDZSS","M56N5FKXE ","M56N5FKYE ","M56N5FKZE ","M56N5FMXE ", & + "M56N5FMYE ","M56N5FMZE ","M56N5MKXE ","M56N5MKYE ","M56N5MKZE ","M56N5MMXE ","M56N5MMYE ", & + "M56N5MMZE ","M56N5RAXE ","M56N5RAYE ","M56N5RAZE ","M56N5RDXE ","M56N5RDYE ","M56N5RDZE ", & + "M56N5TAXE ","M56N5TAYE ","M56N5TAZE ","M56N5TDXSS","M56N5TDYSS","M56N5TDZSS","M56N6FKXE ", & + "M56N6FKYE ","M56N6FKZE ","M56N6FMXE ","M56N6FMYE ","M56N6FMZE ","M56N6MKXE ","M56N6MKYE ", & + "M56N6MKZE ","M56N6MMXE ","M56N6MMYE ","M56N6MMZE ","M56N6RAXE ","M56N6RAYE ","M56N6RAZE ", & + "M56N6RDXE ","M56N6RDYE ","M56N6RDZE ","M56N6TAXE ","M56N6TAYE ","M56N6TAZE ","M56N6TDXSS", & + "M56N6TDYSS","M56N6TDZSS","M56N7FKXE ","M56N7FKYE ","M56N7FKZE ","M56N7FMXE ","M56N7FMYE ", & + "M56N7FMZE ","M56N7MKXE ","M56N7MKYE ","M56N7MKZE ","M56N7MMXE ","M56N7MMYE ","M56N7MMZE ", & + "M56N7RAXE ","M56N7RAYE ","M56N7RAZE ","M56N7RDXE ","M56N7RDYE ","M56N7RDZE ","M56N7TAXE ", & + "M56N7TAYE ","M56N7TAZE ","M56N7TDXSS","M56N7TDYSS","M56N7TDZSS","M56N8FKXE ","M56N8FKYE ", & + "M56N8FKZE ","M56N8FMXE ","M56N8FMYE ","M56N8FMZE ","M56N8MKXE ","M56N8MKYE ","M56N8MKZE ", & + "M56N8MMXE ","M56N8MMYE ","M56N8MMZE ","M56N8RAXE ","M56N8RAYE ","M56N8RAZE ","M56N8RDXE ", & + "M56N8RDYE ","M56N8RDZE ","M56N8TAXE ","M56N8TAYE ","M56N8TAZE ","M56N8TDXSS","M56N8TDYSS", & + "M56N8TDZSS","M56N9FKXE ","M56N9FKYE ","M56N9FKZE ","M56N9FMXE ","M56N9FMYE ","M56N9FMZE ", & + "M56N9MKXE ","M56N9MKYE ","M56N9MKZE ","M56N9MMXE ","M56N9MMYE ","M56N9MMZE ","M56N9RAXE ", & + "M56N9RAYE ","M56N9RAZE ","M56N9RDXE ","M56N9RDYE ","M56N9RDZE ","M56N9TAXE ","M56N9TAYE ", & + "M56N9TAZE ","M56N9TDXSS","M56N9TDYSS","M56N9TDZSS","M57N1FKXE ","M57N1FKYE ","M57N1FKZE ", & + "M57N1FMXE ","M57N1FMYE ","M57N1FMZE ","M57N1MKXE ","M57N1MKYE ","M57N1MKZE ","M57N1MMXE ", & + "M57N1MMYE ","M57N1MMZE ","M57N1RAXE ","M57N1RAYE ","M57N1RAZE ","M57N1RDXE ","M57N1RDYE ", & + "M57N1RDZE ","M57N1TAXE ","M57N1TAYE ","M57N1TAZE ","M57N1TDXSS","M57N1TDYSS","M57N1TDZSS", & + "M57N2FKXE ","M57N2FKYE ","M57N2FKZE ","M57N2FMXE ","M57N2FMYE ","M57N2FMZE ","M57N2MKXE ", & + "M57N2MKYE ","M57N2MKZE ","M57N2MMXE ","M57N2MMYE ","M57N2MMZE ","M57N2RAXE ","M57N2RAYE ", & + "M57N2RAZE ","M57N2RDXE ","M57N2RDYE ","M57N2RDZE ","M57N2TAXE ","M57N2TAYE ","M57N2TAZE ", & + "M57N2TDXSS","M57N2TDYSS","M57N2TDZSS","M57N3FKXE ","M57N3FKYE ","M57N3FKZE ","M57N3FMXE ", & + "M57N3FMYE ","M57N3FMZE ","M57N3MKXE ","M57N3MKYE ","M57N3MKZE ","M57N3MMXE ","M57N3MMYE ", & + "M57N3MMZE ","M57N3RAXE ","M57N3RAYE ","M57N3RAZE ","M57N3RDXE ","M57N3RDYE ","M57N3RDZE ", & + "M57N3TAXE ","M57N3TAYE ","M57N3TAZE ","M57N3TDXSS","M57N3TDYSS","M57N3TDZSS","M57N4FKXE ", & + "M57N4FKYE ","M57N4FKZE ","M57N4FMXE ","M57N4FMYE ","M57N4FMZE ","M57N4MKXE ","M57N4MKYE ", & + "M57N4MKZE ","M57N4MMXE ","M57N4MMYE ","M57N4MMZE ","M57N4RAXE ","M57N4RAYE ","M57N4RAZE ", & + "M57N4RDXE ","M57N4RDYE ","M57N4RDZE ","M57N4TAXE ","M57N4TAYE ","M57N4TAZE ","M57N4TDXSS", & + "M57N4TDYSS","M57N4TDZSS","M57N5FKXE ","M57N5FKYE ","M57N5FKZE ","M57N5FMXE ","M57N5FMYE ", & + "M57N5FMZE ","M57N5MKXE ","M57N5MKYE ","M57N5MKZE ","M57N5MMXE ","M57N5MMYE ","M57N5MMZE ", & + "M57N5RAXE ","M57N5RAYE ","M57N5RAZE ","M57N5RDXE ","M57N5RDYE ","M57N5RDZE ","M57N5TAXE ", & + "M57N5TAYE ","M57N5TAZE ","M57N5TDXSS","M57N5TDYSS","M57N5TDZSS","M57N6FKXE ","M57N6FKYE ", & + "M57N6FKZE ","M57N6FMXE ","M57N6FMYE ","M57N6FMZE ","M57N6MKXE ","M57N6MKYE ","M57N6MKZE ", & + "M57N6MMXE ","M57N6MMYE ","M57N6MMZE ","M57N6RAXE ","M57N6RAYE ","M57N6RAZE ","M57N6RDXE ", & + "M57N6RDYE ","M57N6RDZE ","M57N6TAXE ","M57N6TAYE ","M57N6TAZE ","M57N6TDXSS","M57N6TDYSS", & + "M57N6TDZSS","M57N7FKXE ","M57N7FKYE ","M57N7FKZE ","M57N7FMXE ","M57N7FMYE ","M57N7FMZE ", & + "M57N7MKXE ","M57N7MKYE ","M57N7MKZE ","M57N7MMXE ","M57N7MMYE ","M57N7MMZE ","M57N7RAXE ", & + "M57N7RAYE ","M57N7RAZE ","M57N7RDXE ","M57N7RDYE ","M57N7RDZE ","M57N7TAXE ","M57N7TAYE ", & + "M57N7TAZE ","M57N7TDXSS","M57N7TDYSS","M57N7TDZSS","M57N8FKXE ","M57N8FKYE ","M57N8FKZE ", & + "M57N8FMXE ","M57N8FMYE ","M57N8FMZE ","M57N8MKXE ","M57N8MKYE ","M57N8MKZE ","M57N8MMXE ", & + "M57N8MMYE ","M57N8MMZE ","M57N8RAXE ","M57N8RAYE ","M57N8RAZE ","M57N8RDXE ","M57N8RDYE ", & + "M57N8RDZE ","M57N8TAXE ","M57N8TAYE ","M57N8TAZE ","M57N8TDXSS","M57N8TDYSS","M57N8TDZSS", & + "M57N9FKXE ","M57N9FKYE ","M57N9FKZE ","M57N9FMXE ","M57N9FMYE ","M57N9FMZE ","M57N9MKXE ", & + "M57N9MKYE ","M57N9MKZE ","M57N9MMXE ","M57N9MMYE ","M57N9MMZE ","M57N9RAXE ","M57N9RAYE ", & + "M57N9RAZE ","M57N9RDXE ","M57N9RDYE ","M57N9RDZE ","M57N9TAXE ","M57N9TAYE ","M57N9TAZE ", & + "M57N9TDXSS","M57N9TDYSS","M57N9TDZSS","M58N1FKXE ","M58N1FKYE ","M58N1FKZE ","M58N1FMXE ", & + "M58N1FMYE ","M58N1FMZE ","M58N1MKXE ","M58N1MKYE ","M58N1MKZE ","M58N1MMXE ","M58N1MMYE ", & + "M58N1MMZE ","M58N1RAXE ","M58N1RAYE ","M58N1RAZE ","M58N1RDXE ","M58N1RDYE ","M58N1RDZE ", & + "M58N1TAXE ","M58N1TAYE ","M58N1TAZE ","M58N1TDXSS","M58N1TDYSS","M58N1TDZSS","M58N2FKXE ", & + "M58N2FKYE ","M58N2FKZE ","M58N2FMXE ","M58N2FMYE ","M58N2FMZE ","M58N2MKXE ","M58N2MKYE ", & + "M58N2MKZE ","M58N2MMXE ","M58N2MMYE ","M58N2MMZE ","M58N2RAXE ","M58N2RAYE ","M58N2RAZE ", & + "M58N2RDXE ","M58N2RDYE ","M58N2RDZE ","M58N2TAXE ","M58N2TAYE ","M58N2TAZE ","M58N2TDXSS", & + "M58N2TDYSS","M58N2TDZSS","M58N3FKXE ","M58N3FKYE ","M58N3FKZE ","M58N3FMXE ","M58N3FMYE ", & + "M58N3FMZE ","M58N3MKXE ","M58N3MKYE ","M58N3MKZE ","M58N3MMXE ","M58N3MMYE ","M58N3MMZE ", & + "M58N3RAXE ","M58N3RAYE ","M58N3RAZE ","M58N3RDXE ","M58N3RDYE ","M58N3RDZE ","M58N3TAXE ", & + "M58N3TAYE ","M58N3TAZE ","M58N3TDXSS","M58N3TDYSS","M58N3TDZSS","M58N4FKXE ","M58N4FKYE ", & + "M58N4FKZE ","M58N4FMXE ","M58N4FMYE ","M58N4FMZE ","M58N4MKXE ","M58N4MKYE ","M58N4MKZE ", & + "M58N4MMXE ","M58N4MMYE ","M58N4MMZE ","M58N4RAXE ","M58N4RAYE ","M58N4RAZE ","M58N4RDXE ", & + "M58N4RDYE ","M58N4RDZE ","M58N4TAXE ","M58N4TAYE ","M58N4TAZE ","M58N4TDXSS","M58N4TDYSS", & + "M58N4TDZSS","M58N5FKXE ","M58N5FKYE ","M58N5FKZE ","M58N5FMXE ","M58N5FMYE ","M58N5FMZE ", & + "M58N5MKXE ","M58N5MKYE ","M58N5MKZE ","M58N5MMXE ","M58N5MMYE ","M58N5MMZE ","M58N5RAXE ", & + "M58N5RAYE ","M58N5RAZE ","M58N5RDXE ","M58N5RDYE ","M58N5RDZE ","M58N5TAXE ","M58N5TAYE ", & + "M58N5TAZE ","M58N5TDXSS","M58N5TDYSS","M58N5TDZSS","M58N6FKXE ","M58N6FKYE ","M58N6FKZE ", & + "M58N6FMXE ","M58N6FMYE ","M58N6FMZE ","M58N6MKXE ","M58N6MKYE ","M58N6MKZE ","M58N6MMXE ", & + "M58N6MMYE ","M58N6MMZE ","M58N6RAXE ","M58N6RAYE ","M58N6RAZE ","M58N6RDXE ","M58N6RDYE ", & + "M58N6RDZE ","M58N6TAXE ","M58N6TAYE ","M58N6TAZE ","M58N6TDXSS","M58N6TDYSS","M58N6TDZSS", & + "M58N7FKXE ","M58N7FKYE ","M58N7FKZE ","M58N7FMXE ","M58N7FMYE ","M58N7FMZE ","M58N7MKXE ", & + "M58N7MKYE ","M58N7MKZE ","M58N7MMXE ","M58N7MMYE ","M58N7MMZE ","M58N7RAXE ","M58N7RAYE ", & + "M58N7RAZE ","M58N7RDXE ","M58N7RDYE ","M58N7RDZE ","M58N7TAXE ","M58N7TAYE ","M58N7TAZE ", & + "M58N7TDXSS","M58N7TDYSS","M58N7TDZSS","M58N8FKXE ","M58N8FKYE ","M58N8FKZE ","M58N8FMXE ", & + "M58N8FMYE ","M58N8FMZE ","M58N8MKXE ","M58N8MKYE ","M58N8MKZE ","M58N8MMXE ","M58N8MMYE ", & + "M58N8MMZE ","M58N8RAXE ","M58N8RAYE ","M58N8RAZE ","M58N8RDXE ","M58N8RDYE ","M58N8RDZE ", & + "M58N8TAXE ","M58N8TAYE ","M58N8TAZE ","M58N8TDXSS","M58N8TDYSS","M58N8TDZSS","M58N9FKXE ", & + "M58N9FKYE ","M58N9FKZE ","M58N9FMXE ","M58N9FMYE ","M58N9FMZE ","M58N9MKXE ","M58N9MKYE ", & + "M58N9MKZE ","M58N9MMXE ","M58N9MMYE ","M58N9MMZE ","M58N9RAXE ","M58N9RAYE ","M58N9RAZE ", & + "M58N9RDXE ","M58N9RDYE ","M58N9RDZE ","M58N9TAXE ","M58N9TAYE ","M58N9TAZE ","M58N9TDXSS", & + "M58N9TDYSS","M58N9TDZSS","M59N1FKXE ","M59N1FKYE ","M59N1FKZE ","M59N1FMXE ","M59N1FMYE ", & + "M59N1FMZE ","M59N1MKXE ","M59N1MKYE ","M59N1MKZE ","M59N1MMXE ","M59N1MMYE ","M59N1MMZE ", & + "M59N1RAXE ","M59N1RAYE ","M59N1RAZE ","M59N1RDXE ","M59N1RDYE ","M59N1RDZE ","M59N1TAXE ", & + "M59N1TAYE ","M59N1TAZE ","M59N1TDXSS","M59N1TDYSS","M59N1TDZSS","M59N2FKXE ","M59N2FKYE ", & + "M59N2FKZE ","M59N2FMXE ","M59N2FMYE ","M59N2FMZE ","M59N2MKXE ","M59N2MKYE ","M59N2MKZE ", & + "M59N2MMXE ","M59N2MMYE ","M59N2MMZE ","M59N2RAXE ","M59N2RAYE ","M59N2RAZE ","M59N2RDXE ", & + "M59N2RDYE ","M59N2RDZE ","M59N2TAXE ","M59N2TAYE ","M59N2TAZE ","M59N2TDXSS","M59N2TDYSS", & + "M59N2TDZSS","M59N3FKXE ","M59N3FKYE ","M59N3FKZE ","M59N3FMXE ","M59N3FMYE ","M59N3FMZE ", & + "M59N3MKXE ","M59N3MKYE ","M59N3MKZE ","M59N3MMXE ","M59N3MMYE ","M59N3MMZE ","M59N3RAXE ", & + "M59N3RAYE ","M59N3RAZE ","M59N3RDXE ","M59N3RDYE ","M59N3RDZE ","M59N3TAXE ","M59N3TAYE ", & + "M59N3TAZE ","M59N3TDXSS","M59N3TDYSS","M59N3TDZSS","M59N4FKXE ","M59N4FKYE ","M59N4FKZE ", & + "M59N4FMXE ","M59N4FMYE ","M59N4FMZE ","M59N4MKXE ","M59N4MKYE ","M59N4MKZE ","M59N4MMXE ", & + "M59N4MMYE ","M59N4MMZE ","M59N4RAXE ","M59N4RAYE ","M59N4RAZE ","M59N4RDXE ","M59N4RDYE ", & + "M59N4RDZE ","M59N4TAXE ","M59N4TAYE ","M59N4TAZE ","M59N4TDXSS","M59N4TDYSS","M59N4TDZSS", & + "M59N5FKXE ","M59N5FKYE ","M59N5FKZE ","M59N5FMXE ","M59N5FMYE ","M59N5FMZE ","M59N5MKXE ", & + "M59N5MKYE ","M59N5MKZE ","M59N5MMXE ","M59N5MMYE ","M59N5MMZE ","M59N5RAXE ","M59N5RAYE ", & + "M59N5RAZE ","M59N5RDXE ","M59N5RDYE ","M59N5RDZE ","M59N5TAXE ","M59N5TAYE ","M59N5TAZE ", & + "M59N5TDXSS","M59N5TDYSS","M59N5TDZSS","M59N6FKXE ","M59N6FKYE ","M59N6FKZE ","M59N6FMXE ", & + "M59N6FMYE ","M59N6FMZE ","M59N6MKXE ","M59N6MKYE ","M59N6MKZE ","M59N6MMXE ","M59N6MMYE ", & + "M59N6MMZE ","M59N6RAXE ","M59N6RAYE ","M59N6RAZE ","M59N6RDXE ","M59N6RDYE ","M59N6RDZE ", & + "M59N6TAXE ","M59N6TAYE ","M59N6TAZE ","M59N6TDXSS","M59N6TDYSS","M59N6TDZSS","M59N7FKXE ", & + "M59N7FKYE ","M59N7FKZE ","M59N7FMXE ","M59N7FMYE ","M59N7FMZE ","M59N7MKXE ","M59N7MKYE ", & + "M59N7MKZE ","M59N7MMXE ","M59N7MMYE ","M59N7MMZE ","M59N7RAXE ","M59N7RAYE ","M59N7RAZE ", & + "M59N7RDXE ","M59N7RDYE ","M59N7RDZE ","M59N7TAXE ","M59N7TAYE ","M59N7TAZE ","M59N7TDXSS", & + "M59N7TDYSS","M59N7TDZSS","M59N8FKXE ","M59N8FKYE ","M59N8FKZE ","M59N8FMXE ","M59N8FMYE ", & + "M59N8FMZE ","M59N8MKXE ","M59N8MKYE ","M59N8MKZE ","M59N8MMXE ","M59N8MMYE ","M59N8MMZE ", & + "M59N8RAXE ","M59N8RAYE ","M59N8RAZE ","M59N8RDXE ","M59N8RDYE ","M59N8RDZE ","M59N8TAXE ", & + "M59N8TAYE ","M59N8TAZE ","M59N8TDXSS","M59N8TDYSS","M59N8TDZSS","M59N9FKXE ","M59N9FKYE ", & + "M59N9FKZE ","M59N9FMXE ","M59N9FMYE ","M59N9FMZE ","M59N9MKXE ","M59N9MKYE ","M59N9MKZE ", & + "M59N9MMXE ","M59N9MMYE ","M59N9MMZE ","M59N9RAXE ","M59N9RAYE ","M59N9RAZE ","M59N9RDXE ", & + "M59N9RDYE ","M59N9RDZE ","M59N9TAXE ","M59N9TAYE ","M59N9TAZE ","M59N9TDXSS","M59N9TDYSS", & + "M59N9TDZSS","M60N1FKXE ","M60N1FKYE ","M60N1FKZE ","M60N1FMXE ","M60N1FMYE ","M60N1FMZE ", & + "M60N1MKXE ","M60N1MKYE ","M60N1MKZE ","M60N1MMXE ","M60N1MMYE ","M60N1MMZE ","M60N1RAXE ", & + "M60N1RAYE ","M60N1RAZE ","M60N1RDXE ","M60N1RDYE ","M60N1RDZE ","M60N1TAXE ","M60N1TAYE ", & + "M60N1TAZE ","M60N1TDXSS","M60N1TDYSS","M60N1TDZSS","M60N2FKXE ","M60N2FKYE ","M60N2FKZE ", & + "M60N2FMXE ","M60N2FMYE ","M60N2FMZE ","M60N2MKXE ","M60N2MKYE ","M60N2MKZE ","M60N2MMXE ", & + "M60N2MMYE ","M60N2MMZE ","M60N2RAXE ","M60N2RAYE ","M60N2RAZE ","M60N2RDXE ","M60N2RDYE ", & + "M60N2RDZE ","M60N2TAXE ","M60N2TAYE ","M60N2TAZE ","M60N2TDXSS","M60N2TDYSS","M60N2TDZSS", & + "M60N3FKXE ","M60N3FKYE ","M60N3FKZE ","M60N3FMXE ","M60N3FMYE ","M60N3FMZE ","M60N3MKXE ", & + "M60N3MKYE ","M60N3MKZE ","M60N3MMXE ","M60N3MMYE ","M60N3MMZE ","M60N3RAXE ","M60N3RAYE ", & + "M60N3RAZE ","M60N3RDXE ","M60N3RDYE ","M60N3RDZE ","M60N3TAXE ","M60N3TAYE ","M60N3TAZE ", & + "M60N3TDXSS","M60N3TDYSS","M60N3TDZSS","M60N4FKXE ","M60N4FKYE ","M60N4FKZE ","M60N4FMXE ", & + "M60N4FMYE ","M60N4FMZE ","M60N4MKXE ","M60N4MKYE ","M60N4MKZE ","M60N4MMXE ","M60N4MMYE ", & + "M60N4MMZE ","M60N4RAXE ","M60N4RAYE ","M60N4RAZE ","M60N4RDXE ","M60N4RDYE ","M60N4RDZE ", & + "M60N4TAXE ","M60N4TAYE ","M60N4TAZE ","M60N4TDXSS","M60N4TDYSS","M60N4TDZSS","M60N5FKXE ", & + "M60N5FKYE ","M60N5FKZE ","M60N5FMXE ","M60N5FMYE ","M60N5FMZE ","M60N5MKXE ","M60N5MKYE ", & + "M60N5MKZE ","M60N5MMXE ","M60N5MMYE ","M60N5MMZE ","M60N5RAXE ","M60N5RAYE ","M60N5RAZE ", & + "M60N5RDXE ","M60N5RDYE ","M60N5RDZE ","M60N5TAXE ","M60N5TAYE ","M60N5TAZE ","M60N5TDXSS", & + "M60N5TDYSS","M60N5TDZSS","M60N6FKXE ","M60N6FKYE ","M60N6FKZE ","M60N6FMXE ","M60N6FMYE ", & + "M60N6FMZE ","M60N6MKXE ","M60N6MKYE ","M60N6MKZE ","M60N6MMXE ","M60N6MMYE ","M60N6MMZE ", & + "M60N6RAXE ","M60N6RAYE ","M60N6RAZE ","M60N6RDXE ","M60N6RDYE ","M60N6RDZE ","M60N6TAXE ", & + "M60N6TAYE ","M60N6TAZE ","M60N6TDXSS","M60N6TDYSS","M60N6TDZSS","M60N7FKXE ","M60N7FKYE ", & + "M60N7FKZE ","M60N7FMXE ","M60N7FMYE ","M60N7FMZE ","M60N7MKXE ","M60N7MKYE ","M60N7MKZE ", & + "M60N7MMXE ","M60N7MMYE ","M60N7MMZE ","M60N7RAXE ","M60N7RAYE ","M60N7RAZE ","M60N7RDXE ", & + "M60N7RDYE ","M60N7RDZE ","M60N7TAXE ","M60N7TAYE ","M60N7TAZE ","M60N7TDXSS","M60N7TDYSS", & + "M60N7TDZSS","M60N8FKXE ","M60N8FKYE ","M60N8FKZE ","M60N8FMXE ","M60N8FMYE ","M60N8FMZE ", & + "M60N8MKXE ","M60N8MKYE ","M60N8MKZE ","M60N8MMXE ","M60N8MMYE ","M60N8MMZE ","M60N8RAXE ", & + "M60N8RAYE ","M60N8RAZE ","M60N8RDXE ","M60N8RDYE ","M60N8RDZE ","M60N8TAXE ","M60N8TAYE ", & + "M60N8TAZE ","M60N8TDXSS","M60N8TDYSS","M60N8TDZSS","M60N9FKXE ","M60N9FKYE ","M60N9FKZE ", & + "M60N9FMXE ","M60N9FMYE ","M60N9FMZE ","M60N9MKXE ","M60N9MKYE ","M60N9MKZE ","M60N9MMXE ", & + "M60N9MMYE ","M60N9MMZE ","M60N9RAXE ","M60N9RAYE ","M60N9RAZE ","M60N9RDXE ","M60N9RDYE ", & + "M60N9RDZE ","M60N9TAXE ","M60N9TAYE ","M60N9TAZE ","M60N9TDXSS","M60N9TDYSS","M60N9TDZSS", & + "M61N1FKXE ","M61N1FKYE ","M61N1FKZE ","M61N1FMXE ","M61N1FMYE ","M61N1FMZE ","M61N1MKXE ", & + "M61N1MKYE ","M61N1MKZE ","M61N1MMXE ","M61N1MMYE ","M61N1MMZE ","M61N1RAXE ","M61N1RAYE ", & + "M61N1RAZE ","M61N1RDXE ","M61N1RDYE ","M61N1RDZE ","M61N1TAXE ","M61N1TAYE ","M61N1TAZE ", & + "M61N1TDXSS","M61N1TDYSS","M61N1TDZSS","M61N2FKXE ","M61N2FKYE ","M61N2FKZE ","M61N2FMXE ", & + "M61N2FMYE ","M61N2FMZE ","M61N2MKXE ","M61N2MKYE ","M61N2MKZE ","M61N2MMXE ","M61N2MMYE ", & + "M61N2MMZE ","M61N2RAXE ","M61N2RAYE ","M61N2RAZE ","M61N2RDXE ","M61N2RDYE ","M61N2RDZE ", & + "M61N2TAXE ","M61N2TAYE ","M61N2TAZE ","M61N2TDXSS","M61N2TDYSS","M61N2TDZSS","M61N3FKXE ", & + "M61N3FKYE ","M61N3FKZE ","M61N3FMXE ","M61N3FMYE ","M61N3FMZE ","M61N3MKXE ","M61N3MKYE ", & + "M61N3MKZE ","M61N3MMXE ","M61N3MMYE ","M61N3MMZE ","M61N3RAXE ","M61N3RAYE ","M61N3RAZE ", & + "M61N3RDXE ","M61N3RDYE ","M61N3RDZE ","M61N3TAXE ","M61N3TAYE ","M61N3TAZE ","M61N3TDXSS", & + "M61N3TDYSS","M61N3TDZSS","M61N4FKXE ","M61N4FKYE ","M61N4FKZE ","M61N4FMXE ","M61N4FMYE ", & + "M61N4FMZE ","M61N4MKXE ","M61N4MKYE ","M61N4MKZE ","M61N4MMXE ","M61N4MMYE ","M61N4MMZE ", & + "M61N4RAXE ","M61N4RAYE ","M61N4RAZE ","M61N4RDXE ","M61N4RDYE ","M61N4RDZE ","M61N4TAXE ", & + "M61N4TAYE ","M61N4TAZE ","M61N4TDXSS","M61N4TDYSS","M61N4TDZSS","M61N5FKXE ","M61N5FKYE ", & + "M61N5FKZE ","M61N5FMXE ","M61N5FMYE ","M61N5FMZE ","M61N5MKXE ","M61N5MKYE ","M61N5MKZE ", & + "M61N5MMXE ","M61N5MMYE ","M61N5MMZE ","M61N5RAXE ","M61N5RAYE ","M61N5RAZE ","M61N5RDXE ", & + "M61N5RDYE ","M61N5RDZE ","M61N5TAXE ","M61N5TAYE ","M61N5TAZE ","M61N5TDXSS","M61N5TDYSS", & + "M61N5TDZSS","M61N6FKXE ","M61N6FKYE ","M61N6FKZE ","M61N6FMXE ","M61N6FMYE ","M61N6FMZE ", & + "M61N6MKXE ","M61N6MKYE ","M61N6MKZE ","M61N6MMXE ","M61N6MMYE ","M61N6MMZE ","M61N6RAXE ", & + "M61N6RAYE ","M61N6RAZE ","M61N6RDXE ","M61N6RDYE ","M61N6RDZE ","M61N6TAXE ","M61N6TAYE ", & + "M61N6TAZE ","M61N6TDXSS","M61N6TDYSS","M61N6TDZSS","M61N7FKXE ","M61N7FKYE ","M61N7FKZE ", & + "M61N7FMXE ","M61N7FMYE ","M61N7FMZE ","M61N7MKXE ","M61N7MKYE ","M61N7MKZE ","M61N7MMXE ", & + "M61N7MMYE ","M61N7MMZE ","M61N7RAXE ","M61N7RAYE ","M61N7RAZE ","M61N7RDXE ","M61N7RDYE ", & + "M61N7RDZE ","M61N7TAXE ","M61N7TAYE ","M61N7TAZE ","M61N7TDXSS","M61N7TDYSS","M61N7TDZSS", & + "M61N8FKXE ","M61N8FKYE ","M61N8FKZE ","M61N8FMXE ","M61N8FMYE ","M61N8FMZE ","M61N8MKXE ", & + "M61N8MKYE ","M61N8MKZE ","M61N8MMXE ","M61N8MMYE ","M61N8MMZE ","M61N8RAXE ","M61N8RAYE ", & + "M61N8RAZE ","M61N8RDXE ","M61N8RDYE ","M61N8RDZE ","M61N8TAXE ","M61N8TAYE ","M61N8TAZE ", & + "M61N8TDXSS","M61N8TDYSS","M61N8TDZSS","M61N9FKXE ","M61N9FKYE ","M61N9FKZE ","M61N9FMXE ", & + "M61N9FMYE ","M61N9FMZE ","M61N9MKXE ","M61N9MKYE ","M61N9MKZE ","M61N9MMXE ","M61N9MMYE ", & + "M61N9MMZE ","M61N9RAXE ","M61N9RAYE ","M61N9RAZE ","M61N9RDXE ","M61N9RDYE ","M61N9RDZE ", & + "M61N9TAXE ","M61N9TAYE ","M61N9TAZE ","M61N9TDXSS","M61N9TDYSS","M61N9TDZSS","M62N1FKXE ", & + "M62N1FKYE ","M62N1FKZE ","M62N1FMXE ","M62N1FMYE ","M62N1FMZE ","M62N1MKXE ","M62N1MKYE ", & + "M62N1MKZE ","M62N1MMXE ","M62N1MMYE ","M62N1MMZE ","M62N1RAXE ","M62N1RAYE ","M62N1RAZE ", & + "M62N1RDXE ","M62N1RDYE ","M62N1RDZE ","M62N1TAXE ","M62N1TAYE ","M62N1TAZE ","M62N1TDXSS", & + "M62N1TDYSS","M62N1TDZSS","M62N2FKXE ","M62N2FKYE ","M62N2FKZE ","M62N2FMXE ","M62N2FMYE ", & + "M62N2FMZE ","M62N2MKXE ","M62N2MKYE ","M62N2MKZE ","M62N2MMXE ","M62N2MMYE ","M62N2MMZE ", & + "M62N2RAXE ","M62N2RAYE ","M62N2RAZE ","M62N2RDXE ","M62N2RDYE ","M62N2RDZE ","M62N2TAXE ", & + "M62N2TAYE ","M62N2TAZE ","M62N2TDXSS","M62N2TDYSS","M62N2TDZSS","M62N3FKXE ","M62N3FKYE ", & + "M62N3FKZE ","M62N3FMXE ","M62N3FMYE ","M62N3FMZE ","M62N3MKXE ","M62N3MKYE ","M62N3MKZE ", & + "M62N3MMXE ","M62N3MMYE ","M62N3MMZE ","M62N3RAXE ","M62N3RAYE ","M62N3RAZE ","M62N3RDXE ", & + "M62N3RDYE ","M62N3RDZE ","M62N3TAXE ","M62N3TAYE ","M62N3TAZE ","M62N3TDXSS","M62N3TDYSS", & + "M62N3TDZSS","M62N4FKXE ","M62N4FKYE ","M62N4FKZE ","M62N4FMXE ","M62N4FMYE ","M62N4FMZE ", & + "M62N4MKXE ","M62N4MKYE ","M62N4MKZE ","M62N4MMXE ","M62N4MMYE ","M62N4MMZE ","M62N4RAXE ", & + "M62N4RAYE ","M62N4RAZE ","M62N4RDXE ","M62N4RDYE ","M62N4RDZE ","M62N4TAXE ","M62N4TAYE ", & + "M62N4TAZE ","M62N4TDXSS","M62N4TDYSS","M62N4TDZSS","M62N5FKXE ","M62N5FKYE ","M62N5FKZE ", & + "M62N5FMXE ","M62N5FMYE ","M62N5FMZE ","M62N5MKXE ","M62N5MKYE ","M62N5MKZE ","M62N5MMXE ", & + "M62N5MMYE ","M62N5MMZE ","M62N5RAXE ","M62N5RAYE ","M62N5RAZE ","M62N5RDXE ","M62N5RDYE ", & + "M62N5RDZE ","M62N5TAXE ","M62N5TAYE ","M62N5TAZE ","M62N5TDXSS","M62N5TDYSS","M62N5TDZSS", & + "M62N6FKXE ","M62N6FKYE ","M62N6FKZE ","M62N6FMXE ","M62N6FMYE ","M62N6FMZE ","M62N6MKXE ", & + "M62N6MKYE ","M62N6MKZE ","M62N6MMXE ","M62N6MMYE ","M62N6MMZE ","M62N6RAXE ","M62N6RAYE ", & + "M62N6RAZE ","M62N6RDXE ","M62N6RDYE ","M62N6RDZE ","M62N6TAXE ","M62N6TAYE ","M62N6TAZE ", & + "M62N6TDXSS","M62N6TDYSS","M62N6TDZSS","M62N7FKXE ","M62N7FKYE ","M62N7FKZE ","M62N7FMXE ", & + "M62N7FMYE ","M62N7FMZE ","M62N7MKXE ","M62N7MKYE ","M62N7MKZE ","M62N7MMXE ","M62N7MMYE ", & + "M62N7MMZE ","M62N7RAXE ","M62N7RAYE ","M62N7RAZE ","M62N7RDXE ","M62N7RDYE ","M62N7RDZE ", & + "M62N7TAXE ","M62N7TAYE ","M62N7TAZE ","M62N7TDXSS"/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry9(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M62N7TDYSS","M62N7TDZSS","M62N8FKXE ","M62N8FKYE ","M62N8FKZE ","M62N8FMXE ","M62N8FMYE ", & + "M62N8FMZE ","M62N8MKXE ","M62N8MKYE ","M62N8MKZE ","M62N8MMXE ","M62N8MMYE ","M62N8MMZE ", & + "M62N8RAXE ","M62N8RAYE ","M62N8RAZE ","M62N8RDXE ","M62N8RDYE ","M62N8RDZE ","M62N8TAXE ", & + "M62N8TAYE ","M62N8TAZE ","M62N8TDXSS","M62N8TDYSS","M62N8TDZSS","M62N9FKXE ","M62N9FKYE ", & + "M62N9FKZE ","M62N9FMXE ","M62N9FMYE ","M62N9FMZE ","M62N9MKXE ","M62N9MKYE ","M62N9MKZE ", & + "M62N9MMXE ","M62N9MMYE ","M62N9MMZE ","M62N9RAXE ","M62N9RAYE ","M62N9RAZE ","M62N9RDXE ", & + "M62N9RDYE ","M62N9RDZE ","M62N9TAXE ","M62N9TAYE ","M62N9TAZE ","M62N9TDXSS","M62N9TDYSS", & + "M62N9TDZSS","M63N1FKXE ","M63N1FKYE ","M63N1FKZE ","M63N1FMXE ","M63N1FMYE ","M63N1FMZE ", & + "M63N1MKXE ","M63N1MKYE ","M63N1MKZE ","M63N1MMXE ","M63N1MMYE ","M63N1MMZE ","M63N1RAXE ", & + "M63N1RAYE ","M63N1RAZE ","M63N1RDXE ","M63N1RDYE ","M63N1RDZE ","M63N1TAXE ","M63N1TAYE ", & + "M63N1TAZE ","M63N1TDXSS","M63N1TDYSS","M63N1TDZSS","M63N2FKXE ","M63N2FKYE ","M63N2FKZE ", & + "M63N2FMXE ","M63N2FMYE ","M63N2FMZE ","M63N2MKXE ","M63N2MKYE ","M63N2MKZE ","M63N2MMXE ", & + "M63N2MMYE ","M63N2MMZE ","M63N2RAXE ","M63N2RAYE ","M63N2RAZE ","M63N2RDXE ","M63N2RDYE ", & + "M63N2RDZE ","M63N2TAXE ","M63N2TAYE ","M63N2TAZE ","M63N2TDXSS","M63N2TDYSS","M63N2TDZSS", & + "M63N3FKXE ","M63N3FKYE ","M63N3FKZE ","M63N3FMXE ","M63N3FMYE ","M63N3FMZE ","M63N3MKXE ", & + "M63N3MKYE ","M63N3MKZE ","M63N3MMXE ","M63N3MMYE ","M63N3MMZE ","M63N3RAXE ","M63N3RAYE ", & + "M63N3RAZE ","M63N3RDXE ","M63N3RDYE ","M63N3RDZE ","M63N3TAXE ","M63N3TAYE ","M63N3TAZE ", & + "M63N3TDXSS","M63N3TDYSS","M63N3TDZSS","M63N4FKXE ","M63N4FKYE ","M63N4FKZE ","M63N4FMXE ", & + "M63N4FMYE ","M63N4FMZE ","M63N4MKXE ","M63N4MKYE ","M63N4MKZE ","M63N4MMXE ","M63N4MMYE ", & + "M63N4MMZE ","M63N4RAXE ","M63N4RAYE ","M63N4RAZE ","M63N4RDXE ","M63N4RDYE ","M63N4RDZE ", & + "M63N4TAXE ","M63N4TAYE ","M63N4TAZE ","M63N4TDXSS","M63N4TDYSS","M63N4TDZSS","M63N5FKXE ", & + "M63N5FKYE ","M63N5FKZE ","M63N5FMXE ","M63N5FMYE ","M63N5FMZE ","M63N5MKXE ","M63N5MKYE ", & + "M63N5MKZE ","M63N5MMXE ","M63N5MMYE ","M63N5MMZE ","M63N5RAXE ","M63N5RAYE ","M63N5RAZE ", & + "M63N5RDXE ","M63N5RDYE ","M63N5RDZE ","M63N5TAXE ","M63N5TAYE ","M63N5TAZE ","M63N5TDXSS", & + "M63N5TDYSS","M63N5TDZSS","M63N6FKXE ","M63N6FKYE ","M63N6FKZE ","M63N6FMXE ","M63N6FMYE ", & + "M63N6FMZE ","M63N6MKXE ","M63N6MKYE ","M63N6MKZE ","M63N6MMXE ","M63N6MMYE ","M63N6MMZE ", & + "M63N6RAXE ","M63N6RAYE ","M63N6RAZE ","M63N6RDXE ","M63N6RDYE ","M63N6RDZE ","M63N6TAXE ", & + "M63N6TAYE ","M63N6TAZE ","M63N6TDXSS","M63N6TDYSS","M63N6TDZSS","M63N7FKXE ","M63N7FKYE ", & + "M63N7FKZE ","M63N7FMXE ","M63N7FMYE ","M63N7FMZE ","M63N7MKXE ","M63N7MKYE ","M63N7MKZE ", & + "M63N7MMXE ","M63N7MMYE ","M63N7MMZE ","M63N7RAXE ","M63N7RAYE ","M63N7RAZE ","M63N7RDXE ", & + "M63N7RDYE ","M63N7RDZE ","M63N7TAXE ","M63N7TAYE ","M63N7TAZE ","M63N7TDXSS","M63N7TDYSS", & + "M63N7TDZSS","M63N8FKXE ","M63N8FKYE ","M63N8FKZE ","M63N8FMXE ","M63N8FMYE ","M63N8FMZE ", & + "M63N8MKXE ","M63N8MKYE ","M63N8MKZE ","M63N8MMXE ","M63N8MMYE ","M63N8MMZE ","M63N8RAXE ", & + "M63N8RAYE ","M63N8RAZE ","M63N8RDXE ","M63N8RDYE ","M63N8RDZE ","M63N8TAXE ","M63N8TAYE ", & + "M63N8TAZE ","M63N8TDXSS","M63N8TDYSS","M63N8TDZSS","M63N9FKXE ","M63N9FKYE ","M63N9FKZE ", & + "M63N9FMXE ","M63N9FMYE ","M63N9FMZE ","M63N9MKXE ","M63N9MKYE ","M63N9MKZE ","M63N9MMXE ", & + "M63N9MMYE ","M63N9MMZE ","M63N9RAXE ","M63N9RAYE ","M63N9RAZE ","M63N9RDXE ","M63N9RDYE ", & + "M63N9RDZE ","M63N9TAXE ","M63N9TAYE ","M63N9TAZE ","M63N9TDXSS","M63N9TDYSS","M63N9TDZSS", & + "M64N1FKXE ","M64N1FKYE ","M64N1FKZE ","M64N1FMXE ","M64N1FMYE ","M64N1FMZE ","M64N1MKXE ", & + "M64N1MKYE ","M64N1MKZE ","M64N1MMXE ","M64N1MMYE ","M64N1MMZE ","M64N1RAXE ","M64N1RAYE ", & + "M64N1RAZE ","M64N1RDXE ","M64N1RDYE ","M64N1RDZE ","M64N1TAXE ","M64N1TAYE ","M64N1TAZE ", & + "M64N1TDXSS","M64N1TDYSS","M64N1TDZSS","M64N2FKXE ","M64N2FKYE ","M64N2FKZE ","M64N2FMXE ", & + "M64N2FMYE ","M64N2FMZE ","M64N2MKXE ","M64N2MKYE ","M64N2MKZE ","M64N2MMXE ","M64N2MMYE ", & + "M64N2MMZE ","M64N2RAXE ","M64N2RAYE ","M64N2RAZE ","M64N2RDXE ","M64N2RDYE ","M64N2RDZE ", & + "M64N2TAXE ","M64N2TAYE ","M64N2TAZE ","M64N2TDXSS","M64N2TDYSS","M64N2TDZSS","M64N3FKXE ", & + "M64N3FKYE ","M64N3FKZE ","M64N3FMXE ","M64N3FMYE ","M64N3FMZE ","M64N3MKXE ","M64N3MKYE ", & + "M64N3MKZE ","M64N3MMXE ","M64N3MMYE ","M64N3MMZE ","M64N3RAXE ","M64N3RAYE ","M64N3RAZE ", & + "M64N3RDXE ","M64N3RDYE ","M64N3RDZE ","M64N3TAXE ","M64N3TAYE ","M64N3TAZE ","M64N3TDXSS", & + "M64N3TDYSS","M64N3TDZSS","M64N4FKXE ","M64N4FKYE ","M64N4FKZE ","M64N4FMXE ","M64N4FMYE ", & + "M64N4FMZE ","M64N4MKXE ","M64N4MKYE ","M64N4MKZE ","M64N4MMXE ","M64N4MMYE ","M64N4MMZE ", & + "M64N4RAXE ","M64N4RAYE ","M64N4RAZE ","M64N4RDXE ","M64N4RDYE ","M64N4RDZE ","M64N4TAXE ", & + "M64N4TAYE ","M64N4TAZE ","M64N4TDXSS","M64N4TDYSS","M64N4TDZSS","M64N5FKXE ","M64N5FKYE ", & + "M64N5FKZE ","M64N5FMXE ","M64N5FMYE ","M64N5FMZE ","M64N5MKXE ","M64N5MKYE ","M64N5MKZE ", & + "M64N5MMXE ","M64N5MMYE ","M64N5MMZE ","M64N5RAXE ","M64N5RAYE ","M64N5RAZE ","M64N5RDXE ", & + "M64N5RDYE ","M64N5RDZE ","M64N5TAXE ","M64N5TAYE ","M64N5TAZE ","M64N5TDXSS","M64N5TDYSS", & + "M64N5TDZSS","M64N6FKXE ","M64N6FKYE ","M64N6FKZE ","M64N6FMXE ","M64N6FMYE ","M64N6FMZE ", & + "M64N6MKXE ","M64N6MKYE ","M64N6MKZE ","M64N6MMXE ","M64N6MMYE ","M64N6MMZE ","M64N6RAXE ", & + "M64N6RAYE ","M64N6RAZE ","M64N6RDXE ","M64N6RDYE ","M64N6RDZE ","M64N6TAXE ","M64N6TAYE ", & + "M64N6TAZE ","M64N6TDXSS","M64N6TDYSS","M64N6TDZSS","M64N7FKXE ","M64N7FKYE ","M64N7FKZE ", & + "M64N7FMXE ","M64N7FMYE ","M64N7FMZE ","M64N7MKXE ","M64N7MKYE ","M64N7MKZE ","M64N7MMXE ", & + "M64N7MMYE ","M64N7MMZE ","M64N7RAXE ","M64N7RAYE ","M64N7RAZE ","M64N7RDXE ","M64N7RDYE ", & + "M64N7RDZE ","M64N7TAXE ","M64N7TAYE ","M64N7TAZE ","M64N7TDXSS","M64N7TDYSS","M64N7TDZSS", & + "M64N8FKXE ","M64N8FKYE ","M64N8FKZE ","M64N8FMXE ","M64N8FMYE ","M64N8FMZE ","M64N8MKXE ", & + "M64N8MKYE ","M64N8MKZE ","M64N8MMXE ","M64N8MMYE ","M64N8MMZE ","M64N8RAXE ","M64N8RAYE ", & + "M64N8RAZE ","M64N8RDXE ","M64N8RDYE ","M64N8RDZE ","M64N8TAXE ","M64N8TAYE ","M64N8TAZE ", & + "M64N8TDXSS","M64N8TDYSS","M64N8TDZSS","M64N9FKXE ","M64N9FKYE ","M64N9FKZE ","M64N9FMXE ", & + "M64N9FMYE ","M64N9FMZE ","M64N9MKXE ","M64N9MKYE ","M64N9MKZE ","M64N9MMXE ","M64N9MMYE ", & + "M64N9MMZE ","M64N9RAXE ","M64N9RAYE ","M64N9RAZE ","M64N9RDXE ","M64N9RDYE ","M64N9RDZE ", & + "M64N9TAXE ","M64N9TAYE ","M64N9TAZE ","M64N9TDXSS","M64N9TDYSS","M64N9TDZSS","M65N1FKXE ", & + "M65N1FKYE ","M65N1FKZE ","M65N1FMXE ","M65N1FMYE ","M65N1FMZE ","M65N1MKXE ","M65N1MKYE ", & + "M65N1MKZE ","M65N1MMXE ","M65N1MMYE ","M65N1MMZE ","M65N1RAXE ","M65N1RAYE ","M65N1RAZE ", & + "M65N1RDXE ","M65N1RDYE ","M65N1RDZE ","M65N1TAXE ","M65N1TAYE ","M65N1TAZE ","M65N1TDXSS", & + "M65N1TDYSS","M65N1TDZSS","M65N2FKXE ","M65N2FKYE ","M65N2FKZE ","M65N2FMXE ","M65N2FMYE ", & + "M65N2FMZE ","M65N2MKXE ","M65N2MKYE ","M65N2MKZE ","M65N2MMXE ","M65N2MMYE ","M65N2MMZE ", & + "M65N2RAXE ","M65N2RAYE ","M65N2RAZE ","M65N2RDXE ","M65N2RDYE ","M65N2RDZE ","M65N2TAXE ", & + "M65N2TAYE ","M65N2TAZE ","M65N2TDXSS","M65N2TDYSS","M65N2TDZSS","M65N3FKXE ","M65N3FKYE ", & + "M65N3FKZE ","M65N3FMXE ","M65N3FMYE ","M65N3FMZE ","M65N3MKXE ","M65N3MKYE ","M65N3MKZE ", & + "M65N3MMXE ","M65N3MMYE ","M65N3MMZE ","M65N3RAXE ","M65N3RAYE ","M65N3RAZE ","M65N3RDXE ", & + "M65N3RDYE ","M65N3RDZE ","M65N3TAXE ","M65N3TAYE ","M65N3TAZE ","M65N3TDXSS","M65N3TDYSS", & + "M65N3TDZSS","M65N4FKXE ","M65N4FKYE ","M65N4FKZE ","M65N4FMXE ","M65N4FMYE ","M65N4FMZE ", & + "M65N4MKXE ","M65N4MKYE ","M65N4MKZE ","M65N4MMXE ","M65N4MMYE ","M65N4MMZE ","M65N4RAXE ", & + "M65N4RAYE ","M65N4RAZE ","M65N4RDXE ","M65N4RDYE ","M65N4RDZE ","M65N4TAXE ","M65N4TAYE ", & + "M65N4TAZE ","M65N4TDXSS","M65N4TDYSS","M65N4TDZSS","M65N5FKXE ","M65N5FKYE ","M65N5FKZE ", & + "M65N5FMXE ","M65N5FMYE ","M65N5FMZE ","M65N5MKXE ","M65N5MKYE ","M65N5MKZE ","M65N5MMXE ", & + "M65N5MMYE ","M65N5MMZE ","M65N5RAXE ","M65N5RAYE ","M65N5RAZE ","M65N5RDXE ","M65N5RDYE ", & + "M65N5RDZE ","M65N5TAXE ","M65N5TAYE ","M65N5TAZE ","M65N5TDXSS","M65N5TDYSS","M65N5TDZSS", & + "M65N6FKXE ","M65N6FKYE ","M65N6FKZE ","M65N6FMXE ","M65N6FMYE ","M65N6FMZE ","M65N6MKXE ", & + "M65N6MKYE ","M65N6MKZE ","M65N6MMXE ","M65N6MMYE ","M65N6MMZE ","M65N6RAXE ","M65N6RAYE ", & + "M65N6RAZE ","M65N6RDXE ","M65N6RDYE ","M65N6RDZE ","M65N6TAXE ","M65N6TAYE ","M65N6TAZE ", & + "M65N6TDXSS","M65N6TDYSS","M65N6TDZSS","M65N7FKXE ","M65N7FKYE ","M65N7FKZE ","M65N7FMXE ", & + "M65N7FMYE ","M65N7FMZE ","M65N7MKXE ","M65N7MKYE ","M65N7MKZE ","M65N7MMXE ","M65N7MMYE ", & + "M65N7MMZE ","M65N7RAXE ","M65N7RAYE ","M65N7RAZE ","M65N7RDXE ","M65N7RDYE ","M65N7RDZE ", & + "M65N7TAXE ","M65N7TAYE ","M65N7TAZE ","M65N7TDXSS","M65N7TDYSS","M65N7TDZSS","M65N8FKXE ", & + "M65N8FKYE ","M65N8FKZE ","M65N8FMXE ","M65N8FMYE ","M65N8FMZE ","M65N8MKXE ","M65N8MKYE ", & + "M65N8MKZE ","M65N8MMXE ","M65N8MMYE ","M65N8MMZE ","M65N8RAXE ","M65N8RAYE ","M65N8RAZE ", & + "M65N8RDXE ","M65N8RDYE ","M65N8RDZE ","M65N8TAXE ","M65N8TAYE ","M65N8TAZE ","M65N8TDXSS", & + "M65N8TDYSS","M65N8TDZSS","M65N9FKXE ","M65N9FKYE ","M65N9FKZE ","M65N9FMXE ","M65N9FMYE ", & + "M65N9FMZE ","M65N9MKXE ","M65N9MKYE ","M65N9MKZE ","M65N9MMXE ","M65N9MMYE ","M65N9MMZE ", & + "M65N9RAXE ","M65N9RAYE ","M65N9RAZE ","M65N9RDXE ","M65N9RDYE ","M65N9RDZE ","M65N9TAXE ", & + "M65N9TAYE ","M65N9TAZE ","M65N9TDXSS","M65N9TDYSS","M65N9TDZSS","M66N1FKXE ","M66N1FKYE ", & + "M66N1FKZE ","M66N1FMXE ","M66N1FMYE ","M66N1FMZE ","M66N1MKXE ","M66N1MKYE ","M66N1MKZE ", & + "M66N1MMXE ","M66N1MMYE ","M66N1MMZE ","M66N1RAXE ","M66N1RAYE ","M66N1RAZE ","M66N1RDXE ", & + "M66N1RDYE ","M66N1RDZE ","M66N1TAXE ","M66N1TAYE ","M66N1TAZE ","M66N1TDXSS","M66N1TDYSS", & + "M66N1TDZSS","M66N2FKXE ","M66N2FKYE ","M66N2FKZE ","M66N2FMXE ","M66N2FMYE ","M66N2FMZE ", & + "M66N2MKXE ","M66N2MKYE ","M66N2MKZE ","M66N2MMXE ","M66N2MMYE ","M66N2MMZE ","M66N2RAXE ", & + "M66N2RAYE ","M66N2RAZE ","M66N2RDXE ","M66N2RDYE ","M66N2RDZE ","M66N2TAXE ","M66N2TAYE ", & + "M66N2TAZE ","M66N2TDXSS","M66N2TDYSS","M66N2TDZSS","M66N3FKXE ","M66N3FKYE ","M66N3FKZE ", & + "M66N3FMXE ","M66N3FMYE ","M66N3FMZE ","M66N3MKXE ","M66N3MKYE ","M66N3MKZE ","M66N3MMXE ", & + "M66N3MMYE ","M66N3MMZE ","M66N3RAXE ","M66N3RAYE ","M66N3RAZE ","M66N3RDXE ","M66N3RDYE ", & + "M66N3RDZE ","M66N3TAXE ","M66N3TAYE ","M66N3TAZE ","M66N3TDXSS","M66N3TDYSS","M66N3TDZSS", & + "M66N4FKXE ","M66N4FKYE ","M66N4FKZE ","M66N4FMXE ","M66N4FMYE ","M66N4FMZE ","M66N4MKXE ", & + "M66N4MKYE ","M66N4MKZE ","M66N4MMXE ","M66N4MMYE ","M66N4MMZE ","M66N4RAXE ","M66N4RAYE ", & + "M66N4RAZE ","M66N4RDXE ","M66N4RDYE ","M66N4RDZE ","M66N4TAXE ","M66N4TAYE ","M66N4TAZE ", & + "M66N4TDXSS","M66N4TDYSS","M66N4TDZSS","M66N5FKXE ","M66N5FKYE ","M66N5FKZE ","M66N5FMXE ", & + "M66N5FMYE ","M66N5FMZE ","M66N5MKXE ","M66N5MKYE ","M66N5MKZE ","M66N5MMXE ","M66N5MMYE ", & + "M66N5MMZE ","M66N5RAXE ","M66N5RAYE ","M66N5RAZE ","M66N5RDXE ","M66N5RDYE ","M66N5RDZE ", & + "M66N5TAXE ","M66N5TAYE ","M66N5TAZE ","M66N5TDXSS","M66N5TDYSS","M66N5TDZSS","M66N6FKXE ", & + "M66N6FKYE ","M66N6FKZE ","M66N6FMXE ","M66N6FMYE ","M66N6FMZE ","M66N6MKXE ","M66N6MKYE ", & + "M66N6MKZE ","M66N6MMXE ","M66N6MMYE ","M66N6MMZE ","M66N6RAXE ","M66N6RAYE ","M66N6RAZE ", & + "M66N6RDXE ","M66N6RDYE ","M66N6RDZE ","M66N6TAXE ","M66N6TAYE ","M66N6TAZE ","M66N6TDXSS", & + "M66N6TDYSS","M66N6TDZSS","M66N7FKXE ","M66N7FKYE ","M66N7FKZE ","M66N7FMXE ","M66N7FMYE ", & + "M66N7FMZE ","M66N7MKXE ","M66N7MKYE ","M66N7MKZE ","M66N7MMXE ","M66N7MMYE ","M66N7MMZE ", & + "M66N7RAXE ","M66N7RAYE ","M66N7RAZE ","M66N7RDXE ","M66N7RDYE ","M66N7RDZE ","M66N7TAXE ", & + "M66N7TAYE ","M66N7TAZE ","M66N7TDXSS","M66N7TDYSS","M66N7TDZSS","M66N8FKXE ","M66N8FKYE ", & + "M66N8FKZE ","M66N8FMXE ","M66N8FMYE ","M66N8FMZE ","M66N8MKXE ","M66N8MKYE ","M66N8MKZE ", & + "M66N8MMXE ","M66N8MMYE ","M66N8MMZE ","M66N8RAXE ","M66N8RAYE ","M66N8RAZE ","M66N8RDXE ", & + "M66N8RDYE ","M66N8RDZE ","M66N8TAXE ","M66N8TAYE ","M66N8TAZE ","M66N8TDXSS","M66N8TDYSS", & + "M66N8TDZSS","M66N9FKXE ","M66N9FKYE ","M66N9FKZE ","M66N9FMXE ","M66N9FMYE ","M66N9FMZE ", & + "M66N9MKXE ","M66N9MKYE ","M66N9MKZE ","M66N9MMXE ","M66N9MMYE ","M66N9MMZE ","M66N9RAXE ", & + "M66N9RAYE ","M66N9RAZE ","M66N9RDXE ","M66N9RDYE ","M66N9RDZE ","M66N9TAXE ","M66N9TAYE ", & + "M66N9TAZE ","M66N9TDXSS","M66N9TDYSS","M66N9TDZSS","M67N1FKXE ","M67N1FKYE ","M67N1FKZE ", & + "M67N1FMXE ","M67N1FMYE ","M67N1FMZE ","M67N1MKXE ","M67N1MKYE ","M67N1MKZE ","M67N1MMXE ", & + "M67N1MMYE ","M67N1MMZE ","M67N1RAXE ","M67N1RAYE ","M67N1RAZE ","M67N1RDXE ","M67N1RDYE ", & + "M67N1RDZE ","M67N1TAXE ","M67N1TAYE ","M67N1TAZE ","M67N1TDXSS","M67N1TDYSS","M67N1TDZSS", & + "M67N2FKXE ","M67N2FKYE ","M67N2FKZE ","M67N2FMXE ","M67N2FMYE ","M67N2FMZE ","M67N2MKXE ", & + "M67N2MKYE ","M67N2MKZE ","M67N2MMXE ","M67N2MMYE ","M67N2MMZE ","M67N2RAXE ","M67N2RAYE ", & + "M67N2RAZE ","M67N2RDXE ","M67N2RDYE ","M67N2RDZE ","M67N2TAXE ","M67N2TAYE ","M67N2TAZE ", & + "M67N2TDXSS","M67N2TDYSS","M67N2TDZSS","M67N3FKXE ","M67N3FKYE ","M67N3FKZE ","M67N3FMXE ", & + "M67N3FMYE ","M67N3FMZE ","M67N3MKXE ","M67N3MKYE ","M67N3MKZE ","M67N3MMXE ","M67N3MMYE ", & + "M67N3MMZE ","M67N3RAXE ","M67N3RAYE ","M67N3RAZE ","M67N3RDXE ","M67N3RDYE ","M67N3RDZE ", & + "M67N3TAXE ","M67N3TAYE ","M67N3TAZE ","M67N3TDXSS","M67N3TDYSS","M67N3TDZSS","M67N4FKXE ", & + "M67N4FKYE ","M67N4FKZE ","M67N4FMXE ","M67N4FMYE ","M67N4FMZE ","M67N4MKXE ","M67N4MKYE ", & + "M67N4MKZE ","M67N4MMXE ","M67N4MMYE ","M67N4MMZE ","M67N4RAXE ","M67N4RAYE ","M67N4RAZE ", & + "M67N4RDXE ","M67N4RDYE ","M67N4RDZE ","M67N4TAXE ","M67N4TAYE ","M67N4TAZE ","M67N4TDXSS", & + "M67N4TDYSS","M67N4TDZSS","M67N5FKXE ","M67N5FKYE ","M67N5FKZE ","M67N5FMXE ","M67N5FMYE ", & + "M67N5FMZE ","M67N5MKXE ","M67N5MKYE ","M67N5MKZE ","M67N5MMXE ","M67N5MMYE ","M67N5MMZE ", & + "M67N5RAXE ","M67N5RAYE ","M67N5RAZE ","M67N5RDXE ","M67N5RDYE ","M67N5RDZE ","M67N5TAXE ", & + "M67N5TAYE ","M67N5TAZE ","M67N5TDXSS","M67N5TDYSS","M67N5TDZSS","M67N6FKXE ","M67N6FKYE ", & + "M67N6FKZE ","M67N6FMXE ","M67N6FMYE ","M67N6FMZE ","M67N6MKXE ","M67N6MKYE ","M67N6MKZE ", & + "M67N6MMXE ","M67N6MMYE ","M67N6MMZE ","M67N6RAXE ","M67N6RAYE ","M67N6RAZE ","M67N6RDXE ", & + "M67N6RDYE ","M67N6RDZE ","M67N6TAXE ","M67N6TAYE ","M67N6TAZE ","M67N6TDXSS","M67N6TDYSS", & + "M67N6TDZSS","M67N7FKXE ","M67N7FKYE ","M67N7FKZE ","M67N7FMXE ","M67N7FMYE ","M67N7FMZE ", & + "M67N7MKXE ","M67N7MKYE ","M67N7MKZE ","M67N7MMXE ","M67N7MMYE ","M67N7MMZE ","M67N7RAXE ", & + "M67N7RAYE ","M67N7RAZE ","M67N7RDXE ","M67N7RDYE ","M67N7RDZE ","M67N7TAXE ","M67N7TAYE ", & + "M67N7TAZE ","M67N7TDXSS","M67N7TDYSS","M67N7TDZSS","M67N8FKXE ","M67N8FKYE ","M67N8FKZE ", & + "M67N8FMXE ","M67N8FMYE ","M67N8FMZE ","M67N8MKXE ","M67N8MKYE ","M67N8MKZE ","M67N8MMXE ", & + "M67N8MMYE ","M67N8MMZE ","M67N8RAXE ","M67N8RAYE ","M67N8RAZE ","M67N8RDXE ","M67N8RDYE ", & + "M67N8RDZE ","M67N8TAXE ","M67N8TAYE ","M67N8TAZE ","M67N8TDXSS","M67N8TDYSS","M67N8TDZSS", & + "M67N9FKXE ","M67N9FKYE ","M67N9FKZE ","M67N9FMXE ","M67N9FMYE ","M67N9FMZE ","M67N9MKXE ", & + "M67N9MKYE ","M67N9MKZE ","M67N9MMXE ","M67N9MMYE ","M67N9MMZE ","M67N9RAXE ","M67N9RAYE ", & + "M67N9RAZE ","M67N9RDXE ","M67N9RDYE ","M67N9RDZE ","M67N9TAXE ","M67N9TAYE ","M67N9TAZE ", & + "M67N9TDXSS","M67N9TDYSS","M67N9TDZSS","M68N1FKXE ","M68N1FKYE ","M68N1FKZE ","M68N1FMXE ", & + "M68N1FMYE ","M68N1FMZE ","M68N1MKXE ","M68N1MKYE ","M68N1MKZE ","M68N1MMXE ","M68N1MMYE ", & + "M68N1MMZE ","M68N1RAXE ","M68N1RAYE ","M68N1RAZE ","M68N1RDXE ","M68N1RDYE ","M68N1RDZE ", & + "M68N1TAXE ","M68N1TAYE ","M68N1TAZE ","M68N1TDXSS","M68N1TDYSS","M68N1TDZSS","M68N2FKXE ", & + "M68N2FKYE ","M68N2FKZE ","M68N2FMXE ","M68N2FMYE ","M68N2FMZE ","M68N2MKXE ","M68N2MKYE ", & + "M68N2MKZE ","M68N2MMXE ","M68N2MMYE ","M68N2MMZE ","M68N2RAXE ","M68N2RAYE ","M68N2RAZE ", & + "M68N2RDXE ","M68N2RDYE ","M68N2RDZE ","M68N2TAXE ","M68N2TAYE ","M68N2TAZE ","M68N2TDXSS", & + "M68N2TDYSS","M68N2TDZSS","M68N3FKXE ","M68N3FKYE ","M68N3FKZE ","M68N3FMXE ","M68N3FMYE ", & + "M68N3FMZE ","M68N3MKXE ","M68N3MKYE ","M68N3MKZE ","M68N3MMXE ","M68N3MMYE ","M68N3MMZE ", & + "M68N3RAXE ","M68N3RAYE ","M68N3RAZE ","M68N3RDXE ","M68N3RDYE ","M68N3RDZE ","M68N3TAXE ", & + "M68N3TAYE ","M68N3TAZE ","M68N3TDXSS","M68N3TDYSS","M68N3TDZSS","M68N4FKXE ","M68N4FKYE ", & + "M68N4FKZE ","M68N4FMXE ","M68N4FMYE ","M68N4FMZE ","M68N4MKXE ","M68N4MKYE ","M68N4MKZE ", & + "M68N4MMXE ","M68N4MMYE ","M68N4MMZE ","M68N4RAXE ","M68N4RAYE ","M68N4RAZE ","M68N4RDXE ", & + "M68N4RDYE ","M68N4RDZE ","M68N4TAXE ","M68N4TAYE ","M68N4TAZE ","M68N4TDXSS","M68N4TDYSS", & + "M68N4TDZSS","M68N5FKXE ","M68N5FKYE ","M68N5FKZE ","M68N5FMXE ","M68N5FMYE ","M68N5FMZE ", & + "M68N5MKXE ","M68N5MKYE ","M68N5MKZE ","M68N5MMXE ","M68N5MMYE ","M68N5MMZE ","M68N5RAXE ", & + "M68N5RAYE ","M68N5RAZE ","M68N5RDXE ","M68N5RDYE ","M68N5RDZE ","M68N5TAXE ","M68N5TAYE ", & + "M68N5TAZE ","M68N5TDXSS","M68N5TDYSS","M68N5TDZSS","M68N6FKXE ","M68N6FKYE ","M68N6FKZE ", & + "M68N6FMXE ","M68N6FMYE ","M68N6FMZE ","M68N6MKXE ","M68N6MKYE ","M68N6MKZE ","M68N6MMXE ", & + "M68N6MMYE ","M68N6MMZE ","M68N6RAXE ","M68N6RAYE ","M68N6RAZE ","M68N6RDXE ","M68N6RDYE ", & + "M68N6RDZE ","M68N6TAXE ","M68N6TAYE ","M68N6TAZE ","M68N6TDXSS","M68N6TDYSS","M68N6TDZSS", & + "M68N7FKXE ","M68N7FKYE ","M68N7FKZE ","M68N7FMXE ","M68N7FMYE ","M68N7FMZE ","M68N7MKXE ", & + "M68N7MKYE ","M68N7MKZE ","M68N7MMXE ","M68N7MMYE ","M68N7MMZE ","M68N7RAXE ","M68N7RAYE ", & + "M68N7RAZE ","M68N7RDXE ","M68N7RDYE ","M68N7RDZE ","M68N7TAXE ","M68N7TAYE ","M68N7TAZE ", & + "M68N7TDXSS","M68N7TDYSS","M68N7TDZSS","M68N8FKXE ","M68N8FKYE ","M68N8FKZE ","M68N8FMXE ", & + "M68N8FMYE ","M68N8FMZE ","M68N8MKXE ","M68N8MKYE ","M68N8MKZE ","M68N8MMXE ","M68N8MMYE ", & + "M68N8MMZE ","M68N8RAXE ","M68N8RAYE ","M68N8RAZE ","M68N8RDXE ","M68N8RDYE ","M68N8RDZE ", & + "M68N8TAXE ","M68N8TAYE ","M68N8TAZE ","M68N8TDXSS","M68N8TDYSS","M68N8TDZSS","M68N9FKXE ", & + "M68N9FKYE ","M68N9FKZE ","M68N9FMXE ","M68N9FMYE ","M68N9FMZE ","M68N9MKXE ","M68N9MKYE ", & + "M68N9MKZE ","M68N9MMXE ","M68N9MMYE ","M68N9MMZE ","M68N9RAXE ","M68N9RAYE ","M68N9RAZE ", & + "M68N9RDXE ","M68N9RDYE ","M68N9RDZE ","M68N9TAXE ","M68N9TAYE ","M68N9TAZE ","M68N9TDXSS", & + "M68N9TDYSS","M68N9TDZSS","M69N1FKXE ","M69N1FKYE ","M69N1FKZE ","M69N1FMXE ","M69N1FMYE ", & + "M69N1FMZE ","M69N1MKXE ","M69N1MKYE ","M69N1MKZE ","M69N1MMXE ","M69N1MMYE ","M69N1MMZE ", & + "M69N1RAXE ","M69N1RAYE ","M69N1RAZE ","M69N1RDXE ","M69N1RDYE ","M69N1RDZE ","M69N1TAXE ", & + "M69N1TAYE ","M69N1TAZE ","M69N1TDXSS","M69N1TDYSS","M69N1TDZSS","M69N2FKXE ","M69N2FKYE ", & + "M69N2FKZE ","M69N2FMXE ","M69N2FMYE ","M69N2FMZE ","M69N2MKXE ","M69N2MKYE ","M69N2MKZE ", & + "M69N2MMXE ","M69N2MMYE ","M69N2MMZE ","M69N2RAXE ","M69N2RAYE ","M69N2RAZE ","M69N2RDXE ", & + "M69N2RDYE ","M69N2RDZE ","M69N2TAXE ","M69N2TAYE ","M69N2TAZE ","M69N2TDXSS","M69N2TDYSS", & + "M69N2TDZSS","M69N3FKXE ","M69N3FKYE ","M69N3FKZE ","M69N3FMXE ","M69N3FMYE ","M69N3FMZE ", & + "M69N3MKXE ","M69N3MKYE ","M69N3MKZE ","M69N3MMXE ","M69N3MMYE ","M69N3MMZE ","M69N3RAXE ", & + "M69N3RAYE ","M69N3RAZE ","M69N3RDXE ","M69N3RDYE ","M69N3RDZE ","M69N3TAXE ","M69N3TAYE ", & + "M69N3TAZE ","M69N3TDXSS","M69N3TDYSS","M69N3TDZSS","M69N4FKXE ","M69N4FKYE ","M69N4FKZE ", & + "M69N4FMXE ","M69N4FMYE ","M69N4FMZE ","M69N4MKXE ","M69N4MKYE ","M69N4MKZE ","M69N4MMXE ", & + "M69N4MMYE ","M69N4MMZE ","M69N4RAXE ","M69N4RAYE ","M69N4RAZE ","M69N4RDXE ","M69N4RDYE ", & + "M69N4RDZE ","M69N4TAXE ","M69N4TAYE ","M69N4TAZE ","M69N4TDXSS","M69N4TDYSS","M69N4TDZSS", & + "M69N5FKXE ","M69N5FKYE ","M69N5FKZE ","M69N5FMXE ","M69N5FMYE ","M69N5FMZE ","M69N5MKXE ", & + "M69N5MKYE ","M69N5MKZE ","M69N5MMXE ","M69N5MMYE ","M69N5MMZE ","M69N5RAXE ","M69N5RAYE ", & + "M69N5RAZE ","M69N5RDXE ","M69N5RDYE ","M69N5RDZE ","M69N5TAXE ","M69N5TAYE ","M69N5TAZE ", & + "M69N5TDXSS","M69N5TDYSS","M69N5TDZSS","M69N6FKXE ","M69N6FKYE ","M69N6FKZE ","M69N6FMXE ", & + "M69N6FMYE ","M69N6FMZE ","M69N6MKXE ","M69N6MKYE ","M69N6MKZE ","M69N6MMXE ","M69N6MMYE ", & + "M69N6MMZE ","M69N6RAXE ","M69N6RAYE ","M69N6RAZE ","M69N6RDXE ","M69N6RDYE ","M69N6RDZE ", & + "M69N6TAXE ","M69N6TAYE ","M69N6TAZE ","M69N6TDXSS","M69N6TDYSS","M69N6TDZSS","M69N7FKXE ", & + "M69N7FKYE ","M69N7FKZE ","M69N7FMXE ","M69N7FMYE ","M69N7FMZE ","M69N7MKXE ","M69N7MKYE ", & + "M69N7MKZE ","M69N7MMXE ","M69N7MMYE ","M69N7MMZE ","M69N7RAXE ","M69N7RAYE ","M69N7RAZE ", & + "M69N7RDXE ","M69N7RDYE ","M69N7RDZE ","M69N7TAXE ","M69N7TAYE ","M69N7TAZE ","M69N7TDXSS", & + "M69N7TDYSS","M69N7TDZSS","M69N8FKXE ","M69N8FKYE ","M69N8FKZE ","M69N8FMXE ","M69N8FMYE ", & + "M69N8FMZE ","M69N8MKXE ","M69N8MKYE ","M69N8MKZE ","M69N8MMXE ","M69N8MMYE ","M69N8MMZE ", & + "M69N8RAXE ","M69N8RAYE ","M69N8RAZE ","M69N8RDXE ","M69N8RDYE ","M69N8RDZE ","M69N8TAXE ", & + "M69N8TAYE ","M69N8TAZE ","M69N8TDXSS","M69N8TDYSS","M69N8TDZSS","M69N9FKXE ","M69N9FKYE ", & + "M69N9FKZE ","M69N9FMXE ","M69N9FMYE ","M69N9FMZE ","M69N9MKXE ","M69N9MKYE ","M69N9MKZE ", & + "M69N9MMXE ","M69N9MMYE ","M69N9MMZE ","M69N9RAXE ","M69N9RAYE ","M69N9RAZE ","M69N9RDXE ", & + "M69N9RDYE ","M69N9RDZE ","M69N9TAXE ","M69N9TAYE ","M69N9TAZE ","M69N9TDXSS","M69N9TDYSS", & + "M69N9TDZSS","M70N1FKXE ","M70N1FKYE ","M70N1FKZE ","M70N1FMXE ","M70N1FMYE ","M70N1FMZE ", & + "M70N1MKXE ","M70N1MKYE ","M70N1MKZE ","M70N1MMXE ","M70N1MMYE ","M70N1MMZE ","M70N1RAXE ", & + "M70N1RAYE ","M70N1RAZE ","M70N1RDXE ","M70N1RDYE ","M70N1RDZE ","M70N1TAXE ","M70N1TAYE ", & + "M70N1TAZE ","M70N1TDXSS","M70N1TDYSS","M70N1TDZSS","M70N2FKXE ","M70N2FKYE ","M70N2FKZE ", & + "M70N2FMXE ","M70N2FMYE ","M70N2FMZE ","M70N2MKXE ","M70N2MKYE ","M70N2MKZE ","M70N2MMXE ", & + "M70N2MMYE ","M70N2MMZE ","M70N2RAXE ","M70N2RAYE ","M70N2RAZE ","M70N2RDXE ","M70N2RDYE ", & + "M70N2RDZE ","M70N2TAXE ","M70N2TAYE ","M70N2TAZE ","M70N2TDXSS","M70N2TDYSS","M70N2TDZSS", & + "M70N3FKXE ","M70N3FKYE ","M70N3FKZE ","M70N3FMXE ","M70N3FMYE ","M70N3FMZE ","M70N3MKXE ", & + "M70N3MKYE ","M70N3MKZE ","M70N3MMXE ","M70N3MMYE ","M70N3MMZE ","M70N3RAXE ","M70N3RAYE ", & + "M70N3RAZE ","M70N3RDXE ","M70N3RDYE ","M70N3RDZE ","M70N3TAXE ","M70N3TAYE ","M70N3TAZE ", & + "M70N3TDXSS","M70N3TDYSS","M70N3TDZSS","M70N4FKXE ","M70N4FKYE ","M70N4FKZE ","M70N4FMXE ", & + "M70N4FMYE ","M70N4FMZE ","M70N4MKXE ","M70N4MKYE ","M70N4MKZE ","M70N4MMXE ","M70N4MMYE ", & + "M70N4MMZE ","M70N4RAXE ","M70N4RAYE ","M70N4RAZE ","M70N4RDXE ","M70N4RDYE ","M70N4RDZE ", & + "M70N4TAXE ","M70N4TAYE ","M70N4TAZE ","M70N4TDXSS","M70N4TDYSS","M70N4TDZSS","M70N5FKXE ", & + "M70N5FKYE ","M70N5FKZE ","M70N5FMXE ","M70N5FMYE ","M70N5FMZE ","M70N5MKXE ","M70N5MKYE ", & + "M70N5MKZE ","M70N5MMXE ","M70N5MMYE ","M70N5MMZE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry10(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M70N5RAXE ","M70N5RAYE ","M70N5RAZE ","M70N5RDXE ","M70N5RDYE ","M70N5RDZE ","M70N5TAXE ", & + "M70N5TAYE ","M70N5TAZE ","M70N5TDXSS","M70N5TDYSS","M70N5TDZSS","M70N6FKXE ","M70N6FKYE ", & + "M70N6FKZE ","M70N6FMXE ","M70N6FMYE ","M70N6FMZE ","M70N6MKXE ","M70N6MKYE ","M70N6MKZE ", & + "M70N6MMXE ","M70N6MMYE ","M70N6MMZE ","M70N6RAXE ","M70N6RAYE ","M70N6RAZE ","M70N6RDXE ", & + "M70N6RDYE ","M70N6RDZE ","M70N6TAXE ","M70N6TAYE ","M70N6TAZE ","M70N6TDXSS","M70N6TDYSS", & + "M70N6TDZSS","M70N7FKXE ","M70N7FKYE ","M70N7FKZE ","M70N7FMXE ","M70N7FMYE ","M70N7FMZE ", & + "M70N7MKXE ","M70N7MKYE ","M70N7MKZE ","M70N7MMXE ","M70N7MMYE ","M70N7MMZE ","M70N7RAXE ", & + "M70N7RAYE ","M70N7RAZE ","M70N7RDXE ","M70N7RDYE ","M70N7RDZE ","M70N7TAXE ","M70N7TAYE ", & + "M70N7TAZE ","M70N7TDXSS","M70N7TDYSS","M70N7TDZSS","M70N8FKXE ","M70N8FKYE ","M70N8FKZE ", & + "M70N8FMXE ","M70N8FMYE ","M70N8FMZE ","M70N8MKXE ","M70N8MKYE ","M70N8MKZE ","M70N8MMXE ", & + "M70N8MMYE ","M70N8MMZE ","M70N8RAXE ","M70N8RAYE ","M70N8RAZE ","M70N8RDXE ","M70N8RDYE ", & + "M70N8RDZE ","M70N8TAXE ","M70N8TAYE ","M70N8TAZE ","M70N8TDXSS","M70N8TDYSS","M70N8TDZSS", & + "M70N9FKXE ","M70N9FKYE ","M70N9FKZE ","M70N9FMXE ","M70N9FMYE ","M70N9FMZE ","M70N9MKXE ", & + "M70N9MKYE ","M70N9MKZE ","M70N9MMXE ","M70N9MMYE ","M70N9MMZE ","M70N9RAXE ","M70N9RAYE ", & + "M70N9RAZE ","M70N9RDXE ","M70N9RDYE ","M70N9RDZE ","M70N9TAXE ","M70N9TAYE ","M70N9TAZE ", & + "M70N9TDXSS","M70N9TDYSS","M70N9TDZSS","M71N1FKXE ","M71N1FKYE ","M71N1FKZE ","M71N1FMXE ", & + "M71N1FMYE ","M71N1FMZE ","M71N1MKXE ","M71N1MKYE ","M71N1MKZE ","M71N1MMXE ","M71N1MMYE ", & + "M71N1MMZE ","M71N1RAXE ","M71N1RAYE ","M71N1RAZE ","M71N1RDXE ","M71N1RDYE ","M71N1RDZE ", & + "M71N1TAXE ","M71N1TAYE ","M71N1TAZE ","M71N1TDXSS","M71N1TDYSS","M71N1TDZSS","M71N2FKXE ", & + "M71N2FKYE ","M71N2FKZE ","M71N2FMXE ","M71N2FMYE ","M71N2FMZE ","M71N2MKXE ","M71N2MKYE ", & + "M71N2MKZE ","M71N2MMXE ","M71N2MMYE ","M71N2MMZE ","M71N2RAXE ","M71N2RAYE ","M71N2RAZE ", & + "M71N2RDXE ","M71N2RDYE ","M71N2RDZE ","M71N2TAXE ","M71N2TAYE ","M71N2TAZE ","M71N2TDXSS", & + "M71N2TDYSS","M71N2TDZSS","M71N3FKXE ","M71N3FKYE ","M71N3FKZE ","M71N3FMXE ","M71N3FMYE ", & + "M71N3FMZE ","M71N3MKXE ","M71N3MKYE ","M71N3MKZE ","M71N3MMXE ","M71N3MMYE ","M71N3MMZE ", & + "M71N3RAXE ","M71N3RAYE ","M71N3RAZE ","M71N3RDXE ","M71N3RDYE ","M71N3RDZE ","M71N3TAXE ", & + "M71N3TAYE ","M71N3TAZE ","M71N3TDXSS","M71N3TDYSS","M71N3TDZSS","M71N4FKXE ","M71N4FKYE ", & + "M71N4FKZE ","M71N4FMXE ","M71N4FMYE ","M71N4FMZE ","M71N4MKXE ","M71N4MKYE ","M71N4MKZE ", & + "M71N4MMXE ","M71N4MMYE ","M71N4MMZE ","M71N4RAXE ","M71N4RAYE ","M71N4RAZE ","M71N4RDXE ", & + "M71N4RDYE ","M71N4RDZE ","M71N4TAXE ","M71N4TAYE ","M71N4TAZE ","M71N4TDXSS","M71N4TDYSS", & + "M71N4TDZSS","M71N5FKXE ","M71N5FKYE ","M71N5FKZE ","M71N5FMXE ","M71N5FMYE ","M71N5FMZE ", & + "M71N5MKXE ","M71N5MKYE ","M71N5MKZE ","M71N5MMXE ","M71N5MMYE ","M71N5MMZE ","M71N5RAXE ", & + "M71N5RAYE ","M71N5RAZE ","M71N5RDXE ","M71N5RDYE ","M71N5RDZE ","M71N5TAXE ","M71N5TAYE ", & + "M71N5TAZE ","M71N5TDXSS","M71N5TDYSS","M71N5TDZSS","M71N6FKXE ","M71N6FKYE ","M71N6FKZE ", & + "M71N6FMXE ","M71N6FMYE ","M71N6FMZE ","M71N6MKXE ","M71N6MKYE ","M71N6MKZE ","M71N6MMXE ", & + "M71N6MMYE ","M71N6MMZE ","M71N6RAXE ","M71N6RAYE ","M71N6RAZE ","M71N6RDXE ","M71N6RDYE ", & + "M71N6RDZE ","M71N6TAXE ","M71N6TAYE ","M71N6TAZE ","M71N6TDXSS","M71N6TDYSS","M71N6TDZSS", & + "M71N7FKXE ","M71N7FKYE ","M71N7FKZE ","M71N7FMXE ","M71N7FMYE ","M71N7FMZE ","M71N7MKXE ", & + "M71N7MKYE ","M71N7MKZE ","M71N7MMXE ","M71N7MMYE ","M71N7MMZE ","M71N7RAXE ","M71N7RAYE ", & + "M71N7RAZE ","M71N7RDXE ","M71N7RDYE ","M71N7RDZE ","M71N7TAXE ","M71N7TAYE ","M71N7TAZE ", & + "M71N7TDXSS","M71N7TDYSS","M71N7TDZSS","M71N8FKXE ","M71N8FKYE ","M71N8FKZE ","M71N8FMXE ", & + "M71N8FMYE ","M71N8FMZE ","M71N8MKXE ","M71N8MKYE ","M71N8MKZE ","M71N8MMXE ","M71N8MMYE ", & + "M71N8MMZE ","M71N8RAXE ","M71N8RAYE ","M71N8RAZE ","M71N8RDXE ","M71N8RDYE ","M71N8RDZE ", & + "M71N8TAXE ","M71N8TAYE ","M71N8TAZE ","M71N8TDXSS","M71N8TDYSS","M71N8TDZSS","M71N9FKXE ", & + "M71N9FKYE ","M71N9FKZE ","M71N9FMXE ","M71N9FMYE ","M71N9FMZE ","M71N9MKXE ","M71N9MKYE ", & + "M71N9MKZE ","M71N9MMXE ","M71N9MMYE ","M71N9MMZE ","M71N9RAXE ","M71N9RAYE ","M71N9RAZE ", & + "M71N9RDXE ","M71N9RDYE ","M71N9RDZE ","M71N9TAXE ","M71N9TAYE ","M71N9TAZE ","M71N9TDXSS", & + "M71N9TDYSS","M71N9TDZSS","M72N1FKXE ","M72N1FKYE ","M72N1FKZE ","M72N1FMXE ","M72N1FMYE ", & + "M72N1FMZE ","M72N1MKXE ","M72N1MKYE ","M72N1MKZE ","M72N1MMXE ","M72N1MMYE ","M72N1MMZE ", & + "M72N1RAXE ","M72N1RAYE ","M72N1RAZE ","M72N1RDXE ","M72N1RDYE ","M72N1RDZE ","M72N1TAXE ", & + "M72N1TAYE ","M72N1TAZE ","M72N1TDXSS","M72N1TDYSS","M72N1TDZSS","M72N2FKXE ","M72N2FKYE ", & + "M72N2FKZE ","M72N2FMXE ","M72N2FMYE ","M72N2FMZE ","M72N2MKXE ","M72N2MKYE ","M72N2MKZE ", & + "M72N2MMXE ","M72N2MMYE ","M72N2MMZE ","M72N2RAXE ","M72N2RAYE ","M72N2RAZE ","M72N2RDXE ", & + "M72N2RDYE ","M72N2RDZE ","M72N2TAXE ","M72N2TAYE ","M72N2TAZE ","M72N2TDXSS","M72N2TDYSS", & + "M72N2TDZSS","M72N3FKXE ","M72N3FKYE ","M72N3FKZE ","M72N3FMXE ","M72N3FMYE ","M72N3FMZE ", & + "M72N3MKXE ","M72N3MKYE ","M72N3MKZE ","M72N3MMXE ","M72N3MMYE ","M72N3MMZE ","M72N3RAXE ", & + "M72N3RAYE ","M72N3RAZE ","M72N3RDXE ","M72N3RDYE ","M72N3RDZE ","M72N3TAXE ","M72N3TAYE ", & + "M72N3TAZE ","M72N3TDXSS","M72N3TDYSS","M72N3TDZSS","M72N4FKXE ","M72N4FKYE ","M72N4FKZE ", & + "M72N4FMXE ","M72N4FMYE ","M72N4FMZE ","M72N4MKXE ","M72N4MKYE ","M72N4MKZE ","M72N4MMXE ", & + "M72N4MMYE ","M72N4MMZE ","M72N4RAXE ","M72N4RAYE ","M72N4RAZE ","M72N4RDXE ","M72N4RDYE ", & + "M72N4RDZE ","M72N4TAXE ","M72N4TAYE ","M72N4TAZE ","M72N4TDXSS","M72N4TDYSS","M72N4TDZSS", & + "M72N5FKXE ","M72N5FKYE ","M72N5FKZE ","M72N5FMXE ","M72N5FMYE ","M72N5FMZE ","M72N5MKXE ", & + "M72N5MKYE ","M72N5MKZE ","M72N5MMXE ","M72N5MMYE ","M72N5MMZE ","M72N5RAXE ","M72N5RAYE ", & + "M72N5RAZE ","M72N5RDXE ","M72N5RDYE ","M72N5RDZE ","M72N5TAXE ","M72N5TAYE ","M72N5TAZE ", & + "M72N5TDXSS","M72N5TDYSS","M72N5TDZSS","M72N6FKXE ","M72N6FKYE ","M72N6FKZE ","M72N6FMXE ", & + "M72N6FMYE ","M72N6FMZE ","M72N6MKXE ","M72N6MKYE ","M72N6MKZE ","M72N6MMXE ","M72N6MMYE ", & + "M72N6MMZE ","M72N6RAXE ","M72N6RAYE ","M72N6RAZE ","M72N6RDXE ","M72N6RDYE ","M72N6RDZE ", & + "M72N6TAXE ","M72N6TAYE ","M72N6TAZE ","M72N6TDXSS","M72N6TDYSS","M72N6TDZSS","M72N7FKXE ", & + "M72N7FKYE ","M72N7FKZE ","M72N7FMXE ","M72N7FMYE ","M72N7FMZE ","M72N7MKXE ","M72N7MKYE ", & + "M72N7MKZE ","M72N7MMXE ","M72N7MMYE ","M72N7MMZE ","M72N7RAXE ","M72N7RAYE ","M72N7RAZE ", & + "M72N7RDXE ","M72N7RDYE ","M72N7RDZE ","M72N7TAXE ","M72N7TAYE ","M72N7TAZE ","M72N7TDXSS", & + "M72N7TDYSS","M72N7TDZSS","M72N8FKXE ","M72N8FKYE ","M72N8FKZE ","M72N8FMXE ","M72N8FMYE ", & + "M72N8FMZE ","M72N8MKXE ","M72N8MKYE ","M72N8MKZE ","M72N8MMXE ","M72N8MMYE ","M72N8MMZE ", & + "M72N8RAXE ","M72N8RAYE ","M72N8RAZE ","M72N8RDXE ","M72N8RDYE ","M72N8RDZE ","M72N8TAXE ", & + "M72N8TAYE ","M72N8TAZE ","M72N8TDXSS","M72N8TDYSS","M72N8TDZSS","M72N9FKXE ","M72N9FKYE ", & + "M72N9FKZE ","M72N9FMXE ","M72N9FMYE ","M72N9FMZE ","M72N9MKXE ","M72N9MKYE ","M72N9MKZE ", & + "M72N9MMXE ","M72N9MMYE ","M72N9MMZE ","M72N9RAXE ","M72N9RAYE ","M72N9RAZE ","M72N9RDXE ", & + "M72N9RDYE ","M72N9RDZE ","M72N9TAXE ","M72N9TAYE ","M72N9TAZE ","M72N9TDXSS","M72N9TDYSS", & + "M72N9TDZSS","M73N1FKXE ","M73N1FKYE ","M73N1FKZE ","M73N1FMXE ","M73N1FMYE ","M73N1FMZE ", & + "M73N1MKXE ","M73N1MKYE ","M73N1MKZE ","M73N1MMXE ","M73N1MMYE ","M73N1MMZE ","M73N1RAXE ", & + "M73N1RAYE ","M73N1RAZE ","M73N1RDXE ","M73N1RDYE ","M73N1RDZE ","M73N1TAXE ","M73N1TAYE ", & + "M73N1TAZE ","M73N1TDXSS","M73N1TDYSS","M73N1TDZSS","M73N2FKXE ","M73N2FKYE ","M73N2FKZE ", & + "M73N2FMXE ","M73N2FMYE ","M73N2FMZE ","M73N2MKXE ","M73N2MKYE ","M73N2MKZE ","M73N2MMXE ", & + "M73N2MMYE ","M73N2MMZE ","M73N2RAXE ","M73N2RAYE ","M73N2RAZE ","M73N2RDXE ","M73N2RDYE ", & + "M73N2RDZE ","M73N2TAXE ","M73N2TAYE ","M73N2TAZE ","M73N2TDXSS","M73N2TDYSS","M73N2TDZSS", & + "M73N3FKXE ","M73N3FKYE ","M73N3FKZE ","M73N3FMXE ","M73N3FMYE ","M73N3FMZE ","M73N3MKXE ", & + "M73N3MKYE ","M73N3MKZE ","M73N3MMXE ","M73N3MMYE ","M73N3MMZE ","M73N3RAXE ","M73N3RAYE ", & + "M73N3RAZE ","M73N3RDXE ","M73N3RDYE ","M73N3RDZE ","M73N3TAXE ","M73N3TAYE ","M73N3TAZE ", & + "M73N3TDXSS","M73N3TDYSS","M73N3TDZSS","M73N4FKXE ","M73N4FKYE ","M73N4FKZE ","M73N4FMXE ", & + "M73N4FMYE ","M73N4FMZE ","M73N4MKXE ","M73N4MKYE ","M73N4MKZE ","M73N4MMXE ","M73N4MMYE ", & + "M73N4MMZE ","M73N4RAXE ","M73N4RAYE ","M73N4RAZE ","M73N4RDXE ","M73N4RDYE ","M73N4RDZE ", & + "M73N4TAXE ","M73N4TAYE ","M73N4TAZE ","M73N4TDXSS","M73N4TDYSS","M73N4TDZSS","M73N5FKXE ", & + "M73N5FKYE ","M73N5FKZE ","M73N5FMXE ","M73N5FMYE ","M73N5FMZE ","M73N5MKXE ","M73N5MKYE ", & + "M73N5MKZE ","M73N5MMXE ","M73N5MMYE ","M73N5MMZE ","M73N5RAXE ","M73N5RAYE ","M73N5RAZE ", & + "M73N5RDXE ","M73N5RDYE ","M73N5RDZE ","M73N5TAXE ","M73N5TAYE ","M73N5TAZE ","M73N5TDXSS", & + "M73N5TDYSS","M73N5TDZSS","M73N6FKXE ","M73N6FKYE ","M73N6FKZE ","M73N6FMXE ","M73N6FMYE ", & + "M73N6FMZE ","M73N6MKXE ","M73N6MKYE ","M73N6MKZE ","M73N6MMXE ","M73N6MMYE ","M73N6MMZE ", & + "M73N6RAXE ","M73N6RAYE ","M73N6RAZE ","M73N6RDXE ","M73N6RDYE ","M73N6RDZE ","M73N6TAXE ", & + "M73N6TAYE ","M73N6TAZE ","M73N6TDXSS","M73N6TDYSS","M73N6TDZSS","M73N7FKXE ","M73N7FKYE ", & + "M73N7FKZE ","M73N7FMXE ","M73N7FMYE ","M73N7FMZE ","M73N7MKXE ","M73N7MKYE ","M73N7MKZE ", & + "M73N7MMXE ","M73N7MMYE ","M73N7MMZE ","M73N7RAXE ","M73N7RAYE ","M73N7RAZE ","M73N7RDXE ", & + "M73N7RDYE ","M73N7RDZE ","M73N7TAXE ","M73N7TAYE ","M73N7TAZE ","M73N7TDXSS","M73N7TDYSS", & + "M73N7TDZSS","M73N8FKXE ","M73N8FKYE ","M73N8FKZE ","M73N8FMXE ","M73N8FMYE ","M73N8FMZE ", & + "M73N8MKXE ","M73N8MKYE ","M73N8MKZE ","M73N8MMXE ","M73N8MMYE ","M73N8MMZE ","M73N8RAXE ", & + "M73N8RAYE ","M73N8RAZE ","M73N8RDXE ","M73N8RDYE ","M73N8RDZE ","M73N8TAXE ","M73N8TAYE ", & + "M73N8TAZE ","M73N8TDXSS","M73N8TDYSS","M73N8TDZSS","M73N9FKXE ","M73N9FKYE ","M73N9FKZE ", & + "M73N9FMXE ","M73N9FMYE ","M73N9FMZE ","M73N9MKXE ","M73N9MKYE ","M73N9MKZE ","M73N9MMXE ", & + "M73N9MMYE ","M73N9MMZE ","M73N9RAXE ","M73N9RAYE ","M73N9RAZE ","M73N9RDXE ","M73N9RDYE ", & + "M73N9RDZE ","M73N9TAXE ","M73N9TAYE ","M73N9TAZE ","M73N9TDXSS","M73N9TDYSS","M73N9TDZSS", & + "M74N1FKXE ","M74N1FKYE ","M74N1FKZE ","M74N1FMXE ","M74N1FMYE ","M74N1FMZE ","M74N1MKXE ", & + "M74N1MKYE ","M74N1MKZE ","M74N1MMXE ","M74N1MMYE ","M74N1MMZE ","M74N1RAXE ","M74N1RAYE ", & + "M74N1RAZE ","M74N1RDXE ","M74N1RDYE ","M74N1RDZE ","M74N1TAXE ","M74N1TAYE ","M74N1TAZE ", & + "M74N1TDXSS","M74N1TDYSS","M74N1TDZSS","M74N2FKXE ","M74N2FKYE ","M74N2FKZE ","M74N2FMXE ", & + "M74N2FMYE ","M74N2FMZE ","M74N2MKXE ","M74N2MKYE ","M74N2MKZE ","M74N2MMXE ","M74N2MMYE ", & + "M74N2MMZE ","M74N2RAXE ","M74N2RAYE ","M74N2RAZE ","M74N2RDXE ","M74N2RDYE ","M74N2RDZE ", & + "M74N2TAXE ","M74N2TAYE ","M74N2TAZE ","M74N2TDXSS","M74N2TDYSS","M74N2TDZSS","M74N3FKXE ", & + "M74N3FKYE ","M74N3FKZE ","M74N3FMXE ","M74N3FMYE ","M74N3FMZE ","M74N3MKXE ","M74N3MKYE ", & + "M74N3MKZE ","M74N3MMXE ","M74N3MMYE ","M74N3MMZE ","M74N3RAXE ","M74N3RAYE ","M74N3RAZE ", & + "M74N3RDXE ","M74N3RDYE ","M74N3RDZE ","M74N3TAXE ","M74N3TAYE ","M74N3TAZE ","M74N3TDXSS", & + "M74N3TDYSS","M74N3TDZSS","M74N4FKXE ","M74N4FKYE ","M74N4FKZE ","M74N4FMXE ","M74N4FMYE ", & + "M74N4FMZE ","M74N4MKXE ","M74N4MKYE ","M74N4MKZE ","M74N4MMXE ","M74N4MMYE ","M74N4MMZE ", & + "M74N4RAXE ","M74N4RAYE ","M74N4RAZE ","M74N4RDXE ","M74N4RDYE ","M74N4RDZE ","M74N4TAXE ", & + "M74N4TAYE ","M74N4TAZE ","M74N4TDXSS","M74N4TDYSS","M74N4TDZSS","M74N5FKXE ","M74N5FKYE ", & + "M74N5FKZE ","M74N5FMXE ","M74N5FMYE ","M74N5FMZE ","M74N5MKXE ","M74N5MKYE ","M74N5MKZE ", & + "M74N5MMXE ","M74N5MMYE ","M74N5MMZE ","M74N5RAXE ","M74N5RAYE ","M74N5RAZE ","M74N5RDXE ", & + "M74N5RDYE ","M74N5RDZE ","M74N5TAXE ","M74N5TAYE ","M74N5TAZE ","M74N5TDXSS","M74N5TDYSS", & + "M74N5TDZSS","M74N6FKXE ","M74N6FKYE ","M74N6FKZE ","M74N6FMXE ","M74N6FMYE ","M74N6FMZE ", & + "M74N6MKXE ","M74N6MKYE ","M74N6MKZE ","M74N6MMXE ","M74N6MMYE ","M74N6MMZE ","M74N6RAXE ", & + "M74N6RAYE ","M74N6RAZE ","M74N6RDXE ","M74N6RDYE ","M74N6RDZE ","M74N6TAXE ","M74N6TAYE ", & + "M74N6TAZE ","M74N6TDXSS","M74N6TDYSS","M74N6TDZSS","M74N7FKXE ","M74N7FKYE ","M74N7FKZE ", & + "M74N7FMXE ","M74N7FMYE ","M74N7FMZE ","M74N7MKXE ","M74N7MKYE ","M74N7MKZE ","M74N7MMXE ", & + "M74N7MMYE ","M74N7MMZE ","M74N7RAXE ","M74N7RAYE ","M74N7RAZE ","M74N7RDXE ","M74N7RDYE ", & + "M74N7RDZE ","M74N7TAXE ","M74N7TAYE ","M74N7TAZE ","M74N7TDXSS","M74N7TDYSS","M74N7TDZSS", & + "M74N8FKXE ","M74N8FKYE ","M74N8FKZE ","M74N8FMXE ","M74N8FMYE ","M74N8FMZE ","M74N8MKXE ", & + "M74N8MKYE ","M74N8MKZE ","M74N8MMXE ","M74N8MMYE ","M74N8MMZE ","M74N8RAXE ","M74N8RAYE ", & + "M74N8RAZE ","M74N8RDXE ","M74N8RDYE ","M74N8RDZE ","M74N8TAXE ","M74N8TAYE ","M74N8TAZE ", & + "M74N8TDXSS","M74N8TDYSS","M74N8TDZSS","M74N9FKXE ","M74N9FKYE ","M74N9FKZE ","M74N9FMXE ", & + "M74N9FMYE ","M74N9FMZE ","M74N9MKXE ","M74N9MKYE ","M74N9MKZE ","M74N9MMXE ","M74N9MMYE ", & + "M74N9MMZE ","M74N9RAXE ","M74N9RAYE ","M74N9RAZE ","M74N9RDXE ","M74N9RDYE ","M74N9RDZE ", & + "M74N9TAXE ","M74N9TAYE ","M74N9TAZE ","M74N9TDXSS","M74N9TDYSS","M74N9TDZSS","M75N1FKXE ", & + "M75N1FKYE ","M75N1FKZE ","M75N1FMXE ","M75N1FMYE ","M75N1FMZE ","M75N1MKXE ","M75N1MKYE ", & + "M75N1MKZE ","M75N1MMXE ","M75N1MMYE ","M75N1MMZE ","M75N1RAXE ","M75N1RAYE ","M75N1RAZE ", & + "M75N1RDXE ","M75N1RDYE ","M75N1RDZE ","M75N1TAXE ","M75N1TAYE ","M75N1TAZE ","M75N1TDXSS", & + "M75N1TDYSS","M75N1TDZSS","M75N2FKXE ","M75N2FKYE ","M75N2FKZE ","M75N2FMXE ","M75N2FMYE ", & + "M75N2FMZE ","M75N2MKXE ","M75N2MKYE ","M75N2MKZE ","M75N2MMXE ","M75N2MMYE ","M75N2MMZE ", & + "M75N2RAXE ","M75N2RAYE ","M75N2RAZE ","M75N2RDXE ","M75N2RDYE ","M75N2RDZE ","M75N2TAXE ", & + "M75N2TAYE ","M75N2TAZE ","M75N2TDXSS","M75N2TDYSS","M75N2TDZSS","M75N3FKXE ","M75N3FKYE ", & + "M75N3FKZE ","M75N3FMXE ","M75N3FMYE ","M75N3FMZE ","M75N3MKXE ","M75N3MKYE ","M75N3MKZE ", & + "M75N3MMXE ","M75N3MMYE ","M75N3MMZE ","M75N3RAXE ","M75N3RAYE ","M75N3RAZE ","M75N3RDXE ", & + "M75N3RDYE ","M75N3RDZE ","M75N3TAXE ","M75N3TAYE ","M75N3TAZE ","M75N3TDXSS","M75N3TDYSS", & + "M75N3TDZSS","M75N4FKXE ","M75N4FKYE ","M75N4FKZE ","M75N4FMXE ","M75N4FMYE ","M75N4FMZE ", & + "M75N4MKXE ","M75N4MKYE ","M75N4MKZE ","M75N4MMXE ","M75N4MMYE ","M75N4MMZE ","M75N4RAXE ", & + "M75N4RAYE ","M75N4RAZE ","M75N4RDXE ","M75N4RDYE ","M75N4RDZE ","M75N4TAXE ","M75N4TAYE ", & + "M75N4TAZE ","M75N4TDXSS","M75N4TDYSS","M75N4TDZSS","M75N5FKXE ","M75N5FKYE ","M75N5FKZE ", & + "M75N5FMXE ","M75N5FMYE ","M75N5FMZE ","M75N5MKXE ","M75N5MKYE ","M75N5MKZE ","M75N5MMXE ", & + "M75N5MMYE ","M75N5MMZE ","M75N5RAXE ","M75N5RAYE ","M75N5RAZE ","M75N5RDXE ","M75N5RDYE ", & + "M75N5RDZE ","M75N5TAXE ","M75N5TAYE ","M75N5TAZE ","M75N5TDXSS","M75N5TDYSS","M75N5TDZSS", & + "M75N6FKXE ","M75N6FKYE ","M75N6FKZE ","M75N6FMXE ","M75N6FMYE ","M75N6FMZE ","M75N6MKXE ", & + "M75N6MKYE ","M75N6MKZE ","M75N6MMXE ","M75N6MMYE ","M75N6MMZE ","M75N6RAXE ","M75N6RAYE ", & + "M75N6RAZE ","M75N6RDXE ","M75N6RDYE ","M75N6RDZE ","M75N6TAXE ","M75N6TAYE ","M75N6TAZE ", & + "M75N6TDXSS","M75N6TDYSS","M75N6TDZSS","M75N7FKXE ","M75N7FKYE ","M75N7FKZE ","M75N7FMXE ", & + "M75N7FMYE ","M75N7FMZE ","M75N7MKXE ","M75N7MKYE ","M75N7MKZE ","M75N7MMXE ","M75N7MMYE ", & + "M75N7MMZE ","M75N7RAXE ","M75N7RAYE ","M75N7RAZE ","M75N7RDXE ","M75N7RDYE ","M75N7RDZE ", & + "M75N7TAXE ","M75N7TAYE ","M75N7TAZE ","M75N7TDXSS","M75N7TDYSS","M75N7TDZSS","M75N8FKXE ", & + "M75N8FKYE ","M75N8FKZE ","M75N8FMXE ","M75N8FMYE ","M75N8FMZE ","M75N8MKXE ","M75N8MKYE ", & + "M75N8MKZE ","M75N8MMXE ","M75N8MMYE ","M75N8MMZE ","M75N8RAXE ","M75N8RAYE ","M75N8RAZE ", & + "M75N8RDXE ","M75N8RDYE ","M75N8RDZE ","M75N8TAXE ","M75N8TAYE ","M75N8TAZE ","M75N8TDXSS", & + "M75N8TDYSS","M75N8TDZSS","M75N9FKXE ","M75N9FKYE ","M75N9FKZE ","M75N9FMXE ","M75N9FMYE ", & + "M75N9FMZE ","M75N9MKXE ","M75N9MKYE ","M75N9MKZE ","M75N9MMXE ","M75N9MMYE ","M75N9MMZE ", & + "M75N9RAXE ","M75N9RAYE ","M75N9RAZE ","M75N9RDXE ","M75N9RDYE ","M75N9RDZE ","M75N9TAXE ", & + "M75N9TAYE ","M75N9TAZE ","M75N9TDXSS","M75N9TDYSS","M75N9TDZSS","M76N1FKXE ","M76N1FKYE ", & + "M76N1FKZE ","M76N1FMXE ","M76N1FMYE ","M76N1FMZE ","M76N1MKXE ","M76N1MKYE ","M76N1MKZE ", & + "M76N1MMXE ","M76N1MMYE ","M76N1MMZE ","M76N1RAXE ","M76N1RAYE ","M76N1RAZE ","M76N1RDXE ", & + "M76N1RDYE ","M76N1RDZE ","M76N1TAXE ","M76N1TAYE ","M76N1TAZE ","M76N1TDXSS","M76N1TDYSS", & + "M76N1TDZSS","M76N2FKXE ","M76N2FKYE ","M76N2FKZE ","M76N2FMXE ","M76N2FMYE ","M76N2FMZE ", & + "M76N2MKXE ","M76N2MKYE ","M76N2MKZE ","M76N2MMXE ","M76N2MMYE ","M76N2MMZE ","M76N2RAXE ", & + "M76N2RAYE ","M76N2RAZE ","M76N2RDXE ","M76N2RDYE ","M76N2RDZE ","M76N2TAXE ","M76N2TAYE ", & + "M76N2TAZE ","M76N2TDXSS","M76N2TDYSS","M76N2TDZSS","M76N3FKXE ","M76N3FKYE ","M76N3FKZE ", & + "M76N3FMXE ","M76N3FMYE ","M76N3FMZE ","M76N3MKXE ","M76N3MKYE ","M76N3MKZE ","M76N3MMXE ", & + "M76N3MMYE ","M76N3MMZE ","M76N3RAXE ","M76N3RAYE ","M76N3RAZE ","M76N3RDXE ","M76N3RDYE ", & + "M76N3RDZE ","M76N3TAXE ","M76N3TAYE ","M76N3TAZE ","M76N3TDXSS","M76N3TDYSS","M76N3TDZSS", & + "M76N4FKXE ","M76N4FKYE ","M76N4FKZE ","M76N4FMXE ","M76N4FMYE ","M76N4FMZE ","M76N4MKXE ", & + "M76N4MKYE ","M76N4MKZE ","M76N4MMXE ","M76N4MMYE ","M76N4MMZE ","M76N4RAXE ","M76N4RAYE ", & + "M76N4RAZE ","M76N4RDXE ","M76N4RDYE ","M76N4RDZE ","M76N4TAXE ","M76N4TAYE ","M76N4TAZE ", & + "M76N4TDXSS","M76N4TDYSS","M76N4TDZSS","M76N5FKXE ","M76N5FKYE ","M76N5FKZE ","M76N5FMXE ", & + "M76N5FMYE ","M76N5FMZE ","M76N5MKXE ","M76N5MKYE ","M76N5MKZE ","M76N5MMXE ","M76N5MMYE ", & + "M76N5MMZE ","M76N5RAXE ","M76N5RAYE ","M76N5RAZE ","M76N5RDXE ","M76N5RDYE ","M76N5RDZE ", & + "M76N5TAXE ","M76N5TAYE ","M76N5TAZE ","M76N5TDXSS","M76N5TDYSS","M76N5TDZSS","M76N6FKXE ", & + "M76N6FKYE ","M76N6FKZE ","M76N6FMXE ","M76N6FMYE ","M76N6FMZE ","M76N6MKXE ","M76N6MKYE ", & + "M76N6MKZE ","M76N6MMXE ","M76N6MMYE ","M76N6MMZE ","M76N6RAXE ","M76N6RAYE ","M76N6RAZE ", & + "M76N6RDXE ","M76N6RDYE ","M76N6RDZE ","M76N6TAXE ","M76N6TAYE ","M76N6TAZE ","M76N6TDXSS", & + "M76N6TDYSS","M76N6TDZSS","M76N7FKXE ","M76N7FKYE ","M76N7FKZE ","M76N7FMXE ","M76N7FMYE ", & + "M76N7FMZE ","M76N7MKXE ","M76N7MKYE ","M76N7MKZE ","M76N7MMXE ","M76N7MMYE ","M76N7MMZE ", & + "M76N7RAXE ","M76N7RAYE ","M76N7RAZE ","M76N7RDXE ","M76N7RDYE ","M76N7RDZE ","M76N7TAXE ", & + "M76N7TAYE ","M76N7TAZE ","M76N7TDXSS","M76N7TDYSS","M76N7TDZSS","M76N8FKXE ","M76N8FKYE ", & + "M76N8FKZE ","M76N8FMXE ","M76N8FMYE ","M76N8FMZE ","M76N8MKXE ","M76N8MKYE ","M76N8MKZE ", & + "M76N8MMXE ","M76N8MMYE ","M76N8MMZE ","M76N8RAXE ","M76N8RAYE ","M76N8RAZE ","M76N8RDXE ", & + "M76N8RDYE ","M76N8RDZE ","M76N8TAXE ","M76N8TAYE ","M76N8TAZE ","M76N8TDXSS","M76N8TDYSS", & + "M76N8TDZSS","M76N9FKXE ","M76N9FKYE ","M76N9FKZE ","M76N9FMXE ","M76N9FMYE ","M76N9FMZE ", & + "M76N9MKXE ","M76N9MKYE ","M76N9MKZE ","M76N9MMXE ","M76N9MMYE ","M76N9MMZE ","M76N9RAXE ", & + "M76N9RAYE ","M76N9RAZE ","M76N9RDXE ","M76N9RDYE ","M76N9RDZE ","M76N9TAXE ","M76N9TAYE ", & + "M76N9TAZE ","M76N9TDXSS","M76N9TDYSS","M76N9TDZSS","M77N1FKXE ","M77N1FKYE ","M77N1FKZE ", & + "M77N1FMXE ","M77N1FMYE ","M77N1FMZE ","M77N1MKXE ","M77N1MKYE ","M77N1MKZE ","M77N1MMXE ", & + "M77N1MMYE ","M77N1MMZE ","M77N1RAXE ","M77N1RAYE ","M77N1RAZE ","M77N1RDXE ","M77N1RDYE ", & + "M77N1RDZE ","M77N1TAXE ","M77N1TAYE ","M77N1TAZE ","M77N1TDXSS","M77N1TDYSS","M77N1TDZSS", & + "M77N2FKXE ","M77N2FKYE ","M77N2FKZE ","M77N2FMXE ","M77N2FMYE ","M77N2FMZE ","M77N2MKXE ", & + "M77N2MKYE ","M77N2MKZE ","M77N2MMXE ","M77N2MMYE ","M77N2MMZE ","M77N2RAXE ","M77N2RAYE ", & + "M77N2RAZE ","M77N2RDXE ","M77N2RDYE ","M77N2RDZE ","M77N2TAXE ","M77N2TAYE ","M77N2TAZE ", & + "M77N2TDXSS","M77N2TDYSS","M77N2TDZSS","M77N3FKXE ","M77N3FKYE ","M77N3FKZE ","M77N3FMXE ", & + "M77N3FMYE ","M77N3FMZE ","M77N3MKXE ","M77N3MKYE ","M77N3MKZE ","M77N3MMXE ","M77N3MMYE ", & + "M77N3MMZE ","M77N3RAXE ","M77N3RAYE ","M77N3RAZE ","M77N3RDXE ","M77N3RDYE ","M77N3RDZE ", & + "M77N3TAXE ","M77N3TAYE ","M77N3TAZE ","M77N3TDXSS","M77N3TDYSS","M77N3TDZSS","M77N4FKXE ", & + "M77N4FKYE ","M77N4FKZE ","M77N4FMXE ","M77N4FMYE ","M77N4FMZE ","M77N4MKXE ","M77N4MKYE ", & + "M77N4MKZE ","M77N4MMXE ","M77N4MMYE ","M77N4MMZE ","M77N4RAXE ","M77N4RAYE ","M77N4RAZE ", & + "M77N4RDXE ","M77N4RDYE ","M77N4RDZE ","M77N4TAXE ","M77N4TAYE ","M77N4TAZE ","M77N4TDXSS", & + "M77N4TDYSS","M77N4TDZSS","M77N5FKXE ","M77N5FKYE ","M77N5FKZE ","M77N5FMXE ","M77N5FMYE ", & + "M77N5FMZE ","M77N5MKXE ","M77N5MKYE ","M77N5MKZE ","M77N5MMXE ","M77N5MMYE ","M77N5MMZE ", & + "M77N5RAXE ","M77N5RAYE ","M77N5RAZE ","M77N5RDXE ","M77N5RDYE ","M77N5RDZE ","M77N5TAXE ", & + "M77N5TAYE ","M77N5TAZE ","M77N5TDXSS","M77N5TDYSS","M77N5TDZSS","M77N6FKXE ","M77N6FKYE ", & + "M77N6FKZE ","M77N6FMXE ","M77N6FMYE ","M77N6FMZE ","M77N6MKXE ","M77N6MKYE ","M77N6MKZE ", & + "M77N6MMXE ","M77N6MMYE ","M77N6MMZE ","M77N6RAXE ","M77N6RAYE ","M77N6RAZE ","M77N6RDXE ", & + "M77N6RDYE ","M77N6RDZE ","M77N6TAXE ","M77N6TAYE ","M77N6TAZE ","M77N6TDXSS","M77N6TDYSS", & + "M77N6TDZSS","M77N7FKXE ","M77N7FKYE ","M77N7FKZE ","M77N7FMXE ","M77N7FMYE ","M77N7FMZE ", & + "M77N7MKXE ","M77N7MKYE ","M77N7MKZE ","M77N7MMXE ","M77N7MMYE ","M77N7MMZE ","M77N7RAXE ", & + "M77N7RAYE ","M77N7RAZE ","M77N7RDXE ","M77N7RDYE ","M77N7RDZE ","M77N7TAXE ","M77N7TAYE ", & + "M77N7TAZE ","M77N7TDXSS","M77N7TDYSS","M77N7TDZSS","M77N8FKXE ","M77N8FKYE ","M77N8FKZE ", & + "M77N8FMXE ","M77N8FMYE ","M77N8FMZE ","M77N8MKXE ","M77N8MKYE ","M77N8MKZE ","M77N8MMXE ", & + "M77N8MMYE ","M77N8MMZE ","M77N8RAXE ","M77N8RAYE ","M77N8RAZE ","M77N8RDXE ","M77N8RDYE ", & + "M77N8RDZE ","M77N8TAXE ","M77N8TAYE ","M77N8TAZE ","M77N8TDXSS","M77N8TDYSS","M77N8TDZSS", & + "M77N9FKXE ","M77N9FKYE ","M77N9FKZE ","M77N9FMXE ","M77N9FMYE ","M77N9FMZE ","M77N9MKXE ", & + "M77N9MKYE ","M77N9MKZE ","M77N9MMXE ","M77N9MMYE ","M77N9MMZE ","M77N9RAXE ","M77N9RAYE ", & + "M77N9RAZE ","M77N9RDXE ","M77N9RDYE ","M77N9RDZE ","M77N9TAXE ","M77N9TAYE ","M77N9TAZE ", & + "M77N9TDXSS","M77N9TDYSS","M77N9TDZSS","M78N1FKXE ","M78N1FKYE ","M78N1FKZE ","M78N1FMXE ", & + "M78N1FMYE ","M78N1FMZE ","M78N1MKXE ","M78N1MKYE ","M78N1MKZE ","M78N1MMXE ","M78N1MMYE ", & + "M78N1MMZE ","M78N1RAXE ","M78N1RAYE ","M78N1RAZE ","M78N1RDXE ","M78N1RDYE ","M78N1RDZE ", & + "M78N1TAXE ","M78N1TAYE ","M78N1TAZE ","M78N1TDXSS","M78N1TDYSS","M78N1TDZSS","M78N2FKXE ", & + "M78N2FKYE ","M78N2FKZE ","M78N2FMXE ","M78N2FMYE ","M78N2FMZE ","M78N2MKXE ","M78N2MKYE ", & + "M78N2MKZE ","M78N2MMXE ","M78N2MMYE ","M78N2MMZE ","M78N2RAXE ","M78N2RAYE ","M78N2RAZE ", & + "M78N2RDXE ","M78N2RDYE ","M78N2RDZE ","M78N2TAXE ","M78N2TAYE ","M78N2TAZE ","M78N2TDXSS", & + "M78N2TDYSS","M78N2TDZSS","M78N3FKXE ","M78N3FKYE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry11(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M78N3FKZE ","M78N3FMXE ","M78N3FMYE ","M78N3FMZE ","M78N3MKXE ","M78N3MKYE ","M78N3MKZE ", & + "M78N3MMXE ","M78N3MMYE ","M78N3MMZE ","M78N3RAXE ","M78N3RAYE ","M78N3RAZE ","M78N3RDXE ", & + "M78N3RDYE ","M78N3RDZE ","M78N3TAXE ","M78N3TAYE ","M78N3TAZE ","M78N3TDXSS","M78N3TDYSS", & + "M78N3TDZSS","M78N4FKXE ","M78N4FKYE ","M78N4FKZE ","M78N4FMXE ","M78N4FMYE ","M78N4FMZE ", & + "M78N4MKXE ","M78N4MKYE ","M78N4MKZE ","M78N4MMXE ","M78N4MMYE ","M78N4MMZE ","M78N4RAXE ", & + "M78N4RAYE ","M78N4RAZE ","M78N4RDXE ","M78N4RDYE ","M78N4RDZE ","M78N4TAXE ","M78N4TAYE ", & + "M78N4TAZE ","M78N4TDXSS","M78N4TDYSS","M78N4TDZSS","M78N5FKXE ","M78N5FKYE ","M78N5FKZE ", & + "M78N5FMXE ","M78N5FMYE ","M78N5FMZE ","M78N5MKXE ","M78N5MKYE ","M78N5MKZE ","M78N5MMXE ", & + "M78N5MMYE ","M78N5MMZE ","M78N5RAXE ","M78N5RAYE ","M78N5RAZE ","M78N5RDXE ","M78N5RDYE ", & + "M78N5RDZE ","M78N5TAXE ","M78N5TAYE ","M78N5TAZE ","M78N5TDXSS","M78N5TDYSS","M78N5TDZSS", & + "M78N6FKXE ","M78N6FKYE ","M78N6FKZE ","M78N6FMXE ","M78N6FMYE ","M78N6FMZE ","M78N6MKXE ", & + "M78N6MKYE ","M78N6MKZE ","M78N6MMXE ","M78N6MMYE ","M78N6MMZE ","M78N6RAXE ","M78N6RAYE ", & + "M78N6RAZE ","M78N6RDXE ","M78N6RDYE ","M78N6RDZE ","M78N6TAXE ","M78N6TAYE ","M78N6TAZE ", & + "M78N6TDXSS","M78N6TDYSS","M78N6TDZSS","M78N7FKXE ","M78N7FKYE ","M78N7FKZE ","M78N7FMXE ", & + "M78N7FMYE ","M78N7FMZE ","M78N7MKXE ","M78N7MKYE ","M78N7MKZE ","M78N7MMXE ","M78N7MMYE ", & + "M78N7MMZE ","M78N7RAXE ","M78N7RAYE ","M78N7RAZE ","M78N7RDXE ","M78N7RDYE ","M78N7RDZE ", & + "M78N7TAXE ","M78N7TAYE ","M78N7TAZE ","M78N7TDXSS","M78N7TDYSS","M78N7TDZSS","M78N8FKXE ", & + "M78N8FKYE ","M78N8FKZE ","M78N8FMXE ","M78N8FMYE ","M78N8FMZE ","M78N8MKXE ","M78N8MKYE ", & + "M78N8MKZE ","M78N8MMXE ","M78N8MMYE ","M78N8MMZE ","M78N8RAXE ","M78N8RAYE ","M78N8RAZE ", & + "M78N8RDXE ","M78N8RDYE ","M78N8RDZE ","M78N8TAXE ","M78N8TAYE ","M78N8TAZE ","M78N8TDXSS", & + "M78N8TDYSS","M78N8TDZSS","M78N9FKXE ","M78N9FKYE ","M78N9FKZE ","M78N9FMXE ","M78N9FMYE ", & + "M78N9FMZE ","M78N9MKXE ","M78N9MKYE ","M78N9MKZE ","M78N9MMXE ","M78N9MMYE ","M78N9MMZE ", & + "M78N9RAXE ","M78N9RAYE ","M78N9RAZE ","M78N9RDXE ","M78N9RDYE ","M78N9RDZE ","M78N9TAXE ", & + "M78N9TAYE ","M78N9TAZE ","M78N9TDXSS","M78N9TDYSS","M78N9TDZSS","M79N1FKXE ","M79N1FKYE ", & + "M79N1FKZE ","M79N1FMXE ","M79N1FMYE ","M79N1FMZE ","M79N1MKXE ","M79N1MKYE ","M79N1MKZE ", & + "M79N1MMXE ","M79N1MMYE ","M79N1MMZE ","M79N1RAXE ","M79N1RAYE ","M79N1RAZE ","M79N1RDXE ", & + "M79N1RDYE ","M79N1RDZE ","M79N1TAXE ","M79N1TAYE ","M79N1TAZE ","M79N1TDXSS","M79N1TDYSS", & + "M79N1TDZSS","M79N2FKXE ","M79N2FKYE ","M79N2FKZE ","M79N2FMXE ","M79N2FMYE ","M79N2FMZE ", & + "M79N2MKXE ","M79N2MKYE ","M79N2MKZE ","M79N2MMXE ","M79N2MMYE ","M79N2MMZE ","M79N2RAXE ", & + "M79N2RAYE ","M79N2RAZE ","M79N2RDXE ","M79N2RDYE ","M79N2RDZE ","M79N2TAXE ","M79N2TAYE ", & + "M79N2TAZE ","M79N2TDXSS","M79N2TDYSS","M79N2TDZSS","M79N3FKXE ","M79N3FKYE ","M79N3FKZE ", & + "M79N3FMXE ","M79N3FMYE ","M79N3FMZE ","M79N3MKXE ","M79N3MKYE ","M79N3MKZE ","M79N3MMXE ", & + "M79N3MMYE ","M79N3MMZE ","M79N3RAXE ","M79N3RAYE ","M79N3RAZE ","M79N3RDXE ","M79N3RDYE ", & + "M79N3RDZE ","M79N3TAXE ","M79N3TAYE ","M79N3TAZE ","M79N3TDXSS","M79N3TDYSS","M79N3TDZSS", & + "M79N4FKXE ","M79N4FKYE ","M79N4FKZE ","M79N4FMXE ","M79N4FMYE ","M79N4FMZE ","M79N4MKXE ", & + "M79N4MKYE ","M79N4MKZE ","M79N4MMXE ","M79N4MMYE ","M79N4MMZE ","M79N4RAXE ","M79N4RAYE ", & + "M79N4RAZE ","M79N4RDXE ","M79N4RDYE ","M79N4RDZE ","M79N4TAXE ","M79N4TAYE ","M79N4TAZE ", & + "M79N4TDXSS","M79N4TDYSS","M79N4TDZSS","M79N5FKXE ","M79N5FKYE ","M79N5FKZE ","M79N5FMXE ", & + "M79N5FMYE ","M79N5FMZE ","M79N5MKXE ","M79N5MKYE ","M79N5MKZE ","M79N5MMXE ","M79N5MMYE ", & + "M79N5MMZE ","M79N5RAXE ","M79N5RAYE ","M79N5RAZE ","M79N5RDXE ","M79N5RDYE ","M79N5RDZE ", & + "M79N5TAXE ","M79N5TAYE ","M79N5TAZE ","M79N5TDXSS","M79N5TDYSS","M79N5TDZSS","M79N6FKXE ", & + "M79N6FKYE ","M79N6FKZE ","M79N6FMXE ","M79N6FMYE ","M79N6FMZE ","M79N6MKXE ","M79N6MKYE ", & + "M79N6MKZE ","M79N6MMXE ","M79N6MMYE ","M79N6MMZE ","M79N6RAXE ","M79N6RAYE ","M79N6RAZE ", & + "M79N6RDXE ","M79N6RDYE ","M79N6RDZE ","M79N6TAXE ","M79N6TAYE ","M79N6TAZE ","M79N6TDXSS", & + "M79N6TDYSS","M79N6TDZSS","M79N7FKXE ","M79N7FKYE ","M79N7FKZE ","M79N7FMXE ","M79N7FMYE ", & + "M79N7FMZE ","M79N7MKXE ","M79N7MKYE ","M79N7MKZE ","M79N7MMXE ","M79N7MMYE ","M79N7MMZE ", & + "M79N7RAXE ","M79N7RAYE ","M79N7RAZE ","M79N7RDXE ","M79N7RDYE ","M79N7RDZE ","M79N7TAXE ", & + "M79N7TAYE ","M79N7TAZE ","M79N7TDXSS","M79N7TDYSS","M79N7TDZSS","M79N8FKXE ","M79N8FKYE ", & + "M79N8FKZE ","M79N8FMXE ","M79N8FMYE ","M79N8FMZE ","M79N8MKXE ","M79N8MKYE ","M79N8MKZE ", & + "M79N8MMXE ","M79N8MMYE ","M79N8MMZE ","M79N8RAXE ","M79N8RAYE ","M79N8RAZE ","M79N8RDXE ", & + "M79N8RDYE ","M79N8RDZE ","M79N8TAXE ","M79N8TAYE ","M79N8TAZE ","M79N8TDXSS","M79N8TDYSS", & + "M79N8TDZSS","M79N9FKXE ","M79N9FKYE ","M79N9FKZE ","M79N9FMXE ","M79N9FMYE ","M79N9FMZE ", & + "M79N9MKXE ","M79N9MKYE ","M79N9MKZE ","M79N9MMXE ","M79N9MMYE ","M79N9MMZE ","M79N9RAXE ", & + "M79N9RAYE ","M79N9RAZE ","M79N9RDXE ","M79N9RDYE ","M79N9RDZE ","M79N9TAXE ","M79N9TAYE ", & + "M79N9TAZE ","M79N9TDXSS","M79N9TDYSS","M79N9TDZSS","M80N1FKXE ","M80N1FKYE ","M80N1FKZE ", & + "M80N1FMXE ","M80N1FMYE ","M80N1FMZE ","M80N1MKXE ","M80N1MKYE ","M80N1MKZE ","M80N1MMXE ", & + "M80N1MMYE ","M80N1MMZE ","M80N1RAXE ","M80N1RAYE ","M80N1RAZE ","M80N1RDXE ","M80N1RDYE ", & + "M80N1RDZE ","M80N1TAXE ","M80N1TAYE ","M80N1TAZE ","M80N1TDXSS","M80N1TDYSS","M80N1TDZSS", & + "M80N2FKXE ","M80N2FKYE ","M80N2FKZE ","M80N2FMXE ","M80N2FMYE ","M80N2FMZE ","M80N2MKXE ", & + "M80N2MKYE ","M80N2MKZE ","M80N2MMXE ","M80N2MMYE ","M80N2MMZE ","M80N2RAXE ","M80N2RAYE ", & + "M80N2RAZE ","M80N2RDXE ","M80N2RDYE ","M80N2RDZE ","M80N2TAXE ","M80N2TAYE ","M80N2TAZE ", & + "M80N2TDXSS","M80N2TDYSS","M80N2TDZSS","M80N3FKXE ","M80N3FKYE ","M80N3FKZE ","M80N3FMXE ", & + "M80N3FMYE ","M80N3FMZE ","M80N3MKXE ","M80N3MKYE ","M80N3MKZE ","M80N3MMXE ","M80N3MMYE ", & + "M80N3MMZE ","M80N3RAXE ","M80N3RAYE ","M80N3RAZE ","M80N3RDXE ","M80N3RDYE ","M80N3RDZE ", & + "M80N3TAXE ","M80N3TAYE ","M80N3TAZE ","M80N3TDXSS","M80N3TDYSS","M80N3TDZSS","M80N4FKXE ", & + "M80N4FKYE ","M80N4FKZE ","M80N4FMXE ","M80N4FMYE ","M80N4FMZE ","M80N4MKXE ","M80N4MKYE ", & + "M80N4MKZE ","M80N4MMXE ","M80N4MMYE ","M80N4MMZE ","M80N4RAXE ","M80N4RAYE ","M80N4RAZE ", & + "M80N4RDXE ","M80N4RDYE ","M80N4RDZE ","M80N4TAXE ","M80N4TAYE ","M80N4TAZE ","M80N4TDXSS", & + "M80N4TDYSS","M80N4TDZSS","M80N5FKXE ","M80N5FKYE ","M80N5FKZE ","M80N5FMXE ","M80N5FMYE ", & + "M80N5FMZE ","M80N5MKXE ","M80N5MKYE ","M80N5MKZE ","M80N5MMXE ","M80N5MMYE ","M80N5MMZE ", & + "M80N5RAXE ","M80N5RAYE ","M80N5RAZE ","M80N5RDXE ","M80N5RDYE ","M80N5RDZE ","M80N5TAXE ", & + "M80N5TAYE ","M80N5TAZE ","M80N5TDXSS","M80N5TDYSS","M80N5TDZSS","M80N6FKXE ","M80N6FKYE ", & + "M80N6FKZE ","M80N6FMXE ","M80N6FMYE ","M80N6FMZE ","M80N6MKXE ","M80N6MKYE ","M80N6MKZE ", & + "M80N6MMXE ","M80N6MMYE ","M80N6MMZE ","M80N6RAXE ","M80N6RAYE ","M80N6RAZE ","M80N6RDXE ", & + "M80N6RDYE ","M80N6RDZE ","M80N6TAXE ","M80N6TAYE ","M80N6TAZE ","M80N6TDXSS","M80N6TDYSS", & + "M80N6TDZSS","M80N7FKXE ","M80N7FKYE ","M80N7FKZE ","M80N7FMXE ","M80N7FMYE ","M80N7FMZE ", & + "M80N7MKXE ","M80N7MKYE ","M80N7MKZE ","M80N7MMXE ","M80N7MMYE ","M80N7MMZE ","M80N7RAXE ", & + "M80N7RAYE ","M80N7RAZE ","M80N7RDXE ","M80N7RDYE ","M80N7RDZE ","M80N7TAXE ","M80N7TAYE ", & + "M80N7TAZE ","M80N7TDXSS","M80N7TDYSS","M80N7TDZSS","M80N8FKXE ","M80N8FKYE ","M80N8FKZE ", & + "M80N8FMXE ","M80N8FMYE ","M80N8FMZE ","M80N8MKXE ","M80N8MKYE ","M80N8MKZE ","M80N8MMXE ", & + "M80N8MMYE ","M80N8MMZE ","M80N8RAXE ","M80N8RAYE ","M80N8RAZE ","M80N8RDXE ","M80N8RDYE ", & + "M80N8RDZE ","M80N8TAXE ","M80N8TAYE ","M80N8TAZE ","M80N8TDXSS","M80N8TDYSS","M80N8TDZSS", & + "M80N9FKXE ","M80N9FKYE ","M80N9FKZE ","M80N9FMXE ","M80N9FMYE ","M80N9FMZE ","M80N9MKXE ", & + "M80N9MKYE ","M80N9MKZE ","M80N9MMXE ","M80N9MMYE ","M80N9MMZE ","M80N9RAXE ","M80N9RAYE ", & + "M80N9RAZE ","M80N9RDXE ","M80N9RDYE ","M80N9RDZE ","M80N9TAXE ","M80N9TAYE ","M80N9TAZE ", & + "M80N9TDXSS","M80N9TDYSS","M80N9TDZSS","M81N1FKXE ","M81N1FKYE ","M81N1FKZE ","M81N1FMXE ", & + "M81N1FMYE ","M81N1FMZE ","M81N1MKXE ","M81N1MKYE ","M81N1MKZE ","M81N1MMXE ","M81N1MMYE ", & + "M81N1MMZE ","M81N1RAXE ","M81N1RAYE ","M81N1RAZE ","M81N1RDXE ","M81N1RDYE ","M81N1RDZE ", & + "M81N1TAXE ","M81N1TAYE ","M81N1TAZE ","M81N1TDXSS","M81N1TDYSS","M81N1TDZSS","M81N2FKXE ", & + "M81N2FKYE ","M81N2FKZE ","M81N2FMXE ","M81N2FMYE ","M81N2FMZE ","M81N2MKXE ","M81N2MKYE ", & + "M81N2MKZE ","M81N2MMXE ","M81N2MMYE ","M81N2MMZE ","M81N2RAXE ","M81N2RAYE ","M81N2RAZE ", & + "M81N2RDXE ","M81N2RDYE ","M81N2RDZE ","M81N2TAXE ","M81N2TAYE ","M81N2TAZE ","M81N2TDXSS", & + "M81N2TDYSS","M81N2TDZSS","M81N3FKXE ","M81N3FKYE ","M81N3FKZE ","M81N3FMXE ","M81N3FMYE ", & + "M81N3FMZE ","M81N3MKXE ","M81N3MKYE ","M81N3MKZE ","M81N3MMXE ","M81N3MMYE ","M81N3MMZE ", & + "M81N3RAXE ","M81N3RAYE ","M81N3RAZE ","M81N3RDXE ","M81N3RDYE ","M81N3RDZE ","M81N3TAXE ", & + "M81N3TAYE ","M81N3TAZE ","M81N3TDXSS","M81N3TDYSS","M81N3TDZSS","M81N4FKXE ","M81N4FKYE ", & + "M81N4FKZE ","M81N4FMXE ","M81N4FMYE ","M81N4FMZE ","M81N4MKXE ","M81N4MKYE ","M81N4MKZE ", & + "M81N4MMXE ","M81N4MMYE ","M81N4MMZE ","M81N4RAXE ","M81N4RAYE ","M81N4RAZE ","M81N4RDXE ", & + "M81N4RDYE ","M81N4RDZE ","M81N4TAXE ","M81N4TAYE ","M81N4TAZE ","M81N4TDXSS","M81N4TDYSS", & + "M81N4TDZSS","M81N5FKXE ","M81N5FKYE ","M81N5FKZE ","M81N5FMXE ","M81N5FMYE ","M81N5FMZE ", & + "M81N5MKXE ","M81N5MKYE ","M81N5MKZE ","M81N5MMXE ","M81N5MMYE ","M81N5MMZE ","M81N5RAXE ", & + "M81N5RAYE ","M81N5RAZE ","M81N5RDXE ","M81N5RDYE ","M81N5RDZE ","M81N5TAXE ","M81N5TAYE ", & + "M81N5TAZE ","M81N5TDXSS","M81N5TDYSS","M81N5TDZSS","M81N6FKXE ","M81N6FKYE ","M81N6FKZE ", & + "M81N6FMXE ","M81N6FMYE ","M81N6FMZE ","M81N6MKXE ","M81N6MKYE ","M81N6MKZE ","M81N6MMXE ", & + "M81N6MMYE ","M81N6MMZE ","M81N6RAXE ","M81N6RAYE ","M81N6RAZE ","M81N6RDXE ","M81N6RDYE ", & + "M81N6RDZE ","M81N6TAXE ","M81N6TAYE ","M81N6TAZE ","M81N6TDXSS","M81N6TDYSS","M81N6TDZSS", & + "M81N7FKXE ","M81N7FKYE ","M81N7FKZE ","M81N7FMXE ","M81N7FMYE ","M81N7FMZE ","M81N7MKXE ", & + "M81N7MKYE ","M81N7MKZE ","M81N7MMXE ","M81N7MMYE ","M81N7MMZE ","M81N7RAXE ","M81N7RAYE ", & + "M81N7RAZE ","M81N7RDXE ","M81N7RDYE ","M81N7RDZE ","M81N7TAXE ","M81N7TAYE ","M81N7TAZE ", & + "M81N7TDXSS","M81N7TDYSS","M81N7TDZSS","M81N8FKXE ","M81N8FKYE ","M81N8FKZE ","M81N8FMXE ", & + "M81N8FMYE ","M81N8FMZE ","M81N8MKXE ","M81N8MKYE ","M81N8MKZE ","M81N8MMXE ","M81N8MMYE ", & + "M81N8MMZE ","M81N8RAXE ","M81N8RAYE ","M81N8RAZE ","M81N8RDXE ","M81N8RDYE ","M81N8RDZE ", & + "M81N8TAXE ","M81N8TAYE ","M81N8TAZE ","M81N8TDXSS","M81N8TDYSS","M81N8TDZSS","M81N9FKXE ", & + "M81N9FKYE ","M81N9FKZE ","M81N9FMXE ","M81N9FMYE ","M81N9FMZE ","M81N9MKXE ","M81N9MKYE ", & + "M81N9MKZE ","M81N9MMXE ","M81N9MMYE ","M81N9MMZE ","M81N9RAXE ","M81N9RAYE ","M81N9RAZE ", & + "M81N9RDXE ","M81N9RDYE ","M81N9RDZE ","M81N9TAXE ","M81N9TAYE ","M81N9TAZE ","M81N9TDXSS", & + "M81N9TDYSS","M81N9TDZSS","M82N1FKXE ","M82N1FKYE ","M82N1FKZE ","M82N1FMXE ","M82N1FMYE ", & + "M82N1FMZE ","M82N1MKXE ","M82N1MKYE ","M82N1MKZE ","M82N1MMXE ","M82N1MMYE ","M82N1MMZE ", & + "M82N1RAXE ","M82N1RAYE ","M82N1RAZE ","M82N1RDXE ","M82N1RDYE ","M82N1RDZE ","M82N1TAXE ", & + "M82N1TAYE ","M82N1TAZE ","M82N1TDXSS","M82N1TDYSS","M82N1TDZSS","M82N2FKXE ","M82N2FKYE ", & + "M82N2FKZE ","M82N2FMXE ","M82N2FMYE ","M82N2FMZE ","M82N2MKXE ","M82N2MKYE ","M82N2MKZE ", & + "M82N2MMXE ","M82N2MMYE ","M82N2MMZE ","M82N2RAXE ","M82N2RAYE ","M82N2RAZE ","M82N2RDXE ", & + "M82N2RDYE ","M82N2RDZE ","M82N2TAXE ","M82N2TAYE ","M82N2TAZE ","M82N2TDXSS","M82N2TDYSS", & + "M82N2TDZSS","M82N3FKXE ","M82N3FKYE ","M82N3FKZE ","M82N3FMXE ","M82N3FMYE ","M82N3FMZE ", & + "M82N3MKXE ","M82N3MKYE ","M82N3MKZE ","M82N3MMXE ","M82N3MMYE ","M82N3MMZE ","M82N3RAXE ", & + "M82N3RAYE ","M82N3RAZE ","M82N3RDXE ","M82N3RDYE ","M82N3RDZE ","M82N3TAXE ","M82N3TAYE ", & + "M82N3TAZE ","M82N3TDXSS","M82N3TDYSS","M82N3TDZSS","M82N4FKXE ","M82N4FKYE ","M82N4FKZE ", & + "M82N4FMXE ","M82N4FMYE ","M82N4FMZE ","M82N4MKXE ","M82N4MKYE ","M82N4MKZE ","M82N4MMXE ", & + "M82N4MMYE ","M82N4MMZE ","M82N4RAXE ","M82N4RAYE ","M82N4RAZE ","M82N4RDXE ","M82N4RDYE ", & + "M82N4RDZE ","M82N4TAXE ","M82N4TAYE ","M82N4TAZE ","M82N4TDXSS","M82N4TDYSS","M82N4TDZSS", & + "M82N5FKXE ","M82N5FKYE ","M82N5FKZE ","M82N5FMXE ","M82N5FMYE ","M82N5FMZE ","M82N5MKXE ", & + "M82N5MKYE ","M82N5MKZE ","M82N5MMXE ","M82N5MMYE ","M82N5MMZE ","M82N5RAXE ","M82N5RAYE ", & + "M82N5RAZE ","M82N5RDXE ","M82N5RDYE ","M82N5RDZE ","M82N5TAXE ","M82N5TAYE ","M82N5TAZE ", & + "M82N5TDXSS","M82N5TDYSS","M82N5TDZSS","M82N6FKXE ","M82N6FKYE ","M82N6FKZE ","M82N6FMXE ", & + "M82N6FMYE ","M82N6FMZE ","M82N6MKXE ","M82N6MKYE ","M82N6MKZE ","M82N6MMXE ","M82N6MMYE ", & + "M82N6MMZE ","M82N6RAXE ","M82N6RAYE ","M82N6RAZE ","M82N6RDXE ","M82N6RDYE ","M82N6RDZE ", & + "M82N6TAXE ","M82N6TAYE ","M82N6TAZE ","M82N6TDXSS","M82N6TDYSS","M82N6TDZSS","M82N7FKXE ", & + "M82N7FKYE ","M82N7FKZE ","M82N7FMXE ","M82N7FMYE ","M82N7FMZE ","M82N7MKXE ","M82N7MKYE ", & + "M82N7MKZE ","M82N7MMXE ","M82N7MMYE ","M82N7MMZE ","M82N7RAXE ","M82N7RAYE ","M82N7RAZE ", & + "M82N7RDXE ","M82N7RDYE ","M82N7RDZE ","M82N7TAXE ","M82N7TAYE ","M82N7TAZE ","M82N7TDXSS", & + "M82N7TDYSS","M82N7TDZSS","M82N8FKXE ","M82N8FKYE ","M82N8FKZE ","M82N8FMXE ","M82N8FMYE ", & + "M82N8FMZE ","M82N8MKXE ","M82N8MKYE ","M82N8MKZE ","M82N8MMXE ","M82N8MMYE ","M82N8MMZE ", & + "M82N8RAXE ","M82N8RAYE ","M82N8RAZE ","M82N8RDXE ","M82N8RDYE ","M82N8RDZE ","M82N8TAXE ", & + "M82N8TAYE ","M82N8TAZE ","M82N8TDXSS","M82N8TDYSS","M82N8TDZSS","M82N9FKXE ","M82N9FKYE ", & + "M82N9FKZE ","M82N9FMXE ","M82N9FMYE ","M82N9FMZE ","M82N9MKXE ","M82N9MKYE ","M82N9MKZE ", & + "M82N9MMXE ","M82N9MMYE ","M82N9MMZE ","M82N9RAXE ","M82N9RAYE ","M82N9RAZE ","M82N9RDXE ", & + "M82N9RDYE ","M82N9RDZE ","M82N9TAXE ","M82N9TAYE ","M82N9TAZE ","M82N9TDXSS","M82N9TDYSS", & + "M82N9TDZSS","M83N1FKXE ","M83N1FKYE ","M83N1FKZE ","M83N1FMXE ","M83N1FMYE ","M83N1FMZE ", & + "M83N1MKXE ","M83N1MKYE ","M83N1MKZE ","M83N1MMXE ","M83N1MMYE ","M83N1MMZE ","M83N1RAXE ", & + "M83N1RAYE ","M83N1RAZE ","M83N1RDXE ","M83N1RDYE ","M83N1RDZE ","M83N1TAXE ","M83N1TAYE ", & + "M83N1TAZE ","M83N1TDXSS","M83N1TDYSS","M83N1TDZSS","M83N2FKXE ","M83N2FKYE ","M83N2FKZE ", & + "M83N2FMXE ","M83N2FMYE ","M83N2FMZE ","M83N2MKXE ","M83N2MKYE ","M83N2MKZE ","M83N2MMXE ", & + "M83N2MMYE ","M83N2MMZE ","M83N2RAXE ","M83N2RAYE ","M83N2RAZE ","M83N2RDXE ","M83N2RDYE ", & + "M83N2RDZE ","M83N2TAXE ","M83N2TAYE ","M83N2TAZE ","M83N2TDXSS","M83N2TDYSS","M83N2TDZSS", & + "M83N3FKXE ","M83N3FKYE ","M83N3FKZE ","M83N3FMXE ","M83N3FMYE ","M83N3FMZE ","M83N3MKXE ", & + "M83N3MKYE ","M83N3MKZE ","M83N3MMXE ","M83N3MMYE ","M83N3MMZE ","M83N3RAXE ","M83N3RAYE ", & + "M83N3RAZE ","M83N3RDXE ","M83N3RDYE ","M83N3RDZE ","M83N3TAXE ","M83N3TAYE ","M83N3TAZE ", & + "M83N3TDXSS","M83N3TDYSS","M83N3TDZSS","M83N4FKXE ","M83N4FKYE ","M83N4FKZE ","M83N4FMXE ", & + "M83N4FMYE ","M83N4FMZE ","M83N4MKXE ","M83N4MKYE ","M83N4MKZE ","M83N4MMXE ","M83N4MMYE ", & + "M83N4MMZE ","M83N4RAXE ","M83N4RAYE ","M83N4RAZE ","M83N4RDXE ","M83N4RDYE ","M83N4RDZE ", & + "M83N4TAXE ","M83N4TAYE ","M83N4TAZE ","M83N4TDXSS","M83N4TDYSS","M83N4TDZSS","M83N5FKXE ", & + "M83N5FKYE ","M83N5FKZE ","M83N5FMXE ","M83N5FMYE ","M83N5FMZE ","M83N5MKXE ","M83N5MKYE ", & + "M83N5MKZE ","M83N5MMXE ","M83N5MMYE ","M83N5MMZE ","M83N5RAXE ","M83N5RAYE ","M83N5RAZE ", & + "M83N5RDXE ","M83N5RDYE ","M83N5RDZE ","M83N5TAXE ","M83N5TAYE ","M83N5TAZE ","M83N5TDXSS", & + "M83N5TDYSS","M83N5TDZSS","M83N6FKXE ","M83N6FKYE ","M83N6FKZE ","M83N6FMXE ","M83N6FMYE ", & + "M83N6FMZE ","M83N6MKXE ","M83N6MKYE ","M83N6MKZE ","M83N6MMXE ","M83N6MMYE ","M83N6MMZE ", & + "M83N6RAXE ","M83N6RAYE ","M83N6RAZE ","M83N6RDXE ","M83N6RDYE ","M83N6RDZE ","M83N6TAXE ", & + "M83N6TAYE ","M83N6TAZE ","M83N6TDXSS","M83N6TDYSS","M83N6TDZSS","M83N7FKXE ","M83N7FKYE ", & + "M83N7FKZE ","M83N7FMXE ","M83N7FMYE ","M83N7FMZE ","M83N7MKXE ","M83N7MKYE ","M83N7MKZE ", & + "M83N7MMXE ","M83N7MMYE ","M83N7MMZE ","M83N7RAXE ","M83N7RAYE ","M83N7RAZE ","M83N7RDXE ", & + "M83N7RDYE ","M83N7RDZE ","M83N7TAXE ","M83N7TAYE ","M83N7TAZE ","M83N7TDXSS","M83N7TDYSS", & + "M83N7TDZSS","M83N8FKXE ","M83N8FKYE ","M83N8FKZE ","M83N8FMXE ","M83N8FMYE ","M83N8FMZE ", & + "M83N8MKXE ","M83N8MKYE ","M83N8MKZE ","M83N8MMXE ","M83N8MMYE ","M83N8MMZE ","M83N8RAXE ", & + "M83N8RAYE ","M83N8RAZE ","M83N8RDXE ","M83N8RDYE ","M83N8RDZE ","M83N8TAXE ","M83N8TAYE ", & + "M83N8TAZE ","M83N8TDXSS","M83N8TDYSS","M83N8TDZSS","M83N9FKXE ","M83N9FKYE ","M83N9FKZE ", & + "M83N9FMXE ","M83N9FMYE ","M83N9FMZE ","M83N9MKXE ","M83N9MKYE ","M83N9MKZE ","M83N9MMXE ", & + "M83N9MMYE ","M83N9MMZE ","M83N9RAXE ","M83N9RAYE ","M83N9RAZE ","M83N9RDXE ","M83N9RDYE ", & + "M83N9RDZE ","M83N9TAXE ","M83N9TAYE ","M83N9TAZE ","M83N9TDXSS","M83N9TDYSS","M83N9TDZSS", & + "M84N1FKXE ","M84N1FKYE ","M84N1FKZE ","M84N1FMXE ","M84N1FMYE ","M84N1FMZE ","M84N1MKXE ", & + "M84N1MKYE ","M84N1MKZE ","M84N1MMXE ","M84N1MMYE ","M84N1MMZE ","M84N1RAXE ","M84N1RAYE ", & + "M84N1RAZE ","M84N1RDXE ","M84N1RDYE ","M84N1RDZE ","M84N1TAXE ","M84N1TAYE ","M84N1TAZE ", & + "M84N1TDXSS","M84N1TDYSS","M84N1TDZSS","M84N2FKXE ","M84N2FKYE ","M84N2FKZE ","M84N2FMXE ", & + "M84N2FMYE ","M84N2FMZE ","M84N2MKXE ","M84N2MKYE ","M84N2MKZE ","M84N2MMXE ","M84N2MMYE ", & + "M84N2MMZE ","M84N2RAXE ","M84N2RAYE ","M84N2RAZE ","M84N2RDXE ","M84N2RDYE ","M84N2RDZE ", & + "M84N2TAXE ","M84N2TAYE ","M84N2TAZE ","M84N2TDXSS","M84N2TDYSS","M84N2TDZSS","M84N3FKXE ", & + "M84N3FKYE ","M84N3FKZE ","M84N3FMXE ","M84N3FMYE ","M84N3FMZE ","M84N3MKXE ","M84N3MKYE ", & + "M84N3MKZE ","M84N3MMXE ","M84N3MMYE ","M84N3MMZE ","M84N3RAXE ","M84N3RAYE ","M84N3RAZE ", & + "M84N3RDXE ","M84N3RDYE ","M84N3RDZE ","M84N3TAXE ","M84N3TAYE ","M84N3TAZE ","M84N3TDXSS", & + "M84N3TDYSS","M84N3TDZSS","M84N4FKXE ","M84N4FKYE ","M84N4FKZE ","M84N4FMXE ","M84N4FMYE ", & + "M84N4FMZE ","M84N4MKXE ","M84N4MKYE ","M84N4MKZE ","M84N4MMXE ","M84N4MMYE ","M84N4MMZE ", & + "M84N4RAXE ","M84N4RAYE ","M84N4RAZE ","M84N4RDXE ","M84N4RDYE ","M84N4RDZE ","M84N4TAXE ", & + "M84N4TAYE ","M84N4TAZE ","M84N4TDXSS","M84N4TDYSS","M84N4TDZSS","M84N5FKXE ","M84N5FKYE ", & + "M84N5FKZE ","M84N5FMXE ","M84N5FMYE ","M84N5FMZE ","M84N5MKXE ","M84N5MKYE ","M84N5MKZE ", & + "M84N5MMXE ","M84N5MMYE ","M84N5MMZE ","M84N5RAXE ","M84N5RAYE ","M84N5RAZE ","M84N5RDXE ", & + "M84N5RDYE ","M84N5RDZE ","M84N5TAXE ","M84N5TAYE ","M84N5TAZE ","M84N5TDXSS","M84N5TDYSS", & + "M84N5TDZSS","M84N6FKXE ","M84N6FKYE ","M84N6FKZE ","M84N6FMXE ","M84N6FMYE ","M84N6FMZE ", & + "M84N6MKXE ","M84N6MKYE ","M84N6MKZE ","M84N6MMXE ","M84N6MMYE ","M84N6MMZE ","M84N6RAXE ", & + "M84N6RAYE ","M84N6RAZE ","M84N6RDXE ","M84N6RDYE ","M84N6RDZE ","M84N6TAXE ","M84N6TAYE ", & + "M84N6TAZE ","M84N6TDXSS","M84N6TDYSS","M84N6TDZSS","M84N7FKXE ","M84N7FKYE ","M84N7FKZE ", & + "M84N7FMXE ","M84N7FMYE ","M84N7FMZE ","M84N7MKXE ","M84N7MKYE ","M84N7MKZE ","M84N7MMXE ", & + "M84N7MMYE ","M84N7MMZE ","M84N7RAXE ","M84N7RAYE ","M84N7RAZE ","M84N7RDXE ","M84N7RDYE ", & + "M84N7RDZE ","M84N7TAXE ","M84N7TAYE ","M84N7TAZE ","M84N7TDXSS","M84N7TDYSS","M84N7TDZSS", & + "M84N8FKXE ","M84N8FKYE ","M84N8FKZE ","M84N8FMXE ","M84N8FMYE ","M84N8FMZE ","M84N8MKXE ", & + "M84N8MKYE ","M84N8MKZE ","M84N8MMXE ","M84N8MMYE ","M84N8MMZE ","M84N8RAXE ","M84N8RAYE ", & + "M84N8RAZE ","M84N8RDXE ","M84N8RDYE ","M84N8RDZE ","M84N8TAXE ","M84N8TAYE ","M84N8TAZE ", & + "M84N8TDXSS","M84N8TDYSS","M84N8TDZSS","M84N9FKXE ","M84N9FKYE ","M84N9FKZE ","M84N9FMXE ", & + "M84N9FMYE ","M84N9FMZE ","M84N9MKXE ","M84N9MKYE ","M84N9MKZE ","M84N9MMXE ","M84N9MMYE ", & + "M84N9MMZE ","M84N9RAXE ","M84N9RAYE ","M84N9RAZE ","M84N9RDXE ","M84N9RDYE ","M84N9RDZE ", & + "M84N9TAXE ","M84N9TAYE ","M84N9TAZE ","M84N9TDXSS","M84N9TDYSS","M84N9TDZSS","M85N1FKXE ", & + "M85N1FKYE ","M85N1FKZE ","M85N1FMXE ","M85N1FMYE ","M85N1FMZE ","M85N1MKXE ","M85N1MKYE ", & + "M85N1MKZE ","M85N1MMXE ","M85N1MMYE ","M85N1MMZE ","M85N1RAXE ","M85N1RAYE ","M85N1RAZE ", & + "M85N1RDXE ","M85N1RDYE ","M85N1RDZE ","M85N1TAXE ","M85N1TAYE ","M85N1TAZE ","M85N1TDXSS", & + "M85N1TDYSS","M85N1TDZSS","M85N2FKXE ","M85N2FKYE ","M85N2FKZE ","M85N2FMXE ","M85N2FMYE ", & + "M85N2FMZE ","M85N2MKXE ","M85N2MKYE ","M85N2MKZE ","M85N2MMXE ","M85N2MMYE ","M85N2MMZE ", & + "M85N2RAXE ","M85N2RAYE ","M85N2RAZE ","M85N2RDXE ","M85N2RDYE ","M85N2RDZE ","M85N2TAXE ", & + "M85N2TAYE ","M85N2TAZE ","M85N2TDXSS","M85N2TDYSS","M85N2TDZSS","M85N3FKXE ","M85N3FKYE ", & + "M85N3FKZE ","M85N3FMXE ","M85N3FMYE ","M85N3FMZE ","M85N3MKXE ","M85N3MKYE ","M85N3MKZE ", & + "M85N3MMXE ","M85N3MMYE ","M85N3MMZE ","M85N3RAXE ","M85N3RAYE ","M85N3RAZE ","M85N3RDXE ", & + "M85N3RDYE ","M85N3RDZE ","M85N3TAXE ","M85N3TAYE ","M85N3TAZE ","M85N3TDXSS","M85N3TDYSS", & + "M85N3TDZSS","M85N4FKXE ","M85N4FKYE ","M85N4FKZE ","M85N4FMXE ","M85N4FMYE ","M85N4FMZE ", & + "M85N4MKXE ","M85N4MKYE ","M85N4MKZE ","M85N4MMXE ","M85N4MMYE ","M85N4MMZE ","M85N4RAXE ", & + "M85N4RAYE ","M85N4RAZE ","M85N4RDXE ","M85N4RDYE ","M85N4RDZE ","M85N4TAXE ","M85N4TAYE ", & + "M85N4TAZE ","M85N4TDXSS","M85N4TDYSS","M85N4TDZSS","M85N5FKXE ","M85N5FKYE ","M85N5FKZE ", & + "M85N5FMXE ","M85N5FMYE ","M85N5FMZE ","M85N5MKXE ","M85N5MKYE ","M85N5MKZE ","M85N5MMXE ", & + "M85N5MMYE ","M85N5MMZE ","M85N5RAXE ","M85N5RAYE ","M85N5RAZE ","M85N5RDXE ","M85N5RDYE ", & + "M85N5RDZE ","M85N5TAXE ","M85N5TAYE ","M85N5TAZE ","M85N5TDXSS","M85N5TDYSS","M85N5TDZSS", & + "M85N6FKXE ","M85N6FKYE ","M85N6FKZE ","M85N6FMXE ","M85N6FMYE ","M85N6FMZE ","M85N6MKXE ", & + "M85N6MKYE ","M85N6MKZE ","M85N6MMXE ","M85N6MMYE ","M85N6MMZE ","M85N6RAXE ","M85N6RAYE ", & + "M85N6RAZE ","M85N6RDXE ","M85N6RDYE ","M85N6RDZE ","M85N6TAXE ","M85N6TAYE ","M85N6TAZE ", & + "M85N6TDXSS","M85N6TDYSS","M85N6TDZSS","M85N7FKXE ","M85N7FKYE ","M85N7FKZE ","M85N7FMXE ", & + "M85N7FMYE ","M85N7FMZE ","M85N7MKXE ","M85N7MKYE ","M85N7MKZE ","M85N7MMXE ","M85N7MMYE ", & + "M85N7MMZE ","M85N7RAXE ","M85N7RAYE ","M85N7RAZE ","M85N7RDXE ","M85N7RDYE ","M85N7RDZE ", & + "M85N7TAXE ","M85N7TAYE ","M85N7TAZE ","M85N7TDXSS","M85N7TDYSS","M85N7TDZSS","M85N8FKXE ", & + "M85N8FKYE ","M85N8FKZE ","M85N8FMXE ","M85N8FMYE ","M85N8FMZE ","M85N8MKXE ","M85N8MKYE ", & + "M85N8MKZE ","M85N8MMXE ","M85N8MMYE ","M85N8MMZE ","M85N8RAXE ","M85N8RAYE ","M85N8RAZE ", & + "M85N8RDXE ","M85N8RDYE ","M85N8RDZE ","M85N8TAXE ","M85N8TAYE ","M85N8TAZE ","M85N8TDXSS", & + "M85N8TDYSS","M85N8TDZSS","M85N9FKXE ","M85N9FKYE ","M85N9FKZE ","M85N9FMXE ","M85N9FMYE ", & + "M85N9FMZE ","M85N9MKXE ","M85N9MKYE ","M85N9MKZE ","M85N9MMXE ","M85N9MMYE ","M85N9MMZE ", & + "M85N9RAXE ","M85N9RAYE ","M85N9RAZE ","M85N9RDXE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry12(1670) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M85N9RDYE ","M85N9RDZE ","M85N9TAXE ","M85N9TAYE ","M85N9TAZE ","M85N9TDXSS","M85N9TDYSS", & + "M85N9TDZSS","M86N1FKXE ","M86N1FKYE ","M86N1FKZE ","M86N1FMXE ","M86N1FMYE ","M86N1FMZE ", & + "M86N1MKXE ","M86N1MKYE ","M86N1MKZE ","M86N1MMXE ","M86N1MMYE ","M86N1MMZE ","M86N1RAXE ", & + "M86N1RAYE ","M86N1RAZE ","M86N1RDXE ","M86N1RDYE ","M86N1RDZE ","M86N1TAXE ","M86N1TAYE ", & + "M86N1TAZE ","M86N1TDXSS","M86N1TDYSS","M86N1TDZSS","M86N2FKXE ","M86N2FKYE ","M86N2FKZE ", & + "M86N2FMXE ","M86N2FMYE ","M86N2FMZE ","M86N2MKXE ","M86N2MKYE ","M86N2MKZE ","M86N2MMXE ", & + "M86N2MMYE ","M86N2MMZE ","M86N2RAXE ","M86N2RAYE ","M86N2RAZE ","M86N2RDXE ","M86N2RDYE ", & + "M86N2RDZE ","M86N2TAXE ","M86N2TAYE ","M86N2TAZE ","M86N2TDXSS","M86N2TDYSS","M86N2TDZSS", & + "M86N3FKXE ","M86N3FKYE ","M86N3FKZE ","M86N3FMXE ","M86N3FMYE ","M86N3FMZE ","M86N3MKXE ", & + "M86N3MKYE ","M86N3MKZE ","M86N3MMXE ","M86N3MMYE ","M86N3MMZE ","M86N3RAXE ","M86N3RAYE ", & + "M86N3RAZE ","M86N3RDXE ","M86N3RDYE ","M86N3RDZE ","M86N3TAXE ","M86N3TAYE ","M86N3TAZE ", & + "M86N3TDXSS","M86N3TDYSS","M86N3TDZSS","M86N4FKXE ","M86N4FKYE ","M86N4FKZE ","M86N4FMXE ", & + "M86N4FMYE ","M86N4FMZE ","M86N4MKXE ","M86N4MKYE ","M86N4MKZE ","M86N4MMXE ","M86N4MMYE ", & + "M86N4MMZE ","M86N4RAXE ","M86N4RAYE ","M86N4RAZE ","M86N4RDXE ","M86N4RDYE ","M86N4RDZE ", & + "M86N4TAXE ","M86N4TAYE ","M86N4TAZE ","M86N4TDXSS","M86N4TDYSS","M86N4TDZSS","M86N5FKXE ", & + "M86N5FKYE ","M86N5FKZE ","M86N5FMXE ","M86N5FMYE ","M86N5FMZE ","M86N5MKXE ","M86N5MKYE ", & + "M86N5MKZE ","M86N5MMXE ","M86N5MMYE ","M86N5MMZE ","M86N5RAXE ","M86N5RAYE ","M86N5RAZE ", & + "M86N5RDXE ","M86N5RDYE ","M86N5RDZE ","M86N5TAXE ","M86N5TAYE ","M86N5TAZE ","M86N5TDXSS", & + "M86N5TDYSS","M86N5TDZSS","M86N6FKXE ","M86N6FKYE ","M86N6FKZE ","M86N6FMXE ","M86N6FMYE ", & + "M86N6FMZE ","M86N6MKXE ","M86N6MKYE ","M86N6MKZE ","M86N6MMXE ","M86N6MMYE ","M86N6MMZE ", & + "M86N6RAXE ","M86N6RAYE ","M86N6RAZE ","M86N6RDXE ","M86N6RDYE ","M86N6RDZE ","M86N6TAXE ", & + "M86N6TAYE ","M86N6TAZE ","M86N6TDXSS","M86N6TDYSS","M86N6TDZSS","M86N7FKXE ","M86N7FKYE ", & + "M86N7FKZE ","M86N7FMXE ","M86N7FMYE ","M86N7FMZE ","M86N7MKXE ","M86N7MKYE ","M86N7MKZE ", & + "M86N7MMXE ","M86N7MMYE ","M86N7MMZE ","M86N7RAXE ","M86N7RAYE ","M86N7RAZE ","M86N7RDXE ", & + "M86N7RDYE ","M86N7RDZE ","M86N7TAXE ","M86N7TAYE ","M86N7TAZE ","M86N7TDXSS","M86N7TDYSS", & + "M86N7TDZSS","M86N8FKXE ","M86N8FKYE ","M86N8FKZE ","M86N8FMXE ","M86N8FMYE ","M86N8FMZE ", & + "M86N8MKXE ","M86N8MKYE ","M86N8MKZE ","M86N8MMXE ","M86N8MMYE ","M86N8MMZE ","M86N8RAXE ", & + "M86N8RAYE ","M86N8RAZE ","M86N8RDXE ","M86N8RDYE ","M86N8RDZE ","M86N8TAXE ","M86N8TAYE ", & + "M86N8TAZE ","M86N8TDXSS","M86N8TDYSS","M86N8TDZSS","M86N9FKXE ","M86N9FKYE ","M86N9FKZE ", & + "M86N9FMXE ","M86N9FMYE ","M86N9FMZE ","M86N9MKXE ","M86N9MKYE ","M86N9MKZE ","M86N9MMXE ", & + "M86N9MMYE ","M86N9MMZE ","M86N9RAXE ","M86N9RAYE ","M86N9RAZE ","M86N9RDXE ","M86N9RDYE ", & + "M86N9RDZE ","M86N9TAXE ","M86N9TAYE ","M86N9TAZE ","M86N9TDXSS","M86N9TDYSS","M86N9TDZSS", & + "M87N1FKXE ","M87N1FKYE ","M87N1FKZE ","M87N1FMXE ","M87N1FMYE ","M87N1FMZE ","M87N1MKXE ", & + "M87N1MKYE ","M87N1MKZE ","M87N1MMXE ","M87N1MMYE ","M87N1MMZE ","M87N1RAXE ","M87N1RAYE ", & + "M87N1RAZE ","M87N1RDXE ","M87N1RDYE ","M87N1RDZE ","M87N1TAXE ","M87N1TAYE ","M87N1TAZE ", & + "M87N1TDXSS","M87N1TDYSS","M87N1TDZSS","M87N2FKXE ","M87N2FKYE ","M87N2FKZE ","M87N2FMXE ", & + "M87N2FMYE ","M87N2FMZE ","M87N2MKXE ","M87N2MKYE ","M87N2MKZE ","M87N2MMXE ","M87N2MMYE ", & + "M87N2MMZE ","M87N2RAXE ","M87N2RAYE ","M87N2RAZE ","M87N2RDXE ","M87N2RDYE ","M87N2RDZE ", & + "M87N2TAXE ","M87N2TAYE ","M87N2TAZE ","M87N2TDXSS","M87N2TDYSS","M87N2TDZSS","M87N3FKXE ", & + "M87N3FKYE ","M87N3FKZE ","M87N3FMXE ","M87N3FMYE ","M87N3FMZE ","M87N3MKXE ","M87N3MKYE ", & + "M87N3MKZE ","M87N3MMXE ","M87N3MMYE ","M87N3MMZE ","M87N3RAXE ","M87N3RAYE ","M87N3RAZE ", & + "M87N3RDXE ","M87N3RDYE ","M87N3RDZE ","M87N3TAXE ","M87N3TAYE ","M87N3TAZE ","M87N3TDXSS", & + "M87N3TDYSS","M87N3TDZSS","M87N4FKXE ","M87N4FKYE ","M87N4FKZE ","M87N4FMXE ","M87N4FMYE ", & + "M87N4FMZE ","M87N4MKXE ","M87N4MKYE ","M87N4MKZE ","M87N4MMXE ","M87N4MMYE ","M87N4MMZE ", & + "M87N4RAXE ","M87N4RAYE ","M87N4RAZE ","M87N4RDXE ","M87N4RDYE ","M87N4RDZE ","M87N4TAXE ", & + "M87N4TAYE ","M87N4TAZE ","M87N4TDXSS","M87N4TDYSS","M87N4TDZSS","M87N5FKXE ","M87N5FKYE ", & + "M87N5FKZE ","M87N5FMXE ","M87N5FMYE ","M87N5FMZE ","M87N5MKXE ","M87N5MKYE ","M87N5MKZE ", & + "M87N5MMXE ","M87N5MMYE ","M87N5MMZE ","M87N5RAXE ","M87N5RAYE ","M87N5RAZE ","M87N5RDXE ", & + "M87N5RDYE ","M87N5RDZE ","M87N5TAXE ","M87N5TAYE ","M87N5TAZE ","M87N5TDXSS","M87N5TDYSS", & + "M87N5TDZSS","M87N6FKXE ","M87N6FKYE ","M87N6FKZE ","M87N6FMXE ","M87N6FMYE ","M87N6FMZE ", & + "M87N6MKXE ","M87N6MKYE ","M87N6MKZE ","M87N6MMXE ","M87N6MMYE ","M87N6MMZE ","M87N6RAXE ", & + "M87N6RAYE ","M87N6RAZE ","M87N6RDXE ","M87N6RDYE ","M87N6RDZE ","M87N6TAXE ","M87N6TAYE ", & + "M87N6TAZE ","M87N6TDXSS","M87N6TDYSS","M87N6TDZSS","M87N7FKXE ","M87N7FKYE ","M87N7FKZE ", & + "M87N7FMXE ","M87N7FMYE ","M87N7FMZE ","M87N7MKXE ","M87N7MKYE ","M87N7MKZE ","M87N7MMXE ", & + "M87N7MMYE ","M87N7MMZE ","M87N7RAXE ","M87N7RAYE ","M87N7RAZE ","M87N7RDXE ","M87N7RDYE ", & + "M87N7RDZE ","M87N7TAXE ","M87N7TAYE ","M87N7TAZE ","M87N7TDXSS","M87N7TDYSS","M87N7TDZSS", & + "M87N8FKXE ","M87N8FKYE ","M87N8FKZE ","M87N8FMXE ","M87N8FMYE ","M87N8FMZE ","M87N8MKXE ", & + "M87N8MKYE ","M87N8MKZE ","M87N8MMXE ","M87N8MMYE ","M87N8MMZE ","M87N8RAXE ","M87N8RAYE ", & + "M87N8RAZE ","M87N8RDXE ","M87N8RDYE ","M87N8RDZE ","M87N8TAXE ","M87N8TAYE ","M87N8TAZE ", & + "M87N8TDXSS","M87N8TDYSS","M87N8TDZSS","M87N9FKXE ","M87N9FKYE ","M87N9FKZE ","M87N9FMXE ", & + "M87N9FMYE ","M87N9FMZE ","M87N9MKXE ","M87N9MKYE ","M87N9MKZE ","M87N9MMXE ","M87N9MMYE ", & + "M87N9MMZE ","M87N9RAXE ","M87N9RAYE ","M87N9RAZE ","M87N9RDXE ","M87N9RDYE ","M87N9RDZE ", & + "M87N9TAXE ","M87N9TAYE ","M87N9TAZE ","M87N9TDXSS","M87N9TDYSS","M87N9TDZSS","M88N1FKXE ", & + "M88N1FKYE ","M88N1FKZE ","M88N1FMXE ","M88N1FMYE ","M88N1FMZE ","M88N1MKXE ","M88N1MKYE ", & + "M88N1MKZE ","M88N1MMXE ","M88N1MMYE ","M88N1MMZE ","M88N1RAXE ","M88N1RAYE ","M88N1RAZE ", & + "M88N1RDXE ","M88N1RDYE ","M88N1RDZE ","M88N1TAXE ","M88N1TAYE ","M88N1TAZE ","M88N1TDXSS", & + "M88N1TDYSS","M88N1TDZSS","M88N2FKXE ","M88N2FKYE ","M88N2FKZE ","M88N2FMXE ","M88N2FMYE ", & + "M88N2FMZE ","M88N2MKXE ","M88N2MKYE ","M88N2MKZE ","M88N2MMXE ","M88N2MMYE ","M88N2MMZE ", & + "M88N2RAXE ","M88N2RAYE ","M88N2RAZE ","M88N2RDXE ","M88N2RDYE ","M88N2RDZE ","M88N2TAXE ", & + "M88N2TAYE ","M88N2TAZE ","M88N2TDXSS","M88N2TDYSS","M88N2TDZSS","M88N3FKXE ","M88N3FKYE ", & + "M88N3FKZE ","M88N3FMXE ","M88N3FMYE ","M88N3FMZE ","M88N3MKXE ","M88N3MKYE ","M88N3MKZE ", & + "M88N3MMXE ","M88N3MMYE ","M88N3MMZE ","M88N3RAXE ","M88N3RAYE ","M88N3RAZE ","M88N3RDXE ", & + "M88N3RDYE ","M88N3RDZE ","M88N3TAXE ","M88N3TAYE ","M88N3TAZE ","M88N3TDXSS","M88N3TDYSS", & + "M88N3TDZSS","M88N4FKXE ","M88N4FKYE ","M88N4FKZE ","M88N4FMXE ","M88N4FMYE ","M88N4FMZE ", & + "M88N4MKXE ","M88N4MKYE ","M88N4MKZE ","M88N4MMXE ","M88N4MMYE ","M88N4MMZE ","M88N4RAXE ", & + "M88N4RAYE ","M88N4RAZE ","M88N4RDXE ","M88N4RDYE ","M88N4RDZE ","M88N4TAXE ","M88N4TAYE ", & + "M88N4TAZE ","M88N4TDXSS","M88N4TDYSS","M88N4TDZSS","M88N5FKXE ","M88N5FKYE ","M88N5FKZE ", & + "M88N5FMXE ","M88N5FMYE ","M88N5FMZE ","M88N5MKXE ","M88N5MKYE ","M88N5MKZE ","M88N5MMXE ", & + "M88N5MMYE ","M88N5MMZE ","M88N5RAXE ","M88N5RAYE ","M88N5RAZE ","M88N5RDXE ","M88N5RDYE ", & + "M88N5RDZE ","M88N5TAXE ","M88N5TAYE ","M88N5TAZE ","M88N5TDXSS","M88N5TDYSS","M88N5TDZSS", & + "M88N6FKXE ","M88N6FKYE ","M88N6FKZE ","M88N6FMXE ","M88N6FMYE ","M88N6FMZE ","M88N6MKXE ", & + "M88N6MKYE ","M88N6MKZE ","M88N6MMXE ","M88N6MMYE ","M88N6MMZE ","M88N6RAXE ","M88N6RAYE ", & + "M88N6RAZE ","M88N6RDXE ","M88N6RDYE ","M88N6RDZE ","M88N6TAXE ","M88N6TAYE ","M88N6TAZE ", & + "M88N6TDXSS","M88N6TDYSS","M88N6TDZSS","M88N7FKXE ","M88N7FKYE ","M88N7FKZE ","M88N7FMXE ", & + "M88N7FMYE ","M88N7FMZE ","M88N7MKXE ","M88N7MKYE ","M88N7MKZE ","M88N7MMXE ","M88N7MMYE ", & + "M88N7MMZE ","M88N7RAXE ","M88N7RAYE ","M88N7RAZE ","M88N7RDXE ","M88N7RDYE ","M88N7RDZE ", & + "M88N7TAXE ","M88N7TAYE ","M88N7TAZE ","M88N7TDXSS","M88N7TDYSS","M88N7TDZSS","M88N8FKXE ", & + "M88N8FKYE ","M88N8FKZE ","M88N8FMXE ","M88N8FMYE ","M88N8FMZE ","M88N8MKXE ","M88N8MKYE ", & + "M88N8MKZE ","M88N8MMXE ","M88N8MMYE ","M88N8MMZE ","M88N8RAXE ","M88N8RAYE ","M88N8RAZE ", & + "M88N8RDXE ","M88N8RDYE ","M88N8RDZE ","M88N8TAXE ","M88N8TAYE ","M88N8TAZE ","M88N8TDXSS", & + "M88N8TDYSS","M88N8TDZSS","M88N9FKXE ","M88N9FKYE ","M88N9FKZE ","M88N9FMXE ","M88N9FMYE ", & + "M88N9FMZE ","M88N9MKXE ","M88N9MKYE ","M88N9MKZE ","M88N9MMXE ","M88N9MMYE ","M88N9MMZE ", & + "M88N9RAXE ","M88N9RAYE ","M88N9RAZE ","M88N9RDXE ","M88N9RDYE ","M88N9RDZE ","M88N9TAXE ", & + "M88N9TAYE ","M88N9TAZE ","M88N9TDXSS","M88N9TDYSS","M88N9TDZSS","M89N1FKXE ","M89N1FKYE ", & + "M89N1FKZE ","M89N1FMXE ","M89N1FMYE ","M89N1FMZE ","M89N1MKXE ","M89N1MKYE ","M89N1MKZE ", & + "M89N1MMXE ","M89N1MMYE ","M89N1MMZE ","M89N1RAXE ","M89N1RAYE ","M89N1RAZE ","M89N1RDXE ", & + "M89N1RDYE ","M89N1RDZE ","M89N1TAXE ","M89N1TAYE ","M89N1TAZE ","M89N1TDXSS","M89N1TDYSS", & + "M89N1TDZSS","M89N2FKXE ","M89N2FKYE ","M89N2FKZE ","M89N2FMXE ","M89N2FMYE ","M89N2FMZE ", & + "M89N2MKXE ","M89N2MKYE ","M89N2MKZE ","M89N2MMXE ","M89N2MMYE ","M89N2MMZE ","M89N2RAXE ", & + "M89N2RAYE ","M89N2RAZE ","M89N2RDXE ","M89N2RDYE ","M89N2RDZE ","M89N2TAXE ","M89N2TAYE ", & + "M89N2TAZE ","M89N2TDXSS","M89N2TDYSS","M89N2TDZSS","M89N3FKXE ","M89N3FKYE ","M89N3FKZE ", & + "M89N3FMXE ","M89N3FMYE ","M89N3FMZE ","M89N3MKXE ","M89N3MKYE ","M89N3MKZE ","M89N3MMXE ", & + "M89N3MMYE ","M89N3MMZE ","M89N3RAXE ","M89N3RAYE ","M89N3RAZE ","M89N3RDXE ","M89N3RDYE ", & + "M89N3RDZE ","M89N3TAXE ","M89N3TAYE ","M89N3TAZE ","M89N3TDXSS","M89N3TDYSS","M89N3TDZSS", & + "M89N4FKXE ","M89N4FKYE ","M89N4FKZE ","M89N4FMXE ","M89N4FMYE ","M89N4FMZE ","M89N4MKXE ", & + "M89N4MKYE ","M89N4MKZE ","M89N4MMXE ","M89N4MMYE ","M89N4MMZE ","M89N4RAXE ","M89N4RAYE ", & + "M89N4RAZE ","M89N4RDXE ","M89N4RDYE ","M89N4RDZE ","M89N4TAXE ","M89N4TAYE ","M89N4TAZE ", & + "M89N4TDXSS","M89N4TDYSS","M89N4TDZSS","M89N5FKXE ","M89N5FKYE ","M89N5FKZE ","M89N5FMXE ", & + "M89N5FMYE ","M89N5FMZE ","M89N5MKXE ","M89N5MKYE ","M89N5MKZE ","M89N5MMXE ","M89N5MMYE ", & + "M89N5MMZE ","M89N5RAXE ","M89N5RAYE ","M89N5RAZE ","M89N5RDXE ","M89N5RDYE ","M89N5RDZE ", & + "M89N5TAXE ","M89N5TAYE ","M89N5TAZE ","M89N5TDXSS","M89N5TDYSS","M89N5TDZSS","M89N6FKXE ", & + "M89N6FKYE ","M89N6FKZE ","M89N6FMXE ","M89N6FMYE ","M89N6FMZE ","M89N6MKXE ","M89N6MKYE ", & + "M89N6MKZE ","M89N6MMXE ","M89N6MMYE ","M89N6MMZE ","M89N6RAXE ","M89N6RAYE ","M89N6RAZE ", & + "M89N6RDXE ","M89N6RDYE ","M89N6RDZE ","M89N6TAXE ","M89N6TAYE ","M89N6TAZE ","M89N6TDXSS", & + "M89N6TDYSS","M89N6TDZSS","M89N7FKXE ","M89N7FKYE ","M89N7FKZE ","M89N7FMXE ","M89N7FMYE ", & + "M89N7FMZE ","M89N7MKXE ","M89N7MKYE ","M89N7MKZE ","M89N7MMXE ","M89N7MMYE ","M89N7MMZE ", & + "M89N7RAXE ","M89N7RAYE ","M89N7RAZE ","M89N7RDXE ","M89N7RDYE ","M89N7RDZE ","M89N7TAXE ", & + "M89N7TAYE ","M89N7TAZE ","M89N7TDXSS","M89N7TDYSS","M89N7TDZSS","M89N8FKXE ","M89N8FKYE ", & + "M89N8FKZE ","M89N8FMXE ","M89N8FMYE ","M89N8FMZE ","M89N8MKXE ","M89N8MKYE ","M89N8MKZE ", & + "M89N8MMXE ","M89N8MMYE ","M89N8MMZE ","M89N8RAXE ","M89N8RAYE ","M89N8RAZE ","M89N8RDXE ", & + "M89N8RDYE ","M89N8RDZE ","M89N8TAXE ","M89N8TAYE ","M89N8TAZE ","M89N8TDXSS","M89N8TDYSS", & + "M89N8TDZSS","M89N9FKXE ","M89N9FKYE ","M89N9FKZE ","M89N9FMXE ","M89N9FMYE ","M89N9FMZE ", & + "M89N9MKXE ","M89N9MKYE ","M89N9MKZE ","M89N9MMXE ","M89N9MMYE ","M89N9MMZE ","M89N9RAXE ", & + "M89N9RAYE ","M89N9RAZE ","M89N9RDXE ","M89N9RDYE ","M89N9RDZE ","M89N9TAXE ","M89N9TAYE ", & + "M89N9TAZE ","M89N9TDXSS","M89N9TDYSS","M89N9TDZSS","M90N1FKXE ","M90N1FKYE ","M90N1FKZE ", & + "M90N1FMXE ","M90N1FMYE ","M90N1FMZE ","M90N1MKXE ","M90N1MKYE ","M90N1MKZE ","M90N1MMXE ", & + "M90N1MMYE ","M90N1MMZE ","M90N1RAXE ","M90N1RAYE ","M90N1RAZE ","M90N1RDXE ","M90N1RDYE ", & + "M90N1RDZE ","M90N1TAXE ","M90N1TAYE ","M90N1TAZE ","M90N1TDXSS","M90N1TDYSS","M90N1TDZSS", & + "M90N2FKXE ","M90N2FKYE ","M90N2FKZE ","M90N2FMXE ","M90N2FMYE ","M90N2FMZE ","M90N2MKXE ", & + "M90N2MKYE ","M90N2MKZE ","M90N2MMXE ","M90N2MMYE ","M90N2MMZE ","M90N2RAXE ","M90N2RAYE ", & + "M90N2RAZE ","M90N2RDXE ","M90N2RDYE ","M90N2RDZE ","M90N2TAXE ","M90N2TAYE ","M90N2TAZE ", & + "M90N2TDXSS","M90N2TDYSS","M90N2TDZSS","M90N3FKXE ","M90N3FKYE ","M90N3FKZE ","M90N3FMXE ", & + "M90N3FMYE ","M90N3FMZE ","M90N3MKXE ","M90N3MKYE ","M90N3MKZE ","M90N3MMXE ","M90N3MMYE ", & + "M90N3MMZE ","M90N3RAXE ","M90N3RAYE ","M90N3RAZE ","M90N3RDXE ","M90N3RDYE ","M90N3RDZE ", & + "M90N3TAXE ","M90N3TAYE ","M90N3TAZE ","M90N3TDXSS","M90N3TDYSS","M90N3TDZSS","M90N4FKXE ", & + "M90N4FKYE ","M90N4FKZE ","M90N4FMXE ","M90N4FMYE ","M90N4FMZE ","M90N4MKXE ","M90N4MKYE ", & + "M90N4MKZE ","M90N4MMXE ","M90N4MMYE ","M90N4MMZE ","M90N4RAXE ","M90N4RAYE ","M90N4RAZE ", & + "M90N4RDXE ","M90N4RDYE ","M90N4RDZE ","M90N4TAXE ","M90N4TAYE ","M90N4TAZE ","M90N4TDXSS", & + "M90N4TDYSS","M90N4TDZSS","M90N5FKXE ","M90N5FKYE ","M90N5FKZE ","M90N5FMXE ","M90N5FMYE ", & + "M90N5FMZE ","M90N5MKXE ","M90N5MKYE ","M90N5MKZE ","M90N5MMXE ","M90N5MMYE ","M90N5MMZE ", & + "M90N5RAXE ","M90N5RAYE ","M90N5RAZE ","M90N5RDXE ","M90N5RDYE ","M90N5RDZE ","M90N5TAXE ", & + "M90N5TAYE ","M90N5TAZE ","M90N5TDXSS","M90N5TDYSS","M90N5TDZSS","M90N6FKXE ","M90N6FKYE ", & + "M90N6FKZE ","M90N6FMXE ","M90N6FMYE ","M90N6FMZE ","M90N6MKXE ","M90N6MKYE ","M90N6MKZE ", & + "M90N6MMXE ","M90N6MMYE ","M90N6MMZE ","M90N6RAXE ","M90N6RAYE ","M90N6RAZE ","M90N6RDXE ", & + "M90N6RDYE ","M90N6RDZE ","M90N6TAXE ","M90N6TAYE ","M90N6TAZE ","M90N6TDXSS","M90N6TDYSS", & + "M90N6TDZSS","M90N7FKXE ","M90N7FKYE ","M90N7FKZE ","M90N7FMXE ","M90N7FMYE ","M90N7FMZE ", & + "M90N7MKXE ","M90N7MKYE ","M90N7MKZE ","M90N7MMXE ","M90N7MMYE ","M90N7MMZE ","M90N7RAXE ", & + "M90N7RAYE ","M90N7RAZE ","M90N7RDXE ","M90N7RDYE ","M90N7RDZE ","M90N7TAXE ","M90N7TAYE ", & + "M90N7TAZE ","M90N7TDXSS","M90N7TDYSS","M90N7TDZSS","M90N8FKXE ","M90N8FKYE ","M90N8FKZE ", & + "M90N8FMXE ","M90N8FMYE ","M90N8FMZE ","M90N8MKXE ","M90N8MKYE ","M90N8MKZE ","M90N8MMXE ", & + "M90N8MMYE ","M90N8MMZE ","M90N8RAXE ","M90N8RAYE ","M90N8RAZE ","M90N8RDXE ","M90N8RDYE ", & + "M90N8RDZE ","M90N8TAXE ","M90N8TAYE ","M90N8TAZE ","M90N8TDXSS","M90N8TDYSS","M90N8TDZSS", & + "M90N9FKXE ","M90N9FKYE ","M90N9FKZE ","M90N9FMXE ","M90N9FMYE ","M90N9FMZE ","M90N9MKXE ", & + "M90N9MKYE ","M90N9MKZE ","M90N9MMXE ","M90N9MMYE ","M90N9MMZE ","M90N9RAXE ","M90N9RAYE ", & + "M90N9RAZE ","M90N9RDXE ","M90N9RDYE ","M90N9RDZE ","M90N9TAXE ","M90N9TAYE ","M90N9TAZE ", & + "M90N9TDXSS","M90N9TDYSS","M90N9TDZSS","M91N1FKXE ","M91N1FKYE ","M91N1FKZE ","M91N1FMXE ", & + "M91N1FMYE ","M91N1FMZE ","M91N1MKXE ","M91N1MKYE ","M91N1MKZE ","M91N1MMXE ","M91N1MMYE ", & + "M91N1MMZE ","M91N1RAXE ","M91N1RAYE ","M91N1RAZE ","M91N1RDXE ","M91N1RDYE ","M91N1RDZE ", & + "M91N1TAXE ","M91N1TAYE ","M91N1TAZE ","M91N1TDXSS","M91N1TDYSS","M91N1TDZSS","M91N2FKXE ", & + "M91N2FKYE ","M91N2FKZE ","M91N2FMXE ","M91N2FMYE ","M91N2FMZE ","M91N2MKXE ","M91N2MKYE ", & + "M91N2MKZE ","M91N2MMXE ","M91N2MMYE ","M91N2MMZE ","M91N2RAXE ","M91N2RAYE ","M91N2RAZE ", & + "M91N2RDXE ","M91N2RDYE ","M91N2RDZE ","M91N2TAXE ","M91N2TAYE ","M91N2TAZE ","M91N2TDXSS", & + "M91N2TDYSS","M91N2TDZSS","M91N3FKXE ","M91N3FKYE ","M91N3FKZE ","M91N3FMXE ","M91N3FMYE ", & + "M91N3FMZE ","M91N3MKXE ","M91N3MKYE ","M91N3MKZE ","M91N3MMXE ","M91N3MMYE ","M91N3MMZE ", & + "M91N3RAXE ","M91N3RAYE ","M91N3RAZE ","M91N3RDXE ","M91N3RDYE ","M91N3RDZE ","M91N3TAXE ", & + "M91N3TAYE ","M91N3TAZE ","M91N3TDXSS","M91N3TDYSS","M91N3TDZSS","M91N4FKXE ","M91N4FKYE ", & + "M91N4FKZE ","M91N4FMXE ","M91N4FMYE ","M91N4FMZE ","M91N4MKXE ","M91N4MKYE ","M91N4MKZE ", & + "M91N4MMXE ","M91N4MMYE ","M91N4MMZE ","M91N4RAXE ","M91N4RAYE ","M91N4RAZE ","M91N4RDXE ", & + "M91N4RDYE ","M91N4RDZE ","M91N4TAXE ","M91N4TAYE ","M91N4TAZE ","M91N4TDXSS","M91N4TDYSS", & + "M91N4TDZSS","M91N5FKXE ","M91N5FKYE ","M91N5FKZE ","M91N5FMXE ","M91N5FMYE ","M91N5FMZE ", & + "M91N5MKXE ","M91N5MKYE ","M91N5MKZE ","M91N5MMXE ","M91N5MMYE ","M91N5MMZE ","M91N5RAXE ", & + "M91N5RAYE ","M91N5RAZE ","M91N5RDXE ","M91N5RDYE ","M91N5RDZE ","M91N5TAXE ","M91N5TAYE ", & + "M91N5TAZE ","M91N5TDXSS","M91N5TDYSS","M91N5TDZSS","M91N6FKXE ","M91N6FKYE ","M91N6FKZE ", & + "M91N6FMXE ","M91N6FMYE ","M91N6FMZE ","M91N6MKXE ","M91N6MKYE ","M91N6MKZE ","M91N6MMXE ", & + "M91N6MMYE ","M91N6MMZE ","M91N6RAXE ","M91N6RAYE ","M91N6RAZE ","M91N6RDXE ","M91N6RDYE ", & + "M91N6RDZE ","M91N6TAXE ","M91N6TAYE ","M91N6TAZE ","M91N6TDXSS","M91N6TDYSS","M91N6TDZSS", & + "M91N7FKXE ","M91N7FKYE ","M91N7FKZE ","M91N7FMXE ","M91N7FMYE ","M91N7FMZE ","M91N7MKXE ", & + "M91N7MKYE ","M91N7MKZE ","M91N7MMXE ","M91N7MMYE ","M91N7MMZE ","M91N7RAXE ","M91N7RAYE ", & + "M91N7RAZE ","M91N7RDXE ","M91N7RDYE ","M91N7RDZE ","M91N7TAXE ","M91N7TAYE ","M91N7TAZE ", & + "M91N7TDXSS","M91N7TDYSS","M91N7TDZSS","M91N8FKXE ","M91N8FKYE ","M91N8FKZE ","M91N8FMXE ", & + "M91N8FMYE ","M91N8FMZE ","M91N8MKXE ","M91N8MKYE ","M91N8MKZE ","M91N8MMXE ","M91N8MMYE ", & + "M91N8MMZE ","M91N8RAXE ","M91N8RAYE ","M91N8RAZE ","M91N8RDXE ","M91N8RDYE ","M91N8RDZE ", & + "M91N8TAXE ","M91N8TAYE ","M91N8TAZE ","M91N8TDXSS","M91N8TDYSS","M91N8TDZSS","M91N9FKXE ", & + "M91N9FKYE ","M91N9FKZE ","M91N9FMXE ","M91N9FMYE ","M91N9FMZE ","M91N9MKXE ","M91N9MKYE ", & + "M91N9MKZE ","M91N9MMXE ","M91N9MMYE ","M91N9MMZE ","M91N9RAXE ","M91N9RAYE ","M91N9RAZE ", & + "M91N9RDXE ","M91N9RDYE ","M91N9RDZE ","M91N9TAXE ","M91N9TAYE ","M91N9TAZE ","M91N9TDXSS", & + "M91N9TDYSS","M91N9TDZSS","M92N1FKXE ","M92N1FKYE ","M92N1FKZE ","M92N1FMXE ","M92N1FMYE ", & + "M92N1FMZE ","M92N1MKXE ","M92N1MKYE ","M92N1MKZE ","M92N1MMXE ","M92N1MMYE ","M92N1MMZE ", & + "M92N1RAXE ","M92N1RAYE ","M92N1RAZE ","M92N1RDXE ","M92N1RDYE ","M92N1RDZE ","M92N1TAXE ", & + "M92N1TAYE ","M92N1TAZE ","M92N1TDXSS","M92N1TDYSS","M92N1TDZSS","M92N2FKXE ","M92N2FKYE ", & + "M92N2FKZE ","M92N2FMXE ","M92N2FMYE ","M92N2FMZE ","M92N2MKXE ","M92N2MKYE ","M92N2MKZE ", & + "M92N2MMXE ","M92N2MMYE ","M92N2MMZE ","M92N2RAXE ","M92N2RAYE ","M92N2RAZE ","M92N2RDXE ", & + "M92N2RDYE ","M92N2RDZE ","M92N2TAXE ","M92N2TAYE ","M92N2TAZE ","M92N2TDXSS","M92N2TDYSS", & + "M92N2TDZSS","M92N3FKXE ","M92N3FKYE ","M92N3FKZE ","M92N3FMXE ","M92N3FMYE ","M92N3FMZE ", & + "M92N3MKXE ","M92N3MKYE ","M92N3MKZE ","M92N3MMXE ","M92N3MMYE ","M92N3MMZE ","M92N3RAXE ", & + "M92N3RAYE ","M92N3RAZE ","M92N3RDXE ","M92N3RDYE ","M92N3RDZE ","M92N3TAXE ","M92N3TAYE ", & + "M92N3TAZE ","M92N3TDXSS","M92N3TDYSS","M92N3TDZSS","M92N4FKXE ","M92N4FKYE ","M92N4FKZE ", & + "M92N4FMXE ","M92N4FMYE ","M92N4FMZE ","M92N4MKXE ","M92N4MKYE ","M92N4MKZE ","M92N4MMXE ", & + "M92N4MMYE ","M92N4MMZE ","M92N4RAXE ","M92N4RAYE ","M92N4RAZE ","M92N4RDXE ","M92N4RDYE ", & + "M92N4RDZE ","M92N4TAXE ","M92N4TAYE ","M92N4TAZE ","M92N4TDXSS","M92N4TDYSS","M92N4TDZSS", & + "M92N5FKXE ","M92N5FKYE ","M92N5FKZE ","M92N5FMXE ","M92N5FMYE ","M92N5FMZE ","M92N5MKXE ", & + "M92N5MKYE ","M92N5MKZE ","M92N5MMXE ","M92N5MMYE ","M92N5MMZE ","M92N5RAXE ","M92N5RAYE ", & + "M92N5RAZE ","M92N5RDXE ","M92N5RDYE ","M92N5RDZE ","M92N5TAXE ","M92N5TAYE ","M92N5TAZE ", & + "M92N5TDXSS","M92N5TDYSS","M92N5TDZSS","M92N6FKXE ","M92N6FKYE ","M92N6FKZE ","M92N6FMXE ", & + "M92N6FMYE ","M92N6FMZE ","M92N6MKXE ","M92N6MKYE ","M92N6MKZE ","M92N6MMXE ","M92N6MMYE ", & + "M92N6MMZE ","M92N6RAXE ","M92N6RAYE ","M92N6RAZE ","M92N6RDXE ","M92N6RDYE ","M92N6RDZE ", & + "M92N6TAXE ","M92N6TAYE ","M92N6TAZE ","M92N6TDXSS","M92N6TDYSS","M92N6TDZSS","M92N7FKXE ", & + "M92N7FKYE ","M92N7FKZE ","M92N7FMXE ","M92N7FMYE ","M92N7FMZE ","M92N7MKXE ","M92N7MKYE ", & + "M92N7MKZE ","M92N7MMXE ","M92N7MMYE ","M92N7MMZE ","M92N7RAXE ","M92N7RAYE ","M92N7RAZE ", & + "M92N7RDXE ","M92N7RDYE ","M92N7RDZE ","M92N7TAXE ","M92N7TAYE ","M92N7TAZE ","M92N7TDXSS", & + "M92N7TDYSS","M92N7TDZSS","M92N8FKXE ","M92N8FKYE ","M92N8FKZE ","M92N8FMXE ","M92N8FMYE ", & + "M92N8FMZE ","M92N8MKXE ","M92N8MKYE ","M92N8MKZE ","M92N8MMXE ","M92N8MMYE ","M92N8MMZE ", & + "M92N8RAXE ","M92N8RAYE ","M92N8RAZE ","M92N8RDXE ","M92N8RDYE ","M92N8RDZE ","M92N8TAXE ", & + "M92N8TAYE ","M92N8TAZE ","M92N8TDXSS","M92N8TDYSS","M92N8TDZSS","M92N9FKXE ","M92N9FKYE ", & + "M92N9FKZE ","M92N9FMXE ","M92N9FMYE ","M92N9FMZE ","M92N9MKXE ","M92N9MKYE ","M92N9MKZE ", & + "M92N9MMXE ","M92N9MMYE ","M92N9MMZE ","M92N9RAXE ","M92N9RAYE ","M92N9RAZE ","M92N9RDXE ", & + "M92N9RDYE ","M92N9RDZE ","M92N9TAXE ","M92N9TAYE ","M92N9TAZE ","M92N9TDXSS","M92N9TDYSS", & + "M92N9TDZSS","M93N1FKXE ","M93N1FKYE ","M93N1FKZE ","M93N1FMXE ","M93N1FMYE ","M93N1FMZE ", & + "M93N1MKXE ","M93N1MKYE ","M93N1MKZE ","M93N1MMXE ","M93N1MMYE ","M93N1MMZE ","M93N1RAXE ", & + "M93N1RAYE ","M93N1RAZE ","M93N1RDXE ","M93N1RDYE ","M93N1RDZE ","M93N1TAXE ","M93N1TAYE ", & + "M93N1TAZE ","M93N1TDXSS","M93N1TDYSS","M93N1TDZSS","M93N2FKXE ","M93N2FKYE ","M93N2FKZE ", & + "M93N2FMXE ","M93N2FMYE ","M93N2FMZE ","M93N2MKXE ","M93N2MKYE ","M93N2MKZE ","M93N2MMXE ", & + "M93N2MMYE ","M93N2MMZE ","M93N2RAXE ","M93N2RAYE ","M93N2RAZE ","M93N2RDXE ","M93N2RDYE ", & + "M93N2RDZE ","M93N2TAXE ","M93N2TAYE ","M93N2TAZE ","M93N2TDXSS","M93N2TDYSS","M93N2TDZSS", & + "M93N3FKXE ","M93N3FKYE ","M93N3FKZE ","M93N3FMXE ","M93N3FMYE ","M93N3FMZE ","M93N3MKXE ", & + "M93N3MKYE ","M93N3MKZE ","M93N3MMXE ","M93N3MMYE ","M93N3MMZE ","M93N3RAXE ","M93N3RAYE ", & + "M93N3RAZE ","M93N3RDXE ","M93N3RDYE ","M93N3RDZE ","M93N3TAXE ","M93N3TAYE ","M93N3TAZE ", & + "M93N3TDXSS","M93N3TDYSS","M93N3TDZSS","M93N4FKXE ","M93N4FKYE ","M93N4FKZE ","M93N4FMXE ", & + "M93N4FMYE ","M93N4FMZE ","M93N4MKXE ","M93N4MKYE ","M93N4MKZE ","M93N4MMXE ","M93N4MMYE ", & + "M93N4MMZE ","M93N4RAXE ","M93N4RAYE ","M93N4RAZE ","M93N4RDXE ","M93N4RDYE ","M93N4RDZE ", & + "M93N4TAXE ","M93N4TAYE ","M93N4TAZE ","M93N4TDXSS","M93N4TDYSS","M93N4TDZSS","M93N5FKXE ", & + "M93N5FKYE ","M93N5FKZE ","M93N5FMXE ","M93N5FMYE ","M93N5FMZE ","M93N5MKXE ","M93N5MKYE ", & + "M93N5MKZE ","M93N5MMXE ","M93N5MMYE ","M93N5MMZE ","M93N5RAXE ","M93N5RAYE ","M93N5RAZE ", & + "M93N5RDXE ","M93N5RDYE ","M93N5RDZE ","M93N5TAXE ","M93N5TAYE ","M93N5TAZE ","M93N5TDXSS", & + "M93N5TDYSS","M93N5TDZSS","M93N6FKXE ","M93N6FKYE ","M93N6FKZE ","M93N6FMXE ","M93N6FMYE ", & + "M93N6FMZE ","M93N6MKXE ","M93N6MKYE ","M93N6MKZE ","M93N6MMXE ","M93N6MMYE ","M93N6MMZE ", & + "M93N6RAXE ","M93N6RAYE ","M93N6RAZE ","M93N6RDXE ","M93N6RDYE ","M93N6RDZE ","M93N6TAXE ", & + "M93N6TAYE ","M93N6TAZE ","M93N6TDXSS","M93N6TDYSS","M93N6TDZSS","M93N7FKXE ","M93N7FKYE ", & + "M93N7FKZE ","M93N7FMXE ","M93N7FMYE ","M93N7FMZE "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry13(1665) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "M93N7MKXE ","M93N7MKYE ","M93N7MKZE ","M93N7MMXE ","M93N7MMYE ","M93N7MMZE ","M93N7RAXE ", & + "M93N7RAYE ","M93N7RAZE ","M93N7RDXE ","M93N7RDYE ","M93N7RDZE ","M93N7TAXE ","M93N7TAYE ", & + "M93N7TAZE ","M93N7TDXSS","M93N7TDYSS","M93N7TDZSS","M93N8FKXE ","M93N8FKYE ","M93N8FKZE ", & + "M93N8FMXE ","M93N8FMYE ","M93N8FMZE ","M93N8MKXE ","M93N8MKYE ","M93N8MKZE ","M93N8MMXE ", & + "M93N8MMYE ","M93N8MMZE ","M93N8RAXE ","M93N8RAYE ","M93N8RAZE ","M93N8RDXE ","M93N8RDYE ", & + "M93N8RDZE ","M93N8TAXE ","M93N8TAYE ","M93N8TAZE ","M93N8TDXSS","M93N8TDYSS","M93N8TDZSS", & + "M93N9FKXE ","M93N9FKYE ","M93N9FKZE ","M93N9FMXE ","M93N9FMYE ","M93N9FMZE ","M93N9MKXE ", & + "M93N9MKYE ","M93N9MKZE ","M93N9MMXE ","M93N9MMYE ","M93N9MMZE ","M93N9RAXE ","M93N9RAYE ", & + "M93N9RAZE ","M93N9RDXE ","M93N9RDYE ","M93N9RDZE ","M93N9TAXE ","M93N9TAYE ","M93N9TAZE ", & + "M93N9TDXSS","M93N9TDYSS","M93N9TDZSS","M94N1FKXE ","M94N1FKYE ","M94N1FKZE ","M94N1FMXE ", & + "M94N1FMYE ","M94N1FMZE ","M94N1MKXE ","M94N1MKYE ","M94N1MKZE ","M94N1MMXE ","M94N1MMYE ", & + "M94N1MMZE ","M94N1RAXE ","M94N1RAYE ","M94N1RAZE ","M94N1RDXE ","M94N1RDYE ","M94N1RDZE ", & + "M94N1TAXE ","M94N1TAYE ","M94N1TAZE ","M94N1TDXSS","M94N1TDYSS","M94N1TDZSS","M94N2FKXE ", & + "M94N2FKYE ","M94N2FKZE ","M94N2FMXE ","M94N2FMYE ","M94N2FMZE ","M94N2MKXE ","M94N2MKYE ", & + "M94N2MKZE ","M94N2MMXE ","M94N2MMYE ","M94N2MMZE ","M94N2RAXE ","M94N2RAYE ","M94N2RAZE ", & + "M94N2RDXE ","M94N2RDYE ","M94N2RDZE ","M94N2TAXE ","M94N2TAYE ","M94N2TAZE ","M94N2TDXSS", & + "M94N2TDYSS","M94N2TDZSS","M94N3FKXE ","M94N3FKYE ","M94N3FKZE ","M94N3FMXE ","M94N3FMYE ", & + "M94N3FMZE ","M94N3MKXE ","M94N3MKYE ","M94N3MKZE ","M94N3MMXE ","M94N3MMYE ","M94N3MMZE ", & + "M94N3RAXE ","M94N3RAYE ","M94N3RAZE ","M94N3RDXE ","M94N3RDYE ","M94N3RDZE ","M94N3TAXE ", & + "M94N3TAYE ","M94N3TAZE ","M94N3TDXSS","M94N3TDYSS","M94N3TDZSS","M94N4FKXE ","M94N4FKYE ", & + "M94N4FKZE ","M94N4FMXE ","M94N4FMYE ","M94N4FMZE ","M94N4MKXE ","M94N4MKYE ","M94N4MKZE ", & + "M94N4MMXE ","M94N4MMYE ","M94N4MMZE ","M94N4RAXE ","M94N4RAYE ","M94N4RAZE ","M94N4RDXE ", & + "M94N4RDYE ","M94N4RDZE ","M94N4TAXE ","M94N4TAYE ","M94N4TAZE ","M94N4TDXSS","M94N4TDYSS", & + "M94N4TDZSS","M94N5FKXE ","M94N5FKYE ","M94N5FKZE ","M94N5FMXE ","M94N5FMYE ","M94N5FMZE ", & + "M94N5MKXE ","M94N5MKYE ","M94N5MKZE ","M94N5MMXE ","M94N5MMYE ","M94N5MMZE ","M94N5RAXE ", & + "M94N5RAYE ","M94N5RAZE ","M94N5RDXE ","M94N5RDYE ","M94N5RDZE ","M94N5TAXE ","M94N5TAYE ", & + "M94N5TAZE ","M94N5TDXSS","M94N5TDYSS","M94N5TDZSS","M94N6FKXE ","M94N6FKYE ","M94N6FKZE ", & + "M94N6FMXE ","M94N6FMYE ","M94N6FMZE ","M94N6MKXE ","M94N6MKYE ","M94N6MKZE ","M94N6MMXE ", & + "M94N6MMYE ","M94N6MMZE ","M94N6RAXE ","M94N6RAYE ","M94N6RAZE ","M94N6RDXE ","M94N6RDYE ", & + "M94N6RDZE ","M94N6TAXE ","M94N6TAYE ","M94N6TAZE ","M94N6TDXSS","M94N6TDYSS","M94N6TDZSS", & + "M94N7FKXE ","M94N7FKYE ","M94N7FKZE ","M94N7FMXE ","M94N7FMYE ","M94N7FMZE ","M94N7MKXE ", & + "M94N7MKYE ","M94N7MKZE ","M94N7MMXE ","M94N7MMYE ","M94N7MMZE ","M94N7RAXE ","M94N7RAYE ", & + "M94N7RAZE ","M94N7RDXE ","M94N7RDYE ","M94N7RDZE ","M94N7TAXE ","M94N7TAYE ","M94N7TAZE ", & + "M94N7TDXSS","M94N7TDYSS","M94N7TDZSS","M94N8FKXE ","M94N8FKYE ","M94N8FKZE ","M94N8FMXE ", & + "M94N8FMYE ","M94N8FMZE ","M94N8MKXE ","M94N8MKYE ","M94N8MKZE ","M94N8MMXE ","M94N8MMYE ", & + "M94N8MMZE ","M94N8RAXE ","M94N8RAYE ","M94N8RAZE ","M94N8RDXE ","M94N8RDYE ","M94N8RDZE ", & + "M94N8TAXE ","M94N8TAYE ","M94N8TAZE ","M94N8TDXSS","M94N8TDYSS","M94N8TDZSS","M94N9FKXE ", & + "M94N9FKYE ","M94N9FKZE ","M94N9FMXE ","M94N9FMYE ","M94N9FMZE ","M94N9MKXE ","M94N9MKYE ", & + "M94N9MKZE ","M94N9MMXE ","M94N9MMYE ","M94N9MMZE ","M94N9RAXE ","M94N9RAYE ","M94N9RAZE ", & + "M94N9RDXE ","M94N9RDYE ","M94N9RDZE ","M94N9TAXE ","M94N9TAYE ","M94N9TAZE ","M94N9TDXSS", & + "M94N9TDYSS","M94N9TDZSS","M95N1FKXE ","M95N1FKYE ","M95N1FKZE ","M95N1FMXE ","M95N1FMYE ", & + "M95N1FMZE ","M95N1MKXE ","M95N1MKYE ","M95N1MKZE ","M95N1MMXE ","M95N1MMYE ","M95N1MMZE ", & + "M95N1RAXE ","M95N1RAYE ","M95N1RAZE ","M95N1RDXE ","M95N1RDYE ","M95N1RDZE ","M95N1TAXE ", & + "M95N1TAYE ","M95N1TAZE ","M95N1TDXSS","M95N1TDYSS","M95N1TDZSS","M95N2FKXE ","M95N2FKYE ", & + "M95N2FKZE ","M95N2FMXE ","M95N2FMYE ","M95N2FMZE ","M95N2MKXE ","M95N2MKYE ","M95N2MKZE ", & + "M95N2MMXE ","M95N2MMYE ","M95N2MMZE ","M95N2RAXE ","M95N2RAYE ","M95N2RAZE ","M95N2RDXE ", & + "M95N2RDYE ","M95N2RDZE ","M95N2TAXE ","M95N2TAYE ","M95N2TAZE ","M95N2TDXSS","M95N2TDYSS", & + "M95N2TDZSS","M95N3FKXE ","M95N3FKYE ","M95N3FKZE ","M95N3FMXE ","M95N3FMYE ","M95N3FMZE ", & + "M95N3MKXE ","M95N3MKYE ","M95N3MKZE ","M95N3MMXE ","M95N3MMYE ","M95N3MMZE ","M95N3RAXE ", & + "M95N3RAYE ","M95N3RAZE ","M95N3RDXE ","M95N3RDYE ","M95N3RDZE ","M95N3TAXE ","M95N3TAYE ", & + "M95N3TAZE ","M95N3TDXSS","M95N3TDYSS","M95N3TDZSS","M95N4FKXE ","M95N4FKYE ","M95N4FKZE ", & + "M95N4FMXE ","M95N4FMYE ","M95N4FMZE ","M95N4MKXE ","M95N4MKYE ","M95N4MKZE ","M95N4MMXE ", & + "M95N4MMYE ","M95N4MMZE ","M95N4RAXE ","M95N4RAYE ","M95N4RAZE ","M95N4RDXE ","M95N4RDYE ", & + "M95N4RDZE ","M95N4TAXE ","M95N4TAYE ","M95N4TAZE ","M95N4TDXSS","M95N4TDYSS","M95N4TDZSS", & + "M95N5FKXE ","M95N5FKYE ","M95N5FKZE ","M95N5FMXE ","M95N5FMYE ","M95N5FMZE ","M95N5MKXE ", & + "M95N5MKYE ","M95N5MKZE ","M95N5MMXE ","M95N5MMYE ","M95N5MMZE ","M95N5RAXE ","M95N5RAYE ", & + "M95N5RAZE ","M95N5RDXE ","M95N5RDYE ","M95N5RDZE ","M95N5TAXE ","M95N5TAYE ","M95N5TAZE ", & + "M95N5TDXSS","M95N5TDYSS","M95N5TDZSS","M95N6FKXE ","M95N6FKYE ","M95N6FKZE ","M95N6FMXE ", & + "M95N6FMYE ","M95N6FMZE ","M95N6MKXE ","M95N6MKYE ","M95N6MKZE ","M95N6MMXE ","M95N6MMYE ", & + "M95N6MMZE ","M95N6RAXE ","M95N6RAYE ","M95N6RAZE ","M95N6RDXE ","M95N6RDYE ","M95N6RDZE ", & + "M95N6TAXE ","M95N6TAYE ","M95N6TAZE ","M95N6TDXSS","M95N6TDYSS","M95N6TDZSS","M95N7FKXE ", & + "M95N7FKYE ","M95N7FKZE ","M95N7FMXE ","M95N7FMYE ","M95N7FMZE ","M95N7MKXE ","M95N7MKYE ", & + "M95N7MKZE ","M95N7MMXE ","M95N7MMYE ","M95N7MMZE ","M95N7RAXE ","M95N7RAYE ","M95N7RAZE ", & + "M95N7RDXE ","M95N7RDYE ","M95N7RDZE ","M95N7TAXE ","M95N7TAYE ","M95N7TAZE ","M95N7TDXSS", & + "M95N7TDYSS","M95N7TDZSS","M95N8FKXE ","M95N8FKYE ","M95N8FKZE ","M95N8FMXE ","M95N8FMYE ", & + "M95N8FMZE ","M95N8MKXE ","M95N8MKYE ","M95N8MKZE ","M95N8MMXE ","M95N8MMYE ","M95N8MMZE ", & + "M95N8RAXE ","M95N8RAYE ","M95N8RAZE ","M95N8RDXE ","M95N8RDYE ","M95N8RDZE ","M95N8TAXE ", & + "M95N8TAYE ","M95N8TAZE ","M95N8TDXSS","M95N8TDYSS","M95N8TDZSS","M95N9FKXE ","M95N9FKYE ", & + "M95N9FKZE ","M95N9FMXE ","M95N9FMYE ","M95N9FMZE ","M95N9MKXE ","M95N9MKYE ","M95N9MKZE ", & + "M95N9MMXE ","M95N9MMYE ","M95N9MMZE ","M95N9RAXE ","M95N9RAYE ","M95N9RAZE ","M95N9RDXE ", & + "M95N9RDYE ","M95N9RDZE ","M95N9TAXE ","M95N9TAYE ","M95N9TAZE ","M95N9TDXSS","M95N9TDYSS", & + "M95N9TDZSS","M96N1FKXE ","M96N1FKYE ","M96N1FKZE ","M96N1FMXE ","M96N1FMYE ","M96N1FMZE ", & + "M96N1MKXE ","M96N1MKYE ","M96N1MKZE ","M96N1MMXE ","M96N1MMYE ","M96N1MMZE ","M96N1RAXE ", & + "M96N1RAYE ","M96N1RAZE ","M96N1RDXE ","M96N1RDYE ","M96N1RDZE ","M96N1TAXE ","M96N1TAYE ", & + "M96N1TAZE ","M96N1TDXSS","M96N1TDYSS","M96N1TDZSS","M96N2FKXE ","M96N2FKYE ","M96N2FKZE ", & + "M96N2FMXE ","M96N2FMYE ","M96N2FMZE ","M96N2MKXE ","M96N2MKYE ","M96N2MKZE ","M96N2MMXE ", & + "M96N2MMYE ","M96N2MMZE ","M96N2RAXE ","M96N2RAYE ","M96N2RAZE ","M96N2RDXE ","M96N2RDYE ", & + "M96N2RDZE ","M96N2TAXE ","M96N2TAYE ","M96N2TAZE ","M96N2TDXSS","M96N2TDYSS","M96N2TDZSS", & + "M96N3FKXE ","M96N3FKYE ","M96N3FKZE ","M96N3FMXE ","M96N3FMYE ","M96N3FMZE ","M96N3MKXE ", & + "M96N3MKYE ","M96N3MKZE ","M96N3MMXE ","M96N3MMYE ","M96N3MMZE ","M96N3RAXE ","M96N3RAYE ", & + "M96N3RAZE ","M96N3RDXE ","M96N3RDYE ","M96N3RDZE ","M96N3TAXE ","M96N3TAYE ","M96N3TAZE ", & + "M96N3TDXSS","M96N3TDYSS","M96N3TDZSS","M96N4FKXE ","M96N4FKYE ","M96N4FKZE ","M96N4FMXE ", & + "M96N4FMYE ","M96N4FMZE ","M96N4MKXE ","M96N4MKYE ","M96N4MKZE ","M96N4MMXE ","M96N4MMYE ", & + "M96N4MMZE ","M96N4RAXE ","M96N4RAYE ","M96N4RAZE ","M96N4RDXE ","M96N4RDYE ","M96N4RDZE ", & + "M96N4TAXE ","M96N4TAYE ","M96N4TAZE ","M96N4TDXSS","M96N4TDYSS","M96N4TDZSS","M96N5FKXE ", & + "M96N5FKYE ","M96N5FKZE ","M96N5FMXE ","M96N5FMYE ","M96N5FMZE ","M96N5MKXE ","M96N5MKYE ", & + "M96N5MKZE ","M96N5MMXE ","M96N5MMYE ","M96N5MMZE ","M96N5RAXE ","M96N5RAYE ","M96N5RAZE ", & + "M96N5RDXE ","M96N5RDYE ","M96N5RDZE ","M96N5TAXE ","M96N5TAYE ","M96N5TAZE ","M96N5TDXSS", & + "M96N5TDYSS","M96N5TDZSS","M96N6FKXE ","M96N6FKYE ","M96N6FKZE ","M96N6FMXE ","M96N6FMYE ", & + "M96N6FMZE ","M96N6MKXE ","M96N6MKYE ","M96N6MKZE ","M96N6MMXE ","M96N6MMYE ","M96N6MMZE ", & + "M96N6RAXE ","M96N6RAYE ","M96N6RAZE ","M96N6RDXE ","M96N6RDYE ","M96N6RDZE ","M96N6TAXE ", & + "M96N6TAYE ","M96N6TAZE ","M96N6TDXSS","M96N6TDYSS","M96N6TDZSS","M96N7FKXE ","M96N7FKYE ", & + "M96N7FKZE ","M96N7FMXE ","M96N7FMYE ","M96N7FMZE ","M96N7MKXE ","M96N7MKYE ","M96N7MKZE ", & + "M96N7MMXE ","M96N7MMYE ","M96N7MMZE ","M96N7RAXE ","M96N7RAYE ","M96N7RAZE ","M96N7RDXE ", & + "M96N7RDYE ","M96N7RDZE ","M96N7TAXE ","M96N7TAYE ","M96N7TAZE ","M96N7TDXSS","M96N7TDYSS", & + "M96N7TDZSS","M96N8FKXE ","M96N8FKYE ","M96N8FKZE ","M96N8FMXE ","M96N8FMYE ","M96N8FMZE ", & + "M96N8MKXE ","M96N8MKYE ","M96N8MKZE ","M96N8MMXE ","M96N8MMYE ","M96N8MMZE ","M96N8RAXE ", & + "M96N8RAYE ","M96N8RAZE ","M96N8RDXE ","M96N8RDYE ","M96N8RDZE ","M96N8TAXE ","M96N8TAYE ", & + "M96N8TAZE ","M96N8TDXSS","M96N8TDYSS","M96N8TDZSS","M96N9FKXE ","M96N9FKYE ","M96N9FKZE ", & + "M96N9FMXE ","M96N9FMYE ","M96N9FMZE ","M96N9MKXE ","M96N9MKYE ","M96N9MKZE ","M96N9MMXE ", & + "M96N9MMYE ","M96N9MMZE ","M96N9RAXE ","M96N9RAYE ","M96N9RAZE ","M96N9RDXE ","M96N9RDYE ", & + "M96N9RDZE ","M96N9TAXE ","M96N9TAYE ","M96N9TAZE ","M96N9TDXSS","M96N9TDYSS","M96N9TDZSS", & + "M97N1FKXE ","M97N1FKYE ","M97N1FKZE ","M97N1FMXE ","M97N1FMYE ","M97N1FMZE ","M97N1MKXE ", & + "M97N1MKYE ","M97N1MKZE ","M97N1MMXE ","M97N1MMYE ","M97N1MMZE ","M97N1RAXE ","M97N1RAYE ", & + "M97N1RAZE ","M97N1RDXE ","M97N1RDYE ","M97N1RDZE ","M97N1TAXE ","M97N1TAYE ","M97N1TAZE ", & + "M97N1TDXSS","M97N1TDYSS","M97N1TDZSS","M97N2FKXE ","M97N2FKYE ","M97N2FKZE ","M97N2FMXE ", & + "M97N2FMYE ","M97N2FMZE ","M97N2MKXE ","M97N2MKYE ","M97N2MKZE ","M97N2MMXE ","M97N2MMYE ", & + "M97N2MMZE ","M97N2RAXE ","M97N2RAYE ","M97N2RAZE ","M97N2RDXE ","M97N2RDYE ","M97N2RDZE ", & + "M97N2TAXE ","M97N2TAYE ","M97N2TAZE ","M97N2TDXSS","M97N2TDYSS","M97N2TDZSS","M97N3FKXE ", & + "M97N3FKYE ","M97N3FKZE ","M97N3FMXE ","M97N3FMYE ","M97N3FMZE ","M97N3MKXE ","M97N3MKYE ", & + "M97N3MKZE ","M97N3MMXE ","M97N3MMYE ","M97N3MMZE ","M97N3RAXE ","M97N3RAYE ","M97N3RAZE ", & + "M97N3RDXE ","M97N3RDYE ","M97N3RDZE ","M97N3TAXE ","M97N3TAYE ","M97N3TAZE ","M97N3TDXSS", & + "M97N3TDYSS","M97N3TDZSS","M97N4FKXE ","M97N4FKYE ","M97N4FKZE ","M97N4FMXE ","M97N4FMYE ", & + "M97N4FMZE ","M97N4MKXE ","M97N4MKYE ","M97N4MKZE ","M97N4MMXE ","M97N4MMYE ","M97N4MMZE ", & + "M97N4RAXE ","M97N4RAYE ","M97N4RAZE ","M97N4RDXE ","M97N4RDYE ","M97N4RDZE ","M97N4TAXE ", & + "M97N4TAYE ","M97N4TAZE ","M97N4TDXSS","M97N4TDYSS","M97N4TDZSS","M97N5FKXE ","M97N5FKYE ", & + "M97N5FKZE ","M97N5FMXE ","M97N5FMYE ","M97N5FMZE ","M97N5MKXE ","M97N5MKYE ","M97N5MKZE ", & + "M97N5MMXE ","M97N5MMYE ","M97N5MMZE ","M97N5RAXE ","M97N5RAYE ","M97N5RAZE ","M97N5RDXE ", & + "M97N5RDYE ","M97N5RDZE ","M97N5TAXE ","M97N5TAYE ","M97N5TAZE ","M97N5TDXSS","M97N5TDYSS", & + "M97N5TDZSS","M97N6FKXE ","M97N6FKYE ","M97N6FKZE ","M97N6FMXE ","M97N6FMYE ","M97N6FMZE ", & + "M97N6MKXE ","M97N6MKYE ","M97N6MKZE ","M97N6MMXE ","M97N6MMYE ","M97N6MMZE ","M97N6RAXE ", & + "M97N6RAYE ","M97N6RAZE ","M97N6RDXE ","M97N6RDYE ","M97N6RDZE ","M97N6TAXE ","M97N6TAYE ", & + "M97N6TAZE ","M97N6TDXSS","M97N6TDYSS","M97N6TDZSS","M97N7FKXE ","M97N7FKYE ","M97N7FKZE ", & + "M97N7FMXE ","M97N7FMYE ","M97N7FMZE ","M97N7MKXE ","M97N7MKYE ","M97N7MKZE ","M97N7MMXE ", & + "M97N7MMYE ","M97N7MMZE ","M97N7RAXE ","M97N7RAYE ","M97N7RAZE ","M97N7RDXE ","M97N7RDYE ", & + "M97N7RDZE ","M97N7TAXE ","M97N7TAYE ","M97N7TAZE ","M97N7TDXSS","M97N7TDYSS","M97N7TDZSS", & + "M97N8FKXE ","M97N8FKYE ","M97N8FKZE ","M97N8FMXE ","M97N8FMYE ","M97N8FMZE ","M97N8MKXE ", & + "M97N8MKYE ","M97N8MKZE ","M97N8MMXE ","M97N8MMYE ","M97N8MMZE ","M97N8RAXE ","M97N8RAYE ", & + "M97N8RAZE ","M97N8RDXE ","M97N8RDYE ","M97N8RDZE ","M97N8TAXE ","M97N8TAYE ","M97N8TAZE ", & + "M97N8TDXSS","M97N8TDYSS","M97N8TDZSS","M97N9FKXE ","M97N9FKYE ","M97N9FKZE ","M97N9FMXE ", & + "M97N9FMYE ","M97N9FMZE ","M97N9MKXE ","M97N9MKYE ","M97N9MKZE ","M97N9MMXE ","M97N9MMYE ", & + "M97N9MMZE ","M97N9RAXE ","M97N9RAYE ","M97N9RAZE ","M97N9RDXE ","M97N9RDYE ","M97N9RDZE ", & + "M97N9TAXE ","M97N9TAYE ","M97N9TAZE ","M97N9TDXSS","M97N9TDYSS","M97N9TDZSS","M98N1FKXE ", & + "M98N1FKYE ","M98N1FKZE ","M98N1FMXE ","M98N1FMYE ","M98N1FMZE ","M98N1MKXE ","M98N1MKYE ", & + "M98N1MKZE ","M98N1MMXE ","M98N1MMYE ","M98N1MMZE ","M98N1RAXE ","M98N1RAYE ","M98N1RAZE ", & + "M98N1RDXE ","M98N1RDYE ","M98N1RDZE ","M98N1TAXE ","M98N1TAYE ","M98N1TAZE ","M98N1TDXSS", & + "M98N1TDYSS","M98N1TDZSS","M98N2FKXE ","M98N2FKYE ","M98N2FKZE ","M98N2FMXE ","M98N2FMYE ", & + "M98N2FMZE ","M98N2MKXE ","M98N2MKYE ","M98N2MKZE ","M98N2MMXE ","M98N2MMYE ","M98N2MMZE ", & + "M98N2RAXE ","M98N2RAYE ","M98N2RAZE ","M98N2RDXE ","M98N2RDYE ","M98N2RDZE ","M98N2TAXE ", & + "M98N2TAYE ","M98N2TAZE ","M98N2TDXSS","M98N2TDYSS","M98N2TDZSS","M98N3FKXE ","M98N3FKYE ", & + "M98N3FKZE ","M98N3FMXE ","M98N3FMYE ","M98N3FMZE ","M98N3MKXE ","M98N3MKYE ","M98N3MKZE ", & + "M98N3MMXE ","M98N3MMYE ","M98N3MMZE ","M98N3RAXE ","M98N3RAYE ","M98N3RAZE ","M98N3RDXE ", & + "M98N3RDYE ","M98N3RDZE ","M98N3TAXE ","M98N3TAYE ","M98N3TAZE ","M98N3TDXSS","M98N3TDYSS", & + "M98N3TDZSS","M98N4FKXE ","M98N4FKYE ","M98N4FKZE ","M98N4FMXE ","M98N4FMYE ","M98N4FMZE ", & + "M98N4MKXE ","M98N4MKYE ","M98N4MKZE ","M98N4MMXE ","M98N4MMYE ","M98N4MMZE ","M98N4RAXE ", & + "M98N4RAYE ","M98N4RAZE ","M98N4RDXE ","M98N4RDYE ","M98N4RDZE ","M98N4TAXE ","M98N4TAYE ", & + "M98N4TAZE ","M98N4TDXSS","M98N4TDYSS","M98N4TDZSS","M98N5FKXE ","M98N5FKYE ","M98N5FKZE ", & + "M98N5FMXE ","M98N5FMYE ","M98N5FMZE ","M98N5MKXE ","M98N5MKYE ","M98N5MKZE ","M98N5MMXE ", & + "M98N5MMYE ","M98N5MMZE ","M98N5RAXE ","M98N5RAYE ","M98N5RAZE ","M98N5RDXE ","M98N5RDYE ", & + "M98N5RDZE ","M98N5TAXE ","M98N5TAYE ","M98N5TAZE ","M98N5TDXSS","M98N5TDYSS","M98N5TDZSS", & + "M98N6FKXE ","M98N6FKYE ","M98N6FKZE ","M98N6FMXE ","M98N6FMYE ","M98N6FMZE ","M98N6MKXE ", & + "M98N6MKYE ","M98N6MKZE ","M98N6MMXE ","M98N6MMYE ","M98N6MMZE ","M98N6RAXE ","M98N6RAYE ", & + "M98N6RAZE ","M98N6RDXE ","M98N6RDYE ","M98N6RDZE ","M98N6TAXE ","M98N6TAYE ","M98N6TAZE ", & + "M98N6TDXSS","M98N6TDYSS","M98N6TDZSS","M98N7FKXE ","M98N7FKYE ","M98N7FKZE ","M98N7FMXE ", & + "M98N7FMYE ","M98N7FMZE ","M98N7MKXE ","M98N7MKYE ","M98N7MKZE ","M98N7MMXE ","M98N7MMYE ", & + "M98N7MMZE ","M98N7RAXE ","M98N7RAYE ","M98N7RAZE ","M98N7RDXE ","M98N7RDYE ","M98N7RDZE ", & + "M98N7TAXE ","M98N7TAYE ","M98N7TAZE ","M98N7TDXSS","M98N7TDYSS","M98N7TDZSS","M98N8FKXE ", & + "M98N8FKYE ","M98N8FKZE ","M98N8FMXE ","M98N8FMYE ","M98N8FMZE ","M98N8MKXE ","M98N8MKYE ", & + "M98N8MKZE ","M98N8MMXE ","M98N8MMYE ","M98N8MMZE ","M98N8RAXE ","M98N8RAYE ","M98N8RAZE ", & + "M98N8RDXE ","M98N8RDYE ","M98N8RDZE ","M98N8TAXE ","M98N8TAYE ","M98N8TAZE ","M98N8TDXSS", & + "M98N8TDYSS","M98N8TDZSS","M98N9FKXE ","M98N9FKYE ","M98N9FKZE ","M98N9FMXE ","M98N9FMYE ", & + "M98N9FMZE ","M98N9MKXE ","M98N9MKYE ","M98N9MKZE ","M98N9MMXE ","M98N9MMYE ","M98N9MMZE ", & + "M98N9RAXE ","M98N9RAYE ","M98N9RAZE ","M98N9RDXE ","M98N9RDYE ","M98N9RDZE ","M98N9TAXE ", & + "M98N9TAYE ","M98N9TAZE ","M98N9TDXSS","M98N9TDYSS","M98N9TDZSS","M99N1FKXE ","M99N1FKYE ", & + "M99N1FKZE ","M99N1FMXE ","M99N1FMYE ","M99N1FMZE ","M99N1MKXE ","M99N1MKYE ","M99N1MKZE ", & + "M99N1MMXE ","M99N1MMYE ","M99N1MMZE ","M99N1RAXE ","M99N1RAYE ","M99N1RAZE ","M99N1RDXE ", & + "M99N1RDYE ","M99N1RDZE ","M99N1TAXE ","M99N1TAYE ","M99N1TAZE ","M99N1TDXSS","M99N1TDYSS", & + "M99N1TDZSS","M99N2FKXE ","M99N2FKYE ","M99N2FKZE ","M99N2FMXE ","M99N2FMYE ","M99N2FMZE ", & + "M99N2MKXE ","M99N2MKYE ","M99N2MKZE ","M99N2MMXE ","M99N2MMYE ","M99N2MMZE ","M99N2RAXE ", & + "M99N2RAYE ","M99N2RAZE ","M99N2RDXE ","M99N2RDYE ","M99N2RDZE ","M99N2TAXE ","M99N2TAYE ", & + "M99N2TAZE ","M99N2TDXSS","M99N2TDYSS","M99N2TDZSS","M99N3FKXE ","M99N3FKYE ","M99N3FKZE ", & + "M99N3FMXE ","M99N3FMYE ","M99N3FMZE ","M99N3MKXE ","M99N3MKYE ","M99N3MKZE ","M99N3MMXE ", & + "M99N3MMYE ","M99N3MMZE ","M99N3RAXE ","M99N3RAYE ","M99N3RAZE ","M99N3RDXE ","M99N3RDYE ", & + "M99N3RDZE ","M99N3TAXE ","M99N3TAYE ","M99N3TAZE ","M99N3TDXSS","M99N3TDYSS","M99N3TDZSS", & + "M99N4FKXE ","M99N4FKYE ","M99N4FKZE ","M99N4FMXE ","M99N4FMYE ","M99N4FMZE ","M99N4MKXE ", & + "M99N4MKYE ","M99N4MKZE ","M99N4MMXE ","M99N4MMYE ","M99N4MMZE ","M99N4RAXE ","M99N4RAYE ", & + "M99N4RAZE ","M99N4RDXE ","M99N4RDYE ","M99N4RDZE ","M99N4TAXE ","M99N4TAYE ","M99N4TAZE ", & + "M99N4TDXSS","M99N4TDYSS","M99N4TDZSS","M99N5FKXE ","M99N5FKYE ","M99N5FKZE ","M99N5FMXE ", & + "M99N5FMYE ","M99N5FMZE ","M99N5MKXE ","M99N5MKYE ","M99N5MKZE ","M99N5MMXE ","M99N5MMYE ", & + "M99N5MMZE ","M99N5RAXE ","M99N5RAYE ","M99N5RAZE ","M99N5RDXE ","M99N5RDYE ","M99N5RDZE ", & + "M99N5TAXE ","M99N5TAYE ","M99N5TAZE ","M99N5TDXSS","M99N5TDYSS","M99N5TDZSS","M99N6FKXE ", & + "M99N6FKYE ","M99N6FKZE ","M99N6FMXE ","M99N6FMYE ","M99N6FMZE ","M99N6MKXE ","M99N6MKYE ", & + "M99N6MKZE ","M99N6MMXE ","M99N6MMYE ","M99N6MMZE ","M99N6RAXE ","M99N6RAYE ","M99N6RAZE ", & + "M99N6RDXE ","M99N6RDYE ","M99N6RDZE ","M99N6TAXE ","M99N6TAYE ","M99N6TAZE ","M99N6TDXSS", & + "M99N6TDYSS","M99N6TDZSS","M99N7FKXE ","M99N7FKYE ","M99N7FKZE ","M99N7FMXE ","M99N7FMYE ", & + "M99N7FMZE ","M99N7MKXE ","M99N7MKYE ","M99N7MKZE ","M99N7MMXE ","M99N7MMYE ","M99N7MMZE ", & + "M99N7RAXE ","M99N7RAYE ","M99N7RAZE ","M99N7RDXE ","M99N7RDYE ","M99N7RDZE ","M99N7TAXE ", & + "M99N7TAYE ","M99N7TAZE ","M99N7TDXSS","M99N7TDYSS","M99N7TDZSS","M99N8FKXE ","M99N8FKYE ", & + "M99N8FKZE ","M99N8FMXE ","M99N8FMYE ","M99N8FMZE ","M99N8MKXE ","M99N8MKYE ","M99N8MKZE ", & + "M99N8MMXE ","M99N8MMYE ","M99N8MMZE ","M99N8RAXE ","M99N8RAYE ","M99N8RAZE ","M99N8RDXE ", & + "M99N8RDYE ","M99N8RDZE ","M99N8TAXE ","M99N8TAYE ","M99N8TAZE ","M99N8TDXSS","M99N8TDYSS", & + "M99N8TDZSS","M99N9FKXE ","M99N9FKYE ","M99N9FKZE ","M99N9FMXE ","M99N9FMYE ","M99N9FMZE ", & + "M99N9MKXE ","M99N9MKYE ","M99N9MKZE ","M99N9MMXE ","M99N9MMYE ","M99N9MMZE ","M99N9RAXE ", & + "M99N9RAYE ","M99N9RAZE ","M99N9RDXE ","M99N9RDYE ","M99N9RDZE ","M99N9TAXE ","M99N9TAYE ", & + "M99N9TAZE ","M99N9TDXSS","M99N9TDYSS","M99N9TDZSS","REACTFXSS ","REACTFYSS ","REACTFZSS ", & + "REACTMXSS ","REACTMYSS ","REACTMZSS ","SSQM01 ","SSQM02 ","SSQM03 ","SSQM04 ", & + "SSQM05 ","SSQM06 ","SSQM07 ","SSQM08 ","SSQM09 ","SSQM10 ","SSQM11 ", & + "SSQM12 ","SSQM13 ","SSQM14 ","SSQM15 ","SSQM16 ","SSQM17 ","SSQM18 ", & + "SSQM19 ","SSQM20 ","SSQM21 ","SSQM22 ","SSQM23 ","SSQM24 ","SSQM25 ", & + "SSQM26 ","SSQM27 ","SSQM28 ","SSQM29 ","SSQM30 ","SSQM31 ","SSQM32 ", & + "SSQM33 ","SSQM34 ","SSQM35 ","SSQM36 ","SSQM37 ","SSQM38 ","SSQM39 ", & + "SSQM40 ","SSQM41 ","SSQM42 ","SSQM43 ","SSQM44 ","SSQM45 ","SSQM46 ", & + "SSQM47 ","SSQM48 ","SSQM49 ","SSQM50 ","SSQM51 ","SSQM52 ","SSQM53 ", & + "SSQM54 ","SSQM55 ","SSQM56 ","SSQM57 ","SSQM58 ","SSQM59 ","SSQM60 ", & + "SSQM61 ","SSQM62 ","SSQM63 ","SSQM64 ","SSQM65 ","SSQM66 ","SSQM67 ", & + "SSQM68 ","SSQM69 ","SSQM70 ","SSQM71 ","SSQM72 ","SSQM73 ","SSQM74 ", & + "SSQM75 ","SSQM76 ","SSQM77 ","SSQM78 ","SSQM79 ","SSQM80 ","SSQM81 ", & + "SSQM82 ","SSQM83 ","SSQM84 ","SSQM85 ","SSQM86 ","SSQM87 ","SSQM88 ", & + "SSQM89 ","SSQM90 ","SSQM91 ","SSQM92 ","SSQM93 ","SSQM94 ","SSQM95 ", & + "SSQM96 ","SSQM97 ","SSQM98 ","SSQM99 ","SSQMD01 ","SSQMD02 ","SSQMD03 ", & + "SSQMD04 ","SSQMD05 ","SSQMD06 ","SSQMD07 ","SSQMD08 ","SSQMD09 ","SSQMD10 ", & + "SSQMD11 ","SSQMD12 ","SSQMD13 ","SSQMD14 ","SSQMD15 ","SSQMD16 ","SSQMD17 ", & + "SSQMD18 ","SSQMD19 ","SSQMD20 ","SSQMD21 ","SSQMD22 ","SSQMD23 ","SSQMD24 ", & + "SSQMD25 ","SSQMD26 ","SSQMD27 ","SSQMD28 ","SSQMD29 ","SSQMD30 ","SSQMD31 ", & + "SSQMD32 ","SSQMD33 ","SSQMD34 ","SSQMD35 ","SSQMD36 ","SSQMD37 ","SSQMD38 ", & + "SSQMD39 ","SSQMD40 ","SSQMD41 ","SSQMD42 ","SSQMD43 ","SSQMD44 ","SSQMD45 ", & + "SSQMD46 ","SSQMD47 ","SSQMD48 ","SSQMD49 ","SSQMD50 ","SSQMD51 ","SSQMD52 ", & + "SSQMD53 ","SSQMD54 ","SSQMD55 ","SSQMD56 ","SSQMD57 ","SSQMD58 ","SSQMD59 ", & + "SSQMD60 ","SSQMD61 ","SSQMD62 ","SSQMD63 ","SSQMD64 ","SSQMD65 ","SSQMD66 ", & + "SSQMD67 ","SSQMD68 ","SSQMD69 ","SSQMD70 ","SSQMD71 ","SSQMD72 ","SSQMD73 ", & + "SSQMD74 ","SSQMD75 ","SSQMD76 ","SSQMD77 ","SSQMD78 ","SSQMD79 ","SSQMD80 ", & + "SSQMD81 ","SSQMD82 ","SSQMD83 ","SSQMD84 ","SSQMD85 ","SSQMD86 ","SSQMD87 ", & + "SSQMD88 ","SSQMD89 ","SSQMD90 ","SSQMD91 ","SSQMD92 ","SSQMD93 ","SSQMD94 ", & + "SSQMD95 ","SSQMD96 ","SSQMD97 ","SSQMD98 ","SSQMD99 ","SSQMDD01 ","SSQMDD02 ", & + "SSQMDD03 ","SSQMDD04 ","SSQMDD05 ","SSQMDD06 ","SSQMDD07 ","SSQMDD08 ","SSQMDD09 ", & + "SSQMDD10 ","SSQMDD11 ","SSQMDD12 ","SSQMDD13 ","SSQMDD14 ","SSQMDD15 ","SSQMDD16 ", & + "SSQMDD17 ","SSQMDD18 ","SSQMDD19 ","SSQMDD20 ","SSQMDD21 ","SSQMDD22 ","SSQMDD23 ", & + "SSQMDD24 ","SSQMDD25 ","SSQMDD26 ","SSQMDD27 ","SSQMDD28 ","SSQMDD29 ","SSQMDD30 ", & + "SSQMDD31 ","SSQMDD32 ","SSQMDD33 ","SSQMDD34 ","SSQMDD35 ","SSQMDD36 ","SSQMDD37 ", & + "SSQMDD38 ","SSQMDD39 ","SSQMDD40 ","SSQMDD41 ","SSQMDD42 ","SSQMDD43 ","SSQMDD44 ", & + "SSQMDD45 ","SSQMDD46 ","SSQMDD47 ","SSQMDD48 ","SSQMDD49 ","SSQMDD50 ","SSQMDD51 ", & + "SSQMDD52 ","SSQMDD53 ","SSQMDD54 ","SSQMDD55 ","SSQMDD56 ","SSQMDD57 ","SSQMDD58 ", & + "SSQMDD59 ","SSQMDD60 ","SSQMDD61 ","SSQMDD62 ","SSQMDD63 ","SSQMDD64 ","SSQMDD65 ", & + "SSQMDD66 ","SSQMDD67 ","SSQMDD68 ","SSQMDD69 ","SSQMDD70 ","SSQMDD71 ","SSQMDD72 ", & + "SSQMDD73 ","SSQMDD74 ","SSQMDD75 ","SSQMDD76 ","SSQMDD77 ","SSQMDD78 ","SSQMDD79 ", & + "SSQMDD80 ","SSQMDD81 ","SSQMDD82 ","SSQMDD83 ","SSQMDD84 ","SSQMDD85 ","SSQMDD86 ", & + "SSQMDD87 ","SSQMDD88 ","SSQMDD89 ","SSQMDD90 ","SSQMDD91 ","SSQMDD92 ","SSQMDD93 ", & + "SSQMDD94 ","SSQMDD95 ","SSQMDD96 ","SSQMDD97 ","SSQMDD98 ","SSQMDD99 "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(21705) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + ValidParamAry1, ValidParamAry2, ValidParamAry3, ValidParamAry4, ValidParamAry5, ValidParamAry6, ValidParamAry7, ValidParamAry8, ValidParamAry9, ValidParamAry10, ValidParamAry11, ValidParamAry12, ValidParamAry13/) + + INTEGER(IntKi), PARAMETER :: ParamIndxAry1(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + IntfFXss , IntfFYss , IntfFZss , IntfMXss , IntfMYss , IntfMZss , IntfRAXss , & + IntfRAYss , IntfRAZss , IntfRDXss , IntfRDYss , IntfRDZss , IntfTAXss , IntfTAYss , & + IntfTAZss , IntfTDXss , IntfTDYss , IntfTDZss , M01N1FKxe , M01N1FKye , M01N1FKze , & + M01N1FMxe , M01N1FMye , M01N1FMze , M01N1MKxe , M01N1MKye , M01N1MKze , M01N1MMxe , & + M01N1MMye , M01N1MMze , M01N1RAxe , M01N1RAye , M01N1RAze , M01N1RDxe , M01N1RDye , & + M01N1RDze , M01N1TAxe , M01N1TAye , M01N1TAze , M01N1TDxss , M01N1TDyss , M01N1TDzss , & + M01N2FKxe , M01N2FKye , M01N2FKze , M01N2FMxe , M01N2FMye , M01N2FMze , M01N2MKxe , & + M01N2MKye , M01N2MKze , M01N2MMxe , M01N2MMye , M01N2MMze , M01N2RAxe , M01N2RAye , & + M01N2RAze , M01N2RDxe , M01N2RDye , M01N2RDze , M01N2TAxe , M01N2TAye , M01N2TAze , & + M01N2TDxss , M01N2TDyss , M01N2TDzss , M01N3FKxe , M01N3FKye , M01N3FKze , M01N3FMxe , & + M01N3FMye , M01N3FMze , M01N3MKxe , M01N3MKye , M01N3MKze , M01N3MMxe , M01N3MMye , & + M01N3MMze , M01N3RAxe , M01N3RAye , M01N3RAze , M01N3RDxe , M01N3RDye , M01N3RDze , & + M01N3TAxe , M01N3TAye , M01N3TAze , M01N3TDxss , M01N3TDyss , M01N3TDzss , M01N4FKxe , & + M01N4FKye , M01N4FKze , M01N4FMxe , M01N4FMye , M01N4FMze , M01N4MKxe , M01N4MKye , & + M01N4MKze , M01N4MMxe , M01N4MMye , M01N4MMze , M01N4RAxe , M01N4RAye , M01N4RAze , & + M01N4RDxe , M01N4RDye , M01N4RDze , M01N4TAxe , M01N4TAye , M01N4TAze , M01N4TDxss , & + M01N4TDyss , M01N4TDzss , M01N5FKxe , M01N5FKye , M01N5FKze , M01N5FMxe , M01N5FMye , & + M01N5FMze , M01N5MKxe , M01N5MKye , M01N5MKze , M01N5MMxe , M01N5MMye , M01N5MMze , & + M01N5RAxe , M01N5RAye , M01N5RAze , M01N5RDxe , M01N5RDye , M01N5RDze , M01N5TAxe , & + M01N5TAye , M01N5TAze , M01N5TDxss , M01N5TDyss , M01N5TDzss , M01N6FKxe , M01N6FKye , & + M01N6FKze , M01N6FMxe , M01N6FMye , M01N6FMze , M01N6MKxe , M01N6MKye , M01N6MKze , & + M01N6MMxe , M01N6MMye , M01N6MMze , M01N6RAxe , M01N6RAye , M01N6RAze , M01N6RDxe , & + M01N6RDye , M01N6RDze , M01N6TAxe , M01N6TAye , M01N6TAze , M01N6TDxss , M01N6TDyss , & + M01N6TDzss , M01N7FKxe , M01N7FKye , M01N7FKze , M01N7FMxe , M01N7FMye , M01N7FMze , & + M01N7MKxe , M01N7MKye , M01N7MKze , M01N7MMxe , M01N7MMye , M01N7MMze , M01N7RAxe , & + M01N7RAye , M01N7RAze , M01N7RDxe , M01N7RDye , M01N7RDze , M01N7TAxe , M01N7TAye , & + M01N7TAze , M01N7TDxss , M01N7TDyss , M01N7TDzss , M01N8FKxe , M01N8FKye , M01N8FKze , & + M01N8FMxe , M01N8FMye , M01N8FMze , M01N8MKxe , M01N8MKye , M01N8MKze , M01N8MMxe , & + M01N8MMye , M01N8MMze , M01N8RAxe , M01N8RAye , M01N8RAze , M01N8RDxe , M01N8RDye , & + M01N8RDze , M01N8TAxe , M01N8TAye , M01N8TAze , M01N8TDxss , M01N8TDyss , M01N8TDzss , & + M01N9FKxe , M01N9FKye , M01N9FKze , M01N9FMxe , M01N9FMye , M01N9FMze , M01N9MKxe , & + M01N9MKye , M01N9MKze , M01N9MMxe , M01N9MMye , M01N9MMze , M01N9RAxe , M01N9RAye , & + M01N9RAze , M01N9RDxe , M01N9RDye , M01N9RDze , M01N9TAxe , M01N9TAye , M01N9TAze , & + M01N9TDxss , M01N9TDyss , M01N9TDzss , M02N1FKxe , M02N1FKye , M02N1FKze , M02N1FMxe , & + M02N1FMye , M02N1FMze , M02N1MKxe , M02N1MKye , M02N1MKze , M02N1MMxe , M02N1MMye , & + M02N1MMze , M02N1RAxe , M02N1RAye , M02N1RAze , M02N1RDxe , M02N1RDye , M02N1RDze , & + M02N1TAxe , M02N1TAye , M02N1TAze , M02N1TDxss , M02N1TDyss , M02N1TDzss , M02N2FKxe , & + M02N2FKye , M02N2FKze , M02N2FMxe , M02N2FMye , M02N2FMze , M02N2MKxe , M02N2MKye , & + M02N2MKze , M02N2MMxe , M02N2MMye , M02N2MMze , M02N2RAxe , M02N2RAye , M02N2RAze , & + M02N2RDxe , M02N2RDye , M02N2RDze , M02N2TAxe , M02N2TAye , M02N2TAze , M02N2TDxss , & + M02N2TDyss , M02N2TDzss , M02N3FKxe , M02N3FKye , M02N3FKze , M02N3FMxe , M02N3FMye , & + M02N3FMze , M02N3MKxe , M02N3MKye , M02N3MKze , M02N3MMxe , M02N3MMye , M02N3MMze , & + M02N3RAxe , M02N3RAye , M02N3RAze , M02N3RDxe , M02N3RDye , M02N3RDze , M02N3TAxe , & + M02N3TAye , M02N3TAze , M02N3TDxss , M02N3TDyss , M02N3TDzss , M02N4FKxe , M02N4FKye , & + M02N4FKze , M02N4FMxe , M02N4FMye , M02N4FMze , M02N4MKxe , M02N4MKye , M02N4MKze , & + M02N4MMxe , M02N4MMye , M02N4MMze , M02N4RAxe , M02N4RAye , M02N4RAze , M02N4RDxe , & + M02N4RDye , M02N4RDze , M02N4TAxe , M02N4TAye , M02N4TAze , M02N4TDxss , M02N4TDyss , & + M02N4TDzss , M02N5FKxe , M02N5FKye , M02N5FKze , M02N5FMxe , M02N5FMye , M02N5FMze , & + M02N5MKxe , M02N5MKye , M02N5MKze , M02N5MMxe , M02N5MMye , M02N5MMze , M02N5RAxe , & + M02N5RAye , M02N5RAze , M02N5RDxe , M02N5RDye , M02N5RDze , M02N5TAxe , M02N5TAye , & + M02N5TAze , M02N5TDxss , M02N5TDyss , M02N5TDzss , M02N6FKxe , M02N6FKye , M02N6FKze , & + M02N6FMxe , M02N6FMye , M02N6FMze , M02N6MKxe , M02N6MKye , M02N6MKze , M02N6MMxe , & + M02N6MMye , M02N6MMze , M02N6RAxe , M02N6RAye , M02N6RAze , M02N6RDxe , M02N6RDye , & + M02N6RDze , M02N6TAxe , M02N6TAye , M02N6TAze , M02N6TDxss , M02N6TDyss , M02N6TDzss , & + M02N7FKxe , M02N7FKye , M02N7FKze , M02N7FMxe , M02N7FMye , M02N7FMze , M02N7MKxe , & + M02N7MKye , M02N7MKze , M02N7MMxe , M02N7MMye , M02N7MMze , M02N7RAxe , M02N7RAye , & + M02N7RAze , M02N7RDxe , M02N7RDye , M02N7RDze , M02N7TAxe , M02N7TAye , M02N7TAze , & + M02N7TDxss , M02N7TDyss , M02N7TDzss , M02N8FKxe , M02N8FKye , M02N8FKze , M02N8FMxe , & + M02N8FMye , M02N8FMze , M02N8MKxe , M02N8MKye , M02N8MKze , M02N8MMxe , M02N8MMye , & + M02N8MMze , M02N8RAxe , M02N8RAye , M02N8RAze , M02N8RDxe , M02N8RDye , M02N8RDze , & + M02N8TAxe , M02N8TAye , M02N8TAze , M02N8TDxss , M02N8TDyss , M02N8TDzss , M02N9FKxe , & + M02N9FKye , M02N9FKze , M02N9FMxe , M02N9FMye , M02N9FMze , M02N9MKxe , M02N9MKye , & + M02N9MKze , M02N9MMxe , M02N9MMye , M02N9MMze , M02N9RAxe , M02N9RAye , M02N9RAze , & + M02N9RDxe , M02N9RDye , M02N9RDze , M02N9TAxe , M02N9TAye , M02N9TAze , M02N9TDxss , & + M02N9TDyss , M02N9TDzss , M03N1FKxe , M03N1FKye , M03N1FKze , M03N1FMxe , M03N1FMye , & + M03N1FMze , M03N1MKxe , M03N1MKye , M03N1MKze , M03N1MMxe , M03N1MMye , M03N1MMze , & + M03N1RAxe , M03N1RAye , M03N1RAze , M03N1RDxe , M03N1RDye , M03N1RDze , M03N1TAxe , & + M03N1TAye , M03N1TAze , M03N1TDxss , M03N1TDyss , M03N1TDzss , M03N2FKxe , M03N2FKye , & + M03N2FKze , M03N2FMxe , M03N2FMye , M03N2FMze , M03N2MKxe , M03N2MKye , M03N2MKze , & + M03N2MMxe , M03N2MMye , M03N2MMze , M03N2RAxe , M03N2RAye , M03N2RAze , M03N2RDxe , & + M03N2RDye , M03N2RDze , M03N2TAxe , M03N2TAye , M03N2TAze , M03N2TDxss , M03N2TDyss , & + M03N2TDzss , M03N3FKxe , M03N3FKye , M03N3FKze , M03N3FMxe , M03N3FMye , M03N3FMze , & + M03N3MKxe , M03N3MKye , M03N3MKze , M03N3MMxe , M03N3MMye , M03N3MMze , M03N3RAxe , & + M03N3RAye , M03N3RAze , M03N3RDxe , M03N3RDye , M03N3RDze , M03N3TAxe , M03N3TAye , & + M03N3TAze , M03N3TDxss , M03N3TDyss , M03N3TDzss , M03N4FKxe , M03N4FKye , M03N4FKze , & + M03N4FMxe , M03N4FMye , M03N4FMze , M03N4MKxe , M03N4MKye , M03N4MKze , M03N4MMxe , & + M03N4MMye , M03N4MMze , M03N4RAxe , M03N4RAye , M03N4RAze , M03N4RDxe , M03N4RDye , & + M03N4RDze , M03N4TAxe , M03N4TAye , M03N4TAze , M03N4TDxss , M03N4TDyss , M03N4TDzss , & + M03N5FKxe , M03N5FKye , M03N5FKze , M03N5FMxe , M03N5FMye , M03N5FMze , M03N5MKxe , & + M03N5MKye , M03N5MKze , M03N5MMxe , M03N5MMye , M03N5MMze , M03N5RAxe , M03N5RAye , & + M03N5RAze , M03N5RDxe , M03N5RDye , M03N5RDze , M03N5TAxe , M03N5TAye , M03N5TAze , & + M03N5TDxss , M03N5TDyss , M03N5TDzss , M03N6FKxe , M03N6FKye , M03N6FKze , M03N6FMxe , & + M03N6FMye , M03N6FMze , M03N6MKxe , M03N6MKye , M03N6MKze , M03N6MMxe , M03N6MMye , & + M03N6MMze , M03N6RAxe , M03N6RAye , M03N6RAze , M03N6RDxe , M03N6RDye , M03N6RDze , & + M03N6TAxe , M03N6TAye , M03N6TAze , M03N6TDxss , M03N6TDyss , M03N6TDzss , M03N7FKxe , & + M03N7FKye , M03N7FKze , M03N7FMxe , M03N7FMye , M03N7FMze , M03N7MKxe , M03N7MKye , & + M03N7MKze , M03N7MMxe , M03N7MMye , M03N7MMze , M03N7RAxe , M03N7RAye , M03N7RAze , & + M03N7RDxe , M03N7RDye , M03N7RDze , M03N7TAxe , M03N7TAye , M03N7TAze , M03N7TDxss , & + M03N7TDyss , M03N7TDzss , M03N8FKxe , M03N8FKye , M03N8FKze , M03N8FMxe , M03N8FMye , & + M03N8FMze , M03N8MKxe , M03N8MKye , M03N8MKze , M03N8MMxe , M03N8MMye , M03N8MMze , & + M03N8RAxe , M03N8RAye , M03N8RAze , M03N8RDxe , M03N8RDye , M03N8RDze , M03N8TAxe , & + M03N8TAye , M03N8TAze , M03N8TDxss , M03N8TDyss , M03N8TDzss , M03N9FKxe , M03N9FKye , & + M03N9FKze , M03N9FMxe , M03N9FMye , M03N9FMze , M03N9MKxe , M03N9MKye , M03N9MKze , & + M03N9MMxe , M03N9MMye , M03N9MMze , M03N9RAxe , M03N9RAye , M03N9RAze , M03N9RDxe , & + M03N9RDye , M03N9RDze , M03N9TAxe , M03N9TAye , M03N9TAze , M03N9TDxss , M03N9TDyss , & + M03N9TDzss , M04N1FKxe , M04N1FKye , M04N1FKze , M04N1FMxe , M04N1FMye , M04N1FMze , & + M04N1MKxe , M04N1MKye , M04N1MKze , M04N1MMxe , M04N1MMye , M04N1MMze , M04N1RAxe , & + M04N1RAye , M04N1RAze , M04N1RDxe , M04N1RDye , M04N1RDze , M04N1TAxe , M04N1TAye , & + M04N1TAze , M04N1TDxss , M04N1TDyss , M04N1TDzss , M04N2FKxe , M04N2FKye , M04N2FKze , & + M04N2FMxe , M04N2FMye , M04N2FMze , M04N2MKxe , M04N2MKye , M04N2MKze , M04N2MMxe , & + M04N2MMye , M04N2MMze , M04N2RAxe , M04N2RAye , M04N2RAze , M04N2RDxe , M04N2RDye , & + M04N2RDze , M04N2TAxe , M04N2TAye , M04N2TAze , M04N2TDxss , M04N2TDyss , M04N2TDzss , & + M04N3FKxe , M04N3FKye , M04N3FKze , M04N3FMxe , M04N3FMye , M04N3FMze , M04N3MKxe , & + M04N3MKye , M04N3MKze , M04N3MMxe , M04N3MMye , M04N3MMze , M04N3RAxe , M04N3RAye , & + M04N3RAze , M04N3RDxe , M04N3RDye , M04N3RDze , M04N3TAxe , M04N3TAye , M04N3TAze , & + M04N3TDxss , M04N3TDyss , M04N3TDzss , M04N4FKxe , M04N4FKye , M04N4FKze , M04N4FMxe , & + M04N4FMye , M04N4FMze , M04N4MKxe , M04N4MKye , M04N4MKze , M04N4MMxe , M04N4MMye , & + M04N4MMze , M04N4RAxe , M04N4RAye , M04N4RAze , M04N4RDxe , M04N4RDye , M04N4RDze , & + M04N4TAxe , M04N4TAye , M04N4TAze , M04N4TDxss , M04N4TDyss , M04N4TDzss , M04N5FKxe , & + M04N5FKye , M04N5FKze , M04N5FMxe , M04N5FMye , M04N5FMze , M04N5MKxe , M04N5MKye , & + M04N5MKze , M04N5MMxe , M04N5MMye , M04N5MMze , M04N5RAxe , M04N5RAye , M04N5RAze , & + M04N5RDxe , M04N5RDye , M04N5RDze , M04N5TAxe , M04N5TAye , M04N5TAze , M04N5TDxss , & + M04N5TDyss , M04N5TDzss , M04N6FKxe , M04N6FKye , M04N6FKze , M04N6FMxe , M04N6FMye , & + M04N6FMze , M04N6MKxe , M04N6MKye , M04N6MKze , M04N6MMxe , M04N6MMye , M04N6MMze , & + M04N6RAxe , M04N6RAye , M04N6RAze , M04N6RDxe , M04N6RDye , M04N6RDze , M04N6TAxe , & + M04N6TAye , M04N6TAze , M04N6TDxss , M04N6TDyss , M04N6TDzss , M04N7FKxe , M04N7FKye , & + M04N7FKze , M04N7FMxe , M04N7FMye , M04N7FMze , M04N7MKxe , M04N7MKye , M04N7MKze , & + M04N7MMxe , M04N7MMye , M04N7MMze , M04N7RAxe , M04N7RAye , M04N7RAze , M04N7RDxe , & + M04N7RDye , M04N7RDze , M04N7TAxe , M04N7TAye , M04N7TAze , M04N7TDxss , M04N7TDyss , & + M04N7TDzss , M04N8FKxe , M04N8FKye , M04N8FKze , M04N8FMxe , M04N8FMye , M04N8FMze , & + M04N8MKxe , M04N8MKye , M04N8MKze , M04N8MMxe , M04N8MMye , M04N8MMze , M04N8RAxe , & + M04N8RAye , M04N8RAze , M04N8RDxe , M04N8RDye , M04N8RDze , M04N8TAxe , M04N8TAye , & + M04N8TAze , M04N8TDxss , M04N8TDyss , M04N8TDzss , M04N9FKxe , M04N9FKye , M04N9FKze , & + M04N9FMxe , M04N9FMye , M04N9FMze , M04N9MKxe , M04N9MKye , M04N9MKze , M04N9MMxe , & + M04N9MMye , M04N9MMze , M04N9RAxe , M04N9RAye , M04N9RAze , M04N9RDxe , M04N9RDye , & + M04N9RDze , M04N9TAxe , M04N9TAye , M04N9TAze , M04N9TDxss , M04N9TDyss , M04N9TDzss , & + M05N1FKxe , M05N1FKye , M05N1FKze , M05N1FMxe , M05N1FMye , M05N1FMze , M05N1MKxe , & + M05N1MKye , M05N1MKze , M05N1MMxe , M05N1MMye , M05N1MMze , M05N1RAxe , M05N1RAye , & + M05N1RAze , M05N1RDxe , M05N1RDye , M05N1RDze , M05N1TAxe , M05N1TAye , M05N1TAze , & + M05N1TDxss , M05N1TDyss , M05N1TDzss , M05N2FKxe , M05N2FKye , M05N2FKze , M05N2FMxe , & + M05N2FMye , M05N2FMze , M05N2MKxe , M05N2MKye , M05N2MKze , M05N2MMxe , M05N2MMye , & + M05N2MMze , M05N2RAxe , M05N2RAye , M05N2RAze , M05N2RDxe , M05N2RDye , M05N2RDze , & + M05N2TAxe , M05N2TAye , M05N2TAze , M05N2TDxss , M05N2TDyss , M05N2TDzss , M05N3FKxe , & + M05N3FKye , M05N3FKze , M05N3FMxe , M05N3FMye , M05N3FMze , M05N3MKxe , M05N3MKye , & + M05N3MKze , M05N3MMxe , M05N3MMye , M05N3MMze , M05N3RAxe , M05N3RAye , M05N3RAze , & + M05N3RDxe , M05N3RDye , M05N3RDze , M05N3TAxe , M05N3TAye , M05N3TAze , M05N3TDxss , & + M05N3TDyss , M05N3TDzss , M05N4FKxe , M05N4FKye , M05N4FKze , M05N4FMxe , M05N4FMye , & + M05N4FMze , M05N4MKxe , M05N4MKye , M05N4MKze , M05N4MMxe , M05N4MMye , M05N4MMze , & + M05N4RAxe , M05N4RAye , M05N4RAze , M05N4RDxe , M05N4RDye , M05N4RDze , M05N4TAxe , & + M05N4TAye , M05N4TAze , M05N4TDxss , M05N4TDyss , M05N4TDzss , M05N5FKxe , M05N5FKye , & + M05N5FKze , M05N5FMxe , M05N5FMye , M05N5FMze , M05N5MKxe , M05N5MKye , M05N5MKze , & + M05N5MMxe , M05N5MMye , M05N5MMze , M05N5RAxe , M05N5RAye , M05N5RAze , M05N5RDxe , & + M05N5RDye , M05N5RDze , M05N5TAxe , M05N5TAye , M05N5TAze , M05N5TDxss , M05N5TDyss , & + M05N5TDzss , M05N6FKxe , M05N6FKye , M05N6FKze , M05N6FMxe , M05N6FMye , M05N6FMze , & + M05N6MKxe , M05N6MKye , M05N6MKze , M05N6MMxe , M05N6MMye , M05N6MMze , M05N6RAxe , & + M05N6RAye , M05N6RAze , M05N6RDxe , M05N6RDye , M05N6RDze , M05N6TAxe , M05N6TAye , & + M05N6TAze , M05N6TDxss , M05N6TDyss , M05N6TDzss , M05N7FKxe , M05N7FKye , M05N7FKze , & + M05N7FMxe , M05N7FMye , M05N7FMze , M05N7MKxe , M05N7MKye , M05N7MKze , M05N7MMxe , & + M05N7MMye , M05N7MMze , M05N7RAxe , M05N7RAye , M05N7RAze , M05N7RDxe , M05N7RDye , & + M05N7RDze , M05N7TAxe , M05N7TAye , M05N7TAze , M05N7TDxss , M05N7TDyss , M05N7TDzss , & + M05N8FKxe , M05N8FKye , M05N8FKze , M05N8FMxe , M05N8FMye , M05N8FMze , M05N8MKxe , & + M05N8MKye , M05N8MKze , M05N8MMxe , M05N8MMye , M05N8MMze , M05N8RAxe , M05N8RAye , & + M05N8RAze , M05N8RDxe , M05N8RDye , M05N8RDze , M05N8TAxe , M05N8TAye , M05N8TAze , & + M05N8TDxss , M05N8TDyss , M05N8TDzss , M05N9FKxe , M05N9FKye , M05N9FKze , M05N9FMxe , & + M05N9FMye , M05N9FMze , M05N9MKxe , M05N9MKye , M05N9MKze , M05N9MMxe , M05N9MMye , & + M05N9MMze , M05N9RAxe , M05N9RAye , M05N9RAze , M05N9RDxe , M05N9RDye , M05N9RDze , & + M05N9TAxe , M05N9TAye , M05N9TAze , M05N9TDxss , M05N9TDyss , M05N9TDzss , M06N1FKxe , & + M06N1FKye , M06N1FKze , M06N1FMxe , M06N1FMye , M06N1FMze , M06N1MKxe , M06N1MKye , & + M06N1MKze , M06N1MMxe , M06N1MMye , M06N1MMze , M06N1RAxe , M06N1RAye , M06N1RAze , & + M06N1RDxe , M06N1RDye , M06N1RDze , M06N1TAxe , M06N1TAye , M06N1TAze , M06N1TDxss , & + M06N1TDyss , M06N1TDzss , M06N2FKxe , M06N2FKye , M06N2FKze , M06N2FMxe , M06N2FMye , & + M06N2FMze , M06N2MKxe , M06N2MKye , M06N2MKze , M06N2MMxe , M06N2MMye , M06N2MMze , & + M06N2RAxe , M06N2RAye , M06N2RAze , M06N2RDxe , M06N2RDye , M06N2RDze , M06N2TAxe , & + M06N2TAye , M06N2TAze , M06N2TDxss , M06N2TDyss , M06N2TDzss , M06N3FKxe , M06N3FKye , & + M06N3FKze , M06N3FMxe , M06N3FMye , M06N3FMze , M06N3MKxe , M06N3MKye , M06N3MKze , & + M06N3MMxe , M06N3MMye , M06N3MMze , M06N3RAxe , M06N3RAye , M06N3RAze , M06N3RDxe , & + M06N3RDye , M06N3RDze , M06N3TAxe , M06N3TAye , M06N3TAze , M06N3TDxss , M06N3TDyss , & + M06N3TDzss , M06N4FKxe , M06N4FKye , M06N4FKze , M06N4FMxe , M06N4FMye , M06N4FMze , & + M06N4MKxe , M06N4MKye , M06N4MKze , M06N4MMxe , M06N4MMye , M06N4MMze , M06N4RAxe , & + M06N4RAye , M06N4RAze , M06N4RDxe , M06N4RDye , M06N4RDze , M06N4TAxe , M06N4TAye , & + M06N4TAze , M06N4TDxss , M06N4TDyss , M06N4TDzss , M06N5FKxe , M06N5FKye , M06N5FKze , & + M06N5FMxe , M06N5FMye , M06N5FMze , M06N5MKxe , M06N5MKye , M06N5MKze , M06N5MMxe , & + M06N5MMye , M06N5MMze , M06N5RAxe , M06N5RAye , M06N5RAze , M06N5RDxe , M06N5RDye , & + M06N5RDze , M06N5TAxe , M06N5TAye , M06N5TAze , M06N5TDxss , M06N5TDyss , M06N5TDzss , & + M06N6FKxe , M06N6FKye , M06N6FKze , M06N6FMxe , M06N6FMye , M06N6FMze , M06N6MKxe , & + M06N6MKye , M06N6MKze , M06N6MMxe , M06N6MMye , M06N6MMze , M06N6RAxe , M06N6RAye , & + M06N6RAze , M06N6RDxe , M06N6RDye , M06N6RDze , M06N6TAxe , M06N6TAye , M06N6TAze , & + M06N6TDxss , M06N6TDyss , M06N6TDzss , M06N7FKxe , M06N7FKye , M06N7FKze , M06N7FMxe , & + M06N7FMye , M06N7FMze , M06N7MKxe , M06N7MKye , M06N7MKze , M06N7MMxe , M06N7MMye , & + M06N7MMze , M06N7RAxe , M06N7RAye , M06N7RAze , M06N7RDxe , M06N7RDye , M06N7RDze , & + M06N7TAxe , M06N7TAye , M06N7TAze , M06N7TDxss , M06N7TDyss , M06N7TDzss , M06N8FKxe , & + M06N8FKye , M06N8FKze , M06N8FMxe , M06N8FMye , M06N8FMze , M06N8MKxe , M06N8MKye , & + M06N8MKze , M06N8MMxe , M06N8MMye , M06N8MMze , M06N8RAxe , M06N8RAye , M06N8RAze , & + M06N8RDxe , M06N8RDye , M06N8RDze , M06N8TAxe , M06N8TAye , M06N8TAze , M06N8TDxss , & + M06N8TDyss , M06N8TDzss , M06N9FKxe , M06N9FKye , M06N9FKze , M06N9FMxe , M06N9FMye , & + M06N9FMze , M06N9MKxe , M06N9MKye , M06N9MKze , M06N9MMxe , M06N9MMye , M06N9MMze , & + M06N9RAxe , M06N9RAye , M06N9RAze , M06N9RDxe , M06N9RDye , M06N9RDze , M06N9TAxe , & + M06N9TAye , M06N9TAze , M06N9TDxss , M06N9TDyss , M06N9TDzss , M07N1FKxe , M07N1FKye , & + M07N1FKze , M07N1FMxe , M07N1FMye , M07N1FMze , M07N1MKxe , M07N1MKye , M07N1MKze , & + M07N1MMxe , M07N1MMye , M07N1MMze , M07N1RAxe , M07N1RAye , M07N1RAze , M07N1RDxe , & + M07N1RDye , M07N1RDze , M07N1TAxe , M07N1TAye , M07N1TAze , M07N1TDxss , M07N1TDyss , & + M07N1TDzss , M07N2FKxe , M07N2FKye , M07N2FKze , M07N2FMxe , M07N2FMye , M07N2FMze , & + M07N2MKxe , M07N2MKye , M07N2MKze , M07N2MMxe , M07N2MMye , M07N2MMze , M07N2RAxe , & + M07N2RAye , M07N2RAze , M07N2RDxe , M07N2RDye , M07N2RDze , M07N2TAxe , M07N2TAye , & + M07N2TAze , M07N2TDxss , M07N2TDyss , M07N2TDzss , M07N3FKxe , M07N3FKye , M07N3FKze , & + M07N3FMxe , M07N3FMye , M07N3FMze , M07N3MKxe , M07N3MKye , M07N3MKze , M07N3MMxe , & + M07N3MMye , M07N3MMze , M07N3RAxe , M07N3RAye , M07N3RAze , M07N3RDxe , M07N3RDye , & + M07N3RDze , M07N3TAxe , M07N3TAye , M07N3TAze , M07N3TDxss , M07N3TDyss , M07N3TDzss , & + M07N4FKxe , M07N4FKye , M07N4FKze , M07N4FMxe , M07N4FMye , M07N4FMze , M07N4MKxe , & + M07N4MKye , M07N4MKze , M07N4MMxe , M07N4MMye , M07N4MMze , M07N4RAxe , M07N4RAye , & + M07N4RAze , M07N4RDxe , M07N4RDye , M07N4RDze , M07N4TAxe , M07N4TAye , M07N4TAze , & + M07N4TDxss , M07N4TDyss , M07N4TDzss , M07N5FKxe , M07N5FKye , M07N5FKze , M07N5FMxe , & + M07N5FMye , M07N5FMze , M07N5MKxe , M07N5MKye , M07N5MKze , M07N5MMxe , M07N5MMye , & + M07N5MMze , M07N5RAxe , M07N5RAye , M07N5RAze , M07N5RDxe , M07N5RDye , M07N5RDze , & + M07N5TAxe , M07N5TAye , M07N5TAze , M07N5TDxss , M07N5TDyss , M07N5TDzss , M07N6FKxe , & + M07N6FKye , M07N6FKze , M07N6FMxe , M07N6FMye , M07N6FMze , M07N6MKxe , M07N6MKye , & + M07N6MKze , M07N6MMxe , M07N6MMye , M07N6MMze , M07N6RAxe , M07N6RAye , M07N6RAze , & + M07N6RDxe , M07N6RDye , M07N6RDze , M07N6TAxe , M07N6TAye , M07N6TAze , M07N6TDxss , & + M07N6TDyss , M07N6TDzss , M07N7FKxe , M07N7FKye , M07N7FKze , M07N7FMxe , M07N7FMye , & + M07N7FMze , M07N7MKxe , M07N7MKye , M07N7MKze , M07N7MMxe , M07N7MMye , M07N7MMze , & + M07N7RAxe , M07N7RAye , M07N7RAze , M07N7RDxe , M07N7RDye , M07N7RDze , M07N7TAxe , & + M07N7TAye , M07N7TAze , M07N7TDxss , M07N7TDyss , M07N7TDzss , M07N8FKxe , M07N8FKye , & + M07N8FKze , M07N8FMxe , M07N8FMye , M07N8FMze , M07N8MKxe , M07N8MKye , M07N8MKze , & + M07N8MMxe , M07N8MMye , M07N8MMze , M07N8RAxe , M07N8RAye , M07N8RAze , M07N8RDxe , & + M07N8RDye , M07N8RDze , M07N8TAxe , M07N8TAye , M07N8TAze , M07N8TDxss , M07N8TDyss , & + M07N8TDzss , M07N9FKxe , M07N9FKye , M07N9FKze , M07N9FMxe , M07N9FMye , M07N9FMze , & + M07N9MKxe , M07N9MKye , M07N9MKze , M07N9MMxe , M07N9MMye , M07N9MMze , M07N9RAxe , & + M07N9RAye , M07N9RAze , M07N9RDxe , M07N9RDye , M07N9RDze , M07N9TAxe , M07N9TAye , & + M07N9TAze , M07N9TDxss , M07N9TDyss , M07N9TDzss , M08N1FKxe , M08N1FKye , M08N1FKze , & + M08N1FMxe , M08N1FMye , M08N1FMze , M08N1MKxe , M08N1MKye , M08N1MKze , M08N1MMxe , & + M08N1MMye , M08N1MMze , M08N1RAxe , M08N1RAye , M08N1RAze , M08N1RDxe , M08N1RDye , & + M08N1RDze , M08N1TAxe , M08N1TAye , M08N1TAze , M08N1TDxss , M08N1TDyss , M08N1TDzss , & + M08N2FKxe , M08N2FKye , M08N2FKze , M08N2FMxe , M08N2FMye , M08N2FMze , M08N2MKxe , & + M08N2MKye , M08N2MKze , M08N2MMxe , M08N2MMye , M08N2MMze , M08N2RAxe , M08N2RAye , & + M08N2RAze , M08N2RDxe , M08N2RDye , M08N2RDze , M08N2TAxe , M08N2TAye , M08N2TAze , & + M08N2TDxss , M08N2TDyss , M08N2TDzss , M08N3FKxe , M08N3FKye , M08N3FKze , M08N3FMxe , & + M08N3FMye , M08N3FMze , M08N3MKxe , M08N3MKye , M08N3MKze , M08N3MMxe , M08N3MMye , & + M08N3MMze , M08N3RAxe , M08N3RAye , M08N3RAze , M08N3RDxe , M08N3RDye , M08N3RDze , & + M08N3TAxe , M08N3TAye , M08N3TAze , M08N3TDxss , M08N3TDyss , M08N3TDzss , M08N4FKxe , & + M08N4FKye , M08N4FKze , M08N4FMxe , M08N4FMye , M08N4FMze , M08N4MKxe , M08N4MKye , & + M08N4MKze , M08N4MMxe , M08N4MMye , M08N4MMze , M08N4RAxe , M08N4RAye , M08N4RAze , & + M08N4RDxe , M08N4RDye , M08N4RDze , M08N4TAxe , M08N4TAye , M08N4TAze , M08N4TDxss , & + M08N4TDyss , M08N4TDzss , M08N5FKxe , M08N5FKye , M08N5FKze , M08N5FMxe , M08N5FMye , & + M08N5FMze , M08N5MKxe , M08N5MKye , M08N5MKze , M08N5MMxe , M08N5MMye , M08N5MMze , & + M08N5RAxe , M08N5RAye , M08N5RAze , M08N5RDxe , M08N5RDye , M08N5RDze , M08N5TAxe , & + M08N5TAye , M08N5TAze , M08N5TDxss , M08N5TDyss , M08N5TDzss , M08N6FKxe , M08N6FKye , & + M08N6FKze , M08N6FMxe , M08N6FMye , M08N6FMze , M08N6MKxe , M08N6MKye , M08N6MKze , & + M08N6MMxe , M08N6MMye , M08N6MMze , M08N6RAxe , M08N6RAye , M08N6RAze , M08N6RDxe , & + M08N6RDye , M08N6RDze , M08N6TAxe , M08N6TAye /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry2(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M08N6TAze , M08N6TDxss , M08N6TDyss , M08N6TDzss , M08N7FKxe , M08N7FKye , M08N7FKze , & + M08N7FMxe , M08N7FMye , M08N7FMze , M08N7MKxe , M08N7MKye , M08N7MKze , M08N7MMxe , & + M08N7MMye , M08N7MMze , M08N7RAxe , M08N7RAye , M08N7RAze , M08N7RDxe , M08N7RDye , & + M08N7RDze , M08N7TAxe , M08N7TAye , M08N7TAze , M08N7TDxss , M08N7TDyss , M08N7TDzss , & + M08N8FKxe , M08N8FKye , M08N8FKze , M08N8FMxe , M08N8FMye , M08N8FMze , M08N8MKxe , & + M08N8MKye , M08N8MKze , M08N8MMxe , M08N8MMye , M08N8MMze , M08N8RAxe , M08N8RAye , & + M08N8RAze , M08N8RDxe , M08N8RDye , M08N8RDze , M08N8TAxe , M08N8TAye , M08N8TAze , & + M08N8TDxss , M08N8TDyss , M08N8TDzss , M08N9FKxe , M08N9FKye , M08N9FKze , M08N9FMxe , & + M08N9FMye , M08N9FMze , M08N9MKxe , M08N9MKye , M08N9MKze , M08N9MMxe , M08N9MMye , & + M08N9MMze , M08N9RAxe , M08N9RAye , M08N9RAze , M08N9RDxe , M08N9RDye , M08N9RDze , & + M08N9TAxe , M08N9TAye , M08N9TAze , M08N9TDxss , M08N9TDyss , M08N9TDzss , M09N1FKxe , & + M09N1FKye , M09N1FKze , M09N1FMxe , M09N1FMye , M09N1FMze , M09N1MKxe , M09N1MKye , & + M09N1MKze , M09N1MMxe , M09N1MMye , M09N1MMze , M09N1RAxe , M09N1RAye , M09N1RAze , & + M09N1RDxe , M09N1RDye , M09N1RDze , M09N1TAxe , M09N1TAye , M09N1TAze , M09N1TDxss , & + M09N1TDyss , M09N1TDzss , M09N2FKxe , M09N2FKye , M09N2FKze , M09N2FMxe , M09N2FMye , & + M09N2FMze , M09N2MKxe , M09N2MKye , M09N2MKze , M09N2MMxe , M09N2MMye , M09N2MMze , & + M09N2RAxe , M09N2RAye , M09N2RAze , M09N2RDxe , M09N2RDye , M09N2RDze , M09N2TAxe , & + M09N2TAye , M09N2TAze , M09N2TDxss , M09N2TDyss , M09N2TDzss , M09N3FKxe , M09N3FKye , & + M09N3FKze , M09N3FMxe , M09N3FMye , M09N3FMze , M09N3MKxe , M09N3MKye , M09N3MKze , & + M09N3MMxe , M09N3MMye , M09N3MMze , M09N3RAxe , M09N3RAye , M09N3RAze , M09N3RDxe , & + M09N3RDye , M09N3RDze , M09N3TAxe , M09N3TAye , M09N3TAze , M09N3TDxss , M09N3TDyss , & + M09N3TDzss , M09N4FKxe , M09N4FKye , M09N4FKze , M09N4FMxe , M09N4FMye , M09N4FMze , & + M09N4MKxe , M09N4MKye , M09N4MKze , M09N4MMxe , M09N4MMye , M09N4MMze , M09N4RAxe , & + M09N4RAye , M09N4RAze , M09N4RDxe , M09N4RDye , M09N4RDze , M09N4TAxe , M09N4TAye , & + M09N4TAze , M09N4TDxss , M09N4TDyss , M09N4TDzss , M09N5FKxe , M09N5FKye , M09N5FKze , & + M09N5FMxe , M09N5FMye , M09N5FMze , M09N5MKxe , M09N5MKye , M09N5MKze , M09N5MMxe , & + M09N5MMye , M09N5MMze , M09N5RAxe , M09N5RAye , M09N5RAze , M09N5RDxe , M09N5RDye , & + M09N5RDze , M09N5TAxe , M09N5TAye , M09N5TAze , M09N5TDxss , M09N5TDyss , M09N5TDzss , & + M09N6FKxe , M09N6FKye , M09N6FKze , M09N6FMxe , M09N6FMye , M09N6FMze , M09N6MKxe , & + M09N6MKye , M09N6MKze , M09N6MMxe , M09N6MMye , M09N6MMze , M09N6RAxe , M09N6RAye , & + M09N6RAze , M09N6RDxe , M09N6RDye , M09N6RDze , M09N6TAxe , M09N6TAye , M09N6TAze , & + M09N6TDxss , M09N6TDyss , M09N6TDzss , M09N7FKxe , M09N7FKye , M09N7FKze , M09N7FMxe , & + M09N7FMye , M09N7FMze , M09N7MKxe , M09N7MKye , M09N7MKze , M09N7MMxe , M09N7MMye , & + M09N7MMze , M09N7RAxe , M09N7RAye , M09N7RAze , M09N7RDxe , M09N7RDye , M09N7RDze , & + M09N7TAxe , M09N7TAye , M09N7TAze , M09N7TDxss , M09N7TDyss , M09N7TDzss , M09N8FKxe , & + M09N8FKye , M09N8FKze , M09N8FMxe , M09N8FMye , M09N8FMze , M09N8MKxe , M09N8MKye , & + M09N8MKze , M09N8MMxe , M09N8MMye , M09N8MMze , M09N8RAxe , M09N8RAye , M09N8RAze , & + M09N8RDxe , M09N8RDye , M09N8RDze , M09N8TAxe , M09N8TAye , M09N8TAze , M09N8TDxss , & + M09N8TDyss , M09N8TDzss , M09N9FKxe , M09N9FKye , M09N9FKze , M09N9FMxe , M09N9FMye , & + M09N9FMze , M09N9MKxe , M09N9MKye , M09N9MKze , M09N9MMxe , M09N9MMye , M09N9MMze , & + M09N9RAxe , M09N9RAye , M09N9RAze , M09N9RDxe , M09N9RDye , M09N9RDze , M09N9TAxe , & + M09N9TAye , M09N9TAze , M09N9TDxss , M09N9TDyss , M09N9TDzss , M10N1FKxe , M10N1FKye , & + M10N1FKze , M10N1FMxe , M10N1FMye , M10N1FMze , M10N1MKxe , M10N1MKye , M10N1MKze , & + M10N1MMxe , M10N1MMye , M10N1MMze , M10N1RAxe , M10N1RAye , M10N1RAze , M10N1RDxe , & + M10N1RDye , M10N1RDze , M10N1TAxe , M10N1TAye , M10N1TAze , M10N1TDxss , M10N1TDyss , & + M10N1TDzss , M10N2FKxe , M10N2FKye , M10N2FKze , M10N2FMxe , M10N2FMye , M10N2FMze , & + M10N2MKxe , M10N2MKye , M10N2MKze , M10N2MMxe , M10N2MMye , M10N2MMze , M10N2RAxe , & + M10N2RAye , M10N2RAze , M10N2RDxe , M10N2RDye , M10N2RDze , M10N2TAxe , M10N2TAye , & + M10N2TAze , M10N2TDxss , M10N2TDyss , M10N2TDzss , M10N3FKxe , M10N3FKye , M10N3FKze , & + M10N3FMxe , M10N3FMye , M10N3FMze , M10N3MKxe , M10N3MKye , M10N3MKze , M10N3MMxe , & + M10N3MMye , M10N3MMze , M10N3RAxe , M10N3RAye , M10N3RAze , M10N3RDxe , M10N3RDye , & + M10N3RDze , M10N3TAxe , M10N3TAye , M10N3TAze , M10N3TDxss , M10N3TDyss , M10N3TDzss , & + M10N4FKxe , M10N4FKye , M10N4FKze , M10N4FMxe , M10N4FMye , M10N4FMze , M10N4MKxe , & + M10N4MKye , M10N4MKze , M10N4MMxe , M10N4MMye , M10N4MMze , M10N4RAxe , M10N4RAye , & + M10N4RAze , M10N4RDxe , M10N4RDye , M10N4RDze , M10N4TAxe , M10N4TAye , M10N4TAze , & + M10N4TDxss , M10N4TDyss , M10N4TDzss , M10N5FKxe , M10N5FKye , M10N5FKze , M10N5FMxe , & + M10N5FMye , M10N5FMze , M10N5MKxe , M10N5MKye , M10N5MKze , M10N5MMxe , M10N5MMye , & + M10N5MMze , M10N5RAxe , M10N5RAye , M10N5RAze , M10N5RDxe , M10N5RDye , M10N5RDze , & + M10N5TAxe , M10N5TAye , M10N5TAze , M10N5TDxss , M10N5TDyss , M10N5TDzss , M10N6FKxe , & + M10N6FKye , M10N6FKze , M10N6FMxe , M10N6FMye , M10N6FMze , M10N6MKxe , M10N6MKye , & + M10N6MKze , M10N6MMxe , M10N6MMye , M10N6MMze , M10N6RAxe , M10N6RAye , M10N6RAze , & + M10N6RDxe , M10N6RDye , M10N6RDze , M10N6TAxe , M10N6TAye , M10N6TAze , M10N6TDxss , & + M10N6TDyss , M10N6TDzss , M10N7FKxe , M10N7FKye , M10N7FKze , M10N7FMxe , M10N7FMye , & + M10N7FMze , M10N7MKxe , M10N7MKye , M10N7MKze , M10N7MMxe , M10N7MMye , M10N7MMze , & + M10N7RAxe , M10N7RAye , M10N7RAze , M10N7RDxe , M10N7RDye , M10N7RDze , M10N7TAxe , & + M10N7TAye , M10N7TAze , M10N7TDxss , M10N7TDyss , M10N7TDzss , M10N8FKxe , M10N8FKye , & + M10N8FKze , M10N8FMxe , M10N8FMye , M10N8FMze , M10N8MKxe , M10N8MKye , M10N8MKze , & + M10N8MMxe , M10N8MMye , M10N8MMze , M10N8RAxe , M10N8RAye , M10N8RAze , M10N8RDxe , & + M10N8RDye , M10N8RDze , M10N8TAxe , M10N8TAye , M10N8TAze , M10N8TDxss , M10N8TDyss , & + M10N8TDzss , M10N9FKxe , M10N9FKye , M10N9FKze , M10N9FMxe , M10N9FMye , M10N9FMze , & + M10N9MKxe , M10N9MKye , M10N9MKze , M10N9MMxe , M10N9MMye , M10N9MMze , M10N9RAxe , & + M10N9RAye , M10N9RAze , M10N9RDxe , M10N9RDye , M10N9RDze , M10N9TAxe , M10N9TAye , & + M10N9TAze , M10N9TDxss , M10N9TDyss , M10N9TDzss , M11N1FKxe , M11N1FKye , M11N1FKze , & + M11N1FMxe , M11N1FMye , M11N1FMze , M11N1MKxe , M11N1MKye , M11N1MKze , M11N1MMxe , & + M11N1MMye , M11N1MMze , M11N1RAxe , M11N1RAye , M11N1RAze , M11N1RDxe , M11N1RDye , & + M11N1RDze , M11N1TAxe , M11N1TAye , M11N1TAze , M11N1TDxss , M11N1TDyss , M11N1TDzss , & + M11N2FKxe , M11N2FKye , M11N2FKze , M11N2FMxe , M11N2FMye , M11N2FMze , M11N2MKxe , & + M11N2MKye , M11N2MKze , M11N2MMxe , M11N2MMye , M11N2MMze , M11N2RAxe , M11N2RAye , & + M11N2RAze , M11N2RDxe , M11N2RDye , M11N2RDze , M11N2TAxe , M11N2TAye , M11N2TAze , & + M11N2TDxss , M11N2TDyss , M11N2TDzss , M11N3FKxe , M11N3FKye , M11N3FKze , M11N3FMxe , & + M11N3FMye , M11N3FMze , M11N3MKxe , M11N3MKye , M11N3MKze , M11N3MMxe , M11N3MMye , & + M11N3MMze , M11N3RAxe , M11N3RAye , M11N3RAze , M11N3RDxe , M11N3RDye , M11N3RDze , & + M11N3TAxe , M11N3TAye , M11N3TAze , M11N3TDxss , M11N3TDyss , M11N3TDzss , M11N4FKxe , & + M11N4FKye , M11N4FKze , M11N4FMxe , M11N4FMye , M11N4FMze , M11N4MKxe , M11N4MKye , & + M11N4MKze , M11N4MMxe , M11N4MMye , M11N4MMze , M11N4RAxe , M11N4RAye , M11N4RAze , & + M11N4RDxe , M11N4RDye , M11N4RDze , M11N4TAxe , M11N4TAye , M11N4TAze , M11N4TDxss , & + M11N4TDyss , M11N4TDzss , M11N5FKxe , M11N5FKye , M11N5FKze , M11N5FMxe , M11N5FMye , & + M11N5FMze , M11N5MKxe , M11N5MKye , M11N5MKze , M11N5MMxe , M11N5MMye , M11N5MMze , & + M11N5RAxe , M11N5RAye , M11N5RAze , M11N5RDxe , M11N5RDye , M11N5RDze , M11N5TAxe , & + M11N5TAye , M11N5TAze , M11N5TDxss , M11N5TDyss , M11N5TDzss , M11N6FKxe , M11N6FKye , & + M11N6FKze , M11N6FMxe , M11N6FMye , M11N6FMze , M11N6MKxe , M11N6MKye , M11N6MKze , & + M11N6MMxe , M11N6MMye , M11N6MMze , M11N6RAxe , M11N6RAye , M11N6RAze , M11N6RDxe , & + M11N6RDye , M11N6RDze , M11N6TAxe , M11N6TAye , M11N6TAze , M11N6TDxss , M11N6TDyss , & + M11N6TDzss , M11N7FKxe , M11N7FKye , M11N7FKze , M11N7FMxe , M11N7FMye , M11N7FMze , & + M11N7MKxe , M11N7MKye , M11N7MKze , M11N7MMxe , M11N7MMye , M11N7MMze , M11N7RAxe , & + M11N7RAye , M11N7RAze , M11N7RDxe , M11N7RDye , M11N7RDze , M11N7TAxe , M11N7TAye , & + M11N7TAze , M11N7TDxss , M11N7TDyss , M11N7TDzss , M11N8FKxe , M11N8FKye , M11N8FKze , & + M11N8FMxe , M11N8FMye , M11N8FMze , M11N8MKxe , M11N8MKye , M11N8MKze , M11N8MMxe , & + M11N8MMye , M11N8MMze , M11N8RAxe , M11N8RAye , M11N8RAze , M11N8RDxe , M11N8RDye , & + M11N8RDze , M11N8TAxe , M11N8TAye , M11N8TAze , M11N8TDxss , M11N8TDyss , M11N8TDzss , & + M11N9FKxe , M11N9FKye , M11N9FKze , M11N9FMxe , M11N9FMye , M11N9FMze , M11N9MKxe , & + M11N9MKye , M11N9MKze , M11N9MMxe , M11N9MMye , M11N9MMze , M11N9RAxe , M11N9RAye , & + M11N9RAze , M11N9RDxe , M11N9RDye , M11N9RDze , M11N9TAxe , M11N9TAye , M11N9TAze , & + M11N9TDxss , M11N9TDyss , M11N9TDzss , M12N1FKxe , M12N1FKye , M12N1FKze , M12N1FMxe , & + M12N1FMye , M12N1FMze , M12N1MKxe , M12N1MKye , M12N1MKze , M12N1MMxe , M12N1MMye , & + M12N1MMze , M12N1RAxe , M12N1RAye , M12N1RAze , M12N1RDxe , M12N1RDye , M12N1RDze , & + M12N1TAxe , M12N1TAye , M12N1TAze , M12N1TDxss , M12N1TDyss , M12N1TDzss , M12N2FKxe , & + M12N2FKye , M12N2FKze , M12N2FMxe , M12N2FMye , M12N2FMze , M12N2MKxe , M12N2MKye , & + M12N2MKze , M12N2MMxe , M12N2MMye , M12N2MMze , M12N2RAxe , M12N2RAye , M12N2RAze , & + M12N2RDxe , M12N2RDye , M12N2RDze , M12N2TAxe , M12N2TAye , M12N2TAze , M12N2TDxss , & + M12N2TDyss , M12N2TDzss , M12N3FKxe , M12N3FKye , M12N3FKze , M12N3FMxe , M12N3FMye , & + M12N3FMze , M12N3MKxe , M12N3MKye , M12N3MKze , M12N3MMxe , M12N3MMye , M12N3MMze , & + M12N3RAxe , M12N3RAye , M12N3RAze , M12N3RDxe , M12N3RDye , M12N3RDze , M12N3TAxe , & + M12N3TAye , M12N3TAze , M12N3TDxss , M12N3TDyss , M12N3TDzss , M12N4FKxe , M12N4FKye , & + M12N4FKze , M12N4FMxe , M12N4FMye , M12N4FMze , M12N4MKxe , M12N4MKye , M12N4MKze , & + M12N4MMxe , M12N4MMye , M12N4MMze , M12N4RAxe , M12N4RAye , M12N4RAze , M12N4RDxe , & + M12N4RDye , M12N4RDze , M12N4TAxe , M12N4TAye , M12N4TAze , M12N4TDxss , M12N4TDyss , & + M12N4TDzss , M12N5FKxe , M12N5FKye , M12N5FKze , M12N5FMxe , M12N5FMye , M12N5FMze , & + M12N5MKxe , M12N5MKye , M12N5MKze , M12N5MMxe , M12N5MMye , M12N5MMze , M12N5RAxe , & + M12N5RAye , M12N5RAze , M12N5RDxe , M12N5RDye , M12N5RDze , M12N5TAxe , M12N5TAye , & + M12N5TAze , M12N5TDxss , M12N5TDyss , M12N5TDzss , M12N6FKxe , M12N6FKye , M12N6FKze , & + M12N6FMxe , M12N6FMye , M12N6FMze , M12N6MKxe , M12N6MKye , M12N6MKze , M12N6MMxe , & + M12N6MMye , M12N6MMze , M12N6RAxe , M12N6RAye , M12N6RAze , M12N6RDxe , M12N6RDye , & + M12N6RDze , M12N6TAxe , M12N6TAye , M12N6TAze , M12N6TDxss , M12N6TDyss , M12N6TDzss , & + M12N7FKxe , M12N7FKye , M12N7FKze , M12N7FMxe , M12N7FMye , M12N7FMze , M12N7MKxe , & + M12N7MKye , M12N7MKze , M12N7MMxe , M12N7MMye , M12N7MMze , M12N7RAxe , M12N7RAye , & + M12N7RAze , M12N7RDxe , M12N7RDye , M12N7RDze , M12N7TAxe , M12N7TAye , M12N7TAze , & + M12N7TDxss , M12N7TDyss , M12N7TDzss , M12N8FKxe , M12N8FKye , M12N8FKze , M12N8FMxe , & + M12N8FMye , M12N8FMze , M12N8MKxe , M12N8MKye , M12N8MKze , M12N8MMxe , M12N8MMye , & + M12N8MMze , M12N8RAxe , M12N8RAye , M12N8RAze , M12N8RDxe , M12N8RDye , M12N8RDze , & + M12N8TAxe , M12N8TAye , M12N8TAze , M12N8TDxss , M12N8TDyss , M12N8TDzss , M12N9FKxe , & + M12N9FKye , M12N9FKze , M12N9FMxe , M12N9FMye , M12N9FMze , M12N9MKxe , M12N9MKye , & + M12N9MKze , M12N9MMxe , M12N9MMye , M12N9MMze , M12N9RAxe , M12N9RAye , M12N9RAze , & + M12N9RDxe , M12N9RDye , M12N9RDze , M12N9TAxe , M12N9TAye , M12N9TAze , M12N9TDxss , & + M12N9TDyss , M12N9TDzss , M13N1FKxe , M13N1FKye , M13N1FKze , M13N1FMxe , M13N1FMye , & + M13N1FMze , M13N1MKxe , M13N1MKye , M13N1MKze , M13N1MMxe , M13N1MMye , M13N1MMze , & + M13N1RAxe , M13N1RAye , M13N1RAze , M13N1RDxe , M13N1RDye , M13N1RDze , M13N1TAxe , & + M13N1TAye , M13N1TAze , M13N1TDxss , M13N1TDyss , M13N1TDzss , M13N2FKxe , M13N2FKye , & + M13N2FKze , M13N2FMxe , M13N2FMye , M13N2FMze , M13N2MKxe , M13N2MKye , M13N2MKze , & + M13N2MMxe , M13N2MMye , M13N2MMze , M13N2RAxe , M13N2RAye , M13N2RAze , M13N2RDxe , & + M13N2RDye , M13N2RDze , M13N2TAxe , M13N2TAye , M13N2TAze , M13N2TDxss , M13N2TDyss , & + M13N2TDzss , M13N3FKxe , M13N3FKye , M13N3FKze , M13N3FMxe , M13N3FMye , M13N3FMze , & + M13N3MKxe , M13N3MKye , M13N3MKze , M13N3MMxe , M13N3MMye , M13N3MMze , M13N3RAxe , & + M13N3RAye , M13N3RAze , M13N3RDxe , M13N3RDye , M13N3RDze , M13N3TAxe , M13N3TAye , & + M13N3TAze , M13N3TDxss , M13N3TDyss , M13N3TDzss , M13N4FKxe , M13N4FKye , M13N4FKze , & + M13N4FMxe , M13N4FMye , M13N4FMze , M13N4MKxe , M13N4MKye , M13N4MKze , M13N4MMxe , & + M13N4MMye , M13N4MMze , M13N4RAxe , M13N4RAye , M13N4RAze , M13N4RDxe , M13N4RDye , & + M13N4RDze , M13N4TAxe , M13N4TAye , M13N4TAze , M13N4TDxss , M13N4TDyss , M13N4TDzss , & + M13N5FKxe , M13N5FKye , M13N5FKze , M13N5FMxe , M13N5FMye , M13N5FMze , M13N5MKxe , & + M13N5MKye , M13N5MKze , M13N5MMxe , M13N5MMye , M13N5MMze , M13N5RAxe , M13N5RAye , & + M13N5RAze , M13N5RDxe , M13N5RDye , M13N5RDze , M13N5TAxe , M13N5TAye , M13N5TAze , & + M13N5TDxss , M13N5TDyss , M13N5TDzss , M13N6FKxe , M13N6FKye , M13N6FKze , M13N6FMxe , & + M13N6FMye , M13N6FMze , M13N6MKxe , M13N6MKye , M13N6MKze , M13N6MMxe , M13N6MMye , & + M13N6MMze , M13N6RAxe , M13N6RAye , M13N6RAze , M13N6RDxe , M13N6RDye , M13N6RDze , & + M13N6TAxe , M13N6TAye , M13N6TAze , M13N6TDxss , M13N6TDyss , M13N6TDzss , M13N7FKxe , & + M13N7FKye , M13N7FKze , M13N7FMxe , M13N7FMye , M13N7FMze , M13N7MKxe , M13N7MKye , & + M13N7MKze , M13N7MMxe , M13N7MMye , M13N7MMze , M13N7RAxe , M13N7RAye , M13N7RAze , & + M13N7RDxe , M13N7RDye , M13N7RDze , M13N7TAxe , M13N7TAye , M13N7TAze , M13N7TDxss , & + M13N7TDyss , M13N7TDzss , M13N8FKxe , M13N8FKye , M13N8FKze , M13N8FMxe , M13N8FMye , & + M13N8FMze , M13N8MKxe , M13N8MKye , M13N8MKze , M13N8MMxe , M13N8MMye , M13N8MMze , & + M13N8RAxe , M13N8RAye , M13N8RAze , M13N8RDxe , M13N8RDye , M13N8RDze , M13N8TAxe , & + M13N8TAye , M13N8TAze , M13N8TDxss , M13N8TDyss , M13N8TDzss , M13N9FKxe , M13N9FKye , & + M13N9FKze , M13N9FMxe , M13N9FMye , M13N9FMze , M13N9MKxe , M13N9MKye , M13N9MKze , & + M13N9MMxe , M13N9MMye , M13N9MMze , M13N9RAxe , M13N9RAye , M13N9RAze , M13N9RDxe , & + M13N9RDye , M13N9RDze , M13N9TAxe , M13N9TAye , M13N9TAze , M13N9TDxss , M13N9TDyss , & + M13N9TDzss , M14N1FKxe , M14N1FKye , M14N1FKze , M14N1FMxe , M14N1FMye , M14N1FMze , & + M14N1MKxe , M14N1MKye , M14N1MKze , M14N1MMxe , M14N1MMye , M14N1MMze , M14N1RAxe , & + M14N1RAye , M14N1RAze , M14N1RDxe , M14N1RDye , M14N1RDze , M14N1TAxe , M14N1TAye , & + M14N1TAze , M14N1TDxss , M14N1TDyss , M14N1TDzss , M14N2FKxe , M14N2FKye , M14N2FKze , & + M14N2FMxe , M14N2FMye , M14N2FMze , M14N2MKxe , M14N2MKye , M14N2MKze , M14N2MMxe , & + M14N2MMye , M14N2MMze , M14N2RAxe , M14N2RAye , M14N2RAze , M14N2RDxe , M14N2RDye , & + M14N2RDze , M14N2TAxe , M14N2TAye , M14N2TAze , M14N2TDxss , M14N2TDyss , M14N2TDzss , & + M14N3FKxe , M14N3FKye , M14N3FKze , M14N3FMxe , M14N3FMye , M14N3FMze , M14N3MKxe , & + M14N3MKye , M14N3MKze , M14N3MMxe , M14N3MMye , M14N3MMze , M14N3RAxe , M14N3RAye , & + M14N3RAze , M14N3RDxe , M14N3RDye , M14N3RDze , M14N3TAxe , M14N3TAye , M14N3TAze , & + M14N3TDxss , M14N3TDyss , M14N3TDzss , M14N4FKxe , M14N4FKye , M14N4FKze , M14N4FMxe , & + M14N4FMye , M14N4FMze , M14N4MKxe , M14N4MKye , M14N4MKze , M14N4MMxe , M14N4MMye , & + M14N4MMze , M14N4RAxe , M14N4RAye , M14N4RAze , M14N4RDxe , M14N4RDye , M14N4RDze , & + M14N4TAxe , M14N4TAye , M14N4TAze , M14N4TDxss , M14N4TDyss , M14N4TDzss , M14N5FKxe , & + M14N5FKye , M14N5FKze , M14N5FMxe , M14N5FMye , M14N5FMze , M14N5MKxe , M14N5MKye , & + M14N5MKze , M14N5MMxe , M14N5MMye , M14N5MMze , M14N5RAxe , M14N5RAye , M14N5RAze , & + M14N5RDxe , M14N5RDye , M14N5RDze , M14N5TAxe , M14N5TAye , M14N5TAze , M14N5TDxss , & + M14N5TDyss , M14N5TDzss , M14N6FKxe , M14N6FKye , M14N6FKze , M14N6FMxe , M14N6FMye , & + M14N6FMze , M14N6MKxe , M14N6MKye , M14N6MKze , M14N6MMxe , M14N6MMye , M14N6MMze , & + M14N6RAxe , M14N6RAye , M14N6RAze , M14N6RDxe , M14N6RDye , M14N6RDze , M14N6TAxe , & + M14N6TAye , M14N6TAze , M14N6TDxss , M14N6TDyss , M14N6TDzss , M14N7FKxe , M14N7FKye , & + M14N7FKze , M14N7FMxe , M14N7FMye , M14N7FMze , M14N7MKxe , M14N7MKye , M14N7MKze , & + M14N7MMxe , M14N7MMye , M14N7MMze , M14N7RAxe , M14N7RAye , M14N7RAze , M14N7RDxe , & + M14N7RDye , M14N7RDze , M14N7TAxe , M14N7TAye , M14N7TAze , M14N7TDxss , M14N7TDyss , & + M14N7TDzss , M14N8FKxe , M14N8FKye , M14N8FKze , M14N8FMxe , M14N8FMye , M14N8FMze , & + M14N8MKxe , M14N8MKye , M14N8MKze , M14N8MMxe , M14N8MMye , M14N8MMze , M14N8RAxe , & + M14N8RAye , M14N8RAze , M14N8RDxe , M14N8RDye , M14N8RDze , M14N8TAxe , M14N8TAye , & + M14N8TAze , M14N8TDxss , M14N8TDyss , M14N8TDzss , M14N9FKxe , M14N9FKye , M14N9FKze , & + M14N9FMxe , M14N9FMye , M14N9FMze , M14N9MKxe , M14N9MKye , M14N9MKze , M14N9MMxe , & + M14N9MMye , M14N9MMze , M14N9RAxe , M14N9RAye , M14N9RAze , M14N9RDxe , M14N9RDye , & + M14N9RDze , M14N9TAxe , M14N9TAye , M14N9TAze , M14N9TDxss , M14N9TDyss , M14N9TDzss , & + M15N1FKxe , M15N1FKye , M15N1FKze , M15N1FMxe , M15N1FMye , M15N1FMze , M15N1MKxe , & + M15N1MKye , M15N1MKze , M15N1MMxe , M15N1MMye , M15N1MMze , M15N1RAxe , M15N1RAye , & + M15N1RAze , M15N1RDxe , M15N1RDye , M15N1RDze , M15N1TAxe , M15N1TAye , M15N1TAze , & + M15N1TDxss , M15N1TDyss , M15N1TDzss , M15N2FKxe , M15N2FKye , M15N2FKze , M15N2FMxe , & + M15N2FMye , M15N2FMze , M15N2MKxe , M15N2MKye , M15N2MKze , M15N2MMxe , M15N2MMye , & + M15N2MMze , M15N2RAxe , M15N2RAye , M15N2RAze , M15N2RDxe , M15N2RDye , M15N2RDze , & + M15N2TAxe , M15N2TAye , M15N2TAze , M15N2TDxss , M15N2TDyss , M15N2TDzss , M15N3FKxe , & + M15N3FKye , M15N3FKze , M15N3FMxe , M15N3FMye , M15N3FMze , M15N3MKxe , M15N3MKye , & + M15N3MKze , M15N3MMxe , M15N3MMye , M15N3MMze , M15N3RAxe , M15N3RAye , M15N3RAze , & + M15N3RDxe , M15N3RDye , M15N3RDze , M15N3TAxe , M15N3TAye , M15N3TAze , M15N3TDxss , & + M15N3TDyss , M15N3TDzss , M15N4FKxe , M15N4FKye , M15N4FKze , M15N4FMxe , M15N4FMye , & + M15N4FMze , M15N4MKxe , M15N4MKye , M15N4MKze , M15N4MMxe , M15N4MMye , M15N4MMze , & + M15N4RAxe , M15N4RAye , M15N4RAze , M15N4RDxe , M15N4RDye , M15N4RDze , M15N4TAxe , & + M15N4TAye , M15N4TAze , M15N4TDxss , M15N4TDyss , M15N4TDzss , M15N5FKxe , M15N5FKye , & + M15N5FKze , M15N5FMxe , M15N5FMye , M15N5FMze , M15N5MKxe , M15N5MKye , M15N5MKze , & + M15N5MMxe , M15N5MMye , M15N5MMze , M15N5RAxe , M15N5RAye , M15N5RAze , M15N5RDxe , & + M15N5RDye , M15N5RDze , M15N5TAxe , M15N5TAye , M15N5TAze , M15N5TDxss , M15N5TDyss , & + M15N5TDzss , M15N6FKxe , M15N6FKye , M15N6FKze , M15N6FMxe , M15N6FMye , M15N6FMze , & + M15N6MKxe , M15N6MKye , M15N6MKze , M15N6MMxe , M15N6MMye , M15N6MMze , M15N6RAxe , & + M15N6RAye , M15N6RAze , M15N6RDxe , M15N6RDye , M15N6RDze , M15N6TAxe , M15N6TAye , & + M15N6TAze , M15N6TDxss , M15N6TDyss , M15N6TDzss , M15N7FKxe , M15N7FKye , M15N7FKze , & + M15N7FMxe , M15N7FMye , M15N7FMze , M15N7MKxe , M15N7MKye , M15N7MKze , M15N7MMxe , & + M15N7MMye , M15N7MMze , M15N7RAxe , M15N7RAye , M15N7RAze , M15N7RDxe , M15N7RDye , & + M15N7RDze , M15N7TAxe , M15N7TAye , M15N7TAze , M15N7TDxss , M15N7TDyss , M15N7TDzss , & + M15N8FKxe , M15N8FKye , M15N8FKze , M15N8FMxe , M15N8FMye , M15N8FMze , M15N8MKxe , & + M15N8MKye , M15N8MKze , M15N8MMxe , M15N8MMye , M15N8MMze , M15N8RAxe , M15N8RAye , & + M15N8RAze , M15N8RDxe , M15N8RDye , M15N8RDze , M15N8TAxe , M15N8TAye , M15N8TAze , & + M15N8TDxss , M15N8TDyss , M15N8TDzss , M15N9FKxe , M15N9FKye , M15N9FKze , M15N9FMxe , & + M15N9FMye , M15N9FMze , M15N9MKxe , M15N9MKye , M15N9MKze , M15N9MMxe , M15N9MMye , & + M15N9MMze , M15N9RAxe , M15N9RAye , M15N9RAze , M15N9RDxe , M15N9RDye , M15N9RDze , & + M15N9TAxe , M15N9TAye , M15N9TAze , M15N9TDxss , M15N9TDyss , M15N9TDzss , M16N1FKxe , & + M16N1FKye , M16N1FKze , M16N1FMxe , M16N1FMye , M16N1FMze , M16N1MKxe , M16N1MKye , & + M16N1MKze , M16N1MMxe , M16N1MMye , M16N1MMze , M16N1RAxe , M16N1RAye , M16N1RAze , & + M16N1RDxe , M16N1RDye , M16N1RDze , M16N1TAxe , M16N1TAye , M16N1TAze , M16N1TDxss , & + M16N1TDyss , M16N1TDzss , M16N2FKxe , M16N2FKye , M16N2FKze , M16N2FMxe , M16N2FMye , & + M16N2FMze , M16N2MKxe , M16N2MKye , M16N2MKze , M16N2MMxe , M16N2MMye , M16N2MMze , & + M16N2RAxe , M16N2RAye , M16N2RAze , M16N2RDxe , M16N2RDye , M16N2RDze , M16N2TAxe , & + M16N2TAye , M16N2TAze , M16N2TDxss , M16N2TDyss , M16N2TDzss , M16N3FKxe , M16N3FKye , & + M16N3FKze , M16N3FMxe , M16N3FMye , M16N3FMze , M16N3MKxe , M16N3MKye , M16N3MKze , & + M16N3MMxe , M16N3MMye , M16N3MMze , M16N3RAxe , M16N3RAye , M16N3RAze , M16N3RDxe , & + M16N3RDye , M16N3RDze , M16N3TAxe , M16N3TAye , M16N3TAze , M16N3TDxss , M16N3TDyss , & + M16N3TDzss , M16N4FKxe , M16N4FKye , M16N4FKze , M16N4FMxe , M16N4FMye , M16N4FMze , & + M16N4MKxe , M16N4MKye , M16N4MKze , M16N4MMxe /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry3(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M16N4MMye , M16N4MMze , M16N4RAxe , M16N4RAye , M16N4RAze , M16N4RDxe , M16N4RDye , & + M16N4RDze , M16N4TAxe , M16N4TAye , M16N4TAze , M16N4TDxss , M16N4TDyss , M16N4TDzss , & + M16N5FKxe , M16N5FKye , M16N5FKze , M16N5FMxe , M16N5FMye , M16N5FMze , M16N5MKxe , & + M16N5MKye , M16N5MKze , M16N5MMxe , M16N5MMye , M16N5MMze , M16N5RAxe , M16N5RAye , & + M16N5RAze , M16N5RDxe , M16N5RDye , M16N5RDze , M16N5TAxe , M16N5TAye , M16N5TAze , & + M16N5TDxss , M16N5TDyss , M16N5TDzss , M16N6FKxe , M16N6FKye , M16N6FKze , M16N6FMxe , & + M16N6FMye , M16N6FMze , M16N6MKxe , M16N6MKye , M16N6MKze , M16N6MMxe , M16N6MMye , & + M16N6MMze , M16N6RAxe , M16N6RAye , M16N6RAze , M16N6RDxe , M16N6RDye , M16N6RDze , & + M16N6TAxe , M16N6TAye , M16N6TAze , M16N6TDxss , M16N6TDyss , M16N6TDzss , M16N7FKxe , & + M16N7FKye , M16N7FKze , M16N7FMxe , M16N7FMye , M16N7FMze , M16N7MKxe , M16N7MKye , & + M16N7MKze , M16N7MMxe , M16N7MMye , M16N7MMze , M16N7RAxe , M16N7RAye , M16N7RAze , & + M16N7RDxe , M16N7RDye , M16N7RDze , M16N7TAxe , M16N7TAye , M16N7TAze , M16N7TDxss , & + M16N7TDyss , M16N7TDzss , M16N8FKxe , M16N8FKye , M16N8FKze , M16N8FMxe , M16N8FMye , & + M16N8FMze , M16N8MKxe , M16N8MKye , M16N8MKze , M16N8MMxe , M16N8MMye , M16N8MMze , & + M16N8RAxe , M16N8RAye , M16N8RAze , M16N8RDxe , M16N8RDye , M16N8RDze , M16N8TAxe , & + M16N8TAye , M16N8TAze , M16N8TDxss , M16N8TDyss , M16N8TDzss , M16N9FKxe , M16N9FKye , & + M16N9FKze , M16N9FMxe , M16N9FMye , M16N9FMze , M16N9MKxe , M16N9MKye , M16N9MKze , & + M16N9MMxe , M16N9MMye , M16N9MMze , M16N9RAxe , M16N9RAye , M16N9RAze , M16N9RDxe , & + M16N9RDye , M16N9RDze , M16N9TAxe , M16N9TAye , M16N9TAze , M16N9TDxss , M16N9TDyss , & + M16N9TDzss , M17N1FKxe , M17N1FKye , M17N1FKze , M17N1FMxe , M17N1FMye , M17N1FMze , & + M17N1MKxe , M17N1MKye , M17N1MKze , M17N1MMxe , M17N1MMye , M17N1MMze , M17N1RAxe , & + M17N1RAye , M17N1RAze , M17N1RDxe , M17N1RDye , M17N1RDze , M17N1TAxe , M17N1TAye , & + M17N1TAze , M17N1TDxss , M17N1TDyss , M17N1TDzss , M17N2FKxe , M17N2FKye , M17N2FKze , & + M17N2FMxe , M17N2FMye , M17N2FMze , M17N2MKxe , M17N2MKye , M17N2MKze , M17N2MMxe , & + M17N2MMye , M17N2MMze , M17N2RAxe , M17N2RAye , M17N2RAze , M17N2RDxe , M17N2RDye , & + M17N2RDze , M17N2TAxe , M17N2TAye , M17N2TAze , M17N2TDxss , M17N2TDyss , M17N2TDzss , & + M17N3FKxe , M17N3FKye , M17N3FKze , M17N3FMxe , M17N3FMye , M17N3FMze , M17N3MKxe , & + M17N3MKye , M17N3MKze , M17N3MMxe , M17N3MMye , M17N3MMze , M17N3RAxe , M17N3RAye , & + M17N3RAze , M17N3RDxe , M17N3RDye , M17N3RDze , M17N3TAxe , M17N3TAye , M17N3TAze , & + M17N3TDxss , M17N3TDyss , M17N3TDzss , M17N4FKxe , M17N4FKye , M17N4FKze , M17N4FMxe , & + M17N4FMye , M17N4FMze , M17N4MKxe , M17N4MKye , M17N4MKze , M17N4MMxe , M17N4MMye , & + M17N4MMze , M17N4RAxe , M17N4RAye , M17N4RAze , M17N4RDxe , M17N4RDye , M17N4RDze , & + M17N4TAxe , M17N4TAye , M17N4TAze , M17N4TDxss , M17N4TDyss , M17N4TDzss , M17N5FKxe , & + M17N5FKye , M17N5FKze , M17N5FMxe , M17N5FMye , M17N5FMze , M17N5MKxe , M17N5MKye , & + M17N5MKze , M17N5MMxe , M17N5MMye , M17N5MMze , M17N5RAxe , M17N5RAye , M17N5RAze , & + M17N5RDxe , M17N5RDye , M17N5RDze , M17N5TAxe , M17N5TAye , M17N5TAze , M17N5TDxss , & + M17N5TDyss , M17N5TDzss , M17N6FKxe , M17N6FKye , M17N6FKze , M17N6FMxe , M17N6FMye , & + M17N6FMze , M17N6MKxe , M17N6MKye , M17N6MKze , M17N6MMxe , M17N6MMye , M17N6MMze , & + M17N6RAxe , M17N6RAye , M17N6RAze , M17N6RDxe , M17N6RDye , M17N6RDze , M17N6TAxe , & + M17N6TAye , M17N6TAze , M17N6TDxss , M17N6TDyss , M17N6TDzss , M17N7FKxe , M17N7FKye , & + M17N7FKze , M17N7FMxe , M17N7FMye , M17N7FMze , M17N7MKxe , M17N7MKye , M17N7MKze , & + M17N7MMxe , M17N7MMye , M17N7MMze , M17N7RAxe , M17N7RAye , M17N7RAze , M17N7RDxe , & + M17N7RDye , M17N7RDze , M17N7TAxe , M17N7TAye , M17N7TAze , M17N7TDxss , M17N7TDyss , & + M17N7TDzss , M17N8FKxe , M17N8FKye , M17N8FKze , M17N8FMxe , M17N8FMye , M17N8FMze , & + M17N8MKxe , M17N8MKye , M17N8MKze , M17N8MMxe , M17N8MMye , M17N8MMze , M17N8RAxe , & + M17N8RAye , M17N8RAze , M17N8RDxe , M17N8RDye , M17N8RDze , M17N8TAxe , M17N8TAye , & + M17N8TAze , M17N8TDxss , M17N8TDyss , M17N8TDzss , M17N9FKxe , M17N9FKye , M17N9FKze , & + M17N9FMxe , M17N9FMye , M17N9FMze , M17N9MKxe , M17N9MKye , M17N9MKze , M17N9MMxe , & + M17N9MMye , M17N9MMze , M17N9RAxe , M17N9RAye , M17N9RAze , M17N9RDxe , M17N9RDye , & + M17N9RDze , M17N9TAxe , M17N9TAye , M17N9TAze , M17N9TDxss , M17N9TDyss , M17N9TDzss , & + M18N1FKxe , M18N1FKye , M18N1FKze , M18N1FMxe , M18N1FMye , M18N1FMze , M18N1MKxe , & + M18N1MKye , M18N1MKze , M18N1MMxe , M18N1MMye , M18N1MMze , M18N1RAxe , M18N1RAye , & + M18N1RAze , M18N1RDxe , M18N1RDye , M18N1RDze , M18N1TAxe , M18N1TAye , M18N1TAze , & + M18N1TDxss , M18N1TDyss , M18N1TDzss , M18N2FKxe , M18N2FKye , M18N2FKze , M18N2FMxe , & + M18N2FMye , M18N2FMze , M18N2MKxe , M18N2MKye , M18N2MKze , M18N2MMxe , M18N2MMye , & + M18N2MMze , M18N2RAxe , M18N2RAye , M18N2RAze , M18N2RDxe , M18N2RDye , M18N2RDze , & + M18N2TAxe , M18N2TAye , M18N2TAze , M18N2TDxss , M18N2TDyss , M18N2TDzss , M18N3FKxe , & + M18N3FKye , M18N3FKze , M18N3FMxe , M18N3FMye , M18N3FMze , M18N3MKxe , M18N3MKye , & + M18N3MKze , M18N3MMxe , M18N3MMye , M18N3MMze , M18N3RAxe , M18N3RAye , M18N3RAze , & + M18N3RDxe , M18N3RDye , M18N3RDze , M18N3TAxe , M18N3TAye , M18N3TAze , M18N3TDxss , & + M18N3TDyss , M18N3TDzss , M18N4FKxe , M18N4FKye , M18N4FKze , M18N4FMxe , M18N4FMye , & + M18N4FMze , M18N4MKxe , M18N4MKye , M18N4MKze , M18N4MMxe , M18N4MMye , M18N4MMze , & + M18N4RAxe , M18N4RAye , M18N4RAze , M18N4RDxe , M18N4RDye , M18N4RDze , M18N4TAxe , & + M18N4TAye , M18N4TAze , M18N4TDxss , M18N4TDyss , M18N4TDzss , M18N5FKxe , M18N5FKye , & + M18N5FKze , M18N5FMxe , M18N5FMye , M18N5FMze , M18N5MKxe , M18N5MKye , M18N5MKze , & + M18N5MMxe , M18N5MMye , M18N5MMze , M18N5RAxe , M18N5RAye , M18N5RAze , M18N5RDxe , & + M18N5RDye , M18N5RDze , M18N5TAxe , M18N5TAye , M18N5TAze , M18N5TDxss , M18N5TDyss , & + M18N5TDzss , M18N6FKxe , M18N6FKye , M18N6FKze , M18N6FMxe , M18N6FMye , M18N6FMze , & + M18N6MKxe , M18N6MKye , M18N6MKze , M18N6MMxe , M18N6MMye , M18N6MMze , M18N6RAxe , & + M18N6RAye , M18N6RAze , M18N6RDxe , M18N6RDye , M18N6RDze , M18N6TAxe , M18N6TAye , & + M18N6TAze , M18N6TDxss , M18N6TDyss , M18N6TDzss , M18N7FKxe , M18N7FKye , M18N7FKze , & + M18N7FMxe , M18N7FMye , M18N7FMze , M18N7MKxe , M18N7MKye , M18N7MKze , M18N7MMxe , & + M18N7MMye , M18N7MMze , M18N7RAxe , M18N7RAye , M18N7RAze , M18N7RDxe , M18N7RDye , & + M18N7RDze , M18N7TAxe , M18N7TAye , M18N7TAze , M18N7TDxss , M18N7TDyss , M18N7TDzss , & + M18N8FKxe , M18N8FKye , M18N8FKze , M18N8FMxe , M18N8FMye , M18N8FMze , M18N8MKxe , & + M18N8MKye , M18N8MKze , M18N8MMxe , M18N8MMye , M18N8MMze , M18N8RAxe , M18N8RAye , & + M18N8RAze , M18N8RDxe , M18N8RDye , M18N8RDze , M18N8TAxe , M18N8TAye , M18N8TAze , & + M18N8TDxss , M18N8TDyss , M18N8TDzss , M18N9FKxe , M18N9FKye , M18N9FKze , M18N9FMxe , & + M18N9FMye , M18N9FMze , M18N9MKxe , M18N9MKye , M18N9MKze , M18N9MMxe , M18N9MMye , & + M18N9MMze , M18N9RAxe , M18N9RAye , M18N9RAze , M18N9RDxe , M18N9RDye , M18N9RDze , & + M18N9TAxe , M18N9TAye , M18N9TAze , M18N9TDxss , M18N9TDyss , M18N9TDzss , M19N1FKxe , & + M19N1FKye , M19N1FKze , M19N1FMxe , M19N1FMye , M19N1FMze , M19N1MKxe , M19N1MKye , & + M19N1MKze , M19N1MMxe , M19N1MMye , M19N1MMze , M19N1RAxe , M19N1RAye , M19N1RAze , & + M19N1RDxe , M19N1RDye , M19N1RDze , M19N1TAxe , M19N1TAye , M19N1TAze , M19N1TDxss , & + M19N1TDyss , M19N1TDzss , M19N2FKxe , M19N2FKye , M19N2FKze , M19N2FMxe , M19N2FMye , & + M19N2FMze , M19N2MKxe , M19N2MKye , M19N2MKze , M19N2MMxe , M19N2MMye , M19N2MMze , & + M19N2RAxe , M19N2RAye , M19N2RAze , M19N2RDxe , M19N2RDye , M19N2RDze , M19N2TAxe , & + M19N2TAye , M19N2TAze , M19N2TDxss , M19N2TDyss , M19N2TDzss , M19N3FKxe , M19N3FKye , & + M19N3FKze , M19N3FMxe , M19N3FMye , M19N3FMze , M19N3MKxe , M19N3MKye , M19N3MKze , & + M19N3MMxe , M19N3MMye , M19N3MMze , M19N3RAxe , M19N3RAye , M19N3RAze , M19N3RDxe , & + M19N3RDye , M19N3RDze , M19N3TAxe , M19N3TAye , M19N3TAze , M19N3TDxss , M19N3TDyss , & + M19N3TDzss , M19N4FKxe , M19N4FKye , M19N4FKze , M19N4FMxe , M19N4FMye , M19N4FMze , & + M19N4MKxe , M19N4MKye , M19N4MKze , M19N4MMxe , M19N4MMye , M19N4MMze , M19N4RAxe , & + M19N4RAye , M19N4RAze , M19N4RDxe , M19N4RDye , M19N4RDze , M19N4TAxe , M19N4TAye , & + M19N4TAze , M19N4TDxss , M19N4TDyss , M19N4TDzss , M19N5FKxe , M19N5FKye , M19N5FKze , & + M19N5FMxe , M19N5FMye , M19N5FMze , M19N5MKxe , M19N5MKye , M19N5MKze , M19N5MMxe , & + M19N5MMye , M19N5MMze , M19N5RAxe , M19N5RAye , M19N5RAze , M19N5RDxe , M19N5RDye , & + M19N5RDze , M19N5TAxe , M19N5TAye , M19N5TAze , M19N5TDxss , M19N5TDyss , M19N5TDzss , & + M19N6FKxe , M19N6FKye , M19N6FKze , M19N6FMxe , M19N6FMye , M19N6FMze , M19N6MKxe , & + M19N6MKye , M19N6MKze , M19N6MMxe , M19N6MMye , M19N6MMze , M19N6RAxe , M19N6RAye , & + M19N6RAze , M19N6RDxe , M19N6RDye , M19N6RDze , M19N6TAxe , M19N6TAye , M19N6TAze , & + M19N6TDxss , M19N6TDyss , M19N6TDzss , M19N7FKxe , M19N7FKye , M19N7FKze , M19N7FMxe , & + M19N7FMye , M19N7FMze , M19N7MKxe , M19N7MKye , M19N7MKze , M19N7MMxe , M19N7MMye , & + M19N7MMze , M19N7RAxe , M19N7RAye , M19N7RAze , M19N7RDxe , M19N7RDye , M19N7RDze , & + M19N7TAxe , M19N7TAye , M19N7TAze , M19N7TDxss , M19N7TDyss , M19N7TDzss , M19N8FKxe , & + M19N8FKye , M19N8FKze , M19N8FMxe , M19N8FMye , M19N8FMze , M19N8MKxe , M19N8MKye , & + M19N8MKze , M19N8MMxe , M19N8MMye , M19N8MMze , M19N8RAxe , M19N8RAye , M19N8RAze , & + M19N8RDxe , M19N8RDye , M19N8RDze , M19N8TAxe , M19N8TAye , M19N8TAze , M19N8TDxss , & + M19N8TDyss , M19N8TDzss , M19N9FKxe , M19N9FKye , M19N9FKze , M19N9FMxe , M19N9FMye , & + M19N9FMze , M19N9MKxe , M19N9MKye , M19N9MKze , M19N9MMxe , M19N9MMye , M19N9MMze , & + M19N9RAxe , M19N9RAye , M19N9RAze , M19N9RDxe , M19N9RDye , M19N9RDze , M19N9TAxe , & + M19N9TAye , M19N9TAze , M19N9TDxss , M19N9TDyss , M19N9TDzss , M20N1FKxe , M20N1FKye , & + M20N1FKze , M20N1FMxe , M20N1FMye , M20N1FMze , M20N1MKxe , M20N1MKye , M20N1MKze , & + M20N1MMxe , M20N1MMye , M20N1MMze , M20N1RAxe , M20N1RAye , M20N1RAze , M20N1RDxe , & + M20N1RDye , M20N1RDze , M20N1TAxe , M20N1TAye , M20N1TAze , M20N1TDxss , M20N1TDyss , & + M20N1TDzss , M20N2FKxe , M20N2FKye , M20N2FKze , M20N2FMxe , M20N2FMye , M20N2FMze , & + M20N2MKxe , M20N2MKye , M20N2MKze , M20N2MMxe , M20N2MMye , M20N2MMze , M20N2RAxe , & + M20N2RAye , M20N2RAze , M20N2RDxe , M20N2RDye , M20N2RDze , M20N2TAxe , M20N2TAye , & + M20N2TAze , M20N2TDxss , M20N2TDyss , M20N2TDzss , M20N3FKxe , M20N3FKye , M20N3FKze , & + M20N3FMxe , M20N3FMye , M20N3FMze , M20N3MKxe , M20N3MKye , M20N3MKze , M20N3MMxe , & + M20N3MMye , M20N3MMze , M20N3RAxe , M20N3RAye , M20N3RAze , M20N3RDxe , M20N3RDye , & + M20N3RDze , M20N3TAxe , M20N3TAye , M20N3TAze , M20N3TDxss , M20N3TDyss , M20N3TDzss , & + M20N4FKxe , M20N4FKye , M20N4FKze , M20N4FMxe , M20N4FMye , M20N4FMze , M20N4MKxe , & + M20N4MKye , M20N4MKze , M20N4MMxe , M20N4MMye , M20N4MMze , M20N4RAxe , M20N4RAye , & + M20N4RAze , M20N4RDxe , M20N4RDye , M20N4RDze , M20N4TAxe , M20N4TAye , M20N4TAze , & + M20N4TDxss , M20N4TDyss , M20N4TDzss , M20N5FKxe , M20N5FKye , M20N5FKze , M20N5FMxe , & + M20N5FMye , M20N5FMze , M20N5MKxe , M20N5MKye , M20N5MKze , M20N5MMxe , M20N5MMye , & + M20N5MMze , M20N5RAxe , M20N5RAye , M20N5RAze , M20N5RDxe , M20N5RDye , M20N5RDze , & + M20N5TAxe , M20N5TAye , M20N5TAze , M20N5TDxss , M20N5TDyss , M20N5TDzss , M20N6FKxe , & + M20N6FKye , M20N6FKze , M20N6FMxe , M20N6FMye , M20N6FMze , M20N6MKxe , M20N6MKye , & + M20N6MKze , M20N6MMxe , M20N6MMye , M20N6MMze , M20N6RAxe , M20N6RAye , M20N6RAze , & + M20N6RDxe , M20N6RDye , M20N6RDze , M20N6TAxe , M20N6TAye , M20N6TAze , M20N6TDxss , & + M20N6TDyss , M20N6TDzss , M20N7FKxe , M20N7FKye , M20N7FKze , M20N7FMxe , M20N7FMye , & + M20N7FMze , M20N7MKxe , M20N7MKye , M20N7MKze , M20N7MMxe , M20N7MMye , M20N7MMze , & + M20N7RAxe , M20N7RAye , M20N7RAze , M20N7RDxe , M20N7RDye , M20N7RDze , M20N7TAxe , & + M20N7TAye , M20N7TAze , M20N7TDxss , M20N7TDyss , M20N7TDzss , M20N8FKxe , M20N8FKye , & + M20N8FKze , M20N8FMxe , M20N8FMye , M20N8FMze , M20N8MKxe , M20N8MKye , M20N8MKze , & + M20N8MMxe , M20N8MMye , M20N8MMze , M20N8RAxe , M20N8RAye , M20N8RAze , M20N8RDxe , & + M20N8RDye , M20N8RDze , M20N8TAxe , M20N8TAye , M20N8TAze , M20N8TDxss , M20N8TDyss , & + M20N8TDzss , M20N9FKxe , M20N9FKye , M20N9FKze , M20N9FMxe , M20N9FMye , M20N9FMze , & + M20N9MKxe , M20N9MKye , M20N9MKze , M20N9MMxe , M20N9MMye , M20N9MMze , M20N9RAxe , & + M20N9RAye , M20N9RAze , M20N9RDxe , M20N9RDye , M20N9RDze , M20N9TAxe , M20N9TAye , & + M20N9TAze , M20N9TDxss , M20N9TDyss , M20N9TDzss , M21N1FKxe , M21N1FKye , M21N1FKze , & + M21N1FMxe , M21N1FMye , M21N1FMze , M21N1MKxe , M21N1MKye , M21N1MKze , M21N1MMxe , & + M21N1MMye , M21N1MMze , M21N1RAxe , M21N1RAye , M21N1RAze , M21N1RDxe , M21N1RDye , & + M21N1RDze , M21N1TAxe , M21N1TAye , M21N1TAze , M21N1TDxss , M21N1TDyss , M21N1TDzss , & + M21N2FKxe , M21N2FKye , M21N2FKze , M21N2FMxe , M21N2FMye , M21N2FMze , M21N2MKxe , & + M21N2MKye , M21N2MKze , M21N2MMxe , M21N2MMye , M21N2MMze , M21N2RAxe , M21N2RAye , & + M21N2RAze , M21N2RDxe , M21N2RDye , M21N2RDze , M21N2TAxe , M21N2TAye , M21N2TAze , & + M21N2TDxss , M21N2TDyss , M21N2TDzss , M21N3FKxe , M21N3FKye , M21N3FKze , M21N3FMxe , & + M21N3FMye , M21N3FMze , M21N3MKxe , M21N3MKye , M21N3MKze , M21N3MMxe , M21N3MMye , & + M21N3MMze , M21N3RAxe , M21N3RAye , M21N3RAze , M21N3RDxe , M21N3RDye , M21N3RDze , & + M21N3TAxe , M21N3TAye , M21N3TAze , M21N3TDxss , M21N3TDyss , M21N3TDzss , M21N4FKxe , & + M21N4FKye , M21N4FKze , M21N4FMxe , M21N4FMye , M21N4FMze , M21N4MKxe , M21N4MKye , & + M21N4MKze , M21N4MMxe , M21N4MMye , M21N4MMze , M21N4RAxe , M21N4RAye , M21N4RAze , & + M21N4RDxe , M21N4RDye , M21N4RDze , M21N4TAxe , M21N4TAye , M21N4TAze , M21N4TDxss , & + M21N4TDyss , M21N4TDzss , M21N5FKxe , M21N5FKye , M21N5FKze , M21N5FMxe , M21N5FMye , & + M21N5FMze , M21N5MKxe , M21N5MKye , M21N5MKze , M21N5MMxe , M21N5MMye , M21N5MMze , & + M21N5RAxe , M21N5RAye , M21N5RAze , M21N5RDxe , M21N5RDye , M21N5RDze , M21N5TAxe , & + M21N5TAye , M21N5TAze , M21N5TDxss , M21N5TDyss , M21N5TDzss , M21N6FKxe , M21N6FKye , & + M21N6FKze , M21N6FMxe , M21N6FMye , M21N6FMze , M21N6MKxe , M21N6MKye , M21N6MKze , & + M21N6MMxe , M21N6MMye , M21N6MMze , M21N6RAxe , M21N6RAye , M21N6RAze , M21N6RDxe , & + M21N6RDye , M21N6RDze , M21N6TAxe , M21N6TAye , M21N6TAze , M21N6TDxss , M21N6TDyss , & + M21N6TDzss , M21N7FKxe , M21N7FKye , M21N7FKze , M21N7FMxe , M21N7FMye , M21N7FMze , & + M21N7MKxe , M21N7MKye , M21N7MKze , M21N7MMxe , M21N7MMye , M21N7MMze , M21N7RAxe , & + M21N7RAye , M21N7RAze , M21N7RDxe , M21N7RDye , M21N7RDze , M21N7TAxe , M21N7TAye , & + M21N7TAze , M21N7TDxss , M21N7TDyss , M21N7TDzss , M21N8FKxe , M21N8FKye , M21N8FKze , & + M21N8FMxe , M21N8FMye , M21N8FMze , M21N8MKxe , M21N8MKye , M21N8MKze , M21N8MMxe , & + M21N8MMye , M21N8MMze , M21N8RAxe , M21N8RAye , M21N8RAze , M21N8RDxe , M21N8RDye , & + M21N8RDze , M21N8TAxe , M21N8TAye , M21N8TAze , M21N8TDxss , M21N8TDyss , M21N8TDzss , & + M21N9FKxe , M21N9FKye , M21N9FKze , M21N9FMxe , M21N9FMye , M21N9FMze , M21N9MKxe , & + M21N9MKye , M21N9MKze , M21N9MMxe , M21N9MMye , M21N9MMze , M21N9RAxe , M21N9RAye , & + M21N9RAze , M21N9RDxe , M21N9RDye , M21N9RDze , M21N9TAxe , M21N9TAye , M21N9TAze , & + M21N9TDxss , M21N9TDyss , M21N9TDzss , M22N1FKxe , M22N1FKye , M22N1FKze , M22N1FMxe , & + M22N1FMye , M22N1FMze , M22N1MKxe , M22N1MKye , M22N1MKze , M22N1MMxe , M22N1MMye , & + M22N1MMze , M22N1RAxe , M22N1RAye , M22N1RAze , M22N1RDxe , M22N1RDye , M22N1RDze , & + M22N1TAxe , M22N1TAye , M22N1TAze , M22N1TDxss , M22N1TDyss , M22N1TDzss , M22N2FKxe , & + M22N2FKye , M22N2FKze , M22N2FMxe , M22N2FMye , M22N2FMze , M22N2MKxe , M22N2MKye , & + M22N2MKze , M22N2MMxe , M22N2MMye , M22N2MMze , M22N2RAxe , M22N2RAye , M22N2RAze , & + M22N2RDxe , M22N2RDye , M22N2RDze , M22N2TAxe , M22N2TAye , M22N2TAze , M22N2TDxss , & + M22N2TDyss , M22N2TDzss , M22N3FKxe , M22N3FKye , M22N3FKze , M22N3FMxe , M22N3FMye , & + M22N3FMze , M22N3MKxe , M22N3MKye , M22N3MKze , M22N3MMxe , M22N3MMye , M22N3MMze , & + M22N3RAxe , M22N3RAye , M22N3RAze , M22N3RDxe , M22N3RDye , M22N3RDze , M22N3TAxe , & + M22N3TAye , M22N3TAze , M22N3TDxss , M22N3TDyss , M22N3TDzss , M22N4FKxe , M22N4FKye , & + M22N4FKze , M22N4FMxe , M22N4FMye , M22N4FMze , M22N4MKxe , M22N4MKye , M22N4MKze , & + M22N4MMxe , M22N4MMye , M22N4MMze , M22N4RAxe , M22N4RAye , M22N4RAze , M22N4RDxe , & + M22N4RDye , M22N4RDze , M22N4TAxe , M22N4TAye , M22N4TAze , M22N4TDxss , M22N4TDyss , & + M22N4TDzss , M22N5FKxe , M22N5FKye , M22N5FKze , M22N5FMxe , M22N5FMye , M22N5FMze , & + M22N5MKxe , M22N5MKye , M22N5MKze , M22N5MMxe , M22N5MMye , M22N5MMze , M22N5RAxe , & + M22N5RAye , M22N5RAze , M22N5RDxe , M22N5RDye , M22N5RDze , M22N5TAxe , M22N5TAye , & + M22N5TAze , M22N5TDxss , M22N5TDyss , M22N5TDzss , M22N6FKxe , M22N6FKye , M22N6FKze , & + M22N6FMxe , M22N6FMye , M22N6FMze , M22N6MKxe , M22N6MKye , M22N6MKze , M22N6MMxe , & + M22N6MMye , M22N6MMze , M22N6RAxe , M22N6RAye , M22N6RAze , M22N6RDxe , M22N6RDye , & + M22N6RDze , M22N6TAxe , M22N6TAye , M22N6TAze , M22N6TDxss , M22N6TDyss , M22N6TDzss , & + M22N7FKxe , M22N7FKye , M22N7FKze , M22N7FMxe , M22N7FMye , M22N7FMze , M22N7MKxe , & + M22N7MKye , M22N7MKze , M22N7MMxe , M22N7MMye , M22N7MMze , M22N7RAxe , M22N7RAye , & + M22N7RAze , M22N7RDxe , M22N7RDye , M22N7RDze , M22N7TAxe , M22N7TAye , M22N7TAze , & + M22N7TDxss , M22N7TDyss , M22N7TDzss , M22N8FKxe , M22N8FKye , M22N8FKze , M22N8FMxe , & + M22N8FMye , M22N8FMze , M22N8MKxe , M22N8MKye , M22N8MKze , M22N8MMxe , M22N8MMye , & + M22N8MMze , M22N8RAxe , M22N8RAye , M22N8RAze , M22N8RDxe , M22N8RDye , M22N8RDze , & + M22N8TAxe , M22N8TAye , M22N8TAze , M22N8TDxss , M22N8TDyss , M22N8TDzss , M22N9FKxe , & + M22N9FKye , M22N9FKze , M22N9FMxe , M22N9FMye , M22N9FMze , M22N9MKxe , M22N9MKye , & + M22N9MKze , M22N9MMxe , M22N9MMye , M22N9MMze , M22N9RAxe , M22N9RAye , M22N9RAze , & + M22N9RDxe , M22N9RDye , M22N9RDze , M22N9TAxe , M22N9TAye , M22N9TAze , M22N9TDxss , & + M22N9TDyss , M22N9TDzss , M23N1FKxe , M23N1FKye , M23N1FKze , M23N1FMxe , M23N1FMye , & + M23N1FMze , M23N1MKxe , M23N1MKye , M23N1MKze , M23N1MMxe , M23N1MMye , M23N1MMze , & + M23N1RAxe , M23N1RAye , M23N1RAze , M23N1RDxe , M23N1RDye , M23N1RDze , M23N1TAxe , & + M23N1TAye , M23N1TAze , M23N1TDxss , M23N1TDyss , M23N1TDzss , M23N2FKxe , M23N2FKye , & + M23N2FKze , M23N2FMxe , M23N2FMye , M23N2FMze , M23N2MKxe , M23N2MKye , M23N2MKze , & + M23N2MMxe , M23N2MMye , M23N2MMze , M23N2RAxe , M23N2RAye , M23N2RAze , M23N2RDxe , & + M23N2RDye , M23N2RDze , M23N2TAxe , M23N2TAye , M23N2TAze , M23N2TDxss , M23N2TDyss , & + M23N2TDzss , M23N3FKxe , M23N3FKye , M23N3FKze , M23N3FMxe , M23N3FMye , M23N3FMze , & + M23N3MKxe , M23N3MKye , M23N3MKze , M23N3MMxe , M23N3MMye , M23N3MMze , M23N3RAxe , & + M23N3RAye , M23N3RAze , M23N3RDxe , M23N3RDye , M23N3RDze , M23N3TAxe , M23N3TAye , & + M23N3TAze , M23N3TDxss , M23N3TDyss , M23N3TDzss , M23N4FKxe , M23N4FKye , M23N4FKze , & + M23N4FMxe , M23N4FMye , M23N4FMze , M23N4MKxe , M23N4MKye , M23N4MKze , M23N4MMxe , & + M23N4MMye , M23N4MMze , M23N4RAxe , M23N4RAye , M23N4RAze , M23N4RDxe , M23N4RDye , & + M23N4RDze , M23N4TAxe , M23N4TAye , M23N4TAze , M23N4TDxss , M23N4TDyss , M23N4TDzss , & + M23N5FKxe , M23N5FKye , M23N5FKze , M23N5FMxe , M23N5FMye , M23N5FMze , M23N5MKxe , & + M23N5MKye , M23N5MKze , M23N5MMxe , M23N5MMye , M23N5MMze , M23N5RAxe , M23N5RAye , & + M23N5RAze , M23N5RDxe , M23N5RDye , M23N5RDze , M23N5TAxe , M23N5TAye , M23N5TAze , & + M23N5TDxss , M23N5TDyss , M23N5TDzss , M23N6FKxe , M23N6FKye , M23N6FKze , M23N6FMxe , & + M23N6FMye , M23N6FMze , M23N6MKxe , M23N6MKye , M23N6MKze , M23N6MMxe , M23N6MMye , & + M23N6MMze , M23N6RAxe , M23N6RAye , M23N6RAze , M23N6RDxe , M23N6RDye , M23N6RDze , & + M23N6TAxe , M23N6TAye , M23N6TAze , M23N6TDxss , M23N6TDyss , M23N6TDzss , M23N7FKxe , & + M23N7FKye , M23N7FKze , M23N7FMxe , M23N7FMye , M23N7FMze , M23N7MKxe , M23N7MKye , & + M23N7MKze , M23N7MMxe , M23N7MMye , M23N7MMze , M23N7RAxe , M23N7RAye , M23N7RAze , & + M23N7RDxe , M23N7RDye , M23N7RDze , M23N7TAxe , M23N7TAye , M23N7TAze , M23N7TDxss , & + M23N7TDyss , M23N7TDzss , M23N8FKxe , M23N8FKye , M23N8FKze , M23N8FMxe , M23N8FMye , & + M23N8FMze , M23N8MKxe , M23N8MKye , M23N8MKze , M23N8MMxe , M23N8MMye , M23N8MMze , & + M23N8RAxe , M23N8RAye , M23N8RAze , M23N8RDxe , M23N8RDye , M23N8RDze , M23N8TAxe , & + M23N8TAye , M23N8TAze , M23N8TDxss , M23N8TDyss , M23N8TDzss , M23N9FKxe , M23N9FKye , & + M23N9FKze , M23N9FMxe , M23N9FMye , M23N9FMze , M23N9MKxe , M23N9MKye , M23N9MKze , & + M23N9MMxe , M23N9MMye , M23N9MMze , M23N9RAxe , M23N9RAye , M23N9RAze , M23N9RDxe , & + M23N9RDye , M23N9RDze , M23N9TAxe , M23N9TAye , M23N9TAze , M23N9TDxss , M23N9TDyss , & + M23N9TDzss , M24N1FKxe , M24N1FKye , M24N1FKze , M24N1FMxe , M24N1FMye , M24N1FMze , & + M24N1MKxe , M24N1MKye , M24N1MKze , M24N1MMxe , M24N1MMye , M24N1MMze , M24N1RAxe , & + M24N1RAye , M24N1RAze , M24N1RDxe , M24N1RDye , M24N1RDze , M24N1TAxe , M24N1TAye , & + M24N1TAze , M24N1TDxss , M24N1TDyss , M24N1TDzss /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry4(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M24N2FKxe , M24N2FKye , M24N2FKze , M24N2FMxe , M24N2FMye , M24N2FMze , M24N2MKxe , & + M24N2MKye , M24N2MKze , M24N2MMxe , M24N2MMye , M24N2MMze , M24N2RAxe , M24N2RAye , & + M24N2RAze , M24N2RDxe , M24N2RDye , M24N2RDze , M24N2TAxe , M24N2TAye , M24N2TAze , & + M24N2TDxss , M24N2TDyss , M24N2TDzss , M24N3FKxe , M24N3FKye , M24N3FKze , M24N3FMxe , & + M24N3FMye , M24N3FMze , M24N3MKxe , M24N3MKye , M24N3MKze , M24N3MMxe , M24N3MMye , & + M24N3MMze , M24N3RAxe , M24N3RAye , M24N3RAze , M24N3RDxe , M24N3RDye , M24N3RDze , & + M24N3TAxe , M24N3TAye , M24N3TAze , M24N3TDxss , M24N3TDyss , M24N3TDzss , M24N4FKxe , & + M24N4FKye , M24N4FKze , M24N4FMxe , M24N4FMye , M24N4FMze , M24N4MKxe , M24N4MKye , & + M24N4MKze , M24N4MMxe , M24N4MMye , M24N4MMze , M24N4RAxe , M24N4RAye , M24N4RAze , & + M24N4RDxe , M24N4RDye , M24N4RDze , M24N4TAxe , M24N4TAye , M24N4TAze , M24N4TDxss , & + M24N4TDyss , M24N4TDzss , M24N5FKxe , M24N5FKye , M24N5FKze , M24N5FMxe , M24N5FMye , & + M24N5FMze , M24N5MKxe , M24N5MKye , M24N5MKze , M24N5MMxe , M24N5MMye , M24N5MMze , & + M24N5RAxe , M24N5RAye , M24N5RAze , M24N5RDxe , M24N5RDye , M24N5RDze , M24N5TAxe , & + M24N5TAye , M24N5TAze , M24N5TDxss , M24N5TDyss , M24N5TDzss , M24N6FKxe , M24N6FKye , & + M24N6FKze , M24N6FMxe , M24N6FMye , M24N6FMze , M24N6MKxe , M24N6MKye , M24N6MKze , & + M24N6MMxe , M24N6MMye , M24N6MMze , M24N6RAxe , M24N6RAye , M24N6RAze , M24N6RDxe , & + M24N6RDye , M24N6RDze , M24N6TAxe , M24N6TAye , M24N6TAze , M24N6TDxss , M24N6TDyss , & + M24N6TDzss , M24N7FKxe , M24N7FKye , M24N7FKze , M24N7FMxe , M24N7FMye , M24N7FMze , & + M24N7MKxe , M24N7MKye , M24N7MKze , M24N7MMxe , M24N7MMye , M24N7MMze , M24N7RAxe , & + M24N7RAye , M24N7RAze , M24N7RDxe , M24N7RDye , M24N7RDze , M24N7TAxe , M24N7TAye , & + M24N7TAze , M24N7TDxss , M24N7TDyss , M24N7TDzss , M24N8FKxe , M24N8FKye , M24N8FKze , & + M24N8FMxe , M24N8FMye , M24N8FMze , M24N8MKxe , M24N8MKye , M24N8MKze , M24N8MMxe , & + M24N8MMye , M24N8MMze , M24N8RAxe , M24N8RAye , M24N8RAze , M24N8RDxe , M24N8RDye , & + M24N8RDze , M24N8TAxe , M24N8TAye , M24N8TAze , M24N8TDxss , M24N8TDyss , M24N8TDzss , & + M24N9FKxe , M24N9FKye , M24N9FKze , M24N9FMxe , M24N9FMye , M24N9FMze , M24N9MKxe , & + M24N9MKye , M24N9MKze , M24N9MMxe , M24N9MMye , M24N9MMze , M24N9RAxe , M24N9RAye , & + M24N9RAze , M24N9RDxe , M24N9RDye , M24N9RDze , M24N9TAxe , M24N9TAye , M24N9TAze , & + M24N9TDxss , M24N9TDyss , M24N9TDzss , M25N1FKxe , M25N1FKye , M25N1FKze , M25N1FMxe , & + M25N1FMye , M25N1FMze , M25N1MKxe , M25N1MKye , M25N1MKze , M25N1MMxe , M25N1MMye , & + M25N1MMze , M25N1RAxe , M25N1RAye , M25N1RAze , M25N1RDxe , M25N1RDye , M25N1RDze , & + M25N1TAxe , M25N1TAye , M25N1TAze , M25N1TDxss , M25N1TDyss , M25N1TDzss , M25N2FKxe , & + M25N2FKye , M25N2FKze , M25N2FMxe , M25N2FMye , M25N2FMze , M25N2MKxe , M25N2MKye , & + M25N2MKze , M25N2MMxe , M25N2MMye , M25N2MMze , M25N2RAxe , M25N2RAye , M25N2RAze , & + M25N2RDxe , M25N2RDye , M25N2RDze , M25N2TAxe , M25N2TAye , M25N2TAze , M25N2TDxss , & + M25N2TDyss , M25N2TDzss , M25N3FKxe , M25N3FKye , M25N3FKze , M25N3FMxe , M25N3FMye , & + M25N3FMze , M25N3MKxe , M25N3MKye , M25N3MKze , M25N3MMxe , M25N3MMye , M25N3MMze , & + M25N3RAxe , M25N3RAye , M25N3RAze , M25N3RDxe , M25N3RDye , M25N3RDze , M25N3TAxe , & + M25N3TAye , M25N3TAze , M25N3TDxss , M25N3TDyss , M25N3TDzss , M25N4FKxe , M25N4FKye , & + M25N4FKze , M25N4FMxe , M25N4FMye , M25N4FMze , M25N4MKxe , M25N4MKye , M25N4MKze , & + M25N4MMxe , M25N4MMye , M25N4MMze , M25N4RAxe , M25N4RAye , M25N4RAze , M25N4RDxe , & + M25N4RDye , M25N4RDze , M25N4TAxe , M25N4TAye , M25N4TAze , M25N4TDxss , M25N4TDyss , & + M25N4TDzss , M25N5FKxe , M25N5FKye , M25N5FKze , M25N5FMxe , M25N5FMye , M25N5FMze , & + M25N5MKxe , M25N5MKye , M25N5MKze , M25N5MMxe , M25N5MMye , M25N5MMze , M25N5RAxe , & + M25N5RAye , M25N5RAze , M25N5RDxe , M25N5RDye , M25N5RDze , M25N5TAxe , M25N5TAye , & + M25N5TAze , M25N5TDxss , M25N5TDyss , M25N5TDzss , M25N6FKxe , M25N6FKye , M25N6FKze , & + M25N6FMxe , M25N6FMye , M25N6FMze , M25N6MKxe , M25N6MKye , M25N6MKze , M25N6MMxe , & + M25N6MMye , M25N6MMze , M25N6RAxe , M25N6RAye , M25N6RAze , M25N6RDxe , M25N6RDye , & + M25N6RDze , M25N6TAxe , M25N6TAye , M25N6TAze , M25N6TDxss , M25N6TDyss , M25N6TDzss , & + M25N7FKxe , M25N7FKye , M25N7FKze , M25N7FMxe , M25N7FMye , M25N7FMze , M25N7MKxe , & + M25N7MKye , M25N7MKze , M25N7MMxe , M25N7MMye , M25N7MMze , M25N7RAxe , M25N7RAye , & + M25N7RAze , M25N7RDxe , M25N7RDye , M25N7RDze , M25N7TAxe , M25N7TAye , M25N7TAze , & + M25N7TDxss , M25N7TDyss , M25N7TDzss , M25N8FKxe , M25N8FKye , M25N8FKze , M25N8FMxe , & + M25N8FMye , M25N8FMze , M25N8MKxe , M25N8MKye , M25N8MKze , M25N8MMxe , M25N8MMye , & + M25N8MMze , M25N8RAxe , M25N8RAye , M25N8RAze , M25N8RDxe , M25N8RDye , M25N8RDze , & + M25N8TAxe , M25N8TAye , M25N8TAze , M25N8TDxss , M25N8TDyss , M25N8TDzss , M25N9FKxe , & + M25N9FKye , M25N9FKze , M25N9FMxe , M25N9FMye , M25N9FMze , M25N9MKxe , M25N9MKye , & + M25N9MKze , M25N9MMxe , M25N9MMye , M25N9MMze , M25N9RAxe , M25N9RAye , M25N9RAze , & + M25N9RDxe , M25N9RDye , M25N9RDze , M25N9TAxe , M25N9TAye , M25N9TAze , M25N9TDxss , & + M25N9TDyss , M25N9TDzss , M26N1FKxe , M26N1FKye , M26N1FKze , M26N1FMxe , M26N1FMye , & + M26N1FMze , M26N1MKxe , M26N1MKye , M26N1MKze , M26N1MMxe , M26N1MMye , M26N1MMze , & + M26N1RAxe , M26N1RAye , M26N1RAze , M26N1RDxe , M26N1RDye , M26N1RDze , M26N1TAxe , & + M26N1TAye , M26N1TAze , M26N1TDxss , M26N1TDyss , M26N1TDzss , M26N2FKxe , M26N2FKye , & + M26N2FKze , M26N2FMxe , M26N2FMye , M26N2FMze , M26N2MKxe , M26N2MKye , M26N2MKze , & + M26N2MMxe , M26N2MMye , M26N2MMze , M26N2RAxe , M26N2RAye , M26N2RAze , M26N2RDxe , & + M26N2RDye , M26N2RDze , M26N2TAxe , M26N2TAye , M26N2TAze , M26N2TDxss , M26N2TDyss , & + M26N2TDzss , M26N3FKxe , M26N3FKye , M26N3FKze , M26N3FMxe , M26N3FMye , M26N3FMze , & + M26N3MKxe , M26N3MKye , M26N3MKze , M26N3MMxe , M26N3MMye , M26N3MMze , M26N3RAxe , & + M26N3RAye , M26N3RAze , M26N3RDxe , M26N3RDye , M26N3RDze , M26N3TAxe , M26N3TAye , & + M26N3TAze , M26N3TDxss , M26N3TDyss , M26N3TDzss , M26N4FKxe , M26N4FKye , M26N4FKze , & + M26N4FMxe , M26N4FMye , M26N4FMze , M26N4MKxe , M26N4MKye , M26N4MKze , M26N4MMxe , & + M26N4MMye , M26N4MMze , M26N4RAxe , M26N4RAye , M26N4RAze , M26N4RDxe , M26N4RDye , & + M26N4RDze , M26N4TAxe , M26N4TAye , M26N4TAze , M26N4TDxss , M26N4TDyss , M26N4TDzss , & + M26N5FKxe , M26N5FKye , M26N5FKze , M26N5FMxe , M26N5FMye , M26N5FMze , M26N5MKxe , & + M26N5MKye , M26N5MKze , M26N5MMxe , M26N5MMye , M26N5MMze , M26N5RAxe , M26N5RAye , & + M26N5RAze , M26N5RDxe , M26N5RDye , M26N5RDze , M26N5TAxe , M26N5TAye , M26N5TAze , & + M26N5TDxss , M26N5TDyss , M26N5TDzss , M26N6FKxe , M26N6FKye , M26N6FKze , M26N6FMxe , & + M26N6FMye , M26N6FMze , M26N6MKxe , M26N6MKye , M26N6MKze , M26N6MMxe , M26N6MMye , & + M26N6MMze , M26N6RAxe , M26N6RAye , M26N6RAze , M26N6RDxe , M26N6RDye , M26N6RDze , & + M26N6TAxe , M26N6TAye , M26N6TAze , M26N6TDxss , M26N6TDyss , M26N6TDzss , M26N7FKxe , & + M26N7FKye , M26N7FKze , M26N7FMxe , M26N7FMye , M26N7FMze , M26N7MKxe , M26N7MKye , & + M26N7MKze , M26N7MMxe , M26N7MMye , M26N7MMze , M26N7RAxe , M26N7RAye , M26N7RAze , & + M26N7RDxe , M26N7RDye , M26N7RDze , M26N7TAxe , M26N7TAye , M26N7TAze , M26N7TDxss , & + M26N7TDyss , M26N7TDzss , M26N8FKxe , M26N8FKye , M26N8FKze , M26N8FMxe , M26N8FMye , & + M26N8FMze , M26N8MKxe , M26N8MKye , M26N8MKze , M26N8MMxe , M26N8MMye , M26N8MMze , & + M26N8RAxe , M26N8RAye , M26N8RAze , M26N8RDxe , M26N8RDye , M26N8RDze , M26N8TAxe , & + M26N8TAye , M26N8TAze , M26N8TDxss , M26N8TDyss , M26N8TDzss , M26N9FKxe , M26N9FKye , & + M26N9FKze , M26N9FMxe , M26N9FMye , M26N9FMze , M26N9MKxe , M26N9MKye , M26N9MKze , & + M26N9MMxe , M26N9MMye , M26N9MMze , M26N9RAxe , M26N9RAye , M26N9RAze , M26N9RDxe , & + M26N9RDye , M26N9RDze , M26N9TAxe , M26N9TAye , M26N9TAze , M26N9TDxss , M26N9TDyss , & + M26N9TDzss , M27N1FKxe , M27N1FKye , M27N1FKze , M27N1FMxe , M27N1FMye , M27N1FMze , & + M27N1MKxe , M27N1MKye , M27N1MKze , M27N1MMxe , M27N1MMye , M27N1MMze , M27N1RAxe , & + M27N1RAye , M27N1RAze , M27N1RDxe , M27N1RDye , M27N1RDze , M27N1TAxe , M27N1TAye , & + M27N1TAze , M27N1TDxss , M27N1TDyss , M27N1TDzss , M27N2FKxe , M27N2FKye , M27N2FKze , & + M27N2FMxe , M27N2FMye , M27N2FMze , M27N2MKxe , M27N2MKye , M27N2MKze , M27N2MMxe , & + M27N2MMye , M27N2MMze , M27N2RAxe , M27N2RAye , M27N2RAze , M27N2RDxe , M27N2RDye , & + M27N2RDze , M27N2TAxe , M27N2TAye , M27N2TAze , M27N2TDxss , M27N2TDyss , M27N2TDzss , & + M27N3FKxe , M27N3FKye , M27N3FKze , M27N3FMxe , M27N3FMye , M27N3FMze , M27N3MKxe , & + M27N3MKye , M27N3MKze , M27N3MMxe , M27N3MMye , M27N3MMze , M27N3RAxe , M27N3RAye , & + M27N3RAze , M27N3RDxe , M27N3RDye , M27N3RDze , M27N3TAxe , M27N3TAye , M27N3TAze , & + M27N3TDxss , M27N3TDyss , M27N3TDzss , M27N4FKxe , M27N4FKye , M27N4FKze , M27N4FMxe , & + M27N4FMye , M27N4FMze , M27N4MKxe , M27N4MKye , M27N4MKze , M27N4MMxe , M27N4MMye , & + M27N4MMze , M27N4RAxe , M27N4RAye , M27N4RAze , M27N4RDxe , M27N4RDye , M27N4RDze , & + M27N4TAxe , M27N4TAye , M27N4TAze , M27N4TDxss , M27N4TDyss , M27N4TDzss , M27N5FKxe , & + M27N5FKye , M27N5FKze , M27N5FMxe , M27N5FMye , M27N5FMze , M27N5MKxe , M27N5MKye , & + M27N5MKze , M27N5MMxe , M27N5MMye , M27N5MMze , M27N5RAxe , M27N5RAye , M27N5RAze , & + M27N5RDxe , M27N5RDye , M27N5RDze , M27N5TAxe , M27N5TAye , M27N5TAze , M27N5TDxss , & + M27N5TDyss , M27N5TDzss , M27N6FKxe , M27N6FKye , M27N6FKze , M27N6FMxe , M27N6FMye , & + M27N6FMze , M27N6MKxe , M27N6MKye , M27N6MKze , M27N6MMxe , M27N6MMye , M27N6MMze , & + M27N6RAxe , M27N6RAye , M27N6RAze , M27N6RDxe , M27N6RDye , M27N6RDze , M27N6TAxe , & + M27N6TAye , M27N6TAze , M27N6TDxss , M27N6TDyss , M27N6TDzss , M27N7FKxe , M27N7FKye , & + M27N7FKze , M27N7FMxe , M27N7FMye , M27N7FMze , M27N7MKxe , M27N7MKye , M27N7MKze , & + M27N7MMxe , M27N7MMye , M27N7MMze , M27N7RAxe , M27N7RAye , M27N7RAze , M27N7RDxe , & + M27N7RDye , M27N7RDze , M27N7TAxe , M27N7TAye , M27N7TAze , M27N7TDxss , M27N7TDyss , & + M27N7TDzss , M27N8FKxe , M27N8FKye , M27N8FKze , M27N8FMxe , M27N8FMye , M27N8FMze , & + M27N8MKxe , M27N8MKye , M27N8MKze , M27N8MMxe , M27N8MMye , M27N8MMze , M27N8RAxe , & + M27N8RAye , M27N8RAze , M27N8RDxe , M27N8RDye , M27N8RDze , M27N8TAxe , M27N8TAye , & + M27N8TAze , M27N8TDxss , M27N8TDyss , M27N8TDzss , M27N9FKxe , M27N9FKye , M27N9FKze , & + M27N9FMxe , M27N9FMye , M27N9FMze , M27N9MKxe , M27N9MKye , M27N9MKze , M27N9MMxe , & + M27N9MMye , M27N9MMze , M27N9RAxe , M27N9RAye , M27N9RAze , M27N9RDxe , M27N9RDye , & + M27N9RDze , M27N9TAxe , M27N9TAye , M27N9TAze , M27N9TDxss , M27N9TDyss , M27N9TDzss , & + M28N1FKxe , M28N1FKye , M28N1FKze , M28N1FMxe , M28N1FMye , M28N1FMze , M28N1MKxe , & + M28N1MKye , M28N1MKze , M28N1MMxe , M28N1MMye , M28N1MMze , M28N1RAxe , M28N1RAye , & + M28N1RAze , M28N1RDxe , M28N1RDye , M28N1RDze , M28N1TAxe , M28N1TAye , M28N1TAze , & + M28N1TDxss , M28N1TDyss , M28N1TDzss , M28N2FKxe , M28N2FKye , M28N2FKze , M28N2FMxe , & + M28N2FMye , M28N2FMze , M28N2MKxe , M28N2MKye , M28N2MKze , M28N2MMxe , M28N2MMye , & + M28N2MMze , M28N2RAxe , M28N2RAye , M28N2RAze , M28N2RDxe , M28N2RDye , M28N2RDze , & + M28N2TAxe , M28N2TAye , M28N2TAze , M28N2TDxss , M28N2TDyss , M28N2TDzss , M28N3FKxe , & + M28N3FKye , M28N3FKze , M28N3FMxe , M28N3FMye , M28N3FMze , M28N3MKxe , M28N3MKye , & + M28N3MKze , M28N3MMxe , M28N3MMye , M28N3MMze , M28N3RAxe , M28N3RAye , M28N3RAze , & + M28N3RDxe , M28N3RDye , M28N3RDze , M28N3TAxe , M28N3TAye , M28N3TAze , M28N3TDxss , & + M28N3TDyss , M28N3TDzss , M28N4FKxe , M28N4FKye , M28N4FKze , M28N4FMxe , M28N4FMye , & + M28N4FMze , M28N4MKxe , M28N4MKye , M28N4MKze , M28N4MMxe , M28N4MMye , M28N4MMze , & + M28N4RAxe , M28N4RAye , M28N4RAze , M28N4RDxe , M28N4RDye , M28N4RDze , M28N4TAxe , & + M28N4TAye , M28N4TAze , M28N4TDxss , M28N4TDyss , M28N4TDzss , M28N5FKxe , M28N5FKye , & + M28N5FKze , M28N5FMxe , M28N5FMye , M28N5FMze , M28N5MKxe , M28N5MKye , M28N5MKze , & + M28N5MMxe , M28N5MMye , M28N5MMze , M28N5RAxe , M28N5RAye , M28N5RAze , M28N5RDxe , & + M28N5RDye , M28N5RDze , M28N5TAxe , M28N5TAye , M28N5TAze , M28N5TDxss , M28N5TDyss , & + M28N5TDzss , M28N6FKxe , M28N6FKye , M28N6FKze , M28N6FMxe , M28N6FMye , M28N6FMze , & + M28N6MKxe , M28N6MKye , M28N6MKze , M28N6MMxe , M28N6MMye , M28N6MMze , M28N6RAxe , & + M28N6RAye , M28N6RAze , M28N6RDxe , M28N6RDye , M28N6RDze , M28N6TAxe , M28N6TAye , & + M28N6TAze , M28N6TDxss , M28N6TDyss , M28N6TDzss , M28N7FKxe , M28N7FKye , M28N7FKze , & + M28N7FMxe , M28N7FMye , M28N7FMze , M28N7MKxe , M28N7MKye , M28N7MKze , M28N7MMxe , & + M28N7MMye , M28N7MMze , M28N7RAxe , M28N7RAye , M28N7RAze , M28N7RDxe , M28N7RDye , & + M28N7RDze , M28N7TAxe , M28N7TAye , M28N7TAze , M28N7TDxss , M28N7TDyss , M28N7TDzss , & + M28N8FKxe , M28N8FKye , M28N8FKze , M28N8FMxe , M28N8FMye , M28N8FMze , M28N8MKxe , & + M28N8MKye , M28N8MKze , M28N8MMxe , M28N8MMye , M28N8MMze , M28N8RAxe , M28N8RAye , & + M28N8RAze , M28N8RDxe , M28N8RDye , M28N8RDze , M28N8TAxe , M28N8TAye , M28N8TAze , & + M28N8TDxss , M28N8TDyss , M28N8TDzss , M28N9FKxe , M28N9FKye , M28N9FKze , M28N9FMxe , & + M28N9FMye , M28N9FMze , M28N9MKxe , M28N9MKye , M28N9MKze , M28N9MMxe , M28N9MMye , & + M28N9MMze , M28N9RAxe , M28N9RAye , M28N9RAze , M28N9RDxe , M28N9RDye , M28N9RDze , & + M28N9TAxe , M28N9TAye , M28N9TAze , M28N9TDxss , M28N9TDyss , M28N9TDzss , M29N1FKxe , & + M29N1FKye , M29N1FKze , M29N1FMxe , M29N1FMye , M29N1FMze , M29N1MKxe , M29N1MKye , & + M29N1MKze , M29N1MMxe , M29N1MMye , M29N1MMze , M29N1RAxe , M29N1RAye , M29N1RAze , & + M29N1RDxe , M29N1RDye , M29N1RDze , M29N1TAxe , M29N1TAye , M29N1TAze , M29N1TDxss , & + M29N1TDyss , M29N1TDzss , M29N2FKxe , M29N2FKye , M29N2FKze , M29N2FMxe , M29N2FMye , & + M29N2FMze , M29N2MKxe , M29N2MKye , M29N2MKze , M29N2MMxe , M29N2MMye , M29N2MMze , & + M29N2RAxe , M29N2RAye , M29N2RAze , M29N2RDxe , M29N2RDye , M29N2RDze , M29N2TAxe , & + M29N2TAye , M29N2TAze , M29N2TDxss , M29N2TDyss , M29N2TDzss , M29N3FKxe , M29N3FKye , & + M29N3FKze , M29N3FMxe , M29N3FMye , M29N3FMze , M29N3MKxe , M29N3MKye , M29N3MKze , & + M29N3MMxe , M29N3MMye , M29N3MMze , M29N3RAxe , M29N3RAye , M29N3RAze , M29N3RDxe , & + M29N3RDye , M29N3RDze , M29N3TAxe , M29N3TAye , M29N3TAze , M29N3TDxss , M29N3TDyss , & + M29N3TDzss , M29N4FKxe , M29N4FKye , M29N4FKze , M29N4FMxe , M29N4FMye , M29N4FMze , & + M29N4MKxe , M29N4MKye , M29N4MKze , M29N4MMxe , M29N4MMye , M29N4MMze , M29N4RAxe , & + M29N4RAye , M29N4RAze , M29N4RDxe , M29N4RDye , M29N4RDze , M29N4TAxe , M29N4TAye , & + M29N4TAze , M29N4TDxss , M29N4TDyss , M29N4TDzss , M29N5FKxe , M29N5FKye , M29N5FKze , & + M29N5FMxe , M29N5FMye , M29N5FMze , M29N5MKxe , M29N5MKye , M29N5MKze , M29N5MMxe , & + M29N5MMye , M29N5MMze , M29N5RAxe , M29N5RAye , M29N5RAze , M29N5RDxe , M29N5RDye , & + M29N5RDze , M29N5TAxe , M29N5TAye , M29N5TAze , M29N5TDxss , M29N5TDyss , M29N5TDzss , & + M29N6FKxe , M29N6FKye , M29N6FKze , M29N6FMxe , M29N6FMye , M29N6FMze , M29N6MKxe , & + M29N6MKye , M29N6MKze , M29N6MMxe , M29N6MMye , M29N6MMze , M29N6RAxe , M29N6RAye , & + M29N6RAze , M29N6RDxe , M29N6RDye , M29N6RDze , M29N6TAxe , M29N6TAye , M29N6TAze , & + M29N6TDxss , M29N6TDyss , M29N6TDzss , M29N7FKxe , M29N7FKye , M29N7FKze , M29N7FMxe , & + M29N7FMye , M29N7FMze , M29N7MKxe , M29N7MKye , M29N7MKze , M29N7MMxe , M29N7MMye , & + M29N7MMze , M29N7RAxe , M29N7RAye , M29N7RAze , M29N7RDxe , M29N7RDye , M29N7RDze , & + M29N7TAxe , M29N7TAye , M29N7TAze , M29N7TDxss , M29N7TDyss , M29N7TDzss , M29N8FKxe , & + M29N8FKye , M29N8FKze , M29N8FMxe , M29N8FMye , M29N8FMze , M29N8MKxe , M29N8MKye , & + M29N8MKze , M29N8MMxe , M29N8MMye , M29N8MMze , M29N8RAxe , M29N8RAye , M29N8RAze , & + M29N8RDxe , M29N8RDye , M29N8RDze , M29N8TAxe , M29N8TAye , M29N8TAze , M29N8TDxss , & + M29N8TDyss , M29N8TDzss , M29N9FKxe , M29N9FKye , M29N9FKze , M29N9FMxe , M29N9FMye , & + M29N9FMze , M29N9MKxe , M29N9MKye , M29N9MKze , M29N9MMxe , M29N9MMye , M29N9MMze , & + M29N9RAxe , M29N9RAye , M29N9RAze , M29N9RDxe , M29N9RDye , M29N9RDze , M29N9TAxe , & + M29N9TAye , M29N9TAze , M29N9TDxss , M29N9TDyss , M29N9TDzss , M30N1FKxe , M30N1FKye , & + M30N1FKze , M30N1FMxe , M30N1FMye , M30N1FMze , M30N1MKxe , M30N1MKye , M30N1MKze , & + M30N1MMxe , M30N1MMye , M30N1MMze , M30N1RAxe , M30N1RAye , M30N1RAze , M30N1RDxe , & + M30N1RDye , M30N1RDze , M30N1TAxe , M30N1TAye , M30N1TAze , M30N1TDxss , M30N1TDyss , & + M30N1TDzss , M30N2FKxe , M30N2FKye , M30N2FKze , M30N2FMxe , M30N2FMye , M30N2FMze , & + M30N2MKxe , M30N2MKye , M30N2MKze , M30N2MMxe , M30N2MMye , M30N2MMze , M30N2RAxe , & + M30N2RAye , M30N2RAze , M30N2RDxe , M30N2RDye , M30N2RDze , M30N2TAxe , M30N2TAye , & + M30N2TAze , M30N2TDxss , M30N2TDyss , M30N2TDzss , M30N3FKxe , M30N3FKye , M30N3FKze , & + M30N3FMxe , M30N3FMye , M30N3FMze , M30N3MKxe , M30N3MKye , M30N3MKze , M30N3MMxe , & + M30N3MMye , M30N3MMze , M30N3RAxe , M30N3RAye , M30N3RAze , M30N3RDxe , M30N3RDye , & + M30N3RDze , M30N3TAxe , M30N3TAye , M30N3TAze , M30N3TDxss , M30N3TDyss , M30N3TDzss , & + M30N4FKxe , M30N4FKye , M30N4FKze , M30N4FMxe , M30N4FMye , M30N4FMze , M30N4MKxe , & + M30N4MKye , M30N4MKze , M30N4MMxe , M30N4MMye , M30N4MMze , M30N4RAxe , M30N4RAye , & + M30N4RAze , M30N4RDxe , M30N4RDye , M30N4RDze , M30N4TAxe , M30N4TAye , M30N4TAze , & + M30N4TDxss , M30N4TDyss , M30N4TDzss , M30N5FKxe , M30N5FKye , M30N5FKze , M30N5FMxe , & + M30N5FMye , M30N5FMze , M30N5MKxe , M30N5MKye , M30N5MKze , M30N5MMxe , M30N5MMye , & + M30N5MMze , M30N5RAxe , M30N5RAye , M30N5RAze , M30N5RDxe , M30N5RDye , M30N5RDze , & + M30N5TAxe , M30N5TAye , M30N5TAze , M30N5TDxss , M30N5TDyss , M30N5TDzss , M30N6FKxe , & + M30N6FKye , M30N6FKze , M30N6FMxe , M30N6FMye , M30N6FMze , M30N6MKxe , M30N6MKye , & + M30N6MKze , M30N6MMxe , M30N6MMye , M30N6MMze , M30N6RAxe , M30N6RAye , M30N6RAze , & + M30N6RDxe , M30N6RDye , M30N6RDze , M30N6TAxe , M30N6TAye , M30N6TAze , M30N6TDxss , & + M30N6TDyss , M30N6TDzss , M30N7FKxe , M30N7FKye , M30N7FKze , M30N7FMxe , M30N7FMye , & + M30N7FMze , M30N7MKxe , M30N7MKye , M30N7MKze , M30N7MMxe , M30N7MMye , M30N7MMze , & + M30N7RAxe , M30N7RAye , M30N7RAze , M30N7RDxe , M30N7RDye , M30N7RDze , M30N7TAxe , & + M30N7TAye , M30N7TAze , M30N7TDxss , M30N7TDyss , M30N7TDzss , M30N8FKxe , M30N8FKye , & + M30N8FKze , M30N8FMxe , M30N8FMye , M30N8FMze , M30N8MKxe , M30N8MKye , M30N8MKze , & + M30N8MMxe , M30N8MMye , M30N8MMze , M30N8RAxe , M30N8RAye , M30N8RAze , M30N8RDxe , & + M30N8RDye , M30N8RDze , M30N8TAxe , M30N8TAye , M30N8TAze , M30N8TDxss , M30N8TDyss , & + M30N8TDzss , M30N9FKxe , M30N9FKye , M30N9FKze , M30N9FMxe , M30N9FMye , M30N9FMze , & + M30N9MKxe , M30N9MKye , M30N9MKze , M30N9MMxe , M30N9MMye , M30N9MMze , M30N9RAxe , & + M30N9RAye , M30N9RAze , M30N9RDxe , M30N9RDye , M30N9RDze , M30N9TAxe , M30N9TAye , & + M30N9TAze , M30N9TDxss , M30N9TDyss , M30N9TDzss , M31N1FKxe , M31N1FKye , M31N1FKze , & + M31N1FMxe , M31N1FMye , M31N1FMze , M31N1MKxe , M31N1MKye , M31N1MKze , M31N1MMxe , & + M31N1MMye , M31N1MMze , M31N1RAxe , M31N1RAye , M31N1RAze , M31N1RDxe , M31N1RDye , & + M31N1RDze , M31N1TAxe , M31N1TAye , M31N1TAze , M31N1TDxss , M31N1TDyss , M31N1TDzss , & + M31N2FKxe , M31N2FKye , M31N2FKze , M31N2FMxe , M31N2FMye , M31N2FMze , M31N2MKxe , & + M31N2MKye , M31N2MKze , M31N2MMxe , M31N2MMye , M31N2MMze , M31N2RAxe , M31N2RAye , & + M31N2RAze , M31N2RDxe , M31N2RDye , M31N2RDze , M31N2TAxe , M31N2TAye , M31N2TAze , & + M31N2TDxss , M31N2TDyss , M31N2TDzss , M31N3FKxe , M31N3FKye , M31N3FKze , M31N3FMxe , & + M31N3FMye , M31N3FMze , M31N3MKxe , M31N3MKye , M31N3MKze , M31N3MMxe , M31N3MMye , & + M31N3MMze , M31N3RAxe , M31N3RAye , M31N3RAze , M31N3RDxe , M31N3RDye , M31N3RDze , & + M31N3TAxe , M31N3TAye , M31N3TAze , M31N3TDxss , M31N3TDyss , M31N3TDzss , M31N4FKxe , & + M31N4FKye , M31N4FKze , M31N4FMxe , M31N4FMye , M31N4FMze , M31N4MKxe , M31N4MKye , & + M31N4MKze , M31N4MMxe , M31N4MMye , M31N4MMze , M31N4RAxe , M31N4RAye , M31N4RAze , & + M31N4RDxe , M31N4RDye , M31N4RDze , M31N4TAxe , M31N4TAye , M31N4TAze , M31N4TDxss , & + M31N4TDyss , M31N4TDzss , M31N5FKxe , M31N5FKye , M31N5FKze , M31N5FMxe , M31N5FMye , & + M31N5FMze , M31N5MKxe , M31N5MKye , M31N5MKze , M31N5MMxe , M31N5MMye , M31N5MMze , & + M31N5RAxe , M31N5RAye , M31N5RAze , M31N5RDxe , M31N5RDye , M31N5RDze , M31N5TAxe , & + M31N5TAye , M31N5TAze , M31N5TDxss , M31N5TDyss , M31N5TDzss , M31N6FKxe , M31N6FKye , & + M31N6FKze , M31N6FMxe , M31N6FMye , M31N6FMze , M31N6MKxe , M31N6MKye , M31N6MKze , & + M31N6MMxe , M31N6MMye , M31N6MMze , M31N6RAxe , M31N6RAye , M31N6RAze , M31N6RDxe , & + M31N6RDye , M31N6RDze , M31N6TAxe , M31N6TAye , M31N6TAze , M31N6TDxss , M31N6TDyss , & + M31N6TDzss , M31N7FKxe , M31N7FKye , M31N7FKze , M31N7FMxe , M31N7FMye , M31N7FMze , & + M31N7MKxe , M31N7MKye , M31N7MKze , M31N7MMxe , M31N7MMye , M31N7MMze , M31N7RAxe , & + M31N7RAye , M31N7RAze , M31N7RDxe , M31N7RDye , M31N7RDze , M31N7TAxe , M31N7TAye , & + M31N7TAze , M31N7TDxss , M31N7TDyss , M31N7TDzss , M31N8FKxe , M31N8FKye , M31N8FKze , & + M31N8FMxe , M31N8FMye , M31N8FMze , M31N8MKxe , M31N8MKye , M31N8MKze , M31N8MMxe , & + M31N8MMye , M31N8MMze , M31N8RAxe , M31N8RAye /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry5(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M31N8RAze , M31N8RDxe , M31N8RDye , M31N8RDze , M31N8TAxe , M31N8TAye , M31N8TAze , & + M31N8TDxss , M31N8TDyss , M31N8TDzss , M31N9FKxe , M31N9FKye , M31N9FKze , M31N9FMxe , & + M31N9FMye , M31N9FMze , M31N9MKxe , M31N9MKye , M31N9MKze , M31N9MMxe , M31N9MMye , & + M31N9MMze , M31N9RAxe , M31N9RAye , M31N9RAze , M31N9RDxe , M31N9RDye , M31N9RDze , & + M31N9TAxe , M31N9TAye , M31N9TAze , M31N9TDxss , M31N9TDyss , M31N9TDzss , M32N1FKxe , & + M32N1FKye , M32N1FKze , M32N1FMxe , M32N1FMye , M32N1FMze , M32N1MKxe , M32N1MKye , & + M32N1MKze , M32N1MMxe , M32N1MMye , M32N1MMze , M32N1RAxe , M32N1RAye , M32N1RAze , & + M32N1RDxe , M32N1RDye , M32N1RDze , M32N1TAxe , M32N1TAye , M32N1TAze , M32N1TDxss , & + M32N1TDyss , M32N1TDzss , M32N2FKxe , M32N2FKye , M32N2FKze , M32N2FMxe , M32N2FMye , & + M32N2FMze , M32N2MKxe , M32N2MKye , M32N2MKze , M32N2MMxe , M32N2MMye , M32N2MMze , & + M32N2RAxe , M32N2RAye , M32N2RAze , M32N2RDxe , M32N2RDye , M32N2RDze , M32N2TAxe , & + M32N2TAye , M32N2TAze , M32N2TDxss , M32N2TDyss , M32N2TDzss , M32N3FKxe , M32N3FKye , & + M32N3FKze , M32N3FMxe , M32N3FMye , M32N3FMze , M32N3MKxe , M32N3MKye , M32N3MKze , & + M32N3MMxe , M32N3MMye , M32N3MMze , M32N3RAxe , M32N3RAye , M32N3RAze , M32N3RDxe , & + M32N3RDye , M32N3RDze , M32N3TAxe , M32N3TAye , M32N3TAze , M32N3TDxss , M32N3TDyss , & + M32N3TDzss , M32N4FKxe , M32N4FKye , M32N4FKze , M32N4FMxe , M32N4FMye , M32N4FMze , & + M32N4MKxe , M32N4MKye , M32N4MKze , M32N4MMxe , M32N4MMye , M32N4MMze , M32N4RAxe , & + M32N4RAye , M32N4RAze , M32N4RDxe , M32N4RDye , M32N4RDze , M32N4TAxe , M32N4TAye , & + M32N4TAze , M32N4TDxss , M32N4TDyss , M32N4TDzss , M32N5FKxe , M32N5FKye , M32N5FKze , & + M32N5FMxe , M32N5FMye , M32N5FMze , M32N5MKxe , M32N5MKye , M32N5MKze , M32N5MMxe , & + M32N5MMye , M32N5MMze , M32N5RAxe , M32N5RAye , M32N5RAze , M32N5RDxe , M32N5RDye , & + M32N5RDze , M32N5TAxe , M32N5TAye , M32N5TAze , M32N5TDxss , M32N5TDyss , M32N5TDzss , & + M32N6FKxe , M32N6FKye , M32N6FKze , M32N6FMxe , M32N6FMye , M32N6FMze , M32N6MKxe , & + M32N6MKye , M32N6MKze , M32N6MMxe , M32N6MMye , M32N6MMze , M32N6RAxe , M32N6RAye , & + M32N6RAze , M32N6RDxe , M32N6RDye , M32N6RDze , M32N6TAxe , M32N6TAye , M32N6TAze , & + M32N6TDxss , M32N6TDyss , M32N6TDzss , M32N7FKxe , M32N7FKye , M32N7FKze , M32N7FMxe , & + M32N7FMye , M32N7FMze , M32N7MKxe , M32N7MKye , M32N7MKze , M32N7MMxe , M32N7MMye , & + M32N7MMze , M32N7RAxe , M32N7RAye , M32N7RAze , M32N7RDxe , M32N7RDye , M32N7RDze , & + M32N7TAxe , M32N7TAye , M32N7TAze , M32N7TDxss , M32N7TDyss , M32N7TDzss , M32N8FKxe , & + M32N8FKye , M32N8FKze , M32N8FMxe , M32N8FMye , M32N8FMze , M32N8MKxe , M32N8MKye , & + M32N8MKze , M32N8MMxe , M32N8MMye , M32N8MMze , M32N8RAxe , M32N8RAye , M32N8RAze , & + M32N8RDxe , M32N8RDye , M32N8RDze , M32N8TAxe , M32N8TAye , M32N8TAze , M32N8TDxss , & + M32N8TDyss , M32N8TDzss , M32N9FKxe , M32N9FKye , M32N9FKze , M32N9FMxe , M32N9FMye , & + M32N9FMze , M32N9MKxe , M32N9MKye , M32N9MKze , M32N9MMxe , M32N9MMye , M32N9MMze , & + M32N9RAxe , M32N9RAye , M32N9RAze , M32N9RDxe , M32N9RDye , M32N9RDze , M32N9TAxe , & + M32N9TAye , M32N9TAze , M32N9TDxss , M32N9TDyss , M32N9TDzss , M33N1FKxe , M33N1FKye , & + M33N1FKze , M33N1FMxe , M33N1FMye , M33N1FMze , M33N1MKxe , M33N1MKye , M33N1MKze , & + M33N1MMxe , M33N1MMye , M33N1MMze , M33N1RAxe , M33N1RAye , M33N1RAze , M33N1RDxe , & + M33N1RDye , M33N1RDze , M33N1TAxe , M33N1TAye , M33N1TAze , M33N1TDxss , M33N1TDyss , & + M33N1TDzss , M33N2FKxe , M33N2FKye , M33N2FKze , M33N2FMxe , M33N2FMye , M33N2FMze , & + M33N2MKxe , M33N2MKye , M33N2MKze , M33N2MMxe , M33N2MMye , M33N2MMze , M33N2RAxe , & + M33N2RAye , M33N2RAze , M33N2RDxe , M33N2RDye , M33N2RDze , M33N2TAxe , M33N2TAye , & + M33N2TAze , M33N2TDxss , M33N2TDyss , M33N2TDzss , M33N3FKxe , M33N3FKye , M33N3FKze , & + M33N3FMxe , M33N3FMye , M33N3FMze , M33N3MKxe , M33N3MKye , M33N3MKze , M33N3MMxe , & + M33N3MMye , M33N3MMze , M33N3RAxe , M33N3RAye , M33N3RAze , M33N3RDxe , M33N3RDye , & + M33N3RDze , M33N3TAxe , M33N3TAye , M33N3TAze , M33N3TDxss , M33N3TDyss , M33N3TDzss , & + M33N4FKxe , M33N4FKye , M33N4FKze , M33N4FMxe , M33N4FMye , M33N4FMze , M33N4MKxe , & + M33N4MKye , M33N4MKze , M33N4MMxe , M33N4MMye , M33N4MMze , M33N4RAxe , M33N4RAye , & + M33N4RAze , M33N4RDxe , M33N4RDye , M33N4RDze , M33N4TAxe , M33N4TAye , M33N4TAze , & + M33N4TDxss , M33N4TDyss , M33N4TDzss , M33N5FKxe , M33N5FKye , M33N5FKze , M33N5FMxe , & + M33N5FMye , M33N5FMze , M33N5MKxe , M33N5MKye , M33N5MKze , M33N5MMxe , M33N5MMye , & + M33N5MMze , M33N5RAxe , M33N5RAye , M33N5RAze , M33N5RDxe , M33N5RDye , M33N5RDze , & + M33N5TAxe , M33N5TAye , M33N5TAze , M33N5TDxss , M33N5TDyss , M33N5TDzss , M33N6FKxe , & + M33N6FKye , M33N6FKze , M33N6FMxe , M33N6FMye , M33N6FMze , M33N6MKxe , M33N6MKye , & + M33N6MKze , M33N6MMxe , M33N6MMye , M33N6MMze , M33N6RAxe , M33N6RAye , M33N6RAze , & + M33N6RDxe , M33N6RDye , M33N6RDze , M33N6TAxe , M33N6TAye , M33N6TAze , M33N6TDxss , & + M33N6TDyss , M33N6TDzss , M33N7FKxe , M33N7FKye , M33N7FKze , M33N7FMxe , M33N7FMye , & + M33N7FMze , M33N7MKxe , M33N7MKye , M33N7MKze , M33N7MMxe , M33N7MMye , M33N7MMze , & + M33N7RAxe , M33N7RAye , M33N7RAze , M33N7RDxe , M33N7RDye , M33N7RDze , M33N7TAxe , & + M33N7TAye , M33N7TAze , M33N7TDxss , M33N7TDyss , M33N7TDzss , M33N8FKxe , M33N8FKye , & + M33N8FKze , M33N8FMxe , M33N8FMye , M33N8FMze , M33N8MKxe , M33N8MKye , M33N8MKze , & + M33N8MMxe , M33N8MMye , M33N8MMze , M33N8RAxe , M33N8RAye , M33N8RAze , M33N8RDxe , & + M33N8RDye , M33N8RDze , M33N8TAxe , M33N8TAye , M33N8TAze , M33N8TDxss , M33N8TDyss , & + M33N8TDzss , M33N9FKxe , M33N9FKye , M33N9FKze , M33N9FMxe , M33N9FMye , M33N9FMze , & + M33N9MKxe , M33N9MKye , M33N9MKze , M33N9MMxe , M33N9MMye , M33N9MMze , M33N9RAxe , & + M33N9RAye , M33N9RAze , M33N9RDxe , M33N9RDye , M33N9RDze , M33N9TAxe , M33N9TAye , & + M33N9TAze , M33N9TDxss , M33N9TDyss , M33N9TDzss , M34N1FKxe , M34N1FKye , M34N1FKze , & + M34N1FMxe , M34N1FMye , M34N1FMze , M34N1MKxe , M34N1MKye , M34N1MKze , M34N1MMxe , & + M34N1MMye , M34N1MMze , M34N1RAxe , M34N1RAye , M34N1RAze , M34N1RDxe , M34N1RDye , & + M34N1RDze , M34N1TAxe , M34N1TAye , M34N1TAze , M34N1TDxss , M34N1TDyss , M34N1TDzss , & + M34N2FKxe , M34N2FKye , M34N2FKze , M34N2FMxe , M34N2FMye , M34N2FMze , M34N2MKxe , & + M34N2MKye , M34N2MKze , M34N2MMxe , M34N2MMye , M34N2MMze , M34N2RAxe , M34N2RAye , & + M34N2RAze , M34N2RDxe , M34N2RDye , M34N2RDze , M34N2TAxe , M34N2TAye , M34N2TAze , & + M34N2TDxss , M34N2TDyss , M34N2TDzss , M34N3FKxe , M34N3FKye , M34N3FKze , M34N3FMxe , & + M34N3FMye , M34N3FMze , M34N3MKxe , M34N3MKye , M34N3MKze , M34N3MMxe , M34N3MMye , & + M34N3MMze , M34N3RAxe , M34N3RAye , M34N3RAze , M34N3RDxe , M34N3RDye , M34N3RDze , & + M34N3TAxe , M34N3TAye , M34N3TAze , M34N3TDxss , M34N3TDyss , M34N3TDzss , M34N4FKxe , & + M34N4FKye , M34N4FKze , M34N4FMxe , M34N4FMye , M34N4FMze , M34N4MKxe , M34N4MKye , & + M34N4MKze , M34N4MMxe , M34N4MMye , M34N4MMze , M34N4RAxe , M34N4RAye , M34N4RAze , & + M34N4RDxe , M34N4RDye , M34N4RDze , M34N4TAxe , M34N4TAye , M34N4TAze , M34N4TDxss , & + M34N4TDyss , M34N4TDzss , M34N5FKxe , M34N5FKye , M34N5FKze , M34N5FMxe , M34N5FMye , & + M34N5FMze , M34N5MKxe , M34N5MKye , M34N5MKze , M34N5MMxe , M34N5MMye , M34N5MMze , & + M34N5RAxe , M34N5RAye , M34N5RAze , M34N5RDxe , M34N5RDye , M34N5RDze , M34N5TAxe , & + M34N5TAye , M34N5TAze , M34N5TDxss , M34N5TDyss , M34N5TDzss , M34N6FKxe , M34N6FKye , & + M34N6FKze , M34N6FMxe , M34N6FMye , M34N6FMze , M34N6MKxe , M34N6MKye , M34N6MKze , & + M34N6MMxe , M34N6MMye , M34N6MMze , M34N6RAxe , M34N6RAye , M34N6RAze , M34N6RDxe , & + M34N6RDye , M34N6RDze , M34N6TAxe , M34N6TAye , M34N6TAze , M34N6TDxss , M34N6TDyss , & + M34N6TDzss , M34N7FKxe , M34N7FKye , M34N7FKze , M34N7FMxe , M34N7FMye , M34N7FMze , & + M34N7MKxe , M34N7MKye , M34N7MKze , M34N7MMxe , M34N7MMye , M34N7MMze , M34N7RAxe , & + M34N7RAye , M34N7RAze , M34N7RDxe , M34N7RDye , M34N7RDze , M34N7TAxe , M34N7TAye , & + M34N7TAze , M34N7TDxss , M34N7TDyss , M34N7TDzss , M34N8FKxe , M34N8FKye , M34N8FKze , & + M34N8FMxe , M34N8FMye , M34N8FMze , M34N8MKxe , M34N8MKye , M34N8MKze , M34N8MMxe , & + M34N8MMye , M34N8MMze , M34N8RAxe , M34N8RAye , M34N8RAze , M34N8RDxe , M34N8RDye , & + M34N8RDze , M34N8TAxe , M34N8TAye , M34N8TAze , M34N8TDxss , M34N8TDyss , M34N8TDzss , & + M34N9FKxe , M34N9FKye , M34N9FKze , M34N9FMxe , M34N9FMye , M34N9FMze , M34N9MKxe , & + M34N9MKye , M34N9MKze , M34N9MMxe , M34N9MMye , M34N9MMze , M34N9RAxe , M34N9RAye , & + M34N9RAze , M34N9RDxe , M34N9RDye , M34N9RDze , M34N9TAxe , M34N9TAye , M34N9TAze , & + M34N9TDxss , M34N9TDyss , M34N9TDzss , M35N1FKxe , M35N1FKye , M35N1FKze , M35N1FMxe , & + M35N1FMye , M35N1FMze , M35N1MKxe , M35N1MKye , M35N1MKze , M35N1MMxe , M35N1MMye , & + M35N1MMze , M35N1RAxe , M35N1RAye , M35N1RAze , M35N1RDxe , M35N1RDye , M35N1RDze , & + M35N1TAxe , M35N1TAye , M35N1TAze , M35N1TDxss , M35N1TDyss , M35N1TDzss , M35N2FKxe , & + M35N2FKye , M35N2FKze , M35N2FMxe , M35N2FMye , M35N2FMze , M35N2MKxe , M35N2MKye , & + M35N2MKze , M35N2MMxe , M35N2MMye , M35N2MMze , M35N2RAxe , M35N2RAye , M35N2RAze , & + M35N2RDxe , M35N2RDye , M35N2RDze , M35N2TAxe , M35N2TAye , M35N2TAze , M35N2TDxss , & + M35N2TDyss , M35N2TDzss , M35N3FKxe , M35N3FKye , M35N3FKze , M35N3FMxe , M35N3FMye , & + M35N3FMze , M35N3MKxe , M35N3MKye , M35N3MKze , M35N3MMxe , M35N3MMye , M35N3MMze , & + M35N3RAxe , M35N3RAye , M35N3RAze , M35N3RDxe , M35N3RDye , M35N3RDze , M35N3TAxe , & + M35N3TAye , M35N3TAze , M35N3TDxss , M35N3TDyss , M35N3TDzss , M35N4FKxe , M35N4FKye , & + M35N4FKze , M35N4FMxe , M35N4FMye , M35N4FMze , M35N4MKxe , M35N4MKye , M35N4MKze , & + M35N4MMxe , M35N4MMye , M35N4MMze , M35N4RAxe , M35N4RAye , M35N4RAze , M35N4RDxe , & + M35N4RDye , M35N4RDze , M35N4TAxe , M35N4TAye , M35N4TAze , M35N4TDxss , M35N4TDyss , & + M35N4TDzss , M35N5FKxe , M35N5FKye , M35N5FKze , M35N5FMxe , M35N5FMye , M35N5FMze , & + M35N5MKxe , M35N5MKye , M35N5MKze , M35N5MMxe , M35N5MMye , M35N5MMze , M35N5RAxe , & + M35N5RAye , M35N5RAze , M35N5RDxe , M35N5RDye , M35N5RDze , M35N5TAxe , M35N5TAye , & + M35N5TAze , M35N5TDxss , M35N5TDyss , M35N5TDzss , M35N6FKxe , M35N6FKye , M35N6FKze , & + M35N6FMxe , M35N6FMye , M35N6FMze , M35N6MKxe , M35N6MKye , M35N6MKze , M35N6MMxe , & + M35N6MMye , M35N6MMze , M35N6RAxe , M35N6RAye , M35N6RAze , M35N6RDxe , M35N6RDye , & + M35N6RDze , M35N6TAxe , M35N6TAye , M35N6TAze , M35N6TDxss , M35N6TDyss , M35N6TDzss , & + M35N7FKxe , M35N7FKye , M35N7FKze , M35N7FMxe , M35N7FMye , M35N7FMze , M35N7MKxe , & + M35N7MKye , M35N7MKze , M35N7MMxe , M35N7MMye , M35N7MMze , M35N7RAxe , M35N7RAye , & + M35N7RAze , M35N7RDxe , M35N7RDye , M35N7RDze , M35N7TAxe , M35N7TAye , M35N7TAze , & + M35N7TDxss , M35N7TDyss , M35N7TDzss , M35N8FKxe , M35N8FKye , M35N8FKze , M35N8FMxe , & + M35N8FMye , M35N8FMze , M35N8MKxe , M35N8MKye , M35N8MKze , M35N8MMxe , M35N8MMye , & + M35N8MMze , M35N8RAxe , M35N8RAye , M35N8RAze , M35N8RDxe , M35N8RDye , M35N8RDze , & + M35N8TAxe , M35N8TAye , M35N8TAze , M35N8TDxss , M35N8TDyss , M35N8TDzss , M35N9FKxe , & + M35N9FKye , M35N9FKze , M35N9FMxe , M35N9FMye , M35N9FMze , M35N9MKxe , M35N9MKye , & + M35N9MKze , M35N9MMxe , M35N9MMye , M35N9MMze , M35N9RAxe , M35N9RAye , M35N9RAze , & + M35N9RDxe , M35N9RDye , M35N9RDze , M35N9TAxe , M35N9TAye , M35N9TAze , M35N9TDxss , & + M35N9TDyss , M35N9TDzss , M36N1FKxe , M36N1FKye , M36N1FKze , M36N1FMxe , M36N1FMye , & + M36N1FMze , M36N1MKxe , M36N1MKye , M36N1MKze , M36N1MMxe , M36N1MMye , M36N1MMze , & + M36N1RAxe , M36N1RAye , M36N1RAze , M36N1RDxe , M36N1RDye , M36N1RDze , M36N1TAxe , & + M36N1TAye , M36N1TAze , M36N1TDxss , M36N1TDyss , M36N1TDzss , M36N2FKxe , M36N2FKye , & + M36N2FKze , M36N2FMxe , M36N2FMye , M36N2FMze , M36N2MKxe , M36N2MKye , M36N2MKze , & + M36N2MMxe , M36N2MMye , M36N2MMze , M36N2RAxe , M36N2RAye , M36N2RAze , M36N2RDxe , & + M36N2RDye , M36N2RDze , M36N2TAxe , M36N2TAye , M36N2TAze , M36N2TDxss , M36N2TDyss , & + M36N2TDzss , M36N3FKxe , M36N3FKye , M36N3FKze , M36N3FMxe , M36N3FMye , M36N3FMze , & + M36N3MKxe , M36N3MKye , M36N3MKze , M36N3MMxe , M36N3MMye , M36N3MMze , M36N3RAxe , & + M36N3RAye , M36N3RAze , M36N3RDxe , M36N3RDye , M36N3RDze , M36N3TAxe , M36N3TAye , & + M36N3TAze , M36N3TDxss , M36N3TDyss , M36N3TDzss , M36N4FKxe , M36N4FKye , M36N4FKze , & + M36N4FMxe , M36N4FMye , M36N4FMze , M36N4MKxe , M36N4MKye , M36N4MKze , M36N4MMxe , & + M36N4MMye , M36N4MMze , M36N4RAxe , M36N4RAye , M36N4RAze , M36N4RDxe , M36N4RDye , & + M36N4RDze , M36N4TAxe , M36N4TAye , M36N4TAze , M36N4TDxss , M36N4TDyss , M36N4TDzss , & + M36N5FKxe , M36N5FKye , M36N5FKze , M36N5FMxe , M36N5FMye , M36N5FMze , M36N5MKxe , & + M36N5MKye , M36N5MKze , M36N5MMxe , M36N5MMye , M36N5MMze , M36N5RAxe , M36N5RAye , & + M36N5RAze , M36N5RDxe , M36N5RDye , M36N5RDze , M36N5TAxe , M36N5TAye , M36N5TAze , & + M36N5TDxss , M36N5TDyss , M36N5TDzss , M36N6FKxe , M36N6FKye , M36N6FKze , M36N6FMxe , & + M36N6FMye , M36N6FMze , M36N6MKxe , M36N6MKye , M36N6MKze , M36N6MMxe , M36N6MMye , & + M36N6MMze , M36N6RAxe , M36N6RAye , M36N6RAze , M36N6RDxe , M36N6RDye , M36N6RDze , & + M36N6TAxe , M36N6TAye , M36N6TAze , M36N6TDxss , M36N6TDyss , M36N6TDzss , M36N7FKxe , & + M36N7FKye , M36N7FKze , M36N7FMxe , M36N7FMye , M36N7FMze , M36N7MKxe , M36N7MKye , & + M36N7MKze , M36N7MMxe , M36N7MMye , M36N7MMze , M36N7RAxe , M36N7RAye , M36N7RAze , & + M36N7RDxe , M36N7RDye , M36N7RDze , M36N7TAxe , M36N7TAye , M36N7TAze , M36N7TDxss , & + M36N7TDyss , M36N7TDzss , M36N8FKxe , M36N8FKye , M36N8FKze , M36N8FMxe , M36N8FMye , & + M36N8FMze , M36N8MKxe , M36N8MKye , M36N8MKze , M36N8MMxe , M36N8MMye , M36N8MMze , & + M36N8RAxe , M36N8RAye , M36N8RAze , M36N8RDxe , M36N8RDye , M36N8RDze , M36N8TAxe , & + M36N8TAye , M36N8TAze , M36N8TDxss , M36N8TDyss , M36N8TDzss , M36N9FKxe , M36N9FKye , & + M36N9FKze , M36N9FMxe , M36N9FMye , M36N9FMze , M36N9MKxe , M36N9MKye , M36N9MKze , & + M36N9MMxe , M36N9MMye , M36N9MMze , M36N9RAxe , M36N9RAye , M36N9RAze , M36N9RDxe , & + M36N9RDye , M36N9RDze , M36N9TAxe , M36N9TAye , M36N9TAze , M36N9TDxss , M36N9TDyss , & + M36N9TDzss , M37N1FKxe , M37N1FKye , M37N1FKze , M37N1FMxe , M37N1FMye , M37N1FMze , & + M37N1MKxe , M37N1MKye , M37N1MKze , M37N1MMxe , M37N1MMye , M37N1MMze , M37N1RAxe , & + M37N1RAye , M37N1RAze , M37N1RDxe , M37N1RDye , M37N1RDze , M37N1TAxe , M37N1TAye , & + M37N1TAze , M37N1TDxss , M37N1TDyss , M37N1TDzss , M37N2FKxe , M37N2FKye , M37N2FKze , & + M37N2FMxe , M37N2FMye , M37N2FMze , M37N2MKxe , M37N2MKye , M37N2MKze , M37N2MMxe , & + M37N2MMye , M37N2MMze , M37N2RAxe , M37N2RAye , M37N2RAze , M37N2RDxe , M37N2RDye , & + M37N2RDze , M37N2TAxe , M37N2TAye , M37N2TAze , M37N2TDxss , M37N2TDyss , M37N2TDzss , & + M37N3FKxe , M37N3FKye , M37N3FKze , M37N3FMxe , M37N3FMye , M37N3FMze , M37N3MKxe , & + M37N3MKye , M37N3MKze , M37N3MMxe , M37N3MMye , M37N3MMze , M37N3RAxe , M37N3RAye , & + M37N3RAze , M37N3RDxe , M37N3RDye , M37N3RDze , M37N3TAxe , M37N3TAye , M37N3TAze , & + M37N3TDxss , M37N3TDyss , M37N3TDzss , M37N4FKxe , M37N4FKye , M37N4FKze , M37N4FMxe , & + M37N4FMye , M37N4FMze , M37N4MKxe , M37N4MKye , M37N4MKze , M37N4MMxe , M37N4MMye , & + M37N4MMze , M37N4RAxe , M37N4RAye , M37N4RAze , M37N4RDxe , M37N4RDye , M37N4RDze , & + M37N4TAxe , M37N4TAye , M37N4TAze , M37N4TDxss , M37N4TDyss , M37N4TDzss , M37N5FKxe , & + M37N5FKye , M37N5FKze , M37N5FMxe , M37N5FMye , M37N5FMze , M37N5MKxe , M37N5MKye , & + M37N5MKze , M37N5MMxe , M37N5MMye , M37N5MMze , M37N5RAxe , M37N5RAye , M37N5RAze , & + M37N5RDxe , M37N5RDye , M37N5RDze , M37N5TAxe , M37N5TAye , M37N5TAze , M37N5TDxss , & + M37N5TDyss , M37N5TDzss , M37N6FKxe , M37N6FKye , M37N6FKze , M37N6FMxe , M37N6FMye , & + M37N6FMze , M37N6MKxe , M37N6MKye , M37N6MKze , M37N6MMxe , M37N6MMye , M37N6MMze , & + M37N6RAxe , M37N6RAye , M37N6RAze , M37N6RDxe , M37N6RDye , M37N6RDze , M37N6TAxe , & + M37N6TAye , M37N6TAze , M37N6TDxss , M37N6TDyss , M37N6TDzss , M37N7FKxe , M37N7FKye , & + M37N7FKze , M37N7FMxe , M37N7FMye , M37N7FMze , M37N7MKxe , M37N7MKye , M37N7MKze , & + M37N7MMxe , M37N7MMye , M37N7MMze , M37N7RAxe , M37N7RAye , M37N7RAze , M37N7RDxe , & + M37N7RDye , M37N7RDze , M37N7TAxe , M37N7TAye , M37N7TAze , M37N7TDxss , M37N7TDyss , & + M37N7TDzss , M37N8FKxe , M37N8FKye , M37N8FKze , M37N8FMxe , M37N8FMye , M37N8FMze , & + M37N8MKxe , M37N8MKye , M37N8MKze , M37N8MMxe , M37N8MMye , M37N8MMze , M37N8RAxe , & + M37N8RAye , M37N8RAze , M37N8RDxe , M37N8RDye , M37N8RDze , M37N8TAxe , M37N8TAye , & + M37N8TAze , M37N8TDxss , M37N8TDyss , M37N8TDzss , M37N9FKxe , M37N9FKye , M37N9FKze , & + M37N9FMxe , M37N9FMye , M37N9FMze , M37N9MKxe , M37N9MKye , M37N9MKze , M37N9MMxe , & + M37N9MMye , M37N9MMze , M37N9RAxe , M37N9RAye , M37N9RAze , M37N9RDxe , M37N9RDye , & + M37N9RDze , M37N9TAxe , M37N9TAye , M37N9TAze , M37N9TDxss , M37N9TDyss , M37N9TDzss , & + M38N1FKxe , M38N1FKye , M38N1FKze , M38N1FMxe , M38N1FMye , M38N1FMze , M38N1MKxe , & + M38N1MKye , M38N1MKze , M38N1MMxe , M38N1MMye , M38N1MMze , M38N1RAxe , M38N1RAye , & + M38N1RAze , M38N1RDxe , M38N1RDye , M38N1RDze , M38N1TAxe , M38N1TAye , M38N1TAze , & + M38N1TDxss , M38N1TDyss , M38N1TDzss , M38N2FKxe , M38N2FKye , M38N2FKze , M38N2FMxe , & + M38N2FMye , M38N2FMze , M38N2MKxe , M38N2MKye , M38N2MKze , M38N2MMxe , M38N2MMye , & + M38N2MMze , M38N2RAxe , M38N2RAye , M38N2RAze , M38N2RDxe , M38N2RDye , M38N2RDze , & + M38N2TAxe , M38N2TAye , M38N2TAze , M38N2TDxss , M38N2TDyss , M38N2TDzss , M38N3FKxe , & + M38N3FKye , M38N3FKze , M38N3FMxe , M38N3FMye , M38N3FMze , M38N3MKxe , M38N3MKye , & + M38N3MKze , M38N3MMxe , M38N3MMye , M38N3MMze , M38N3RAxe , M38N3RAye , M38N3RAze , & + M38N3RDxe , M38N3RDye , M38N3RDze , M38N3TAxe , M38N3TAye , M38N3TAze , M38N3TDxss , & + M38N3TDyss , M38N3TDzss , M38N4FKxe , M38N4FKye , M38N4FKze , M38N4FMxe , M38N4FMye , & + M38N4FMze , M38N4MKxe , M38N4MKye , M38N4MKze , M38N4MMxe , M38N4MMye , M38N4MMze , & + M38N4RAxe , M38N4RAye , M38N4RAze , M38N4RDxe , M38N4RDye , M38N4RDze , M38N4TAxe , & + M38N4TAye , M38N4TAze , M38N4TDxss , M38N4TDyss , M38N4TDzss , M38N5FKxe , M38N5FKye , & + M38N5FKze , M38N5FMxe , M38N5FMye , M38N5FMze , M38N5MKxe , M38N5MKye , M38N5MKze , & + M38N5MMxe , M38N5MMye , M38N5MMze , M38N5RAxe , M38N5RAye , M38N5RAze , M38N5RDxe , & + M38N5RDye , M38N5RDze , M38N5TAxe , M38N5TAye , M38N5TAze , M38N5TDxss , M38N5TDyss , & + M38N5TDzss , M38N6FKxe , M38N6FKye , M38N6FKze , M38N6FMxe , M38N6FMye , M38N6FMze , & + M38N6MKxe , M38N6MKye , M38N6MKze , M38N6MMxe , M38N6MMye , M38N6MMze , M38N6RAxe , & + M38N6RAye , M38N6RAze , M38N6RDxe , M38N6RDye , M38N6RDze , M38N6TAxe , M38N6TAye , & + M38N6TAze , M38N6TDxss , M38N6TDyss , M38N6TDzss , M38N7FKxe , M38N7FKye , M38N7FKze , & + M38N7FMxe , M38N7FMye , M38N7FMze , M38N7MKxe , M38N7MKye , M38N7MKze , M38N7MMxe , & + M38N7MMye , M38N7MMze , M38N7RAxe , M38N7RAye , M38N7RAze , M38N7RDxe , M38N7RDye , & + M38N7RDze , M38N7TAxe , M38N7TAye , M38N7TAze , M38N7TDxss , M38N7TDyss , M38N7TDzss , & + M38N8FKxe , M38N8FKye , M38N8FKze , M38N8FMxe , M38N8FMye , M38N8FMze , M38N8MKxe , & + M38N8MKye , M38N8MKze , M38N8MMxe , M38N8MMye , M38N8MMze , M38N8RAxe , M38N8RAye , & + M38N8RAze , M38N8RDxe , M38N8RDye , M38N8RDze , M38N8TAxe , M38N8TAye , M38N8TAze , & + M38N8TDxss , M38N8TDyss , M38N8TDzss , M38N9FKxe , M38N9FKye , M38N9FKze , M38N9FMxe , & + M38N9FMye , M38N9FMze , M38N9MKxe , M38N9MKye , M38N9MKze , M38N9MMxe , M38N9MMye , & + M38N9MMze , M38N9RAxe , M38N9RAye , M38N9RAze , M38N9RDxe , M38N9RDye , M38N9RDze , & + M38N9TAxe , M38N9TAye , M38N9TAze , M38N9TDxss , M38N9TDyss , M38N9TDzss , M39N1FKxe , & + M39N1FKye , M39N1FKze , M39N1FMxe , M39N1FMye , M39N1FMze , M39N1MKxe , M39N1MKye , & + M39N1MKze , M39N1MMxe , M39N1MMye , M39N1MMze , M39N1RAxe , M39N1RAye , M39N1RAze , & + M39N1RDxe , M39N1RDye , M39N1RDze , M39N1TAxe , M39N1TAye , M39N1TAze , M39N1TDxss , & + M39N1TDyss , M39N1TDzss , M39N2FKxe , M39N2FKye , M39N2FKze , M39N2FMxe , M39N2FMye , & + M39N2FMze , M39N2MKxe , M39N2MKye , M39N2MKze , M39N2MMxe , M39N2MMye , M39N2MMze , & + M39N2RAxe , M39N2RAye , M39N2RAze , M39N2RDxe , M39N2RDye , M39N2RDze , M39N2TAxe , & + M39N2TAye , M39N2TAze , M39N2TDxss , M39N2TDyss , M39N2TDzss , M39N3FKxe , M39N3FKye , & + M39N3FKze , M39N3FMxe , M39N3FMye , M39N3FMze , M39N3MKxe , M39N3MKye , M39N3MKze , & + M39N3MMxe , M39N3MMye , M39N3MMze , M39N3RAxe , M39N3RAye , M39N3RAze , M39N3RDxe , & + M39N3RDye , M39N3RDze , M39N3TAxe , M39N3TAye , M39N3TAze , M39N3TDxss , M39N3TDyss , & + M39N3TDzss , M39N4FKxe , M39N4FKye , M39N4FKze , M39N4FMxe , M39N4FMye , M39N4FMze , & + M39N4MKxe , M39N4MKye , M39N4MKze , M39N4MMxe , M39N4MMye , M39N4MMze , M39N4RAxe , & + M39N4RAye , M39N4RAze , M39N4RDxe , M39N4RDye , M39N4RDze , M39N4TAxe , M39N4TAye , & + M39N4TAze , M39N4TDxss , M39N4TDyss , M39N4TDzss , M39N5FKxe , M39N5FKye , M39N5FKze , & + M39N5FMxe , M39N5FMye , M39N5FMze , M39N5MKxe , M39N5MKye , M39N5MKze , M39N5MMxe , & + M39N5MMye , M39N5MMze , M39N5RAxe , M39N5RAye , M39N5RAze , M39N5RDxe , M39N5RDye , & + M39N5RDze , M39N5TAxe , M39N5TAye , M39N5TAze , M39N5TDxss , M39N5TDyss , M39N5TDzss , & + M39N6FKxe , M39N6FKye , M39N6FKze , M39N6FMxe /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry6(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M39N6FMye , M39N6FMze , M39N6MKxe , M39N6MKye , M39N6MKze , M39N6MMxe , M39N6MMye , & + M39N6MMze , M39N6RAxe , M39N6RAye , M39N6RAze , M39N6RDxe , M39N6RDye , M39N6RDze , & + M39N6TAxe , M39N6TAye , M39N6TAze , M39N6TDxss , M39N6TDyss , M39N6TDzss , M39N7FKxe , & + M39N7FKye , M39N7FKze , M39N7FMxe , M39N7FMye , M39N7FMze , M39N7MKxe , M39N7MKye , & + M39N7MKze , M39N7MMxe , M39N7MMye , M39N7MMze , M39N7RAxe , M39N7RAye , M39N7RAze , & + M39N7RDxe , M39N7RDye , M39N7RDze , M39N7TAxe , M39N7TAye , M39N7TAze , M39N7TDxss , & + M39N7TDyss , M39N7TDzss , M39N8FKxe , M39N8FKye , M39N8FKze , M39N8FMxe , M39N8FMye , & + M39N8FMze , M39N8MKxe , M39N8MKye , M39N8MKze , M39N8MMxe , M39N8MMye , M39N8MMze , & + M39N8RAxe , M39N8RAye , M39N8RAze , M39N8RDxe , M39N8RDye , M39N8RDze , M39N8TAxe , & + M39N8TAye , M39N8TAze , M39N8TDxss , M39N8TDyss , M39N8TDzss , M39N9FKxe , M39N9FKye , & + M39N9FKze , M39N9FMxe , M39N9FMye , M39N9FMze , M39N9MKxe , M39N9MKye , M39N9MKze , & + M39N9MMxe , M39N9MMye , M39N9MMze , M39N9RAxe , M39N9RAye , M39N9RAze , M39N9RDxe , & + M39N9RDye , M39N9RDze , M39N9TAxe , M39N9TAye , M39N9TAze , M39N9TDxss , M39N9TDyss , & + M39N9TDzss , M40N1FKxe , M40N1FKye , M40N1FKze , M40N1FMxe , M40N1FMye , M40N1FMze , & + M40N1MKxe , M40N1MKye , M40N1MKze , M40N1MMxe , M40N1MMye , M40N1MMze , M40N1RAxe , & + M40N1RAye , M40N1RAze , M40N1RDxe , M40N1RDye , M40N1RDze , M40N1TAxe , M40N1TAye , & + M40N1TAze , M40N1TDxss , M40N1TDyss , M40N1TDzss , M40N2FKxe , M40N2FKye , M40N2FKze , & + M40N2FMxe , M40N2FMye , M40N2FMze , M40N2MKxe , M40N2MKye , M40N2MKze , M40N2MMxe , & + M40N2MMye , M40N2MMze , M40N2RAxe , M40N2RAye , M40N2RAze , M40N2RDxe , M40N2RDye , & + M40N2RDze , M40N2TAxe , M40N2TAye , M40N2TAze , M40N2TDxss , M40N2TDyss , M40N2TDzss , & + M40N3FKxe , M40N3FKye , M40N3FKze , M40N3FMxe , M40N3FMye , M40N3FMze , M40N3MKxe , & + M40N3MKye , M40N3MKze , M40N3MMxe , M40N3MMye , M40N3MMze , M40N3RAxe , M40N3RAye , & + M40N3RAze , M40N3RDxe , M40N3RDye , M40N3RDze , M40N3TAxe , M40N3TAye , M40N3TAze , & + M40N3TDxss , M40N3TDyss , M40N3TDzss , M40N4FKxe , M40N4FKye , M40N4FKze , M40N4FMxe , & + M40N4FMye , M40N4FMze , M40N4MKxe , M40N4MKye , M40N4MKze , M40N4MMxe , M40N4MMye , & + M40N4MMze , M40N4RAxe , M40N4RAye , M40N4RAze , M40N4RDxe , M40N4RDye , M40N4RDze , & + M40N4TAxe , M40N4TAye , M40N4TAze , M40N4TDxss , M40N4TDyss , M40N4TDzss , M40N5FKxe , & + M40N5FKye , M40N5FKze , M40N5FMxe , M40N5FMye , M40N5FMze , M40N5MKxe , M40N5MKye , & + M40N5MKze , M40N5MMxe , M40N5MMye , M40N5MMze , M40N5RAxe , M40N5RAye , M40N5RAze , & + M40N5RDxe , M40N5RDye , M40N5RDze , M40N5TAxe , M40N5TAye , M40N5TAze , M40N5TDxss , & + M40N5TDyss , M40N5TDzss , M40N6FKxe , M40N6FKye , M40N6FKze , M40N6FMxe , M40N6FMye , & + M40N6FMze , M40N6MKxe , M40N6MKye , M40N6MKze , M40N6MMxe , M40N6MMye , M40N6MMze , & + M40N6RAxe , M40N6RAye , M40N6RAze , M40N6RDxe , M40N6RDye , M40N6RDze , M40N6TAxe , & + M40N6TAye , M40N6TAze , M40N6TDxss , M40N6TDyss , M40N6TDzss , M40N7FKxe , M40N7FKye , & + M40N7FKze , M40N7FMxe , M40N7FMye , M40N7FMze , M40N7MKxe , M40N7MKye , M40N7MKze , & + M40N7MMxe , M40N7MMye , M40N7MMze , M40N7RAxe , M40N7RAye , M40N7RAze , M40N7RDxe , & + M40N7RDye , M40N7RDze , M40N7TAxe , M40N7TAye , M40N7TAze , M40N7TDxss , M40N7TDyss , & + M40N7TDzss , M40N8FKxe , M40N8FKye , M40N8FKze , M40N8FMxe , M40N8FMye , M40N8FMze , & + M40N8MKxe , M40N8MKye , M40N8MKze , M40N8MMxe , M40N8MMye , M40N8MMze , M40N8RAxe , & + M40N8RAye , M40N8RAze , M40N8RDxe , M40N8RDye , M40N8RDze , M40N8TAxe , M40N8TAye , & + M40N8TAze , M40N8TDxss , M40N8TDyss , M40N8TDzss , M40N9FKxe , M40N9FKye , M40N9FKze , & + M40N9FMxe , M40N9FMye , M40N9FMze , M40N9MKxe , M40N9MKye , M40N9MKze , M40N9MMxe , & + M40N9MMye , M40N9MMze , M40N9RAxe , M40N9RAye , M40N9RAze , M40N9RDxe , M40N9RDye , & + M40N9RDze , M40N9TAxe , M40N9TAye , M40N9TAze , M40N9TDxss , M40N9TDyss , M40N9TDzss , & + M41N1FKxe , M41N1FKye , M41N1FKze , M41N1FMxe , M41N1FMye , M41N1FMze , M41N1MKxe , & + M41N1MKye , M41N1MKze , M41N1MMxe , M41N1MMye , M41N1MMze , M41N1RAxe , M41N1RAye , & + M41N1RAze , M41N1RDxe , M41N1RDye , M41N1RDze , M41N1TAxe , M41N1TAye , M41N1TAze , & + M41N1TDxss , M41N1TDyss , M41N1TDzss , M41N2FKxe , M41N2FKye , M41N2FKze , M41N2FMxe , & + M41N2FMye , M41N2FMze , M41N2MKxe , M41N2MKye , M41N2MKze , M41N2MMxe , M41N2MMye , & + M41N2MMze , M41N2RAxe , M41N2RAye , M41N2RAze , M41N2RDxe , M41N2RDye , M41N2RDze , & + M41N2TAxe , M41N2TAye , M41N2TAze , M41N2TDxss , M41N2TDyss , M41N2TDzss , M41N3FKxe , & + M41N3FKye , M41N3FKze , M41N3FMxe , M41N3FMye , M41N3FMze , M41N3MKxe , M41N3MKye , & + M41N3MKze , M41N3MMxe , M41N3MMye , M41N3MMze , M41N3RAxe , M41N3RAye , M41N3RAze , & + M41N3RDxe , M41N3RDye , M41N3RDze , M41N3TAxe , M41N3TAye , M41N3TAze , M41N3TDxss , & + M41N3TDyss , M41N3TDzss , M41N4FKxe , M41N4FKye , M41N4FKze , M41N4FMxe , M41N4FMye , & + M41N4FMze , M41N4MKxe , M41N4MKye , M41N4MKze , M41N4MMxe , M41N4MMye , M41N4MMze , & + M41N4RAxe , M41N4RAye , M41N4RAze , M41N4RDxe , M41N4RDye , M41N4RDze , M41N4TAxe , & + M41N4TAye , M41N4TAze , M41N4TDxss , M41N4TDyss , M41N4TDzss , M41N5FKxe , M41N5FKye , & + M41N5FKze , M41N5FMxe , M41N5FMye , M41N5FMze , M41N5MKxe , M41N5MKye , M41N5MKze , & + M41N5MMxe , M41N5MMye , M41N5MMze , M41N5RAxe , M41N5RAye , M41N5RAze , M41N5RDxe , & + M41N5RDye , M41N5RDze , M41N5TAxe , M41N5TAye , M41N5TAze , M41N5TDxss , M41N5TDyss , & + M41N5TDzss , M41N6FKxe , M41N6FKye , M41N6FKze , M41N6FMxe , M41N6FMye , M41N6FMze , & + M41N6MKxe , M41N6MKye , M41N6MKze , M41N6MMxe , M41N6MMye , M41N6MMze , M41N6RAxe , & + M41N6RAye , M41N6RAze , M41N6RDxe , M41N6RDye , M41N6RDze , M41N6TAxe , M41N6TAye , & + M41N6TAze , M41N6TDxss , M41N6TDyss , M41N6TDzss , M41N7FKxe , M41N7FKye , M41N7FKze , & + M41N7FMxe , M41N7FMye , M41N7FMze , M41N7MKxe , M41N7MKye , M41N7MKze , M41N7MMxe , & + M41N7MMye , M41N7MMze , M41N7RAxe , M41N7RAye , M41N7RAze , M41N7RDxe , M41N7RDye , & + M41N7RDze , M41N7TAxe , M41N7TAye , M41N7TAze , M41N7TDxss , M41N7TDyss , M41N7TDzss , & + M41N8FKxe , M41N8FKye , M41N8FKze , M41N8FMxe , M41N8FMye , M41N8FMze , M41N8MKxe , & + M41N8MKye , M41N8MKze , M41N8MMxe , M41N8MMye , M41N8MMze , M41N8RAxe , M41N8RAye , & + M41N8RAze , M41N8RDxe , M41N8RDye , M41N8RDze , M41N8TAxe , M41N8TAye , M41N8TAze , & + M41N8TDxss , M41N8TDyss , M41N8TDzss , M41N9FKxe , M41N9FKye , M41N9FKze , M41N9FMxe , & + M41N9FMye , M41N9FMze , M41N9MKxe , M41N9MKye , M41N9MKze , M41N9MMxe , M41N9MMye , & + M41N9MMze , M41N9RAxe , M41N9RAye , M41N9RAze , M41N9RDxe , M41N9RDye , M41N9RDze , & + M41N9TAxe , M41N9TAye , M41N9TAze , M41N9TDxss , M41N9TDyss , M41N9TDzss , M42N1FKxe , & + M42N1FKye , M42N1FKze , M42N1FMxe , M42N1FMye , M42N1FMze , M42N1MKxe , M42N1MKye , & + M42N1MKze , M42N1MMxe , M42N1MMye , M42N1MMze , M42N1RAxe , M42N1RAye , M42N1RAze , & + M42N1RDxe , M42N1RDye , M42N1RDze , M42N1TAxe , M42N1TAye , M42N1TAze , M42N1TDxss , & + M42N1TDyss , M42N1TDzss , M42N2FKxe , M42N2FKye , M42N2FKze , M42N2FMxe , M42N2FMye , & + M42N2FMze , M42N2MKxe , M42N2MKye , M42N2MKze , M42N2MMxe , M42N2MMye , M42N2MMze , & + M42N2RAxe , M42N2RAye , M42N2RAze , M42N2RDxe , M42N2RDye , M42N2RDze , M42N2TAxe , & + M42N2TAye , M42N2TAze , M42N2TDxss , M42N2TDyss , M42N2TDzss , M42N3FKxe , M42N3FKye , & + M42N3FKze , M42N3FMxe , M42N3FMye , M42N3FMze , M42N3MKxe , M42N3MKye , M42N3MKze , & + M42N3MMxe , M42N3MMye , M42N3MMze , M42N3RAxe , M42N3RAye , M42N3RAze , M42N3RDxe , & + M42N3RDye , M42N3RDze , M42N3TAxe , M42N3TAye , M42N3TAze , M42N3TDxss , M42N3TDyss , & + M42N3TDzss , M42N4FKxe , M42N4FKye , M42N4FKze , M42N4FMxe , M42N4FMye , M42N4FMze , & + M42N4MKxe , M42N4MKye , M42N4MKze , M42N4MMxe , M42N4MMye , M42N4MMze , M42N4RAxe , & + M42N4RAye , M42N4RAze , M42N4RDxe , M42N4RDye , M42N4RDze , M42N4TAxe , M42N4TAye , & + M42N4TAze , M42N4TDxss , M42N4TDyss , M42N4TDzss , M42N5FKxe , M42N5FKye , M42N5FKze , & + M42N5FMxe , M42N5FMye , M42N5FMze , M42N5MKxe , M42N5MKye , M42N5MKze , M42N5MMxe , & + M42N5MMye , M42N5MMze , M42N5RAxe , M42N5RAye , M42N5RAze , M42N5RDxe , M42N5RDye , & + M42N5RDze , M42N5TAxe , M42N5TAye , M42N5TAze , M42N5TDxss , M42N5TDyss , M42N5TDzss , & + M42N6FKxe , M42N6FKye , M42N6FKze , M42N6FMxe , M42N6FMye , M42N6FMze , M42N6MKxe , & + M42N6MKye , M42N6MKze , M42N6MMxe , M42N6MMye , M42N6MMze , M42N6RAxe , M42N6RAye , & + M42N6RAze , M42N6RDxe , M42N6RDye , M42N6RDze , M42N6TAxe , M42N6TAye , M42N6TAze , & + M42N6TDxss , M42N6TDyss , M42N6TDzss , M42N7FKxe , M42N7FKye , M42N7FKze , M42N7FMxe , & + M42N7FMye , M42N7FMze , M42N7MKxe , M42N7MKye , M42N7MKze , M42N7MMxe , M42N7MMye , & + M42N7MMze , M42N7RAxe , M42N7RAye , M42N7RAze , M42N7RDxe , M42N7RDye , M42N7RDze , & + M42N7TAxe , M42N7TAye , M42N7TAze , M42N7TDxss , M42N7TDyss , M42N7TDzss , M42N8FKxe , & + M42N8FKye , M42N8FKze , M42N8FMxe , M42N8FMye , M42N8FMze , M42N8MKxe , M42N8MKye , & + M42N8MKze , M42N8MMxe , M42N8MMye , M42N8MMze , M42N8RAxe , M42N8RAye , M42N8RAze , & + M42N8RDxe , M42N8RDye , M42N8RDze , M42N8TAxe , M42N8TAye , M42N8TAze , M42N8TDxss , & + M42N8TDyss , M42N8TDzss , M42N9FKxe , M42N9FKye , M42N9FKze , M42N9FMxe , M42N9FMye , & + M42N9FMze , M42N9MKxe , M42N9MKye , M42N9MKze , M42N9MMxe , M42N9MMye , M42N9MMze , & + M42N9RAxe , M42N9RAye , M42N9RAze , M42N9RDxe , M42N9RDye , M42N9RDze , M42N9TAxe , & + M42N9TAye , M42N9TAze , M42N9TDxss , M42N9TDyss , M42N9TDzss , M43N1FKxe , M43N1FKye , & + M43N1FKze , M43N1FMxe , M43N1FMye , M43N1FMze , M43N1MKxe , M43N1MKye , M43N1MKze , & + M43N1MMxe , M43N1MMye , M43N1MMze , M43N1RAxe , M43N1RAye , M43N1RAze , M43N1RDxe , & + M43N1RDye , M43N1RDze , M43N1TAxe , M43N1TAye , M43N1TAze , M43N1TDxss , M43N1TDyss , & + M43N1TDzss , M43N2FKxe , M43N2FKye , M43N2FKze , M43N2FMxe , M43N2FMye , M43N2FMze , & + M43N2MKxe , M43N2MKye , M43N2MKze , M43N2MMxe , M43N2MMye , M43N2MMze , M43N2RAxe , & + M43N2RAye , M43N2RAze , M43N2RDxe , M43N2RDye , M43N2RDze , M43N2TAxe , M43N2TAye , & + M43N2TAze , M43N2TDxss , M43N2TDyss , M43N2TDzss , M43N3FKxe , M43N3FKye , M43N3FKze , & + M43N3FMxe , M43N3FMye , M43N3FMze , M43N3MKxe , M43N3MKye , M43N3MKze , M43N3MMxe , & + M43N3MMye , M43N3MMze , M43N3RAxe , M43N3RAye , M43N3RAze , M43N3RDxe , M43N3RDye , & + M43N3RDze , M43N3TAxe , M43N3TAye , M43N3TAze , M43N3TDxss , M43N3TDyss , M43N3TDzss , & + M43N4FKxe , M43N4FKye , M43N4FKze , M43N4FMxe , M43N4FMye , M43N4FMze , M43N4MKxe , & + M43N4MKye , M43N4MKze , M43N4MMxe , M43N4MMye , M43N4MMze , M43N4RAxe , M43N4RAye , & + M43N4RAze , M43N4RDxe , M43N4RDye , M43N4RDze , M43N4TAxe , M43N4TAye , M43N4TAze , & + M43N4TDxss , M43N4TDyss , M43N4TDzss , M43N5FKxe , M43N5FKye , M43N5FKze , M43N5FMxe , & + M43N5FMye , M43N5FMze , M43N5MKxe , M43N5MKye , M43N5MKze , M43N5MMxe , M43N5MMye , & + M43N5MMze , M43N5RAxe , M43N5RAye , M43N5RAze , M43N5RDxe , M43N5RDye , M43N5RDze , & + M43N5TAxe , M43N5TAye , M43N5TAze , M43N5TDxss , M43N5TDyss , M43N5TDzss , M43N6FKxe , & + M43N6FKye , M43N6FKze , M43N6FMxe , M43N6FMye , M43N6FMze , M43N6MKxe , M43N6MKye , & + M43N6MKze , M43N6MMxe , M43N6MMye , M43N6MMze , M43N6RAxe , M43N6RAye , M43N6RAze , & + M43N6RDxe , M43N6RDye , M43N6RDze , M43N6TAxe , M43N6TAye , M43N6TAze , M43N6TDxss , & + M43N6TDyss , M43N6TDzss , M43N7FKxe , M43N7FKye , M43N7FKze , M43N7FMxe , M43N7FMye , & + M43N7FMze , M43N7MKxe , M43N7MKye , M43N7MKze , M43N7MMxe , M43N7MMye , M43N7MMze , & + M43N7RAxe , M43N7RAye , M43N7RAze , M43N7RDxe , M43N7RDye , M43N7RDze , M43N7TAxe , & + M43N7TAye , M43N7TAze , M43N7TDxss , M43N7TDyss , M43N7TDzss , M43N8FKxe , M43N8FKye , & + M43N8FKze , M43N8FMxe , M43N8FMye , M43N8FMze , M43N8MKxe , M43N8MKye , M43N8MKze , & + M43N8MMxe , M43N8MMye , M43N8MMze , M43N8RAxe , M43N8RAye , M43N8RAze , M43N8RDxe , & + M43N8RDye , M43N8RDze , M43N8TAxe , M43N8TAye , M43N8TAze , M43N8TDxss , M43N8TDyss , & + M43N8TDzss , M43N9FKxe , M43N9FKye , M43N9FKze , M43N9FMxe , M43N9FMye , M43N9FMze , & + M43N9MKxe , M43N9MKye , M43N9MKze , M43N9MMxe , M43N9MMye , M43N9MMze , M43N9RAxe , & + M43N9RAye , M43N9RAze , M43N9RDxe , M43N9RDye , M43N9RDze , M43N9TAxe , M43N9TAye , & + M43N9TAze , M43N9TDxss , M43N9TDyss , M43N9TDzss , M44N1FKxe , M44N1FKye , M44N1FKze , & + M44N1FMxe , M44N1FMye , M44N1FMze , M44N1MKxe , M44N1MKye , M44N1MKze , M44N1MMxe , & + M44N1MMye , M44N1MMze , M44N1RAxe , M44N1RAye , M44N1RAze , M44N1RDxe , M44N1RDye , & + M44N1RDze , M44N1TAxe , M44N1TAye , M44N1TAze , M44N1TDxss , M44N1TDyss , M44N1TDzss , & + M44N2FKxe , M44N2FKye , M44N2FKze , M44N2FMxe , M44N2FMye , M44N2FMze , M44N2MKxe , & + M44N2MKye , M44N2MKze , M44N2MMxe , M44N2MMye , M44N2MMze , M44N2RAxe , M44N2RAye , & + M44N2RAze , M44N2RDxe , M44N2RDye , M44N2RDze , M44N2TAxe , M44N2TAye , M44N2TAze , & + M44N2TDxss , M44N2TDyss , M44N2TDzss , M44N3FKxe , M44N3FKye , M44N3FKze , M44N3FMxe , & + M44N3FMye , M44N3FMze , M44N3MKxe , M44N3MKye , M44N3MKze , M44N3MMxe , M44N3MMye , & + M44N3MMze , M44N3RAxe , M44N3RAye , M44N3RAze , M44N3RDxe , M44N3RDye , M44N3RDze , & + M44N3TAxe , M44N3TAye , M44N3TAze , M44N3TDxss , M44N3TDyss , M44N3TDzss , M44N4FKxe , & + M44N4FKye , M44N4FKze , M44N4FMxe , M44N4FMye , M44N4FMze , M44N4MKxe , M44N4MKye , & + M44N4MKze , M44N4MMxe , M44N4MMye , M44N4MMze , M44N4RAxe , M44N4RAye , M44N4RAze , & + M44N4RDxe , M44N4RDye , M44N4RDze , M44N4TAxe , M44N4TAye , M44N4TAze , M44N4TDxss , & + M44N4TDyss , M44N4TDzss , M44N5FKxe , M44N5FKye , M44N5FKze , M44N5FMxe , M44N5FMye , & + M44N5FMze , M44N5MKxe , M44N5MKye , M44N5MKze , M44N5MMxe , M44N5MMye , M44N5MMze , & + M44N5RAxe , M44N5RAye , M44N5RAze , M44N5RDxe , M44N5RDye , M44N5RDze , M44N5TAxe , & + M44N5TAye , M44N5TAze , M44N5TDxss , M44N5TDyss , M44N5TDzss , M44N6FKxe , M44N6FKye , & + M44N6FKze , M44N6FMxe , M44N6FMye , M44N6FMze , M44N6MKxe , M44N6MKye , M44N6MKze , & + M44N6MMxe , M44N6MMye , M44N6MMze , M44N6RAxe , M44N6RAye , M44N6RAze , M44N6RDxe , & + M44N6RDye , M44N6RDze , M44N6TAxe , M44N6TAye , M44N6TAze , M44N6TDxss , M44N6TDyss , & + M44N6TDzss , M44N7FKxe , M44N7FKye , M44N7FKze , M44N7FMxe , M44N7FMye , M44N7FMze , & + M44N7MKxe , M44N7MKye , M44N7MKze , M44N7MMxe , M44N7MMye , M44N7MMze , M44N7RAxe , & + M44N7RAye , M44N7RAze , M44N7RDxe , M44N7RDye , M44N7RDze , M44N7TAxe , M44N7TAye , & + M44N7TAze , M44N7TDxss , M44N7TDyss , M44N7TDzss , M44N8FKxe , M44N8FKye , M44N8FKze , & + M44N8FMxe , M44N8FMye , M44N8FMze , M44N8MKxe , M44N8MKye , M44N8MKze , M44N8MMxe , & + M44N8MMye , M44N8MMze , M44N8RAxe , M44N8RAye , M44N8RAze , M44N8RDxe , M44N8RDye , & + M44N8RDze , M44N8TAxe , M44N8TAye , M44N8TAze , M44N8TDxss , M44N8TDyss , M44N8TDzss , & + M44N9FKxe , M44N9FKye , M44N9FKze , M44N9FMxe , M44N9FMye , M44N9FMze , M44N9MKxe , & + M44N9MKye , M44N9MKze , M44N9MMxe , M44N9MMye , M44N9MMze , M44N9RAxe , M44N9RAye , & + M44N9RAze , M44N9RDxe , M44N9RDye , M44N9RDze , M44N9TAxe , M44N9TAye , M44N9TAze , & + M44N9TDxss , M44N9TDyss , M44N9TDzss , M45N1FKxe , M45N1FKye , M45N1FKze , M45N1FMxe , & + M45N1FMye , M45N1FMze , M45N1MKxe , M45N1MKye , M45N1MKze , M45N1MMxe , M45N1MMye , & + M45N1MMze , M45N1RAxe , M45N1RAye , M45N1RAze , M45N1RDxe , M45N1RDye , M45N1RDze , & + M45N1TAxe , M45N1TAye , M45N1TAze , M45N1TDxss , M45N1TDyss , M45N1TDzss , M45N2FKxe , & + M45N2FKye , M45N2FKze , M45N2FMxe , M45N2FMye , M45N2FMze , M45N2MKxe , M45N2MKye , & + M45N2MKze , M45N2MMxe , M45N2MMye , M45N2MMze , M45N2RAxe , M45N2RAye , M45N2RAze , & + M45N2RDxe , M45N2RDye , M45N2RDze , M45N2TAxe , M45N2TAye , M45N2TAze , M45N2TDxss , & + M45N2TDyss , M45N2TDzss , M45N3FKxe , M45N3FKye , M45N3FKze , M45N3FMxe , M45N3FMye , & + M45N3FMze , M45N3MKxe , M45N3MKye , M45N3MKze , M45N3MMxe , M45N3MMye , M45N3MMze , & + M45N3RAxe , M45N3RAye , M45N3RAze , M45N3RDxe , M45N3RDye , M45N3RDze , M45N3TAxe , & + M45N3TAye , M45N3TAze , M45N3TDxss , M45N3TDyss , M45N3TDzss , M45N4FKxe , M45N4FKye , & + M45N4FKze , M45N4FMxe , M45N4FMye , M45N4FMze , M45N4MKxe , M45N4MKye , M45N4MKze , & + M45N4MMxe , M45N4MMye , M45N4MMze , M45N4RAxe , M45N4RAye , M45N4RAze , M45N4RDxe , & + M45N4RDye , M45N4RDze , M45N4TAxe , M45N4TAye , M45N4TAze , M45N4TDxss , M45N4TDyss , & + M45N4TDzss , M45N5FKxe , M45N5FKye , M45N5FKze , M45N5FMxe , M45N5FMye , M45N5FMze , & + M45N5MKxe , M45N5MKye , M45N5MKze , M45N5MMxe , M45N5MMye , M45N5MMze , M45N5RAxe , & + M45N5RAye , M45N5RAze , M45N5RDxe , M45N5RDye , M45N5RDze , M45N5TAxe , M45N5TAye , & + M45N5TAze , M45N5TDxss , M45N5TDyss , M45N5TDzss , M45N6FKxe , M45N6FKye , M45N6FKze , & + M45N6FMxe , M45N6FMye , M45N6FMze , M45N6MKxe , M45N6MKye , M45N6MKze , M45N6MMxe , & + M45N6MMye , M45N6MMze , M45N6RAxe , M45N6RAye , M45N6RAze , M45N6RDxe , M45N6RDye , & + M45N6RDze , M45N6TAxe , M45N6TAye , M45N6TAze , M45N6TDxss , M45N6TDyss , M45N6TDzss , & + M45N7FKxe , M45N7FKye , M45N7FKze , M45N7FMxe , M45N7FMye , M45N7FMze , M45N7MKxe , & + M45N7MKye , M45N7MKze , M45N7MMxe , M45N7MMye , M45N7MMze , M45N7RAxe , M45N7RAye , & + M45N7RAze , M45N7RDxe , M45N7RDye , M45N7RDze , M45N7TAxe , M45N7TAye , M45N7TAze , & + M45N7TDxss , M45N7TDyss , M45N7TDzss , M45N8FKxe , M45N8FKye , M45N8FKze , M45N8FMxe , & + M45N8FMye , M45N8FMze , M45N8MKxe , M45N8MKye , M45N8MKze , M45N8MMxe , M45N8MMye , & + M45N8MMze , M45N8RAxe , M45N8RAye , M45N8RAze , M45N8RDxe , M45N8RDye , M45N8RDze , & + M45N8TAxe , M45N8TAye , M45N8TAze , M45N8TDxss , M45N8TDyss , M45N8TDzss , M45N9FKxe , & + M45N9FKye , M45N9FKze , M45N9FMxe , M45N9FMye , M45N9FMze , M45N9MKxe , M45N9MKye , & + M45N9MKze , M45N9MMxe , M45N9MMye , M45N9MMze , M45N9RAxe , M45N9RAye , M45N9RAze , & + M45N9RDxe , M45N9RDye , M45N9RDze , M45N9TAxe , M45N9TAye , M45N9TAze , M45N9TDxss , & + M45N9TDyss , M45N9TDzss , M46N1FKxe , M46N1FKye , M46N1FKze , M46N1FMxe , M46N1FMye , & + M46N1FMze , M46N1MKxe , M46N1MKye , M46N1MKze , M46N1MMxe , M46N1MMye , M46N1MMze , & + M46N1RAxe , M46N1RAye , M46N1RAze , M46N1RDxe , M46N1RDye , M46N1RDze , M46N1TAxe , & + M46N1TAye , M46N1TAze , M46N1TDxss , M46N1TDyss , M46N1TDzss , M46N2FKxe , M46N2FKye , & + M46N2FKze , M46N2FMxe , M46N2FMye , M46N2FMze , M46N2MKxe , M46N2MKye , M46N2MKze , & + M46N2MMxe , M46N2MMye , M46N2MMze , M46N2RAxe , M46N2RAye , M46N2RAze , M46N2RDxe , & + M46N2RDye , M46N2RDze , M46N2TAxe , M46N2TAye , M46N2TAze , M46N2TDxss , M46N2TDyss , & + M46N2TDzss , M46N3FKxe , M46N3FKye , M46N3FKze , M46N3FMxe , M46N3FMye , M46N3FMze , & + M46N3MKxe , M46N3MKye , M46N3MKze , M46N3MMxe , M46N3MMye , M46N3MMze , M46N3RAxe , & + M46N3RAye , M46N3RAze , M46N3RDxe , M46N3RDye , M46N3RDze , M46N3TAxe , M46N3TAye , & + M46N3TAze , M46N3TDxss , M46N3TDyss , M46N3TDzss , M46N4FKxe , M46N4FKye , M46N4FKze , & + M46N4FMxe , M46N4FMye , M46N4FMze , M46N4MKxe , M46N4MKye , M46N4MKze , M46N4MMxe , & + M46N4MMye , M46N4MMze , M46N4RAxe , M46N4RAye , M46N4RAze , M46N4RDxe , M46N4RDye , & + M46N4RDze , M46N4TAxe , M46N4TAye , M46N4TAze , M46N4TDxss , M46N4TDyss , M46N4TDzss , & + M46N5FKxe , M46N5FKye , M46N5FKze , M46N5FMxe , M46N5FMye , M46N5FMze , M46N5MKxe , & + M46N5MKye , M46N5MKze , M46N5MMxe , M46N5MMye , M46N5MMze , M46N5RAxe , M46N5RAye , & + M46N5RAze , M46N5RDxe , M46N5RDye , M46N5RDze , M46N5TAxe , M46N5TAye , M46N5TAze , & + M46N5TDxss , M46N5TDyss , M46N5TDzss , M46N6FKxe , M46N6FKye , M46N6FKze , M46N6FMxe , & + M46N6FMye , M46N6FMze , M46N6MKxe , M46N6MKye , M46N6MKze , M46N6MMxe , M46N6MMye , & + M46N6MMze , M46N6RAxe , M46N6RAye , M46N6RAze , M46N6RDxe , M46N6RDye , M46N6RDze , & + M46N6TAxe , M46N6TAye , M46N6TAze , M46N6TDxss , M46N6TDyss , M46N6TDzss , M46N7FKxe , & + M46N7FKye , M46N7FKze , M46N7FMxe , M46N7FMye , M46N7FMze , M46N7MKxe , M46N7MKye , & + M46N7MKze , M46N7MMxe , M46N7MMye , M46N7MMze , M46N7RAxe , M46N7RAye , M46N7RAze , & + M46N7RDxe , M46N7RDye , M46N7RDze , M46N7TAxe , M46N7TAye , M46N7TAze , M46N7TDxss , & + M46N7TDyss , M46N7TDzss , M46N8FKxe , M46N8FKye , M46N8FKze , M46N8FMxe , M46N8FMye , & + M46N8FMze , M46N8MKxe , M46N8MKye , M46N8MKze , M46N8MMxe , M46N8MMye , M46N8MMze , & + M46N8RAxe , M46N8RAye , M46N8RAze , M46N8RDxe , M46N8RDye , M46N8RDze , M46N8TAxe , & + M46N8TAye , M46N8TAze , M46N8TDxss , M46N8TDyss , M46N8TDzss , M46N9FKxe , M46N9FKye , & + M46N9FKze , M46N9FMxe , M46N9FMye , M46N9FMze , M46N9MKxe , M46N9MKye , M46N9MKze , & + M46N9MMxe , M46N9MMye , M46N9MMze , M46N9RAxe , M46N9RAye , M46N9RAze , M46N9RDxe , & + M46N9RDye , M46N9RDze , M46N9TAxe , M46N9TAye , M46N9TAze , M46N9TDxss , M46N9TDyss , & + M46N9TDzss , M47N1FKxe , M47N1FKye , M47N1FKze , M47N1FMxe , M47N1FMye , M47N1FMze , & + M47N1MKxe , M47N1MKye , M47N1MKze , M47N1MMxe , M47N1MMye , M47N1MMze , M47N1RAxe , & + M47N1RAye , M47N1RAze , M47N1RDxe , M47N1RDye , M47N1RDze , M47N1TAxe , M47N1TAye , & + M47N1TAze , M47N1TDxss , M47N1TDyss , M47N1TDzss , M47N2FKxe , M47N2FKye , M47N2FKze , & + M47N2FMxe , M47N2FMye , M47N2FMze , M47N2MKxe , M47N2MKye , M47N2MKze , M47N2MMxe , & + M47N2MMye , M47N2MMze , M47N2RAxe , M47N2RAye , M47N2RAze , M47N2RDxe , M47N2RDye , & + M47N2RDze , M47N2TAxe , M47N2TAye , M47N2TAze , M47N2TDxss , M47N2TDyss , M47N2TDzss , & + M47N3FKxe , M47N3FKye , M47N3FKze , M47N3FMxe , M47N3FMye , M47N3FMze , M47N3MKxe , & + M47N3MKye , M47N3MKze , M47N3MMxe , M47N3MMye , M47N3MMze , M47N3RAxe , M47N3RAye , & + M47N3RAze , M47N3RDxe , M47N3RDye , M47N3RDze /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry7(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M47N3TAxe , M47N3TAye , M47N3TAze , M47N3TDxss , M47N3TDyss , M47N3TDzss , M47N4FKxe , & + M47N4FKye , M47N4FKze , M47N4FMxe , M47N4FMye , M47N4FMze , M47N4MKxe , M47N4MKye , & + M47N4MKze , M47N4MMxe , M47N4MMye , M47N4MMze , M47N4RAxe , M47N4RAye , M47N4RAze , & + M47N4RDxe , M47N4RDye , M47N4RDze , M47N4TAxe , M47N4TAye , M47N4TAze , M47N4TDxss , & + M47N4TDyss , M47N4TDzss , M47N5FKxe , M47N5FKye , M47N5FKze , M47N5FMxe , M47N5FMye , & + M47N5FMze , M47N5MKxe , M47N5MKye , M47N5MKze , M47N5MMxe , M47N5MMye , M47N5MMze , & + M47N5RAxe , M47N5RAye , M47N5RAze , M47N5RDxe , M47N5RDye , M47N5RDze , M47N5TAxe , & + M47N5TAye , M47N5TAze , M47N5TDxss , M47N5TDyss , M47N5TDzss , M47N6FKxe , M47N6FKye , & + M47N6FKze , M47N6FMxe , M47N6FMye , M47N6FMze , M47N6MKxe , M47N6MKye , M47N6MKze , & + M47N6MMxe , M47N6MMye , M47N6MMze , M47N6RAxe , M47N6RAye , M47N6RAze , M47N6RDxe , & + M47N6RDye , M47N6RDze , M47N6TAxe , M47N6TAye , M47N6TAze , M47N6TDxss , M47N6TDyss , & + M47N6TDzss , M47N7FKxe , M47N7FKye , M47N7FKze , M47N7FMxe , M47N7FMye , M47N7FMze , & + M47N7MKxe , M47N7MKye , M47N7MKze , M47N7MMxe , M47N7MMye , M47N7MMze , M47N7RAxe , & + M47N7RAye , M47N7RAze , M47N7RDxe , M47N7RDye , M47N7RDze , M47N7TAxe , M47N7TAye , & + M47N7TAze , M47N7TDxss , M47N7TDyss , M47N7TDzss , M47N8FKxe , M47N8FKye , M47N8FKze , & + M47N8FMxe , M47N8FMye , M47N8FMze , M47N8MKxe , M47N8MKye , M47N8MKze , M47N8MMxe , & + M47N8MMye , M47N8MMze , M47N8RAxe , M47N8RAye , M47N8RAze , M47N8RDxe , M47N8RDye , & + M47N8RDze , M47N8TAxe , M47N8TAye , M47N8TAze , M47N8TDxss , M47N8TDyss , M47N8TDzss , & + M47N9FKxe , M47N9FKye , M47N9FKze , M47N9FMxe , M47N9FMye , M47N9FMze , M47N9MKxe , & + M47N9MKye , M47N9MKze , M47N9MMxe , M47N9MMye , M47N9MMze , M47N9RAxe , M47N9RAye , & + M47N9RAze , M47N9RDxe , M47N9RDye , M47N9RDze , M47N9TAxe , M47N9TAye , M47N9TAze , & + M47N9TDxss , M47N9TDyss , M47N9TDzss , M48N1FKxe , M48N1FKye , M48N1FKze , M48N1FMxe , & + M48N1FMye , M48N1FMze , M48N1MKxe , M48N1MKye , M48N1MKze , M48N1MMxe , M48N1MMye , & + M48N1MMze , M48N1RAxe , M48N1RAye , M48N1RAze , M48N1RDxe , M48N1RDye , M48N1RDze , & + M48N1TAxe , M48N1TAye , M48N1TAze , M48N1TDxss , M48N1TDyss , M48N1TDzss , M48N2FKxe , & + M48N2FKye , M48N2FKze , M48N2FMxe , M48N2FMye , M48N2FMze , M48N2MKxe , M48N2MKye , & + M48N2MKze , M48N2MMxe , M48N2MMye , M48N2MMze , M48N2RAxe , M48N2RAye , M48N2RAze , & + M48N2RDxe , M48N2RDye , M48N2RDze , M48N2TAxe , M48N2TAye , M48N2TAze , M48N2TDxss , & + M48N2TDyss , M48N2TDzss , M48N3FKxe , M48N3FKye , M48N3FKze , M48N3FMxe , M48N3FMye , & + M48N3FMze , M48N3MKxe , M48N3MKye , M48N3MKze , M48N3MMxe , M48N3MMye , M48N3MMze , & + M48N3RAxe , M48N3RAye , M48N3RAze , M48N3RDxe , M48N3RDye , M48N3RDze , M48N3TAxe , & + M48N3TAye , M48N3TAze , M48N3TDxss , M48N3TDyss , M48N3TDzss , M48N4FKxe , M48N4FKye , & + M48N4FKze , M48N4FMxe , M48N4FMye , M48N4FMze , M48N4MKxe , M48N4MKye , M48N4MKze , & + M48N4MMxe , M48N4MMye , M48N4MMze , M48N4RAxe , M48N4RAye , M48N4RAze , M48N4RDxe , & + M48N4RDye , M48N4RDze , M48N4TAxe , M48N4TAye , M48N4TAze , M48N4TDxss , M48N4TDyss , & + M48N4TDzss , M48N5FKxe , M48N5FKye , M48N5FKze , M48N5FMxe , M48N5FMye , M48N5FMze , & + M48N5MKxe , M48N5MKye , M48N5MKze , M48N5MMxe , M48N5MMye , M48N5MMze , M48N5RAxe , & + M48N5RAye , M48N5RAze , M48N5RDxe , M48N5RDye , M48N5RDze , M48N5TAxe , M48N5TAye , & + M48N5TAze , M48N5TDxss , M48N5TDyss , M48N5TDzss , M48N6FKxe , M48N6FKye , M48N6FKze , & + M48N6FMxe , M48N6FMye , M48N6FMze , M48N6MKxe , M48N6MKye , M48N6MKze , M48N6MMxe , & + M48N6MMye , M48N6MMze , M48N6RAxe , M48N6RAye , M48N6RAze , M48N6RDxe , M48N6RDye , & + M48N6RDze , M48N6TAxe , M48N6TAye , M48N6TAze , M48N6TDxss , M48N6TDyss , M48N6TDzss , & + M48N7FKxe , M48N7FKye , M48N7FKze , M48N7FMxe , M48N7FMye , M48N7FMze , M48N7MKxe , & + M48N7MKye , M48N7MKze , M48N7MMxe , M48N7MMye , M48N7MMze , M48N7RAxe , M48N7RAye , & + M48N7RAze , M48N7RDxe , M48N7RDye , M48N7RDze , M48N7TAxe , M48N7TAye , M48N7TAze , & + M48N7TDxss , M48N7TDyss , M48N7TDzss , M48N8FKxe , M48N8FKye , M48N8FKze , M48N8FMxe , & + M48N8FMye , M48N8FMze , M48N8MKxe , M48N8MKye , M48N8MKze , M48N8MMxe , M48N8MMye , & + M48N8MMze , M48N8RAxe , M48N8RAye , M48N8RAze , M48N8RDxe , M48N8RDye , M48N8RDze , & + M48N8TAxe , M48N8TAye , M48N8TAze , M48N8TDxss , M48N8TDyss , M48N8TDzss , M48N9FKxe , & + M48N9FKye , M48N9FKze , M48N9FMxe , M48N9FMye , M48N9FMze , M48N9MKxe , M48N9MKye , & + M48N9MKze , M48N9MMxe , M48N9MMye , M48N9MMze , M48N9RAxe , M48N9RAye , M48N9RAze , & + M48N9RDxe , M48N9RDye , M48N9RDze , M48N9TAxe , M48N9TAye , M48N9TAze , M48N9TDxss , & + M48N9TDyss , M48N9TDzss , M49N1FKxe , M49N1FKye , M49N1FKze , M49N1FMxe , M49N1FMye , & + M49N1FMze , M49N1MKxe , M49N1MKye , M49N1MKze , M49N1MMxe , M49N1MMye , M49N1MMze , & + M49N1RAxe , M49N1RAye , M49N1RAze , M49N1RDxe , M49N1RDye , M49N1RDze , M49N1TAxe , & + M49N1TAye , M49N1TAze , M49N1TDxss , M49N1TDyss , M49N1TDzss , M49N2FKxe , M49N2FKye , & + M49N2FKze , M49N2FMxe , M49N2FMye , M49N2FMze , M49N2MKxe , M49N2MKye , M49N2MKze , & + M49N2MMxe , M49N2MMye , M49N2MMze , M49N2RAxe , M49N2RAye , M49N2RAze , M49N2RDxe , & + M49N2RDye , M49N2RDze , M49N2TAxe , M49N2TAye , M49N2TAze , M49N2TDxss , M49N2TDyss , & + M49N2TDzss , M49N3FKxe , M49N3FKye , M49N3FKze , M49N3FMxe , M49N3FMye , M49N3FMze , & + M49N3MKxe , M49N3MKye , M49N3MKze , M49N3MMxe , M49N3MMye , M49N3MMze , M49N3RAxe , & + M49N3RAye , M49N3RAze , M49N3RDxe , M49N3RDye , M49N3RDze , M49N3TAxe , M49N3TAye , & + M49N3TAze , M49N3TDxss , M49N3TDyss , M49N3TDzss , M49N4FKxe , M49N4FKye , M49N4FKze , & + M49N4FMxe , M49N4FMye , M49N4FMze , M49N4MKxe , M49N4MKye , M49N4MKze , M49N4MMxe , & + M49N4MMye , M49N4MMze , M49N4RAxe , M49N4RAye , M49N4RAze , M49N4RDxe , M49N4RDye , & + M49N4RDze , M49N4TAxe , M49N4TAye , M49N4TAze , M49N4TDxss , M49N4TDyss , M49N4TDzss , & + M49N5FKxe , M49N5FKye , M49N5FKze , M49N5FMxe , M49N5FMye , M49N5FMze , M49N5MKxe , & + M49N5MKye , M49N5MKze , M49N5MMxe , M49N5MMye , M49N5MMze , M49N5RAxe , M49N5RAye , & + M49N5RAze , M49N5RDxe , M49N5RDye , M49N5RDze , M49N5TAxe , M49N5TAye , M49N5TAze , & + M49N5TDxss , M49N5TDyss , M49N5TDzss , M49N6FKxe , M49N6FKye , M49N6FKze , M49N6FMxe , & + M49N6FMye , M49N6FMze , M49N6MKxe , M49N6MKye , M49N6MKze , M49N6MMxe , M49N6MMye , & + M49N6MMze , M49N6RAxe , M49N6RAye , M49N6RAze , M49N6RDxe , M49N6RDye , M49N6RDze , & + M49N6TAxe , M49N6TAye , M49N6TAze , M49N6TDxss , M49N6TDyss , M49N6TDzss , M49N7FKxe , & + M49N7FKye , M49N7FKze , M49N7FMxe , M49N7FMye , M49N7FMze , M49N7MKxe , M49N7MKye , & + M49N7MKze , M49N7MMxe , M49N7MMye , M49N7MMze , M49N7RAxe , M49N7RAye , M49N7RAze , & + M49N7RDxe , M49N7RDye , M49N7RDze , M49N7TAxe , M49N7TAye , M49N7TAze , M49N7TDxss , & + M49N7TDyss , M49N7TDzss , M49N8FKxe , M49N8FKye , M49N8FKze , M49N8FMxe , M49N8FMye , & + M49N8FMze , M49N8MKxe , M49N8MKye , M49N8MKze , M49N8MMxe , M49N8MMye , M49N8MMze , & + M49N8RAxe , M49N8RAye , M49N8RAze , M49N8RDxe , M49N8RDye , M49N8RDze , M49N8TAxe , & + M49N8TAye , M49N8TAze , M49N8TDxss , M49N8TDyss , M49N8TDzss , M49N9FKxe , M49N9FKye , & + M49N9FKze , M49N9FMxe , M49N9FMye , M49N9FMze , M49N9MKxe , M49N9MKye , M49N9MKze , & + M49N9MMxe , M49N9MMye , M49N9MMze , M49N9RAxe , M49N9RAye , M49N9RAze , M49N9RDxe , & + M49N9RDye , M49N9RDze , M49N9TAxe , M49N9TAye , M49N9TAze , M49N9TDxss , M49N9TDyss , & + M49N9TDzss , M50N1FKxe , M50N1FKye , M50N1FKze , M50N1FMxe , M50N1FMye , M50N1FMze , & + M50N1MKxe , M50N1MKye , M50N1MKze , M50N1MMxe , M50N1MMye , M50N1MMze , M50N1RAxe , & + M50N1RAye , M50N1RAze , M50N1RDxe , M50N1RDye , M50N1RDze , M50N1TAxe , M50N1TAye , & + M50N1TAze , M50N1TDxss , M50N1TDyss , M50N1TDzss , M50N2FKxe , M50N2FKye , M50N2FKze , & + M50N2FMxe , M50N2FMye , M50N2FMze , M50N2MKxe , M50N2MKye , M50N2MKze , M50N2MMxe , & + M50N2MMye , M50N2MMze , M50N2RAxe , M50N2RAye , M50N2RAze , M50N2RDxe , M50N2RDye , & + M50N2RDze , M50N2TAxe , M50N2TAye , M50N2TAze , M50N2TDxss , M50N2TDyss , M50N2TDzss , & + M50N3FKxe , M50N3FKye , M50N3FKze , M50N3FMxe , M50N3FMye , M50N3FMze , M50N3MKxe , & + M50N3MKye , M50N3MKze , M50N3MMxe , M50N3MMye , M50N3MMze , M50N3RAxe , M50N3RAye , & + M50N3RAze , M50N3RDxe , M50N3RDye , M50N3RDze , M50N3TAxe , M50N3TAye , M50N3TAze , & + M50N3TDxss , M50N3TDyss , M50N3TDzss , M50N4FKxe , M50N4FKye , M50N4FKze , M50N4FMxe , & + M50N4FMye , M50N4FMze , M50N4MKxe , M50N4MKye , M50N4MKze , M50N4MMxe , M50N4MMye , & + M50N4MMze , M50N4RAxe , M50N4RAye , M50N4RAze , M50N4RDxe , M50N4RDye , M50N4RDze , & + M50N4TAxe , M50N4TAye , M50N4TAze , M50N4TDxss , M50N4TDyss , M50N4TDzss , M50N5FKxe , & + M50N5FKye , M50N5FKze , M50N5FMxe , M50N5FMye , M50N5FMze , M50N5MKxe , M50N5MKye , & + M50N5MKze , M50N5MMxe , M50N5MMye , M50N5MMze , M50N5RAxe , M50N5RAye , M50N5RAze , & + M50N5RDxe , M50N5RDye , M50N5RDze , M50N5TAxe , M50N5TAye , M50N5TAze , M50N5TDxss , & + M50N5TDyss , M50N5TDzss , M50N6FKxe , M50N6FKye , M50N6FKze , M50N6FMxe , M50N6FMye , & + M50N6FMze , M50N6MKxe , M50N6MKye , M50N6MKze , M50N6MMxe , M50N6MMye , M50N6MMze , & + M50N6RAxe , M50N6RAye , M50N6RAze , M50N6RDxe , M50N6RDye , M50N6RDze , M50N6TAxe , & + M50N6TAye , M50N6TAze , M50N6TDxss , M50N6TDyss , M50N6TDzss , M50N7FKxe , M50N7FKye , & + M50N7FKze , M50N7FMxe , M50N7FMye , M50N7FMze , M50N7MKxe , M50N7MKye , M50N7MKze , & + M50N7MMxe , M50N7MMye , M50N7MMze , M50N7RAxe , M50N7RAye , M50N7RAze , M50N7RDxe , & + M50N7RDye , M50N7RDze , M50N7TAxe , M50N7TAye , M50N7TAze , M50N7TDxss , M50N7TDyss , & + M50N7TDzss , M50N8FKxe , M50N8FKye , M50N8FKze , M50N8FMxe , M50N8FMye , M50N8FMze , & + M50N8MKxe , M50N8MKye , M50N8MKze , M50N8MMxe , M50N8MMye , M50N8MMze , M50N8RAxe , & + M50N8RAye , M50N8RAze , M50N8RDxe , M50N8RDye , M50N8RDze , M50N8TAxe , M50N8TAye , & + M50N8TAze , M50N8TDxss , M50N8TDyss , M50N8TDzss , M50N9FKxe , M50N9FKye , M50N9FKze , & + M50N9FMxe , M50N9FMye , M50N9FMze , M50N9MKxe , M50N9MKye , M50N9MKze , M50N9MMxe , & + M50N9MMye , M50N9MMze , M50N9RAxe , M50N9RAye , M50N9RAze , M50N9RDxe , M50N9RDye , & + M50N9RDze , M50N9TAxe , M50N9TAye , M50N9TAze , M50N9TDxss , M50N9TDyss , M50N9TDzss , & + M51N1FKxe , M51N1FKye , M51N1FKze , M51N1FMxe , M51N1FMye , M51N1FMze , M51N1MKxe , & + M51N1MKye , M51N1MKze , M51N1MMxe , M51N1MMye , M51N1MMze , M51N1RAxe , M51N1RAye , & + M51N1RAze , M51N1RDxe , M51N1RDye , M51N1RDze , M51N1TAxe , M51N1TAye , M51N1TAze , & + M51N1TDxss , M51N1TDyss , M51N1TDzss , M51N2FKxe , M51N2FKye , M51N2FKze , M51N2FMxe , & + M51N2FMye , M51N2FMze , M51N2MKxe , M51N2MKye , M51N2MKze , M51N2MMxe , M51N2MMye , & + M51N2MMze , M51N2RAxe , M51N2RAye , M51N2RAze , M51N2RDxe , M51N2RDye , M51N2RDze , & + M51N2TAxe , M51N2TAye , M51N2TAze , M51N2TDxss , M51N2TDyss , M51N2TDzss , M51N3FKxe , & + M51N3FKye , M51N3FKze , M51N3FMxe , M51N3FMye , M51N3FMze , M51N3MKxe , M51N3MKye , & + M51N3MKze , M51N3MMxe , M51N3MMye , M51N3MMze , M51N3RAxe , M51N3RAye , M51N3RAze , & + M51N3RDxe , M51N3RDye , M51N3RDze , M51N3TAxe , M51N3TAye , M51N3TAze , M51N3TDxss , & + M51N3TDyss , M51N3TDzss , M51N4FKxe , M51N4FKye , M51N4FKze , M51N4FMxe , M51N4FMye , & + M51N4FMze , M51N4MKxe , M51N4MKye , M51N4MKze , M51N4MMxe , M51N4MMye , M51N4MMze , & + M51N4RAxe , M51N4RAye , M51N4RAze , M51N4RDxe , M51N4RDye , M51N4RDze , M51N4TAxe , & + M51N4TAye , M51N4TAze , M51N4TDxss , M51N4TDyss , M51N4TDzss , M51N5FKxe , M51N5FKye , & + M51N5FKze , M51N5FMxe , M51N5FMye , M51N5FMze , M51N5MKxe , M51N5MKye , M51N5MKze , & + M51N5MMxe , M51N5MMye , M51N5MMze , M51N5RAxe , M51N5RAye , M51N5RAze , M51N5RDxe , & + M51N5RDye , M51N5RDze , M51N5TAxe , M51N5TAye , M51N5TAze , M51N5TDxss , M51N5TDyss , & + M51N5TDzss , M51N6FKxe , M51N6FKye , M51N6FKze , M51N6FMxe , M51N6FMye , M51N6FMze , & + M51N6MKxe , M51N6MKye , M51N6MKze , M51N6MMxe , M51N6MMye , M51N6MMze , M51N6RAxe , & + M51N6RAye , M51N6RAze , M51N6RDxe , M51N6RDye , M51N6RDze , M51N6TAxe , M51N6TAye , & + M51N6TAze , M51N6TDxss , M51N6TDyss , M51N6TDzss , M51N7FKxe , M51N7FKye , M51N7FKze , & + M51N7FMxe , M51N7FMye , M51N7FMze , M51N7MKxe , M51N7MKye , M51N7MKze , M51N7MMxe , & + M51N7MMye , M51N7MMze , M51N7RAxe , M51N7RAye , M51N7RAze , M51N7RDxe , M51N7RDye , & + M51N7RDze , M51N7TAxe , M51N7TAye , M51N7TAze , M51N7TDxss , M51N7TDyss , M51N7TDzss , & + M51N8FKxe , M51N8FKye , M51N8FKze , M51N8FMxe , M51N8FMye , M51N8FMze , M51N8MKxe , & + M51N8MKye , M51N8MKze , M51N8MMxe , M51N8MMye , M51N8MMze , M51N8RAxe , M51N8RAye , & + M51N8RAze , M51N8RDxe , M51N8RDye , M51N8RDze , M51N8TAxe , M51N8TAye , M51N8TAze , & + M51N8TDxss , M51N8TDyss , M51N8TDzss , M51N9FKxe , M51N9FKye , M51N9FKze , M51N9FMxe , & + M51N9FMye , M51N9FMze , M51N9MKxe , M51N9MKye , M51N9MKze , M51N9MMxe , M51N9MMye , & + M51N9MMze , M51N9RAxe , M51N9RAye , M51N9RAze , M51N9RDxe , M51N9RDye , M51N9RDze , & + M51N9TAxe , M51N9TAye , M51N9TAze , M51N9TDxss , M51N9TDyss , M51N9TDzss , M52N1FKxe , & + M52N1FKye , M52N1FKze , M52N1FMxe , M52N1FMye , M52N1FMze , M52N1MKxe , M52N1MKye , & + M52N1MKze , M52N1MMxe , M52N1MMye , M52N1MMze , M52N1RAxe , M52N1RAye , M52N1RAze , & + M52N1RDxe , M52N1RDye , M52N1RDze , M52N1TAxe , M52N1TAye , M52N1TAze , M52N1TDxss , & + M52N1TDyss , M52N1TDzss , M52N2FKxe , M52N2FKye , M52N2FKze , M52N2FMxe , M52N2FMye , & + M52N2FMze , M52N2MKxe , M52N2MKye , M52N2MKze , M52N2MMxe , M52N2MMye , M52N2MMze , & + M52N2RAxe , M52N2RAye , M52N2RAze , M52N2RDxe , M52N2RDye , M52N2RDze , M52N2TAxe , & + M52N2TAye , M52N2TAze , M52N2TDxss , M52N2TDyss , M52N2TDzss , M52N3FKxe , M52N3FKye , & + M52N3FKze , M52N3FMxe , M52N3FMye , M52N3FMze , M52N3MKxe , M52N3MKye , M52N3MKze , & + M52N3MMxe , M52N3MMye , M52N3MMze , M52N3RAxe , M52N3RAye , M52N3RAze , M52N3RDxe , & + M52N3RDye , M52N3RDze , M52N3TAxe , M52N3TAye , M52N3TAze , M52N3TDxss , M52N3TDyss , & + M52N3TDzss , M52N4FKxe , M52N4FKye , M52N4FKze , M52N4FMxe , M52N4FMye , M52N4FMze , & + M52N4MKxe , M52N4MKye , M52N4MKze , M52N4MMxe , M52N4MMye , M52N4MMze , M52N4RAxe , & + M52N4RAye , M52N4RAze , M52N4RDxe , M52N4RDye , M52N4RDze , M52N4TAxe , M52N4TAye , & + M52N4TAze , M52N4TDxss , M52N4TDyss , M52N4TDzss , M52N5FKxe , M52N5FKye , M52N5FKze , & + M52N5FMxe , M52N5FMye , M52N5FMze , M52N5MKxe , M52N5MKye , M52N5MKze , M52N5MMxe , & + M52N5MMye , M52N5MMze , M52N5RAxe , M52N5RAye , M52N5RAze , M52N5RDxe , M52N5RDye , & + M52N5RDze , M52N5TAxe , M52N5TAye , M52N5TAze , M52N5TDxss , M52N5TDyss , M52N5TDzss , & + M52N6FKxe , M52N6FKye , M52N6FKze , M52N6FMxe , M52N6FMye , M52N6FMze , M52N6MKxe , & + M52N6MKye , M52N6MKze , M52N6MMxe , M52N6MMye , M52N6MMze , M52N6RAxe , M52N6RAye , & + M52N6RAze , M52N6RDxe , M52N6RDye , M52N6RDze , M52N6TAxe , M52N6TAye , M52N6TAze , & + M52N6TDxss , M52N6TDyss , M52N6TDzss , M52N7FKxe , M52N7FKye , M52N7FKze , M52N7FMxe , & + M52N7FMye , M52N7FMze , M52N7MKxe , M52N7MKye , M52N7MKze , M52N7MMxe , M52N7MMye , & + M52N7MMze , M52N7RAxe , M52N7RAye , M52N7RAze , M52N7RDxe , M52N7RDye , M52N7RDze , & + M52N7TAxe , M52N7TAye , M52N7TAze , M52N7TDxss , M52N7TDyss , M52N7TDzss , M52N8FKxe , & + M52N8FKye , M52N8FKze , M52N8FMxe , M52N8FMye , M52N8FMze , M52N8MKxe , M52N8MKye , & + M52N8MKze , M52N8MMxe , M52N8MMye , M52N8MMze , M52N8RAxe , M52N8RAye , M52N8RAze , & + M52N8RDxe , M52N8RDye , M52N8RDze , M52N8TAxe , M52N8TAye , M52N8TAze , M52N8TDxss , & + M52N8TDyss , M52N8TDzss , M52N9FKxe , M52N9FKye , M52N9FKze , M52N9FMxe , M52N9FMye , & + M52N9FMze , M52N9MKxe , M52N9MKye , M52N9MKze , M52N9MMxe , M52N9MMye , M52N9MMze , & + M52N9RAxe , M52N9RAye , M52N9RAze , M52N9RDxe , M52N9RDye , M52N9RDze , M52N9TAxe , & + M52N9TAye , M52N9TAze , M52N9TDxss , M52N9TDyss , M52N9TDzss , M53N1FKxe , M53N1FKye , & + M53N1FKze , M53N1FMxe , M53N1FMye , M53N1FMze , M53N1MKxe , M53N1MKye , M53N1MKze , & + M53N1MMxe , M53N1MMye , M53N1MMze , M53N1RAxe , M53N1RAye , M53N1RAze , M53N1RDxe , & + M53N1RDye , M53N1RDze , M53N1TAxe , M53N1TAye , M53N1TAze , M53N1TDxss , M53N1TDyss , & + M53N1TDzss , M53N2FKxe , M53N2FKye , M53N2FKze , M53N2FMxe , M53N2FMye , M53N2FMze , & + M53N2MKxe , M53N2MKye , M53N2MKze , M53N2MMxe , M53N2MMye , M53N2MMze , M53N2RAxe , & + M53N2RAye , M53N2RAze , M53N2RDxe , M53N2RDye , M53N2RDze , M53N2TAxe , M53N2TAye , & + M53N2TAze , M53N2TDxss , M53N2TDyss , M53N2TDzss , M53N3FKxe , M53N3FKye , M53N3FKze , & + M53N3FMxe , M53N3FMye , M53N3FMze , M53N3MKxe , M53N3MKye , M53N3MKze , M53N3MMxe , & + M53N3MMye , M53N3MMze , M53N3RAxe , M53N3RAye , M53N3RAze , M53N3RDxe , M53N3RDye , & + M53N3RDze , M53N3TAxe , M53N3TAye , M53N3TAze , M53N3TDxss , M53N3TDyss , M53N3TDzss , & + M53N4FKxe , M53N4FKye , M53N4FKze , M53N4FMxe , M53N4FMye , M53N4FMze , M53N4MKxe , & + M53N4MKye , M53N4MKze , M53N4MMxe , M53N4MMye , M53N4MMze , M53N4RAxe , M53N4RAye , & + M53N4RAze , M53N4RDxe , M53N4RDye , M53N4RDze , M53N4TAxe , M53N4TAye , M53N4TAze , & + M53N4TDxss , M53N4TDyss , M53N4TDzss , M53N5FKxe , M53N5FKye , M53N5FKze , M53N5FMxe , & + M53N5FMye , M53N5FMze , M53N5MKxe , M53N5MKye , M53N5MKze , M53N5MMxe , M53N5MMye , & + M53N5MMze , M53N5RAxe , M53N5RAye , M53N5RAze , M53N5RDxe , M53N5RDye , M53N5RDze , & + M53N5TAxe , M53N5TAye , M53N5TAze , M53N5TDxss , M53N5TDyss , M53N5TDzss , M53N6FKxe , & + M53N6FKye , M53N6FKze , M53N6FMxe , M53N6FMye , M53N6FMze , M53N6MKxe , M53N6MKye , & + M53N6MKze , M53N6MMxe , M53N6MMye , M53N6MMze , M53N6RAxe , M53N6RAye , M53N6RAze , & + M53N6RDxe , M53N6RDye , M53N6RDze , M53N6TAxe , M53N6TAye , M53N6TAze , M53N6TDxss , & + M53N6TDyss , M53N6TDzss , M53N7FKxe , M53N7FKye , M53N7FKze , M53N7FMxe , M53N7FMye , & + M53N7FMze , M53N7MKxe , M53N7MKye , M53N7MKze , M53N7MMxe , M53N7MMye , M53N7MMze , & + M53N7RAxe , M53N7RAye , M53N7RAze , M53N7RDxe , M53N7RDye , M53N7RDze , M53N7TAxe , & + M53N7TAye , M53N7TAze , M53N7TDxss , M53N7TDyss , M53N7TDzss , M53N8FKxe , M53N8FKye , & + M53N8FKze , M53N8FMxe , M53N8FMye , M53N8FMze , M53N8MKxe , M53N8MKye , M53N8MKze , & + M53N8MMxe , M53N8MMye , M53N8MMze , M53N8RAxe , M53N8RAye , M53N8RAze , M53N8RDxe , & + M53N8RDye , M53N8RDze , M53N8TAxe , M53N8TAye , M53N8TAze , M53N8TDxss , M53N8TDyss , & + M53N8TDzss , M53N9FKxe , M53N9FKye , M53N9FKze , M53N9FMxe , M53N9FMye , M53N9FMze , & + M53N9MKxe , M53N9MKye , M53N9MKze , M53N9MMxe , M53N9MMye , M53N9MMze , M53N9RAxe , & + M53N9RAye , M53N9RAze , M53N9RDxe , M53N9RDye , M53N9RDze , M53N9TAxe , M53N9TAye , & + M53N9TAze , M53N9TDxss , M53N9TDyss , M53N9TDzss , M54N1FKxe , M54N1FKye , M54N1FKze , & + M54N1FMxe , M54N1FMye , M54N1FMze , M54N1MKxe , M54N1MKye , M54N1MKze , M54N1MMxe , & + M54N1MMye , M54N1MMze , M54N1RAxe , M54N1RAye , M54N1RAze , M54N1RDxe , M54N1RDye , & + M54N1RDze , M54N1TAxe , M54N1TAye , M54N1TAze , M54N1TDxss , M54N1TDyss , M54N1TDzss , & + M54N2FKxe , M54N2FKye , M54N2FKze , M54N2FMxe , M54N2FMye , M54N2FMze , M54N2MKxe , & + M54N2MKye , M54N2MKze , M54N2MMxe , M54N2MMye , M54N2MMze , M54N2RAxe , M54N2RAye , & + M54N2RAze , M54N2RDxe , M54N2RDye , M54N2RDze , M54N2TAxe , M54N2TAye , M54N2TAze , & + M54N2TDxss , M54N2TDyss , M54N2TDzss , M54N3FKxe , M54N3FKye , M54N3FKze , M54N3FMxe , & + M54N3FMye , M54N3FMze , M54N3MKxe , M54N3MKye , M54N3MKze , M54N3MMxe , M54N3MMye , & + M54N3MMze , M54N3RAxe , M54N3RAye , M54N3RAze , M54N3RDxe , M54N3RDye , M54N3RDze , & + M54N3TAxe , M54N3TAye , M54N3TAze , M54N3TDxss , M54N3TDyss , M54N3TDzss , M54N4FKxe , & + M54N4FKye , M54N4FKze , M54N4FMxe , M54N4FMye , M54N4FMze , M54N4MKxe , M54N4MKye , & + M54N4MKze , M54N4MMxe , M54N4MMye , M54N4MMze , M54N4RAxe , M54N4RAye , M54N4RAze , & + M54N4RDxe , M54N4RDye , M54N4RDze , M54N4TAxe , M54N4TAye , M54N4TAze , M54N4TDxss , & + M54N4TDyss , M54N4TDzss , M54N5FKxe , M54N5FKye , M54N5FKze , M54N5FMxe , M54N5FMye , & + M54N5FMze , M54N5MKxe , M54N5MKye , M54N5MKze , M54N5MMxe , M54N5MMye , M54N5MMze , & + M54N5RAxe , M54N5RAye , M54N5RAze , M54N5RDxe , M54N5RDye , M54N5RDze , M54N5TAxe , & + M54N5TAye , M54N5TAze , M54N5TDxss , M54N5TDyss , M54N5TDzss , M54N6FKxe , M54N6FKye , & + M54N6FKze , M54N6FMxe , M54N6FMye , M54N6FMze , M54N6MKxe , M54N6MKye , M54N6MKze , & + M54N6MMxe , M54N6MMye , M54N6MMze , M54N6RAxe , M54N6RAye , M54N6RAze , M54N6RDxe , & + M54N6RDye , M54N6RDze , M54N6TAxe , M54N6TAye , M54N6TAze , M54N6TDxss , M54N6TDyss , & + M54N6TDzss , M54N7FKxe , M54N7FKye , M54N7FKze , M54N7FMxe , M54N7FMye , M54N7FMze , & + M54N7MKxe , M54N7MKye , M54N7MKze , M54N7MMxe , M54N7MMye , M54N7MMze , M54N7RAxe , & + M54N7RAye , M54N7RAze , M54N7RDxe , M54N7RDye , M54N7RDze , M54N7TAxe , M54N7TAye , & + M54N7TAze , M54N7TDxss , M54N7TDyss , M54N7TDzss , M54N8FKxe , M54N8FKye , M54N8FKze , & + M54N8FMxe , M54N8FMye , M54N8FMze , M54N8MKxe , M54N8MKye , M54N8MKze , M54N8MMxe , & + M54N8MMye , M54N8MMze , M54N8RAxe , M54N8RAye , M54N8RAze , M54N8RDxe , M54N8RDye , & + M54N8RDze , M54N8TAxe , M54N8TAye , M54N8TAze , M54N8TDxss , M54N8TDyss , M54N8TDzss , & + M54N9FKxe , M54N9FKye , M54N9FKze , M54N9FMxe , M54N9FMye , M54N9FMze , M54N9MKxe , & + M54N9MKye , M54N9MKze , M54N9MMxe , M54N9MMye , M54N9MMze , M54N9RAxe , M54N9RAye , & + M54N9RAze , M54N9RDxe , M54N9RDye , M54N9RDze , M54N9TAxe , M54N9TAye , M54N9TAze , & + M54N9TDxss , M54N9TDyss , M54N9TDzss , M55N1FKxe , M55N1FKye , M55N1FKze , M55N1FMxe , & + M55N1FMye , M55N1FMze , M55N1MKxe , M55N1MKye /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry8(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M55N1MKze , M55N1MMxe , M55N1MMye , M55N1MMze , M55N1RAxe , M55N1RAye , M55N1RAze , & + M55N1RDxe , M55N1RDye , M55N1RDze , M55N1TAxe , M55N1TAye , M55N1TAze , M55N1TDxss , & + M55N1TDyss , M55N1TDzss , M55N2FKxe , M55N2FKye , M55N2FKze , M55N2FMxe , M55N2FMye , & + M55N2FMze , M55N2MKxe , M55N2MKye , M55N2MKze , M55N2MMxe , M55N2MMye , M55N2MMze , & + M55N2RAxe , M55N2RAye , M55N2RAze , M55N2RDxe , M55N2RDye , M55N2RDze , M55N2TAxe , & + M55N2TAye , M55N2TAze , M55N2TDxss , M55N2TDyss , M55N2TDzss , M55N3FKxe , M55N3FKye , & + M55N3FKze , M55N3FMxe , M55N3FMye , M55N3FMze , M55N3MKxe , M55N3MKye , M55N3MKze , & + M55N3MMxe , M55N3MMye , M55N3MMze , M55N3RAxe , M55N3RAye , M55N3RAze , M55N3RDxe , & + M55N3RDye , M55N3RDze , M55N3TAxe , M55N3TAye , M55N3TAze , M55N3TDxss , M55N3TDyss , & + M55N3TDzss , M55N4FKxe , M55N4FKye , M55N4FKze , M55N4FMxe , M55N4FMye , M55N4FMze , & + M55N4MKxe , M55N4MKye , M55N4MKze , M55N4MMxe , M55N4MMye , M55N4MMze , M55N4RAxe , & + M55N4RAye , M55N4RAze , M55N4RDxe , M55N4RDye , M55N4RDze , M55N4TAxe , M55N4TAye , & + M55N4TAze , M55N4TDxss , M55N4TDyss , M55N4TDzss , M55N5FKxe , M55N5FKye , M55N5FKze , & + M55N5FMxe , M55N5FMye , M55N5FMze , M55N5MKxe , M55N5MKye , M55N5MKze , M55N5MMxe , & + M55N5MMye , M55N5MMze , M55N5RAxe , M55N5RAye , M55N5RAze , M55N5RDxe , M55N5RDye , & + M55N5RDze , M55N5TAxe , M55N5TAye , M55N5TAze , M55N5TDxss , M55N5TDyss , M55N5TDzss , & + M55N6FKxe , M55N6FKye , M55N6FKze , M55N6FMxe , M55N6FMye , M55N6FMze , M55N6MKxe , & + M55N6MKye , M55N6MKze , M55N6MMxe , M55N6MMye , M55N6MMze , M55N6RAxe , M55N6RAye , & + M55N6RAze , M55N6RDxe , M55N6RDye , M55N6RDze , M55N6TAxe , M55N6TAye , M55N6TAze , & + M55N6TDxss , M55N6TDyss , M55N6TDzss , M55N7FKxe , M55N7FKye , M55N7FKze , M55N7FMxe , & + M55N7FMye , M55N7FMze , M55N7MKxe , M55N7MKye , M55N7MKze , M55N7MMxe , M55N7MMye , & + M55N7MMze , M55N7RAxe , M55N7RAye , M55N7RAze , M55N7RDxe , M55N7RDye , M55N7RDze , & + M55N7TAxe , M55N7TAye , M55N7TAze , M55N7TDxss , M55N7TDyss , M55N7TDzss , M55N8FKxe , & + M55N8FKye , M55N8FKze , M55N8FMxe , M55N8FMye , M55N8FMze , M55N8MKxe , M55N8MKye , & + M55N8MKze , M55N8MMxe , M55N8MMye , M55N8MMze , M55N8RAxe , M55N8RAye , M55N8RAze , & + M55N8RDxe , M55N8RDye , M55N8RDze , M55N8TAxe , M55N8TAye , M55N8TAze , M55N8TDxss , & + M55N8TDyss , M55N8TDzss , M55N9FKxe , M55N9FKye , M55N9FKze , M55N9FMxe , M55N9FMye , & + M55N9FMze , M55N9MKxe , M55N9MKye , M55N9MKze , M55N9MMxe , M55N9MMye , M55N9MMze , & + M55N9RAxe , M55N9RAye , M55N9RAze , M55N9RDxe , M55N9RDye , M55N9RDze , M55N9TAxe , & + M55N9TAye , M55N9TAze , M55N9TDxss , M55N9TDyss , M55N9TDzss , M56N1FKxe , M56N1FKye , & + M56N1FKze , M56N1FMxe , M56N1FMye , M56N1FMze , M56N1MKxe , M56N1MKye , M56N1MKze , & + M56N1MMxe , M56N1MMye , M56N1MMze , M56N1RAxe , M56N1RAye , M56N1RAze , M56N1RDxe , & + M56N1RDye , M56N1RDze , M56N1TAxe , M56N1TAye , M56N1TAze , M56N1TDxss , M56N1TDyss , & + M56N1TDzss , M56N2FKxe , M56N2FKye , M56N2FKze , M56N2FMxe , M56N2FMye , M56N2FMze , & + M56N2MKxe , M56N2MKye , M56N2MKze , M56N2MMxe , M56N2MMye , M56N2MMze , M56N2RAxe , & + M56N2RAye , M56N2RAze , M56N2RDxe , M56N2RDye , M56N2RDze , M56N2TAxe , M56N2TAye , & + M56N2TAze , M56N2TDxss , M56N2TDyss , M56N2TDzss , M56N3FKxe , M56N3FKye , M56N3FKze , & + M56N3FMxe , M56N3FMye , M56N3FMze , M56N3MKxe , M56N3MKye , M56N3MKze , M56N3MMxe , & + M56N3MMye , M56N3MMze , M56N3RAxe , M56N3RAye , M56N3RAze , M56N3RDxe , M56N3RDye , & + M56N3RDze , M56N3TAxe , M56N3TAye , M56N3TAze , M56N3TDxss , M56N3TDyss , M56N3TDzss , & + M56N4FKxe , M56N4FKye , M56N4FKze , M56N4FMxe , M56N4FMye , M56N4FMze , M56N4MKxe , & + M56N4MKye , M56N4MKze , M56N4MMxe , M56N4MMye , M56N4MMze , M56N4RAxe , M56N4RAye , & + M56N4RAze , M56N4RDxe , M56N4RDye , M56N4RDze , M56N4TAxe , M56N4TAye , M56N4TAze , & + M56N4TDxss , M56N4TDyss , M56N4TDzss , M56N5FKxe , M56N5FKye , M56N5FKze , M56N5FMxe , & + M56N5FMye , M56N5FMze , M56N5MKxe , M56N5MKye , M56N5MKze , M56N5MMxe , M56N5MMye , & + M56N5MMze , M56N5RAxe , M56N5RAye , M56N5RAze , M56N5RDxe , M56N5RDye , M56N5RDze , & + M56N5TAxe , M56N5TAye , M56N5TAze , M56N5TDxss , M56N5TDyss , M56N5TDzss , M56N6FKxe , & + M56N6FKye , M56N6FKze , M56N6FMxe , M56N6FMye , M56N6FMze , M56N6MKxe , M56N6MKye , & + M56N6MKze , M56N6MMxe , M56N6MMye , M56N6MMze , M56N6RAxe , M56N6RAye , M56N6RAze , & + M56N6RDxe , M56N6RDye , M56N6RDze , M56N6TAxe , M56N6TAye , M56N6TAze , M56N6TDxss , & + M56N6TDyss , M56N6TDzss , M56N7FKxe , M56N7FKye , M56N7FKze , M56N7FMxe , M56N7FMye , & + M56N7FMze , M56N7MKxe , M56N7MKye , M56N7MKze , M56N7MMxe , M56N7MMye , M56N7MMze , & + M56N7RAxe , M56N7RAye , M56N7RAze , M56N7RDxe , M56N7RDye , M56N7RDze , M56N7TAxe , & + M56N7TAye , M56N7TAze , M56N7TDxss , M56N7TDyss , M56N7TDzss , M56N8FKxe , M56N8FKye , & + M56N8FKze , M56N8FMxe , M56N8FMye , M56N8FMze , M56N8MKxe , M56N8MKye , M56N8MKze , & + M56N8MMxe , M56N8MMye , M56N8MMze , M56N8RAxe , M56N8RAye , M56N8RAze , M56N8RDxe , & + M56N8RDye , M56N8RDze , M56N8TAxe , M56N8TAye , M56N8TAze , M56N8TDxss , M56N8TDyss , & + M56N8TDzss , M56N9FKxe , M56N9FKye , M56N9FKze , M56N9FMxe , M56N9FMye , M56N9FMze , & + M56N9MKxe , M56N9MKye , M56N9MKze , M56N9MMxe , M56N9MMye , M56N9MMze , M56N9RAxe , & + M56N9RAye , M56N9RAze , M56N9RDxe , M56N9RDye , M56N9RDze , M56N9TAxe , M56N9TAye , & + M56N9TAze , M56N9TDxss , M56N9TDyss , M56N9TDzss , M57N1FKxe , M57N1FKye , M57N1FKze , & + M57N1FMxe , M57N1FMye , M57N1FMze , M57N1MKxe , M57N1MKye , M57N1MKze , M57N1MMxe , & + M57N1MMye , M57N1MMze , M57N1RAxe , M57N1RAye , M57N1RAze , M57N1RDxe , M57N1RDye , & + M57N1RDze , M57N1TAxe , M57N1TAye , M57N1TAze , M57N1TDxss , M57N1TDyss , M57N1TDzss , & + M57N2FKxe , M57N2FKye , M57N2FKze , M57N2FMxe , M57N2FMye , M57N2FMze , M57N2MKxe , & + M57N2MKye , M57N2MKze , M57N2MMxe , M57N2MMye , M57N2MMze , M57N2RAxe , M57N2RAye , & + M57N2RAze , M57N2RDxe , M57N2RDye , M57N2RDze , M57N2TAxe , M57N2TAye , M57N2TAze , & + M57N2TDxss , M57N2TDyss , M57N2TDzss , M57N3FKxe , M57N3FKye , M57N3FKze , M57N3FMxe , & + M57N3FMye , M57N3FMze , M57N3MKxe , M57N3MKye , M57N3MKze , M57N3MMxe , M57N3MMye , & + M57N3MMze , M57N3RAxe , M57N3RAye , M57N3RAze , M57N3RDxe , M57N3RDye , M57N3RDze , & + M57N3TAxe , M57N3TAye , M57N3TAze , M57N3TDxss , M57N3TDyss , M57N3TDzss , M57N4FKxe , & + M57N4FKye , M57N4FKze , M57N4FMxe , M57N4FMye , M57N4FMze , M57N4MKxe , M57N4MKye , & + M57N4MKze , M57N4MMxe , M57N4MMye , M57N4MMze , M57N4RAxe , M57N4RAye , M57N4RAze , & + M57N4RDxe , M57N4RDye , M57N4RDze , M57N4TAxe , M57N4TAye , M57N4TAze , M57N4TDxss , & + M57N4TDyss , M57N4TDzss , M57N5FKxe , M57N5FKye , M57N5FKze , M57N5FMxe , M57N5FMye , & + M57N5FMze , M57N5MKxe , M57N5MKye , M57N5MKze , M57N5MMxe , M57N5MMye , M57N5MMze , & + M57N5RAxe , M57N5RAye , M57N5RAze , M57N5RDxe , M57N5RDye , M57N5RDze , M57N5TAxe , & + M57N5TAye , M57N5TAze , M57N5TDxss , M57N5TDyss , M57N5TDzss , M57N6FKxe , M57N6FKye , & + M57N6FKze , M57N6FMxe , M57N6FMye , M57N6FMze , M57N6MKxe , M57N6MKye , M57N6MKze , & + M57N6MMxe , M57N6MMye , M57N6MMze , M57N6RAxe , M57N6RAye , M57N6RAze , M57N6RDxe , & + M57N6RDye , M57N6RDze , M57N6TAxe , M57N6TAye , M57N6TAze , M57N6TDxss , M57N6TDyss , & + M57N6TDzss , M57N7FKxe , M57N7FKye , M57N7FKze , M57N7FMxe , M57N7FMye , M57N7FMze , & + M57N7MKxe , M57N7MKye , M57N7MKze , M57N7MMxe , M57N7MMye , M57N7MMze , M57N7RAxe , & + M57N7RAye , M57N7RAze , M57N7RDxe , M57N7RDye , M57N7RDze , M57N7TAxe , M57N7TAye , & + M57N7TAze , M57N7TDxss , M57N7TDyss , M57N7TDzss , M57N8FKxe , M57N8FKye , M57N8FKze , & + M57N8FMxe , M57N8FMye , M57N8FMze , M57N8MKxe , M57N8MKye , M57N8MKze , M57N8MMxe , & + M57N8MMye , M57N8MMze , M57N8RAxe , M57N8RAye , M57N8RAze , M57N8RDxe , M57N8RDye , & + M57N8RDze , M57N8TAxe , M57N8TAye , M57N8TAze , M57N8TDxss , M57N8TDyss , M57N8TDzss , & + M57N9FKxe , M57N9FKye , M57N9FKze , M57N9FMxe , M57N9FMye , M57N9FMze , M57N9MKxe , & + M57N9MKye , M57N9MKze , M57N9MMxe , M57N9MMye , M57N9MMze , M57N9RAxe , M57N9RAye , & + M57N9RAze , M57N9RDxe , M57N9RDye , M57N9RDze , M57N9TAxe , M57N9TAye , M57N9TAze , & + M57N9TDxss , M57N9TDyss , M57N9TDzss , M58N1FKxe , M58N1FKye , M58N1FKze , M58N1FMxe , & + M58N1FMye , M58N1FMze , M58N1MKxe , M58N1MKye , M58N1MKze , M58N1MMxe , M58N1MMye , & + M58N1MMze , M58N1RAxe , M58N1RAye , M58N1RAze , M58N1RDxe , M58N1RDye , M58N1RDze , & + M58N1TAxe , M58N1TAye , M58N1TAze , M58N1TDxss , M58N1TDyss , M58N1TDzss , M58N2FKxe , & + M58N2FKye , M58N2FKze , M58N2FMxe , M58N2FMye , M58N2FMze , M58N2MKxe , M58N2MKye , & + M58N2MKze , M58N2MMxe , M58N2MMye , M58N2MMze , M58N2RAxe , M58N2RAye , M58N2RAze , & + M58N2RDxe , M58N2RDye , M58N2RDze , M58N2TAxe , M58N2TAye , M58N2TAze , M58N2TDxss , & + M58N2TDyss , M58N2TDzss , M58N3FKxe , M58N3FKye , M58N3FKze , M58N3FMxe , M58N3FMye , & + M58N3FMze , M58N3MKxe , M58N3MKye , M58N3MKze , M58N3MMxe , M58N3MMye , M58N3MMze , & + M58N3RAxe , M58N3RAye , M58N3RAze , M58N3RDxe , M58N3RDye , M58N3RDze , M58N3TAxe , & + M58N3TAye , M58N3TAze , M58N3TDxss , M58N3TDyss , M58N3TDzss , M58N4FKxe , M58N4FKye , & + M58N4FKze , M58N4FMxe , M58N4FMye , M58N4FMze , M58N4MKxe , M58N4MKye , M58N4MKze , & + M58N4MMxe , M58N4MMye , M58N4MMze , M58N4RAxe , M58N4RAye , M58N4RAze , M58N4RDxe , & + M58N4RDye , M58N4RDze , M58N4TAxe , M58N4TAye , M58N4TAze , M58N4TDxss , M58N4TDyss , & + M58N4TDzss , M58N5FKxe , M58N5FKye , M58N5FKze , M58N5FMxe , M58N5FMye , M58N5FMze , & + M58N5MKxe , M58N5MKye , M58N5MKze , M58N5MMxe , M58N5MMye , M58N5MMze , M58N5RAxe , & + M58N5RAye , M58N5RAze , M58N5RDxe , M58N5RDye , M58N5RDze , M58N5TAxe , M58N5TAye , & + M58N5TAze , M58N5TDxss , M58N5TDyss , M58N5TDzss , M58N6FKxe , M58N6FKye , M58N6FKze , & + M58N6FMxe , M58N6FMye , M58N6FMze , M58N6MKxe , M58N6MKye , M58N6MKze , M58N6MMxe , & + M58N6MMye , M58N6MMze , M58N6RAxe , M58N6RAye , M58N6RAze , M58N6RDxe , M58N6RDye , & + M58N6RDze , M58N6TAxe , M58N6TAye , M58N6TAze , M58N6TDxss , M58N6TDyss , M58N6TDzss , & + M58N7FKxe , M58N7FKye , M58N7FKze , M58N7FMxe , M58N7FMye , M58N7FMze , M58N7MKxe , & + M58N7MKye , M58N7MKze , M58N7MMxe , M58N7MMye , M58N7MMze , M58N7RAxe , M58N7RAye , & + M58N7RAze , M58N7RDxe , M58N7RDye , M58N7RDze , M58N7TAxe , M58N7TAye , M58N7TAze , & + M58N7TDxss , M58N7TDyss , M58N7TDzss , M58N8FKxe , M58N8FKye , M58N8FKze , M58N8FMxe , & + M58N8FMye , M58N8FMze , M58N8MKxe , M58N8MKye , M58N8MKze , M58N8MMxe , M58N8MMye , & + M58N8MMze , M58N8RAxe , M58N8RAye , M58N8RAze , M58N8RDxe , M58N8RDye , M58N8RDze , & + M58N8TAxe , M58N8TAye , M58N8TAze , M58N8TDxss , M58N8TDyss , M58N8TDzss , M58N9FKxe , & + M58N9FKye , M58N9FKze , M58N9FMxe , M58N9FMye , M58N9FMze , M58N9MKxe , M58N9MKye , & + M58N9MKze , M58N9MMxe , M58N9MMye , M58N9MMze , M58N9RAxe , M58N9RAye , M58N9RAze , & + M58N9RDxe , M58N9RDye , M58N9RDze , M58N9TAxe , M58N9TAye , M58N9TAze , M58N9TDxss , & + M58N9TDyss , M58N9TDzss , M59N1FKxe , M59N1FKye , M59N1FKze , M59N1FMxe , M59N1FMye , & + M59N1FMze , M59N1MKxe , M59N1MKye , M59N1MKze , M59N1MMxe , M59N1MMye , M59N1MMze , & + M59N1RAxe , M59N1RAye , M59N1RAze , M59N1RDxe , M59N1RDye , M59N1RDze , M59N1TAxe , & + M59N1TAye , M59N1TAze , M59N1TDxss , M59N1TDyss , M59N1TDzss , M59N2FKxe , M59N2FKye , & + M59N2FKze , M59N2FMxe , M59N2FMye , M59N2FMze , M59N2MKxe , M59N2MKye , M59N2MKze , & + M59N2MMxe , M59N2MMye , M59N2MMze , M59N2RAxe , M59N2RAye , M59N2RAze , M59N2RDxe , & + M59N2RDye , M59N2RDze , M59N2TAxe , M59N2TAye , M59N2TAze , M59N2TDxss , M59N2TDyss , & + M59N2TDzss , M59N3FKxe , M59N3FKye , M59N3FKze , M59N3FMxe , M59N3FMye , M59N3FMze , & + M59N3MKxe , M59N3MKye , M59N3MKze , M59N3MMxe , M59N3MMye , M59N3MMze , M59N3RAxe , & + M59N3RAye , M59N3RAze , M59N3RDxe , M59N3RDye , M59N3RDze , M59N3TAxe , M59N3TAye , & + M59N3TAze , M59N3TDxss , M59N3TDyss , M59N3TDzss , M59N4FKxe , M59N4FKye , M59N4FKze , & + M59N4FMxe , M59N4FMye , M59N4FMze , M59N4MKxe , M59N4MKye , M59N4MKze , M59N4MMxe , & + M59N4MMye , M59N4MMze , M59N4RAxe , M59N4RAye , M59N4RAze , M59N4RDxe , M59N4RDye , & + M59N4RDze , M59N4TAxe , M59N4TAye , M59N4TAze , M59N4TDxss , M59N4TDyss , M59N4TDzss , & + M59N5FKxe , M59N5FKye , M59N5FKze , M59N5FMxe , M59N5FMye , M59N5FMze , M59N5MKxe , & + M59N5MKye , M59N5MKze , M59N5MMxe , M59N5MMye , M59N5MMze , M59N5RAxe , M59N5RAye , & + M59N5RAze , M59N5RDxe , M59N5RDye , M59N5RDze , M59N5TAxe , M59N5TAye , M59N5TAze , & + M59N5TDxss , M59N5TDyss , M59N5TDzss , M59N6FKxe , M59N6FKye , M59N6FKze , M59N6FMxe , & + M59N6FMye , M59N6FMze , M59N6MKxe , M59N6MKye , M59N6MKze , M59N6MMxe , M59N6MMye , & + M59N6MMze , M59N6RAxe , M59N6RAye , M59N6RAze , M59N6RDxe , M59N6RDye , M59N6RDze , & + M59N6TAxe , M59N6TAye , M59N6TAze , M59N6TDxss , M59N6TDyss , M59N6TDzss , M59N7FKxe , & + M59N7FKye , M59N7FKze , M59N7FMxe , M59N7FMye , M59N7FMze , M59N7MKxe , M59N7MKye , & + M59N7MKze , M59N7MMxe , M59N7MMye , M59N7MMze , M59N7RAxe , M59N7RAye , M59N7RAze , & + M59N7RDxe , M59N7RDye , M59N7RDze , M59N7TAxe , M59N7TAye , M59N7TAze , M59N7TDxss , & + M59N7TDyss , M59N7TDzss , M59N8FKxe , M59N8FKye , M59N8FKze , M59N8FMxe , M59N8FMye , & + M59N8FMze , M59N8MKxe , M59N8MKye , M59N8MKze , M59N8MMxe , M59N8MMye , M59N8MMze , & + M59N8RAxe , M59N8RAye , M59N8RAze , M59N8RDxe , M59N8RDye , M59N8RDze , M59N8TAxe , & + M59N8TAye , M59N8TAze , M59N8TDxss , M59N8TDyss , M59N8TDzss , M59N9FKxe , M59N9FKye , & + M59N9FKze , M59N9FMxe , M59N9FMye , M59N9FMze , M59N9MKxe , M59N9MKye , M59N9MKze , & + M59N9MMxe , M59N9MMye , M59N9MMze , M59N9RAxe , M59N9RAye , M59N9RAze , M59N9RDxe , & + M59N9RDye , M59N9RDze , M59N9TAxe , M59N9TAye , M59N9TAze , M59N9TDxss , M59N9TDyss , & + M59N9TDzss , M60N1FKxe , M60N1FKye , M60N1FKze , M60N1FMxe , M60N1FMye , M60N1FMze , & + M60N1MKxe , M60N1MKye , M60N1MKze , M60N1MMxe , M60N1MMye , M60N1MMze , M60N1RAxe , & + M60N1RAye , M60N1RAze , M60N1RDxe , M60N1RDye , M60N1RDze , M60N1TAxe , M60N1TAye , & + M60N1TAze , M60N1TDxss , M60N1TDyss , M60N1TDzss , M60N2FKxe , M60N2FKye , M60N2FKze , & + M60N2FMxe , M60N2FMye , M60N2FMze , M60N2MKxe , M60N2MKye , M60N2MKze , M60N2MMxe , & + M60N2MMye , M60N2MMze , M60N2RAxe , M60N2RAye , M60N2RAze , M60N2RDxe , M60N2RDye , & + M60N2RDze , M60N2TAxe , M60N2TAye , M60N2TAze , M60N2TDxss , M60N2TDyss , M60N2TDzss , & + M60N3FKxe , M60N3FKye , M60N3FKze , M60N3FMxe , M60N3FMye , M60N3FMze , M60N3MKxe , & + M60N3MKye , M60N3MKze , M60N3MMxe , M60N3MMye , M60N3MMze , M60N3RAxe , M60N3RAye , & + M60N3RAze , M60N3RDxe , M60N3RDye , M60N3RDze , M60N3TAxe , M60N3TAye , M60N3TAze , & + M60N3TDxss , M60N3TDyss , M60N3TDzss , M60N4FKxe , M60N4FKye , M60N4FKze , M60N4FMxe , & + M60N4FMye , M60N4FMze , M60N4MKxe , M60N4MKye , M60N4MKze , M60N4MMxe , M60N4MMye , & + M60N4MMze , M60N4RAxe , M60N4RAye , M60N4RAze , M60N4RDxe , M60N4RDye , M60N4RDze , & + M60N4TAxe , M60N4TAye , M60N4TAze , M60N4TDxss , M60N4TDyss , M60N4TDzss , M60N5FKxe , & + M60N5FKye , M60N5FKze , M60N5FMxe , M60N5FMye , M60N5FMze , M60N5MKxe , M60N5MKye , & + M60N5MKze , M60N5MMxe , M60N5MMye , M60N5MMze , M60N5RAxe , M60N5RAye , M60N5RAze , & + M60N5RDxe , M60N5RDye , M60N5RDze , M60N5TAxe , M60N5TAye , M60N5TAze , M60N5TDxss , & + M60N5TDyss , M60N5TDzss , M60N6FKxe , M60N6FKye , M60N6FKze , M60N6FMxe , M60N6FMye , & + M60N6FMze , M60N6MKxe , M60N6MKye , M60N6MKze , M60N6MMxe , M60N6MMye , M60N6MMze , & + M60N6RAxe , M60N6RAye , M60N6RAze , M60N6RDxe , M60N6RDye , M60N6RDze , M60N6TAxe , & + M60N6TAye , M60N6TAze , M60N6TDxss , M60N6TDyss , M60N6TDzss , M60N7FKxe , M60N7FKye , & + M60N7FKze , M60N7FMxe , M60N7FMye , M60N7FMze , M60N7MKxe , M60N7MKye , M60N7MKze , & + M60N7MMxe , M60N7MMye , M60N7MMze , M60N7RAxe , M60N7RAye , M60N7RAze , M60N7RDxe , & + M60N7RDye , M60N7RDze , M60N7TAxe , M60N7TAye , M60N7TAze , M60N7TDxss , M60N7TDyss , & + M60N7TDzss , M60N8FKxe , M60N8FKye , M60N8FKze , M60N8FMxe , M60N8FMye , M60N8FMze , & + M60N8MKxe , M60N8MKye , M60N8MKze , M60N8MMxe , M60N8MMye , M60N8MMze , M60N8RAxe , & + M60N8RAye , M60N8RAze , M60N8RDxe , M60N8RDye , M60N8RDze , M60N8TAxe , M60N8TAye , & + M60N8TAze , M60N8TDxss , M60N8TDyss , M60N8TDzss , M60N9FKxe , M60N9FKye , M60N9FKze , & + M60N9FMxe , M60N9FMye , M60N9FMze , M60N9MKxe , M60N9MKye , M60N9MKze , M60N9MMxe , & + M60N9MMye , M60N9MMze , M60N9RAxe , M60N9RAye , M60N9RAze , M60N9RDxe , M60N9RDye , & + M60N9RDze , M60N9TAxe , M60N9TAye , M60N9TAze , M60N9TDxss , M60N9TDyss , M60N9TDzss , & + M61N1FKxe , M61N1FKye , M61N1FKze , M61N1FMxe , M61N1FMye , M61N1FMze , M61N1MKxe , & + M61N1MKye , M61N1MKze , M61N1MMxe , M61N1MMye , M61N1MMze , M61N1RAxe , M61N1RAye , & + M61N1RAze , M61N1RDxe , M61N1RDye , M61N1RDze , M61N1TAxe , M61N1TAye , M61N1TAze , & + M61N1TDxss , M61N1TDyss , M61N1TDzss , M61N2FKxe , M61N2FKye , M61N2FKze , M61N2FMxe , & + M61N2FMye , M61N2FMze , M61N2MKxe , M61N2MKye , M61N2MKze , M61N2MMxe , M61N2MMye , & + M61N2MMze , M61N2RAxe , M61N2RAye , M61N2RAze , M61N2RDxe , M61N2RDye , M61N2RDze , & + M61N2TAxe , M61N2TAye , M61N2TAze , M61N2TDxss , M61N2TDyss , M61N2TDzss , M61N3FKxe , & + M61N3FKye , M61N3FKze , M61N3FMxe , M61N3FMye , M61N3FMze , M61N3MKxe , M61N3MKye , & + M61N3MKze , M61N3MMxe , M61N3MMye , M61N3MMze , M61N3RAxe , M61N3RAye , M61N3RAze , & + M61N3RDxe , M61N3RDye , M61N3RDze , M61N3TAxe , M61N3TAye , M61N3TAze , M61N3TDxss , & + M61N3TDyss , M61N3TDzss , M61N4FKxe , M61N4FKye , M61N4FKze , M61N4FMxe , M61N4FMye , & + M61N4FMze , M61N4MKxe , M61N4MKye , M61N4MKze , M61N4MMxe , M61N4MMye , M61N4MMze , & + M61N4RAxe , M61N4RAye , M61N4RAze , M61N4RDxe , M61N4RDye , M61N4RDze , M61N4TAxe , & + M61N4TAye , M61N4TAze , M61N4TDxss , M61N4TDyss , M61N4TDzss , M61N5FKxe , M61N5FKye , & + M61N5FKze , M61N5FMxe , M61N5FMye , M61N5FMze , M61N5MKxe , M61N5MKye , M61N5MKze , & + M61N5MMxe , M61N5MMye , M61N5MMze , M61N5RAxe , M61N5RAye , M61N5RAze , M61N5RDxe , & + M61N5RDye , M61N5RDze , M61N5TAxe , M61N5TAye , M61N5TAze , M61N5TDxss , M61N5TDyss , & + M61N5TDzss , M61N6FKxe , M61N6FKye , M61N6FKze , M61N6FMxe , M61N6FMye , M61N6FMze , & + M61N6MKxe , M61N6MKye , M61N6MKze , M61N6MMxe , M61N6MMye , M61N6MMze , M61N6RAxe , & + M61N6RAye , M61N6RAze , M61N6RDxe , M61N6RDye , M61N6RDze , M61N6TAxe , M61N6TAye , & + M61N6TAze , M61N6TDxss , M61N6TDyss , M61N6TDzss , M61N7FKxe , M61N7FKye , M61N7FKze , & + M61N7FMxe , M61N7FMye , M61N7FMze , M61N7MKxe , M61N7MKye , M61N7MKze , M61N7MMxe , & + M61N7MMye , M61N7MMze , M61N7RAxe , M61N7RAye , M61N7RAze , M61N7RDxe , M61N7RDye , & + M61N7RDze , M61N7TAxe , M61N7TAye , M61N7TAze , M61N7TDxss , M61N7TDyss , M61N7TDzss , & + M61N8FKxe , M61N8FKye , M61N8FKze , M61N8FMxe , M61N8FMye , M61N8FMze , M61N8MKxe , & + M61N8MKye , M61N8MKze , M61N8MMxe , M61N8MMye , M61N8MMze , M61N8RAxe , M61N8RAye , & + M61N8RAze , M61N8RDxe , M61N8RDye , M61N8RDze , M61N8TAxe , M61N8TAye , M61N8TAze , & + M61N8TDxss , M61N8TDyss , M61N8TDzss , M61N9FKxe , M61N9FKye , M61N9FKze , M61N9FMxe , & + M61N9FMye , M61N9FMze , M61N9MKxe , M61N9MKye , M61N9MKze , M61N9MMxe , M61N9MMye , & + M61N9MMze , M61N9RAxe , M61N9RAye , M61N9RAze , M61N9RDxe , M61N9RDye , M61N9RDze , & + M61N9TAxe , M61N9TAye , M61N9TAze , M61N9TDxss , M61N9TDyss , M61N9TDzss , M62N1FKxe , & + M62N1FKye , M62N1FKze , M62N1FMxe , M62N1FMye , M62N1FMze , M62N1MKxe , M62N1MKye , & + M62N1MKze , M62N1MMxe , M62N1MMye , M62N1MMze , M62N1RAxe , M62N1RAye , M62N1RAze , & + M62N1RDxe , M62N1RDye , M62N1RDze , M62N1TAxe , M62N1TAye , M62N1TAze , M62N1TDxss , & + M62N1TDyss , M62N1TDzss , M62N2FKxe , M62N2FKye , M62N2FKze , M62N2FMxe , M62N2FMye , & + M62N2FMze , M62N2MKxe , M62N2MKye , M62N2MKze , M62N2MMxe , M62N2MMye , M62N2MMze , & + M62N2RAxe , M62N2RAye , M62N2RAze , M62N2RDxe , M62N2RDye , M62N2RDze , M62N2TAxe , & + M62N2TAye , M62N2TAze , M62N2TDxss , M62N2TDyss , M62N2TDzss , M62N3FKxe , M62N3FKye , & + M62N3FKze , M62N3FMxe , M62N3FMye , M62N3FMze , M62N3MKxe , M62N3MKye , M62N3MKze , & + M62N3MMxe , M62N3MMye , M62N3MMze , M62N3RAxe , M62N3RAye , M62N3RAze , M62N3RDxe , & + M62N3RDye , M62N3RDze , M62N3TAxe , M62N3TAye , M62N3TAze , M62N3TDxss , M62N3TDyss , & + M62N3TDzss , M62N4FKxe , M62N4FKye , M62N4FKze , M62N4FMxe , M62N4FMye , M62N4FMze , & + M62N4MKxe , M62N4MKye , M62N4MKze , M62N4MMxe , M62N4MMye , M62N4MMze , M62N4RAxe , & + M62N4RAye , M62N4RAze , M62N4RDxe , M62N4RDye , M62N4RDze , M62N4TAxe , M62N4TAye , & + M62N4TAze , M62N4TDxss , M62N4TDyss , M62N4TDzss , M62N5FKxe , M62N5FKye , M62N5FKze , & + M62N5FMxe , M62N5FMye , M62N5FMze , M62N5MKxe , M62N5MKye , M62N5MKze , M62N5MMxe , & + M62N5MMye , M62N5MMze , M62N5RAxe , M62N5RAye , M62N5RAze , M62N5RDxe , M62N5RDye , & + M62N5RDze , M62N5TAxe , M62N5TAye , M62N5TAze , M62N5TDxss , M62N5TDyss , M62N5TDzss , & + M62N6FKxe , M62N6FKye , M62N6FKze , M62N6FMxe , M62N6FMye , M62N6FMze , M62N6MKxe , & + M62N6MKye , M62N6MKze , M62N6MMxe , M62N6MMye , M62N6MMze , M62N6RAxe , M62N6RAye , & + M62N6RAze , M62N6RDxe , M62N6RDye , M62N6RDze , M62N6TAxe , M62N6TAye , M62N6TAze , & + M62N6TDxss , M62N6TDyss , M62N6TDzss , M62N7FKxe , M62N7FKye , M62N7FKze , M62N7FMxe , & + M62N7FMye , M62N7FMze , M62N7MKxe , M62N7MKye , M62N7MKze , M62N7MMxe , M62N7MMye , & + M62N7MMze , M62N7RAxe , M62N7RAye , M62N7RAze , M62N7RDxe , M62N7RDye , M62N7RDze , & + M62N7TAxe , M62N7TAye , M62N7TAze , M62N7TDxss /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry9(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M62N7TDyss , M62N7TDzss , M62N8FKxe , M62N8FKye , M62N8FKze , M62N8FMxe , M62N8FMye , & + M62N8FMze , M62N8MKxe , M62N8MKye , M62N8MKze , M62N8MMxe , M62N8MMye , M62N8MMze , & + M62N8RAxe , M62N8RAye , M62N8RAze , M62N8RDxe , M62N8RDye , M62N8RDze , M62N8TAxe , & + M62N8TAye , M62N8TAze , M62N8TDxss , M62N8TDyss , M62N8TDzss , M62N9FKxe , M62N9FKye , & + M62N9FKze , M62N9FMxe , M62N9FMye , M62N9FMze , M62N9MKxe , M62N9MKye , M62N9MKze , & + M62N9MMxe , M62N9MMye , M62N9MMze , M62N9RAxe , M62N9RAye , M62N9RAze , M62N9RDxe , & + M62N9RDye , M62N9RDze , M62N9TAxe , M62N9TAye , M62N9TAze , M62N9TDxss , M62N9TDyss , & + M62N9TDzss , M63N1FKxe , M63N1FKye , M63N1FKze , M63N1FMxe , M63N1FMye , M63N1FMze , & + M63N1MKxe , M63N1MKye , M63N1MKze , M63N1MMxe , M63N1MMye , M63N1MMze , M63N1RAxe , & + M63N1RAye , M63N1RAze , M63N1RDxe , M63N1RDye , M63N1RDze , M63N1TAxe , M63N1TAye , & + M63N1TAze , M63N1TDxss , M63N1TDyss , M63N1TDzss , M63N2FKxe , M63N2FKye , M63N2FKze , & + M63N2FMxe , M63N2FMye , M63N2FMze , M63N2MKxe , M63N2MKye , M63N2MKze , M63N2MMxe , & + M63N2MMye , M63N2MMze , M63N2RAxe , M63N2RAye , M63N2RAze , M63N2RDxe , M63N2RDye , & + M63N2RDze , M63N2TAxe , M63N2TAye , M63N2TAze , M63N2TDxss , M63N2TDyss , M63N2TDzss , & + M63N3FKxe , M63N3FKye , M63N3FKze , M63N3FMxe , M63N3FMye , M63N3FMze , M63N3MKxe , & + M63N3MKye , M63N3MKze , M63N3MMxe , M63N3MMye , M63N3MMze , M63N3RAxe , M63N3RAye , & + M63N3RAze , M63N3RDxe , M63N3RDye , M63N3RDze , M63N3TAxe , M63N3TAye , M63N3TAze , & + M63N3TDxss , M63N3TDyss , M63N3TDzss , M63N4FKxe , M63N4FKye , M63N4FKze , M63N4FMxe , & + M63N4FMye , M63N4FMze , M63N4MKxe , M63N4MKye , M63N4MKze , M63N4MMxe , M63N4MMye , & + M63N4MMze , M63N4RAxe , M63N4RAye , M63N4RAze , M63N4RDxe , M63N4RDye , M63N4RDze , & + M63N4TAxe , M63N4TAye , M63N4TAze , M63N4TDxss , M63N4TDyss , M63N4TDzss , M63N5FKxe , & + M63N5FKye , M63N5FKze , M63N5FMxe , M63N5FMye , M63N5FMze , M63N5MKxe , M63N5MKye , & + M63N5MKze , M63N5MMxe , M63N5MMye , M63N5MMze , M63N5RAxe , M63N5RAye , M63N5RAze , & + M63N5RDxe , M63N5RDye , M63N5RDze , M63N5TAxe , M63N5TAye , M63N5TAze , M63N5TDxss , & + M63N5TDyss , M63N5TDzss , M63N6FKxe , M63N6FKye , M63N6FKze , M63N6FMxe , M63N6FMye , & + M63N6FMze , M63N6MKxe , M63N6MKye , M63N6MKze , M63N6MMxe , M63N6MMye , M63N6MMze , & + M63N6RAxe , M63N6RAye , M63N6RAze , M63N6RDxe , M63N6RDye , M63N6RDze , M63N6TAxe , & + M63N6TAye , M63N6TAze , M63N6TDxss , M63N6TDyss , M63N6TDzss , M63N7FKxe , M63N7FKye , & + M63N7FKze , M63N7FMxe , M63N7FMye , M63N7FMze , M63N7MKxe , M63N7MKye , M63N7MKze , & + M63N7MMxe , M63N7MMye , M63N7MMze , M63N7RAxe , M63N7RAye , M63N7RAze , M63N7RDxe , & + M63N7RDye , M63N7RDze , M63N7TAxe , M63N7TAye , M63N7TAze , M63N7TDxss , M63N7TDyss , & + M63N7TDzss , M63N8FKxe , M63N8FKye , M63N8FKze , M63N8FMxe , M63N8FMye , M63N8FMze , & + M63N8MKxe , M63N8MKye , M63N8MKze , M63N8MMxe , M63N8MMye , M63N8MMze , M63N8RAxe , & + M63N8RAye , M63N8RAze , M63N8RDxe , M63N8RDye , M63N8RDze , M63N8TAxe , M63N8TAye , & + M63N8TAze , M63N8TDxss , M63N8TDyss , M63N8TDzss , M63N9FKxe , M63N9FKye , M63N9FKze , & + M63N9FMxe , M63N9FMye , M63N9FMze , M63N9MKxe , M63N9MKye , M63N9MKze , M63N9MMxe , & + M63N9MMye , M63N9MMze , M63N9RAxe , M63N9RAye , M63N9RAze , M63N9RDxe , M63N9RDye , & + M63N9RDze , M63N9TAxe , M63N9TAye , M63N9TAze , M63N9TDxss , M63N9TDyss , M63N9TDzss , & + M64N1FKxe , M64N1FKye , M64N1FKze , M64N1FMxe , M64N1FMye , M64N1FMze , M64N1MKxe , & + M64N1MKye , M64N1MKze , M64N1MMxe , M64N1MMye , M64N1MMze , M64N1RAxe , M64N1RAye , & + M64N1RAze , M64N1RDxe , M64N1RDye , M64N1RDze , M64N1TAxe , M64N1TAye , M64N1TAze , & + M64N1TDxss , M64N1TDyss , M64N1TDzss , M64N2FKxe , M64N2FKye , M64N2FKze , M64N2FMxe , & + M64N2FMye , M64N2FMze , M64N2MKxe , M64N2MKye , M64N2MKze , M64N2MMxe , M64N2MMye , & + M64N2MMze , M64N2RAxe , M64N2RAye , M64N2RAze , M64N2RDxe , M64N2RDye , M64N2RDze , & + M64N2TAxe , M64N2TAye , M64N2TAze , M64N2TDxss , M64N2TDyss , M64N2TDzss , M64N3FKxe , & + M64N3FKye , M64N3FKze , M64N3FMxe , M64N3FMye , M64N3FMze , M64N3MKxe , M64N3MKye , & + M64N3MKze , M64N3MMxe , M64N3MMye , M64N3MMze , M64N3RAxe , M64N3RAye , M64N3RAze , & + M64N3RDxe , M64N3RDye , M64N3RDze , M64N3TAxe , M64N3TAye , M64N3TAze , M64N3TDxss , & + M64N3TDyss , M64N3TDzss , M64N4FKxe , M64N4FKye , M64N4FKze , M64N4FMxe , M64N4FMye , & + M64N4FMze , M64N4MKxe , M64N4MKye , M64N4MKze , M64N4MMxe , M64N4MMye , M64N4MMze , & + M64N4RAxe , M64N4RAye , M64N4RAze , M64N4RDxe , M64N4RDye , M64N4RDze , M64N4TAxe , & + M64N4TAye , M64N4TAze , M64N4TDxss , M64N4TDyss , M64N4TDzss , M64N5FKxe , M64N5FKye , & + M64N5FKze , M64N5FMxe , M64N5FMye , M64N5FMze , M64N5MKxe , M64N5MKye , M64N5MKze , & + M64N5MMxe , M64N5MMye , M64N5MMze , M64N5RAxe , M64N5RAye , M64N5RAze , M64N5RDxe , & + M64N5RDye , M64N5RDze , M64N5TAxe , M64N5TAye , M64N5TAze , M64N5TDxss , M64N5TDyss , & + M64N5TDzss , M64N6FKxe , M64N6FKye , M64N6FKze , M64N6FMxe , M64N6FMye , M64N6FMze , & + M64N6MKxe , M64N6MKye , M64N6MKze , M64N6MMxe , M64N6MMye , M64N6MMze , M64N6RAxe , & + M64N6RAye , M64N6RAze , M64N6RDxe , M64N6RDye , M64N6RDze , M64N6TAxe , M64N6TAye , & + M64N6TAze , M64N6TDxss , M64N6TDyss , M64N6TDzss , M64N7FKxe , M64N7FKye , M64N7FKze , & + M64N7FMxe , M64N7FMye , M64N7FMze , M64N7MKxe , M64N7MKye , M64N7MKze , M64N7MMxe , & + M64N7MMye , M64N7MMze , M64N7RAxe , M64N7RAye , M64N7RAze , M64N7RDxe , M64N7RDye , & + M64N7RDze , M64N7TAxe , M64N7TAye , M64N7TAze , M64N7TDxss , M64N7TDyss , M64N7TDzss , & + M64N8FKxe , M64N8FKye , M64N8FKze , M64N8FMxe , M64N8FMye , M64N8FMze , M64N8MKxe , & + M64N8MKye , M64N8MKze , M64N8MMxe , M64N8MMye , M64N8MMze , M64N8RAxe , M64N8RAye , & + M64N8RAze , M64N8RDxe , M64N8RDye , M64N8RDze , M64N8TAxe , M64N8TAye , M64N8TAze , & + M64N8TDxss , M64N8TDyss , M64N8TDzss , M64N9FKxe , M64N9FKye , M64N9FKze , M64N9FMxe , & + M64N9FMye , M64N9FMze , M64N9MKxe , M64N9MKye , M64N9MKze , M64N9MMxe , M64N9MMye , & + M64N9MMze , M64N9RAxe , M64N9RAye , M64N9RAze , M64N9RDxe , M64N9RDye , M64N9RDze , & + M64N9TAxe , M64N9TAye , M64N9TAze , M64N9TDxss , M64N9TDyss , M64N9TDzss , M65N1FKxe , & + M65N1FKye , M65N1FKze , M65N1FMxe , M65N1FMye , M65N1FMze , M65N1MKxe , M65N1MKye , & + M65N1MKze , M65N1MMxe , M65N1MMye , M65N1MMze , M65N1RAxe , M65N1RAye , M65N1RAze , & + M65N1RDxe , M65N1RDye , M65N1RDze , M65N1TAxe , M65N1TAye , M65N1TAze , M65N1TDxss , & + M65N1TDyss , M65N1TDzss , M65N2FKxe , M65N2FKye , M65N2FKze , M65N2FMxe , M65N2FMye , & + M65N2FMze , M65N2MKxe , M65N2MKye , M65N2MKze , M65N2MMxe , M65N2MMye , M65N2MMze , & + M65N2RAxe , M65N2RAye , M65N2RAze , M65N2RDxe , M65N2RDye , M65N2RDze , M65N2TAxe , & + M65N2TAye , M65N2TAze , M65N2TDxss , M65N2TDyss , M65N2TDzss , M65N3FKxe , M65N3FKye , & + M65N3FKze , M65N3FMxe , M65N3FMye , M65N3FMze , M65N3MKxe , M65N3MKye , M65N3MKze , & + M65N3MMxe , M65N3MMye , M65N3MMze , M65N3RAxe , M65N3RAye , M65N3RAze , M65N3RDxe , & + M65N3RDye , M65N3RDze , M65N3TAxe , M65N3TAye , M65N3TAze , M65N3TDxss , M65N3TDyss , & + M65N3TDzss , M65N4FKxe , M65N4FKye , M65N4FKze , M65N4FMxe , M65N4FMye , M65N4FMze , & + M65N4MKxe , M65N4MKye , M65N4MKze , M65N4MMxe , M65N4MMye , M65N4MMze , M65N4RAxe , & + M65N4RAye , M65N4RAze , M65N4RDxe , M65N4RDye , M65N4RDze , M65N4TAxe , M65N4TAye , & + M65N4TAze , M65N4TDxss , M65N4TDyss , M65N4TDzss , M65N5FKxe , M65N5FKye , M65N5FKze , & + M65N5FMxe , M65N5FMye , M65N5FMze , M65N5MKxe , M65N5MKye , M65N5MKze , M65N5MMxe , & + M65N5MMye , M65N5MMze , M65N5RAxe , M65N5RAye , M65N5RAze , M65N5RDxe , M65N5RDye , & + M65N5RDze , M65N5TAxe , M65N5TAye , M65N5TAze , M65N5TDxss , M65N5TDyss , M65N5TDzss , & + M65N6FKxe , M65N6FKye , M65N6FKze , M65N6FMxe , M65N6FMye , M65N6FMze , M65N6MKxe , & + M65N6MKye , M65N6MKze , M65N6MMxe , M65N6MMye , M65N6MMze , M65N6RAxe , M65N6RAye , & + M65N6RAze , M65N6RDxe , M65N6RDye , M65N6RDze , M65N6TAxe , M65N6TAye , M65N6TAze , & + M65N6TDxss , M65N6TDyss , M65N6TDzss , M65N7FKxe , M65N7FKye , M65N7FKze , M65N7FMxe , & + M65N7FMye , M65N7FMze , M65N7MKxe , M65N7MKye , M65N7MKze , M65N7MMxe , M65N7MMye , & + M65N7MMze , M65N7RAxe , M65N7RAye , M65N7RAze , M65N7RDxe , M65N7RDye , M65N7RDze , & + M65N7TAxe , M65N7TAye , M65N7TAze , M65N7TDxss , M65N7TDyss , M65N7TDzss , M65N8FKxe , & + M65N8FKye , M65N8FKze , M65N8FMxe , M65N8FMye , M65N8FMze , M65N8MKxe , M65N8MKye , & + M65N8MKze , M65N8MMxe , M65N8MMye , M65N8MMze , M65N8RAxe , M65N8RAye , M65N8RAze , & + M65N8RDxe , M65N8RDye , M65N8RDze , M65N8TAxe , M65N8TAye , M65N8TAze , M65N8TDxss , & + M65N8TDyss , M65N8TDzss , M65N9FKxe , M65N9FKye , M65N9FKze , M65N9FMxe , M65N9FMye , & + M65N9FMze , M65N9MKxe , M65N9MKye , M65N9MKze , M65N9MMxe , M65N9MMye , M65N9MMze , & + M65N9RAxe , M65N9RAye , M65N9RAze , M65N9RDxe , M65N9RDye , M65N9RDze , M65N9TAxe , & + M65N9TAye , M65N9TAze , M65N9TDxss , M65N9TDyss , M65N9TDzss , M66N1FKxe , M66N1FKye , & + M66N1FKze , M66N1FMxe , M66N1FMye , M66N1FMze , M66N1MKxe , M66N1MKye , M66N1MKze , & + M66N1MMxe , M66N1MMye , M66N1MMze , M66N1RAxe , M66N1RAye , M66N1RAze , M66N1RDxe , & + M66N1RDye , M66N1RDze , M66N1TAxe , M66N1TAye , M66N1TAze , M66N1TDxss , M66N1TDyss , & + M66N1TDzss , M66N2FKxe , M66N2FKye , M66N2FKze , M66N2FMxe , M66N2FMye , M66N2FMze , & + M66N2MKxe , M66N2MKye , M66N2MKze , M66N2MMxe , M66N2MMye , M66N2MMze , M66N2RAxe , & + M66N2RAye , M66N2RAze , M66N2RDxe , M66N2RDye , M66N2RDze , M66N2TAxe , M66N2TAye , & + M66N2TAze , M66N2TDxss , M66N2TDyss , M66N2TDzss , M66N3FKxe , M66N3FKye , M66N3FKze , & + M66N3FMxe , M66N3FMye , M66N3FMze , M66N3MKxe , M66N3MKye , M66N3MKze , M66N3MMxe , & + M66N3MMye , M66N3MMze , M66N3RAxe , M66N3RAye , M66N3RAze , M66N3RDxe , M66N3RDye , & + M66N3RDze , M66N3TAxe , M66N3TAye , M66N3TAze , M66N3TDxss , M66N3TDyss , M66N3TDzss , & + M66N4FKxe , M66N4FKye , M66N4FKze , M66N4FMxe , M66N4FMye , M66N4FMze , M66N4MKxe , & + M66N4MKye , M66N4MKze , M66N4MMxe , M66N4MMye , M66N4MMze , M66N4RAxe , M66N4RAye , & + M66N4RAze , M66N4RDxe , M66N4RDye , M66N4RDze , M66N4TAxe , M66N4TAye , M66N4TAze , & + M66N4TDxss , M66N4TDyss , M66N4TDzss , M66N5FKxe , M66N5FKye , M66N5FKze , M66N5FMxe , & + M66N5FMye , M66N5FMze , M66N5MKxe , M66N5MKye , M66N5MKze , M66N5MMxe , M66N5MMye , & + M66N5MMze , M66N5RAxe , M66N5RAye , M66N5RAze , M66N5RDxe , M66N5RDye , M66N5RDze , & + M66N5TAxe , M66N5TAye , M66N5TAze , M66N5TDxss , M66N5TDyss , M66N5TDzss , M66N6FKxe , & + M66N6FKye , M66N6FKze , M66N6FMxe , M66N6FMye , M66N6FMze , M66N6MKxe , M66N6MKye , & + M66N6MKze , M66N6MMxe , M66N6MMye , M66N6MMze , M66N6RAxe , M66N6RAye , M66N6RAze , & + M66N6RDxe , M66N6RDye , M66N6RDze , M66N6TAxe , M66N6TAye , M66N6TAze , M66N6TDxss , & + M66N6TDyss , M66N6TDzss , M66N7FKxe , M66N7FKye , M66N7FKze , M66N7FMxe , M66N7FMye , & + M66N7FMze , M66N7MKxe , M66N7MKye , M66N7MKze , M66N7MMxe , M66N7MMye , M66N7MMze , & + M66N7RAxe , M66N7RAye , M66N7RAze , M66N7RDxe , M66N7RDye , M66N7RDze , M66N7TAxe , & + M66N7TAye , M66N7TAze , M66N7TDxss , M66N7TDyss , M66N7TDzss , M66N8FKxe , M66N8FKye , & + M66N8FKze , M66N8FMxe , M66N8FMye , M66N8FMze , M66N8MKxe , M66N8MKye , M66N8MKze , & + M66N8MMxe , M66N8MMye , M66N8MMze , M66N8RAxe , M66N8RAye , M66N8RAze , M66N8RDxe , & + M66N8RDye , M66N8RDze , M66N8TAxe , M66N8TAye , M66N8TAze , M66N8TDxss , M66N8TDyss , & + M66N8TDzss , M66N9FKxe , M66N9FKye , M66N9FKze , M66N9FMxe , M66N9FMye , M66N9FMze , & + M66N9MKxe , M66N9MKye , M66N9MKze , M66N9MMxe , M66N9MMye , M66N9MMze , M66N9RAxe , & + M66N9RAye , M66N9RAze , M66N9RDxe , M66N9RDye , M66N9RDze , M66N9TAxe , M66N9TAye , & + M66N9TAze , M66N9TDxss , M66N9TDyss , M66N9TDzss , M67N1FKxe , M67N1FKye , M67N1FKze , & + M67N1FMxe , M67N1FMye , M67N1FMze , M67N1MKxe , M67N1MKye , M67N1MKze , M67N1MMxe , & + M67N1MMye , M67N1MMze , M67N1RAxe , M67N1RAye , M67N1RAze , M67N1RDxe , M67N1RDye , & + M67N1RDze , M67N1TAxe , M67N1TAye , M67N1TAze , M67N1TDxss , M67N1TDyss , M67N1TDzss , & + M67N2FKxe , M67N2FKye , M67N2FKze , M67N2FMxe , M67N2FMye , M67N2FMze , M67N2MKxe , & + M67N2MKye , M67N2MKze , M67N2MMxe , M67N2MMye , M67N2MMze , M67N2RAxe , M67N2RAye , & + M67N2RAze , M67N2RDxe , M67N2RDye , M67N2RDze , M67N2TAxe , M67N2TAye , M67N2TAze , & + M67N2TDxss , M67N2TDyss , M67N2TDzss , M67N3FKxe , M67N3FKye , M67N3FKze , M67N3FMxe , & + M67N3FMye , M67N3FMze , M67N3MKxe , M67N3MKye , M67N3MKze , M67N3MMxe , M67N3MMye , & + M67N3MMze , M67N3RAxe , M67N3RAye , M67N3RAze , M67N3RDxe , M67N3RDye , M67N3RDze , & + M67N3TAxe , M67N3TAye , M67N3TAze , M67N3TDxss , M67N3TDyss , M67N3TDzss , M67N4FKxe , & + M67N4FKye , M67N4FKze , M67N4FMxe , M67N4FMye , M67N4FMze , M67N4MKxe , M67N4MKye , & + M67N4MKze , M67N4MMxe , M67N4MMye , M67N4MMze , M67N4RAxe , M67N4RAye , M67N4RAze , & + M67N4RDxe , M67N4RDye , M67N4RDze , M67N4TAxe , M67N4TAye , M67N4TAze , M67N4TDxss , & + M67N4TDyss , M67N4TDzss , M67N5FKxe , M67N5FKye , M67N5FKze , M67N5FMxe , M67N5FMye , & + M67N5FMze , M67N5MKxe , M67N5MKye , M67N5MKze , M67N5MMxe , M67N5MMye , M67N5MMze , & + M67N5RAxe , M67N5RAye , M67N5RAze , M67N5RDxe , M67N5RDye , M67N5RDze , M67N5TAxe , & + M67N5TAye , M67N5TAze , M67N5TDxss , M67N5TDyss , M67N5TDzss , M67N6FKxe , M67N6FKye , & + M67N6FKze , M67N6FMxe , M67N6FMye , M67N6FMze , M67N6MKxe , M67N6MKye , M67N6MKze , & + M67N6MMxe , M67N6MMye , M67N6MMze , M67N6RAxe , M67N6RAye , M67N6RAze , M67N6RDxe , & + M67N6RDye , M67N6RDze , M67N6TAxe , M67N6TAye , M67N6TAze , M67N6TDxss , M67N6TDyss , & + M67N6TDzss , M67N7FKxe , M67N7FKye , M67N7FKze , M67N7FMxe , M67N7FMye , M67N7FMze , & + M67N7MKxe , M67N7MKye , M67N7MKze , M67N7MMxe , M67N7MMye , M67N7MMze , M67N7RAxe , & + M67N7RAye , M67N7RAze , M67N7RDxe , M67N7RDye , M67N7RDze , M67N7TAxe , M67N7TAye , & + M67N7TAze , M67N7TDxss , M67N7TDyss , M67N7TDzss , M67N8FKxe , M67N8FKye , M67N8FKze , & + M67N8FMxe , M67N8FMye , M67N8FMze , M67N8MKxe , M67N8MKye , M67N8MKze , M67N8MMxe , & + M67N8MMye , M67N8MMze , M67N8RAxe , M67N8RAye , M67N8RAze , M67N8RDxe , M67N8RDye , & + M67N8RDze , M67N8TAxe , M67N8TAye , M67N8TAze , M67N8TDxss , M67N8TDyss , M67N8TDzss , & + M67N9FKxe , M67N9FKye , M67N9FKze , M67N9FMxe , M67N9FMye , M67N9FMze , M67N9MKxe , & + M67N9MKye , M67N9MKze , M67N9MMxe , M67N9MMye , M67N9MMze , M67N9RAxe , M67N9RAye , & + M67N9RAze , M67N9RDxe , M67N9RDye , M67N9RDze , M67N9TAxe , M67N9TAye , M67N9TAze , & + M67N9TDxss , M67N9TDyss , M67N9TDzss , M68N1FKxe , M68N1FKye , M68N1FKze , M68N1FMxe , & + M68N1FMye , M68N1FMze , M68N1MKxe , M68N1MKye , M68N1MKze , M68N1MMxe , M68N1MMye , & + M68N1MMze , M68N1RAxe , M68N1RAye , M68N1RAze , M68N1RDxe , M68N1RDye , M68N1RDze , & + M68N1TAxe , M68N1TAye , M68N1TAze , M68N1TDxss , M68N1TDyss , M68N1TDzss , M68N2FKxe , & + M68N2FKye , M68N2FKze , M68N2FMxe , M68N2FMye , M68N2FMze , M68N2MKxe , M68N2MKye , & + M68N2MKze , M68N2MMxe , M68N2MMye , M68N2MMze , M68N2RAxe , M68N2RAye , M68N2RAze , & + M68N2RDxe , M68N2RDye , M68N2RDze , M68N2TAxe , M68N2TAye , M68N2TAze , M68N2TDxss , & + M68N2TDyss , M68N2TDzss , M68N3FKxe , M68N3FKye , M68N3FKze , M68N3FMxe , M68N3FMye , & + M68N3FMze , M68N3MKxe , M68N3MKye , M68N3MKze , M68N3MMxe , M68N3MMye , M68N3MMze , & + M68N3RAxe , M68N3RAye , M68N3RAze , M68N3RDxe , M68N3RDye , M68N3RDze , M68N3TAxe , & + M68N3TAye , M68N3TAze , M68N3TDxss , M68N3TDyss , M68N3TDzss , M68N4FKxe , M68N4FKye , & + M68N4FKze , M68N4FMxe , M68N4FMye , M68N4FMze , M68N4MKxe , M68N4MKye , M68N4MKze , & + M68N4MMxe , M68N4MMye , M68N4MMze , M68N4RAxe , M68N4RAye , M68N4RAze , M68N4RDxe , & + M68N4RDye , M68N4RDze , M68N4TAxe , M68N4TAye , M68N4TAze , M68N4TDxss , M68N4TDyss , & + M68N4TDzss , M68N5FKxe , M68N5FKye , M68N5FKze , M68N5FMxe , M68N5FMye , M68N5FMze , & + M68N5MKxe , M68N5MKye , M68N5MKze , M68N5MMxe , M68N5MMye , M68N5MMze , M68N5RAxe , & + M68N5RAye , M68N5RAze , M68N5RDxe , M68N5RDye , M68N5RDze , M68N5TAxe , M68N5TAye , & + M68N5TAze , M68N5TDxss , M68N5TDyss , M68N5TDzss , M68N6FKxe , M68N6FKye , M68N6FKze , & + M68N6FMxe , M68N6FMye , M68N6FMze , M68N6MKxe , M68N6MKye , M68N6MKze , M68N6MMxe , & + M68N6MMye , M68N6MMze , M68N6RAxe , M68N6RAye , M68N6RAze , M68N6RDxe , M68N6RDye , & + M68N6RDze , M68N6TAxe , M68N6TAye , M68N6TAze , M68N6TDxss , M68N6TDyss , M68N6TDzss , & + M68N7FKxe , M68N7FKye , M68N7FKze , M68N7FMxe , M68N7FMye , M68N7FMze , M68N7MKxe , & + M68N7MKye , M68N7MKze , M68N7MMxe , M68N7MMye , M68N7MMze , M68N7RAxe , M68N7RAye , & + M68N7RAze , M68N7RDxe , M68N7RDye , M68N7RDze , M68N7TAxe , M68N7TAye , M68N7TAze , & + M68N7TDxss , M68N7TDyss , M68N7TDzss , M68N8FKxe , M68N8FKye , M68N8FKze , M68N8FMxe , & + M68N8FMye , M68N8FMze , M68N8MKxe , M68N8MKye , M68N8MKze , M68N8MMxe , M68N8MMye , & + M68N8MMze , M68N8RAxe , M68N8RAye , M68N8RAze , M68N8RDxe , M68N8RDye , M68N8RDze , & + M68N8TAxe , M68N8TAye , M68N8TAze , M68N8TDxss , M68N8TDyss , M68N8TDzss , M68N9FKxe , & + M68N9FKye , M68N9FKze , M68N9FMxe , M68N9FMye , M68N9FMze , M68N9MKxe , M68N9MKye , & + M68N9MKze , M68N9MMxe , M68N9MMye , M68N9MMze , M68N9RAxe , M68N9RAye , M68N9RAze , & + M68N9RDxe , M68N9RDye , M68N9RDze , M68N9TAxe , M68N9TAye , M68N9TAze , M68N9TDxss , & + M68N9TDyss , M68N9TDzss , M69N1FKxe , M69N1FKye , M69N1FKze , M69N1FMxe , M69N1FMye , & + M69N1FMze , M69N1MKxe , M69N1MKye , M69N1MKze , M69N1MMxe , M69N1MMye , M69N1MMze , & + M69N1RAxe , M69N1RAye , M69N1RAze , M69N1RDxe , M69N1RDye , M69N1RDze , M69N1TAxe , & + M69N1TAye , M69N1TAze , M69N1TDxss , M69N1TDyss , M69N1TDzss , M69N2FKxe , M69N2FKye , & + M69N2FKze , M69N2FMxe , M69N2FMye , M69N2FMze , M69N2MKxe , M69N2MKye , M69N2MKze , & + M69N2MMxe , M69N2MMye , M69N2MMze , M69N2RAxe , M69N2RAye , M69N2RAze , M69N2RDxe , & + M69N2RDye , M69N2RDze , M69N2TAxe , M69N2TAye , M69N2TAze , M69N2TDxss , M69N2TDyss , & + M69N2TDzss , M69N3FKxe , M69N3FKye , M69N3FKze , M69N3FMxe , M69N3FMye , M69N3FMze , & + M69N3MKxe , M69N3MKye , M69N3MKze , M69N3MMxe , M69N3MMye , M69N3MMze , M69N3RAxe , & + M69N3RAye , M69N3RAze , M69N3RDxe , M69N3RDye , M69N3RDze , M69N3TAxe , M69N3TAye , & + M69N3TAze , M69N3TDxss , M69N3TDyss , M69N3TDzss , M69N4FKxe , M69N4FKye , M69N4FKze , & + M69N4FMxe , M69N4FMye , M69N4FMze , M69N4MKxe , M69N4MKye , M69N4MKze , M69N4MMxe , & + M69N4MMye , M69N4MMze , M69N4RAxe , M69N4RAye , M69N4RAze , M69N4RDxe , M69N4RDye , & + M69N4RDze , M69N4TAxe , M69N4TAye , M69N4TAze , M69N4TDxss , M69N4TDyss , M69N4TDzss , & + M69N5FKxe , M69N5FKye , M69N5FKze , M69N5FMxe , M69N5FMye , M69N5FMze , M69N5MKxe , & + M69N5MKye , M69N5MKze , M69N5MMxe , M69N5MMye , M69N5MMze , M69N5RAxe , M69N5RAye , & + M69N5RAze , M69N5RDxe , M69N5RDye , M69N5RDze , M69N5TAxe , M69N5TAye , M69N5TAze , & + M69N5TDxss , M69N5TDyss , M69N5TDzss , M69N6FKxe , M69N6FKye , M69N6FKze , M69N6FMxe , & + M69N6FMye , M69N6FMze , M69N6MKxe , M69N6MKye , M69N6MKze , M69N6MMxe , M69N6MMye , & + M69N6MMze , M69N6RAxe , M69N6RAye , M69N6RAze , M69N6RDxe , M69N6RDye , M69N6RDze , & + M69N6TAxe , M69N6TAye , M69N6TAze , M69N6TDxss , M69N6TDyss , M69N6TDzss , M69N7FKxe , & + M69N7FKye , M69N7FKze , M69N7FMxe , M69N7FMye , M69N7FMze , M69N7MKxe , M69N7MKye , & + M69N7MKze , M69N7MMxe , M69N7MMye , M69N7MMze , M69N7RAxe , M69N7RAye , M69N7RAze , & + M69N7RDxe , M69N7RDye , M69N7RDze , M69N7TAxe , M69N7TAye , M69N7TAze , M69N7TDxss , & + M69N7TDyss , M69N7TDzss , M69N8FKxe , M69N8FKye , M69N8FKze , M69N8FMxe , M69N8FMye , & + M69N8FMze , M69N8MKxe , M69N8MKye , M69N8MKze , M69N8MMxe , M69N8MMye , M69N8MMze , & + M69N8RAxe , M69N8RAye , M69N8RAze , M69N8RDxe , M69N8RDye , M69N8RDze , M69N8TAxe , & + M69N8TAye , M69N8TAze , M69N8TDxss , M69N8TDyss , M69N8TDzss , M69N9FKxe , M69N9FKye , & + M69N9FKze , M69N9FMxe , M69N9FMye , M69N9FMze , M69N9MKxe , M69N9MKye , M69N9MKze , & + M69N9MMxe , M69N9MMye , M69N9MMze , M69N9RAxe , M69N9RAye , M69N9RAze , M69N9RDxe , & + M69N9RDye , M69N9RDze , M69N9TAxe , M69N9TAye , M69N9TAze , M69N9TDxss , M69N9TDyss , & + M69N9TDzss , M70N1FKxe , M70N1FKye , M70N1FKze , M70N1FMxe , M70N1FMye , M70N1FMze , & + M70N1MKxe , M70N1MKye , M70N1MKze , M70N1MMxe , M70N1MMye , M70N1MMze , M70N1RAxe , & + M70N1RAye , M70N1RAze , M70N1RDxe , M70N1RDye , M70N1RDze , M70N1TAxe , M70N1TAye , & + M70N1TAze , M70N1TDxss , M70N1TDyss , M70N1TDzss , M70N2FKxe , M70N2FKye , M70N2FKze , & + M70N2FMxe , M70N2FMye , M70N2FMze , M70N2MKxe , M70N2MKye , M70N2MKze , M70N2MMxe , & + M70N2MMye , M70N2MMze , M70N2RAxe , M70N2RAye , M70N2RAze , M70N2RDxe , M70N2RDye , & + M70N2RDze , M70N2TAxe , M70N2TAye , M70N2TAze , M70N2TDxss , M70N2TDyss , M70N2TDzss , & + M70N3FKxe , M70N3FKye , M70N3FKze , M70N3FMxe , M70N3FMye , M70N3FMze , M70N3MKxe , & + M70N3MKye , M70N3MKze , M70N3MMxe , M70N3MMye , M70N3MMze , M70N3RAxe , M70N3RAye , & + M70N3RAze , M70N3RDxe , M70N3RDye , M70N3RDze , M70N3TAxe , M70N3TAye , M70N3TAze , & + M70N3TDxss , M70N3TDyss , M70N3TDzss , M70N4FKxe , M70N4FKye , M70N4FKze , M70N4FMxe , & + M70N4FMye , M70N4FMze , M70N4MKxe , M70N4MKye , M70N4MKze , M70N4MMxe , M70N4MMye , & + M70N4MMze , M70N4RAxe , M70N4RAye , M70N4RAze , M70N4RDxe , M70N4RDye , M70N4RDze , & + M70N4TAxe , M70N4TAye , M70N4TAze , M70N4TDxss , M70N4TDyss , M70N4TDzss , M70N5FKxe , & + M70N5FKye , M70N5FKze , M70N5FMxe , M70N5FMye , M70N5FMze , M70N5MKxe , M70N5MKye , & + M70N5MKze , M70N5MMxe , M70N5MMye , M70N5MMze /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry10(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M70N5RAxe , M70N5RAye , M70N5RAze , M70N5RDxe , M70N5RDye , M70N5RDze , M70N5TAxe , & + M70N5TAye , M70N5TAze , M70N5TDxss , M70N5TDyss , M70N5TDzss , M70N6FKxe , M70N6FKye , & + M70N6FKze , M70N6FMxe , M70N6FMye , M70N6FMze , M70N6MKxe , M70N6MKye , M70N6MKze , & + M70N6MMxe , M70N6MMye , M70N6MMze , M70N6RAxe , M70N6RAye , M70N6RAze , M70N6RDxe , & + M70N6RDye , M70N6RDze , M70N6TAxe , M70N6TAye , M70N6TAze , M70N6TDxss , M70N6TDyss , & + M70N6TDzss , M70N7FKxe , M70N7FKye , M70N7FKze , M70N7FMxe , M70N7FMye , M70N7FMze , & + M70N7MKxe , M70N7MKye , M70N7MKze , M70N7MMxe , M70N7MMye , M70N7MMze , M70N7RAxe , & + M70N7RAye , M70N7RAze , M70N7RDxe , M70N7RDye , M70N7RDze , M70N7TAxe , M70N7TAye , & + M70N7TAze , M70N7TDxss , M70N7TDyss , M70N7TDzss , M70N8FKxe , M70N8FKye , M70N8FKze , & + M70N8FMxe , M70N8FMye , M70N8FMze , M70N8MKxe , M70N8MKye , M70N8MKze , M70N8MMxe , & + M70N8MMye , M70N8MMze , M70N8RAxe , M70N8RAye , M70N8RAze , M70N8RDxe , M70N8RDye , & + M70N8RDze , M70N8TAxe , M70N8TAye , M70N8TAze , M70N8TDxss , M70N8TDyss , M70N8TDzss , & + M70N9FKxe , M70N9FKye , M70N9FKze , M70N9FMxe , M70N9FMye , M70N9FMze , M70N9MKxe , & + M70N9MKye , M70N9MKze , M70N9MMxe , M70N9MMye , M70N9MMze , M70N9RAxe , M70N9RAye , & + M70N9RAze , M70N9RDxe , M70N9RDye , M70N9RDze , M70N9TAxe , M70N9TAye , M70N9TAze , & + M70N9TDxss , M70N9TDyss , M70N9TDzss , M71N1FKxe , M71N1FKye , M71N1FKze , M71N1FMxe , & + M71N1FMye , M71N1FMze , M71N1MKxe , M71N1MKye , M71N1MKze , M71N1MMxe , M71N1MMye , & + M71N1MMze , M71N1RAxe , M71N1RAye , M71N1RAze , M71N1RDxe , M71N1RDye , M71N1RDze , & + M71N1TAxe , M71N1TAye , M71N1TAze , M71N1TDxss , M71N1TDyss , M71N1TDzss , M71N2FKxe , & + M71N2FKye , M71N2FKze , M71N2FMxe , M71N2FMye , M71N2FMze , M71N2MKxe , M71N2MKye , & + M71N2MKze , M71N2MMxe , M71N2MMye , M71N2MMze , M71N2RAxe , M71N2RAye , M71N2RAze , & + M71N2RDxe , M71N2RDye , M71N2RDze , M71N2TAxe , M71N2TAye , M71N2TAze , M71N2TDxss , & + M71N2TDyss , M71N2TDzss , M71N3FKxe , M71N3FKye , M71N3FKze , M71N3FMxe , M71N3FMye , & + M71N3FMze , M71N3MKxe , M71N3MKye , M71N3MKze , M71N3MMxe , M71N3MMye , M71N3MMze , & + M71N3RAxe , M71N3RAye , M71N3RAze , M71N3RDxe , M71N3RDye , M71N3RDze , M71N3TAxe , & + M71N3TAye , M71N3TAze , M71N3TDxss , M71N3TDyss , M71N3TDzss , M71N4FKxe , M71N4FKye , & + M71N4FKze , M71N4FMxe , M71N4FMye , M71N4FMze , M71N4MKxe , M71N4MKye , M71N4MKze , & + M71N4MMxe , M71N4MMye , M71N4MMze , M71N4RAxe , M71N4RAye , M71N4RAze , M71N4RDxe , & + M71N4RDye , M71N4RDze , M71N4TAxe , M71N4TAye , M71N4TAze , M71N4TDxss , M71N4TDyss , & + M71N4TDzss , M71N5FKxe , M71N5FKye , M71N5FKze , M71N5FMxe , M71N5FMye , M71N5FMze , & + M71N5MKxe , M71N5MKye , M71N5MKze , M71N5MMxe , M71N5MMye , M71N5MMze , M71N5RAxe , & + M71N5RAye , M71N5RAze , M71N5RDxe , M71N5RDye , M71N5RDze , M71N5TAxe , M71N5TAye , & + M71N5TAze , M71N5TDxss , M71N5TDyss , M71N5TDzss , M71N6FKxe , M71N6FKye , M71N6FKze , & + M71N6FMxe , M71N6FMye , M71N6FMze , M71N6MKxe , M71N6MKye , M71N6MKze , M71N6MMxe , & + M71N6MMye , M71N6MMze , M71N6RAxe , M71N6RAye , M71N6RAze , M71N6RDxe , M71N6RDye , & + M71N6RDze , M71N6TAxe , M71N6TAye , M71N6TAze , M71N6TDxss , M71N6TDyss , M71N6TDzss , & + M71N7FKxe , M71N7FKye , M71N7FKze , M71N7FMxe , M71N7FMye , M71N7FMze , M71N7MKxe , & + M71N7MKye , M71N7MKze , M71N7MMxe , M71N7MMye , M71N7MMze , M71N7RAxe , M71N7RAye , & + M71N7RAze , M71N7RDxe , M71N7RDye , M71N7RDze , M71N7TAxe , M71N7TAye , M71N7TAze , & + M71N7TDxss , M71N7TDyss , M71N7TDzss , M71N8FKxe , M71N8FKye , M71N8FKze , M71N8FMxe , & + M71N8FMye , M71N8FMze , M71N8MKxe , M71N8MKye , M71N8MKze , M71N8MMxe , M71N8MMye , & + M71N8MMze , M71N8RAxe , M71N8RAye , M71N8RAze , M71N8RDxe , M71N8RDye , M71N8RDze , & + M71N8TAxe , M71N8TAye , M71N8TAze , M71N8TDxss , M71N8TDyss , M71N8TDzss , M71N9FKxe , & + M71N9FKye , M71N9FKze , M71N9FMxe , M71N9FMye , M71N9FMze , M71N9MKxe , M71N9MKye , & + M71N9MKze , M71N9MMxe , M71N9MMye , M71N9MMze , M71N9RAxe , M71N9RAye , M71N9RAze , & + M71N9RDxe , M71N9RDye , M71N9RDze , M71N9TAxe , M71N9TAye , M71N9TAze , M71N9TDxss , & + M71N9TDyss , M71N9TDzss , M72N1FKxe , M72N1FKye , M72N1FKze , M72N1FMxe , M72N1FMye , & + M72N1FMze , M72N1MKxe , M72N1MKye , M72N1MKze , M72N1MMxe , M72N1MMye , M72N1MMze , & + M72N1RAxe , M72N1RAye , M72N1RAze , M72N1RDxe , M72N1RDye , M72N1RDze , M72N1TAxe , & + M72N1TAye , M72N1TAze , M72N1TDxss , M72N1TDyss , M72N1TDzss , M72N2FKxe , M72N2FKye , & + M72N2FKze , M72N2FMxe , M72N2FMye , M72N2FMze , M72N2MKxe , M72N2MKye , M72N2MKze , & + M72N2MMxe , M72N2MMye , M72N2MMze , M72N2RAxe , M72N2RAye , M72N2RAze , M72N2RDxe , & + M72N2RDye , M72N2RDze , M72N2TAxe , M72N2TAye , M72N2TAze , M72N2TDxss , M72N2TDyss , & + M72N2TDzss , M72N3FKxe , M72N3FKye , M72N3FKze , M72N3FMxe , M72N3FMye , M72N3FMze , & + M72N3MKxe , M72N3MKye , M72N3MKze , M72N3MMxe , M72N3MMye , M72N3MMze , M72N3RAxe , & + M72N3RAye , M72N3RAze , M72N3RDxe , M72N3RDye , M72N3RDze , M72N3TAxe , M72N3TAye , & + M72N3TAze , M72N3TDxss , M72N3TDyss , M72N3TDzss , M72N4FKxe , M72N4FKye , M72N4FKze , & + M72N4FMxe , M72N4FMye , M72N4FMze , M72N4MKxe , M72N4MKye , M72N4MKze , M72N4MMxe , & + M72N4MMye , M72N4MMze , M72N4RAxe , M72N4RAye , M72N4RAze , M72N4RDxe , M72N4RDye , & + M72N4RDze , M72N4TAxe , M72N4TAye , M72N4TAze , M72N4TDxss , M72N4TDyss , M72N4TDzss , & + M72N5FKxe , M72N5FKye , M72N5FKze , M72N5FMxe , M72N5FMye , M72N5FMze , M72N5MKxe , & + M72N5MKye , M72N5MKze , M72N5MMxe , M72N5MMye , M72N5MMze , M72N5RAxe , M72N5RAye , & + M72N5RAze , M72N5RDxe , M72N5RDye , M72N5RDze , M72N5TAxe , M72N5TAye , M72N5TAze , & + M72N5TDxss , M72N5TDyss , M72N5TDzss , M72N6FKxe , M72N6FKye , M72N6FKze , M72N6FMxe , & + M72N6FMye , M72N6FMze , M72N6MKxe , M72N6MKye , M72N6MKze , M72N6MMxe , M72N6MMye , & + M72N6MMze , M72N6RAxe , M72N6RAye , M72N6RAze , M72N6RDxe , M72N6RDye , M72N6RDze , & + M72N6TAxe , M72N6TAye , M72N6TAze , M72N6TDxss , M72N6TDyss , M72N6TDzss , M72N7FKxe , & + M72N7FKye , M72N7FKze , M72N7FMxe , M72N7FMye , M72N7FMze , M72N7MKxe , M72N7MKye , & + M72N7MKze , M72N7MMxe , M72N7MMye , M72N7MMze , M72N7RAxe , M72N7RAye , M72N7RAze , & + M72N7RDxe , M72N7RDye , M72N7RDze , M72N7TAxe , M72N7TAye , M72N7TAze , M72N7TDxss , & + M72N7TDyss , M72N7TDzss , M72N8FKxe , M72N8FKye , M72N8FKze , M72N8FMxe , M72N8FMye , & + M72N8FMze , M72N8MKxe , M72N8MKye , M72N8MKze , M72N8MMxe , M72N8MMye , M72N8MMze , & + M72N8RAxe , M72N8RAye , M72N8RAze , M72N8RDxe , M72N8RDye , M72N8RDze , M72N8TAxe , & + M72N8TAye , M72N8TAze , M72N8TDxss , M72N8TDyss , M72N8TDzss , M72N9FKxe , M72N9FKye , & + M72N9FKze , M72N9FMxe , M72N9FMye , M72N9FMze , M72N9MKxe , M72N9MKye , M72N9MKze , & + M72N9MMxe , M72N9MMye , M72N9MMze , M72N9RAxe , M72N9RAye , M72N9RAze , M72N9RDxe , & + M72N9RDye , M72N9RDze , M72N9TAxe , M72N9TAye , M72N9TAze , M72N9TDxss , M72N9TDyss , & + M72N9TDzss , M73N1FKxe , M73N1FKye , M73N1FKze , M73N1FMxe , M73N1FMye , M73N1FMze , & + M73N1MKxe , M73N1MKye , M73N1MKze , M73N1MMxe , M73N1MMye , M73N1MMze , M73N1RAxe , & + M73N1RAye , M73N1RAze , M73N1RDxe , M73N1RDye , M73N1RDze , M73N1TAxe , M73N1TAye , & + M73N1TAze , M73N1TDxss , M73N1TDyss , M73N1TDzss , M73N2FKxe , M73N2FKye , M73N2FKze , & + M73N2FMxe , M73N2FMye , M73N2FMze , M73N2MKxe , M73N2MKye , M73N2MKze , M73N2MMxe , & + M73N2MMye , M73N2MMze , M73N2RAxe , M73N2RAye , M73N2RAze , M73N2RDxe , M73N2RDye , & + M73N2RDze , M73N2TAxe , M73N2TAye , M73N2TAze , M73N2TDxss , M73N2TDyss , M73N2TDzss , & + M73N3FKxe , M73N3FKye , M73N3FKze , M73N3FMxe , M73N3FMye , M73N3FMze , M73N3MKxe , & + M73N3MKye , M73N3MKze , M73N3MMxe , M73N3MMye , M73N3MMze , M73N3RAxe , M73N3RAye , & + M73N3RAze , M73N3RDxe , M73N3RDye , M73N3RDze , M73N3TAxe , M73N3TAye , M73N3TAze , & + M73N3TDxss , M73N3TDyss , M73N3TDzss , M73N4FKxe , M73N4FKye , M73N4FKze , M73N4FMxe , & + M73N4FMye , M73N4FMze , M73N4MKxe , M73N4MKye , M73N4MKze , M73N4MMxe , M73N4MMye , & + M73N4MMze , M73N4RAxe , M73N4RAye , M73N4RAze , M73N4RDxe , M73N4RDye , M73N4RDze , & + M73N4TAxe , M73N4TAye , M73N4TAze , M73N4TDxss , M73N4TDyss , M73N4TDzss , M73N5FKxe , & + M73N5FKye , M73N5FKze , M73N5FMxe , M73N5FMye , M73N5FMze , M73N5MKxe , M73N5MKye , & + M73N5MKze , M73N5MMxe , M73N5MMye , M73N5MMze , M73N5RAxe , M73N5RAye , M73N5RAze , & + M73N5RDxe , M73N5RDye , M73N5RDze , M73N5TAxe , M73N5TAye , M73N5TAze , M73N5TDxss , & + M73N5TDyss , M73N5TDzss , M73N6FKxe , M73N6FKye , M73N6FKze , M73N6FMxe , M73N6FMye , & + M73N6FMze , M73N6MKxe , M73N6MKye , M73N6MKze , M73N6MMxe , M73N6MMye , M73N6MMze , & + M73N6RAxe , M73N6RAye , M73N6RAze , M73N6RDxe , M73N6RDye , M73N6RDze , M73N6TAxe , & + M73N6TAye , M73N6TAze , M73N6TDxss , M73N6TDyss , M73N6TDzss , M73N7FKxe , M73N7FKye , & + M73N7FKze , M73N7FMxe , M73N7FMye , M73N7FMze , M73N7MKxe , M73N7MKye , M73N7MKze , & + M73N7MMxe , M73N7MMye , M73N7MMze , M73N7RAxe , M73N7RAye , M73N7RAze , M73N7RDxe , & + M73N7RDye , M73N7RDze , M73N7TAxe , M73N7TAye , M73N7TAze , M73N7TDxss , M73N7TDyss , & + M73N7TDzss , M73N8FKxe , M73N8FKye , M73N8FKze , M73N8FMxe , M73N8FMye , M73N8FMze , & + M73N8MKxe , M73N8MKye , M73N8MKze , M73N8MMxe , M73N8MMye , M73N8MMze , M73N8RAxe , & + M73N8RAye , M73N8RAze , M73N8RDxe , M73N8RDye , M73N8RDze , M73N8TAxe , M73N8TAye , & + M73N8TAze , M73N8TDxss , M73N8TDyss , M73N8TDzss , M73N9FKxe , M73N9FKye , M73N9FKze , & + M73N9FMxe , M73N9FMye , M73N9FMze , M73N9MKxe , M73N9MKye , M73N9MKze , M73N9MMxe , & + M73N9MMye , M73N9MMze , M73N9RAxe , M73N9RAye , M73N9RAze , M73N9RDxe , M73N9RDye , & + M73N9RDze , M73N9TAxe , M73N9TAye , M73N9TAze , M73N9TDxss , M73N9TDyss , M73N9TDzss , & + M74N1FKxe , M74N1FKye , M74N1FKze , M74N1FMxe , M74N1FMye , M74N1FMze , M74N1MKxe , & + M74N1MKye , M74N1MKze , M74N1MMxe , M74N1MMye , M74N1MMze , M74N1RAxe , M74N1RAye , & + M74N1RAze , M74N1RDxe , M74N1RDye , M74N1RDze , M74N1TAxe , M74N1TAye , M74N1TAze , & + M74N1TDxss , M74N1TDyss , M74N1TDzss , M74N2FKxe , M74N2FKye , M74N2FKze , M74N2FMxe , & + M74N2FMye , M74N2FMze , M74N2MKxe , M74N2MKye , M74N2MKze , M74N2MMxe , M74N2MMye , & + M74N2MMze , M74N2RAxe , M74N2RAye , M74N2RAze , M74N2RDxe , M74N2RDye , M74N2RDze , & + M74N2TAxe , M74N2TAye , M74N2TAze , M74N2TDxss , M74N2TDyss , M74N2TDzss , M74N3FKxe , & + M74N3FKye , M74N3FKze , M74N3FMxe , M74N3FMye , M74N3FMze , M74N3MKxe , M74N3MKye , & + M74N3MKze , M74N3MMxe , M74N3MMye , M74N3MMze , M74N3RAxe , M74N3RAye , M74N3RAze , & + M74N3RDxe , M74N3RDye , M74N3RDze , M74N3TAxe , M74N3TAye , M74N3TAze , M74N3TDxss , & + M74N3TDyss , M74N3TDzss , M74N4FKxe , M74N4FKye , M74N4FKze , M74N4FMxe , M74N4FMye , & + M74N4FMze , M74N4MKxe , M74N4MKye , M74N4MKze , M74N4MMxe , M74N4MMye , M74N4MMze , & + M74N4RAxe , M74N4RAye , M74N4RAze , M74N4RDxe , M74N4RDye , M74N4RDze , M74N4TAxe , & + M74N4TAye , M74N4TAze , M74N4TDxss , M74N4TDyss , M74N4TDzss , M74N5FKxe , M74N5FKye , & + M74N5FKze , M74N5FMxe , M74N5FMye , M74N5FMze , M74N5MKxe , M74N5MKye , M74N5MKze , & + M74N5MMxe , M74N5MMye , M74N5MMze , M74N5RAxe , M74N5RAye , M74N5RAze , M74N5RDxe , & + M74N5RDye , M74N5RDze , M74N5TAxe , M74N5TAye , M74N5TAze , M74N5TDxss , M74N5TDyss , & + M74N5TDzss , M74N6FKxe , M74N6FKye , M74N6FKze , M74N6FMxe , M74N6FMye , M74N6FMze , & + M74N6MKxe , M74N6MKye , M74N6MKze , M74N6MMxe , M74N6MMye , M74N6MMze , M74N6RAxe , & + M74N6RAye , M74N6RAze , M74N6RDxe , M74N6RDye , M74N6RDze , M74N6TAxe , M74N6TAye , & + M74N6TAze , M74N6TDxss , M74N6TDyss , M74N6TDzss , M74N7FKxe , M74N7FKye , M74N7FKze , & + M74N7FMxe , M74N7FMye , M74N7FMze , M74N7MKxe , M74N7MKye , M74N7MKze , M74N7MMxe , & + M74N7MMye , M74N7MMze , M74N7RAxe , M74N7RAye , M74N7RAze , M74N7RDxe , M74N7RDye , & + M74N7RDze , M74N7TAxe , M74N7TAye , M74N7TAze , M74N7TDxss , M74N7TDyss , M74N7TDzss , & + M74N8FKxe , M74N8FKye , M74N8FKze , M74N8FMxe , M74N8FMye , M74N8FMze , M74N8MKxe , & + M74N8MKye , M74N8MKze , M74N8MMxe , M74N8MMye , M74N8MMze , M74N8RAxe , M74N8RAye , & + M74N8RAze , M74N8RDxe , M74N8RDye , M74N8RDze , M74N8TAxe , M74N8TAye , M74N8TAze , & + M74N8TDxss , M74N8TDyss , M74N8TDzss , M74N9FKxe , M74N9FKye , M74N9FKze , M74N9FMxe , & + M74N9FMye , M74N9FMze , M74N9MKxe , M74N9MKye , M74N9MKze , M74N9MMxe , M74N9MMye , & + M74N9MMze , M74N9RAxe , M74N9RAye , M74N9RAze , M74N9RDxe , M74N9RDye , M74N9RDze , & + M74N9TAxe , M74N9TAye , M74N9TAze , M74N9TDxss , M74N9TDyss , M74N9TDzss , M75N1FKxe , & + M75N1FKye , M75N1FKze , M75N1FMxe , M75N1FMye , M75N1FMze , M75N1MKxe , M75N1MKye , & + M75N1MKze , M75N1MMxe , M75N1MMye , M75N1MMze , M75N1RAxe , M75N1RAye , M75N1RAze , & + M75N1RDxe , M75N1RDye , M75N1RDze , M75N1TAxe , M75N1TAye , M75N1TAze , M75N1TDxss , & + M75N1TDyss , M75N1TDzss , M75N2FKxe , M75N2FKye , M75N2FKze , M75N2FMxe , M75N2FMye , & + M75N2FMze , M75N2MKxe , M75N2MKye , M75N2MKze , M75N2MMxe , M75N2MMye , M75N2MMze , & + M75N2RAxe , M75N2RAye , M75N2RAze , M75N2RDxe , M75N2RDye , M75N2RDze , M75N2TAxe , & + M75N2TAye , M75N2TAze , M75N2TDxss , M75N2TDyss , M75N2TDzss , M75N3FKxe , M75N3FKye , & + M75N3FKze , M75N3FMxe , M75N3FMye , M75N3FMze , M75N3MKxe , M75N3MKye , M75N3MKze , & + M75N3MMxe , M75N3MMye , M75N3MMze , M75N3RAxe , M75N3RAye , M75N3RAze , M75N3RDxe , & + M75N3RDye , M75N3RDze , M75N3TAxe , M75N3TAye , M75N3TAze , M75N3TDxss , M75N3TDyss , & + M75N3TDzss , M75N4FKxe , M75N4FKye , M75N4FKze , M75N4FMxe , M75N4FMye , M75N4FMze , & + M75N4MKxe , M75N4MKye , M75N4MKze , M75N4MMxe , M75N4MMye , M75N4MMze , M75N4RAxe , & + M75N4RAye , M75N4RAze , M75N4RDxe , M75N4RDye , M75N4RDze , M75N4TAxe , M75N4TAye , & + M75N4TAze , M75N4TDxss , M75N4TDyss , M75N4TDzss , M75N5FKxe , M75N5FKye , M75N5FKze , & + M75N5FMxe , M75N5FMye , M75N5FMze , M75N5MKxe , M75N5MKye , M75N5MKze , M75N5MMxe , & + M75N5MMye , M75N5MMze , M75N5RAxe , M75N5RAye , M75N5RAze , M75N5RDxe , M75N5RDye , & + M75N5RDze , M75N5TAxe , M75N5TAye , M75N5TAze , M75N5TDxss , M75N5TDyss , M75N5TDzss , & + M75N6FKxe , M75N6FKye , M75N6FKze , M75N6FMxe , M75N6FMye , M75N6FMze , M75N6MKxe , & + M75N6MKye , M75N6MKze , M75N6MMxe , M75N6MMye , M75N6MMze , M75N6RAxe , M75N6RAye , & + M75N6RAze , M75N6RDxe , M75N6RDye , M75N6RDze , M75N6TAxe , M75N6TAye , M75N6TAze , & + M75N6TDxss , M75N6TDyss , M75N6TDzss , M75N7FKxe , M75N7FKye , M75N7FKze , M75N7FMxe , & + M75N7FMye , M75N7FMze , M75N7MKxe , M75N7MKye , M75N7MKze , M75N7MMxe , M75N7MMye , & + M75N7MMze , M75N7RAxe , M75N7RAye , M75N7RAze , M75N7RDxe , M75N7RDye , M75N7RDze , & + M75N7TAxe , M75N7TAye , M75N7TAze , M75N7TDxss , M75N7TDyss , M75N7TDzss , M75N8FKxe , & + M75N8FKye , M75N8FKze , M75N8FMxe , M75N8FMye , M75N8FMze , M75N8MKxe , M75N8MKye , & + M75N8MKze , M75N8MMxe , M75N8MMye , M75N8MMze , M75N8RAxe , M75N8RAye , M75N8RAze , & + M75N8RDxe , M75N8RDye , M75N8RDze , M75N8TAxe , M75N8TAye , M75N8TAze , M75N8TDxss , & + M75N8TDyss , M75N8TDzss , M75N9FKxe , M75N9FKye , M75N9FKze , M75N9FMxe , M75N9FMye , & + M75N9FMze , M75N9MKxe , M75N9MKye , M75N9MKze , M75N9MMxe , M75N9MMye , M75N9MMze , & + M75N9RAxe , M75N9RAye , M75N9RAze , M75N9RDxe , M75N9RDye , M75N9RDze , M75N9TAxe , & + M75N9TAye , M75N9TAze , M75N9TDxss , M75N9TDyss , M75N9TDzss , M76N1FKxe , M76N1FKye , & + M76N1FKze , M76N1FMxe , M76N1FMye , M76N1FMze , M76N1MKxe , M76N1MKye , M76N1MKze , & + M76N1MMxe , M76N1MMye , M76N1MMze , M76N1RAxe , M76N1RAye , M76N1RAze , M76N1RDxe , & + M76N1RDye , M76N1RDze , M76N1TAxe , M76N1TAye , M76N1TAze , M76N1TDxss , M76N1TDyss , & + M76N1TDzss , M76N2FKxe , M76N2FKye , M76N2FKze , M76N2FMxe , M76N2FMye , M76N2FMze , & + M76N2MKxe , M76N2MKye , M76N2MKze , M76N2MMxe , M76N2MMye , M76N2MMze , M76N2RAxe , & + M76N2RAye , M76N2RAze , M76N2RDxe , M76N2RDye , M76N2RDze , M76N2TAxe , M76N2TAye , & + M76N2TAze , M76N2TDxss , M76N2TDyss , M76N2TDzss , M76N3FKxe , M76N3FKye , M76N3FKze , & + M76N3FMxe , M76N3FMye , M76N3FMze , M76N3MKxe , M76N3MKye , M76N3MKze , M76N3MMxe , & + M76N3MMye , M76N3MMze , M76N3RAxe , M76N3RAye , M76N3RAze , M76N3RDxe , M76N3RDye , & + M76N3RDze , M76N3TAxe , M76N3TAye , M76N3TAze , M76N3TDxss , M76N3TDyss , M76N3TDzss , & + M76N4FKxe , M76N4FKye , M76N4FKze , M76N4FMxe , M76N4FMye , M76N4FMze , M76N4MKxe , & + M76N4MKye , M76N4MKze , M76N4MMxe , M76N4MMye , M76N4MMze , M76N4RAxe , M76N4RAye , & + M76N4RAze , M76N4RDxe , M76N4RDye , M76N4RDze , M76N4TAxe , M76N4TAye , M76N4TAze , & + M76N4TDxss , M76N4TDyss , M76N4TDzss , M76N5FKxe , M76N5FKye , M76N5FKze , M76N5FMxe , & + M76N5FMye , M76N5FMze , M76N5MKxe , M76N5MKye , M76N5MKze , M76N5MMxe , M76N5MMye , & + M76N5MMze , M76N5RAxe , M76N5RAye , M76N5RAze , M76N5RDxe , M76N5RDye , M76N5RDze , & + M76N5TAxe , M76N5TAye , M76N5TAze , M76N5TDxss , M76N5TDyss , M76N5TDzss , M76N6FKxe , & + M76N6FKye , M76N6FKze , M76N6FMxe , M76N6FMye , M76N6FMze , M76N6MKxe , M76N6MKye , & + M76N6MKze , M76N6MMxe , M76N6MMye , M76N6MMze , M76N6RAxe , M76N6RAye , M76N6RAze , & + M76N6RDxe , M76N6RDye , M76N6RDze , M76N6TAxe , M76N6TAye , M76N6TAze , M76N6TDxss , & + M76N6TDyss , M76N6TDzss , M76N7FKxe , M76N7FKye , M76N7FKze , M76N7FMxe , M76N7FMye , & + M76N7FMze , M76N7MKxe , M76N7MKye , M76N7MKze , M76N7MMxe , M76N7MMye , M76N7MMze , & + M76N7RAxe , M76N7RAye , M76N7RAze , M76N7RDxe , M76N7RDye , M76N7RDze , M76N7TAxe , & + M76N7TAye , M76N7TAze , M76N7TDxss , M76N7TDyss , M76N7TDzss , M76N8FKxe , M76N8FKye , & + M76N8FKze , M76N8FMxe , M76N8FMye , M76N8FMze , M76N8MKxe , M76N8MKye , M76N8MKze , & + M76N8MMxe , M76N8MMye , M76N8MMze , M76N8RAxe , M76N8RAye , M76N8RAze , M76N8RDxe , & + M76N8RDye , M76N8RDze , M76N8TAxe , M76N8TAye , M76N8TAze , M76N8TDxss , M76N8TDyss , & + M76N8TDzss , M76N9FKxe , M76N9FKye , M76N9FKze , M76N9FMxe , M76N9FMye , M76N9FMze , & + M76N9MKxe , M76N9MKye , M76N9MKze , M76N9MMxe , M76N9MMye , M76N9MMze , M76N9RAxe , & + M76N9RAye , M76N9RAze , M76N9RDxe , M76N9RDye , M76N9RDze , M76N9TAxe , M76N9TAye , & + M76N9TAze , M76N9TDxss , M76N9TDyss , M76N9TDzss , M77N1FKxe , M77N1FKye , M77N1FKze , & + M77N1FMxe , M77N1FMye , M77N1FMze , M77N1MKxe , M77N1MKye , M77N1MKze , M77N1MMxe , & + M77N1MMye , M77N1MMze , M77N1RAxe , M77N1RAye , M77N1RAze , M77N1RDxe , M77N1RDye , & + M77N1RDze , M77N1TAxe , M77N1TAye , M77N1TAze , M77N1TDxss , M77N1TDyss , M77N1TDzss , & + M77N2FKxe , M77N2FKye , M77N2FKze , M77N2FMxe , M77N2FMye , M77N2FMze , M77N2MKxe , & + M77N2MKye , M77N2MKze , M77N2MMxe , M77N2MMye , M77N2MMze , M77N2RAxe , M77N2RAye , & + M77N2RAze , M77N2RDxe , M77N2RDye , M77N2RDze , M77N2TAxe , M77N2TAye , M77N2TAze , & + M77N2TDxss , M77N2TDyss , M77N2TDzss , M77N3FKxe , M77N3FKye , M77N3FKze , M77N3FMxe , & + M77N3FMye , M77N3FMze , M77N3MKxe , M77N3MKye , M77N3MKze , M77N3MMxe , M77N3MMye , & + M77N3MMze , M77N3RAxe , M77N3RAye , M77N3RAze , M77N3RDxe , M77N3RDye , M77N3RDze , & + M77N3TAxe , M77N3TAye , M77N3TAze , M77N3TDxss , M77N3TDyss , M77N3TDzss , M77N4FKxe , & + M77N4FKye , M77N4FKze , M77N4FMxe , M77N4FMye , M77N4FMze , M77N4MKxe , M77N4MKye , & + M77N4MKze , M77N4MMxe , M77N4MMye , M77N4MMze , M77N4RAxe , M77N4RAye , M77N4RAze , & + M77N4RDxe , M77N4RDye , M77N4RDze , M77N4TAxe , M77N4TAye , M77N4TAze , M77N4TDxss , & + M77N4TDyss , M77N4TDzss , M77N5FKxe , M77N5FKye , M77N5FKze , M77N5FMxe , M77N5FMye , & + M77N5FMze , M77N5MKxe , M77N5MKye , M77N5MKze , M77N5MMxe , M77N5MMye , M77N5MMze , & + M77N5RAxe , M77N5RAye , M77N5RAze , M77N5RDxe , M77N5RDye , M77N5RDze , M77N5TAxe , & + M77N5TAye , M77N5TAze , M77N5TDxss , M77N5TDyss , M77N5TDzss , M77N6FKxe , M77N6FKye , & + M77N6FKze , M77N6FMxe , M77N6FMye , M77N6FMze , M77N6MKxe , M77N6MKye , M77N6MKze , & + M77N6MMxe , M77N6MMye , M77N6MMze , M77N6RAxe , M77N6RAye , M77N6RAze , M77N6RDxe , & + M77N6RDye , M77N6RDze , M77N6TAxe , M77N6TAye , M77N6TAze , M77N6TDxss , M77N6TDyss , & + M77N6TDzss , M77N7FKxe , M77N7FKye , M77N7FKze , M77N7FMxe , M77N7FMye , M77N7FMze , & + M77N7MKxe , M77N7MKye , M77N7MKze , M77N7MMxe , M77N7MMye , M77N7MMze , M77N7RAxe , & + M77N7RAye , M77N7RAze , M77N7RDxe , M77N7RDye , M77N7RDze , M77N7TAxe , M77N7TAye , & + M77N7TAze , M77N7TDxss , M77N7TDyss , M77N7TDzss , M77N8FKxe , M77N8FKye , M77N8FKze , & + M77N8FMxe , M77N8FMye , M77N8FMze , M77N8MKxe , M77N8MKye , M77N8MKze , M77N8MMxe , & + M77N8MMye , M77N8MMze , M77N8RAxe , M77N8RAye , M77N8RAze , M77N8RDxe , M77N8RDye , & + M77N8RDze , M77N8TAxe , M77N8TAye , M77N8TAze , M77N8TDxss , M77N8TDyss , M77N8TDzss , & + M77N9FKxe , M77N9FKye , M77N9FKze , M77N9FMxe , M77N9FMye , M77N9FMze , M77N9MKxe , & + M77N9MKye , M77N9MKze , M77N9MMxe , M77N9MMye , M77N9MMze , M77N9RAxe , M77N9RAye , & + M77N9RAze , M77N9RDxe , M77N9RDye , M77N9RDze , M77N9TAxe , M77N9TAye , M77N9TAze , & + M77N9TDxss , M77N9TDyss , M77N9TDzss , M78N1FKxe , M78N1FKye , M78N1FKze , M78N1FMxe , & + M78N1FMye , M78N1FMze , M78N1MKxe , M78N1MKye , M78N1MKze , M78N1MMxe , M78N1MMye , & + M78N1MMze , M78N1RAxe , M78N1RAye , M78N1RAze , M78N1RDxe , M78N1RDye , M78N1RDze , & + M78N1TAxe , M78N1TAye , M78N1TAze , M78N1TDxss , M78N1TDyss , M78N1TDzss , M78N2FKxe , & + M78N2FKye , M78N2FKze , M78N2FMxe , M78N2FMye , M78N2FMze , M78N2MKxe , M78N2MKye , & + M78N2MKze , M78N2MMxe , M78N2MMye , M78N2MMze , M78N2RAxe , M78N2RAye , M78N2RAze , & + M78N2RDxe , M78N2RDye , M78N2RDze , M78N2TAxe , M78N2TAye , M78N2TAze , M78N2TDxss , & + M78N2TDyss , M78N2TDzss , M78N3FKxe , M78N3FKye /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry11(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M78N3FKze , M78N3FMxe , M78N3FMye , M78N3FMze , M78N3MKxe , M78N3MKye , M78N3MKze , & + M78N3MMxe , M78N3MMye , M78N3MMze , M78N3RAxe , M78N3RAye , M78N3RAze , M78N3RDxe , & + M78N3RDye , M78N3RDze , M78N3TAxe , M78N3TAye , M78N3TAze , M78N3TDxss , M78N3TDyss , & + M78N3TDzss , M78N4FKxe , M78N4FKye , M78N4FKze , M78N4FMxe , M78N4FMye , M78N4FMze , & + M78N4MKxe , M78N4MKye , M78N4MKze , M78N4MMxe , M78N4MMye , M78N4MMze , M78N4RAxe , & + M78N4RAye , M78N4RAze , M78N4RDxe , M78N4RDye , M78N4RDze , M78N4TAxe , M78N4TAye , & + M78N4TAze , M78N4TDxss , M78N4TDyss , M78N4TDzss , M78N5FKxe , M78N5FKye , M78N5FKze , & + M78N5FMxe , M78N5FMye , M78N5FMze , M78N5MKxe , M78N5MKye , M78N5MKze , M78N5MMxe , & + M78N5MMye , M78N5MMze , M78N5RAxe , M78N5RAye , M78N5RAze , M78N5RDxe , M78N5RDye , & + M78N5RDze , M78N5TAxe , M78N5TAye , M78N5TAze , M78N5TDxss , M78N5TDyss , M78N5TDzss , & + M78N6FKxe , M78N6FKye , M78N6FKze , M78N6FMxe , M78N6FMye , M78N6FMze , M78N6MKxe , & + M78N6MKye , M78N6MKze , M78N6MMxe , M78N6MMye , M78N6MMze , M78N6RAxe , M78N6RAye , & + M78N6RAze , M78N6RDxe , M78N6RDye , M78N6RDze , M78N6TAxe , M78N6TAye , M78N6TAze , & + M78N6TDxss , M78N6TDyss , M78N6TDzss , M78N7FKxe , M78N7FKye , M78N7FKze , M78N7FMxe , & + M78N7FMye , M78N7FMze , M78N7MKxe , M78N7MKye , M78N7MKze , M78N7MMxe , M78N7MMye , & + M78N7MMze , M78N7RAxe , M78N7RAye , M78N7RAze , M78N7RDxe , M78N7RDye , M78N7RDze , & + M78N7TAxe , M78N7TAye , M78N7TAze , M78N7TDxss , M78N7TDyss , M78N7TDzss , M78N8FKxe , & + M78N8FKye , M78N8FKze , M78N8FMxe , M78N8FMye , M78N8FMze , M78N8MKxe , M78N8MKye , & + M78N8MKze , M78N8MMxe , M78N8MMye , M78N8MMze , M78N8RAxe , M78N8RAye , M78N8RAze , & + M78N8RDxe , M78N8RDye , M78N8RDze , M78N8TAxe , M78N8TAye , M78N8TAze , M78N8TDxss , & + M78N8TDyss , M78N8TDzss , M78N9FKxe , M78N9FKye , M78N9FKze , M78N9FMxe , M78N9FMye , & + M78N9FMze , M78N9MKxe , M78N9MKye , M78N9MKze , M78N9MMxe , M78N9MMye , M78N9MMze , & + M78N9RAxe , M78N9RAye , M78N9RAze , M78N9RDxe , M78N9RDye , M78N9RDze , M78N9TAxe , & + M78N9TAye , M78N9TAze , M78N9TDxss , M78N9TDyss , M78N9TDzss , M79N1FKxe , M79N1FKye , & + M79N1FKze , M79N1FMxe , M79N1FMye , M79N1FMze , M79N1MKxe , M79N1MKye , M79N1MKze , & + M79N1MMxe , M79N1MMye , M79N1MMze , M79N1RAxe , M79N1RAye , M79N1RAze , M79N1RDxe , & + M79N1RDye , M79N1RDze , M79N1TAxe , M79N1TAye , M79N1TAze , M79N1TDxss , M79N1TDyss , & + M79N1TDzss , M79N2FKxe , M79N2FKye , M79N2FKze , M79N2FMxe , M79N2FMye , M79N2FMze , & + M79N2MKxe , M79N2MKye , M79N2MKze , M79N2MMxe , M79N2MMye , M79N2MMze , M79N2RAxe , & + M79N2RAye , M79N2RAze , M79N2RDxe , M79N2RDye , M79N2RDze , M79N2TAxe , M79N2TAye , & + M79N2TAze , M79N2TDxss , M79N2TDyss , M79N2TDzss , M79N3FKxe , M79N3FKye , M79N3FKze , & + M79N3FMxe , M79N3FMye , M79N3FMze , M79N3MKxe , M79N3MKye , M79N3MKze , M79N3MMxe , & + M79N3MMye , M79N3MMze , M79N3RAxe , M79N3RAye , M79N3RAze , M79N3RDxe , M79N3RDye , & + M79N3RDze , M79N3TAxe , M79N3TAye , M79N3TAze , M79N3TDxss , M79N3TDyss , M79N3TDzss , & + M79N4FKxe , M79N4FKye , M79N4FKze , M79N4FMxe , M79N4FMye , M79N4FMze , M79N4MKxe , & + M79N4MKye , M79N4MKze , M79N4MMxe , M79N4MMye , M79N4MMze , M79N4RAxe , M79N4RAye , & + M79N4RAze , M79N4RDxe , M79N4RDye , M79N4RDze , M79N4TAxe , M79N4TAye , M79N4TAze , & + M79N4TDxss , M79N4TDyss , M79N4TDzss , M79N5FKxe , M79N5FKye , M79N5FKze , M79N5FMxe , & + M79N5FMye , M79N5FMze , M79N5MKxe , M79N5MKye , M79N5MKze , M79N5MMxe , M79N5MMye , & + M79N5MMze , M79N5RAxe , M79N5RAye , M79N5RAze , M79N5RDxe , M79N5RDye , M79N5RDze , & + M79N5TAxe , M79N5TAye , M79N5TAze , M79N5TDxss , M79N5TDyss , M79N5TDzss , M79N6FKxe , & + M79N6FKye , M79N6FKze , M79N6FMxe , M79N6FMye , M79N6FMze , M79N6MKxe , M79N6MKye , & + M79N6MKze , M79N6MMxe , M79N6MMye , M79N6MMze , M79N6RAxe , M79N6RAye , M79N6RAze , & + M79N6RDxe , M79N6RDye , M79N6RDze , M79N6TAxe , M79N6TAye , M79N6TAze , M79N6TDxss , & + M79N6TDyss , M79N6TDzss , M79N7FKxe , M79N7FKye , M79N7FKze , M79N7FMxe , M79N7FMye , & + M79N7FMze , M79N7MKxe , M79N7MKye , M79N7MKze , M79N7MMxe , M79N7MMye , M79N7MMze , & + M79N7RAxe , M79N7RAye , M79N7RAze , M79N7RDxe , M79N7RDye , M79N7RDze , M79N7TAxe , & + M79N7TAye , M79N7TAze , M79N7TDxss , M79N7TDyss , M79N7TDzss , M79N8FKxe , M79N8FKye , & + M79N8FKze , M79N8FMxe , M79N8FMye , M79N8FMze , M79N8MKxe , M79N8MKye , M79N8MKze , & + M79N8MMxe , M79N8MMye , M79N8MMze , M79N8RAxe , M79N8RAye , M79N8RAze , M79N8RDxe , & + M79N8RDye , M79N8RDze , M79N8TAxe , M79N8TAye , M79N8TAze , M79N8TDxss , M79N8TDyss , & + M79N8TDzss , M79N9FKxe , M79N9FKye , M79N9FKze , M79N9FMxe , M79N9FMye , M79N9FMze , & + M79N9MKxe , M79N9MKye , M79N9MKze , M79N9MMxe , M79N9MMye , M79N9MMze , M79N9RAxe , & + M79N9RAye , M79N9RAze , M79N9RDxe , M79N9RDye , M79N9RDze , M79N9TAxe , M79N9TAye , & + M79N9TAze , M79N9TDxss , M79N9TDyss , M79N9TDzss , M80N1FKxe , M80N1FKye , M80N1FKze , & + M80N1FMxe , M80N1FMye , M80N1FMze , M80N1MKxe , M80N1MKye , M80N1MKze , M80N1MMxe , & + M80N1MMye , M80N1MMze , M80N1RAxe , M80N1RAye , M80N1RAze , M80N1RDxe , M80N1RDye , & + M80N1RDze , M80N1TAxe , M80N1TAye , M80N1TAze , M80N1TDxss , M80N1TDyss , M80N1TDzss , & + M80N2FKxe , M80N2FKye , M80N2FKze , M80N2FMxe , M80N2FMye , M80N2FMze , M80N2MKxe , & + M80N2MKye , M80N2MKze , M80N2MMxe , M80N2MMye , M80N2MMze , M80N2RAxe , M80N2RAye , & + M80N2RAze , M80N2RDxe , M80N2RDye , M80N2RDze , M80N2TAxe , M80N2TAye , M80N2TAze , & + M80N2TDxss , M80N2TDyss , M80N2TDzss , M80N3FKxe , M80N3FKye , M80N3FKze , M80N3FMxe , & + M80N3FMye , M80N3FMze , M80N3MKxe , M80N3MKye , M80N3MKze , M80N3MMxe , M80N3MMye , & + M80N3MMze , M80N3RAxe , M80N3RAye , M80N3RAze , M80N3RDxe , M80N3RDye , M80N3RDze , & + M80N3TAxe , M80N3TAye , M80N3TAze , M80N3TDxss , M80N3TDyss , M80N3TDzss , M80N4FKxe , & + M80N4FKye , M80N4FKze , M80N4FMxe , M80N4FMye , M80N4FMze , M80N4MKxe , M80N4MKye , & + M80N4MKze , M80N4MMxe , M80N4MMye , M80N4MMze , M80N4RAxe , M80N4RAye , M80N4RAze , & + M80N4RDxe , M80N4RDye , M80N4RDze , M80N4TAxe , M80N4TAye , M80N4TAze , M80N4TDxss , & + M80N4TDyss , M80N4TDzss , M80N5FKxe , M80N5FKye , M80N5FKze , M80N5FMxe , M80N5FMye , & + M80N5FMze , M80N5MKxe , M80N5MKye , M80N5MKze , M80N5MMxe , M80N5MMye , M80N5MMze , & + M80N5RAxe , M80N5RAye , M80N5RAze , M80N5RDxe , M80N5RDye , M80N5RDze , M80N5TAxe , & + M80N5TAye , M80N5TAze , M80N5TDxss , M80N5TDyss , M80N5TDzss , M80N6FKxe , M80N6FKye , & + M80N6FKze , M80N6FMxe , M80N6FMye , M80N6FMze , M80N6MKxe , M80N6MKye , M80N6MKze , & + M80N6MMxe , M80N6MMye , M80N6MMze , M80N6RAxe , M80N6RAye , M80N6RAze , M80N6RDxe , & + M80N6RDye , M80N6RDze , M80N6TAxe , M80N6TAye , M80N6TAze , M80N6TDxss , M80N6TDyss , & + M80N6TDzss , M80N7FKxe , M80N7FKye , M80N7FKze , M80N7FMxe , M80N7FMye , M80N7FMze , & + M80N7MKxe , M80N7MKye , M80N7MKze , M80N7MMxe , M80N7MMye , M80N7MMze , M80N7RAxe , & + M80N7RAye , M80N7RAze , M80N7RDxe , M80N7RDye , M80N7RDze , M80N7TAxe , M80N7TAye , & + M80N7TAze , M80N7TDxss , M80N7TDyss , M80N7TDzss , M80N8FKxe , M80N8FKye , M80N8FKze , & + M80N8FMxe , M80N8FMye , M80N8FMze , M80N8MKxe , M80N8MKye , M80N8MKze , M80N8MMxe , & + M80N8MMye , M80N8MMze , M80N8RAxe , M80N8RAye , M80N8RAze , M80N8RDxe , M80N8RDye , & + M80N8RDze , M80N8TAxe , M80N8TAye , M80N8TAze , M80N8TDxss , M80N8TDyss , M80N8TDzss , & + M80N9FKxe , M80N9FKye , M80N9FKze , M80N9FMxe , M80N9FMye , M80N9FMze , M80N9MKxe , & + M80N9MKye , M80N9MKze , M80N9MMxe , M80N9MMye , M80N9MMze , M80N9RAxe , M80N9RAye , & + M80N9RAze , M80N9RDxe , M80N9RDye , M80N9RDze , M80N9TAxe , M80N9TAye , M80N9TAze , & + M80N9TDxss , M80N9TDyss , M80N9TDzss , M81N1FKxe , M81N1FKye , M81N1FKze , M81N1FMxe , & + M81N1FMye , M81N1FMze , M81N1MKxe , M81N1MKye , M81N1MKze , M81N1MMxe , M81N1MMye , & + M81N1MMze , M81N1RAxe , M81N1RAye , M81N1RAze , M81N1RDxe , M81N1RDye , M81N1RDze , & + M81N1TAxe , M81N1TAye , M81N1TAze , M81N1TDxss , M81N1TDyss , M81N1TDzss , M81N2FKxe , & + M81N2FKye , M81N2FKze , M81N2FMxe , M81N2FMye , M81N2FMze , M81N2MKxe , M81N2MKye , & + M81N2MKze , M81N2MMxe , M81N2MMye , M81N2MMze , M81N2RAxe , M81N2RAye , M81N2RAze , & + M81N2RDxe , M81N2RDye , M81N2RDze , M81N2TAxe , M81N2TAye , M81N2TAze , M81N2TDxss , & + M81N2TDyss , M81N2TDzss , M81N3FKxe , M81N3FKye , M81N3FKze , M81N3FMxe , M81N3FMye , & + M81N3FMze , M81N3MKxe , M81N3MKye , M81N3MKze , M81N3MMxe , M81N3MMye , M81N3MMze , & + M81N3RAxe , M81N3RAye , M81N3RAze , M81N3RDxe , M81N3RDye , M81N3RDze , M81N3TAxe , & + M81N3TAye , M81N3TAze , M81N3TDxss , M81N3TDyss , M81N3TDzss , M81N4FKxe , M81N4FKye , & + M81N4FKze , M81N4FMxe , M81N4FMye , M81N4FMze , M81N4MKxe , M81N4MKye , M81N4MKze , & + M81N4MMxe , M81N4MMye , M81N4MMze , M81N4RAxe , M81N4RAye , M81N4RAze , M81N4RDxe , & + M81N4RDye , M81N4RDze , M81N4TAxe , M81N4TAye , M81N4TAze , M81N4TDxss , M81N4TDyss , & + M81N4TDzss , M81N5FKxe , M81N5FKye , M81N5FKze , M81N5FMxe , M81N5FMye , M81N5FMze , & + M81N5MKxe , M81N5MKye , M81N5MKze , M81N5MMxe , M81N5MMye , M81N5MMze , M81N5RAxe , & + M81N5RAye , M81N5RAze , M81N5RDxe , M81N5RDye , M81N5RDze , M81N5TAxe , M81N5TAye , & + M81N5TAze , M81N5TDxss , M81N5TDyss , M81N5TDzss , M81N6FKxe , M81N6FKye , M81N6FKze , & + M81N6FMxe , M81N6FMye , M81N6FMze , M81N6MKxe , M81N6MKye , M81N6MKze , M81N6MMxe , & + M81N6MMye , M81N6MMze , M81N6RAxe , M81N6RAye , M81N6RAze , M81N6RDxe , M81N6RDye , & + M81N6RDze , M81N6TAxe , M81N6TAye , M81N6TAze , M81N6TDxss , M81N6TDyss , M81N6TDzss , & + M81N7FKxe , M81N7FKye , M81N7FKze , M81N7FMxe , M81N7FMye , M81N7FMze , M81N7MKxe , & + M81N7MKye , M81N7MKze , M81N7MMxe , M81N7MMye , M81N7MMze , M81N7RAxe , M81N7RAye , & + M81N7RAze , M81N7RDxe , M81N7RDye , M81N7RDze , M81N7TAxe , M81N7TAye , M81N7TAze , & + M81N7TDxss , M81N7TDyss , M81N7TDzss , M81N8FKxe , M81N8FKye , M81N8FKze , M81N8FMxe , & + M81N8FMye , M81N8FMze , M81N8MKxe , M81N8MKye , M81N8MKze , M81N8MMxe , M81N8MMye , & + M81N8MMze , M81N8RAxe , M81N8RAye , M81N8RAze , M81N8RDxe , M81N8RDye , M81N8RDze , & + M81N8TAxe , M81N8TAye , M81N8TAze , M81N8TDxss , M81N8TDyss , M81N8TDzss , M81N9FKxe , & + M81N9FKye , M81N9FKze , M81N9FMxe , M81N9FMye , M81N9FMze , M81N9MKxe , M81N9MKye , & + M81N9MKze , M81N9MMxe , M81N9MMye , M81N9MMze , M81N9RAxe , M81N9RAye , M81N9RAze , & + M81N9RDxe , M81N9RDye , M81N9RDze , M81N9TAxe , M81N9TAye , M81N9TAze , M81N9TDxss , & + M81N9TDyss , M81N9TDzss , M82N1FKxe , M82N1FKye , M82N1FKze , M82N1FMxe , M82N1FMye , & + M82N1FMze , M82N1MKxe , M82N1MKye , M82N1MKze , M82N1MMxe , M82N1MMye , M82N1MMze , & + M82N1RAxe , M82N1RAye , M82N1RAze , M82N1RDxe , M82N1RDye , M82N1RDze , M82N1TAxe , & + M82N1TAye , M82N1TAze , M82N1TDxss , M82N1TDyss , M82N1TDzss , M82N2FKxe , M82N2FKye , & + M82N2FKze , M82N2FMxe , M82N2FMye , M82N2FMze , M82N2MKxe , M82N2MKye , M82N2MKze , & + M82N2MMxe , M82N2MMye , M82N2MMze , M82N2RAxe , M82N2RAye , M82N2RAze , M82N2RDxe , & + M82N2RDye , M82N2RDze , M82N2TAxe , M82N2TAye , M82N2TAze , M82N2TDxss , M82N2TDyss , & + M82N2TDzss , M82N3FKxe , M82N3FKye , M82N3FKze , M82N3FMxe , M82N3FMye , M82N3FMze , & + M82N3MKxe , M82N3MKye , M82N3MKze , M82N3MMxe , M82N3MMye , M82N3MMze , M82N3RAxe , & + M82N3RAye , M82N3RAze , M82N3RDxe , M82N3RDye , M82N3RDze , M82N3TAxe , M82N3TAye , & + M82N3TAze , M82N3TDxss , M82N3TDyss , M82N3TDzss , M82N4FKxe , M82N4FKye , M82N4FKze , & + M82N4FMxe , M82N4FMye , M82N4FMze , M82N4MKxe , M82N4MKye , M82N4MKze , M82N4MMxe , & + M82N4MMye , M82N4MMze , M82N4RAxe , M82N4RAye , M82N4RAze , M82N4RDxe , M82N4RDye , & + M82N4RDze , M82N4TAxe , M82N4TAye , M82N4TAze , M82N4TDxss , M82N4TDyss , M82N4TDzss , & + M82N5FKxe , M82N5FKye , M82N5FKze , M82N5FMxe , M82N5FMye , M82N5FMze , M82N5MKxe , & + M82N5MKye , M82N5MKze , M82N5MMxe , M82N5MMye , M82N5MMze , M82N5RAxe , M82N5RAye , & + M82N5RAze , M82N5RDxe , M82N5RDye , M82N5RDze , M82N5TAxe , M82N5TAye , M82N5TAze , & + M82N5TDxss , M82N5TDyss , M82N5TDzss , M82N6FKxe , M82N6FKye , M82N6FKze , M82N6FMxe , & + M82N6FMye , M82N6FMze , M82N6MKxe , M82N6MKye , M82N6MKze , M82N6MMxe , M82N6MMye , & + M82N6MMze , M82N6RAxe , M82N6RAye , M82N6RAze , M82N6RDxe , M82N6RDye , M82N6RDze , & + M82N6TAxe , M82N6TAye , M82N6TAze , M82N6TDxss , M82N6TDyss , M82N6TDzss , M82N7FKxe , & + M82N7FKye , M82N7FKze , M82N7FMxe , M82N7FMye , M82N7FMze , M82N7MKxe , M82N7MKye , & + M82N7MKze , M82N7MMxe , M82N7MMye , M82N7MMze , M82N7RAxe , M82N7RAye , M82N7RAze , & + M82N7RDxe , M82N7RDye , M82N7RDze , M82N7TAxe , M82N7TAye , M82N7TAze , M82N7TDxss , & + M82N7TDyss , M82N7TDzss , M82N8FKxe , M82N8FKye , M82N8FKze , M82N8FMxe , M82N8FMye , & + M82N8FMze , M82N8MKxe , M82N8MKye , M82N8MKze , M82N8MMxe , M82N8MMye , M82N8MMze , & + M82N8RAxe , M82N8RAye , M82N8RAze , M82N8RDxe , M82N8RDye , M82N8RDze , M82N8TAxe , & + M82N8TAye , M82N8TAze , M82N8TDxss , M82N8TDyss , M82N8TDzss , M82N9FKxe , M82N9FKye , & + M82N9FKze , M82N9FMxe , M82N9FMye , M82N9FMze , M82N9MKxe , M82N9MKye , M82N9MKze , & + M82N9MMxe , M82N9MMye , M82N9MMze , M82N9RAxe , M82N9RAye , M82N9RAze , M82N9RDxe , & + M82N9RDye , M82N9RDze , M82N9TAxe , M82N9TAye , M82N9TAze , M82N9TDxss , M82N9TDyss , & + M82N9TDzss , M83N1FKxe , M83N1FKye , M83N1FKze , M83N1FMxe , M83N1FMye , M83N1FMze , & + M83N1MKxe , M83N1MKye , M83N1MKze , M83N1MMxe , M83N1MMye , M83N1MMze , M83N1RAxe , & + M83N1RAye , M83N1RAze , M83N1RDxe , M83N1RDye , M83N1RDze , M83N1TAxe , M83N1TAye , & + M83N1TAze , M83N1TDxss , M83N1TDyss , M83N1TDzss , M83N2FKxe , M83N2FKye , M83N2FKze , & + M83N2FMxe , M83N2FMye , M83N2FMze , M83N2MKxe , M83N2MKye , M83N2MKze , M83N2MMxe , & + M83N2MMye , M83N2MMze , M83N2RAxe , M83N2RAye , M83N2RAze , M83N2RDxe , M83N2RDye , & + M83N2RDze , M83N2TAxe , M83N2TAye , M83N2TAze , M83N2TDxss , M83N2TDyss , M83N2TDzss , & + M83N3FKxe , M83N3FKye , M83N3FKze , M83N3FMxe , M83N3FMye , M83N3FMze , M83N3MKxe , & + M83N3MKye , M83N3MKze , M83N3MMxe , M83N3MMye , M83N3MMze , M83N3RAxe , M83N3RAye , & + M83N3RAze , M83N3RDxe , M83N3RDye , M83N3RDze , M83N3TAxe , M83N3TAye , M83N3TAze , & + M83N3TDxss , M83N3TDyss , M83N3TDzss , M83N4FKxe , M83N4FKye , M83N4FKze , M83N4FMxe , & + M83N4FMye , M83N4FMze , M83N4MKxe , M83N4MKye , M83N4MKze , M83N4MMxe , M83N4MMye , & + M83N4MMze , M83N4RAxe , M83N4RAye , M83N4RAze , M83N4RDxe , M83N4RDye , M83N4RDze , & + M83N4TAxe , M83N4TAye , M83N4TAze , M83N4TDxss , M83N4TDyss , M83N4TDzss , M83N5FKxe , & + M83N5FKye , M83N5FKze , M83N5FMxe , M83N5FMye , M83N5FMze , M83N5MKxe , M83N5MKye , & + M83N5MKze , M83N5MMxe , M83N5MMye , M83N5MMze , M83N5RAxe , M83N5RAye , M83N5RAze , & + M83N5RDxe , M83N5RDye , M83N5RDze , M83N5TAxe , M83N5TAye , M83N5TAze , M83N5TDxss , & + M83N5TDyss , M83N5TDzss , M83N6FKxe , M83N6FKye , M83N6FKze , M83N6FMxe , M83N6FMye , & + M83N6FMze , M83N6MKxe , M83N6MKye , M83N6MKze , M83N6MMxe , M83N6MMye , M83N6MMze , & + M83N6RAxe , M83N6RAye , M83N6RAze , M83N6RDxe , M83N6RDye , M83N6RDze , M83N6TAxe , & + M83N6TAye , M83N6TAze , M83N6TDxss , M83N6TDyss , M83N6TDzss , M83N7FKxe , M83N7FKye , & + M83N7FKze , M83N7FMxe , M83N7FMye , M83N7FMze , M83N7MKxe , M83N7MKye , M83N7MKze , & + M83N7MMxe , M83N7MMye , M83N7MMze , M83N7RAxe , M83N7RAye , M83N7RAze , M83N7RDxe , & + M83N7RDye , M83N7RDze , M83N7TAxe , M83N7TAye , M83N7TAze , M83N7TDxss , M83N7TDyss , & + M83N7TDzss , M83N8FKxe , M83N8FKye , M83N8FKze , M83N8FMxe , M83N8FMye , M83N8FMze , & + M83N8MKxe , M83N8MKye , M83N8MKze , M83N8MMxe , M83N8MMye , M83N8MMze , M83N8RAxe , & + M83N8RAye , M83N8RAze , M83N8RDxe , M83N8RDye , M83N8RDze , M83N8TAxe , M83N8TAye , & + M83N8TAze , M83N8TDxss , M83N8TDyss , M83N8TDzss , M83N9FKxe , M83N9FKye , M83N9FKze , & + M83N9FMxe , M83N9FMye , M83N9FMze , M83N9MKxe , M83N9MKye , M83N9MKze , M83N9MMxe , & + M83N9MMye , M83N9MMze , M83N9RAxe , M83N9RAye , M83N9RAze , M83N9RDxe , M83N9RDye , & + M83N9RDze , M83N9TAxe , M83N9TAye , M83N9TAze , M83N9TDxss , M83N9TDyss , M83N9TDzss , & + M84N1FKxe , M84N1FKye , M84N1FKze , M84N1FMxe , M84N1FMye , M84N1FMze , M84N1MKxe , & + M84N1MKye , M84N1MKze , M84N1MMxe , M84N1MMye , M84N1MMze , M84N1RAxe , M84N1RAye , & + M84N1RAze , M84N1RDxe , M84N1RDye , M84N1RDze , M84N1TAxe , M84N1TAye , M84N1TAze , & + M84N1TDxss , M84N1TDyss , M84N1TDzss , M84N2FKxe , M84N2FKye , M84N2FKze , M84N2FMxe , & + M84N2FMye , M84N2FMze , M84N2MKxe , M84N2MKye , M84N2MKze , M84N2MMxe , M84N2MMye , & + M84N2MMze , M84N2RAxe , M84N2RAye , M84N2RAze , M84N2RDxe , M84N2RDye , M84N2RDze , & + M84N2TAxe , M84N2TAye , M84N2TAze , M84N2TDxss , M84N2TDyss , M84N2TDzss , M84N3FKxe , & + M84N3FKye , M84N3FKze , M84N3FMxe , M84N3FMye , M84N3FMze , M84N3MKxe , M84N3MKye , & + M84N3MKze , M84N3MMxe , M84N3MMye , M84N3MMze , M84N3RAxe , M84N3RAye , M84N3RAze , & + M84N3RDxe , M84N3RDye , M84N3RDze , M84N3TAxe , M84N3TAye , M84N3TAze , M84N3TDxss , & + M84N3TDyss , M84N3TDzss , M84N4FKxe , M84N4FKye , M84N4FKze , M84N4FMxe , M84N4FMye , & + M84N4FMze , M84N4MKxe , M84N4MKye , M84N4MKze , M84N4MMxe , M84N4MMye , M84N4MMze , & + M84N4RAxe , M84N4RAye , M84N4RAze , M84N4RDxe , M84N4RDye , M84N4RDze , M84N4TAxe , & + M84N4TAye , M84N4TAze , M84N4TDxss , M84N4TDyss , M84N4TDzss , M84N5FKxe , M84N5FKye , & + M84N5FKze , M84N5FMxe , M84N5FMye , M84N5FMze , M84N5MKxe , M84N5MKye , M84N5MKze , & + M84N5MMxe , M84N5MMye , M84N5MMze , M84N5RAxe , M84N5RAye , M84N5RAze , M84N5RDxe , & + M84N5RDye , M84N5RDze , M84N5TAxe , M84N5TAye , M84N5TAze , M84N5TDxss , M84N5TDyss , & + M84N5TDzss , M84N6FKxe , M84N6FKye , M84N6FKze , M84N6FMxe , M84N6FMye , M84N6FMze , & + M84N6MKxe , M84N6MKye , M84N6MKze , M84N6MMxe , M84N6MMye , M84N6MMze , M84N6RAxe , & + M84N6RAye , M84N6RAze , M84N6RDxe , M84N6RDye , M84N6RDze , M84N6TAxe , M84N6TAye , & + M84N6TAze , M84N6TDxss , M84N6TDyss , M84N6TDzss , M84N7FKxe , M84N7FKye , M84N7FKze , & + M84N7FMxe , M84N7FMye , M84N7FMze , M84N7MKxe , M84N7MKye , M84N7MKze , M84N7MMxe , & + M84N7MMye , M84N7MMze , M84N7RAxe , M84N7RAye , M84N7RAze , M84N7RDxe , M84N7RDye , & + M84N7RDze , M84N7TAxe , M84N7TAye , M84N7TAze , M84N7TDxss , M84N7TDyss , M84N7TDzss , & + M84N8FKxe , M84N8FKye , M84N8FKze , M84N8FMxe , M84N8FMye , M84N8FMze , M84N8MKxe , & + M84N8MKye , M84N8MKze , M84N8MMxe , M84N8MMye , M84N8MMze , M84N8RAxe , M84N8RAye , & + M84N8RAze , M84N8RDxe , M84N8RDye , M84N8RDze , M84N8TAxe , M84N8TAye , M84N8TAze , & + M84N8TDxss , M84N8TDyss , M84N8TDzss , M84N9FKxe , M84N9FKye , M84N9FKze , M84N9FMxe , & + M84N9FMye , M84N9FMze , M84N9MKxe , M84N9MKye , M84N9MKze , M84N9MMxe , M84N9MMye , & + M84N9MMze , M84N9RAxe , M84N9RAye , M84N9RAze , M84N9RDxe , M84N9RDye , M84N9RDze , & + M84N9TAxe , M84N9TAye , M84N9TAze , M84N9TDxss , M84N9TDyss , M84N9TDzss , M85N1FKxe , & + M85N1FKye , M85N1FKze , M85N1FMxe , M85N1FMye , M85N1FMze , M85N1MKxe , M85N1MKye , & + M85N1MKze , M85N1MMxe , M85N1MMye , M85N1MMze , M85N1RAxe , M85N1RAye , M85N1RAze , & + M85N1RDxe , M85N1RDye , M85N1RDze , M85N1TAxe , M85N1TAye , M85N1TAze , M85N1TDxss , & + M85N1TDyss , M85N1TDzss , M85N2FKxe , M85N2FKye , M85N2FKze , M85N2FMxe , M85N2FMye , & + M85N2FMze , M85N2MKxe , M85N2MKye , M85N2MKze , M85N2MMxe , M85N2MMye , M85N2MMze , & + M85N2RAxe , M85N2RAye , M85N2RAze , M85N2RDxe , M85N2RDye , M85N2RDze , M85N2TAxe , & + M85N2TAye , M85N2TAze , M85N2TDxss , M85N2TDyss , M85N2TDzss , M85N3FKxe , M85N3FKye , & + M85N3FKze , M85N3FMxe , M85N3FMye , M85N3FMze , M85N3MKxe , M85N3MKye , M85N3MKze , & + M85N3MMxe , M85N3MMye , M85N3MMze , M85N3RAxe , M85N3RAye , M85N3RAze , M85N3RDxe , & + M85N3RDye , M85N3RDze , M85N3TAxe , M85N3TAye , M85N3TAze , M85N3TDxss , M85N3TDyss , & + M85N3TDzss , M85N4FKxe , M85N4FKye , M85N4FKze , M85N4FMxe , M85N4FMye , M85N4FMze , & + M85N4MKxe , M85N4MKye , M85N4MKze , M85N4MMxe , M85N4MMye , M85N4MMze , M85N4RAxe , & + M85N4RAye , M85N4RAze , M85N4RDxe , M85N4RDye , M85N4RDze , M85N4TAxe , M85N4TAye , & + M85N4TAze , M85N4TDxss , M85N4TDyss , M85N4TDzss , M85N5FKxe , M85N5FKye , M85N5FKze , & + M85N5FMxe , M85N5FMye , M85N5FMze , M85N5MKxe , M85N5MKye , M85N5MKze , M85N5MMxe , & + M85N5MMye , M85N5MMze , M85N5RAxe , M85N5RAye , M85N5RAze , M85N5RDxe , M85N5RDye , & + M85N5RDze , M85N5TAxe , M85N5TAye , M85N5TAze , M85N5TDxss , M85N5TDyss , M85N5TDzss , & + M85N6FKxe , M85N6FKye , M85N6FKze , M85N6FMxe , M85N6FMye , M85N6FMze , M85N6MKxe , & + M85N6MKye , M85N6MKze , M85N6MMxe , M85N6MMye , M85N6MMze , M85N6RAxe , M85N6RAye , & + M85N6RAze , M85N6RDxe , M85N6RDye , M85N6RDze , M85N6TAxe , M85N6TAye , M85N6TAze , & + M85N6TDxss , M85N6TDyss , M85N6TDzss , M85N7FKxe , M85N7FKye , M85N7FKze , M85N7FMxe , & + M85N7FMye , M85N7FMze , M85N7MKxe , M85N7MKye , M85N7MKze , M85N7MMxe , M85N7MMye , & + M85N7MMze , M85N7RAxe , M85N7RAye , M85N7RAze , M85N7RDxe , M85N7RDye , M85N7RDze , & + M85N7TAxe , M85N7TAye , M85N7TAze , M85N7TDxss , M85N7TDyss , M85N7TDzss , M85N8FKxe , & + M85N8FKye , M85N8FKze , M85N8FMxe , M85N8FMye , M85N8FMze , M85N8MKxe , M85N8MKye , & + M85N8MKze , M85N8MMxe , M85N8MMye , M85N8MMze , M85N8RAxe , M85N8RAye , M85N8RAze , & + M85N8RDxe , M85N8RDye , M85N8RDze , M85N8TAxe , M85N8TAye , M85N8TAze , M85N8TDxss , & + M85N8TDyss , M85N8TDzss , M85N9FKxe , M85N9FKye , M85N9FKze , M85N9FMxe , M85N9FMye , & + M85N9FMze , M85N9MKxe , M85N9MKye , M85N9MKze , M85N9MMxe , M85N9MMye , M85N9MMze , & + M85N9RAxe , M85N9RAye , M85N9RAze , M85N9RDxe /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry12(1670) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M85N9RDye , M85N9RDze , M85N9TAxe , M85N9TAye , M85N9TAze , M85N9TDxss , M85N9TDyss , & + M85N9TDzss , M86N1FKxe , M86N1FKye , M86N1FKze , M86N1FMxe , M86N1FMye , M86N1FMze , & + M86N1MKxe , M86N1MKye , M86N1MKze , M86N1MMxe , M86N1MMye , M86N1MMze , M86N1RAxe , & + M86N1RAye , M86N1RAze , M86N1RDxe , M86N1RDye , M86N1RDze , M86N1TAxe , M86N1TAye , & + M86N1TAze , M86N1TDxss , M86N1TDyss , M86N1TDzss , M86N2FKxe , M86N2FKye , M86N2FKze , & + M86N2FMxe , M86N2FMye , M86N2FMze , M86N2MKxe , M86N2MKye , M86N2MKze , M86N2MMxe , & + M86N2MMye , M86N2MMze , M86N2RAxe , M86N2RAye , M86N2RAze , M86N2RDxe , M86N2RDye , & + M86N2RDze , M86N2TAxe , M86N2TAye , M86N2TAze , M86N2TDxss , M86N2TDyss , M86N2TDzss , & + M86N3FKxe , M86N3FKye , M86N3FKze , M86N3FMxe , M86N3FMye , M86N3FMze , M86N3MKxe , & + M86N3MKye , M86N3MKze , M86N3MMxe , M86N3MMye , M86N3MMze , M86N3RAxe , M86N3RAye , & + M86N3RAze , M86N3RDxe , M86N3RDye , M86N3RDze , M86N3TAxe , M86N3TAye , M86N3TAze , & + M86N3TDxss , M86N3TDyss , M86N3TDzss , M86N4FKxe , M86N4FKye , M86N4FKze , M86N4FMxe , & + M86N4FMye , M86N4FMze , M86N4MKxe , M86N4MKye , M86N4MKze , M86N4MMxe , M86N4MMye , & + M86N4MMze , M86N4RAxe , M86N4RAye , M86N4RAze , M86N4RDxe , M86N4RDye , M86N4RDze , & + M86N4TAxe , M86N4TAye , M86N4TAze , M86N4TDxss , M86N4TDyss , M86N4TDzss , M86N5FKxe , & + M86N5FKye , M86N5FKze , M86N5FMxe , M86N5FMye , M86N5FMze , M86N5MKxe , M86N5MKye , & + M86N5MKze , M86N5MMxe , M86N5MMye , M86N5MMze , M86N5RAxe , M86N5RAye , M86N5RAze , & + M86N5RDxe , M86N5RDye , M86N5RDze , M86N5TAxe , M86N5TAye , M86N5TAze , M86N5TDxss , & + M86N5TDyss , M86N5TDzss , M86N6FKxe , M86N6FKye , M86N6FKze , M86N6FMxe , M86N6FMye , & + M86N6FMze , M86N6MKxe , M86N6MKye , M86N6MKze , M86N6MMxe , M86N6MMye , M86N6MMze , & + M86N6RAxe , M86N6RAye , M86N6RAze , M86N6RDxe , M86N6RDye , M86N6RDze , M86N6TAxe , & + M86N6TAye , M86N6TAze , M86N6TDxss , M86N6TDyss , M86N6TDzss , M86N7FKxe , M86N7FKye , & + M86N7FKze , M86N7FMxe , M86N7FMye , M86N7FMze , M86N7MKxe , M86N7MKye , M86N7MKze , & + M86N7MMxe , M86N7MMye , M86N7MMze , M86N7RAxe , M86N7RAye , M86N7RAze , M86N7RDxe , & + M86N7RDye , M86N7RDze , M86N7TAxe , M86N7TAye , M86N7TAze , M86N7TDxss , M86N7TDyss , & + M86N7TDzss , M86N8FKxe , M86N8FKye , M86N8FKze , M86N8FMxe , M86N8FMye , M86N8FMze , & + M86N8MKxe , M86N8MKye , M86N8MKze , M86N8MMxe , M86N8MMye , M86N8MMze , M86N8RAxe , & + M86N8RAye , M86N8RAze , M86N8RDxe , M86N8RDye , M86N8RDze , M86N8TAxe , M86N8TAye , & + M86N8TAze , M86N8TDxss , M86N8TDyss , M86N8TDzss , M86N9FKxe , M86N9FKye , M86N9FKze , & + M86N9FMxe , M86N9FMye , M86N9FMze , M86N9MKxe , M86N9MKye , M86N9MKze , M86N9MMxe , & + M86N9MMye , M86N9MMze , M86N9RAxe , M86N9RAye , M86N9RAze , M86N9RDxe , M86N9RDye , & + M86N9RDze , M86N9TAxe , M86N9TAye , M86N9TAze , M86N9TDxss , M86N9TDyss , M86N9TDzss , & + M87N1FKxe , M87N1FKye , M87N1FKze , M87N1FMxe , M87N1FMye , M87N1FMze , M87N1MKxe , & + M87N1MKye , M87N1MKze , M87N1MMxe , M87N1MMye , M87N1MMze , M87N1RAxe , M87N1RAye , & + M87N1RAze , M87N1RDxe , M87N1RDye , M87N1RDze , M87N1TAxe , M87N1TAye , M87N1TAze , & + M87N1TDxss , M87N1TDyss , M87N1TDzss , M87N2FKxe , M87N2FKye , M87N2FKze , M87N2FMxe , & + M87N2FMye , M87N2FMze , M87N2MKxe , M87N2MKye , M87N2MKze , M87N2MMxe , M87N2MMye , & + M87N2MMze , M87N2RAxe , M87N2RAye , M87N2RAze , M87N2RDxe , M87N2RDye , M87N2RDze , & + M87N2TAxe , M87N2TAye , M87N2TAze , M87N2TDxss , M87N2TDyss , M87N2TDzss , M87N3FKxe , & + M87N3FKye , M87N3FKze , M87N3FMxe , M87N3FMye , M87N3FMze , M87N3MKxe , M87N3MKye , & + M87N3MKze , M87N3MMxe , M87N3MMye , M87N3MMze , M87N3RAxe , M87N3RAye , M87N3RAze , & + M87N3RDxe , M87N3RDye , M87N3RDze , M87N3TAxe , M87N3TAye , M87N3TAze , M87N3TDxss , & + M87N3TDyss , M87N3TDzss , M87N4FKxe , M87N4FKye , M87N4FKze , M87N4FMxe , M87N4FMye , & + M87N4FMze , M87N4MKxe , M87N4MKye , M87N4MKze , M87N4MMxe , M87N4MMye , M87N4MMze , & + M87N4RAxe , M87N4RAye , M87N4RAze , M87N4RDxe , M87N4RDye , M87N4RDze , M87N4TAxe , & + M87N4TAye , M87N4TAze , M87N4TDxss , M87N4TDyss , M87N4TDzss , M87N5FKxe , M87N5FKye , & + M87N5FKze , M87N5FMxe , M87N5FMye , M87N5FMze , M87N5MKxe , M87N5MKye , M87N5MKze , & + M87N5MMxe , M87N5MMye , M87N5MMze , M87N5RAxe , M87N5RAye , M87N5RAze , M87N5RDxe , & + M87N5RDye , M87N5RDze , M87N5TAxe , M87N5TAye , M87N5TAze , M87N5TDxss , M87N5TDyss , & + M87N5TDzss , M87N6FKxe , M87N6FKye , M87N6FKze , M87N6FMxe , M87N6FMye , M87N6FMze , & + M87N6MKxe , M87N6MKye , M87N6MKze , M87N6MMxe , M87N6MMye , M87N6MMze , M87N6RAxe , & + M87N6RAye , M87N6RAze , M87N6RDxe , M87N6RDye , M87N6RDze , M87N6TAxe , M87N6TAye , & + M87N6TAze , M87N6TDxss , M87N6TDyss , M87N6TDzss , M87N7FKxe , M87N7FKye , M87N7FKze , & + M87N7FMxe , M87N7FMye , M87N7FMze , M87N7MKxe , M87N7MKye , M87N7MKze , M87N7MMxe , & + M87N7MMye , M87N7MMze , M87N7RAxe , M87N7RAye , M87N7RAze , M87N7RDxe , M87N7RDye , & + M87N7RDze , M87N7TAxe , M87N7TAye , M87N7TAze , M87N7TDxss , M87N7TDyss , M87N7TDzss , & + M87N8FKxe , M87N8FKye , M87N8FKze , M87N8FMxe , M87N8FMye , M87N8FMze , M87N8MKxe , & + M87N8MKye , M87N8MKze , M87N8MMxe , M87N8MMye , M87N8MMze , M87N8RAxe , M87N8RAye , & + M87N8RAze , M87N8RDxe , M87N8RDye , M87N8RDze , M87N8TAxe , M87N8TAye , M87N8TAze , & + M87N8TDxss , M87N8TDyss , M87N8TDzss , M87N9FKxe , M87N9FKye , M87N9FKze , M87N9FMxe , & + M87N9FMye , M87N9FMze , M87N9MKxe , M87N9MKye , M87N9MKze , M87N9MMxe , M87N9MMye , & + M87N9MMze , M87N9RAxe , M87N9RAye , M87N9RAze , M87N9RDxe , M87N9RDye , M87N9RDze , & + M87N9TAxe , M87N9TAye , M87N9TAze , M87N9TDxss , M87N9TDyss , M87N9TDzss , M88N1FKxe , & + M88N1FKye , M88N1FKze , M88N1FMxe , M88N1FMye , M88N1FMze , M88N1MKxe , M88N1MKye , & + M88N1MKze , M88N1MMxe , M88N1MMye , M88N1MMze , M88N1RAxe , M88N1RAye , M88N1RAze , & + M88N1RDxe , M88N1RDye , M88N1RDze , M88N1TAxe , M88N1TAye , M88N1TAze , M88N1TDxss , & + M88N1TDyss , M88N1TDzss , M88N2FKxe , M88N2FKye , M88N2FKze , M88N2FMxe , M88N2FMye , & + M88N2FMze , M88N2MKxe , M88N2MKye , M88N2MKze , M88N2MMxe , M88N2MMye , M88N2MMze , & + M88N2RAxe , M88N2RAye , M88N2RAze , M88N2RDxe , M88N2RDye , M88N2RDze , M88N2TAxe , & + M88N2TAye , M88N2TAze , M88N2TDxss , M88N2TDyss , M88N2TDzss , M88N3FKxe , M88N3FKye , & + M88N3FKze , M88N3FMxe , M88N3FMye , M88N3FMze , M88N3MKxe , M88N3MKye , M88N3MKze , & + M88N3MMxe , M88N3MMye , M88N3MMze , M88N3RAxe , M88N3RAye , M88N3RAze , M88N3RDxe , & + M88N3RDye , M88N3RDze , M88N3TAxe , M88N3TAye , M88N3TAze , M88N3TDxss , M88N3TDyss , & + M88N3TDzss , M88N4FKxe , M88N4FKye , M88N4FKze , M88N4FMxe , M88N4FMye , M88N4FMze , & + M88N4MKxe , M88N4MKye , M88N4MKze , M88N4MMxe , M88N4MMye , M88N4MMze , M88N4RAxe , & + M88N4RAye , M88N4RAze , M88N4RDxe , M88N4RDye , M88N4RDze , M88N4TAxe , M88N4TAye , & + M88N4TAze , M88N4TDxss , M88N4TDyss , M88N4TDzss , M88N5FKxe , M88N5FKye , M88N5FKze , & + M88N5FMxe , M88N5FMye , M88N5FMze , M88N5MKxe , M88N5MKye , M88N5MKze , M88N5MMxe , & + M88N5MMye , M88N5MMze , M88N5RAxe , M88N5RAye , M88N5RAze , M88N5RDxe , M88N5RDye , & + M88N5RDze , M88N5TAxe , M88N5TAye , M88N5TAze , M88N5TDxss , M88N5TDyss , M88N5TDzss , & + M88N6FKxe , M88N6FKye , M88N6FKze , M88N6FMxe , M88N6FMye , M88N6FMze , M88N6MKxe , & + M88N6MKye , M88N6MKze , M88N6MMxe , M88N6MMye , M88N6MMze , M88N6RAxe , M88N6RAye , & + M88N6RAze , M88N6RDxe , M88N6RDye , M88N6RDze , M88N6TAxe , M88N6TAye , M88N6TAze , & + M88N6TDxss , M88N6TDyss , M88N6TDzss , M88N7FKxe , M88N7FKye , M88N7FKze , M88N7FMxe , & + M88N7FMye , M88N7FMze , M88N7MKxe , M88N7MKye , M88N7MKze , M88N7MMxe , M88N7MMye , & + M88N7MMze , M88N7RAxe , M88N7RAye , M88N7RAze , M88N7RDxe , M88N7RDye , M88N7RDze , & + M88N7TAxe , M88N7TAye , M88N7TAze , M88N7TDxss , M88N7TDyss , M88N7TDzss , M88N8FKxe , & + M88N8FKye , M88N8FKze , M88N8FMxe , M88N8FMye , M88N8FMze , M88N8MKxe , M88N8MKye , & + M88N8MKze , M88N8MMxe , M88N8MMye , M88N8MMze , M88N8RAxe , M88N8RAye , M88N8RAze , & + M88N8RDxe , M88N8RDye , M88N8RDze , M88N8TAxe , M88N8TAye , M88N8TAze , M88N8TDxss , & + M88N8TDyss , M88N8TDzss , M88N9FKxe , M88N9FKye , M88N9FKze , M88N9FMxe , M88N9FMye , & + M88N9FMze , M88N9MKxe , M88N9MKye , M88N9MKze , M88N9MMxe , M88N9MMye , M88N9MMze , & + M88N9RAxe , M88N9RAye , M88N9RAze , M88N9RDxe , M88N9RDye , M88N9RDze , M88N9TAxe , & + M88N9TAye , M88N9TAze , M88N9TDxss , M88N9TDyss , M88N9TDzss , M89N1FKxe , M89N1FKye , & + M89N1FKze , M89N1FMxe , M89N1FMye , M89N1FMze , M89N1MKxe , M89N1MKye , M89N1MKze , & + M89N1MMxe , M89N1MMye , M89N1MMze , M89N1RAxe , M89N1RAye , M89N1RAze , M89N1RDxe , & + M89N1RDye , M89N1RDze , M89N1TAxe , M89N1TAye , M89N1TAze , M89N1TDxss , M89N1TDyss , & + M89N1TDzss , M89N2FKxe , M89N2FKye , M89N2FKze , M89N2FMxe , M89N2FMye , M89N2FMze , & + M89N2MKxe , M89N2MKye , M89N2MKze , M89N2MMxe , M89N2MMye , M89N2MMze , M89N2RAxe , & + M89N2RAye , M89N2RAze , M89N2RDxe , M89N2RDye , M89N2RDze , M89N2TAxe , M89N2TAye , & + M89N2TAze , M89N2TDxss , M89N2TDyss , M89N2TDzss , M89N3FKxe , M89N3FKye , M89N3FKze , & + M89N3FMxe , M89N3FMye , M89N3FMze , M89N3MKxe , M89N3MKye , M89N3MKze , M89N3MMxe , & + M89N3MMye , M89N3MMze , M89N3RAxe , M89N3RAye , M89N3RAze , M89N3RDxe , M89N3RDye , & + M89N3RDze , M89N3TAxe , M89N3TAye , M89N3TAze , M89N3TDxss , M89N3TDyss , M89N3TDzss , & + M89N4FKxe , M89N4FKye , M89N4FKze , M89N4FMxe , M89N4FMye , M89N4FMze , M89N4MKxe , & + M89N4MKye , M89N4MKze , M89N4MMxe , M89N4MMye , M89N4MMze , M89N4RAxe , M89N4RAye , & + M89N4RAze , M89N4RDxe , M89N4RDye , M89N4RDze , M89N4TAxe , M89N4TAye , M89N4TAze , & + M89N4TDxss , M89N4TDyss , M89N4TDzss , M89N5FKxe , M89N5FKye , M89N5FKze , M89N5FMxe , & + M89N5FMye , M89N5FMze , M89N5MKxe , M89N5MKye , M89N5MKze , M89N5MMxe , M89N5MMye , & + M89N5MMze , M89N5RAxe , M89N5RAye , M89N5RAze , M89N5RDxe , M89N5RDye , M89N5RDze , & + M89N5TAxe , M89N5TAye , M89N5TAze , M89N5TDxss , M89N5TDyss , M89N5TDzss , M89N6FKxe , & + M89N6FKye , M89N6FKze , M89N6FMxe , M89N6FMye , M89N6FMze , M89N6MKxe , M89N6MKye , & + M89N6MKze , M89N6MMxe , M89N6MMye , M89N6MMze , M89N6RAxe , M89N6RAye , M89N6RAze , & + M89N6RDxe , M89N6RDye , M89N6RDze , M89N6TAxe , M89N6TAye , M89N6TAze , M89N6TDxss , & + M89N6TDyss , M89N6TDzss , M89N7FKxe , M89N7FKye , M89N7FKze , M89N7FMxe , M89N7FMye , & + M89N7FMze , M89N7MKxe , M89N7MKye , M89N7MKze , M89N7MMxe , M89N7MMye , M89N7MMze , & + M89N7RAxe , M89N7RAye , M89N7RAze , M89N7RDxe , M89N7RDye , M89N7RDze , M89N7TAxe , & + M89N7TAye , M89N7TAze , M89N7TDxss , M89N7TDyss , M89N7TDzss , M89N8FKxe , M89N8FKye , & + M89N8FKze , M89N8FMxe , M89N8FMye , M89N8FMze , M89N8MKxe , M89N8MKye , M89N8MKze , & + M89N8MMxe , M89N8MMye , M89N8MMze , M89N8RAxe , M89N8RAye , M89N8RAze , M89N8RDxe , & + M89N8RDye , M89N8RDze , M89N8TAxe , M89N8TAye , M89N8TAze , M89N8TDxss , M89N8TDyss , & + M89N8TDzss , M89N9FKxe , M89N9FKye , M89N9FKze , M89N9FMxe , M89N9FMye , M89N9FMze , & + M89N9MKxe , M89N9MKye , M89N9MKze , M89N9MMxe , M89N9MMye , M89N9MMze , M89N9RAxe , & + M89N9RAye , M89N9RAze , M89N9RDxe , M89N9RDye , M89N9RDze , M89N9TAxe , M89N9TAye , & + M89N9TAze , M89N9TDxss , M89N9TDyss , M89N9TDzss , M90N1FKxe , M90N1FKye , M90N1FKze , & + M90N1FMxe , M90N1FMye , M90N1FMze , M90N1MKxe , M90N1MKye , M90N1MKze , M90N1MMxe , & + M90N1MMye , M90N1MMze , M90N1RAxe , M90N1RAye , M90N1RAze , M90N1RDxe , M90N1RDye , & + M90N1RDze , M90N1TAxe , M90N1TAye , M90N1TAze , M90N1TDxss , M90N1TDyss , M90N1TDzss , & + M90N2FKxe , M90N2FKye , M90N2FKze , M90N2FMxe , M90N2FMye , M90N2FMze , M90N2MKxe , & + M90N2MKye , M90N2MKze , M90N2MMxe , M90N2MMye , M90N2MMze , M90N2RAxe , M90N2RAye , & + M90N2RAze , M90N2RDxe , M90N2RDye , M90N2RDze , M90N2TAxe , M90N2TAye , M90N2TAze , & + M90N2TDxss , M90N2TDyss , M90N2TDzss , M90N3FKxe , M90N3FKye , M90N3FKze , M90N3FMxe , & + M90N3FMye , M90N3FMze , M90N3MKxe , M90N3MKye , M90N3MKze , M90N3MMxe , M90N3MMye , & + M90N3MMze , M90N3RAxe , M90N3RAye , M90N3RAze , M90N3RDxe , M90N3RDye , M90N3RDze , & + M90N3TAxe , M90N3TAye , M90N3TAze , M90N3TDxss , M90N3TDyss , M90N3TDzss , M90N4FKxe , & + M90N4FKye , M90N4FKze , M90N4FMxe , M90N4FMye , M90N4FMze , M90N4MKxe , M90N4MKye , & + M90N4MKze , M90N4MMxe , M90N4MMye , M90N4MMze , M90N4RAxe , M90N4RAye , M90N4RAze , & + M90N4RDxe , M90N4RDye , M90N4RDze , M90N4TAxe , M90N4TAye , M90N4TAze , M90N4TDxss , & + M90N4TDyss , M90N4TDzss , M90N5FKxe , M90N5FKye , M90N5FKze , M90N5FMxe , M90N5FMye , & + M90N5FMze , M90N5MKxe , M90N5MKye , M90N5MKze , M90N5MMxe , M90N5MMye , M90N5MMze , & + M90N5RAxe , M90N5RAye , M90N5RAze , M90N5RDxe , M90N5RDye , M90N5RDze , M90N5TAxe , & + M90N5TAye , M90N5TAze , M90N5TDxss , M90N5TDyss , M90N5TDzss , M90N6FKxe , M90N6FKye , & + M90N6FKze , M90N6FMxe , M90N6FMye , M90N6FMze , M90N6MKxe , M90N6MKye , M90N6MKze , & + M90N6MMxe , M90N6MMye , M90N6MMze , M90N6RAxe , M90N6RAye , M90N6RAze , M90N6RDxe , & + M90N6RDye , M90N6RDze , M90N6TAxe , M90N6TAye , M90N6TAze , M90N6TDxss , M90N6TDyss , & + M90N6TDzss , M90N7FKxe , M90N7FKye , M90N7FKze , M90N7FMxe , M90N7FMye , M90N7FMze , & + M90N7MKxe , M90N7MKye , M90N7MKze , M90N7MMxe , M90N7MMye , M90N7MMze , M90N7RAxe , & + M90N7RAye , M90N7RAze , M90N7RDxe , M90N7RDye , M90N7RDze , M90N7TAxe , M90N7TAye , & + M90N7TAze , M90N7TDxss , M90N7TDyss , M90N7TDzss , M90N8FKxe , M90N8FKye , M90N8FKze , & + M90N8FMxe , M90N8FMye , M90N8FMze , M90N8MKxe , M90N8MKye , M90N8MKze , M90N8MMxe , & + M90N8MMye , M90N8MMze , M90N8RAxe , M90N8RAye , M90N8RAze , M90N8RDxe , M90N8RDye , & + M90N8RDze , M90N8TAxe , M90N8TAye , M90N8TAze , M90N8TDxss , M90N8TDyss , M90N8TDzss , & + M90N9FKxe , M90N9FKye , M90N9FKze , M90N9FMxe , M90N9FMye , M90N9FMze , M90N9MKxe , & + M90N9MKye , M90N9MKze , M90N9MMxe , M90N9MMye , M90N9MMze , M90N9RAxe , M90N9RAye , & + M90N9RAze , M90N9RDxe , M90N9RDye , M90N9RDze , M90N9TAxe , M90N9TAye , M90N9TAze , & + M90N9TDxss , M90N9TDyss , M90N9TDzss , M91N1FKxe , M91N1FKye , M91N1FKze , M91N1FMxe , & + M91N1FMye , M91N1FMze , M91N1MKxe , M91N1MKye , M91N1MKze , M91N1MMxe , M91N1MMye , & + M91N1MMze , M91N1RAxe , M91N1RAye , M91N1RAze , M91N1RDxe , M91N1RDye , M91N1RDze , & + M91N1TAxe , M91N1TAye , M91N1TAze , M91N1TDxss , M91N1TDyss , M91N1TDzss , M91N2FKxe , & + M91N2FKye , M91N2FKze , M91N2FMxe , M91N2FMye , M91N2FMze , M91N2MKxe , M91N2MKye , & + M91N2MKze , M91N2MMxe , M91N2MMye , M91N2MMze , M91N2RAxe , M91N2RAye , M91N2RAze , & + M91N2RDxe , M91N2RDye , M91N2RDze , M91N2TAxe , M91N2TAye , M91N2TAze , M91N2TDxss , & + M91N2TDyss , M91N2TDzss , M91N3FKxe , M91N3FKye , M91N3FKze , M91N3FMxe , M91N3FMye , & + M91N3FMze , M91N3MKxe , M91N3MKye , M91N3MKze , M91N3MMxe , M91N3MMye , M91N3MMze , & + M91N3RAxe , M91N3RAye , M91N3RAze , M91N3RDxe , M91N3RDye , M91N3RDze , M91N3TAxe , & + M91N3TAye , M91N3TAze , M91N3TDxss , M91N3TDyss , M91N3TDzss , M91N4FKxe , M91N4FKye , & + M91N4FKze , M91N4FMxe , M91N4FMye , M91N4FMze , M91N4MKxe , M91N4MKye , M91N4MKze , & + M91N4MMxe , M91N4MMye , M91N4MMze , M91N4RAxe , M91N4RAye , M91N4RAze , M91N4RDxe , & + M91N4RDye , M91N4RDze , M91N4TAxe , M91N4TAye , M91N4TAze , M91N4TDxss , M91N4TDyss , & + M91N4TDzss , M91N5FKxe , M91N5FKye , M91N5FKze , M91N5FMxe , M91N5FMye , M91N5FMze , & + M91N5MKxe , M91N5MKye , M91N5MKze , M91N5MMxe , M91N5MMye , M91N5MMze , M91N5RAxe , & + M91N5RAye , M91N5RAze , M91N5RDxe , M91N5RDye , M91N5RDze , M91N5TAxe , M91N5TAye , & + M91N5TAze , M91N5TDxss , M91N5TDyss , M91N5TDzss , M91N6FKxe , M91N6FKye , M91N6FKze , & + M91N6FMxe , M91N6FMye , M91N6FMze , M91N6MKxe , M91N6MKye , M91N6MKze , M91N6MMxe , & + M91N6MMye , M91N6MMze , M91N6RAxe , M91N6RAye , M91N6RAze , M91N6RDxe , M91N6RDye , & + M91N6RDze , M91N6TAxe , M91N6TAye , M91N6TAze , M91N6TDxss , M91N6TDyss , M91N6TDzss , & + M91N7FKxe , M91N7FKye , M91N7FKze , M91N7FMxe , M91N7FMye , M91N7FMze , M91N7MKxe , & + M91N7MKye , M91N7MKze , M91N7MMxe , M91N7MMye , M91N7MMze , M91N7RAxe , M91N7RAye , & + M91N7RAze , M91N7RDxe , M91N7RDye , M91N7RDze , M91N7TAxe , M91N7TAye , M91N7TAze , & + M91N7TDxss , M91N7TDyss , M91N7TDzss , M91N8FKxe , M91N8FKye , M91N8FKze , M91N8FMxe , & + M91N8FMye , M91N8FMze , M91N8MKxe , M91N8MKye , M91N8MKze , M91N8MMxe , M91N8MMye , & + M91N8MMze , M91N8RAxe , M91N8RAye , M91N8RAze , M91N8RDxe , M91N8RDye , M91N8RDze , & + M91N8TAxe , M91N8TAye , M91N8TAze , M91N8TDxss , M91N8TDyss , M91N8TDzss , M91N9FKxe , & + M91N9FKye , M91N9FKze , M91N9FMxe , M91N9FMye , M91N9FMze , M91N9MKxe , M91N9MKye , & + M91N9MKze , M91N9MMxe , M91N9MMye , M91N9MMze , M91N9RAxe , M91N9RAye , M91N9RAze , & + M91N9RDxe , M91N9RDye , M91N9RDze , M91N9TAxe , M91N9TAye , M91N9TAze , M91N9TDxss , & + M91N9TDyss , M91N9TDzss , M92N1FKxe , M92N1FKye , M92N1FKze , M92N1FMxe , M92N1FMye , & + M92N1FMze , M92N1MKxe , M92N1MKye , M92N1MKze , M92N1MMxe , M92N1MMye , M92N1MMze , & + M92N1RAxe , M92N1RAye , M92N1RAze , M92N1RDxe , M92N1RDye , M92N1RDze , M92N1TAxe , & + M92N1TAye , M92N1TAze , M92N1TDxss , M92N1TDyss , M92N1TDzss , M92N2FKxe , M92N2FKye , & + M92N2FKze , M92N2FMxe , M92N2FMye , M92N2FMze , M92N2MKxe , M92N2MKye , M92N2MKze , & + M92N2MMxe , M92N2MMye , M92N2MMze , M92N2RAxe , M92N2RAye , M92N2RAze , M92N2RDxe , & + M92N2RDye , M92N2RDze , M92N2TAxe , M92N2TAye , M92N2TAze , M92N2TDxss , M92N2TDyss , & + M92N2TDzss , M92N3FKxe , M92N3FKye , M92N3FKze , M92N3FMxe , M92N3FMye , M92N3FMze , & + M92N3MKxe , M92N3MKye , M92N3MKze , M92N3MMxe , M92N3MMye , M92N3MMze , M92N3RAxe , & + M92N3RAye , M92N3RAze , M92N3RDxe , M92N3RDye , M92N3RDze , M92N3TAxe , M92N3TAye , & + M92N3TAze , M92N3TDxss , M92N3TDyss , M92N3TDzss , M92N4FKxe , M92N4FKye , M92N4FKze , & + M92N4FMxe , M92N4FMye , M92N4FMze , M92N4MKxe , M92N4MKye , M92N4MKze , M92N4MMxe , & + M92N4MMye , M92N4MMze , M92N4RAxe , M92N4RAye , M92N4RAze , M92N4RDxe , M92N4RDye , & + M92N4RDze , M92N4TAxe , M92N4TAye , M92N4TAze , M92N4TDxss , M92N4TDyss , M92N4TDzss , & + M92N5FKxe , M92N5FKye , M92N5FKze , M92N5FMxe , M92N5FMye , M92N5FMze , M92N5MKxe , & + M92N5MKye , M92N5MKze , M92N5MMxe , M92N5MMye , M92N5MMze , M92N5RAxe , M92N5RAye , & + M92N5RAze , M92N5RDxe , M92N5RDye , M92N5RDze , M92N5TAxe , M92N5TAye , M92N5TAze , & + M92N5TDxss , M92N5TDyss , M92N5TDzss , M92N6FKxe , M92N6FKye , M92N6FKze , M92N6FMxe , & + M92N6FMye , M92N6FMze , M92N6MKxe , M92N6MKye , M92N6MKze , M92N6MMxe , M92N6MMye , & + M92N6MMze , M92N6RAxe , M92N6RAye , M92N6RAze , M92N6RDxe , M92N6RDye , M92N6RDze , & + M92N6TAxe , M92N6TAye , M92N6TAze , M92N6TDxss , M92N6TDyss , M92N6TDzss , M92N7FKxe , & + M92N7FKye , M92N7FKze , M92N7FMxe , M92N7FMye , M92N7FMze , M92N7MKxe , M92N7MKye , & + M92N7MKze , M92N7MMxe , M92N7MMye , M92N7MMze , M92N7RAxe , M92N7RAye , M92N7RAze , & + M92N7RDxe , M92N7RDye , M92N7RDze , M92N7TAxe , M92N7TAye , M92N7TAze , M92N7TDxss , & + M92N7TDyss , M92N7TDzss , M92N8FKxe , M92N8FKye , M92N8FKze , M92N8FMxe , M92N8FMye , & + M92N8FMze , M92N8MKxe , M92N8MKye , M92N8MKze , M92N8MMxe , M92N8MMye , M92N8MMze , & + M92N8RAxe , M92N8RAye , M92N8RAze , M92N8RDxe , M92N8RDye , M92N8RDze , M92N8TAxe , & + M92N8TAye , M92N8TAze , M92N8TDxss , M92N8TDyss , M92N8TDzss , M92N9FKxe , M92N9FKye , & + M92N9FKze , M92N9FMxe , M92N9FMye , M92N9FMze , M92N9MKxe , M92N9MKye , M92N9MKze , & + M92N9MMxe , M92N9MMye , M92N9MMze , M92N9RAxe , M92N9RAye , M92N9RAze , M92N9RDxe , & + M92N9RDye , M92N9RDze , M92N9TAxe , M92N9TAye , M92N9TAze , M92N9TDxss , M92N9TDyss , & + M92N9TDzss , M93N1FKxe , M93N1FKye , M93N1FKze , M93N1FMxe , M93N1FMye , M93N1FMze , & + M93N1MKxe , M93N1MKye , M93N1MKze , M93N1MMxe , M93N1MMye , M93N1MMze , M93N1RAxe , & + M93N1RAye , M93N1RAze , M93N1RDxe , M93N1RDye , M93N1RDze , M93N1TAxe , M93N1TAye , & + M93N1TAze , M93N1TDxss , M93N1TDyss , M93N1TDzss , M93N2FKxe , M93N2FKye , M93N2FKze , & + M93N2FMxe , M93N2FMye , M93N2FMze , M93N2MKxe , M93N2MKye , M93N2MKze , M93N2MMxe , & + M93N2MMye , M93N2MMze , M93N2RAxe , M93N2RAye , M93N2RAze , M93N2RDxe , M93N2RDye , & + M93N2RDze , M93N2TAxe , M93N2TAye , M93N2TAze , M93N2TDxss , M93N2TDyss , M93N2TDzss , & + M93N3FKxe , M93N3FKye , M93N3FKze , M93N3FMxe , M93N3FMye , M93N3FMze , M93N3MKxe , & + M93N3MKye , M93N3MKze , M93N3MMxe , M93N3MMye , M93N3MMze , M93N3RAxe , M93N3RAye , & + M93N3RAze , M93N3RDxe , M93N3RDye , M93N3RDze , M93N3TAxe , M93N3TAye , M93N3TAze , & + M93N3TDxss , M93N3TDyss , M93N3TDzss , M93N4FKxe , M93N4FKye , M93N4FKze , M93N4FMxe , & + M93N4FMye , M93N4FMze , M93N4MKxe , M93N4MKye , M93N4MKze , M93N4MMxe , M93N4MMye , & + M93N4MMze , M93N4RAxe , M93N4RAye , M93N4RAze , M93N4RDxe , M93N4RDye , M93N4RDze , & + M93N4TAxe , M93N4TAye , M93N4TAze , M93N4TDxss , M93N4TDyss , M93N4TDzss , M93N5FKxe , & + M93N5FKye , M93N5FKze , M93N5FMxe , M93N5FMye , M93N5FMze , M93N5MKxe , M93N5MKye , & + M93N5MKze , M93N5MMxe , M93N5MMye , M93N5MMze , M93N5RAxe , M93N5RAye , M93N5RAze , & + M93N5RDxe , M93N5RDye , M93N5RDze , M93N5TAxe , M93N5TAye , M93N5TAze , M93N5TDxss , & + M93N5TDyss , M93N5TDzss , M93N6FKxe , M93N6FKye , M93N6FKze , M93N6FMxe , M93N6FMye , & + M93N6FMze , M93N6MKxe , M93N6MKye , M93N6MKze , M93N6MMxe , M93N6MMye , M93N6MMze , & + M93N6RAxe , M93N6RAye , M93N6RAze , M93N6RDxe , M93N6RDye , M93N6RDze , M93N6TAxe , & + M93N6TAye , M93N6TAze , M93N6TDxss , M93N6TDyss , M93N6TDzss , M93N7FKxe , M93N7FKye , & + M93N7FKze , M93N7FMxe , M93N7FMye , M93N7FMze /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry13(1665) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + M93N7MKxe , M93N7MKye , M93N7MKze , M93N7MMxe , M93N7MMye , M93N7MMze , M93N7RAxe , & + M93N7RAye , M93N7RAze , M93N7RDxe , M93N7RDye , M93N7RDze , M93N7TAxe , M93N7TAye , & + M93N7TAze , M93N7TDxss , M93N7TDyss , M93N7TDzss , M93N8FKxe , M93N8FKye , M93N8FKze , & + M93N8FMxe , M93N8FMye , M93N8FMze , M93N8MKxe , M93N8MKye , M93N8MKze , M93N8MMxe , & + M93N8MMye , M93N8MMze , M93N8RAxe , M93N8RAye , M93N8RAze , M93N8RDxe , M93N8RDye , & + M93N8RDze , M93N8TAxe , M93N8TAye , M93N8TAze , M93N8TDxss , M93N8TDyss , M93N8TDzss , & + M93N9FKxe , M93N9FKye , M93N9FKze , M93N9FMxe , M93N9FMye , M93N9FMze , M93N9MKxe , & + M93N9MKye , M93N9MKze , M93N9MMxe , M93N9MMye , M93N9MMze , M93N9RAxe , M93N9RAye , & + M93N9RAze , M93N9RDxe , M93N9RDye , M93N9RDze , M93N9TAxe , M93N9TAye , M93N9TAze , & + M93N9TDxss , M93N9TDyss , M93N9TDzss , M94N1FKxe , M94N1FKye , M94N1FKze , M94N1FMxe , & + M94N1FMye , M94N1FMze , M94N1MKxe , M94N1MKye , M94N1MKze , M94N1MMxe , M94N1MMye , & + M94N1MMze , M94N1RAxe , M94N1RAye , M94N1RAze , M94N1RDxe , M94N1RDye , M94N1RDze , & + M94N1TAxe , M94N1TAye , M94N1TAze , M94N1TDxss , M94N1TDyss , M94N1TDzss , M94N2FKxe , & + M94N2FKye , M94N2FKze , M94N2FMxe , M94N2FMye , M94N2FMze , M94N2MKxe , M94N2MKye , & + M94N2MKze , M94N2MMxe , M94N2MMye , M94N2MMze , M94N2RAxe , M94N2RAye , M94N2RAze , & + M94N2RDxe , M94N2RDye , M94N2RDze , M94N2TAxe , M94N2TAye , M94N2TAze , M94N2TDxss , & + M94N2TDyss , M94N2TDzss , M94N3FKxe , M94N3FKye , M94N3FKze , M94N3FMxe , M94N3FMye , & + M94N3FMze , M94N3MKxe , M94N3MKye , M94N3MKze , M94N3MMxe , M94N3MMye , M94N3MMze , & + M94N3RAxe , M94N3RAye , M94N3RAze , M94N3RDxe , M94N3RDye , M94N3RDze , M94N3TAxe , & + M94N3TAye , M94N3TAze , M94N3TDxss , M94N3TDyss , M94N3TDzss , M94N4FKxe , M94N4FKye , & + M94N4FKze , M94N4FMxe , M94N4FMye , M94N4FMze , M94N4MKxe , M94N4MKye , M94N4MKze , & + M94N4MMxe , M94N4MMye , M94N4MMze , M94N4RAxe , M94N4RAye , M94N4RAze , M94N4RDxe , & + M94N4RDye , M94N4RDze , M94N4TAxe , M94N4TAye , M94N4TAze , M94N4TDxss , M94N4TDyss , & + M94N4TDzss , M94N5FKxe , M94N5FKye , M94N5FKze , M94N5FMxe , M94N5FMye , M94N5FMze , & + M94N5MKxe , M94N5MKye , M94N5MKze , M94N5MMxe , M94N5MMye , M94N5MMze , M94N5RAxe , & + M94N5RAye , M94N5RAze , M94N5RDxe , M94N5RDye , M94N5RDze , M94N5TAxe , M94N5TAye , & + M94N5TAze , M94N5TDxss , M94N5TDyss , M94N5TDzss , M94N6FKxe , M94N6FKye , M94N6FKze , & + M94N6FMxe , M94N6FMye , M94N6FMze , M94N6MKxe , M94N6MKye , M94N6MKze , M94N6MMxe , & + M94N6MMye , M94N6MMze , M94N6RAxe , M94N6RAye , M94N6RAze , M94N6RDxe , M94N6RDye , & + M94N6RDze , M94N6TAxe , M94N6TAye , M94N6TAze , M94N6TDxss , M94N6TDyss , M94N6TDzss , & + M94N7FKxe , M94N7FKye , M94N7FKze , M94N7FMxe , M94N7FMye , M94N7FMze , M94N7MKxe , & + M94N7MKye , M94N7MKze , M94N7MMxe , M94N7MMye , M94N7MMze , M94N7RAxe , M94N7RAye , & + M94N7RAze , M94N7RDxe , M94N7RDye , M94N7RDze , M94N7TAxe , M94N7TAye , M94N7TAze , & + M94N7TDxss , M94N7TDyss , M94N7TDzss , M94N8FKxe , M94N8FKye , M94N8FKze , M94N8FMxe , & + M94N8FMye , M94N8FMze , M94N8MKxe , M94N8MKye , M94N8MKze , M94N8MMxe , M94N8MMye , & + M94N8MMze , M94N8RAxe , M94N8RAye , M94N8RAze , M94N8RDxe , M94N8RDye , M94N8RDze , & + M94N8TAxe , M94N8TAye , M94N8TAze , M94N8TDxss , M94N8TDyss , M94N8TDzss , M94N9FKxe , & + M94N9FKye , M94N9FKze , M94N9FMxe , M94N9FMye , M94N9FMze , M94N9MKxe , M94N9MKye , & + M94N9MKze , M94N9MMxe , M94N9MMye , M94N9MMze , M94N9RAxe , M94N9RAye , M94N9RAze , & + M94N9RDxe , M94N9RDye , M94N9RDze , M94N9TAxe , M94N9TAye , M94N9TAze , M94N9TDxss , & + M94N9TDyss , M94N9TDzss , M95N1FKxe , M95N1FKye , M95N1FKze , M95N1FMxe , M95N1FMye , & + M95N1FMze , M95N1MKxe , M95N1MKye , M95N1MKze , M95N1MMxe , M95N1MMye , M95N1MMze , & + M95N1RAxe , M95N1RAye , M95N1RAze , M95N1RDxe , M95N1RDye , M95N1RDze , M95N1TAxe , & + M95N1TAye , M95N1TAze , M95N1TDxss , M95N1TDyss , M95N1TDzss , M95N2FKxe , M95N2FKye , & + M95N2FKze , M95N2FMxe , M95N2FMye , M95N2FMze , M95N2MKxe , M95N2MKye , M95N2MKze , & + M95N2MMxe , M95N2MMye , M95N2MMze , M95N2RAxe , M95N2RAye , M95N2RAze , M95N2RDxe , & + M95N2RDye , M95N2RDze , M95N2TAxe , M95N2TAye , M95N2TAze , M95N2TDxss , M95N2TDyss , & + M95N2TDzss , M95N3FKxe , M95N3FKye , M95N3FKze , M95N3FMxe , M95N3FMye , M95N3FMze , & + M95N3MKxe , M95N3MKye , M95N3MKze , M95N3MMxe , M95N3MMye , M95N3MMze , M95N3RAxe , & + M95N3RAye , M95N3RAze , M95N3RDxe , M95N3RDye , M95N3RDze , M95N3TAxe , M95N3TAye , & + M95N3TAze , M95N3TDxss , M95N3TDyss , M95N3TDzss , M95N4FKxe , M95N4FKye , M95N4FKze , & + M95N4FMxe , M95N4FMye , M95N4FMze , M95N4MKxe , M95N4MKye , M95N4MKze , M95N4MMxe , & + M95N4MMye , M95N4MMze , M95N4RAxe , M95N4RAye , M95N4RAze , M95N4RDxe , M95N4RDye , & + M95N4RDze , M95N4TAxe , M95N4TAye , M95N4TAze , M95N4TDxss , M95N4TDyss , M95N4TDzss , & + M95N5FKxe , M95N5FKye , M95N5FKze , M95N5FMxe , M95N5FMye , M95N5FMze , M95N5MKxe , & + M95N5MKye , M95N5MKze , M95N5MMxe , M95N5MMye , M95N5MMze , M95N5RAxe , M95N5RAye , & + M95N5RAze , M95N5RDxe , M95N5RDye , M95N5RDze , M95N5TAxe , M95N5TAye , M95N5TAze , & + M95N5TDxss , M95N5TDyss , M95N5TDzss , M95N6FKxe , M95N6FKye , M95N6FKze , M95N6FMxe , & + M95N6FMye , M95N6FMze , M95N6MKxe , M95N6MKye , M95N6MKze , M95N6MMxe , M95N6MMye , & + M95N6MMze , M95N6RAxe , M95N6RAye , M95N6RAze , M95N6RDxe , M95N6RDye , M95N6RDze , & + M95N6TAxe , M95N6TAye , M95N6TAze , M95N6TDxss , M95N6TDyss , M95N6TDzss , M95N7FKxe , & + M95N7FKye , M95N7FKze , M95N7FMxe , M95N7FMye , M95N7FMze , M95N7MKxe , M95N7MKye , & + M95N7MKze , M95N7MMxe , M95N7MMye , M95N7MMze , M95N7RAxe , M95N7RAye , M95N7RAze , & + M95N7RDxe , M95N7RDye , M95N7RDze , M95N7TAxe , M95N7TAye , M95N7TAze , M95N7TDxss , & + M95N7TDyss , M95N7TDzss , M95N8FKxe , M95N8FKye , M95N8FKze , M95N8FMxe , M95N8FMye , & + M95N8FMze , M95N8MKxe , M95N8MKye , M95N8MKze , M95N8MMxe , M95N8MMye , M95N8MMze , & + M95N8RAxe , M95N8RAye , M95N8RAze , M95N8RDxe , M95N8RDye , M95N8RDze , M95N8TAxe , & + M95N8TAye , M95N8TAze , M95N8TDxss , M95N8TDyss , M95N8TDzss , M95N9FKxe , M95N9FKye , & + M95N9FKze , M95N9FMxe , M95N9FMye , M95N9FMze , M95N9MKxe , M95N9MKye , M95N9MKze , & + M95N9MMxe , M95N9MMye , M95N9MMze , M95N9RAxe , M95N9RAye , M95N9RAze , M95N9RDxe , & + M95N9RDye , M95N9RDze , M95N9TAxe , M95N9TAye , M95N9TAze , M95N9TDxss , M95N9TDyss , & + M95N9TDzss , M96N1FKxe , M96N1FKye , M96N1FKze , M96N1FMxe , M96N1FMye , M96N1FMze , & + M96N1MKxe , M96N1MKye , M96N1MKze , M96N1MMxe , M96N1MMye , M96N1MMze , M96N1RAxe , & + M96N1RAye , M96N1RAze , M96N1RDxe , M96N1RDye , M96N1RDze , M96N1TAxe , M96N1TAye , & + M96N1TAze , M96N1TDxss , M96N1TDyss , M96N1TDzss , M96N2FKxe , M96N2FKye , M96N2FKze , & + M96N2FMxe , M96N2FMye , M96N2FMze , M96N2MKxe , M96N2MKye , M96N2MKze , M96N2MMxe , & + M96N2MMye , M96N2MMze , M96N2RAxe , M96N2RAye , M96N2RAze , M96N2RDxe , M96N2RDye , & + M96N2RDze , M96N2TAxe , M96N2TAye , M96N2TAze , M96N2TDxss , M96N2TDyss , M96N2TDzss , & + M96N3FKxe , M96N3FKye , M96N3FKze , M96N3FMxe , M96N3FMye , M96N3FMze , M96N3MKxe , & + M96N3MKye , M96N3MKze , M96N3MMxe , M96N3MMye , M96N3MMze , M96N3RAxe , M96N3RAye , & + M96N3RAze , M96N3RDxe , M96N3RDye , M96N3RDze , M96N3TAxe , M96N3TAye , M96N3TAze , & + M96N3TDxss , M96N3TDyss , M96N3TDzss , M96N4FKxe , M96N4FKye , M96N4FKze , M96N4FMxe , & + M96N4FMye , M96N4FMze , M96N4MKxe , M96N4MKye , M96N4MKze , M96N4MMxe , M96N4MMye , & + M96N4MMze , M96N4RAxe , M96N4RAye , M96N4RAze , M96N4RDxe , M96N4RDye , M96N4RDze , & + M96N4TAxe , M96N4TAye , M96N4TAze , M96N4TDxss , M96N4TDyss , M96N4TDzss , M96N5FKxe , & + M96N5FKye , M96N5FKze , M96N5FMxe , M96N5FMye , M96N5FMze , M96N5MKxe , M96N5MKye , & + M96N5MKze , M96N5MMxe , M96N5MMye , M96N5MMze , M96N5RAxe , M96N5RAye , M96N5RAze , & + M96N5RDxe , M96N5RDye , M96N5RDze , M96N5TAxe , M96N5TAye , M96N5TAze , M96N5TDxss , & + M96N5TDyss , M96N5TDzss , M96N6FKxe , M96N6FKye , M96N6FKze , M96N6FMxe , M96N6FMye , & + M96N6FMze , M96N6MKxe , M96N6MKye , M96N6MKze , M96N6MMxe , M96N6MMye , M96N6MMze , & + M96N6RAxe , M96N6RAye , M96N6RAze , M96N6RDxe , M96N6RDye , M96N6RDze , M96N6TAxe , & + M96N6TAye , M96N6TAze , M96N6TDxss , M96N6TDyss , M96N6TDzss , M96N7FKxe , M96N7FKye , & + M96N7FKze , M96N7FMxe , M96N7FMye , M96N7FMze , M96N7MKxe , M96N7MKye , M96N7MKze , & + M96N7MMxe , M96N7MMye , M96N7MMze , M96N7RAxe , M96N7RAye , M96N7RAze , M96N7RDxe , & + M96N7RDye , M96N7RDze , M96N7TAxe , M96N7TAye , M96N7TAze , M96N7TDxss , M96N7TDyss , & + M96N7TDzss , M96N8FKxe , M96N8FKye , M96N8FKze , M96N8FMxe , M96N8FMye , M96N8FMze , & + M96N8MKxe , M96N8MKye , M96N8MKze , M96N8MMxe , M96N8MMye , M96N8MMze , M96N8RAxe , & + M96N8RAye , M96N8RAze , M96N8RDxe , M96N8RDye , M96N8RDze , M96N8TAxe , M96N8TAye , & + M96N8TAze , M96N8TDxss , M96N8TDyss , M96N8TDzss , M96N9FKxe , M96N9FKye , M96N9FKze , & + M96N9FMxe , M96N9FMye , M96N9FMze , M96N9MKxe , M96N9MKye , M96N9MKze , M96N9MMxe , & + M96N9MMye , M96N9MMze , M96N9RAxe , M96N9RAye , M96N9RAze , M96N9RDxe , M96N9RDye , & + M96N9RDze , M96N9TAxe , M96N9TAye , M96N9TAze , M96N9TDxss , M96N9TDyss , M96N9TDzss , & + M97N1FKxe , M97N1FKye , M97N1FKze , M97N1FMxe , M97N1FMye , M97N1FMze , M97N1MKxe , & + M97N1MKye , M97N1MKze , M97N1MMxe , M97N1MMye , M97N1MMze , M97N1RAxe , M97N1RAye , & + M97N1RAze , M97N1RDxe , M97N1RDye , M97N1RDze , M97N1TAxe , M97N1TAye , M97N1TAze , & + M97N1TDxss , M97N1TDyss , M97N1TDzss , M97N2FKxe , M97N2FKye , M97N2FKze , M97N2FMxe , & + M97N2FMye , M97N2FMze , M97N2MKxe , M97N2MKye , M97N2MKze , M97N2MMxe , M97N2MMye , & + M97N2MMze , M97N2RAxe , M97N2RAye , M97N2RAze , M97N2RDxe , M97N2RDye , M97N2RDze , & + M97N2TAxe , M97N2TAye , M97N2TAze , M97N2TDxss , M97N2TDyss , M97N2TDzss , M97N3FKxe , & + M97N3FKye , M97N3FKze , M97N3FMxe , M97N3FMye , M97N3FMze , M97N3MKxe , M97N3MKye , & + M97N3MKze , M97N3MMxe , M97N3MMye , M97N3MMze , M97N3RAxe , M97N3RAye , M97N3RAze , & + M97N3RDxe , M97N3RDye , M97N3RDze , M97N3TAxe , M97N3TAye , M97N3TAze , M97N3TDxss , & + M97N3TDyss , M97N3TDzss , M97N4FKxe , M97N4FKye , M97N4FKze , M97N4FMxe , M97N4FMye , & + M97N4FMze , M97N4MKxe , M97N4MKye , M97N4MKze , M97N4MMxe , M97N4MMye , M97N4MMze , & + M97N4RAxe , M97N4RAye , M97N4RAze , M97N4RDxe , M97N4RDye , M97N4RDze , M97N4TAxe , & + M97N4TAye , M97N4TAze , M97N4TDxss , M97N4TDyss , M97N4TDzss , M97N5FKxe , M97N5FKye , & + M97N5FKze , M97N5FMxe , M97N5FMye , M97N5FMze , M97N5MKxe , M97N5MKye , M97N5MKze , & + M97N5MMxe , M97N5MMye , M97N5MMze , M97N5RAxe , M97N5RAye , M97N5RAze , M97N5RDxe , & + M97N5RDye , M97N5RDze , M97N5TAxe , M97N5TAye , M97N5TAze , M97N5TDxss , M97N5TDyss , & + M97N5TDzss , M97N6FKxe , M97N6FKye , M97N6FKze , M97N6FMxe , M97N6FMye , M97N6FMze , & + M97N6MKxe , M97N6MKye , M97N6MKze , M97N6MMxe , M97N6MMye , M97N6MMze , M97N6RAxe , & + M97N6RAye , M97N6RAze , M97N6RDxe , M97N6RDye , M97N6RDze , M97N6TAxe , M97N6TAye , & + M97N6TAze , M97N6TDxss , M97N6TDyss , M97N6TDzss , M97N7FKxe , M97N7FKye , M97N7FKze , & + M97N7FMxe , M97N7FMye , M97N7FMze , M97N7MKxe , M97N7MKye , M97N7MKze , M97N7MMxe , & + M97N7MMye , M97N7MMze , M97N7RAxe , M97N7RAye , M97N7RAze , M97N7RDxe , M97N7RDye , & + M97N7RDze , M97N7TAxe , M97N7TAye , M97N7TAze , M97N7TDxss , M97N7TDyss , M97N7TDzss , & + M97N8FKxe , M97N8FKye , M97N8FKze , M97N8FMxe , M97N8FMye , M97N8FMze , M97N8MKxe , & + M97N8MKye , M97N8MKze , M97N8MMxe , M97N8MMye , M97N8MMze , M97N8RAxe , M97N8RAye , & + M97N8RAze , M97N8RDxe , M97N8RDye , M97N8RDze , M97N8TAxe , M97N8TAye , M97N8TAze , & + M97N8TDxss , M97N8TDyss , M97N8TDzss , M97N9FKxe , M97N9FKye , M97N9FKze , M97N9FMxe , & + M97N9FMye , M97N9FMze , M97N9MKxe , M97N9MKye , M97N9MKze , M97N9MMxe , M97N9MMye , & + M97N9MMze , M97N9RAxe , M97N9RAye , M97N9RAze , M97N9RDxe , M97N9RDye , M97N9RDze , & + M97N9TAxe , M97N9TAye , M97N9TAze , M97N9TDxss , M97N9TDyss , M97N9TDzss , M98N1FKxe , & + M98N1FKye , M98N1FKze , M98N1FMxe , M98N1FMye , M98N1FMze , M98N1MKxe , M98N1MKye , & + M98N1MKze , M98N1MMxe , M98N1MMye , M98N1MMze , M98N1RAxe , M98N1RAye , M98N1RAze , & + M98N1RDxe , M98N1RDye , M98N1RDze , M98N1TAxe , M98N1TAye , M98N1TAze , M98N1TDxss , & + M98N1TDyss , M98N1TDzss , M98N2FKxe , M98N2FKye , M98N2FKze , M98N2FMxe , M98N2FMye , & + M98N2FMze , M98N2MKxe , M98N2MKye , M98N2MKze , M98N2MMxe , M98N2MMye , M98N2MMze , & + M98N2RAxe , M98N2RAye , M98N2RAze , M98N2RDxe , M98N2RDye , M98N2RDze , M98N2TAxe , & + M98N2TAye , M98N2TAze , M98N2TDxss , M98N2TDyss , M98N2TDzss , M98N3FKxe , M98N3FKye , & + M98N3FKze , M98N3FMxe , M98N3FMye , M98N3FMze , M98N3MKxe , M98N3MKye , M98N3MKze , & + M98N3MMxe , M98N3MMye , M98N3MMze , M98N3RAxe , M98N3RAye , M98N3RAze , M98N3RDxe , & + M98N3RDye , M98N3RDze , M98N3TAxe , M98N3TAye , M98N3TAze , M98N3TDxss , M98N3TDyss , & + M98N3TDzss , M98N4FKxe , M98N4FKye , M98N4FKze , M98N4FMxe , M98N4FMye , M98N4FMze , & + M98N4MKxe , M98N4MKye , M98N4MKze , M98N4MMxe , M98N4MMye , M98N4MMze , M98N4RAxe , & + M98N4RAye , M98N4RAze , M98N4RDxe , M98N4RDye , M98N4RDze , M98N4TAxe , M98N4TAye , & + M98N4TAze , M98N4TDxss , M98N4TDyss , M98N4TDzss , M98N5FKxe , M98N5FKye , M98N5FKze , & + M98N5FMxe , M98N5FMye , M98N5FMze , M98N5MKxe , M98N5MKye , M98N5MKze , M98N5MMxe , & + M98N5MMye , M98N5MMze , M98N5RAxe , M98N5RAye , M98N5RAze , M98N5RDxe , M98N5RDye , & + M98N5RDze , M98N5TAxe , M98N5TAye , M98N5TAze , M98N5TDxss , M98N5TDyss , M98N5TDzss , & + M98N6FKxe , M98N6FKye , M98N6FKze , M98N6FMxe , M98N6FMye , M98N6FMze , M98N6MKxe , & + M98N6MKye , M98N6MKze , M98N6MMxe , M98N6MMye , M98N6MMze , M98N6RAxe , M98N6RAye , & + M98N6RAze , M98N6RDxe , M98N6RDye , M98N6RDze , M98N6TAxe , M98N6TAye , M98N6TAze , & + M98N6TDxss , M98N6TDyss , M98N6TDzss , M98N7FKxe , M98N7FKye , M98N7FKze , M98N7FMxe , & + M98N7FMye , M98N7FMze , M98N7MKxe , M98N7MKye , M98N7MKze , M98N7MMxe , M98N7MMye , & + M98N7MMze , M98N7RAxe , M98N7RAye , M98N7RAze , M98N7RDxe , M98N7RDye , M98N7RDze , & + M98N7TAxe , M98N7TAye , M98N7TAze , M98N7TDxss , M98N7TDyss , M98N7TDzss , M98N8FKxe , & + M98N8FKye , M98N8FKze , M98N8FMxe , M98N8FMye , M98N8FMze , M98N8MKxe , M98N8MKye , & + M98N8MKze , M98N8MMxe , M98N8MMye , M98N8MMze , M98N8RAxe , M98N8RAye , M98N8RAze , & + M98N8RDxe , M98N8RDye , M98N8RDze , M98N8TAxe , M98N8TAye , M98N8TAze , M98N8TDxss , & + M98N8TDyss , M98N8TDzss , M98N9FKxe , M98N9FKye , M98N9FKze , M98N9FMxe , M98N9FMye , & + M98N9FMze , M98N9MKxe , M98N9MKye , M98N9MKze , M98N9MMxe , M98N9MMye , M98N9MMze , & + M98N9RAxe , M98N9RAye , M98N9RAze , M98N9RDxe , M98N9RDye , M98N9RDze , M98N9TAxe , & + M98N9TAye , M98N9TAze , M98N9TDxss , M98N9TDyss , M98N9TDzss , M99N1FKxe , M99N1FKye , & + M99N1FKze , M99N1FMxe , M99N1FMye , M99N1FMze , M99N1MKxe , M99N1MKye , M99N1MKze , & + M99N1MMxe , M99N1MMye , M99N1MMze , M99N1RAxe , M99N1RAye , M99N1RAze , M99N1RDxe , & + M99N1RDye , M99N1RDze , M99N1TAxe , M99N1TAye , M99N1TAze , M99N1TDxss , M99N1TDyss , & + M99N1TDzss , M99N2FKxe , M99N2FKye , M99N2FKze , M99N2FMxe , M99N2FMye , M99N2FMze , & + M99N2MKxe , M99N2MKye , M99N2MKze , M99N2MMxe , M99N2MMye , M99N2MMze , M99N2RAxe , & + M99N2RAye , M99N2RAze , M99N2RDxe , M99N2RDye , M99N2RDze , M99N2TAxe , M99N2TAye , & + M99N2TAze , M99N2TDxss , M99N2TDyss , M99N2TDzss , M99N3FKxe , M99N3FKye , M99N3FKze , & + M99N3FMxe , M99N3FMye , M99N3FMze , M99N3MKxe , M99N3MKye , M99N3MKze , M99N3MMxe , & + M99N3MMye , M99N3MMze , M99N3RAxe , M99N3RAye , M99N3RAze , M99N3RDxe , M99N3RDye , & + M99N3RDze , M99N3TAxe , M99N3TAye , M99N3TAze , M99N3TDxss , M99N3TDyss , M99N3TDzss , & + M99N4FKxe , M99N4FKye , M99N4FKze , M99N4FMxe , M99N4FMye , M99N4FMze , M99N4MKxe , & + M99N4MKye , M99N4MKze , M99N4MMxe , M99N4MMye , M99N4MMze , M99N4RAxe , M99N4RAye , & + M99N4RAze , M99N4RDxe , M99N4RDye , M99N4RDze , M99N4TAxe , M99N4TAye , M99N4TAze , & + M99N4TDxss , M99N4TDyss , M99N4TDzss , M99N5FKxe , M99N5FKye , M99N5FKze , M99N5FMxe , & + M99N5FMye , M99N5FMze , M99N5MKxe , M99N5MKye , M99N5MKze , M99N5MMxe , M99N5MMye , & + M99N5MMze , M99N5RAxe , M99N5RAye , M99N5RAze , M99N5RDxe , M99N5RDye , M99N5RDze , & + M99N5TAxe , M99N5TAye , M99N5TAze , M99N5TDxss , M99N5TDyss , M99N5TDzss , M99N6FKxe , & + M99N6FKye , M99N6FKze , M99N6FMxe , M99N6FMye , M99N6FMze , M99N6MKxe , M99N6MKye , & + M99N6MKze , M99N6MMxe , M99N6MMye , M99N6MMze , M99N6RAxe , M99N6RAye , M99N6RAze , & + M99N6RDxe , M99N6RDye , M99N6RDze , M99N6TAxe , M99N6TAye , M99N6TAze , M99N6TDxss , & + M99N6TDyss , M99N6TDzss , M99N7FKxe , M99N7FKye , M99N7FKze , M99N7FMxe , M99N7FMye , & + M99N7FMze , M99N7MKxe , M99N7MKye , M99N7MKze , M99N7MMxe , M99N7MMye , M99N7MMze , & + M99N7RAxe , M99N7RAye , M99N7RAze , M99N7RDxe , M99N7RDye , M99N7RDze , M99N7TAxe , & + M99N7TAye , M99N7TAze , M99N7TDxss , M99N7TDyss , M99N7TDzss , M99N8FKxe , M99N8FKye , & + M99N8FKze , M99N8FMxe , M99N8FMye , M99N8FMze , M99N8MKxe , M99N8MKye , M99N8MKze , & + M99N8MMxe , M99N8MMye , M99N8MMze , M99N8RAxe , M99N8RAye , M99N8RAze , M99N8RDxe , & + M99N8RDye , M99N8RDze , M99N8TAxe , M99N8TAye , M99N8TAze , M99N8TDxss , M99N8TDyss , & + M99N8TDzss , M99N9FKxe , M99N9FKye , M99N9FKze , M99N9FMxe , M99N9FMye , M99N9FMze , & + M99N9MKxe , M99N9MKye , M99N9MKze , M99N9MMxe , M99N9MMye , M99N9MMze , M99N9RAxe , & + M99N9RAye , M99N9RAze , M99N9RDxe , M99N9RDye , M99N9RDze , M99N9TAxe , M99N9TAye , & + M99N9TAze , M99N9TDxss , M99N9TDyss , M99N9TDzss , ReactFXss , ReactFYss , ReactFZss , & + ReactMXss , ReactMYss , ReactMZss , SSqm01 , SSqm02 , SSqm03 , SSqm04 , & + SSqm05 , SSqm06 , SSqm07 , SSqm08 , SSqm09 , SSqm10 , SSqm11 , & + SSqm12 , SSqm13 , SSqm14 , SSqm15 , SSqm16 , SSqm17 , SSqm18 , & + SSqm19 , SSqm20 , SSqm21 , SSqm22 , SSqm23 , SSqm24 , SSqm25 , & + SSqm26 , SSqm27 , SSqm28 , SSqm29 , SSqm30 , SSqm31 , SSqm32 , & + SSqm33 , SSqm34 , SSqm35 , SSqm36 , SSqm37 , SSqm38 , SSqm39 , & + SSqm40 , SSqm41 , SSqm42 , SSqm43 , SSqm44 , SSqm45 , SSqm46 , & + SSqm47 , SSqm48 , SSqm49 , SSqm50 , SSqm51 , SSqm52 , SSqm53 , & + SSqm54 , SSqm55 , SSqm56 , SSqm57 , SSqm58 , SSqm59 , SSqm60 , & + SSqm61 , SSqm62 , SSqm63 , SSqm64 , SSqm65 , SSqm66 , SSqm67 , & + SSqm68 , SSqm69 , SSqm70 , SSqm71 , SSqm72 , SSqm73 , SSqm74 , & + SSqm75 , SSqm76 , SSqm77 , SSqm78 , SSqm79 , SSqm80 , SSqm81 , & + SSqm82 , SSqm83 , SSqm84 , SSqm85 , SSqm86 , SSqm87 , SSqm88 , & + SSqm89 , SSqm90 , SSqm91 , SSqm92 , SSqm93 , SSqm94 , SSqm95 , & + SSqm96 , SSqm97 , SSqm98 , SSqm99 , SSqmd01 , SSqmd02 , SSqmd03 , & + SSqmd04 , SSqmd05 , SSqmd06 , SSqmd07 , SSqmd08 , SSqmd09 , SSqmd10 , & + SSqmd11 , SSqmd12 , SSqmd13 , SSqmd14 , SSqmd15 , SSqmd16 , SSqmd17 , & + SSqmd18 , SSqmd19 , SSqmd20 , SSqmd21 , SSqmd22 , SSqmd23 , SSqmd24 , & + SSqmd25 , SSqmd26 , SSqmd27 , SSqmd28 , SSqmd29 , SSqmd30 , SSqmd31 , & + SSqmd32 , SSqmd33 , SSqmd34 , SSqmd35 , SSqmd36 , SSqmd37 , SSqmd38 , & + SSqmd39 , SSqmd40 , SSqmd41 , SSqmd42 , SSqmd43 , SSqmd44 , SSqmd45 , & + SSqmd46 , SSqmd47 , SSqmd48 , SSqmd49 , SSqmd50 , SSqmd51 , SSqmd52 , & + SSqmd53 , SSqmd54 , SSqmd55 , SSqmd56 , SSqmd57 , SSqmd58 , SSqmd59 , & + SSqmd60 , SSqmd61 , SSqmd62 , SSqmd63 , SSqmd64 , SSqmd65 , SSqmd66 , & + SSqmd67 , SSqmd68 , SSqmd69 , SSqmd70 , SSqmd71 , SSqmd72 , SSqmd73 , & + SSqmd74 , SSqmd75 , SSqmd76 , SSqmd77 , SSqmd78 , SSqmd79 , SSqmd80 , & + SSqmd81 , SSqmd82 , SSqmd83 , SSqmd84 , SSqmd85 , SSqmd86 , SSqmd87 , & + SSqmd88 , SSqmd89 , SSqmd90 , SSqmd91 , SSqmd92 , SSqmd93 , SSqmd94 , & + SSqmd95 , SSqmd96 , SSqmd97 , SSqmd98 , SSqmd99 , SSqmdd01 , SSqmdd02 , & + SSqmdd03 , SSqmdd04 , SSqmdd05 , SSqmdd06 , SSqmdd07 , SSqmdd08 , SSqmdd09 , & + SSqmdd10 , SSqmdd11 , SSqmdd12 , SSqmdd13 , SSqmdd14 , SSqmdd15 , SSqmdd16 , & + SSqmdd17 , SSqmdd18 , SSqmdd19 , SSqmdd20 , SSqmdd21 , SSqmdd22 , SSqmdd23 , & + SSqmdd24 , SSqmdd25 , SSqmdd26 , SSqmdd27 , SSqmdd28 , SSqmdd29 , SSqmdd30 , & + SSqmdd31 , SSqmdd32 , SSqmdd33 , SSqmdd34 , SSqmdd35 , SSqmdd36 , SSqmdd37 , & + SSqmdd38 , SSqmdd39 , SSqmdd40 , SSqmdd41 , SSqmdd42 , SSqmdd43 , SSqmdd44 , & + SSqmdd45 , SSqmdd46 , SSqmdd47 , SSqmdd48 , SSqmdd49 , SSqmdd50 , SSqmdd51 , & + SSqmdd52 , SSqmdd53 , SSqmdd54 , SSqmdd55 , SSqmdd56 , SSqmdd57 , SSqmdd58 , & + SSqmdd59 , SSqmdd60 , SSqmdd61 , SSqmdd62 , SSqmdd63 , SSqmdd64 , SSqmdd65 , & + SSqmdd66 , SSqmdd67 , SSqmdd68 , SSqmdd69 , SSqmdd70 , SSqmdd71 , SSqmdd72 , & + SSqmdd73 , SSqmdd74 , SSqmdd75 , SSqmdd76 , SSqmdd77 , SSqmdd78 , SSqmdd79 , & + SSqmdd80 , SSqmdd81 , SSqmdd82 , SSqmdd83 , SSqmdd84 , SSqmdd85 , SSqmdd86 , & + SSqmdd87 , SSqmdd88 , SSqmdd89 , SSqmdd90 , SSqmdd91 , SSqmdd92 , SSqmdd93 , & + SSqmdd94 , SSqmdd95 , SSqmdd96 , SSqmdd97 , SSqmdd98 , SSqmdd99 /) + INTEGER(IntKi), PARAMETER :: ParamIndxAry(21705) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + ParamIndxAry1, ParamIndxAry2, ParamIndxAry3, ParamIndxAry4, ParamIndxAry5, ParamIndxAry6, ParamIndxAry7, ParamIndxAry8, ParamIndxAry9, ParamIndxAry10, ParamIndxAry11, ParamIndxAry12, ParamIndxAry13/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry1(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry2(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry3(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry4(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)"/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry5(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry6(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry7(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry8(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry9(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry10(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry11(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry12(1670) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) "/) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry13(1665) = (/ character(ChanLen) :: & ! This lists the units corresponding to the allowed parameters + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ", & + "(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)", & + "(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)", & + "(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ", & + "(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N*m) ","(N*m) ","(N*m) ", & + "(N*m) ","(N*m) ","(N*m) ","(rad/s^2)","(rad/s^2)","(rad/s^2)","(rad) ", & + "(rad) ","(rad) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(N) ","(N) ","(N) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(N*m) ","(rad/s^2)", & + "(rad/s^2)","(rad/s^2)","(rad) ","(rad) ","(rad) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(N) ","(N) ","(N) ", & + "(N*m) ","(N*m) ","(N*m) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(-) ","(-) ","(-) ", & + "(-) ","(-) ","(-) ","(-) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ", & + "(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ", & + "(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) ","(1/s^2) "/) + CHARACTER(OutStrLenM1), PARAMETER :: ParamUnitsAry(21705) = (/ & ! This lists the units corresponding to the allowed parameters + ParamUnitsAry1, ParamUnitsAry2, ParamUnitsAry3, ParamUnitsAry4, ParamUnitsAry5, ParamUnitsAry6, ParamUnitsAry7, ParamUnitsAry8, ParamUnitsAry9, ParamUnitsAry10, ParamUnitsAry11, ParamUnitsAry12, ParamUnitsAry13/) + + + +! End of code generated by Matlab script end module SubDyn_Output_Params diff --git a/modules/version/src/VersionInfo.f90 b/modules/version/src/VersionInfo.f90 index 1f03e97a90..9e512b84c3 100644 --- a/modules/version/src/VersionInfo.f90 +++ b/modules/version/src/VersionInfo.f90 @@ -57,7 +57,7 @@ FUNCTION GetVersion(ThisProgVer, Cmpl4SFun, Cmpl4LV) CHARACTER(200) :: git_commit - GetVersion = TRIM(GetNVD(ThisProgVer))//', compiled' + GetVersion = TRIM(GetNVD(ThisProgVer))//', compiled on '//__DATE__//' at '//__TIME__ if (present(Cmpl4SFun)) then IF ( Cmpl4SFun ) THEN ! FAST has been compiled as an S-Function for Simulink @@ -303,7 +303,7 @@ SUBROUTINE INVALID_SYNTAX(ErrorMessage) SUBROUTINE GET_COMMAND_LINE_ARG(ArgIndex, ArgGiven) INTEGER, INTENT(IN) :: ArgIndex !< Index location of the argument to get. - CHARACTER(1024), INTENT(OUT) :: ArgGiven !< The gotten command-line argument. + CHARACTER(*), INTENT(OUT) :: ArgGiven !< The gotten command-line argument. INTEGER :: Error !< Indicates if there was an error getting an argument. CALL GET_COMMAND_ARGUMENT( ArgIndex, ArgGiven, STATUS=Error ) diff --git a/reg_tests/CMakeLists.txt b/reg_tests/CMakeLists.txt index 9a64d7798c..c43aab0cc9 100644 --- a/reg_tests/CMakeLists.txt +++ b/reg_tests/CMakeLists.txt @@ -71,6 +71,10 @@ set(CTEST_INFLOWWIND_EXECUTABLE "${CMAKE_BINARY_DIR}/modules/inflowwind/inflowwi # Set the MoorDyn executable configuration option and default set(CTEST_MOORDYN_EXECUTABLE "${CMAKE_BINARY_DIR}/modules/moordyn/moordyn_driver${CMAKE_EXECUTABLE_SUFFIX}" CACHE FILEPATH "Specify the MoorDyn driver executable to use in testing.") +# Set the SeaState executable configuration option and default +set(CTEST_SEASTATE_EXECUTABLE "${CMAKE_BINARY_DIR}/modules/seastate/seastate_driver" CACHE FILEPATH "Specify the SeaState driver executable to use in testing.") + + # Set the testing tolerance set(CTEST_RTEST_RTOL "2" CACHE STRING "Sets the relative orders of magnitude to allow to deviate from the baseline.") set(CTEST_RTEST_ATOL "1.9" CACHE STRING "Set the absolute orders of magnitude to consider as testable values; any deviations smaller than this always pass.") @@ -187,5 +191,6 @@ add_custom_target( hydrodyn_driver inflowwind_driver moordyn_driver + seastate_driver subdyn_driver ) diff --git a/reg_tests/CTestList.cmake b/reg_tests/CTestList.cmake index 0e04de8a9f..428b149b41 100644 --- a/reg_tests/CTestList.cmake +++ b/reg_tests/CTestList.cmake @@ -219,6 +219,15 @@ function(py_ifw_regression TESTNAME LABEL) regression(${TEST_SCRIPT} ${INFLOWWIND_EXECUTABLE} ${SOURCE_DIRECTORY} ${BUILD_DIRECTORY} ${TESTNAME} "${LABEL}") endfunction(py_ifw_regression) +# seastate +function(seast_regression TESTNAME LABEL) + set(TEST_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/executeSeaStateRegressionCase.py") + set(SEASTATE_EXECUTABLE "${CTEST_SEASTATE_EXECUTABLE}") + set(SOURCE_DIRECTORY "${CMAKE_CURRENT_LIST_DIR}/..") + set(BUILD_DIRECTORY "${CTEST_BINARY_DIR}/modules/seastate") + regression(${TEST_SCRIPT} ${SEASTATE_EXECUTABLE} ${SOURCE_DIRECTORY} ${BUILD_DIRECTORY} ${TESTNAME} "${LABEL}") +endfunction(seast_regression) + # moordyn function(md_regression TESTNAME LABEL) set(TEST_SCRIPT "${CMAKE_CURRENT_LIST_DIR}/executeMoordynRegressionCase.py") @@ -390,6 +399,11 @@ ifw_regression("ifw_BoxExceedTwr" "inflowwind") # Py-InflowWind regression tests py_ifw_regression("py_ifw_turbsimff" "inflowwind;python") +# SeaState regression tests +seast_regression("seastate_1" "seastate") +seast_regression("seastate_wavemod5" "seastate") +seast_regression("seastate_wr_kin1" "seastate") + # MoorDyn regression tests md_regression("md_5MW_OC4Semi" "moordyn") py_md_regression("py_md_5MW_OC4Semi" "moordyn;python") diff --git a/reg_tests/executeHydrodynPyRegressionCase.py b/reg_tests/executeHydrodynPyRegressionCase.py index 77044846a4..241094a1ff 100644 --- a/reg_tests/executeHydrodynPyRegressionCase.py +++ b/reg_tests/executeHydrodynPyRegressionCase.py @@ -88,24 +88,15 @@ if not os.path.isdir(inputsDirectory): rtl.exitWithError("The test data inputs directory, {}, does not exist. Verify your local repository is up to date.".format(inputsDirectory)) -# create the local output directory if it does not already exist -# and initialize it with input files for all test cases -if not os.path.isdir(testBuildDirectory): - os.makedirs(testBuildDirectory) - for file in glob.glob(os.path.join(inputsDirectory,"*py")): - filename = file.split(os.path.sep)[-1] - shutil.copy(os.path.join(inputsDirectory,filename), os.path.join(testBuildDirectory,filename)) - for file in glob.glob(os.path.join(inputsDirectory,"hd_*inp")): - filename = file.split(os.path.sep)[-1] - shutil.copy(os.path.join(inputsDirectory,filename), os.path.join(testBuildDirectory,filename)) - for file in glob.glob(os.path.join(inputsDirectory,"*dat")): - filename = file.split(os.path.sep)[-1] - shutil.copy(os.path.join(inputsDirectory,filename), os.path.join(testBuildDirectory,filename)) +# create the local output directory and initialize it with input files +rtl.copyTree(inputsDirectory, testBuildDirectory) + # , excludeExt=['.out','.outb']) + ### Run HydroDyn on the test case if not noExec: caseInputFile = os.path.join(testBuildDirectory, "hydrodyn_driver.py") - returnCode = openfastDrivers.runHydrodynDriverCase(caseInputFile, executable) + returnCode = openfastDrivers.runHydrodynDriverCase(caseInputFile, executable, verbose=verbose) if returnCode != 0: sys.exit(returnCode*10) diff --git a/reg_tests/executeHydrodynRegressionCase.py b/reg_tests/executeHydrodynRegressionCase.py index 445c21294b..a6a3b56b6c 100644 --- a/reg_tests/executeHydrodynRegressionCase.py +++ b/reg_tests/executeHydrodynRegressionCase.py @@ -108,8 +108,8 @@ sys.exit(returnCode*10) ### Build the filesystem navigation variables for running the regression test -localOutFile = os.path.join(testBuildDirectory, "driver.HD.out") -baselineOutFile = os.path.join(targetOutputDirectory, "driver.HD.out") +localOutFile = os.path.join(testBuildDirectory, "driver.out") +baselineOutFile = os.path.join(targetOutputDirectory, "driver.out") rtl.validateFileOrExit(localOutFile) rtl.validateFileOrExit(baselineOutFile) diff --git a/reg_tests/executeMoordynRegressionCase.py b/reg_tests/executeMoordynRegressionCase.py index a2d209b767..f9c540cc6f 100644 --- a/reg_tests/executeMoordynRegressionCase.py +++ b/reg_tests/executeMoordynRegressionCase.py @@ -1,5 +1,5 @@ # -# Copyright 2017 National Renewable Energy Laboratory +# Copyright 2022 National Renewable Energy Laboratory # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/reg_tests/executeSeaStateRegressionCase.py b/reg_tests/executeSeaStateRegressionCase.py new file mode 100644 index 0000000000..5660f29f0c --- /dev/null +++ b/reg_tests/executeSeaStateRegressionCase.py @@ -0,0 +1,146 @@ +# +# Copyright 2017 National Renewable Energy Laboratory +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +""" + This program executes SeaState and a regression test for a single test case. + The test data is contained in a git submodule, r-test, which must be initialized + prior to running. See the r-test README or OpenFAST documentation for more info. + + Get usage with: `executeSeaStateRegressionCase.py -h` +""" + +import os +import sys +basepath = os.path.dirname(os.path.abspath(__file__)) +sys.path.insert(0, os.path.sep.join([basepath, "lib"])) +import argparse +import numpy as np +import shutil +import glob +import subprocess +import rtestlib as rtl +import openfastDrivers +import pass_fail +from errorPlotting import exportCaseSummary + +##### Main program + +### Store the python executable for future python calls +pythonCommand = sys.executable + +### Verify input arguments +parser = argparse.ArgumentParser(description="Executes OpenFAST and a regression test for a single test case.") +parser.add_argument("caseName", metavar="Case-Name", type=str, nargs=1, help="The name of the test case.") +parser.add_argument("executable", metavar="SeaState-Driver", type=str, nargs=1, help="The path to the SeaStatedriver executable.") +parser.add_argument("sourceDirectory", metavar="path/to/openfast_repo", type=str, nargs=1, help="The path to the OpenFAST repository.") +parser.add_argument("buildDirectory", metavar="path/to/openfast_repo/build", type=str, nargs=1, help="The path to the OpenFAST repository build directory.") +parser.add_argument("rtol", metavar="Relative-Tolerance", type=float, nargs=1, help="Relative tolerance to allow the solution to deviate; expressed as order of magnitudes less than baseline.") +parser.add_argument("atol", metavar="Absolute-Tolerance", type=float, nargs=1, help="Absolute tolerance to allow small values to pass; expressed as order of magnitudes less than baseline.") +parser.add_argument("-p", "-plot", dest="plot", action='store_true', help="bool to include plots in failed cases") +parser.add_argument("-n", "-no-exec", dest="noExec", action='store_true', help="bool to prevent execution of the test cases") +parser.add_argument("-v", "-verbose", dest="verbose", action='store_true', help="bool to include verbose system output") + +args = parser.parse_args() + +caseName = args.caseName[0] +executable = args.executable[0] +sourceDirectory = args.sourceDirectory[0] +buildDirectory = args.buildDirectory[0] +rtol = args.rtol[0] +atol = args.atol[0] +plotError = args.plot +noExec = args.noExec +verbose = args.verbose + +# validate inputs +rtl.validateExeOrExit(executable) +rtl.validateDirOrExit(sourceDirectory) +if not os.path.isdir(buildDirectory): + os.makedirs(buildDirectory) + +### Build the filesystem navigation variables for running the test case +regtests = os.path.join(sourceDirectory, "reg_tests") +lib = os.path.join(regtests, "lib") +rtest = os.path.join(regtests, "r-test") +moduleDirectory = os.path.join(rtest, "modules", "seastate") +inputsDirectory = os.path.join(moduleDirectory, caseName) +targetOutputDirectory = os.path.join(inputsDirectory) +testBuildDirectory = os.path.join(buildDirectory, caseName) + +# verify all the required directories exist +if not os.path.isdir(rtest): + rtl.exitWithError("The test data directory, {}, does not exist. If you haven't already, run `git submodule update --init --recursive`".format(rtest)) +if not os.path.isdir(targetOutputDirectory): + rtl.exitWithError("The test data outputs directory, {}, does not exist. Try running `git submodule update`".format(targetOutputDirectory)) +if not os.path.isdir(inputsDirectory): + rtl.exitWithError("The test data inputs directory, {}, does not exist. Verify your local repository is up to date.".format(inputsDirectory)) + +# Special case, copy the seastate_wr_kin1 files first since seastate_wavemod5 requires them +dst = os.path.join(buildDirectory, "seastate_wr_kin1") +src = os.path.join(moduleDirectory, "seastate_wr_kin1") +try: + rtl.copyTree(src, dst) +except: + # This can fail if two processes are copying the file at the same time + print('>>> Copy failed') + import time + time.sleep(1) + +# create the local output directory and initialize it with input files +if not os.path.isdir(testBuildDirectory): + rtl.copyTree(inputsDirectory, testBuildDirectory, renameDict={'seastate.SeaSt.out':'seastate.SeaSt.Ref.out'}) + +### Run seastate on the test case +if not noExec: + caseInputFile = os.path.join(testBuildDirectory, "seastate_driver.inp") + returnCode = openfastDrivers.runSeaStateDriverCase(caseInputFile, executable, verbose=verbose) + if returnCode != 0: + sys.exit(returnCode*10) + +### Build the filesystem navigation variables for running the regression test +localOutFile = os.path.join(testBuildDirectory, "seastate.SeaSt.out") +baselineOutFile = os.path.join(targetOutputDirectory, os.path.basename(localOutFile)) +rtl.validateFileOrExit(localOutFile) +rtl.validateFileOrExit(baselineOutFile) + +testData, testInfo, _ = pass_fail.readFASTOut(localOutFile) +baselineData, baselineInfo, _ = pass_fail.readFASTOut(baselineOutFile) + +passing_channels = pass_fail.passing_channels(testData.T, baselineData.T, rtol, atol) +passing_channels = passing_channels.T + +norms = pass_fail.calculateNorms(testData, baselineData) + +# export all case summaries +channel_names = testInfo["attribute_names"] +exportCaseSummary(testBuildDirectory, caseName, channel_names, passing_channels, norms) + +# passing case +if np.all(passing_channels): + sys.exit(0) + +# failing case +if plotError: + from errorPlotting import finalizePlotDirectory, plotOpenfastError + for channel in testInfo["attribute_names"]: + try: + plotOpenfastError(localOutFile, baselineOutFile, channel, rtol, atol) + except: + error = sys.exc_info()[1] + print("Error generating plots: {}".format(error)) + finalizePlotDirectory(localOutFile, testInfo["attribute_names"], caseName) + +sys.exit(1) diff --git a/reg_tests/executeSubdynRegressionCase.py b/reg_tests/executeSubdynRegressionCase.py index 9a71b167e5..2303b8a0ab 100644 --- a/reg_tests/executeSubdynRegressionCase.py +++ b/reg_tests/executeSubdynRegressionCase.py @@ -91,7 +91,7 @@ # create the local output directory and initialize it with input files (overwrite if exists) rtl.copyTree(inputsDirectory, testBuildDirectory, renameExtDict={'.out':'_ref.out'}, includeExt=['.dvr','.dat','.out','.csv']) - + ### Run SubDyn on the test case if not noExec: caseInputFile = os.path.join(testBuildDirectory, caseName+".dvr") diff --git a/reg_tests/lib/openfastDrivers.py b/reg_tests/lib/openfastDrivers.py index 93bba5bbfb..c7d1659e0b 100644 --- a/reg_tests/lib/openfastDrivers.py +++ b/reg_tests/lib/openfastDrivers.py @@ -90,8 +90,10 @@ def runBeamdynDriverCase(inputFile, executable, verbose=False): return _runGenericCase(inputFile, executable, verbose) def runHydrodynDriverCase(inputFile, executable, verbose=False): - caseDirectory = os.path.sep.join(inputFile.split(os.path.sep)[:-1]) - os.chdir(caseDirectory) + return _runGenericCase(inputFile, executable, verbose) + +def runMoordynDriverCase(inputFile, executable, verbose=False): + print("MoorDyn run: {}".format(inputFile)) return _runGenericCase(inputFile, executable, verbose) def runSubdynDriverCase(inputFile, executable, verbose=False): @@ -109,3 +111,8 @@ def runMoordynDriverCase(inputFile, executable, verbose=False): os.chdir(caseDirectory) return _runGenericCase(inputFile, executable, verbose) + +def runSeaStateDriverCase(inputFile, executable, verbose=False): + caseDirectory = os.path.sep.join(inputFile.split(os.path.sep)[:-1]) + os.chdir(caseDirectory) + return _runGenericCase(inputFile, executable, verbose) diff --git a/reg_tests/lib/pass_fail.py b/reg_tests/lib/pass_fail.py index b9317745ce..1a9e0f1e75 100644 --- a/reg_tests/lib/pass_fail.py +++ b/reg_tests/lib/pass_fail.py @@ -43,9 +43,14 @@ def passing_channels(test, baseline, RTOL_MAGNITUDE, ATOL_MAGNITUDE) -> np.ndarr NUMEPS = 1e-12 ATOL_MIN = 1e-6 - n_channels = np.shape(test)[0] where_close = np.zeros_like(test, dtype=bool) + if test.size != baseline.size: + passing_channels = np.all(where_close, axis=1) # all false + return passing_channels + + n_channels = np.shape(test)[0] + rtol = 10**(-1 * RTOL_MAGNITUDE) for i in range(n_channels): baseline_offset = baseline[i] - np.min(baseline[i]) diff --git a/reg_tests/r-test b/reg_tests/r-test index ef6ab57591..485315de22 160000 --- a/reg_tests/r-test +++ b/reg_tests/r-test @@ -1 +1 @@ -Subproject commit ef6ab575919f1db597702f1c3f86a16bdc2b4338 +Subproject commit 485315de2207d4b047a5c8f908e995800f7ab6f5 diff --git a/vs-build/FASTlib/FASTlib.vfproj b/vs-build/FASTlib/FASTlib.vfproj index 7a94c7ae68..9a91d76b80 100644 --- a/vs-build/FASTlib/FASTlib.vfproj +++ b/vs-build/FASTlib/FASTlib.vfproj @@ -762,45 +762,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -1020,82 +984,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1105,7 +993,6 @@ - @@ -1113,13 +1000,9 @@ - - - - - + @@ -2140,6 +2023,206 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vs-build/HydroDyn/HydroDynDriver.sln b/vs-build/HydroDyn/HydroDynDriver.sln index cc5662783c..10a8c91d84 100644 --- a/vs-build/HydroDyn/HydroDynDriver.sln +++ b/vs-build/HydroDyn/HydroDynDriver.sln @@ -1,4 +1,4 @@ - + Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.30503.244 @@ -11,6 +11,8 @@ Global Debug_Double|x64 = Debug_Double|x64 Debug|Win32 = Debug|Win32 Debug|x64 = Debug|x64 + Release_Double|Win32 = Release_Double|Win32 + Release_Double|x64 = Release_Double|x64 Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection @@ -23,6 +25,10 @@ Global {815C302F-A93D-4C22-9329-717B085113C0}.Debug|Win32.Build.0 = Debug|Win32 {815C302F-A93D-4C22-9329-717B085113C0}.Debug|x64.ActiveCfg = Debug|x64 {815C302F-A93D-4C22-9329-717B085113C0}.Debug|x64.Build.0 = Debug|x64 + {815C302F-A93D-4C22-9329-717B085113C0}.Release_Double|Win32.ActiveCfg = Release_Double|Win32 + {815C302F-A93D-4C22-9329-717B085113C0}.Release_Double|Win32.Build.0 = Release_Double|Win32 + {815C302F-A93D-4C22-9329-717B085113C0}.Release_Double|x64.ActiveCfg = Release_Double|x64 + {815C302F-A93D-4C22-9329-717B085113C0}.Release_Double|x64.Build.0 = Release_Double|x64 {815C302F-A93D-4C22-9329-717B085113C0}.Release|Win32.ActiveCfg = Release|Win32 {815C302F-A93D-4C22-9329-717B085113C0}.Release|Win32.Build.0 = Release|Win32 {815C302F-A93D-4C22-9329-717B085113C0}.Release|x64.ActiveCfg = Release|x64 diff --git a/vs-build/HydroDyn/HydroDynDriver.vfproj b/vs-build/HydroDyn/HydroDynDriver.vfproj index 3702b83922..db64d67385 100644 --- a/vs-build/HydroDyn/HydroDynDriver.vfproj +++ b/vs-build/HydroDyn/HydroDynDriver.vfproj @@ -5,7 +5,7 @@ - + @@ -25,7 +25,7 @@ - + @@ -93,6 +93,8 @@ + + @@ -101,34 +103,22 @@ + + - - - - - - - - - - - - - - - - - + + + @@ -137,16 +127,22 @@ + + + + + + @@ -155,16 +151,22 @@ + + + + + + @@ -173,12 +175,20 @@ + + - + + + + + + + @@ -187,16 +197,22 @@ + + + + + + @@ -205,11 +221,15 @@ + + + + @@ -218,75 +238,41 @@ + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - + + + @@ -295,6 +281,8 @@ + + @@ -303,6 +291,8 @@ + + @@ -311,11 +301,15 @@ + + + + @@ -324,11 +318,15 @@ + + + + @@ -337,11 +335,15 @@ + + + + @@ -350,11 +352,15 @@ + + + + @@ -363,11 +369,15 @@ + + + + @@ -376,11 +386,15 @@ + + + + @@ -389,11 +403,15 @@ + + + + @@ -402,11 +420,15 @@ + + + + @@ -415,11 +437,15 @@ + + + + @@ -428,11 +454,15 @@ + + + + @@ -441,12 +471,16 @@ + + + + @@ -455,8 +489,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vs-build/ReadMe.md b/vs-build/ReadMe.md index 9753796fe0..ecc933f7c2 100644 --- a/vs-build/ReadMe.md +++ b/vs-build/ReadMe.md @@ -6,9 +6,10 @@ The following solution files are available for code development on Windows using - [FAST.Farm](FAST-farm/FAST-Farm.sln) This contains the build configurations for FAST.Farm. - Module-level drivers: - - AeroDynamics: + - AeroDynamics and HydroDynamics: - [AeroDyn driver](AeroDyn/AeroDyn_Driver.sln) - [UnsteadyAero driver](UnsteadyAero/UnsteadyAero.sln) + - [HydroDyn driver](HydroDyn/HydroDynDriver.sln) - Structural: - [BeamDyn driver](BeamDyn/BeamDyn-w-registry.sln) - [SubDyn driver](SubDyn/SubDyn.sln) @@ -16,7 +17,7 @@ The following solution files are available for code development on Windows using - [TurbSim](TurbSim/TurbSim.sln) Generates wind files - [InflowWind driver](InflowWind/InflowWind_driver.sln) Reads and interpolates existing wind files - [InflowWind c binding](InflowWind/InflowWind_c_binding.sln) Creates a library (DLL/so) of the InflowWind routines that can be called from a C interface. **TO DO: Combine this with InflowWind driver for easier maintenance** - - [HydroDyn driver](HydroDyn/HydroDynDriver.sln) + - [SeaState driver](SeaState/SeaStateDriver.sln) Waves and currents - Other: - [Discon](Discon/Discon.sln) This solution file contains all 3 controllers used in the OpenFAST r-test (with the NREL 5MW model). diff --git a/vs-build/RunRegistry.bat b/vs-build/RunRegistry.bat index d3dfcbe2f7..7bda895acb 100644 --- a/vs-build/RunRegistry.bat +++ b/vs-build/RunRegistry.bat @@ -28,6 +28,7 @@ SET ED_Loc=%Modules_Loc%\elastodyn\src SET AD14_Loc=%Modules_Loc%\aerodyn14\src SET IfW_Loc=%Modules_Loc%\inflowwind\src SET HD_Loc=%Modules_Loc%\hydrodyn\src +SET SEAST_Loc=%Modules_Loc%\seastate\src SET SD_Loc=%Modules_Loc%\subdyn\src SET MAP_Loc=%Modules_Loc%\map\src SET FEAM_Loc=%Modules_Loc%\feamooring\src @@ -49,7 +50,7 @@ SET Farm_Loc=%Root_Loc%\glue-codes\fast-farm\src SET ALL_FAST_Includes=-I "%FAST_Loc%" -I "%NWTC_Lib_Loc%" -I "%ED_Loc%" -I "%SrvD_Loc%" -I "%AD14_Loc%" -I^ "%AD_Loc%" -I "%BD_Loc%" -I "%SC_Loc%" -I^ - "%IfW_Loc%" -I "%SD_Loc%" -I "%HD_Loc%" -I "%MAP_Loc%" -I "%FEAM_Loc%" -I^ + "%IfW_Loc%" -I "%SD_Loc%" -I "%HD_Loc%" -I "%SEAST_Loc%" -I "%MAP_Loc%" -I "%FEAM_Loc%" -I^ "%IceF_Loc%" -I "%IceD_Loc%" -I "%MD_Loc%" -I "%OpFM_Loc%" -I "%Orca_Loc%" -I "%ExtPtfm_Loc%" @@ -189,9 +190,6 @@ SET Output_Loc=%CURR_LOC% GOTO checkError :HydroDyn -:Current -:Waves -:Waves2 :SS_Excitation :SS_Radiation :Conv_Radiation @@ -200,7 +198,18 @@ GOTO checkError :Morison SET CURR_LOC=%HD_Loc% SET Output_Loc=%CURR_LOC% -%REGISTRY% "%CURR_LOC%\%ModuleName%.txt" -I "%NWTC_Lib_Loc%" -I "%CURR_LOC%" -O "%Output_Loc%" +%REGISTRY% "%CURR_LOC%\%ModuleName%.txt" -I "%NWTC_Lib_Loc%" -I "%CURR_LOC%" -I "%SEAST_Loc%" -O "%Output_Loc%" +GOTO checkError + +:SeaState +:Current +:Waves +:Waves2 +:SeaState_Interp + +SET CURR_LOC=%SEAST_Loc% +SET Output_Loc=%CURR_LOC% +%REGISTRY% "%CURR_LOC%\%ModuleName%.txt" -I "%NWTC_Lib_Loc%" -I "%CURR_LOC%" -noextrap -O "%Output_Loc%" GOTO checkError :SubDyn diff --git a/vs-build/SeaState/SeaStateDriver.sln b/vs-build/SeaState/SeaStateDriver.sln new file mode 100644 index 0000000000..ee23e926c1 --- /dev/null +++ b/vs-build/SeaState/SeaStateDriver.sln @@ -0,0 +1,37 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30503.244 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{6989167D-11E4-40FE-8C1A-21924BCA7E90}") = "SeaStateDriver", "SeaStateDriver.vfproj", "{815C302F-A93D-4C22-9329-717B4BC113C0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug_Double|Win32 = Debug_Double|Win32 + Debug_Double|x64 = Debug_Double|x64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {815C302F-A93D-4C22-9329-717B4BC113C0}.Debug_Double|Win32.ActiveCfg = Debug_Double|Win32 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Debug_Double|Win32.Build.0 = Debug_Double|Win32 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Debug_Double|x64.ActiveCfg = Debug_Double|x64 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Debug_Double|x64.Build.0 = Debug_Double|x64 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Debug|Win32.ActiveCfg = Debug|Win32 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Debug|Win32.Build.0 = Debug|Win32 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Debug|x64.ActiveCfg = Debug|x64 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Debug|x64.Build.0 = Debug|x64 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Release|Win32.ActiveCfg = Release|Win32 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Release|Win32.Build.0 = Release|Win32 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Release|x64.ActiveCfg = Release|x64 + {815C302F-A93D-4C22-9329-717B4BC113C0}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {D73C5D81-14CD-4C14-8B52-6885B380AE3E} + EndGlobalSection +EndGlobal diff --git a/vs-build/SeaState/SeaStateDriver.vfproj b/vs-build/SeaState/SeaStateDriver.vfproj new file mode 100644 index 0000000000..a02ff5fdb5 --- /dev/null +++ b/vs-build/SeaState/SeaStateDriver.vfproj @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +