From 9cf27425c76f3ca9beedbf8b89f2c42f24d07b5f Mon Sep 17 00:00:00 2001 From: Bonnie Jonkman Date: Tue, 20 Apr 2021 22:02:23 -0600 Subject: [PATCH 001/338] Registry: remove USE statements for nested modules This change removes USE statements for modules that are inherited through modules that are explicitly included in the Registry input files. This should reduce the memory required to build the code in certain instances, but should have no effect on the compiled code. --- .../fast-farm/src/FASTWrapper_Types.f90 | 43 ------------------ glue-codes/fast-farm/src/FAST_Farm_Types.f90 | 44 ------------------- modules/aerodyn/src/AeroDyn_Types.f90 | 2 - modules/aerodyn/src/BEMT_Types.f90 | 1 - modules/aerodyn/src/FVW_Types.f90 | 1 - modules/aerodyn14/src/AeroDyn14_Types.f90 | 9 ---- modules/aerodyn14/src/DWM_Types.f90 | 8 ---- modules/awae/src/AWAE_Types.f90 | 8 ---- modules/hydrodyn/src/HydroDyn_Types.f90 | 4 -- modules/inflowwind/src/InflowWind_Types.f90 | 1 - modules/openfast-library/src/FAST_Types.f90 | 26 ----------- .../openfast-registry/src/gen_module_files.c | 2 +- modules/openfast-registry/src/reg_parse.c | 24 +++++++--- 13 files changed, 19 insertions(+), 154 deletions(-) diff --git a/glue-codes/fast-farm/src/FASTWrapper_Types.f90 b/glue-codes/fast-farm/src/FASTWrapper_Types.f90 index 646bbbb856..3e0fc25cc3 100644 --- a/glue-codes/fast-farm/src/FASTWrapper_Types.f90 +++ b/glue-codes/fast-farm/src/FASTWrapper_Types.f90 @@ -31,49 +31,6 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE FASTWrapper_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE ElastoDyn_Types -USE BeamDyn_Types -USE StrucCtrl_Types -USE ServoDyn_Types -USE IfW_UniformWind_Types -USE IfW_FFWind_Base_Types -USE IfW_TSFFWind_Types -USE IfW_BladedFFWind_Types -USE IfW_HAWCWind_Types -USE IfW_UserWind_Types -USE IfW_4Dext_Types -USE Lidar_Types -USE InflowWind_Types -USE DWM_Types -USE AeroDyn14_Types -USE AirfoilInfo_Types -USE UnsteadyAero_Types -USE DBEMT_Types -USE BEMT_Types -USE FVW_Types -USE AeroAcoustics_Types -USE AeroDyn_Types -USE SubDyn_Types -USE Current_Types -USE Waves_Types -USE Waves2_Types -USE Conv_Radiation_Types -USE SS_Radiation_Types -USE SS_Excitation_Types -USE WAMIT_Types -USE WAMIT2_Types -USE Morison_Types -USE HydroDyn_Types -USE IceFloe_Types -USE OpenFOAM_Types -USE SCDataEx_Types -USE IceDyn_Types -USE FEAMooring_Types -USE MAP_Fortran_Types -USE MAP_Types -USE MoorDyn_Types -USE OrcaFlexInterface_Types -USE ExtPtfm_MCKF_Types USE FAST_Types USE NWTC_Library IMPLICIT NONE diff --git a/glue-codes/fast-farm/src/FAST_Farm_Types.f90 b/glue-codes/fast-farm/src/FAST_Farm_Types.f90 index 07302f730f..9d3cc3ffe4 100644 --- a/glue-codes/fast-farm/src/FAST_Farm_Types.f90 +++ b/glue-codes/fast-farm/src/FAST_Farm_Types.f90 @@ -31,50 +31,6 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE FAST_Farm_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE ElastoDyn_Types -USE BeamDyn_Types -USE StrucCtrl_Types -USE ServoDyn_Types -USE IfW_UniformWind_Types -USE IfW_FFWind_Base_Types -USE IfW_TSFFWind_Types -USE IfW_BladedFFWind_Types -USE IfW_HAWCWind_Types -USE IfW_UserWind_Types -USE IfW_4Dext_Types -USE Lidar_Types -USE InflowWind_Types -USE DWM_Types -USE AeroDyn14_Types -USE AirfoilInfo_Types -USE UnsteadyAero_Types -USE DBEMT_Types -USE BEMT_Types -USE FVW_Types -USE AeroAcoustics_Types -USE AeroDyn_Types -USE SubDyn_Types -USE Current_Types -USE Waves_Types -USE Waves2_Types -USE Conv_Radiation_Types -USE SS_Radiation_Types -USE SS_Excitation_Types -USE WAMIT_Types -USE WAMIT2_Types -USE Morison_Types -USE HydroDyn_Types -USE IceFloe_Types -USE OpenFOAM_Types -USE SCDataEx_Types -USE IceDyn_Types -USE FEAMooring_Types -USE MAP_Fortran_Types -USE MAP_Types -USE MoorDyn_Types -USE OrcaFlexInterface_Types -USE ExtPtfm_MCKF_Types -USE FAST_Types USE FASTWrapper_Types USE WakeDynamics_Types USE AWAE_Types diff --git a/modules/aerodyn/src/AeroDyn_Types.f90 b/modules/aerodyn/src/AeroDyn_Types.f90 index 3332222705..92207191ed 100644 --- a/modules/aerodyn/src/AeroDyn_Types.f90 +++ b/modules/aerodyn/src/AeroDyn_Types.f90 @@ -31,9 +31,7 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE AeroDyn_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE AirfoilInfo_Types USE UnsteadyAero_Types -USE DBEMT_Types USE BEMT_Types USE FVW_Types USE AeroAcoustics_Types diff --git a/modules/aerodyn/src/BEMT_Types.f90 b/modules/aerodyn/src/BEMT_Types.f90 index 88e7648f3f..94abddb661 100644 --- a/modules/aerodyn/src/BEMT_Types.f90 +++ b/modules/aerodyn/src/BEMT_Types.f90 @@ -31,7 +31,6 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE BEMT_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE AirfoilInfo_Types USE UnsteadyAero_Types USE DBEMT_Types USE NWTC_Library diff --git a/modules/aerodyn/src/FVW_Types.f90 b/modules/aerodyn/src/FVW_Types.f90 index 99f4966fd6..046d8fe4a4 100644 --- a/modules/aerodyn/src/FVW_Types.f90 +++ b/modules/aerodyn/src/FVW_Types.f90 @@ -31,7 +31,6 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE FVW_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE AirfoilInfo_Types USE UnsteadyAero_Types USE NWTC_Library IMPLICIT NONE diff --git a/modules/aerodyn14/src/AeroDyn14_Types.f90 b/modules/aerodyn14/src/AeroDyn14_Types.f90 index 138de427c3..2424723133 100644 --- a/modules/aerodyn14/src/AeroDyn14_Types.f90 +++ b/modules/aerodyn14/src/AeroDyn14_Types.f90 @@ -31,15 +31,6 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE AeroDyn14_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE IfW_UniformWind_Types -USE IfW_FFWind_Base_Types -USE IfW_TSFFWind_Types -USE IfW_BladedFFWind_Types -USE IfW_HAWCWind_Types -USE IfW_UserWind_Types -USE IfW_4Dext_Types -USE Lidar_Types -USE InflowWind_Types USE DWM_Types USE NWTC_Library IMPLICIT NONE diff --git a/modules/aerodyn14/src/DWM_Types.f90 b/modules/aerodyn14/src/DWM_Types.f90 index 414686d853..a79aae3424 100644 --- a/modules/aerodyn14/src/DWM_Types.f90 +++ b/modules/aerodyn14/src/DWM_Types.f90 @@ -31,14 +31,6 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE DWM_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE IfW_UniformWind_Types -USE IfW_FFWind_Base_Types -USE IfW_TSFFWind_Types -USE IfW_BladedFFWind_Types -USE IfW_HAWCWind_Types -USE IfW_UserWind_Types -USE IfW_4Dext_Types -USE Lidar_Types USE InflowWind_Types USE NWTC_Library IMPLICIT NONE diff --git a/modules/awae/src/AWAE_Types.f90 b/modules/awae/src/AWAE_Types.f90 index 903027b464..d6ade6de2e 100644 --- a/modules/awae/src/AWAE_Types.f90 +++ b/modules/awae/src/AWAE_Types.f90 @@ -31,14 +31,6 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE AWAE_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE IfW_UniformWind_Types -USE IfW_FFWind_Base_Types -USE IfW_TSFFWind_Types -USE IfW_BladedFFWind_Types -USE IfW_HAWCWind_Types -USE IfW_UserWind_Types -USE IfW_4Dext_Types -USE Lidar_Types USE InflowWind_Types USE NWTC_Library IMPLICIT NONE diff --git a/modules/hydrodyn/src/HydroDyn_Types.f90 b/modules/hydrodyn/src/HydroDyn_Types.f90 index 0397484eac..a981c9aba0 100644 --- a/modules/hydrodyn/src/HydroDyn_Types.f90 +++ b/modules/hydrodyn/src/HydroDyn_Types.f90 @@ -32,11 +32,7 @@ MODULE HydroDyn_Types !--------------------------------------------------------------------------------------------------------------------------------- USE Current_Types -USE Waves_Types USE Waves2_Types -USE Conv_Radiation_Types -USE SS_Radiation_Types -USE SS_Excitation_Types USE WAMIT_Types USE WAMIT2_Types USE Morison_Types diff --git a/modules/inflowwind/src/InflowWind_Types.f90 b/modules/inflowwind/src/InflowWind_Types.f90 index 8ed4bd6b2c..8575aab02f 100644 --- a/modules/inflowwind/src/InflowWind_Types.f90 +++ b/modules/inflowwind/src/InflowWind_Types.f90 @@ -32,7 +32,6 @@ MODULE InflowWind_Types !--------------------------------------------------------------------------------------------------------------------------------- USE IfW_UniformWind_Types -USE IfW_FFWind_Base_Types USE IfW_TSFFWind_Types USE IfW_BladedFFWind_Types USE IfW_HAWCWind_Types diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index e1951d296f..7f86dccc5a 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -33,43 +33,17 @@ MODULE FAST_Types !--------------------------------------------------------------------------------------------------------------------------------- USE ElastoDyn_Types USE BeamDyn_Types -USE StrucCtrl_Types USE ServoDyn_Types -USE IfW_UniformWind_Types -USE IfW_FFWind_Base_Types -USE IfW_TSFFWind_Types -USE IfW_BladedFFWind_Types -USE IfW_HAWCWind_Types -USE IfW_UserWind_Types -USE IfW_4Dext_Types -USE Lidar_Types USE InflowWind_Types -USE DWM_Types USE AeroDyn14_Types -USE AirfoilInfo_Types -USE UnsteadyAero_Types -USE DBEMT_Types -USE BEMT_Types -USE FVW_Types -USE AeroAcoustics_Types USE AeroDyn_Types USE SubDyn_Types -USE Current_Types -USE Waves_Types -USE Waves2_Types -USE Conv_Radiation_Types -USE SS_Radiation_Types -USE SS_Excitation_Types -USE WAMIT_Types -USE WAMIT2_Types -USE Morison_Types USE HydroDyn_Types USE IceFloe_Types USE OpenFOAM_Types USE SCDataEx_Types USE IceDyn_Types USE FEAMooring_Types -USE MAP_Fortran_Types USE MAP_Types USE MoorDyn_Types USE OrcaFlexInterface_Types diff --git a/modules/openfast-registry/src/gen_module_files.c b/modules/openfast-registry/src/gen_module_files.c index df4acfe9db..e0438498bd 100644 --- a/modules/openfast-registry/src/gen_module_files.c +++ b/modules/openfast-registry/src/gen_module_files.c @@ -1987,7 +1987,7 @@ gen_module( FILE * fp , node_t * ModName, char * prog_ver ) for ( p = ModNames ; p ; p = p->next ) { // Add use declarations for Modules that are included as "usefrom" - if ( p->usefrom ) { + if ( p->usefrom == 1 ) { if ( strcmp(make_lower_temp(p->name),"nwtc_library") ) { fprintf(fp,"USE %s_Types\n",p->name) ; } diff --git a/modules/openfast-registry/src/reg_parse.c b/modules/openfast-registry/src/reg_parse.c index 37d457abc2..ab645697cb 100644 --- a/modules/openfast-registry/src/reg_parse.c +++ b/modules/openfast-registry/src/reg_parse.c @@ -148,7 +148,7 @@ pre_parse( char * dir, FILE * infile, FILE * outfile, int usefrom_sw ) fprintf(stderr,"opening %s %s\n",include_file_name, (checking_for_usefrom || usefrom_sw)?"in usefrom mode":"" ) ; parseline[0] = '\0' ; - pre_parse( dir , include_fp , outfile, ( checking_for_usefrom || usefrom_sw ) ) ; + pre_parse( dir , include_fp , outfile, ( checking_for_usefrom + usefrom_sw ) ) ; parseline[0] = '\0' ; // fprintf(stderr,"closing %s %s\n",include_file_name, // (checking_for_usefrom || usefrom_sw)?"in usefrom mode":"" ) ; @@ -245,7 +245,7 @@ pre_parse( char * dir, FILE * infile, FILE * outfile, int usefrom_sw ) strcpy(tmp, parseline_save); x = strpbrk(tmp, " \t"); // find the first space or tab if (usefrom_sw && x) { - sprintf(parseline_save, "usefrom %s", x); + sprintf(parseline_save, "usefrom%i %s", usefrom_sw, x); } } @@ -343,9 +343,10 @@ reg_parse( FILE * infile ) defining_i1_field = 0 ; /* typedef, usefrom, and param entries */ +// || !strcmp(tokens[TABLE], "usefrom") if ( !strcmp( tokens[ TABLE ] , "typedef" ) - || !strcmp( tokens[ TABLE ] , "usefrom" ) - || !strcmp( tokens[ TABLE ] , "param" ) ) + || !strncmp(tokens[TABLE], "usefrom", 7) + || !strcmp( tokens[ TABLE ] , "param" ) ) { node_t * param_struct ; node_t * field_struct ; @@ -374,9 +375,20 @@ reg_parse( FILE * infile ) modname_struct->next = NULL ; add_node_to_end( modname_struct , &ModNames ) ; } - if ( !strcmp( tokens[ TABLE ] , "usefrom" ) ) + if (!strcmp(tokens[TABLE], "usefrom")) { - modname_struct->usefrom = 1 ; + modname_struct->usefrom = 1; + } else if(!strncmp(tokens[TABLE], "usefrom", 7)) + { + tokens[TABLE] += 7; + if (!strcmp(tokens[TABLE], "1")) + { + modname_struct->usefrom = 1; + } + else + { + modname_struct->usefrom = 2; + } } if ( !strcmp( tokens[ TABLE ] , "param" ) ) { From 5e6802de9f9d9578d3cb8d4de33a31df38c87e82 Mon Sep 17 00:00:00 2001 From: Bonnie Jonkman Date: Mon, 26 Apr 2021 12:52:13 -0600 Subject: [PATCH 002/338] updated Types files --- modules/aerodyn/src/AeroDyn_Driver_Types.f90 | 6 ------ 1 file changed, 6 deletions(-) diff --git a/modules/aerodyn/src/AeroDyn_Driver_Types.f90 b/modules/aerodyn/src/AeroDyn_Driver_Types.f90 index 5d5a85517a..981d1b9f06 100644 --- a/modules/aerodyn/src/AeroDyn_Driver_Types.f90 +++ b/modules/aerodyn/src/AeroDyn_Driver_Types.f90 @@ -31,12 +31,6 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE AeroDyn_Driver_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE AirfoilInfo_Types -USE UnsteadyAero_Types -USE DBEMT_Types -USE BEMT_Types -USE FVW_Types -USE AeroAcoustics_Types USE AeroDyn_Types USE NWTC_Library IMPLICIT NONE From 5ce9f62a16086933174c7d194c2760dc0970b087 Mon Sep 17 00:00:00 2001 From: Greg Hayman Date: Tue, 22 Jun 2021 08:36:10 -0600 Subject: [PATCH 003/338] Add Fortran pointers for multi-dimensional arrays If the user specifies the array dimensions via {*} instead of {:} a Fortran pointer to an array is generated instead of an allocatable array. If the -ccode option is used, then {*} results in the same output as {:} for compatibility with the corresponding C code. The user can only generate these Fortran pointers in the InitInput, InitOutput and Parameter data structures. The Registry will exit with an error if the user attempts to generate Fortran pointers in the other Framework data structures. --- modules/openfast-registry/src/data.h | 2 + .../openfast-registry/src/gen_module_files.c | 2 +- modules/openfast-registry/src/reg_parse.c | 53 +++++++++++++++++-- modules/openfast-registry/src/type.c | 4 +- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/modules/openfast-registry/src/data.h b/modules/openfast-registry/src/data.h index bc81980c73..4680d1539e 100644 --- a/modules/openfast-registry/src/data.h +++ b/modules/openfast-registry/src/data.h @@ -76,6 +76,8 @@ typedef struct node_struct { int is_interface_type ; +/* array pointer instead of allocatable*/ + int is_pointer; /* 0 = allocatable, 1 = pointer */ /* marker */ int mark ; diff --git a/modules/openfast-registry/src/gen_module_files.c b/modules/openfast-registry/src/gen_module_files.c index df4acfe9db..6edf86be4a 100644 --- a/modules/openfast-registry/src/gen_module_files.c +++ b/modules/openfast-registry/src/gen_module_files.c @@ -2126,7 +2126,7 @@ gen_module( FILE * fp , node_t * ModName, char * prog_ver ) } } - if ( is_pointer(r) ) { + if (sw_ccode && is_pointer(r) ) { fprintf(fp," %s ",c_types_binding(r->type->mapsto) ) ; } else { fprintf(fp," %s ",r->type->mapsto ) ; diff --git a/modules/openfast-registry/src/reg_parse.c b/modules/openfast-registry/src/reg_parse.c index 37d457abc2..6541617f79 100644 --- a/modules/openfast-registry/src/reg_parse.c +++ b/modules/openfast-registry/src/reg_parse.c @@ -456,7 +456,45 @@ reg_parse( FILE * infile ) tokens[FIELD_SYM], tokens[FIELD_TYPE] ) ; } #endif field_struct->usefrom = type_struct->usefrom ; - + /* Error Checking for Fortran Pointers used outside of FAST Interfaces: InitInputType, InitOutputType, Parameter */ + /* Note: Skip this check if the -ccode option is being used */ + if (field_struct->ndims > 0) { + if (!sw_ccode && is_pointer(field_struct)) { + if (modname_struct->is_interface_type) { + char nonick[NAMELEN]; + sprintf(tmpstr, "%s", make_lower_temp(ddtname)); + remove_nickname(modname_struct->nickname, tmpstr, nonick); + if (!strcmp(nonick, "continuousstatetype")) { + fprintf(stderr, "REGISTRY ERROR: Fortran Pointer Arrays cannot be used in ContinuousStateType data\n"); + exit(9); + } + if (!strcmp(nonick, "discretestatetype")) { + fprintf(stderr, "REGISTRY ERROR: Fortran Pointer Arrays cannot be used in DiscreteStateType data\n"); + exit(9); + } + if (!strcmp(nonick, "constraintstatetype")) { + fprintf(stderr, "REGISTRY ERROR: Fortran Pointer Arrays cannot be used in ConstraintStateType data\n"); + exit(9); + } + if (!strcmp(nonick, "otherstatetype")) { + fprintf(stderr, "REGISTRY ERROR: Fortran Pointer Arrays cannot be used in OtherStateType data\n"); + exit(9); + } + if (!strcmp(nonick, "miscvartype")) { + fprintf(stderr, "REGISTRY ERROR: Fortr an Pointer Arrays cannot be used in MiscVarType data\n"); + exit(9); + } + if (!strcmp(nonick, "inputtype")) { + fprintf(stderr, "REGISTRY ERROR: Fortran Pointer Arrays cannot be used in InputType data\n"); + exit(9); + } + if (!strcmp(nonick, "outputtype")) { + fprintf(stderr, "REGISTRY ERROR: Fortran Pointer Arrays cannot be used in OutputType data\n"); + exit(9); + } + } + } + } add_node_to_end( field_struct , &(type_struct->fields) ) ; } // not param @@ -549,12 +587,13 @@ int set_dim_len ( char * dimspec , node_t * dim_entry ) { dim_entry->deferred = 0 ; + dim_entry->is_pointer = 0; if (!strcmp( dimspec , "standard_domain" )) { dim_entry->len_defined_how = DOMAIN_STANDARD ; } - else if (!strncmp( dimspec, "constant=" , 9 ) || isNum(dimspec[0]) || dimspec[0] == ':' || dimspec[0] == '(' ) + else if (!strncmp(dimspec, "constant=", 9) || isNum(dimspec[0]) || dimspec[0] == ':' || dimspec[0] == '*' || dimspec[0] == '(') { char *p, *colon, *paren ; - p = (isNum(dimspec[0])||dimspec[0]==':'||dimspec[0]=='(')?dimspec:&(dimspec[9]) ; + p = (isNum(dimspec[0]) || dimspec[0] == ':' || dimspec[0] == '*' || dimspec[0] == '(') ? dimspec : &(dimspec[9]); /* check for colon */ if (( colon = index(p,':')) != NULL ) { @@ -572,6 +611,14 @@ set_dim_len ( char * dimspec , node_t * dim_entry ) } dim_entry->coord_end = atoi(colon+1) ; } + else if ((colon = index(p, '*')) != NULL) + { + + *colon = '\0'; + dim_entry->deferred = 1; + dim_entry->coord_end = atoi(colon + 1); + dim_entry->is_pointer = 1; + } else { dim_entry->coord_start = 1 ; diff --git a/modules/openfast-registry/src/type.c b/modules/openfast-registry/src/type.c index 310d7b793d..5c3f19ace2 100644 --- a/modules/openfast-registry/src/type.c +++ b/modules/openfast-registry/src/type.c @@ -137,7 +137,9 @@ assoc_or_allocated( node_t * r ) int is_pointer( node_t * r ) { - + if (r->ndims > 0 && r->dims[0]->is_pointer) { + return(1); + } if ( sw_ccode && r->ndims > 0 && r->dims[0]->deferred ){ if ( !strncmp( make_lower_temp(r-> name), "writeoutput", 11) ) { // this covers WriteOutput, WriteOutputHdr, and WriteOutputUnt return( 0 ); // we're going to use these in the glue code, so these will be a special case From ec8c089926cc0bb3ce3455d1608edacba3e540d8 Mon Sep 17 00:00:00 2001 From: Bonnie Jonkman Date: Wed, 28 Jul 2021 14:43:19 -0600 Subject: [PATCH 004/338] Registry: update C_LOC for multi-dim arrays --- modules/map/src/MAP_Types.f90 | 168 +++++++++--------- .../openfast-registry/src/gen_module_files.c | 31 +++- modules/openfoam/src/OpenFOAM_Types.f90 | 144 +++++++-------- .../supercontroller/src/SCDataEx_Types.f90 | 18 +- 4 files changed, 192 insertions(+), 169 deletions(-) diff --git a/modules/map/src/MAP_Types.f90 b/modules/map/src/MAP_Types.f90 index af274d629f..242efee81a 100644 --- a/modules/map/src/MAP_Types.f90 +++ b/modules/map/src/MAP_Types.f90 @@ -1456,7 +1456,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%H_Len = SIZE(DstOtherStateData%H) IF (DstOtherStateData%c_obj%H_Len > 0) & - DstOtherStateData%c_obj%H = C_LOC( DstOtherStateData%H(i1_l) ) + DstOtherStateData%c_obj%H = C_LOC( DstOtherStateData%H( i1_l ) ) END IF DstOtherStateData%H = SrcOtherStateData%H ENDIF @@ -1471,7 +1471,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%V_Len = SIZE(DstOtherStateData%V) IF (DstOtherStateData%c_obj%V_Len > 0) & - DstOtherStateData%c_obj%V = C_LOC( DstOtherStateData%V(i1_l) ) + DstOtherStateData%c_obj%V = C_LOC( DstOtherStateData%V( i1_l ) ) END IF DstOtherStateData%V = SrcOtherStateData%V ENDIF @@ -1486,7 +1486,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%Ha_Len = SIZE(DstOtherStateData%Ha) IF (DstOtherStateData%c_obj%Ha_Len > 0) & - DstOtherStateData%c_obj%Ha = C_LOC( DstOtherStateData%Ha(i1_l) ) + DstOtherStateData%c_obj%Ha = C_LOC( DstOtherStateData%Ha( i1_l ) ) END IF DstOtherStateData%Ha = SrcOtherStateData%Ha ENDIF @@ -1501,7 +1501,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%Va_Len = SIZE(DstOtherStateData%Va) IF (DstOtherStateData%c_obj%Va_Len > 0) & - DstOtherStateData%c_obj%Va = C_LOC( DstOtherStateData%Va(i1_l) ) + DstOtherStateData%c_obj%Va = C_LOC( DstOtherStateData%Va( i1_l ) ) END IF DstOtherStateData%Va = SrcOtherStateData%Va ENDIF @@ -1516,7 +1516,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%x_Len = SIZE(DstOtherStateData%x) IF (DstOtherStateData%c_obj%x_Len > 0) & - DstOtherStateData%c_obj%x = C_LOC( DstOtherStateData%x(i1_l) ) + DstOtherStateData%c_obj%x = C_LOC( DstOtherStateData%x( i1_l ) ) END IF DstOtherStateData%x = SrcOtherStateData%x ENDIF @@ -1531,7 +1531,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%y_Len = SIZE(DstOtherStateData%y) IF (DstOtherStateData%c_obj%y_Len > 0) & - DstOtherStateData%c_obj%y = C_LOC( DstOtherStateData%y(i1_l) ) + DstOtherStateData%c_obj%y = C_LOC( DstOtherStateData%y( i1_l ) ) END IF DstOtherStateData%y = SrcOtherStateData%y ENDIF @@ -1546,7 +1546,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%z_Len = SIZE(DstOtherStateData%z) IF (DstOtherStateData%c_obj%z_Len > 0) & - DstOtherStateData%c_obj%z = C_LOC( DstOtherStateData%z(i1_l) ) + DstOtherStateData%c_obj%z = C_LOC( DstOtherStateData%z( i1_l ) ) END IF DstOtherStateData%z = SrcOtherStateData%z ENDIF @@ -1561,7 +1561,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%xa_Len = SIZE(DstOtherStateData%xa) IF (DstOtherStateData%c_obj%xa_Len > 0) & - DstOtherStateData%c_obj%xa = C_LOC( DstOtherStateData%xa(i1_l) ) + DstOtherStateData%c_obj%xa = C_LOC( DstOtherStateData%xa( i1_l ) ) END IF DstOtherStateData%xa = SrcOtherStateData%xa ENDIF @@ -1576,7 +1576,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%ya_Len = SIZE(DstOtherStateData%ya) IF (DstOtherStateData%c_obj%ya_Len > 0) & - DstOtherStateData%c_obj%ya = C_LOC( DstOtherStateData%ya(i1_l) ) + DstOtherStateData%c_obj%ya = C_LOC( DstOtherStateData%ya( i1_l ) ) END IF DstOtherStateData%ya = SrcOtherStateData%ya ENDIF @@ -1591,7 +1591,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%za_Len = SIZE(DstOtherStateData%za) IF (DstOtherStateData%c_obj%za_Len > 0) & - DstOtherStateData%c_obj%za = C_LOC( DstOtherStateData%za(i1_l) ) + DstOtherStateData%c_obj%za = C_LOC( DstOtherStateData%za( i1_l ) ) END IF DstOtherStateData%za = SrcOtherStateData%za ENDIF @@ -1606,7 +1606,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%Fx_connect_Len = SIZE(DstOtherStateData%Fx_connect) IF (DstOtherStateData%c_obj%Fx_connect_Len > 0) & - DstOtherStateData%c_obj%Fx_connect = C_LOC( DstOtherStateData%Fx_connect(i1_l) ) + DstOtherStateData%c_obj%Fx_connect = C_LOC( DstOtherStateData%Fx_connect( i1_l ) ) END IF DstOtherStateData%Fx_connect = SrcOtherStateData%Fx_connect ENDIF @@ -1621,7 +1621,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%Fy_connect_Len = SIZE(DstOtherStateData%Fy_connect) IF (DstOtherStateData%c_obj%Fy_connect_Len > 0) & - DstOtherStateData%c_obj%Fy_connect = C_LOC( DstOtherStateData%Fy_connect(i1_l) ) + DstOtherStateData%c_obj%Fy_connect = C_LOC( DstOtherStateData%Fy_connect( i1_l ) ) END IF DstOtherStateData%Fy_connect = SrcOtherStateData%Fy_connect ENDIF @@ -1636,7 +1636,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%Fz_connect_Len = SIZE(DstOtherStateData%Fz_connect) IF (DstOtherStateData%c_obj%Fz_connect_Len > 0) & - DstOtherStateData%c_obj%Fz_connect = C_LOC( DstOtherStateData%Fz_connect(i1_l) ) + DstOtherStateData%c_obj%Fz_connect = C_LOC( DstOtherStateData%Fz_connect( i1_l ) ) END IF DstOtherStateData%Fz_connect = SrcOtherStateData%Fz_connect ENDIF @@ -1651,7 +1651,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%Fx_anchor_Len = SIZE(DstOtherStateData%Fx_anchor) IF (DstOtherStateData%c_obj%Fx_anchor_Len > 0) & - DstOtherStateData%c_obj%Fx_anchor = C_LOC( DstOtherStateData%Fx_anchor(i1_l) ) + DstOtherStateData%c_obj%Fx_anchor = C_LOC( DstOtherStateData%Fx_anchor( i1_l ) ) END IF DstOtherStateData%Fx_anchor = SrcOtherStateData%Fx_anchor ENDIF @@ -1666,7 +1666,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%Fy_anchor_Len = SIZE(DstOtherStateData%Fy_anchor) IF (DstOtherStateData%c_obj%Fy_anchor_Len > 0) & - DstOtherStateData%c_obj%Fy_anchor = C_LOC( DstOtherStateData%Fy_anchor(i1_l) ) + DstOtherStateData%c_obj%Fy_anchor = C_LOC( DstOtherStateData%Fy_anchor( i1_l ) ) END IF DstOtherStateData%Fy_anchor = SrcOtherStateData%Fy_anchor ENDIF @@ -1681,7 +1681,7 @@ SUBROUTINE MAP_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, E END IF DstOtherStateData%c_obj%Fz_anchor_Len = SIZE(DstOtherStateData%Fz_anchor) IF (DstOtherStateData%c_obj%Fz_anchor_Len > 0) & - DstOtherStateData%c_obj%Fz_anchor = C_LOC( DstOtherStateData%Fz_anchor(i1_l) ) + DstOtherStateData%c_obj%Fz_anchor = C_LOC( DstOtherStateData%Fz_anchor( i1_l ) ) END IF DstOtherStateData%Fz_anchor = SrcOtherStateData%Fz_anchor ENDIF @@ -2222,7 +2222,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%H_Len = SIZE(OutData%H) IF (OutData%c_obj%H_Len > 0) & - OutData%c_obj%H = C_LOC( OutData%H(i1_l) ) + OutData%c_obj%H = C_LOC( OutData%H( i1_l ) ) DO i1 = LBOUND(OutData%H,1), UBOUND(OutData%H,1) OutData%H(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2243,7 +2243,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%V_Len = SIZE(OutData%V) IF (OutData%c_obj%V_Len > 0) & - OutData%c_obj%V = C_LOC( OutData%V(i1_l) ) + OutData%c_obj%V = C_LOC( OutData%V( i1_l ) ) DO i1 = LBOUND(OutData%V,1), UBOUND(OutData%V,1) OutData%V(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2264,7 +2264,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%Ha_Len = SIZE(OutData%Ha) IF (OutData%c_obj%Ha_Len > 0) & - OutData%c_obj%Ha = C_LOC( OutData%Ha(i1_l) ) + OutData%c_obj%Ha = C_LOC( OutData%Ha( i1_l ) ) DO i1 = LBOUND(OutData%Ha,1), UBOUND(OutData%Ha,1) OutData%Ha(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2285,7 +2285,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%Va_Len = SIZE(OutData%Va) IF (OutData%c_obj%Va_Len > 0) & - OutData%c_obj%Va = C_LOC( OutData%Va(i1_l) ) + OutData%c_obj%Va = C_LOC( OutData%Va( i1_l ) ) DO i1 = LBOUND(OutData%Va,1), UBOUND(OutData%Va,1) OutData%Va(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2306,7 +2306,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%x_Len = SIZE(OutData%x) IF (OutData%c_obj%x_Len > 0) & - OutData%c_obj%x = C_LOC( OutData%x(i1_l) ) + OutData%c_obj%x = C_LOC( OutData%x( i1_l ) ) DO i1 = LBOUND(OutData%x,1), UBOUND(OutData%x,1) OutData%x(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2327,7 +2327,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%y_Len = SIZE(OutData%y) IF (OutData%c_obj%y_Len > 0) & - OutData%c_obj%y = C_LOC( OutData%y(i1_l) ) + OutData%c_obj%y = C_LOC( OutData%y( i1_l ) ) DO i1 = LBOUND(OutData%y,1), UBOUND(OutData%y,1) OutData%y(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2348,7 +2348,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%z_Len = SIZE(OutData%z) IF (OutData%c_obj%z_Len > 0) & - OutData%c_obj%z = C_LOC( OutData%z(i1_l) ) + OutData%c_obj%z = C_LOC( OutData%z( i1_l ) ) DO i1 = LBOUND(OutData%z,1), UBOUND(OutData%z,1) OutData%z(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2369,7 +2369,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%xa_Len = SIZE(OutData%xa) IF (OutData%c_obj%xa_Len > 0) & - OutData%c_obj%xa = C_LOC( OutData%xa(i1_l) ) + OutData%c_obj%xa = C_LOC( OutData%xa( i1_l ) ) DO i1 = LBOUND(OutData%xa,1), UBOUND(OutData%xa,1) OutData%xa(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2390,7 +2390,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%ya_Len = SIZE(OutData%ya) IF (OutData%c_obj%ya_Len > 0) & - OutData%c_obj%ya = C_LOC( OutData%ya(i1_l) ) + OutData%c_obj%ya = C_LOC( OutData%ya( i1_l ) ) DO i1 = LBOUND(OutData%ya,1), UBOUND(OutData%ya,1) OutData%ya(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2411,7 +2411,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%za_Len = SIZE(OutData%za) IF (OutData%c_obj%za_Len > 0) & - OutData%c_obj%za = C_LOC( OutData%za(i1_l) ) + OutData%c_obj%za = C_LOC( OutData%za( i1_l ) ) DO i1 = LBOUND(OutData%za,1), UBOUND(OutData%za,1) OutData%za(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2432,7 +2432,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%Fx_connect_Len = SIZE(OutData%Fx_connect) IF (OutData%c_obj%Fx_connect_Len > 0) & - OutData%c_obj%Fx_connect = C_LOC( OutData%Fx_connect(i1_l) ) + OutData%c_obj%Fx_connect = C_LOC( OutData%Fx_connect( i1_l ) ) DO i1 = LBOUND(OutData%Fx_connect,1), UBOUND(OutData%Fx_connect,1) OutData%Fx_connect(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2453,7 +2453,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%Fy_connect_Len = SIZE(OutData%Fy_connect) IF (OutData%c_obj%Fy_connect_Len > 0) & - OutData%c_obj%Fy_connect = C_LOC( OutData%Fy_connect(i1_l) ) + OutData%c_obj%Fy_connect = C_LOC( OutData%Fy_connect( i1_l ) ) DO i1 = LBOUND(OutData%Fy_connect,1), UBOUND(OutData%Fy_connect,1) OutData%Fy_connect(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2474,7 +2474,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%Fz_connect_Len = SIZE(OutData%Fz_connect) IF (OutData%c_obj%Fz_connect_Len > 0) & - OutData%c_obj%Fz_connect = C_LOC( OutData%Fz_connect(i1_l) ) + OutData%c_obj%Fz_connect = C_LOC( OutData%Fz_connect( i1_l ) ) DO i1 = LBOUND(OutData%Fz_connect,1), UBOUND(OutData%Fz_connect,1) OutData%Fz_connect(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2495,7 +2495,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%Fx_anchor_Len = SIZE(OutData%Fx_anchor) IF (OutData%c_obj%Fx_anchor_Len > 0) & - OutData%c_obj%Fx_anchor = C_LOC( OutData%Fx_anchor(i1_l) ) + OutData%c_obj%Fx_anchor = C_LOC( OutData%Fx_anchor( i1_l ) ) DO i1 = LBOUND(OutData%Fx_anchor,1), UBOUND(OutData%Fx_anchor,1) OutData%Fx_anchor(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2516,7 +2516,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%Fy_anchor_Len = SIZE(OutData%Fy_anchor) IF (OutData%c_obj%Fy_anchor_Len > 0) & - OutData%c_obj%Fy_anchor = C_LOC( OutData%Fy_anchor(i1_l) ) + OutData%c_obj%Fy_anchor = C_LOC( OutData%Fy_anchor( i1_l ) ) DO i1 = LBOUND(OutData%Fy_anchor,1), UBOUND(OutData%Fy_anchor,1) OutData%Fy_anchor(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2537,7 +2537,7 @@ SUBROUTINE MAP_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%Fz_anchor_Len = SIZE(OutData%Fz_anchor) IF (OutData%c_obj%Fz_anchor_Len > 0) & - OutData%c_obj%Fz_anchor = C_LOC( OutData%Fz_anchor(i1_l) ) + OutData%c_obj%Fz_anchor = C_LOC( OutData%Fz_anchor( i1_l ) ) DO i1 = LBOUND(OutData%Fz_anchor,1), UBOUND(OutData%Fz_anchor,1) OutData%Fz_anchor(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -2730,7 +2730,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%H_Len = SIZE(OtherStateData%H) IF (OtherStateData%c_obj%H_Len > 0) & - OtherStateData%c_obj%H = C_LOC( OtherStateData%H( LBOUND(OtherStateData%H,1) ) ) + OtherStateData%c_obj%H = C_LOC( OtherStateData%H( LBOUND(OtherStateData%H,1) ) ) END IF END IF @@ -2742,7 +2742,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%V_Len = SIZE(OtherStateData%V) IF (OtherStateData%c_obj%V_Len > 0) & - OtherStateData%c_obj%V = C_LOC( OtherStateData%V( LBOUND(OtherStateData%V,1) ) ) + OtherStateData%c_obj%V = C_LOC( OtherStateData%V( LBOUND(OtherStateData%V,1) ) ) END IF END IF @@ -2754,7 +2754,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%Ha_Len = SIZE(OtherStateData%Ha) IF (OtherStateData%c_obj%Ha_Len > 0) & - OtherStateData%c_obj%Ha = C_LOC( OtherStateData%Ha( LBOUND(OtherStateData%Ha,1) ) ) + OtherStateData%c_obj%Ha = C_LOC( OtherStateData%Ha( LBOUND(OtherStateData%Ha,1) ) ) END IF END IF @@ -2766,7 +2766,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%Va_Len = SIZE(OtherStateData%Va) IF (OtherStateData%c_obj%Va_Len > 0) & - OtherStateData%c_obj%Va = C_LOC( OtherStateData%Va( LBOUND(OtherStateData%Va,1) ) ) + OtherStateData%c_obj%Va = C_LOC( OtherStateData%Va( LBOUND(OtherStateData%Va,1) ) ) END IF END IF @@ -2778,7 +2778,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%x_Len = SIZE(OtherStateData%x) IF (OtherStateData%c_obj%x_Len > 0) & - OtherStateData%c_obj%x = C_LOC( OtherStateData%x( LBOUND(OtherStateData%x,1) ) ) + OtherStateData%c_obj%x = C_LOC( OtherStateData%x( LBOUND(OtherStateData%x,1) ) ) END IF END IF @@ -2790,7 +2790,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%y_Len = SIZE(OtherStateData%y) IF (OtherStateData%c_obj%y_Len > 0) & - OtherStateData%c_obj%y = C_LOC( OtherStateData%y( LBOUND(OtherStateData%y,1) ) ) + OtherStateData%c_obj%y = C_LOC( OtherStateData%y( LBOUND(OtherStateData%y,1) ) ) END IF END IF @@ -2802,7 +2802,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%z_Len = SIZE(OtherStateData%z) IF (OtherStateData%c_obj%z_Len > 0) & - OtherStateData%c_obj%z = C_LOC( OtherStateData%z( LBOUND(OtherStateData%z,1) ) ) + OtherStateData%c_obj%z = C_LOC( OtherStateData%z( LBOUND(OtherStateData%z,1) ) ) END IF END IF @@ -2814,7 +2814,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%xa_Len = SIZE(OtherStateData%xa) IF (OtherStateData%c_obj%xa_Len > 0) & - OtherStateData%c_obj%xa = C_LOC( OtherStateData%xa( LBOUND(OtherStateData%xa,1) ) ) + OtherStateData%c_obj%xa = C_LOC( OtherStateData%xa( LBOUND(OtherStateData%xa,1) ) ) END IF END IF @@ -2826,7 +2826,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%ya_Len = SIZE(OtherStateData%ya) IF (OtherStateData%c_obj%ya_Len > 0) & - OtherStateData%c_obj%ya = C_LOC( OtherStateData%ya( LBOUND(OtherStateData%ya,1) ) ) + OtherStateData%c_obj%ya = C_LOC( OtherStateData%ya( LBOUND(OtherStateData%ya,1) ) ) END IF END IF @@ -2838,7 +2838,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%za_Len = SIZE(OtherStateData%za) IF (OtherStateData%c_obj%za_Len > 0) & - OtherStateData%c_obj%za = C_LOC( OtherStateData%za( LBOUND(OtherStateData%za,1) ) ) + OtherStateData%c_obj%za = C_LOC( OtherStateData%za( LBOUND(OtherStateData%za,1) ) ) END IF END IF @@ -2850,7 +2850,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%Fx_connect_Len = SIZE(OtherStateData%Fx_connect) IF (OtherStateData%c_obj%Fx_connect_Len > 0) & - OtherStateData%c_obj%Fx_connect = C_LOC( OtherStateData%Fx_connect( LBOUND(OtherStateData%Fx_connect,1) ) ) + OtherStateData%c_obj%Fx_connect = C_LOC( OtherStateData%Fx_connect( LBOUND(OtherStateData%Fx_connect,1) ) ) END IF END IF @@ -2862,7 +2862,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%Fy_connect_Len = SIZE(OtherStateData%Fy_connect) IF (OtherStateData%c_obj%Fy_connect_Len > 0) & - OtherStateData%c_obj%Fy_connect = C_LOC( OtherStateData%Fy_connect( LBOUND(OtherStateData%Fy_connect,1) ) ) + OtherStateData%c_obj%Fy_connect = C_LOC( OtherStateData%Fy_connect( LBOUND(OtherStateData%Fy_connect,1) ) ) END IF END IF @@ -2874,7 +2874,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%Fz_connect_Len = SIZE(OtherStateData%Fz_connect) IF (OtherStateData%c_obj%Fz_connect_Len > 0) & - OtherStateData%c_obj%Fz_connect = C_LOC( OtherStateData%Fz_connect( LBOUND(OtherStateData%Fz_connect,1) ) ) + OtherStateData%c_obj%Fz_connect = C_LOC( OtherStateData%Fz_connect( LBOUND(OtherStateData%Fz_connect,1) ) ) END IF END IF @@ -2886,7 +2886,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%Fx_anchor_Len = SIZE(OtherStateData%Fx_anchor) IF (OtherStateData%c_obj%Fx_anchor_Len > 0) & - OtherStateData%c_obj%Fx_anchor = C_LOC( OtherStateData%Fx_anchor( LBOUND(OtherStateData%Fx_anchor,1) ) ) + OtherStateData%c_obj%Fx_anchor = C_LOC( OtherStateData%Fx_anchor( LBOUND(OtherStateData%Fx_anchor,1) ) ) END IF END IF @@ -2898,7 +2898,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%Fy_anchor_Len = SIZE(OtherStateData%Fy_anchor) IF (OtherStateData%c_obj%Fy_anchor_Len > 0) & - OtherStateData%c_obj%Fy_anchor = C_LOC( OtherStateData%Fy_anchor( LBOUND(OtherStateData%Fy_anchor,1) ) ) + OtherStateData%c_obj%Fy_anchor = C_LOC( OtherStateData%Fy_anchor( LBOUND(OtherStateData%Fy_anchor,1) ) ) END IF END IF @@ -2910,7 +2910,7 @@ SUBROUTINE MAP_F2C_CopyOtherState( OtherStateData, ErrStat, ErrMsg, SkipPointers ELSE OtherStateData%c_obj%Fz_anchor_Len = SIZE(OtherStateData%Fz_anchor) IF (OtherStateData%c_obj%Fz_anchor_Len > 0) & - OtherStateData%c_obj%Fz_anchor = C_LOC( OtherStateData%Fz_anchor( LBOUND(OtherStateData%Fz_anchor,1) ) ) + OtherStateData%c_obj%Fz_anchor = C_LOC( OtherStateData%Fz_anchor( LBOUND(OtherStateData%Fz_anchor,1) ) ) END IF END IF END SUBROUTINE MAP_F2C_CopyOtherState @@ -2941,7 +2941,7 @@ SUBROUTINE MAP_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode END IF DstConstrStateData%c_obj%H_Len = SIZE(DstConstrStateData%H) IF (DstConstrStateData%c_obj%H_Len > 0) & - DstConstrStateData%c_obj%H = C_LOC( DstConstrStateData%H(i1_l) ) + DstConstrStateData%c_obj%H = C_LOC( DstConstrStateData%H( i1_l ) ) END IF DstConstrStateData%H = SrcConstrStateData%H ENDIF @@ -2956,7 +2956,7 @@ SUBROUTINE MAP_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode END IF DstConstrStateData%c_obj%V_Len = SIZE(DstConstrStateData%V) IF (DstConstrStateData%c_obj%V_Len > 0) & - DstConstrStateData%c_obj%V = C_LOC( DstConstrStateData%V(i1_l) ) + DstConstrStateData%c_obj%V = C_LOC( DstConstrStateData%V( i1_l ) ) END IF DstConstrStateData%V = SrcConstrStateData%V ENDIF @@ -2971,7 +2971,7 @@ SUBROUTINE MAP_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode END IF DstConstrStateData%c_obj%x_Len = SIZE(DstConstrStateData%x) IF (DstConstrStateData%c_obj%x_Len > 0) & - DstConstrStateData%c_obj%x = C_LOC( DstConstrStateData%x(i1_l) ) + DstConstrStateData%c_obj%x = C_LOC( DstConstrStateData%x( i1_l ) ) END IF DstConstrStateData%x = SrcConstrStateData%x ENDIF @@ -2986,7 +2986,7 @@ SUBROUTINE MAP_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode END IF DstConstrStateData%c_obj%y_Len = SIZE(DstConstrStateData%y) IF (DstConstrStateData%c_obj%y_Len > 0) & - DstConstrStateData%c_obj%y = C_LOC( DstConstrStateData%y(i1_l) ) + DstConstrStateData%c_obj%y = C_LOC( DstConstrStateData%y( i1_l ) ) END IF DstConstrStateData%y = SrcConstrStateData%y ENDIF @@ -3001,7 +3001,7 @@ SUBROUTINE MAP_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode END IF DstConstrStateData%c_obj%z_Len = SIZE(DstConstrStateData%z) IF (DstConstrStateData%c_obj%z_Len > 0) & - DstConstrStateData%c_obj%z = C_LOC( DstConstrStateData%z(i1_l) ) + DstConstrStateData%c_obj%z = C_LOC( DstConstrStateData%z( i1_l ) ) END IF DstConstrStateData%z = SrcConstrStateData%z ENDIF @@ -3256,7 +3256,7 @@ SUBROUTINE MAP_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, END IF OutData%c_obj%H_Len = SIZE(OutData%H) IF (OutData%c_obj%H_Len > 0) & - OutData%c_obj%H = C_LOC( OutData%H(i1_l) ) + OutData%c_obj%H = C_LOC( OutData%H( i1_l ) ) DO i1 = LBOUND(OutData%H,1), UBOUND(OutData%H,1) OutData%H(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -3277,7 +3277,7 @@ SUBROUTINE MAP_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, END IF OutData%c_obj%V_Len = SIZE(OutData%V) IF (OutData%c_obj%V_Len > 0) & - OutData%c_obj%V = C_LOC( OutData%V(i1_l) ) + OutData%c_obj%V = C_LOC( OutData%V( i1_l ) ) DO i1 = LBOUND(OutData%V,1), UBOUND(OutData%V,1) OutData%V(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -3298,7 +3298,7 @@ SUBROUTINE MAP_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, END IF OutData%c_obj%x_Len = SIZE(OutData%x) IF (OutData%c_obj%x_Len > 0) & - OutData%c_obj%x = C_LOC( OutData%x(i1_l) ) + OutData%c_obj%x = C_LOC( OutData%x( i1_l ) ) DO i1 = LBOUND(OutData%x,1), UBOUND(OutData%x,1) OutData%x(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -3319,7 +3319,7 @@ SUBROUTINE MAP_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, END IF OutData%c_obj%y_Len = SIZE(OutData%y) IF (OutData%c_obj%y_Len > 0) & - OutData%c_obj%y = C_LOC( OutData%y(i1_l) ) + OutData%c_obj%y = C_LOC( OutData%y( i1_l ) ) DO i1 = LBOUND(OutData%y,1), UBOUND(OutData%y,1) OutData%y(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -3340,7 +3340,7 @@ SUBROUTINE MAP_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, END IF OutData%c_obj%z_Len = SIZE(OutData%z) IF (OutData%c_obj%z_Len > 0) & - OutData%c_obj%z = C_LOC( OutData%z(i1_l) ) + OutData%c_obj%z = C_LOC( OutData%z( i1_l ) ) DO i1 = LBOUND(OutData%z,1), UBOUND(OutData%z,1) OutData%z(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -3434,7 +3434,7 @@ SUBROUTINE MAP_F2C_CopyConstrState( ConstrStateData, ErrStat, ErrMsg, SkipPointe ELSE ConstrStateData%c_obj%H_Len = SIZE(ConstrStateData%H) IF (ConstrStateData%c_obj%H_Len > 0) & - ConstrStateData%c_obj%H = C_LOC( ConstrStateData%H( LBOUND(ConstrStateData%H,1) ) ) + ConstrStateData%c_obj%H = C_LOC( ConstrStateData%H( LBOUND(ConstrStateData%H,1) ) ) END IF END IF @@ -3446,7 +3446,7 @@ SUBROUTINE MAP_F2C_CopyConstrState( ConstrStateData, ErrStat, ErrMsg, SkipPointe ELSE ConstrStateData%c_obj%V_Len = SIZE(ConstrStateData%V) IF (ConstrStateData%c_obj%V_Len > 0) & - ConstrStateData%c_obj%V = C_LOC( ConstrStateData%V( LBOUND(ConstrStateData%V,1) ) ) + ConstrStateData%c_obj%V = C_LOC( ConstrStateData%V( LBOUND(ConstrStateData%V,1) ) ) END IF END IF @@ -3458,7 +3458,7 @@ SUBROUTINE MAP_F2C_CopyConstrState( ConstrStateData, ErrStat, ErrMsg, SkipPointe ELSE ConstrStateData%c_obj%x_Len = SIZE(ConstrStateData%x) IF (ConstrStateData%c_obj%x_Len > 0) & - ConstrStateData%c_obj%x = C_LOC( ConstrStateData%x( LBOUND(ConstrStateData%x,1) ) ) + ConstrStateData%c_obj%x = C_LOC( ConstrStateData%x( LBOUND(ConstrStateData%x,1) ) ) END IF END IF @@ -3470,7 +3470,7 @@ SUBROUTINE MAP_F2C_CopyConstrState( ConstrStateData, ErrStat, ErrMsg, SkipPointe ELSE ConstrStateData%c_obj%y_Len = SIZE(ConstrStateData%y) IF (ConstrStateData%c_obj%y_Len > 0) & - ConstrStateData%c_obj%y = C_LOC( ConstrStateData%y( LBOUND(ConstrStateData%y,1) ) ) + ConstrStateData%c_obj%y = C_LOC( ConstrStateData%y( LBOUND(ConstrStateData%y,1) ) ) END IF END IF @@ -3482,7 +3482,7 @@ SUBROUTINE MAP_F2C_CopyConstrState( ConstrStateData, ErrStat, ErrMsg, SkipPointe ELSE ConstrStateData%c_obj%z_Len = SIZE(ConstrStateData%z) IF (ConstrStateData%c_obj%z_Len > 0) & - ConstrStateData%c_obj%z = C_LOC( ConstrStateData%z( LBOUND(ConstrStateData%z,1) ) ) + ConstrStateData%c_obj%z = C_LOC( ConstrStateData%z( LBOUND(ConstrStateData%z,1) ) ) END IF END IF END SUBROUTINE MAP_F2C_CopyConstrState @@ -3842,7 +3842,7 @@ SUBROUTINE MAP_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%x_Len = SIZE(DstInputData%x) IF (DstInputData%c_obj%x_Len > 0) & - DstInputData%c_obj%x = C_LOC( DstInputData%x(i1_l) ) + DstInputData%c_obj%x = C_LOC( DstInputData%x( i1_l ) ) END IF DstInputData%x = SrcInputData%x ENDIF @@ -3857,7 +3857,7 @@ SUBROUTINE MAP_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%y_Len = SIZE(DstInputData%y) IF (DstInputData%c_obj%y_Len > 0) & - DstInputData%c_obj%y = C_LOC( DstInputData%y(i1_l) ) + DstInputData%c_obj%y = C_LOC( DstInputData%y( i1_l ) ) END IF DstInputData%y = SrcInputData%y ENDIF @@ -3872,7 +3872,7 @@ SUBROUTINE MAP_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%z_Len = SIZE(DstInputData%z) IF (DstInputData%c_obj%z_Len > 0) & - DstInputData%c_obj%z = C_LOC( DstInputData%z(i1_l) ) + DstInputData%c_obj%z = C_LOC( DstInputData%z( i1_l ) ) END IF DstInputData%z = SrcInputData%z ENDIF @@ -4125,7 +4125,7 @@ SUBROUTINE MAP_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg END IF OutData%c_obj%x_Len = SIZE(OutData%x) IF (OutData%c_obj%x_Len > 0) & - OutData%c_obj%x = C_LOC( OutData%x(i1_l) ) + OutData%c_obj%x = C_LOC( OutData%x( i1_l ) ) DO i1 = LBOUND(OutData%x,1), UBOUND(OutData%x,1) OutData%x(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -4146,7 +4146,7 @@ SUBROUTINE MAP_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg END IF OutData%c_obj%y_Len = SIZE(OutData%y) IF (OutData%c_obj%y_Len > 0) & - OutData%c_obj%y = C_LOC( OutData%y(i1_l) ) + OutData%c_obj%y = C_LOC( OutData%y( i1_l ) ) DO i1 = LBOUND(OutData%y,1), UBOUND(OutData%y,1) OutData%y(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -4167,7 +4167,7 @@ SUBROUTINE MAP_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg END IF OutData%c_obj%z_Len = SIZE(OutData%z) IF (OutData%c_obj%z_Len > 0) & - OutData%c_obj%z = C_LOC( OutData%z(i1_l) ) + OutData%c_obj%z = C_LOC( OutData%z( i1_l ) ) DO i1 = LBOUND(OutData%z,1), UBOUND(OutData%z,1) OutData%z(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -4283,7 +4283,7 @@ SUBROUTINE MAP_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%x_Len = SIZE(InputData%x) IF (InputData%c_obj%x_Len > 0) & - InputData%c_obj%x = C_LOC( InputData%x( LBOUND(InputData%x,1) ) ) + InputData%c_obj%x = C_LOC( InputData%x( LBOUND(InputData%x,1) ) ) END IF END IF @@ -4295,7 +4295,7 @@ SUBROUTINE MAP_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%y_Len = SIZE(InputData%y) IF (InputData%c_obj%y_Len > 0) & - InputData%c_obj%y = C_LOC( InputData%y( LBOUND(InputData%y,1) ) ) + InputData%c_obj%y = C_LOC( InputData%y( LBOUND(InputData%y,1) ) ) END IF END IF @@ -4307,7 +4307,7 @@ SUBROUTINE MAP_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%z_Len = SIZE(InputData%z) IF (InputData%c_obj%z_Len > 0) & - InputData%c_obj%z = C_LOC( InputData%z( LBOUND(InputData%z,1) ) ) + InputData%c_obj%z = C_LOC( InputData%z( LBOUND(InputData%z,1) ) ) END IF END IF END SUBROUTINE MAP_F2C_CopyInput @@ -4338,7 +4338,7 @@ SUBROUTINE MAP_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrM END IF DstOutputData%c_obj%Fx_Len = SIZE(DstOutputData%Fx) IF (DstOutputData%c_obj%Fx_Len > 0) & - DstOutputData%c_obj%Fx = C_LOC( DstOutputData%Fx(i1_l) ) + DstOutputData%c_obj%Fx = C_LOC( DstOutputData%Fx( i1_l ) ) END IF DstOutputData%Fx = SrcOutputData%Fx ENDIF @@ -4353,7 +4353,7 @@ SUBROUTINE MAP_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrM END IF DstOutputData%c_obj%Fy_Len = SIZE(DstOutputData%Fy) IF (DstOutputData%c_obj%Fy_Len > 0) & - DstOutputData%c_obj%Fy = C_LOC( DstOutputData%Fy(i1_l) ) + DstOutputData%c_obj%Fy = C_LOC( DstOutputData%Fy( i1_l ) ) END IF DstOutputData%Fy = SrcOutputData%Fy ENDIF @@ -4368,7 +4368,7 @@ SUBROUTINE MAP_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrM END IF DstOutputData%c_obj%Fz_Len = SIZE(DstOutputData%Fz) IF (DstOutputData%c_obj%Fz_Len > 0) & - DstOutputData%c_obj%Fz = C_LOC( DstOutputData%Fz(i1_l) ) + DstOutputData%c_obj%Fz = C_LOC( DstOutputData%Fz( i1_l ) ) END IF DstOutputData%Fz = SrcOutputData%Fz ENDIF @@ -4395,7 +4395,7 @@ SUBROUTINE MAP_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrM END IF DstOutputData%c_obj%wrtOutput_Len = SIZE(DstOutputData%wrtOutput) IF (DstOutputData%c_obj%wrtOutput_Len > 0) & - DstOutputData%c_obj%wrtOutput = C_LOC( DstOutputData%wrtOutput(i1_l) ) + DstOutputData%c_obj%wrtOutput = C_LOC( DstOutputData%wrtOutput( i1_l ) ) END IF DstOutputData%wrtOutput = SrcOutputData%wrtOutput ENDIF @@ -4697,7 +4697,7 @@ SUBROUTINE MAP_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%Fx_Len = SIZE(OutData%Fx) IF (OutData%c_obj%Fx_Len > 0) & - OutData%c_obj%Fx = C_LOC( OutData%Fx(i1_l) ) + OutData%c_obj%Fx = C_LOC( OutData%Fx( i1_l ) ) DO i1 = LBOUND(OutData%Fx,1), UBOUND(OutData%Fx,1) OutData%Fx(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -4718,7 +4718,7 @@ SUBROUTINE MAP_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%Fy_Len = SIZE(OutData%Fy) IF (OutData%c_obj%Fy_Len > 0) & - OutData%c_obj%Fy = C_LOC( OutData%Fy(i1_l) ) + OutData%c_obj%Fy = C_LOC( OutData%Fy( i1_l ) ) DO i1 = LBOUND(OutData%Fy,1), UBOUND(OutData%Fy,1) OutData%Fy(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -4739,7 +4739,7 @@ SUBROUTINE MAP_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%Fz_Len = SIZE(OutData%Fz) IF (OutData%c_obj%Fz_Len > 0) & - OutData%c_obj%Fz = C_LOC( OutData%Fz(i1_l) ) + OutData%c_obj%Fz = C_LOC( OutData%Fz( i1_l ) ) DO i1 = LBOUND(OutData%Fz,1), UBOUND(OutData%Fz,1) OutData%Fz(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -4778,7 +4778,7 @@ SUBROUTINE MAP_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%wrtOutput_Len = SIZE(OutData%wrtOutput) IF (OutData%c_obj%wrtOutput_Len > 0) & - OutData%c_obj%wrtOutput = C_LOC( OutData%wrtOutput(i1_l) ) + OutData%c_obj%wrtOutput = C_LOC( OutData%wrtOutput( i1_l ) ) DO i1 = LBOUND(OutData%wrtOutput,1), UBOUND(OutData%wrtOutput,1) OutData%wrtOutput(i1) = REAL(DbKiBuf(Db_Xferred), C_DOUBLE) Db_Xferred = Db_Xferred + 1 @@ -4903,7 +4903,7 @@ SUBROUTINE MAP_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%Fx_Len = SIZE(OutputData%Fx) IF (OutputData%c_obj%Fx_Len > 0) & - OutputData%c_obj%Fx = C_LOC( OutputData%Fx( LBOUND(OutputData%Fx,1) ) ) + OutputData%c_obj%Fx = C_LOC( OutputData%Fx( LBOUND(OutputData%Fx,1) ) ) END IF END IF @@ -4915,7 +4915,7 @@ SUBROUTINE MAP_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%Fy_Len = SIZE(OutputData%Fy) IF (OutputData%c_obj%Fy_Len > 0) & - OutputData%c_obj%Fy = C_LOC( OutputData%Fy( LBOUND(OutputData%Fy,1) ) ) + OutputData%c_obj%Fy = C_LOC( OutputData%Fy( LBOUND(OutputData%Fy,1) ) ) END IF END IF @@ -4927,7 +4927,7 @@ SUBROUTINE MAP_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%Fz_Len = SIZE(OutputData%Fz) IF (OutputData%c_obj%Fz_Len > 0) & - OutputData%c_obj%Fz = C_LOC( OutputData%Fz( LBOUND(OutputData%Fz,1) ) ) + OutputData%c_obj%Fz = C_LOC( OutputData%Fz( LBOUND(OutputData%Fz,1) ) ) END IF END IF @@ -4939,7 +4939,7 @@ SUBROUTINE MAP_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%wrtOutput_Len = SIZE(OutputData%wrtOutput) IF (OutputData%c_obj%wrtOutput_Len > 0) & - OutputData%c_obj%wrtOutput = C_LOC( OutputData%wrtOutput( LBOUND(OutputData%wrtOutput,1) ) ) + OutputData%c_obj%wrtOutput = C_LOC( OutputData%wrtOutput( LBOUND(OutputData%wrtOutput,1) ) ) END IF END IF END SUBROUTINE MAP_F2C_CopyOutput diff --git a/modules/openfast-registry/src/gen_module_files.c b/modules/openfast-registry/src/gen_module_files.c index 4dff5d0bf1..331b836de8 100644 --- a/modules/openfast-registry/src/gen_module_files.c +++ b/modules/openfast-registry/src/gen_module_files.c @@ -146,7 +146,14 @@ gen_copy_f2c(FILE *fp, // *.f90 file we are writting to fprintf(fp, " ELSE\n"); fprintf(fp, " %sData%%c_obj%%%s_Len = SIZE(%sData%%%s)\n", nonick, r->name, nonick, r->name); fprintf(fp, " IF (%sData%%c_obj%%%s_Len > 0) &\n", nonick, r->name); - fprintf(fp, " %sData%%c_obj%%%s = C_LOC( %sData%%%s( LBOUND(%sData%%%s,1) ) ) \n", nonick, r->name, nonick, r->name, nonick, r->name ); + + fprintf(fp, " %sData%%c_obj%%%s = C_LOC( %sData%%%s(", nonick, r->name, nonick, r->name); + for (int d = 1; d <= r->ndims; d++) { + fprintf(fp, " LBOUND(%sData%%%s,%d)", nonick, r->name, d); + if (d < r->ndims) { fprintf(fp, ","); } + } + fprintf(fp, " ) )\n"); + fprintf(fp, " END IF\n"); fprintf(fp, " END IF\n"); } @@ -241,7 +248,14 @@ gen_copy( FILE * fp, const node_t * ModName, char * inout, char * inoutlong, con if ( sw_ccode && is_pointer(r) ) { // bjj: this needs to be updated if we've got multiple dimension arrays fprintf(fp," Dst%sData%%c_obj%%%s_Len = SIZE(Dst%sData%%%s)\n",nonick,r->name,nonick,r->name) ; fprintf(fp," IF (Dst%sData%%c_obj%%%s_Len > 0) &\n",nonick,r->name) ; - fprintf(fp," Dst%sData%%c_obj%%%s = C_LOC( Dst%sData%%%s(i1_l) ) \n",nonick,r->name, nonick,r->name ) ; + + fprintf(fp, " Dst%sData%%c_obj%%%s = C_LOC( Dst%sData%%%s(", nonick, r->name, nonick, r->name); + for (d = 1; d <= r->ndims; d++) { + fprintf(fp, " i%d_l", d); + if (d < r->ndims) { fprintf(fp, ","); } + } + fprintf(fp, " ) )\n"); + } fprintf(fp," END IF\n") ; // end dest allocated/associated @@ -734,7 +748,14 @@ gen_unpack( FILE * fp, const node_t * ModName, char * inout, char * inoutlong ) if (sw_ccode && is_pointer(r)) { // bjj: this needs to be updated if we've got multiple dimension arrays fprintf(fp, " OutData%%c_obj%%%s_Len = SIZE(OutData%%%s)\n", r->name, r->name); fprintf(fp, " IF (OutData%%c_obj%%%s_Len > 0) &\n", r->name); - fprintf(fp, " OutData%%c_obj%%%s = C_LOC( OutData%%%s(i1_l) ) \n", r->name, r->name); + + fprintf(fp, " OutData%%c_obj%%%s = C_LOC( OutData%%%s(", r->name,r->name); + for (d = 1; d <= r->ndims; d++) { + fprintf(fp, " i%d_l", d); + if (d < r->ndims) { fprintf(fp, ","); } + } + fprintf(fp, " ) )\n"); + } strcpy(mainIndent, " "); } @@ -2256,9 +2277,11 @@ gen_module( FILE * fp , node_t * ModName, char * prog_ver ) gen_ExtrapInterp(fp, ModName, "UA_BL_Type", "UA_BL_Type", "ReKi"); } else if (!sw_noextrap) { if (strcmp(make_lower_temp(ModName->name), "dbemt") == 0) { // make interpolation routines for element-level DBEMT module - gen_ExtrapInterp(fp, ModName, "ElementInputType", "ElementInputType", "DbKi"); } +// else if (strcmp(make_lower_temp(ModName->name), "bemt") == 0) { +// gen_ExtrapInterp(fp, ModName, "SkewWake_InputType", "SkewWake_InputType", "DbKi"); +// } gen_ExtrapInterp(fp, ModName, "Input", "InputType", "DbKi"); gen_ExtrapInterp(fp, ModName, "Output", "OutputType", "DbKi"); diff --git a/modules/openfoam/src/OpenFOAM_Types.f90 b/modules/openfoam/src/OpenFOAM_Types.f90 index cea50b0c4a..588fc431aa 100644 --- a/modules/openfoam/src/OpenFOAM_Types.f90 +++ b/modules/openfoam/src/OpenFOAM_Types.f90 @@ -233,7 +233,7 @@ SUBROUTINE OpFM_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Err END IF DstInitInputData%c_obj%StructBldRNodes_Len = SIZE(DstInitInputData%StructBldRNodes) IF (DstInitInputData%c_obj%StructBldRNodes_Len > 0) & - DstInitInputData%c_obj%StructBldRNodes = C_LOC( DstInitInputData%StructBldRNodes(i1_l) ) + DstInitInputData%c_obj%StructBldRNodes = C_LOC( DstInitInputData%StructBldRNodes( i1_l ) ) END IF DstInitInputData%StructBldRNodes = SrcInitInputData%StructBldRNodes ENDIF @@ -248,7 +248,7 @@ SUBROUTINE OpFM_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Err END IF DstInitInputData%c_obj%StructTwrHNodes_Len = SIZE(DstInitInputData%StructTwrHNodes) IF (DstInitInputData%c_obj%StructTwrHNodes_Len > 0) & - DstInitInputData%c_obj%StructTwrHNodes = C_LOC( DstInitInputData%StructTwrHNodes(i1_l) ) + DstInitInputData%c_obj%StructTwrHNodes = C_LOC( DstInitInputData%StructTwrHNodes( i1_l ) ) END IF DstInitInputData%StructTwrHNodes = SrcInitInputData%StructTwrHNodes ENDIF @@ -452,7 +452,7 @@ SUBROUTINE OpFM_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%StructBldRNodes_Len = SIZE(OutData%StructBldRNodes) IF (OutData%c_obj%StructBldRNodes_Len > 0) & - OutData%c_obj%StructBldRNodes = C_LOC( OutData%StructBldRNodes(i1_l) ) + OutData%c_obj%StructBldRNodes = C_LOC( OutData%StructBldRNodes( i1_l ) ) DO i1 = LBOUND(OutData%StructBldRNodes,1), UBOUND(OutData%StructBldRNodes,1) OutData%StructBldRNodes(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -473,7 +473,7 @@ SUBROUTINE OpFM_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E END IF OutData%c_obj%StructTwrHNodes_Len = SIZE(OutData%StructTwrHNodes) IF (OutData%c_obj%StructTwrHNodes_Len > 0) & - OutData%c_obj%StructTwrHNodes = C_LOC( OutData%StructTwrHNodes(i1_l) ) + OutData%c_obj%StructTwrHNodes = C_LOC( OutData%StructTwrHNodes( i1_l ) ) DO i1 = LBOUND(OutData%StructTwrHNodes,1), UBOUND(OutData%StructTwrHNodes,1) OutData%StructTwrHNodes(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -556,7 +556,7 @@ SUBROUTINE OpFM_F2C_CopyInitInput( InitInputData, ErrStat, ErrMsg, SkipPointers ELSE InitInputData%c_obj%StructBldRNodes_Len = SIZE(InitInputData%StructBldRNodes) IF (InitInputData%c_obj%StructBldRNodes_Len > 0) & - InitInputData%c_obj%StructBldRNodes = C_LOC( InitInputData%StructBldRNodes( LBOUND(InitInputData%StructBldRNodes,1) ) ) + InitInputData%c_obj%StructBldRNodes = C_LOC( InitInputData%StructBldRNodes( LBOUND(InitInputData%StructBldRNodes,1) ) ) END IF END IF @@ -568,7 +568,7 @@ SUBROUTINE OpFM_F2C_CopyInitInput( InitInputData, ErrStat, ErrMsg, SkipPointers ELSE InitInputData%c_obj%StructTwrHNodes_Len = SIZE(InitInputData%StructTwrHNodes) IF (InitInputData%c_obj%StructTwrHNodes_Len > 0) & - InitInputData%c_obj%StructTwrHNodes = C_LOC( InitInputData%StructTwrHNodes( LBOUND(InitInputData%StructTwrHNodes,1) ) ) + InitInputData%c_obj%StructTwrHNodes = C_LOC( InitInputData%StructTwrHNodes( LBOUND(InitInputData%StructTwrHNodes,1) ) ) END IF END IF InitInputData%C_obj%BladeLength = InitInputData%BladeLength @@ -2271,7 +2271,7 @@ SUBROUTINE OpFM_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg END IF DstParamData%c_obj%forceBldRnodes_Len = SIZE(DstParamData%forceBldRnodes) IF (DstParamData%c_obj%forceBldRnodes_Len > 0) & - DstParamData%c_obj%forceBldRnodes = C_LOC( DstParamData%forceBldRnodes(i1_l) ) + DstParamData%c_obj%forceBldRnodes = C_LOC( DstParamData%forceBldRnodes( i1_l ) ) END IF DstParamData%forceBldRnodes = SrcParamData%forceBldRnodes ENDIF @@ -2286,7 +2286,7 @@ SUBROUTINE OpFM_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg END IF DstParamData%c_obj%forceTwrHnodes_Len = SIZE(DstParamData%forceTwrHnodes) IF (DstParamData%c_obj%forceTwrHnodes_Len > 0) & - DstParamData%c_obj%forceTwrHnodes = C_LOC( DstParamData%forceTwrHnodes(i1_l) ) + DstParamData%c_obj%forceTwrHnodes = C_LOC( DstParamData%forceTwrHnodes( i1_l ) ) END IF DstParamData%forceTwrHnodes = SrcParamData%forceTwrHnodes ENDIF @@ -2520,7 +2520,7 @@ SUBROUTINE OpFM_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%forceBldRnodes_Len = SIZE(OutData%forceBldRnodes) IF (OutData%c_obj%forceBldRnodes_Len > 0) & - OutData%c_obj%forceBldRnodes = C_LOC( OutData%forceBldRnodes(i1_l) ) + OutData%c_obj%forceBldRnodes = C_LOC( OutData%forceBldRnodes( i1_l ) ) DO i1 = LBOUND(OutData%forceBldRnodes,1), UBOUND(OutData%forceBldRnodes,1) OutData%forceBldRnodes(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -2541,7 +2541,7 @@ SUBROUTINE OpFM_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%forceTwrHnodes_Len = SIZE(OutData%forceTwrHnodes) IF (OutData%c_obj%forceTwrHnodes_Len > 0) & - OutData%c_obj%forceTwrHnodes = C_LOC( OutData%forceTwrHnodes(i1_l) ) + OutData%c_obj%forceTwrHnodes = C_LOC( OutData%forceTwrHnodes( i1_l ) ) DO i1 = LBOUND(OutData%forceTwrHnodes,1), UBOUND(OutData%forceTwrHnodes,1) OutData%forceTwrHnodes(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -2634,7 +2634,7 @@ SUBROUTINE OpFM_F2C_CopyParam( ParamData, ErrStat, ErrMsg, SkipPointers ) ELSE ParamData%c_obj%forceBldRnodes_Len = SIZE(ParamData%forceBldRnodes) IF (ParamData%c_obj%forceBldRnodes_Len > 0) & - ParamData%c_obj%forceBldRnodes = C_LOC( ParamData%forceBldRnodes( LBOUND(ParamData%forceBldRnodes,1) ) ) + ParamData%c_obj%forceBldRnodes = C_LOC( ParamData%forceBldRnodes( LBOUND(ParamData%forceBldRnodes,1) ) ) END IF END IF @@ -2646,7 +2646,7 @@ SUBROUTINE OpFM_F2C_CopyParam( ParamData, ErrStat, ErrMsg, SkipPointers ) ELSE ParamData%c_obj%forceTwrHnodes_Len = SIZE(ParamData%forceTwrHnodes) IF (ParamData%c_obj%forceTwrHnodes_Len > 0) & - ParamData%c_obj%forceTwrHnodes = C_LOC( ParamData%forceTwrHnodes( LBOUND(ParamData%forceTwrHnodes,1) ) ) + ParamData%c_obj%forceTwrHnodes = C_LOC( ParamData%forceTwrHnodes( LBOUND(ParamData%forceTwrHnodes,1) ) ) END IF END IF ParamData%C_obj%BladeLength = ParamData%BladeLength @@ -2680,7 +2680,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%pxVel_Len = SIZE(DstInputData%pxVel) IF (DstInputData%c_obj%pxVel_Len > 0) & - DstInputData%c_obj%pxVel = C_LOC( DstInputData%pxVel(i1_l) ) + DstInputData%c_obj%pxVel = C_LOC( DstInputData%pxVel( i1_l ) ) END IF DstInputData%pxVel = SrcInputData%pxVel ENDIF @@ -2695,7 +2695,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%pyVel_Len = SIZE(DstInputData%pyVel) IF (DstInputData%c_obj%pyVel_Len > 0) & - DstInputData%c_obj%pyVel = C_LOC( DstInputData%pyVel(i1_l) ) + DstInputData%c_obj%pyVel = C_LOC( DstInputData%pyVel( i1_l ) ) END IF DstInputData%pyVel = SrcInputData%pyVel ENDIF @@ -2710,7 +2710,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%pzVel_Len = SIZE(DstInputData%pzVel) IF (DstInputData%c_obj%pzVel_Len > 0) & - DstInputData%c_obj%pzVel = C_LOC( DstInputData%pzVel(i1_l) ) + DstInputData%c_obj%pzVel = C_LOC( DstInputData%pzVel( i1_l ) ) END IF DstInputData%pzVel = SrcInputData%pzVel ENDIF @@ -2725,7 +2725,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%pxForce_Len = SIZE(DstInputData%pxForce) IF (DstInputData%c_obj%pxForce_Len > 0) & - DstInputData%c_obj%pxForce = C_LOC( DstInputData%pxForce(i1_l) ) + DstInputData%c_obj%pxForce = C_LOC( DstInputData%pxForce( i1_l ) ) END IF DstInputData%pxForce = SrcInputData%pxForce ENDIF @@ -2740,7 +2740,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%pyForce_Len = SIZE(DstInputData%pyForce) IF (DstInputData%c_obj%pyForce_Len > 0) & - DstInputData%c_obj%pyForce = C_LOC( DstInputData%pyForce(i1_l) ) + DstInputData%c_obj%pyForce = C_LOC( DstInputData%pyForce( i1_l ) ) END IF DstInputData%pyForce = SrcInputData%pyForce ENDIF @@ -2755,7 +2755,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%pzForce_Len = SIZE(DstInputData%pzForce) IF (DstInputData%c_obj%pzForce_Len > 0) & - DstInputData%c_obj%pzForce = C_LOC( DstInputData%pzForce(i1_l) ) + DstInputData%c_obj%pzForce = C_LOC( DstInputData%pzForce( i1_l ) ) END IF DstInputData%pzForce = SrcInputData%pzForce ENDIF @@ -2770,7 +2770,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%xdotForce_Len = SIZE(DstInputData%xdotForce) IF (DstInputData%c_obj%xdotForce_Len > 0) & - DstInputData%c_obj%xdotForce = C_LOC( DstInputData%xdotForce(i1_l) ) + DstInputData%c_obj%xdotForce = C_LOC( DstInputData%xdotForce( i1_l ) ) END IF DstInputData%xdotForce = SrcInputData%xdotForce ENDIF @@ -2785,7 +2785,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%ydotForce_Len = SIZE(DstInputData%ydotForce) IF (DstInputData%c_obj%ydotForce_Len > 0) & - DstInputData%c_obj%ydotForce = C_LOC( DstInputData%ydotForce(i1_l) ) + DstInputData%c_obj%ydotForce = C_LOC( DstInputData%ydotForce( i1_l ) ) END IF DstInputData%ydotForce = SrcInputData%ydotForce ENDIF @@ -2800,7 +2800,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%zdotForce_Len = SIZE(DstInputData%zdotForce) IF (DstInputData%c_obj%zdotForce_Len > 0) & - DstInputData%c_obj%zdotForce = C_LOC( DstInputData%zdotForce(i1_l) ) + DstInputData%c_obj%zdotForce = C_LOC( DstInputData%zdotForce( i1_l ) ) END IF DstInputData%zdotForce = SrcInputData%zdotForce ENDIF @@ -2815,7 +2815,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%pOrientation_Len = SIZE(DstInputData%pOrientation) IF (DstInputData%c_obj%pOrientation_Len > 0) & - DstInputData%c_obj%pOrientation = C_LOC( DstInputData%pOrientation(i1_l) ) + DstInputData%c_obj%pOrientation = C_LOC( DstInputData%pOrientation( i1_l ) ) END IF DstInputData%pOrientation = SrcInputData%pOrientation ENDIF @@ -2830,7 +2830,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%fx_Len = SIZE(DstInputData%fx) IF (DstInputData%c_obj%fx_Len > 0) & - DstInputData%c_obj%fx = C_LOC( DstInputData%fx(i1_l) ) + DstInputData%c_obj%fx = C_LOC( DstInputData%fx( i1_l ) ) END IF DstInputData%fx = SrcInputData%fx ENDIF @@ -2845,7 +2845,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%fy_Len = SIZE(DstInputData%fy) IF (DstInputData%c_obj%fy_Len > 0) & - DstInputData%c_obj%fy = C_LOC( DstInputData%fy(i1_l) ) + DstInputData%c_obj%fy = C_LOC( DstInputData%fy( i1_l ) ) END IF DstInputData%fy = SrcInputData%fy ENDIF @@ -2860,7 +2860,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%fz_Len = SIZE(DstInputData%fz) IF (DstInputData%c_obj%fz_Len > 0) & - DstInputData%c_obj%fz = C_LOC( DstInputData%fz(i1_l) ) + DstInputData%c_obj%fz = C_LOC( DstInputData%fz( i1_l ) ) END IF DstInputData%fz = SrcInputData%fz ENDIF @@ -2875,7 +2875,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%momentx_Len = SIZE(DstInputData%momentx) IF (DstInputData%c_obj%momentx_Len > 0) & - DstInputData%c_obj%momentx = C_LOC( DstInputData%momentx(i1_l) ) + DstInputData%c_obj%momentx = C_LOC( DstInputData%momentx( i1_l ) ) END IF DstInputData%momentx = SrcInputData%momentx ENDIF @@ -2890,7 +2890,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%momenty_Len = SIZE(DstInputData%momenty) IF (DstInputData%c_obj%momenty_Len > 0) & - DstInputData%c_obj%momenty = C_LOC( DstInputData%momenty(i1_l) ) + DstInputData%c_obj%momenty = C_LOC( DstInputData%momenty( i1_l ) ) END IF DstInputData%momenty = SrcInputData%momenty ENDIF @@ -2905,7 +2905,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%momentz_Len = SIZE(DstInputData%momentz) IF (DstInputData%c_obj%momentz_Len > 0) & - DstInputData%c_obj%momentz = C_LOC( DstInputData%momentz(i1_l) ) + DstInputData%c_obj%momentz = C_LOC( DstInputData%momentz( i1_l ) ) END IF DstInputData%momentz = SrcInputData%momentz ENDIF @@ -2920,7 +2920,7 @@ SUBROUTINE OpFM_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg END IF DstInputData%c_obj%forceNodesChord_Len = SIZE(DstInputData%forceNodesChord) IF (DstInputData%c_obj%forceNodesChord_Len > 0) & - DstInputData%c_obj%forceNodesChord = C_LOC( DstInputData%forceNodesChord(i1_l) ) + DstInputData%c_obj%forceNodesChord = C_LOC( DstInputData%forceNodesChord( i1_l ) ) END IF DstInputData%forceNodesChord = SrcInputData%forceNodesChord ENDIF @@ -3487,7 +3487,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%pxVel_Len = SIZE(OutData%pxVel) IF (OutData%c_obj%pxVel_Len > 0) & - OutData%c_obj%pxVel = C_LOC( OutData%pxVel(i1_l) ) + OutData%c_obj%pxVel = C_LOC( OutData%pxVel( i1_l ) ) DO i1 = LBOUND(OutData%pxVel,1), UBOUND(OutData%pxVel,1) OutData%pxVel(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3508,7 +3508,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%pyVel_Len = SIZE(OutData%pyVel) IF (OutData%c_obj%pyVel_Len > 0) & - OutData%c_obj%pyVel = C_LOC( OutData%pyVel(i1_l) ) + OutData%c_obj%pyVel = C_LOC( OutData%pyVel( i1_l ) ) DO i1 = LBOUND(OutData%pyVel,1), UBOUND(OutData%pyVel,1) OutData%pyVel(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3529,7 +3529,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%pzVel_Len = SIZE(OutData%pzVel) IF (OutData%c_obj%pzVel_Len > 0) & - OutData%c_obj%pzVel = C_LOC( OutData%pzVel(i1_l) ) + OutData%c_obj%pzVel = C_LOC( OutData%pzVel( i1_l ) ) DO i1 = LBOUND(OutData%pzVel,1), UBOUND(OutData%pzVel,1) OutData%pzVel(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3550,7 +3550,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%pxForce_Len = SIZE(OutData%pxForce) IF (OutData%c_obj%pxForce_Len > 0) & - OutData%c_obj%pxForce = C_LOC( OutData%pxForce(i1_l) ) + OutData%c_obj%pxForce = C_LOC( OutData%pxForce( i1_l ) ) DO i1 = LBOUND(OutData%pxForce,1), UBOUND(OutData%pxForce,1) OutData%pxForce(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3571,7 +3571,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%pyForce_Len = SIZE(OutData%pyForce) IF (OutData%c_obj%pyForce_Len > 0) & - OutData%c_obj%pyForce = C_LOC( OutData%pyForce(i1_l) ) + OutData%c_obj%pyForce = C_LOC( OutData%pyForce( i1_l ) ) DO i1 = LBOUND(OutData%pyForce,1), UBOUND(OutData%pyForce,1) OutData%pyForce(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3592,7 +3592,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%pzForce_Len = SIZE(OutData%pzForce) IF (OutData%c_obj%pzForce_Len > 0) & - OutData%c_obj%pzForce = C_LOC( OutData%pzForce(i1_l) ) + OutData%c_obj%pzForce = C_LOC( OutData%pzForce( i1_l ) ) DO i1 = LBOUND(OutData%pzForce,1), UBOUND(OutData%pzForce,1) OutData%pzForce(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3613,7 +3613,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%xdotForce_Len = SIZE(OutData%xdotForce) IF (OutData%c_obj%xdotForce_Len > 0) & - OutData%c_obj%xdotForce = C_LOC( OutData%xdotForce(i1_l) ) + OutData%c_obj%xdotForce = C_LOC( OutData%xdotForce( i1_l ) ) DO i1 = LBOUND(OutData%xdotForce,1), UBOUND(OutData%xdotForce,1) OutData%xdotForce(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3634,7 +3634,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%ydotForce_Len = SIZE(OutData%ydotForce) IF (OutData%c_obj%ydotForce_Len > 0) & - OutData%c_obj%ydotForce = C_LOC( OutData%ydotForce(i1_l) ) + OutData%c_obj%ydotForce = C_LOC( OutData%ydotForce( i1_l ) ) DO i1 = LBOUND(OutData%ydotForce,1), UBOUND(OutData%ydotForce,1) OutData%ydotForce(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3655,7 +3655,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%zdotForce_Len = SIZE(OutData%zdotForce) IF (OutData%c_obj%zdotForce_Len > 0) & - OutData%c_obj%zdotForce = C_LOC( OutData%zdotForce(i1_l) ) + OutData%c_obj%zdotForce = C_LOC( OutData%zdotForce( i1_l ) ) DO i1 = LBOUND(OutData%zdotForce,1), UBOUND(OutData%zdotForce,1) OutData%zdotForce(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3676,7 +3676,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%pOrientation_Len = SIZE(OutData%pOrientation) IF (OutData%c_obj%pOrientation_Len > 0) & - OutData%c_obj%pOrientation = C_LOC( OutData%pOrientation(i1_l) ) + OutData%c_obj%pOrientation = C_LOC( OutData%pOrientation( i1_l ) ) DO i1 = LBOUND(OutData%pOrientation,1), UBOUND(OutData%pOrientation,1) OutData%pOrientation(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3697,7 +3697,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%fx_Len = SIZE(OutData%fx) IF (OutData%c_obj%fx_Len > 0) & - OutData%c_obj%fx = C_LOC( OutData%fx(i1_l) ) + OutData%c_obj%fx = C_LOC( OutData%fx( i1_l ) ) DO i1 = LBOUND(OutData%fx,1), UBOUND(OutData%fx,1) OutData%fx(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3718,7 +3718,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%fy_Len = SIZE(OutData%fy) IF (OutData%c_obj%fy_Len > 0) & - OutData%c_obj%fy = C_LOC( OutData%fy(i1_l) ) + OutData%c_obj%fy = C_LOC( OutData%fy( i1_l ) ) DO i1 = LBOUND(OutData%fy,1), UBOUND(OutData%fy,1) OutData%fy(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3739,7 +3739,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%fz_Len = SIZE(OutData%fz) IF (OutData%c_obj%fz_Len > 0) & - OutData%c_obj%fz = C_LOC( OutData%fz(i1_l) ) + OutData%c_obj%fz = C_LOC( OutData%fz( i1_l ) ) DO i1 = LBOUND(OutData%fz,1), UBOUND(OutData%fz,1) OutData%fz(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3760,7 +3760,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%momentx_Len = SIZE(OutData%momentx) IF (OutData%c_obj%momentx_Len > 0) & - OutData%c_obj%momentx = C_LOC( OutData%momentx(i1_l) ) + OutData%c_obj%momentx = C_LOC( OutData%momentx( i1_l ) ) DO i1 = LBOUND(OutData%momentx,1), UBOUND(OutData%momentx,1) OutData%momentx(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3781,7 +3781,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%momenty_Len = SIZE(OutData%momenty) IF (OutData%c_obj%momenty_Len > 0) & - OutData%c_obj%momenty = C_LOC( OutData%momenty(i1_l) ) + OutData%c_obj%momenty = C_LOC( OutData%momenty( i1_l ) ) DO i1 = LBOUND(OutData%momenty,1), UBOUND(OutData%momenty,1) OutData%momenty(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3802,7 +3802,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%momentz_Len = SIZE(OutData%momentz) IF (OutData%c_obj%momentz_Len > 0) & - OutData%c_obj%momentz = C_LOC( OutData%momentz(i1_l) ) + OutData%c_obj%momentz = C_LOC( OutData%momentz( i1_l ) ) DO i1 = LBOUND(OutData%momentz,1), UBOUND(OutData%momentz,1) OutData%momentz(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -3823,7 +3823,7 @@ SUBROUTINE OpFM_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMs END IF OutData%c_obj%forceNodesChord_Len = SIZE(OutData%forceNodesChord) IF (OutData%c_obj%forceNodesChord_Len > 0) & - OutData%c_obj%forceNodesChord = C_LOC( OutData%forceNodesChord(i1_l) ) + OutData%c_obj%forceNodesChord = C_LOC( OutData%forceNodesChord( i1_l ) ) DO i1 = LBOUND(OutData%forceNodesChord,1), UBOUND(OutData%forceNodesChord,1) OutData%forceNodesChord(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -4025,7 +4025,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%pxVel_Len = SIZE(InputData%pxVel) IF (InputData%c_obj%pxVel_Len > 0) & - InputData%c_obj%pxVel = C_LOC( InputData%pxVel( LBOUND(InputData%pxVel,1) ) ) + InputData%c_obj%pxVel = C_LOC( InputData%pxVel( LBOUND(InputData%pxVel,1) ) ) END IF END IF @@ -4037,7 +4037,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%pyVel_Len = SIZE(InputData%pyVel) IF (InputData%c_obj%pyVel_Len > 0) & - InputData%c_obj%pyVel = C_LOC( InputData%pyVel( LBOUND(InputData%pyVel,1) ) ) + InputData%c_obj%pyVel = C_LOC( InputData%pyVel( LBOUND(InputData%pyVel,1) ) ) END IF END IF @@ -4049,7 +4049,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%pzVel_Len = SIZE(InputData%pzVel) IF (InputData%c_obj%pzVel_Len > 0) & - InputData%c_obj%pzVel = C_LOC( InputData%pzVel( LBOUND(InputData%pzVel,1) ) ) + InputData%c_obj%pzVel = C_LOC( InputData%pzVel( LBOUND(InputData%pzVel,1) ) ) END IF END IF @@ -4061,7 +4061,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%pxForce_Len = SIZE(InputData%pxForce) IF (InputData%c_obj%pxForce_Len > 0) & - InputData%c_obj%pxForce = C_LOC( InputData%pxForce( LBOUND(InputData%pxForce,1) ) ) + InputData%c_obj%pxForce = C_LOC( InputData%pxForce( LBOUND(InputData%pxForce,1) ) ) END IF END IF @@ -4073,7 +4073,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%pyForce_Len = SIZE(InputData%pyForce) IF (InputData%c_obj%pyForce_Len > 0) & - InputData%c_obj%pyForce = C_LOC( InputData%pyForce( LBOUND(InputData%pyForce,1) ) ) + InputData%c_obj%pyForce = C_LOC( InputData%pyForce( LBOUND(InputData%pyForce,1) ) ) END IF END IF @@ -4085,7 +4085,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%pzForce_Len = SIZE(InputData%pzForce) IF (InputData%c_obj%pzForce_Len > 0) & - InputData%c_obj%pzForce = C_LOC( InputData%pzForce( LBOUND(InputData%pzForce,1) ) ) + InputData%c_obj%pzForce = C_LOC( InputData%pzForce( LBOUND(InputData%pzForce,1) ) ) END IF END IF @@ -4097,7 +4097,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%xdotForce_Len = SIZE(InputData%xdotForce) IF (InputData%c_obj%xdotForce_Len > 0) & - InputData%c_obj%xdotForce = C_LOC( InputData%xdotForce( LBOUND(InputData%xdotForce,1) ) ) + InputData%c_obj%xdotForce = C_LOC( InputData%xdotForce( LBOUND(InputData%xdotForce,1) ) ) END IF END IF @@ -4109,7 +4109,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%ydotForce_Len = SIZE(InputData%ydotForce) IF (InputData%c_obj%ydotForce_Len > 0) & - InputData%c_obj%ydotForce = C_LOC( InputData%ydotForce( LBOUND(InputData%ydotForce,1) ) ) + InputData%c_obj%ydotForce = C_LOC( InputData%ydotForce( LBOUND(InputData%ydotForce,1) ) ) END IF END IF @@ -4121,7 +4121,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%zdotForce_Len = SIZE(InputData%zdotForce) IF (InputData%c_obj%zdotForce_Len > 0) & - InputData%c_obj%zdotForce = C_LOC( InputData%zdotForce( LBOUND(InputData%zdotForce,1) ) ) + InputData%c_obj%zdotForce = C_LOC( InputData%zdotForce( LBOUND(InputData%zdotForce,1) ) ) END IF END IF @@ -4133,7 +4133,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%pOrientation_Len = SIZE(InputData%pOrientation) IF (InputData%c_obj%pOrientation_Len > 0) & - InputData%c_obj%pOrientation = C_LOC( InputData%pOrientation( LBOUND(InputData%pOrientation,1) ) ) + InputData%c_obj%pOrientation = C_LOC( InputData%pOrientation( LBOUND(InputData%pOrientation,1) ) ) END IF END IF @@ -4145,7 +4145,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%fx_Len = SIZE(InputData%fx) IF (InputData%c_obj%fx_Len > 0) & - InputData%c_obj%fx = C_LOC( InputData%fx( LBOUND(InputData%fx,1) ) ) + InputData%c_obj%fx = C_LOC( InputData%fx( LBOUND(InputData%fx,1) ) ) END IF END IF @@ -4157,7 +4157,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%fy_Len = SIZE(InputData%fy) IF (InputData%c_obj%fy_Len > 0) & - InputData%c_obj%fy = C_LOC( InputData%fy( LBOUND(InputData%fy,1) ) ) + InputData%c_obj%fy = C_LOC( InputData%fy( LBOUND(InputData%fy,1) ) ) END IF END IF @@ -4169,7 +4169,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%fz_Len = SIZE(InputData%fz) IF (InputData%c_obj%fz_Len > 0) & - InputData%c_obj%fz = C_LOC( InputData%fz( LBOUND(InputData%fz,1) ) ) + InputData%c_obj%fz = C_LOC( InputData%fz( LBOUND(InputData%fz,1) ) ) END IF END IF @@ -4181,7 +4181,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%momentx_Len = SIZE(InputData%momentx) IF (InputData%c_obj%momentx_Len > 0) & - InputData%c_obj%momentx = C_LOC( InputData%momentx( LBOUND(InputData%momentx,1) ) ) + InputData%c_obj%momentx = C_LOC( InputData%momentx( LBOUND(InputData%momentx,1) ) ) END IF END IF @@ -4193,7 +4193,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%momenty_Len = SIZE(InputData%momenty) IF (InputData%c_obj%momenty_Len > 0) & - InputData%c_obj%momenty = C_LOC( InputData%momenty( LBOUND(InputData%momenty,1) ) ) + InputData%c_obj%momenty = C_LOC( InputData%momenty( LBOUND(InputData%momenty,1) ) ) END IF END IF @@ -4205,7 +4205,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%momentz_Len = SIZE(InputData%momentz) IF (InputData%c_obj%momentz_Len > 0) & - InputData%c_obj%momentz = C_LOC( InputData%momentz( LBOUND(InputData%momentz,1) ) ) + InputData%c_obj%momentz = C_LOC( InputData%momentz( LBOUND(InputData%momentz,1) ) ) END IF END IF @@ -4217,7 +4217,7 @@ SUBROUTINE OpFM_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%forceNodesChord_Len = SIZE(InputData%forceNodesChord) IF (InputData%c_obj%forceNodesChord_Len > 0) & - InputData%c_obj%forceNodesChord = C_LOC( InputData%forceNodesChord( LBOUND(InputData%forceNodesChord,1) ) ) + InputData%c_obj%forceNodesChord = C_LOC( InputData%forceNodesChord( LBOUND(InputData%forceNodesChord,1) ) ) END IF END IF END SUBROUTINE OpFM_F2C_CopyInput @@ -4248,7 +4248,7 @@ SUBROUTINE OpFM_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, Err END IF DstOutputData%c_obj%u_Len = SIZE(DstOutputData%u) IF (DstOutputData%c_obj%u_Len > 0) & - DstOutputData%c_obj%u = C_LOC( DstOutputData%u(i1_l) ) + DstOutputData%c_obj%u = C_LOC( DstOutputData%u( i1_l ) ) END IF DstOutputData%u = SrcOutputData%u ENDIF @@ -4263,7 +4263,7 @@ SUBROUTINE OpFM_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, Err END IF DstOutputData%c_obj%v_Len = SIZE(DstOutputData%v) IF (DstOutputData%c_obj%v_Len > 0) & - DstOutputData%c_obj%v = C_LOC( DstOutputData%v(i1_l) ) + DstOutputData%c_obj%v = C_LOC( DstOutputData%v( i1_l ) ) END IF DstOutputData%v = SrcOutputData%v ENDIF @@ -4278,7 +4278,7 @@ SUBROUTINE OpFM_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, Err END IF DstOutputData%c_obj%w_Len = SIZE(DstOutputData%w) IF (DstOutputData%c_obj%w_Len > 0) & - DstOutputData%c_obj%w = C_LOC( DstOutputData%w(i1_l) ) + DstOutputData%c_obj%w = C_LOC( DstOutputData%w( i1_l ) ) END IF DstOutputData%w = SrcOutputData%w ENDIF @@ -4516,7 +4516,7 @@ SUBROUTINE OpFM_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM END IF OutData%c_obj%u_Len = SIZE(OutData%u) IF (OutData%c_obj%u_Len > 0) & - OutData%c_obj%u = C_LOC( OutData%u(i1_l) ) + OutData%c_obj%u = C_LOC( OutData%u( i1_l ) ) DO i1 = LBOUND(OutData%u,1), UBOUND(OutData%u,1) OutData%u(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -4537,7 +4537,7 @@ SUBROUTINE OpFM_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM END IF OutData%c_obj%v_Len = SIZE(OutData%v) IF (OutData%c_obj%v_Len > 0) & - OutData%c_obj%v = C_LOC( OutData%v(i1_l) ) + OutData%c_obj%v = C_LOC( OutData%v( i1_l ) ) DO i1 = LBOUND(OutData%v,1), UBOUND(OutData%v,1) OutData%v(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -4558,7 +4558,7 @@ SUBROUTINE OpFM_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM END IF OutData%c_obj%w_Len = SIZE(OutData%w) IF (OutData%c_obj%w_Len > 0) & - OutData%c_obj%w = C_LOC( OutData%w(i1_l) ) + OutData%c_obj%w = C_LOC( OutData%w( i1_l ) ) DO i1 = LBOUND(OutData%w,1), UBOUND(OutData%w,1) OutData%w(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -4652,7 +4652,7 @@ SUBROUTINE OpFM_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%u_Len = SIZE(OutputData%u) IF (OutputData%c_obj%u_Len > 0) & - OutputData%c_obj%u = C_LOC( OutputData%u( LBOUND(OutputData%u,1) ) ) + OutputData%c_obj%u = C_LOC( OutputData%u( LBOUND(OutputData%u,1) ) ) END IF END IF @@ -4664,7 +4664,7 @@ SUBROUTINE OpFM_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%v_Len = SIZE(OutputData%v) IF (OutputData%c_obj%v_Len > 0) & - OutputData%c_obj%v = C_LOC( OutputData%v( LBOUND(OutputData%v,1) ) ) + OutputData%c_obj%v = C_LOC( OutputData%v( LBOUND(OutputData%v,1) ) ) END IF END IF @@ -4676,7 +4676,7 @@ SUBROUTINE OpFM_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%w_Len = SIZE(OutputData%w) IF (OutputData%c_obj%w_Len > 0) & - OutputData%c_obj%w = C_LOC( OutputData%w( LBOUND(OutputData%w,1) ) ) + OutputData%c_obj%w = C_LOC( OutputData%w( LBOUND(OutputData%w,1) ) ) END IF END IF END SUBROUTINE OpFM_F2C_CopyOutput diff --git a/modules/supercontroller/src/SCDataEx_Types.f90 b/modules/supercontroller/src/SCDataEx_Types.f90 index 87f9b83253..30b4b518f8 100644 --- a/modules/supercontroller/src/SCDataEx_Types.f90 +++ b/modules/supercontroller/src/SCDataEx_Types.f90 @@ -716,7 +716,7 @@ SUBROUTINE SC_DX_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMs END IF DstInputData%c_obj%toSC_Len = SIZE(DstInputData%toSC) IF (DstInputData%c_obj%toSC_Len > 0) & - DstInputData%c_obj%toSC = C_LOC( DstInputData%toSC(i1_l) ) + DstInputData%c_obj%toSC = C_LOC( DstInputData%toSC( i1_l ) ) END IF DstInputData%toSC = SrcInputData%toSC ENDIF @@ -867,7 +867,7 @@ SUBROUTINE SC_DX_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM END IF OutData%c_obj%toSC_Len = SIZE(OutData%toSC) IF (OutData%c_obj%toSC_Len > 0) & - OutData%c_obj%toSC = C_LOC( OutData%toSC(i1_l) ) + OutData%c_obj%toSC = C_LOC( OutData%toSC( i1_l ) ) DO i1 = LBOUND(OutData%toSC,1), UBOUND(OutData%toSC,1) OutData%toSC(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -925,7 +925,7 @@ SUBROUTINE SC_DX_F2C_CopyInput( InputData, ErrStat, ErrMsg, SkipPointers ) ELSE InputData%c_obj%toSC_Len = SIZE(InputData%toSC) IF (InputData%c_obj%toSC_Len > 0) & - InputData%c_obj%toSC = C_LOC( InputData%toSC( LBOUND(InputData%toSC,1) ) ) + InputData%c_obj%toSC = C_LOC( InputData%toSC( LBOUND(InputData%toSC,1) ) ) END IF END IF END SUBROUTINE SC_DX_F2C_CopyInput @@ -956,7 +956,7 @@ SUBROUTINE SC_DX_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, Er END IF DstOutputData%c_obj%fromSC_Len = SIZE(DstOutputData%fromSC) IF (DstOutputData%c_obj%fromSC_Len > 0) & - DstOutputData%c_obj%fromSC = C_LOC( DstOutputData%fromSC(i1_l) ) + DstOutputData%c_obj%fromSC = C_LOC( DstOutputData%fromSC( i1_l ) ) END IF DstOutputData%fromSC = SrcOutputData%fromSC ENDIF @@ -971,7 +971,7 @@ SUBROUTINE SC_DX_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, Er END IF DstOutputData%c_obj%fromSCglob_Len = SIZE(DstOutputData%fromSCglob) IF (DstOutputData%c_obj%fromSCglob_Len > 0) & - DstOutputData%c_obj%fromSCglob = C_LOC( DstOutputData%fromSCglob(i1_l) ) + DstOutputData%c_obj%fromSCglob = C_LOC( DstOutputData%fromSCglob( i1_l ) ) END IF DstOutputData%fromSCglob = SrcOutputData%fromSCglob ENDIF @@ -1148,7 +1148,7 @@ SUBROUTINE SC_DX_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err END IF OutData%c_obj%fromSC_Len = SIZE(OutData%fromSC) IF (OutData%c_obj%fromSC_Len > 0) & - OutData%c_obj%fromSC = C_LOC( OutData%fromSC(i1_l) ) + OutData%c_obj%fromSC = C_LOC( OutData%fromSC( i1_l ) ) DO i1 = LBOUND(OutData%fromSC,1), UBOUND(OutData%fromSC,1) OutData%fromSC(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -1169,7 +1169,7 @@ SUBROUTINE SC_DX_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err END IF OutData%c_obj%fromSCglob_Len = SIZE(OutData%fromSCglob) IF (OutData%c_obj%fromSCglob_Len > 0) & - OutData%c_obj%fromSCglob = C_LOC( OutData%fromSCglob(i1_l) ) + OutData%c_obj%fromSCglob = C_LOC( OutData%fromSCglob( i1_l ) ) DO i1 = LBOUND(OutData%fromSCglob,1), UBOUND(OutData%fromSCglob,1) OutData%fromSCglob(i1) = REAL(ReKiBuf(Re_Xferred), C_FLOAT) Re_Xferred = Re_Xferred + 1 @@ -1236,7 +1236,7 @@ SUBROUTINE SC_DX_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%fromSC_Len = SIZE(OutputData%fromSC) IF (OutputData%c_obj%fromSC_Len > 0) & - OutputData%c_obj%fromSC = C_LOC( OutputData%fromSC( LBOUND(OutputData%fromSC,1) ) ) + OutputData%c_obj%fromSC = C_LOC( OutputData%fromSC( LBOUND(OutputData%fromSC,1) ) ) END IF END IF @@ -1248,7 +1248,7 @@ SUBROUTINE SC_DX_F2C_CopyOutput( OutputData, ErrStat, ErrMsg, SkipPointers ) ELSE OutputData%c_obj%fromSCglob_Len = SIZE(OutputData%fromSCglob) IF (OutputData%c_obj%fromSCglob_Len > 0) & - OutputData%c_obj%fromSCglob = C_LOC( OutputData%fromSCglob( LBOUND(OutputData%fromSCglob,1) ) ) + OutputData%c_obj%fromSCglob = C_LOC( OutputData%fromSCglob( LBOUND(OutputData%fromSCglob,1) ) ) END IF END IF END SUBROUTINE SC_DX_F2C_CopyOutput From 93492be4ee1836ab3213d33d9cc0f20ec0a28305 Mon Sep 17 00:00:00 2001 From: Greg Hayman Date: Tue, 21 Sep 2021 10:34:58 -0600 Subject: [PATCH 005/338] Reorganize HD src files for SeaState Module Move location of files which used in the new SeaState module --- modules/hydrodyn/src/Waves2_Output.f90 | 576 ------------------ .../{hydrodyn => seastate}/src/Current.f90 | 0 .../{hydrodyn => seastate}/src/Current.txt | 0 .../src/Current_Types.f90 | 0 .../{hydrodyn => seastate}/src/UserWaves.f90 | 0 modules/{hydrodyn => seastate}/src/Waves.f90 | 0 modules/{hydrodyn => seastate}/src/Waves.txt | 0 modules/{hydrodyn => seastate}/src/Waves2.f90 | 0 modules/{hydrodyn => seastate}/src/Waves2.txt | 0 .../src/Waves2_Types.f90 | 0 .../src/Waves_Types.f90 | 0 11 files changed, 576 deletions(-) delete mode 100644 modules/hydrodyn/src/Waves2_Output.f90 rename modules/{hydrodyn => seastate}/src/Current.f90 (100%) rename modules/{hydrodyn => seastate}/src/Current.txt (100%) rename modules/{hydrodyn => seastate}/src/Current_Types.f90 (100%) rename modules/{hydrodyn => seastate}/src/UserWaves.f90 (100%) rename modules/{hydrodyn => seastate}/src/Waves.f90 (100%) rename modules/{hydrodyn => seastate}/src/Waves.txt (100%) rename modules/{hydrodyn => seastate}/src/Waves2.f90 (100%) rename modules/{hydrodyn => seastate}/src/Waves2.txt (100%) rename modules/{hydrodyn => seastate}/src/Waves2_Types.f90 (100%) rename modules/{hydrodyn => seastate}/src/Waves_Types.f90 (100%) diff --git a/modules/hydrodyn/src/Waves2_Output.f90 b/modules/hydrodyn/src/Waves2_Output.f90 deleted file mode 100644 index 817ebc7272..0000000000 --- a/modules/hydrodyn/src/Waves2_Output.f90 +++ /dev/null @@ -1,576 +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 - - INTEGER(IntKi), PARAMETER :: OutStrLenM1 = ChanLen - - ! 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/Current.f90 b/modules/seastate/src/Current.f90 similarity index 100% rename from modules/hydrodyn/src/Current.f90 rename to modules/seastate/src/Current.f90 diff --git a/modules/hydrodyn/src/Current.txt b/modules/seastate/src/Current.txt similarity index 100% rename from modules/hydrodyn/src/Current.txt rename to modules/seastate/src/Current.txt diff --git a/modules/hydrodyn/src/Current_Types.f90 b/modules/seastate/src/Current_Types.f90 similarity index 100% rename from modules/hydrodyn/src/Current_Types.f90 rename to modules/seastate/src/Current_Types.f90 diff --git a/modules/hydrodyn/src/UserWaves.f90 b/modules/seastate/src/UserWaves.f90 similarity index 100% rename from modules/hydrodyn/src/UserWaves.f90 rename to modules/seastate/src/UserWaves.f90 diff --git a/modules/hydrodyn/src/Waves.f90 b/modules/seastate/src/Waves.f90 similarity index 100% rename from modules/hydrodyn/src/Waves.f90 rename to modules/seastate/src/Waves.f90 diff --git a/modules/hydrodyn/src/Waves.txt b/modules/seastate/src/Waves.txt similarity index 100% rename from modules/hydrodyn/src/Waves.txt rename to modules/seastate/src/Waves.txt diff --git a/modules/hydrodyn/src/Waves2.f90 b/modules/seastate/src/Waves2.f90 similarity index 100% rename from modules/hydrodyn/src/Waves2.f90 rename to modules/seastate/src/Waves2.f90 diff --git a/modules/hydrodyn/src/Waves2.txt b/modules/seastate/src/Waves2.txt similarity index 100% rename from modules/hydrodyn/src/Waves2.txt rename to modules/seastate/src/Waves2.txt diff --git a/modules/hydrodyn/src/Waves2_Types.f90 b/modules/seastate/src/Waves2_Types.f90 similarity index 100% rename from modules/hydrodyn/src/Waves2_Types.f90 rename to modules/seastate/src/Waves2_Types.f90 diff --git a/modules/hydrodyn/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 similarity index 100% rename from modules/hydrodyn/src/Waves_Types.f90 rename to modules/seastate/src/Waves_Types.f90 From 32b2e74b2047e88252ecf38931804c6f1bf8eb9c Mon Sep 17 00:00:00 2001 From: Greg Hayman Date: Tue, 21 Sep 2021 20:16:46 -0600 Subject: [PATCH 006/338] Initial SeaState Module Functionality Added SeaState Module. This includes a new SeaState input file and a stand alone SeasState driver program. SeaState encompasses the Current, Waves, UserWaves, and Waves2 modules, and a new interpolation module. The wave kinematics are now defined on a 3D grid and the physics modules obtain kinematics for any point by interpolating the grid data. --- docs/OtherSupporting/OutListParameters.xlsx | Bin 566317 -> 570113 bytes modules/seastate/CMakeLists.txt | 54 + modules/seastate/README.md | 9 + modules/seastate/src/Current.f90 | 10 +- modules/seastate/src/Current.txt | 4 +- modules/seastate/src/Current_Types.f90 | 60 +- modules/seastate/src/SeaState.f90 | 1505 +++++ modules/seastate/src/SeaState.txt | 159 + modules/seastate/src/SeaState_DriverCode.f90 | 717 +++ modules/seastate/src/SeaState_Input.f90 | 1409 +++++ .../seastate/src/SeaState_Interp_Types.f90 | 771 +++ modules/seastate/src/SeaState_Output.f90 | 1025 ++++ modules/seastate/src/SeaState_Types.f90 | 5303 +++++++++++++++++ modules/seastate/src/UserWaves.f90 | 131 +- modules/seastate/src/Waves.f90 | 275 +- modules/seastate/src/Waves.txt | 36 +- modules/seastate/src/Waves2.f90 | 216 +- modules/seastate/src/Waves2.txt | 69 +- modules/seastate/src/Waves2_Types.f90 | 1403 +---- modules/seastate/src/Waves_Types.f90 | 702 +-- modules/seastate/src/seastate_Interp.f90 | 634 ++ modules/seastate/src/seastate_Interp.txt | 41 + vs-build/RunRegistry.bat | 17 +- 23 files changed, 12506 insertions(+), 2044 deletions(-) create mode 100644 modules/seastate/CMakeLists.txt create mode 100644 modules/seastate/README.md create mode 100644 modules/seastate/src/SeaState.f90 create mode 100644 modules/seastate/src/SeaState.txt create mode 100644 modules/seastate/src/SeaState_DriverCode.f90 create mode 100644 modules/seastate/src/SeaState_Input.f90 create mode 100644 modules/seastate/src/SeaState_Interp_Types.f90 create mode 100644 modules/seastate/src/SeaState_Output.f90 create mode 100644 modules/seastate/src/SeaState_Types.f90 create mode 100644 modules/seastate/src/seastate_Interp.f90 create mode 100644 modules/seastate/src/seastate_Interp.txt diff --git a/docs/OtherSupporting/OutListParameters.xlsx b/docs/OtherSupporting/OutListParameters.xlsx index aeb7f5289c550def616c9b501c5bec5ba2c302f9..bbfcb4cadd028efc9484bf2510cd9dfe9e74a77f 100644 GIT binary patch literal 570113 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
g1D^LEh^Gx1;jEb(lHt$yhh{SdcSO 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
  • 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

    fJ^f+o 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

    3_TNpPzBeigZM*uReq$ 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

    k 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

    =0p~E9DA8 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 xr#HVd^X49Vz@cXhlP_TXmt#s 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

    8Yiw^*7IZ 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%0D6i7s2hCjdJT)19xpKCo--O5iW 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 z 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 RyU>HsfJ;~O*sBeQ{{sSbW?ldQ diff --git a/modules/seastate/CMakeLists.txt b/modules/seastate/CMakeLists.txt new file mode 100644 index 0000000000..acdef872ed --- /dev/null +++ b/modules/seastate/CMakeLists.txt @@ -0,0 +1,54 @@ +# +# Copyright 2021 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) + 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 -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() + +set(SEAST_SOURCES + src/Current.f90 + src/Waves.f90 + src/Waves2.f90 + src/UserWaves.f90 + src/seastate_interp.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 +) + +add_library(seastlib ${SEAST_SOURCES}) +target_link_libraries(seastlib nwtclibs) + +set(SEAST_DRIVER_SOURCES + src/SeaState_DriverCode.f90 +) + +add_executable(seastate_driver ${SEAST_DRIVER_SOURCES}) +target_link_libraries(seastate_driver seastlib ${CMAKE_DL_LIBS}) + +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/seastate/src/Current.f90 b/modules/seastate/src/Current.f90 index a7415f6779..88440e0c5a 100644 --- a/modules/seastate/src/Current.f90 +++ b/modules/seastate/src/Current.f90 @@ -208,16 +208,16 @@ SUBROUTINE Current_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ! 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 +227,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%WaveKinzi(I), InitInp%WtrDpth, InitInp%DirRoot, CurrVxi, CurrVyi ) InitOut%CurrVxi(I) = CurrVxi InitOut%CurrVyi(I) = CurrVyi diff --git a/modules/seastate/src/Current.txt b/modules/seastate/src/Current.txt index 5008b1b0af..54db13cf13 100644 --- a/modules/seastate/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 WaveKinzi {:} - - "" - +typedef ^ ^ INTEGER NGridPts - - - "" - typedef ^ ^ CHARACTER(1024) DirRoot - "" - "" - # # diff --git a/modules/seastate/src/Current_Types.f90 b/modules/seastate/src/Current_Types.f90 index f262434bca..5cc09396e6 100644 --- a/modules/seastate/src/Current_Types.f90 +++ b/modules/seastate/src/Current_Types.f90 @@ -45,8 +45,8 @@ MODULE Current_Types REAL(SiKi) :: CurrDIDir !< [-] INTEGER(IntKi) :: CurrMod !< [-] REAL(SiKi) :: WtrDpth !< [-] - REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: MorisonNodezi !< [-] - INTEGER(IntKi) :: NMorisonNodes !< [-] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinzi !< [-] + INTEGER(IntKi) :: NGridPts !< [-] CHARACTER(1024) :: DirRoot !< [-] END TYPE Current_InitInputType ! ======================= @@ -124,19 +124,19 @@ SUBROUTINE Current_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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 (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%MorisonNodezi.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInitInputData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstInitInputData%MorisonNodezi = SrcInitInputData%MorisonNodezi + DstInitInputData%WaveKinzi = SrcInitInputData%WaveKinzi ENDIF - DstInitInputData%NMorisonNodes = SrcInitInputData%NMorisonNodes + DstInitInputData%NGridPts = SrcInitInputData%NGridPts DstInitInputData%DirRoot = SrcInitInputData%DirRoot END SUBROUTINE Current_CopyInitInput @@ -149,8 +149,8 @@ SUBROUTINE Current_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" -IF (ALLOCATED(InitInputData%MorisonNodezi)) THEN - DEALLOCATE(InitInputData%MorisonNodezi) +IF (ALLOCATED(InitInputData%WaveKinzi)) THEN + DEALLOCATE(InitInputData%WaveKinzi) ENDIF END SUBROUTINE Current_DestroyInitInput @@ -199,12 +199,12 @@ SUBROUTINE Current_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 + 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 ! NMorisonNodes + 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 ) @@ -255,22 +255,22 @@ SUBROUTINE Current_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = Int_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WtrDpth Re_Xferred = Re_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%MorisonNodezi) ) THEN + 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%MorisonNodezi,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%MorisonNodezi,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%MorisonNodezi,1), UBOUND(InData%MorisonNodezi,1) - ReKiBuf(Re_Xferred) = InData%MorisonNodezi(i1) + 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%NMorisonNodes + 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) @@ -327,25 +327,25 @@ SUBROUTINE Current_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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 + 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%MorisonNodezi)) DEALLOCATE(OutData%MorisonNodezi) - ALLOCATE(OutData%MorisonNodezi(i1_l:i1_u),STAT=ErrStat2) + 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%MorisonNodezi.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveKinzi.', ErrStat, ErrMsg,RoutineName) RETURN END IF - DO i1 = LBOUND(OutData%MorisonNodezi,1), UBOUND(OutData%MorisonNodezi,1) - OutData%MorisonNodezi(i1) = REAL(ReKiBuf(Re_Xferred), SiKi) + 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%NMorisonNodes = IntKiBuf(Int_Xferred) + OutData%NGridPts = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 DO I = 1, LEN(OutData%DirRoot) OutData%DirRoot(I:I) = CHAR(IntKiBuf(Int_Xferred)) diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 new file mode 100644 index 0000000000..479d5a5d0f --- /dev/null +++ b/modules/seastate/src/SeaState.f90 @@ -0,0 +1,1505 @@ +!********************************************************************************************************************************** +! 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: HD +!.................................................................................................................................. +! 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 + + + TYPE(ProgDesc), PARAMETER :: SeaState_ProgDesc = ProgDesc( 'SeaState', '', '' ) + + + + + ! ..... Public Subroutines ................................................................................................... + + PUBLIC :: SeaState_Init ! Initialization routine + PUBLIC :: SeaState_End ! Ending routine (includes clean up) + + PUBLIC :: SeaState_UpdateStates ! Loose coupling routine for solving for constraint states, integrating + ! continuous states, and updating discrete states + PUBLIC :: SeaState_CalcOutput ! Routine for computing outputs + + PUBLIC :: SeaState_CalcConstrStateResidual ! Tight coupling routine for returning the constraint state residual + PUBLIC :: SeaState_CalcContStateDeriv ! Tight coupling routine for computing derivatives of continuous states + !PUBLIC :: SeaState_UpdateDiscState ! Tight coupling routine for updating discrete states + + + CONTAINS +!---------------------------------------------------------------------------------------------------------------------------------- +!> This function returns a string describing the glue code and some of the compilation options we're using. +FUNCTION GetVersion(ThisProgVer) + + ! Passed Variables: + + TYPE(ProgDesc), INTENT( IN ) :: ThisProgVer !< program name/date/version description + CHARACTER(1024) :: GetVersion !< String containing a description of the compiled precision. + + CHARACTER(200) :: git_commit + + GetVersion = TRIM(GetNVD(ThisProgVer))//' was compiled' + + + + GetVersion = TRIM(GetVersion)//' as a '//TRIM(Num2LStr(BITS_IN_ADDR))//'-bit application using' + + ! determine precision + + IF ( ReKi == SiKi ) THEN ! Single precision + GetVersion = TRIM(GetVersion)//' single' + ELSEIF ( ReKi == R8Ki ) THEN ! Double precision + GetVersion = TRIM(GetVersion)// ' double' + ELSE ! Unknown precision + GetVersion = TRIM(GetVersion)//' unknown' + ENDIF + + +! GetVersion = TRIM(GetVersion)//' precision with '//OS_Desc + GetVersion = TRIM(GetVersion)//' precision' + + ! add git info + git_commit = QueryGitVersion() + GetVersion = TRIM(GetVersion)//' at commit '//git_commit + + RETURN +END FUNCTION GetVersion +!subroutine ConvertWaveDataToSeaStatePointers(Waves_InitOut, p, ErrStat, ErrMsg) +! TYPE(Waves_InitOutputType), INTENT(in ) :: Waves_InitOut !< Output from Waves initialization routine +! TYPE(SeaState_ParameterType), INTENT(inout) :: p !< SeaState Parameters +! 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,k,t, count ! counters +! INTEGER(IntKi) :: ErrStat2 ! local error status +! CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message +! CHARACTER(*), PARAMETER :: RoutineName = 'ConvertWaveDataToSeaStatePointers' +! +! +! +! ! Initialize ErrStat +! +! ErrStat = ErrID_None +! ErrStat2= ErrID_None +! ErrMsg = "" +! ErrMsg2 = "" +!! Waves data arrays (in order to avoid a rewrite of Waves.f90 are stored with indices: WaveTime, Node, 3D Vector component) +!! But Seastate arrays need to be stored: WaveTime, Xcoord, Ycoord, Zcoord, and now 3D components are stored separately +! +!! allocate seastate pointer data +!ALLOCATE ( p%WaveVelxNew (p%NGrid(1), p%NGrid(2), p%NGrid(3), p%NGrid(4) ) , STAT=ErrStat2 ) +! IF ( ErrStat2 /= 0 ) THEN +! CALL SetErrStat(ErrID_Fatal,'Error allocating memory for the SeaState WaveElev array.',ErrStat,ErrMsg,RoutineName) +! RETURN +! END IF +!ALLOCATE ( p%WaveVelyNew (p%NGrid(1), p%NGrid(2), p%NGrid(3), p%NGrid(4) ) , STAT=ErrStat2 ) +! IF ( ErrStat2 /= 0 ) THEN +! CALL SetErrStat(ErrID_Fatal,'Error allocating memory for the SeaState WaveElev array.',ErrStat,ErrMsg,RoutineName) +! RETURN +! END IF +!ALLOCATE ( p%WaveVelzNew (p%NGrid(1), p%NGrid(2), p%NGrid(3), p%NGrid(4) ) , STAT=ErrStat2 ) +! IF ( ErrStat2 /= 0 ) THEN +! CALL SetErrStat(ErrID_Fatal,'Error allocating memory for the SeaState WaveElev array.',ErrStat,ErrMsg,RoutineName) +! RETURN +! END IF +! count = 0 +! do k = 1,p%NGrid(4) +! do j = 1,p%NGrid(3) +! do i = 1,p%NGrid(2) +! do t = 1,p%NGrid(1) +! p%WaveVelxNew(t,i,j,k) = Waves_InitOut%WaveVel(t-1,count,1) +! p%WaveVelyNew(t,i,j,k) = Waves_InitOut%WaveVel(t-1,count,2) +! p%WaveVelzNew(t,i,j,k) = Waves_InitOut%WaveVel(t-1,count,3) +! count = count + 1 +! end do +! end do +! end do +! end do +! +!end subroutine ConvertWaveDataToSeaStatePointers +!TODO: This stretch needs the morison nodeInWater locations, which don't exist in SeaState module!!! +!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. +!! The initial states and initial guess for the input are defined. +SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) +!.................................................................................................................................. + + TYPE(SeaState_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine. + TYPE(SeaState_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined + TYPE(SeaState_ParameterType), INTENT( OUT) :: p !< Parameters + TYPE(SeaState_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states + TYPE(SeaState_DiscreteStateType), INTENT( OUT) :: xd !< Initial discrete states + TYPE(SeaState_ConstraintStateType), INTENT( OUT) :: z !< Initial guess of the constraint states + TYPE(SeaState_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states + TYPE(SeaState_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; + !! only the output mesh is initialized) + TYPE(SeaState_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables + REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: the rate that + !! (1) SeaState_UpdateStates() is called in loose coupling & + !! (2) SeaState_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(SeaState_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 + + CHARACTER(1024) :: SummaryName ! name of the SeaState summary file + TYPE(SeaState_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(SeaState_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, 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 + + 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 (:,: ) + + CHARACTER(1024) :: versionStr + INTEGER(IntKi) :: ErrStat2 ! local error status + CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Init' + + CHARACTER(64) :: Frmt + CHARACTER(2) :: Delim + + ! 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. + +#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( SeaState_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 SeaState_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, Interval, InputFileData, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + p%DT = Interval + + ! Open a summary of the SeaState Initialization. Note: OutRootName must be set by the caller because there may not be an input file to obtain this rootname from. + + IF ( InputFileData%SeaStSum ) THEN + + SummaryName = TRIM(InitInp%OutRootName)//'.HD.sum' + CALL SeaStOut_OpenSum( InputFileData%UnSum, SummaryName, SeaState_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 + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + ELSE + + InputFileData%UnSum = -1 + + END IF + + ! Set summary unit number in Waves, Radiation, and Morison initialization input data + + InputFileData%Waves%UnSum = InputFileData%UnSum + + + ! 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 SeaState 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 SeaState 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 + !!TODO: FIX Vertical Stretching DATA + ! ! 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 ! Wave Stretching data Init +!========================================================================== + + 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 SeaState Interval.',ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + END IF + + + + ! Copy Waves initialization output into the initialization input type for the WAMIT module + p%NWaveElev = InputFileData%NWaveElev + p%NStepWave = Waves_InitOut%NStepWave + p%WaveDT = InputFileData%Waves%WaveDT + 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 + ! Store user-requested wave elevation locations + ALLOCATE ( p%WaveElevxi (InputFileData%NWaveElev), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElevxi.', ErrStat, ErrMsg, RoutineName) + ALLOCATE ( p%WaveElevyi (InputFileData%NWaveElev), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElevyi.', ErrStat, ErrMsg, RoutineName) + p%WaveElevxi = InputFileData%WaveElevxi + p%WaveElevyi = InputFileData%WaveElevyi + + ! Store user-requested wave kinematic locations + ALLOCATE ( p%WaveKinxi (InputFileData%Waves%NWaveKin), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElevyi.', ErrStat, ErrMsg, RoutineName) + ALLOCATE ( p%WaveKinyi (InputFileData%Waves%NWaveKin), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinyi.', ErrStat, ErrMsg, RoutineName) + ALLOCATE ( p%WaveKinzi (InputFileData%Waves%NWaveKin), STAT=ErrStat2 ) + IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveKinzi.', ErrStat, ErrMsg, RoutineName) + p%NWaveKin = InputFileData%NWaveKin + p%WaveKinxi = InputFileData%WaveKinxi + p%WaveKinyi = InputFileData%WaveKinyi + p%WaveKinzi = InputFileData%WaveKinzi + + ! 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 + + ! 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%NGrid(1), p%NGrid(2) ) , 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 + ! Need to loop over all the elements and copy + p%WaveElev(:,:,:) = p%WaveElev1(:,:,:) + + + + 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 + +!========================================================================== +! 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 +!========================================================================== + + 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 + + ! nullify unneeded pointers + InputFileData%Waves2%WaveTime => NULL() + InputFileData%Waves2%WaveElevC0 => NULL() + InputFileData%Waves2%WaveDirArr => NULL() + + + ! 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 SeaState Interval.',ErrStat,ErrMsg,RoutineName) + 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 (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 k = 1, p%NGrid(2) + do J=1, p%NGrid(1) + do I = 0,p%NStepWave + p%WaveElev(I,J,k) = p%Waves2%WaveElev2(I,J,k) + p%WaveElev(I,J,k) + end do + end do + end do + !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... + ! Difference frequency results + IF ( p%Waves2%WvDiffQTFF ) THEN + + ! Dynamic pressure -- difference frequency terms + IF ( SIZE(p%WaveDynP,DIM=1) /= SIZE(InitOut%Waves2%WaveDynP2D,DIM=1) .OR. & + SIZE(p%WaveDynP,DIM=2) /= SIZE(InitOut%Waves2%WaveDynP2D,DIM=2).OR. & + SIZE(p%WaveDynP,DIM=3) /= SIZE(InitOut%Waves2%WaveDynP2D,DIM=3).OR. & + SIZE(p%WaveDynP,DIM=4) /= SIZE(InitOut%Waves2%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(InitOut%Waves2%WaveDynP2D,DIM=1)))//'x'// & + TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=2)))//'x'// & + TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=3)))//'x'// & + TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=4))), & + ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + p%WaveDynP = p%WaveDynP + InitOut%Waves2%WaveDynP2D + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveDynP0 = WaveDynP0 + WaveDynP2D0 + ENDIF + + ! Particle velocity -- difference frequency terms + IF ( SIZE(p%WaveVel,DIM=1) /= SIZE(InitOut%Waves2%WaveVel2D,DIM=1) .OR. & + SIZE(p%WaveVel,DIM=2) /= SIZE(InitOut%Waves2%WaveVel2D,DIM=2) .OR. & + SIZE(p%WaveVel,DIM=3) /= SIZE(InitOut%Waves2%WaveVel2D,DIM=3) .OR. & + SIZE(p%WaveVel,DIM=4) /= SIZE(InitOut%Waves2%WaveVel2D,DIM=4) .OR. & + SIZE(p%WaveVel,DIM=5) /= SIZE(InitOut%Waves2%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 + InitOut%Waves2%WaveVel2D + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveVel0 = WaveVel0 + WaveVel2D0 + ENDIF + + + ! Particle acceleration -- difference frequency terms + IF ( SIZE(p%WaveAcc,DIM=1) /= SIZE(InitOut%Waves2%WaveAcc2D,DIM=1) .OR. & + SIZE(p%WaveAcc,DIM=2) /= SIZE(InitOut%Waves2%WaveAcc2D,DIM=2) .OR. & + SIZE(p%WaveAcc,DIM=3) /= SIZE(InitOut%Waves2%WaveAcc2D,DIM=3) .OR. & + SIZE(p%WaveAcc,DIM=4) /= SIZE(InitOut%Waves2%WaveAcc2D,DIM=4) .OR. & + SIZE(p%WaveAcc,DIM=5) /= SIZE(InitOut%Waves2%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 + 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(p%WaveDynP,DIM=1) /= SIZE(InitOut%Waves2%WaveDynP2S,DIM=1) .OR. & + SIZE(p%WaveDynP,DIM=2) /= SIZE(InitOut%Waves2%WaveDynP2S,DIM=2) .OR. & + SIZE(p%WaveDynP,DIM=3) /= SIZE(InitOut%Waves2%WaveDynP2S,DIM=3) .OR. & + SIZE(p%WaveDynP,DIM=4) /= SIZE(InitOut%Waves2%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(InitOut%Waves2%WaveDynP2D,DIM=1)))//'x'// & + TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=2)))//'x'// & + TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=3)))//'x'// & + TRIM(Num2LStr(SIZE(InitOut%Waves2%WaveDynP2D,DIM=4))), & + ErrStat,ErrMsg,RoutineName) + CALL CleanUp() + RETURN + ELSE + p%WaveDynP = p%WaveDynP + InitOut%Waves2%WaveDynP2S + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveDynP0 = WaveDynP0 + WaveDynP2S0 + ENDIF + + ! Particle velocity -- sum frequency terms + IF ( SIZE(p%WaveVel,DIM=1) /= SIZE(InitOut%Waves2%WaveVel2S,DIM=1) .OR. & + SIZE(p%WaveVel,DIM=2) /= SIZE(InitOut%Waves2%WaveVel2S,DIM=2) .OR. & + SIZE(p%WaveVel,DIM=3) /= SIZE(InitOut%Waves2%WaveVel2S,DIM=3) .OR. & + SIZE(p%WaveVel,DIM=4) /= SIZE(InitOut%Waves2%WaveVel2S,DIM=4) .OR. & + SIZE(p%WaveVel,DIM=5) /= SIZE(InitOut%Waves2%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 + InitOut%Waves2%WaveVel2S + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveVel0 = WaveVel0 + WaveVel2S0 + ENDIF + + ! Particle velocity -- sum frequency terms + IF ( SIZE(p%WaveAcc,DIM=1) /= SIZE(InitOut%Waves2%WaveAcc2S,DIM=1) .OR. & + SIZE(p%WaveAcc,DIM=2) /= SIZE(InitOut%Waves2%WaveAcc2S,DIM=2) .OR. & + SIZE(p%WaveAcc,DIM=3) /= SIZE(InitOut%Waves2%WaveAcc2S,DIM=3) .OR. & + SIZE(p%WaveAcc,DIM=4) /= SIZE(InitOut%Waves2%WaveAcc2S,DIM=4) .OR. & + SIZE(p%WaveAcc,DIM=5) /= SIZE(InitOut%Waves2%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 + InitOut%Waves2%WaveAcc2S + !IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2S0 + 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: + p%Waves2%NWaveElev = 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%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 + + ! Define initialization-routine output here: + InitOut%Ver = SeaState_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 + InitOut%MSL2SWL = InputFileData%MSL2SWL + p%WtrDpth = InitOut%WtrDpth + + CALL SeaStOut_Init( SeaState_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 + + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + +!=============================================== + + IF ( InputFileData%UnSum > 0 ) THEN + versionStr = GetVersion(SeaState_ProgDesc) + WRITE( InputFileData%UnSum, '(A/)') versionStr + Delim = ' ' + IF (InputFileData%Waves%WaveMod /= 0 .AND. InputFileData%Waves%WaveMod /= 6) THEN + + WRITE( InputFileData%UnSum, '(1X,A61,F8.2,A4/)' ) 'The Mean Sea Level to Still Water Level (MSL2SWL) Offset is :',InitOut%MSL2SWL,' (m)' + ! WRITE( InputFileData%UnSum, '(1X,A/)' ) 'Note: The Water Depth and Z_Depth in this summary file are offset from the input file data by MSL2SWL' !, and Z coordinate(s) of the user-requested output location(s) + WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A8)' ) 'Water Density: ', InitOut%WtrDens, '(kg/m^3)' + WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A20,F8.2,A19)' ) 'Water Depth : ', p%WtrDpth - InitOut%MSL2SWL, '(m) relative to MSL; ', p%WtrDpth, '(m) relative to SWL' + WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A20,F8.2,A19/)' ) 'Grid Z_Depth : ', InputFileData%Z_Depth - InitOut%MSL2SWL, '(m) relative to MSL; ', InputFileData%Z_Depth, '(m) relative to SWL' + Frmt = '(1X,ES18.4e2,A,ES18.4e2,A,ES18.4e2,A,ES18.4e2)' + + ! Write Kinematics grid point locations + ! WRITE( InputFileData%UnSum, '(/)' ) + WRITE( InputFileData%UnSum, '(1X,A31/)' ) 'Wave Kinematics Grid Points (m)' + ! WRITE( InputFileData%UnSum, '(/)' ) + WRITE( InputFileData%UnSum, '(1X,A78)' ) ' Xi Yi Zi relative to MSL Z relative to SWL' + do i= 1, p%NGridPts + WRITE(InputFileData%UnSum,Frmt) InputFileData%Waves%WaveKinxi(i),Delim, InputFileData%Waves%WaveKinyi(i),Delim, InputFileData%Waves%WaveKinzi(i) - InitOut%MSL2SWL,Delim, InputFileData%Waves%WaveKinzi(i) + end do + + !WRITE( InputFileData%UnSum, '(1X,A11)' ) 'Y-locations' + !do i= 1, p%NGrid(2) + ! WRITE(InputFileData%UnSum,Frmt,ADVANCE='no') Delim, InputFileData%Waves%WaveKinyi(i) + !end do + !WRITE (InputFileData%UnSum,'()', IOSTAT=ErrStat) ! write the line return + !WRITE( InputFileData%UnSum, '(1X,A11)' ) 'Z-locations' + !do i= 1, p%NGrid(3) + ! WRITE(InputFileData%UnSum,Frmt,ADVANCE='no') Delim, InputFileData%Waves%WaveKinzi(i) + !end do + !WRITE (InputFileData%UnSum,'()', IOSTAT=ErrStat) ! write the line return + ! ! Write User-requested Wave Kinematics locations + WRITE( InputFileData%UnSum, '(/)' ) + if (p%NWaveKin > 0) then + WRITE( InputFileData%UnSum, '(1X,A51/)' ) 'User-Requested Wave Kinematics Output Locations (m)' + ! WRITE( InputFileData%UnSum, '(/)' ) + WRITE( InputFileData%UnSum, '(2X,A84)' ) 'Index Xi Yi Zi relative to MSL Z relative to SWL' + Frmt = '(1X,I5, 2X,ES18.4e2,A,ES18.4e2,A,ES18.4e2,A,ES18.4e2)' + do i= 1, p%NWaveKin + WRITE(InputFileData%UnSum,Frmt) i, InputFileData%WaveKinxi(i),Delim, InputFileData%WaveKinyi(i),Delim, InputFileData%WaveKinzi(i) - InitOut%MSL2SWL,Delim, InputFileData%WaveKinzi(i) + end do + + else + WRITE( InputFileData%UnSum, '(1X,A50)' ) 'No User-Requested Wave Kinematics Output Channels' + end if + + ! Write User-requested Wave Elevations + WRITE( InputFileData%UnSum, '(/)' ) + if (p%NWaveElev > 0) then + WRITE( InputFileData%UnSum, '(1X,A50/)' ) 'User-Requested Wave Elevation Output Locations (m)' + ! WRITE( InputFileData%UnSum, '(/)' ) + WRITE( InputFileData%UnSum, '(2X,A25)' ) 'Index Xi Yi' + Frmt = '(1X,I5, 2X, ES11.4e2,A,ES11.4e2)' + do i= 1, p%NWaveElev + WRITE(InputFileData%UnSum,Frmt) i, InputFileData%WaveElevxi(i), Delim, InputFileData%WaveElevyi(i) + end do + + else + WRITE( InputFileData%UnSum, '(1X,A50)' ) 'No User-Requested Wave Elevation Output Channels' + end if + if (p%NumOuts > 0) then + WRITE( InputFileData%UnSum, '(//1X,A/)' ) 'Requested Output Channels' + do i = 1, p%NumOuts + WRITE( InputFileData%UnSum, '(4X,A)' ) InputFileData%OutList(i) + end do + end if + + ! Write wave kinematics at (0,0) + WRITE( InputFileData%UnSum, '(/)' ) + WRITE( InputFileData%UnSum, '(1X,A28/)' ) 'Wave Kinematics DFT at (0,0)' + ! WRITE( InputFileData%UnSum, '(/)' ) + WRITE( InputFileData%UnSum, '(1X,A10,2X,A14,2X,A14,2X,A14,2X,A19,2X,A19)' ) & + ' index ', ' k ', ' Omega ', ' 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 + + + END IF + +!========================================== +!TODO: FIX ME + ! 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%SeaStSum ) THEN + CALL SeaStOut_CloseSum( InputFileData%UnSum, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + END IF + + + + + + ! Setup the 4D grid information for the Interpolatin Module + SeaSt_Interp_InitInp%n = (/p%NStepWave+1,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(2) = -InputFileData%X_HalfWidth + SeaSt_Interp_InitInp%pZero(3) = -InputFileData%Y_HalfWidth + SeaSt_Interp_InitInp%pZero(1) = 0.0 !Time + SeaSt_Interp_InitInp%pZero(4) = -InputFileData%Z_Depth ! zi + SeaSt_Interp_InitInp%Z_Depth = InputFileData%Z_Depth + call SeaState_Interp_Init(SeaSt_Interp_InitInp, p%sea_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 + + ! Destroy the local initialization data + CALL CleanUp() + +CONTAINS +!................................ + SUBROUTINE CleanUp() + + CALL SeaState_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 ) + + END SUBROUTINE CleanUp +!................................ +END SUBROUTINE SeaState_Init + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> This routine is called at the end of the simulation. +SUBROUTINE SeaState_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) + + TYPE(SeaState_InputType), INTENT(INOUT) :: u !< System inputs + TYPE(SeaState_ParameterType), INTENT(INOUT) :: p !< Parameters + TYPE(SeaState_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states + TYPE(SeaState_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states + TYPE(SeaState_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states + TYPE(SeaState_OtherStateType), INTENT(INOUT) :: OtherState !< Other/optimization states + TYPE(SeaState_OutputType), INTENT(INOUT) :: y !< System outputs + TYPE(SeaState_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 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 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 SeaState_DestroyInput( u, ErrStat, ErrMsg ) + + + ! Destroy the parameter data: + + CALL SeaState_DestroyParam( p, ErrStat, ErrMsg ) + + + ! Destroy the state data: + + CALL SeaState_DestroyContState( x, ErrStat, ErrMsg ) + CALL SeaState_DestroyDiscState( xd, ErrStat, ErrMsg ) + CALL SeaState_DestroyConstrState( z, ErrStat, ErrMsg ) + CALL SeaState_DestroyOtherState( OtherState, ErrStat, ErrMsg ) + + ! Destroy misc variables: + + CALL SeaState_DestroyMisc( m, ErrStat, ErrMsg ) + + ! Destroy the output data: + + CALL SeaState_DestroyOutput( y, ErrStat, ErrMsg ) + + +END SUBROUTINE SeaState_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 SeaState_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(SeaState_InputType), INTENT(INOUT ) :: Inputs(:) !< Inputs at InputTimes + REAL(DbKi), INTENT(IN ) :: InputTimes(:) !< Times in seconds associated with Inputs + TYPE(SeaState_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaState_ContinuousStateType), INTENT(INOUT) :: x !< Input: Continuous states at t; + !! Output: Continuous states at t + Interval + TYPE(SeaState_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at t; + !! Output: Discrete states at t + Interval + TYPE(SeaState_ConstraintStateType), INTENT(INOUT) :: z !< Input: Constraint states at t; + !! Output: Constraint states at t + Interval + TYPE(SeaState_OtherStateType), INTENT(INOUT) :: OtherState !< Other states: Other states at t; + !! Output: Other states at t + Interval + TYPE(SeaState_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 SeaState_UpdateStates + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> Routine for computing outputs, used in both loose and tight coupling. +SUBROUTINE SeaState_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) + + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + TYPE(SeaState_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(SeaState_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaState_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(SeaState_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(SeaState_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time + TYPE(SeaState_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time + TYPE(SeaState_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh con- + !! nectivity information does not have to be recalculated) + TYPE(SeaState_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, J ! Generic counters + + INTEGER(IntKi) :: ErrStat2 ! Error status of the operation (secondary error) + CHARACTER(ErrMsgLen) :: ErrMsg2 ! Error message if ErrStat2 /= ErrID_None + + + 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) :: WaveDynP(p%NWaveKin) + REAL(ReKi) :: AllOuts(MaxSeaStOutputs) + integer(IntKi) :: iBody, indxStart, indxEnd, iWAMIT ! Counters + real(ReKi) :: positionXYZ(3), positionXY(2) + + ! 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 + 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 + + !------------------------------------------------------------------- + ! 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, 'SeaState_CalcOutput' ) + !END IF + + + do i = 1, p%NWaveKin + positionXYZ = (/p%WaveKinxi(i),p%WaveKinyi(i),p%WaveKinzi(i)/) + call SeaState_Interp_Setup( Time, positionXYZ, p%sea_interp_p, m%sea_interp_m, ErrStat, ErrMsg ) + WaveVel(:,i) = SeaState_Interp_4D_Vec( p%WaveVel, m%sea_interp_m, ErrStat, ErrMsg ) + WaveAcc(:,i) = SeaState_Interp_4D_Vec( p%WaveAcc, m%sea_interp_m, ErrStat, ErrMsg ) + WaveDynP(i) = SeaState_Interp_4D ( p%WaveDynP, m%sea_interp_m, ErrStat, ErrMsg ) + + 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)/) + ! TODO: Why interp the WaveElev. Instead just add 1 + 2 if Waves2 is being used? + WaveElev(i) = SeaState_Interp_3D( Time, positionXY, p%WaveElev, p%sea_interp_p, ErrStat, ErrMsg ) + WaveElev1(i) = SeaState_Interp_3D( Time, positionXY, p%WaveElev1, p%sea_interp_p, ErrStat, ErrMsg ) + if (allocated(p%Waves2%WaveElev2)) then + WaveElev2(i) = SeaState_Interp_3D( Time, positionXY, p%Waves2%WaveElev2, p%sea_interp_p, ErrStat, ErrMsg ) + end if + + end do + + + + ! Write the SeaState-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 SeaStOut_WriteOutputs( m%LastOutTime, y, p, m%Decimate, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + END IF + + ! Map calculated results into the AllOuts Array + CALL SeaStOut_MapOutputs( Time, p, p%NWaveElev, WaveElev, WaveElev1, WaveElev2, p%NWaveKin, WaveVel, WaveAcc, WaveDynP, AllOuts, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_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 + ! + ! + ! + !END IF + + m%LastOutTime = Time + end if + +END SUBROUTINE SeaState_CalcOutput + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> Tight coupling routine for computing derivatives of continuous states +SUBROUTINE SeaState_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, ErrStat, ErrMsg ) + + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + TYPE(SeaState_InputType), INTENT(INOUT) :: u !< Inputs at Time (intent OUT only because we're copying the input mesh) + TYPE(SeaState_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaState_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(SeaState_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(SeaState_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time + TYPE(SeaState_OtherStateType), INTENT(IN ) :: OtherState !< Other states + TYPE(SeaState_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(SeaState_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 + integer(IntKi) :: iWAMIT ! loop counter + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CalcContStateDeriv' + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + + +END SUBROUTINE SeaState_CalcContStateDeriv + + + + +!---------------------------------------------------------------------------------------------------------------------------------- +!> Tight coupling routine for solving for the residual of the constraint state equations +SUBROUTINE SeaState_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m, z_residual, ErrStat, ErrMsg ) + + REAL(DbKi), INTENT(IN ) :: Time !< Current simulation time in seconds + TYPE(SeaState_InputType), INTENT(INOUT) :: u !< Inputs at Time (intent OUT only because we're copying the input mesh) + TYPE(SeaState_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaState_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time + TYPE(SeaState_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time + TYPE(SeaState_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time (possibly a guess) + TYPE(SeaState_OtherStateType), INTENT(IN ) :: OtherState !< Other/optimization states + TYPE(SeaState_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + TYPE(SeaState_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 SeaState_CalcConstrStateResidual + + + + + +!---------------------------------------------------------------------------------------------------------------------------------- +END MODULE SeaState +!********************************************************************************************************************************** diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt new file mode 100644 index 0000000000..5e543e5244 --- /dev/null +++ b/modules/seastate/src/SeaState.txt @@ -0,0 +1,159 @@ +################################################################################################################################### +################################################################################################################################### +# 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 +# +param SeaState/SeaState unused INTEGER MaxSeaStOutputs - 90 - "The maximum number of output channels supported by this module" - +# +typedef SeaState/SeaState SeaState_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 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 NUserOutputs - - - "Number of SeaState-level requested output channels" - +typedef ^ ^ CHARACTER(ChanLen) UserOutputs {:} - - "This should really be dimensioned with MaxOutPts" - +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 ^ ^ INTEGER UnSum - - - "File unit for the SeaState summary file [-1 = no summary file]" - +typedef ^ ^ CHARACTER(20) OutFmt - - - "Output format for numerical results" - +typedef ^ ^ CHARACTER(20) OutSFmt - - - "Output format for header strings" - + +typedef SeaState/SeaState 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 ^ ^ 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 Waves2_InitOutputType Waves2 - - - "Initialization output from the Waves2 module" - +typedef ^ ^ 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 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) +# +# +# ..... States .................................................................................................................... +# Define continuous (differentiable) states here: +typedef ^ ContinuousStateType Waves2_ContinuousStateType Waves2 - - - "continuous states from the waves2 module" - +# +# +# Define discrete (nondifferentiable) states here: +typedef ^ DiscreteStateType Waves2_DiscreteStateType Waves2 - - - "discrete states from the waves2 module" - +# +# +# Define constraint states here: +typedef ^ ConstraintStateType Waves2_ConstraintStateType Waves2 - - - "constraint states from the waves2 module" - +# +# +# Define any other states, including integer or logical states here: +typedef ^ OtherStateType Waves2_OtherStateType Waves2 - - - "OtherState information from the Waves2 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 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 ^ ^ SeaState_Interp_MiscVarType Sea_Interp_m - - - "misc var information from the SeaState Interpolation module" - +typedef ^ ^ Waves2_MiscVarType Waves2 - - - "misc var information from the Waves2 module" - +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: +# +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 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 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 WaveElev {*}{*}{*} - - "Total wave elevation" - +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 WaveElev0 {*} - - "Instantaneous elevation time-series of incident waves at the platform reference point" (meters) +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 ^ ^ OutParmType OutParam {:} - - "" - +typedef ^ ^ INTEGER NumOuts - - - "Number of SeaState module-level outputs (not the total number including sub-modules" - +typedef ^ ^ INTEGER NumTotalOuts - - - "Number of all requested outputs 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(ChanLen) Delim - - - "Delimiter string for outputs, defaults to tab-delimiters" - +typedef ^ ^ INTEGER UnOutFile - - - "File unit for the SeaState outputs" - +typedef ^ ^ INTEGER OutDec - - - "Write every OutDec time steps" - +typedef ^ ^ SeaState_Interp_ParameterType Sea_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 discrete states" - +# +# +# ..... Outputs ................................................................................................................... +# Define outputs that are contained on the mesh here: +typedef ^ OutputType ReKi WriteOutput {:} - - "Outputs to be written to the output file(s)" - +typedef ^ ^ Waves2_OutputType Waves2 - - - "Waves2 module outputs" - \ No newline at end of file diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 new file mode 100644 index 0000000000..138bfa2ac1 --- /dev/null +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -0,0 +1,717 @@ +!********************************************************************************************************************************** +! 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 :: 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(SeaState_InitInputType) :: InitInData ! Input data for initialization + type(SeaState_InitOutputType) :: InitOutData ! Output data from initialization + + type(SeaState_ContinuousStateType) :: x ! Continuous states + type(SeaState_ContinuousStateType) :: x_new ! Continuous states at updated time + type(SeaState_DiscreteStateType) :: xd ! Discrete states + type(SeaState_DiscreteStateType) :: xd_new ! Discrete states at updated time + type(SeaState_ConstraintStateType) :: z ! Constraint states + type(SeaState_ConstraintStateType) :: z_residual ! Residual of the constraint state equations (Z) + type(SeaState_OtherStateType) :: OtherState ! Other states + type(SeaState_MiscVarType) :: m ! Misc/optimization variables + + type(SeaState_ParameterType) :: p ! Parameters + !type(SeaState_InputType) :: u ! System inputs [OLD STYLE] + type(SeaState_InputType) :: u(NumInp) ! System inputs + type(SeaState_OutputType) :: y ! System outputs + + type(SeaState_ContinuousStateType) :: dxdt ! First time derivatives of the continuous states + + 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 ) + ! Obtain OpenFAST git commit hash + git_commit = QueryGitVersion() + ! Tell our users what they're running + call WrScr( ' Running '//TRIM( version%Name )//' a part of OpenFAST - '//TRIM(git_commit)//NewLine//' linked with '//TRIM( NWTC_Ver%Name )//NewLine ) + + ! 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%SeaStateInputFile + InitInData%OutRootName = drvrInitInp%OutRootName + InitInData%TMax = drvrInitInp%NSteps * drvrInitInp%TimeInterval + + ! 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 + + +!------------------------------------------------------------------------------------- +! 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 SeaState_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 SeaState_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 WrScr('The SeaState Module attempted to change timestep interval, but this is not allowed. The SeaState Module must use the Driver Interval.') + 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 SeaState_DestroyInitInput( InitInData, ErrStat, ErrMsg ) + call SeaState_DestroyInitOutput( InitOutData, ErrStat, ErrMsg ) + + + + + + + !............................................................................................................................... + ! 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 SeaState_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 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 + + + ! Close this module's echo file + + if ( EchoFlag ) then + close(UnEcho) + end if + + + +end SUBROUTINE CleanupEchoFile + +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 SeaState_DestroyInitInput( InitInData, errStat2, errMsg2 ) + call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'SeaSt_DvrCleanup' ) + + call SeaState_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 + + + 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 + + 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 /= ErrID_None ) then + ErrStat = ErrID_Fatal + close( UnIn ) + return + end if + + + call ReadCom( UnIn, FileName, 'SeaState 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, 'SeaState Driver input file header line 1', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat /= ErrID_None ) then + ErrMsg = ' Failed to read SeaState Driver input file header line 1.' + ErrStat = ErrID_Fatal + call CleanupEchoFile( InitInp%Echo, UnEchoLocal ) + close( UnIn ) + return + end if + + + call ReadCom( UnIn, FileName, 'SeaState Driver input file header line 2', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat /= ErrID_None ) then + ErrMsg = ' Failed to read SeaState 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 + + !------------------------------------------------------------------------------------------------- + ! SeaState section + !------------------------------------------------------------------------------------------------- + + ! Header + + call ReadCom( UnIn, FileName, 'SeaState 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%SeaStateInputFile, 'SeaStateInputFile', & + 'SeaState input filename', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat /= ErrID_None ) then + ErrMsg = ' Failed to read SeaStateInputFile parameter.' + ErrStat = ErrID_Fatal + call CleanupEchoFile( InitInp%Echo, UnEchoLocal ) + close( UnIn ) + return + end if + + + ! OutRootName + + call ReadVar ( UnIn, FileName, InitInp%OutRootName, 'OutRootName', & + 'SeaState 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 + + + ! NSteps + + call ReadVar ( UnIn, FileName, InitInp%NSteps, 'NSteps', & + 'Number of time steps in the SeaState 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 SeaState 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 + + + !------------------------------------------------------------------------------------------------- + !> ### 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 WaveElevSeriesFlag parameter.' + ErrStat = ErrID_Fatal + close( UnIn ) + return + end if + + + + + + call CleanupEchoFile( InitInp%Echo, UnEchoLocal ) + close( UnIn ) + +end SUBROUTINE ReadDriverInputFile + +SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, SeaState_p, ErrStat, ErrMsg) + + type(SeaSt_drvr_InitInput), intent( in ) :: drvrInitInp + type(SeaState_InitInputType), intent( in ) :: SeaStateInitInp + type(SeaState_InitOutputType), intent( in ) :: SeaStateInitOut ! Output data from initialization + type(SeaState_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 + 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 + + ! 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(MAXVAL(SeaState_p%WaveElev))) + write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# MinWaveElev = '//TRIM(Num2LStr(MINVAL(SeaState_p%WaveElev))) + 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) + write (WaveElevFileUn,WaveElevFmt, IOSTAT=ErrStatTmp ) xpos, ypos,SeaState_p%WaveElev(I,J,K) + 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..4cba91a727 --- /dev/null +++ b/modules/seastate/src/SeaState_Input.f90 @@ -0,0 +1,1409 @@ +!********************************************************************************************************************************** +! 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 + + implicit none + + contains + +!==================================================================================================== +SUBROUTINE PrintBadChannelWarning(NUserOutputs, UserOutputs , foundMask, ErrStat, ErrMsg ) +! The routine prints out warning messages if the user has requested invalid output channel names +! The errstat is set to ErrID_Warning if any element in foundMask is .FALSE. +!---------------------------------------------------------------------------------------------------- + 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. + LOGICAL, INTENT( IN ) :: foundMask (:) ! A mask indicating whether a user requested channel belongs to a module's output channels. + 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 + + ErrStat = ErrID_None + ErrMsg = '' + + DO I = 1, NUserOutputs + IF (.NOT. foundMask(I)) THEN + ErrMsg = ' A requested output channel is invalid' + CALL ProgWarn( 'The requested output channel is invalid: ' // UserOutputs(I) ) + ErrStat = ErrID_Warn + END IF + END DO + +END SUBROUTINE PrintBadChannelWarning + + !==================================================================================================== +subroutine SeaState_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(SeaState_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 :: i, j, k, count ! generic integer for counting + 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 SeaState echo file + character(1024) :: 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 = 'SeaState_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)//'.SEA.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 + +!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; + + !------------------------------------------------------------------------------------------------- + ! 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 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%UserOutputs, MaxSeaStOutputs, 'InputFileData%UserOutputs', ErrStat2, ErrMsg2 ) ! MaxUserOutputs is set in registry + if (Failed()) return; + + call ReadOutputListFromFileInfo( FileInfo_In, CurLine, InputFileData%UserOutputs, & + InputFileData%NUserOutputs, 'OutList', "List of user-requested output channels", 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 SeaState_ParseInput + +!==================================================================================================== +subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, ErrStat, ErrMsg ) +! This private subroutine verifies the input required for HydroDyn is correctly specified. +!---------------------------------------------------------------------------------------------------- + + + ! Passed variables + + type(SeaState_InitInputType), intent( in ) :: InitInp ! the SeaState data + type(SeaState_ParameterType), intent( inout ) :: p ! the SeaState parameter data + real(DbKi), intent( in ) :: Interval ! The DT supplied by the glue code/driver + type(SeaState_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 + 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(:) ! + logical :: TmpFileExist ! Temporary variable in checking the existance of an input file. + real(ReKi) :: l, xpos, ypos, zpos + real(ReKi) :: lvec(3) + logical, allocatable :: foundMask(:) + 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 + +!TODO: This is now a HD input check only + ! ! MSL2SWL - Mean sea level to still water level + ! + !if ( InputFileData%PotMod == 1 .AND. .NOT. EqualRealNos(InputFileData%MSL2SWL, 0.0_ReKi) ) then + ! call SetErrStat( ErrID_Fatal,'MSL2SWL must be 0 when PotMod = 1 (WAMIT).',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) + !TODO: I'm not sure we want to offset this grid depth value. Check with Jason. + InputFileData%Z_Depth = InputFileData%Z_Depth + InputFileData%MSL2SWL + 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 == 6) .AND. .NOT. EqualRealNos(InputFileData%MSL2SWL, 0.0_ReKi) ) then + call SetErrStat( ErrID_Fatal,'MSL2SWL must be 0 when WaveMod = 6.',ErrStat,ErrMsg,RoutineName) + return + end if + +!TODO: THese tests need to be done by HD GJH 7/11/21 +! 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 SeaState 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 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 + + 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 + +!TODO: THis needs to be done by HD : Does that mean the WvLowCOff and WvHiCOff need to be InitOut now? + ! ! 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 + +!TODO: This needs to be handled by HD + ! ! 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) + 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 + + !TODO: Move these to HD + !.................. + ! check for linearization + !.................. + !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 + ! + ! if ( (InputFileData%WAMIT%ExctnMod == 1) ) then + ! call SetErrStat( ErrID_Fatal, 'Cannot set wave excitation model to DFT for linearization. Set ExctnMod=0 or 2.', ErrStat, ErrMsg, RoutineName ) + ! end if + ! + ! if ( InputFileData%WAMIT%RdtnMod == 1 ) then + ! call SetErrStat( ErrID_Fatal, 'Cannot set wave radiation model to convolution for linearization. Set RdtnMod=0 or 2.', ErrStat, ErrMsg, RoutineName ) + ! end if + ! + ! if ( InputFileData%WAMIT2%MnDrift /= 0 ) then + ! call SetErrStat( ErrID_Fatal, 'Mean-drift 2nd-order forces cannot be used for linearization. Set MnDrift=0.', ErrStat, ErrMsg, RoutineName ) + ! end if + ! + ! if ( InputFileData%WAMIT2%NewmanApp /= 0 ) then + ! call SetErrStat( ErrID_Fatal, "Mean- and slow-drift 2nd-order forces computed with Newman's approximation cannot be used for linearization. Set NewmanApp=0.", ErrStat, ErrMsg, RoutineName ) + ! end if + ! + ! if ( InputFileData%WAMIT2%DiffQTF /= 0 ) then + ! call SetErrStat( ErrID_Fatal, 'Full difference-frequency 2nd-order forces computed with full QTF cannot be used for linearization. Set DiffQTF=0.', ErrStat, ErrMsg, RoutineName ) + ! end if + ! + ! if ( InputFileData%WAMIT2%SumQTF /= 0 ) then + ! call SetErrStat( ErrID_Fatal, 'Full summation-frequency 2nd-order forces computed with full QTF cannot be used for linearization. Set SumQTF=0.', ErrStat, ErrMsg, RoutineName ) + ! end if + ! + !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 + + + ! OutList - list of requested parameters to output to a file + + + !---------------------------------------------------------- + ! Output List + !---------------------------------------------------------- + + ! First we need to extract module-specific output lists from the user-input list. + ! Any unidentified channels will be attached to the HydroDyn module's output list. + if ( InputFileData%NUserOutputs > 0 ) then + ALLOCATE ( foundMask(InputFileData%NUserOutputs) , STAT = ErrStat2 ) + if ( ErrStat2 /= ErrID_None ) then + call SetErrStat( ErrID_Fatal,'Error allocating space for temporary array: foundMask in the HydroDynInput_GetInput subroutine.',ErrStat,ErrMsg,RoutineName) + + return + end if + foundMask = .FALSE. + + ! Attach remaining items to the SeaState list + !foundMask = .FALSE. + call Allocary(InputFileData%OutList, InputFileData%NUserOutputs, "InputFileData%OutList", ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + InputFileData%NumOuts = SeaStOut_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) + + end if + ! Now that we have the sub-lists organized, lets do some additional validation. + + + + + + !---------------------------------------------------------- + ! 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 + 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). + + + + +!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 + + ALLOCATE ( InputFileData%Current%WaveKinzi(p%NGridPts), STAT = ErrStat2 ) + if ( ErrStat2 /= ErrID_None ) then + call SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinzi array.',ErrStat,ErrMsg,RoutineName) + return + end if + + +!TODO: This is now set with the grid points? GJH 7/11/21 + ! Establish the number and locations where the wave kinematics will be computed + InputFileData%Waves%NWaveKin = p%NGridPts ! Number of points where the incident wave kinematics will be computed (-) + InputFileData%Waves%NWaveElev = p%NGrid(1)*p%NGrid(2) ! Number of XY grid points where the wave elevations are computed + ALLOCATE ( InputFileData%Waves%WaveKinxi(p%NGridPts), 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(p%NGridPts), 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(p%NGridPts), STAT = ErrStat2 ) + if ( ErrStat2 /= ErrID_None ) then + call SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinzi array.',ErrStat,ErrMsg,RoutineName) + return + end if + + ALLOCATE ( InputFileData%Waves%WaveElevxi(InputFileData%Waves%NWaveElev), STAT = ErrStat2 ) + if ( ErrStat2 /= ErrID_None ) then + call SetErrStat( ErrID_Fatal,'Error allocating space for WaveElevxi array.',ErrStat,ErrMsg,RoutineName) + return + end if + ALLOCATE ( InputFileData%Waves%WaveElevyi(InputFileData%Waves%NWaveElev), STAT = ErrStat2 ) + if ( ErrStat2 /= ErrID_None ) then + call SetErrStat( ErrID_Fatal,'Error allocating space for WaveElevyi array.',ErrStat,ErrMsg,RoutineName) + return + end if + + ! Generate grid points + p%deltaGrid(1) = InputFileData%X_HalfWidth/(InputFileData%NX) + p%deltaGrid(2)= InputFileData%Y_HalfWidth/(InputFileData%NY) + 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 + print*,zpos + 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%WaveKinxi(count) = xpos ! xi-coordinates for points where the incident wave kinematics will be computed; + InputFileData%Waves%WaveKinyi(count) = ypos ! yi-coordinates for points where the incident wave kinematics will be computed; + + InputFileData%Waves%WaveKinzi(count) = zpos ! zi-coordinates for points where the incident wave kinematics will be computed; + InputFileData%Current%WaveKinzi(count) = InputFileData%Waves%WaveKinzi(count) + + if ( k == 0 ) then + InputFileData%Waves%WaveElevxi(count) = xpos ! xi-coordinates for points where the incident wave kinematics will be computed; + InputFileData%Waves%WaveElevyi(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%NWaveKin = InputFileData%Waves%NWaveKin ! 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%UnSum = InputFileData%UnSum + InputFileData%Waves2%WtrDpth = InputFileData%Waves%WtrDpth + InputFileData%Waves2%WaveStMod = InputFileData%Waves%WaveStMod + InputFileData%Waves2%NGrid = p%NGrid + 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 + + 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 SeaStateInput_ProcessInitData + +end module SeaState_Input \ No newline at end of file diff --git a/modules/seastate/src/SeaState_Interp_Types.f90 b/modules/seastate/src/SeaState_Interp_Types.f90 new file mode 100644 index 0000000000..ad581bdc43 --- /dev/null +++ b/modules/seastate/src/SeaState_Interp_Types.f90 @@ -0,0 +1,771 @@ +!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 +! ========= SeaState_Interp_InitInputType ======= + TYPE, PUBLIC :: SeaState_Interp_InitInputType + INTEGER(IntKi) , DIMENSION(1:4) :: n !< number of grid points in the x, y, z, and t directions [-] + REAL(ReKi) , DIMENSION(1:4) :: delta !< size between 2 consecutive grid points in each grid direction [m,m,m,s] + 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 SeaState_Interp_InitInputType +! ======================= +! ========= SeaState_Interp_InitOutputType ======= + TYPE, PUBLIC :: SeaState_Interp_InitOutputType + TYPE(ProgDesc) :: Ver !< Version information of this submodule [-] + END TYPE SeaState_Interp_InitOutputType +! ======================= +! ========= SeaState_Interp_MiscVarType ======= + TYPE, PUBLIC :: SeaState_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 [-] + END TYPE SeaState_Interp_MiscVarType +! ======================= +! ========= SeaState_Interp_ParameterType ======= + TYPE, PUBLIC :: SeaState_Interp_ParameterType + INTEGER(IntKi) , DIMENSION(1:4) :: n !< number of evenly-spaced grid points in the x, y, z, and t directions [-] + REAL(ReKi) , DIMENSION(1:4) :: delta !< size between 2 consecutive grid points in each grid direction [m,m,m,s] + 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 SeaState_Interp_ParameterType +! ======================= +CONTAINS + SUBROUTINE SeaState_Interp_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_Interp_InitInputType), INTENT(IN) :: SrcInitInputData + TYPE(SeaState_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 = 'SeaState_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 SeaState_Interp_CopyInitInput + + SUBROUTINE SeaState_Interp_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) + TYPE(SeaState_Interp_InitInputType), INTENT(INOUT) :: InitInputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_DestroyInitInput' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + END SUBROUTINE SeaState_Interp_DestroyInitInput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_Interp_PackInitInput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_Interp_UnPackInitInput + + SUBROUTINE SeaState_Interp_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_Interp_InitOutputType), INTENT(IN) :: SrcInitOutputData + TYPE(SeaState_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 = 'SeaState_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 SeaState_Interp_CopyInitOutput + + SUBROUTINE SeaState_Interp_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) + TYPE(SeaState_Interp_InitOutputType), INTENT(INOUT) :: InitOutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_DestroyInitOutput' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL NWTC_Library_Destroyprogdesc( InitOutputData%Ver, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_Interp_DestroyInitOutput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_Interp_PackInitOutput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_Interp_UnPackInitOutput + + SUBROUTINE SeaState_Interp_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_Interp_MiscVarType), INTENT(IN) :: SrcMiscData + TYPE(SeaState_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 = 'SeaState_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 + END SUBROUTINE SeaState_Interp_CopyMisc + + SUBROUTINE SeaState_Interp_DestroyMisc( MiscData, ErrStat, ErrMsg ) + TYPE(SeaState_Interp_MiscVarType), INTENT(INOUT) :: MiscData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_DestroyMisc' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + END SUBROUTINE SeaState_Interp_DestroyMisc + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + 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 + END SUBROUTINE SeaState_Interp_PackMisc + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + END SUBROUTINE SeaState_Interp_UnPackMisc + + SUBROUTINE SeaState_Interp_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_Interp_ParameterType), INTENT(IN) :: SrcParamData + TYPE(SeaState_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 = 'SeaState_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 SeaState_Interp_CopyParam + + SUBROUTINE SeaState_Interp_DestroyParam( ParamData, ErrStat, ErrMsg ) + TYPE(SeaState_Interp_ParameterType), INTENT(INOUT) :: ParamData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_DestroyParam' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + END SUBROUTINE SeaState_Interp_DestroyParam + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_Interp_PackParam + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_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..0001c2c672 --- /dev/null +++ b/modules/seastate/src/SeaState_Output.f90 @@ -0,0 +1,1025 @@ +!********************************************************************************************************************************** +! 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 + IMPLICIT NONE + + PRIVATE + +! =================================================================================================== +! 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 26-Jul-2021 14:11:49. + + + ! Parameters related to output length (number of characters allowed in the output data headers): + + INTEGER(IntKi), PARAMETER :: OutStrLenM1 = ChanLen - 1 + + + ! 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 + + + ! The maximum number of output channels which can be output by the code. + INTEGER(IntKi), PARAMETER :: MaxOutPts = 90 + +!End of code generated by Matlab script +! =================================================================================================== + + + REAL(ReKi) :: AllOuts(MaxSeaStOutputs) ! Array of all possible outputs + + + + 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/) + + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(90) = (/ & ! 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 ","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(90) = (/ & ! 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 , 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(90) = (/ & ! 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)","(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) "/) + + + + ! ..... Public Subroutines ................................................................................................... + PUBLIC :: SeaStOut_CloseSum + PUBLIC :: SeaStOut_OpenSum + PUBLIC :: SeaStOut_MapOutputs + PUBLIC :: SeaStOut_WriteOutputs + PUBLIC :: SeaStOut_OpenOutput + PUBLIC :: SeaStOut_CloseOutput + PUBLIC :: SeaStOut_GetChannels + PUBLIC :: SeaStOut_Init + PUBLIC :: SeaStOut_WriteWvKinFiles + + CONTAINS + + + +!==================================================================================================== +SUBROUTINE SeaStOut_CloseSum( UnSum, ErrStat, ErrMsg ) + + + ! Passed variables + + INTEGER, INTENT( IN ) :: UnSum ! the unit number for the SeaState summary file + 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 + LOGICAL :: Err ! determines if an error exists + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + Err = .FALSE. + + ! Write any closing information in the summary file + + IF ( UnSum > 0 ) THEN + WRITE (UnSum,'(/,A/)', IOSTAT=ErrStat) 'This summary file was closed on '//CurDate()//' at '//CurTime()//'.' + IF (ErrStat /= 0) THEN + Err = .TRUE. + ErrMsg = 'Problem writing to summary file' + END IF + END IF + + ! Close the file + + CLOSE( UnSum, IOSTAT=ErrStat ) + IF (ErrStat /= 0) THEN + Err = .TRUE. + ErrMsg = 'Problem closing summary file' + END IF + + IF ( Err ) ErrStat = ErrID_Fatal + + +END SUBROUTINE SeaStOut_CloseSum + +!==================================================================================================== +SUBROUTINE SeaStOut_OpenSum( UnSum, SummaryName, SeaSt_Prog, ErrStat, ErrMsg ) + + + ! Passed variables + + INTEGER, INTENT( OUT ) :: UnSum ! the unit number for the SeaState summary file + CHARACTER(*), INTENT( IN ) :: SummaryName ! the name of the SeaState summary file + TYPE(ProgDesc), INTENT( IN ) :: SeaSt_Prog ! the name/version/date of the SeaState program + INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + CHARACTER(*), INTENT( OUT ) :: ErrMsg ! Error message if ErrStat /= ErrID_None + + + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + + + CALL GetNewUnit( UnSum ) + + CALL OpenFOutFile ( UnSum, SummaryName, ErrStat, ErrMsg ) + IF (ErrStat >=AbortErrLev) RETURN + + + ! Write the summary file header + + WRITE (UnSum,'(/,A/)', IOSTAT=ErrStat) 'This summary file was generated by '//TRIM( SeaSt_Prog%Name )//& + ' '//TRIM( SeaSt_Prog%Ver )//' on '//CurDate()//' at '//CurTime()//'.' + +END SUBROUTINE SeaStOut_OpenSum + +!==================================================================================================== +SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, NNodes, NWaveElev, nodeInWater, WaveElev, WaveKinzi, & + WaveTime, WaveVel, WaveAcc, WaveDynP, ErrStat, ErrMsg ) +!TODO: Modifiy for writing grid instead of nodes + ! 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 + 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( SeaSt_Prog%Name )//& + ' '//TRIM( SeaSt_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( SeaSt_Prog%Name )//& + ' '//TRIM( SeaSt_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 SeaStOut_WriteWvKinFiles + +!==================================================================================================== +subroutine SeaStOut_MapOutputs( CurrentTime, p, NWaveElev, WaveElev, WaveElev1, WaveElev2, NWaveKin, WaveVel, WaveAcc, 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 SeaState_CalcOutput() at each time step. +!---------------------------------------------------------------------------------------------------- + REAL(DbKi), intent( in ) :: CurrentTime ! Current simulation time in seconds + TYPE(SeaState_ParameterType), intent( in ) :: p ! SeaState's parameter 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) + INTEGER, intent( in ) :: NWaveKin ! Number of wave elevation locations to output + REAL(ReKi), 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(ReKi), 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(ReKi), 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(MaxSeaStOutputs) + 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) + + 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,NWaveElev + AllOuts(WaveElevi(I)) = WaveElev(I) + AllOuts(WaveElevi1(I))= WaveElev1(I) + AllOuts(WaveElevi2(I))= WaveElev2(I) + end do + + do I=1,NWaveKin + AllOuts(FVel(:,I)) = WaveVel(1:3,I) + AllOuts(FAcc(:,I))= WaveAcc(1:3,I) + AllOuts(FDynP(I))= WaveDynP(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(SeaState_OutputType), INTENT( INOUT ) :: y ! SeaState's output data + TYPE(SeaState_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%NumTotalOuts > 0 ) THEN + Frmt = '('//TRIM(Int2LStr(p%NumTotalOuts))//'(:,A,'//TRIM( p%OutFmt )//'))' + WRITE(p%UnOutFile,Frmt,ADVANCE='no') ( p%Delim, y%WriteOutput(I) , I=1,p%NumTotalOuts ) + END IF + + WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) ! write the line return + + ELSE + Decimate = Decimate + 1 + ENDIF + + RETURN + +END SUBROUTINE SeaStOut_WriteOutputs + +!==================================================================================================== +SUBROUTINE SeaStOut_Init( SeaState_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 ) :: SeaState_ProgDesc ! + CHARACTER(1024), INTENT( IN ) :: OutRootName ! The name of the output file + TYPE(SeaState_InputFile ), INTENT( IN ) :: InputFileData ! data needed to initialize the output module + TYPE(SeaState_OutputType), INTENT( INOUT ) :: y ! This module's internal data + TYPE(SeaState_ParameterType), INTENT( INOUT ) :: p + TYPE(SeaState_MiscVarType), INTENT( INOUT ) :: m + TYPE(SeaState_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 +! 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 :: hasWaves2Outs ! Are there any WAMIT-related outputs + + + + + + !------------------------------------------------------------------------------------------------- + ! Initialize local variables + !------------------------------------------------------------------------------------------------- + + + 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 /= MaxSeaStOutputs ) then + call SetErrStat(ErrID_Fatal, ' SeaState 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 SeaState.txt registry '// & + 'file.', ErrStat, ErrMsg, 'SeaStOUT_Init') + return + endif + + + !------------------------------------------------------------------------------------------------- + ! Check that the variables in OutList are valid + !------------------------------------------------------------------------------------------------- + + + CALL SeaStOUT_ChkOutLst( InputFileData%OutList(1:p%NumOuts), y, p, ErrStat, ErrMsg ) + IF ( ErrStat /= 0 ) RETURN + + ! Aggregate the sub-module initialization outputs for the glue code + + 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 + + + ! Allocate the aggregate arrays + + ALLOCATE ( InitOut%WriteOutputHdr ( p%NumTotalOuts ) , STAT=ErrStat ) + IF ( ErrStat /= 0 ) THEN + ErrMsg = ' Error allocating memory for the WriteOutputHdr array.' + ErrStat = ErrID_Fatal + RETURN + END IF + + ALLOCATE ( InitOut%WriteOutputUnt ( p%NumTotalOuts ) , STAT=ErrStat ) + IF ( ErrStat /= 0 ) THEN + ErrMsg = ' Error allocating memory for the WriteOutputUnt array.' + ErrStat = ErrID_Fatal + RETURN + END IF + + ALLOCATE ( y%WriteOutput ( p%NumTotalOuts ) , 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 ! bjj added this only so the Intel Inspector wouldn't complain about uninitialized memory access (was harmless) + + + ! 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( SeaState_ProgDesc, OutRootName, p, InitOut, ErrStat, ErrMsg ) + IF (ErrStat >= AbortErrLev ) RETURN + END IF + + + + RETURN + +END SUBROUTINE SeaStOUT_Init + +!==================================================================================================== +SUBROUTINE SeaStOut_OpenOutput( SeaState_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 ) :: SeaState_ProgDesc + CHARACTER(1024), INTENT( IN ) :: OutRootName ! Root name for the output file + TYPE(SeaState_ParameterType), INTENT( INOUT ) :: p + TYPE(SeaState_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)//'.SeaSt.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(SeaState_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 ) + 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 ) + END IF + + + WRITE (p%UnOutFile,'()', IOSTAT=ErrStat) ! write the line return + + + + + END IF ! there are any requested outputs + + RETURN + +END SUBROUTINE SeaStOut_OpenOutput + +!==================================================================================================== +FUNCTION SeaStOut_GetChannels ( 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 Morison 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 WAMIT 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 SeaStOut_GetChannels ! 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 :: CheckOutListAgain + LOGICAL :: newFoundMask (NUserOutputs) ! A mask indicating whether a user requested channel belongs to a module's output channels. + ! Initialize ErrStat + + ErrStat = ErrID_None + ErrMsg = "" + SeaStOut_GetChannels = 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. + SeaStOut_GetChannels = SeaStOut_GetChannels + 1 + + !ELSE + ! foundMask(I) = .FALSE. + END IF + END IF +END DO + +IF ( SeaStOut_GetChannels > 0 ) THEN + + count = 1 + + IF ( ErrStat /= 0 ) THEN + ErrMsg = ' Error allocating memory for the OutList array in the GetSeaStateChannels 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 SeaStOut_GetChannels + +!==================================================================================================== +SUBROUTINE SeaStOut_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 SeaState 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(SeaState_OutputType), INTENT( INOUT ) :: y ! This module's internal data + TYPE(SeaState_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(MaxSeaStOutputs) ! 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 SeaState OutParam array." + RETURN + ELSE + ErrStat = ErrID_None + ErrMsg = "" + ENDIF + + InvalidOutput = .FALSE. + + + ! 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) + 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:OutStrLenM1), ValidParamAry ) + + + ! If it started with an "M" (CheckOutListAgain) we didn't find the value in our list (Indx < 1) + + 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:OutStrLenM1), ValidParamAry ) + END IF + + + 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)%Units = "INVALID" + p%OutParam(I)%SignM = 0 + ELSE + 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)%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) + END IF + + END DO + + RETURN + +END SUBROUTINE SeaStOut_ChkOutLst + + +!==================================================================================================== +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(SeaState_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 + LOGICAL :: Err + + + !------------------------------------------------------------------------------------------------- + ! Initialize error information + !------------------------------------------------------------------------------------------------- + + + ErrStat = ErrID_None + ErrMsg = "" + + Err = .FALSE. + + ! 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 = ErrStat ) + IF ( ErrStat /= 0 ) Err = .TRUE. + + END IF + + !------------------------------------------------------------------------------------------------- + ! Make sure ErrStat is non-zero if an error occurred + !------------------------------------------------------------------------------------------------- + IF ( Err ) THEN + ErrStat = ErrID_Fatal + ErrMsg = ' Error closing SeaState output file.' + END IF + + RETURN + +END SUBROUTINE SeaStOut_CloseOutput +!==================================================================================================== + + +!==================================================================================================== +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..60f0703b81 --- /dev/null +++ b/modules/seastate/src/SeaState_Types.f90 @@ -0,0 +1,5303 @@ +!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 + INTEGER(IntKi), PUBLIC, PARAMETER :: MaxSeaStOutputs = 90 ! The maximum number of output channels supported by this module [-] +! ========= SeaState_InputFile ======= + TYPE, PUBLIC :: SeaState_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 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) :: NUserOutputs !< Number of SeaState-level requested output channels [-] + CHARACTER(ChanLen) , DIMENSION(:), ALLOCATABLE :: UserOutputs !< This should really be dimensioned with MaxOutPts [-] + 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] [-] + INTEGER(IntKi) :: UnSum !< File unit for the SeaState summary file [-1 = no summary file] [-] + CHARACTER(20) :: OutFmt !< Output format for numerical results [-] + CHARACTER(20) :: OutSFmt !< Output format for header strings [-] + END TYPE SeaState_InputFile +! ======================= +! ========= SeaState_InitInputType ======= + TYPE, PUBLIC :: SeaState_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,-] + 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 SeaState_InitInputType +! ======================= +! ========= SeaState_InitOutputType ======= + TYPE, PUBLIC :: SeaState_InitOutputType + TYPE(Waves2_InitOutputType) :: Waves2 !< Initialization output from the Waves2 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 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)] + END TYPE SeaState_InitOutputType +! ======================= +! ========= SeaState_ContinuousStateType ======= + TYPE, PUBLIC :: SeaState_ContinuousStateType + TYPE(Waves2_ContinuousStateType) :: Waves2 !< continuous states from the waves2 module [-] + END TYPE SeaState_ContinuousStateType +! ======================= +! ========= SeaState_DiscreteStateType ======= + TYPE, PUBLIC :: SeaState_DiscreteStateType + TYPE(Waves2_DiscreteStateType) :: Waves2 !< discrete states from the waves2 module [-] + END TYPE SeaState_DiscreteStateType +! ======================= +! ========= SeaState_ConstraintStateType ======= + TYPE, PUBLIC :: SeaState_ConstraintStateType + TYPE(Waves2_ConstraintStateType) :: Waves2 !< constraint states from the waves2 module [-] + END TYPE SeaState_ConstraintStateType +! ======================= +! ========= SeaState_OtherStateType ======= + TYPE, PUBLIC :: SeaState_OtherStateType + TYPE(Waves2_OtherStateType) :: Waves2 !< OtherState information from the Waves2 module [-] + END TYPE SeaState_OtherStateType +! ======================= +! ========= SeaState_MiscVarType ======= + TYPE, PUBLIC :: SeaState_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(SeaState_Interp_MiscVarType) :: Sea_Interp_m !< misc var information from the SeaState Interpolation module [-] + TYPE(Waves2_MiscVarType) :: Waves2 !< misc var information from the Waves2 module [-] + TYPE(Waves2_InputType) :: u_Waves2 !< Waves2 module inputs [-] + END TYPE SeaState_MiscVarType +! ======================= +! ========= SeaState_ParameterType ======= + TYPE, PUBLIC :: SeaState_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] + INTEGER(IntKi) :: NStepWave !< Number of 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 :: WaveElev => NULL() !< Total wave elevation [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [-] + 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 :: 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)] + 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 [-] + TYPE(OutParmType) , DIMENSION(:), ALLOCATABLE :: OutParam !< [-] + INTEGER(IntKi) :: NumOuts !< Number of SeaState module-level outputs (not the total number including sub-modules [-] + INTEGER(IntKi) :: NumTotalOuts !< Number of all requested outputs 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(ChanLen) :: Delim !< Delimiter string for outputs, defaults to tab-delimiters [-] + INTEGER(IntKi) :: UnOutFile !< File unit for the SeaState outputs [-] + INTEGER(IntKi) :: OutDec !< Write every OutDec time steps [-] + TYPE(SeaState_Interp_ParameterType) :: Sea_Interp_p !< parameter information from the SeaState Interpolation module [-] + END TYPE SeaState_ParameterType +! ======================= +! ========= SeaState_InputType ======= + TYPE, PUBLIC :: SeaState_InputType + REAL(SiKi) :: DummyInput !< Remove this variable if you have discrete states [-] + END TYPE SeaState_InputType +! ======================= +! ========= SeaState_OutputType ======= + TYPE, PUBLIC :: SeaState_OutputType + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WriteOutput !< Outputs to be written to the output file(s) [-] + TYPE(Waves2_OutputType) :: Waves2 !< Waves2 module outputs [-] + END TYPE SeaState_OutputType +! ======================= +CONTAINS + SUBROUTINE SeaState_CopyInputFile( SrcInputFileData, DstInputFileData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_InputFile), INTENT(IN) :: SrcInputFileData + TYPE(SeaState_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 = 'SeaState_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%NUserOutputs = SrcInputFileData%NUserOutputs +IF (ALLOCATED(SrcInputFileData%UserOutputs)) THEN + i1_l = LBOUND(SrcInputFileData%UserOutputs,1) + i1_u = UBOUND(SrcInputFileData%UserOutputs,1) + IF (.NOT. ALLOCATED(DstInputFileData%UserOutputs)) THEN + ALLOCATE(DstInputFileData%UserOutputs(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstInputFileData%UserOutputs.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInputFileData%UserOutputs = SrcInputFileData%UserOutputs +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%UnSum = SrcInputFileData%UnSum + DstInputFileData%OutFmt = SrcInputFileData%OutFmt + DstInputFileData%OutSFmt = SrcInputFileData%OutSFmt + END SUBROUTINE SeaState_CopyInputFile + + SUBROUTINE SeaState_DestroyInputFile( InputFileData, ErrStat, ErrMsg ) + TYPE(SeaState_InputFile), INTENT(INOUT) :: InputFileData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyInputFile' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves_DestroyInitInput( InputFileData%Waves, ErrStat, ErrMsg ) + CALL Waves2_DestroyInitInput( InputFileData%Waves2, ErrStat, ErrMsg ) + CALL Current_DestroyInitInput( InputFileData%Current, ErrStat, ErrMsg ) +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%UserOutputs)) THEN + DEALLOCATE(InputFileData%UserOutputs) +ENDIF +IF (ALLOCATED(InputFileData%OutList)) THEN + DEALLOCATE(InputFileData%OutList) +ENDIF + END SUBROUTINE SeaState_DestroyInputFile + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 ! NUserOutputs + Int_BufSz = Int_BufSz + 1 ! UserOutputs allocated yes/no + IF ( ALLOCATED(InData%UserOutputs) ) THEN + Int_BufSz = Int_BufSz + 2*1 ! UserOutputs upper/lower bounds for each dimension + Int_BufSz = Int_BufSz + SIZE(InData%UserOutputs)*LEN(InData%UserOutputs) ! UserOutputs + 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 ! UnSum + 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%NUserOutputs + Int_Xferred = Int_Xferred + 1 + IF ( .NOT. ALLOCATED(InData%UserOutputs) ) 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%UserOutputs,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%UserOutputs,1) + Int_Xferred = Int_Xferred + 2 + + DO i1 = LBOUND(InData%UserOutputs,1), UBOUND(InData%UserOutputs,1) + DO I = 1, LEN(InData%UserOutputs) + IntKiBuf(Int_Xferred) = ICHAR(InData%UserOutputs(i1)(I:I), IntKi) + Int_Xferred = Int_Xferred + 1 + END DO ! I + 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 + IntKiBuf(Int_Xferred) = InData%UnSum + 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 SeaState_PackInputFile + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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%NUserOutputs = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! UserOutputs 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%UserOutputs)) DEALLOCATE(OutData%UserOutputs) + ALLOCATE(OutData%UserOutputs(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%UserOutputs.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + DO i1 = LBOUND(OutData%UserOutputs,1), UBOUND(OutData%UserOutputs,1) + DO I = 1, LEN(OutData%UserOutputs) + OutData%UserOutputs(i1)(I:I) = CHAR(IntKiBuf(Int_Xferred)) + Int_Xferred = Int_Xferred + 1 + END DO ! I + 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 + OutData%UnSum = 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 + END SUBROUTINE SeaState_UnPackInputFile + + SUBROUTINE SeaState_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_InitInputType), INTENT(IN) :: SrcInitInputData + TYPE(SeaState_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 = 'SeaState_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%PtfmLocationX = SrcInitInputData%PtfmLocationX + DstInitInputData%PtfmLocationY = SrcInitInputData%PtfmLocationY + END SUBROUTINE SeaState_CopyInitInput + + SUBROUTINE SeaState_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) + TYPE(SeaState_InitInputType), INTENT(INOUT) :: InitInputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyInitInput' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL NWTC_Library_Destroyfileinfotype( InitInputData%PassedFileData, ErrStat, ErrMsg ) +IF (ALLOCATED(InitInputData%WaveElevXY)) THEN + DEALLOCATE(InitInputData%WaveElevXY) +ENDIF + END SUBROUTINE SeaState_DestroyInitInput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + 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 + 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 + ReKiBuf(Re_Xferred) = InData%PtfmLocationX + Re_Xferred = Re_Xferred + 1 + ReKiBuf(Re_Xferred) = InData%PtfmLocationY + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE SeaState_PackInitInput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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%PtfmLocationX = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + OutData%PtfmLocationY = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END SUBROUTINE SeaState_UnPackInitInput + + SUBROUTINE SeaState_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_InitOutputType), INTENT(IN) :: SrcInitOutputData + TYPE(SeaState_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) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyInitOutput' +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_CopyInitOutput( SrcInitOutputData%Waves2, DstInitOutputData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +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%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 + END SUBROUTINE SeaState_CopyInitOutput + + SUBROUTINE SeaState_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) + TYPE(SeaState_InitOutputType), INTENT(INOUT) :: InitOutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyInitOutput' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_DestroyInitOutput( InitOutputData%Waves2, ErrStat, ErrMsg ) +IF (ALLOCATED(InitOutputData%WriteOutputHdr)) THEN + DEALLOCATE(InitOutputData%WriteOutputHdr) +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, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_DestroyInitOutput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 ! 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 + 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 ! 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 + 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 + 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_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(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%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%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) + 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 + END SUBROUTINE SeaState_PackInitOutput + + SUBROUTINE SeaState_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(SeaState_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) :: ErrStat2 + CHARACTER(ErrMsgLen) :: ErrMsg2 + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_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 Waves2_UnpackInitOutput( 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 ! 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 ! 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 + 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 + END SUBROUTINE SeaState_UnPackInitOutput + + SUBROUTINE SeaState_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_ContinuousStateType), INTENT(IN) :: SrcContStateData + TYPE(SeaState_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 = 'SeaState_CopyContState' +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_CopyContState( SrcContStateData%Waves2, DstContStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaState_CopyContState + + SUBROUTINE SeaState_DestroyContState( ContStateData, ErrStat, ErrMsg ) + TYPE(SeaState_ContinuousStateType), INTENT(INOUT) :: ContStateData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyContState' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_DestroyContState( ContStateData%Waves2, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_DestroyContState + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + ! 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_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 + 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_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 + END SUBROUTINE SeaState_PackContState + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + 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) + END SUBROUTINE SeaState_UnPackContState + + SUBROUTINE SeaState_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_DiscreteStateType), INTENT(IN) :: SrcDiscStateData + TYPE(SeaState_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 = 'SeaState_CopyDiscState' +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_CopyDiscState( SrcDiscStateData%Waves2, DstDiscStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaState_CopyDiscState + + SUBROUTINE SeaState_DestroyDiscState( DiscStateData, ErrStat, ErrMsg ) + TYPE(SeaState_DiscreteStateType), INTENT(INOUT) :: DiscStateData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyDiscState' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_DestroyDiscState( DiscStateData%Waves2, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_DestroyDiscState + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + ! 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_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 + 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_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 + END SUBROUTINE SeaState_PackDiscState + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + 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) + END SUBROUTINE SeaState_UnPackDiscState + + SUBROUTINE SeaState_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_ConstraintStateType), INTENT(IN) :: SrcConstrStateData + TYPE(SeaState_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 = 'SeaState_CopyConstrState' +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_CopyConstrState( SrcConstrStateData%Waves2, DstConstrStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaState_CopyConstrState + + SUBROUTINE SeaState_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg ) + TYPE(SeaState_ConstraintStateType), INTENT(INOUT) :: ConstrStateData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyConstrState' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_DestroyConstrState( ConstrStateData%Waves2, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_DestroyConstrState + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + ! 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_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 + 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_PackConstrState( 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 + END SUBROUTINE SeaState_PackConstrState + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + 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) + END SUBROUTINE SeaState_UnPackConstrState + + SUBROUTINE SeaState_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_OtherStateType), INTENT(IN) :: SrcOtherStateData + TYPE(SeaState_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 = 'SeaState_CopyOtherState' +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_CopyOtherState( SrcOtherStateData%Waves2, DstOtherStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaState_CopyOtherState + + SUBROUTINE SeaState_DestroyOtherState( OtherStateData, ErrStat, ErrMsg ) + TYPE(SeaState_OtherStateType), INTENT(INOUT) :: OtherStateData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyOtherState' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_DestroyOtherState( OtherStateData%Waves2, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_DestroyOtherState + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + ! 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_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 + 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_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 + END SUBROUTINE SeaState_PackOtherState + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + 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) + END SUBROUTINE SeaState_UnPackOtherState + + SUBROUTINE SeaState_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_MiscVarType), INTENT(IN) :: SrcMiscData + TYPE(SeaState_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 = 'SeaState_CopyMisc' +! + ErrStat = ErrID_None + ErrMsg = "" + DstMiscData%Decimate = SrcMiscData%Decimate + DstMiscData%LastOutTime = SrcMiscData%LastOutTime + DstMiscData%LastIndWave = SrcMiscData%LastIndWave + CALL SeaState_Interp_CopyMisc( SrcMiscData%Sea_Interp_m, DstMiscData%Sea_Interp_m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL Waves2_CopyMisc( SrcMiscData%Waves2, DstMiscData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + 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 SeaState_CopyMisc + + SUBROUTINE SeaState_DestroyMisc( MiscData, ErrStat, ErrMsg ) + TYPE(SeaState_MiscVarType), INTENT(INOUT) :: MiscData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyMisc' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL SeaState_Interp_DestroyMisc( MiscData%Sea_Interp_m, ErrStat, ErrMsg ) + CALL Waves2_DestroyMisc( MiscData%Waves2, ErrStat, ErrMsg ) + CALL Waves2_DestroyInput( MiscData%u_Waves2, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_DestroyMisc + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 ! Sea_Interp_m: size of buffers for each call to pack subtype + CALL SeaState_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Sea_Interp_m, ErrStat2, ErrMsg2, .TRUE. ) ! Sea_Interp_m + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Sea_Interp_m + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Sea_Interp_m + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Sea_Interp_m + 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_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 ! 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 + 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 SeaState_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Sea_Interp_m, ErrStat2, ErrMsg2, OnlySize ) ! Sea_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 + 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 Waves2_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u_Waves2, ErrStat2, ErrMsg2, OnlySize ) ! u_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 + END SUBROUTINE SeaState_PackMisc + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_Interp_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%Sea_Interp_m, ErrStat2, ErrMsg2 ) ! Sea_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) + 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 + 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 SeaState_UnPackMisc + + SUBROUTINE SeaState_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_ParameterType), INTENT(IN) :: SrcParamData + TYPE(SeaState_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 = 'SeaState_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%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%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) + i3_l = LBOUND(SrcParamData%WaveElev,3) + i3_u = UBOUND(SrcParamData%WaveElev,3) + IF (.NOT. ASSOCIATED(DstParamData%WaveElev)) THEN + ALLOCATE(DstParamData%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 DstParamData%WaveElev.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElev = SrcParamData%WaveElev +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%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%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 + 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 +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%NumTotalOuts = SrcParamData%NumTotalOuts + 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 SeaState_Interp_CopyParam( SrcParamData%Sea_Interp_p, DstParamData%Sea_Interp_p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaState_CopyParam + + SUBROUTINE SeaState_DestroyParam( ParamData, ErrStat, ErrMsg ) + TYPE(SeaState_ParameterType), INTENT(INOUT) :: ParamData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyParam' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + CALL Waves2_DestroyParam( ParamData%Waves2, ErrStat, ErrMsg ) +IF (ASSOCIATED(ParamData%WaveTime)) THEN + 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%WaveElev)) THEN + DEALLOCATE(ParamData%WaveElev) + ParamData%WaveElev => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveElev1)) THEN + DEALLOCATE(ParamData%WaveElev1) + ParamData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveElev2)) THEN + DEALLOCATE(ParamData%WaveElev2) + ParamData%WaveElev2 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveDynP)) THEN + DEALLOCATE(ParamData%WaveDynP) + ParamData%WaveDynP => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveAcc)) THEN + DEALLOCATE(ParamData%WaveAcc) + ParamData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveVel)) THEN + DEALLOCATE(ParamData%WaveVel) + ParamData%WaveVel => 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), ErrStat, ErrMsg ) +ENDDO + DEALLOCATE(ParamData%OutParam) +ENDIF + CALL SeaState_Interp_DestroyParam( ParamData%Sea_Interp_p, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_DestroyParam + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + 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 ! 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 ! 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 ! 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 ! 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 ! 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 ! 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 ! NumTotalOuts + 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 ! Sea_Interp_p: size of buffers for each call to pack subtype + CALL SeaState_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Sea_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! Sea_Interp_p + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + IF (ErrStat >= AbortErrLev) RETURN + + IF(ALLOCATED(Re_Buf)) THEN ! Sea_Interp_p + Re_BufSz = Re_BufSz + SIZE( Re_Buf ) + DEALLOCATE(Re_Buf) + END IF + IF(ALLOCATED(Db_Buf)) THEN ! Sea_Interp_p + Db_BufSz = Db_BufSz + SIZE( Db_Buf ) + DEALLOCATE(Db_Buf) + END IF + IF(ALLOCATED(Int_Buf)) THEN ! Sea_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 + 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%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. 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%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%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 + 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 + 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%NumTotalOuts + 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 SeaState_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Sea_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! Sea_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 SeaState_PackParam + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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%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 ! 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 ! 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 ! 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 ! 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 + 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 + 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%NumTotalOuts = 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 SeaState_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%Sea_Interp_p, ErrStat2, ErrMsg2 ) ! Sea_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 SeaState_UnPackParam + + SUBROUTINE SeaState_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_InputType), INTENT(IN) :: SrcInputData + TYPE(SeaState_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 = 'SeaState_CopyInput' +! + ErrStat = ErrID_None + ErrMsg = "" + DstInputData%DummyInput = SrcInputData%DummyInput + END SUBROUTINE SeaState_CopyInput + + SUBROUTINE SeaState_DestroyInput( InputData, ErrStat, ErrMsg ) + TYPE(SeaState_InputType), INTENT(INOUT) :: InputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyInput' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" + END SUBROUTINE SeaState_DestroyInput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_PackInput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 SeaState_UnPackInput + + SUBROUTINE SeaState_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SeaState_OutputType), INTENT(IN) :: SrcOutputData + TYPE(SeaState_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 = 'SeaState_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 + CALL Waves2_CopyOutput( SrcOutputData%Waves2, DstOutputData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + END SUBROUTINE SeaState_CopyOutput + + SUBROUTINE SeaState_DestroyOutput( OutputData, ErrStat, ErrMsg ) + TYPE(SeaState_OutputType), INTENT(INOUT) :: OutputData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyOutput' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" +IF (ALLOCATED(OutputData%WriteOutput)) THEN + DEALLOCATE(OutputData%WriteOutput) +ENDIF + CALL Waves2_DestroyOutput( OutputData%Waves2, ErrStat, ErrMsg ) + END SUBROUTINE SeaState_DestroyOutput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + ! 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_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 + 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 + 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 + END SUBROUTINE SeaState_PackOutput + + SUBROUTINE SeaState_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(SeaState_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 = 'SeaState_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 + 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) + END SUBROUTINE SeaState_UnPackOutput + + + SUBROUTINE SeaState_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(SeaState_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 + REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs + TYPE(SeaState_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 = 'SeaState_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 SeaState_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + ELSE IF ( order .eq. 1 ) THEN + CALL SeaState_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 SeaState_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 SeaState_Input_ExtrapInterp + + + SUBROUTINE SeaState_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(SeaState_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 + TYPE(SeaState_InputType), INTENT(IN) :: u2 ! Input at t2 + REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs + TYPE(SeaState_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 = 'SeaState_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 SeaState_Input_ExtrapInterp1 + + + SUBROUTINE SeaState_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(SeaState_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 + TYPE(SeaState_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 + TYPE(SeaState_InputType), INTENT(IN) :: u3 ! Input at t3 + REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs + TYPE(SeaState_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 = 'SeaState_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 SeaState_Input_ExtrapInterp2 + + + SUBROUTINE SeaState_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(SeaState_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 + REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs + TYPE(SeaState_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 = 'SeaState_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 SeaState_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + ELSE IF ( order .eq. 1 ) THEN + CALL SeaState_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 SeaState_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 SeaState_Output_ExtrapInterp + + + SUBROUTINE SeaState_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(SeaState_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 + TYPE(SeaState_OutputType), INTENT(IN) :: y2 ! Output at t2 + REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs + TYPE(SeaState_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 = 'SeaState_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 + CALL Waves2_Output_ExtrapInterp1( y1%Waves2, y2%Waves2, tin, y_out%Waves2, tin_out, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + END SUBROUTINE SeaState_Output_ExtrapInterp1 + + + SUBROUTINE SeaState_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(SeaState_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 + TYPE(SeaState_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 + TYPE(SeaState_OutputType), INTENT(IN) :: y3 ! Output at t3 + REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs + TYPE(SeaState_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 = 'SeaState_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 + 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) + END SUBROUTINE SeaState_Output_ExtrapInterp2 + +END MODULE SeaState_Types +!ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/UserWaves.f90 b/modules/seastate/src/UserWaves.f90 index a979b5df93..a9de2b957f 100644 --- a/modules/seastate/src/UserWaves.f90 +++ b/modules/seastate/src/UserWaves.f90 @@ -658,7 +658,7 @@ 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) + ! IF (ALLOCATED( InitOut%WaveElevC0 )) DEALLOCATE( InitOut%WaveElevC0, STAT=ErrStatTmp) END SUBROUTINE CleanUp @@ -735,19 +735,19 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ) + ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ) , 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%WaveDynP (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), 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,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) + ALLOCATE ( InitOut%WaveVel (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%WaveVel.', ErrStat,ErrMsg,'VariousWaves_Init') + ALLOCATE ( InitOut%WaveAcc (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%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') + ! Now check if all the allocations worked properly @@ -801,8 +801,8 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) END DO END DO - - InitOut%WaveVel (:,:,1) = WaveData(:,:) + !TODO: Rework onto grid + ! InitOut%WaveVel (:,:,1) = WaveData(:,:) ! Now read the remaining files and check that the elements are consistent with the first file DO iFile = 2,7 @@ -853,20 +853,21 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 + !TODO: Rework onto grid points + !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) @@ -878,61 +879,43 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 +!TODO FIX for new grid of XY wave elevations +! 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 +!!TODO: FIX WaveElev based on grid now. +! !DO t = 0,InitOut%NStepWave-1 +! ! Read(UnWv,Frmt) ( Delim, InitOut%WaveElev(t,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%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 diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 5358c49a49..3c47b8add3 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -555,7 +555,7 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 :: I, J,k, count ! Generic index INTEGER(IntKi) :: ErrStatTmp ! Temporary error status ! Initialize ErrStat @@ -572,31 +572,31 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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%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 ) + ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ) , 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%WaveDynP (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), 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,'StillWaterWaves_Init') + ALLOCATE ( InitOut%WaveVel (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%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,'StillWaterWaves_Init') + ALLOCATE ( InitOut%WaveAcc (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%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,'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%PWaveDynP0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), 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%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),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%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),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,'StillWaterWaves_Init') @@ -609,49 +609,41 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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%WaveElev0 = 0.0 InitOut%WaveElevC0 = 0.0 InitOut%WaveElev = 0.0 - InitOut%PWaveDynP0 = 0.0 - InitOut%PWaveVel0 = 0.0 - InitOut%PWaveAcc0 = 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 + + count = 1 + + !DO J = 1,InitInp%NWaveKin ! 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) + InitOut%WaveVel(:,i,j,k,1) = InitInp%CurrVxi(count) ! xi-direction + InitOut%WaveVel(:,i,j,k,2) = InitInp%CurrVyi(count) ! yi-direction + IF ( InitInp%WaveKinzi(count) >= -InitInp%WtrDpth .AND. InitInp%WaveKinzi(count) <= 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 + InitOut%nodeInWater(:,count) = 1 + ELSE + InitOut%nodeInWater(:, count) = 0 + END IF + end do + end do + end do + + ! END DO ! J - All points where the incident wave kinematics will be computed END SUBROUTINE StillWaterWaves_Init @@ -762,15 +754,16 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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,count ! 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 ,jj,kk,ii ! 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 :: primeCount ! Counter for locations before applying stretching 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. @@ -1089,10 +1082,10 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !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%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 ) + ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ), 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 ) @@ -1137,25 +1130,45 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !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 ) +!TODO: These InitOut arrays now need to be organized for the grid points + + ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), 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 ) + ALLOCATE ( InitOut%WaveVel (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%WaveVel.', ErrStat,ErrMsg,'VariousWaves_Init') - ALLOCATE ( InitOut%WaveAcc (0:InitOut%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) + ALLOCATE ( InitOut%WaveAcc (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%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%PWaveDynP0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), 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%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),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%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStatTmp ) + !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveAcc0.', 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') +! END TODO SECTION 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') @@ -1764,16 +1777,18 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 + ! 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 +!TODO: FIX ME For generating grid elevations + DO k = 1,InitInp%NWaveElev ! 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. - CALL WaveElevTimeSeriesAtXY( InitInp%WaveElevxi(J), InitInp%WaveElevyi(J), InitOut%WaveElev(:,J), ErrStatTmp, ErrMsgTmp ) + i = mod(k-1, InitInp%NGrid(1)) + 1 + j = (k-1) / InitInp%NGrid(2) + 1 + CALL WaveElevTimeSeriesAtXY( InitInp%WaveElevxi(k), InitInp%WaveElevyi(k), InitOut%WaveElev(:,i,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() @@ -1782,28 +1797,6 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) END DO ! J - All points where the incident wave elevations can be output - ! 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. @@ -1922,34 +1915,47 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 + ! InitOut%PWaveDynP0(:,:,:,:) = 0.0 + ! InitOut%PWaveVel0 (:,:,:,:,:) = 0.0 + ! InitOut%PWaveAcc0 (:,:,:,:,:) = 0.0 + + primeCount = 1 + count = 1 + !DO J = 1,InitInp%NWaveKin ! 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%WaveKinzi(count) < -InitInp%WtrDpth ) .OR. ( InitInp%WaveKinzi(count) > 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(:,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 WaveKinzi(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 + + ! END DO ! J - All points where the incident wave kinematics will be computed ! CASE ( 1 ) ! Vertical stretching. @@ -1998,13 +2004,13 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 ) + 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 ) @@ -2041,7 +2047,7 @@ SUBROUTINE WaveElevTimeSeriesAtXY(Xcoord,Ycoord, WaveElevSeriesAtXY, ErrStatLcl, 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') + CALL SetErrStat(ErrStatLcl2,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStatLcl,ErrMsgLcl,'WaveElevTimeSeriesAtXY') ! Append first datpoint as the last as aid for repeated wave data WaveElevSeriesAtXY(InitOut%NStepWave) = WaveElevSeriesAtXY(0) @@ -2173,6 +2179,7 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init 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? diff --git a/modules/seastate/src/Waves.txt b/modules/seastate/src/Waves.txt index bf66a4742a..53bc5bd26a 100644 --- a/modules/seastate/src/Waves.txt +++ b/modules/seastate/src/Waves.txt @@ -25,6 +25,7 @@ typedef ^ ^ LOGICAL WriteWvKin 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) @@ -47,14 +48,14 @@ typedef ^ ^ DbKi WaveTMax typedef ^ ^ SiKi WaveTp - - - "Peak spectral period of incident waves" (sec) typedef ^ ^ ReKi 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 ^ ^ INTEGER NWaveElev - - - "Number of points where the incident wave elevations are computed (the XY grid point locations)" - 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 ^ ^ 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 ^ ^ SiKi WaveKinxi {:} - - "xi-coordinates for points where the incident wave kinematics will be computed (grid points); these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinyi {:} - - "yi-coordinates for points where the incident wave kinematics will be computed (grid points); these are relative to the mean sea level" (meters) +typedef ^ ^ SiKi WaveKinzi {:} - - "zi-coordinates for 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) @@ -64,8 +65,8 @@ typedef ^ ^ NWTC_RandomNumber_ParameterType R # 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 ^ ^ 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) @@ -73,18 +74,15 @@ typedef ^ ^ INTEGER WaveNDir 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 WaveElev0 {:} - - "Instantaneous elevation time-series of incident waves at the platform reference point" (meters) - -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 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 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 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 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 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" - diff --git a/modules/seastate/src/Waves2.f90 b/modules/seastate/src/Waves2.f90 index 743e87708f..36a19e7be9 100644 --- a/modules/seastate/src/Waves2.f90 +++ b/modules/seastate/src/Waves2.f90 @@ -33,8 +33,6 @@ MODULE Waves2 !! USE Waves2_Types -! USE WAMIT_Interp - USE Waves2_Output USE NWTC_Library USE NWTC_FFTPACK USE Waves, ONLY : WaveNumber @@ -91,8 +89,9 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! 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 NWaveKin INTEGER(IntKi) :: n !< Generic counter for calculations INTEGER(IntKi) :: m !< Generic counter for calculations INTEGER(IntKi) :: mu_minus !< Generic counter for difference kinematics calculations @@ -314,9 +313,7 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, ! 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,19 +322,6 @@ 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') @@ -437,26 +421,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 ) + ALLOCATE ( p%WaveElev2 (0:InitInp%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ) , STAT=ErrStatTmp ) + ! 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 ) + 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,'Waves2_Init') - - ALLOCATE ( InitOut%WaveAcc2D (0:InitInp%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) + + 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,'Waves2_Init') - - ALLOCATE ( InitOut%WaveDynP2D (0:InitInp%NStepWave,InitInp%NWaveKin ), STAT=ErrStatTmp ) + + 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,'Waves2_Init') - - ALLOCATE ( InitOut%WaveVel2S (0:InitInp%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) + + 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,'Waves2_Init') - - ALLOCATE ( InitOut%WaveAcc2S (0:InitInp%NStepWave,InitInp%NWaveKin,3), STAT=ErrStatTmp ) + + 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,'Waves2_Init') - - ALLOCATE ( InitOut%WaveDynP2S (0:InitInp%NStepWave,InitInp%NWaveKin ), STAT=ErrStatTmp ) + + 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,'Waves2_Init') ! Now check if all the allocations worked properly @@ -477,19 +461,6 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, - ! 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 ) @@ -605,32 +576,20 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !-------------------------------------------------------------------------------- ! Step through the requested points - DO I=1,InitInp%NWaveElev - CALL WaveElevTimeSeriesAtXY_Diff(InitInp%WaveElevxi(I), InitInp%WaveElevyi(I), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) + DO k = 1,InitInp%NWaveElev ! 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(2) + 1 + CALL WaveElevTimeSeriesAtXY_Diff(InitInp%WaveElevxi(k), InitInp%WaveElevyi(k), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStat,ErrMsg,'Waves2_Init') IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN END IF - p%WaveElev2(:,I) = TmpTimeSeries(:) + p%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 +598,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 +642,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%WaveKinxi(masterCount) & + + ( k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) - k_m * SIN( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinyi(masterCount) )) ! Get value for \f$ B^- \f$ for the n,m index pair @@ -791,32 +750,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) @@ -974,43 +938,28 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !! that point. The results are added to the wave elevation results from the diff !! frequency calculations earlier in the code. !-------------------------------------------------------------------------------- - +!TODO: 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 ) + DO k = 1,InitInp%NWaveElev ! 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(2) + 1 + CALL WaveElevTimeSeriesAtXY_Sum(InitInp%WaveElevxi(k), InitInp%WaveElevyi(k), TmpTimeSeries, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStat,ErrMsg,'Waves2_Init') 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(:) + p%WaveElev2(:,I,J) = p%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 +1018,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%WaveKinxi(masterCount) & + + 2.0_SiKi * k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) * InitInp%WaveKinyi(masterCount) )) ! Get value for \f$ B+ \f$ for the n,m index pair @@ -1171,8 +1120,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%WaveKinxi(masterCount) & + + ( k_n * SIN( D2R_S*InitInp%WaveDirArr(n) ) + k_m * SIN( D2R_S*InitInp%WaveDirArr(m) ) ) * InitInp%WaveKinyi(masterCount) )) ! Get value for \f$ B+ \f$ for the n,m index pair @@ -1302,21 +1251,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 @@ -2285,31 +2238,6 @@ SUBROUTINE Waves2_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, E 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 diff --git a/modules/seastate/src/Waves2.txt b/modules/seastate/src/Waves2.txt index 71aa3c56ad..e185ca0b6c 100644 --- a/modules/seastate/src/Waves2.txt +++ b/modules/seastate/src/Waves2.txt @@ -32,10 +32,11 @@ typedef ^ ^ SiKi WaveDOmega 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 ^ ^ 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 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) @@ -54,41 +55,40 @@ typedef ^ ^ SiKi WvHiCOffD 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 - - - "" - +#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) +#typedef ^ InitOutputType CHARACTER(ChanLen) WriteOutputHdr {:} - - "" - +#typedef ^ ^ CHARACTER(ChanLen) WriteOutputUnt {:} - - "" - # "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) +typedef ^ InitOutputType 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) +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) +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) +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) +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) +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) +#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) +#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) +#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) +#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) +#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) +#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) @@ -126,19 +126,19 @@ typedef ^ ^ LOGICAL WvSumQTFF 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) +#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) +#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 - - - "" - +#typedef ^ ^ OutParmType OutParam {:} - - "" - +#typedef ^ ^ INTEGER NumOuts - - - "" - +#typedef ^ ^ INTEGER NumOutAll - - - "" - +#typedef ^ ^ CHARACTER(20) OutFmt - - - "" - +#typedef ^ ^ CHARACTER(20) OutSFmt - - - "" - +#typedef ^ ^ CHARACTER(ChanLen) Delim - - - "" - +#typedef ^ ^ INTEGER UnOutFile - - - "" - @@ -151,4 +151,5 @@ typedef ^ InputType SiKi DummyInput # ..... Outputs ................................................................................................................... # Define outputs that are contained on the mesh here: -typedef ^ OutputType ReKi WriteOutput {:} - - "" - +typedef ^ OutputType SiKi DummyOutput - - - "Remove this variable if you have output data" - +#typedef ^ OutputType ReKi WriteOutput {:} - - "" - diff --git a/modules/seastate/src/Waves2_Types.f90 b/modules/seastate/src/Waves2_Types.f90 index affe3fdc41..99bc7eeb53 100644 --- a/modules/seastate/src/Waves2_Types.f90 +++ b/modules/seastate/src/Waves2_Types.f90 @@ -45,9 +45,10 @@ MODULE Waves2_Types 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] + 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) :: 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)] @@ -62,29 +63,16 @@ MODULE Waves2_Types 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)] + 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)] END TYPE Waves2_InitOutputType ! ======================= ! ========= Waves2_ContinuousStateType ======= @@ -120,15 +108,7 @@ MODULE Waves2_Types 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 !< [-] + 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)] END TYPE Waves2_ParameterType ! ======================= ! ========= Waves2_InputType ======= @@ -138,7 +118,7 @@ MODULE Waves2_Types ! ======================= ! ========= Waves2_OutputType ======= TYPE, PUBLIC :: Waves2_OutputType - REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WriteOutput !< [-] + REAL(SiKi) :: DummyOutput !< Remove this variable if you have output data [-] END TYPE Waves2_OutputType ! ======================= CONTAINS @@ -153,6 +133,8 @@ SUBROUTINE Waves2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E 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' @@ -168,10 +150,10 @@ SUBROUTINE Waves2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E DstInitInputData%WaveDOmega = SrcInitInputData%WaveDOmega DstInitInputData%WaveStMod = SrcInitInputData%WaveStMod 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) @@ -180,12 +162,12 @@ SUBROUTINE Waves2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E END IF DstInitInputData%WaveDirArr = SrcInitInputData%WaveDirArr ENDIF -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) @@ -194,10 +176,10 @@ SUBROUTINE Waves2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E END IF DstInitInputData%WaveElevC0 = SrcInitInputData%WaveElevC0 ENDIF -IF (ALLOCATED(SrcInitInputData%WaveTime)) THEN +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) @@ -206,6 +188,7 @@ SUBROUTINE Waves2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E END IF DstInitInputData%WaveTime = SrcInitInputData%WaveTime ENDIF + DstInitInputData%nGrid = SrcInitInputData%nGrid DstInitInputData%NWaveElev = SrcInitInputData%NWaveElev IF (ALLOCATED(SrcInitInputData%WaveElevxi)) THEN i1_l = LBOUND(SrcInitInputData%WaveElevxi,1) @@ -288,10 +271,6 @@ SUBROUTINE Waves2_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, E 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 ) @@ -303,14 +282,17 @@ SUBROUTINE Waves2_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" -IF (ALLOCATED(InitInputData%WaveDirArr)) THEN +IF (ASSOCIATED(InitInputData%WaveDirArr)) THEN DEALLOCATE(InitInputData%WaveDirArr) + InitInputData%WaveDirArr => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveElevC0)) THEN +IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN DEALLOCATE(InitInputData%WaveElevC0) + InitInputData%WaveElevC0 => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN +IF (ASSOCIATED(InitInputData%WaveTime)) THEN DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() ENDIF IF (ALLOCATED(InitInputData%WaveElevxi)) THEN DEALLOCATE(InitInputData%WaveElevxi) @@ -377,20 +359,21 @@ SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 + 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 ( 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 ! 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 + SIZE(InData%nGrid) ! nGrid Int_BufSz = Int_BufSz + 1 ! NWaveElev Int_BufSz = Int_BufSz + 1 ! WaveElevxi allocated yes/no IF ( ALLOCATED(InData%WaveElevxi) ) THEN @@ -429,10 +412,6 @@ SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -478,7 +457,7 @@ SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Int_Xferred = Int_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 @@ -493,7 +472,7 @@ SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Re_Xferred = Re_Xferred + 1 END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveElevC0) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -513,7 +492,7 @@ SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -528,6 +507,10 @@ SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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%NWaveElev Int_Xferred = Int_Xferred + 1 IF ( .NOT. ALLOCATED(InData%WaveElevxi) ) THEN @@ -639,18 +622,6 @@ SUBROUTINE Waves2_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 ) @@ -669,6 +640,8 @@ SUBROUTINE Waves2_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 = 'Waves2_UnPackInitInput' @@ -707,7 +680,7 @@ SUBROUTINE Waves2_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) @@ -728,7 +701,7 @@ SUBROUTINE Waves2_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) @@ -748,7 +721,7 @@ SUBROUTINE Waves2_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) @@ -759,6 +732,12 @@ SUBROUTINE Waves2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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%NWaveElev = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevxi not allocated @@ -888,20 +867,6 @@ SUBROUTINE Waves2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 ) @@ -915,50 +880,14 @@ SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, 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 = '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) @@ -966,8 +895,12 @@ SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode 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),STAT=ErrStat2) + 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 @@ -980,8 +913,12 @@ SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode 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),STAT=ErrStat2) + 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 @@ -996,8 +933,12 @@ SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode 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),STAT=ErrStat2) + 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 @@ -1010,8 +951,12 @@ SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode 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),STAT=ErrStat2) + 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 @@ -1026,8 +971,12 @@ SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode 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),STAT=ErrStat2) + 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 @@ -1042,106 +991,18 @@ SUBROUTINE Waves2_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode 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),STAT=ErrStat2) + 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 (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 @@ -1154,15 +1015,6 @@ SUBROUTINE Waves2_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" -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 @@ -1180,24 +1032,6 @@ SUBROUTINE Waves2_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) 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 @@ -1236,81 +1070,36 @@ SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 + 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*2 ! WaveDynP2D upper/lower bounds for each dimension + 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*3 ! WaveAcc2S upper/lower bounds for each dimension + 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*2 ! WaveDynP2S upper/lower bounds for each dimension + 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*3 ! WaveVel2D upper/lower bounds for each dimension + 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*3 ! WaveVel2S upper/lower bounds for each dimension + 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 ! 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 @@ -1338,60 +1127,6 @@ SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 @@ -1406,13 +1141,23 @@ SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 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 + 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 @@ -1428,12 +1173,22 @@ SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 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 + 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 @@ -1451,13 +1206,23 @@ SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 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 + 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 @@ -1473,12 +1238,22 @@ SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 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 + 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 @@ -1496,13 +1271,23 @@ SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 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 + 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 @@ -1522,152 +1307,22 @@ SUBROUTINE Waves2_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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) + 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%WaveAcc2D0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc2D0,3) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel2S,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel2S,5) 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 + 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 @@ -1690,6 +1345,8 @@ SUBROUTINE Waves2_UnPackInitOutput( 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 = 'Waves2_UnPackInitOutput' @@ -1703,69 +1360,6 @@ SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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 @@ -1779,17 +1373,27 @@ SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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),STAT=ErrStat2) + 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 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 + 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 @@ -1804,16 +1408,26 @@ SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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),STAT=ErrStat2) + 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 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 + 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 @@ -1830,46 +1444,33 @@ SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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),STAT=ErrStat2) + 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 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 + 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 - 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 ) @@ -1881,50 +1482,27 @@ SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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) + i4_l = IntKiBuf( Int_Xferred ) + i4_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 (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%WaveVel2S.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveDynP2S.', 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 + 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 ! WaveAcc2D0 not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel2D not allocated Int_Xferred = Int_Xferred + 1 ELSE Int_Xferred = Int_Xferred + 1 @@ -1937,96 +1515,32 @@ SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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) + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) + i5_l = IntKiBuf( Int_Xferred ) + i5_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 (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%WaveAcc2S0.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel2D.', 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 + 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 ! 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 + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveVel2S not allocated Int_Xferred = Int_Xferred + 1 ELSE Int_Xferred = Int_Xferred + 1 @@ -2039,45 +1553,27 @@ SUBROUTINE Waves2_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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) + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) + i5_l = IntKiBuf( Int_Xferred ) + i5_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 (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%WaveVel2S0.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveVel2S.', 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 + 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 @@ -2719,6 +2215,7 @@ SUBROUTINE Waves2_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 = 'Waves2_CopyParam' @@ -2731,25 +2228,15 @@ SUBROUTINE Waves2_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM 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) + i3_l = LBOUND(SrcParamData%WaveElev2,3) + i3_u = UBOUND(SrcParamData%WaveElev2,3) IF (.NOT. ALLOCATED(DstParamData%WaveElev2)) THEN - ALLOCATE(DstParamData%WaveElev2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + 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 @@ -2757,28 +2244,6 @@ SUBROUTINE Waves2_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM 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 ) @@ -2790,17 +2255,8 @@ SUBROUTINE Waves2_DestroyParam( ParamData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" -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), ErrStat, ErrMsg ) -ENDDO - DEALLOCATE(ParamData%OutParam) ENDIF END SUBROUTINE Waves2_DestroyParam @@ -2845,46 +2301,11 @@ SUBROUTINE Waves2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg 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 + 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 ! 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 @@ -2924,21 +2345,6 @@ SUBROUTINE Waves2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg 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 @@ -2950,74 +2356,20 @@ SUBROUTINE Waves2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg 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 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 + 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%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 ) @@ -3035,6 +2387,7 @@ SUBROUTINE Waves2_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 = 'Waves2_UnPackParam' @@ -3060,24 +2413,6 @@ SUBROUTINE Waves2_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err 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 @@ -3088,93 +2423,24 @@ SUBROUTINE Waves2_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err 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%WaveElev2)) DEALLOCATE(OutData%WaveElev2) - ALLOCATE(OutData%WaveElev2(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + 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 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 + 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 ! 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 ) @@ -3310,25 +2576,13 @@ SUBROUTINE Waves2_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, E 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 + DstOutputData%DummyOutput = SrcOutputData%DummyOutput END SUBROUTINE Waves2_CopyOutput SUBROUTINE Waves2_DestroyOutput( OutputData, ErrStat, ErrMsg ) @@ -3340,9 +2594,6 @@ SUBROUTINE Waves2_DestroyOutput( OutputData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" -IF (ALLOCATED(OutputData%WriteOutput)) THEN - DEALLOCATE(OutputData%WriteOutput) -ENDIF END SUBROUTINE Waves2_DestroyOutput SUBROUTINE Waves2_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -3380,11 +2631,7 @@ SUBROUTINE Waves2_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 + Re_BufSz = Re_BufSz + 1 ! DummyOutput IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -3412,21 +2659,8 @@ SUBROUTINE Waves2_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 + ReKiBuf(Re_Xferred) = InData%DummyOutput + Re_Xferred = Re_Xferred + 1 END SUBROUTINE Waves2_PackOutput SUBROUTINE Waves2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -3442,7 +2676,6 @@ SUBROUTINE Waves2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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' @@ -3456,24 +2689,8 @@ SUBROUTINE Waves2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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 + OutData%DummyOutput = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 END SUBROUTINE Waves2_UnPackOutput @@ -3710,8 +2927,6 @@ SUBROUTINE Waves2_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, Err 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 = "" @@ -3726,12 +2941,8 @@ SUBROUTINE Waves2_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, Err 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 + b = -(y1%DummyOutput - y2%DummyOutput) + y_out%DummyOutput = y1%DummyOutput + b * ScaleFactor END SUBROUTINE Waves2_Output_ExtrapInterp1 @@ -3767,8 +2978,6 @@ SUBROUTINE Waves2_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrStat, 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 = "" @@ -3789,13 +2998,9 @@ SUBROUTINE Waves2_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrStat, 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 + 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 Waves2_Output_ExtrapInterp2 END MODULE Waves2_Types diff --git a/modules/seastate/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 index c02e8c9f9e..1216b3f6c3 100644 --- a/modules/seastate/src/Waves_Types.f90 +++ b/modules/seastate/src/Waves_Types.f90 @@ -42,6 +42,7 @@ MODULE Waves_Types 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)] + 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)] @@ -64,14 +65,13 @@ MODULE Waves_Types REAL(SiKi) :: WaveTp !< Peak spectral period of incident waves [(sec)] REAL(ReKi) :: 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 [-] + INTEGER(IntKi) :: NWaveElev !< Number of points where the incident wave elevations are computed (the XY grid point locations) [-] 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)] + REAL(SiKi) , DIMENSION(:), ALLOCATABLE :: WaveKinxi !< xi-coordinates for points where the incident wave kinematics will be computed (grid points); 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 (grid points); 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 (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)] @@ -81,8 +81,8 @@ MODULE Waves_Types ! ======================= ! ========= 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) , 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 :: 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)] @@ -90,16 +90,11 @@ MODULE Waves_Types 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 :: 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(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 :: 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 :: WaveElev => NULL() !< Instantaneous elevation time-series of incident waves at each of the XY grid points [(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)] 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 [-] @@ -163,6 +158,8 @@ SUBROUTINE Waves_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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 = 'Waves_CopyInitInput' @@ -176,6 +173,7 @@ SUBROUTINE Waves_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er DstInitInputData%UnSum = SrcInitInputData%UnSum DstInitInputData%Gravity = SrcInitInputData%Gravity DstInitInputData%MSL2SWL = SrcInitInputData%MSL2SWL + DstInitInputData%nGrid = SrcInitInputData%nGrid DstInitInputData%WvLowCOff = SrcInitInputData%WvLowCOff DstInitInputData%WvHiCOff = SrcInitInputData%WvHiCOff DstInitInputData%WaveDir = SrcInitInputData%WaveDir @@ -222,20 +220,6 @@ SUBROUTINE Waves_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er 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 @@ -320,9 +304,6 @@ SUBROUTINE Waves_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) 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 @@ -383,6 +364,7 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Int_BufSz = Int_BufSz + 1 ! UnSum Re_BufSz = Re_BufSz + 1 ! Gravity Re_BufSz = Re_BufSz + 1 ! MSL2SWL + 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 @@ -415,11 +397,6 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 @@ -514,6 +491,10 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%MSL2SWL 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 @@ -595,26 +576,6 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 @@ -743,6 +704,8 @@ SUBROUTINE Waves_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 = 'Waves_UnPackInitInput' @@ -776,6 +739,12 @@ SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 OutData%MSL2SWL = 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) @@ -865,29 +834,6 @@ SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 @@ -1038,18 +984,20 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, 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 = 'Waves_CopyInitOutput' ! ErrStat = ErrID_None ErrMsg = "" -IF (ALLOCATED(SrcInitOutputData%WaveElevC0)) THEN +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. ALLOCATED(DstInitOutputData%WaveElevC0)) THEN + 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) @@ -1058,10 +1006,10 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, END IF DstInitOutputData%WaveElevC0 = SrcInitOutputData%WaveElevC0 ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveDirArr)) THEN +IF (ASSOCIATED(SrcInitOutputData%WaveDirArr)) THEN i1_l = LBOUND(SrcInitOutputData%WaveDirArr,1) i1_u = UBOUND(SrcInitOutputData%WaveDirArr,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDirArr)) THEN + 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) @@ -1088,27 +1036,17 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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 +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) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveDynP)) THEN - ALLOCATE(DstInitOutputData%WaveDynP(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + 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 @@ -1116,15 +1054,19 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, END IF DstInitOutputData%WaveDynP = SrcInitOutputData%WaveDynP ENDIF -IF (ALLOCATED(SrcInitOutputData%WaveAcc)) THEN +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) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveAcc)) THEN - ALLOCATE(DstInitOutputData%WaveAcc(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + 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 @@ -1132,31 +1074,19 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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 +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) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveVel)) THEN - ALLOCATE(DstInitOutputData%WaveVel(i1_l:i1_u,i2_l:i2_u,i3_l:i3_u),STAT=ErrStat2) + 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 @@ -1164,29 +1094,15 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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 +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) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveElev)) THEN - ALLOCATE(DstInitOutputData%WaveElev(i1_l:i1_u,i2_l:i2_u),STAT=ErrStat2) + 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 @@ -1194,36 +1110,10 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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%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 +IF (ASSOCIATED(SrcInitOutputData%WaveTime)) THEN i1_l = LBOUND(SrcInitOutputData%WaveTime,1) i1_u = UBOUND(SrcInitOutputData%WaveTime,1) - IF (.NOT. ALLOCATED(DstInitOutputData%WaveTime)) THEN + 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) @@ -1261,44 +1151,36 @@ SUBROUTINE Waves_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" -IF (ALLOCATED(InitOutputData%WaveElevC0)) THEN +IF (ASSOCIATED(InitOutputData%WaveElevC0)) THEN DEALLOCATE(InitOutputData%WaveElevC0) + InitOutputData%WaveElevC0 => NULL() ENDIF -IF (ALLOCATED(InitOutputData%WaveDirArr)) THEN +IF (ASSOCIATED(InitOutputData%WaveDirArr)) THEN DEALLOCATE(InitOutputData%WaveDirArr) + InitOutputData%WaveDirArr => NULL() ENDIF IF (ALLOCATED(InitOutputData%WaveKinzi)) THEN DEALLOCATE(InitOutputData%WaveKinzi) ENDIF -IF (ALLOCATED(InitOutputData%PWaveDynP0)) THEN - DEALLOCATE(InitOutputData%PWaveDynP0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveDynP)) THEN +IF (ASSOCIATED(InitOutputData%WaveDynP)) THEN DEALLOCATE(InitOutputData%WaveDynP) + InitOutputData%WaveDynP => NULL() ENDIF -IF (ALLOCATED(InitOutputData%WaveAcc)) THEN +IF (ASSOCIATED(InitOutputData%WaveAcc)) THEN DEALLOCATE(InitOutputData%WaveAcc) + InitOutputData%WaveAcc => NULL() ENDIF -IF (ALLOCATED(InitOutputData%PWaveAcc0)) THEN - DEALLOCATE(InitOutputData%PWaveAcc0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveVel)) THEN +IF (ASSOCIATED(InitOutputData%WaveVel)) THEN DEALLOCATE(InitOutputData%WaveVel) + InitOutputData%WaveVel => NULL() ENDIF -IF (ALLOCATED(InitOutputData%PWaveVel0)) THEN - DEALLOCATE(InitOutputData%PWaveVel0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElev)) THEN +IF (ASSOCIATED(InitOutputData%WaveElev)) THEN DEALLOCATE(InitOutputData%WaveElev) + InitOutputData%WaveElev => NULL() ENDIF -IF (ALLOCATED(InitOutputData%WaveElev0)) THEN - DEALLOCATE(InitOutputData%WaveElev0) -ENDIF -IF (ALLOCATED(InitOutputData%WaveElevSeries)) THEN - DEALLOCATE(InitOutputData%WaveElevSeries) -ENDIF -IF (ALLOCATED(InitOutputData%WaveTime)) THEN +IF (ASSOCIATED(InitOutputData%WaveTime)) THEN DEALLOCATE(InitOutputData%WaveTime) + InitOutputData%WaveTime => NULL() ENDIF IF (ALLOCATED(InitOutputData%nodeInWater)) THEN DEALLOCATE(InitOutputData%nodeInWater) @@ -1341,12 +1223,12 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Db_BufSz = 0 Int_BufSz = 0 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 ! 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 @@ -1361,53 +1243,28 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 + 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 ( 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 ! 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 + 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 ( 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 + 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 ! 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 + 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 @@ -1447,7 +1304,7 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Db_Xferred = 1 Int_Xferred = 1 - IF ( .NOT. ALLOCATED(InData%WaveElevC0) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElevC0) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -1467,7 +1324,7 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er END DO END DO END IF - IF ( .NOT. ALLOCATED(InData%WaveDirArr) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveDirArr) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -1509,27 +1366,7 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 + IF ( .NOT. ASSOCIATED(InData%WaveDynP) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -1540,16 +1377,26 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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%WaveAcc) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveAcc) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -1564,42 +1411,27 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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) + 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%PWaveAcc0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveAcc0,3) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveAcc,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc,5) 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 + 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. ALLOCATED(InData%WaveVel) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveVel) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -1614,42 +1446,27 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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) + 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%PWaveVel0,3) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%PWaveVel0,3) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveVel,5) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveVel,5) 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 + 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%WaveElev) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElev) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -1661,50 +1478,20 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElev,3) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElev,3) 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%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 + 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%WaveTime) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -1765,6 +1552,8 @@ SUBROUTINE Waves_UnPackInitOutput( 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 = 'Waves_UnPackInitOutput' @@ -1788,7 +1577,7 @@ SUBROUTINE Waves_UnPackInitOutput( 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) @@ -1808,7 +1597,7 @@ SUBROUTINE Waves_UnPackInitOutput( 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) @@ -1849,7 +1638,7 @@ SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 END DO END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveDynP0 not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveDynP not allocated Int_Xferred = Int_Xferred + 1 ELSE Int_Xferred = Int_Xferred + 1 @@ -1859,39 +1648,26 @@ SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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) + i3_l = IntKiBuf( Int_Xferred ) + i3_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - i2_l = IntKiBuf( Int_Xferred ) - i2_u = IntKiBuf( Int_Xferred + 1) + i4_l = IntKiBuf( Int_Xferred ) + i4_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 (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 @@ -1908,45 +1684,27 @@ SUBROUTINE Waves_UnPackInitOutput( 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 (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) + i4_l = IntKiBuf( Int_Xferred ) + i4_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - i3_l = IntKiBuf( Int_Xferred ) - i3_u = IntKiBuf( Int_Xferred + 1) + i5_l = IntKiBuf( Int_Xferred ) + i5_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 (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%PWaveAcc0.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveAcc.', 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 + 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 @@ -1964,22 +1722,32 @@ SUBROUTINE Waves_UnPackInitOutput( 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) - 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 END IF - IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! PWaveVel0 not allocated + IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElev not allocated Int_Xferred = Int_Xferred + 1 ELSE Int_Xferred = Int_Xferred + 1 @@ -1992,85 +1760,21 @@ SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 (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%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating OutData%WaveElev.', 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) + 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 ! 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 ! 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 @@ -2078,7 +1782,7 @@ SUBROUTINE Waves_UnPackInitOutput( 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) diff --git a/modules/seastate/src/seastate_Interp.f90 b/modules/seastate/src/seastate_Interp.f90 new file mode 100644 index 0000000000..3d3a581b0b --- /dev/null +++ b/modules/seastate/src/seastate_Interp.f90 @@ -0,0 +1,634 @@ +!> 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: +!! -- SeaState_Interp_Init -- Load or create any wind data. Only called at the start of FAST. +!! -- SeaState_Interp_CalcOutput -- This will be called at each timestep with a series of data points to give the wave kinematics. +!! -- SeaState_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 :: SeaState_Interp_Ver = ProgDesc( 'SeaState_Interp', '', '' ) + + PUBLIC :: SeaState_Interp_Init + PUBLIC :: SeaState_Interp_End + PUBLIC :: SeaState_Interp_3D + PUBLIC :: SeaState_Interp_4D + PUBLIC :: SeaState_Interp_4D_Vec + public :: SeaState_Interp_Setup + +CONTAINS + +!==================================================================================================== + +!---------------------------------------------------------------------------------------------------- +!> A subroutine to initialize the SeaState 4D interpolator module. +!---------------------------------------------------------------------------------------------------- +SUBROUTINE SeaState_Interp_Init(InitInp, p, ErrStat, ErrMsg) + + + IMPLICIT NONE + + ! Passed Variables + + TYPE(SeaState_Interp_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization + TYPE(SeaState_Interp_ParameterType), INTENT( OUT) :: p !< Parameters + ! TYPE(SeaState_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 = 'SeaState_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 + p%pZero = InitInp%pZero ! fixed location of first 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 = SeaState_Interp_Ver + + RETURN + +END SUBROUTINE SeaState_Interp_Init + +!==================================================================================================== + +!------------------------------------------------------------------------------------------------- +!> This routine and its subroutines calculate the wind velocity at a set of points given in +!! PositionXYZ. The UVW velocities are returned in OutData%Velocity +!------------------------------------------------------------------------------------------------- +SUBROUTINE SeaState_Interp_CalcOutput(Time, PositionXYZ, p, pWaveKinXX, WaveKinVal, ErrStat, ErrMsg) + + IMPLICIT NONE + + CHARACTER(*), PARAMETER :: RoutineName="SeaState_Interp_CalcOutput" + + + ! Passed Variables + REAL(DbKi), INTENT(IN ) :: Time !< time from the start of the simulation + REAL(ReKi), INTENT(IN ) :: PositionXYZ(:,:) !< Array of XYZ coordinates, 3xN + TYPE(SeaState_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + REAL(ReKi), INTENT(IN ) :: pWaveKinXX(:,:,:,:) !< Velocity output at Time (Set to INOUT so that array does not get deallocated) + REAL(ReKi), INTENT( out) :: WaveKinVal + ! Error handling + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< The error message + + + ! local counters + INTEGER(IntKi) :: PointNum ! a loop counter for the current point + + ! local variables + INTEGER(IntKi) :: NumPoints ! Number of points passed in + + ! temporary variables + INTEGER(IntKi) :: ErrStat2 ! temporary error status + CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary error message + + + + !------------------------------------------------------------------------------------------------- + ! Initialize some things + !------------------------------------------------------------------------------------------------- + + ErrStat = ErrID_None + ErrMsg = "" + + + ! The array is transposed so that the number of points is the second index, x/y/z is the first. + ! This is just in case we only have a single point, the SIZE command returns the correct number of points. + !NumPoints = SIZE(PositionXYZ,DIM=2) + ! + ! + ! ! Step through all the positions and get the velocities + !DO PointNum = 1, NumPoints + ! + ! + ! ! Calculate the velocity for the position + ! Velocity(:,PointNum) = Interp4D(Time, PositionXYZ(:,PointNum), p, m, ErrStat2, ErrMsg2 ) + ! + ! + ! ! Error handling + ! IF (ErrStat2 /= ErrID_None) THEN ! adding this so we don't have to convert numbers to strings every time + ! CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName//" [position=("// & + ! TRIM(Num2LStr(PositionXYZ(1,PointNum)))//", "// & + ! TRIM(Num2LStr(PositionXYZ(2,PointNum)))//", "// & + ! TRIM(Num2LStr(PositionXYZ(3,PointNum)))//") in wind-file coordinates]" ) + ! IF (ErrStat >= AbortErrLev) RETURN + ! END IF + ! + ! + !ENDDO + + RETURN + +END SUBROUTINE SeaState_Interp_CalcOutput + +subroutine SetCartesianXYIndex(p, pZero, delta, nMax, Indx_Lo, Indx_Hi, isopc, 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(ReKi), intent(inout) :: isopc + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + integer(IntKi) :: i + 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 + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary',ErrStat,ErrMsg,'SetCartesianIndex') !error out if time is outside the lower bounds + 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 + Indx_Lo = Indx_Hi - 1 + isopc = 1.0 + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary',ErrStat,ErrMsg,'SetCartesianIndex') !error out if time is outside the lower bounds + 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, 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(ReKi), intent(inout) :: isopc + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + integer(IntKi) :: i + real(ReKi) :: Tmp + + ErrStat = ErrID_None + ErrMsg = "" + + isopc = -1.0 + Indx_Lo = 0 + Indx_Hi = 0 + + + !Tmp = acos(-p / z_depth) / delta + Tmp = acos(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 + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary',ErrStat,ErrMsg,'SetCartesianIndex') !error out if time is outside the lower bounds + 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 + Indx_Lo = Indx_Hi - 1 + isopc = 1.0 + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary',ErrStat,ErrMsg,'SetCartesianIndex') !error out if time is outside the lower bounds + 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(ReKi), intent(inout) :: isopc + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + integer(IntKi) :: i + 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 + + !TODO: Add mod to wrap time + Tmp = Time / deltaT + Indx_Lo = INT( Tmp ) ! convert REAL to INTEGER + + if (Indx_Lo >= (nMax-1)) then ! Wrap the time series back to the beginning of the signal + ! Indx_Lo = mod(Indx_Lo, nMax) + Indx_Lo = Indx_Lo - (nMax - 1) + Tmp = Tmp - real(nMax - 1, ReKi) + end if + 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 - 1 ) ! 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 SeaState_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(SeaState_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaState_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 = 'SeaState_Interp_Setup' + + ! Local variables + + INTEGER(IntKi) :: i ! loop counter + INTEGER(IntKi) :: ic ! wind-component counter + + REAL(SiKi) :: isopc(4) ! isoparametric coordinates + + REAL(SiKi) :: u(16) ! size 2^n + REAL(ReKi) :: Tmp ! temporary fraction of distance between two grid points + 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) !error out if x,y,z, or time is outside the lower 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), m%Indx_Lo(i), m%Indx_Hi(i), isopc(i), ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !error out if x,y,z, or time is outside the lower bounds + enddo + + + if (ErrStat >= AbortErrLev ) return + + !------------------------------------------------------------------------------------------------- + ! Find the bounding indices for Z position + !------------------------------------------------------------------------------------------------- + i=4 + call SetCartesianZIndex(Position(i-1), p%Z_Depth, p%delta(i), p%n(i), m%Indx_Lo(i), m%Indx_Hi(i), isopc(i), ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !error out if x,y,z, or time is outside the lower 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 SeaState_Interp_Setup + +!==================================================================================================== +!> This routine interpolates a 4-d dataset. +!! This method is described here: http://rjwagner49.com/Mathematics/Interpolation.pdf +FUNCTION SeaState_Interp_4D( pKinXX, m, ErrStat, ErrMsg ) + + ! I/O variables + + real(SiKi), intent(in ) :: pKinXX(0:,:,:,:) + TYPE(SeaState_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 = 'SeaState_Interp_PointSetup' + Real(SiKi) :: SeaState_Interp_4D + ! Local variables + + REAL(SiKi) :: u(16) ! size 2^n + + + SeaState_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) ) + + SeaState_Interp_4D = SUM ( m%N4D * u ) + +END FUNCTION SeaState_Interp_4D + +!==================================================================================================== +!> This routine interpolates a 4-d dataset. +!! This method is described here: http://rjwagner49.com/Mathematics/Interpolation.pdf +FUNCTION SeaState_Interp_4D_Vec( pKinXX, m, ErrStat, ErrMsg ) + + ! I/O variables + + real(SiKi), intent(in ) :: pKinXX(0:,:,:,:,:) + TYPE(SeaState_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 = 'SeaState_Interp_PointSetup' + Real(SiKi) :: SeaState_Interp_4D_Vec(3) + ! Local variables + + REAL(SiKi) :: u(16) ! size 2^n + integer(IntKi) :: iDir + + SeaState_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 ) + + SeaState_Interp_4D_Vec(iDir) = SUM ( m%N4D * u ) + end do +END FUNCTION SeaState_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 SeaState_Interp_3D( Time, Position, pKinXX, p, 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(SeaState_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status + CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None + + + CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_3D' + Real(SiKi) :: SeaState_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 + INTEGER(IntKi) :: ic ! wind-component counter + REAL(SiKi) :: isopc(3) ! isoparametric coordinates + REAL(ReKi) :: Tmp ! temporary fraction of distance between two grid points + integer(IntKi) :: ErrStat2 + character(ErrMsgLen) :: ErrMsg2 + + SeaState_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) !error out if x,y,z, or time is outside the lower 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), ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !error out if x,y,z, or time is outside the lower 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) ) + + SeaState_Interp_3D = SUM ( N3D * u ) + +END FUNCTION SeaState_Interp_3D + +!---------------------------------------------------------------------------------------------------- +!> This routine deallocates any memory in the FDext module. +SUBROUTINE SeaState_Interp_End( ParamData, MiscVars, ErrStat, ErrMsg) + + + IMPLICIT NONE + + CHARACTER(*), PARAMETER :: RoutineName="SeaState_Interp_End" + + + ! Passed Variables + TYPE(SeaState_Interp_ParameterType), INTENT(INOUT) :: ParamData !< Parameters + TYPE(SeaState_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 SeaState_Interp_DestroyParam( ParamData, TmpErrStat, TmpErrMsg ) + CALL SetErrStat( TmpErrStat, TmpErrMsg, ErrStat, ErrMsg, RoutineName ) + + + ! Destroy the misc data + + CALL SeaState_Interp_DestroyMisc( MiscVars, TmpErrStat, TmpErrMsg ) + CALL SetErrStat( TmpErrStat, TmpErrMsg, ErrStat, ErrMsg, RoutineName ) + + +END SUBROUTINE SeaState_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..130d2110b2 --- /dev/null +++ b/modules/seastate/src/seastate_Interp.txt @@ -0,0 +1,41 @@ +################################################################################################################################### +# 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/SeaState_Interp InitInputType IntKi n 4 - - "number of grid points in the x, y, z, and t directions" - +typedef ^ InitInputType ReKi delta 4 - - "size between 2 consecutive grid points in each grid direction" "m,m,m,s" +typedef ^ InitInputType ReKi pZero 4 - - "fixed position of the XYZ 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" - + +# ..... 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 x, y, z, and t directions" - +typedef ^ ParameterType ReKi delta 4 - - "size between 2 consecutive grid points in each grid direction" "m,m,m,s" +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/vs-build/RunRegistry.bat b/vs-build/RunRegistry.bat index c633832b3b..b558a7517d 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%" @@ -187,9 +188,6 @@ SET Output_Loc=%CURR_LOC% GOTO checkError :HydroDyn -:Current -:Waves -:Waves2 :SS_Excitation :SS_Radiation :Conv_Radiation @@ -202,6 +200,17 @@ SET Output_Loc=%CURR_LOC% %REGISTRY% "%CURR_LOC%\%ModuleName%.txt" -I "%NWTC_Lib_Loc%" -I "%CURR_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%" -O "%Output_Loc%" +GOTO checkError + :SubDyn SET CURR_LOC=%SD_Loc% SET Output_Loc=%CURR_LOC% From 5fd9600fee258bb132644bd6ef1ba6dac93bc3ea Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 1 Dec 2021 09:50:42 -0700 Subject: [PATCH 007/338] Added Registry Pointers support --- modules/openfast-registry/src/data.h | 2 ++ modules/openfast-registry/src/gen_module_files.c | 2 +- modules/openfast-registry/src/reg_parse.c | 12 ++++++++++-- modules/openfast-registry/src/type.c | 4 +++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/modules/openfast-registry/src/data.h b/modules/openfast-registry/src/data.h index bc81980c73..4680d1539e 100644 --- a/modules/openfast-registry/src/data.h +++ b/modules/openfast-registry/src/data.h @@ -76,6 +76,8 @@ typedef struct node_struct { int is_interface_type ; +/* array pointer instead of allocatable*/ + int is_pointer; /* 0 = allocatable, 1 = pointer */ /* marker */ int mark ; diff --git a/modules/openfast-registry/src/gen_module_files.c b/modules/openfast-registry/src/gen_module_files.c index df4acfe9db..6edf86be4a 100644 --- a/modules/openfast-registry/src/gen_module_files.c +++ b/modules/openfast-registry/src/gen_module_files.c @@ -2126,7 +2126,7 @@ gen_module( FILE * fp , node_t * ModName, char * prog_ver ) } } - if ( is_pointer(r) ) { + if (sw_ccode && is_pointer(r) ) { fprintf(fp," %s ",c_types_binding(r->type->mapsto) ) ; } else { fprintf(fp," %s ",r->type->mapsto ) ; diff --git a/modules/openfast-registry/src/reg_parse.c b/modules/openfast-registry/src/reg_parse.c index 37d457abc2..82d33057ac 100644 --- a/modules/openfast-registry/src/reg_parse.c +++ b/modules/openfast-registry/src/reg_parse.c @@ -549,12 +549,13 @@ int set_dim_len ( char * dimspec , node_t * dim_entry ) { dim_entry->deferred = 0 ; + dim_entry->is_pointer = 0; if (!strcmp( dimspec , "standard_domain" )) { dim_entry->len_defined_how = DOMAIN_STANDARD ; } - else if (!strncmp( dimspec, "constant=" , 9 ) || isNum(dimspec[0]) || dimspec[0] == ':' || dimspec[0] == '(' ) + else if (!strncmp( dimspec, "constant=" , 9 ) || isNum(dimspec[0]) || dimspec[0] == ':' || dimspec[0] == '*' || dimspec[0] == '(' ) { char *p, *colon, *paren ; - p = (isNum(dimspec[0])||dimspec[0]==':'||dimspec[0]=='(')?dimspec:&(dimspec[9]) ; + p = (isNum(dimspec[0])||dimspec[0]==':'||dimspec[0]=='*'||dimspec[0]=='(')?dimspec:&(dimspec[9]) ; /* check for colon */ if (( colon = index(p,':')) != NULL ) { @@ -572,6 +573,13 @@ set_dim_len ( char * dimspec , node_t * dim_entry ) } dim_entry->coord_end = atoi(colon+1) ; } + else if ((colon = index(p, '*')) != NULL) + { + *colon = '\0'; + dim_entry->deferred = 1; + dim_entry->coord_end = atoi(colon + 1); + dim_entry->is_pointer = 1; + } else { dim_entry->coord_start = 1 ; diff --git a/modules/openfast-registry/src/type.c b/modules/openfast-registry/src/type.c index 310d7b793d..5c3f19ace2 100644 --- a/modules/openfast-registry/src/type.c +++ b/modules/openfast-registry/src/type.c @@ -137,7 +137,9 @@ assoc_or_allocated( node_t * r ) int is_pointer( node_t * r ) { - + if (r->ndims > 0 && r->dims[0]->is_pointer) { + return(1); + } if ( sw_ccode && r->ndims > 0 && r->dims[0]->deferred ){ if ( !strncmp( make_lower_temp(r-> name), "writeoutput", 11) ) { // this covers WriteOutput, WriteOutputHdr, and WriteOutputUnt return( 0 ); // we're going to use these in the glue code, so these will be a special case From fe4cc1d1844b858198556ad5e6bc3ba9313bb4dd Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 1 Dec 2021 09:55:39 -0700 Subject: [PATCH 008/338] ExctnDisp/WaveDisp functionality update for HD Added ExctnDisp support for WAMIT bodies Added WaveDisp support for Morison members Various bug fixes Changed SeaState abbrv. to SeaSt in registry --- modules/hydrodyn/src/HydroDyn.f90 | 1150 +- modules/hydrodyn/src/HydroDyn.txt | 77 +- modules/hydrodyn/src/HydroDyn_DriverCode.f90 | 333 +- modules/hydrodyn/src/HydroDyn_Input.f90 | 920 +- modules/hydrodyn/src/HydroDyn_Output.f90 | 104 +- modules/hydrodyn/src/HydroDyn_Types.f90 | 2587 ++- modules/hydrodyn/src/Morison.f90 | 103 +- modules/hydrodyn/src/Morison.txt | 39 +- modules/hydrodyn/src/Morison_Output.f90 | 13279 ++++++++-------- modules/hydrodyn/src/Morison_Types.f90 | 1365 +- modules/hydrodyn/src/SS_Excitation.f90 | 164 +- modules/hydrodyn/src/SS_Excitation.txt | 15 +- modules/hydrodyn/src/SS_Excitation_Types.f90 | 559 +- modules/hydrodyn/src/WAMIT.f90 | 399 +- modules/hydrodyn/src/WAMIT.txt | 16 +- modules/hydrodyn/src/WAMIT2.txt | 10 +- modules/hydrodyn/src/WAMIT2_Types.f90 | 138 +- modules/hydrodyn/src/WAMIT_Types.f90 | 496 +- modules/seastate/src/SeaState.f90 | 327 +- modules/seastate/src/SeaState.txt | 49 +- modules/seastate/src/SeaState_DriverCode.f90 | 52 +- modules/seastate/src/SeaState_Input.f90 | 38 +- .../seastate/src/SeaState_Interp_Types.f90 | 160 +- modules/seastate/src/SeaState_Output.f90 | 40 +- modules/seastate/src/SeaState_Types.f90 | 1887 ++- modules/seastate/src/Waves.f90 | 48 +- modules/seastate/src/Waves.txt | 3 +- modules/seastate/src/Waves_Types.f90 | 132 + modules/seastate/src/seastate_Interp.f90 | 195 +- modules/seastate/src/seastate_Interp.txt | 2 +- 30 files changed, 13362 insertions(+), 11325 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index 3bddcb07db..b3e513a6ea 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,147 +76,147 @@ 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 +!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. @@ -225,7 +225,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,9 +251,6 @@ 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 @@ -261,25 +258,6 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I 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 @@ -302,21 +280,21 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I 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 (:,: ) + !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 @@ -399,7 +377,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() @@ -443,7 +421,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! Set summary unit number in Waves, Radiation, and Morison initialization input data - InputFileData%Waves%UnSum = InputFileData%UnSum + ! InputFileData%Waves%UnSum = InputFileData%UnSum InputFileData%WAMIT%Conv_Rdtn%UnSum = InputFileData%UnSum InputFileData%Morison%UnSum = InputFileData%UnSum @@ -452,404 +430,24 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! 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 + !p%NWaveElev = InputFileData%Waves%NWaveElev + p%NStepWave = InitInp%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%WaveTime => InitInp%WaveTime + !CALL MOVE_ALLOC( Waves_InitOut%WaveElev, p%WaveElev1 ) ! allocate p%WaveElev1, set p%WaveElev1 = Waves_InitOut%WaveElev, and deallocate Waves_InitOut%WaveElev ! 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%WaveElev = p%WaveElev1 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? @@ -861,7 +459,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 ) @@ -929,23 +527,26 @@ 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 + !InputFileData%WAMIT%WaveElev0 => InitInp%WaveElev0 + 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 ) @@ -1006,12 +607,6 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I 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 @@ -1023,18 +618,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 @@ -1119,12 +714,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 @@ -1151,14 +740,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 ) @@ -1175,14 +764,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 @@ -1198,8 +787,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? @@ -1209,155 +796,60 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! Copy Waves initialization output into the initialization input type for the Morison module - InputFileData%Morison%NStepWave = Waves_InitOut%NStepWave - - - ! Temporarily move array to init input for Morison (save some space) - CALL MOVE_ALLOC( p%WaveTime, InputFileData%Morison%WaveTime ) + InputFileData%Morison%NStepWave = InitInp%NStepWave + InputFileData%Morison%WaveTime => InitInp%WaveTime ! 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%WaveAcc => InitInp%WaveAcc + InputFileData%Morison%WaveDynP => InitInp%WaveDynP + InputFileData%Morison%WaveVel => InitInp%WaveVel + InputFileData%Morison%WaveElev => InitInp%WaveElev + InputFileData%Morison%WaveElev1 => InitInp%WaveElev1 + InputFileData%Morison%WaveElev2 => InitInp%WaveElev2 +! CALL MOVE_ALLOC( Waves_InitOut%nodeInWater,InputFileData%Morison%nodeInWater ) ! moved to Morison%p%nodeInWater in the init routine ! 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 + !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 - + !TODO: Where does this belong now GJH 9/24/2021 + !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 + InputFileData%Morison%seast_interp_p = InitInp%seast_interp_p ! Check the output switch to see if Morison is needing to send outputs back to HydroDyn via the WriteOutput array @@ -1377,9 +869,7 @@ 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: @@ -1414,25 +904,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I 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 @@ -1509,12 +981,12 @@ 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( 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 @@ -1706,7 +1178,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I p%WtrDpth = InitOut%WtrDpth IF ( InitInp%hasIce ) THEN - IF ((InputFileData%Waves%WaveMod /= 0) .OR. (InputFileData%Current%CurrMod /= 0) ) THEN + IF ((InitInp%WaveMod /= 0) .OR. (InitInp%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 @@ -1730,48 +1202,26 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I CONTAINS !................................ SUBROUTINE CleanUp() + ! Nullify pointers to avoid deallocation of data at the wrong time and by the wrong module + ! NOTE: All of this 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 + + nullify(InputFileData%Morison%WaveDynP) + nullify(InputFileData%Morison%WaveAcc) + nullify(InputFileData%Morison%WaveVel) + nullify(InputFileData%Morison%WaveTime) + nullify(InputFileData%Morison%WaveElev) + nullify(InputFileData%Morison%WaveElev1) + nullify(InputFileData%Morison%WaveElev2) + nullify(InputFileData%WAMIT%WaveElevC0) + nullify(InputFileData%WAMIT%WaveDirArr) + nullify(InputFileData%WAMIT%WaveElev1) + nullify(InputFileData%WAMIT%WaveTime) + nullify(InputFileData%WAMIT2%WaveElevC0) + nullify(InputFileData%WAMIT2%WaveDirArr) 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 ) + CALL NWTC_Library_DestroyFileInfoType(InFileInfo,ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) END SUBROUTINE CleanUp !................................ @@ -1793,7 +1243,7 @@ SUBROUTINE HydroDyn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - + integer(IntKi) :: i ! Initialize ErrStat @@ -1823,6 +1273,21 @@ SUBROUTINE HydroDyn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ! Destroy the parameter data: + ! First need to nullify pointers so that SeaState module data is not deallocation by HD + nullify(p%WaveTime) + !NOTE: Since we don't call Morison_End() here, we need to first nullify the Morison pointers, otherwise the Morison_DestroyParam() routine [ called by + ! Hydrodyn_DestroyParam ] would try to deallocate the data attached to the Morison versions, but since SeaState created the data, it needs to do the deallocation. + nullify(p%Morison%WaveTime) + nullify(p%Morison%WaveDynP) + nullify(p%Morison%WaveAcc) + nullify(p%Morison%WaveVel) + nullify(p%Morison%WaveElev) + nullify(p%Morison%WaveElev1) + nullify(p%Morison%WaveElev2) + do i = 1,p%NBody + nullify(p%WAMIT(i)%SS_Exctn%WaveElev1) + nullify(p%WAMIT(i)%SS_Exctn%WaveTime) + end do CALL HydroDyn_DestroyParam( p, ErrStat, ErrMsg ) @@ -2043,10 +1508,7 @@ 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) @@ -2056,9 +1518,7 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, 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: @@ -2068,15 +1528,6 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ! 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 @@ -2237,28 +1688,7 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ! 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. @@ -2270,7 +1700,7 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ! 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 ) + CALL HDOut_MapOutputs( Time, p, y, m%WAMIT, m%WAMIT2, m%F_PtfmAdd, m%F_Waves, m%F_Hydro, u%PRPMesh, q, qdot, qdotdot, AllOuts, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'HydroDyn_CalcOutput' ) DO I = 1,p%NumOuts @@ -2283,12 +1713,6 @@ SUBROUTINE HydroDyn_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, 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 diff --git a/modules/hydrodyn/src/HydroDyn.txt b/modules/hydrodyn/src/HydroDyn.txt index 038fc676a1..ed2455a174 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,23 +77,57 @@ 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 ^ ^ SeaSt_InitOutputType SeaSt_InitOut - - - "SeaState Module InitOutput" - 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 ^ ^ 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 - - - "Total number of frequency components = total number of time steps in the incident wave" - +typedef ^ ^ INTEGER NStepWave2 - - - "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 CurrMod - - - "" - +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 WvDiffQTFF - - - "Full difference QTF second order forces flag" (-) +typedef ^ ^ LOGICAL WvSumQTFF - - - "Full sum QTF second order forces flag" (-) +typedef ^ ^ SiKi WaveElev {*}{*}{*} - - "Total wave elevation" - +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 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 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 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 ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +# # # 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 ^ 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 ^ ^ CHARACTER(ChanLen) WriteOutputUnt {:} - - "The is the list of all HD-related output channel unit strings (includes all sub-module channels)" - @@ -120,7 +155,7 @@ typedef ^ HD_ModuleMapType MeshMapType # 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 Waves2_ContinuousStateType Waves2 - - - "continuous states from the waves2 module" - typedef ^ ContinuousStateType Morison_ContinuousStateType Morison - - - "continuous states from the Morison module" - # # @@ -129,7 +164,7 @@ typedef ^ ContinuousStateType Morison_Con 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 Waves2_DiscreteStateType Waves2 - - - "discrete states from the waves2 module" - typedef ^ DiscreteStateType Morison_DiscreteStateType Morison - - - "discrete states from the Morison module" - # # @@ -137,7 +172,7 @@ typedef ^ DiscreteStateType Morison_Dis # 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 Waves2_ConstraintStateType Waves2 - - - "constraint states from the waves2 module" - typedef ^ ConstraintStateType Morison_ConstraintStateType Morison - - - "constraint states from the Morison module" - # # @@ -146,7 +181,7 @@ typedef ^ ConstraintStateType Morison_Con 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 ^ OtherStateType Waves2_OtherStateType Waves2 - - - "OtherState information from the Waves2 module" - typedef ^ ^ Morison_OtherStateType Morison - - - "OtherState information from the Morison module" - # ..... Misc/Optimization variables................................................................................................. @@ -163,11 +198,11 @@ 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 ^ ^ 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" - +#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: @@ -178,7 +213,7 @@ 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 ^ ^ 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]" - @@ -186,12 +221,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" - @@ -225,7 +256,7 @@ 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 ^ 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_DriverCode.f90 b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 index 2e186d5bca..0da07adfc7 100644 --- a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 +++ b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 @@ -23,6 +23,8 @@ PROGRAM HydroDynDriver USE NWTC_Library + use SeaState + use SeaState_Types USE HydroDyn USE HydroDyn_Types USE HydroDyn_Output @@ -38,6 +40,7 @@ PROGRAM HydroDynDriver REAL(ReKi) :: WtrDpth REAL(ReKi) :: MSL2SWL CHARACTER(1024) :: HDInputFile + CHARACTER(1024) :: SeaStateInputFile CHARACTER(1024) :: OutRootName LOGICAL :: Linearize INTEGER :: NSteps @@ -70,6 +73,26 @@ PROGRAM HydroDynDriver REAL(DbKi) :: Interval ! HD module requested time interval INTEGER(B1Ki), ALLOCATABLE :: SaveAry(:) ! Array to store packed data structure + type(SeaSt_InitInputType) :: InitInData_SeaSt ! Input data for initialization + type(SeaSt_InitOutputType) :: InitOutData_SeaSt ! Output data from initialization + + type(SeaSt_ContinuousStateType) :: x_SeaSt ! Continuous states + type(SeaSt_ContinuousStateType) :: x_new_SeaSt ! Continuous states at updated time + type(SeaSt_DiscreteStateType) :: xd_SeaSt ! Discrete states + type(SeaSt_DiscreteStateType) :: xd_new_SeaSt ! Discrete states at updated time + type(SeaSt_ConstraintStateType) :: z_SeaSt ! Constraint states + type(SeaSt_ConstraintStateType) :: z_residual_SeaSt ! Residual of the constraint state equations (Z) + type(SeaSt_OtherStateType) :: OtherState_SeaSt ! Other states + type(SeaSt_MiscVarType) :: m_SeaSt ! Misc/optimization variables + + type(SeaSt_ParameterType) :: p_SeaSt ! Parameters + !type(SeaSt_InputType) :: u ! System inputs [OLD STYLE] + type(SeaSt_InputType) :: u_SeaSt(NumInp) ! System inputs + type(SeaSt_OutputType) :: y_SeaSt ! System outputs + + type(SeaSt_ContinuousStateType) :: dxdt_SeaSt ! First time derivatives of the continuous states + + TYPE(HydroDyn_InitInputType) :: InitInData ! Input data for initialization TYPE(HydroDyn_InitOutputType) :: InitOutData ! Output data from initialization @@ -185,7 +208,7 @@ PROGRAM HydroDynDriver InitInData%UseInputFile = .TRUE. InitInData%InputFile = drvrInitInp%HDInputFile InitInData%OutRootName = drvrInitInp%OutRootName - InitInData%TMax = drvrInitInp%NSteps * drvrInitInp%TimeInterval + InitInData%TMax = (drvrInitInp%NSteps-1) * drvrInitInp%TimeInterval ! Starting time is always t = 0.0 InitInData%Linearize = drvrInitInp%Linearize ! Get the current time @@ -203,8 +226,86 @@ PROGRAM HydroDynDriver !------------------------------------------------------------------------------------- ! Begin Simulation Setup !------------------------------------------------------------------------------------- - + + ! Initialize the SeaState module + InitInData_SeaSt%Gravity = drvrInitInp%Gravity + InitInData_SeaSt%defWtrDens = drvrInitInp%WtrDens + InitInData_SeaSt%defWtrDpth = drvrInitInp%WtrDpth + InitInData_SeaSt%defMSL2SWL = drvrInitInp%MSL2SWL + InitInData_SeaSt%UseInputFile = .TRUE. + InitInData_SeaSt%InputFile = drvrInitInp%SeaStateInputFile + InitInData_SeaSt%OutRootName = drvrInitInp%OutRootName + InitInData_SeaSt%TMax = (drvrInitInp%NSteps-1) * drvrInitInp%TimeInterval ! Starting time is always t = 0.0 + Interval = drvrInitInp%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 ) + if (errStat >= AbortErrLev) then + ! Clean up and exit + call HD_DvrCleanup() + end if + + if ( Interval /= drvrInitInp%TimeInterval) then + call WrScr('The SeaState Module attempted to change timestep interval, but this is not allowed. The SeaState Module must use the Driver Interval.') + call HD_DvrCleanup() + + end if + ! Set HD Init Inputs based on SeaStates Init Outputs + InitInData%NStepWave = InitOutData_SeaSt%NStepWave + InitInData%NStepWave2 = InitOutData_SeaSt%NStepWave2 + InitInData%RhoXg = InitOutData_SeaSt%RhoXg + InitInData%WaveMod = InitOutData_SeaSt%WaveMod + InitInData%CurrMod = InitOutData_SeaSt%CurrMod + InitInData%WaveStMod = InitOutData_SeaSt%WaveStMod + InitInData%WaveDirMod = InitOutData_SeaSt%WaveDirMod + InitInData%WvLowCOff = InitOutData_SeaSt%WvLowCOff + InitInData%WvHiCOff = InitOutData_SeaSt%WvHiCOff + InitInData%WvLowCOffD = InitOutData_SeaSt%WvLowCOffD + InitInData%WvHiCOffD = InitOutData_SeaSt%WvHiCOffD + InitInData%WvLowCOffS = InitOutData_SeaSt%WvLowCOffS + InitInData%WvHiCOffS = InitOutData_SeaSt%WvHiCOffS + InitInData%WvDiffQTFF = InitOutData_SeaSt%WvDiffQTFF + InitInData%WvSumQTFF = InitOutData_SeaSt%WvSumQTFF + InitInData%WaveDirMin = InitOutData_SeaSt%WaveDirMin + InitInData%WaveDirMax = InitOutData_SeaSt%WaveDirMax + InitInData%WaveDir = InitOutData_SeaSt%WaveDir + InitInData%WaveMultiDir = InitOutData_SeaSt%WaveMultiDir + InitInData%WaveDOmega = InitOutData_SeaSt%WaveDOmega + !InitInData%WaveElev0 => InitOutData_SeaSt%WaveElev0 + CALL MOVE_ALLOC( InitOutData_SeaSt%WaveElev0, InitInData%WaveElev0 ) + InitInData%WaveTime => InitOutData_SeaSt%WaveTime + InitInData%WaveDynP => InitOutData_SeaSt%WaveDynP + InitInData%WaveAcc => InitOutData_SeaSt%WaveAcc + InitInData%WaveVel => InitOutData_SeaSt%WaveVel + InitInData%WaveElevC0 => InitOutData_SeaSt%WaveElevC0 + CALL MOVE_ALLOC( InitOutData_SeaSt%WaveElevC, InitInData%WaveElevC ) + InitInData%WaveDirArr => InitOutData_SeaSt%WaveDirArr + InitInData%WaveElev => InitOutData_SeaSt%WaveElev + InitInData%WaveElev1 => InitOutData_SeaSt%WaveElev1 + InitInData%WaveElev2 => InitOutData_SeaSt%WaveElev2 + + ! Nullify these pointers because they are no longer needed + nullify(InitOutData_SeaSt%WaveDynP) + nullify(InitOutData_SeaSt%WaveAcc) + nullify(InitOutData_SeaSt%WaveVel) + nullify(InitOutData_SeaSt%WaveTime) + nullify(InitOutData_SeaSt%WaveElevC0) + nullify(InitOutData_SeaSt%WaveDirArr) + nullify(InitOutData_SeaSt%WaveElev) + nullify(InitOutData_SeaSt%WaveElev1) + nullify(InitOutData_SeaSt%WaveElev2) + + call SeaSt_Interp_CopyParam(InitOutData_SeaSt%SeaSt_Interp_p, InitInData%SeaSt_Interp_p, 0, ErrStat, ErrMsg ) + + ! Destroy SeaState InitOutput + CALL SeaSt_DestroyInitOutput( InitOutData_SeaSt, ErrStat, ErrMsg ) + + if (errStat >= AbortErrLev) then + ! Clean up and exit + call HD_DvrCleanup() + end if + + + IF ( drvrInitInp%PRPInputsMod == 2 ) THEN ! Open the PRP inputs data file @@ -276,38 +377,27 @@ PROGRAM HydroDynDriver 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 - ! Initialize the module Interval = drvrInitInp%TimeInterval CALL HydroDyn_Init( InitInData, u(1), p, x, xd, z, OtherState, y, m, Interval, InitOutData, ErrStat, ErrMsg ) + + ! 1) Nullify the HD Init Input pointers + ! 2) Now, when HydroDyn_DestroyInitInput is called and hence SeaSt_DestroyInitOutput, we will not deallocate data which is still in use because the is associated test will fail. + + nullify(InitInData%WaveElevC0) + nullify(InitInData%WaveDirArr) + nullify(InitInData%WaveDynP) + nullify(InitInData%WaveAcc) + nullify(InitInData%WaveVel) + nullify(InitInData%WaveTime) + nullify(InitInData%WaveElev) + nullify(InitInData%WaveElev1) + nullify(InitInData%WaveElev2) + if (errStat >= AbortErrLev) then - ! Clean up and exit + ! Clean up and exit call HD_DvrCleanup() end if @@ -320,19 +410,18 @@ PROGRAM HydroDynDriver ! 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 - - - ! Destroy initialization data + CALL HydroDyn_DestroyInitInput( InitInData, ErrStat, ErrMsg ) CALL HydroDyn_DestroyInitOutput( InitOutData, ErrStat, ErrMsg ) +! Nullify unneeded SeaState pointers so that we can then destroy the InitOutput data structure without deallocated needed data + !nullify(InitOutData_SeaSt%WaveElev0) + !nullify(InitOutData_SeaSt%WaveElevC0) + !nullify(InitOutData_SeaSt%WaveDirArr) + + ! 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 ] @@ -519,13 +608,19 @@ PROGRAM HydroDynDriver end if END IF - END IF + END IF !@mhall: end of addition ! Calculate outputs at n + call SeaSt_CalcOutput( Time, u_SeaSt(1), p_SeaSt, x_SeaSt, xd_SeaSt, z_SeaSt, OtherState_SeaSt, y_SeaSt, m_SeaSt, ErrStat, ErrMsg ) + if (errStat >= AbortErrLev) then + ! Clean up and exit + call HD_DvrCleanup() + end if + CALL HydroDyn_CalcOutput( Time, u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) if (errStat >= AbortErrLev) then ! Clean up and exit @@ -594,7 +689,8 @@ subroutine HD_DvrCleanup() errMsg2 = "" - + 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, 'HD_DvrCleanup' ) call HydroDyn_DestroyInitInput( InitInData, errStat2, errMsg2 ) call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'HD_DvrCleanup' ) call HydroDyn_DestroyDiscState( xd_new, errStat2, errMsg2 ) @@ -850,6 +946,18 @@ SUBROUTINE ReadDriverInputFile( inputFile, InitInp, ErrStat, ErrMsg ) RETURN END IF + ! SeaStInputFile + + CALL ReadVar ( UnIn, FileName, InitInp%SeaStateInputFile, 'SeaStateInputFile', & + 'SeaState input filename', ErrStat, ErrMsg, UnEchoLocal ) + + IF ( ErrStat /= ErrID_None ) THEN + ErrMsg = ' Failed to read SeaStateInputFile parameter.' + ErrStat = ErrID_Fatal + CALL CleanupEchoFile( InitInp%Echo, UnEchoLocal ) + CLOSE( UnIn ) + RETURN + END IF ! OutRootName @@ -1015,85 +1123,6 @@ SUBROUTINE ReadDriverInputFile( inputFile, InitInp, ErrStat, ErrMsg ) 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 CleanupEchoFile( InitInp%Echo, UnEchoLocal ) @@ -1101,76 +1130,6 @@ SUBROUTINE ReadDriverInputFile( inputFile, InitInp, ErrStat, ErrMsg ) 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 !---------------------------------------------------------------------------------------------------------------------------------- diff --git a/modules/hydrodyn/src/HydroDyn_Input.f90 b/modules/hydrodyn/src/HydroDyn_Input.f90 index a427bba9a5..7f6c36b489 100644 --- a/modules/hydrodyn/src/HydroDyn_Input.f90 +++ b/modules/hydrodyn/src/HydroDyn_Input.f90 @@ -24,8 +24,7 @@ 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 @@ -229,7 +228,7 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp CurLine = CurLine + 1 ! WtrDens - Water density. - CALL ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDens', InputFileData%Waves%WtrDens, defWtrDens, ErrStat2, ErrMsg2, UnEc ) + CALL ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDens', InputFileData%Morison%WtrDens, defWtrDens, ErrStat2, ErrMsg2, UnEc ) if (Failed()) return; ! WtrDpth - Water depth @@ -241,228 +240,7 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp 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 +256,10 @@ 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; + ! 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,7 +447,16 @@ 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; + !------------------------------------------------------------------------------------------------- ! Axial Coefficients Section !------------------------------------------------------------------------------------------------- @@ -1348,7 +1139,7 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! WtrDens - Water density. - IF ( InputFileData%Waves%WtrDens < 0.0 ) THEN + IF ( InputFileData%Morison%WtrDens < 0.0 ) THEN CALL SetErrStat( ErrID_Fatal,'WtrDens must not be negative.',ErrStat,ErrMsg,RoutineName) RETURN END IF @@ -1366,59 +1157,23 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! MSL2SWL - Mean sea level to still water level - + +!TODO: Add check for InputFileData%Morison%MSL2SWL 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) + CALL SetErrStat( ErrID_Fatal,'SeaState 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) + 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 + - - 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) + ! WaveMod - Wave kinematics model switch. +!TODO: Verify this check + 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 END IF ! Linearization Checks @@ -1442,22 +1197,17 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! 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 ( InitInp%WaveMod /= 6 .AND. InputFileData%Morison%NMembers > 0 .AND. InitInp%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 + IF ( ( InitInp%WaveStMod /= 0 ) .AND. ( InitInp%WaveStMod /= 1 ) .AND. & + ( InitInp%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 + !IF ( ( InitInp%WaveStMod /= 3 ) .AND. ( InitInp%WaveMod == 5 ) ) THEN ! ErrMsg = ' WaveStMod must be set to 3 when WaveMod is set to 5.' ! ErrStat = ErrID_Fatal ! @@ -1475,480 +1225,27 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! 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. + ! TODO: The following can no longer be set because it is part of InitInp and SeaState Parameters. GJH 9/24/2021 + ! InitInp%WaveStMod = 0 - 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. - 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 - - 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 + InputFileData%WAMIT2%WvLowCOff = InitInp%WvLowCOff + InputFileData%WAMIT2%WvHiCOff = InitInp%WvHiCOff ! 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. - + InputFileData%WAMIT2%WvLowCOffD = InitInp%WvLowCOffD + InputFileData%WAMIT2%WvHiCOffD = InitInp%WvHiCOffD + InputFileData%WAMIT2%WvLowCOffS = InitInp%WvLowCOffS + InputFileData%WAMIT2%WvHiCOffS = InitInp%WvHiCOffS - 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 ! PotFile - Root name of potential flow files @@ -1974,12 +1271,15 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! 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 + InputFileData%WAMIT2%WaveMultiDir = InitInp%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 +1302,12 @@ 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 + ! PtfmVol0 - Displaced volume of water when the platform is in its undisplaced position IF ( InputFileData%PotMod == 1 ) THEN @@ -2266,19 +1570,19 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS !.................. if ( (InputFileData%WAMIT%ExctnMod == 2) ) then - if ( InputFileData%Waves%WaveMod == 6 ) then + if ( InitInp%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 + if ( InitInp%WaveDirMod /= 0 ) then call SetErrStat( ErrID_Fatal, 'Directional spreading cannot be used with state-space wave excitations. Set WaveDirMod=0.', ErrStat, ErrMsg, RoutineName ) end if - if ( InputFileData%Waves2%WvDiffQTFF ) then + if ( InitInp%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 + if ( InitInp%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 @@ -2309,19 +1613,19 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS !.................. if (InitInp%Linearize) then - if ( InputFileData%Waves%WaveMod /= 0 ) then + if ( InitInp%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 + if ( InitInp%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 + if ( InitInp%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 + if ( InitInp%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 @@ -2911,7 +2215,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 @@ -2931,10 +2235,10 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS IF ( InputFileData%Morison%NMGDepths > 0 ) THEN - InitInp%Morison%MGTop = -999999.0 - InitInp%Morison%MGBottom = 999999.0 + InputFileData%Morison%MGTop = -999999.0 + InputFileData%Morison%MGBottom = 999999.0 - DO I = 1,InitInp%Morison%NMGDepths + DO I = 1,InputFileData%Morison%NMGDepths ! Store the boundaries of the marine growth zone IF ( InputFileData%Morison%MGDepths(I)%MGDpth > InputFileData%Morison%MGTop ) THEN InputFileData%Morison%MGTop = InputFileData%Morison%MGDepths(I)%MGDpth @@ -3087,7 +2391,7 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS 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) +! 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) @@ -3138,47 +2442,21 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! 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%WtrDens = InputFileData%Morison%WtrDens + InputFileData%WAMIT%WaveMod = InitInp%WaveMod InputFileData%WAMIT%OutAll = InputFileData%OutAll 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 @@ -3187,68 +2465,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 590eeb1290..18555c3afe 100644 --- a/modules/hydrodyn/src/HydroDyn_Output.f90 +++ b/modules/hydrodyn/src/HydroDyn_Output.f90 @@ -578,39 +578,9 @@ 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 :: MaxOutPts = 510 !End of code generated by Matlab script ! =================================================================================================== @@ -688,17 +658,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 :: 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 ", & @@ -762,12 +728,8 @@ 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(:) + "PRPTAYI ","PRPTAZI ","PRPTVXI ","PRPTVYI ","PRPTVZI ","PRPYAW "/) + 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 , & @@ -831,12 +793,8 @@ 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 /) - CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(537) = (/ & ! This lists the units corresponding to the allowed parameters + PRPTAyi , PRPTAzi , PRPTVxi , PRPTVyi , PRPTVzi , PRPYaw /) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(510) = (/ & ! 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) ", & @@ -900,11 +858,7 @@ MODULE HydroDyn_Output "(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) "/) + "(m/s^2) ","(m/s^2) ","(m/s) ","(m/s) ","(m/s) ","(rad) "/) ! ..... Public Subroutines ................................................................................................... @@ -1123,7 +1077,7 @@ SUBROUTINE HDOut_WriteWvKinFiles( Rootname, HD_Prog, NStepWave, NNodes, NWaveEle 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( CurrentTime, p, y, m_WAMIT, m_WAMIT2, F_Add, F_Waves, F_Hydro, PRPmesh, q, qdot, qdotdot, AllOuts, 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. !---------------------------------------------------------------------------------------------------- @@ -1132,10 +1086,6 @@ SUBROUTINE HDOut_MapOutputs( CurrentTime, p, y, m_WAMIT, m_WAMIT2, NWaveElev, Wa TYPE(HydroDyn_OutputType), INTENT( INOUT ) :: y ! HydroDyn's output data type(WAMIT_MiscVarType), intent( in ) :: m_WAMIT(:) ! WAMIT object's MiscVar data type(WAMIT2_MiscVarType), 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), INTENT( IN ) :: F_Add(:) REAL(ReKi), INTENT( IN ) :: F_Waves(:) REAL(ReKi), INTENT( IN ) :: F_Hydro(:) ! All hydrodynamic loads integrated at (0,0,0) in the global coordinate system @@ -1204,12 +1154,7 @@ 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) - END DO - + END SUBROUTINE HDOut_MapOutputs @@ -1238,7 +1183,7 @@ SUBROUTINE HDOut_WriteOutputs( Time, y, p, Decimate, ErrStat, ErrMsg ) ! 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 @@ -1346,17 +1291,13 @@ SUBROUTINE HDOUT_Init( HydroDyn_ProgDesc, OutRootName, InputFileData, y, p, m, ! 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 @@ -1397,15 +1338,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) @@ -1462,7 +1395,6 @@ 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 @@ -1492,11 +1424,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 ) @@ -1516,11 +1443,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 )//'))' diff --git a/modules/hydrodyn/src/HydroDyn_Types.f90 b/modules/hydrodyn/src/HydroDyn_Types.f90 index 515a7836e7..e026cc05ec 100644 --- a/modules/hydrodyn/src/HydroDyn_Types.f90 +++ b/modules/hydrodyn/src/HydroDyn_Types.f90 @@ -31,19 +31,21 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE HydroDyn_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE Current_Types -USE Waves_Types -USE Waves2_Types USE Conv_Radiation_Types USE SS_Radiation_Types +USE SeaState_Interp_Types USE SS_Excitation_Types USE WAMIT_Types USE WAMIT2_Types USE Morison_Types +USE Current_Types +USE Waves_Types +USE Waves2_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 [-] @@ -51,9 +53,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 [-] @@ -101,13 +101,44 @@ MODULE HydroDyn_Types 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,-] 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 !< Total number of frequency components = total number of time steps in the incident wave [-] + INTEGER(IntKi) :: NStepWave2 !< 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) :: CurrMod !< [-] + 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 :: WvDiffQTFF !< Full difference QTF second order forces flag [(-)] + LOGICAL :: WvSumQTFF !< Full sum QTF second order forces flag [(-)] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev => NULL() !< Total wave elevation [-] + 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) , 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 :: 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 :: 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)] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] 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) [-] @@ -134,7 +165,6 @@ MODULE HydroDyn_Types 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 ! ======================= @@ -142,7 +172,6 @@ MODULE HydroDyn_Types 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 ! ======================= @@ -150,7 +179,6 @@ MODULE HydroDyn_Types 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 ! ======================= @@ -158,7 +186,6 @@ MODULE HydroDyn_Types 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 ! ======================= @@ -175,11 +202,9 @@ 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 ======= @@ -189,7 +214,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] [-] @@ -197,12 +221,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 [-] @@ -235,7 +255,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) [-] @@ -253,6 +272,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' @@ -322,13 +343,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 @@ -510,9 +525,7 @@ SUBROUTINE HydroDyn_DestroyInputFile( InputFileData, ErrStat, ErrMsg ) IF (ALLOCATED(InputFileData%AddBQuad)) THEN DEALLOCATE(InputFileData%AddBQuad) ENDIF - CALL Waves_DestroyInitInput( InputFileData%Waves, ErrStat, ErrMsg ) - CALL Waves2_DestroyInitInput( InputFileData%Waves2, ErrStat, ErrMsg ) - CALL Current_DestroyInitInput( InputFileData%Current, ErrStat, ErrMsg ) + CALL SeaSt_DestroyInitInput( InputFileData%SeaState, ErrStat, ErrMsg ) IF (ALLOCATED(InputFileData%PotFile)) THEN DEALLOCATE(InputFileData%PotFile) ENDIF @@ -608,54 +621,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 @@ -904,63 +883,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 @@ -1295,6 +1218,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' @@ -1450,87 +1375,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 @@ -1907,6 +1752,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' @@ -1942,6 +1790,201 @@ SUBROUTINE HydroDyn_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ENDIF 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%CurrMod = SrcInitInputData%CurrMod + 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%WvDiffQTFF = SrcInitInputData%WvDiffQTFF + DstInitInputData%WvSumQTFF = SrcInitInputData%WvSumQTFF +IF (ASSOCIATED(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) + i3_l = LBOUND(SrcInitInputData%WaveElev,3) + i3_u = UBOUND(SrcInitInputData%WaveElev,3) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev)) THEN + ALLOCATE(DstInitInputData%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 DstInitInputData%WaveElev.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElev = SrcInitInputData%WaveElev +ENDIF +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 (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%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%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 END SUBROUTINE HydroDyn_CopyInitInput SUBROUTINE HydroDyn_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) @@ -1957,6 +2000,49 @@ SUBROUTINE HydroDyn_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) IF (ALLOCATED(InitInputData%WaveElevXY)) THEN DEALLOCATE(InitInputData%WaveElevXY) ENDIF +IF (ASSOCIATED(InitInputData%WaveElev)) THEN + DEALLOCATE(InitInputData%WaveElev) + InitInputData%WaveElev => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElev1)) THEN + DEALLOCATE(InitInputData%WaveElev1) + InitInputData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElev2)) THEN + DEALLOCATE(InitInputData%WaveElev2) + InitInputData%WaveElev2 => NULL() +ENDIF +IF (ALLOCATED(InitInputData%WaveElev0)) THEN + DEALLOCATE(InitInputData%WaveElev0) +ENDIF +IF (ASSOCIATED(InitInputData%WaveTime)) THEN + DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveDynP)) THEN + DEALLOCATE(InitInputData%WaveDynP) + InitInputData%WaveDynP => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveAcc)) THEN + DEALLOCATE(InitInputData%WaveAcc) + InitInputData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveVel)) THEN + DEALLOCATE(InitInputData%WaveVel) + InitInputData%WaveVel => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN + DEALLOCATE(InitInputData%WaveElevC0) + InitInputData%WaveElevC0 => NULL() +ENDIF +IF (ALLOCATED(InitInputData%WaveElevC)) THEN + DEALLOCATE(InitInputData%WaveElevC) +ENDIF +IF (ASSOCIATED(InitInputData%WaveDirArr)) THEN + DEALLOCATE(InitInputData%WaveDirArr) + InitInputData%WaveDirArr => NULL() +ENDIF + CALL SeaSt_Interp_DestroyParam( InitInputData%SeaSt_Interp_p, ErrStat, ErrMsg ) END SUBROUTINE HydroDyn_DestroyInitInput SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -2029,24 +2115,116 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, END IF 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 + 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 ! CurrMod + 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 ! WvDiffQTFF + Int_BufSz = Int_BufSz + 1 ! WvSumQTFF + 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 - 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 + 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 - 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) + 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 ! 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 ! 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 + 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 @@ -2112,62 +2290,821 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE - IntKiBuf( Int_Xferred ) = 1 + 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%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%CurrMod + 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%WvDiffQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%WvSumQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + 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. 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 + 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%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%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 + 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%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) + Int_Xferred = Int_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%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%CurrMod = 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%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 + 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 ! 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 ! 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 ! 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 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevXY,1) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,1) + i1_l = IntKiBuf( Int_Xferred ) + i1_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevXY,2) - IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevXY,2) + i2_l = IntKiBuf( Int_Xferred ) + i2_u = IntKiBuf( Int_Xferred + 1) 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 + 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 - ReKiBuf(Re_Xferred) = InData%PtfmLocationX + 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 - ReKiBuf(Re_Xferred) = InData%PtfmLocationY + OutData%WaveDirMax = REAL(ReKiBuf(Re_Xferred), SiKi) 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) :: 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) + 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 @@ -2201,58 +3138,13 @@ SUBROUTINE HydroDyn_UnPackInitInput( 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_Unpackfileinfotype( Re_Buf, Db_Buf, Int_Buf, OutData%PassedFileData, ErrStat2, ErrMsg2 ) ! PassedFileData + 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) - 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%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) - Int_Xferred = Int_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%PtfmLocationX = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 - OutData%PtfmLocationY = ReKiBuf(Re_Xferred) - Re_Xferred = Re_Xferred + 1 END SUBROUTINE HydroDyn_UnPackInitInput SUBROUTINE HydroDyn_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) @@ -2303,9 +3195,6 @@ SUBROUTINE HydroDyn_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCo 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 @@ -2436,7 +3325,6 @@ SUBROUTINE HydroDyn_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(InitOutputData%WAMIT2) ENDIF - CALL Waves2_DestroyInitOutput( InitOutputData%Waves2, ErrStat, ErrMsg ) CALL Morison_DestroyInitOutput( InitOutputData%Morison, ErrStat, ErrMsg ) IF (ALLOCATED(InitOutputData%WriteOutputHdr)) THEN DEALLOCATE(InitOutputData%WriteOutputHdr) @@ -2547,23 +3435,6 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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) @@ -2750,34 +3621,6 @@ SUBROUTINE HydroDyn_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ENDIF END DO 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(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 @@ -3117,46 +3960,6 @@ SUBROUTINE HydroDyn_UnPackInitOutput( 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_UnpackInitOutput( 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 @@ -3838,9 +4641,6 @@ SUBROUTINE HydroDyn_CopyContState( SrcContStateData, DstContStateData, CtrlCode, 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 @@ -3867,7 +4667,6 @@ SUBROUTINE HydroDyn_DestroyContState( ContStateData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(ContStateData%WAMIT2) ENDIF - CALL Waves2_DestroyContState( ContStateData%Waves2, ErrStat, ErrMsg ) CALL Morison_DestroyContState( ContStateData%Morison, ErrStat, ErrMsg ) END SUBROUTINE HydroDyn_DestroyContState @@ -3953,23 +4752,6 @@ SUBROUTINE HydroDyn_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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) @@ -4065,38 +4847,8 @@ SUBROUTINE HydroDyn_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 + 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 @@ -4124,6 +4876,8 @@ SUBROUTINE HydroDyn_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF + END DO + END IF 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 @@ -4293,46 +5047,6 @@ SUBROUTINE HydroDyn_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta 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 @@ -4422,9 +5136,6 @@ SUBROUTINE HydroDyn_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, 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 @@ -4451,7 +5162,6 @@ SUBROUTINE HydroDyn_DestroyDiscState( DiscStateData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(DiscStateData%WAMIT2) ENDIF - CALL Waves2_DestroyDiscState( DiscStateData%Waves2, ErrStat, ErrMsg ) CALL Morison_DestroyDiscState( DiscStateData%Morison, ErrStat, ErrMsg ) END SUBROUTINE HydroDyn_DestroyDiscState @@ -4537,23 +5247,6 @@ SUBROUTINE HydroDyn_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 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) @@ -4680,34 +5373,6 @@ SUBROUTINE HydroDyn_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 @@ -4877,46 +5542,6 @@ SUBROUTINE HydroDyn_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta 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 @@ -4979,9 +5604,6 @@ SUBROUTINE HydroDyn_CopyConstrState( SrcConstrStateData, DstConstrStateData, Ctr 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 @@ -4998,7 +5620,6 @@ SUBROUTINE HydroDyn_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg ) ErrMsg = "" CALL WAMIT_DestroyConstrState( ConstrStateData%WAMIT, ErrStat, ErrMsg ) CALL WAMIT2_DestroyConstrState( ConstrStateData%WAMIT2, ErrStat, ErrMsg ) - CALL Waves2_DestroyConstrState( ConstrStateData%Waves2, ErrStat, ErrMsg ) CALL Morison_DestroyConstrState( ConstrStateData%Morison, ErrStat, ErrMsg ) END SUBROUTINE HydroDyn_DestroyConstrState @@ -5072,23 +5693,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 ! 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) @@ -5165,34 +5769,6 @@ SUBROUTINE HydroDyn_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat 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 - 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 @@ -5350,46 +5926,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 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) @@ -5482,9 +6018,6 @@ SUBROUTINE HydroDyn_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCo 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 @@ -5511,7 +6044,6 @@ SUBROUTINE HydroDyn_DestroyOtherState( OtherStateData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(OtherStateData%WAMIT2) ENDIF - CALL Waves2_DestroyOtherState( OtherStateData%Waves2, ErrStat, ErrMsg ) CALL Morison_DestroyOtherState( OtherStateData%Morison, ErrStat, ErrMsg ) END SUBROUTINE HydroDyn_DestroyOtherState @@ -5597,23 +6129,6 @@ SUBROUTINE HydroDyn_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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) @@ -5701,46 +6216,16 @@ SUBROUTINE HydroDyn_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 + 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 @@ -5768,6 +6253,8 @@ SUBROUTINE HydroDyn_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF + END DO + END IF 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 @@ -5937,46 +6424,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 @@ -6103,9 +6550,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 @@ -6141,9 +6585,6 @@ SUBROUTINE HydroDyn_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMs 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 ) @@ -6176,7 +6617,6 @@ SUBROUTINE HydroDyn_DestroyMisc( MiscData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(MiscData%WAMIT2) ENDIF - CALL Waves2_DestroyMisc( MiscData%Waves2, ErrStat, ErrMsg ) CALL Morison_DestroyMisc( MiscData%Morison, ErrStat, ErrMsg ) IF (ALLOCATED(MiscData%u_WAMIT)) THEN DO i1 = LBOUND(MiscData%u_WAMIT,1), UBOUND(MiscData%u_WAMIT,1) @@ -6190,7 +6630,6 @@ SUBROUTINE HydroDyn_DestroyMisc( MiscData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(MiscData%u_WAMIT2) ENDIF - CALL Waves2_DestroyInput( MiscData%u_Waves2, ErrStat, ErrMsg ) END SUBROUTINE HydroDyn_DestroyMisc SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -6340,23 +6779,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) @@ -6420,23 +6842,6 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 @@ -6670,34 +7075,6 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -6808,34 +7185,6 @@ SUBROUTINE HydroDyn_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ENDIF END DO END IF - CALL Waves2_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u_Waves2, ErrStat2, ErrMsg2, OnlySize ) ! u_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 END SUBROUTINE HydroDyn_PackMisc SUBROUTINE HydroDyn_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -7145,46 +7494,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 @@ -7337,46 +7646,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_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 ) @@ -7431,9 +7700,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 @@ -7443,10 +7709,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) @@ -7456,49 +7722,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) @@ -7649,19 +7872,10 @@ SUBROUTINE HydroDyn_DestroyParam( ParamData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(ParamData%WAMIT2) ENDIF - CALL Waves2_DestroyParam( ParamData%Waves2, ErrStat, ErrMsg ) CALL Morison_DestroyParam( ParamData%Morison, ErrStat, ErrMsg ) -IF (ALLOCATED(ParamData%WaveTime)) THEN +IF (ASSOCIATED(ParamData%WaveTime)) THEN 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) @@ -7777,23 +7991,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) @@ -7817,28 +8014,12 @@ SUBROUTINE HydroDyn_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM Int_BufSz = Int_BufSz + 1 ! totalStates 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 - 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 + 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 ! NStepWave Re_BufSz = Re_BufSz + 1 ! WtrDpth Int_BufSz = Int_BufSz + 1 ! AddF0 allocated yes/no IF ( ALLOCATED(InData%AddF0) ) THEN @@ -8023,34 +8204,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 @@ -8091,7 +8244,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 @@ -8108,68 +8261,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 @@ -8533,46 +8624,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 @@ -8632,7 +8683,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) @@ -8645,77 +8696,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 @@ -9402,9 +9382,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 @@ -9446,7 +9423,6 @@ SUBROUTINE HydroDyn_DestroyOutput( OutputData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(OutputData%WAMIT2) ENDIF - CALL Waves2_DestroyOutput( OutputData%Waves2, ErrStat, ErrMsg ) CALL Morison_DestroyOutput( OutputData%Morison, ErrStat, ErrMsg ) CALL MeshDestroy( OutputData%WAMITMesh, ErrStat, ErrMsg ) IF (ALLOCATED(OutputData%WriteOutput)) THEN @@ -9536,23 +9512,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) @@ -9701,34 +9660,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 @@ -9941,46 +9872,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 @@ -10350,8 +10241,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 ) @@ -10431,8 +10320,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 1333c31d5c..78a5d31829 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 @@ -1887,6 +1888,7 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In p%NMOutputs = InitInp%NMOutputs ! Number of members to output [ >=0 and <10] p%OutSwtch = InitInp%OutSwtch p%MSL2SWL = InitInp%MSL2SWL + p%WaveDisp = InitInp%WaveDisp ALLOCATE ( p%MOutLst(p%NMOutputs), STAT = errStat ) IF ( errStat /= ErrID_None ) THEN @@ -2158,6 +2160,10 @@ 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: + + ! Setup the 4D grid information for the Interpolatin Module + p%seast_interp_p = InitInp%seast_interp_p + ! Initialize the outputs IF ( p%OutSwtch > 0) then !@mhall: moved this "if" to after allocations @@ -2318,37 +2324,11 @@ 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 + + p%WaveVel => InitInp%WaveVel + p%WaveAcc => InitInp%WaveAcc + p%WaveDynP => InitInp%WaveDynP + p%WaveTime => InitInp%WaveTime END SUBROUTINE AllocateNodeLoadVariables @@ -2399,7 +2379,14 @@ SUBROUTINE Morison_End( u, p, x, xd, z, OtherState, y, m, errStat, errMsg ) ! Destroy the parameter data: - + ! First need to nullify pointers so that SeaState module data is not deallocation by HD + nullify(p%WaveTime) + nullify(p%WaveDynP) + nullify(p%WaveAcc) + nullify(p%WaveVel) + nullify(p%WaveElev) + nullify(p%WaveElev1) + nullify(p%WaveElev2) CALL Morison_DestroyParam( p, errStat, errMsg ) @@ -2564,7 +2551,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, REAL(ReKi) :: D_AM_M(6,6) REAL(ReKi) :: nodeInWater REAL(ReKi) :: D_dragConst ! The distributed drag factor - REAL(ReKi) :: InterpolationSlope + ! REAL(ReKi) :: InterpolationSlope @@ -2631,23 +2618,43 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, Imat = 0.0_ReKi g = p%Gravity - 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 ) + !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 and initial Z location + pos1(1) = u%Mesh%Position(1,j) + pos1(2) = u%Mesh%Position(2,j) + else + ! Use current X,Y location and initial Z 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 + + pos1(3) = u%Mesh%Position(3,j) - p%MSL2SWL ! We are intentionally using the undisplaced Z position of the node. + if ( pos1(3) <= 0.0 ) then + ! 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, 'SeaState_CalcOutput' ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + else + m%FV(:,j) = 0.0 + m%FA(:,j) = 0.0 + m%FDynP(j) = 0.0 + end if + + m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) - ! 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 ! ============================================================================================== @@ -2785,13 +2792,13 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, ! ------------------- buoyancy loads: sides: Sections 3.1 and 3.2 ------------------------ !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 < 0.0_ReKi) then ! if segment is at least partially submerged ... - if (z1*z2 <= 0) then ! special calculation if the slice is partially submerged + + if (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 + if (( i == 1 ) .and. (z2 > 0.0_ReKi)) 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 diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index 2943d32c35..1bc9039c3b 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -13,16 +13,17 @@ # ...... 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" - +param Morison/Morison unused INTEGER MaxMrsnOutputs - 4626 - "Total number of possible Morison module output channels" - typedef ^ 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 @@ -73,7 +74,7 @@ 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" - @@ -206,6 +207,7 @@ 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 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" - @@ -251,11 +253,15 @@ typedef ^ ^ CHARACTER(1 typedef ^ ^ INTEGER UnOutFile - - - "" - typedef ^ ^ INTEGER UnSum - - - "" - typedef ^ ^ INTEGER NStepWave - - - "" - -typedef ^ ^ SiKi WaveAcc {:}{:}{:} - - "" - -typedef ^ ^ SiKi WaveTime {:} - - "" - -typedef ^ ^ SiKi WaveDynP {:}{:} - - "" - -typedef ^ ^ SiKi WaveVel {:}{:}{:} - - "" - +typedef ^ ^ SiKi WaveElev {*}{*}{*} - - "Total wave elevation" - +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" - +typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" - +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 ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - # # # Define outputs from the initialization routine here: @@ -300,6 +306,9 @@ typedef ^ OtherStateType IntKi 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 FDynP {:} - - "Fluid dynamic pressure at line element node at time t, which may not correspond to the WaveTime array of times" - +typedef ^ ^ ReKi WaveElev {:} - - "Total wave elevation" m +typedef ^ ^ ReKi WaveElev1 {:} - - "First order wave elevation" m +typedef ^ ^ ReKi 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" - @@ -310,6 +319,7 @@ typedef ^ ^ ReKi 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 ^ ^ 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 +330,7 @@ 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 NMembers - - - "number of members" - typedef ^ ^ Morison_MemberType Members {:} - - "Array of Morison members used during simulation" - typedef ^ ^ INTEGER NNodes - - - "" - @@ -331,11 +342,14 @@ typedef ^ ^ ReKi 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 WaveElev {*}{*}{*} - - "Total wave elevation" m +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" m +typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" m +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 ^ ^ INTEGER NStepWave - - - "" - typedef ^ ^ INTEGER NMOutputs - - - "" - typedef ^ ^ Morison_MOutput MOutLst {:} - - "" - @@ -349,6 +363,7 @@ typedef ^ ^ INTEGER 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" - # # # ..... Inputs .................................................................................................................... diff --git a/modules/hydrodyn/src/Morison_Output.f90 b/modules/hydrodyn/src/Morison_Output.f90 index 8c8a2b2caf..7d4b2ae5f6 100644 --- a/modules/hydrodyn/src/Morison_Output.f90 +++ b/modules/hydrodyn/src/Morison_Output.f90 @@ -50,4620 +50,4646 @@ MODULE Morison_Output ! Time: INTEGER(IntKi), PARAMETER :: Time = 0 - ! 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 : - 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 @@ -6264,6 +6290,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 , & @@ -6391,9 +6429,9 @@ MODULE Morison_Output ! 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) :: ValidParamAry(4626) ! This lists the names of the allowed parameters, which must be sorted alphabetically + INTEGER(IntKi) :: ParamIndxAry(4626) ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + CHARACTER(OutStrLenM1) :: ParamUnitsAry(4626) ! This lists the names of the allowed parameters, which must be sorted alphabetically ! ..... Public Subroutines ................................................................................................... @@ -6554,6 +6592,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 @@ -6988,2025 +7029,2019 @@ FUNCTION GetMorisonChannels ( NUserOutputs, UserOutputs, OutList, foundMask 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) "/) + ValidParamAry(1:497) = (/ & ! 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 "/) + ValidParamAry(498:994) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 "/) + ValidParamAry(995:1491) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 "/) + ValidParamAry(1492:1988) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 ","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 "/) + ValidParamAry(1989:2485) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 "/) + ValidParamAry(2486:2982) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 "/) + ValidParamAry(2983:3479) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 ","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 "/) + ValidParamAry(3480:3976) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 "/) + ValidParamAry(3977:4473) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 "/) + ValidParamAry(4474:4626) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "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 "/) + ParamIndxAry(1:497) = (/ & ! 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 /) + ParamIndxAry(498:994) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 /) + ParamIndxAry(995:1491) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 /) + ParamIndxAry(1492:1988) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 , 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 /) + ParamIndxAry(1989:2485) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 /) + ParamIndxAry(2486:2982) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 /) + ParamIndxAry(2983:3479) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 , 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 /) + ParamIndxAry(3480:3976) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 /) + ParamIndxAry(3977:4473) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 /) + ParamIndxAry(4474:4626) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + 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 /) + ParamUnitsAry(1:497) = (/ & ! 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) ","(Pa) ","(Pa) ","(Pa) ","(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) ","(Pa) ","(Pa) ", & + "(Pa) ","(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) ","(Pa) ","(Pa) ","(Pa) ","(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) ","(Pa) ", & + "(Pa) ","(Pa) ","(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) ","(Pa) ","(Pa) ","(Pa) ","(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) ", & + "(Pa) ","(Pa) ","(Pa) ","(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) ","(Pa) ","(Pa) ","(Pa) ", & + "(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) ","(Pa) ","(Pa) ","(Pa) ","(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) ","(Pa) ","(Pa) ", & + "(Pa) ","(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)"/) + ParamUnitsAry(498:994) = (/ & ! 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)", & + "(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) "/) + ParamUnitsAry(995:1491) = (/ & ! 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) ","(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)"/) + ParamUnitsAry(1492:1988) = (/ & ! 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)","(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) "/) + ParamUnitsAry(1989:2485) = (/ & ! 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) ","(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)"/) + ParamUnitsAry(2486:2982) = (/ & ! This lists the units corresponding to the allowed parameters + "(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) "/) + ParamUnitsAry(2983:3479) = (/ & ! 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/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)","(N-m/m)", & + "(N-m/m)","(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) "/) + ParamUnitsAry(3480:3976) = (/ & ! This lists the units corresponding to the allowed parameters + "(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) "/) + ParamUnitsAry(3977:4473) = (/ & ! This lists the units corresponding to the allowed parameters + "(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)"/) + ParamUnitsAry(4474:4626) = (/ & ! This lists the units corresponding to the allowed parameters + "(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) "/) diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index 09060ae3ff..d75a7d101a 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -31,9 +31,10 @@ !! 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 [-] + INTEGER(IntKi), PUBLIC, PARAMETER :: MaxMrsnOutputs = 4626 ! 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 +43,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 ======= @@ -115,7 +116,7 @@ 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 [-] @@ -269,6 +270,7 @@ 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) :: 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 [-] @@ -314,11 +316,15 @@ MODULE Morison_Types 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 !< [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev => NULL() !< Total wave elevation [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< [-] 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(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] END TYPE Morison_InitInputType ! ======================= ! ========= Morison_InitOutputType ======= @@ -352,6 +358,9 @@ MODULE Morison_Types 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 :: FDynP !< Fluid dynamic pressure at line element node at time t, which may not correspond to the WaveTime array of times [-] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WaveElev !< Total wave elevation [m] + REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WaveElev1 !< First order wave elevation [m] + REAL(ReKi) , 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 [-] @@ -362,6 +371,7 @@ MODULE Morison_Types 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 !< [-] 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 +381,7 @@ 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) :: NMembers !< number of members [-] TYPE(Morison_MemberType) , DIMENSION(:), ALLOCATABLE :: Members !< Array of Morison members used during simulation [-] INTEGER(IntKi) :: NNodes !< [-] @@ -382,10 +393,13 @@ MODULE Morison_Types 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] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev => NULL() !< Total wave elevation [m] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation [m] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [m] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< 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 [-] INTEGER(IntKi) :: NStepWave !< [-] INTEGER(IntKi) :: NMOutputs !< [-] @@ -400,6 +414,7 @@ MODULE Morison_Types CHARACTER(20) :: OutFmt !< [-] CHARACTER(20) :: OutSFmt !< [-] CHARACTER(ChanLen) :: Delim !< [-] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] END TYPE Morison_ParameterType ! ======================= ! ========= Morison_InputType ======= @@ -425,6 +440,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' @@ -556,6 +573,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' @@ -5878,6 +5897,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' @@ -5888,6 +5909,7 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, DstInitInputData%WtrDens = SrcInitInputData%WtrDens DstInitInputData%WtrDpth = SrcInitInputData%WtrDpth DstInitInputData%MSL2SWL = SrcInitInputData%MSL2SWL + DstInitInputData%WaveDisp = SrcInitInputData%WaveDisp DstInitInputData%NJoints = SrcInitInputData%NJoints DstInitInputData%NNodes = SrcInitInputData%NNodes IF (ALLOCATED(SrcInitInputData%InpJoints)) THEN @@ -6109,15 +6131,67 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, DstInitInputData%UnOutFile = SrcInitInputData%UnOutFile DstInitInputData%UnSum = SrcInitInputData%UnSum DstInitInputData%NStepWave = SrcInitInputData%NStepWave -IF (ALLOCATED(SrcInitInputData%WaveAcc)) THEN +IF (ASSOCIATED(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) + i3_l = LBOUND(SrcInitInputData%WaveElev,3) + i3_u = UBOUND(SrcInitInputData%WaveElev,3) + IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev)) THEN + ALLOCATE(DstInitInputData%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 DstInitInputData%WaveElev.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%WaveElev = SrcInitInputData%WaveElev +ENDIF +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 @@ -6125,10 +6199,10 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, END IF DstInitInputData%WaveAcc = SrcInitInputData%WaveAcc ENDIF -IF (ALLOCATED(SrcInitInputData%WaveTime)) THEN +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) @@ -6137,13 +6211,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 @@ -6151,15 +6229,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 @@ -6181,6 +6263,9 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, END IF DstInitInputData%nodeInWater = SrcInitInputData%nodeInWater 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 Morison_CopyInitInput SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) @@ -6261,21 +6346,38 @@ SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) IF (ALLOCATED(InitInputData%ValidOutList)) THEN DEALLOCATE(InitInputData%ValidOutList) ENDIF -IF (ALLOCATED(InitInputData%WaveAcc)) THEN +IF (ASSOCIATED(InitInputData%WaveElev)) THEN + DEALLOCATE(InitInputData%WaveElev) + InitInputData%WaveElev => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElev1)) THEN + DEALLOCATE(InitInputData%WaveElev1) + InitInputData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElev2)) THEN + DEALLOCATE(InitInputData%WaveElev2) + InitInputData%WaveElev2 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveAcc)) THEN DEALLOCATE(InitInputData%WaveAcc) + InitInputData%WaveAcc => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN +IF (ASSOCIATED(InitInputData%WaveTime)) THEN DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveDynP)) THEN +IF (ASSOCIATED(InitInputData%WaveDynP)) THEN DEALLOCATE(InitInputData%WaveDynP) + InitInputData%WaveDynP => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveVel)) THEN +IF (ASSOCIATED(InitInputData%WaveVel)) THEN DEALLOCATE(InitInputData%WaveVel) + InitInputData%WaveVel => NULL() ENDIF IF (ALLOCATED(InitInputData%nodeInWater)) THEN DEALLOCATE(InitInputData%nodeInWater) ENDIF + CALL SeaSt_Interp_DestroyParam( InitInputData%SeaSt_Interp_p, ErrStat, ErrMsg ) END SUBROUTINE Morison_DestroyInitInput SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -6317,6 +6419,7 @@ 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 ! NJoints Int_BufSz = Int_BufSz + 1 ! NNodes Int_BufSz = Int_BufSz + 1 ! InpJoints allocated yes/no @@ -6609,24 +6712,39 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_BufSz = Int_BufSz + 1 ! UnOutFile Int_BufSz = Int_BufSz + 1 ! UnSum Int_BufSz = Int_BufSz + 1 ! NStepWave + 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 ! 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 ! 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 @@ -6634,6 +6752,23 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_BufSz = Int_BufSz + 2*2 ! nodeInWater upper/lower bounds for each dimension Int_BufSz = Int_BufSz + SIZE(InData%nodeInWater) ! nodeInWater 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 IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -6669,6 +6804,8 @@ 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%NJoints Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NNodes @@ -7207,7 +7344,82 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NStepWave Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveAcc) ) THEN + 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. 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%WaveAcc) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -7221,18 +7433,28 @@ 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. ALLOCATED(InData%WaveTime) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -7247,7 +7469,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 @@ -7258,16 +7480,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 @@ -7281,13 +7513,23 @@ 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 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 @@ -7312,6 +7554,34 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 END SUBROUTINE Morison_PackInitInput SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -7330,6 +7600,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' @@ -7351,6 +7623,8 @@ 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%NJoints = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 OutData%NNodes = IntKiBuf(Int_Xferred) @@ -8059,6 +8333,90 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Xferred = Int_Xferred + 1 OutData%NStepWave = 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 + 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 ! 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 ! WaveAcc not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -8072,17 +8430,27 @@ 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) + 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 @@ -8094,7 +8462,7 @@ SUBROUTINE Morison_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) @@ -8115,16 +8483,26 @@ 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 + 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 @@ -8141,17 +8519,27 @@ 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) - 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 @@ -8179,6 +8567,46 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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) END SUBROUTINE Morison_UnPackInitInput SUBROUTINE Morison_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) @@ -8972,6 +9400,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) @@ -9099,6 +9563,9 @@ SUBROUTINE Morison_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg DstMiscData%F_BF_End = SrcMiscData%F_BF_End 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 ) @@ -9119,6 +9586,15 @@ SUBROUTINE Morison_DestroyMisc( MiscData, ErrStat, ErrMsg ) 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 @@ -9149,6 +9625,7 @@ SUBROUTINE Morison_DestroyMisc( MiscData, ErrStat, ErrMsg ) IF (ALLOCATED(MiscData%F_BF_End)) THEN DEALLOCATE(MiscData%F_BF_End) ENDIF + CALL SeaSt_Interp_DestroyMisc( MiscData%SeaSt_Interp_m, ErrStat, ErrMsg ) END SUBROUTINE Morison_DestroyMisc SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -9201,6 +9678,21 @@ SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg 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 @@ -9266,13 +9758,30 @@ SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg 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 - 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 + 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 @@ -9348,6 +9857,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 @@ -9546,6 +10100,34 @@ SUBROUTINE Morison_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg 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 ) @@ -9640,6 +10222,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) = ReKiBuf(Re_Xferred) + 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) = ReKiBuf(Re_Xferred) + 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) = ReKiBuf(Re_Xferred) + Re_Xferred = Re_Xferred + 1 + END DO + END IF IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! vrel not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -9877,6 +10513,46 @@ SUBROUTINE Morison_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err 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 ) @@ -9890,6 +10566,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' @@ -9901,6 +10579,7 @@ 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%NMembers = SrcParamData%NMembers IF (ALLOCATED(SrcParamData%Members)) THEN i1_l = LBOUND(SrcParamData%Members,1) @@ -10018,15 +10697,67 @@ 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%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) + i3_l = LBOUND(SrcParamData%WaveElev,3) + i3_u = UBOUND(SrcParamData%WaveElev,3) + IF (.NOT. ASSOCIATED(DstParamData%WaveElev)) THEN + ALLOCATE(DstParamData%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 DstParamData%WaveElev.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstParamData%WaveElev = SrcParamData%WaveElev +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%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 @@ -10034,15 +10765,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 @@ -10050,13 +10785,17 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveAcc = SrcParamData%WaveAcc ENDIF -IF (ALLOCATED(SrcParamData%WaveDynP)) THEN +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 @@ -10064,10 +10803,10 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveDynP = SrcParamData%WaveDynP ENDIF -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) @@ -10148,6 +10887,9 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err 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 END SUBROUTINE Morison_CopyParam SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) @@ -10186,17 +10928,33 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) IF (ALLOCATED(ParamData%AM_End)) THEN DEALLOCATE(ParamData%AM_End) ENDIF -IF (ALLOCATED(ParamData%WaveVel)) THEN +IF (ASSOCIATED(ParamData%WaveElev)) THEN + DEALLOCATE(ParamData%WaveElev) + ParamData%WaveElev => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveElev1)) THEN + DEALLOCATE(ParamData%WaveElev1) + ParamData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveElev2)) THEN + DEALLOCATE(ParamData%WaveElev2) + ParamData%WaveElev2 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveVel)) THEN DEALLOCATE(ParamData%WaveVel) + ParamData%WaveVel => NULL() ENDIF -IF (ALLOCATED(ParamData%WaveAcc)) THEN +IF (ASSOCIATED(ParamData%WaveAcc)) THEN DEALLOCATE(ParamData%WaveAcc) + ParamData%WaveAcc => NULL() ENDIF -IF (ALLOCATED(ParamData%WaveDynP)) THEN +IF (ASSOCIATED(ParamData%WaveDynP)) THEN DEALLOCATE(ParamData%WaveDynP) + ParamData%WaveDynP => NULL() ENDIF -IF (ALLOCATED(ParamData%WaveTime)) THEN +IF (ASSOCIATED(ParamData%WaveTime)) THEN DEALLOCATE(ParamData%WaveTime) + ParamData%WaveTime => NULL() ENDIF IF (ALLOCATED(ParamData%nodeInWater)) THEN DEALLOCATE(ParamData%nodeInWater) @@ -10219,6 +10977,7 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(ParamData%OutParam) ENDIF + CALL SeaSt_Interp_DestroyParam( ParamData%SeaSt_Interp_p, ErrStat, ErrMsg ) END SUBROUTINE Morison_DestroyParam SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -10261,6 +11020,7 @@ 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 ! NMembers Int_BufSz = Int_BufSz + 1 ! Members allocated yes/no IF ( ALLOCATED(InData%Members) ) THEN @@ -10323,23 +11083,38 @@ 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 ! 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 ! 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 ! 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 ! 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 @@ -10427,6 +11202,23 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -10464,6 +11256,8 @@ 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%NMembers Int_Xferred = Int_Xferred + 1 IF ( .NOT. ALLOCATED(InData%Members) ) THEN @@ -10651,7 +11445,82 @@ 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%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. 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 @@ -10665,18 +11534,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 @@ -10690,18 +11569,28 @@ 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. ALLOCATED(InData%WaveDynP) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveDynP) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -10712,16 +11601,26 @@ 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. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -10905,6 +11804,34 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs IntKiBuf(Int_Xferred) = ICHAR(InData%Delim(I:I), IntKi) Int_Xferred = Int_Xferred + 1 END DO ! I + 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 Morison_PackParam SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -10923,6 +11850,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' @@ -10946,6 +11875,8 @@ 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%NMembers = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! Members not allocated @@ -11169,6 +12100,90 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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 ! 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 @@ -11182,17 +12197,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 @@ -11210,17 +12235,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%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 @@ -11235,16 +12270,26 @@ 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 @@ -11255,7 +12300,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) @@ -11483,6 +12528,46 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er OutData%Delim(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 + 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 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..b8733d8ad8 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,37 @@ 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(ReKi) :: positionXY(2) + + real(SiKi) :: GetWaveElevation(p%NBody) + TYPE(SS_Exc_InputType) :: u_out ! extra_interp result + integer :: iBody + ! 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_Input_ExtrapInterp(u_in, t_in, u_out, time, ErrStat, ErrMsg ) + do iBody = 1, p%NBody + GetWaveElevation(:) = SeaSt_Interp_3D( time, u_out%PtfmPos(1:2,iBody), p%WaveElev1, p%SeaSt_interp_p, ErrStat, ErrMsg ) + end do + ! call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + 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 +115,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 +149,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 +182,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 +263,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') @@ -334,7 +371,8 @@ SUBROUTINE SS_Exc_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ! Destroy the parameter data: - + nullify(p%WaveElev1) + nullify(p%WaveTime) CALL SS_Exc_DestroyParam( p, ErrStat, ErrMsg ) @@ -387,15 +425,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 +484,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 +495,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 +510,21 @@ SUBROUTINE SS_Exc_CalcContStateDeriv( Time, waveElev0, p, x, xd, z, OtherState, !Calc dxdt of a state space system ! [dxdt] = [A]*[xr]+B*[q] - - dxdt%x =matmul(p%A,x%x) + p%B * waveElev0 + 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) + Bwave END SUBROUTINE SS_Exc_CalcContStateDeriv !---------------------------------------------------------------------------------------------------------------------------------- @@ -549,12 +602,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 +626,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 +648,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 +662,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 +685,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 +773,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 +792,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 +827,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 +840,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 +906,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 +926,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 +940,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..1a329e9a4a 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" - +typedef ^ ^ SiKi WaveTime {*} - - "Times where wave elevation is known" 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" - @@ -50,19 +54,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" - +typedef ^ ^ SiKi WaveTime {*} - - "Times where wave elevation is known" 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_Types.f90 b/modules/hydrodyn/src/SS_Excitation_Types.f90 index 1dbef8c916..60fb6d6748 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 [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Times where wave elevation is known [s] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] END TYPE SS_Exc_InitInputType ! ======================= ! ========= SS_Exc_InitOutputType ======= @@ -80,20 +84,23 @@ MODULE SS_Excitation_Types 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 [-] + REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Times where wave elevation is known [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 +120,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 +129,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 +156,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 +184,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 ) @@ -176,9 +204,15 @@ SUBROUTINE SS_Exc_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) IF (ALLOCATED(InitInputData%WaveElev0)) THEN DEALLOCATE(InitInputData%WaveElev0) ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN +IF (ASSOCIATED(InitInputData%WaveElev1)) THEN + DEALLOCATE(InitInputData%WaveElev1) + InitInputData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveTime)) THEN DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() ENDIF + CALL SeaSt_Interp_DestroyParam( InitInputData%SeaSt_Interp_p, ErrStat, ErrMsg ) END SUBROUTINE SS_Exc_DestroyInitInput SUBROUTINE SS_Exc_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -218,6 +252,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 @@ -230,11 +265,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 @@ -268,6 +326,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 @@ -302,7 +362,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 @@ -317,6 +402,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 ) @@ -334,6 +447,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' @@ -353,6 +467,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) @@ -393,6 +509,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 @@ -400,7 +544,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) @@ -411,6 +555,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 ) @@ -1436,6 +1620,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' @@ -1444,8 +1629,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) @@ -1500,10 +1697,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) @@ -1512,6 +1725,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 ) @@ -1523,6 +1739,9 @@ SUBROUTINE SS_Exc_DestroyParam( ParamData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" +IF (ALLOCATED(ParamData%spDOF)) THEN + DEALLOCATE(ParamData%spDOF) +ENDIF IF (ALLOCATED(ParamData%A)) THEN DEALLOCATE(ParamData%A) ENDIF @@ -1535,9 +1754,15 @@ SUBROUTINE SS_Exc_DestroyParam( ParamData, ErrStat, ErrMsg ) IF (ALLOCATED(ParamData%WaveElev0)) THEN DEALLOCATE(ParamData%WaveElev0) ENDIF -IF (ALLOCATED(ParamData%WaveTime)) THEN +IF (ASSOCIATED(ParamData%WaveElev1)) THEN + DEALLOCATE(ParamData%WaveElev1) + ParamData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveTime)) THEN DEALLOCATE(ParamData%WaveTime) + ParamData%WaveTime => NULL() ENDIF + CALL SeaSt_Interp_DestroyParam( ParamData%SeaSt_Interp_p, ErrStat, ErrMsg ) END SUBROUTINE SS_Exc_DestroyParam SUBROUTINE SS_Exc_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -1577,8 +1802,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 @@ -1601,11 +1831,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 @@ -1637,12 +1890,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 @@ -1717,7 +1983,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 @@ -1732,6 +2023,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 ) @@ -1749,6 +2068,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' @@ -1766,14 +2086,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 @@ -1860,6 +2194,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 @@ -1867,7 +2229,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) @@ -1878,6 +2240,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 ) @@ -1888,13 +2290,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 ) @@ -1906,6 +2323,9 @@ SUBROUTINE SS_Exc_DestroyInput( InputData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" +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 ) @@ -1943,7 +2363,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 @@ -1971,8 +2395,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 ) @@ -1988,6 +2430,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' @@ -2001,8 +2445,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 ) @@ -2311,6 +2776,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 = "" @@ -2325,8 +2794,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 @@ -2362,6 +2837,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 = "" @@ -2382,9 +2861,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/WAMIT.f90 b/modules/hydrodyn/src/WAMIT.f90 index ef7e9c4f7b..c104e27219 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 @@ -136,6 +137,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,7 +161,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 :: I,iGrid,iX,iY ! 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 :: 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 @@ -225,9 +227,10 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init p%NStepWave = InitInp%NStepWave p%NumOuts = InitInp%NumOuts p%ExctnMod = InitInp%ExctnMod + p%ExctnDisp = InitInp%ExctnDisp 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') @@ -909,7 +912,7 @@ 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: @@ -930,21 +933,22 @@ 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, 'WAMIT_Init') + ! 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) @@ -957,6 +961,9 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init 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. + + 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,16 +972,14 @@ 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, 'WAMIT_Init') + CALL Cleanup() + RETURN + END IF - if ( p%ExctnMod == 1 ) then - ! Calculate the WaveExctn data from WAMIT data if ExctnMod = 1 ! ALLOCATE the arrays: @@ -986,12 +991,28 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init 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, 'WAMIT_Init') + 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, 'WAMIT_Init') + 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, 'WAMIT_Init') + CALL Cleanup() + RETURN + END IF + end if + !==================================== ! Transform the wave excitation coefs @@ -1059,7 +1080,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: @@ -1083,13 +1104,100 @@ SUBROUTINE WAMIT_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init 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, '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 + 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, 'WAMIT_Init') + 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, '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 + 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(3) + 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, 'WAMIT_Init') + 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, 'WAMIT_Init') + IF ( ErrStat >= AbortErrLev) THEN + CALL Cleanup() + RETURN + END IF + + end if + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Dump the HdroFreq variable to a file for debugging @@ -1121,34 +1229,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,78 +1237,88 @@ 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%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 - 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 stretcing: - 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,'WAMIT_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 ( 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,'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() + 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, 'WAMIT_Init') + ! 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) @@ -1439,6 +1530,8 @@ SUBROUTINE Cleanup() CALL SS_Rad_DestroyInitInput( SS_Rdtn_InitInp, ErrStat2, ErrMsg2 ) CALL SS_Rad_DestroyInitOutput( SS_Rdtn_InitOut, ErrStat2, ErrMsg2 ) + nullify(SS_Exctn_InitInp%WaveTime) + nullify(SS_Exctn_InitInp%WaveElev1) CALL SS_Exc_DestroyInitInput( SS_Exctn_InitInp, ErrStat2, ErrMsg2 ) CALL SS_Exc_DestroyInitOutput( SS_Exctn_InitOut, ErrStat2, ErrMsg2 ) @@ -1500,7 +1593,8 @@ SUBROUTINE WAMIT_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ! Destroy the parameter data: - + nullify(p%SS_Exctn%WaveElev1) + nullify(p%SS_Exctn%WaveTime) CALL WAMIT_DestroyParam( p, ErrStat, ErrMsg ) @@ -1641,6 +1735,26 @@ 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 + 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 + + 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 ) @@ -1674,16 +1788,19 @@ 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) :: I,iStart ! Generic index INTEGER(IntKi) :: J ! Generic index -! INTEGER(IntKi) :: K ! Generic index + INTEGER(IntKi) :: K ! 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 +1817,39 @@ 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 + 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 + + bodyPosition(1) = u%Mesh%TranslationDisp(1,iBody) + bodyPosition(2) = u%Mesh%TranslationDisp(2,iBody) + 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, 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 +1955,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 +1976,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..a5ef593082 100644 --- a/modules/hydrodyn/src/WAMIT.txt +++ b/modules/hydrodyn/src/WAMIT.txt @@ -16,7 +16,8 @@ include Registry_NWTC_Library.txt usefrom Conv_Radiation.txt usefrom SS_Radiation.txt usefrom SS_Excitation.txt -usefrom Waves.txt +#usefrom Waves.txt +usefrom SeaState_Interp.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]" - 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]" - @@ -33,6 +34,7 @@ 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 ^ ^ DbKi RdtnTMax - - - "" - typedef ^ ^ ReKi WaveDir - - - "" - typedef ^ ^ CHARACTER(1024) WAMITFile - - - "" - @@ -44,16 +46,19 @@ 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" - +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 WaveTime {*} - - "" - 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" - 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: @@ -118,7 +123,9 @@ 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 ^ ^ 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 - - - "" - @@ -131,6 +138,7 @@ typedef ^ ^ CHARACTER(2 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.txt b/modules/hydrodyn/src/WAMIT2.txt index 9a500b34ab..be56422695 100644 --- a/modules/hydrodyn/src/WAMIT2.txt +++ b/modules/hydrodyn/src/WAMIT2.txt @@ -36,13 +36,13 @@ typedef ^ ^ ReKi WtrDens typedef ^ ^ ReKi Gravity - - - "Supplied by Driver: Gravitational acceleration" (m/s^2) typedef ^ ^ SiKi 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" (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" (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 ^ ^ 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." - @@ -97,8 +97,8 @@ 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 ^ ParameterType SiKi WaveTime {*} - - "Simulation times at which the instantaneous second order loads associated with the incident waves are determined" sec +typedef ^ ParameterType IntKi NStepWave - - - "Number of wave time steps" - typedef ^ ^ DbKi DT - - - "" - 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]" - diff --git a/modules/hydrodyn/src/WAMIT2_Types.f90 b/modules/hydrodyn/src/WAMIT2_Types.f90 index 27627976a3..0aefaede22 100644 --- a/modules/hydrodyn/src/WAMIT2_Types.f90 +++ b/modules/hydrodyn/src/WAMIT2_Types.f90 @@ -53,13 +53,12 @@ MODULE WAMIT2_Types 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(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) :: 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 [(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} [-] @@ -110,7 +109,6 @@ 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] [-] @@ -221,12 +219,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 +235,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 +249,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 @@ -301,14 +287,13 @@ SUBROUTINE WAMIT2_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) IF (ALLOCATED(InitInputData%PtfmRefztRot)) THEN DEALLOCATE(InitInputData%PtfmRefztRot) ENDIF -IF (ALLOCATED(InitInputData%WaveElevC0)) THEN +IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN DEALLOCATE(InitInputData%WaveElevC0) + InitInputData%WaveElevC0 => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveDirArr)) THEN +IF (ASSOCIATED(InitInputData%WaveDirArr)) THEN DEALLOCATE(InitInputData%WaveDirArr) -ENDIF -IF (ALLOCATED(InitInputData%WaveTime)) THEN - DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveDirArr => NULL() ENDIF END SUBROUTINE WAMIT2_DestroyInitInput @@ -381,24 +366,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 @@ -529,7 +509,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 @@ -553,7 +533,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 @@ -572,21 +552,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 @@ -757,7 +722,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) @@ -781,7 +746,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) @@ -796,24 +761,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) @@ -1673,18 +1620,6 @@ SUBROUTINE WAMIT2_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM ! 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 @@ -1744,9 +1679,6 @@ SUBROUTINE WAMIT2_DestroyParam( ParamData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" -IF (ALLOCATED(ParamData%WaveTime)) THEN - DEALLOCATE(ParamData%WaveTime) -ENDIF IF (ALLOCATED(ParamData%WaveExctn2)) THEN DEALLOCATE(ParamData%WaveExctn2) ENDIF @@ -1793,11 +1725,6 @@ SUBROUTINE WAMIT2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 @@ -1872,21 +1799,6 @@ SUBROUTINE WAMIT2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg 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 @@ -2028,24 +1940,6 @@ SUBROUTINE WAMIT2_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err 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) diff --git a/modules/hydrodyn/src/WAMIT_Types.f90 b/modules/hydrodyn/src/WAMIT_Types.f90 index d5f86e17dd..650e58bbb0 100644 --- a/modules/hydrodyn/src/WAMIT_Types.f90 +++ b/modules/hydrodyn/src/WAMIT_Types.f90 @@ -33,8 +33,8 @@ 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 ! [-] @@ -55,6 +55,7 @@ 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(DbKi) :: RdtnTMax !< [-] REAL(ReKi) :: WaveDir !< [-] CHARACTER(1024) :: WAMITFile !< [-] @@ -64,16 +65,19 @@ 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 [-] + 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 :: WaveTime => NULL() !< [-] 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 [-] 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 ======= @@ -136,7 +140,9 @@ 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(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 !< [-] @@ -149,6 +155,7 @@ MODULE WAMIT_Types 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 +179,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 +279,7 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er ENDIF DstInitInputData%RdtnMod = SrcInitInputData%RdtnMod DstInitInputData%ExctnMod = SrcInitInputData%ExctnMod + DstInitInputData%ExctnDisp = SrcInitInputData%ExctnDisp DstInitInputData%RdtnTMax = SrcInitInputData%RdtnTMax DstInitInputData%WaveDir = SrcInitInputData%WaveDir DstInitInputData%WAMITFile = SrcInitInputData%WAMITFile @@ -292,12 +302,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 +332,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 +362,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) @@ -337,6 +379,9 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er 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 ) @@ -373,15 +418,26 @@ SUBROUTINE WAMIT_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) IF (ALLOCATED(InitInputData%WaveElev0)) THEN DEALLOCATE(InitInputData%WaveElev0) ENDIF -IF (ALLOCATED(InitInputData%WaveElevC0)) THEN +IF (ASSOCIATED(InitInputData%WaveElev1)) THEN + DEALLOCATE(InitInputData%WaveElev1) + InitInputData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN 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 DEALLOCATE(InitInputData%WaveTime) + InitInputData%WaveTime => NULL() ENDIF -IF (ALLOCATED(InitInputData%WaveDirArr)) THEN +IF (ASSOCIATED(InitInputData%WaveDirArr)) THEN DEALLOCATE(InitInputData%WaveDirArr) + InitInputData%WaveDirArr => NULL() ENDIF + CALL SeaSt_Interp_DestroyParam( InitInputData%SeaSt_Interp_p, ErrStat, ErrMsg ) END SUBROUTINE WAMIT_DestroyInitInput SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -462,6 +518,7 @@ 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 Db_BufSz = Db_BufSz + 1 ! RdtnTMax Re_BufSz = Re_BufSz + 1 ! WaveDir Int_BufSz = Int_BufSz + 1*LEN(InData%WAMITFile) ! WAMITFile @@ -492,20 +549,30 @@ 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 @@ -514,6 +581,23 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 @@ -662,6 +746,8 @@ 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 DbKiBuf(Db_Xferred) = InData%RdtnTMax Db_Xferred = Db_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WaveDir @@ -721,7 +807,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 @@ -741,7 +852,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 @@ -760,7 +896,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 @@ -789,6 +925,34 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 ) @@ -806,6 +970,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' @@ -961,6 +1127,8 @@ 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%RdtnTMax = DbKiBuf(Db_Xferred) Db_Xferred = Db_Xferred + 1 OutData%WaveDir = ReKiBuf(Re_Xferred) @@ -1035,6 +1203,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 @@ -1045,7 +1241,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) @@ -1058,6 +1254,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 @@ -1065,7 +1289,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) @@ -1087,7 +1311,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) @@ -1114,6 +1338,46 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Int_Xferred = Int_Xferred + 1 OutData%NumOuts = 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 WAMIT_UnPackInitInput SUBROUTINE WAMIT_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) @@ -3940,6 +4204,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' @@ -3992,6 +4258,7 @@ SUBROUTINE WAMIT_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs ENDIF DstParamData%RdtnMod = SrcParamData%RdtnMod DstParamData%ExctnMod = SrcParamData%ExctnMod + DstParamData%ExctnDisp = SrcParamData%ExctnDisp IF (ALLOCATED(SrcParamData%WaveExctn)) THEN i1_l = LBOUND(SrcParamData%WaveExctn,1) i1_u = UBOUND(SrcParamData%WaveExctn,1) @@ -4005,6 +4272,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 ) @@ -4039,6 +4324,9 @@ SUBROUTINE WAMIT_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs DstParamData%OutSFmt = SrcParamData%OutSFmt DstParamData%Delim = SrcParamData%Delim DstParamData%UnOutFile = SrcParamData%UnOutFile + 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 WAMIT_CopyParam SUBROUTINE WAMIT_DestroyParam( ParamData, ErrStat, ErrMsg ) @@ -4061,6 +4349,9 @@ SUBROUTINE WAMIT_DestroyParam( ParamData, ErrStat, ErrMsg ) 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, ErrStat, ErrMsg ) CALL SS_Rad_DestroyParam( ParamData%SS_Rdtn, ErrStat, ErrMsg ) @@ -4071,6 +4362,7 @@ SUBROUTINE WAMIT_DestroyParam( ParamData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(ParamData%OutParam) ENDIF + CALL SeaSt_Interp_DestroyParam( ParamData%SeaSt_Interp_p, ErrStat, ErrMsg ) END SUBROUTINE WAMIT_DestroyParam SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) @@ -4127,10 +4419,16 @@ 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 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) @@ -4215,6 +4513,23 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 + 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 @@ -4310,6 +4625,8 @@ 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 IF ( .NOT. ALLOCATED(InData%WaveExctn) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -4329,6 +4646,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 @@ -4477,6 +4824,34 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, END DO ! I IntKiBuf(Int_Xferred) = InData%UnOutFile 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_PackParam SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -4494,6 +4869,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' @@ -4584,6 +4961,8 @@ 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 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveExctn not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -4606,6 +4985,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 @@ -4805,6 +5217,46 @@ SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM END DO ! I OutData%UnOutFile = 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 WAMIT_UnPackParam SUBROUTINE WAMIT_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index 479d5a5d0f..6951383fe0 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -3,7 +3,7 @@ ! 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: HD +! "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 @@ -38,23 +38,23 @@ MODULE SeaState PRIVATE - TYPE(ProgDesc), PARAMETER :: SeaState_ProgDesc = ProgDesc( 'SeaState', '', '' ) + TYPE(ProgDesc), PARAMETER :: SeaSt_ProgDesc = ProgDesc( 'SeaState', '', '' ) ! ..... Public Subroutines ................................................................................................... - PUBLIC :: SeaState_Init ! Initialization routine - PUBLIC :: SeaState_End ! Ending routine (includes clean up) + PUBLIC :: SeaSt_Init ! Initialization routine + PUBLIC :: SeaSt_End ! Ending routine (includes clean up) - PUBLIC :: SeaState_UpdateStates ! Loose coupling routine for solving for constraint states, integrating + PUBLIC :: SeaSt_UpdateStates ! Loose coupling routine for solving for constraint states, integrating ! continuous states, and updating discrete states - PUBLIC :: SeaState_CalcOutput ! Routine for computing outputs + PUBLIC :: SeaSt_CalcOutput ! Routine for computing outputs - PUBLIC :: SeaState_CalcConstrStateResidual ! Tight coupling routine for returning the constraint state residual - PUBLIC :: SeaState_CalcContStateDeriv ! Tight coupling routine for computing derivatives of continuous states - !PUBLIC :: SeaState_UpdateDiscState ! Tight coupling routine for updating discrete states + 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 @@ -97,7 +97,7 @@ FUNCTION GetVersion(ThisProgVer) END FUNCTION GetVersion !subroutine ConvertWaveDataToSeaStatePointers(Waves_InitOut, p, ErrStat, ErrMsg) ! TYPE(Waves_InitOutputType), INTENT(in ) :: Waves_InitOut !< Output from Waves initialization routine -! TYPE(SeaState_ParameterType), INTENT(inout) :: p !< SeaState Parameters +! TYPE(SeaSt_ParameterType), INTENT(inout) :: p !< SeaState Parameters ! INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation ! CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None ! @@ -297,26 +297,26 @@ END FUNCTION GetVersion !> 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 SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) +SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) !.................................................................................................................................. - TYPE(SeaState_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine. - TYPE(SeaState_InputType), INTENT( OUT) :: u !< An initial guess for the input; input mesh must be defined - TYPE(SeaState_ParameterType), INTENT( OUT) :: p !< Parameters - TYPE(SeaState_ContinuousStateType), INTENT( OUT) :: x !< Initial continuous states - TYPE(SeaState_DiscreteStateType), INTENT( OUT) :: xd !< Initial discrete states - TYPE(SeaState_ConstraintStateType), INTENT( OUT) :: z !< Initial guess of the constraint states - TYPE(SeaState_OtherStateType), INTENT( OUT) :: OtherState !< Initial other states - TYPE(SeaState_OutputType), INTENT( OUT) :: y !< Initial system outputs (outputs are not calculated; + 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(SeaState_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables + TYPE(SeaSt_MiscVarType), INTENT( OUT) :: m !< Initial misc/optimization variables REAL(DbKi), INTENT(INOUT) :: Interval !< Coupling interval in seconds: the rate that - !! (1) SeaState_UpdateStates() is called in loose coupling & - !! (2) SeaState_UpdateDiscState() is called in tight coupling. + !! (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(SeaState_InitOutputType), INTENT( OUT) :: InitOut !< Output for initialization routine + 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 @@ -324,10 +324,10 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! Local variables CHARACTER(1024) :: SummaryName ! name of the SeaState summary file - TYPE(SeaState_InputFile) :: InputFileData !< Data from input file + 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 module initialization - TYPE(SeaState_Interp_InitInputType) :: SeaSt_Interp_InitInp + 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, J, k, iBody ! Generic counters @@ -380,7 +380,7 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I CHARACTER(1024) :: versionStr INTEGER(IntKi) :: ErrStat2 ! local error status CHARACTER(ErrMsgLen) :: ErrMsg2 ! local error message - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Init' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Init' CHARACTER(64) :: Frmt CHARACTER(2) :: Delim @@ -402,7 +402,7 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! Display the module information - CALL DispNVD( SeaState_ProgDesc ) + CALL DispNVD( SeaSt_ProgDesc ) IF ( InitInp%UseInputFile ) THEN @@ -427,7 +427,7 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! Parse all SeaState-related input and populate the InputFileData structure - CALL SeaState_ParseInput( InitInp%InputFile, InitInp%OutRootName, InitInp%defWtrDens, InitInp%defWtrDpth, InitInp%defMSL2SWL, InFileInfo, InputFileData, ErrStat2, ErrMsg2 ) + 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() @@ -452,8 +452,8 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I IF ( InputFileData%SeaStSum ) THEN - SummaryName = TRIM(InitInp%OutRootName)//'.HD.sum' - CALL SeaStOut_OpenSum( InputFileData%UnSum, SummaryName, SeaState_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)//'.SEA.sum' + CALL SeaStOut_OpenSum( InputFileData%UnSum, SummaryName, SeaSt_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 CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -654,6 +654,7 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I p%WaveDT = InputFileData%Waves%WaveDT p%WaveTime => Waves_InitOut%WaveTime p%WaveElev1 => Waves_InitOut%WaveElev + InitOut%WaveElev1 => p%WaveElev1 p%WaveVel => Waves_InitOut%WaveVel p%WaveAcc => Waves_InitOut%WaveAcc p%WaveDynP => Waves_InitOut%WaveDynP @@ -681,14 +682,15 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! CALL MOVE_ALLOC( Waves_InitOut%WaveElev, p%WaveElev1 ) ! allocate p%WaveElev1, set p%WaveElev1 = Waves_InitOut%WaveElev, and deallocate Waves_InitOut%WaveElev ! 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%NGrid(1), p%NGrid(2) ) , 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 - ! Need to loop over all the elements and copy - p%WaveElev(:,:,:) = p%WaveElev1(:,:,:) + !ALLOCATE ( p%WaveElev (0:p%NStepWave, p%NGrid(1), p%NGrid(2) ) , 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 + !! Need to loop over all the elements and copy + !! TODO: This can create a stack overflowstory error + !p%WaveElev(:,:,:) = p%WaveElev1(:,:,:) @@ -850,16 +852,16 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I 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 k = 1, p%NGrid(2) - do J=1, p%NGrid(1) - do I = 0,p%NStepWave - p%WaveElev(I,J,k) = p%Waves2%WaveElev2(I,J,k) + p%WaveElev(I,J,k) - end do - end do - end do - !CALL MOVE_ALLOC(p%Waves2%WaveElev2,p%WaveElev2) + !ELSE + ! + ! do k = 1, p%NGrid(2) + ! do J=1, p%NGrid(1) + ! do I = 0,p%NStepWave + ! p%WaveElev(I,J,k) = p%Waves2%WaveElev2(I,J,k) + p%WaveElev(I,J,k) + ! end do + ! end do + ! end do + ! !CALL MOVE_ALLOC(p%Waves2%WaveElev2,p%WaveElev2) ENDIF ENDIF @@ -1004,14 +1006,14 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I p%NumOuts = InputFileData%NumOuts ! Define initialization-routine output here: - InitOut%Ver = SeaState_ProgDesc + 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 InitOut%MSL2SWL = InputFileData%MSL2SWL p%WtrDpth = InitOut%WtrDpth - - CALL SeaStOut_Init( SeaState_ProgDesc, InitInp%OutRootName, InputFileData, y, p, m, InitOut, ErrStat2, ErrMsg2 ); CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + + 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 @@ -1026,7 +1028,7 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I !=============================================== IF ( InputFileData%UnSum > 0 ) THEN - versionStr = GetVersion(SeaState_ProgDesc) + versionStr = GetVersion(SeaSt_ProgDesc) WRITE( InputFileData%UnSum, '(A/)') versionStr Delim = ' ' IF (InputFileData%Waves%WaveMod /= 0 .AND. InputFileData%Waves%WaveMod /= 6) THEN @@ -1044,7 +1046,8 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! WRITE( InputFileData%UnSum, '(/)' ) WRITE( InputFileData%UnSum, '(1X,A78)' ) ' Xi Yi Zi relative to MSL Z relative to SWL' do i= 1, p%NGridPts - WRITE(InputFileData%UnSum,Frmt) InputFileData%Waves%WaveKinxi(i),Delim, InputFileData%Waves%WaveKinyi(i),Delim, InputFileData%Waves%WaveKinzi(i) - InitOut%MSL2SWL,Delim, InputFileData%Waves%WaveKinzi(i) + ! NOTE: The Waves%WaveKinxi, yi, zi arrays hold all the grid point locations + WRITE(InputFileData%UnSum,Frmt) InputFileData%Waves%WaveKinxi(i),Delim, InputFileData%Waves%WaveKinyi(i),Delim, InputFileData%Waves%WaveKinzi(i) + InitOut%MSL2SWL,Delim, InputFileData%Waves%WaveKinzi(i) end do !WRITE( InputFileData%UnSum, '(1X,A11)' ) 'Y-locations' @@ -1065,7 +1068,8 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I WRITE( InputFileData%UnSum, '(2X,A84)' ) 'Index Xi Yi Zi relative to MSL Z relative to SWL' Frmt = '(1X,I5, 2X,ES18.4e2,A,ES18.4e2,A,ES18.4e2,A,ES18.4e2)' do i= 1, p%NWaveKin - WRITE(InputFileData%UnSum,Frmt) i, InputFileData%WaveKinxi(i),Delim, InputFileData%WaveKinyi(i),Delim, InputFileData%WaveKinzi(i) - InitOut%MSL2SWL,Delim, InputFileData%WaveKinzi(i) + ! NOTE: The InputFileData%WaveKinxi, yi, zi arrays hold the User-request kinematics output locations + WRITE(InputFileData%UnSum,Frmt) i, InputFileData%WaveKinxi(i),Delim, InputFileData%WaveKinyi(i),Delim, InputFileData%WaveKinzi(i) + InitOut%MSL2SWL,Delim, InputFileData%WaveKinzi(i) end do else @@ -1146,12 +1150,72 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I SeaSt_Interp_InitInp%pZero(1) = 0.0 !Time SeaSt_Interp_InitInp%pZero(4) = -InputFileData%Z_Depth ! zi SeaSt_Interp_InitInp%Z_Depth = InputFileData%Z_Depth - call SeaState_Interp_Init(SeaSt_Interp_InitInp, p%sea_interp_p, ErrStat2, ErrMsg2) + 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 + + InitOut%WaveElevC0 => Waves_InitOut%WaveElevC0 ! For WAMIT and WAMIT2, FIT + CALL MOVE_ALLOC( Waves_InitOut%WaveElevC, InitOut%WaveElevC ) ! For WAMIT + InitOut%WaveDirArr => Waves_InitOut%WaveDirArr ! For WAMIT and WAMIT2 + InitOut%WaveDirMin = Waves_InitOut%WaveDirMin ! For WAMIT and WAMIT2 + InitOut%WaveDirMax = Waves_InitOut%WaveDirMax ! For WAMIT and WAMIT2 + InitOut%WaveDir = Waves_InitOut%WaveDir ! For WAMIT for use in SS_Excitation + !InitOut%WaveNDir = Waves_InitOut%WaveNDir ! Not needed + InitOut%WaveMultiDir = Waves_InitOut%WaveMultiDir ! For WAMIT2 + InitOut%WaveDOmega = Waves_InitOut%WaveDOmega ! For WAMIT and WAMIT2, FIT + !InitOut%WaveKinzi = Waves_InitOut%WaveKinzi ! Not needed + InitOut%WaveDynP => Waves_InitOut%WaveDynP ! For Morison + InitOut%WaveAcc => Waves_InitOut%WaveAcc ! For Morison + InitOut%WaveVel => Waves_InitOut%WaveVel ! For Morison + !InitOut%WaveElev => Waves_InitOut%WaveElev ! Not needed + !InitOut%WaveElev0 => Waves_InitOut%WaveElev0 ! For WAMIT for use in SS_Excitation + call MOVE_ALLOC(Waves_InitOut%WaveElev0, InitOut%WaveElev0 ) + InitOut%WaveTime => Waves_InitOut%WaveTime ! For Morison, and WAMIT for use in SS_Excitation + !InitOut%WaveTMax = Waves_InitOut%WaveTMax ! Not needed + 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%WvDiffQTFF = InputFileData%Waves2%WvDiffQTFF + InitOut%WvSumQTFF = InputFileData%Waves2%WvSumQTFF + InitOut%WaveDirMod = InputFileData%Waves%WaveDirMod + InitOut%CurrMod = InputFileData%Current%CurrMod + InitOut%SeaSt_Interp_p = p%seast_interp_p + + + + + + + + + + + + + + + + + + + + + + ! Destroy the local initialization data CALL CleanUp() @@ -1160,7 +1224,7 @@ SUBROUTINE SeaState_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I !................................ SUBROUTINE CleanUp() - CALL SeaState_DestroyInputFile( InputFileData, ErrStat2, ErrMsg2 );CALL SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) + CALL SeaSt_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) @@ -1204,21 +1268,21 @@ SUBROUTINE CleanUp() END SUBROUTINE CleanUp !................................ -END SUBROUTINE SeaState_Init +END SUBROUTINE SeaSt_Init !---------------------------------------------------------------------------------------------------------------------------------- !> This routine is called at the end of the simulation. -SUBROUTINE SeaState_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) - - TYPE(SeaState_InputType), INTENT(INOUT) :: u !< System inputs - TYPE(SeaState_ParameterType), INTENT(INOUT) :: p !< Parameters - TYPE(SeaState_ContinuousStateType), INTENT(INOUT) :: x !< Continuous states - TYPE(SeaState_DiscreteStateType), INTENT(INOUT) :: xd !< Discrete states - TYPE(SeaState_ConstraintStateType), INTENT(INOUT) :: z !< Constraint states - TYPE(SeaState_OtherStateType), INTENT(INOUT) :: OtherState !< Other/optimization states - TYPE(SeaState_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(SeaState_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables +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 @@ -1247,52 +1311,52 @@ SUBROUTINE SeaState_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ! Destroy the input data: - CALL SeaState_DestroyInput( u, ErrStat, ErrMsg ) + CALL SeaSt_DestroyInput( u, ErrStat, ErrMsg ) ! Destroy the parameter data: - CALL SeaState_DestroyParam( p, ErrStat, ErrMsg ) + CALL SeaSt_DestroyParam( p, ErrStat, ErrMsg ) ! Destroy the state data: - CALL SeaState_DestroyContState( x, ErrStat, ErrMsg ) - CALL SeaState_DestroyDiscState( xd, ErrStat, ErrMsg ) - CALL SeaState_DestroyConstrState( z, ErrStat, ErrMsg ) - CALL SeaState_DestroyOtherState( OtherState, ErrStat, ErrMsg ) + 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 SeaState_DestroyMisc( m, ErrStat, ErrMsg ) + CALL SeaSt_DestroyMisc( m, ErrStat, ErrMsg ) ! Destroy the output data: - CALL SeaState_DestroyOutput( y, ErrStat, ErrMsg ) + CALL SeaSt_DestroyOutput( y, ErrStat, ErrMsg ) -END SUBROUTINE SeaState_End +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 SeaState_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherState, m, ErrStat, ErrMsg ) +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(SeaState_InputType), INTENT(INOUT ) :: Inputs(:) !< Inputs at InputTimes + TYPE(SeaSt_InputType), INTENT(INOUT ) :: Inputs(:) !< Inputs at InputTimes REAL(DbKi), INTENT(IN ) :: InputTimes(:) !< Times in seconds associated with Inputs - TYPE(SeaState_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(SeaState_ContinuousStateType), INTENT(INOUT) :: x !< Input: Continuous states at t; + 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(SeaState_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at t; + TYPE(SeaSt_DiscreteStateType), INTENT(INOUT) :: xd !< Input: Discrete states at t; !! Output: Discrete states at t + Interval - TYPE(SeaState_ConstraintStateType), INTENT(INOUT) :: z !< Input: Constraint states at t; + TYPE(SeaSt_ConstraintStateType), INTENT(INOUT) :: z !< Input: Constraint states at t; !! Output: Constraint states at t + Interval - TYPE(SeaState_OtherStateType), INTENT(INOUT) :: OtherState !< Other states: Other states at t; + TYPE(SeaSt_OtherStateType), INTENT(INOUT) :: OtherState !< Other states: Other states at t; !! Output: Other states at t + Interval - TYPE(SeaState_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + 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 @@ -1305,23 +1369,23 @@ SUBROUTINE SeaState_UpdateStates( t, n, Inputs, InputTimes, p, x, xd, z, OtherSt -END SUBROUTINE SeaState_UpdateStates +END SUBROUTINE SeaSt_UpdateStates !---------------------------------------------------------------------------------------------------------------------------------- !> Routine for computing outputs, used in both loose and tight coupling. -SUBROUTINE SeaState_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) +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(SeaState_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(SeaState_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(SeaState_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(SeaState_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(SeaState_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(SeaState_OtherStateType), INTENT(IN ) :: OtherState !< Other states at Time - TYPE(SeaState_OutputType), INTENT(INOUT) :: y !< Outputs computed at Time (Input only so that mesh con- + 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(SeaState_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables + 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 @@ -1368,16 +1432,20 @@ SUBROUTINE SeaState_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, ! ! 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, 'SeaState_CalcOutput' ) + ! CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) !END IF do i = 1, p%NWaveKin positionXYZ = (/p%WaveKinxi(i),p%WaveKinyi(i),p%WaveKinzi(i)/) - call SeaState_Interp_Setup( Time, positionXYZ, p%sea_interp_p, m%sea_interp_m, ErrStat, ErrMsg ) - WaveVel(:,i) = SeaState_Interp_4D_Vec( p%WaveVel, m%sea_interp_m, ErrStat, ErrMsg ) - WaveAcc(:,i) = SeaState_Interp_4D_Vec( p%WaveAcc, m%sea_interp_m, ErrStat, ErrMsg ) - WaveDynP(i) = SeaState_Interp_4D ( p%WaveDynP, m%sea_interp_m, ErrStat, ErrMsg ) + call SeaSt_Interp_Setup( Time, positionXYZ, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) end do @@ -1386,10 +1454,17 @@ SUBROUTINE SeaState_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, do i = 1, p%NWaveElev positionXY = (/p%WaveElevxi(i),p%WaveElevyi(i)/) ! TODO: Why interp the WaveElev. Instead just add 1 + 2 if Waves2 is being used? - WaveElev(i) = SeaState_Interp_3D( Time, positionXY, p%WaveElev, p%sea_interp_p, ErrStat, ErrMsg ) - WaveElev1(i) = SeaState_Interp_3D( Time, positionXY, p%WaveElev1, p%sea_interp_p, ErrStat, ErrMsg ) + !WaveElev(i) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev, p%sea_interp_p, ErrStat2, ErrMsg2 ) + ! call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveElev1(i) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + if (allocated(p%Waves2%WaveElev2)) then - WaveElev2(i) = SeaState_Interp_3D( Time, positionXY, p%Waves2%WaveElev2, p%sea_interp_p, ErrStat, ErrMsg ) + WaveElev2(i) = SeaSt_Interp_3D( Time, positionXY, p%Waves2%WaveElev2, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveElev(i) = WaveElev1(i) + WaveElev2(i) + else + WaveElev(i) = WaveElev1(i) end if end do @@ -1401,12 +1476,12 @@ SUBROUTINE SeaState_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, 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, 'SeaState_CalcOutput' ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) END IF ! Map calculated results into the AllOuts Array CALL SeaStOut_MapOutputs( Time, p, p%NWaveElev, WaveElev, WaveElev1, WaveElev2, p%NWaveKin, WaveVel, WaveAcc, WaveDynP, AllOuts, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) DO I = 1,p%NumOuts y%WriteOutput(I) = p%OutParam(I)%SignM * AllOuts( p%OutParam(I)%Indx ) @@ -1432,26 +1507,26 @@ SUBROUTINE SeaState_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, m%LastOutTime = Time end if -END SUBROUTINE SeaState_CalcOutput +END SUBROUTINE SeaSt_CalcOutput !---------------------------------------------------------------------------------------------------------------------------------- !> Tight coupling routine for computing derivatives of continuous states -SUBROUTINE SeaState_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxdt, ErrStat, ErrMsg ) +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(SeaState_InputType), INTENT(INOUT) :: u !< Inputs at Time (intent OUT only because we're copying the input mesh) - TYPE(SeaState_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(SeaState_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(SeaState_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(SeaState_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time - TYPE(SeaState_OtherStateType), INTENT(IN ) :: OtherState !< Other states - TYPE(SeaState_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables - TYPE(SeaState_ContinuousStateType), INTENT( OUT) :: dxdt !< Continuous state derivatives at Time + 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( 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 integer(IntKi) :: iWAMIT ! loop counter - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CalcContStateDeriv' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CalcContStateDeriv' ! Initialize ErrStat @@ -1460,24 +1535,24 @@ SUBROUTINE SeaState_CalcContStateDeriv( Time, u, p, x, xd, z, OtherState, m, dxd -END SUBROUTINE SeaState_CalcContStateDeriv +END SUBROUTINE SeaSt_CalcContStateDeriv !---------------------------------------------------------------------------------------------------------------------------------- !> Tight coupling routine for solving for the residual of the constraint state equations -SUBROUTINE SeaState_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m, z_residual, ErrStat, ErrMsg ) +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(SeaState_InputType), INTENT(INOUT) :: u !< Inputs at Time (intent OUT only because we're copying the input mesh) - TYPE(SeaState_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(SeaState_ContinuousStateType), INTENT(IN ) :: x !< Continuous states at Time - TYPE(SeaState_DiscreteStateType), INTENT(IN ) :: xd !< Discrete states at Time - TYPE(SeaState_ConstraintStateType), INTENT(IN ) :: z !< Constraint states at Time (possibly a guess) - TYPE(SeaState_OtherStateType), INTENT(IN ) :: OtherState !< Other/optimization states - TYPE(SeaState_MiscVarType), INTENT(INOUT) :: m !< Initial misc/optimization variables - TYPE(SeaState_ConstraintStateType), INTENT( OUT) :: z_residual !< Residual of the constraint state equations using + 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 @@ -1494,7 +1569,7 @@ SUBROUTINE SeaState_CalcConstrStateResidual( Time, u, p, x, xd, z, OtherState, m ! Solve for the constraint states here: -END SUBROUTINE SeaState_CalcConstrStateResidual +END SUBROUTINE SeaSt_CalcConstrStateResidual diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index 5e543e5244..3143f153c6 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -19,9 +19,9 @@ usefrom Waves.txt usefrom Waves2.txt usefrom SeaState_Interp.txt # -param SeaState/SeaState unused INTEGER MaxSeaStOutputs - 90 - "The maximum number of output channels supported by this module" - +param SeaState/SeaSt unused INTEGER MaxSeaStOutputs - 90 - "The maximum number of output channels supported by this module" - # -typedef SeaState/SeaState SeaState_InputFile LOGICAL EchoFlag - - - "Echo the input file" +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 @@ -51,7 +51,7 @@ typedef ^ ^ INTEGER UnS typedef ^ ^ CHARACTER(20) OutFmt - - - "Output format for numerical results" - typedef ^ ^ CHARACTER(20) OutSFmt - - - "Output format for header strings" - -typedef SeaState/SeaState InitInputType CHARACTER(1024) InputFile - - - "Supplied by Driver: full path and filename for the SeaState module" - +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" - @@ -75,6 +75,45 @@ typedef ^ ^ ProgDesc Ver 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 ^ ^ 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 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 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 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 WaveElev {*}{*}{*} - - "Total wave elevation" - +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 ^ ^ 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" - +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 CurrMod - - - "" - +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 WvDiffQTFF - - - "Full difference QTF second order forces flag" (-) +typedef ^ ^ LOGICAL WvSumQTFF - - - "Full sum QTF second order forces flag" (-) +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - # # # ..... States .................................................................................................................... @@ -99,7 +138,7 @@ typedef ^ OtherStateType Waves2_Othe 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 ^ ^ SeaState_Interp_MiscVarType Sea_Interp_m - - - "misc var information from the SeaState Interpolation module" - +typedef ^ ^ SeaSt_Interp_MiscVarType SeaSt_Interp_m - - - "misc var information from the SeaState Interpolation module" - typedef ^ ^ Waves2_MiscVarType Waves2 - - - "misc var information from the Waves2 module" - typedef ^ ^ Waves2_InputType u_Waves2 - - - "Waves2 module inputs" - # ..... Parameters ................................................................................................................ @@ -144,7 +183,7 @@ typedef ^ ^ CHARACTER(20) Out typedef ^ ^ CHARACTER(ChanLen) Delim - - - "Delimiter string for outputs, defaults to tab-delimiters" - typedef ^ ^ INTEGER UnOutFile - - - "File unit for the SeaState outputs" - typedef ^ ^ INTEGER OutDec - - - "Write every OutDec time steps" - -typedef ^ ^ SeaState_Interp_ParameterType Sea_Interp_p - - - "parameter information from the SeaState Interpolation module" - +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - # # # ..... Inputs .................................................................................................................... diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 index 138bfa2ac1..a772d1faa7 100644 --- a/modules/seastate/src/SeaState_DriverCode.f90 +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -63,24 +63,24 @@ program SeaStateDriver real(DbKi) :: Interval ! HD module requested time interval integer(B1Ki), allocatable :: SaveAry(:) ! Array to store packed data structure - type(SeaState_InitInputType) :: InitInData ! Input data for initialization - type(SeaState_InitOutputType) :: InitOutData ! Output data from initialization + type(SeaSt_InitInputType) :: InitInData ! Input data for initialization + type(SeaSt_InitOutputType) :: InitOutData ! Output data from initialization - type(SeaState_ContinuousStateType) :: x ! Continuous states - type(SeaState_ContinuousStateType) :: x_new ! Continuous states at updated time - type(SeaState_DiscreteStateType) :: xd ! Discrete states - type(SeaState_DiscreteStateType) :: xd_new ! Discrete states at updated time - type(SeaState_ConstraintStateType) :: z ! Constraint states - type(SeaState_ConstraintStateType) :: z_residual ! Residual of the constraint state equations (Z) - type(SeaState_OtherStateType) :: OtherState ! Other states - type(SeaState_MiscVarType) :: m ! Misc/optimization variables + 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(SeaState_ParameterType) :: p ! Parameters - !type(SeaState_InputType) :: u ! System inputs [OLD STYLE] - type(SeaState_InputType) :: u(NumInp) ! System inputs - type(SeaState_OutputType) :: y ! System outputs + 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 - type(SeaState_ContinuousStateType) :: dxdt ! First time derivatives of the continuous states + type(SeaSt_ContinuousStateType) :: dxdt ! First time derivatives of the continuous states integer(IntKi) :: UnSeaSt_Out ! Output file identifier integer(IntKi) :: I ! Generic loop counter @@ -164,7 +164,7 @@ program SeaStateDriver InitInData%UseInputFile = .TRUE. InitInData%InputFile = drvrInitInp%SeaStateInputFile InitInData%OutRootName = drvrInitInp%OutRootName - InitInData%TMax = drvrInitInp%NSteps * drvrInitInp%TimeInterval + InitInData%TMax = (drvrInitInp%NSteps-1) * drvrInitInp%TimeInterval ! Starting time is always t = 0.0 ! Get the current time call date_and_time ( Values=StrtTime ) ! Let's time the whole simulation @@ -183,7 +183,7 @@ program SeaStateDriver !if ( drvrInitInp%WaveElevSeriesFlag ) then ! ALLOCATE ( InitInData%WaveElevXY(2,drvrInitInp%WaveElevNX*drvrInitInp%WaveElevNY), STAT=ErrStat ) ! if ( ErrStat >= ErrID_Fatal ) then - ! call SeaState_End( u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) + ! call SeaSt_End( u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) ! if ( ErrStat /= ErrID_None ) then ! call WrScr( ErrMsg ) ! end if @@ -205,7 +205,7 @@ program SeaStateDriver ! Initialize the module Interval = drvrInitInp%TimeInterval - call SeaState_Init( InitInData, u(1), p, x, xd, z, OtherState, y, m, Interval, InitOutData, ErrStat, ErrMsg ) + 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() @@ -229,8 +229,8 @@ program SeaStateDriver ! Destroy initialization data - call SeaState_DestroyInitInput( InitInData, ErrStat, ErrMsg ) - call SeaState_DestroyInitOutput( InitOutData, ErrStat, ErrMsg ) + call SeaSt_DestroyInitInput( InitInData, ErrStat, ErrMsg ) + call SeaSt_DestroyInitOutput( InitOutData, ErrStat, ErrMsg ) @@ -253,7 +253,7 @@ program SeaStateDriver ! Calculate outputs at n - call SeaState_CalcOutput( Time, u(1), p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) + 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() @@ -309,10 +309,10 @@ subroutine SeaSt_DvrCleanup() errStat2 = ErrID_None errMsg2 = "" - call SeaState_DestroyInitInput( InitInData, errStat2, errMsg2 ) + call SeaSt_DestroyInitInput( InitInData, errStat2, errMsg2 ) call SetErrStat( errStat2, errMsg2, errStat, errMsg, 'SeaSt_DvrCleanup' ) - call SeaState_End( u(1), p, x, xd, z, OtherState, y, m, errStat2, errMsg2 ) + 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. : @@ -640,9 +640,9 @@ end SUBROUTINE ReadDriverInputFile SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, SeaState_p, ErrStat, ErrMsg) type(SeaSt_drvr_InitInput), intent( in ) :: drvrInitInp - type(SeaState_InitInputType), intent( in ) :: SeaStateInitInp - type(SeaState_InitOutputType), intent( in ) :: SeaStateInitOut ! Output data from initialization - type(SeaState_ParameterType), intent( in ) :: SeaState_p ! Output data from initialization + 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 diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 4cba91a727..c8239093ff 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -54,7 +54,7 @@ SUBROUTINE PrintBadChannelWarning(NUserOutputs, UserOutputs , foundMask, ErrStat END SUBROUTINE PrintBadChannelWarning !==================================================================================================== -subroutine SeaState_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, defMSL2SWL, FileInfo_In, InputFileData, ErrStat, ErrMsg ) +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. !---------------------------------------------------------------------------------------------------- @@ -66,7 +66,7 @@ subroutine SeaState_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp 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(SeaState_InputFile), INTENT(INOUT) :: InputFileData ! the SeaState input file 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 @@ -84,7 +84,7 @@ subroutine SeaState_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp integer(IntKi) :: CurLine !< Current entry in FileInfo_In%Lines array integer(IntKi) :: ErrStat2 character(ErrMsgLen) :: ErrMsg2 - character(*), parameter :: RoutineName = 'SeaState_ParaseInput' + character(*), parameter :: RoutineName = 'SeaSt_ParaseInput' ! Initialize local data UnEc = -1 @@ -439,7 +439,7 @@ subroutine SeaState_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp ! WaveKinzi call ParseAry ( FileInfo_In, CurLine, 'WaveKinzi.', InputFileData%WaveKinzi, InputFileData%NWaveKin, ErrStat2, ErrMsg2, UnEc ) if (Failed()) return; - + !------------------------------------------------------------------------------------------------- ! Data section for OUTPUT CHANNELS !------------------------------------------------------------------------------------------------- @@ -471,7 +471,7 @@ subroutine Cleanup() if (UnEc > 0) close ( UnEc ) end subroutine Cleanup -end subroutine SeaState_ParseInput +end subroutine SeaSt_ParseInput !==================================================================================================== subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, ErrStat, ErrMsg ) @@ -481,10 +481,10 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! Passed variables - type(SeaState_InitInputType), intent( in ) :: InitInp ! the SeaState data - type(SeaState_ParameterType), intent( inout ) :: p ! the SeaState parameter data + type(SeaSt_InitInputType), intent( in ) :: InitInp ! the SeaState data + type(SeaSt_ParameterType), intent( inout ) :: p ! the SeaState parameter data real(DbKi), intent( in ) :: Interval ! The DT supplied by the glue code/driver - type(SeaState_InputFile), intent( inout ) :: InputFileData ! the SeaState input file 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 @@ -563,7 +563,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! Z_Depth - Depth of the domain the Z direction (m) !TODO: I'm not sure we want to offset this grid depth value. Check with Jason. - InputFileData%Z_Depth = InputFileData%Z_Depth + InputFileData%MSL2SWL + !InputFileData%Z_Depth = InputFileData%Z_Depth + InputFileData%MSL2SWL 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 @@ -619,22 +619,12 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E end if ! LEN_TRIM(InputFileData%Waves%WaveModChr) - if ( (WaveModIn == 6) .AND. .NOT. EqualRealNos(InputFileData%MSL2SWL, 0.0_ReKi) ) then - call SetErrStat( ErrID_Fatal,'MSL2SWL must be 0 when WaveMod = 6.',ErrStat,ErrMsg,RoutineName) - return - end if !TODO: THese tests need to be done by HD GJH 7/11/21 -! 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 + if ( WaveModIn < 0 .OR. WaveModIn > 6 ) then + call SetErrStat( ErrID_Fatal,'WaveMod must be 0, 1, 1P#, 2, 3, 4, 5, or 6.',ErrStat,ErrMsg,RoutineName) + return + end if ! Linearization Checks ! LIN-TODO: @@ -1234,6 +1224,8 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E !InputFileData%OutFmt !InputFileData%OutSFmt + ! Shift from MSL to SWL coordinate system + InputFileData%WaveKinzi(:) = InputFileData%WaveKinzi(:) - InputFileData%MSL2SWL ! OutList - list of requested parameters to output to a file diff --git a/modules/seastate/src/SeaState_Interp_Types.f90 b/modules/seastate/src/SeaState_Interp_Types.f90 index ad581bdc43..e8a54a9a60 100644 --- a/modules/seastate/src/SeaState_Interp_Types.f90 +++ b/modules/seastate/src/SeaState_Interp_Types.f90 @@ -33,39 +33,39 @@ MODULE SeaState_Interp_Types !--------------------------------------------------------------------------------------------------------------------------------- USE NWTC_Library IMPLICIT NONE -! ========= SeaState_Interp_InitInputType ======= - TYPE, PUBLIC :: SeaState_Interp_InitInputType +! ========= SeaSt_Interp_InitInputType ======= + TYPE, PUBLIC :: SeaSt_Interp_InitInputType INTEGER(IntKi) , DIMENSION(1:4) :: n !< number of grid points in the x, y, z, and t directions [-] REAL(ReKi) , DIMENSION(1:4) :: delta !< size between 2 consecutive grid points in each grid direction [m,m,m,s] 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 SeaState_Interp_InitInputType + END TYPE SeaSt_Interp_InitInputType ! ======================= -! ========= SeaState_Interp_InitOutputType ======= - TYPE, PUBLIC :: SeaState_Interp_InitOutputType +! ========= SeaSt_Interp_InitOutputType ======= + TYPE, PUBLIC :: SeaSt_Interp_InitOutputType TYPE(ProgDesc) :: Ver !< Version information of this submodule [-] - END TYPE SeaState_Interp_InitOutputType + END TYPE SeaSt_Interp_InitOutputType ! ======================= -! ========= SeaState_Interp_MiscVarType ======= - TYPE, PUBLIC :: SeaState_Interp_MiscVarType +! ========= 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 [-] - END TYPE SeaState_Interp_MiscVarType + END TYPE SeaSt_Interp_MiscVarType ! ======================= -! ========= SeaState_Interp_ParameterType ======= - TYPE, PUBLIC :: SeaState_Interp_ParameterType +! ========= SeaSt_Interp_ParameterType ======= + TYPE, PUBLIC :: SeaSt_Interp_ParameterType INTEGER(IntKi) , DIMENSION(1:4) :: n !< number of evenly-spaced grid points in the x, y, z, and t directions [-] REAL(ReKi) , DIMENSION(1:4) :: delta !< size between 2 consecutive grid points in each grid direction [m,m,m,s] 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 SeaState_Interp_ParameterType + END TYPE SeaSt_Interp_ParameterType ! ======================= CONTAINS - SUBROUTINE SeaState_Interp_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_Interp_InitInputType), INTENT(IN) :: SrcInitInputData - TYPE(SeaState_Interp_InitInputType), INTENT(INOUT) :: DstInitInputData + 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 @@ -74,7 +74,7 @@ SUBROUTINE SeaState_Interp_CopyInitInput( SrcInitInputData, DstInitInputData, Ct INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_CopyInitInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_CopyInitInput' ! ErrStat = ErrID_None ErrMsg = "" @@ -82,24 +82,24 @@ SUBROUTINE SeaState_Interp_CopyInitInput( SrcInitInputData, DstInitInputData, Ct DstInitInputData%delta = SrcInitInputData%delta DstInitInputData%pZero = SrcInitInputData%pZero DstInitInputData%Z_Depth = SrcInitInputData%Z_Depth - END SUBROUTINE SeaState_Interp_CopyInitInput + END SUBROUTINE SeaSt_Interp_CopyInitInput - SUBROUTINE SeaState_Interp_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) - TYPE(SeaState_Interp_InitInputType), INTENT(INOUT) :: InitInputData + SUBROUTINE SeaSt_Interp_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) + TYPE(SeaSt_Interp_InitInputType), INTENT(INOUT) :: InitInputData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_DestroyInitInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_DestroyInitInput' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" - END SUBROUTINE SeaState_Interp_DestroyInitInput + END SUBROUTINE SeaSt_Interp_DestroyInitInput - SUBROUTINE SeaState_Interp_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_Interp_InitInputType), INTENT(IN) :: InData + TYPE(SeaSt_Interp_InitInputType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -114,7 +114,7 @@ SUBROUTINE SeaState_Interp_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, Er LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_PackInitInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PackInitInput' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -175,13 +175,13 @@ SUBROUTINE SeaState_Interp_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, Er END DO ReKiBuf(Re_Xferred) = InData%Z_Depth Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_Interp_PackInitInput + END SUBROUTINE SeaSt_Interp_PackInitInput - SUBROUTINE SeaState_Interp_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_Interp_InitInputType), INTENT(INOUT) :: OutData + TYPE(SeaSt_Interp_InitInputType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -193,7 +193,7 @@ SUBROUTINE SeaState_Interp_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_UnPackInitInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_UnPackInitInput' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -224,11 +224,11 @@ SUBROUTINE SeaState_Interp_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, END DO OutData%Z_Depth = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_Interp_UnPackInitInput + END SUBROUTINE SeaSt_Interp_UnPackInitInput - SUBROUTINE SeaState_Interp_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_Interp_InitOutputType), INTENT(IN) :: SrcInitOutputData - TYPE(SeaState_Interp_InitOutputType), INTENT(INOUT) :: DstInitOutputData + 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 @@ -236,32 +236,32 @@ SUBROUTINE SeaState_Interp_CopyInitOutput( SrcInitOutputData, DstInitOutputData, INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_CopyInitOutput' + 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 SeaState_Interp_CopyInitOutput + END SUBROUTINE SeaSt_Interp_CopyInitOutput - SUBROUTINE SeaState_Interp_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) - TYPE(SeaState_Interp_InitOutputType), INTENT(INOUT) :: InitOutputData + SUBROUTINE SeaSt_Interp_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) + TYPE(SeaSt_Interp_InitOutputType), INTENT(INOUT) :: InitOutputData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_DestroyInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_DestroyInitOutput' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" CALL NWTC_Library_Destroyprogdesc( InitOutputData%Ver, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_Interp_DestroyInitOutput + END SUBROUTINE SeaSt_Interp_DestroyInitOutput - SUBROUTINE SeaState_Interp_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_Interp_InitOutputType), INTENT(IN) :: InData + TYPE(SeaSt_Interp_InitOutputType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -276,7 +276,7 @@ SUBROUTINE SeaState_Interp_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, E LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_PackInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PackInitOutput' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -365,13 +365,13 @@ SUBROUTINE SeaState_Interp_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END SUBROUTINE SeaState_Interp_PackInitOutput + END SUBROUTINE SeaSt_Interp_PackInitOutput - SUBROUTINE SeaState_Interp_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_Interp_InitOutputType), INTENT(INOUT) :: OutData + TYPE(SeaSt_Interp_InitOutputType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -382,7 +382,7 @@ SUBROUTINE SeaState_Interp_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata INTEGER(IntKi) :: i INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_UnPackInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_UnPackInitOutput' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -433,11 +433,11 @@ SUBROUTINE SeaState_Interp_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END SUBROUTINE SeaState_Interp_UnPackInitOutput + END SUBROUTINE SeaSt_Interp_UnPackInitOutput - SUBROUTINE SeaState_Interp_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_Interp_MiscVarType), INTENT(IN) :: SrcMiscData - TYPE(SeaState_Interp_MiscVarType), INTENT(INOUT) :: DstMiscData + 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 @@ -446,7 +446,7 @@ SUBROUTINE SeaState_Interp_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, 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 = 'SeaState_Interp_CopyMisc' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_CopyMisc' ! ErrStat = ErrID_None ErrMsg = "" @@ -454,24 +454,24 @@ SUBROUTINE SeaState_Interp_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat DstMiscData%N4D = SrcMiscData%N4D DstMiscData%Indx_Lo = SrcMiscData%Indx_Lo DstMiscData%Indx_Hi = SrcMiscData%Indx_Hi - END SUBROUTINE SeaState_Interp_CopyMisc + END SUBROUTINE SeaSt_Interp_CopyMisc - SUBROUTINE SeaState_Interp_DestroyMisc( MiscData, ErrStat, ErrMsg ) - TYPE(SeaState_Interp_MiscVarType), INTENT(INOUT) :: MiscData + SUBROUTINE SeaSt_Interp_DestroyMisc( MiscData, ErrStat, ErrMsg ) + TYPE(SeaSt_Interp_MiscVarType), INTENT(INOUT) :: MiscData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_DestroyMisc' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_DestroyMisc' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" - END SUBROUTINE SeaState_Interp_DestroyMisc + END SUBROUTINE SeaSt_Interp_DestroyMisc - SUBROUTINE SeaState_Interp_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_Interp_MiscVarType), INTENT(IN) :: InData + TYPE(SeaSt_Interp_MiscVarType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -486,7 +486,7 @@ SUBROUTINE SeaState_Interp_PackMisc( 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 = 'SeaState_Interp_PackMisc' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PackMisc' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -549,13 +549,13 @@ SUBROUTINE SeaState_Interp_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat IntKiBuf(Int_Xferred) = InData%Indx_Hi(i1) Int_Xferred = Int_Xferred + 1 END DO - END SUBROUTINE SeaState_Interp_PackMisc + END SUBROUTINE SeaSt_Interp_PackMisc - SUBROUTINE SeaState_Interp_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_Interp_MiscVarType), INTENT(INOUT) :: OutData + TYPE(SeaSt_Interp_MiscVarType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -567,7 +567,7 @@ SUBROUTINE SeaState_Interp_UnPackMisc( 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 = 'SeaState_Interp_UnPackMisc' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_UnPackMisc' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -602,11 +602,11 @@ SUBROUTINE SeaState_Interp_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS OutData%Indx_Hi(i1) = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 END DO - END SUBROUTINE SeaState_Interp_UnPackMisc + END SUBROUTINE SeaSt_Interp_UnPackMisc - SUBROUTINE SeaState_Interp_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_Interp_ParameterType), INTENT(IN) :: SrcParamData - TYPE(SeaState_Interp_ParameterType), INTENT(INOUT) :: DstParamData + 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 @@ -615,7 +615,7 @@ SUBROUTINE SeaState_Interp_CopyParam( SrcParamData, DstParamData, CtrlCode, 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 = 'SeaState_Interp_CopyParam' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_CopyParam' ! ErrStat = ErrID_None ErrMsg = "" @@ -623,24 +623,24 @@ SUBROUTINE SeaState_Interp_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrS DstParamData%delta = SrcParamData%delta DstParamData%pZero = SrcParamData%pZero DstParamData%Z_Depth = SrcParamData%Z_Depth - END SUBROUTINE SeaState_Interp_CopyParam + END SUBROUTINE SeaSt_Interp_CopyParam - SUBROUTINE SeaState_Interp_DestroyParam( ParamData, ErrStat, ErrMsg ) - TYPE(SeaState_Interp_ParameterType), INTENT(INOUT) :: ParamData + SUBROUTINE SeaSt_Interp_DestroyParam( ParamData, ErrStat, ErrMsg ) + TYPE(SeaSt_Interp_ParameterType), INTENT(INOUT) :: ParamData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_DestroyParam' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_DestroyParam' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" - END SUBROUTINE SeaState_Interp_DestroyParam + END SUBROUTINE SeaSt_Interp_DestroyParam - SUBROUTINE SeaState_Interp_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_Interp_ParameterType), INTENT(IN) :: InData + TYPE(SeaSt_Interp_ParameterType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -655,7 +655,7 @@ SUBROUTINE SeaState_Interp_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrSta LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_PackParam' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PackParam' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -716,13 +716,13 @@ SUBROUTINE SeaState_Interp_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrSta END DO ReKiBuf(Re_Xferred) = InData%Z_Depth Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_Interp_PackParam + END SUBROUTINE SeaSt_Interp_PackParam - SUBROUTINE SeaState_Interp_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_Interp_ParameterType), INTENT(INOUT) :: OutData + TYPE(SeaSt_Interp_ParameterType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -734,7 +734,7 @@ SUBROUTINE SeaState_Interp_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, Err INTEGER(IntKi) :: i1, i1_l, i1_u ! bounds (upper/lower) for an array dimension 1 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_UnPackParam' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_UnPackParam' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -765,7 +765,7 @@ SUBROUTINE SeaState_Interp_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, Err END DO OutData%Z_Depth = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_Interp_UnPackParam + 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 index 0001c2c672..00841758d5 100644 --- a/modules/seastate/src/SeaState_Output.f90 +++ b/modules/seastate/src/SeaState_Output.f90 @@ -446,10 +446,10 @@ END SUBROUTINE SeaStOut_WriteWvKinFiles !==================================================================================================== subroutine SeaStOut_MapOutputs( CurrentTime, p, NWaveElev, WaveElev, WaveElev1, WaveElev2, NWaveKin, WaveVel, WaveAcc, 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 SeaState_CalcOutput() at each time step. +! This is called by SeaSt_CalcOutput() at each time step. !---------------------------------------------------------------------------------------------------- REAL(DbKi), intent( in ) :: CurrentTime ! Current simulation time in seconds - TYPE(SeaState_ParameterType), intent( in ) :: p ! SeaState's parameter data + TYPE(SeaSt_ParameterType), intent( in ) :: p ! SeaState's parameter 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) @@ -496,8 +496,8 @@ SUBROUTINE SeaStOut_WriteOutputs( Time, y, p, Decimate, ErrStat, ErrMsg ) ! Passed variables REAL(DbKi), INTENT( IN ) :: Time - TYPE(SeaState_OutputType), INTENT( INOUT ) :: y ! SeaState's output data - TYPE(SeaState_ParameterType), INTENT( IN ) :: p ! SeaState parameter data + 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 @@ -552,7 +552,7 @@ SUBROUTINE SeaStOut_WriteOutputs( Time, y, p, Decimate, ErrStat, ErrMsg ) END SUBROUTINE SeaStOut_WriteOutputs !==================================================================================================== -SUBROUTINE SeaStOut_Init( SeaState_ProgDesc, OutRootName, InputFileData, y, p, m, InitOut, ErrStat, ErrMsg ) +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. @@ -562,13 +562,13 @@ SUBROUTINE SeaStOut_Init( SeaState_ProgDesc, OutRootName, InputFileData, y, p, ! Passed variables - TYPE(ProgDesc), INTENT( IN ) :: SeaState_ProgDesc ! + TYPE(ProgDesc), INTENT( IN ) :: SeaSt_ProgDesc ! CHARACTER(1024), INTENT( IN ) :: OutRootName ! The name of the output file - TYPE(SeaState_InputFile ), INTENT( IN ) :: InputFileData ! data needed to initialize the output module - TYPE(SeaState_OutputType), INTENT( INOUT ) :: y ! This module's internal data - TYPE(SeaState_ParameterType), INTENT( INOUT ) :: p - TYPE(SeaState_MiscVarType), INTENT( INOUT ) :: m - TYPE(SeaState_InitOutputType), INTENT( INOUT ) :: InitOut + 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 @@ -658,7 +658,7 @@ SUBROUTINE SeaStOut_Init( SeaState_ProgDesc, OutRootName, InputFileData, y, p, IF ( p%OutSwtch == 1 .OR. p%OutSwtch == 3 ) THEN - CALL SeaStOut_OpenOutput( SeaState_ProgDesc, OutRootName, p, InitOut, ErrStat, ErrMsg ) + CALL SeaStOut_OpenOutput( SeaSt_ProgDesc, OutRootName, p, InitOut, ErrStat, ErrMsg ) IF (ErrStat >= AbortErrLev ) RETURN END IF @@ -669,7 +669,7 @@ SUBROUTINE SeaStOut_Init( SeaState_ProgDesc, OutRootName, InputFileData, y, p, END SUBROUTINE SeaStOUT_Init !==================================================================================================== -SUBROUTINE SeaStOut_OpenOutput( SeaState_ProgDesc, OutRootName, p, InitOut, ErrStat, ErrMsg ) +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 !---------------------------------------------------------------------------------------------------- @@ -678,10 +678,10 @@ SUBROUTINE SeaStOut_OpenOutput( SeaState_ProgDesc, OutRootName, p, InitOut, Err ! Passed variables - TYPE(ProgDesc) , INTENT( IN ) :: SeaState_ProgDesc + TYPE(ProgDesc) , INTENT( IN ) :: SeaSt_ProgDesc CHARACTER(1024), INTENT( IN ) :: OutRootName ! Root name for the output file - TYPE(SeaState_ParameterType), INTENT( INOUT ) :: p - TYPE(SeaState_InitOutPutType ),INTENT( IN ) :: InitOut ! + 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 @@ -715,7 +715,7 @@ SUBROUTINE SeaStOut_OpenOutput( SeaState_ProgDesc, OutRootName, p, InitOut, Err ! Write the output file header - WRITE (p%UnOutFile,'(/,A/)', IOSTAT=ErrStat) 'These predictions were generated by '//TRIM(SeaState_ProgDesc%Name)//& + WRITE (p%UnOutFile,'(/,A/)', IOSTAT=ErrStat) 'These predictions were generated by '//TRIM(SeaSt_ProgDesc%Name)//& ' on '//CurDate()//' at '//CurTime()//'.' ! Write three empty lines @@ -869,8 +869,8 @@ SUBROUTINE SeaStOut_ChkOutLst( OutList, y, p, ErrStat, ErrMsg ) ! Passed variables - TYPE(SeaState_OutputType), INTENT( INOUT ) :: y ! This module's internal data - TYPE(SeaState_ParameterType), INTENT( INOUT ) :: p ! parameter data for this instance of the HD module + TYPE(SeaSt_OutputType), INTENT( INOUT ) :: y ! This module's internal data + TYPE(SeaSt_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 @@ -977,7 +977,7 @@ SUBROUTINE SeaStOut_CloseOutput ( p, ErrStat, ErrMsg ) ! Passed variables - TYPE(SeaState_ParameterType), INTENT( INOUT ) :: p ! parameter data for this instance of the SeaState module + 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 diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 60f0703b81..b51c960fa8 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -38,8 +38,8 @@ MODULE SeaState_Types USE NWTC_Library IMPLICIT NONE INTEGER(IntKi), PUBLIC, PARAMETER :: MaxSeaStOutputs = 90 ! The maximum number of output channels supported by this module [-] -! ========= SeaState_InputFile ======= - TYPE, PUBLIC :: SeaState_InputFile +! ========= 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] @@ -69,10 +69,10 @@ MODULE SeaState_Types INTEGER(IntKi) :: UnSum !< File unit for the SeaState summary file [-1 = no summary file] [-] CHARACTER(20) :: OutFmt !< Output format for numerical results [-] CHARACTER(20) :: OutSFmt !< Output format for header strings [-] - END TYPE SeaState_InputFile + END TYPE SeaSt_InputFile ! ======================= -! ========= SeaState_InitInputType ======= - TYPE, PUBLIC :: SeaState_InitInputType +! ========= 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 [-] @@ -85,10 +85,10 @@ MODULE SeaState_Types 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,-] 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 SeaState_InitInputType + END TYPE SeaSt_InitInputType ! ======================= -! ========= SeaState_InitOutputType ======= - TYPE, PUBLIC :: SeaState_InitOutputType +! ========= SeaSt_InitOutputType ======= + TYPE, PUBLIC :: SeaSt_InitOutputType TYPE(Waves2_InitOutputType) :: Waves2 !< Initialization output from the Waves2 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) [-] @@ -97,40 +97,72 @@ MODULE SeaState_Types 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)] - END TYPE SeaState_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)] + 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 :: 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 :: WaveElev => NULL() !< Total wave elevation [-] + 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) :: CurrMod !< [-] + 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 :: WvDiffQTFF !< Full difference QTF second order forces flag [(-)] + LOGICAL :: WvSumQTFF !< Full sum QTF second order forces flag [(-)] + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + END TYPE SeaSt_InitOutputType ! ======================= -! ========= SeaState_ContinuousStateType ======= - TYPE, PUBLIC :: SeaState_ContinuousStateType +! ========= SeaSt_ContinuousStateType ======= + TYPE, PUBLIC :: SeaSt_ContinuousStateType TYPE(Waves2_ContinuousStateType) :: Waves2 !< continuous states from the waves2 module [-] - END TYPE SeaState_ContinuousStateType + END TYPE SeaSt_ContinuousStateType ! ======================= -! ========= SeaState_DiscreteStateType ======= - TYPE, PUBLIC :: SeaState_DiscreteStateType +! ========= SeaSt_DiscreteStateType ======= + TYPE, PUBLIC :: SeaSt_DiscreteStateType TYPE(Waves2_DiscreteStateType) :: Waves2 !< discrete states from the waves2 module [-] - END TYPE SeaState_DiscreteStateType + END TYPE SeaSt_DiscreteStateType ! ======================= -! ========= SeaState_ConstraintStateType ======= - TYPE, PUBLIC :: SeaState_ConstraintStateType +! ========= SeaSt_ConstraintStateType ======= + TYPE, PUBLIC :: SeaSt_ConstraintStateType TYPE(Waves2_ConstraintStateType) :: Waves2 !< constraint states from the waves2 module [-] - END TYPE SeaState_ConstraintStateType + END TYPE SeaSt_ConstraintStateType ! ======================= -! ========= SeaState_OtherStateType ======= - TYPE, PUBLIC :: SeaState_OtherStateType +! ========= SeaSt_OtherStateType ======= + TYPE, PUBLIC :: SeaSt_OtherStateType TYPE(Waves2_OtherStateType) :: Waves2 !< OtherState information from the Waves2 module [-] - END TYPE SeaState_OtherStateType + END TYPE SeaSt_OtherStateType ! ======================= -! ========= SeaState_MiscVarType ======= - TYPE, PUBLIC :: SeaState_MiscVarType +! ========= 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(SeaState_Interp_MiscVarType) :: Sea_Interp_m !< misc var information from the SeaState Interpolation module [-] + TYPE(SeaSt_Interp_MiscVarType) :: SeaSt_Interp_m !< misc var information from the SeaState Interpolation module [-] TYPE(Waves2_MiscVarType) :: Waves2 !< misc var information from the Waves2 module [-] TYPE(Waves2_InputType) :: u_Waves2 !< Waves2 module inputs [-] - END TYPE SeaState_MiscVarType + END TYPE SeaSt_MiscVarType ! ======================= -! ========= SeaState_ParameterType ======= - TYPE, PUBLIC :: SeaState_ParameterType +! ========= 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] @@ -162,24 +194,24 @@ MODULE SeaState_Types CHARACTER(ChanLen) :: Delim !< Delimiter string for outputs, defaults to tab-delimiters [-] INTEGER(IntKi) :: UnOutFile !< File unit for the SeaState outputs [-] INTEGER(IntKi) :: OutDec !< Write every OutDec time steps [-] - TYPE(SeaState_Interp_ParameterType) :: Sea_Interp_p !< parameter information from the SeaState Interpolation module [-] - END TYPE SeaState_ParameterType + TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + END TYPE SeaSt_ParameterType ! ======================= -! ========= SeaState_InputType ======= - TYPE, PUBLIC :: SeaState_InputType +! ========= SeaSt_InputType ======= + TYPE, PUBLIC :: SeaSt_InputType REAL(SiKi) :: DummyInput !< Remove this variable if you have discrete states [-] - END TYPE SeaState_InputType + END TYPE SeaSt_InputType ! ======================= -! ========= SeaState_OutputType ======= - TYPE, PUBLIC :: SeaState_OutputType +! ========= SeaSt_OutputType ======= + TYPE, PUBLIC :: SeaSt_OutputType REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WriteOutput !< Outputs to be written to the output file(s) [-] TYPE(Waves2_OutputType) :: Waves2 !< Waves2 module outputs [-] - END TYPE SeaState_OutputType + END TYPE SeaSt_OutputType ! ======================= CONTAINS - SUBROUTINE SeaState_CopyInputFile( SrcInputFileData, DstInputFileData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_InputFile), INTENT(IN) :: SrcInputFileData - TYPE(SeaState_InputFile), INTENT(INOUT) :: DstInputFileData + 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 @@ -192,7 +224,7 @@ SUBROUTINE SeaState_CopyInputFile( SrcInputFileData, DstInputFileData, CtrlCode, INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyInputFile' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyInputFile' ! ErrStat = ErrID_None ErrMsg = "" @@ -308,13 +340,13 @@ SUBROUTINE SeaState_CopyInputFile( SrcInputFileData, DstInputFileData, CtrlCode, DstInputFileData%UnSum = SrcInputFileData%UnSum DstInputFileData%OutFmt = SrcInputFileData%OutFmt DstInputFileData%OutSFmt = SrcInputFileData%OutSFmt - END SUBROUTINE SeaState_CopyInputFile + END SUBROUTINE SeaSt_CopyInputFile - SUBROUTINE SeaState_DestroyInputFile( InputFileData, ErrStat, ErrMsg ) - TYPE(SeaState_InputFile), INTENT(INOUT) :: InputFileData + SUBROUTINE SeaSt_DestroyInputFile( InputFileData, ErrStat, ErrMsg ) + TYPE(SeaSt_InputFile), INTENT(INOUT) :: InputFileData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyInputFile' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyInputFile' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None @@ -343,13 +375,13 @@ SUBROUTINE SeaState_DestroyInputFile( InputFileData, ErrStat, ErrMsg ) IF (ALLOCATED(InputFileData%OutList)) THEN DEALLOCATE(InputFileData%OutList) ENDIF - END SUBROUTINE SeaState_DestroyInputFile + END SUBROUTINE SeaSt_DestroyInputFile - SUBROUTINE SeaState_PackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_InputFile), INTENT(IN) :: InData + TYPE(SeaSt_InputFile), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -364,7 +396,7 @@ SUBROUTINE SeaState_PackInputFile( 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 = 'SeaState_PackInputFile' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackInputFile' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -748,13 +780,13 @@ SUBROUTINE SeaState_PackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, IntKiBuf(Int_Xferred) = ICHAR(InData%OutSFmt(I:I), IntKi) Int_Xferred = Int_Xferred + 1 END DO ! I - END SUBROUTINE SeaState_PackInputFile + END SUBROUTINE SeaSt_PackInputFile - SUBROUTINE SeaState_UnPackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_InputFile), INTENT(INOUT) :: OutData + TYPE(SeaSt_InputFile), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -770,7 +802,7 @@ SUBROUTINE SeaState_UnPackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackInputFile' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackInputFile' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -1073,11 +1105,11 @@ SUBROUTINE SeaState_UnPackInputFile( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta OutData%OutSFmt(I:I) = CHAR(IntKiBuf(Int_Xferred)) Int_Xferred = Int_Xferred + 1 END DO ! I - END SUBROUTINE SeaState_UnPackInputFile + END SUBROUTINE SeaSt_UnPackInputFile - SUBROUTINE SeaState_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_InitInputType), INTENT(IN) :: SrcInitInputData - TYPE(SeaState_InitInputType), INTENT(INOUT) :: DstInitInputData + 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 @@ -1087,7 +1119,7 @@ SUBROUTINE SeaState_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyInitInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyInitInput' ! ErrStat = ErrID_None ErrMsg = "" @@ -1118,13 +1150,13 @@ SUBROUTINE SeaState_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, ENDIF DstInitInputData%PtfmLocationX = SrcInitInputData%PtfmLocationX DstInitInputData%PtfmLocationY = SrcInitInputData%PtfmLocationY - END SUBROUTINE SeaState_CopyInitInput + END SUBROUTINE SeaSt_CopyInitInput - SUBROUTINE SeaState_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) - TYPE(SeaState_InitInputType), INTENT(INOUT) :: InitInputData + SUBROUTINE SeaSt_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) + TYPE(SeaSt_InitInputType), INTENT(INOUT) :: InitInputData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyInitInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyInitInput' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None @@ -1133,13 +1165,13 @@ SUBROUTINE SeaState_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) IF (ALLOCATED(InitInputData%WaveElevXY)) THEN DEALLOCATE(InitInputData%WaveElevXY) ENDIF - END SUBROUTINE SeaState_DestroyInitInput + END SUBROUTINE SeaSt_DestroyInitInput - SUBROUTINE SeaState_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_InitInputType), INTENT(IN) :: InData + TYPE(SeaSt_InitInputType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -1154,7 +1186,7 @@ SUBROUTINE SeaState_PackInitInput( 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 = 'SeaState_PackInitInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackInitInput' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -1302,13 +1334,13 @@ SUBROUTINE SeaState_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%PtfmLocationY Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_PackInitInput + END SUBROUTINE SeaSt_PackInitInput - SUBROUTINE SeaState_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_InitInputType), INTENT(INOUT) :: OutData + TYPE(SeaSt_InitInputType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -1321,7 +1353,7 @@ SUBROUTINE SeaState_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta INTEGER(IntKi) :: i2, i2_l, i2_u ! bounds (upper/lower) for an array dimension 2 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackInitInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackInitInput' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -1419,11 +1451,11 @@ SUBROUTINE SeaState_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta Re_Xferred = Re_Xferred + 1 OutData%PtfmLocationY = ReKiBuf(Re_Xferred) Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_UnPackInitInput + END SUBROUTINE SeaSt_UnPackInitInput - SUBROUTINE SeaState_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_InitOutputType), INTENT(IN) :: SrcInitOutputData - TYPE(SeaState_InitOutputType), INTENT(INOUT) :: DstInitOutputData + 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 @@ -1431,9 +1463,12 @@ SUBROUTINE SeaState_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCo 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 = 'SeaState_CopyInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyInitOutput' ! ErrStat = ErrID_None ErrMsg = "" @@ -1484,13 +1519,208 @@ SUBROUTINE SeaState_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCo DstInitOutputData%WtrDens = SrcInitOutputData%WtrDens DstInitOutputData%WtrDpth = SrcInitOutputData%WtrDpth DstInitOutputData%MSL2SWL = SrcInitOutputData%MSL2SWL - END SUBROUTINE SeaState_CopyInitOutput +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%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%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 (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%CurrMod = SrcInitOutputData%CurrMod + 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%WvDiffQTFF = SrcInitOutputData%WvDiffQTFF + DstInitOutputData%WvSumQTFF = SrcInitOutputData%WvSumQTFF + 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 + END SUBROUTINE SeaSt_CopyInitOutput - SUBROUTINE SeaState_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) - TYPE(SeaState_InitOutputType), INTENT(INOUT) :: InitOutputData + SUBROUTINE SeaSt_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) + TYPE(SeaSt_InitOutputType), INTENT(INOUT) :: InitOutputData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyInitOutput' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None @@ -1506,13 +1736,56 @@ SUBROUTINE SeaState_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%WaveElevSeries) ENDIF CALL NWTC_Library_Destroyprogdesc( InitOutputData%Ver, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_DestroyInitOutput +IF (ASSOCIATED(InitOutputData%WaveElevC0)) THEN + DEALLOCATE(InitOutputData%WaveElevC0) + InitOutputData%WaveElevC0 => NULL() +ENDIF +IF (ALLOCATED(InitOutputData%WaveElevC)) THEN + DEALLOCATE(InitOutputData%WaveElevC) +ENDIF +IF (ASSOCIATED(InitOutputData%WaveDirArr)) THEN + DEALLOCATE(InitOutputData%WaveDirArr) + InitOutputData%WaveDirArr => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveDynP)) THEN + DEALLOCATE(InitOutputData%WaveDynP) + InitOutputData%WaveDynP => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveAcc)) THEN + DEALLOCATE(InitOutputData%WaveAcc) + InitOutputData%WaveAcc => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveVel)) THEN + DEALLOCATE(InitOutputData%WaveVel) + InitOutputData%WaveVel => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveElev)) THEN + DEALLOCATE(InitOutputData%WaveElev) + InitOutputData%WaveElev => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveElev1)) THEN + DEALLOCATE(InitOutputData%WaveElev1) + InitOutputData%WaveElev1 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%WaveElev2)) THEN + DEALLOCATE(InitOutputData%WaveElev2) + InitOutputData%WaveElev2 => NULL() +ENDIF +IF (ALLOCATED(InitOutputData%WaveElev0)) THEN + DEALLOCATE(InitOutputData%WaveElev0) +ENDIF +IF (ASSOCIATED(InitOutputData%WaveTime)) THEN + DEALLOCATE(InitOutputData%WaveTime) + InitOutputData%WaveTime => NULL() +ENDIF + CALL SeaSt_Interp_DestroyParam( InitOutputData%SeaSt_Interp_p, ErrStat, ErrMsg ) + END SUBROUTINE SeaSt_DestroyInitOutput - SUBROUTINE SeaState_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_InitOutputType), INTENT(IN) :: InData + TYPE(SeaSt_InitOutputType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -1527,7 +1800,7 @@ SUBROUTINE SeaState_PackInitOutput( 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 = 'SeaState_PackInitOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackInitOutput' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -1596,6 +1869,98 @@ SUBROUTINE SeaState_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 ! 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 ! 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 ! 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 ! CurrMod + 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 ! WvDiffQTFF + Int_BufSz = Int_BufSz + 1 ! WvSumQTFF + 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 @@ -1739,143 +2104,863 @@ SUBROUTINE SeaState_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Re_Xferred = Re_Xferred + 1 ReKiBuf(Re_Xferred) = InData%MSL2SWL Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_PackInitOutput - - SUBROUTINE SeaState_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(SeaState_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) :: ErrStat2 - CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_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 Waves2_UnpackInitOutput( 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 ! WriteOutputHdr not allocated + 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 - i1_l = IntKiBuf( Int_Xferred ) - i1_u = IntKiBuf( Int_Xferred + 1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC0,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC0,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 + 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 ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WriteOutputUnt not allocated + 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 - i1_l = IntKiBuf( Int_Xferred ) - i1_u = IntKiBuf( Int_Xferred + 1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveElevC,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveElevC,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 + 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 ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveElevSeries not allocated + 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 - i1_l = IntKiBuf( Int_Xferred ) - i1_u = IntKiBuf( Int_Xferred + 1) + IntKiBuf( Int_Xferred ) = LBOUND(InData%WaveDirArr,1) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveDirArr,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 + + 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 - Buf_size=IntKiBuf( Int_Xferred ) - Int_Xferred = Int_Xferred + 1 - IF(Buf_size > 0) THEN - ALLOCATE(Re_Buf(Buf_size),STAT=ErrStat2) + 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%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%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. 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%CurrMod + 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%WvDiffQTFF, IntKiBuf(1)) + Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = TRANSFER(InData%WvSumQTFF, 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 + 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 + 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 + + 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 ! 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 ! 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 + 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 ! 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 ! 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 ! 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%CurrMod = 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%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 + 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 @@ -1905,24 +2990,18 @@ SUBROUTINE SeaState_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt 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 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%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 - END SUBROUTINE SeaState_UnPackInitOutput + END SUBROUTINE SeaSt_UnPackInitOutput - SUBROUTINE SeaState_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_ContinuousStateType), INTENT(IN) :: SrcContStateData - TYPE(SeaState_ContinuousStateType), INTENT(INOUT) :: DstContStateData + 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 @@ -1930,32 +3009,32 @@ SUBROUTINE SeaState_CopyContState( SrcContStateData, DstContStateData, CtrlCode, INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyContState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyContState' ! ErrStat = ErrID_None ErrMsg = "" CALL Waves2_CopyContState( SrcContStateData%Waves2, DstContStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - END SUBROUTINE SeaState_CopyContState + END SUBROUTINE SeaSt_CopyContState - SUBROUTINE SeaState_DestroyContState( ContStateData, ErrStat, ErrMsg ) - TYPE(SeaState_ContinuousStateType), INTENT(INOUT) :: ContStateData + SUBROUTINE SeaSt_DestroyContState( ContStateData, ErrStat, ErrMsg ) + TYPE(SeaSt_ContinuousStateType), INTENT(INOUT) :: ContStateData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyContState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyContState' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" CALL Waves2_DestroyContState( ContStateData%Waves2, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_DestroyContState + END SUBROUTINE SeaSt_DestroyContState - SUBROUTINE SeaState_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_ContinuousStateType), INTENT(IN) :: InData + TYPE(SeaSt_ContinuousStateType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -1970,7 +3049,7 @@ SUBROUTINE SeaState_PackContState( 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 = 'SeaState_PackContState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackContState' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2059,13 +3138,13 @@ SUBROUTINE SeaState_PackContState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END SUBROUTINE SeaState_PackContState + END SUBROUTINE SeaSt_PackContState - SUBROUTINE SeaState_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_ContinuousStateType), INTENT(INOUT) :: OutData + TYPE(SeaSt_ContinuousStateType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -2076,7 +3155,7 @@ SUBROUTINE SeaState_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta INTEGER(IntKi) :: i INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackContState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackContState' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2127,11 +3206,11 @@ SUBROUTINE SeaState_UnPackContState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END SUBROUTINE SeaState_UnPackContState + END SUBROUTINE SeaSt_UnPackContState - SUBROUTINE SeaState_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_DiscreteStateType), INTENT(IN) :: SrcDiscStateData - TYPE(SeaState_DiscreteStateType), INTENT(INOUT) :: DstDiscStateData + 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 @@ -2139,32 +3218,32 @@ SUBROUTINE SeaState_CopyDiscState( SrcDiscStateData, DstDiscStateData, CtrlCode, INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyDiscState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyDiscState' ! ErrStat = ErrID_None ErrMsg = "" CALL Waves2_CopyDiscState( SrcDiscStateData%Waves2, DstDiscStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - END SUBROUTINE SeaState_CopyDiscState + END SUBROUTINE SeaSt_CopyDiscState - SUBROUTINE SeaState_DestroyDiscState( DiscStateData, ErrStat, ErrMsg ) - TYPE(SeaState_DiscreteStateType), INTENT(INOUT) :: DiscStateData + SUBROUTINE SeaSt_DestroyDiscState( DiscStateData, ErrStat, ErrMsg ) + TYPE(SeaSt_DiscreteStateType), INTENT(INOUT) :: DiscStateData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyDiscState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyDiscState' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" CALL Waves2_DestroyDiscState( DiscStateData%Waves2, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_DestroyDiscState + END SUBROUTINE SeaSt_DestroyDiscState - SUBROUTINE SeaState_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_DiscreteStateType), INTENT(IN) :: InData + TYPE(SeaSt_DiscreteStateType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -2179,7 +3258,7 @@ SUBROUTINE SeaState_PackDiscState( 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 = 'SeaState_PackDiscState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackDiscState' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2268,13 +3347,13 @@ SUBROUTINE SeaState_PackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END SUBROUTINE SeaState_PackDiscState + END SUBROUTINE SeaSt_PackDiscState - SUBROUTINE SeaState_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_DiscreteStateType), INTENT(INOUT) :: OutData + TYPE(SeaSt_DiscreteStateType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -2285,7 +3364,7 @@ SUBROUTINE SeaState_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta INTEGER(IntKi) :: i INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackDiscState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackDiscState' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2336,11 +3415,11 @@ SUBROUTINE SeaState_UnPackDiscState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END SUBROUTINE SeaState_UnPackDiscState + END SUBROUTINE SeaSt_UnPackDiscState - SUBROUTINE SeaState_CopyConstrState( SrcConstrStateData, DstConstrStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_ConstraintStateType), INTENT(IN) :: SrcConstrStateData - TYPE(SeaState_ConstraintStateType), INTENT(INOUT) :: DstConstrStateData + 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 @@ -2348,32 +3427,32 @@ SUBROUTINE SeaState_CopyConstrState( SrcConstrStateData, DstConstrStateData, Ctr INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyConstrState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyConstrState' ! ErrStat = ErrID_None ErrMsg = "" CALL Waves2_CopyConstrState( SrcConstrStateData%Waves2, DstConstrStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - END SUBROUTINE SeaState_CopyConstrState + END SUBROUTINE SeaSt_CopyConstrState - SUBROUTINE SeaState_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg ) - TYPE(SeaState_ConstraintStateType), INTENT(INOUT) :: ConstrStateData + SUBROUTINE SeaSt_DestroyConstrState( ConstrStateData, ErrStat, ErrMsg ) + TYPE(SeaSt_ConstraintStateType), INTENT(INOUT) :: ConstrStateData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyConstrState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyConstrState' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" CALL Waves2_DestroyConstrState( ConstrStateData%Waves2, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_DestroyConstrState + END SUBROUTINE SeaSt_DestroyConstrState - SUBROUTINE SeaState_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_ConstraintStateType), INTENT(IN) :: InData + TYPE(SeaSt_ConstraintStateType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -2388,7 +3467,7 @@ SUBROUTINE SeaState_PackConstrState( 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 = 'SeaState_PackConstrState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackConstrState' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2477,13 +3556,13 @@ SUBROUTINE SeaState_PackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END SUBROUTINE SeaState_PackConstrState + END SUBROUTINE SeaSt_PackConstrState - SUBROUTINE SeaState_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_ConstraintStateType), INTENT(INOUT) :: OutData + TYPE(SeaSt_ConstraintStateType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -2494,7 +3573,7 @@ SUBROUTINE SeaState_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS INTEGER(IntKi) :: i INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackConstrState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackConstrState' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2545,11 +3624,11 @@ SUBROUTINE SeaState_UnPackConstrState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrS IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END SUBROUTINE SeaState_UnPackConstrState + END SUBROUTINE SeaSt_UnPackConstrState - SUBROUTINE SeaState_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_OtherStateType), INTENT(IN) :: SrcOtherStateData - TYPE(SeaState_OtherStateType), INTENT(INOUT) :: DstOtherStateData + 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 @@ -2557,32 +3636,32 @@ SUBROUTINE SeaState_CopyOtherState( SrcOtherStateData, DstOtherStateData, CtrlCo INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyOtherState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyOtherState' ! ErrStat = ErrID_None ErrMsg = "" CALL Waves2_CopyOtherState( SrcOtherStateData%Waves2, DstOtherStateData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - END SUBROUTINE SeaState_CopyOtherState + END SUBROUTINE SeaSt_CopyOtherState - SUBROUTINE SeaState_DestroyOtherState( OtherStateData, ErrStat, ErrMsg ) - TYPE(SeaState_OtherStateType), INTENT(INOUT) :: OtherStateData + SUBROUTINE SeaSt_DestroyOtherState( OtherStateData, ErrStat, ErrMsg ) + TYPE(SeaSt_OtherStateType), INTENT(INOUT) :: OtherStateData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyOtherState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyOtherState' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" CALL Waves2_DestroyOtherState( OtherStateData%Waves2, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_DestroyOtherState + END SUBROUTINE SeaSt_DestroyOtherState - SUBROUTINE SeaState_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_OtherStateType), INTENT(IN) :: InData + TYPE(SeaSt_OtherStateType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -2597,7 +3676,7 @@ SUBROUTINE SeaState_PackOtherState( 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 = 'SeaState_PackOtherState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackOtherState' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2686,13 +3765,13 @@ SUBROUTINE SeaState_PackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END SUBROUTINE SeaState_PackOtherState + END SUBROUTINE SeaSt_PackOtherState - SUBROUTINE SeaState_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_OtherStateType), INTENT(INOUT) :: OutData + TYPE(SeaSt_OtherStateType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -2703,7 +3782,7 @@ SUBROUTINE SeaState_UnPackOtherState( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSt INTEGER(IntKi) :: i INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackOtherState' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackOtherState' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2754,11 +3833,11 @@ SUBROUTINE SeaState_UnPackOtherState( 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) - END SUBROUTINE SeaState_UnPackOtherState + END SUBROUTINE SeaSt_UnPackOtherState - SUBROUTINE SeaState_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_MiscVarType), INTENT(IN) :: SrcMiscData - TYPE(SeaState_MiscVarType), INTENT(INOUT) :: DstMiscData + 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 @@ -2766,14 +3845,14 @@ SUBROUTINE SeaState_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMs INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyMisc' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyMisc' ! ErrStat = ErrID_None ErrMsg = "" DstMiscData%Decimate = SrcMiscData%Decimate DstMiscData%LastOutTime = SrcMiscData%LastOutTime DstMiscData%LastIndWave = SrcMiscData%LastIndWave - CALL SeaState_Interp_CopyMisc( SrcMiscData%Sea_Interp_m, DstMiscData%Sea_Interp_m, CtrlCode, ErrStat2, ErrMsg2 ) + 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 CALL Waves2_CopyMisc( SrcMiscData%Waves2, DstMiscData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) @@ -2782,27 +3861,27 @@ SUBROUTINE SeaState_CopyMisc( SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMs 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 SeaState_CopyMisc + END SUBROUTINE SeaSt_CopyMisc - SUBROUTINE SeaState_DestroyMisc( MiscData, ErrStat, ErrMsg ) - TYPE(SeaState_MiscVarType), INTENT(INOUT) :: MiscData + SUBROUTINE SeaSt_DestroyMisc( MiscData, ErrStat, ErrMsg ) + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: MiscData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyMisc' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyMisc' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" - CALL SeaState_Interp_DestroyMisc( MiscData%Sea_Interp_m, ErrStat, ErrMsg ) + CALL SeaSt_Interp_DestroyMisc( MiscData%SeaSt_Interp_m, ErrStat, ErrMsg ) CALL Waves2_DestroyMisc( MiscData%Waves2, ErrStat, ErrMsg ) CALL Waves2_DestroyInput( MiscData%u_Waves2, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_DestroyMisc + END SUBROUTINE SeaSt_DestroyMisc - SUBROUTINE SeaState_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_MiscVarType), INTENT(IN) :: InData + TYPE(SeaSt_MiscVarType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -2817,7 +3896,7 @@ SUBROUTINE SeaState_PackMisc( 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 = 'SeaState_PackMisc' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackMisc' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -2837,20 +3916,20 @@ SUBROUTINE SeaState_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 ! Sea_Interp_m: size of buffers for each call to pack subtype - CALL SeaState_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Sea_Interp_m, ErrStat2, ErrMsg2, .TRUE. ) ! Sea_Interp_m + 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 ! Sea_Interp_m + 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 ! Sea_Interp_m + 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 ! Sea_Interp_m + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_m Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF @@ -2921,7 +4000,7 @@ SUBROUTINE SeaState_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs Db_Xferred = Db_Xferred + 1 IntKiBuf(Int_Xferred) = InData%LastIndWave Int_Xferred = Int_Xferred + 1 - CALL SeaState_Interp_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%Sea_Interp_m, ErrStat2, ErrMsg2, OnlySize ) ! Sea_Interp_m + 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 @@ -3005,13 +4084,13 @@ SUBROUTINE SeaState_PackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END SUBROUTINE SeaState_PackMisc + END SUBROUTINE SeaSt_PackMisc - SUBROUTINE SeaState_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_MiscVarType), INTENT(INOUT) :: OutData + TYPE(SeaSt_MiscVarType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -3022,7 +4101,7 @@ SUBROUTINE SeaState_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er INTEGER(IntKi) :: i INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackMisc' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackMisc' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -3072,7 +4151,7 @@ SUBROUTINE SeaState_UnPackMisc( 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 SeaState_Interp_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%Sea_Interp_m, ErrStat2, ErrMsg2 ) ! Sea_Interp_m + 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 @@ -3159,11 +4238,11 @@ SUBROUTINE SeaState_UnPackMisc( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er IF(ALLOCATED(Re_Buf )) DEALLOCATE(Re_Buf ) IF(ALLOCATED(Db_Buf )) DEALLOCATE(Db_Buf ) IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) - END SUBROUTINE SeaState_UnPackMisc + END SUBROUTINE SeaSt_UnPackMisc - SUBROUTINE SeaState_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_ParameterType), INTENT(IN) :: SrcParamData - TYPE(SeaState_ParameterType), INTENT(INOUT) :: DstParamData + 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 @@ -3176,7 +4255,7 @@ SUBROUTINE SeaState_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Er INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyParam' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyParam' ! ErrStat = ErrID_None ErrMsg = "" @@ -3394,16 +4473,16 @@ SUBROUTINE SeaState_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Er DstParamData%Delim = SrcParamData%Delim DstParamData%UnOutFile = SrcParamData%UnOutFile DstParamData%OutDec = SrcParamData%OutDec - CALL SeaState_Interp_CopyParam( SrcParamData%Sea_Interp_p, DstParamData%Sea_Interp_p, 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 - END SUBROUTINE SeaState_CopyParam + END SUBROUTINE SeaSt_CopyParam - SUBROUTINE SeaState_DestroyParam( ParamData, ErrStat, ErrMsg ) - TYPE(SeaState_ParameterType), INTENT(INOUT) :: ParamData + SUBROUTINE SeaSt_DestroyParam( ParamData, ErrStat, ErrMsg ) + TYPE(SeaSt_ParameterType), INTENT(INOUT) :: ParamData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyParam' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyParam' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None @@ -3458,14 +4537,14 @@ SUBROUTINE SeaState_DestroyParam( ParamData, ErrStat, ErrMsg ) ENDDO DEALLOCATE(ParamData%OutParam) ENDIF - CALL SeaState_Interp_DestroyParam( ParamData%Sea_Interp_p, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_DestroyParam + CALL SeaSt_Interp_DestroyParam( ParamData%SeaSt_Interp_p, ErrStat, ErrMsg ) + END SUBROUTINE SeaSt_DestroyParam - SUBROUTINE SeaState_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_ParameterType), INTENT(IN) :: InData + TYPE(SeaSt_ParameterType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -3480,7 +4559,7 @@ SUBROUTINE SeaState_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_PackParam' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackParam' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -3614,20 +4693,20 @@ SUBROUTINE SeaState_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM 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 ! Sea_Interp_p: size of buffers for each call to pack subtype - CALL SeaState_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Sea_Interp_p, ErrStat2, ErrMsg2, .TRUE. ) ! Sea_Interp_p + 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 ! Sea_Interp_p + 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 ! Sea_Interp_p + 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 ! Sea_Interp_p + IF(ALLOCATED(Int_Buf)) THEN ! SeaSt_Interp_p Int_BufSz = Int_BufSz + SIZE( Int_Buf ) DEALLOCATE(Int_Buf) END IF @@ -4036,7 +5115,7 @@ SUBROUTINE SeaState_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%OutDec Int_Xferred = Int_Xferred + 1 - CALL SeaState_Interp_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%Sea_Interp_p, ErrStat2, ErrMsg2, OnlySize ) ! Sea_Interp_p + 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 @@ -4064,13 +5143,13 @@ SUBROUTINE SeaState_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END SUBROUTINE SeaState_PackParam + END SUBROUTINE SeaSt_PackParam - SUBROUTINE SeaState_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_ParameterType), INTENT(INOUT) :: OutData + TYPE(SeaSt_ParameterType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -4086,7 +5165,7 @@ SUBROUTINE SeaState_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E INTEGER(IntKi) :: i5, i5_l, i5_u ! bounds (upper/lower) for an array dimension 5 INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackParam' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackParam' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -4575,18 +5654,18 @@ SUBROUTINE SeaState_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E Int_Buf = IntKiBuf( Int_Xferred:Int_Xferred+Buf_size-1 ) Int_Xferred = Int_Xferred + Buf_size END IF - CALL SeaState_Interp_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%Sea_Interp_p, ErrStat2, ErrMsg2 ) ! Sea_Interp_p + 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 SeaState_UnPackParam + END SUBROUTINE SeaSt_UnPackParam - SUBROUTINE SeaState_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_InputType), INTENT(IN) :: SrcInputData - TYPE(SeaState_InputType), INTENT(INOUT) :: DstInputData + 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 @@ -4594,29 +5673,29 @@ SUBROUTINE SeaState_CopyInput( SrcInputData, DstInputData, CtrlCode, ErrStat, Er INTEGER(IntKi) :: i,j,k INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_CopyInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyInput' ! ErrStat = ErrID_None ErrMsg = "" DstInputData%DummyInput = SrcInputData%DummyInput - END SUBROUTINE SeaState_CopyInput + END SUBROUTINE SeaSt_CopyInput - SUBROUTINE SeaState_DestroyInput( InputData, ErrStat, ErrMsg ) - TYPE(SeaState_InputType), INTENT(INOUT) :: InputData + SUBROUTINE SeaSt_DestroyInput( InputData, ErrStat, ErrMsg ) + TYPE(SeaSt_InputType), INTENT(INOUT) :: InputData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyInput' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" - END SUBROUTINE SeaState_DestroyInput + END SUBROUTINE SeaSt_DestroyInput - SUBROUTINE SeaState_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_InputType), INTENT(IN) :: InData + TYPE(SeaSt_InputType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -4631,7 +5710,7 @@ SUBROUTINE SeaState_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_PackInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackInput' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -4677,13 +5756,13 @@ SUBROUTINE SeaState_PackInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrM ReKiBuf(Re_Xferred) = InData%DummyInput Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_PackInput + END SUBROUTINE SeaSt_PackInput - SUBROUTINE SeaState_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_InputType), INTENT(INOUT) :: OutData + TYPE(SeaSt_InputType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -4694,7 +5773,7 @@ SUBROUTINE SeaState_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E INTEGER(IntKi) :: i INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_UnPackInput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackInput' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -4707,11 +5786,11 @@ SUBROUTINE SeaState_UnPackInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, E Int_Xferred = 1 OutData%DummyInput = REAL(ReKiBuf(Re_Xferred), SiKi) Re_Xferred = Re_Xferred + 1 - END SUBROUTINE SeaState_UnPackInput + END SUBROUTINE SeaSt_UnPackInput - SUBROUTINE SeaState_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SeaState_OutputType), INTENT(IN) :: SrcOutputData - TYPE(SeaState_OutputType), INTENT(INOUT) :: DstOutputData + 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 @@ -4720,7 +5799,7 @@ SUBROUTINE SeaState_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, 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 = 'SeaState_CopyOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_CopyOutput' ! ErrStat = ErrID_None ErrMsg = "" @@ -4739,13 +5818,13 @@ SUBROUTINE SeaState_CopyOutput( SrcOutputData, DstOutputData, CtrlCode, ErrStat, CALL Waves2_CopyOutput( SrcOutputData%Waves2, DstOutputData%Waves2, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - END SUBROUTINE SeaState_CopyOutput + END SUBROUTINE SeaSt_CopyOutput - SUBROUTINE SeaState_DestroyOutput( OutputData, ErrStat, ErrMsg ) - TYPE(SeaState_OutputType), INTENT(INOUT) :: OutputData + SUBROUTINE SeaSt_DestroyOutput( OutputData, ErrStat, ErrMsg ) + TYPE(SeaSt_OutputType), INTENT(INOUT) :: OutputData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_DestroyOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_DestroyOutput' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None @@ -4754,13 +5833,13 @@ SUBROUTINE SeaState_DestroyOutput( OutputData, ErrStat, ErrMsg ) DEALLOCATE(OutputData%WriteOutput) ENDIF CALL Waves2_DestroyOutput( OutputData%Waves2, ErrStat, ErrMsg ) - END SUBROUTINE SeaState_DestroyOutput + END SUBROUTINE SeaSt_DestroyOutput - SUBROUTINE SeaState_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + 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(SeaState_OutputType), INTENT(IN) :: InData + TYPE(SeaSt_OutputType), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -4775,7 +5854,7 @@ SUBROUTINE SeaState_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err LOGICAL :: OnlySize ! if present and true, do not pack, just allocate buffers INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_PackOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_PackOutput' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -4884,13 +5963,13 @@ SUBROUTINE SeaState_PackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END SUBROUTINE SeaState_PackOutput + END SUBROUTINE SeaSt_PackOutput - SUBROUTINE SeaState_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + 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(SeaState_OutputType), INTENT(INOUT) :: OutData + TYPE(SeaSt_OutputType), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -4902,7 +5981,7 @@ SUBROUTINE SeaState_UnPackOutput( 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 = 'SeaState_UnPackOutput' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_UnPackOutput' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -4971,10 +6050,10 @@ SUBROUTINE SeaState_UnPackOutput( 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) - END SUBROUTINE SeaState_UnPackOutput + END SUBROUTINE SeaSt_UnPackOutput - SUBROUTINE SeaState_Input_ExtrapInterp(u, t, u_out, t_out, ErrStat, ErrMsg ) + SUBROUTINE SeaSt_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 @@ -4990,9 +6069,9 @@ SUBROUTINE SeaState_Input_ExtrapInterp(u, t, u_out, t_out, ErrStat, ErrMsg ) ! !.................................................................................................................................. - TYPE(SeaState_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 + TYPE(SeaSt_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs - TYPE(SeaState_InputType), INTENT(INOUT) :: u_out ! Input at tin_out + TYPE(SeaSt_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 @@ -5000,7 +6079,7 @@ SUBROUTINE SeaState_Input_ExtrapInterp(u, t, u_out, t_out, ErrStat, ErrMsg ) INTEGER(IntKi) :: order ! order of polynomial fit (max 2) INTEGER(IntKi) :: ErrStat2 ! local errors CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Input_ExtrapInterp' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Input_ExtrapInterp' ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" @@ -5010,22 +6089,22 @@ SUBROUTINE SeaState_Input_ExtrapInterp(u, t, u_out, t_out, ErrStat, ErrMsg ) endif order = SIZE(u) - 1 IF ( order .eq. 0 ) THEN - CALL SeaState_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) + CALL SeaSt_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) ELSE IF ( order .eq. 1 ) THEN - CALL SeaState_Input_ExtrapInterp1(u(1), u(2), t, u_out, t_out, ErrStat2, ErrMsg2 ) + CALL SeaSt_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 SeaState_Input_ExtrapInterp2(u(1), u(2), u(3), t, u_out, t_out, ErrStat2, ErrMsg2 ) + CALL SeaSt_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 SeaState_Input_ExtrapInterp + END SUBROUTINE SeaSt_Input_ExtrapInterp - SUBROUTINE SeaState_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, ErrMsg ) + SUBROUTINE SeaSt_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. @@ -5037,17 +6116,17 @@ SUBROUTINE SeaState_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, Er ! !.................................................................................................................................. - TYPE(SeaState_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 - TYPE(SeaState_InputType), INTENT(IN) :: u2 ! Input at t2 + TYPE(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 + TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs - TYPE(SeaState_InputType), INTENT(INOUT) :: u_out ! Input at tin_out + TYPE(SeaSt_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 = 'SeaState_Input_ExtrapInterp1' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Input_ExtrapInterp1' REAL(DbKi) :: b ! temporary for extrapolation/interpolation REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation INTEGER(IntKi) :: ErrStat2 ! local errors @@ -5068,10 +6147,10 @@ SUBROUTINE SeaState_Input_ExtrapInterp1(u1, u2, tin, u_out, tin_out, ErrStat, Er ScaleFactor = t_out / t(2) b = -(u1%DummyInput - u2%DummyInput) u_out%DummyInput = u1%DummyInput + b * ScaleFactor - END SUBROUTINE SeaState_Input_ExtrapInterp1 + END SUBROUTINE SeaSt_Input_ExtrapInterp1 - SUBROUTINE SeaState_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat, ErrMsg ) + SUBROUTINE SeaSt_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. @@ -5085,11 +6164,11 @@ SUBROUTINE SeaState_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat ! !.................................................................................................................................. - TYPE(SeaState_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 - TYPE(SeaState_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 - TYPE(SeaState_InputType), INTENT(IN) :: u3 ! Input at t3 + TYPE(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 + TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 + TYPE(SeaSt_InputType), INTENT(IN) :: u3 ! Input at t3 REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs - TYPE(SeaState_InputType), INTENT(INOUT) :: u_out ! Input at tin_out + TYPE(SeaSt_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 @@ -5102,7 +6181,7 @@ SUBROUTINE SeaState_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation INTEGER(IntKi) :: ErrStat2 ! local errors CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Input_ExtrapInterp2' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Input_ExtrapInterp2' ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" @@ -5126,10 +6205,10 @@ SUBROUTINE SeaState_Input_ExtrapInterp2(u1, u2, u3, tin, u_out, tin_out, ErrStat 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 SeaState_Input_ExtrapInterp2 + END SUBROUTINE SeaSt_Input_ExtrapInterp2 - SUBROUTINE SeaState_Output_ExtrapInterp(y, t, y_out, t_out, ErrStat, ErrMsg ) + SUBROUTINE SeaSt_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 @@ -5145,9 +6224,9 @@ SUBROUTINE SeaState_Output_ExtrapInterp(y, t, y_out, t_out, ErrStat, ErrMsg ) ! !.................................................................................................................................. - TYPE(SeaState_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 + TYPE(SeaSt_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs - TYPE(SeaState_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out + TYPE(SeaSt_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 @@ -5155,7 +6234,7 @@ SUBROUTINE SeaState_Output_ExtrapInterp(y, t, y_out, t_out, ErrStat, ErrMsg ) INTEGER(IntKi) :: order ! order of polynomial fit (max 2) INTEGER(IntKi) :: ErrStat2 ! local errors CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Output_ExtrapInterp' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Output_ExtrapInterp' ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" @@ -5165,22 +6244,22 @@ SUBROUTINE SeaState_Output_ExtrapInterp(y, t, y_out, t_out, ErrStat, ErrMsg ) endif order = SIZE(y) - 1 IF ( order .eq. 0 ) THEN - CALL SeaState_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) + CALL SeaSt_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) ELSE IF ( order .eq. 1 ) THEN - CALL SeaState_Output_ExtrapInterp1(y(1), y(2), t, y_out, t_out, ErrStat2, ErrMsg2 ) + CALL SeaSt_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 SeaState_Output_ExtrapInterp2(y(1), y(2), y(3), t, y_out, t_out, ErrStat2, ErrMsg2 ) + CALL SeaSt_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 SeaState_Output_ExtrapInterp + END SUBROUTINE SeaSt_Output_ExtrapInterp - SUBROUTINE SeaState_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, ErrMsg ) + SUBROUTINE SeaSt_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. @@ -5192,17 +6271,17 @@ SUBROUTINE SeaState_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, E ! !.................................................................................................................................. - TYPE(SeaState_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 - TYPE(SeaState_OutputType), INTENT(IN) :: y2 ! Output at t2 + TYPE(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 + TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs - TYPE(SeaState_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out + TYPE(SeaSt_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 = 'SeaState_Output_ExtrapInterp1' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Output_ExtrapInterp1' REAL(DbKi) :: b ! temporary for extrapolation/interpolation REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation INTEGER(IntKi) :: ErrStat2 ! local errors @@ -5231,10 +6310,10 @@ SUBROUTINE SeaState_Output_ExtrapInterp1(y1, y2, tin, y_out, tin_out, ErrStat, E 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) - END SUBROUTINE SeaState_Output_ExtrapInterp1 + END SUBROUTINE SeaSt_Output_ExtrapInterp1 - SUBROUTINE SeaState_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrStat, ErrMsg ) + SUBROUTINE SeaSt_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. @@ -5248,11 +6327,11 @@ SUBROUTINE SeaState_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrSta ! !.................................................................................................................................. - TYPE(SeaState_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 - TYPE(SeaState_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 - TYPE(SeaState_OutputType), INTENT(IN) :: y3 ! Output at t3 + TYPE(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 + TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 + TYPE(SeaSt_OutputType), INTENT(IN) :: y3 ! Output at t3 REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs - TYPE(SeaState_OutputType), INTENT(INOUT) :: y_out ! Output at tin_out + TYPE(SeaSt_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 @@ -5265,7 +6344,7 @@ SUBROUTINE SeaState_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrSta REAL(DbKi) :: ScaleFactor ! temporary for extrapolation/interpolation INTEGER(IntKi) :: ErrStat2 ! local errors CHARACTER(ErrMsgLen) :: ErrMsg2 ! local errors - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Output_ExtrapInterp2' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Output_ExtrapInterp2' INTEGER :: i01 ! dim1 level 0 counter variable for arrays of ddts INTEGER :: i1 ! dim1 counter variable for arrays ! Initialize ErrStat @@ -5297,7 +6376,7 @@ SUBROUTINE SeaState_Output_ExtrapInterp2(y1, y2, y3, tin, y_out, tin_out, ErrSta 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) - END SUBROUTINE SeaState_Output_ExtrapInterp2 + END SUBROUTINE SeaSt_Output_ExtrapInterp2 END MODULE SeaState_Types !ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 3c47b8add3..8385d8a979 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -572,8 +572,8 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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%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') @@ -609,7 +609,7 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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%WaveElev0 = 0.0 InitOut%WaveElevC0 = 0.0 InitOut%WaveElev = 0.0 !InitOut%PWaveDynP0 = 0.0 @@ -1082,12 +1082,15 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !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%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%NGrid(1),InitInp%NGrid(2) ), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev.', ErrStat,ErrMsg,'VariousWaves_Init') - + + ALLOCATE ( InitOut%WaveElevC (2,0:InitOut%NStepWave2,InitInp%NGrid(1)*InitInp%NGrid(2) ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevC.', 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') @@ -1776,19 +1779,19 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 + + 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 !TODO: FIX ME For generating grid elevations DO k = 1,InitInp%NWaveElev ! 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(2) + 1 - CALL WaveElevTimeSeriesAtXY( InitInp%WaveElevxi(k), InitInp%WaveElevyi(k), InitOut%WaveElev(:,i,j), ErrStatTmp, ErrMsgTmp ) + CALL WaveElevTimeSeriesAtXY( InitInp%WaveElevxi(k), InitInp%WaveElevyi(k), InitOut%WaveElev(:,i,j), InitOut%WaveElevC(:,:,k), ErrStatTmp, ErrMsgTmp ) CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStat,ErrMsg,'VariousWaves_Init') IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() @@ -2010,7 +2013,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 ) + InitOut%WaveElev0 (InitOut%NStepWave) = InitOut%WaveElev0 (0 ) @@ -2020,11 +2023,12 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) CONTAINS - SUBROUTINE WaveElevTimeSeriesAtXY(Xcoord,Ycoord, WaveElevSeriesAtXY, ErrStatLcl, ErrMsgLcl ) + SUBROUTINE WaveElevTimeSeriesAtXY(Xcoord,Ycoord, WaveElevAtXY, WaveElevCAtXY, ErrStatLcl, ErrMsgLcl ) REAL(SiKi), INTENT(IN ) :: Xcoord REAL(SiKi), INTENT(IN ) :: Ycoord - REAL(SiKi), INTENT( OUT) :: WaveElevSeriesAtXY(0:InitOut%NStepWave) + REAL(SiKi), INTENT( OUT) :: WaveElevAtXY(0:InitOut%NStepWave) + real(SiKi), INTENT( OUT) :: WaveElevCAtXY(2,0:InitOut%NStepWave2) INTEGER(IntKi), INTENT( OUT) :: ErrStatLcl INTEGER(IntKi) :: ErrStatLcl2 CHARACTER(*), INTENT( OUT) :: ErrMsgLcl @@ -2045,12 +2049,14 @@ SUBROUTINE WaveElevTimeSeriesAtXY(Xcoord,Ycoord, WaveElevSeriesAtXY, ErrStatLcl, EXP( -ImagNmbr*WaveNmbr*( Xcoord*CosWaveDir(I)+ & Ycoord*SinWaveDir(I) ) ) ENDDO - - CALL ApplyFFT_cx ( WaveElevSeriesAtXY(0:InitOut%NStepWave-1), tmpComplexArr, FFT_Data, ErrStatLcl2 ) + + CALL ApplyFFT_cx ( WaveElevAtXY(0:InitOut%NStepWave-1), tmpComplexArr, FFT_Data, ErrStatLcl2 ) CALL SetErrStat(ErrStatLcl2,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStatLcl,ErrMsgLcl,'WaveElevTimeSeriesAtXY') - +!TODO: Why is tmpComplexArr 0:NStepWave2 long? why not NStepWave2-1 ?? GJH + WaveElevCAtXY( 1,: ) = REAL(tmpComplexArr(:)) + WaveElevCAtXY( 2,: ) = IMAG(tmpComplexArr(:)) ! Append first datpoint as the last as aid for repeated wave data - WaveElevSeriesAtXY(InitOut%NStepWave) = WaveElevSeriesAtXY(0) + WaveElevAtXY(InitOut%NStepWave) = WaveElevAtXY(0) END SUBROUTINE WaveElevTimeSeriesAtXY diff --git a/modules/seastate/src/Waves.txt b/modules/seastate/src/Waves.txt index 53bc5bd26a..7ef24c4877 100644 --- a/modules/seastate/src/Waves.txt +++ b/modules/seastate/src/Waves.txt @@ -66,6 +66,7 @@ typedef ^ ^ NWTC_RandomNumber_ParameterType R # 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 ^ 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) @@ -81,7 +82,7 @@ typedef ^ ^ SiKi WaveVel #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 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 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 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 ^ ^ 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" - diff --git a/modules/seastate/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 index 1216b3f6c3..c89d602acf 100644 --- a/modules/seastate/src/Waves_Types.f90 +++ b/modules/seastate/src/Waves_Types.f90 @@ -82,6 +82,7 @@ MODULE Waves_Types ! ========= 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)] @@ -94,6 +95,7 @@ MODULE Waves_Types 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 :: 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 :: 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)] 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 [-] @@ -1006,6 +1008,22 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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) @@ -1110,6 +1128,18 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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) @@ -1155,6 +1185,9 @@ SUBROUTINE Waves_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%WaveElevC0) InitOutputData%WaveElevC0 => NULL() ENDIF +IF (ALLOCATED(InitOutputData%WaveElevC)) THEN + DEALLOCATE(InitOutputData%WaveElevC) +ENDIF IF (ASSOCIATED(InitOutputData%WaveDirArr)) THEN DEALLOCATE(InitOutputData%WaveDirArr) InitOutputData%WaveDirArr => NULL() @@ -1178,6 +1211,9 @@ SUBROUTINE Waves_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%WaveElev) InitOutputData%WaveElev => NULL() ENDIF +IF (ALLOCATED(InitOutputData%WaveElev0)) THEN + DEALLOCATE(InitOutputData%WaveElev0) +ENDIF IF (ASSOCIATED(InitOutputData%WaveTime)) THEN DEALLOCATE(InitOutputData%WaveTime) InitOutputData%WaveTime => NULL() @@ -1227,6 +1263,11 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -1263,6 +1304,11 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -1324,6 +1370,31 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -1491,6 +1562,21 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -1590,6 +1676,34 @@ SUBROUTINE Waves_UnPackInitOutput( 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 ! WaveDirArr not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -1775,6 +1889,24 @@ SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 diff --git a/modules/seastate/src/seastate_Interp.f90 b/modules/seastate/src/seastate_Interp.f90 index 3d3a581b0b..aa159349ed 100644 --- a/modules/seastate/src/seastate_Interp.f90 +++ b/modules/seastate/src/seastate_Interp.f90 @@ -1,9 +1,9 @@ !> 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: -!! -- SeaState_Interp_Init -- Load or create any wind data. Only called at the start of FAST. -!! -- SeaState_Interp_CalcOutput -- This will be called at each timestep with a series of data points to give the wave kinematics. -!! -- SeaState_Interp_End -- clear out any stored stuff. Only called at the end of FAST. +!! -- 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 @@ -31,14 +31,15 @@ MODULE SeaState_Interp IMPLICIT NONE PRIVATE - TYPE(ProgDesc), PARAMETER :: SeaState_Interp_Ver = ProgDesc( 'SeaState_Interp', '', '' ) + TYPE(ProgDesc), PARAMETER :: SeaSt_Interp_Ver = ProgDesc( 'SeaSt_Interp', '', '' ) - PUBLIC :: SeaState_Interp_Init - PUBLIC :: SeaState_Interp_End - PUBLIC :: SeaState_Interp_3D - PUBLIC :: SeaState_Interp_4D - PUBLIC :: SeaState_Interp_4D_Vec - public :: SeaState_Interp_Setup + PUBLIC :: SeaSt_Interp_Init + PUBLIC :: SeaSt_Interp_End + PUBLIC :: SeaSt_Interp_3D + PUBLIC :: SeaSt_Interp_4D + PUBLIC :: SeaSt_Interp_4D_Vec + PUBLIC :: SeaSt_Interp_3D_Vec6 + public :: SeaSt_Interp_Setup CONTAINS @@ -47,16 +48,16 @@ MODULE SeaState_Interp !---------------------------------------------------------------------------------------------------- !> A subroutine to initialize the SeaState 4D interpolator module. !---------------------------------------------------------------------------------------------------- -SUBROUTINE SeaState_Interp_Init(InitInp, p, ErrStat, ErrMsg) +SUBROUTINE SeaSt_Interp_Init(InitInp, p, ErrStat, ErrMsg) IMPLICIT NONE ! Passed Variables - TYPE(SeaState_Interp_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization - TYPE(SeaState_Interp_ParameterType), INTENT( OUT) :: p !< Parameters - ! TYPE(SeaState_Interp_InitOutputType), INTENT( OUT) :: InitOut !< Initial output + 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!! @@ -73,7 +74,7 @@ SUBROUTINE SeaState_Interp_Init(InitInp, p, ErrStat, ErrMsg) ! Temporary variables for error handling INTEGER(IntKi) :: ErrStat2 ! Temp variable for the error status CHARACTER(ErrMsgLen) :: ErrMsg2 ! temporary error message - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_Init' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_Init' !------------------------------------------------------------------------------------------------- ! Set the Error handling variables @@ -96,11 +97,11 @@ SUBROUTINE SeaState_Interp_Init(InitInp, p, ErrStat, ErrMsg) ! Set the InitOutput information. Set any outputs here. !------------------------------------------------------------------------------------------------- - ! InitOut%Ver = SeaState_Interp_Ver + ! InitOut%Ver = SeaSt_Interp_Ver RETURN -END SUBROUTINE SeaState_Interp_Init +END SUBROUTINE SeaSt_Interp_Init !==================================================================================================== @@ -108,17 +109,17 @@ END SUBROUTINE SeaState_Interp_Init !> This routine and its subroutines calculate the wind velocity at a set of points given in !! PositionXYZ. The UVW velocities are returned in OutData%Velocity !------------------------------------------------------------------------------------------------- -SUBROUTINE SeaState_Interp_CalcOutput(Time, PositionXYZ, p, pWaveKinXX, WaveKinVal, ErrStat, ErrMsg) +SUBROUTINE SeaSt_Interp_CalcOutput(Time, PositionXYZ, p, pWaveKinXX, WaveKinVal, ErrStat, ErrMsg) IMPLICIT NONE - CHARACTER(*), PARAMETER :: RoutineName="SeaState_Interp_CalcOutput" + CHARACTER(*), PARAMETER :: RoutineName="SeaSt_Interp_CalcOutput" ! Passed Variables REAL(DbKi), INTENT(IN ) :: Time !< time from the start of the simulation REAL(ReKi), INTENT(IN ) :: PositionXYZ(:,:) !< Array of XYZ coordinates, 3xN - TYPE(SeaState_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaSt_Interp_ParameterType), INTENT(IN ) :: p !< Parameters REAL(ReKi), INTENT(IN ) :: pWaveKinXX(:,:,:,:) !< Velocity output at Time (Set to INOUT so that array does not get deallocated) REAL(ReKi), INTENT( out) :: WaveKinVal ! Error handling @@ -173,7 +174,7 @@ SUBROUTINE SeaState_Interp_CalcOutput(Time, PositionXYZ, p, pWaveKinXX, WaveKinV RETURN -END SUBROUTINE SeaState_Interp_CalcOutput +END SUBROUTINE SeaSt_Interp_CalcOutput subroutine SetCartesianXYIndex(p, pZero, delta, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, ErrMsg) REAL(ReKi), INTENT(IN ) :: p !< @@ -204,7 +205,7 @@ subroutine SetCartesianXYIndex(p, pZero, delta, nMax, Indx_Lo, Indx_Hi, isopc, E if ( Indx_Lo < 1 ) then Indx_Lo = 1 isopc = -1.0 - call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary',ErrStat,ErrMsg,'SetCartesianIndex') !error out if time is outside the lower bounds + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary',ErrStat,ErrMsg,'SetCartesianXYIndex') !error out if time is outside the lower bounds end if Indx_Hi = min( Indx_Lo + 1, nMax ) ! make sure it's a valid index, zero-based @@ -213,7 +214,7 @@ subroutine SetCartesianXYIndex(p, pZero, delta, nMax, Indx_Lo, Indx_Hi, isopc, E ! Need to clamp to grid boundary Indx_Lo = Indx_Hi - 1 isopc = 1.0 - call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary',ErrStat,ErrMsg,'SetCartesianIndex') !error out if time is outside the lower bounds + call SetErrStat(ErrID_Warn,'Position has been clamped to the grid boundary',ErrStat,ErrMsg,'SetCartesianXYIndex') !error out if time is outside the lower bounds end if @@ -330,19 +331,19 @@ 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 SeaState_Interp_Setup( Time, Position, p, m, ErrStat, ErrMsg ) +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(SeaState_Interp_ParameterType), INTENT(IN ) :: p !< Parameters - TYPE(SeaState_Interp_MiscVarType), INTENT(INOUT) :: m !< MiscVars + 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 = 'SeaState_Interp_Setup' + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_Setup' ! Local variables @@ -364,7 +365,7 @@ subroutine SeaState_Interp_Setup( Time, Position, p, m, ErrStat, 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) !error out if x,y,z, or time is outside the lower bounds + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if time is outside the bounds if (ErrStat >= AbortErrLev ) return @@ -373,7 +374,7 @@ subroutine SeaState_Interp_Setup( Time, Position, p, m, ErrStat, ErrMsg ) !------------------------------------------------------------------------------------------------- do i=2,3 call SetCartesianXYIndex(Position(i-1), p%pZero(i), p%delta(i), p%n(i), m%Indx_Lo(i), m%Indx_Hi(i), isopc(i), ErrStat2, ErrMsg2) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !error out if x,y,z, or time is outside the lower bounds + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if x,y is outside the bounds enddo @@ -384,7 +385,7 @@ subroutine SeaState_Interp_Setup( Time, Position, p, m, ErrStat, ErrMsg ) !------------------------------------------------------------------------------------------------- i=4 call SetCartesianZIndex(Position(i-1), p%Z_Depth, p%delta(i), p%n(i), m%Indx_Lo(i), m%Indx_Hi(i), isopc(i), ErrStat2, ErrMsg2) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !error out if x,y,z, or time is outside the lower bounds + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if z is outside the bounds if (ErrStat >= AbortErrLev ) return !------------------------------------------------------------------------------------------------- @@ -410,29 +411,29 @@ subroutine SeaState_Interp_Setup( Time, Position, p, m, ErrStat, ErrMsg ) m%N4D = m%N4D / REAL( SIZE(m%N4D), SiKi ) ! normalize -END Subroutine SeaState_Interp_Setup +END Subroutine SeaSt_Interp_Setup !==================================================================================================== !> This routine interpolates a 4-d dataset. !! This method is described here: http://rjwagner49.com/Mathematics/Interpolation.pdf -FUNCTION SeaState_Interp_4D( pKinXX, m, ErrStat, ErrMsg ) +FUNCTION SeaSt_Interp_4D( pKinXX, m, ErrStat, ErrMsg ) ! I/O variables real(SiKi), intent(in ) :: pKinXX(0:,:,:,:) - TYPE(SeaState_Interp_MiscVarType), INTENT(IN ) :: m !< Parameters + 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 = 'SeaState_Interp_PointSetup' - Real(SiKi) :: SeaState_Interp_4D + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_PointSetup' + Real(SiKi) :: SeaSt_Interp_4D ! Local variables REAL(SiKi) :: u(16) ! size 2^n - SeaState_Interp_4D = 0.0_SiKi + SeaSt_Interp_4D = 0.0_SiKi ErrStat = ErrID_None ErrMsg = "" @@ -457,31 +458,31 @@ FUNCTION SeaState_Interp_4D( pKinXX, m, ErrStat, ErrMsg ) 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) ) - SeaState_Interp_4D = SUM ( m%N4D * u ) + SeaSt_Interp_4D = SUM ( m%N4D * u ) -END FUNCTION SeaState_Interp_4D +END FUNCTION SeaSt_Interp_4D !==================================================================================================== !> This routine interpolates a 4-d dataset. !! This method is described here: http://rjwagner49.com/Mathematics/Interpolation.pdf -FUNCTION SeaState_Interp_4D_Vec( pKinXX, m, ErrStat, ErrMsg ) +FUNCTION SeaSt_Interp_4D_Vec( pKinXX, m, ErrStat, ErrMsg ) ! I/O variables real(SiKi), intent(in ) :: pKinXX(0:,:,:,:,:) - TYPE(SeaState_Interp_MiscVarType), INTENT(IN ) :: m !< Parameters + 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 = 'SeaState_Interp_PointSetup' - Real(SiKi) :: SeaState_Interp_4D_Vec(3) + 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 - SeaState_Interp_4D_Vec = 0.0_SiKi + SeaSt_Interp_4D_Vec = 0.0_SiKi ErrStat = ErrID_None ErrMsg = "" @@ -506,26 +507,26 @@ FUNCTION SeaState_Interp_4D_Vec( pKinXX, m, ErrStat, ErrMsg ) 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 ) - SeaState_Interp_4D_Vec(iDir) = SUM ( m%N4D * u ) + SeaSt_Interp_4D_Vec(iDir) = SUM ( m%N4D * u ) end do -END FUNCTION SeaState_Interp_4D_Vec +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 SeaState_Interp_3D( Time, Position, pKinXX, p, ErrStat, ErrMsg ) +FUNCTION SeaSt_Interp_3D( Time, Position, pKinXX, p, 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(SeaState_Interp_ParameterType), INTENT(IN ) :: p !< Parameters + TYPE(SeaSt_Interp_ParameterType), INTENT(IN ) :: p !< Parameters INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - CHARACTER(*), PARAMETER :: RoutineName = 'SeaState_Interp_3D' - Real(SiKi) :: SeaState_Interp_3D + CHARACTER(*), PARAMETER :: RoutineName = 'SeaSt_Interp_3D' + Real(SiKi) :: SeaSt_Interp_3D ! Local variables REAL(SiKi) :: u(8) ! size 2^n @@ -538,7 +539,7 @@ FUNCTION SeaState_Interp_3D( Time, Position, pKinXX, p, ErrStat, ErrMsg ) integer(IntKi) :: ErrStat2 character(ErrMsgLen) :: ErrMsg2 - SeaState_Interp_3D = 0.0_SiKi + SeaSt_Interp_3D = 0.0_SiKi ErrStat = ErrID_None ErrMsg = "" @@ -546,7 +547,7 @@ FUNCTION SeaState_Interp_3D( Time, Position, pKinXX, p, ErrStat, 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) !error out if x,y,z, or time is outside the lower bounds + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if time is outside the bounds if (ErrStat >= AbortErrLev ) return !------------------------------------------------------------------------------------------------- @@ -554,7 +555,7 @@ FUNCTION SeaState_Interp_3D( Time, Position, pKinXX, p, ErrStat, ErrMsg ) !------------------------------------------------------------------------------------------------- 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), ErrStat2, ErrMsg2) - call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !error out if x,y,z, or time is outside the lower bounds + call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) !warning if x,y is outside the bounds end do if (ErrStat >= AbortErrLev ) return @@ -583,23 +584,95 @@ FUNCTION SeaState_Interp_3D( Time, Position, pKinXX, p, ErrStat, ErrMsg ) u(7) = pKinXX( Indx_Lo(1), Indx_Hi(2), Indx_Hi(3) ) u(8) = pKinXX( Indx_Lo(1), Indx_Lo(2), Indx_Hi(3) ) - SeaState_Interp_3D = SUM ( N3D * u ) + SeaSt_Interp_3D = SUM ( N3D * u ) + +END FUNCTION SeaSt_Interp_3D + +FUNCTION SeaSt_Interp_3D_VEC6 ( Time, Position, pKinXX, p, 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 + 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 -END FUNCTION SeaState_Interp_3D + REAL(SiKi) :: u(8) ! size 2^n + real(ReKi) :: N3D(8) + integer(IntKi) :: Indx_Lo(3), Indx_Hi(3) + INTEGER(IntKi) :: i ! loop counter + INTEGER(IntKi) :: ic ! wind-component counter + REAL(SiKi) :: isopc(3) ! isoparametric coordinates + REAL(ReKi) :: Tmp ! temporary fraction of distance between two grid points + 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), 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 SeaState_Interp_End( ParamData, MiscVars, ErrStat, ErrMsg) +SUBROUTINE SeaSt_Interp_End( ParamData, MiscVars, ErrStat, ErrMsg) IMPLICIT NONE - CHARACTER(*), PARAMETER :: RoutineName="SeaState_Interp_End" + CHARACTER(*), PARAMETER :: RoutineName="SeaSt_Interp_End" ! Passed Variables - TYPE(SeaState_Interp_ParameterType), INTENT(INOUT) :: ParamData !< Parameters - TYPE(SeaState_Interp_MiscVarType), INTENT(INOUT) :: MiscVars !< Misc variables for optimization (not copied in glue code) + 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 @@ -619,16 +692,16 @@ SUBROUTINE SeaState_Interp_End( ParamData, MiscVars, ErrStat, ErrMsg) ! Destroy parameter data - CALL SeaState_Interp_DestroyParam( ParamData, TmpErrStat, TmpErrMsg ) + CALL SeaSt_Interp_DestroyParam( ParamData, TmpErrStat, TmpErrMsg ) CALL SetErrStat( TmpErrStat, TmpErrMsg, ErrStat, ErrMsg, RoutineName ) ! Destroy the misc data - CALL SeaState_Interp_DestroyMisc( MiscVars, TmpErrStat, TmpErrMsg ) + CALL SeaSt_Interp_DestroyMisc( MiscVars, TmpErrStat, TmpErrMsg ) CALL SetErrStat( TmpErrStat, TmpErrMsg, ErrStat, ErrMsg, RoutineName ) -END SUBROUTINE SeaState_Interp_End +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 index 130d2110b2..735362db36 100644 --- a/modules/seastate/src/seastate_Interp.txt +++ b/modules/seastate/src/seastate_Interp.txt @@ -12,7 +12,7 @@ include Registry_NWTC_Library.txt ######################### -typedef SeaState_Interp/SeaState_Interp InitInputType IntKi n 4 - - "number of grid points in the x, y, z, and t directions" - +typedef SeaState_Interp/SeaSt_Interp InitInputType IntKi n 4 - - "number of grid points in the x, y, z, and t directions" - typedef ^ InitInputType ReKi delta 4 - - "size between 2 consecutive grid points in each grid direction" "m,m,m,s" typedef ^ InitInputType ReKi pZero 4 - - "fixed position of the XYZ grid (i.e., XYZ coordinates of m%V(:,1,1,1,:))" "m" typedef ^ InitInputType ReKi Z_Depth - - - "grid depth" m From cbde76617d089ed69ba0ab97c10b41757a8c7fbc Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 1 Dec 2021 09:57:42 -0700 Subject: [PATCH 009/338] Added SeaState module integration in OpenFAST --- .../openfast-library/src/FAST_Registry.txt | 41 +- modules/openfast-library/src/FAST_Solver.f90 | 1 + modules/openfast-library/src/FAST_Subs.f90 | 139 +- modules/openfast-library/src/FAST_Types.f90 | 2777 +++++++++++++---- 4 files changed, 2362 insertions(+), 596 deletions(-) diff --git a/modules/openfast-library/src/FAST_Registry.txt b/modules/openfast-library/src/FAST_Registry.txt index 1e20f3a052..742b7648e1 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" - @@ -111,6 +113,7 @@ typedef ^ FAST_ParameterType IntKi CompElast - - - "Compute blade loads (switch) 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}" - @@ -134,6 +137,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" - @@ -496,6 +500,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" @@ -693,6 +711,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" @@ -747,6 +767,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 653508f018..2ae5ff610d 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 diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 1ef64aedf9..85dd6fd99c 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -49,18 +49,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 @@ -68,7 +68,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 @@ -86,6 +86,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 @@ -856,7 +857,88 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, END IF end if - + ! ........................ + ! initialize SeaStates + ! ........................ + 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%InputFile = p_FAST%SeaStFile + Init%InData_SeaSt%OutRootName = p_FAST%OutFileRoot + 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%CurrMod = Init%OutData_SeaSt%CurrMod + 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%WvDiffQTFF = Init%OutData_SeaSt%WvDiffQTFF + Init%InData_HD%WvSumQTFF = Init%OutData_SeaSt%WvSumQTFF + 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 + 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%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%WaveElev => Init%OutData_SeaSt%WaveElev + Init%InData_HD%WaveElev1 => Init%OutData_SeaSt%WaveElev1 + Init%InData_HD%WaveElev2 => Init%OutData_SeaSt%WaveElev2 + + call SeaSt_Interp_CopyParam(Init%OutData_SeaSt%SeaSt_Interp_p, Init%InData_HD%SeaSt_Interp_p, 0, ErrStat, ErrMsg ) + + end if + + + ! Now that all modules have been handled their pointer data, we need to nullify some of the SeaState InitOut pointers + ! The modules which were handed the data will be deallocating it. + + ! NOTE: this may need to change once other modules start using SeaState + nullify(Init%OutData_SeaSt%WaveDynP) + nullify(Init%OutData_SeaSt%WaveAcc) + nullify(Init%OutData_SeaSt%WaveVel) + nullify(Init%OutData_SeaSt%WaveTime) + nullify(Init%OutData_SeaSt%WaveElevC0) + nullify(Init%OutData_SeaSt%WaveDirArr) + nullify(Init%OutData_SeaSt%WaveElev) + nullify(Init%OutData_SeaSt%WaveElev1) + nullify(Init%OutData_SeaSt%WaveElev2) + + end if + ! ........................ ! initialize HydroDyn ! ........................ @@ -905,6 +987,20 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, if (allocated(Init%OutData_HD%WriteOutputHdr)) y_FAST%Lin%Modules(MODULE_HD)%Instance(1)%NumOutputs = size(Init%OutData_HD%WriteOutputHdr) end if + ! 1) Nullify the HD Init Input pointers + ! 2) Now, when HydroDyn_DestroyInitInput is called and hence SeaState_DestroyInitOutput, we will not deallocate data which is still in use because the is associated test will fail. + + nullify(Init%InData_HD%WaveElevC0) + nullify(Init%InData_HD%WaveDirArr) + nullify(Init%InData_HD%WaveDynP) + nullify(Init%InData_HD%WaveAcc) + nullify(Init%InData_HD%WaveVel) + nullify(Init%InData_HD%WaveTime) + nullify(Init%InData_HD%WaveElev) + nullify(Init%InData_HD%WaveElev1) + nullify(Init%InData_HD%WaveElev2) + + IF (ErrStat >= AbortErrLev) THEN CALL Cleanup() RETURN @@ -1711,10 +1807,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==0) 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 ) @@ -2498,6 +2601,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) @@ -2719,6 +2839,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%HydroFile ) ) p%HydroFile = TRIM(PriPath)//TRIM(p%HydroFile) + ! 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) diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index 3b40cdd4a1..84ed5f6e5a 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -57,6 +57,8 @@ MODULE FAST_Types USE Current_Types USE Waves_Types USE Waves2_Types +USE SeaState_Interp_Types +USE SeaState_Types USE Conv_Radiation_Types USE SS_Radiation_Types USE SS_Excitation_Types @@ -86,16 +88,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 ======= @@ -155,6 +158,7 @@ MODULE FAST_Types 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} [-] @@ -176,6 +180,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 [-] @@ -538,6 +543,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 [-] @@ -736,6 +757,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 [-] @@ -792,6 +815,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 [-] @@ -2131,6 +2155,7 @@ SUBROUTINE FAST_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg 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 @@ -2152,6 +2177,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 @@ -2274,6 +2300,7 @@ SUBROUTINE FAST_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -2295,6 +2322,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 @@ -2450,6 +2478,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 @@ -2504,6 +2534,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 @@ -2763,6 +2797,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) @@ -2819,6 +2855,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 @@ -26575,18 +26615,1326 @@ SUBROUTINE FAST_UnPackSCDataEx_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 SC_DX_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p + CALL SC_DX_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) + END SUBROUTINE FAST_UnPackSCDataEx_Data + + SUBROUTINE FAST_CopySubDyn_Data( SrcSubDyn_DataData, DstSubDyn_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(SubDyn_Data), INTENT(INOUT) :: SrcSubDyn_DataData + TYPE(SubDyn_Data), INTENT(INOUT) :: DstSubDyn_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_CopySubDyn_Data' +! + ErrStat = ErrID_None + ErrMsg = "" + DO i1 = LBOUND(SrcSubDyn_DataData%x,1), UBOUND(SrcSubDyn_DataData%x,1) + CALL SD_CopyContState( SrcSubDyn_DataData%x(i1), DstSubDyn_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO + DO i1 = LBOUND(SrcSubDyn_DataData%xd,1), UBOUND(SrcSubDyn_DataData%xd,1) + CALL SD_CopyDiscState( SrcSubDyn_DataData%xd(i1), DstSubDyn_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO + DO i1 = LBOUND(SrcSubDyn_DataData%z,1), UBOUND(SrcSubDyn_DataData%z,1) + CALL SD_CopyConstrState( SrcSubDyn_DataData%z(i1), DstSubDyn_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO + DO i1 = LBOUND(SrcSubDyn_DataData%OtherSt,1), UBOUND(SrcSubDyn_DataData%OtherSt,1) + CALL SD_CopyOtherState( SrcSubDyn_DataData%OtherSt(i1), DstSubDyn_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO + CALL SD_CopyParam( SrcSubDyn_DataData%p, DstSubDyn_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL SD_CopyInput( SrcSubDyn_DataData%u, DstSubDyn_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL SD_CopyOutput( SrcSubDyn_DataData%y, DstSubDyn_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + CALL SD_CopyMisc( SrcSubDyn_DataData%m, DstSubDyn_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +IF (ALLOCATED(SrcSubDyn_DataData%Input)) THEN + i1_l = LBOUND(SrcSubDyn_DataData%Input,1) + i1_u = UBOUND(SrcSubDyn_DataData%Input,1) + IF (.NOT. ALLOCATED(DstSubDyn_DataData%Input)) THEN + ALLOCATE(DstSubDyn_DataData%Input(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSubDyn_DataData%Input.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DO i1 = LBOUND(SrcSubDyn_DataData%Input,1), UBOUND(SrcSubDyn_DataData%Input,1) + CALL SD_CopyInput( SrcSubDyn_DataData%Input(i1), DstSubDyn_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO +ENDIF +IF (ALLOCATED(SrcSubDyn_DataData%Output)) THEN + i1_l = LBOUND(SrcSubDyn_DataData%Output,1) + i1_u = UBOUND(SrcSubDyn_DataData%Output,1) + IF (.NOT. ALLOCATED(DstSubDyn_DataData%Output)) THEN + ALLOCATE(DstSubDyn_DataData%Output(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSubDyn_DataData%Output.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DO i1 = LBOUND(SrcSubDyn_DataData%Output,1), UBOUND(SrcSubDyn_DataData%Output,1) + CALL SD_CopyOutput( SrcSubDyn_DataData%Output(i1), DstSubDyn_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN + ENDDO +ENDIF + CALL SD_CopyOutput( SrcSubDyn_DataData%y_interp, DstSubDyn_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + IF (ErrStat>=AbortErrLev) RETURN +IF (ALLOCATED(SrcSubDyn_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcSubDyn_DataData%InputTimes,1) + i1_u = UBOUND(SrcSubDyn_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstSubDyn_DataData%InputTimes)) THEN + ALLOCATE(DstSubDyn_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) + IF (ErrStat2 /= 0) THEN + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSubDyn_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstSubDyn_DataData%InputTimes = SrcSubDyn_DataData%InputTimes +ENDIF + END SUBROUTINE FAST_CopySubDyn_Data + + SUBROUTINE FAST_DestroySubDyn_Data( SubDyn_DataData, ErrStat, ErrMsg ) + TYPE(SubDyn_Data), INTENT(INOUT) :: SubDyn_DataData + INTEGER(IntKi), INTENT( OUT) :: ErrStat + CHARACTER(*), INTENT( OUT) :: ErrMsg + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroySubDyn_Data' + INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 +! + ErrStat = ErrID_None + ErrMsg = "" +DO i1 = LBOUND(SubDyn_DataData%x,1), UBOUND(SubDyn_DataData%x,1) + CALL SD_DestroyContState( SubDyn_DataData%x(i1), ErrStat, ErrMsg ) +ENDDO +DO i1 = LBOUND(SubDyn_DataData%xd,1), UBOUND(SubDyn_DataData%xd,1) + CALL SD_DestroyDiscState( SubDyn_DataData%xd(i1), ErrStat, ErrMsg ) +ENDDO +DO i1 = LBOUND(SubDyn_DataData%z,1), UBOUND(SubDyn_DataData%z,1) + CALL SD_DestroyConstrState( SubDyn_DataData%z(i1), ErrStat, ErrMsg ) +ENDDO +DO i1 = LBOUND(SubDyn_DataData%OtherSt,1), UBOUND(SubDyn_DataData%OtherSt,1) + CALL SD_DestroyOtherState( SubDyn_DataData%OtherSt(i1), ErrStat, ErrMsg ) +ENDDO + CALL SD_DestroyParam( SubDyn_DataData%p, ErrStat, ErrMsg ) + CALL SD_DestroyInput( SubDyn_DataData%u, ErrStat, ErrMsg ) + CALL SD_DestroyOutput( SubDyn_DataData%y, ErrStat, ErrMsg ) + CALL SD_DestroyMisc( SubDyn_DataData%m, ErrStat, ErrMsg ) +IF (ALLOCATED(SubDyn_DataData%Input)) THEN +DO i1 = LBOUND(SubDyn_DataData%Input,1), UBOUND(SubDyn_DataData%Input,1) + CALL SD_DestroyInput( SubDyn_DataData%Input(i1), ErrStat, ErrMsg ) +ENDDO + DEALLOCATE(SubDyn_DataData%Input) +ENDIF +IF (ALLOCATED(SubDyn_DataData%Output)) THEN +DO i1 = LBOUND(SubDyn_DataData%Output,1), UBOUND(SubDyn_DataData%Output,1) + CALL SD_DestroyOutput( SubDyn_DataData%Output(i1), ErrStat, ErrMsg ) +ENDDO + DEALLOCATE(SubDyn_DataData%Output) +ENDIF + CALL SD_DestroyOutput( SubDyn_DataData%y_interp, ErrStat, ErrMsg ) +IF (ALLOCATED(SubDyn_DataData%InputTimes)) THEN + DEALLOCATE(SubDyn_DataData%InputTimes) +ENDIF + END SUBROUTINE FAST_DestroySubDyn_Data + + SUBROUTINE FAST_PackSubDyn_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(SubDyn_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_PackSubDyn_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 ! 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 SD_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 SD_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 ! 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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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%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 SD_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%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 SD_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 SD_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%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_PackSubDyn_Data + + SUBROUTINE FAST_UnPackSubDyn_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(SubDyn_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_UnPackSubDyn_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 SD_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 + 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 SD_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 SD_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 SUBROUTINE FAST_UnPackSCDataEx_Data + 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_UnPackSubDyn_Data - SUBROUTINE FAST_CopySubDyn_Data( SrcSubDyn_DataData, DstSubDyn_DataData, CtrlCode, ErrStat, ErrMsg ) - TYPE(SubDyn_Data), INTENT(INOUT) :: SrcSubDyn_DataData - TYPE(SubDyn_Data), INTENT(INOUT) :: DstSubDyn_DataData + SUBROUTINE FAST_CopyExtPtfm_Data( SrcExtPtfm_DataData, DstExtPtfm_DataData, CtrlCode, ErrStat, ErrMsg ) + TYPE(ExtPtfm_Data), INTENT(INOUT) :: SrcExtPtfm_DataData + TYPE(ExtPtfm_Data), INTENT(INOUT) :: DstExtPtfm_DataData INTEGER(IntKi), INTENT(IN ) :: CtrlCode INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg @@ -26595,139 +27943,113 @@ SUBROUTINE FAST_CopySubDyn_Data( SrcSubDyn_DataData, DstSubDyn_DataData, CtrlCod 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_CopySubDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopyExtPtfm_Data' ! ErrStat = ErrID_None ErrMsg = "" - DO i1 = LBOUND(SrcSubDyn_DataData%x,1), UBOUND(SrcSubDyn_DataData%x,1) - CALL SD_CopyContState( SrcSubDyn_DataData%x(i1), DstSubDyn_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcExtPtfm_DataData%x,1), UBOUND(SrcExtPtfm_DataData%x,1) + CALL ExtPtfm_CopyContState( SrcExtPtfm_DataData%x(i1), DstExtPtfm_DataData%x(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcSubDyn_DataData%xd,1), UBOUND(SrcSubDyn_DataData%xd,1) - CALL SD_CopyDiscState( SrcSubDyn_DataData%xd(i1), DstSubDyn_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcExtPtfm_DataData%xd,1), UBOUND(SrcExtPtfm_DataData%xd,1) + CALL ExtPtfm_CopyDiscState( SrcExtPtfm_DataData%xd(i1), DstExtPtfm_DataData%xd(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcSubDyn_DataData%z,1), UBOUND(SrcSubDyn_DataData%z,1) - CALL SD_CopyConstrState( SrcSubDyn_DataData%z(i1), DstSubDyn_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcExtPtfm_DataData%z,1), UBOUND(SrcExtPtfm_DataData%z,1) + CALL ExtPtfm_CopyConstrState( SrcExtPtfm_DataData%z(i1), DstExtPtfm_DataData%z(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - DO i1 = LBOUND(SrcSubDyn_DataData%OtherSt,1), UBOUND(SrcSubDyn_DataData%OtherSt,1) - CALL SD_CopyOtherState( SrcSubDyn_DataData%OtherSt(i1), DstSubDyn_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcExtPtfm_DataData%OtherSt,1), UBOUND(SrcExtPtfm_DataData%OtherSt,1) + CALL ExtPtfm_CopyOtherState( SrcExtPtfm_DataData%OtherSt(i1), DstExtPtfm_DataData%OtherSt(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO - CALL SD_CopyParam( SrcSubDyn_DataData%p, DstSubDyn_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN - CALL SD_CopyInput( SrcSubDyn_DataData%u, DstSubDyn_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) + CALL ExtPtfm_CopyParam( SrcExtPtfm_DataData%p, DstExtPtfm_DataData%p, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL SD_CopyOutput( SrcSubDyn_DataData%y, DstSubDyn_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) + CALL ExtPtfm_CopyInput( SrcExtPtfm_DataData%u, DstExtPtfm_DataData%u, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - CALL SD_CopyMisc( SrcSubDyn_DataData%m, DstSubDyn_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) + CALL ExtPtfm_CopyOutput( SrcExtPtfm_DataData%y, DstExtPtfm_DataData%y, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcSubDyn_DataData%Input)) THEN - i1_l = LBOUND(SrcSubDyn_DataData%Input,1) - i1_u = UBOUND(SrcSubDyn_DataData%Input,1) - IF (.NOT. ALLOCATED(DstSubDyn_DataData%Input)) THEN - ALLOCATE(DstSubDyn_DataData%Input(i1_l:i1_u),STAT=ErrStat2) - IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSubDyn_DataData%Input.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DO i1 = LBOUND(SrcSubDyn_DataData%Input,1), UBOUND(SrcSubDyn_DataData%Input,1) - CALL SD_CopyInput( SrcSubDyn_DataData%Input(i1), DstSubDyn_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) + CALL ExtPtfm_CopyMisc( SrcExtPtfm_DataData%m, DstExtPtfm_DataData%m, CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN - ENDDO -ENDIF -IF (ALLOCATED(SrcSubDyn_DataData%Output)) THEN - i1_l = LBOUND(SrcSubDyn_DataData%Output,1) - i1_u = UBOUND(SrcSubDyn_DataData%Output,1) - IF (.NOT. ALLOCATED(DstSubDyn_DataData%Output)) THEN - ALLOCATE(DstSubDyn_DataData%Output(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcExtPtfm_DataData%Input)) THEN + i1_l = LBOUND(SrcExtPtfm_DataData%Input,1) + i1_u = UBOUND(SrcExtPtfm_DataData%Input,1) + IF (.NOT. ALLOCATED(DstExtPtfm_DataData%Input)) THEN + ALLOCATE(DstExtPtfm_DataData%Input(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSubDyn_DataData%Output.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstExtPtfm_DataData%Input.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcSubDyn_DataData%Output,1), UBOUND(SrcSubDyn_DataData%Output,1) - CALL SD_CopyOutput( SrcSubDyn_DataData%Output(i1), DstSubDyn_DataData%Output(i1), CtrlCode, ErrStat2, ErrMsg2 ) + DO i1 = LBOUND(SrcExtPtfm_DataData%Input,1), UBOUND(SrcExtPtfm_DataData%Input,1) + CALL ExtPtfm_CopyInput( SrcExtPtfm_DataData%Input(i1), DstExtPtfm_DataData%Input(i1), CtrlCode, ErrStat2, ErrMsg2 ) CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) IF (ErrStat>=AbortErrLev) RETURN ENDDO ENDIF - CALL SD_CopyOutput( SrcSubDyn_DataData%y_interp, DstSubDyn_DataData%y_interp, CtrlCode, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - IF (ErrStat>=AbortErrLev) RETURN -IF (ALLOCATED(SrcSubDyn_DataData%InputTimes)) THEN - i1_l = LBOUND(SrcSubDyn_DataData%InputTimes,1) - i1_u = UBOUND(SrcSubDyn_DataData%InputTimes,1) - IF (.NOT. ALLOCATED(DstSubDyn_DataData%InputTimes)) THEN - ALLOCATE(DstSubDyn_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) +IF (ALLOCATED(SrcExtPtfm_DataData%InputTimes)) THEN + i1_l = LBOUND(SrcExtPtfm_DataData%InputTimes,1) + i1_u = UBOUND(SrcExtPtfm_DataData%InputTimes,1) + IF (.NOT. ALLOCATED(DstExtPtfm_DataData%InputTimes)) THEN + ALLOCATE(DstExtPtfm_DataData%InputTimes(i1_l:i1_u),STAT=ErrStat2) IF (ErrStat2 /= 0) THEN - CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSubDyn_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstExtPtfm_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstSubDyn_DataData%InputTimes = SrcSubDyn_DataData%InputTimes + DstExtPtfm_DataData%InputTimes = SrcExtPtfm_DataData%InputTimes ENDIF - END SUBROUTINE FAST_CopySubDyn_Data + END SUBROUTINE FAST_CopyExtPtfm_Data - SUBROUTINE FAST_DestroySubDyn_Data( SubDyn_DataData, ErrStat, ErrMsg ) - TYPE(SubDyn_Data), INTENT(INOUT) :: SubDyn_DataData + SUBROUTINE FAST_DestroyExtPtfm_Data( ExtPtfm_DataData, ErrStat, ErrMsg ) + TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm_DataData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroySubDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyExtPtfm_Data' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" -DO i1 = LBOUND(SubDyn_DataData%x,1), UBOUND(SubDyn_DataData%x,1) - CALL SD_DestroyContState( SubDyn_DataData%x(i1), ErrStat, ErrMsg ) -ENDDO -DO i1 = LBOUND(SubDyn_DataData%xd,1), UBOUND(SubDyn_DataData%xd,1) - CALL SD_DestroyDiscState( SubDyn_DataData%xd(i1), ErrStat, ErrMsg ) +DO i1 = LBOUND(ExtPtfm_DataData%x,1), UBOUND(ExtPtfm_DataData%x,1) + CALL ExtPtfm_DestroyContState( ExtPtfm_DataData%x(i1), ErrStat, ErrMsg ) ENDDO -DO i1 = LBOUND(SubDyn_DataData%z,1), UBOUND(SubDyn_DataData%z,1) - CALL SD_DestroyConstrState( SubDyn_DataData%z(i1), ErrStat, ErrMsg ) +DO i1 = LBOUND(ExtPtfm_DataData%xd,1), UBOUND(ExtPtfm_DataData%xd,1) + CALL ExtPtfm_DestroyDiscState( ExtPtfm_DataData%xd(i1), ErrStat, ErrMsg ) ENDDO -DO i1 = LBOUND(SubDyn_DataData%OtherSt,1), UBOUND(SubDyn_DataData%OtherSt,1) - CALL SD_DestroyOtherState( SubDyn_DataData%OtherSt(i1), ErrStat, ErrMsg ) +DO i1 = LBOUND(ExtPtfm_DataData%z,1), UBOUND(ExtPtfm_DataData%z,1) + CALL ExtPtfm_DestroyConstrState( ExtPtfm_DataData%z(i1), ErrStat, ErrMsg ) ENDDO - CALL SD_DestroyParam( SubDyn_DataData%p, ErrStat, ErrMsg ) - CALL SD_DestroyInput( SubDyn_DataData%u, ErrStat, ErrMsg ) - CALL SD_DestroyOutput( SubDyn_DataData%y, ErrStat, ErrMsg ) - CALL SD_DestroyMisc( SubDyn_DataData%m, ErrStat, ErrMsg ) -IF (ALLOCATED(SubDyn_DataData%Input)) THEN -DO i1 = LBOUND(SubDyn_DataData%Input,1), UBOUND(SubDyn_DataData%Input,1) - CALL SD_DestroyInput( SubDyn_DataData%Input(i1), ErrStat, ErrMsg ) +DO i1 = LBOUND(ExtPtfm_DataData%OtherSt,1), UBOUND(ExtPtfm_DataData%OtherSt,1) + CALL ExtPtfm_DestroyOtherState( ExtPtfm_DataData%OtherSt(i1), ErrStat, ErrMsg ) ENDDO - DEALLOCATE(SubDyn_DataData%Input) -ENDIF -IF (ALLOCATED(SubDyn_DataData%Output)) THEN -DO i1 = LBOUND(SubDyn_DataData%Output,1), UBOUND(SubDyn_DataData%Output,1) - CALL SD_DestroyOutput( SubDyn_DataData%Output(i1), ErrStat, ErrMsg ) + CALL ExtPtfm_DestroyParam( ExtPtfm_DataData%p, ErrStat, ErrMsg ) + CALL ExtPtfm_DestroyInput( ExtPtfm_DataData%u, ErrStat, ErrMsg ) + CALL ExtPtfm_DestroyOutput( ExtPtfm_DataData%y, ErrStat, ErrMsg ) + CALL ExtPtfm_DestroyMisc( ExtPtfm_DataData%m, ErrStat, ErrMsg ) +IF (ALLOCATED(ExtPtfm_DataData%Input)) THEN +DO i1 = LBOUND(ExtPtfm_DataData%Input,1), UBOUND(ExtPtfm_DataData%Input,1) + CALL ExtPtfm_DestroyInput( ExtPtfm_DataData%Input(i1), ErrStat, ErrMsg ) ENDDO - DEALLOCATE(SubDyn_DataData%Output) + DEALLOCATE(ExtPtfm_DataData%Input) ENDIF - CALL SD_DestroyOutput( SubDyn_DataData%y_interp, ErrStat, ErrMsg ) -IF (ALLOCATED(SubDyn_DataData%InputTimes)) THEN - DEALLOCATE(SubDyn_DataData%InputTimes) +IF (ALLOCATED(ExtPtfm_DataData%InputTimes)) THEN + DEALLOCATE(ExtPtfm_DataData%InputTimes) ENDIF - END SUBROUTINE FAST_DestroySubDyn_Data + END SUBROUTINE FAST_DestroyExtPtfm_Data - SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, SizeOnly ) + SUBROUTINE FAST_PackExtPtfm_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(SubDyn_Data), INTENT(IN) :: InData + TYPE(ExtPtfm_Data), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -26742,7 +28064,7 @@ SUBROUTINE FAST_PackSubDyn_Data( 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 = 'FAST_PackSubDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackExtPtfm_Data' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -26761,7 +28083,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ! 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 SD_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, .TRUE. ) ! x + CALL ExtPtfm_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 @@ -26780,7 +28102,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 SD_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, .TRUE. ) ! xd + CALL ExtPtfm_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 @@ -26799,7 +28121,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 SD_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, .TRUE. ) ! z + CALL ExtPtfm_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 @@ -26818,7 +28140,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 SD_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, .TRUE. ) ! OtherSt + CALL ExtPtfm_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 @@ -26836,7 +28158,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er END IF END DO Int_BufSz = Int_BufSz + 3 ! p: size of buffers for each call to pack subtype - CALL SD_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p + CALL ExtPtfm_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, .TRUE. ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -26853,7 +28175,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! u: size of buffers for each call to pack subtype - CALL SD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u + CALL ExtPtfm_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, .TRUE. ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -26870,7 +28192,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! y: size of buffers for each call to pack subtype - CALL SD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y + CALL ExtPtfm_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, .TRUE. ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -26887,7 +28209,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er DEALLOCATE(Int_Buf) END IF Int_BufSz = Int_BufSz + 3 ! m: size of buffers for each call to pack subtype - CALL SD_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m + CALL ExtPtfm_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, .TRUE. ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -26908,7 +28230,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 SD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + CALL ExtPtfm_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 @@ -26926,46 +28248,6 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er END IF END DO 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 SD_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 SD_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 ! InputTimes allocated yes/no IF ( ALLOCATED(InData%InputTimes) ) THEN Int_BufSz = Int_BufSz + 2*1 ! InputTimes upper/lower bounds for each dimension @@ -26999,7 +28281,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Int_Xferred = 1 DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) - CALL SD_PackContState( Re_Buf, Db_Buf, Int_Buf, InData%x(i1), ErrStat2, ErrMsg2, OnlySize ) ! x + CALL ExtPtfm_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 @@ -27029,7 +28311,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ENDIF END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) - CALL SD_PackDiscState( Re_Buf, Db_Buf, Int_Buf, InData%xd(i1), ErrStat2, ErrMsg2, OnlySize ) ! xd + CALL ExtPtfm_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 @@ -27059,7 +28341,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ENDIF END DO DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) - CALL SD_PackConstrState( Re_Buf, Db_Buf, Int_Buf, InData%z(i1), ErrStat2, ErrMsg2, OnlySize ) ! z + CALL ExtPtfm_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 @@ -27089,7 +28371,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ENDIF END DO DO i1 = LBOUND(InData%OtherSt,1), UBOUND(InData%OtherSt,1) - CALL SD_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt + CALL ExtPtfm_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 @@ -27118,7 +28400,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO - CALL SD_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p + CALL ExtPtfm_PackParam( Re_Buf, Db_Buf, Int_Buf, InData%p, ErrStat2, ErrMsg2, OnlySize ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -27146,7 +28428,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL SD_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u + CALL ExtPtfm_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%u, ErrStat2, ErrMsg2, OnlySize ) ! u CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -27174,7 +28456,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL SD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y + CALL ExtPtfm_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -27202,7 +28484,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - CALL SD_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m + CALL ExtPtfm_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -27241,48 +28523,7 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Int_Xferred = Int_Xferred + 2 DO i1 = LBOUND(InData%Input,1), UBOUND(InData%Input,1) - CALL SD_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%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 SD_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%Output(i1), ErrStat2, ErrMsg2, OnlySize ) ! Output + CALL ExtPtfm_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 @@ -27312,34 +28553,6 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ENDIF END DO END IF - CALL SD_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%InputTimes) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -27355,13 +28568,13 @@ SUBROUTINE FAST_PackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_PackSubDyn_Data + END SUBROUTINE FAST_PackExtPtfm_Data - SUBROUTINE FAST_UnPackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) + SUBROUTINE FAST_UnPackExtPtfm_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(SubDyn_Data), INTENT(INOUT) :: OutData + TYPE(ExtPtfm_Data), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -27373,7 +28586,7 @@ SUBROUTINE FAST_UnPackSubDyn_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_UnPackSubDyn_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackExtPtfm_Data' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -27420,7 +28633,7 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x + CALL ExtPtfm_UnpackContState( Re_Buf, Db_Buf, Int_Buf, OutData%x(i1), ErrStat2, ErrMsg2 ) ! x CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -27464,7 +28677,7 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd + CALL ExtPtfm_UnpackDiscState( Re_Buf, Db_Buf, Int_Buf, OutData%xd(i1), ErrStat2, ErrMsg2 ) ! xd CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -27508,98 +28721,17 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_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 SD_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 SD_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p + CALL ExtPtfm_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 @@ -27633,13 +28765,14 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%u, ErrStat2, ErrMsg2 ) ! u + CALL ExtPtfm_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 @@ -27673,7 +28806,7 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y, ErrStat2, ErrMsg2 ) ! y + CALL ExtPtfm_UnpackParam( Re_Buf, Db_Buf, Int_Buf, OutData%p, ErrStat2, ErrMsg2 ) ! p CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -27713,27 +28846,13 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + CALL ExtPtfm_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 ! 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 @@ -27767,29 +28886,13 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_UnpackInput( Re_Buf, Db_Buf, Int_Buf, OutData%Input(i1), ErrStat2, ErrMsg2 ) ! Input + CALL ExtPtfm_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 - 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 @@ -27823,15 +28926,27 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%Output(i1), ErrStat2, ErrMsg2 ) ! Output + CALL ExtPtfm_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) - END DO - END IF + 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 @@ -27865,13 +28980,15 @@ SUBROUTINE FAST_UnPackSubDyn_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 SD_UnpackOutput( Re_Buf, Db_Buf, Int_Buf, OutData%y_interp, ErrStat2, ErrMsg2 ) ! y_interp + CALL ExtPtfm_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 @@ -27890,11 +29007,11 @@ SUBROUTINE FAST_UnPackSubDyn_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_UnPackSubDyn_Data + END SUBROUTINE FAST_UnPackExtPtfm_Data - SUBROUTINE FAST_CopyExtPtfm_Data( SrcExtPtfm_DataData, DstExtPtfm_DataData, CtrlCode, ErrStat, ErrMsg ) - TYPE(ExtPtfm_Data), INTENT(INOUT) :: SrcExtPtfm_DataData - TYPE(ExtPtfm_Data), INTENT(INOUT) :: DstExtPtfm_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 @@ -27903,113 +29020,139 @@ SUBROUTINE FAST_CopyExtPtfm_Data( SrcExtPtfm_DataData, DstExtPtfm_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_CopyExtPtfm_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_CopySeaState_Data' ! ErrStat = ErrID_None ErrMsg = "" - DO i1 = LBOUND(SrcExtPtfm_DataData%x,1), UBOUND(SrcExtPtfm_DataData%x,1) - CALL ExtPtfm_CopyContState( SrcExtPtfm_DataData%x(i1), DstExtPtfm_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(SrcExtPtfm_DataData%xd,1), UBOUND(SrcExtPtfm_DataData%xd,1) - CALL ExtPtfm_CopyDiscState( SrcExtPtfm_DataData%xd(i1), DstExtPtfm_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(SrcExtPtfm_DataData%z,1), UBOUND(SrcExtPtfm_DataData%z,1) - CALL ExtPtfm_CopyConstrState( SrcExtPtfm_DataData%z(i1), DstExtPtfm_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(SrcExtPtfm_DataData%OtherSt,1), UBOUND(SrcExtPtfm_DataData%OtherSt,1) - CALL ExtPtfm_CopyOtherState( SrcExtPtfm_DataData%OtherSt(i1), DstExtPtfm_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 ExtPtfm_CopyParam( SrcExtPtfm_DataData%p, DstExtPtfm_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 ExtPtfm_CopyInput( SrcExtPtfm_DataData%u, DstExtPtfm_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 ExtPtfm_CopyOutput( SrcExtPtfm_DataData%y, DstExtPtfm_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 ExtPtfm_CopyMisc( SrcExtPtfm_DataData%m, DstExtPtfm_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(SrcExtPtfm_DataData%Input)) THEN - i1_l = LBOUND(SrcExtPtfm_DataData%Input,1) - i1_u = UBOUND(SrcExtPtfm_DataData%Input,1) - IF (.NOT. ALLOCATED(DstExtPtfm_DataData%Input)) THEN - ALLOCATE(DstExtPtfm_DataData%Input(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 DstExtPtfm_DataData%Input.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSeaState_DataData%Input.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DO i1 = LBOUND(SrcExtPtfm_DataData%Input,1), UBOUND(SrcExtPtfm_DataData%Input,1) - CALL ExtPtfm_CopyInput( SrcExtPtfm_DataData%Input(i1), DstExtPtfm_DataData%Input(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 -IF (ALLOCATED(SrcExtPtfm_DataData%InputTimes)) THEN - i1_l = LBOUND(SrcExtPtfm_DataData%InputTimes,1) - i1_u = UBOUND(SrcExtPtfm_DataData%InputTimes,1) - IF (.NOT. ALLOCATED(DstExtPtfm_DataData%InputTimes)) THEN - ALLOCATE(DstExtPtfm_DataData%InputTimes(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 DstExtPtfm_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + CALL SetErrStat(ErrID_Fatal, 'Error allocating DstSeaState_DataData%Output.', ErrStat, ErrMsg,RoutineName) RETURN END IF END IF - DstExtPtfm_DataData%InputTimes = SrcExtPtfm_DataData%InputTimes + 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 - END SUBROUTINE FAST_CopyExtPtfm_Data + 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 DstSeaState_DataData%InputTimes.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstSeaState_DataData%InputTimes = SrcSeaState_DataData%InputTimes +ENDIF + END SUBROUTINE FAST_CopySeaState_Data - SUBROUTINE FAST_DestroyExtPtfm_Data( ExtPtfm_DataData, ErrStat, ErrMsg ) - TYPE(ExtPtfm_Data), INTENT(INOUT) :: ExtPtfm_DataData + SUBROUTINE FAST_DestroySeaState_Data( SeaState_DataData, ErrStat, ErrMsg ) + TYPE(SeaState_Data), INTENT(INOUT) :: SeaState_DataData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg - CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroyExtPtfm_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_DestroySeaState_Data' INTEGER(IntKi) :: i, i1, i2, i3, i4, i5 ! ErrStat = ErrID_None ErrMsg = "" -DO i1 = LBOUND(ExtPtfm_DataData%x,1), UBOUND(ExtPtfm_DataData%x,1) - CALL ExtPtfm_DestroyContState( ExtPtfm_DataData%x(i1), ErrStat, ErrMsg ) +DO i1 = LBOUND(SeaState_DataData%x,1), UBOUND(SeaState_DataData%x,1) + CALL SeaSt_DestroyContState( SeaState_DataData%x(i1), ErrStat, ErrMsg ) ENDDO -DO i1 = LBOUND(ExtPtfm_DataData%xd,1), UBOUND(ExtPtfm_DataData%xd,1) - CALL ExtPtfm_DestroyDiscState( ExtPtfm_DataData%xd(i1), ErrStat, ErrMsg ) +DO i1 = LBOUND(SeaState_DataData%xd,1), UBOUND(SeaState_DataData%xd,1) + CALL SeaSt_DestroyDiscState( SeaState_DataData%xd(i1), ErrStat, ErrMsg ) ENDDO -DO i1 = LBOUND(ExtPtfm_DataData%z,1), UBOUND(ExtPtfm_DataData%z,1) - CALL ExtPtfm_DestroyConstrState( ExtPtfm_DataData%z(i1), ErrStat, ErrMsg ) +DO i1 = LBOUND(SeaState_DataData%z,1), UBOUND(SeaState_DataData%z,1) + CALL SeaSt_DestroyConstrState( SeaState_DataData%z(i1), ErrStat, ErrMsg ) ENDDO -DO i1 = LBOUND(ExtPtfm_DataData%OtherSt,1), UBOUND(ExtPtfm_DataData%OtherSt,1) - CALL ExtPtfm_DestroyOtherState( ExtPtfm_DataData%OtherSt(i1), ErrStat, ErrMsg ) +DO i1 = LBOUND(SeaState_DataData%OtherSt,1), UBOUND(SeaState_DataData%OtherSt,1) + CALL SeaSt_DestroyOtherState( SeaState_DataData%OtherSt(i1), ErrStat, ErrMsg ) ENDDO - CALL ExtPtfm_DestroyParam( ExtPtfm_DataData%p, ErrStat, ErrMsg ) - CALL ExtPtfm_DestroyInput( ExtPtfm_DataData%u, ErrStat, ErrMsg ) - CALL ExtPtfm_DestroyOutput( ExtPtfm_DataData%y, ErrStat, ErrMsg ) - CALL ExtPtfm_DestroyMisc( ExtPtfm_DataData%m, ErrStat, ErrMsg ) -IF (ALLOCATED(ExtPtfm_DataData%Input)) THEN -DO i1 = LBOUND(ExtPtfm_DataData%Input,1), UBOUND(ExtPtfm_DataData%Input,1) - CALL ExtPtfm_DestroyInput( ExtPtfm_DataData%Input(i1), ErrStat, ErrMsg ) + CALL SeaSt_DestroyParam( SeaState_DataData%p, ErrStat, ErrMsg ) + CALL SeaSt_DestroyInput( SeaState_DataData%u, ErrStat, ErrMsg ) + CALL SeaSt_DestroyOutput( SeaState_DataData%y, ErrStat, ErrMsg ) + CALL SeaSt_DestroyMisc( SeaState_DataData%m, ErrStat, ErrMsg ) +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), ErrStat, ErrMsg ) ENDDO - DEALLOCATE(ExtPtfm_DataData%Input) + DEALLOCATE(SeaState_DataData%Input) ENDIF -IF (ALLOCATED(ExtPtfm_DataData%InputTimes)) THEN - DEALLOCATE(ExtPtfm_DataData%InputTimes) +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), ErrStat, ErrMsg ) +ENDDO + DEALLOCATE(SeaState_DataData%Output) ENDIF - END SUBROUTINE FAST_DestroyExtPtfm_Data + CALL SeaSt_DestroyOutput( SeaState_DataData%y_interp, ErrStat, ErrMsg ) +IF (ALLOCATED(SeaState_DataData%InputTimes)) THEN + DEALLOCATE(SeaState_DataData%InputTimes) +ENDIF + END SUBROUTINE FAST_DestroySeaState_Data - SUBROUTINE FAST_PackExtPtfm_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(ExtPtfm_Data), INTENT(IN) :: InData + TYPE(SeaState_Data), INTENT(IN) :: InData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg LOGICAL,OPTIONAL, INTENT(IN ) :: SizeOnly @@ -28024,7 +29167,7 @@ SUBROUTINE FAST_PackExtPtfm_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_PackExtPtfm_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_PackSeaState_Data' ! buffers to store subtypes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -28043,7 +29186,7 @@ SUBROUTINE FAST_PackExtPtfm_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 ExtPtfm_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 @@ -28062,7 +29205,7 @@ SUBROUTINE FAST_PackExtPtfm_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 ExtPtfm_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 @@ -28081,7 +29224,7 @@ SUBROUTINE FAST_PackExtPtfm_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 ExtPtfm_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 @@ -28100,7 +29243,7 @@ SUBROUTINE FAST_PackExtPtfm_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 ExtPtfm_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 @@ -28118,7 +29261,7 @@ SUBROUTINE FAST_PackExtPtfm_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 ExtPtfm_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 @@ -28135,7 +29278,7 @@ SUBROUTINE FAST_PackExtPtfm_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 ExtPtfm_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 @@ -28152,7 +29295,7 @@ SUBROUTINE FAST_PackExtPtfm_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 ExtPtfm_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 @@ -28169,7 +29312,7 @@ SUBROUTINE FAST_PackExtPtfm_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 ExtPtfm_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 @@ -28190,7 +29333,7 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 ExtPtfm_PackInput( Re_Buf, Db_Buf, Int_Buf, InData%Input(i1), ErrStat2, ErrMsg2, .TRUE. ) ! Input + 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 @@ -28208,6 +29351,46 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E END IF END DO 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 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 ! 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 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 ! 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 ! InputTimes allocated yes/no IF ( ALLOCATED(InData%InputTimes) ) THEN Int_BufSz = Int_BufSz + 2*1 ! InputTimes upper/lower bounds for each dimension @@ -28241,7 +29424,7 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = 1 DO i1 = LBOUND(InData%x,1), UBOUND(InData%x,1) - CALL ExtPtfm_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 @@ -28271,7 +29454,180 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ENDIF END DO DO i1 = LBOUND(InData%xd,1), UBOUND(InData%xd,1) - CALL ExtPtfm_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 + + 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 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 + + 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 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 + + 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 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 + + 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_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 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 + + 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_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) IF (ErrStat >= AbortErrLev) RETURN @@ -28299,39 +29655,18 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF - END DO - DO i1 = LBOUND(InData%z,1), UBOUND(InData%z,1) - CALL ExtPtfm_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 ( .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 - 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 ExtPtfm_PackOtherState( Re_Buf, Db_Buf, Int_Buf, InData%OtherSt(i1), ErrStat2, ErrMsg2, OnlySize ) ! OtherSt + 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 @@ -28360,91 +29695,19 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF END DO - CALL ExtPtfm_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 ExtPtfm_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 ExtPtfm_PackOutput( Re_Buf, Db_Buf, Int_Buf, InData%y, ErrStat2, ErrMsg2, OnlySize ) ! y - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - IF (ErrStat >= AbortErrLev) RETURN + END IF + 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 - 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 ExtPtfm_PackMisc( Re_Buf, Db_Buf, Int_Buf, InData%m, ErrStat2, ErrMsg2, OnlySize ) ! m + 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 @@ -28472,18 +29735,9 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 ExtPtfm_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 @@ -28511,8 +29765,6 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 @@ -28528,13 +29780,13 @@ SUBROUTINE FAST_PackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_PackExtPtfm_Data + END SUBROUTINE FAST_PackSeaState_Data - SUBROUTINE FAST_UnPackExtPtfm_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(ExtPtfm_Data), INTENT(INOUT) :: OutData + TYPE(SeaState_Data), INTENT(INOUT) :: OutData INTEGER(IntKi), INTENT( OUT) :: ErrStat CHARACTER(*), INTENT( OUT) :: ErrMsg ! Local variables @@ -28546,7 +29798,7 @@ SUBROUTINE FAST_UnPackExtPtfm_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_UnPackExtPtfm_Data' + CHARACTER(*), PARAMETER :: RoutineName = 'FAST_UnPackSeaState_Data' ! buffers to store meshes, if any REAL(ReKi), ALLOCATABLE :: Re_Buf(:) REAL(DbKi), ALLOCATABLE :: Db_Buf(:) @@ -28593,7 +29845,7 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_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 @@ -28637,7 +29889,7 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_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 @@ -28681,7 +29933,7 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_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 @@ -28725,7 +29977,7 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_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 @@ -28766,7 +30018,7 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_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 @@ -28806,7 +30058,7 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_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 @@ -28846,13 +30098,123 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_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 + + 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_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 + 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 @@ -28886,27 +30248,15 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_UnpackMisc( Re_Buf, Db_Buf, Int_Buf, OutData%m, ErrStat2, ErrMsg2 ) ! m + 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 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) + END DO + END IF Buf_size=IntKiBuf( Int_Xferred ) Int_Xferred = Int_Xferred + 1 IF(Buf_size > 0) THEN @@ -28940,15 +30290,13 @@ SUBROUTINE FAST_UnPackExtPtfm_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 ExtPtfm_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 @@ -28967,7 +30315,7 @@ SUBROUTINE FAST_UnPackExtPtfm_Data( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Db_Xferred = Db_Xferred + 1 END DO END IF - END SUBROUTINE FAST_UnPackExtPtfm_Data + END SUBROUTINE FAST_UnPackSeaState_Data SUBROUTINE FAST_CopyHydroDyn_Data( SrcHydroDyn_DataData, DstHydroDyn_DataData, CtrlCode, ErrStat, ErrMsg ) TYPE(HydroDyn_Data), INTENT(INOUT) :: SrcHydroDyn_DataData @@ -43625,6 +44973,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 @@ -43709,6 +45063,8 @@ SUBROUTINE FAST_DestroyInitData( InitDataData, ErrStat, ErrMsg ) CALL InflowWind_DestroyInitOutput( InitDataData%OutData_IfW, ErrStat, ErrMsg ) CALL OpFM_DestroyInitInput( InitDataData%InData_OpFM, ErrStat, ErrMsg ) CALL OpFM_DestroyInitOutput( InitDataData%OutData_OpFM, ErrStat, ErrMsg ) + CALL SeaSt_DestroyInitInput( InitDataData%InData_SeaSt, ErrStat, ErrMsg ) + CALL SeaSt_DestroyInitOutput( InitDataData%OutData_SeaSt, ErrStat, ErrMsg ) CALL HydroDyn_DestroyInitInput( InitDataData%InData_HD, ErrStat, ErrMsg ) CALL HydroDyn_DestroyInitOutput( InitDataData%OutData_HD, ErrStat, ErrMsg ) CALL SD_DestroyInitInput( InitDataData%InData_SD, ErrStat, ErrMsg ) @@ -44009,6 +45365,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) @@ -44723,6 +46113,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 @@ -45853,6 +47299,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) @@ -46974,6 +48500,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 @@ -47024,6 +48553,7 @@ SUBROUTINE FAST_DestroyTurbineType( TurbineTypeData, ErrStat, ErrMsg ) CALL FAST_Destroyinflowwind_data( TurbineTypeData%IfW, ErrStat, ErrMsg ) CALL FAST_Destroyopenfoam_data( TurbineTypeData%OpFM, ErrStat, ErrMsg ) CALL FAST_Destroyscdataex_data( TurbineTypeData%SC_DX, ErrStat, ErrMsg ) + CALL FAST_Destroyseastate_data( TurbineTypeData%SeaSt, ErrStat, ErrMsg ) CALL FAST_Destroyhydrodyn_data( TurbineTypeData%HD, ErrStat, ErrMsg ) CALL FAST_Destroysubdyn_data( TurbineTypeData%SD, ErrStat, ErrMsg ) CALL FAST_Destroymap_data( TurbineTypeData%MAP, ErrStat, ErrMsg ) @@ -47276,6 +48806,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) @@ -47770,6 +49317,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 @@ -48553,6 +50128,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) From 737ee8f8ae72e558112ed92bb441dbc4d60ecf65 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Mon, 6 Dec 2021 08:11:40 -0700 Subject: [PATCH 010/338] Added ExctnCutOff to Input file / parsing This feature is currently unused. It will be fully implemented when ExctnDisp = 2 is implemented. --- modules/hydrodyn/src/HydroDyn_Input.f90 | 10 ++++++++++ modules/hydrodyn/src/WAMIT.txt | 4 +++- modules/hydrodyn/src/WAMIT_Types.f90 | 14 ++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/modules/hydrodyn/src/HydroDyn_Input.f90 b/modules/hydrodyn/src/HydroDyn_Input.f90 index 7f6c36b489..346106a84c 100644 --- a/modules/hydrodyn/src/HydroDyn_Input.f90 +++ b/modules/hydrodyn/src/HydroDyn_Input.f90 @@ -260,6 +260,11 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp 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 ) @@ -1308,6 +1313,11 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS 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 diff --git a/modules/hydrodyn/src/WAMIT.txt b/modules/hydrodyn/src/WAMIT.txt index a5ef593082..a1badff14d 100644 --- a/modules/hydrodyn/src/WAMIT.txt +++ b/modules/hydrodyn/src/WAMIT.txt @@ -34,7 +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 ^ ^ 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 ^ ^ INTEGER 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 - - - "" - @@ -124,6 +125,7 @@ typedef ^ ^ SiKi 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 ^ ^ INTEGER ExctnCutOff - - - "Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] " Hz 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 - - - "" - diff --git a/modules/hydrodyn/src/WAMIT_Types.f90 b/modules/hydrodyn/src/WAMIT_Types.f90 index 650e58bbb0..88e3026b51 100644 --- a/modules/hydrodyn/src/WAMIT_Types.f90 +++ b/modules/hydrodyn/src/WAMIT_Types.f90 @@ -56,6 +56,7 @@ MODULE WAMIT_Types 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] [-] + INTEGER(IntKi) :: 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 !< [-] @@ -141,6 +142,7 @@ MODULE WAMIT_Types 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] [-] + INTEGER(IntKi) :: ExctnCutOff !< Cutoff (corner) frequency of the low-pass time-filtered displaced position (Hz) [>0.0] [Hz] 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 !< [-] @@ -280,6 +282,7 @@ SUBROUTINE WAMIT_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er 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 @@ -519,6 +522,7 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Int_BufSz = Int_BufSz + 1 ! RdtnMod Int_BufSz = Int_BufSz + 1 ! ExctnMod Int_BufSz = Int_BufSz + 1 ! ExctnDisp + Int_BufSz = Int_BufSz + 1 ! ExctnCutOff Db_BufSz = Db_BufSz + 1 ! RdtnTMax Re_BufSz = Re_BufSz + 1 ! WaveDir Int_BufSz = Int_BufSz + 1*LEN(InData%WAMITFile) ! WAMITFile @@ -748,6 +752,8 @@ SUBROUTINE WAMIT_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%ExctnDisp Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%ExctnCutOff + Int_Xferred = Int_Xferred + 1 DbKiBuf(Db_Xferred) = InData%RdtnTMax Db_Xferred = Db_Xferred + 1 ReKiBuf(Re_Xferred) = InData%WaveDir @@ -1129,6 +1135,8 @@ SUBROUTINE WAMIT_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Int_Xferred = Int_Xferred + 1 OutData%ExctnDisp = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%ExctnCutOff = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 OutData%RdtnTMax = DbKiBuf(Db_Xferred) Db_Xferred = Db_Xferred + 1 OutData%WaveDir = ReKiBuf(Re_Xferred) @@ -4259,6 +4267,7 @@ SUBROUTINE WAMIT_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs DstParamData%RdtnMod = SrcParamData%RdtnMod DstParamData%ExctnMod = SrcParamData%ExctnMod DstParamData%ExctnDisp = SrcParamData%ExctnDisp + DstParamData%ExctnCutOff = SrcParamData%ExctnCutOff IF (ALLOCATED(SrcParamData%WaveExctn)) THEN i1_l = LBOUND(SrcParamData%WaveExctn,1) i1_u = UBOUND(SrcParamData%WaveExctn,1) @@ -4420,6 +4429,7 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_BufSz = Int_BufSz + 1 ! RdtnMod Int_BufSz = Int_BufSz + 1 ! ExctnMod Int_BufSz = Int_BufSz + 1 ! ExctnDisp + Int_BufSz = Int_BufSz + 1 ! ExctnCutOff 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 @@ -4627,6 +4637,8 @@ SUBROUTINE WAMIT_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%ExctnDisp Int_Xferred = Int_Xferred + 1 + IntKiBuf(Int_Xferred) = InData%ExctnCutOff + Int_Xferred = Int_Xferred + 1 IF ( .NOT. ALLOCATED(InData%WaveExctn) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -4963,6 +4975,8 @@ SUBROUTINE WAMIT_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM Int_Xferred = Int_Xferred + 1 OutData%ExctnDisp = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 + OutData%ExctnCutOff = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveExctn not allocated Int_Xferred = Int_Xferred + 1 ELSE From d762b705353bdf282fa116265a5071db04b83ccd Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Mon, 6 Dec 2021 09:15:41 -0700 Subject: [PATCH 011/338] Update SeaState Interp Comments Comments make clear that the time signal is wrapped back into the valid time range [0,WaveTmax] --- modules/seastate/src/seastate_Interp.f90 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/modules/seastate/src/seastate_Interp.f90 b/modules/seastate/src/seastate_Interp.f90 index aa159349ed..b1e2169801 100644 --- a/modules/seastate/src/seastate_Interp.f90 +++ b/modules/seastate/src/seastate_Interp.f90 @@ -305,13 +305,16 @@ subroutine SetTimeIndex(Time, deltaT, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, Er 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 - - !TODO: Add mod to wrap time + Tmp = Time / deltaT Indx_Lo = INT( Tmp ) ! convert REAL to INTEGER if (Indx_Lo >= (nMax-1)) then ! Wrap the time series back to the beginning of the signal - ! Indx_Lo = mod(Indx_Lo, nMax) + + ! 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. Indx_Lo = Indx_Lo - (nMax - 1) Tmp = Tmp - real(nMax - 1, ReKi) end if From 9ea1f1c9ea7862bd9c451f3adb0294c72692399e Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Mon, 6 Dec 2021 12:01:31 -0700 Subject: [PATCH 012/338] Update VS build for SeaState --- vs-build/FASTlib/FASTlib.vfproj | 185 +++++++++++++++++------- vs-build/HydroDyn/HydroDynDriver.vfproj | 97 +++++++++---- vs-build/RunRegistry.bat | 2 +- 3 files changed, 201 insertions(+), 83 deletions(-) diff --git a/vs-build/FASTlib/FASTlib.vfproj b/vs-build/FASTlib/FASTlib.vfproj index 880205f5bf..3b2f5ffb68 100644 --- a/vs-build/FASTlib/FASTlib.vfproj +++ b/vs-build/FASTlib/FASTlib.vfproj @@ -723,36 +723,36 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -989,65 +989,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -1056,7 +1056,7 @@ - + @@ -1065,8 +1065,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + @@ -1074,13 +1154,12 @@ - + - - - + + diff --git a/vs-build/HydroDyn/HydroDynDriver.vfproj b/vs-build/HydroDyn/HydroDynDriver.vfproj index 124b485616..ca15b836aa 100644 --- a/vs-build/HydroDyn/HydroDynDriver.vfproj +++ b/vs-build/HydroDyn/HydroDynDriver.vfproj @@ -88,20 +88,20 @@ - + - + - + - + - + - + - - + + @@ -142,6 +142,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -210,59 +246,62 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - - + + - + - + + + + + - + - - - + + diff --git a/vs-build/RunRegistry.bat b/vs-build/RunRegistry.bat index ed1cec1882..e644294706 100644 --- a/vs-build/RunRegistry.bat +++ b/vs-build/RunRegistry.bat @@ -197,7 +197,7 @@ GOTO checkError 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 From 01dda522d60579bd1ad5d5794f5adb12730295bd Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 9 Dec 2021 13:35:06 -0700 Subject: [PATCH 013/338] Update for SeaState managed outputs --- docs/OtherSupporting/OutListParameters.xlsx | Bin 570113 -> 570284 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/OtherSupporting/OutListParameters.xlsx b/docs/OtherSupporting/OutListParameters.xlsx index bbfcb4cadd028efc9484bf2510cd9dfe9e74a77f..8c04da7403c48abb270215976f7b44adb06866a1 100644 GIT binary patch delta 47440 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

    `zYw8OWT&u!++zIu|0$;- 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

    5}ekR+&Xz>zY|BT%Qx|kXq)25 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 BPf7p) From 607b1afccf71644416d3cd8a8bdf7e5ba13e50b5 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 9 Dec 2021 13:35:47 -0700 Subject: [PATCH 014/338] Small Cmake updates for SeaState functionality --- CMakeLists.txt | 1 + modules/hydrodyn/CMakeLists.txt | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 36f0a0ecc3..a95a88d880 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -127,6 +127,7 @@ set(OPENFAST_MODULES elastodyn beamdyn subdyn + seastate hydrodyn orcaflex-interface extptfm diff --git a/modules/hydrodyn/CMakeLists.txt b/modules/hydrodyn/CMakeLists.txt index 3c10213253..43731750a1 100644 --- a/modules/hydrodyn/CMakeLists.txt +++ b/modules/hydrodyn/CMakeLists.txt @@ -43,7 +43,6 @@ set(HYDRODYN_SOURCES 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 From 34cb10e587ba8ab35aeef2b3a8870e6b31cfa5bf Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 9 Dec 2021 15:23:39 -0700 Subject: [PATCH 015/338] CMakeLists change to find filename of seastae_Interp.f90 --- modules/seastate/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/seastate/CMakeLists.txt b/modules/seastate/CMakeLists.txt index acdef872ed..b46d7a5904 100644 --- a/modules/seastate/CMakeLists.txt +++ b/modules/seastate/CMakeLists.txt @@ -27,7 +27,7 @@ set(SEAST_SOURCES src/Waves.f90 src/Waves2.f90 src/UserWaves.f90 - src/seastate_interp.f90 + src/seastate_Interp.f90 src/SeaState.f90 src/SeaState_Output.f90 src/Current_Types.f90 From a892f920aece5be4c5e68a734a9ec5c86c923fdb Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 9 Dec 2021 15:34:49 -0700 Subject: [PATCH 016/338] More CMakeLists Corrections for SeaState Update --- modules/hydrodyn/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/modules/hydrodyn/CMakeLists.txt b/modules/hydrodyn/CMakeLists.txt index 43731750a1..77cabd3586 100644 --- a/modules/hydrodyn/CMakeLists.txt +++ b/modules/hydrodyn/CMakeLists.txt @@ -16,7 +16,6 @@ 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) @@ -29,7 +28,6 @@ endif() set(HYDRODYN_SOURCES src/Conv_Radiation.f90 - src/Current.f90 src/HydroDyn.f90 src/HydroDyn_Input.f90 src/HydroDyn_Output.f90 @@ -44,7 +42,6 @@ set(HYDRODYN_SOURCES src/Waves.f90 src/Waves2.f90 src/Conv_Radiation_Types.f90 - src/Current_Types.f90 src/HydroDyn_Types.f90 src/Morison_Types.f90 src/SS_Radiation_Types.f90 From 2e85095a629adfb3d8bf02db5135e99db3a024d1 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 9 Dec 2021 15:59:37 -0700 Subject: [PATCH 017/338] More CMakelists debugging --- modules/hydrodyn/CMakeLists.txt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/modules/hydrodyn/CMakeLists.txt b/modules/hydrodyn/CMakeLists.txt index 77cabd3586..71c9477cd0 100644 --- a/modules/hydrodyn/CMakeLists.txt +++ b/modules/hydrodyn/CMakeLists.txt @@ -22,8 +22,6 @@ if (GENERATE_TYPES) 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() set(HYDRODYN_SOURCES @@ -35,12 +33,9 @@ set(HYDRODYN_SOURCES 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/Conv_Radiation_Types.f90 src/HydroDyn_Types.f90 src/Morison_Types.f90 @@ -48,8 +43,6 @@ set(HYDRODYN_SOURCES src/SS_Excitation_Types.f90 src/WAMIT_Types.f90 src/WAMIT2_Types.f90 - src/Waves_Types.f90 - src/Waves2_Types.f90 ) add_library(hydrodynlib ${HYDRODYN_SOURCES}) From 4d3f68df66c258f90029de772d8c8aa2fc2d1519 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 9 Dec 2021 18:05:24 -0700 Subject: [PATCH 018/338] CMaklists bug fix? Trying to resolve seastate references in hydrodyn --- modules/hydrodyn/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/hydrodyn/CMakeLists.txt b/modules/hydrodyn/CMakeLists.txt index 71c9477cd0..40cc424317 100644 --- a/modules/hydrodyn/CMakeLists.txt +++ b/modules/hydrodyn/CMakeLists.txt @@ -46,10 +46,10 @@ set(HYDRODYN_SOURCES ) add_library(hydrodynlib ${HYDRODYN_SOURCES}) -target_link_libraries(hydrodynlib nwtclibs) +target_link_libraries(hydrodynlib seastlib nwtclibs) add_executable(hydrodyn_driver src/HydroDyn_DriverCode.f90) -target_link_libraries(hydrodyn_driver hydrodynlib nwtclibs versioninfolib) +target_link_libraries(hydrodyn_driver hydrodynlib seastlib nwtclibs versioninfolib) #add_executable(ss_radiation # src/SS_Radiation_DriverCode.f90) From 3c17694211f81ba70ee404dd46a3c71b47f4095d Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 9 Dec 2021 19:00:40 -0700 Subject: [PATCH 019/338] More Cmakelists debug for SeaState --- modules/seastate/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/seastate/CMakeLists.txt b/modules/seastate/CMakeLists.txt index b46d7a5904..faeb3b3104 100644 --- a/modules/seastate/CMakeLists.txt +++ b/modules/seastate/CMakeLists.txt @@ -18,7 +18,7 @@ if (GENERATE_TYPES) generate_f90_types(src/Current.txt ${CMAKE_CURRENT_LIST_DIR}/src/Current_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 -noextrap) - generate_f90_types(src/seastate_interp.txt ${CMAKE_CURRENT_LIST_DIR}/src/SeaState_Interp_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() From ab392b1e811dfdc114cfc6a834a74b2e3518e84f Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Fri, 10 Dec 2021 14:36:00 -0700 Subject: [PATCH 020/338] FIxed gfortran compile errors and Cmake error Needed to cast reals to correct types Added SeaState_input.f90 to CmakeLists.txt --- modules/seastate/CMakeLists.txt | 1 + modules/seastate/src/SeaState_Input.f90 | 9 +++++---- modules/seastate/src/SeaState_Output.f90 | 15 +++++++-------- modules/seastate/src/Waves.txt | 4 ++-- modules/seastate/src/seastate_Interp.f90 | 6 +++--- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/modules/seastate/CMakeLists.txt b/modules/seastate/CMakeLists.txt index faeb3b3104..2322dcac77 100644 --- a/modules/seastate/CMakeLists.txt +++ b/modules/seastate/CMakeLists.txt @@ -28,6 +28,7 @@ set(SEAST_SOURCES 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 diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index c8239093ff..a398876d28 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -85,7 +85,7 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, integer(IntKi) :: ErrStat2 character(ErrMsgLen) :: ErrMsg2 character(*), parameter :: RoutineName = 'SeaSt_ParaseInput' - + real(ReKi) :: tmp ! Initialize local data UnEc = -1 ErrStat = ErrID_None @@ -123,13 +123,14 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, CurLine = CurLine + 1 ! WtrDens - Water density. - call ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDens', InputFileData%Waves%WtrDens, defWtrDens, ErrStat2, ErrMsg2, UnEc ) + call ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDens', tmp, defWtrDens, ErrStat2, ErrMsg2, UnEc ) if (Failed()) return; + InputFileData%Waves%WtrDens = tmp ! WtrDpth - Water depth - call ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDpth', InputFileData%Waves%WtrDpth, defWtrDpth, ErrStat2, ErrMsg2, UnEc ) + call ParseVarWDefault ( FileInfo_In, CurLine, 'WtrDpth', tmp, defWtrDpth, ErrStat2, ErrMsg2, UnEc ) if (Failed()) return; - + InputFileData%Waves%WtrDpth = tmp ! MSL2SWL call ParseVarWDefault ( FileInfo_In, CurLine, 'MSL2SWL', InputFileData%MSL2SWL, defMSL2SWL, ErrStat2, ErrMsg2, UnEc ) if (Failed()) return; diff --git a/modules/seastate/src/SeaState_Output.f90 b/modules/seastate/src/SeaState_Output.f90 index 00841758d5..03174486aa 100644 --- a/modules/seastate/src/SeaState_Output.f90 +++ b/modules/seastate/src/SeaState_Output.f90 @@ -451,13 +451,13 @@ subroutine SeaStOut_MapOutputs( CurrentTime, p, NWaveElev, WaveElev, WaveElev1, REAL(DbKi), intent( in ) :: CurrentTime ! Current simulation time in seconds TYPE(SeaSt_ParameterType), intent( in ) :: p ! SeaState's parameter 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(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) INTEGER, intent( in ) :: NWaveKin ! Number of wave elevation locations to output - REAL(ReKi), 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(ReKi), 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(ReKi), 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(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 ) :: 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(MaxSeaStOutputs) INTEGER(IntKi), intent( out ) :: ErrStat ! Error status of the operation CHARACTER(*), intent( out ) :: ErrMsg ! Error message if ErrStat /= ErrID_None @@ -465,8 +465,7 @@ subroutine SeaStOut_MapOutputs( CurrentTime, p, NWaveElev, WaveElev, WaveElev1, integer :: I, iBody, startIndx, endIndx integer(IntKi) :: ErrStat2 character(ErrMsgLen) :: ErrMsg2 - real(ReKi) :: rotdisp(3) - + ErrStat = ErrID_None ErrMsg = "" diff --git a/modules/seastate/src/Waves.txt b/modules/seastate/src/Waves.txt index 02a51feffd..1eb0228922 100644 --- a/modules/seastate/src/Waves.txt +++ b/modules/seastate/src/Waves.txt @@ -46,8 +46,8 @@ 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 ^ ^ ReKi WtrDens - - - "Water density" (kg/m^3) +typedef ^ ^ ReKi WtrDpth - - - "Water depth" (meters) typedef ^ ^ INTEGER NWaveElev - - - "Number of points where the incident wave elevations are computed (the XY grid point locations)" - 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) diff --git a/modules/seastate/src/seastate_Interp.f90 b/modules/seastate/src/seastate_Interp.f90 index b1e2169801..b18da622c5 100644 --- a/modules/seastate/src/seastate_Interp.f90 +++ b/modules/seastate/src/seastate_Interp.f90 @@ -183,7 +183,7 @@ subroutine SetCartesianXYIndex(p, pZero, delta, nMax, Indx_Lo, Indx_Hi, isopc, E INTEGER(IntKi), INTENT(in ) :: nMax INTEGER(IntKi), intent(inout) :: Indx_Lo INTEGER(IntKi), intent(inout) :: Indx_Hi - real(ReKi), intent(inout) :: isopc + real(SiKi), intent(inout) :: isopc INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None @@ -235,7 +235,7 @@ subroutine SetCartesianZIndex(p, z_depth, delta, nMax, Indx_Lo, Indx_Hi, isopc, INTEGER(IntKi), INTENT(in ) :: nMax INTEGER(IntKi), intent(inout) :: Indx_Lo INTEGER(IntKi), intent(inout) :: Indx_Hi - real(ReKi), intent(inout) :: isopc + real(SiKi), intent(inout) :: isopc INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None @@ -288,7 +288,7 @@ subroutine SetTimeIndex(Time, deltaT, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, Er INTEGER(IntKi), INTENT(in ) :: nMax INTEGER(IntKi), intent(inout) :: Indx_Lo INTEGER(IntKi), intent(inout) :: Indx_Hi - real(ReKi), intent(inout) :: isopc + real(SiKi), intent(inout) :: isopc INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None From 046d0123f55f203df4378f770984ad0bb49895b8 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 14 Dec 2021 12:58:19 -0700 Subject: [PATCH 021/338] SeaState: fix case issue in file names for registry files --- modules/seastate/CMakeLists.txt | 4 ++-- .../seastate/src/{seastate_Interp.f90 => SeaState_Interp.f90} | 0 .../seastate/src/{seastate_Interp.txt => SeaState_Interp.txt} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename modules/seastate/src/{seastate_Interp.f90 => SeaState_Interp.f90} (100%) rename modules/seastate/src/{seastate_Interp.txt => SeaState_Interp.txt} (100%) diff --git a/modules/seastate/CMakeLists.txt b/modules/seastate/CMakeLists.txt index 2322dcac77..a507ab3845 100644 --- a/modules/seastate/CMakeLists.txt +++ b/modules/seastate/CMakeLists.txt @@ -18,7 +18,7 @@ if (GENERATE_TYPES) generate_f90_types(src/Current.txt ${CMAKE_CURRENT_LIST_DIR}/src/Current_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 -noextrap) - generate_f90_types(src/seastate_Interp.txt ${CMAKE_CURRENT_LIST_DIR}/src/SeaState_Interp_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() @@ -27,7 +27,7 @@ set(SEAST_SOURCES src/Waves.f90 src/Waves2.f90 src/UserWaves.f90 - src/seastate_Interp.f90 + src/SeaState_Interp.f90 src/SeaState_Input.f90 src/SeaState.f90 src/SeaState_Output.f90 diff --git a/modules/seastate/src/seastate_Interp.f90 b/modules/seastate/src/SeaState_Interp.f90 similarity index 100% rename from modules/seastate/src/seastate_Interp.f90 rename to modules/seastate/src/SeaState_Interp.f90 diff --git a/modules/seastate/src/seastate_Interp.txt b/modules/seastate/src/SeaState_Interp.txt similarity index 100% rename from modules/seastate/src/seastate_Interp.txt rename to modules/seastate/src/SeaState_Interp.txt From ec0458d4d074407a10f106f2671644697c3d1a40 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 14 Dec 2021 13:06:56 -0700 Subject: [PATCH 022/338] SeaState: regenerate Types files with -noextrap flags HD_Types -- some registry file dependencies not used now FAST_Types -- some registry file dependencies not used now SeaState_Types -- -noextrap flag Waves_Types -- -noextrap flag Waves2_Types -- -noextrap flag --- modules/hydrodyn/src/HydroDyn_Types.f90 | 7 - modules/openfast-library/src/FAST_Types.f90 | 11 - modules/seastate/src/SeaState_Types.f90 | 326 -------------------- modules/seastate/src/Waves2_Types.f90 | 310 ------------------- modules/seastate/src/Waves_Types.f90 | 8 +- 5 files changed, 4 insertions(+), 658 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn_Types.f90 b/modules/hydrodyn/src/HydroDyn_Types.f90 index e026cc05ec..b731715e6b 100644 --- a/modules/hydrodyn/src/HydroDyn_Types.f90 +++ b/modules/hydrodyn/src/HydroDyn_Types.f90 @@ -31,16 +31,9 @@ !! unpack routines associated with each defined data type. This code is automatically generated by the FAST Registry. MODULE HydroDyn_Types !--------------------------------------------------------------------------------------------------------------------------------- -USE Conv_Radiation_Types -USE SS_Radiation_Types -USE SeaState_Interp_Types -USE SS_Excitation_Types USE WAMIT_Types USE WAMIT2_Types USE Morison_Types -USE Current_Types -USE Waves_Types -USE Waves2_Types USE SeaState_Types USE NWTC_Library IMPLICIT NONE diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index 423e809baf..6c9478a2cd 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -38,17 +38,6 @@ MODULE FAST_Types USE AeroDyn14_Types USE AeroDyn_Types USE SubDyn_Types -USE Current_Types -USE Waves_Types -USE Waves2_Types -USE SeaState_Interp_Types -USE SeaState_Types -USE Conv_Radiation_Types -USE SS_Radiation_Types -USE SS_Excitation_Types -USE WAMIT_Types -USE WAMIT2_Types -USE Morison_Types USE HydroDyn_Types USE IceFloe_Types USE OpenFOAM_Types diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index b51c960fa8..66e199ade6 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -6052,331 +6052,5 @@ SUBROUTINE SeaSt_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE SeaSt_UnPackOutput - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL SeaSt_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 SeaSt_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 SeaSt_Input_ExtrapInterp - - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 - TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_Input_ExtrapInterp1 - - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 - TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 - TYPE(SeaSt_InputType), INTENT(IN) :: u3 ! Input at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_Input_ExtrapInterp2 - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL SeaSt_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 SeaSt_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 SeaSt_Output_ExtrapInterp - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 - TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 - CALL Waves2_Output_ExtrapInterp1( y1%Waves2, y2%Waves2, tin, y_out%Waves2, tin_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - END SUBROUTINE SeaSt_Output_ExtrapInterp1 - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 - TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 - TYPE(SeaSt_OutputType), INTENT(IN) :: y3 ! Output at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 - 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) - END SUBROUTINE SeaSt_Output_ExtrapInterp2 - END MODULE SeaState_Types !ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/Waves2_Types.f90 b/modules/seastate/src/Waves2_Types.f90 index 99bc7eeb53..398c9aef2e 100644 --- a/modules/seastate/src/Waves2_Types.f90 +++ b/modules/seastate/src/Waves2_Types.f90 @@ -2693,315 +2693,5 @@ SUBROUTINE Waves2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Re_Xferred = Re_Xferred + 1 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 - ! 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 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' - ! 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 Waves2_Output_ExtrapInterp2 - END MODULE Waves2_Types !ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 index 2212da5015..3e73667b5c 100644 --- a/modules/seastate/src/Waves_Types.f90 +++ b/modules/seastate/src/Waves_Types.f90 @@ -63,8 +63,8 @@ MODULE Waves_Types 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)] + REAL(ReKi) :: WtrDens !< Water density [(kg/m^3)] + REAL(ReKi) :: WtrDpth !< Water depth [(meters)] INTEGER(IntKi) :: NWaveElev !< Number of points where the incident wave elevations are computed (the XY grid point locations) [-] 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)] @@ -795,9 +795,9 @@ SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Db_Xferred = Db_Xferred + 1 OutData%WaveTp = REAL(ReKiBuf(Re_Xferred), SiKi) Re_Xferred = Re_Xferred + 1 - OutData%WtrDens = REAL(ReKiBuf(Re_Xferred), SiKi) + OutData%WtrDens = 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 OutData%NWaveElev = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 From fc92514b458387d025c01390656223d40c7bb05f Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Tue, 21 Dec 2021 09:10:54 -0700 Subject: [PATCH 023/338] Fixed broken WaveElevation data in Morison --- modules/hydrodyn/src/HydroDyn.f90 | 3 - modules/hydrodyn/src/HydroDyn_DriverCode.f90 | 3 - modules/hydrodyn/src/Morison.f90 | 24 +- modules/hydrodyn/src/Morison.txt | 2 - modules/hydrodyn/src/Morison_Types.f90 | 158 -------- modules/seastate/src/SeaState.f90 | 9 +- modules/seastate/src/SeaState.txt | 1 - modules/seastate/src/SeaState_DriverCode.f90 | 21 +- modules/seastate/src/SeaState_Types.f90 | 405 +++++++++++++++---- modules/seastate/src/Waves2.txt | 2 +- modules/seastate/src/Waves2_Types.f90 | 325 ++++++++++++++- 11 files changed, 690 insertions(+), 263 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index af2c6c66af..b8974e7f76 100644 --- a/modules/hydrodyn/src/HydroDyn.f90 +++ b/modules/hydrodyn/src/HydroDyn.f90 @@ -803,7 +803,6 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I InputFileData%Morison%WaveAcc => InitInp%WaveAcc InputFileData%Morison%WaveDynP => InitInp%WaveDynP InputFileData%Morison%WaveVel => InitInp%WaveVel - InputFileData%Morison%WaveElev => InitInp%WaveElev InputFileData%Morison%WaveElev1 => InitInp%WaveElev1 InputFileData%Morison%WaveElev2 => InitInp%WaveElev2 ! CALL MOVE_ALLOC( Waves_InitOut%nodeInWater,InputFileData%Morison%nodeInWater ) ! moved to Morison%p%nodeInWater in the init routine @@ -1209,7 +1208,6 @@ SUBROUTINE CleanUp() nullify(InputFileData%Morison%WaveAcc) nullify(InputFileData%Morison%WaveVel) nullify(InputFileData%Morison%WaveTime) - nullify(InputFileData%Morison%WaveElev) nullify(InputFileData%Morison%WaveElev1) nullify(InputFileData%Morison%WaveElev2) nullify(InputFileData%WAMIT%WaveElevC0) @@ -1280,7 +1278,6 @@ SUBROUTINE HydroDyn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) nullify(p%Morison%WaveDynP) nullify(p%Morison%WaveAcc) nullify(p%Morison%WaveVel) - nullify(p%Morison%WaveElev) nullify(p%Morison%WaveElev1) nullify(p%Morison%WaveElev2) do i = 1,p%NBody diff --git a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 index 0da07adfc7..f9e4240eac 100644 --- a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 +++ b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 @@ -279,7 +279,6 @@ PROGRAM HydroDynDriver InitInData%WaveElevC0 => InitOutData_SeaSt%WaveElevC0 CALL MOVE_ALLOC( InitOutData_SeaSt%WaveElevC, InitInData%WaveElevC ) InitInData%WaveDirArr => InitOutData_SeaSt%WaveDirArr - InitInData%WaveElev => InitOutData_SeaSt%WaveElev InitInData%WaveElev1 => InitOutData_SeaSt%WaveElev1 InitInData%WaveElev2 => InitOutData_SeaSt%WaveElev2 @@ -290,7 +289,6 @@ PROGRAM HydroDynDriver nullify(InitOutData_SeaSt%WaveTime) nullify(InitOutData_SeaSt%WaveElevC0) nullify(InitOutData_SeaSt%WaveDirArr) - nullify(InitOutData_SeaSt%WaveElev) nullify(InitOutData_SeaSt%WaveElev1) nullify(InitOutData_SeaSt%WaveElev2) @@ -392,7 +390,6 @@ PROGRAM HydroDynDriver nullify(InitInData%WaveAcc) nullify(InitInData%WaveVel) nullify(InitInData%WaveTime) - nullify(InitInData%WaveElev) nullify(InitInData%WaveElev1) nullify(InitInData%WaveElev2) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index c5393d4f2e..f0cce36f87 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -1889,7 +1889,11 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In p%OutSwtch = InitInp%OutSwtch p%MSL2SWL = InitInp%MSL2SWL p%WaveDisp = InitInp%WaveDisp - + p%WaveElev1 => InitInp%WaveElev1 + if (associated(InitInp%WaveElev2)) then + p%WaveElev2 => InitInp%WaveElev2 + end if + ALLOCATE ( p%MOutLst(p%NMOutputs), STAT = errStat ) IF ( errStat /= ErrID_None ) THEN errMsg = ' Error allocating space for MOutLst array.' @@ -2282,6 +2286,9 @@ SUBROUTINE AllocateNodeLoadVariables(InitInp, p, m, NNodes, errStat, errMsg ) 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%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) @@ -2384,7 +2391,6 @@ SUBROUTINE Morison_End( u, p, x, xd, z, OtherState, y, m, errStat, errMsg ) nullify(p%WaveDynP) nullify(p%WaveAcc) nullify(p%WaveVel) - nullify(p%WaveElev) nullify(p%WaveElev1) nullify(p%WaveElev2) CALL Morison_DestroyParam( p, errStat, errMsg ) @@ -2605,7 +2611,7 @@ 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 @@ -2647,6 +2653,18 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + + positionXY = (/pos1(1),pos1(2)/) + m%WaveElev1(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + + if (associated(p%WaveElev2)) then + m%WaveElev2(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%WaveElev(j) = m%WaveElev1(j) + m%WaveElev2(j) + else + m%WaveElev(j) = m%WaveElev1(j) + end if else m%FV(:,j) = 0.0 m%FA(:,j) = 0.0 diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index 1bc9039c3b..1e1175e271 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -253,7 +253,6 @@ typedef ^ ^ CHARACTER(1 typedef ^ ^ INTEGER UnOutFile - - - "" - typedef ^ ^ INTEGER UnSum - - - "" - typedef ^ ^ INTEGER NStepWave - - - "" - -typedef ^ ^ SiKi WaveElev {*}{*}{*} - - "Total wave elevation" - typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" - typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" - typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "" - @@ -342,7 +341,6 @@ typedef ^ ^ ReKi 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 WaveElev {*}{*}{*} - - "Total wave elevation" m typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" m typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" m typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "" - diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index d75a7d101a..0715c65c4b 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -316,7 +316,6 @@ MODULE Morison_Types INTEGER(IntKi) :: UnOutFile !< [-] INTEGER(IntKi) :: UnSum !< [-] INTEGER(IntKi) :: NStepWave !< [-] - REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev => NULL() !< Total wave elevation [-] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation [-] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [-] REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< [-] @@ -393,7 +392,6 @@ MODULE Morison_Types 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(:,:,:), POINTER :: WaveElev => NULL() !< Total wave elevation [m] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation [m] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [m] REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< [-] @@ -6131,22 +6129,6 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, DstInitInputData%UnOutFile = SrcInitInputData%UnOutFile DstInitInputData%UnSum = SrcInitInputData%UnSum DstInitInputData%NStepWave = SrcInitInputData%NStepWave -IF (ASSOCIATED(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) - i3_l = LBOUND(SrcInitInputData%WaveElev,3) - i3_u = UBOUND(SrcInitInputData%WaveElev,3) - IF (.NOT. ASSOCIATED(DstInitInputData%WaveElev)) THEN - ALLOCATE(DstInitInputData%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 DstInitInputData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstInitInputData%WaveElev = SrcInitInputData%WaveElev -ENDIF IF (ASSOCIATED(SrcInitInputData%WaveElev1)) THEN i1_l = LBOUND(SrcInitInputData%WaveElev1,1) i1_u = UBOUND(SrcInitInputData%WaveElev1,1) @@ -6346,10 +6328,6 @@ SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) IF (ALLOCATED(InitInputData%ValidOutList)) THEN DEALLOCATE(InitInputData%ValidOutList) ENDIF -IF (ASSOCIATED(InitInputData%WaveElev)) THEN - DEALLOCATE(InitInputData%WaveElev) - InitInputData%WaveElev => NULL() -ENDIF IF (ASSOCIATED(InitInputData%WaveElev1)) THEN DEALLOCATE(InitInputData%WaveElev1) InitInputData%WaveElev1 => NULL() @@ -6712,11 +6690,6 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_BufSz = Int_BufSz + 1 ! UnOutFile Int_BufSz = Int_BufSz + 1 ! UnSum Int_BufSz = Int_BufSz + 1 ! NStepWave - 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 ! WaveElev1 allocated yes/no IF ( ASSOCIATED(InData%WaveElev1) ) THEN Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension @@ -7344,31 +7317,6 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NStepWave Int_Xferred = Int_Xferred + 1 - 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. ASSOCIATED(InData%WaveElev1) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -8333,34 +8281,6 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat Int_Xferred = Int_Xferred + 1 OutData%NStepWave = 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 - 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 ! WaveElev1 not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -10697,22 +10617,6 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%AM_End = SrcParamData%AM_End ENDIF -IF (ASSOCIATED(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) - i3_l = LBOUND(SrcParamData%WaveElev,3) - i3_u = UBOUND(SrcParamData%WaveElev,3) - IF (.NOT. ASSOCIATED(DstParamData%WaveElev)) THEN - ALLOCATE(DstParamData%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 DstParamData%WaveElev.', ErrStat, ErrMsg,RoutineName) - RETURN - END IF - END IF - DstParamData%WaveElev = SrcParamData%WaveElev -ENDIF IF (ASSOCIATED(SrcParamData%WaveElev1)) THEN i1_l = LBOUND(SrcParamData%WaveElev1,1) i1_u = UBOUND(SrcParamData%WaveElev1,1) @@ -10928,10 +10832,6 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) IF (ALLOCATED(ParamData%AM_End)) THEN DEALLOCATE(ParamData%AM_End) ENDIF -IF (ASSOCIATED(ParamData%WaveElev)) THEN - DEALLOCATE(ParamData%WaveElev) - ParamData%WaveElev => NULL() -ENDIF IF (ASSOCIATED(ParamData%WaveElev1)) THEN DEALLOCATE(ParamData%WaveElev1) ParamData%WaveElev1 => NULL() @@ -11083,11 +10983,6 @@ 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 ! 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 ! WaveElev1 allocated yes/no IF ( ASSOCIATED(InData%WaveElev1) ) THEN Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension @@ -11445,31 +11340,6 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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. ASSOCIATED(InData%WaveElev1) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -12100,34 +11970,6 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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 ! WaveElev1 not allocated Int_Xferred = Int_Xferred + 1 ELSE diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index 6951383fe0..826ca4745d 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -847,12 +847,13 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! 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 + IF ( SIZE(p%WaveElev1,DIM=1) /= SIZE(p%Waves2%WaveElev2,DIM=1) .OR. & + SIZE(p%WaveElev1,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 + ELSE + InitOut%WaveElev2 => p%Waves2%WaveElev2 ! ! do k = 1, p%NGrid(2) ! do J=1, p%NGrid(1) @@ -1459,7 +1460,7 @@ SUBROUTINE SeaSt_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, Er WaveElev1(i) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - if (allocated(p%Waves2%WaveElev2)) then + if (associated(p%Waves2%WaveElev2)) then WaveElev2(i) = SeaSt_Interp_3D( Time, positionXY, p%Waves2%WaveElev2, p%seast_interp_p, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) WaveElev(i) = WaveElev1(i) + WaveElev2(i) diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index 3143f153c6..abcac618dc 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -91,7 +91,6 @@ typedef ^ ^ SiKi WaveVel #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 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 WaveElev {*}{*}{*} - - "Total wave elevation" - 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) diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 index a772d1faa7..1ab006c240 100644 --- a/modules/seastate/src/SeaState_DriverCode.f90 +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -227,6 +227,17 @@ program SeaStateDriver end if + ! Nullify these pointers because they are no longer needed + nullify(InitOutData%WaveDynP) + nullify(InitOutData%WaveAcc) + nullify(InitOutData%WaveVel) + nullify(InitOutData%WaveTime) + !nullify(InitOutData%WaveElevC0) + !nullify(InitOutData%WaveDirArr) + nullify(InitOutData%WaveElev) + nullify(InitOutData%WaveElev1) + nullify(InitOutData%WaveElev2) + ! Destroy initialization data call SeaSt_DestroyInitInput( InitInData, ErrStat, ErrMsg ) @@ -654,6 +665,7 @@ SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, S 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 integer(IntKi) :: i,j,k WaveElevFmt = "(F14.7,3x,F14.7,3x,F14.7)" @@ -700,8 +712,13 @@ SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, S 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) - write (WaveElevFileUn,WaveElevFmt, IOSTAT=ErrStatTmp ) xpos, ypos,SeaState_p%WaveElev(I,J,K) + ypos = -SeaState_p%deltaGrid(2)*(SeaState_p%NGrid(2)-1)/2.0 + (K-1)*SeaState_p%deltaGrid(2) + if (allocated(SeaState_p%Waves2%WaveElev2)) then + WaveElev = SeaState_p%WaveElev1(I,J,K) + SeaState_p%Waves2%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 diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 66e199ade6..3590e95ed6 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -108,7 +108,6 @@ MODULE SeaState_Types 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 :: 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 :: WaveElev => NULL() !< Total wave elevation [-] 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)] @@ -1624,22 +1623,6 @@ SUBROUTINE SeaSt_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, END IF DstInitOutputData%WaveVel = SrcInitOutputData%WaveVel 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 (ASSOCIATED(SrcInitOutputData%WaveElev1)) THEN i1_l = LBOUND(SrcInitOutputData%WaveElev1,1) i1_u = UBOUND(SrcInitOutputData%WaveElev1,1) @@ -1759,10 +1742,6 @@ SUBROUTINE SeaSt_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%WaveVel) InitOutputData%WaveVel => NULL() ENDIF -IF (ASSOCIATED(InitOutputData%WaveElev)) THEN - DEALLOCATE(InitOutputData%WaveElev) - InitOutputData%WaveElev => NULL() -ENDIF IF (ASSOCIATED(InitOutputData%WaveElev1)) THEN DEALLOCATE(InitOutputData%WaveElev1) InitOutputData%WaveElev1 => NULL() @@ -1904,11 +1883,6 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 ! 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 ! WaveElev1 allocated yes/no IF ( ASSOCIATED(InData%WaveElev1) ) THEN Int_BufSz = Int_BufSz + 2*3 ! WaveElev1 upper/lower bounds for each dimension @@ -2274,31 +2248,6 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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. ASSOCIATED(InData%WaveElev1) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -2807,34 +2756,6 @@ SUBROUTINE SeaSt_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 ! WaveElev1 not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -6052,5 +5973,331 @@ SUBROUTINE SeaSt_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE SeaSt_UnPackOutput + + SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 + REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs + TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + ELSE IF ( order .eq. 1 ) THEN + CALL SeaSt_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 SeaSt_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 SeaSt_Input_ExtrapInterp + + + SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 + TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 + REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs + TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_Input_ExtrapInterp1 + + + SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 + TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 + TYPE(SeaSt_InputType), INTENT(IN) :: u3 ! Input at t3 + REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs + TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_Input_ExtrapInterp2 + + + SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 + REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs + TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + ELSE IF ( order .eq. 1 ) THEN + CALL SeaSt_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 SeaSt_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 SeaSt_Output_ExtrapInterp + + + SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 + TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 + REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs + TYPE(SeaSt_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 = 'SeaSt_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 + CALL Waves2_Output_ExtrapInterp1( y1%Waves2, y2%Waves2, tin, y_out%Waves2, tin_out, ErrStat2, ErrMsg2 ) + CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) + END SUBROUTINE SeaSt_Output_ExtrapInterp1 + + + SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 + TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 + TYPE(SeaSt_OutputType), INTENT(IN) :: y3 ! Output at t3 + REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs + TYPE(SeaSt_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 = 'SeaSt_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 + 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) + END SUBROUTINE SeaSt_Output_ExtrapInterp2 + END MODULE SeaState_Types !ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/Waves2.txt b/modules/seastate/src/Waves2.txt index e185ca0b6c..3cf763d743 100644 --- a/modules/seastate/src/Waves2.txt +++ b/modules/seastate/src/Waves2.txt @@ -127,7 +127,7 @@ typedef ^ ^ INTEGER NWaveElev 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 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) diff --git a/modules/seastate/src/Waves2_Types.f90 b/modules/seastate/src/Waves2_Types.f90 index 398c9aef2e..64540db020 100644 --- a/modules/seastate/src/Waves2_Types.f90 +++ b/modules/seastate/src/Waves2_Types.f90 @@ -108,7 +108,7 @@ MODULE Waves2_Types 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 :: WaveElev2 !< 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(:,:,:), POINTER :: WaveElev2 => NULL() !< Instantaneous elevation time-series of incident waves at each of the NWaveElev points where the incident wave elevations can be output [(meters)] END TYPE Waves2_ParameterType ! ======================= ! ========= Waves2_InputType ======= @@ -2228,14 +2228,14 @@ SUBROUTINE Waves2_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrM DstParamData%NWaveElev = SrcParamData%NWaveElev DstParamData%NStepWave = SrcParamData%NStepWave DstParamData%NStepWave2 = SrcParamData%NStepWave2 -IF (ALLOCATED(SrcParamData%WaveElev2)) THEN +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. ALLOCATED(DstParamData%WaveElev2)) THEN + 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) @@ -2255,8 +2255,9 @@ SUBROUTINE Waves2_DestroyParam( ParamData, ErrStat, ErrMsg ) ! ErrStat = ErrID_None ErrMsg = "" -IF (ALLOCATED(ParamData%WaveElev2)) THEN +IF (ASSOCIATED(ParamData%WaveElev2)) THEN DEALLOCATE(ParamData%WaveElev2) + ParamData%WaveElev2 => NULL() ENDIF END SUBROUTINE Waves2_DestroyParam @@ -2302,7 +2303,7 @@ SUBROUTINE Waves2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Int_BufSz = Int_BufSz + 1 ! NStepWave Int_BufSz = Int_BufSz + 1 ! NStepWave2 Int_BufSz = Int_BufSz + 1 ! WaveElev2 allocated yes/no - IF ( ALLOCATED(InData%WaveElev2) ) THEN + 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 @@ -2345,7 +2346,7 @@ SUBROUTINE Waves2_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg Int_Xferred = Int_Xferred + 1 IntKiBuf(Int_Xferred) = InData%NStepWave2 Int_Xferred = Int_Xferred + 1 - IF ( .NOT. ALLOCATED(InData%WaveElev2) ) THEN + IF ( .NOT. ASSOCIATED(InData%WaveElev2) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 ELSE @@ -2426,7 +2427,7 @@ SUBROUTINE Waves2_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err i3_l = IntKiBuf( Int_Xferred ) i3_u = IntKiBuf( Int_Xferred + 1) Int_Xferred = Int_Xferred + 2 - IF (ALLOCATED(OutData%WaveElev2)) DEALLOCATE(OutData%WaveElev2) + 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) @@ -2693,5 +2694,315 @@ SUBROUTINE Waves2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Re_Xferred = Re_Xferred + 1 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 + ! 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 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' + ! 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 Waves2_Output_ExtrapInterp2 + END MODULE Waves2_Types !ENDOFREGISTRYGENERATEDFILE From ec32f76b9d4fc0d66e4362ed1ee5e8f431e44f37 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Tue, 21 Dec 2021 09:11:37 -0700 Subject: [PATCH 024/338] Fixed output handling for channels larger than 9 characters --- modules/hydrodyn/src/HydroDyn_Output.f90 | 4 ++-- modules/hydrodyn/src/Morison_Output.f90 | 8 ++++---- modules/seastate/src/SeaState_Output.f90 | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn_Output.f90 b/modules/hydrodyn/src/HydroDyn_Output.f90 index 18555c3afe..1ac8ce041c 100644 --- a/modules/hydrodyn/src/HydroDyn_Output.f90 +++ b/modules/hydrodyn/src/HydroDyn_Output.f90 @@ -1517,13 +1517,13 @@ FUNCTION HDOut_GetChannels ( NUserOutputs, UserOutputs, OutList, foundMask, CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) + Indx = IndexCharAry( OutListTmp(1:11), 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 ) + Indx = IndexCharAry( OutListTmp(1:11), ValidParamAry ) END IF IF ( Indx > 0 ) THEN diff --git a/modules/hydrodyn/src/Morison_Output.f90 b/modules/hydrodyn/src/Morison_Output.f90 index 7d4b2ae5f6..582e057454 100644 --- a/modules/hydrodyn/src/Morison_Output.f90 +++ b/modules/hydrodyn/src/Morison_Output.f90 @@ -9071,13 +9071,13 @@ FUNCTION GetMorisonChannels ( NUserOutputs, UserOutputs, OutList, foundMask CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) + Indx = IndexCharAry( OutListTmp(1:11), 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 ) + Indx = IndexCharAry( OutListTmp(1:11), ValidParamAry ) END IF IF ( Indx > 0 ) THEN @@ -9194,13 +9194,13 @@ SUBROUTINE MrsnOut_ChkOutLst( OutList, ValidOutList, y, p, ErrStat, ErrMsg ) CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) + Indx = IndexCharAry( OutListTmp(1:11), 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:11), ValidParamAry ) END IF IF ( Indx > 0 ) THEN diff --git a/modules/seastate/src/SeaState_Output.f90 b/modules/seastate/src/SeaState_Output.f90 index 03174486aa..be209bdbbb 100644 --- a/modules/seastate/src/SeaState_Output.f90 +++ b/modules/seastate/src/SeaState_Output.f90 @@ -812,13 +812,13 @@ FUNCTION SeaStOut_GetChannels ( NUserOutputs, UserOutputs, OutList, foundMa CALL Conv2UC( OutListTmp ) ! Convert OutListTmp to upper case - Indx = IndexCharAry( OutListTmp(1:9), ValidParamAry ) + Indx = IndexCharAry( OutListTmp(1:11), 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 ) + Indx = IndexCharAry( OutListTmp(1:11), ValidParamAry ) END IF IF ( Indx > 0 ) THEN From 4600072861d7306cf5b732eb4e0c1ba985735f0d Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 5 Jan 2022 09:57:50 -0700 Subject: [PATCH 025/338] Remove debugging print statement --- modules/seastate/src/SeaState_Input.f90 | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index a398876d28..7a3a2d085a 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -1334,7 +1334,6 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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 - print*,zpos do j = 0, p%NGrid(2)-1 ypos = -InputFileData%Y_HalfWidth + p%deltaGrid(2)*j do i= 0, p%NGrid(1)-1 From e397699681780ffed166b96d2ddcc56bb088b5a7 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 5 Jan 2022 09:59:10 -0700 Subject: [PATCH 026/338] Fix reporting of max/min wave elevations in output file WaveElev.out was not reporting the correct min/max values --- modules/seastate/src/SeaState_DriverCode.f90 | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 index 1ab006c240..f55b3b5d60 100644 --- a/modules/seastate/src/SeaState_DriverCode.f90 +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -234,7 +234,7 @@ program SeaStateDriver nullify(InitOutData%WaveTime) !nullify(InitOutData%WaveElevC0) !nullify(InitOutData%WaveDirArr) - nullify(InitOutData%WaveElev) + !nullify(InitOutData%WaveElev) nullify(InitOutData%WaveElev1) nullify(InitOutData%WaveElev2) @@ -665,7 +665,7 @@ SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, S 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 + real(SiKi) :: WaveElev,minWaveVal,maxWaveVal integer(IntKi) :: i,j,k WaveElevFmt = "(F14.7,3x,F14.7,3x,F14.7)" @@ -685,6 +685,14 @@ SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, S 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()//'.' @@ -700,8 +708,8 @@ SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, S 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(MAXVAL(SeaState_p%WaveElev))) - write (WaveElevFileUn,'(A)', IOSTAT=ErrStatTmp ) '# MinWaveElev = '//TRIM(Num2LStr(MINVAL(SeaState_p%WaveElev))) + 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 @@ -713,7 +721,7 @@ SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, S 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 (allocated(SeaState_p%Waves2%WaveElev2)) then + if (associated(SeaState_p%Waves2%WaveElev2)) then WaveElev = SeaState_p%WaveElev1(I,J,K) + SeaState_p%Waves2%WaveElev2(I,J,K) else WaveElev = SeaState_p%WaveElev1(I,J,K) From 903ebb2639f05d139ccbe3bf0c88cd254217eb49 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 5 Jan 2022 10:01:19 -0700 Subject: [PATCH 027/338] Implemented SeaState outputs via the glue-code --- modules/openfast-library/src/FAST_Subs.f90 | 54 ++++++++++++++++------ 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 1abbc22542..782db97cbc 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -914,7 +914,6 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, 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%WaveElev => Init%OutData_SeaSt%WaveElev Init%InData_HD%WaveElev1 => Init%OutData_SeaSt%WaveElev1 Init%InData_HD%WaveElev2 => Init%OutData_SeaSt%WaveElev2 @@ -933,7 +932,6 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, nullify(Init%OutData_SeaSt%WaveTime) nullify(Init%OutData_SeaSt%WaveElevC0) nullify(Init%OutData_SeaSt%WaveDirArr) - nullify(Init%OutData_SeaSt%WaveElev) nullify(Init%OutData_SeaSt%WaveElev1) nullify(Init%OutData_SeaSt%WaveElev2) @@ -996,7 +994,6 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, nullify(Init%InData_HD%WaveAcc) nullify(Init%InData_HD%WaveVel) nullify(Init%InData_HD%WaveTime) - nullify(Init%InData_HD%WaveElev) nullify(Init%InData_HD%WaveElev1) nullify(Init%InData_HD%WaveElev2) @@ -2064,6 +2061,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) @@ -2139,6 +2137,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) @@ -4062,13 +4066,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 @@ -4083,6 +4087,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 @@ -4128,6 +4133,11 @@ SUBROUTINE FAST_Solution0(p_FAST, y_FAST, m_FAST, ED, BD, SrvD, AD14, AD, IfW, O IF ( p_FAST%CompServo == Module_SrvD ) CALL SrvD_SetExternalInputs( p_FAST, m_FAST, SrvD%Input(1) ) IF ( p_FAST%CompInflow == Module_IfW ) CALL IfW_SetExternalInputs( IfW%p, m_FAST, ED%y, IfW%Input(1) ) + if ( P_FAST%CompSeaSt == Module_SeaSt ) then + 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 ) @@ -4142,7 +4152,7 @@ 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 @@ -4636,13 +4646,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 @@ -4660,6 +4670,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 @@ -4884,6 +4895,10 @@ 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 + if ( P_FAST%CompSeaSt == Module_SeaSt ) then + 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 ! HydroDyn: copy final predictions to actual states IF ( p_FAST%CompHydro == Module_HD ) THEN @@ -4996,7 +5011,7 @@ 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 ) @@ -5033,7 +5048,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 @@ -5048,6 +5063,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 @@ -5075,7 +5091,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 @@ -5091,7 +5107,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 @@ -5107,6 +5123,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 @@ -5131,7 +5148,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 @@ -5192,7 +5209,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) @@ -5200,7 +5217,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 @@ -5211,6 +5228,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 @@ -5280,6 +5298,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 From 79589c7479f57962b7fd46927529e9813834c136 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Tue, 18 Jan 2022 12:47:02 -0700 Subject: [PATCH 028/338] Bug fix for Max/Min WaveElevation Ouputs --- modules/seastate/src/SeaState_DriverCode.f90 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 index f55b3b5d60..5aae59ea32 100644 --- a/modules/seastate/src/SeaState_DriverCode.f90 +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -685,9 +685,9 @@ SUBROUTINE WaveElevGrid_Output (drvrInitInp, SeaStateInitInp, SeaStateInitOut, S 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) + if (associated(SeaState_p%Waves2%WaveElev2)) then + maxWaveVal = MAXVAL(SeaState_p%WaveElev1+SeaState_p%Waves2%WaveElev2) + minWaveVal = MINVAL(SeaState_p%WaveElev1+SeaState_p%Waves2%WaveElev2) else maxWaveVal = MAXVAL(SeaState_p%WaveElev1) minWaveVal = MINVAL(SeaState_p%WaveElev1) From 9d14af70a68eee80d1483df0b046c447d6544300 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 19 Jan 2022 10:37:43 -0700 Subject: [PATCH 029/338] vs-build bug fixe: Added new SeaState project --- vs-build/SeaState/SeaStateDriver.sln | 37 +++ vs-build/SeaState/SeaStateDriver.vfproj | 347 ++++++++++++++++++++++++ 2 files changed, 384 insertions(+) create mode 100644 vs-build/SeaState/SeaStateDriver.sln create mode 100644 vs-build/SeaState/SeaStateDriver.vfproj 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..b8c27199ed --- /dev/null +++ b/vs-build/SeaState/SeaStateDriver.vfproj @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 25ddb8dfaaa76704f34ce6bc2c814f1eecb2f5ea Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Thu, 20 Jan 2022 00:13:00 -0700 Subject: [PATCH 030/338] Added the Constrained NewWave feature to SeaState. --- modules/seastate/src/SeaState.txt | 4 +- modules/seastate/src/SeaState_Input.f90 | 241 +++++----- modules/seastate/src/Waves.f90 | 559 ++++++++++++++---------- modules/seastate/src/Waves.txt | 7 +- modules/seastate/src/Waves_Types.f90 | 35 ++ 5 files changed, 521 insertions(+), 325 deletions(-) diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index abcac618dc..1f5c61e1d6 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -21,7 +21,7 @@ usefrom SeaState_Interp.txt # param SeaState/SeaSt unused INTEGER MaxSeaStOutputs - 90 - "The maximum number of output channels supported by this module" - # -typedef SeaState/SeaSt SeaSt_InputFile LOGICAL EchoFlag - - - "Echo the input file" +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 @@ -194,4 +194,4 @@ typedef ^ InputType SiKi Dum # ..... Outputs ................................................................................................................... # Define outputs that are contained on the mesh here: typedef ^ OutputType ReKi WriteOutput {:} - - "Outputs to be written to the output file(s)" - -typedef ^ ^ Waves2_OutputType Waves2 - - - "Waves2 module outputs" - \ No newline at end of file +typedef ^ ^ Waves2_OutputType Waves2 - - - "Waves2 module outputs" - diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 7a3a2d085a..b1e89a73f1 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -15,7 +15,7 @@ ! 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 @@ -27,30 +27,30 @@ module SeaState_Input implicit none contains - + !==================================================================================================== SUBROUTINE PrintBadChannelWarning(NUserOutputs, UserOutputs , foundMask, ErrStat, ErrMsg ) ! The routine prints out warning messages if the user has requested invalid output channel names ! The errstat is set to ErrID_Warning if any element in foundMask is .FALSE. -!---------------------------------------------------------------------------------------------------- +!---------------------------------------------------------------------------------------------------- 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( IN ) :: UserOutputs (:) ! An array holding the names of the requested output channels. LOGICAL, INTENT( IN ) :: foundMask (:) ! A mask indicating whether a user requested channel belongs to a module's output channels. - INTEGER, INTENT( OUT ) :: ErrStat ! returns a non-zero value when an error occurs + 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 - + ErrStat = ErrID_None ErrMsg = '' - + DO I = 1, NUserOutputs IF (.NOT. foundMask(I)) THEN - ErrMsg = ' A requested output channel is invalid' + ErrMsg = ' A requested output channel is invalid' CALL ProgWarn( 'The requested output channel is invalid: ' // UserOutputs(I) ) ErrStat = ErrID_Warn END IF END DO - + END SUBROUTINE PrintBadChannelWarning !==================================================================================================== @@ -88,13 +88,13 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, real(ReKi) :: tmp ! Initialize local data UnEc = -1 - ErrStat = ErrID_None - ErrMsg = "" + ErrStat = ErrID_None + ErrMsg = "" InputFileData%Echo = .FALSE. ! initialize for error handling (cleanup() routine) - + !------------------------------------------------------------------------------------------------- - ! General settings + ! General settings !------------------------------------------------------------------------------------------------- CurLine = 3 ! Skip the first three lines as they are known to be header lines and separators @@ -140,19 +140,19 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, !------------------------------------------------------------------------------------------------- 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. + + ! 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; @@ -205,14 +205,14 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, 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). + ! 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). + ! 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; @@ -287,7 +287,7 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, if (Failed()) return; !------------------------------------------------------------------------------------------------- - ! Data section for 2nd Order Waves + ! 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 @@ -316,6 +316,41 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, 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 @@ -400,7 +435,7 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, ! 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; @@ -428,7 +463,7 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, 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; @@ -440,22 +475,22 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, ! 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%UserOutputs, MaxSeaStOutputs, 'InputFileData%UserOutputs', ErrStat2, ErrMsg2 ) ! MaxUserOutputs is set in registry + call AllocAry( InputFileData%UserOutputs, MaxSeaStOutputs, 'InputFileData%UserOutputs', ErrStat2, ErrMsg2 ) ! MaxUserOutputs is set in registry if (Failed()) return; - + call ReadOutputListFromFileInfo( FileInfo_In, CurLine, InputFileData%UserOutputs, & InputFileData%NUserOutputs, 'OutList', "List of user-requested output channels", ErrStat2, ErrMsg2, UnEc ) if (Failed()) return; - + contains !.............................. logical function Failed() @@ -506,23 +541,23 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E real(ReKi) :: lvec(3) logical, allocatable :: foundMask(:) integer :: WaveModIn - + integer(IntKi) :: ErrStat2, IOS character(ErrMsgLen) :: ErrMsg2 character(*), parameter :: RoutineName = 'SeaStateInput_ProcessInitData' ! Initialize ErrStat - - ErrStat = ErrID_None + + ErrStat = ErrID_None ErrStat2 = ErrID_None - ErrMsg = "" + ErrMsg = "" ErrMsg2 = "" - - + + !------------------------------------------------------------------------- ! Check environmental conditions !------------------------------------------------------------------------- - + ! WtrDens - Water density. if ( InputFileData%Waves%WtrDens < 0.0 ) then @@ -532,10 +567,10 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! 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 @@ -545,23 +580,23 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! ! MSL2SWL - Mean sea level to still water level ! !if ( InputFileData%PotMod == 1 .AND. .NOT. EqualRealNos(InputFileData%MSL2SWL, 0.0_ReKi) ) then - ! call SetErrStat( ErrID_Fatal,'MSL2SWL must be 0 when PotMod = 1 (WAMIT).',ErrStat,ErrMsg,RoutineName) + ! call SetErrStat( ErrID_Fatal,'MSL2SWL must be 0 when PotMod = 1 (WAMIT).',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) !TODO: I'm not sure we want to offset this grid depth value. Check with Jason. !InputFileData%Z_Depth = InputFileData%Z_Depth + InputFileData%MSL2SWL @@ -569,7 +604,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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) @@ -587,7 +622,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E call SetErrStat( ErrID_Fatal,'NZ must be greater than or equal to 2.',ErrStat,ErrMsg,RoutineName) return end if - + ! WaveMod - Wave kinematics model switch. @@ -599,7 +634,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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 @@ -615,12 +650,12 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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) - + !TODO: THese tests need to be done by HD GJH 7/11/21 if ( WaveModIn < 0 .OR. WaveModIn > 6 ) then call SetErrStat( ErrID_Fatal,'WaveMod must be 0, 1, 1P#, 2, 3, 4, 5, or 6.',ErrStat,ErrMsg,RoutineName) @@ -640,10 +675,10 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! (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 @@ -654,7 +689,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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.' @@ -669,8 +704,8 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! ! ! ! return ! !end if - ! - ! + ! + ! ! !else !don't use this one ! @@ -690,7 +725,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! 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. if ( .NOT. EqualRealNos(InputFileData%Waves%WaveTMax, 0.0_DbKi) ) then call WrScr( ' Setting WaveTMax to 0.0 since WaveMod = 0' ) @@ -709,7 +744,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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 + end if ! WaveDT - Time step for incident wave calculations @@ -720,7 +755,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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 @@ -796,26 +831,26 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! 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 - InputFileData%Waves%WvHiCOff = MIN( REAL( Pi/InputFileData%Waves%WaveDT,SiKi), InputFileData%Waves%WvHiCOff ) + 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 - + !TODO: THis needs to be done by HD : Does that mean the WvLowCOff and WvHiCOff need to be InitOut now? ! ! Copy over the first order frequency limits to the WAMIT2 module which needs them. !InputFileData%WAMIT2%WvLowCOff = InputFileData%Waves%WvLowCOff @@ -856,7 +891,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ENDIF - ! Check to see if the for some reason the wave direction spreading range is set to zero. If it is, + ! 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) @@ -907,7 +942,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! 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 + 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 @@ -933,7 +968,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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. @@ -944,7 +979,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E InputFileData%Waves%WvKinFile = TRIM(TmpPath)//TRIM(InputFileData%Waves%WvKinFile) end if end if - + #else InputFileData%Waves%WvKinFile = "" InputFileData%Waves%WriteWvKin = .FALSE. @@ -976,12 +1011,12 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E return end if - ! Check that the order given makes sense. + ! 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 @@ -991,7 +1026,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E return end if - ! Check that the order given makes sense. + ! 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 @@ -1009,7 +1044,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E !------------------------------------------------------------------------- ! Check Current section !------------------------------------------------------------------------- - + ! CurrMod - Current profile model switch @@ -1161,19 +1196,19 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! check for linearization !.................. !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 @@ -1181,7 +1216,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! 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 - ! + ! ! if ( (InputFileData%WAMIT%ExctnMod == 1) ) then ! call SetErrStat( ErrID_Fatal, 'Cannot set wave excitation model to DFT for linearization. Set ExctnMod=0 or 2.', ErrStat, ErrMsg, RoutineName ) ! end if @@ -1189,7 +1224,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! if ( InputFileData%WAMIT%RdtnMod == 1 ) then ! call SetErrStat( ErrID_Fatal, 'Cannot set wave radiation model to convolution for linearization. Set RdtnMod=0 or 2.', ErrStat, ErrMsg, RoutineName ) ! end if - ! + ! ! if ( InputFileData%WAMIT2%MnDrift /= 0 ) then ! call SetErrStat( ErrID_Fatal, 'Mean-drift 2nd-order forces cannot be used for linearization. Set MnDrift=0.', ErrStat, ErrMsg, RoutineName ) ! end if @@ -1197,7 +1232,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! if ( InputFileData%WAMIT2%NewmanApp /= 0 ) then ! call SetErrStat( ErrID_Fatal, "Mean- and slow-drift 2nd-order forces computed with Newman's approximation cannot be used for linearization. Set NewmanApp=0.", ErrStat, ErrMsg, RoutineName ) ! end if - ! + ! ! if ( InputFileData%WAMIT2%DiffQTF /= 0 ) then ! call SetErrStat( ErrID_Fatal, 'Full difference-frequency 2nd-order forces computed with full QTF cannot be used for linearization. Set DiffQTF=0.', ErrStat, ErrMsg, RoutineName ) ! end if @@ -1207,7 +1242,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! end if ! !end if - + !------------------------------------------------------------------------------------------------- @@ -1241,27 +1276,27 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ALLOCATE ( foundMask(InputFileData%NUserOutputs) , STAT = ErrStat2 ) if ( ErrStat2 /= ErrID_None ) then call SetErrStat( ErrID_Fatal,'Error allocating space for temporary array: foundMask in the HydroDynInput_GetInput subroutine.',ErrStat,ErrMsg,RoutineName) - + return end if foundMask = .FALSE. - + ! Attach remaining items to the SeaState list !foundMask = .FALSE. call Allocary(InputFileData%OutList, InputFileData%NUserOutputs, "InputFileData%OutList", ErrStat2, ErrMsg2 ); call SetErrStat(ErrStat2,ErrMsg2,ErrStat,ErrMsg,RoutineName) InputFileData%NumOuts = SeaStOut_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) - + end if ! Now that we have the sub-lists organized, lets do some additional validation. - - - - + + + + !---------------------------------------------------------- ! Populate data in sub-types from parent or other module types @@ -1269,19 +1304,19 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! 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. - - + InputFileData%Current%WtrDpth = InputFileData%Waves%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). - - + + !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 @@ -1315,7 +1350,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E call SetErrStat( ErrID_Fatal,'Error allocating space for WaveKinzi array.',ErrStat,ErrMsg,RoutineName) return end if - + ALLOCATE ( InputFileData%Waves%WaveElevxi(InputFileData%Waves%NWaveElev), STAT = ErrStat2 ) if ( ErrStat2 /= ErrID_None ) then call SetErrStat( ErrID_Fatal,'Error allocating space for WaveElevxi array.',ErrStat,ErrMsg,RoutineName) @@ -1326,7 +1361,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E call SetErrStat( ErrID_Fatal,'Error allocating space for WaveElevyi array.',ErrStat,ErrMsg,RoutineName) return end if - + ! Generate grid points p%deltaGrid(1) = InputFileData%X_HalfWidth/(InputFileData%NX) p%deltaGrid(2)= InputFileData%Y_HalfWidth/(InputFileData%NY) @@ -1336,14 +1371,14 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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 + do i= 0, p%NGrid(1)-1 xpos = -InputFileData%X_HalfWidth + p%deltaGrid(1)*i InputFileData%Waves%WaveKinxi(count) = xpos ! xi-coordinates for points where the incident wave kinematics will be computed; InputFileData%Waves%WaveKinyi(count) = ypos ! yi-coordinates for points where the incident wave kinematics will be computed; - - InputFileData%Waves%WaveKinzi(count) = zpos ! zi-coordinates for points where the incident wave kinematics will be computed; + + InputFileData%Waves%WaveKinzi(count) = zpos ! zi-coordinates for points where the incident wave kinematics will be computed; InputFileData%Current%WaveKinzi(count) = InputFileData%Waves%WaveKinzi(count) - + if ( k == 0 ) then InputFileData%Waves%WaveElevxi(count) = xpos ! xi-coordinates for points where the incident wave kinematics will be computed; InputFileData%Waves%WaveElevyi(count) = ypos ! yi-coordinates for points where the incident wave kinematics will be computed; @@ -1352,7 +1387,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E end do end do end do - + ! Waves2 ! If we are using the Waves module, the node information must be copied over. @@ -1369,10 +1404,10 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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 + if ( ErrStat >= AbortErrLev ) return InputFileData%Waves2%WaveElevxi = InputFileData%Waves%WaveElevxi InputFileData%Waves2%WaveElevyi = InputFileData%Waves%WaveElevyi - + 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) @@ -1398,4 +1433,4 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E end subroutine SeaStateInput_ProcessInitData -end module SeaState_Input \ No newline at end of file +end module SeaState_Input diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 8385d8a979..70d24f75ca 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -1,5 +1,5 @@ !********************************************************************************************************************************** -! The Waves and Waves_Types modules make up a template for creating user-defined calculations in the FAST Modularization +! 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 @@ -18,34 +18,34 @@ ! 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 Waves_Types USE UserWaves USE NWTC_Library USE NWTC_FFTPACK USE NWTC_RandomNumber - + IMPLICIT NONE - + PRIVATE TYPE(ProgDesc), PARAMETER :: Waves_ProgDesc = ProgDesc( 'Waves', '', '' ) - + ! ..... 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:: 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:: UserWaveSpctrm PRIVATE:: StillWaterWaves_Init PRIVATE:: VariousWaves_Init ! PRIVATE:: WhiteNoiseWaves_Init @@ -100,7 +100,7 @@ FUNCTION WavePkShpDefault ( Hs, Tp ) RETURN END FUNCTION WavePkShpDefault - + !======================================================================= FUNCTION BoxMuller ( RNGType, NDAmp, Phase ) @@ -135,7 +135,7 @@ FUNCTION BoxMuller ( RNGType, NDAmp, Phase ) CALL UniformRandomNumbers(RNGType, U1) END DO CALL UniformRandomNumbers(RNGType, U2) - + ! Compute intermediate variables: IF ( NDAmp ) THEN ! Normally-distributed amplitudes @@ -143,7 +143,7 @@ FUNCTION BoxMuller ( RNGType, NDAmp, Phase ) 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 @@ -370,11 +370,11 @@ FUNCTION WaveNumber ( Omega, g, h ) 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: ! @@ -495,7 +495,7 @@ FUNCTION COTH ( X ) RETURN END FUNCTION COTH - + !======================================================================= FUNCTION SINHNumOvrSINHDen ( k, h, z ) @@ -541,30 +541,30 @@ FUNCTION SINHNumOvrSINHDen ( k, h, z ) RETURN END FUNCTION SINHNumOvrSINHDen - - + + !---------------------------------------------------------------------------------------------------------------------------------- -SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) +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 + + 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 - + ! Initialize ErrStat - - ErrStat = ErrID_None + + ErrStat = ErrID_None ErrStatTmp = ErrID_None - ErrMsg = "" - - + ErrMsg = "" + + ! Initialize everything to zero: InitOut%NStepWave = 2 ! We must have at least two elements in order to interpolate later on @@ -588,7 +588,7 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ALLOCATE ( InitOut%WaveAcc (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%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') - + !ALLOCATE ( InitOut%PWaveDynP0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStatTmp ) !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveDynP0.', ErrStat,ErrMsg,'VariousWaves_Init') ! @@ -597,15 +597,15 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! !ALLOCATE ( InitOut%PWaveAcc0 (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%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,'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 + + + 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 @@ -619,22 +619,22 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) InitOut%WaveVel = 0.0 InitOut%WaveAcc = 0.0 InitOut%WaveDirArr = 0.0 - - + + ! Add the current velocities to the wave velocities: - + count = 1 - + !DO J = 1,InitInp%NWaveKin ! 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) + do i = 1, InitInp%NGrid(1) InitOut%WaveVel(:,i,j,k,1) = InitInp%CurrVxi(count) ! xi-direction InitOut%WaveVel(:,i,j,k,2) = InitInp%CurrVyi(count) ! yi-direction IF ( InitInp%WaveKinzi(count) >= -InitInp%WtrDpth .AND. InitInp%WaveKinzi(count) <= 0 ) THEN - + InitOut%nodeInWater(:,count) = 1 ELSE InitOut%nodeInWater(:, count) = 0 @@ -642,7 +642,7 @@ SUBROUTINE StillWaterWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) end do end do end do - + ! END DO ! J - All points where the incident wave kinematics will be computed END SUBROUTINE StillWaterWaves_Init @@ -650,28 +650,28 @@ 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 +! 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 + 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 :: 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) @@ -701,7 +701,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !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 :: 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 ) @@ -764,12 +764,12 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 :: primeCount ! Counter for locations before applying stretching - 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) + 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. + 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 + ! 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 @@ -778,32 +778,49 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 :: 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 + ! 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), ALLOCATABLE :: WaveS1SddArr(:) !< One-sided power spectral density of the wave spectrum at all non-negative frequencies (m^2/(rad/s)) + REAL(SiKi), ALLOCATABLE :: WaveElevC0Re(:) !< Real part of the partially modified wave DFT amplitude (m) + REAL(SiKi), ALLOCATABLE :: OmegaArr(:) !< Array of all non-negative angular frequencies (rad/s) + REAL(SiKi), ALLOCATABLE :: tmpArr(:) !< A temporary array of real numbers of constrained wave (-) + + ! 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 + + ErrStat = ErrID_None ErrStatTmp = ErrID_None - ErrMsg = "" + 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 - + @@ -832,7 +849,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 @@ -858,20 +875,20 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 + WaveKinPrimeMap(I) = J I = I + 1 - + END IF - + END DO ! J - All points where the incident wave kinematics will be computed without stretching @@ -896,7 +913,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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. @@ -944,7 +961,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! alternative elevations [indicated here by the NWaveKin0Prime-element ! array WaveKinzi0Prime(:)]: - + @@ -969,7 +986,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! = 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.' @@ -981,7 +998,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN - END IF + END IF ! We'll just populate this with odd seeds = Seed(1) and even seeds = Seed(2) DO I = 1,nSeeds,2 @@ -990,16 +1007,16 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 - + 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 @@ -1018,11 +1035,11 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 + 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. @@ -1087,10 +1104,10 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev.', ErrStat,ErrMsg,'VariousWaves_Init') - + ALLOCATE ( InitOut%WaveElevC (2,0:InitOut%NStepWave2,InitInp%NGrid(1)*InitInp%NGrid(2) ), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElevC.', 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') @@ -1133,8 +1150,8 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !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') -!TODO: These InitOut arrays now need to be organized for the grid points - +!TODO: These InitOut arrays now need to be organized for the grid points + ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP.', ErrStat,ErrMsg,'VariousWaves_Init') @@ -1143,7 +1160,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ALLOCATE ( InitOut%WaveAcc (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%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') - + !ALLOCATE ( InitOut%PWaveDynP0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStatTmp ) !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveDynP0.', ErrStat,ErrMsg,'VariousWaves_Init') ! @@ -1170,25 +1187,37 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! !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') - -! END TODO SECTION + +! END TODO SECTION 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 + + ! 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. + ! 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') + ! 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,'VariousWaves_Init') + + ALLOCATE ( WaveElevC0Re( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElevC0Re.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( OmegaArr( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array OmegaArr.', ErrStat,ErrMsg,'VariousWaves_Init') - ! Now check if all the allocations worked properly + ALLOCATE ( tmpArr( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array tmpArr.', ErrStat,ErrMsg,'VariousWaves_Init') + + ! Now check if all the allocations worked properly IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN @@ -1201,15 +1230,15 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 @@ -1244,7 +1273,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !! 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 @@ -1313,7 +1342,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 '// & @@ -1324,7 +1353,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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) @@ -1403,7 +1432,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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') @@ -1433,7 +1462,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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_. @@ -1470,13 +1499,13 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 @@ -1550,19 +1579,22 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 + ELSE ! All other Omega WaveS1Sdd = JONSWAP ( Omega, InitInp%WaveHs, InitInp%WaveTp, InitInp%WavePkShp ) END IF + ! Save Omega and WaveS1Sdd for constrained wave + OmegaArr(I) = Omega + WaveS1SddArr(I) = WaveS1Sdd 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 = 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 + WaveS1Sdd = 0.0 + ELSE CALL UserWaveSpctrm ( Omega, InitInp%WaveDir, InitInp%DirRoot, WaveS1Sdd ) END IF @@ -1577,7 +1609,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ENDIF ELSE ! All other wave cases - + ! Compute the two-sided power spectral density of the wave spectrum per unit ! time: @@ -1681,10 +1713,95 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ENDIF ! Multi-directional waves in use. - ! Set the CosWaveDir and SinWaveDir arrays + ! Set the CosWaveDir and SinWaveDir arrays CosWaveDir=COS(D2R*InitOut%WaveDirArr) SinWaveDir=SIN(D2R*InitOut%WaveDirArr) + !-------------------------------------------------------------------------------- + !=== 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 + ! 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) + + 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 + + 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,'VariousWaves_Init') + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + ! 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,'VariousWaves_Init') + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + ! 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 + Omega = I * InitOut%WaveDOmega + WaveNmbr = WaveNumber ( Omega, InitInp%Gravity, InitInp%WtrDpth ) + ConstWavePhase = WaveNmbr*(CosWaveDir(I)*InitInp%CrestXi + & + SinWaveDir(I)*InitInp%CrestYi) - & + Omega*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) = IMAG(tmpComplex) + END DO + ENDIF + ! End of Constrained Wave !-------------------------------------------------------------------------------- !> ## Compute IFFTs @@ -1694,21 +1811,21 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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: + ! 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 @@ -1718,23 +1835,23 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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) ) - + + 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 @@ -1748,14 +1865,12 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 @@ -1768,7 +1883,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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: @@ -1778,8 +1893,8 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) CALL CleanUp() RETURN END IF - - + + 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 @@ -1801,7 +1916,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) - + ! 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 ) @@ -1831,7 +1946,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 @@ -1861,9 +1976,9 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! RETURN ! END IF ! - !END DO ! J - All points where the incident wave kinematics will be computed without stretching -!=================================== - + !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') @@ -1878,7 +1993,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 + ! 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. @@ -1921,14 +2036,14 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! InitOut%PWaveDynP0(:,:,:,:) = 0.0 ! InitOut%PWaveVel0 (:,:,:,:,:) = 0.0 ! InitOut%PWaveAcc0 (:,:,:,:,:) = 0.0 - + primeCount = 1 count = 1 !DO J = 1,InitInp%NWaveKin ! 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 @@ -1939,7 +2054,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) InitOut%WaveDynP(:,i,j,k ) = 0.0 InitOut%WaveVel (:,i,j,k,:) = 0.0 - InitOut%WaveAcc (:,i,j,k,:) = 0.0 + InitOut%WaveAcc (:,i,j,k,:) = 0.0 ELSE ! The elevation of the point defined by WaveKinzi(J) must lie between the seabed and the mean sea level (inclusive) @@ -1957,7 +2072,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) end do end do end do - + ! END DO ! J - All points where the incident wave kinematics will be computed ! CASE ( 1 ) ! Vertical stretching. @@ -1967,7 +2082,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! equal the wave kinematics at the mean sea level. The wave kinematics ! below the mean sea level are left unchanged: - + @@ -1979,7 +2094,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! sea level to find the wave kinematics above the mean sea level. The ! wave kinematics below the mean sea level are left unchanged: - + @@ -2001,7 +2116,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! computed without stretching to the desired elevations (defined in the ! WaveKinzi(:) array) using the WaveKinzi0St(:) array: - + ! ENDSELECT @@ -2018,7 +2133,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) CALL CleanUp ( ) - + CONTAINS @@ -2049,7 +2164,7 @@ SUBROUTINE WaveElevTimeSeriesAtXY(Xcoord,Ycoord, WaveElevAtXY, WaveElevCAtXY, Er 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 to InitOut%WaveElev.',ErrStatLcl,ErrMsgLcl,'WaveElevTimeSeriesAtXY') !TODO: Why is tmpComplexArr 0:NStepWave2 long? why not NStepWave2-1 ?? GJH @@ -2106,6 +2221,12 @@ SUBROUTINE CleanUp( ) IF (ALLOCATED( WaveVelC0V )) DEALLOCATE( WaveVelC0V, STAT=ErrStatTmp) IF (ALLOCATED( WvSpreadThetaIdx )) DEALLOCATE( WvSpreadThetaIdx, STAT=ErrStatTmp) IF (ALLOCATED( tmpComplexArr )) DEALLOCATE( tmpComplexArr, STAT=ErrStatTmp) + + IF (ALLOCATED( WaveS1SddArr )) DEALLOCATE( WaveS1SddArr, STAT=ErrStatTmp) + IF (ALLOCATED( WaveElevC0Re )) DEALLOCATE( WaveElevC0Re, STAT=ErrStatTmp) + IF (ALLOCATED( OmegaArr )) DEALLOCATE( OmegaArr, STAT=ErrStatTmp) + IF (ALLOCATED( tmpArr )) DEALLOCATE( tmpArr, STAT=ErrStatTmp) + RETURN END SUBROUTINE CleanUp @@ -2117,7 +2238,7 @@ END SUBROUTINE VariousWaves_Init !---------------------------------------------------------------------------------------------------------------------------------- -!> 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 Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, InitOut, ErrStat, ErrMsg ) @@ -2125,89 +2246,89 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init 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_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; + 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 + 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 + !! 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 + + ErrStat = ErrID_None ErrStatTmp = ErrID_None - ErrMsg = "" + 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 + + ! 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') 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. + ! 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 @@ -2224,7 +2345,7 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init !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') ! @@ -2237,8 +2358,8 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init !IF ( ErrStat >= AbortErrLev ) RETURN ! ! ! Copy the init output arrays into the MSL versions - !InitOut%WaveDynP0 = InitOut%WaveDynP - !InitOut%WaveAcc0 = InitOut%WaveAcc + !InitOut%WaveDynP0 = InitOut%WaveDynP + !InitOut%WaveAcc0 = InitOut%WaveAcc !InitOut%WaveVel0 = InitOut%WaveVel ! ! ! Reset the zi locations @@ -2248,20 +2369,20 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init !DEALLOCATE( InitOut%WaveDynP ) !DEALLOCATE( InitOut%WaveAcc ) !DEALLOCATE( InitOut%WaveVel ) - !DEALLOCATE( InitOut%WaveElevC0) - !DEALLOCATE( InitOut%WaveDirArr) + !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 + + ! 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. - + + 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') @@ -2272,15 +2393,15 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,'Waves_Init') IF ( ErrStat >= AbortErrLev ) RETURN - - CASE ( 6 ) ! User-supplied wave kinematics data. - + + 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 @@ -2290,9 +2411,9 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init OtherState%DummyOtherState = 0 m%DummyMiscVar = 0 y%DummyOutput = 0.0 - - - + + + END SUBROUTINE Waves_Init @@ -2302,13 +2423,13 @@ 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_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_OtherStateType), INTENT(INOUT) :: OtherState !< Other states TYPE(Waves_OutputType), INTENT(INOUT) :: y !< System outputs - TYPE(Waves_MiscVarType), INTENT(INOUT) :: m !< Misc/optimization variables + 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 @@ -2318,32 +2439,32 @@ SUBROUTINE Waves_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) CHARACTER(*), PARAMETER :: RoutineName = 'Waves_End' ! 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 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 ) @@ -2355,15 +2476,15 @@ SUBROUTINE Waves_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) 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 !---------------------------------------------------------------------------------------------------------------------------------- @@ -2413,11 +2534,11 @@ FUNCTION WheelerStretching ( zOrzPrime, Zeta, h, ForwardOrBackward, ErrStat, Err 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 = "" ! Apply Wheeler stretching, depending on the direction: @@ -2436,7 +2557,7 @@ FUNCTION WheelerStretching ( zOrzPrime, Zeta, h, ForwardOrBackward, ErrStat, Err CASE DEFAULT WheelerStretching = 0.0_SiKi - + ErrMsg = 'The last argument in routine WheelerStretching() must be ''F'' or ''B''.' ErrStat = ErrID_Fatal RETURN @@ -2448,6 +2569,6 @@ FUNCTION WheelerStretching ( zOrzPrime, Zeta, h, ForwardOrBackward, ErrStat, Err RETURN END FUNCTION WheelerStretching - + END MODULE Waves !********************************************************************************************************************************** diff --git a/modules/seastate/src/Waves.txt b/modules/seastate/src/Waves.txt index 1eb0228922..5c76300c0d 100644 --- a/modules/seastate/src/Waves.txt +++ b/modules/seastate/src/Waves.txt @@ -60,7 +60,12 @@ typedef ^ ^ SiKi CurrVxi 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 # Define outputs from the initialization routine here: diff --git a/modules/seastate/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 index 3e73667b5c..76fdb04b95 100644 --- a/modules/seastate/src/Waves_Types.f90 +++ b/modules/seastate/src/Waves_Types.f90 @@ -77,6 +77,11 @@ MODULE Waves_Types 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] END TYPE Waves_InitInputType ! ======================= ! ========= Waves_InitOutputType ======= @@ -289,6 +294,11 @@ SUBROUTINE Waves_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er 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 END SUBROUTINE Waves_CopyInitInput SUBROUTINE Waves_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) @@ -446,6 +456,11 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -688,6 +703,16 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 END SUBROUTINE Waves_PackInitInput SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -973,6 +998,16 @@ SUBROUTINE Waves_UnPackInitInput( 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) + 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 END SUBROUTINE Waves_UnPackInitInput SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) From 97a3c53b27eaf456203a3d90a92cfb5b50e4303d Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Thu, 20 Jan 2022 15:17:23 -0700 Subject: [PATCH 031/338] Updating the wave-radiation convolution integral to 2nd order. --- modules/hydrodyn/src/Conv_Radiation.f90 | 326 ++++++++++++------------ 1 file changed, 164 insertions(+), 162 deletions(-) diff --git a/modules/hydrodyn/src/Conv_Radiation.f90 b/modules/hydrodyn/src/Conv_Radiation.f90 index 1aa6b961f9..f09e31d1b1 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,44 +21,44 @@ ! 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 ) @@ -66,29 +66,29 @@ SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, 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 + 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 + !! 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_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) @@ -100,35 +100,35 @@ SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, 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. - + RdtnFrmAM = .FALSE. + ! Initialize the NWTC Subroutine Library - + CALL NWTC_Init( ) - + ! 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 + 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 +136,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 +158,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 +200,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 +248,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,13 +344,13 @@ 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, '(//)' ) ! WRITE( InitInp%UnSum, '(A)' ) 'Radiation memory effect kernel' - ! WRITE( InitInp%UnSum, '(//)' ) + ! 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)' ! @@ -358,27 +358,27 @@ SUBROUTINE Conv_Rdtn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, ! 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 + + 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 +387,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 +459,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 +525,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,56 +574,56 @@ 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 @@ -630,11 +632,11 @@ SUBROUTINE Conv_Rdtn_UpdateDiscState( Time, n, u, p, x, xd, z, OtherState, m, Er 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 +651,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 +668,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 +689,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 !********************************************************************************************************************************** From 63935d5c771ae019d54409f425816d5d965945b8 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Sat, 22 Jan 2022 17:22:15 -0700 Subject: [PATCH 032/338] Add the SeaSt_Interp_3D_VEC function (modified from SeaSt_Interp_3D_VEC6) --- modules/seastate/src/SeaState_Interp.f90 | 83 +++++- modules/seastate/src/SeaState_Types.f90 | 326 ----------------------- modules/seastate/src/Waves2_Types.f90 | 310 --------------------- 3 files changed, 78 insertions(+), 641 deletions(-) diff --git a/modules/seastate/src/SeaState_Interp.f90 b/modules/seastate/src/SeaState_Interp.f90 index b18da622c5..e83b5c1958 100644 --- a/modules/seastate/src/SeaState_Interp.f90 +++ b/modules/seastate/src/SeaState_Interp.f90 @@ -591,12 +591,85 @@ FUNCTION SeaSt_Interp_3D( Time, Position, pKinXX, p, ErrStat, ErrMsg ) END FUNCTION SeaSt_Interp_3D +FUNCTION SeaSt_Interp_3D_VEC ( Time, Position, pKinXX, p, 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 + 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 + INTEGER(IntKi) :: ic ! wind-component counter + REAL(SiKi) :: isopc(3) ! isoparametric coordinates + REAL(ReKi) :: Tmp ! temporary fraction of distance between two grid points + 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), 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, 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 + real(SiKi), INTENT(in ) :: pKinXX(0:,:,:,:) !< 3D Wave excitation data (SiKi for storage space reasons) + TYPE(SeaSt_Interp_ParameterType), INTENT(IN ) :: p !< Parameters INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None @@ -605,11 +678,11 @@ FUNCTION SeaSt_Interp_3D_VEC6 ( Time, Position, pKinXX, p, ErrStat, ErrMsg ) Real(SiKi) :: SeaSt_Interp_3D_VEC6(6) ! Local variables - REAL(SiKi) :: u(8) ! size 2^n + REAL(SiKi) :: u(8) ! size 2^n real(ReKi) :: N3D(8) integer(IntKi) :: Indx_Lo(3), Indx_Hi(3) - INTEGER(IntKi) :: i ! loop counter - INTEGER(IntKi) :: ic ! wind-component counter + INTEGER(IntKi) :: i ! loop counter + INTEGER(IntKi) :: ic ! wind-component counter REAL(SiKi) :: isopc(3) ! isoparametric coordinates REAL(ReKi) :: Tmp ! temporary fraction of distance between two grid points integer(IntKi) :: ErrStat2 diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 3590e95ed6..48cea14534 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -5973,331 +5973,5 @@ SUBROUTINE SeaSt_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE SeaSt_UnPackOutput - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL SeaSt_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 SeaSt_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 SeaSt_Input_ExtrapInterp - - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 - TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_Input_ExtrapInterp1 - - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 - TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 - TYPE(SeaSt_InputType), INTENT(IN) :: u3 ! Input at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_Input_ExtrapInterp2 - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL SeaSt_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 SeaSt_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 SeaSt_Output_ExtrapInterp - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 - TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 - CALL Waves2_Output_ExtrapInterp1( y1%Waves2, y2%Waves2, tin, y_out%Waves2, tin_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - END SUBROUTINE SeaSt_Output_ExtrapInterp1 - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 - TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 - TYPE(SeaSt_OutputType), INTENT(IN) :: y3 ! Output at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 - 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) - END SUBROUTINE SeaSt_Output_ExtrapInterp2 - END MODULE SeaState_Types !ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/Waves2_Types.f90 b/modules/seastate/src/Waves2_Types.f90 index 64540db020..3f2c990e86 100644 --- a/modules/seastate/src/Waves2_Types.f90 +++ b/modules/seastate/src/Waves2_Types.f90 @@ -2694,315 +2694,5 @@ SUBROUTINE Waves2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Re_Xferred = Re_Xferred + 1 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 - ! 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 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' - ! 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 Waves2_Output_ExtrapInterp2 - END MODULE Waves2_Types !ENDOFREGISTRYGENERATEDFILE From 11e045cb06a40cd2f51a00794aee34aac53546c4 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Sun, 23 Jan 2022 01:59:44 -0700 Subject: [PATCH 033/338] Initial implementation of vertical wave stretching --- modules/hydrodyn/src/HydroDyn.f90 | 1 - modules/hydrodyn/src/Morison.f90 | 502 +++++++++++++++++------ modules/hydrodyn/src/Morison.txt | 3 + modules/hydrodyn/src/Morison_Types.f90 | 261 ++++++++++++ modules/seastate/src/SeaState_Interp.f90 | 5 +- 5 files changed, 640 insertions(+), 132 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index b8974e7f76..c3f6ead210 100644 --- a/modules/hydrodyn/src/HydroDyn.f90 +++ b/modules/hydrodyn/src/HydroDyn.f90 @@ -1680,7 +1680,6 @@ 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' ) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index f0cce36f87..e87cf85973 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -1846,7 +1846,7 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In TYPE(Morison_MemberType) :: member ! the current member type(Morison_MemberInputType) :: inpMember ! current input file-based member - INTEGER :: N, i, j, count + INTEGER :: N, i, j, k, count REAL(ReKi) :: dl REAL(ReKi) :: vec(3),v2D(3,1), pos(3) REAL(ReKi) :: phi ! member tilt angle @@ -1931,14 +1931,11 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In 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 + ! 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 ) - - - ! 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 & @@ -2165,10 +2162,29 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ! Define initialization-routine output here: - ! Setup the 4D grid information for the Interpolatin Module + ! Setup the 4D grid information for the Interpolatin Module p%seast_interp_p = InitInp%seast_interp_p - - ! Initialize the outputs + + ! allocate and 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=errStat ) + IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveDynP0.', ErrStat,ErrMsg,'Morison_Init') + ALLOCATE ( p%WaveVel0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat ) + IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveVel0.', ErrStat,ErrMsg,'Morison_Init') + ALLOCATE ( p%WaveAcc0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat ) + IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveAcc0.', ErrStat,ErrMsg,'Morison_Init') + + ! Copy the wave dynamic 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 + + ! Initialize the outputs IF ( p%OutSwtch > 0) then !@mhall: moved this "if" to after allocations CALL MrsnOUT_Init( InitInp, y, p, InitOut, errStat, errMsg ) @@ -2410,7 +2426,7 @@ SUBROUTINE Morison_End( u, p, x, xd, z, OtherState, y, m, errStat, errMsg ) CALL Morison_DestroyOutput( y, errStat, errMsg ) - + print *, 'Morison_End executed' END SUBROUTINE Morison_End !---------------------------------------------------------------------------------------------------------------------------------- @@ -2617,8 +2633,27 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 - + INTEGER(IntKi) :: FSElem + REAL(ReKi) :: SubRatio + REAL(ReKi) :: Zeta1 + REAL(ReKi) :: Zeta2 + REAL(ReKi) :: FSInt(3) + REAL(ReKi) :: F_D0(3) + REAL(ReKi) :: F_DS(3) + REAL(ReKi) :: F_A0(3) + REAL(ReKi) :: F_AS(3) + REAL(ReKi) :: F_I0(3) + REAL(ReKi) :: F_IS(3) + REAL(ReKi) :: f_redist + REAL(ReKi) :: Df_hydro(3) + REAL(ReKi) :: Df_hydro_lumped(6) + REAL(ReKi) :: FVFSInt(3) + REAL(ReKi) :: FAFSInt(3) + REAL(ReKi) :: FDynPFSInt + REAL(ReKi) :: vrelFSInt(3) + + + ! Initialize errStat errStat = ErrID_None errMsg = "" Imat = 0.0_ReKi @@ -2628,7 +2663,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, !=============================================================================================== ! 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 ) ! TODO: Update for Wave Kinematics grid @@ -2641,40 +2676,51 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 - - pos1(3) = u%Mesh%Position(3,j) - p%MSL2SWL ! We are intentionally using the undisplaced Z position of the node. - if ( pos1(3) <= 0.0 ) then - ! 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, 'SeaState_CalcOutput' ) - m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - - positionXY = (/pos1(1),pos1(2)/) - m%WaveElev1(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - - if (associated(p%WaveElev2)) then - m%WaveElev2(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%WaveElev(j) = m%WaveElev1(j) + m%WaveElev2(j) - else - m%WaveElev(j) = m%WaveElev1(j) - end if + pos1(3) = u%Mesh%Position(3,j) - p%MSL2SWL ! We are intentionally using the undisplaced Z position of the node. + + ! 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, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + if (associated(p%WaveElev2)) then + m%WaveElev2(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%WaveElev(j) = m%WaveElev1(j) + m%WaveElev2(j) else + m%WaveElev(j) = m%WaveElev1(j) + end if + + IF ( pos1(3) <= m%WaveElev(j)) THEN ! Node is submerged + 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, 'SeaState_CalcOutput' ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + 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, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + END IF ! Node is submerged + m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) + ELSE ! Node is out of water - zero-out all wave dynamics m%FV(:,j) = 0.0 m%FA(:,j) = 0.0 - m%FDynP(j) = 0.0 - end if - - m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) - + m%FDynP(j) = 0.0 + m%vrel(:,j) = 0.0 + END IF + end do + ! ============================================================================================== ! Calculate instantaneous loads on each member except for the hydrodynamic loads on member ends. ! This covers aspects of the load calculations previously in CreateDistributedMesh. @@ -2711,7 +2757,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, DO i =1,N ! loop through member elements - ! calculate isntantaneous incline angle and heading, and related trig values + ! calculate isntantaneous 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)) @@ -3036,98 +3082,295 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, end if - - - END DO ! i =1,N ! loop through member elements - ! 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 + + !-----------------------------------------------------------------------------------------------------! + ! External Hydrodynamic Side Loads - Start ! + !-----------------------------------------------------------------------------------------------------! + z1 = u%Mesh%Position(3, mem%NodeIndx(1)) - p%MSL2SWL + z2 = u%Mesh%Position(3, mem%NodeIndx(N+1)) - p%MSL2SWL + IF ( z2 > 0.0_SiKi .AND. z1 < 0.0_SiKi ) THEN + + !-----------------------------------------Surface Piercing Member-------------------------------------! + + FSElem = -1 ! Initialize the No. of the partially wetted element as -1 + + DO i = mem%i_floor+1,N ! loop through member nodes - skip the last node which should not be submerged anyways + ! We need to subtract the MSL2SWL offset to place this in the SWL reference system + pos1 = u%Mesh%TranslationDisp(:, mem%NodeIndx(i)) + u%Mesh%Position(:, mem%NodeIndx(i)) + pos1(3) = pos1(3) - p%MSL2SWL + pos2 = u%Mesh%TranslationDisp(:, mem%NodeIndx(i+1)) + u%Mesh%Position(:, mem%NodeIndx(i+1)) + pos2(3) = pos2(3) - p%MSL2SWL + Zeta1 = m%WaveElev(mem%NodeIndx(i)) + Zeta2 = m%WaveElev(mem%NodeIndx(i+1)) + + IF ( i == 1 ) THEN + deltal = mem%dl/2.0_ReKi + h_c = mem%dl/4.0_ReKi + ELSE IF ( 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 + ! 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 + + 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 + + !-------------------- 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%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)) ) + 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) + IF (i == FSElem) THEN ! Save the distributed load at the first node below the free surface + F_A0 = f_hydro + 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%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 (FSElem < 0) THEN + CALL SetErrStat(ErrID_Fatal, 'An initially surface-piercing member cannot become fully submerged. This has happend for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + ELSE IF (FSElem < 3) THEN + CALL SetErrStat(ErrID_Fatal, 'For each surface-piercing member, at least two elements must remain fully submerged. This is not true for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + END IF + + !----------------------------------------------------------------------------------------------------! + ! 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 ( 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, 'SeaState_CalcOutput' ) + FVFSInt = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + FAFSInt = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + FDynPFSInt = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + 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, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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 = 0.5*( abs(mem%dRdl_mg(FSElem-1)) + abs(mem%dRdl_mg(FSElem)) ) + vec = matmul( mem%Ak,vrelFSInt ) + F_DS = mem%Cd(FSElem)*p%WtrDens*mem%RMG(FSElem)*TwoNorm(vec)*vec + & + 0.5*mem%AxCd(FSElem)*p%WtrDens*pi*mem%RMG(FSElem)*dRdl_p * & + matmul( dot_product( mem%k, vrelFSInt )*mem%kkt, vrelFSInt ) + + ! Hydrodynamic added mass and inertia loads + IF ( .NOT. mem%PropPot ) THEN + ! ------------------- hydrodynamic added mass loads: sides: Section 7.1.3 ------------------------ + Am = mem%Ca(FSElem)*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem)*mem%Ak + & + 2.0*mem%AxCa(FSElem)*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem)*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 )) ) + + ! ------------------- hydrodynamic inertia loads: sides: Section 7.1.4 ------------------------ + F_IS=(mem%Ca(FSElem)+mem%Cp(FSElem))*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem) * matmul( mem%Ak, FAFSInt ) + & + 2.0*mem%AxCa(FSElem)*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem)*dRdl_p * matmul( mem%kkt, FAFSInt ) + & + 2.0*mem%AxCp(FSElem) *pi*mem%RMG(FSElem) *dRdl_pp * FDynPFSInt*mem%k + END IF + + !----------------------------------------------------------------------------------------------------! + ! Compute the load redistribution for smooth time series ! + !----------------------------------------------------------------------------------------------------! + ! Evaluate the load redistribution function + f_redist = 2.0_ReKi * SubRatio**3 - 3.5_ReKi * SubRatio**2 + SubRatio + 0.5_ReKi + + ! The load redistribution is designed with deltal = mem%dl and h_c = 0. 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 + 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) + + ! Hydrodynamic added mass and inertia loads + IF ( .NOT. mem%PropPot ) 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 + 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) + + !-------------------- 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 + 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 - 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) + ELSE !-----------------------------------------Fully Submerged Member--------------------------------------! + + DO i = mem%i_floor+1,N+1 ! loop through member nodes + ! 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 + z1 = u%Mesh%Position(3, mem%NodeIndx(i)) - p%MSL2SWL + Zeta1 = m%WaveElev(mem%NodeIndx(i)) + + IF (z1 > Zeta1) THEN + CALL SetErrStat(ErrID_Fatal, 'An initially fully submerged member cannot pierce the free surface. This has happend for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + END IF + + ! 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 + ELSE IF (i == N+1) THEN + deltal = mem%dl/2.0_ReKi + h_c = -mem%dl/4.0_ReKi + ELSE IF ( 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 + ! This node is a fully submerged interior node + deltal = mem%dl + h_c = 0.0_ReKi + END IF + + 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 + + !--------------------- 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%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) - - ! ------------------- 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 ) - - END DO ! i =1,N+1 ! loop through member nodes + 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%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 ---------------------------! + 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%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 + + !-----------------------------------------------------------------------------------------------------! + ! Any end plate loads that are modeled on a per-member basis ! + !-----------------------------------------------------------------------------------------------------! ! 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)) @@ -3259,7 +3502,9 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, !end do - ! --- Hydrodynamic drag loads: joints + !---------------------------------------------------------------------------------------------------------------! + ! 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. @@ -3329,7 +3574,6 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, CALL MrsnOut_WriteOutputs( p%UnOutFile, Time, y, p, errStat, errMsg ) END IF END IF - END SUBROUTINE Morison_CalcOutput diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index 1e1175e271..10101f9703 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -346,6 +346,9 @@ typedef ^ ^ SiKi typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi WaveVel0 {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi WaveAcc0 {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi WaveDynP0 {*}{*}{*} - - "" - 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 ^ ^ INTEGER NStepWave - - - "" - diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index 0715c65c4b..3385b0b2ac 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -397,6 +397,9 @@ MODULE Morison_Types REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveVel0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveAcc0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveDynP0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< 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 [-] INTEGER(IntKi) :: NStepWave !< [-] @@ -10707,6 +10710,58 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveDynP = SrcParamData%WaveDynP ENDIF +IF (ASSOCIATED(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. ASSOCIATED(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 (ASSOCIATED(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. ASSOCIATED(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 (ASSOCIATED(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. ASSOCIATED(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) @@ -10852,6 +10907,18 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) DEALLOCATE(ParamData%WaveDynP) ParamData%WaveDynP => NULL() ENDIF +IF (ASSOCIATED(ParamData%WaveVel0)) THEN + DEALLOCATE(ParamData%WaveVel0) + ParamData%WaveVel0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveAcc0)) THEN + DEALLOCATE(ParamData%WaveAcc0) + ParamData%WaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%WaveDynP0)) THEN + DEALLOCATE(ParamData%WaveDynP0) + ParamData%WaveDynP0 => NULL() +ENDIF IF (ASSOCIATED(ParamData%WaveTime)) THEN DEALLOCATE(ParamData%WaveTime) ParamData%WaveTime => NULL() @@ -11008,6 +11075,21 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 ( ASSOCIATED(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 ( ASSOCIATED(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 ! WaveDynP0 allocated yes/no + IF ( ASSOCIATED(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 ( ASSOCIATED(InData%WaveTime) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension @@ -11490,6 +11572,91 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END DO END DO END IF + IF ( .NOT. ASSOCIATED(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%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 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. ASSOCIATED(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%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%WaveAcc0,4) + IntKiBuf( Int_Xferred + 1) = UBOUND(InData%WaveAcc0,4) + Int_Xferred = Int_Xferred + 2 + + 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 + IF ( .NOT. ASSOCIATED(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%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 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 IF ( .NOT. ASSOCIATED(InData%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -12135,6 +12302,100 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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 (ASSOCIATED(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 (ASSOCIATED(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 ! 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 (ASSOCIATED(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 IF ( IntKiBuf( Int_Xferred ) == 0 ) THEN ! WaveTime not allocated Int_Xferred = Int_Xferred + 1 ELSE diff --git a/modules/seastate/src/SeaState_Interp.f90 b/modules/seastate/src/SeaState_Interp.f90 index e83b5c1958..5c1c63ec7a 100644 --- a/modules/seastate/src/SeaState_Interp.f90 +++ b/modules/seastate/src/SeaState_Interp.f90 @@ -36,10 +36,11 @@ MODULE SeaState_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_3D_Vec6 - public :: SeaSt_Interp_Setup + PUBLIC :: SeaSt_Interp_Setup CONTAINS From 48cfeb9e97e9eae86563d4ef2d2698ad825d0292 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Sun, 23 Jan 2022 03:47:48 -0700 Subject: [PATCH 034/338] Partially implemented switches based on WaveStMod. --- modules/hydrodyn/src/HydroDyn.f90 | 1 + modules/hydrodyn/src/Morison.f90 | 149 +++++++++++++++--------- modules/hydrodyn/src/Morison.txt | 20 ++-- modules/hydrodyn/src/Morison_Types.f90 | 14 +++ modules/seastate/src/SeaState_Input.f90 | 4 +- 5 files changed, 124 insertions(+), 64 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index c3f6ead210..b73fb3d085 100644 --- a/modules/hydrodyn/src/HydroDyn.f90 +++ b/modules/hydrodyn/src/HydroDyn.f90 @@ -807,6 +807,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I InputFileData%Morison%WaveElev2 => InitInp%WaveElev2 ! 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 diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index e87cf85973..2eeea782e6 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2165,6 +2165,8 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ! Setup the 4D grid information for the Interpolatin Module p%seast_interp_p = InitInp%seast_interp_p + p%WaveStMod = InitInp%WaveStMod + ! allocate and 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=errStat ) IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveDynP0.', ErrStat,ErrMsg,'Morison_Init') @@ -2664,61 +2666,94 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, !=============================================================================================== ! Calculate the fluid kinematics at all mesh nodes and store for use in the equations below - do j = 1, p%NNodes + 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 and initial Z location + !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 and initial Z location + 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 - pos1(3) = u%Mesh%Position(3,j) - p%MSL2SWL ! We are intentionally using the undisplaced Z position of the node. + END IF + + IF (p%WaveStMod > 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, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - if (associated(p%WaveElev2)) then + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + IF (associated(p%WaveElev2)) THEN m%WaveElev2(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev2, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) m%WaveElev(j) = m%WaveElev1(j) + m%WaveElev2(j) - else + ELSE m%WaveElev(j) = m%WaveElev1(j) - end if + 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, 'SeaState_CalcOutput' ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) + 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 + END IF + + ELSE ! Wave stretching enabled + + IF ( pos1(3) <= m%WaveElev(j)) THEN ! Node is submerged + 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, 'SeaState_CalcOutput' ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + ELSE ! Node is above SWL - need wave stretching + IF (p%WaveStMod == 1) THEN ! Vertical wave stretching + m%FV(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + ELSE IF (p%WaveStMod == 2) THEN ! Extrapoled wave stretching - IF ( pos1(3) <= m%WaveElev(j)) THEN ! Node is submerged - 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, 'SeaState_CalcOutput' ) - m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - 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, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - END IF ! Node is submerged - m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) - ELSE ! Node is out of water - zero-out all wave dynamics - m%FV(:,j) = 0.0 - m%FA(:,j) = 0.0 - m%FDynP(j) = 0.0 - m%vrel(:,j) = 0.0 + END IF + END IF ! Node is submerged + m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) + ELSE ! Node is out of water - zero-out all wave dynamics + m%FV(:,j) = 0.0 + m%FA(:,j) = 0.0 + m%FDynP(j) = 0.0 + m%vrel(:,j) = 0.0 + END IF + END IF - end do + END DO ! ============================================================================================== @@ -3089,11 +3124,11 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, !-----------------------------------------------------------------------------------------------------! ! External Hydrodynamic Side Loads - Start ! !-----------------------------------------------------------------------------------------------------! - z1 = u%Mesh%Position(3, mem%NodeIndx(1)) - p%MSL2SWL + z1 = u%Mesh%Position(3, mem%NodeIndx(1)) - p%MSL2SWL z2 = u%Mesh%Position(3, mem%NodeIndx(N+1)) - p%MSL2SWL - IF ( z2 > 0.0_SiKi .AND. z1 < 0.0_SiKi ) THEN + IF ( z2 > 0.0_SiKi .AND. z1 < 0.0_SiKi .AND. p%WaveStMod > 0) THEN - !-----------------------------------------Surface Piercing Member-------------------------------------! + !----------------------------Surface Piercing Member with Wave Stretching-----------------------------! FSElem = -1 ! Initialize the No. of the partially wetted element as -1 @@ -3196,13 +3231,16 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, FDynPFSInt = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) 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, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + IF (p%WaveStMod == 1) THEN ! Vertical wave stretching + FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + ELSE IF (p%WaveStMod == 2) THEN ! Extrapolated wave stretching + + END IF END IF ! Viscous drag: @@ -3293,15 +3331,20 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, END IF - ELSE !-----------------------------------------Fully Submerged Member--------------------------------------! + ELSE !-------------------------------Fully Submerged Member or No Wave Stretching-------------------------------! DO i = mem%i_floor+1,N+1 ! loop through member nodes ! 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 - z1 = u%Mesh%Position(3, mem%NodeIndx(i)) - p%MSL2SWL + IF (p%WaveStMod > 0) THEN + z1 = u%Mesh%Position(3, mem%NodeIndx(i)) + u%Mesh%TranslationDisp(3, mem%NodeIndx(i)) - p%MSL2SWL + ELSE + z1 = u%Mesh%Position(3, mem%NodeIndx(i)) - p%MSL2SWL + END IF + Zeta1 = m%WaveElev(mem%NodeIndx(i)) - IF (z1 > Zeta1) THEN + IF (z1 > Zeta1 .AND. p%WaveStMod > 0) THEN CALL SetErrStat(ErrID_Fatal, 'An initially fully submerged member cannot pierce the free surface. This has happend for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) END IF diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index 10101f9703..9fec676f92 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -207,7 +207,7 @@ 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 WaveDisp - - - "Method of computing Wave Kinematics. (0: use undisplaced position, 1: use displaced position, 2: use low-pass filtered displaced position) " - 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" - @@ -228,11 +228,11 @@ 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 ^ ^ 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 {:} - - "" - @@ -253,14 +253,15 @@ typedef ^ ^ CHARACTER(1 typedef ^ ^ INTEGER UnOutFile - - - "" - typedef ^ ^ INTEGER UnSum - - - "" - typedef ^ ^ INTEGER NStepWave - - - "" - -typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" - -typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" - -typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" - +typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" - +typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveTime {*} - - "" - -typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "" - -typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "" - +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 ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +typedef ^ ^ INTEGER WaveStMod - - - "" - # # # Define outputs from the initialization routine here: @@ -365,6 +366,7 @@ typedef ^ ^ CHARACTER(2 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_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index 3385b0b2ac..aed4ae61c4 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -324,6 +324,7 @@ MODULE Morison_Types REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< [-] 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(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + INTEGER(IntKi) :: WaveStMod !< [-] END TYPE Morison_InitInputType ! ======================= ! ========= Morison_InitOutputType ======= @@ -416,6 +417,7 @@ MODULE Morison_Types 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 ======= @@ -6251,6 +6253,7 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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 END SUBROUTINE Morison_CopyInitInput SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) @@ -6745,6 +6748,7 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 @@ -7533,6 +7537,8 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF + IntKiBuf(Int_Xferred) = InData%WaveStMod + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_PackInitInput SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -8530,6 +8536,8 @@ SUBROUTINE Morison_UnPackInitInput( 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) + OutData%WaveStMod = IntKiBuf(Int_Xferred) + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_UnPackInitInput SUBROUTINE Morison_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) @@ -10849,6 +10857,7 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err 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 ) @@ -11196,6 +11205,7 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 @@ -11869,6 +11879,8 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF + IntKiBuf(Int_Xferred) = InData%WaveStMod + Int_Xferred = Int_Xferred + 1 END SUBROUTINE Morison_PackParam SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -12671,6 +12683,8 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index b1e89a73f1..68ce7a5cc6 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -683,8 +683,8 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! 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 SeaState will once again support other wave stretching models.',ErrStat,ErrMsg,RoutineName) + if ( InputFileData%Waves%WaveStMod /= 0 .AND. InputFileData%Waves%WaveStMod /= 1 .AND. InputFileData%Waves%WaveStMod /= 1) then + call SetErrStat( ErrID_Fatal,'WaveStMod must be 0, 1, or 2.',ErrStat,ErrMsg,RoutineName) return end if ! From 6cc52861ff46d0b958e36420781a844c6ae6e3df Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Mon, 24 Jan 2022 09:25:05 -0700 Subject: [PATCH 035/338] Updates for Writing Kinematics Files --- modules/seastate/src/SeaState.txt | 3 + modules/seastate/src/SeaState_DriverCode.f90 | 10 +- modules/seastate/src/SeaState_Input.f90 | 3 + modules/seastate/src/SeaState_Output.f90 | 219 +++++++++++++------ modules/seastate/src/SeaState_Types.f90 | 21 ++ 5 files changed, 183 insertions(+), 73 deletions(-) diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index abcac618dc..3451bb1d8a 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -150,6 +150,9 @@ typedef ^ ^ DbKi Wav 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 diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 index 5aae59ea32..db79086faf 100644 --- a/modules/seastate/src/SeaState_DriverCode.f90 +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -226,6 +226,11 @@ program SeaStateDriver call SeaSt_DvrCleanup() end if + ! Write Wave Kinematics File + call SeaStOut_WriteWvKinFiles( InitInData%OutRootName, version, p%NStepWave, p%WaveDT, p%X_HalfWidth, p%Y_HalfWidth, & + p%Z_Depth, p%deltaGrid, p%NGrid, InitOutData%WaveElev1, InitOutData%WaveElev1, & + InitOutData%WaveTime, InitOutData%WaveVel, InitOutData%WaveAcc, InitOutData%WaveDynP, ErrStat, ErrMsg ) + ! Nullify these pointers because they are no longer needed nullify(InitOutData%WaveDynP) @@ -244,7 +249,10 @@ program SeaStateDriver call SeaSt_DestroyInitOutput( InitOutData, ErrStat, ErrMsg ) - + if (errStat >= AbortErrLev) then + ! Clean up and exit + call SeaSt_DvrCleanup() + end if diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 7a3a2d085a..43afb2151a 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -1328,6 +1328,9 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E end if ! 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) p%deltaGrid(2)= InputFileData%Y_HalfWidth/(InputFileData%NY) p%deltaGrid(3) = PI / ( 2*(InputFileData%NZ-1) ) diff --git a/modules/seastate/src/SeaState_Output.f90 b/modules/seastate/src/SeaState_Output.f90 index be209bdbbb..694d9dfba7 100644 --- a/modules/seastate/src/SeaState_Output.f90 +++ b/modules/seastate/src/SeaState_Output.f90 @@ -320,22 +320,26 @@ SUBROUTINE SeaStOut_OpenSum( UnSum, SummaryName, SeaSt_Prog, ErrStat, ErrMsg ) END SUBROUTINE SeaStOut_OpenSum !==================================================================================================== -SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, NNodes, NWaveElev, nodeInWater, WaveElev, WaveKinzi, & +SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, WaveDT, X_HalfWidth, Y_HalfWidth, & + Z_Depth, deltaGrid, NGrid, WaveElev1, WaveElev2, & WaveTime, WaveVel, WaveAcc, WaveDynP, ErrStat, ErrMsg ) -!TODO: Modifiy for writing grid instead of nodes + ! 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 - 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) + 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 ) :: WaveTime (: ) ! The time values for the wave kinematics (time) + 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 @@ -343,9 +347,10 @@ SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, NNodes, NW 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 + INTEGER :: i, j, k, m, iFile + CHARACTER(64) :: Frmt, Frmt2, Sfrmt CHARACTER(ChanLen) :: Delim + real(ReKi) :: x_gridPts(NGrid(1)), y_gridPts(NGrid(2)), z_gridPts(NGrid(3)) ! Initialize ErrStat ErrStat = ErrID_None ErrMsg = "" @@ -353,54 +358,64 @@ SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, NNodes, NW extension = (/'.Vxi ','.Vyi ','.Vzi ','.Axi ','.Ayi ','.Azi ','.DynP'/) Delim = '' !Frmt = '('//TRIM(Int2LStr(NNodes))//'(:,A,ES11.4e2))' - Frmt = '(:,A,ES11.4e2)' - Sfrmt = '(:,A,A11)' + 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 - DO iFile = 1,7 CALL GetNewUnit( UnWv ) - WvName = Rootname // TRIM(extension(iFile)) + WvName = TRIM(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( SeaSt_Prog%Name )//& - ' '//TRIM( SeaSt_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 + 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) - 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 ) + !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 - WRITE (UnWv,'()', IOSTAT=ErrStat) ! write the line return - END DO - + !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 @@ -409,36 +424,96 @@ SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, NNodes, NW END IF END DO - IF ( NWaveElev > 0 ) THEN + ! WaveElevation Grid - CALL GetNewUnit( UnWv ) + CALL GetNewUnit( UnWv ) - WvName = Rootname // '.Elev' - CALL OpenFOutFile ( UnWv, WvName, ErrStat, ErrMsg ) - IF (ErrStat >=AbortErrLev) RETURN + 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-1 + do j = 1, NGrid(2) + do i = 1, NGrid(1) + !Frmt = '('//TRIM(Int2LStr(NWaveElev))//'(:,A,ES11.4e2))' + !WRITE(UnWv,Frmt) ( Delim, WaveElev(i,j) , j=1,NWaveElev ) + 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 - ! Write the summary file header - WRITE (UnWv,'(A)', IOSTAT=ErrStat) 'This wave kinematics file was generated by '//TRIM( SeaSt_Prog%Name )//& - ' '//TRIM( SeaSt_Prog%Ver )//' on '//CurDate()//' at '//CurTime()//'.' - + END DO - 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 - 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(ChanLen), 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 - END IF + ! 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)' + write (UnWv,Frmt, IOSTAT=ErrStat) '!' , waveDT , ' - WaveDT (s)' + write (UnWv,Frmt, IOSTAT=ErrStat) '!' , NGrid(1) , ' - Number of X grid points [NX*2 + 1]' + write (UnWv,Frmt, IOSTAT=ErrStat) '!' , NGrid(2) , ' - Number of Y grid points [NY*2 + 1]' + write (UnWv,Frmt, 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 diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 3590e95ed6..199cc9cc1c 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -168,6 +168,9 @@ MODULE SeaState_Types 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 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)] @@ -4199,6 +4202,9 @@ SUBROUTINE SeaSt_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs 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 @@ -4523,6 +4529,9 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -4713,6 +4722,12 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -5171,6 +5186,12 @@ SUBROUTINE SeaSt_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM 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) From b741b0436bb01c4750f861f149e5cf0a652b023d Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Tue, 25 Jan 2022 09:58:56 -0700 Subject: [PATCH 036/338] Bug Fix: Correct number of grid points in XY directions based on NX, NY input file param --- modules/seastate/src/SeaState_Input.f90 | 8 ++++---- modules/seastate/src/SeaState_Output.f90 | 9 +++++---- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 43afb2151a..82d40d76e2 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -1282,8 +1282,8 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E !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(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 @@ -1331,8 +1331,8 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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) - p%deltaGrid(2)= InputFileData%Y_HalfWidth/(InputFileData%NY) + 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 diff --git a/modules/seastate/src/SeaState_Output.f90 b/modules/seastate/src/SeaState_Output.f90 index 694d9dfba7..51c5b95fd6 100644 --- a/modules/seastate/src/SeaState_Output.f90 +++ b/modules/seastate/src/SeaState_Output.f90 @@ -473,7 +473,7 @@ subroutine WriteWvKinHeader( UnWv, fileType, Delim, SeaSt_Prog, waveDT, Z_Depth, INTEGER, INTENT( IN ) :: NGrid(3) ! Number of grid points for the wave kinematics arrays integer(IntKi) :: i - CHARACTER(64) :: Frmt + 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 )//& @@ -498,10 +498,11 @@ subroutine WriteWvKinHeader( UnWv, fileType, Delim, SeaSt_Prog, waveDT, Z_Depth, 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,Frmt, IOSTAT=ErrStat) '!' , NGrid(1) , ' - Number of X grid points [NX*2 + 1]' - write (UnWv,Frmt, IOSTAT=ErrStat) '!' , NGrid(2) , ' - Number of Y grid points [NY*2 + 1]' - write (UnWv,Frmt, IOSTAT=ErrStat) '!' , NGrid(3) , ' - Number of Z grid points [NZ]' + 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]' From dfd65bdd30ae0271bcb38f80cf0d2cce69e7e085 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 26 Jan 2022 13:26:23 -0700 Subject: [PATCH 037/338] Update to hydrodynamic side loads --- modules/hydrodyn/src/Morison.f90 | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 2eeea782e6..349d91829e 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -3361,9 +3361,24 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 - ! This node is a fully submerged interior node - deltal = mem%dl - h_c = 0.0_ReKi + ! 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 IF (i == 1) THEN From 65fbd63dffa76ecdfae46235ffd36ab318036c0f Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Thu, 27 Jan 2022 22:02:21 -0700 Subject: [PATCH 038/338] Initial implementation of WaveMod=7 (User Wave Components) --- modules/seastate/src/SeaState_Input.f90 | 6 +- modules/seastate/src/SeaState_Types.f90 | 326 ------- modules/seastate/src/UserWaves.f90 | 1120 ++++++++++++++--------- modules/seastate/src/Waves.f90 | 80 +- modules/seastate/src/Waves2_Types.f90 | 310 ------- 5 files changed, 752 insertions(+), 1090 deletions(-) diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index b1e89a73f1..eb4a14303e 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -657,8 +657,8 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E !TODO: THese tests need to be done by HD GJH 7/11/21 - if ( WaveModIn < 0 .OR. WaveModIn > 6 ) then - call SetErrStat( ErrID_Fatal,'WaveMod must be 0, 1, 1P#, 2, 3, 4, 5, or 6.',ErrStat,ErrMsg,RoutineName) + 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 @@ -955,7 +955,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E ! 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 ( 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) diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 3590e95ed6..48cea14534 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -5973,331 +5973,5 @@ SUBROUTINE SeaSt_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Err IF(ALLOCATED(Int_Buf)) DEALLOCATE(Int_Buf) END SUBROUTINE SeaSt_UnPackOutput - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u(:) ! Input at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_CopyInput(u(1), u_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL SeaSt_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 SeaSt_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 SeaSt_Input_ExtrapInterp - - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 - TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_Input_ExtrapInterp1 - - - SUBROUTINE SeaSt_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(SeaSt_InputType), INTENT(IN) :: u1 ! Input at t1 > t2 > t3 - TYPE(SeaSt_InputType), INTENT(IN) :: u2 ! Input at t2 > t3 - TYPE(SeaSt_InputType), INTENT(IN) :: u3 ! Input at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Inputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_Input_ExtrapInterp2 - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y(:) ! Output at t1 > t2 > t3 - REAL(DbKi), INTENT(IN ) :: t(:) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 SeaSt_CopyOutput(y(1), y_out, MESH_UPDATECOPY, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - ELSE IF ( order .eq. 1 ) THEN - CALL SeaSt_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 SeaSt_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 SeaSt_Output_ExtrapInterp - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 - TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 - REAL(DbKi), INTENT(IN ) :: tin(2) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 - CALL Waves2_Output_ExtrapInterp1( y1%Waves2, y2%Waves2, tin, y_out%Waves2, tin_out, ErrStat2, ErrMsg2 ) - CALL SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg,RoutineName) - END SUBROUTINE SeaSt_Output_ExtrapInterp1 - - - SUBROUTINE SeaSt_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(SeaSt_OutputType), INTENT(IN) :: y1 ! Output at t1 > t2 > t3 - TYPE(SeaSt_OutputType), INTENT(IN) :: y2 ! Output at t2 > t3 - TYPE(SeaSt_OutputType), INTENT(IN) :: y3 ! Output at t3 - REAL(DbKi), INTENT(IN ) :: tin(3) ! Times associated with the Outputs - TYPE(SeaSt_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 = 'SeaSt_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 - 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) - END SUBROUTINE SeaSt_Output_ExtrapInterp2 - END MODULE SeaState_Types !ENDOFREGISTRYGENERATEDFILE diff --git a/modules/seastate/src/UserWaves.f90 b/modules/seastate/src/UserWaves.f90 index a9de2b957f..c1105f7ce7 100644 --- a/modules/seastate/src/UserWaves.f90 +++ b/modules/seastate/src/UserWaves.f90 @@ -9,9 +9,10 @@ MODULE UserWaves PUBLIC :: UserWaves_Init PUBLIC :: UserWaveElevations_Init + PUBLIC :: UserWaveComponents_Init - ! Data type for reading in wave elevation data from a file. + ! 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 @@ -21,16 +22,26 @@ MODULE UserWaves 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 +!----------------------------------------------------------------------------------------------------------------------! +! ! +! WaveMod = 5 ! +! ! +!----------------------------------------------------------------------------------------------------------------------! - - - -!---------------------------------------------------------------------------------------------------------------------------------- +!----------------------------------------------------------------------------------------------------------------------- !> This subroutine reads in the wave elevations from a file and reconstructs the frequency information. !! !! FILE Format: @@ -51,12 +62,11 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - ! Variables for reading in the wave elevation + ! 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 + ! 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 @@ -67,21 +77,17 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) CHARACTER(ErrMsgLen) :: ErrMsgTmp !< Temporary error message for processing CHARACTER(*), PARAMETER :: RoutineName = 'WaveElev_ReadFile' - - - - ! Initialize the error handling + ! Initialize the error handling ErrStat = ErrID_None ErrMsg = "" - - ! Get a unit number for reading in the file + ! Get a unit number for reading in the file CALL GetNewUnit( WaveElevUnit ) - ! Assemble the filename for the wave elevation data. + ! Assemble the filename for the wave elevation data. WaveElevData%FileName = TRIM(InitInp%WvKinFile)//'.Elev' - ! Open the file containing the wave elevation timeseries + ! 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 @@ -90,8 +96,7 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) RETURN END IF - - ! Find out how the data is formatted + ! 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 @@ -100,8 +105,7 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) RETURN END IF - - ! Check that we read in two columns + ! 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) @@ -110,18 +114,24 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) 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 + ! Adjust the number of steps since we index from zero WaveElevData%NStepWave = WaveElevData%NStepWave - 1_IntKi + !-------------------------------------------------- + ! Read in the data + !-------------------------------------------------- - - !-------------------------------------------------- - ! Read in the data - !-------------------------------------------------- - - ! Allocate the array to store the time series - ALLOCATE ( WaveElevData%WaveTime(0:WaveElevData%NStepWave), STAT = ErrStatTmp ) + ! 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 ) @@ -129,7 +139,7 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) RETURN END IF - ! Allocate the array to store the elevation series + ! 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 ) @@ -138,14 +148,12 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) RETURN END IF - - ! Read and discard the header lines + ! Read and discard the header lines DO I=1,NumHeaderLines CALL ReadLine( WaveElevUnit, '', TextLine, LineLen, ErrStatTmp ) ENDDO - - ! Read in all the data + ! 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 ) @@ -157,7 +165,7 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) RETURN END IF - ! Copy the data to the appropriate places + ! Copy the data to the appropriate places WaveElevData%WaveTime(I) = TmpWaveElevRow(1) WaveElevData%WaveElev(I) = TmpWaveElevRow(2) @@ -165,341 +173,26 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) 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). - - ! 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 + ! 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 + ! 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 @@ -515,34 +208,29 @@ SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status of the operation CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - - - ! Local Variables + ! 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 + ! 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. + ! 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 + ! set error status information ErrStat = ErrID_None ErrMsg = '' - - - ! Statement to user + ! 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 + ! Read in the wave elevation data CALL WaveElev_ReadFile (InitInp, WaveElevData, ErrStatTmp, ErrMsgTmp ) CALL SetErrStat(ErrStatTmp,ErrMsgTmp,ErrStat,ErrMsg,RoutineName) IF ( ErrStat >= AbortErrLev ) THEN @@ -550,14 +238,13 @@ SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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. + ! 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 + ! 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 '// & @@ -570,9 +257,8 @@ SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 - + ! 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 @@ -581,40 +267,37 @@ SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 + ! 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 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 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 + ! Now check if all the allocations worked properly IF ( ErrStat >= AbortErrLev ) THEN CALL CleanUp() RETURN END IF - ! Set the values + ! Set the values TmpFFTWaveElev = 0.0_SiKi InitOut%WaveElevC0(:,:) = 0.0_SiKi - - ! Copy values over + ! Copy values over DO I=0,MIN(WaveElevData%NStepWave,InitOut%NStepWave-1) TmpFFTWaveElev(I) = WaveElevData%WaveElev(I) ENDDO - ! Initialize the FFT + ! 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 @@ -622,7 +305,7 @@ SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) RETURN END IF - ! Apply the forward FFT to get the real and imaginary parts of the frequency information. + ! 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 @@ -630,8 +313,7 @@ SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) RETURN END IF - - ! Copy the resulting TmpFFTWaveElev(:) data over to the InitOut%WaveElevC0 array + ! 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) @@ -645,11 +327,7 @@ SUBROUTINE UserWaveElevations_Init ( InitInp, InitOut, ErrStat, ErrMsg ) RETURN END IF - - IF (ALLOCATED( WaveElevData%WaveElev )) DEALLOCATE( WaveElevData%WaveElev, STAT=ErrStatTmp) - IF (ALLOCATED( TmpFFTWaveElev )) DEALLOCATE( TmpFFTWaveElev, STAT=ErrStatTmp) - - + CALL CleanUp() CONTAINS @@ -658,14 +336,16 @@ 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 - +!----------------------------------------------------------------------------------------------------------------------! +! ! +! WaveMod = 6 ! +! ! +!----------------------------------------------------------------------------------------------------------------------! !---------------------------------------------------------------------------------------------------------------------------------- SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) @@ -675,27 +355,25 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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(:,:) + 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 + ! 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 = "" @@ -914,9 +592,7 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) InitOut%WaveDynP(InitOut%NStepWave,:,:,:) = InitOut%WaveDynP(0,:,:,: ) InitOut%WaveElev(InitOut%NStepWave,:,:) = InitOut%WaveElev(0,:,:) InitOut%nodeInWater(InitOut%NStepWave,:) = InitOut%nodeInWater(0,:) - - - + CONTAINS !> Sub function to extract n fields on the current line of the file unit FU @@ -963,5 +639,615 @@ SUBROUTINE CleanUp( ) RETURN END SUBROUTINE CleanUp - END SUBROUTINE UserWaves_Init +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(IN ) :: InitInp !< Input data for initialization routine + TYPE(Waves_InitOutputType), INTENT(IN ) :: 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 + CHARACTER(1024) :: FileName !< Name of the file we are reading + REAL(SiKi) :: TmpWaveCompRow(4) !< row read in from the wave component input file + REAL(SiKi) :: WaveAngFreq + + + ! 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) :: 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 + + 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 + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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 + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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 + ! Make sure the wave direction convention is not nautial, which is not supported + DO I = 2,NumHeaderLines + CALL ReadLine( WaveCompUnit, '', TextLine, LineLen, ErrStatTmp ) + CALL GetWords( TextLine, Words, 20 ) + 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) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + RETURN + END IF + END DO + ELSE + 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) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + RETURN + END IF + + !-------------------------------------------------- + ! 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 ) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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 ) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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 ) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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 ) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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 ) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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 ) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + 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 ) + CLOSE ( WaveCompUnit ) + CALL CleanUp() + RETURN + END IF + + ! Copy the data to the appropriate places + IF (UseSEAFormat) THEN ! SEA format + WaveCompData%WaveAngFreq(I) = TmpWaveCompRow(1) * TwoPi ! Convert to angular frequency + WaveCompData%WaveAmp(I) = TmpWaveCompRow(2) + WaveCompData%WaveDir(I) = TmpWaveCompRow(3) + WaveCompData%WavePhase(I) = TmpWaveCompRow(4) + ELSE ! OpenFAST format + WaveCompData%WaveAngFreq(I) = TmpWaveCompRow(1) + WaveCompData%WaveAmp(I) = TmpWaveCompRow(2) * 0.5_ReKi ! Convert wave height to wave amplitude + WaveCompData%WaveDir(I) = TmpWaveCompRow(3) * 180_ReKi/Pi ! Convert to radians + WaveCompData%WavePhase(I) = TmpWaveCompRow(4) * 180_ReKi/Pi ! 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 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) + + END SUBROUTINE CleanUp +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)//'".' ) + + + ! 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%WaveDOmega = TwoPi/InitInp%WaveTMax ! Compute the frequency step for incident wave calculations. + + ! Read in the wave elevation 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 + + 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. + 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 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) + + ALLOCATE ( InitOut%WaveDirArr( 0:InitOut%NStepWave2 ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDirArr.',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 + InitOut%WaveElevC0(:,:) = 0.0_SiKi + InitOut%WaveDirArr(:) = 0.0_SiKi + 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(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. + 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 index 70d24f75ca..290c2e5dbc 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -1018,13 +1018,15 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 + ! 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). + ! 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 @@ -1040,10 +1042,8 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 all the arrays we need. + IF ( InitInp%WaveMod /= 5 .AND. InitInp%WaveMod /= 7) THEN ! For WaveMod == 5 and 7, these are allocated and populated in UserWaveElevations_Init or UserWaveComponents_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 @@ -1193,9 +1193,11 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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') + IF ( InitInp%WaveMod /= 7) THEN ! For WaveMod == 7, these are allocated and populated in UserWaveComponents_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') + END IF ! 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 ) @@ -1223,8 +1225,6 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 @@ -1236,21 +1236,16 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) InitOut%nodeInWater(:, J) = 0 END IF - END DO ! J - All points where the incident wave kinematics will be computed without stretching - + 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 + !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) ) - - - - + ! 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 @@ -1274,7 +1269,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !! (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 + IF ( InitInp%WaveMultiDir .AND. InitInp%WaveMod /= 7 ) 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 @@ -1498,6 +1493,11 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) RETURN END IF + ELSE IF (InitInp%WaveMod == 7) THEN + + InitOut%WaveDirMin = MINVAL(InitOut%WaveDirArr) + InitOut%WaveDirMax = MAXVAL(InitOut%WaveDirArr) + ELSE ! Multi-directional waves not used InitOut%WaveDirMin = InitInp%WaveDir @@ -1601,9 +1601,9 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ENDSELECT - IF ( InitInp%WaveMod == 5 ) THEN ! Wave Elevation data read in + IF ( InitInp%WaveMod == 5 .OR. InitInp%WaveMod == 7) THEN ! Wave elevation or frequency component data read in - ! Apply limits to the existing WaveElevC0 arrays if outside frequency range + ! 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 @@ -1643,7 +1643,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !! !! 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 + IF ( InitInp%WaveMultiDir .AND. InitInp%WaveNDir > 1 .AND. InitInp%WaveMod /= 7) THEN ! Multi-directional waves in use ! Allocate the index array for each group of frequencies. This array is used to randomize the directions @@ -1706,7 +1706,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! Deallocate it here after we have completed all the calculations involving it. IF(ALLOCATED( WvTheta )) DEALLOCATE( WvTheta ) - ELSE ! Not really multi-directional waves + ELSE IF (InitInp%WaveMod /= 7) THEN ! 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 @@ -1875,11 +1875,10 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 @@ -2399,6 +2398,19 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init 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 diff --git a/modules/seastate/src/Waves2_Types.f90 b/modules/seastate/src/Waves2_Types.f90 index 64540db020..3f2c990e86 100644 --- a/modules/seastate/src/Waves2_Types.f90 +++ b/modules/seastate/src/Waves2_Types.f90 @@ -2694,315 +2694,5 @@ SUBROUTINE Waves2_UnPackOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Re_Xferred = Re_Xferred + 1 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 - ! 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 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' - ! 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 Waves2_Output_ExtrapInterp2 - END MODULE Waves2_Types !ENDOFREGISTRYGENERATEDFILE From 2fda8d2fd74145e06fdb4cb1be6d0eabd7e28074 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Thu, 27 Jan 2022 22:37:06 -0700 Subject: [PATCH 039/338] Check WaveDisp when evaluating the z-positions of nodes. --- modules/hydrodyn/src/Morison.f90 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 349d91829e..75dca50c6e 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2679,7 +2679,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, pos1(2) = u%Mesh%TranslationDisp(2,j) + u%Mesh%Position(2,j) END IF - IF (p%WaveStMod > 0) THEN ! Wave stretching enabled + 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. @@ -3126,7 +3126,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, !-----------------------------------------------------------------------------------------------------! z1 = u%Mesh%Position(3, mem%NodeIndx(1)) - p%MSL2SWL z2 = u%Mesh%Position(3, mem%NodeIndx(N+1)) - p%MSL2SWL - IF ( z2 > 0.0_SiKi .AND. z1 < 0.0_SiKi .AND. p%WaveStMod > 0) THEN + IF ( z2 > 0.0_SiKi .AND. z1 <= 0.0_SiKi .AND. p%WaveStMod > 0) THEN !----------------------------Surface Piercing Member with Wave Stretching-----------------------------! @@ -3336,7 +3336,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, DO i = mem%i_floor+1,N+1 ! loop through member nodes ! 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) THEN + IF (p%WaveStMod > 0 .AND. p%WaveDisp /= 0) THEN z1 = u%Mesh%Position(3, mem%NodeIndx(i)) + u%Mesh%TranslationDisp(3, mem%NodeIndx(i)) - p%MSL2SWL ELSE z1 = u%Mesh%Position(3, mem%NodeIndx(i)) - p%MSL2SWL @@ -3346,8 +3346,10 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, IF (z1 > Zeta1 .AND. p%WaveStMod > 0) THEN CALL SetErrStat(ErrID_Fatal, 'An initially fully submerged member cannot pierce the free surface. This has happend for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + RETURN END IF + ! 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 @@ -3361,7 +3363,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 + ! 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)) From 154ba9ab3b90efe752cd4328e8b3a3a98ca3e848 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Fri, 28 Jan 2022 15:04:43 -0700 Subject: [PATCH 040/338] Bug fix for WaveMod=7. --- modules/seastate/src/UserWaves.f90 | 58 +++++++++++++++++++----------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/modules/seastate/src/UserWaves.f90 b/modules/seastate/src/UserWaves.f90 index c1105f7ce7..e384495387 100644 --- a/modules/seastate/src/UserWaves.f90 +++ b/modules/seastate/src/UserWaves.f90 @@ -653,8 +653,8 @@ END SUBROUTINE UserWaves_Init SUBROUTINE WaveComp_ReadFile ( InitInp, InitOut, WaveCompData, ErrStat, ErrMsg ) IMPLICIT NONE - TYPE(Waves_InitInputType), INTENT(IN ) :: InitInp !< Input data for initialization routine - TYPE(Waves_InitOutputType), INTENT(IN ) :: InitOut !< Output data for initialization routine + 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 @@ -678,6 +678,11 @@ SUBROUTINE WaveComp_ReadFile ( InitInp, InitOut, WaveCompData, ErrStat, ErrMsg ) 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 @@ -723,31 +728,48 @@ SUBROUTINE WaveComp_ReadFile ( InitInp, InitOut, WaveCompData, ErrStat, ErrMsg ) 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 - ! Make sure the wave direction convention is not nautial, which is not supported + + ! Go through the SEA headerlines DO I = 2,NumHeaderLines CALL ReadLine( WaveCompUnit, '', TextLine, LineLen, ErrStatTmp ) CALL GetWords( TextLine, Words, 20 ) + + ! 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) CLOSE ( WaveCompUnit ) CALL CleanUp() 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 - CALL WrScr1 ( ' Reading "'//TRIM(InitInp%WvKinFile)//'" following the OpenFAST format: Wave Angular Frequency (rad/s), Wave Height (m), Wave Direction (deg), Wave Phase (deg).' ) + 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) + 'Found '//TRIM(Num2LStr(NumDataColumns))//' of data in "'//TRIM(WaveCompData%FileName)//'".', ErrStat, ErrMsg, RoutineName) CLOSE ( WaveCompUnit ) CALL CleanUp() RETURN END IF + ! Compute the frequency step for incident wave calculations. + InitOut%WaveDOmega = TwoPi/InitInp%WaveTMax + !-------------------------------------------------- ! Read in the data !-------------------------------------------------- @@ -803,7 +825,6 @@ SUBROUTINE WaveComp_ReadFile ( InitInp, InitOut, WaveCompData, ErrStat, ErrMsg ) RETURN END IF - WaveAngFreq = TmpWaveCompRow(1) IF (UseSEAFormat) THEN WaveAngFreq = TwoPi * WaveAngFreq @@ -824,16 +845,16 @@ SUBROUTINE WaveComp_ReadFile ( InitInp, InitOut, WaveCompData, ErrStat, ErrMsg ) END IF ! Copy the data to the appropriate places - IF (UseSEAFormat) THEN ! SEA format - WaveCompData%WaveAngFreq(I) = TmpWaveCompRow(1) * TwoPi ! Convert to angular frequency - WaveCompData%WaveAmp(I) = TmpWaveCompRow(2) - WaveCompData%WaveDir(I) = TmpWaveCompRow(3) - WaveCompData%WavePhase(I) = TmpWaveCompRow(4) - ELSE ! OpenFAST format - WaveCompData%WaveAngFreq(I) = TmpWaveCompRow(1) + 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) * 180_ReKi/Pi ! Convert to radians - WaveCompData%WavePhase(I) = TmpWaveCompRow(4) * 180_ReKi/Pi ! Convert to radians + WaveCompData%WaveDir(I) = TmpWaveCompRow(3) ! Already in degrees + WaveCompData%WavePhase(I) = TmpWaveCompRow(4) * PI/180_ReKi ! Convert to radians END IF ENDDO @@ -887,13 +908,8 @@ SUBROUTINE UserWaveComponents_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! Statement to user CALL WrScr1 ( ' Reading in wave component data from wave kinematics files with root name "'//TRIM(InitInp%WvKinFile)//'".' ) - - - ! 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%WaveDOmega = TwoPi/InitInp%WaveTMax ! Compute the frequency step for incident wave calculations. - ! Read in the wave elevation data + ! 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 From 9581492db14bdad61f268514eff37e39397d29fa Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Fri, 28 Jan 2022 20:03:08 -0700 Subject: [PATCH 041/338] Update the hydrodynamic side loads and add distributed moment correction for wave-stretching load redistribution. --- modules/hydrodyn/src/Morison.f90 | 139 ++++++++++++++++++++----------- 1 file changed, 89 insertions(+), 50 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 75dca50c6e..43eff95254 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2635,19 +2635,23 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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) + ! 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_A0(3) REAL(ReKi) :: F_AS(3) - REAL(ReKi) :: F_I0(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) @@ -3124,6 +3128,8 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, !-----------------------------------------------------------------------------------------------------! ! External Hydrodynamic Side Loads - Start ! !-----------------------------------------------------------------------------------------------------! + ! Get the initial z-positions of the two end nodes of the member to determine whether the member should + ! be surface piercing z1 = u%Mesh%Position(3, mem%NodeIndx(1)) - p%MSL2SWL z2 = u%Mesh%Position(3, mem%NodeIndx(N+1)) - p%MSL2SWL IF ( z2 > 0.0_SiKi .AND. z1 <= 0.0_SiKi .AND. p%WaveStMod > 0) THEN @@ -3132,26 +3138,37 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, FSElem = -1 ! Initialize the No. of the partially wetted element as -1 - DO i = mem%i_floor+1,N ! loop through member nodes - skip the last node which should not be submerged anyways + 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 = u%Mesh%TranslationDisp(:, mem%NodeIndx(i)) + u%Mesh%Position(:, mem%NodeIndx(i)) pos1(3) = pos1(3) - p%MSL2SWL - pos2 = u%Mesh%TranslationDisp(:, mem%NodeIndx(i+1)) + u%Mesh%Position(:, mem%NodeIndx(i+1)) 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)) - IF ( i == 1 ) THEN + ! 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 ( 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 + 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 + 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 @@ -3210,10 +3227,12 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, END DO ! i =1,N+1 ! loop through member nodes - IF (FSElem < 0) THEN - CALL SetErrStat(ErrID_Fatal, 'An initially surface-piercing member cannot become fully submerged. This has happend for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) - ELSE IF (FSElem < 3) THEN + IF (FSElem < 0) THEN ! No partially wetted element identified - Bad! + CALL SetErrStat(ErrID_Fatal, 'No partially wetted element identified for an initially surface-piercing member. This has happend to Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + RETURN + ELSE IF (FSElem < 3) THEN ! Only one or no element is fully submerged - Bad! CALL SetErrStat(ErrID_Fatal, 'For each surface-piercing member, at least two elements must remain fully submerged. This is not true for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + RETURN END IF !----------------------------------------------------------------------------------------------------! @@ -3272,12 +3291,12 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, END IF !----------------------------------------------------------------------------------------------------! - ! Compute the load redistribution for smooth time series ! + ! Perform the load redistribution for smooth time series ! !----------------------------------------------------------------------------------------------------! ! Evaluate the load redistribution function f_redist = 2.0_ReKi * SubRatio**3 - 3.5_ReKi * SubRatio**2 + SubRatio + 0.5_ReKi - ! The load redistribution is designed with deltal = mem%dl and h_c = 0. Moment correction will be applied separately + ! 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 @@ -3331,58 +3350,78 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, END IF + !----------------------------------------------------------------------------------------------------! + ! Perform moment correction to compensate for load redistribution ! + !----------------------------------------------------------------------------------------------------! + ! Moment correction to the first node below the free surface + F_S = F_DS + IF ( .NOT. mem%PropPot) THEN + F_S = F_S + F_AS + F_IS + END IF + 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 + + ! Moment correction to the second node below the free surface + F_0 = F_D0 + IF ( .NOT. mem%PropPot) THEN + F_0 = F_0 + F_A0 + F_I0 + END IF + 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 + + ELSE !-------------------------------Fully Submerged Member or No Wave Stretching-------------------------------! - DO i = mem%i_floor+1,N+1 ! loop through member nodes + 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 - Zeta1 = m%WaveElev(mem%NodeIndx(i)) - - IF (z1 > Zeta1 .AND. p%WaveStMod > 0) THEN - CALL SetErrStat(ErrID_Fatal, 'An initially fully submerged member cannot pierce the free surface. This has happend for Member ID '//trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) + ! When wave stretching is enabled, we do not allow an initially fully submerged member to breach the free surface during the simulation + IF ( p%WaveStMod>0 .AND. z1>m%WaveElev(mem%NodeIndx(i)) ) THEN + CALL SetErrStat(ErrID_Fatal, 'An initially fully submerged member cannot pierce the free surface. This has happend for Member ID ' & + //trim(num2lstr(mem%MemberID)), errStat, errMsg, 'Morison_CalcOutput' ) RETURN END IF + + !---------------------------------------------Compute deltal and h_c------------------------------------------! + ! Default value for fully submerged interior node + deltal = mem%dl + h_c = 0.0_ReKi - - ! 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 - ELSE IF (i == N+1) THEN + ! Special cases + IF ( i == 1 ) THEN ! First node. Note: Having i == 1 also implies mem%i_floor = 0. + deltal = mem%dl/2.0_ReKi + h_c = mem%dl/4.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. + deltal = mem%dl/2.0_ReKi - mem%h_floor + h_c = 0.5_ReKi*(mem%dl/2.0_ReKi + mem%h_floor) + ELSE IF ( i == N+1 ) THEN ! Last node deltal = mem%dl/2.0_ReKi h_c = -mem%dl/4.0_ReKi - ELSE IF ( 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 + ELSE ! Interior node + ! Need to check if element crosses the SWL, but only if WaveStMod == 0 + ! With wave stretching, will error out anyway unless all nodes are submerged + 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 + deltal = mem%dl/2.0 + h + h_c = 0.5*(h-mem%dl/2.0) + END IF + END IF END IF - + + ! Compute the slope of the member radius IF (i == 1) THEN dRdl_p = abs(mem%dRdl_mg(i)) dRdl_pp = mem%dRdl_mg(i) From 34c38fc87d262b40c43f98261df3caa167ddf398 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Mon, 31 Jan 2022 08:49:33 -0700 Subject: [PATCH 042/338] Fixed bug with repeating wave kinematics The wrapping of the time signal back into the range [0,WaveTMax] had bugs --- modules/seastate/src/SeaState_Interp.f90 | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/modules/seastate/src/SeaState_Interp.f90 b/modules/seastate/src/SeaState_Interp.f90 index b18da622c5..fe984659ee 100644 --- a/modules/seastate/src/SeaState_Interp.f90 +++ b/modules/seastate/src/SeaState_Interp.f90 @@ -292,7 +292,7 @@ subroutine SetTimeIndex(Time, deltaT, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, Er INTEGER(IntKi), INTENT( OUT) :: ErrStat !< Error status CHARACTER(*), INTENT( OUT) :: ErrMsg !< Error message if ErrStat /= ErrID_None - integer(IntKi) :: i + integer(IntKi) :: i, mult real(ReKi) :: Tmp ErrStat = ErrID_None @@ -305,19 +305,16 @@ subroutine SetTimeIndex(Time, deltaT, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, Er 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 = Time / deltaT + Tmp = MOD(Tmp,real((nMax), DbKi)) Indx_Lo = INT( Tmp ) ! convert REAL to INTEGER - - if (Indx_Lo >= (nMax-1)) then ! Wrap the time series back to the beginning of the signal - - ! 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. - Indx_Lo = Indx_Lo - (nMax - 1) - Tmp = Tmp - real(nMax - 1, ReKi) - end if + isopc = 2.0_ReKi * (Tmp - REAL(Indx_Lo , ReKi)) - 1.0_ReKi ! convert to value between -1 and 1 !------------------------------------------------------------------------------------------------- @@ -326,7 +323,7 @@ subroutine SetTimeIndex(Time, deltaT, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, Er isopc = min( 1.0_SiKi, isopc ) isopc = max(-1.0_SiKi, isopc ) - Indx_Hi = min( Indx_Lo + 1, nMax - 1 ) ! make sure it's a valid index, zero-based + Indx_Hi = min( Indx_Lo + 1, nMax ) ! make sure it's a valid index, zero-based end subroutine SetTimeIndex From e361b6fe0797a1e04fb04c825f3b03a77742bef6 Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Mon, 31 Jan 2022 08:55:45 -0700 Subject: [PATCH 043/338] Finished WaveMod = 6 implementation plus bug fixes * Removed requirement for WaveMod = 6 to have WaveDT = Driver DT * If WaveMod /= 6 and the WvKinFile is not the empty string, will cause SeaState module to write the kinematics files. * Fixed generation of SeaState summary file when WaveMod = 6 * Fixed setting wave time data range to NStepWave+1 for the Interpolation algorithm * Finished WaveMod = 6 implementation --- modules/seastate/src/SeaState.f90 | 145 ++++++------- modules/seastate/src/SeaState_DriverCode.f90 | 6 +- modules/seastate/src/SeaState_Input.f90 | 19 +- modules/seastate/src/SeaState_Output.f90 | 2 +- modules/seastate/src/UserWaves.f90 | 204 +++++++++---------- 5 files changed, 161 insertions(+), 215 deletions(-) diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index 826ca4745d..63f0d013c6 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -1029,75 +1029,63 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init !=============================================== IF ( InputFileData%UnSum > 0 ) THEN - versionStr = GetVersion(SeaSt_ProgDesc) - WRITE( InputFileData%UnSum, '(A/)') versionStr - Delim = ' ' - IF (InputFileData%Waves%WaveMod /= 0 .AND. InputFileData%Waves%WaveMod /= 6) THEN + versionStr = GetVersion(SeaSt_ProgDesc) + WRITE( InputFileData%UnSum, '(A/)') versionStr + Delim = ' ' + IF (InputFileData%Waves%WaveMod /= 0 .and. InputFileData%Waves%WaveMod /= 6) THEN - WRITE( InputFileData%UnSum, '(1X,A61,F8.2,A4/)' ) 'The Mean Sea Level to Still Water Level (MSL2SWL) Offset is :',InitOut%MSL2SWL,' (m)' - ! WRITE( InputFileData%UnSum, '(1X,A/)' ) 'Note: The Water Depth and Z_Depth in this summary file are offset from the input file data by MSL2SWL' !, and Z coordinate(s) of the user-requested output location(s) - WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A8)' ) 'Water Density: ', InitOut%WtrDens, '(kg/m^3)' - WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A20,F8.2,A19)' ) 'Water Depth : ', p%WtrDpth - InitOut%MSL2SWL, '(m) relative to MSL; ', p%WtrDpth, '(m) relative to SWL' - WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A20,F8.2,A19/)' ) 'Grid Z_Depth : ', InputFileData%Z_Depth - InitOut%MSL2SWL, '(m) relative to MSL; ', InputFileData%Z_Depth, '(m) relative to SWL' - Frmt = '(1X,ES18.4e2,A,ES18.4e2,A,ES18.4e2,A,ES18.4e2)' - - ! Write Kinematics grid point locations - ! WRITE( InputFileData%UnSum, '(/)' ) - WRITE( InputFileData%UnSum, '(1X,A31/)' ) 'Wave Kinematics Grid Points (m)' - ! WRITE( InputFileData%UnSum, '(/)' ) - WRITE( InputFileData%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(InputFileData%UnSum,Frmt) InputFileData%Waves%WaveKinxi(i),Delim, InputFileData%Waves%WaveKinyi(i),Delim, InputFileData%Waves%WaveKinzi(i) + InitOut%MSL2SWL,Delim, InputFileData%Waves%WaveKinzi(i) + WRITE( InputFileData%UnSum, '(1X,A61,F8.2,A4/)' ) 'The Mean Sea Level to Still Water Level (MSL2SWL) Offset is :',InitOut%MSL2SWL,' (m)' + WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A8)' ) 'Water Density: ', InitOut%WtrDens, '(kg/m^3)' + WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A20,F8.2,A19)' ) 'Water Depth : ', p%WtrDpth - InitOut%MSL2SWL, '(m) relative to MSL; ', p%WtrDpth, '(m) relative to SWL' + WRITE( InputFileData%UnSum, '(1X,A15,F8.2,A20,F8.2,A19/)' ) 'Grid Z_Depth : ', InputFileData%Z_Depth - InitOut%MSL2SWL, '(m) relative to MSL; ', InputFileData%Z_Depth, '(m) relative to SWL' + end if + Frmt = '(1X,ES18.4e2,A,ES18.4e2,A,ES18.4e2,A,ES18.4e2)' + ! Write Kinematics grid point locations + WRITE( InputFileData%UnSum, '(1X,A31/)' ) 'Wave Kinematics Grid Points (m)' + WRITE( InputFileData%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(InputFileData%UnSum,Frmt) InputFileData%Waves%WaveKinxi(i),Delim, InputFileData%Waves%WaveKinyi(i),Delim, InputFileData%Waves%WaveKinzi(i) + InitOut%MSL2SWL,Delim, InputFileData%Waves%WaveKinzi(i) + end do + + ! ! Write User-requested Wave Kinematics locations + WRITE( InputFileData%UnSum, '(/)' ) + if (p%NWaveKin > 0) then + WRITE( InputFileData%UnSum, '(1X,A51/)' ) 'User-Requested Wave Kinematics Output Locations (m)' + ! WRITE( InputFileData%UnSum, '(/)' ) + WRITE( InputFileData%UnSum, '(2X,A84)' ) 'Index Xi Yi Zi relative to MSL Z relative to SWL' + Frmt = '(1X,I5, 2X,ES18.4e2,A,ES18.4e2,A,ES18.4e2,A,ES18.4e2)' + do i= 1, p%NWaveKin + ! NOTE: The InputFileData%WaveKinxi, yi, zi arrays hold the User-request kinematics output locations + WRITE(InputFileData%UnSum,Frmt) i, InputFileData%WaveKinxi(i),Delim, InputFileData%WaveKinyi(i),Delim, InputFileData%WaveKinzi(i) + InitOut%MSL2SWL,Delim, InputFileData%WaveKinzi(i) end do - - !WRITE( InputFileData%UnSum, '(1X,A11)' ) 'Y-locations' - !do i= 1, p%NGrid(2) - ! WRITE(InputFileData%UnSum,Frmt,ADVANCE='no') Delim, InputFileData%Waves%WaveKinyi(i) - !end do - !WRITE (InputFileData%UnSum,'()', IOSTAT=ErrStat) ! write the line return - !WRITE( InputFileData%UnSum, '(1X,A11)' ) 'Z-locations' - !do i= 1, p%NGrid(3) - ! WRITE(InputFileData%UnSum,Frmt,ADVANCE='no') Delim, InputFileData%Waves%WaveKinzi(i) - !end do - !WRITE (InputFileData%UnSum,'()', IOSTAT=ErrStat) ! write the line return - ! ! Write User-requested Wave Kinematics locations - WRITE( InputFileData%UnSum, '(/)' ) - if (p%NWaveKin > 0) then - WRITE( InputFileData%UnSum, '(1X,A51/)' ) 'User-Requested Wave Kinematics Output Locations (m)' - ! WRITE( InputFileData%UnSum, '(/)' ) - WRITE( InputFileData%UnSum, '(2X,A84)' ) 'Index Xi Yi Zi relative to MSL Z relative to SWL' - Frmt = '(1X,I5, 2X,ES18.4e2,A,ES18.4e2,A,ES18.4e2,A,ES18.4e2)' - do i= 1, p%NWaveKin - ! NOTE: The InputFileData%WaveKinxi, yi, zi arrays hold the User-request kinematics output locations - WRITE(InputFileData%UnSum,Frmt) i, InputFileData%WaveKinxi(i),Delim, InputFileData%WaveKinyi(i),Delim, InputFileData%WaveKinzi(i) + InitOut%MSL2SWL,Delim, InputFileData%WaveKinzi(i) - end do - else - WRITE( InputFileData%UnSum, '(1X,A50)' ) 'No User-Requested Wave Kinematics Output Channels' - end if + else + WRITE( InputFileData%UnSum, '(1X,A50)' ) 'No User-Requested Wave Kinematics Output Channels' + end if - ! Write User-requested Wave Elevations - WRITE( InputFileData%UnSum, '(/)' ) - if (p%NWaveElev > 0) then - WRITE( InputFileData%UnSum, '(1X,A50/)' ) 'User-Requested Wave Elevation Output Locations (m)' - ! WRITE( InputFileData%UnSum, '(/)' ) - WRITE( InputFileData%UnSum, '(2X,A25)' ) 'Index Xi Yi' - Frmt = '(1X,I5, 2X, ES11.4e2,A,ES11.4e2)' - do i= 1, p%NWaveElev - WRITE(InputFileData%UnSum,Frmt) i, InputFileData%WaveElevxi(i), Delim, InputFileData%WaveElevyi(i) - end do + ! Write User-requested Wave Elevations + WRITE( InputFileData%UnSum, '(/)' ) + if (p%NWaveElev > 0) then + WRITE( InputFileData%UnSum, '(1X,A50/)' ) 'User-Requested Wave Elevation Output Locations (m)' + ! WRITE( InputFileData%UnSum, '(/)' ) + WRITE( InputFileData%UnSum, '(2X,A25)' ) 'Index Xi Yi' + Frmt = '(1X,I5, 2X, ES11.4e2,A,ES11.4e2)' + do i= 1, p%NWaveElev + WRITE(InputFileData%UnSum,Frmt) i, InputFileData%WaveElevxi(i), Delim, InputFileData%WaveElevyi(i) + end do - else - WRITE( InputFileData%UnSum, '(1X,A50)' ) 'No User-Requested Wave Elevation Output Channels' - end if - if (p%NumOuts > 0) then - WRITE( InputFileData%UnSum, '(//1X,A/)' ) 'Requested Output Channels' - do i = 1, p%NumOuts - WRITE( InputFileData%UnSum, '(4X,A)' ) InputFileData%OutList(i) - end do - end if - + else + WRITE( InputFileData%UnSum, '(1X,A50)' ) 'No User-Requested Wave Elevation Output Channels' + end if + if (p%NumOuts > 0) then + WRITE( InputFileData%UnSum, '(//1X,A/)' ) 'Requested Output Channels' + do i = 1, p%NumOuts + WRITE( InputFileData%UnSum, '(4X,A)' ) InputFileData%OutList(i) + end do + end if + + IF (InputFileData%Waves%WaveMod /= 6) THEN ! Write wave kinematics at (0,0) WRITE( InputFileData%UnSum, '(/)' ) WRITE( InputFileData%UnSum, '(1X,A28/)' ) 'Wave Kinematics DFT at (0,0)' @@ -1140,11 +1128,11 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init END IF - + ! Setup the 4D grid information for the Interpolatin Module - SeaSt_Interp_InitInp%n = (/p%NStepWave+1,p%nGrid(1),p%nGrid(2),p%nGrid(3)/) + 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(2) = -InputFileData%X_HalfWidth SeaSt_Interp_InitInp%pZero(3) = -InputFileData%Y_HalfWidth @@ -1200,24 +1188,13 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init - - - - - - - - - - - - - - - - - - + ! Write Wave Kinematics? + if ( InputFileData%Waves%WriteWvKin ) then + call SeaStOut_WriteWvKinFiles( InputFileData%Waves%WvKinFile, SeaSt_ProgDesc, p%NStepWave, p%WaveDT, p%X_HalfWidth, p%Y_HalfWidth, & + p%Z_Depth, p%deltaGrid, p%NGrid, InitOut%WaveElev1, InitOut%WaveElev2, & + InitOut%WaveTime, InitOut%WaveVel, InitOut%WaveAcc, InitOut%WaveDynP, ErrStat, ErrMsg ) + end if + ! Destroy the local initialization data CALL CleanUp() diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 index db79086faf..d35b2a7fec 100644 --- a/modules/seastate/src/SeaState_DriverCode.f90 +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -226,11 +226,7 @@ program SeaStateDriver call SeaSt_DvrCleanup() end if - ! Write Wave Kinematics File - call SeaStOut_WriteWvKinFiles( InitInData%OutRootName, version, p%NStepWave, p%WaveDT, p%X_HalfWidth, p%Y_HalfWidth, & - p%Z_Depth, p%deltaGrid, p%NGrid, InitOutData%WaveElev1, InitOutData%WaveElev1, & - InitOutData%WaveTime, InitOutData%WaveVel, InitOutData%WaveAcc, InitOutData%WaveDynP, ErrStat, ErrMsg ) - + ! Nullify these pointers because they are no longer needed nullify(InitOutData%WaveDynP) diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 82d40d76e2..8b9250b0ee 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -720,11 +720,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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 @@ -932,23 +928,16 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E 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 + else 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 ) + call GetPath( TRIM(InitInp%InputFile), TmpPath ) InputFileData%Waves%WvKinFile = TRIM(TmpPath)//TRIM(InputFileData%Waves%WvKinFile) end if + InputFileData%Waves%WriteWvKin = .TRUE. end if - -#else - InputFileData%Waves%WvKinFile = "" - InputFileData%Waves%WriteWvKin = .FALSE. -#endif end if diff --git a/modules/seastate/src/SeaState_Output.f90 b/modules/seastate/src/SeaState_Output.f90 index 51c5b95fd6..a3c34b0fa8 100644 --- a/modules/seastate/src/SeaState_Output.f90 +++ b/modules/seastate/src/SeaState_Output.f90 @@ -383,7 +383,7 @@ SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, WaveDT, X_ call WriteWvKinHeader( UnWv, iFile, Delim, SeaSt_Prog, waveDT, -z_gridPts(1), NGrid, deltaGrid ) - DO m= 0,NStepWave + DO m= 0,NStepWave-1 DO k = 1, NGrid(3) do j = 1, NGrid(2) do i = 1, NGrid(1) diff --git a/modules/seastate/src/UserWaves.f90 b/modules/seastate/src/UserWaves.f90 index a9de2b957f..42c15cad12 100644 --- a/modules/seastate/src/UserWaves.f90 +++ b/modules/seastate/src/UserWaves.f90 @@ -680,13 +680,12 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 :: i, j, k, m, icount ! Generic index INTEGER :: iFile ! Generic index CHARACTER(64) :: Frmt, Sfrmt CHARACTER(10) :: Delim - CHARACTER(64), ALLOCATABLE :: WaveDataStr(:,:) - REAL(SiKi), ALLOCATABLE :: WaveData(:,:) + CHARACTER(64), ALLOCATABLE :: WaveDataStr(:) + REAL(SiKi), ALLOCATABLE :: WaveData(:) ! Temporary error handling variables INTEGER(IntKi) :: ErrStatTmp ! Temporarary error status for procesing @@ -721,25 +720,25 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ( WaveDataStr ( InitInp%NGrid(1) ) , 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) + 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) + ALLOCATE ( WaveData ( InitInp%NGrid(1) ) , 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) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveTime.', ErrStat,ErrMsg,RoutineName) ALLOCATE ( InitOut%WaveElev (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2) ) , STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveElev.', ErrStat,ErrMsg,RoutineName) + 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%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStatTmp ) + ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), 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%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStatTmp ) @@ -748,65 +747,14 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ALLOCATE ( InitOut%WaveAcc (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%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') - - ! 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 - !TODO: Rework onto grid - ! InitOut%WaveVel (:,:,1) = WaveData(:,:) - - ! Now read the remaining files and check that the elements are consistent with the first file - DO iFile = 2,7 - + DO iFile = 1,7 CALL GetNewUnit( UnWv ) FileName = TRIM(InitInp%WvKinFile) // TRIM(extension(iFile)) @@ -818,67 +766,103 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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-1 + 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(i)) + IF (.NOT. isNumeric ) THEN + InitOut%nodeInWater(m,icount) = 0 + WaveData(i) = 0.0 + ELSE + InitOut%nodeInWater(m,icount) = 1 + END IF + + SELECT CASE (iFile) + CASE (1) + InitOut%WaveVel (m,i,j,k,1) = WaveData(i) + CASE (2) + InitOut%WaveVel (m,i,j,k,2) = WaveData(i) + CASE (3) + InitOut%WaveVel (m,i,j,k,3) = WaveData(i) + CASE (4) + InitOut%WaveAcc (m,i,j,k,1) = WaveData(i) + CASE (5) + InitOut%WaveAcc (m,i,j,k,2) = WaveData(i) + CASE (6) + InitOut%WaveAcc (m,i,j,k,3) = WaveData(i) + CASE (7) + InitOut%WaveDynP(m,i,j,k ) = WaveData(i) + END SELECT + icount = icount + 1 + END DO + end do + end do + END DO + end do + + ! WaveTime + DO i = 0,InitOut%NStepWave + InitOut%WaveTime(i) = i*InitInp%WaveDT + END DO + ! WaveElev + CALL GetNewUnit( UnWv ) + + FileName = TRIM(InitInp%WvKinFile) // '.Elev' - CALL ReadCom( UnWv, FileName, 'HydroDyn wave kinematics file header line 1', ErrStatTmp, ErrMsgTmp ) + CALL OpenFInpFile ( UnWv, FileName, ErrStat, ErrMsg ) + IF ( ErrStat /= 0 ) THEN + ErrStat = ErrID_Fatal + ErrMsg = 'Failed to open wave elevation file, ' // TRIM(FileName) + 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 - - DO i = 0,InitOut%NStepWave-1 + end do + + DO m = 0,InitOut%NStepWave-1 + do j = 1, InitInp%NGrid(2) ! Extract fields from current line - IF (.not. ExtractFields(UnWv, WaveDataStr(i,:), InitInp%NWaveKin)) THEN - call Cleanup() - RETURN + IF (.not. ExtractFields(UnWv, WaveDataStr(:), InitInp%NGrid(1))) 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 + DO i = 1, InitInp%NGrid(1) + isNumeric = is_numeric(WaveDataStr(i), WaveData(i)) IF (.NOT. isNumeric ) THEN - InitOut%nodeInWater(i,j) = 0 - WaveData(i,j) = 0.0 + InitOut%WaveElev(m,i,j ) = 0.0 ELSE - InitOut%nodeInWater(i,j) = 1 + InitOut%WaveElev(m,i,j ) = WaveData(i) END IF END DO - - END DO - SELECT CASE (iFile) - !TODO: Rework onto grid points - !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 + END DO - - ! WaveElev + !TODO FIX for new grid of XY wave elevations ! IF ( InitInp%NWaveElev > 0 ) THEN ! CALL GetNewUnit( UnWv ) From 0573045f3b93fc383b7bd1c0b0b7f4f4099d8d5c Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Mon, 31 Jan 2022 23:59:33 -0700 Subject: [PATCH 044/338] m%nodeInWater is now updated in Morison_CalcOutput to prevent the axial drag forces from being zeroed. --- modules/hydrodyn/src/Morison.f90 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 43eff95254..91293db1d4 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2715,16 +2715,19 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) 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 ( 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 ) @@ -2752,7 +2755,8 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, m%FV(:,j) = 0.0 m%FA(:,j) = 0.0 m%FDynP(j) = 0.0 - m%vrel(:,j) = 0.0 + m%vrel(:,j) = 0.0 + m%nodeInWater(j) = 0_IntKi END IF END IF From 01c73cf58150271f9ae7fe9f60e5e09e1405c364 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Tue, 1 Feb 2022 15:28:12 -0700 Subject: [PATCH 045/338] Cleanup the section on hydrodynamic joint loads in Morison_CalcOutput and update comments. --- modules/hydrodyn/src/Morison.f90 | 153 ++++++++++++++++--------------- 1 file changed, 77 insertions(+), 76 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 91293db1d4..329e3da104 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -3462,17 +3462,15 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 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 ! + ! 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 @@ -3496,6 +3494,7 @@ 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 @@ -3511,10 +3510,8 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 - - + !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 @@ -3604,79 +3601,83 @@ 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. - - 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) ) - - !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)) ) - - ! 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 - 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) - END IF - END DO ! I=1,6 - ENDDO ! J = 1, p%NJoints + ! 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 - ! 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. + ! 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. + + ! Effect of wave stretching already baked into m%FDynP, m%FA, and m%vrel. No additional modification needed. + + ! 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))) + + ! 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) ) + + ! Evaluate drag force and combine all per-joint loads + DO I=1,6 + IF (I < 4 ) THEN ! Three force components + 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 ! 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 ! + !---------------------------------------------------------------------------------------------------------------! + + ! 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. + 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 + DO I = 1,p%NumOuts + y%WriteOutput(I) = p%OutParam(I)%SignM * AllOuts( p%OutParam(I)%Indx ) + END DO - 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 + ! 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 + + END IF END SUBROUTINE Morison_CalcOutput From 684febb92d00428d1a858d7c8750e2cda3a70130 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Tue, 1 Feb 2022 16:17:56 -0700 Subject: [PATCH 046/338] Initial implementation of Wheeler wave stretching. --- modules/hydrodyn/src/Morison.f90 | 198 +++++++++++++++++++------------ 1 file changed, 123 insertions(+), 75 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 329e3da104..0e1965d210 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2657,6 +2657,8 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, REAL(ReKi) :: FAFSInt(3) REAL(ReKi) :: FDynPFSInt REAL(ReKi) :: vrelFSInt(3) + REAL(ReKi) :: pos1Prime(3) + REAL(ReKi) :: WtrDpth ! Initialize errStat @@ -2664,6 +2666,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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) @@ -2704,64 +2707,96 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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, 'SeaState_CalcOutput' ) - m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - 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 + 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, 'SeaState_CalcOutput' ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + 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 ( 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, 'SeaState_CalcOutput' ) - m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - ELSE ! Node is above SWL - need wave stretching - IF (p%WaveStMod == 1) THEN ! Vertical wave stretching - m%FV(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - ELSE IF (p%WaveStMod == 2) THEN ! Extrapoled wave stretching - - END IF - END IF ! Node is submerged - m%vrel(:,j) = m%FV(:,j) - u%Mesh%TranslationVel(:,j) - ELSE ! Node is out of water - zero-out all wave dynamics - 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 - - END IF + 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, 'SeaState_CalcOutput' ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + + ELSE ! Node is above SWL - need wave stretching + + IF (p%WaveStMod == 1) THEN ! Vertical wave stretching + m%FV(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + ELSE IF (p%WaveStMod == 2) THEN ! Extrapoled wave stretching + + + + 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, 'SeaState_CalcOutput' ) + m%FV(:,j) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + + 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 + END DO ! j = 1, p%NNodes ! ============================================================================================== @@ -3243,28 +3278,41 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, ! 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 ( 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, 'SeaState_CalcOutput' ) - FVFSInt = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - FAFSInt = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - FDynPFSInt = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) - ELSE ! Intersection is above SWL - need wave stretching - IF (p%WaveStMod == 1) THEN ! Vertical wave stretching - FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - ELSE IF (p%WaveStMod == 2) THEN ! Extrapolated wave stretching - + 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, 'SeaState_CalcOutput' ) + FVFSInt = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + FAFSInt = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + FDynPFSInt = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + ELSE ! Intersection is above SWL - need wave stretching + IF (p%WaveStMod == 1) THEN ! Vertical wave stretching + FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + ELSE IF (p%WaveStMod == 2) THEN ! Extrapolated wave stretching + + + + END IF 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, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + END IF ! Viscous drag: ! Compute relative velocity at the free surface intersection. From 6581725525c56f949ab6dc60c488824c6d4b8141 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Tue, 1 Feb 2022 17:44:57 -0700 Subject: [PATCH 047/338] Initial implementation of extrapolated wave stretching. --- modules/hydrodyn/src/HydroDyn.f90 | 21 +- modules/hydrodyn/src/HydroDyn.txt | 3 + modules/hydrodyn/src/HydroDyn_Types.f90 | 261 +++++++++++ modules/hydrodyn/src/Morison.f90 | 33 +- modules/hydrodyn/src/Morison.txt | 6 + modules/hydrodyn/src/Morison_Types.f90 | 522 +++++++++++++++++++++ modules/openfast-library/src/FAST_Subs.f90 | 15 +- modules/seastate/src/SeaState.txt | 6 +- modules/seastate/src/SeaState_Types.f90 | 261 +++++++++++ modules/seastate/src/Waves.f90 | 286 +++++------ modules/seastate/src/Waves.txt | 6 +- modules/seastate/src/Waves_Types.f90 | 261 +++++++++++ 12 files changed, 1523 insertions(+), 158 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index b73fb3d085..638f5b46c8 100644 --- a/modules/hydrodyn/src/HydroDyn.f90 +++ b/modules/hydrodyn/src/HydroDyn.f90 @@ -800,11 +800,14 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I InputFileData%Morison%WaveTime => InitInp%WaveTime ! Permanently move these wave values to Morison init input (and note they are potentially modified by 2nd order stuff before being sent to Morison) - InputFileData%Morison%WaveAcc => InitInp%WaveAcc - InputFileData%Morison%WaveDynP => InitInp%WaveDynP - InputFileData%Morison%WaveVel => InitInp%WaveVel - InputFileData%Morison%WaveElev1 => InitInp%WaveElev1 - InputFileData%Morison%WaveElev2 => InitInp%WaveElev2 + 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 ! CALL MOVE_ALLOC( Waves_InitOut%nodeInWater,InputFileData%Morison%nodeInWater ) ! moved to Morison%p%nodeInWater in the init routine InputFileData%Morison%WaveStMod = InitInp%WaveStMod @@ -1207,7 +1210,10 @@ SUBROUTINE CleanUp() nullify(InputFileData%Morison%WaveDynP) nullify(InputFileData%Morison%WaveAcc) - nullify(InputFileData%Morison%WaveVel) + nullify(InputFileData%Morison%WaveVel) + nullify(InputFileData%Morison%PWaveDynP0) + nullify(InputFileData%Morison%PWaveAcc0) + nullify(InputFileData%Morison%PWaveVel0) nullify(InputFileData%Morison%WaveTime) nullify(InputFileData%Morison%WaveElev1) nullify(InputFileData%Morison%WaveElev2) @@ -1279,6 +1285,9 @@ SUBROUTINE HydroDyn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) nullify(p%Morison%WaveDynP) nullify(p%Morison%WaveAcc) nullify(p%Morison%WaveVel) + nullify(p%Morison%PWaveDynP0) + nullify(p%Morison%PWaveAcc0) + nullify(p%Morison%PWaveVel0) nullify(p%Morison%WaveElev1) nullify(p%Morison%WaveElev2) do i = 1,p%NBody diff --git a/modules/hydrodyn/src/HydroDyn.txt b/modules/hydrodyn/src/HydroDyn.txt index ed2455a174..af719a4cdc 100644 --- a/modules/hydrodyn/src/HydroDyn.txt +++ b/modules/hydrodyn/src/HydroDyn.txt @@ -112,6 +112,9 @@ typedef ^ ^ SiKi WaveTime 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 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 , accounting for stretching, 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, accounting for stretching, 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, 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 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) diff --git a/modules/hydrodyn/src/HydroDyn_Types.f90 b/modules/hydrodyn/src/HydroDyn_Types.f90 index b731715e6b..335d507b8a 100644 --- a/modules/hydrodyn/src/HydroDyn_Types.f90 +++ b/modules/hydrodyn/src/HydroDyn_Types.f90 @@ -117,6 +117,9 @@ MODULE HydroDyn_Types 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 :: 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 , 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 :: 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 [(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.) [(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 [(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)] @@ -1928,6 +1931,58 @@ SUBROUTINE HydroDyn_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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%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) @@ -2024,6 +2079,18 @@ SUBROUTINE HydroDyn_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) DEALLOCATE(InitInputData%WaveVel) InitInputData%WaveVel => NULL() ENDIF +IF (ASSOCIATED(InitInputData%PWaveDynP0)) THEN + DEALLOCATE(InitInputData%PWaveDynP0) + InitInputData%PWaveDynP0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveAcc0)) THEN + DEALLOCATE(InitInputData%PWaveAcc0) + InitInputData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveVel0)) THEN + DEALLOCATE(InitInputData%PWaveVel0) + InitInputData%PWaveVel0 => NULL() +ENDIF IF (ASSOCIATED(InitInputData%WaveElevC0)) THEN DEALLOCATE(InitInputData%WaveElevC0) InitInputData%WaveElevC0 => NULL() @@ -2163,6 +2230,21 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 ! 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 @@ -2538,6 +2620,91 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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%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 @@ -3019,6 +3186,100 @@ SUBROUTINE HydroDyn_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta 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 ! 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 diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 0e1965d210..faae221c90 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2350,11 +2350,13 @@ SUBROUTINE AllocateNodeLoadVariables(InitInp, p, m, NNodes, errStat, errMsg ) p%AM_End = 0.0 - p%WaveVel => InitInp%WaveVel - p%WaveAcc => InitInp%WaveAcc - p%WaveDynP => InitInp%WaveDynP - p%WaveTime => InitInp%WaveTime - + 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 END SUBROUTINE AllocateNodeLoadVariables @@ -2409,6 +2411,9 @@ SUBROUTINE Morison_End( u, p, x, xd, z, OtherState, y, m, errStat, errMsg ) nullify(p%WaveDynP) nullify(p%WaveAcc) nullify(p%WaveVel) + nullify(p%PWaveDynP0) + nullify(p%PWaveAcc0) + nullify(p%PWaveVel0) nullify(p%WaveElev1) nullify(p%WaveElev2) CALL Morison_DestroyParam( p, errStat, errMsg ) @@ -2757,9 +2762,12 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) ELSE IF (p%WaveStMod == 2) THEN ! Extrapoled wave stretching - - - + m%FV(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * pos1(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * pos1(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%PWaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * pos1(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) END IF END IF ! Node is submerged @@ -3298,9 +3306,12 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) ELSE IF (p%WaveStMod == 2) THEN ! Extrapolated wave stretching - - - + FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%PWaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) END IF END IF ELSE ! Wheeler stretching diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index 9fec676f92..3c2232fc10 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -259,6 +259,9 @@ typedef ^ ^ SiKi typedef ^ ^ SiKi WaveTime {*} - - "" - typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "" - +typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "" - 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 ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - typedef ^ ^ INTEGER WaveStMod - - - "" - @@ -351,6 +354,9 @@ typedef ^ ^ SiKi typedef ^ ^ SiKi WaveAcc0 {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveDynP0 {*}{*}{*} - - "" - typedef ^ ^ SiKi WaveTime {*} - - "Times for which the wave kinematics are pre-computed" s +typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "" - 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 ^ ^ INTEGER NStepWave - - - "" - typedef ^ ^ INTEGER NMOutputs - - - "" - diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index aed4ae61c4..32962c6175 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -322,6 +322,9 @@ MODULE Morison_Types REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< [-] 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(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] INTEGER(IntKi) :: WaveStMod !< [-] @@ -402,6 +405,9 @@ MODULE Morison_Types REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveAcc0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveDynP0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Times for which the wave kinematics are pre-computed [s] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< [-] 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 [-] INTEGER(IntKi) :: NStepWave !< [-] INTEGER(IntKi) :: NMOutputs !< [-] @@ -6236,6 +6242,58 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, END IF DstInitInputData%WaveVel = SrcInitInputData%WaveVel 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%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%PWaveVel0.', ErrStat, ErrMsg,RoutineName) + RETURN + END IF + END IF + DstInitInputData%PWaveVel0 = SrcInitInputData%PWaveVel0 +ENDIF IF (ALLOCATED(SrcInitInputData%nodeInWater)) THEN i1_l = LBOUND(SrcInitInputData%nodeInWater,1) i1_u = UBOUND(SrcInitInputData%nodeInWater,1) @@ -6358,6 +6416,18 @@ SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) DEALLOCATE(InitInputData%WaveVel) InitInputData%WaveVel => NULL() ENDIF +IF (ASSOCIATED(InitInputData%PWaveAcc0)) THEN + DEALLOCATE(InitInputData%PWaveAcc0) + InitInputData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveDynP0)) THEN + DEALLOCATE(InitInputData%PWaveDynP0) + InitInputData%PWaveDynP0 => NULL() +ENDIF +IF (ASSOCIATED(InitInputData%PWaveVel0)) THEN + DEALLOCATE(InitInputData%PWaveVel0) + InitInputData%PWaveVel0 => NULL() +ENDIF IF (ALLOCATED(InitInputData%nodeInWater)) THEN DEALLOCATE(InitInputData%nodeInWater) ENDIF @@ -6726,6 +6796,21 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 ! 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 ! 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 + 1 ! nodeInWater allocated yes/no IF ( ALLOCATED(InData%nodeInWater) ) THEN Int_BufSz = Int_BufSz + 2*2 ! nodeInWater upper/lower bounds for each dimension @@ -7489,6 +7574,91 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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%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%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. ALLOCATED(InData%nodeInWater) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -8473,6 +8643,100 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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 ! 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 ! 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 ! nodeInWater not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -10782,6 +11046,58 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveTime = SrcParamData%WaveTime 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%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%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 (ALLOCATED(SrcParamData%nodeInWater)) THEN i1_l = LBOUND(SrcParamData%nodeInWater,1) i1_u = UBOUND(SrcParamData%nodeInWater,1) @@ -10932,6 +11248,18 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) DEALLOCATE(ParamData%WaveTime) ParamData%WaveTime => NULL() ENDIF +IF (ASSOCIATED(ParamData%PWaveVel0)) THEN + DEALLOCATE(ParamData%PWaveVel0) + ParamData%PWaveVel0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveAcc0)) THEN + DEALLOCATE(ParamData%PWaveAcc0) + ParamData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(ParamData%PWaveDynP0)) THEN + DEALLOCATE(ParamData%PWaveDynP0) + ParamData%PWaveDynP0 => NULL() +ENDIF IF (ALLOCATED(ParamData%nodeInWater)) THEN DEALLOCATE(ParamData%nodeInWater) ENDIF @@ -11104,6 +11432,21 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 ! 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 ! 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 ! nodeInWater allocated yes/no IF ( ALLOCATED(InData%nodeInWater) ) THEN Int_BufSz = Int_BufSz + 2*2 ! nodeInWater upper/lower bounds for each dimension @@ -11682,6 +12025,91 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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%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%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%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. ALLOCATED(InData%nodeInWater) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -12426,6 +12854,100 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er Re_Xferred = Re_Xferred + 1 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 ! 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 ! 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 Int_Xferred = Int_Xferred + 1 ELSE diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 782db97cbc..9b37f229ec 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -910,7 +910,10 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, 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%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 @@ -928,7 +931,10 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, ! NOTE: this may need to change once other modules start using SeaState nullify(Init%OutData_SeaSt%WaveDynP) nullify(Init%OutData_SeaSt%WaveAcc) - nullify(Init%OutData_SeaSt%WaveVel) + nullify(Init%OutData_SeaSt%WaveVel) + nullify(Init%OutData_SeaSt%PWaveDynP0) + nullify(Init%OutData_SeaSt%PWaveAcc0) + nullify(Init%OutData_SeaSt%PWaveVel0) nullify(Init%OutData_SeaSt%WaveTime) nullify(Init%OutData_SeaSt%WaveElevC0) nullify(Init%OutData_SeaSt%WaveDirArr) @@ -992,7 +998,10 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, nullify(Init%InData_HD%WaveDirArr) nullify(Init%InData_HD%WaveDynP) nullify(Init%InData_HD%WaveAcc) - nullify(Init%InData_HD%WaveVel) + nullify(Init%InData_HD%WaveVel) + nullify(Init%InData_HD%PWaveDynP0) + nullify(Init%InData_HD%PWaveAcc0) + nullify(Init%InData_HD%PWaveVel0) nullify(Init%InData_HD%WaveTime) nullify(Init%InData_HD%WaveElev1) nullify(Init%InData_HD%WaveElev2) diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index 43261aaf15..1efd6e1c3b 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -88,9 +88,9 @@ typedef ^ ^ SiKi WaveDOmega 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 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 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 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 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) diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index d888122a81..4d6d149f96 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -108,6 +108,9 @@ MODULE SeaState_Types 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 :: 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 :: 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)] @@ -1626,6 +1629,58 @@ SUBROUTINE SeaSt_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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%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) @@ -1745,6 +1800,18 @@ SUBROUTINE SeaSt_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%WaveVel) InitOutputData%WaveVel => NULL() ENDIF +IF (ASSOCIATED(InitOutputData%PWaveDynP0)) THEN + DEALLOCATE(InitOutputData%PWaveDynP0) + InitOutputData%PWaveDynP0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveAcc0)) THEN + DEALLOCATE(InitOutputData%PWaveAcc0) + InitOutputData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveVel0)) THEN + DEALLOCATE(InitOutputData%PWaveVel0) + InitOutputData%PWaveVel0 => NULL() +ENDIF IF (ASSOCIATED(InitOutputData%WaveElev1)) THEN DEALLOCATE(InitOutputData%WaveElev1) InitOutputData%WaveElev1 => NULL() @@ -1886,6 +1953,21 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 ! 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 @@ -2251,6 +2333,91 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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%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 @@ -2759,6 +2926,100 @@ SUBROUTINE SeaSt_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 ! 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 diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 70d24f75ca..4cc04db75e 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -665,13 +665,13 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 :: 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) @@ -698,13 +698,13 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !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), 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 ) @@ -1078,26 +1078,26 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ( 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') @@ -1129,26 +1129,26 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ( 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') !TODO: These InitOut arrays now need to be organized for the grid points @@ -1161,14 +1161,14 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ALLOCATE ( InitOut%WaveAcc (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%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') - !ALLOCATE ( InitOut%PWaveDynP0 (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), 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%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),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%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3),3), STAT=ErrStatTmp ) - !IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%PWaveAcc0.', ErrStat,ErrMsg,'VariousWaves_Init') + 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,'VariousWaves_Init') + + 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,'VariousWaves_Init') + + 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,'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') @@ -1852,23 +1852,23 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 -!=================================== + !=================================== + ! Extrapoalted wave stretching + DO J = 1,InitInp%NWaveElev ! Loop through all points on the SWL + WaveElevxiPrime0 = EXP( -ImagNmbr*WaveNmbr*( InitInp%WaveElevxi(J)*CosWaveDir(I) + & + InitInp%WaveElevyi(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 @@ -1947,36 +1947,36 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 + !=================================== + DO J = 1,InitInp%NWaveElev ! 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,'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 !=================================== @@ -2009,6 +2009,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 @@ -2073,6 +2074,29 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) end do end do + + + 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 + + + + + + + + ! END DO ! J - All points where the incident wave kinematics will be computed ! CASE ( 1 ) ! Vertical stretching. @@ -2122,15 +2146,13 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ! 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 ) - - + 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,:,:,:,:) + InitOut%PWaveDynP0(InitOut%NStepWave,:,: ) = InitOut%PWaveDynP0(0,:,: ) + InitOut%PWaveVel0 (InitOut%NStepWave,:,:,:) = InitOut%PWaveVel0 (0,:,:,:) + InitOut%PWaveAcc0 (InitOut%NStepWave,:,:,:) = InitOut%PWaveAcc0 (0,:,:,:) CALL CleanUp ( ) @@ -2189,20 +2211,20 @@ SUBROUTINE CleanUp( ) 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( 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) diff --git a/modules/seastate/src/Waves.txt b/modules/seastate/src/Waves.txt index 5c76300c0d..b2b849e759 100644 --- a/modules/seastate/src/Waves.txt +++ b/modules/seastate/src/Waves.txt @@ -83,9 +83,9 @@ typedef ^ ^ SiKi WaveKinzi 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 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 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 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 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 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 WaveTime {*} - - "Simulation times at which the instantaneous elevation of, velocity of, acceleration of, and loads associated with the incident waves are determined" (sec) diff --git a/modules/seastate/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 index 76fdb04b95..a1861cd28f 100644 --- a/modules/seastate/src/Waves_Types.f90 +++ b/modules/seastate/src/Waves_Types.f90 @@ -99,6 +99,9 @@ MODULE Waves_Types 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 :: 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 :: 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 :: 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)] @@ -1147,6 +1150,58 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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%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) @@ -1242,6 +1297,18 @@ SUBROUTINE Waves_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%WaveVel) InitOutputData%WaveVel => NULL() ENDIF +IF (ASSOCIATED(InitOutputData%PWaveDynP0)) THEN + DEALLOCATE(InitOutputData%PWaveDynP0) + InitOutputData%PWaveDynP0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveAcc0)) THEN + DEALLOCATE(InitOutputData%PWaveAcc0) + InitOutputData%PWaveAcc0 => NULL() +ENDIF +IF (ASSOCIATED(InitOutputData%PWaveVel0)) THEN + DEALLOCATE(InitOutputData%PWaveVel0) + InitOutputData%PWaveVel0 => NULL() +ENDIF IF (ASSOCIATED(InitOutputData%WaveElev)) THEN DEALLOCATE(InitOutputData%WaveElev) InitOutputData%WaveElev => NULL() @@ -1334,6 +1401,21 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 ! 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 @@ -1572,6 +1654,91 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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%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 @@ -1896,6 +2063,100 @@ SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 ! 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 From 543e467f39eb2b6b92701e5cc61650da836867d8 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Tue, 1 Feb 2022 20:56:58 -0700 Subject: [PATCH 048/338] Update HydroDynInput_ProcessInitData and SeaStateInput_ProcessInitData to allow WaveStMod = 1,2,3. --- modules/hydrodyn/src/HydroDyn_Input.f90 | 10 ++++------ modules/seastate/src/SeaState_Input.f90 | 20 +++++++++++++------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn_Input.f90 b/modules/hydrodyn/src/HydroDyn_Input.f90 index 346106a84c..2cf776ebf8 100644 --- a/modules/hydrodyn/src/HydroDyn_Input.f90 +++ b/modules/hydrodyn/src/HydroDyn_Input.f90 @@ -1202,13 +1202,12 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! TODO: We are only implementing WaveStMod = 0 (No stretching) at this point in time. 1 Mar 2013 GJH - IF ( InitInp%WaveMod /= 6 .AND. InputFileData%Morison%NMembers > 0 .AND. InitInp%WaveMod > 0 ) THEN + IF ( InitInp%WaveMod /= 0 .AND. InitInp%WaveMod /= 6 .AND. InputFileData%Morison%NMembers > 0 ) THEN IF ( ( InitInp%WaveStMod /= 0 ) .AND. ( InitInp%WaveStMod /= 1 ) .AND. & - ( InitInp%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.' + ( InitInp%WaveStMod /= 2 ) .AND. ( InitInp%WaveStMod /= 3 ) ) THEN + ErrMsg = ' WaveStMod must be 0, 1, 2, or 3.' ErrStat = ErrID_Fatal - RETURN END IF @@ -1219,8 +1218,6 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! RETURN !END IF - - ELSE !don't use this one ! NOTE: Do not read in WaveStMod for floating platforms since it is @@ -1231,6 +1228,7 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! drag term from Morison's equation is computed by integrating up to ! the MSL, regardless of the instantaneous free surface elevation. ! TODO: The following can no longer be set because it is part of InitInp and SeaState Parameters. GJH 9/24/2021 + ! Should be ok now because wave stretching is now carried out in HydroDyn. ! InitInp%WaveStMod = 0 END IF diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 52085e4ab1..8b3fa3c976 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -679,15 +679,21 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E !end if - ! WaveStMod - Model switch for stretching incident wave kinematics to instantaneous free surface. + ! 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 + ! 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%WaveStMod /= 0 .AND. InputFileData%Waves%WaveStMod /= 1 .AND. InputFileData%Waves%WaveStMod /= 1) then - call SetErrStat( ErrID_Fatal,'WaveStMod must be 0, 1, or 2.',ErrStat,ErrMsg,RoutineName) - return - end if - ! + 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. & From 29212662d76dec064c4cf85218538de6ab3340d0 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Tue, 1 Feb 2022 22:55:58 -0700 Subject: [PATCH 049/338] Correct the ALLOCATION size of the arrays storing the partial derivatives of the wave-field variables needed for extrapolated wave stretching. --- modules/seastate/src/Waves.f90 | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 4cc04db75e..cba63fb7b5 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -1078,25 +1078,25 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ) + ALLOCATE ( PWaveDynPC0BPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveVelC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveVelC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveVelC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveAccC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveAccC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveAccC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), 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 ) @@ -1129,25 +1129,25 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ) + ALLOCATE ( PWaveDynP0BPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveVel0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveVel0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveVel0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveAcc0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveAcc0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), 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 ) + ALLOCATE ( PWaveAcc0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') !TODO: These InitOut arrays now need to be organized for the grid points From 03512e6897fd77f0b9e51f3ed6fb0d317a43c98b Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 2 Feb 2022 00:51:50 -0700 Subject: [PATCH 050/338] Update HydroDyn_DriverCode.f90 for extrapolated wave stretching. --- modules/hydrodyn/src/HydroDyn_DriverCode.f90 | 15 +++++++++++++-- modules/seastate/src/SeaState.f90 | 3 +++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 index f9e4240eac..b6c39fbc44 100644 --- a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 +++ b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 @@ -276,6 +276,11 @@ PROGRAM HydroDynDriver InitInData%WaveDynP => InitOutData_SeaSt%WaveDynP InitInData%WaveAcc => InitOutData_SeaSt%WaveAcc InitInData%WaveVel => InitOutData_SeaSt%WaveVel + + InitInData%PWaveDynP0 => InitOutData_SeaSt%PWaveDynP0 + InitInData%PWaveAcc0 => InitOutData_SeaSt%PWaveAcc0 + InitInData%PWaveVel0 => InitOutData_SeaSt%PWaveVel0 + InitInData%WaveElevC0 => InitOutData_SeaSt%WaveElevC0 CALL MOVE_ALLOC( InitOutData_SeaSt%WaveElevC, InitInData%WaveElevC ) InitInData%WaveDirArr => InitOutData_SeaSt%WaveDirArr @@ -285,7 +290,10 @@ PROGRAM HydroDynDriver ! Nullify these pointers because they are no longer needed nullify(InitOutData_SeaSt%WaveDynP) nullify(InitOutData_SeaSt%WaveAcc) - nullify(InitOutData_SeaSt%WaveVel) + nullify(InitOutData_SeaSt%WaveVel) + nullify(InitOutData_SeaSt%PWaveDynP0) + nullify(InitOutData_SeaSt%PWaveAcc0) + nullify(InitOutData_SeaSt%PWaveVel0) nullify(InitOutData_SeaSt%WaveTime) nullify(InitOutData_SeaSt%WaveElevC0) nullify(InitOutData_SeaSt%WaveDirArr) @@ -388,7 +396,10 @@ PROGRAM HydroDynDriver nullify(InitInData%WaveDirArr) nullify(InitInData%WaveDynP) nullify(InitInData%WaveAcc) - nullify(InitInData%WaveVel) + nullify(InitInData%WaveVel) + nullify(InitInData%PWaveDynP0) + nullify(InitInData%PWaveAcc0) + nullify(InitInData%PWaveVel0) nullify(InitInData%WaveTime) nullify(InitInData%WaveElev1) nullify(InitInData%WaveElev2) diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index 63f0d013c6..f783e06304 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -1161,6 +1161,9 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init InitOut%WaveDynP => Waves_InitOut%WaveDynP ! For Morison InitOut%WaveAcc => Waves_InitOut%WaveAcc ! For Morison InitOut%WaveVel => Waves_InitOut%WaveVel ! For Morison + InitOut%PWaveDynP0 => Waves_InitOut%PWaveDynP0 ! For Morison + InitOut%PWaveAcc0 => Waves_InitOut%PWaveAcc0 ! For Morison + InitOut%PWaveVel0 => Waves_InitOut%PWaveVel0 ! For Morison !InitOut%WaveElev => Waves_InitOut%WaveElev ! Not needed !InitOut%WaveElev0 => Waves_InitOut%WaveElev0 ! For WAMIT for use in SS_Excitation call MOVE_ALLOC(Waves_InitOut%WaveElev0, InitOut%WaveElev0 ) From 78c3849814324c1d21d0488ae5d755f268302d85 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Wed, 2 Feb 2022 08:54:28 -0700 Subject: [PATCH 051/338] seastate: change WtrDpth to ReKi so double precision will compile This is more consistent with what is passed into HD and SeaState --- modules/hydrodyn/src/WAMIT.txt | 2 +- modules/hydrodyn/src/WAMIT2.txt | 2 +- modules/hydrodyn/src/WAMIT2_Types.f90 | 4 ++-- modules/hydrodyn/src/WAMIT_Types.f90 | 4 ++-- modules/seastate/src/Waves.f90 | 34 +++++++++++++-------------- modules/seastate/src/Waves2.txt | 2 +- modules/seastate/src/Waves2_Types.f90 | 4 ++-- 7 files changed, 26 insertions(+), 26 deletions(-) diff --git a/modules/hydrodyn/src/WAMIT.txt b/modules/hydrodyn/src/WAMIT.txt index a1badff14d..93c006e72c 100644 --- a/modules/hydrodyn/src/WAMIT.txt +++ b/modules/hydrodyn/src/WAMIT.txt @@ -22,7 +22,7 @@ param WAMIT/WAMIT unused INTEGER 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]" - 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 - - - "" - diff --git a/modules/hydrodyn/src/WAMIT2.txt b/modules/hydrodyn/src/WAMIT2.txt index be56422695..a4935b28c3 100644 --- a/modules/hydrodyn/src/WAMIT2.txt +++ b/modules/hydrodyn/src/WAMIT2.txt @@ -34,7 +34,7 @@ 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 WaveDir - - - "Mean incident wave propagation heading direction" (degrees) diff --git a/modules/hydrodyn/src/WAMIT2_Types.f90 b/modules/hydrodyn/src/WAMIT2_Types.f90 index 0aefaede22..105da86924 100644 --- a/modules/hydrodyn/src/WAMIT2_Types.f90 +++ b/modules/hydrodyn/src/WAMIT2_Types.f90 @@ -52,7 +52,7 @@ 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(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 [(meters)] REAL(SiKi) :: WaveDir !< Mean incident wave propagation heading direction [(degrees)] LOGICAL :: WaveMultiDir !< Indicates the waves are multidirectional -- set by HydroDyn_Input [-] @@ -710,7 +710,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 diff --git a/modules/hydrodyn/src/WAMIT_Types.f90 b/modules/hydrodyn/src/WAMIT_Types.f90 index 88e3026b51..acd90952f2 100644 --- a/modules/hydrodyn/src/WAMIT_Types.f90 +++ b/modules/hydrodyn/src/WAMIT_Types.f90 @@ -43,7 +43,7 @@ MODULE WAMIT_Types 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 !< [-] @@ -997,7 +997,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 diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 8385d8a979..4e5a43ed74 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -299,7 +299,7 @@ FUNCTION WaveNumber ( Omega, g, h ) ! Passed Variables: REAL(ReKi), INTENT(IN ) :: g ! Gravitational acceleration (m/s^2) - REAL(SiKi), INTENT(IN ) :: h ! Water depth (meters) + 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) @@ -328,7 +328,7 @@ FUNCTION WaveNumber ( Omega, g, h ) ELSE ! Omega > 0.0; solve for the wavenumber as usual. - C = Omega*Omega*h/REAL(g,SiKi) + C = Omega*Omega*REAL(h,SiKi)/REAL(g,SiKi) CC = C*C @@ -355,11 +355,11 @@ FUNCTION WaveNumber ( Omega, g, h ) 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 + WaveNumber = ( X0 - ( B*C2*( 1.0 + (A*B*C*X0) ) ) )/REAL(h,SiKi) ELSE - WaveNumber = X0/h + WaveNumber = X0/REAL(h,SiKi) END IF @@ -389,7 +389,7 @@ FUNCTION COSHNumOvrCOSHDen ( k, h, z ) ! 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(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) @@ -399,11 +399,11 @@ FUNCTION COSHNumOvrCOSHDen ( k, h, z ) 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 ) ) + 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 + h ) ),R8Ki)/COSH( k*h ) + COSHNumOvrCOSHDen =REAL( COSH( k*( z + REAL(h,SiKi) ) ),R8Ki)/COSH( k*REAL(h,SiKi) ) END IF @@ -431,7 +431,7 @@ FUNCTION COSHNumOvrSINHDen ( k, h, z ) ! 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(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) @@ -444,13 +444,13 @@ FUNCTION COSHNumOvrSINHDen ( k, h, z ) 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. + 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*h ) ) + 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 + h ) )/SINH( k*h ) + COSHNumOvrSINHDen = COSH( k*( z + REAL(h,SiKi) ) )/SINH( k*REAL(h,SiKi) ) END IF @@ -515,7 +515,7 @@ FUNCTION SINHNumOvrSINHDen ( k, h, z ) ! 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(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) @@ -527,13 +527,13 @@ FUNCTION SINHNumOvrSINHDen ( k, h, z ) 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. + 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 + h ) )/SINH( k*h ) + SINHNumOvrSINHDen = SINH( k*( z + REAL(h,SiKi) ) )/SINH( k*REAL(h,SiKi) ) END IF @@ -2405,7 +2405,7 @@ FUNCTION WheelerStretching ( zOrzPrime, Zeta, h, ForwardOrBackward, ErrStat, Err ! Passed Variables: - REAL(SiKi), INTENT(IN ) :: h ! Water depth (meters) + 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) @@ -2425,12 +2425,12 @@ FUNCTION WheelerStretching ( zOrzPrime, Zeta, h, ForwardOrBackward, ErrStat, Err CASE ( 'F' ) ! Forward - WheelerStretching = ( 1.0 + Zeta/h )*zOrzPrime + Zeta + WheelerStretching = ( 1.0 + Zeta/REAL(h,SiKi) )*zOrzPrime + Zeta CASE ( 'B' ) ! Backward - WheelerStretching = ( zOrzPrime - Zeta )/( 1.0 + Zeta/h ) + WheelerStretching = ( zOrzPrime - Zeta )/( 1.0 + Zeta/REAL(h,SiKi) ) CASE DEFAULT diff --git a/modules/seastate/src/Waves2.txt b/modules/seastate/src/Waves2.txt index e185ca0b6c..1cf5b81cb6 100644 --- a/modules/seastate/src/Waves2.txt +++ b/modules/seastate/src/Waves2.txt @@ -23,7 +23,7 @@ typedef Waves2/Waves2 InitInputType INTEGER UnSum typedef ^ ^ ReKi Gravity - - - "Gravitational acceleration" (m/s^2) typedef ^ ^ ReKi WtrDens - - - "Water density" (kg/m^3) -typedef ^ ^ SiKi WtrDpth - - - "Water depth" (meters) +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" - diff --git a/modules/seastate/src/Waves2_Types.f90 b/modules/seastate/src/Waves2_Types.f90 index 398c9aef2e..c773876140 100644 --- a/modules/seastate/src/Waves2_Types.f90 +++ b/modules/seastate/src/Waves2_Types.f90 @@ -39,7 +39,7 @@ MODULE Waves2_Types 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)] + 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)] @@ -661,7 +661,7 @@ SUBROUTINE Waves2_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Re_Xferred = Re_Xferred + 1 OutData%WtrDens = 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 OutData%NStepWave = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 From a95fb8ce28728e5857b2ce4d6f33cda3221f1068 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 2 Feb 2022 13:57:18 -0700 Subject: [PATCH 052/338] Bug fix for extrapolated wave stretching in Morison.f90. --- modules/hydrodyn/src/Morison.f90 | 56 +++++++++++++++++++------------- 1 file changed, 34 insertions(+), 22 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index faae221c90..c97eb70fe0 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2754,19 +2754,21 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, ELSE ! Node is above SWL - need wave stretching - IF (p%WaveStMod == 1) THEN ! Vertical wave stretching - m%FV(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - ELSE IF (p%WaveStMod == 2) THEN ! Extrapoled wave stretching - m%FV(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * pos1(3) + ! Vertical wave stretching + m%FV(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + m%FDynP(j) = SeaSt_Interp_3D ( Time, positionXY, p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + + ! 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, ErrStat2, ErrMsg2 ) * pos1(3) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%FA(:,j) = SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * pos1(3) + m%FA(:,j) = m%FA(:,j) + SeaSt_Interp_3D_vec( Time, positionXY, p%PWaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * pos1(3) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - m%FDynP(j) = SeaSt_Interp_3D( Time, positionXY, p%PWaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * pos1(3) + m%FDynP(j) = m%FDynP(j) + SeaSt_Interp_3D ( Time, positionXY, p%PWaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * pos1(3) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) END IF @@ -3287,7 +3289,9 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, !----------------------------------------------------------------------------------------------------! ! 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, 'SeaState_CalcOutput' ) @@ -3297,24 +3301,31 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) FDynPFSInt = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + ELSE ! Intersection is above SWL - need wave stretching - IF (p%WaveStMod == 1) THEN ! Vertical wave stretching - FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - ELSE IF (p%WaveStMod == 2) THEN ! Extrapolated wave stretching - FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) + + ! Vertical wave stretching + FVFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%WaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + FDynPFSInt = SeaSt_Interp_3D ( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + + ! Extrapolated wave stretching + IF (p%WaveStMod == 2) THEN + FVFSInt = FVFSInt + SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - FAFSInt = SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) + FAFSInt = FAFSInt + SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%PWaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) + FDynPFSInt = FDynPFSInt + SeaSt_Interp_3D ( Time, FSInt(1:2), p%PWaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) 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, ErrStat2, ErrMsg2 ) @@ -3323,6 +3334,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) FDynPFSInt = SeaSt_Interp_3D( Time, FSInt(1:2), p%WaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + END IF ! Viscous drag: From 4baac0b774a1cf81c12a48cc9cb9047a278ff32b Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 2 Feb 2022 15:51:41 -0700 Subject: [PATCH 053/338] Tweaks to Writing and Reading Wave Kinematics + code cleanup * Added input setting in Stand-alone SeaState module driver: WrWvKinMod 0: do not write kinematics 1: write only the (0,0) WaveElevation time series 2: write all kinematics * Changed kinematics writing to write the NStepWave increment (instead of stopping at NStepWave-1) * Fixed kinematics reading to match above condition * Remove completed TODO comments and removed other unnecessary commented out code --- modules/hydrodyn/src/HydroDyn.f90 | 17 +-- modules/hydrodyn/src/HydroDyn_Input.f90 | 4 +- modules/hydrodyn/src/HydroDyn_Output.f90 | 123 ------------------- modules/seastate/src/SeaState.f90 | 49 ++------ modules/seastate/src/SeaState.txt | 1 + modules/seastate/src/SeaState_DriverCode.f90 | 24 +++- modules/seastate/src/SeaState_Input.f90 | 97 +-------------- modules/seastate/src/SeaState_Output.f90 | 64 +++++++++- modules/seastate/src/SeaState_Types.f90 | 7 ++ modules/seastate/src/UserWaves.f90 | 46 ++----- modules/seastate/src/Waves.f90 | 6 +- modules/seastate/src/Waves.txt | 1 - modules/seastate/src/Waves2.f90 | 2 +- modules/seastate/src/Waves_Types.f90 | 7 -- 14 files changed, 125 insertions(+), 323 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index b8974e7f76..0e4a7e48b9 100644 --- a/modules/hydrodyn/src/HydroDyn.f90 +++ b/modules/hydrodyn/src/HydroDyn.f90 @@ -832,22 +832,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I ! 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 - !TODO: Where does this belong now GJH 9/24/2021 - !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 - - - + InputFileData%Morison%seast_interp_p = InitInp%seast_interp_p ! Check the output switch to see if Morison is needing to send outputs back to HydroDyn via the WriteOutput array diff --git a/modules/hydrodyn/src/HydroDyn_Input.f90 b/modules/hydrodyn/src/HydroDyn_Input.f90 index 346106a84c..c73b0e85f9 100644 --- a/modules/hydrodyn/src/HydroDyn_Input.f90 +++ b/modules/hydrodyn/src/HydroDyn_Input.f90 @@ -1163,7 +1163,7 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! MSL2SWL - Mean sea level to still water level -!TODO: Add check for InputFileData%Morison%MSL2SWL + 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 @@ -1175,7 +1175,7 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS ! WaveMod - Wave kinematics model switch. -!TODO: Verify this check + 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 diff --git a/modules/hydrodyn/src/HydroDyn_Output.f90 b/modules/hydrodyn/src/HydroDyn_Output.f90 index 1ac8ce041c..b78008824f 100644 --- a/modules/hydrodyn/src/HydroDyn_Output.f90 +++ b/modules/hydrodyn/src/HydroDyn_Output.f90 @@ -870,7 +870,6 @@ MODULE HydroDyn_Output PUBLIC :: HDOut_CloseOutput PUBLIC :: HDOut_GetChannels PUBLIC :: HDOUT_Init - PUBLIC :: HDOut_WriteWvKinFiles CONTAINS @@ -952,129 +951,7 @@ 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, F_Add, F_Waves, F_Hydro, PRPmesh, q, qdot, qdotdot, AllOuts, ErrStat, ErrMsg ) diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index 63f0d013c6..d2bf96ece5 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -677,22 +677,6 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init p%WaveKinxi = InputFileData%WaveKinxi p%WaveKinyi = InputFileData%WaveKinyi p%WaveKinzi = InputFileData%WaveKinzi - - ! 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 - - ! 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%NGrid(1), p%NGrid(2) ) , 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 - !! Need to loop over all the elements and copy - !! TODO: This can create a stack overflowstory error - !p%WaveElev(:,:,:) = p%WaveElev1(:,:,:) - - m%LastIndWave = 1 @@ -1105,17 +1089,6 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init END IF - -!========================================== -!TODO: FIX ME - ! 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%SeaStSum ) THEN @@ -1185,14 +1158,18 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init InitOut%SeaSt_Interp_p = p%seast_interp_p - - - ! Write Wave Kinematics? - if ( InputFileData%Waves%WriteWvKin ) then - call SeaStOut_WriteWvKinFiles( InputFileData%Waves%WvKinFile, SeaSt_ProgDesc, p%NStepWave, p%WaveDT, p%X_HalfWidth, p%Y_HalfWidth, & - p%Z_Depth, p%deltaGrid, p%NGrid, InitOut%WaveElev1, InitOut%WaveElev2, & - InitOut%WaveTime, InitOut%WaveVel, InitOut%WaveAcc, InitOut%WaveDynP, ErrStat, ErrMsg ) + 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%WaveTime, InitOut%WaveVel, InitOut%WaveAcc, InitOut%WaveDynP, ErrStat, ErrMsg ) + else if ( InitInp%WrWvKinMod == 1 ) then + call SeaStOut_WriteWaveElev0(InitInp%OutRootname, SeaSt_ProgDesc, p%NStepWave, p%WaveDT, & + p%NGrid, InitOut%WaveElev1, InitOut%WaveElev2, & + InitOut%WaveTime, ErrStat, ErrMsg ) + end if + end if ! Destroy the local initialization data @@ -1431,9 +1408,7 @@ SUBROUTINE SeaSt_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, Er do i = 1, p%NWaveElev positionXY = (/p%WaveElevxi(i),p%WaveElevyi(i)/) - ! TODO: Why interp the WaveElev. Instead just add 1 + 2 if Waves2 is being used? - !WaveElev(i) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev, p%sea_interp_p, ErrStat2, ErrMsg2 ) - ! call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveElev1(i) = SeaSt_Interp_3D( Time, positionXY, p%WaveElev1, p%seast_interp_p, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index 3451bb1d8a..93a0d17a16 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -63,6 +63,7 @@ typedef ^ ^ DbKi TMa 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 ^ ^ 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]" - # # # Define outputs from the initialization routine here: diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 index d35b2a7fec..eaddab51d0 100644 --- a/modules/seastate/src/SeaState_DriverCode.f90 +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -39,6 +39,7 @@ program SeaStateDriver 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? @@ -174,7 +175,7 @@ program SeaStateDriver ! 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 !------------------------------------------------------------------------------------- @@ -589,7 +590,26 @@ SUBROUTINE ReadDriverInputFile( inputFile, InitInp, ErrStat, ErrMsg ) return end if - + ! WrWvKinMod - Write Kinematics? + + call ReadVar ( UnIn, FileName, InitInp%WrWvKinMod, 'WrWvKinMod', 'WrWvKinMod', ErrStat, ErrMsg, UnEchoLocal ) + + if ( ErrStat /= ErrID_None ) then + ErrMsg = ' Failed to read WrWvKinMod parameter.' + ErrStat = ErrID_Fatal + call CleanupEchoFile( InitInp%Echo, 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 + call CleanupEchoFile( InitInp%Echo, UnEchoLocal ) + close( UnIn ) + return + end if + + ! NSteps call ReadVar ( UnIn, FileName, InitInp%NSteps, 'NSteps', & diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 8b9250b0ee..4601b7f239 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -541,15 +541,6 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E return end if -!TODO: This is now a HD input check only - ! ! MSL2SWL - Mean sea level to still water level - ! - !if ( InputFileData%PotMod == 1 .AND. .NOT. EqualRealNos(InputFileData%MSL2SWL, 0.0_ReKi) ) then - ! call SetErrStat( ErrID_Fatal,'MSL2SWL must be 0 when PotMod = 1 (WAMIT).',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) @@ -563,8 +554,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E end if ! Z_Depth - Depth of the domain the Z direction (m) - !TODO: I'm not sure we want to offset this grid depth value. Check with Jason. - !InputFileData%Z_Depth = InputFileData%Z_Depth + InputFileData%MSL2SWL + 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 @@ -621,7 +611,6 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E end if ! LEN_TRIM(InputFileData%Waves%WaveModChr) -!TODO: THese tests need to be done by HD GJH 7/11/21 if ( WaveModIn < 0 .OR. WaveModIn > 6 ) then call SetErrStat( ErrID_Fatal,'WaveMod must be 0, 1, 1P#, 2, 3, 4, 5, or 6.',ErrStat,ErrMsg,RoutineName) return @@ -812,12 +801,6 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E return end if -!TODO: THis needs to be done by HD : Does that mean the WvLowCOff and WvHiCOff need to be InitOut now? - ! ! 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. @@ -927,17 +910,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E call GetPath( TRIM(InitInp%InputFile), TmpPath ) InputFileData%Waves%WvKinFile = TRIM(TmpPath)//TRIM(InputFileData%Waves%WvKinFile) end if - InputFileData%Waves%WriteWvKin = .FALSE. - else - if ( LEN_TRIM( InputFileData%Waves%WvKinFile ) == 0 ) then - InputFileData%Waves%WriteWvKin = .FALSE. - else - 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 = .TRUE. - end if + end if @@ -986,15 +959,6 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E return end if -!TODO: This needs to be handled by HD - ! ! 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 !------------------------------------------------------------------------- @@ -1145,60 +1109,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E end if - !TODO: Move these to HD - !.................. - ! check for linearization - !.................. - !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 - ! - ! if ( (InputFileData%WAMIT%ExctnMod == 1) ) then - ! call SetErrStat( ErrID_Fatal, 'Cannot set wave excitation model to DFT for linearization. Set ExctnMod=0 or 2.', ErrStat, ErrMsg, RoutineName ) - ! end if - ! - ! if ( InputFileData%WAMIT%RdtnMod == 1 ) then - ! call SetErrStat( ErrID_Fatal, 'Cannot set wave radiation model to convolution for linearization. Set RdtnMod=0 or 2.', ErrStat, ErrMsg, RoutineName ) - ! end if - ! - ! if ( InputFileData%WAMIT2%MnDrift /= 0 ) then - ! call SetErrStat( ErrID_Fatal, 'Mean-drift 2nd-order forces cannot be used for linearization. Set MnDrift=0.', ErrStat, ErrMsg, RoutineName ) - ! end if - ! - ! if ( InputFileData%WAMIT2%NewmanApp /= 0 ) then - ! call SetErrStat( ErrID_Fatal, "Mean- and slow-drift 2nd-order forces computed with Newman's approximation cannot be used for linearization. Set NewmanApp=0.", ErrStat, ErrMsg, RoutineName ) - ! end if - ! - ! if ( InputFileData%WAMIT2%DiffQTF /= 0 ) then - ! call SetErrStat( ErrID_Fatal, 'Full difference-frequency 2nd-order forces computed with full QTF cannot be used for linearization. Set DiffQTF=0.', ErrStat, ErrMsg, RoutineName ) - ! end if - ! - ! if ( InputFileData%WAMIT2%SumQTF /= 0 ) then - ! call SetErrStat( ErrID_Fatal, 'Full summation-frequency 2nd-order forces computed with full QTF cannot be used for linearization. Set SumQTF=0.', ErrStat, ErrMsg, RoutineName ) - ! end if - ! - !end if - - - + !------------------------------------------------------------------------------------------------- ! Data section for OUTPUT !------------------------------------------------------------------------------------------------- @@ -1285,7 +1196,7 @@ subroutine SeaStateInput_ProcessInitData( InitInp, p, Interval, InputFileData, E end if -!TODO: This is now set with the grid points? GJH 7/11/21 +!NOTE: This is now set with the grid points? GJH 7/11/21 ! Establish the number and locations where the wave kinematics will be computed InputFileData%Waves%NWaveKin = p%NGridPts ! Number of points where the incident wave kinematics will be computed (-) InputFileData%Waves%NWaveElev = p%NGrid(1)*p%NGrid(2) ! Number of XY grid points where the wave elevations are computed diff --git a/modules/seastate/src/SeaState_Output.f90 b/modules/seastate/src/SeaState_Output.f90 index a3c34b0fa8..c9631b3f9a 100644 --- a/modules/seastate/src/SeaState_Output.f90 +++ b/modules/seastate/src/SeaState_Output.f90 @@ -238,6 +238,7 @@ MODULE SeaState_Output PUBLIC :: SeaStOut_GetChannels PUBLIC :: SeaStOut_Init PUBLIC :: SeaStOut_WriteWvKinFiles + PUBLIC :: SeaStOut_WriteWaveElev0 CONTAINS @@ -373,6 +374,9 @@ SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, WaveDT, X_ 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 ) @@ -383,7 +387,7 @@ SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, WaveDT, X_ call WriteWvKinHeader( UnWv, iFile, Delim, SeaSt_Prog, waveDT, -z_gridPts(1), NGrid, deltaGrid ) - DO m= 0,NStepWave-1 + DO m= 0,NStepWave DO k = 1, NGrid(3) do j = 1, NGrid(2) do i = 1, NGrid(1) @@ -436,7 +440,7 @@ SUBROUTINE SeaStOut_WriteWvKinFiles( Rootname, SeaSt_Prog, NStepWave, WaveDT, X_ call WriteWvKinHeader( UnWv, 8, Delim, SeaSt_Prog, waveDT, -z_gridPts(1), NGrid, deltaGrid ) - DO m= 0,NStepWave-1 + DO m= 0,NStepWave do j = 1, NGrid(2) do i = 1, NGrid(1) !Frmt = '('//TRIM(Int2LStr(NWaveElev))//'(:,A,ES11.4e2))' @@ -518,6 +522,62 @@ end subroutine WriteWvKinHeader END SUBROUTINE SeaStOut_WriteWvKinFiles +subroutine SeaStOut_WriteWaveElev0( Rootname, SeaSt_Prog, NStepWave, WaveDT, NGrid, WaveElev1, WaveElev2, WaveTime, 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 + 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 + CHARACTER(5) :: extension(7) + INTEGER :: i, j, k, m, iFile + CHARACTER(64) :: Frmt, Frmt2, Sfrmt + CHARACTER(ChanLen) :: Delim + real(ReKi) :: x_gridPts(NGrid(1)), y_gridPts(NGrid(2)), z_gridPts(NGrid(3)) + ! 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( CurrentTime, p, NWaveElev, WaveElev, WaveElev1, WaveElev2, NWaveKin, WaveVel, WaveAcc, WaveDynP, AllOuts, ErrStat, ErrMsg ) diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 199cc9cc1c..9e306afe2b 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -85,6 +85,7 @@ MODULE SeaState_Types 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,-] 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] [-] END TYPE SeaSt_InitInputType ! ======================= ! ========= SeaSt_InitOutputType ======= @@ -1152,6 +1153,7 @@ SUBROUTINE SeaSt_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er ENDIF DstInitInputData%PtfmLocationX = SrcInitInputData%PtfmLocationX DstInitInputData%PtfmLocationY = SrcInitInputData%PtfmLocationY + DstInitInputData%WrWvKinMod = SrcInitInputData%WrWvKinMod END SUBROUTINE SeaSt_CopyInitInput SUBROUTINE SeaSt_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) @@ -1237,6 +1239,7 @@ SUBROUTINE SeaSt_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err END IF Re_BufSz = Re_BufSz + 1 ! PtfmLocationX Re_BufSz = Re_BufSz + 1 ! PtfmLocationY + Int_BufSz = Int_BufSz + 1 ! WrWvKinMod IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -1336,6 +1339,8 @@ SUBROUTINE SeaSt_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 END SUBROUTINE SeaSt_PackInitInput SUBROUTINE SeaSt_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -1453,6 +1458,8 @@ SUBROUTINE SeaSt_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 END SUBROUTINE SeaSt_UnPackInitInput SUBROUTINE SeaSt_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) diff --git a/modules/seastate/src/UserWaves.f90 b/modules/seastate/src/UserWaves.f90 index 42c15cad12..ff3f7456cc 100644 --- a/modules/seastate/src/UserWaves.f90 +++ b/modules/seastate/src/UserWaves.f90 @@ -114,7 +114,9 @@ SUBROUTINE WaveElev_ReadFile ( InitInp, WaveElevData, ErrStat, ErrMsg ) ! 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 @@ -753,6 +755,11 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ) @@ -775,7 +782,7 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) END IF end do - DO m = 0,InitOut%NStepWave-1 + DO m = 0,InitOut%NStepWave icount = 1 do k = 1, InitInp%NGrid(3) do j = 1, InitInp%NGrid(2) @@ -843,7 +850,7 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) END IF end do - DO m = 0,InitOut%NStepWave-1 + 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 @@ -863,41 +870,8 @@ SUBROUTINE UserWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) END DO -!TODO FIX for new grid of XY wave elevations -! 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 -!!TODO: FIX WaveElev based on grid now. -! !DO t = 0,InitOut%NStepWave-1 -! ! Read(UnWv,Frmt) ( Delim, InitOut%WaveElev(t,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,:) diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 8385d8a979..92710b389b 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -1133,7 +1133,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) !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') -!TODO: These InitOut arrays now need to be organized for the grid points + ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP.', ErrStat,ErrMsg,'VariousWaves_Init') @@ -1786,7 +1786,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) CALL CleanUp() RETURN END IF -!TODO: FIX ME For generating grid elevations +!NOTE: For all grid points DO k = 1,InitInp%NWaveElev ! 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 @@ -2052,7 +2052,7 @@ SUBROUTINE WaveElevTimeSeriesAtXY(Xcoord,Ycoord, WaveElevAtXY, WaveElevCAtXY, Er CALL ApplyFFT_cx ( WaveElevAtXY(0:InitOut%NStepWave-1), tmpComplexArr, FFT_Data, ErrStatLcl2 ) CALL SetErrStat(ErrStatLcl2,'Error occured while applying the FFT to InitOut%WaveElev.',ErrStatLcl,ErrMsgLcl,'WaveElevTimeSeriesAtXY') -!TODO: Why is tmpComplexArr 0:NStepWave2 long? why not NStepWave2-1 ?? GJH + WaveElevCAtXY( 1,: ) = REAL(tmpComplexArr(:)) WaveElevCAtXY( 2,: ) = IMAG(tmpComplexArr(:)) ! Append first datpoint as the last as aid for repeated wave data diff --git a/modules/seastate/src/Waves.txt b/modules/seastate/src/Waves.txt index 1eb0228922..04fdb41088 100644 --- a/modules/seastate/src/Waves.txt +++ b/modules/seastate/src/Waves.txt @@ -21,7 +21,6 @@ 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) diff --git a/modules/seastate/src/Waves2.f90 b/modules/seastate/src/Waves2.f90 index 36a19e7be9..d3efda75cc 100644 --- a/modules/seastate/src/Waves2.f90 +++ b/modules/seastate/src/Waves2.f90 @@ -938,7 +938,7 @@ SUBROUTINE Waves2_Init( InitInp, u, p, x, xd, z, OtherState, y, misc, Interval, !! that point. The results are added to the wave elevation results from the diff !! frequency calculations earlier in the code. !-------------------------------------------------------------------------------- -!TODO: This is all grid points +!NOTE: This is all grid points ! Step through the requested points DO k = 1,InitInp%NWaveElev ! 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. diff --git a/modules/seastate/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 index 3e73667b5c..9520643465 100644 --- a/modules/seastate/src/Waves_Types.f90 +++ b/modules/seastate/src/Waves_Types.f90 @@ -38,7 +38,6 @@ MODULE Waves_Types 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)] @@ -171,7 +170,6 @@ SUBROUTINE Waves_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er 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 @@ -362,7 +360,6 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 @@ -485,8 +482,6 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 @@ -733,8 +728,6 @@ SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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) From 37c39a3c3cbdef9c2cc9f9743507c9ec56dba7ff Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 2 Feb 2022 23:51:16 -0700 Subject: [PATCH 054/338] Replace COTH with 1/TANH to compile with double precision. Fix WaveMultiDir which was not properly passed to HydroDyn. --- modules/seastate/src/Waves.f90 | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index c5ecb314e8..1828905664 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -1861,7 +1861,13 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ) + + IF (I == 0_IntKi) THEN ! Zero frequency component + 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) @@ -2435,7 +2441,7 @@ SUBROUTINE Waves_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ENDSELECT - + InitOut%WaveMultiDir = InitInp%WaveMultiDir u%DummyInput = 0.0 p%DT = Interval p%WaveMultiDir = InitOut%WaveMultiDir ! Flag to indicate multidirectional waves From 62dbc2129be7579b9bce260df6eedb15716949ed Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 3 Feb 2022 08:53:50 -0700 Subject: [PATCH 055/338] Fixed a small type casting issue in SeaState Interpolator --- modules/seastate/src/SeaState_Interp.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/seastate/src/SeaState_Interp.f90 b/modules/seastate/src/SeaState_Interp.f90 index fe984659ee..696e86f98d 100644 --- a/modules/seastate/src/SeaState_Interp.f90 +++ b/modules/seastate/src/SeaState_Interp.f90 @@ -311,8 +311,8 @@ subroutine SetTimeIndex(Time, deltaT, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, Er ! 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 = Time / deltaT - Tmp = MOD(Tmp,real((nMax), DbKi)) + Tmp = real(Time,ReKi) / deltaT + 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 From 595544c13631c3f04a78a7659b31cc28c2ed9a0f Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Thu, 3 Feb 2022 10:47:09 -0700 Subject: [PATCH 056/338] Proposed bug fixes for OpenFAST issues #844 and #847 --- modules/hydrodyn/src/Morison.f90 | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index f0cce36f87..96a708d4b3 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -1663,13 +1663,13 @@ 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 + 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 @@ -2736,7 +2736,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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) .and. (i >= mem%i_floor) ) then ! Member is NOT modeled with Potential Flow Theory and not completely buried in the seabed. Bug fix for OpenFast issue #847 GJH 2/3/2022 ! 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? <<< @@ -2809,8 +2809,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, ! ------------------- buoyancy loads: sides: Sections 3.1 and 3.2 ------------------------ -!TODO: What about elements which are buried in the seabed? This doesn't seem to be tested for - if (z1 < 0.0_ReKi) then ! if segment is at least partially submerged ... + if ( z1 < 0.0_ReKi ) then ! if segment is at least partially submerged if (z2 >= 0) then ! special calculation if the slice is partially submerged From 264584dd7f9cccc6c01b41e33b823d3ce0038e78 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Thu, 3 Feb 2022 15:43:40 -0700 Subject: [PATCH 057/338] Skip computing z-derivatives on the SWL unless WaveStMod = 2 (extrapolation wave stretching) --- modules/seastate/src/Waves.f90 | 243 +++++++++++++++------------------ 1 file changed, 113 insertions(+), 130 deletions(-) diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 1828905664..f9458a8efa 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -1078,27 +1078,6 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveDynPC0BPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveVelC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveVelC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveVelC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveAccC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveAccC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveAccC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), 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') @@ -1128,29 +1107,6 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveDynP0BPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveVel0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveVel0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveVel0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0Pz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveAcc0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveAcc0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( PWaveAcc0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) - IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - - ALLOCATE ( InitOut%WaveDynP (0:InitOut%NStepWave,InitInp%NGrid(1),InitInp%NGrid(2),InitInp%NGrid(3) ), STAT=ErrStatTmp ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveDynP.', ErrStat,ErrMsg,'VariousWaves_Init') @@ -1161,32 +1117,60 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ALLOCATE ( InitOut%WaveAcc (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%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') - 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,'VariousWaves_Init') + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation Wave Stretching + + ALLOCATE ( PWaveDynPC0BPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveDynPC0BPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - 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,'VariousWaves_Init') + ALLOCATE ( PWaveVelC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') - 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,'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 ( PWaveVelC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveVelC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVelC0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAccC0HxiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAccC0HyiPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAccC0VPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveDynP0BPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveDynP0BPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveVel0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveVel0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveVel0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveVel0Pz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAcc0HxiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HxiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAcc0HyiPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HyiPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAcc0VPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0VPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + 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,'VariousWaves_Init') + + 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,'VariousWaves_Init') + + 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,'VariousWaves_Init') + + END IF ! END TODO SECTION @@ -1853,27 +1837,26 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) END DO ! J - All points where the incident wave kinematics will be computed without stretching !=================================== - ! Extrapoalted wave stretching - DO J = 1,InitInp%NWaveElev ! Loop through all points on the SWL - WaveElevxiPrime0 = EXP( -ImagNmbr*WaveNmbr*( InitInp%WaveElevxi(J)*CosWaveDir(I) + & - InitInp%WaveElevyi(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 + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation wave stretching + DO J = 1,InitInp%NWaveElev ! Loop through all points on the SWL + WaveElevxiPrime0 = EXP( -ImagNmbr*WaveNmbr*( InitInp%WaveElevxi(J)*CosWaveDir(I) + & + InitInp%WaveElevyi(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 - IF (I == 0_IntKi) THEN ! Zero frequency component - PWaveVelC0VPz0 (I,J) = 0.0_ReKi - ELSE - PWaveVelC0VPz0 (I,J) = ImagOmega*tmpComplex*WaveElevxiPrime0*WaveNmbr/TANH ( WaveNmbr*InitInp%WtrDpth ) - END IF + 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) - - - END DO ! J - All points where the incident wave kinematics will be computed without stretching + 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 IF !=================================== END DO ! I - The positive frequency components (including zero) of the discrete Fourier transforms @@ -1953,35 +1936,37 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) END DO ! J - All points where the incident wave kinematics will be computed without stretching !=================================== - DO J = 1,InitInp%NWaveElev ! 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,'VariousWaves_Init') + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation Wave Stretching + DO J = 1,InitInp%NWaveElev ! 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,'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 ( 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 ( 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 ( 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 ( 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 ( 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') + 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 + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF - END DO ! J - All points where the incident wave kinematics will be computed without stretching + END DO ! J - All points where the incident wave kinematics will be computed without stretching + END IF !=================================== @@ -2080,26 +2065,21 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) end do - - 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 + 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 - END DO - - - - - - + END IF ! END DO ! J - All points where the incident wave kinematics will be computed @@ -2155,9 +2135,12 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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,:,:,:) + + 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,:,:,:) + END IF CALL CleanUp ( ) From 482e0770d418a0dead8c4af0f5f929c741e8524f Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Fri, 4 Feb 2022 20:09:29 -0700 Subject: [PATCH 058/338] Start implementing the MacCamy-Fuchs diffraction model. --- modules/hydrodyn/src/HydroDyn_Input.f90 | 111 ++++++++++++++++++++++-- modules/hydrodyn/src/Morison.f90 | 1 + modules/hydrodyn/src/Morison.txt | 5 ++ modules/hydrodyn/src/Morison_Types.f90 | 35 ++++++++ 4 files changed, 144 insertions(+), 8 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn_Input.f90 b/modules/hydrodyn/src/HydroDyn_Input.f90 index 74f99c00d6..fb47f3808a 100644 --- a/modules/hydrodyn/src/HydroDyn_Input.f90 +++ b/modules/hydrodyn/src/HydroDyn_Input.f90 @@ -190,6 +190,7 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp INTEGER(IntKi) :: ErrStat2 CHARACTER(ErrMsgLen) :: ErrMsg2 CHARACTER(*), PARAMETER :: RoutineName = 'HydroDyn_ParaseInput' + ! Initialize local data UnEc = -1 @@ -601,10 +602,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) @@ -621,7 +626,6 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp if (allocated(tmpReArray)) deallocate(tmpReArray) - !------------------------------------------------------------------------------------------------- ! Depth-based Hydrodynamic Coefficients Section !------------------------------------------------------------------------------------------------- @@ -652,8 +656,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) @@ -669,6 +677,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 @@ -704,8 +720,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) @@ -1072,6 +1092,81 @@ SUBROUTINE HydroDyn_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDp RETURN CONTAINS + + SUBROUTINE ParseRAryWKywrd( FileInfo, LineNum, AryName, Ary, AryLen, Kywrd, KywrdVal, KywrdEntry, HasKywrd, ErrStat, ErrMsg, UnEc ) + + ! 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 + + 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 ) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index baf3330a71..84e8532118 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -1797,6 +1797,7 @@ 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') diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index 3c2232fc10..b7f99334fc 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -45,6 +45,7 @@ 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" - @@ -65,6 +66,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 @@ -146,6 +148,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" - @@ -185,6 +188,7 @@ 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 @@ -228,6 +232,7 @@ 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 ^ ^ 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 - - - "" - diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index 32962c6175..e95d8a1279 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -77,6 +77,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 ======= @@ -104,6 +105,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] @@ -191,6 +193,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 ! ======================= @@ -236,6 +239,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 ======= @@ -291,6 +295,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 !< [-] @@ -987,6 +992,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 ) @@ -1048,6 +1054,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 @@ -1101,6 +1108,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 ) @@ -1155,6 +1164,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 ) @@ -1341,6 +1352,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 @@ -1414,6 +1426,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 @@ -1487,6 +1500,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 @@ -1568,6 +1583,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) @@ -2268,6 +2285,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 @@ -2640,6 +2658,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 ) @@ -3287,6 +3306,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 @@ -4059,6 +4080,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 @@ -4940,6 +4963,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 ) @@ -5013,6 +5037,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 @@ -5090,6 +5115,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 ) @@ -5168,6 +5195,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 ) @@ -5999,6 +6028,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) @@ -6583,6 +6613,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 @@ -7067,6 +7098,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 @@ -8008,6 +8041,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 From bab2272f74f823f1ce878b92c4f4c574a878ba30 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Mon, 7 Feb 2022 18:14:01 -0700 Subject: [PATCH 059/338] Added evaluation of scaled flow acceleration in SeaState based on the MacCamy-Fuchs diffraction model. --- modules/hydrodyn/src/Morison.f90 | 12 +- modules/seastate/src/SeaState.f90 | 10 + modules/seastate/src/SeaState.txt | 3 + modules/seastate/src/SeaState_Input.f90 | 9 + modules/seastate/src/SeaState_Types.f90 | 297 ++++++++++++++++++++++++ modules/seastate/src/Waves.f90 | 187 ++++++++++++++- modules/seastate/src/Waves.txt | 4 +- modules/seastate/src/Waves_Types.f90 | 201 ++++++++++++++++ 8 files changed, 714 insertions(+), 9 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 84e8532118..4c88b3b735 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -1115,7 +1115,7 @@ END SUBROUTINE SetDepthBasedCoefs !==================================================================================================== !SUBROUTINE SetExternalHydroCoefs SUBROUTINE SetExternalHydroCoefs( MSL2SWL, MCoefMod, MmbrCoefIDIndx, SimplCd, SimplCdMG, SimplCa, SimplCaMG, SimplCp, & - SimplCpMG, SimplAxCd, SimplAxCdMG, SimplAxCa, SimplAxCaMG, SimplAxCp, SimplAxCpMG, CoefMembers, & + SimplCpMG, SimplAxCd, SimplAxCdMG, SimplAxCa, SimplAxCaMG, SimplAxCp, SimplAxCpMG, SimplMCF, CoefMembers, & NCoefDpth, CoefDpths, numNodes, nodes, member ) ! This private subroutine generates the Cd, Ca, Cp, CdMG, CaMG and CpMG coefs for the member based on ! the input data. @@ -1135,6 +1135,7 @@ 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(:) @@ -1166,13 +1167,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 @@ -1193,6 +1194,7 @@ 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 @@ -1483,8 +1485,8 @@ 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%NNodes, 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) diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index cb02ae4b0d..70c1558bd0 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -658,6 +658,7 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init p%WaveVel => Waves_InitOut%WaveVel p%WaveAcc => Waves_InitOut%WaveAcc p%WaveDynP => Waves_InitOut%WaveDynP + p%WaveAccMCF => Waves_InitOut%WaveAccMCF ! Store user-requested wave elevation locations ALLOCATE ( p%WaveElevxi (InputFileData%NWaveElev), STAT=ErrStat2 ) IF (ErrStat2 /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveElevxi.', ErrStat, ErrMsg, RoutineName) @@ -906,6 +907,10 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ELSE p%WaveAcc = p%WaveAcc + InitOut%Waves2%WaveAcc2D !IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2D0 + IF (InputFileData%Waves%MCFD > 0) THEN + p%WaveAccMCF = p%WaveAccMCF + InitOut%Waves2%WaveAcc2D + END IF + ENDIF ENDIF ! second order wave kinematics difference frequency results @@ -964,6 +969,9 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ELSE p%WaveAcc = p%WaveAcc + InitOut%Waves2%WaveAcc2S !IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2S0 + IF (InputFileData%Waves%MCFD > 0) THEN + p%WaveAccMCF = p%WaveAccMCF + InitOut%Waves2%WaveAcc2S + END IF ENDIF ENDIF ! second order wave kinematics sum frequency results @@ -1137,6 +1145,8 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init InitOut%PWaveDynP0 => Waves_InitOut%PWaveDynP0 ! For Morison InitOut%PWaveAcc0 => Waves_InitOut%PWaveAcc0 ! For Morison InitOut%PWaveVel0 => Waves_InitOut%PWaveVel0 ! For Morison + InitOut%WaveAccMCF => Waves_InitOut%WaveAccMCF ! For Morison (MacCamy-Fuchs) + InitOut%PWaveAccMCF0 => Waves_InitOut%PWaveAccMCF0 ! For Morison (MacCamy-Fuchs) !InitOut%WaveElev => Waves_InitOut%WaveElev ! Not needed !InitOut%WaveElev0 => Waves_InitOut%WaveElev0 ! For WAMIT for use in SS_Excitation call MOVE_ALLOC(Waves_InitOut%WaveElev0, InitOut%WaveElev0 ) diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index 035651209a..634d480471 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -88,9 +88,11 @@ typedef ^ ^ SiKi WaveDOmega #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 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" - @@ -171,6 +173,7 @@ typedef ^ ^ SiKi Wav 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 WaveElev0 {*} - - "Instantaneous elevation time-series of incident waves at the platform reference point" (meters) +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) 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) diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 420bf76d82..593bd94eb9 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -394,6 +394,15 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, 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; !------------------------------------------------------------------------------------------------- ! Data section for OUTPUT diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 64f9a17685..4063c8d1a4 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -108,9 +108,11 @@ MODULE SeaState_Types 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 [-] @@ -185,6 +187,7 @@ MODULE SeaState_Types 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 :: 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 :: 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)] 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)] @@ -1616,6 +1619,26 @@ SUBROUTINE SeaSt_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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) @@ -1670,6 +1693,24 @@ SUBROUTINE SeaSt_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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) @@ -1803,6 +1844,10 @@ SUBROUTINE SeaSt_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%WaveAcc) InitOutputData%WaveAcc => NULL() ENDIF +IF (ASSOCIATED(InitOutputData%WaveAccMCF)) THEN + DEALLOCATE(InitOutputData%WaveAccMCF) + InitOutputData%WaveAccMCF => NULL() +ENDIF IF (ASSOCIATED(InitOutputData%WaveVel)) THEN DEALLOCATE(InitOutputData%WaveVel) InitOutputData%WaveVel => NULL() @@ -1815,6 +1860,10 @@ SUBROUTINE SeaSt_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%PWaveAcc0) InitOutputData%PWaveAcc0 => NULL() ENDIF +IF (ASSOCIATED(InitOutputData%PWaveAccMCF0)) THEN + DEALLOCATE(InitOutputData%PWaveAccMCF0) + InitOutputData%PWaveAccMCF0 => NULL() +ENDIF IF (ASSOCIATED(InitOutputData%PWaveVel0)) THEN DEALLOCATE(InitOutputData%PWaveVel0) InitOutputData%PWaveVel0 => NULL() @@ -1955,6 +2004,11 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -1970,6 +2024,11 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -2305,6 +2364,41 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -2395,6 +2489,36 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -2895,6 +3019,44 @@ SUBROUTINE SeaSt_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 @@ -2994,6 +3156,39 @@ SUBROUTINE SeaSt_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 @@ -4604,6 +4799,26 @@ SUBROUTINE SeaSt_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs END IF END IF DstParamData%WaveVel = SrcParamData%WaveVel +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 DstParamData%NWaveKin = SrcParamData%NWaveKin IF (ALLOCATED(SrcParamData%WaveKinxi)) THEN @@ -4717,6 +4932,10 @@ SUBROUTINE SeaSt_DestroyParam( ParamData, ErrStat, ErrMsg ) DEALLOCATE(ParamData%WaveVel) ParamData%WaveVel => NULL() ENDIF +IF (ASSOCIATED(ParamData%WaveAccMCF)) THEN + DEALLOCATE(ParamData%WaveAccMCF) + ParamData%WaveAccMCF => NULL() +ENDIF IF (ALLOCATED(ParamData%WaveKinxi)) THEN DEALLOCATE(ParamData%WaveKinxi) ENDIF @@ -4841,6 +5060,11 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 ! 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 ! NWaveKin Int_BufSz = Int_BufSz + 1 ! WaveKinxi allocated yes/no @@ -5204,6 +5428,41 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 IntKiBuf(Int_Xferred) = InData%NWaveKin Int_Xferred = Int_Xferred + 1 @@ -5692,6 +5951,44 @@ SUBROUTINE SeaSt_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM 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 OutData%NWaveKin = IntKiBuf(Int_Xferred) Int_Xferred = Int_Xferred + 1 diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index f9458a8efa..11527e8ac8 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -801,6 +801,26 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) REAL(SiKi), ALLOCATABLE :: WaveElevC0Re(:) !< Real part of the partially modified wave DFT amplitude (m) REAL(SiKi), ALLOCATABLE :: OmegaArr(:) !< Array of all non-negative angular frequencies (rad/s) REAL(SiKi), ALLOCATABLE :: tmpArr(:) !< A temporary array of real numbers of constrained wave (-) + + ! 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 @@ -1116,7 +1136,33 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) ALLOCATE ( InitOut%WaveAcc (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%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') + + + IF (InitInp%MCFD > 0.0_ReKi) 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,'VariousWaves_Init') + + ALLOCATE ( WaveAccC0HyiMCF(0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0HyiMCF.', ErrStat,ErrMsg,'VariousWaves_Init') + ALLOCATE ( WaveAccC0VMCF (0:InitOut%NStepWave2 ,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAccC0VMCF.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( WaveAcc0HxiMCF (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0HxiMCF.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( WaveAcc0HyiMCF (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0HyiMCF.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( WaveAcc0VMCF (0:InitOut%NStepWave-1,NWaveKin0Prime ), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array WaveAcc0VMCF.', ErrStat,ErrMsg,'VariousWaves_Init') + + 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,'VariousWaves_Init') + END IF + + IF (InitInp%WaveStMod .EQ. 2_IntKi) THEN ! Extrapolation Wave Stretching ALLOCATE ( PWaveDynPC0BPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) @@ -1169,6 +1215,31 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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,'VariousWaves_Init') + + IF (InitInp%MCFD > 0.0_ReKi) THEN ! MacCamy-Fuchs model + + ALLOCATE ( PWaveAccC0HxiMCFPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HxiMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAccC0HyiMCFPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0HyiMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAccC0VMCFPz0 (0:InitOut%NStepWave2 ,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAccC0VMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAcc0HxiMCFPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HxiMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAcc0HyiMCFPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0HyiMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + ALLOCATE ( PWaveAcc0VMCFPz0 (0:InitOut%NStepWave-1,InitInp%NWaveElev), STAT=ErrStatTmp ) + IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array PWaveAcc0VMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + 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,'VariousWaves_Init') + + END IF END IF @@ -1810,6 +1881,14 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) WaveNmbr = WaveNumber ( Omega, InitInp%Gravity, InitInp%WtrDpth ) + ! Wavenumber-dependent acceleration scaling for MacCamy-Fuchs model + IF (InitInp%MCFD>0) 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 @@ -1831,7 +1910,11 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) WaveAccC0Hyi (I,J) = ImagOmega* WaveVelC0Hyi (I,J) WaveAccC0V (I,J) = ImagOmega* WaveVelC0V (I,J) - + IF (InitInp%MCFD>0) 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 @@ -1855,8 +1938,16 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 IF + + + IF (InitInp%MCFD>0) 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 @@ -1935,6 +2026,24 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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,'VariousWaves_Init') + + CALL ApplyFFT_cx ( WaveAcc0HyiMCF (:,J), WaveAccC0HyiMCF (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0HyiMCF.', ErrStat,ErrMsg,'VariousWaves_Init') + + CALL ApplyFFT_cx ( WaveAcc0VMCF (:,J), WaveAccC0VMCF (:,J), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to WaveAcc0VMCF.', ErrStat,ErrMsg,'VariousWaves_Init') + + 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%NWaveElev ! Loop through all points on the SWL where z-partial derivatives will be computed for extrapolated stretching @@ -1966,6 +2075,27 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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%NWaveElev + + CALL ApplyFFT_cx ( PWaveAcc0HxiMCFPz0 (:,J ), PWaveAccC0HxiMCFPz0(:,J ),FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0HxiMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + CALL ApplyFFT_cx ( PWaveAcc0HyiMCFPz0 (:,J ), PWaveAccC0HyiMCFPz0(:,J ),FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0HyiMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + CALL ApplyFFT_cx ( PWaveAcc0VMCFPz0 (:,J ), PWaveAccC0VMCFPz0( :,J ), FFT_Data, ErrStatTmp ) + CALL SetErrStat(ErrStatTmp,'Error occured while applying the FFT to PWaveAcc0VMCFPz0.', ErrStat,ErrMsg,'VariousWaves_Init') + + IF ( ErrStat >= AbortErrLev ) THEN + CALL CleanUp() + RETURN + END IF + + END DO + END IF + END IF !=================================== @@ -2064,8 +2194,32 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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%WaveKinzi(count) < -InitInp%WtrDpth ) .OR. ( InitInp%WaveKinzi(count) > 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%WaveAccMCF(:,i,j,k,:) = 0.0 + ELSE + ! The elevation of the point defined by WaveKinzi(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) @@ -2079,6 +2233,19 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 @@ -2237,6 +2404,20 @@ SUBROUTINE CleanUp( ) IF (ALLOCATED( OmegaArr )) DEALLOCATE( OmegaArr, STAT=ErrStatTmp) IF (ALLOCATED( tmpArr )) DEALLOCATE( tmpArr, 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 diff --git a/modules/seastate/src/Waves.txt b/modules/seastate/src/Waves.txt index 4eb323c80c..9e0afc11dd 100644 --- a/modules/seastate/src/Waves.txt +++ b/modules/seastate/src/Waves.txt @@ -65,7 +65,7 @@ typedef ^ ^ SiKi CrestHmax 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" # Define outputs from the initialization routine here: # @@ -81,9 +81,11 @@ typedef ^ ^ SiKi WaveDOmega 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 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 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) diff --git a/modules/seastate/src/Waves_Types.f90 b/modules/seastate/src/Waves_Types.f90 index 5ec92718ed..3a1865d117 100644 --- a/modules/seastate/src/Waves_Types.f90 +++ b/modules/seastate/src/Waves_Types.f90 @@ -81,6 +81,7 @@ MODULE Waves_Types 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 [-] END TYPE Waves_InitInputType ! ======================= ! ========= Waves_InitOutputType ======= @@ -97,9 +98,11 @@ MODULE Waves_Types 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(:,:,:,:), 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 :: 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)] @@ -300,6 +303,7 @@ SUBROUTINE Waves_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, Er DstInitInputData%CrestTime = SrcInitInputData%CrestTime DstInitInputData%CrestXi = SrcInitInputData%CrestXi DstInitInputData%CrestYi = SrcInitInputData%CrestYi + DstInitInputData%MCFD = SrcInitInputData%MCFD END SUBROUTINE Waves_CopyInitInput SUBROUTINE Waves_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) @@ -461,6 +465,7 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err Re_BufSz = Re_BufSz + 1 ! CrestTime Re_BufSz = Re_BufSz + 1 ! CrestXi Re_BufSz = Re_BufSz + 1 ! CrestYi + Re_BufSz = Re_BufSz + 1 ! MCFD IF ( Re_BufSz .GT. 0 ) THEN ALLOCATE( ReKiBuf( Re_BufSz ), STAT=ErrStat2 ) IF (ErrStat2 /= 0) THEN @@ -711,6 +716,8 @@ SUBROUTINE Waves_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Err 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 END SUBROUTINE Waves_PackInitInput SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -1004,6 +1011,8 @@ SUBROUTINE Waves_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 END SUBROUTINE Waves_UnPackInitInput SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) @@ -1123,6 +1132,26 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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) @@ -1177,6 +1206,24 @@ SUBROUTINE Waves_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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) @@ -1286,6 +1333,10 @@ SUBROUTINE Waves_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%WaveAcc) InitOutputData%WaveAcc => NULL() ENDIF +IF (ASSOCIATED(InitOutputData%WaveAccMCF)) THEN + DEALLOCATE(InitOutputData%WaveAccMCF) + InitOutputData%WaveAccMCF => NULL() +ENDIF IF (ASSOCIATED(InitOutputData%WaveVel)) THEN DEALLOCATE(InitOutputData%WaveVel) InitOutputData%WaveVel => NULL() @@ -1298,6 +1349,10 @@ SUBROUTINE Waves_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) DEALLOCATE(InitOutputData%PWaveAcc0) InitOutputData%PWaveAcc0 => NULL() ENDIF +IF (ASSOCIATED(InitOutputData%PWaveAccMCF0)) THEN + DEALLOCATE(InitOutputData%PWaveAccMCF0) + InitOutputData%PWaveAccMCF0 => NULL() +ENDIF IF (ASSOCIATED(InitOutputData%PWaveVel0)) THEN DEALLOCATE(InitOutputData%PWaveVel0) InitOutputData%PWaveVel0 => NULL() @@ -1389,6 +1444,11 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -1404,6 +1464,11 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -1612,6 +1677,41 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -1702,6 +1802,36 @@ SUBROUTINE Waves_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -2018,6 +2148,44 @@ SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 @@ -2117,6 +2285,39 @@ SUBROUTINE Waves_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, 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 From a7a6af4cd541d756363bfa2873a0c88bf119cbe3 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Mon, 7 Feb 2022 19:35:22 -0700 Subject: [PATCH 060/338] Passing pointers to the MacCamy-Fuchs scaled flow acceleration from SeaState to Hydrodyn. --- modules/hydrodyn/src/HydroDyn.txt | 2 + modules/hydrodyn/src/HydroDyn_DriverCode.f90 | 8 + modules/hydrodyn/src/HydroDyn_Types.f90 | 194 ++++++++ modules/hydrodyn/src/Morison.txt | 5 + modules/hydrodyn/src/Morison_Types.f90 | 479 +++++++++++++++++++ modules/openfast-library/src/FAST_Subs.f90 | 8 +- 6 files changed, 695 insertions(+), 1 deletion(-) diff --git a/modules/hydrodyn/src/HydroDyn.txt b/modules/hydrodyn/src/HydroDyn.txt index af719a4cdc..71b4bafacf 100644 --- a/modules/hydrodyn/src/HydroDyn.txt +++ b/modules/hydrodyn/src/HydroDyn.txt @@ -111,9 +111,11 @@ typedef ^ ^ SiKi WaveElev0 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 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 , accounting for stretching, 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, accounting for stretching, 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, accounting for stretching, 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, 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 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) diff --git a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 index b6c39fbc44..eaf7d1640d 100644 --- a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 +++ b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 @@ -281,6 +281,9 @@ PROGRAM HydroDynDriver InitInData%PWaveAcc0 => InitOutData_SeaSt%PWaveAcc0 InitInData%PWaveVel0 => InitOutData_SeaSt%PWaveVel0 + InitInData%WaveAccMCF => InitOutData_SeaSt%WaveAccMCF + InitInData%PWaveAccMCF0 => InitOutData_SeaSt%PWaveAccMCF0 + InitInData%WaveElevC0 => InitOutData_SeaSt%WaveElevC0 CALL MOVE_ALLOC( InitOutData_SeaSt%WaveElevC, InitInData%WaveElevC ) InitInData%WaveDirArr => InitOutData_SeaSt%WaveDirArr @@ -299,6 +302,8 @@ PROGRAM HydroDynDriver nullify(InitOutData_SeaSt%WaveDirArr) nullify(InitOutData_SeaSt%WaveElev1) nullify(InitOutData_SeaSt%WaveElev2) + nullify(InitOutData_SeaSt%WaveAccMCF) + nullify(InitOutData_SeaSt%PWaveAccMCF0) call SeaSt_Interp_CopyParam(InitOutData_SeaSt%SeaSt_Interp_p, InitInData%SeaSt_Interp_p, 0, ErrStat, ErrMsg ) @@ -404,6 +409,9 @@ PROGRAM HydroDynDriver nullify(InitInData%WaveElev1) nullify(InitInData%WaveElev2) + nullify(InitInData%WaveAccMCF) + nullify(InitInData%PWaveAccMCF0) + if (errStat >= AbortErrLev) then ! Clean up and exit call HD_DvrCleanup() diff --git a/modules/hydrodyn/src/HydroDyn_Types.f90 b/modules/hydrodyn/src/HydroDyn_Types.f90 index 335d507b8a..45d5e41fbf 100644 --- a/modules/hydrodyn/src/HydroDyn_Types.f90 +++ b/modules/hydrodyn/src/HydroDyn_Types.f90 @@ -116,9 +116,11 @@ MODULE HydroDyn_Types 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) , 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 , 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 :: 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 [(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 [(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.) [(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 [(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)] @@ -1911,6 +1913,26 @@ SUBROUTINE HydroDyn_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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) @@ -1965,6 +1987,24 @@ SUBROUTINE HydroDyn_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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) @@ -2075,6 +2115,10 @@ SUBROUTINE HydroDyn_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) DEALLOCATE(InitInputData%WaveAcc) InitInputData%WaveAcc => NULL() ENDIF +IF (ASSOCIATED(InitInputData%WaveAccMCF)) THEN + DEALLOCATE(InitInputData%WaveAccMCF) + InitInputData%WaveAccMCF => NULL() +ENDIF IF (ASSOCIATED(InitInputData%WaveVel)) THEN DEALLOCATE(InitInputData%WaveVel) InitInputData%WaveVel => NULL() @@ -2087,6 +2131,10 @@ SUBROUTINE HydroDyn_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) DEALLOCATE(InitInputData%PWaveAcc0) InitInputData%PWaveAcc0 => NULL() ENDIF +IF (ASSOCIATED(InitInputData%PWaveAccMCF0)) THEN + DEALLOCATE(InitInputData%PWaveAccMCF0) + InitInputData%PWaveAccMCF0 => NULL() +ENDIF IF (ASSOCIATED(InitInputData%PWaveVel0)) THEN DEALLOCATE(InitInputData%PWaveVel0) InitInputData%PWaveVel0 => NULL() @@ -2225,6 +2273,11 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 @@ -2240,6 +2293,11 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 @@ -2585,6 +2643,41 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 @@ -2675,6 +2768,36 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 @@ -3148,6 +3271,44 @@ SUBROUTINE HydroDyn_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta 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 @@ -3247,6 +3408,39 @@ SUBROUTINE HydroDyn_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta 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 diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index b7f99334fc..ffec799633 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -261,10 +261,12 @@ typedef ^ ^ INTEGER typedef ^ ^ SiKi WaveElev1 {*}{*}{*} - - "First order wave elevation" - typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" - typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi WaveAccMCF {*}{*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveTime {*} - - "" - typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "" - typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi PWaveAccMCF0 {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "" - typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "" - 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" - @@ -354,13 +356,16 @@ typedef ^ ^ SiKi typedef ^ ^ SiKi WaveElev2 {*}{*}{*} - - "Second order wave elevation" m typedef ^ ^ SiKi WaveVel {*}{*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveAcc {*}{*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi WaveAccMCF {*}{*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveDynP {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveVel0 {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveAcc0 {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi WaveAccMCF0 {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi WaveDynP0 {*}{*}{*} - - "" - typedef ^ ^ SiKi WaveTime {*} - - "Times for which the wave kinematics are pre-computed" s typedef ^ ^ SiKi PWaveVel0 {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi PWaveAcc0 {*}{*}{*}{*} - - "" - +typedef ^ ^ SiKi PWaveAccMCF0 {*}{*}{*}{*} - - "" - typedef ^ ^ SiKi PWaveDynP0 {*}{*}{*} - - "" - 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 ^ ^ INTEGER NStepWave - - - "" - diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index e95d8a1279..d900c1f09f 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -324,10 +324,12 @@ MODULE Morison_Types REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev1 => NULL() !< First order wave elevation [-] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [-] REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAccMCF => NULL() !< [-] REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAccMCF0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< [-] 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 [-] @@ -405,13 +407,16 @@ MODULE Morison_Types REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev2 => NULL() !< Second order wave elevation [m] REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveVel => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAcc => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:,:), POINTER :: WaveAccMCF => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveDynP => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveVel0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveAcc0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: WaveAccMCF0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveDynP0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:), POINTER :: WaveTime => NULL() !< Times for which the wave kinematics are pre-computed [s] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveVel0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAcc0 => NULL() !< [-] + REAL(SiKi) , DIMENSION(:,:,:,:), POINTER :: PWaveAccMCF0 => NULL() !< [-] REAL(SiKi) , DIMENSION(:,:,:), POINTER :: PWaveDynP0 => NULL() !< [-] 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 [-] INTEGER(IntKi) :: NStepWave !< [-] @@ -6222,6 +6227,26 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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%WaveTime)) THEN i1_l = LBOUND(SrcInitInputData%WaveTime,1) i1_u = UBOUND(SrcInitInputData%WaveTime,1) @@ -6290,6 +6315,24 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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) @@ -6434,6 +6477,10 @@ SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) DEALLOCATE(InitInputData%WaveAcc) InitInputData%WaveAcc => NULL() ENDIF +IF (ASSOCIATED(InitInputData%WaveAccMCF)) THEN + DEALLOCATE(InitInputData%WaveAccMCF) + InitInputData%WaveAccMCF => NULL() +ENDIF IF (ASSOCIATED(InitInputData%WaveTime)) THEN DEALLOCATE(InitInputData%WaveTime) InitInputData%WaveTime => NULL() @@ -6450,6 +6497,10 @@ SUBROUTINE Morison_DestroyInitInput( InitInputData, ErrStat, ErrMsg ) DEALLOCATE(InitInputData%PWaveAcc0) InitInputData%PWaveAcc0 => NULL() ENDIF +IF (ASSOCIATED(InitInputData%PWaveAccMCF0)) THEN + DEALLOCATE(InitInputData%PWaveAccMCF0) + InitInputData%PWaveAccMCF0 => NULL() +ENDIF IF (ASSOCIATED(InitInputData%PWaveDynP0)) THEN DEALLOCATE(InitInputData%PWaveDynP0) InitInputData%PWaveDynP0 => NULL() @@ -6812,6 +6863,11 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 ( ASSOCIATED(InData%WaveTime) ) THEN Int_BufSz = Int_BufSz + 2*1 ! WaveTime upper/lower bounds for each dimension @@ -6832,6 +6888,11 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 @@ -7527,6 +7588,41 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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%WaveTime) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -7637,6 +7733,36 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 @@ -8589,6 +8715,44 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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 @@ -8711,6 +8875,39 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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 @@ -10999,6 +11196,26 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveAcc = SrcParamData%WaveAcc 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%WaveDynP)) THEN i1_l = LBOUND(SrcParamData%WaveDynP,1) i1_u = UBOUND(SrcParamData%WaveDynP,1) @@ -11053,6 +11270,24 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err END IF DstParamData%WaveAcc0 = SrcParamData%WaveAcc0 ENDIF +IF (ASSOCIATED(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. ASSOCIATED(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 (ASSOCIATED(SrcParamData%WaveDynP0)) THEN i1_l = LBOUND(SrcParamData%WaveDynP0,1) i1_u = UBOUND(SrcParamData%WaveDynP0,1) @@ -11117,6 +11352,24 @@ SUBROUTINE Morison_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, Err 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) @@ -11263,6 +11516,10 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) DEALLOCATE(ParamData%WaveAcc) ParamData%WaveAcc => NULL() ENDIF +IF (ASSOCIATED(ParamData%WaveAccMCF)) THEN + DEALLOCATE(ParamData%WaveAccMCF) + ParamData%WaveAccMCF => NULL() +ENDIF IF (ASSOCIATED(ParamData%WaveDynP)) THEN DEALLOCATE(ParamData%WaveDynP) ParamData%WaveDynP => NULL() @@ -11275,6 +11532,10 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) DEALLOCATE(ParamData%WaveAcc0) ParamData%WaveAcc0 => NULL() ENDIF +IF (ASSOCIATED(ParamData%WaveAccMCF0)) THEN + DEALLOCATE(ParamData%WaveAccMCF0) + ParamData%WaveAccMCF0 => NULL() +ENDIF IF (ASSOCIATED(ParamData%WaveDynP0)) THEN DEALLOCATE(ParamData%WaveDynP0) ParamData%WaveDynP0 => NULL() @@ -11291,6 +11552,10 @@ SUBROUTINE Morison_DestroyParam( ParamData, ErrStat, ErrMsg ) DEALLOCATE(ParamData%PWaveAcc0) ParamData%PWaveAcc0 => NULL() ENDIF +IF (ASSOCIATED(ParamData%PWaveAccMCF0)) THEN + DEALLOCATE(ParamData%PWaveAccMCF0) + ParamData%PWaveAccMCF0 => NULL() +ENDIF IF (ASSOCIATED(ParamData%PWaveDynP0)) THEN DEALLOCATE(ParamData%PWaveDynP0) ParamData%PWaveDynP0 => NULL() @@ -11442,6 +11707,11 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 ( ASSOCIATED(InData%WaveDynP) ) THEN Int_BufSz = Int_BufSz + 2*4 ! WaveDynP upper/lower bounds for each dimension @@ -11457,6 +11727,11 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 ( ASSOCIATED(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 ( ASSOCIATED(InData%WaveDynP0) ) THEN Int_BufSz = Int_BufSz + 2*3 ! WaveDynP0 upper/lower bounds for each dimension @@ -11477,6 +11752,11 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 @@ -11930,6 +12210,41 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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%WaveDynP) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -12020,6 +12335,36 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs END DO END DO END IF + IF ( .NOT. ASSOCIATED(InData%WaveAccMCF0) ) 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%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. ASSOCIATED(InData%WaveDynP0) ) THEN IntKiBuf( Int_Xferred ) = 0 Int_Xferred = Int_Xferred + 1 @@ -12120,6 +12465,36 @@ SUBROUTINE Morison_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMs 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 @@ -12744,6 +13119,44 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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 ! WaveDynP not allocated Int_Xferred = Int_Xferred + 1 ELSE @@ -12843,6 +13256,39 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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 (ASSOCIATED(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 @@ -12955,6 +13401,39 @@ SUBROUTINE Morison_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, Er 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 diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index 9b37f229ec..de3d3bf266 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -920,6 +920,9 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, 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, 0, ErrStat, ErrMsg ) end if @@ -940,6 +943,8 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, nullify(Init%OutData_SeaSt%WaveDirArr) nullify(Init%OutData_SeaSt%WaveElev1) nullify(Init%OutData_SeaSt%WaveElev2) + nullify(Init%OutData_SeaSt%WaveAccMCF) + nullify(Init%OutData_SeaSt%PWaveAccMCF0) end if @@ -1005,7 +1010,8 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, nullify(Init%InData_HD%WaveTime) nullify(Init%InData_HD%WaveElev1) nullify(Init%InData_HD%WaveElev2) - + nullify(Init%InData_HD%WaveAccMCF) + nullify(Init%InData_HD%PWaveAccMCF0) IF (ErrStat >= AbortErrLev) THEN CALL Cleanup() From 0c4c0ac1df3291ab96a3a0e95bf785abe0eeaba5 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Tue, 8 Feb 2022 17:14:11 -0700 Subject: [PATCH 061/338] Morison_CalcOutput now evaluates the side inertia forces using the scaled fluid acceleration for members with the MacCamy-Fuchs model selected. --- modules/hydrodyn/src/HydroDyn.f90 | 8 + modules/hydrodyn/src/HydroDyn_DriverCode.f90 | 8 +- modules/hydrodyn/src/Morison.f90 | 194 +++++++++++++++++-- modules/hydrodyn/src/Morison.txt | 1 + modules/hydrodyn/src/Morison_Types.f90 | 66 +++++++ modules/seastate/src/SeaState.f90 | 14 +- modules/seastate/src/Waves.f90 | 15 +- 7 files changed, 278 insertions(+), 28 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index 776d54467f..ebae10815c 100644 --- a/modules/hydrodyn/src/HydroDyn.f90 +++ b/modules/hydrodyn/src/HydroDyn.f90 @@ -808,6 +808,10 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I InputFileData%Morison%PWaveVel0 => InitInp%PWaveVel0 InputFileData%Morison%WaveElev1 => InitInp%WaveElev1 InputFileData%Morison%WaveElev2 => InitInp%WaveElev2 + + InputFileData%Morison%WaveAccMCF => InitInp%WaveAccMCF + InputFileData%Morison%PWaveAccMCF0 => InitInp%PWaveAccMCF0 + ! CALL MOVE_ALLOC( Waves_InitOut%nodeInWater,InputFileData%Morison%nodeInWater ) ! moved to Morison%p%nodeInWater in the init routine InputFileData%Morison%WaveStMod = InitInp%WaveStMod @@ -1208,6 +1212,8 @@ SUBROUTINE CleanUp() nullify(InputFileData%WAMIT%WaveTime) nullify(InputFileData%WAMIT2%WaveElevC0) nullify(InputFileData%WAMIT2%WaveDirArr) + nullify(InputFileData%Morison%WaveAccMCF) + nullify(InputFileData%Morison%PWaveAccMCF0) 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) @@ -1275,6 +1281,8 @@ SUBROUTINE HydroDyn_End( u, p, x, xd, z, OtherState, y, m, ErrStat, ErrMsg ) nullify(p%Morison%PWaveVel0) nullify(p%Morison%WaveElev1) nullify(p%Morison%WaveElev2) + nullify(p%Morison%WaveAccMCF) + nullify(p%Morison%PWaveAccMCF0) do i = 1,p%NBody nullify(p%WAMIT(i)%SS_Exctn%WaveElev1) nullify(p%WAMIT(i)%SS_Exctn%WaveTime) diff --git a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 index eaf7d1640d..0d01bf7cac 100644 --- a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 +++ b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 @@ -507,10 +507,10 @@ PROGRAM HydroDynDriver maxAngle = 0.0 DO n = 1, drvrInitInp%NSteps - + Time = (n-1) * drvrInitInp%TimeInterval InputTime(1) = Time - + ! Modify u (likely from the outputs of another module or a set of test conditions) here: ! PRPInputsMod 2: Reads time series of positions, velocities, and accelerations for the platform reference point @@ -662,7 +662,7 @@ PROGRAM HydroDynDriver ! Write output to a file which is managed by the driver program and not the individual modules ! TODO - + END DO @@ -704,7 +704,7 @@ subroutine HD_DvrCleanup() errStat2 = ErrID_None errMsg2 = "" - + print *, 'Start Clean' 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, 'HD_DvrCleanup' ) call HydroDyn_DestroyInitInput( InitInData, errStat2, errMsg2 ) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 4c88b3b735..92d478e454 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2177,6 +2177,8 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveVel0.', ErrStat,ErrMsg,'Morison_Init') ALLOCATE ( p%WaveAcc0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat ) IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveAcc0.', ErrStat,ErrMsg,'Morison_Init') + ALLOCATE ( p%WaveAccMCF0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errstat ) + IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveAccMCF0.', ErrStat,ErrMsg,'Morison_Init') ! Copy the wave dynamic data at the SWL DO i = 1,p%seast_interp_p%n(2) @@ -2189,6 +2191,16 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In END DO END DO + 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 + ! Initialize the outputs IF ( p%OutSwtch > 0) then !@mhall: moved this "if" to after allocations @@ -2306,6 +2318,7 @@ 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) @@ -2359,7 +2372,10 @@ SUBROUTINE AllocateNodeLoadVariables(InitInp, p, m, NNodes, errStat, errMsg ) p%WaveTime => InitInp%WaveTime p%PWaveVel0 => InitInp%PWaveVel0 p%PWaveAcc0 => InitInp%PWaveAcc0 - p%PWaveDynP0 => InitInp%PWaveDynP0 + p%PWaveDynP0 => InitInp%PWaveDynP0 + + p%WaveAccMCF => InitInp%WaveAccMCF + p%PWaveAccMCF0 => InitInp%PWaveAccMCF0 END SUBROUTINE AllocateNodeLoadVariables @@ -2419,6 +2435,8 @@ SUBROUTINE Morison_End( u, p, x, xd, z, OtherState, y, m, errStat, errMsg ) nullify(p%PWaveVel0) nullify(p%WaveElev1) nullify(p%WaveElev2) + nullify(p%WaveAccMCF) + nullify(p%PWaveAccMCF0) CALL Morison_DestroyParam( p, errStat, errMsg ) @@ -2667,7 +2685,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, REAL(ReKi) :: vrelFSInt(3) REAL(ReKi) :: pos1Prime(3) REAL(ReKi) :: WtrDpth - + REAL(ReKi) :: FAMCFFSInt(3) ! Initialize errStat errStat = ErrID_None @@ -2680,7 +2698,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, !=============================================================================================== ! 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 ) !TODO: Update for Wave Kinematics grid @@ -2811,7 +2829,98 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 ) 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, 'SeaState_CalcOutput' ) + m%FAMCF(:,j) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + 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, 'SeaState_CalcOutput' ) + m%FAMCF(:,j) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + 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, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + + ! 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, ErrStat2, ErrMsg2 ) * pos1(3) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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, 'SeaState_CalcOutput' ) + m%FAMCF(:,j) = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + + 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. @@ -3265,9 +3374,16 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 + 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) @@ -3339,6 +3455,41 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, END IF + + IF ( mem%PropMCF ) 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, 'SeaState_CalcOutput' ) + FAMCFFSInt = SeaSt_Interp_4D_Vec( p%WaveAccMCF, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaState_CalcOutput' ) + + 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, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + + ! Extrapolated wave stretching + IF (p%WaveStMod == 2) THEN + FAMCFFSInt = FAMCFFSInt + SeaSt_Interp_3D_vec( Time, FSInt(1:2), p%PWaveAccMCF0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * FSInt(3) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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 @@ -3362,9 +3513,15 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, (1.0-SubRatio) * u%Mesh%TranslationAcc(:,mem%NodeIndx(FSElem )) ) ! ------------------- hydrodynamic inertia loads: sides: Section 7.1.4 ------------------------ - F_IS=(mem%Ca(FSElem)+mem%Cp(FSElem))*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem) * matmul( mem%Ak, FAFSInt ) + & - 2.0*mem%AxCa(FSElem)*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem)*dRdl_p * matmul( mem%kkt, FAFSInt ) + & - 2.0*mem%AxCp(FSElem) *pi*mem%RMG(FSElem) *dRdl_pp * FDynPFSInt*mem%k + IF ( mem%PropMCF) THEN + F_IS= p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem) * matmul( mem%Ak, FAMCFFSInt ) + & + 2.0*mem%AxCa(FSElem)*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem)*dRdl_p * matmul( mem%kkt, FAFSInt ) + & + 2.0*mem%AxCp(FSElem) *pi*mem%RMG(FSElem) *dRdl_pp * FDynPFSInt*mem%k + ELSE + F_IS=(mem%Ca(FSElem)+mem%Cp(FSElem))*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem) * matmul( mem%Ak, FAFSInt ) + & + 2.0*mem%AxCa(FSElem)*p%WtrDens*pi*mem%RMG(FSElem)*mem%RMG(FSElem)*dRdl_p * matmul( mem%kkt, FAFSInt ) + & + 2.0*mem%AxCp(FSElem) *pi*mem%RMG(FSElem) *dRdl_pp * FDynPFSInt*mem%k + END IF END IF !----------------------------------------------------------------------------------------------------! @@ -3527,9 +3684,18 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, 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 ---------------------------! - 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 + + 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) @@ -3751,7 +3917,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, END IF END IF - + END SUBROUTINE Morison_CalcOutput subroutine LumpDistrHydroLoads( f_hydro, k_hat, dl, h_c, lumpedLoad ) diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index ffec799633..5e83861081 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -315,6 +315,7 @@ 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 ^ ^ ReKi WaveElev {:} - - "Total wave elevation" m typedef ^ ^ ReKi WaveElev1 {:} - - "First order wave elevation" m diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index d900c1f09f..e000aa8e5b 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -367,6 +367,7 @@ 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(ReKi) , DIMENSION(:), ALLOCATABLE :: WaveElev !< Total wave elevation [m] REAL(ReKi) , DIMENSION(:), ALLOCATABLE :: WaveElev1 !< First order wave elevation [m] @@ -9815,6 +9816,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) @@ -10010,6 +10025,9 @@ SUBROUTINE Morison_DestroyMisc( MiscData, ErrStat, ErrMsg ) 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 @@ -10100,6 +10118,11 @@ 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 @@ -10269,6 +10292,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 @@ -10631,6 +10674,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 diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index 70c1558bd0..a67b3e3edb 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -907,9 +907,10 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ELSE p%WaveAcc = p%WaveAcc + InitOut%Waves2%WaveAcc2D !IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2D0 - IF (InputFileData%Waves%MCFD > 0) THEN - p%WaveAccMCF = p%WaveAccMCF + InitOut%Waves2%WaveAcc2D - END IF + ! MacCamy-Fuchs scaled acceleration should not contain second-order contributions + !IF (InputFileData%Waves%MCFD > 0) THEN + ! p%WaveAccMCF = p%WaveAccMCF + InitOut%Waves2%WaveAcc2D + !END IF ENDIF @@ -969,9 +970,10 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ELSE p%WaveAcc = p%WaveAcc + InitOut%Waves2%WaveAcc2S !IF (InputFileData%Waves%WaveStMod > 0 ) WaveAcc0 = WaveAcc0 + WaveAcc2S0 - IF (InputFileData%Waves%MCFD > 0) THEN - p%WaveAccMCF = p%WaveAccMCF + InitOut%Waves2%WaveAcc2S - END IF + ! MacCamy-Fuchs scaled accleration should not contain second-order contributions + !IF (InputFileData%Waves%MCFD > 0) THEN + ! p%WaveAccMCF = p%WaveAccMCF + InitOut%Waves2%WaveAcc2S + !END IF ENDIF ENDIF ! second order wave kinematics sum frequency results diff --git a/modules/seastate/src/Waves.f90 b/modules/seastate/src/Waves.f90 index 11527e8ac8..2f7ae9d0cb 100644 --- a/modules/seastate/src/Waves.f90 +++ b/modules/seastate/src/Waves.f90 @@ -1138,7 +1138,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) IF (ErrStatTmp /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array InitOut%WaveAcc.', ErrStat,ErrMsg,'VariousWaves_Init') - IF (InitInp%MCFD > 0.0_ReKi) THEN ! MacCamy-Fuchs model + 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,'VariousWaves_Init') @@ -1882,7 +1882,8 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) WaveNmbr = WaveNumber ( Omega, InitInp%Gravity, InitInp%WtrDpth ) ! Wavenumber-dependent acceleration scaling for MacCamy-Fuchs model - IF (InitInp%MCFD>0) THEN + 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) @@ -1910,7 +1911,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) WaveAccC0Hyi (I,J) = ImagOmega* WaveVelC0Hyi (I,J) WaveAccC0V (I,J) = ImagOmega* WaveVelC0V (I,J) - IF (InitInp%MCFD>0) THEN + 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 @@ -1940,7 +1941,7 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) PWaveAccC0VPz0 (I,J) = ImagOmega*PWaveVelC0VPz0 (I,J) - IF (InitInp%MCFD>0) THEN + 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 @@ -2302,11 +2303,17 @@ SUBROUTINE VariousWaves_Init ( InitInp, InitOut, ErrStat, ErrMsg ) 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 ( ) From 2592679964db7cfdc62eb7bcc48a9802ecb140ef Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 9 Feb 2022 11:08:39 -0700 Subject: [PATCH 062/338] Altered casting (again) for Time index calculation in SeaState_Interp --- modules/seastate/src/SeaState_Interp.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/seastate/src/SeaState_Interp.f90 b/modules/seastate/src/SeaState_Interp.f90 index 696e86f98d..1aaaa7e6ab 100644 --- a/modules/seastate/src/SeaState_Interp.f90 +++ b/modules/seastate/src/SeaState_Interp.f90 @@ -311,7 +311,7 @@ subroutine SetTimeIndex(Time, deltaT, nMax, Indx_Lo, Indx_Hi, isopc, ErrStat, Er ! 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,ReKi) / deltaT + Tmp = real( (Time/ real(deltaT,DbKi)) ,ReKi) Tmp = MOD(Tmp,real((nMax), ReKi)) Indx_Lo = INT( Tmp ) ! convert REAL to INTEGER From a594a3be87270f861130f22a6dd9caf5840d9b27 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 9 Feb 2022 14:38:59 -0700 Subject: [PATCH 063/338] Added checks for MacCamy-Fuchs members to see if the requirements are met in the subroutine SetMemberProperties. --- modules/hydrodyn/src/HydroDyn.f90 | 1 + modules/hydrodyn/src/HydroDyn.txt | 1 + modules/hydrodyn/src/HydroDyn_DriverCode.f90 | 1 + modules/hydrodyn/src/HydroDyn_Types.f90 | 7 +++++ modules/hydrodyn/src/Morison.f90 | 27 ++++++++++++++++++++ modules/hydrodyn/src/Morison.txt | 1 + modules/hydrodyn/src/Morison_Types.f90 | 7 +++++ modules/openfast-library/src/FAST_Subs.f90 | 1 + modules/seastate/src/SeaState.f90 | 2 ++ modules/seastate/src/SeaState.txt | 1 + modules/seastate/src/SeaState_Types.f90 | 7 +++++ 11 files changed, 56 insertions(+) diff --git a/modules/hydrodyn/src/HydroDyn.f90 b/modules/hydrodyn/src/HydroDyn.f90 index ebae10815c..598b2cda7d 100644 --- a/modules/hydrodyn/src/HydroDyn.f90 +++ b/modules/hydrodyn/src/HydroDyn.f90 @@ -809,6 +809,7 @@ SUBROUTINE HydroDyn_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, I InputFileData%Morison%WaveElev1 => InitInp%WaveElev1 InputFileData%Morison%WaveElev2 => InitInp%WaveElev2 + InputFileData%Morison%MCFD = InitInp%MCFD InputFileData%Morison%WaveAccMCF => InitInp%WaveAccMCF InputFileData%Morison%PWaveAccMCF0 => InitInp%PWaveAccMCF0 diff --git a/modules/hydrodyn/src/HydroDyn.txt b/modules/hydrodyn/src/HydroDyn.txt index 71b4bafacf..c1e88507b9 100644 --- a/modules/hydrodyn/src/HydroDyn.txt +++ b/modules/hydrodyn/src/HydroDyn.txt @@ -126,6 +126,7 @@ typedef ^ ^ SiKi WaveDir 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: diff --git a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 index 0d01bf7cac..e801b7c500 100644 --- a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 +++ b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 @@ -270,6 +270,7 @@ PROGRAM HydroDynDriver InitInData%WaveDir = InitOutData_SeaSt%WaveDir InitInData%WaveMultiDir = InitOutData_SeaSt%WaveMultiDir InitInData%WaveDOmega = InitOutData_SeaSt%WaveDOmega + InitInData%MCFD = InitOutData_SeaSt%MCFD !InitInData%WaveElev0 => InitOutData_SeaSt%WaveElev0 CALL MOVE_ALLOC( InitOutData_SeaSt%WaveElev0, InitInData%WaveElev0 ) InitInData%WaveTime => InitOutData_SeaSt%WaveTime diff --git a/modules/hydrodyn/src/HydroDyn_Types.f90 b/modules/hydrodyn/src/HydroDyn_Types.f90 index 45d5e41fbf..4cd0969b6d 100644 --- a/modules/hydrodyn/src/HydroDyn_Types.f90 +++ b/modules/hydrodyn/src/HydroDyn_Types.f90 @@ -131,6 +131,7 @@ MODULE HydroDyn_Types 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 ======= @@ -2073,6 +2074,7 @@ SUBROUTINE HydroDyn_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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 ) @@ -2340,6 +2342,7 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 @@ -2926,6 +2929,8 @@ SUBROUTINE HydroDyn_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, 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 ) @@ -3593,6 +3598,8 @@ SUBROUTINE HydroDyn_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrSta 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 SUBROUTINE HydroDyn_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, ErrStat, ErrMsg ) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 92d478e454..e848773024 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -1492,6 +1492,33 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn 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 satisfy the necessary criteria. + IF (member%PropMCF) THEN + ! Check if surface piercing + IF ( (Za-MSL2SWL)*(Zb-MSL2SWL) > 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 ( .NOT. EqualRealNos(member%RMG(i),REAL(0.5_SiKi*InitInp%MCFD)) ) THEN + ! Error because MacCamy-Fuchs members must have uniform diameter equal to MCFD specified in seastate. + CALL SetErrStat(ErrID_Fatal, 'MacCamy-Fuchs members must have a uniform diameter equal to 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 diff --git a/modules/hydrodyn/src/Morison.txt b/modules/hydrodyn/src/Morison.txt index 5e83861081..5b1c92ba50 100644 --- a/modules/hydrodyn/src/Morison.txt +++ b/modules/hydrodyn/src/Morison.txt @@ -272,6 +272,7 @@ typedef ^ ^ SiKi 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 ^ ^ 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: diff --git a/modules/hydrodyn/src/Morison_Types.f90 b/modules/hydrodyn/src/Morison_Types.f90 index e000aa8e5b..ed5729b1b1 100644 --- a/modules/hydrodyn/src/Morison_Types.f90 +++ b/modules/hydrodyn/src/Morison_Types.f90 @@ -335,6 +335,7 @@ MODULE Morison_Types 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(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 ======= @@ -6386,6 +6387,7 @@ SUBROUTINE Morison_CopyInitInput( SrcInitInputData, DstInitInputData, CtrlCode, 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 ) @@ -6927,6 +6929,7 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 @@ -7869,6 +7872,8 @@ SUBROUTINE Morison_PackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, E 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 ) @@ -9035,6 +9040,8 @@ SUBROUTINE Morison_UnPackInitInput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat 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 ) diff --git a/modules/openfast-library/src/FAST_Subs.f90 b/modules/openfast-library/src/FAST_Subs.f90 index de3d3bf266..8af22d8a9a 100644 --- a/modules/openfast-library/src/FAST_Subs.f90 +++ b/modules/openfast-library/src/FAST_Subs.f90 @@ -906,6 +906,7 @@ SUBROUTINE FAST_InitializeAll( t_initial, p_FAST, y_FAST, m_FAST, ED, BD, SrvD, 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 diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index a67b3e3edb..8569531c50 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -1007,6 +1007,8 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init InitOut%WtrDpth = InputFileData%Waves%WtrDpth InitOut%MSL2SWL = InputFileData%MSL2SWL p%WtrDpth = InitOut%WtrDpth + + 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 diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index 634d480471..88c5819e79 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -116,6 +116,7 @@ typedef ^ ^ SiKi WvHiCOffS typedef ^ ^ LOGICAL WvDiffQTFF - - - "Full difference QTF second order forces flag" (-) typedef ^ ^ LOGICAL WvSumQTFF - - - "Full sum QTF second order forces flag" (-) typedef ^ ^ SeaSt_Interp_ParameterType SeaSt_Interp_p - - - "parameter information from the SeaState Interpolation module" - +typedef ^ ^ SiKi MCFD - - - "Diameter of MacCamy-Fuchs member" (meters) # # # ..... States .................................................................................................................... diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 4063c8d1a4..6ab40f4bd5 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -134,6 +134,7 @@ MODULE SeaState_Types LOGICAL :: WvDiffQTFF !< Full difference QTF second order forces flag [(-)] LOGICAL :: WvSumQTFF !< Full sum QTF second order forces flag [(-)] TYPE(SeaSt_Interp_ParameterType) :: SeaSt_Interp_p !< parameter information from the SeaState Interpolation module [-] + REAL(SiKi) :: MCFD !< Diameter of MacCamy-Fuchs member [(meters)] END TYPE SeaSt_InitOutputType ! ======================= ! ========= SeaSt_ContinuousStateType ======= @@ -1803,6 +1804,7 @@ SUBROUTINE SeaSt_CopyInitOutput( SrcInitOutputData, DstInitOutputData, CtrlCode, 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 END SUBROUTINE SeaSt_CopyInitOutput SUBROUTINE SeaSt_DestroyInitOutput( InitOutputData, ErrStat, ErrMsg ) @@ -2086,6 +2088,7 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er 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 @@ -2687,6 +2690,8 @@ SUBROUTINE SeaSt_PackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, Er ELSE IntKiBuf( Int_Xferred ) = 0; Int_Xferred = Int_Xferred + 1 ENDIF + ReKiBuf(Re_Xferred) = InData%MCFD + Re_Xferred = Re_Xferred + 1 END SUBROUTINE SeaSt_PackInitOutput SUBROUTINE SeaSt_UnPackInitOutput( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrMsg ) @@ -3384,6 +3389,8 @@ SUBROUTINE SeaSt_UnPackInitOutput( 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) + OutData%MCFD = REAL(ReKiBuf(Re_Xferred), SiKi) + Re_Xferred = Re_Xferred + 1 END SUBROUTINE SeaSt_UnPackInitOutput SUBROUTINE SeaSt_CopyContState( SrcContStateData, DstContStateData, CtrlCode, ErrStat, ErrMsg ) From 6ca4aa2d53f5e6d9c9fd20ea2b649cefe8d11110 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 9 Feb 2022 16:15:44 -0700 Subject: [PATCH 064/338] Skip checking MacCamy-Fuchs members if PropPot = TRUE. Also, skip generating the SWL wave field unless WaveStMod > 0. --- modules/hydrodyn/src/Morison.f90 | 59 +++++++++++++++++--------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index e848773024..289e503afa 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -1492,8 +1492,8 @@ subroutine SetMemberProperties( MSL2SWL, gravity, member, MCoefMod, MmbrCoefIDIn 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 satisfy the necessary criteria. - IF (member%PropMCF) THEN + ! 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-MSL2SWL)*(Zb-MSL2SWL) > 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' ) @@ -2195,39 +2195,44 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ! 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 p%WaveStMod = InitInp%WaveStMod - - ! allocate and 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=errStat ) - IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveDynP0.', ErrStat,ErrMsg,'Morison_Init') - ALLOCATE ( p%WaveVel0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat ) - IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveVel0.', ErrStat,ErrMsg,'Morison_Init') - ALLOCATE ( p%WaveAcc0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat ) - IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveAcc0.', ErrStat,ErrMsg,'Morison_Init') - ALLOCATE ( p%WaveAccMCF0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errstat ) - IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveAccMCF0.', ErrStat,ErrMsg,'Morison_Init') - - ! Copy the wave dynamic 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 - - IF (ASSOCIATED(p%WaveAccMCF)) THEN + IF (p%WaveStMod > 0_IntKi) THEN ! Wave stretching enabled + + ! 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=errStat ) + IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveDynP0.', ErrStat,ErrMsg,'Morison_Init') + ALLOCATE ( p%WaveVel0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat ) + IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveVel0.', ErrStat,ErrMsg,'Morison_Init') + ALLOCATE ( p%WaveAcc0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errStat ) + IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveAcc0.', ErrStat,ErrMsg,'Morison_Init') + ALLOCATE ( p%WaveAccMCF0 (0:p%NStepWave,p%seast_interp_p%n(2),p%seast_interp_p%n(3),3), STAT=errstat ) + IF (errStat /= 0) CALL SetErrStat(ErrID_Fatal,'Cannot allocate array p%WaveAccMCF0.', ErrStat,ErrMsg,'Morison_Init') + + ! 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%WaveAccMCF0(:,i,j,k) = p%WaveAccMCF(:,i,j,p%seast_interp_p%n(4),k) + 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 - + ! Initialize the outputs IF ( p%OutSwtch > 0) then !@mhall: moved this "if" to after allocations From 9e9f252dfb6f298d4c4d595c8331dbf705c24aa7 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 9 Feb 2022 16:44:11 -0700 Subject: [PATCH 065/338] Enable WaveStMod = 0, 1, or 3 when WaveMod = 6 (full wave-kinematics time series). --- modules/hydrodyn/src/HydroDyn_Input.f90 | 51 ++++++++----------------- 1 file changed, 16 insertions(+), 35 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn_Input.f90 b/modules/hydrodyn/src/HydroDyn_Input.f90 index fb47f3808a..2163880e49 100644 --- a/modules/hydrodyn/src/HydroDyn_Input.f90 +++ b/modules/hydrodyn/src/HydroDyn_Input.f90 @@ -1293,44 +1293,25 @@ SUBROUTINE HydroDynInput_ProcessInitData( InitInp, Interval, InputFileData, ErrS !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 ( InitInp%WaveMod /= 0 .AND. InitInp%WaveMod /= 6 .AND. InputFileData%Morison%NMembers > 0 ) 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 + ! 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 - - !IF ( ( InitInp%WaveStMod /= 3 ) .AND. ( InitInp%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. - ! TODO: The following can no longer be set because it is part of InitInp and SeaState Parameters. GJH 9/24/2021 - ! Should be ok now because wave stretching is now carried out in HydroDyn. - ! InitInp%WaveStMod = 0 - END IF - - - ! Copy over the first order frequency limits to the WAMIT2 module which needs them. InputFileData%WAMIT2%WvLowCOff = InitInp%WvLowCOff From 23844600f1ea61eebe40d38bb36a37fabe3b64c4 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 9 Feb 2022 17:50:50 -0700 Subject: [PATCH 066/338] Ignore the MacCamy-Fuchs diffraction settings of potential-flow members when calculating the hydrodynamic loads. --- modules/hydrodyn/src/Morison.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 289e503afa..6a453cfff8 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2864,7 +2864,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, ! Scaled fluid acceleration for the MacCamy-Fuchs model IF ( ASSOCIATED(p%WaveAccMCF) ) THEN DO im = 1,p%NMembers - IF ( p%Members(im)%PropMCF ) THEN + 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) @@ -3488,7 +3488,7 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, END IF - IF ( mem%PropMCF ) THEN + 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 From fcbea446098c6afbb51a00bf70330c21e773ffac Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 9 Feb 2022 20:36:12 -0700 Subject: [PATCH 067/338] Stop SeaState if MCFD > 0 when WaveMod = 0 or 6. --- modules/seastate/src/SeaState_Input.f90 | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/seastate/src/SeaState_Input.f90 b/modules/seastate/src/SeaState_Input.f90 index 593bd94eb9..8581bd465f 100644 --- a/modules/seastate/src/SeaState_Input.f90 +++ b/modules/seastate/src/SeaState_Input.f90 @@ -404,6 +404,13 @@ subroutine SeaSt_ParseInput( InputFileName, OutRootName, defWtrDens, defWtrDpth, 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 !------------------------------------------------------------------------------------------------- From bd9bb5f88f24e129006e5c8613f1ad8192ce1bf3 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Fri, 11 Feb 2022 18:14:04 -0700 Subject: [PATCH 068/338] Bug fix: p%AM_End was incorrect in Morison_Init. --- modules/hydrodyn/src/HydroDyn_DriverCode.f90 | 1 - modules/hydrodyn/src/Morison.f90 | 5 +---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 index e801b7c500..fe9aa7fa97 100644 --- a/modules/hydrodyn/src/HydroDyn_DriverCode.f90 +++ b/modules/hydrodyn/src/HydroDyn_DriverCode.f90 @@ -705,7 +705,6 @@ subroutine HD_DvrCleanup() errStat2 = ErrID_None errMsg2 = "" - print *, 'Start Clean' 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, 'HD_DvrCleanup' ) call HydroDyn_DestroyInitInput( InitInData, errStat2, errMsg2 ) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 6a453cfff8..32d877d39b 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2155,7 +2155,7 @@ SUBROUTINE Morison_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, In ! Constant part of the external hydrodynamic added mass term if ( Vmag > 0.0 ) then v2D(:,1) = Vn - p%AM_End(:,:,i) = (InitInp%Nodes(I)%JAxCa*InitInp%WtrDens/ Vmag)*matmul(transpose(v2D), v2D) + p%AM_End(:,:,i) = (InitInp%Nodes(I)%JAxCa*InitInp%WtrDens/ Vmag)*matmul(v2D,transpose(v2D)) end if ! Constant part of the external hydrodynamic dynamic pressure force @@ -2485,9 +2485,6 @@ SUBROUTINE Morison_End( u, p, x, xd, z, OtherState, y, m, errStat, errMsg ) CALL Morison_DestroyOutput( y, errStat, errMsg ) - - print *, 'Morison_End executed' - END SUBROUTINE Morison_End !---------------------------------------------------------------------------------------------------------------------------------- !> This is a loose coupling routine for solving constraint states, integrating continuous states, and updating discrete and other From 325d1a95e1e7227f37666800e109ecb4f3c4edba Mon Sep 17 00:00:00 2001 From: Gregory Hayman Date: Wed, 16 Feb 2022 16:29:04 -0700 Subject: [PATCH 069/338] Fix for elements below seabed check --- modules/hydrodyn/src/Morison.f90 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 96a708d4b3..eeb0d6d802 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -2711,6 +2711,8 @@ SUBROUTINE Morison_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, errStat, DO i =1,N ! loop through member elements + if ( i >= mem%i_floor ) then ! Member element is not completely buried in the seabed. Bug fix for OpenFast issue #847 GJH 2/3/2022 + ! calculate isntantaneous 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 @@ -2735,9 +2737,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) .and. (i >= mem%i_floor) ) then ! Member is NOT modeled with Potential Flow Theory and not completely buried in the seabed. Bug fix for OpenFast issue #847 GJH 2/3/2022 + 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? <<< @@ -3034,7 +3035,7 @@ 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 - + endif ! i >= ifloor From 8acbe8b3a5334cfb53682e4dc97b6bec71242925 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Thu, 17 Feb 2022 12:54:15 -0700 Subject: [PATCH 070/338] Bug fix: Corrected the check on radius tapering of members crossing the seabed. --- modules/hydrodyn/src/Morison.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/hydrodyn/src/Morison.f90 b/modules/hydrodyn/src/Morison.f90 index 32d877d39b..0aedfeeccb 100644 --- a/modules/hydrodyn/src/Morison.f90 +++ b/modules/hydrodyn/src/Morison.f90 @@ -1562,7 +1562,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 From b2ce8d3edde9296bfca26d59ea363bd65270e90c Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Fri, 18 Feb 2022 13:08:02 -0700 Subject: [PATCH 071/338] Update SeaSt_CalcOutput to include the effects of wave stretching when outputting the wave kinematics at the user specified points. --- modules/seastate/src/SeaState.f90 | 119 ++++++-- modules/seastate/src/SeaState.txt | 12 +- modules/seastate/src/SeaState_DriverCode.f90 | 5 +- modules/seastate/src/SeaState_Types.f90 | 268 +++++++++++++++++++ 4 files changed, 384 insertions(+), 20 deletions(-) diff --git a/modules/seastate/src/SeaState.f90 b/modules/seastate/src/SeaState.f90 index 8569531c50..5a204c1482 100644 --- a/modules/seastate/src/SeaState.f90 +++ b/modules/seastate/src/SeaState.f90 @@ -655,9 +655,15 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init p%WaveTime => Waves_InitOut%WaveTime p%WaveElev1 => Waves_InitOut%WaveElev InitOut%WaveElev1 => p%WaveElev1 - p%WaveVel => Waves_InitOut%WaveVel - p%WaveAcc => Waves_InitOut%WaveAcc - p%WaveDynP => Waves_InitOut%WaveDynP + p%WaveVel => Waves_InitOut%WaveVel + p%WaveAcc => Waves_InitOut%WaveAcc + p%WaveDynP => Waves_InitOut%WaveDynP + !p%WaveVel0 => Waves_InitOut%WaveVel0 + !p%WaveAcc0 => Waves_InitOut%WaveAcc0 + !p%WaveDynP0 => Waves_InitOut%WaveDynP0 + p%PWaveVel0 => Waves_InitOut%PWaveVel0 + p%PWaveAcc0 => Waves_InitOut%PWaveAcc0 + p%PWaveDynP0 => Waves_InitOut%PWaveDynP0 p%WaveAccMCF => Waves_InitOut%WaveAccMCF ! Store user-requested wave elevation locations ALLOCATE ( p%WaveElevxi (InputFileData%NWaveElev), STAT=ErrStat2 ) @@ -1005,6 +1011,7 @@ SUBROUTINE SeaSt_Init( InitInp, u, p, x, xd, z, OtherState, y, m, Interval, Init ! 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 @@ -1376,6 +1383,13 @@ SUBROUTINE SeaSt_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, Er REAL(ReKi) :: AllOuts(MaxSeaStOutputs) integer(IntKi) :: iBody, indxStart, indxEnd, iWAMIT ! Counters 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 @@ -1407,19 +1421,94 @@ SUBROUTINE SeaSt_CalcOutput( Time, u, p, x, xd, z, OtherState, y, m, ErrStat, Er ! CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) !END IF - - do i = 1, p%NWaveKin + DO i = 1, p%NWaveKin positionXYZ = (/p%WaveKinxi(i),p%WaveKinyi(i),p%WaveKinzi(i)/) - call SeaSt_Interp_Setup( Time, positionXYZ, p%seast_interp_p, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) - - end do + 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, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + IF (associated(p%Waves2%WaveElev2)) THEN + zeta2 = SeaSt_Interp_3D( Time, positionXY, p%Waves2%WaveElev2, p%seast_interp_p, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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, 'SeaSt_CalcOutput' ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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, 'SeaSt_CalcOutput' ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + IF (p%WaveStMod == 2) THEN ! extrapolation stretching + ! Extrapolate + WaveVel(:,i) = WaveVel(:,i) + SeaSt_Interp_3D_Vec( Time, positionXY, p%PWaveVel0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * p%WaveKinzi(i) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveAcc(:,i) = WaveAcc(:,i) + SeaSt_Interp_3D_Vec( Time, positionXY, p%PWaveAcc0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * p%WaveKinzi(i) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveDynP(i) = WaveDynP(i) + SeaSt_Interp_3D ( Time, positionXY, p%PWaveDynP0, p%seast_interp_p, ErrStat2, ErrMsg2 ) * p%WaveKinzi(i) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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, 'SeaSt_CalcOutput' ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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, 'SeaSt_CalcOutput' ) + WaveVel(:,i) = SeaSt_Interp_4D_Vec( p%WaveVel, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveAcc(:,i) = SeaSt_Interp_4D_Vec( p%WaveAcc, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + WaveDynP(i) = SeaSt_Interp_4D ( p%WaveDynP, m%seast_interp_m, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, 'SeaSt_CalcOutput' ) + 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. diff --git a/modules/seastate/src/SeaState.txt b/modules/seastate/src/SeaState.txt index 88c5819e79..0d9c47cfb2 100644 --- a/modules/seastate/src/SeaState.txt +++ b/modules/seastate/src/SeaState.txt @@ -164,15 +164,18 @@ typedef ^ ^ INTEGER NSt 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 WaveElev {*}{*}{*} - - "Total wave elevation" - +typedef ^ ^ SiKi WaveElev {*}{*}{*} - - "Total wave elevation" - 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 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 WaveDynP0 {*}{*}{*} - - "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 WaveAcc0 {*}{*}{*}{*} - - "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 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 WaveVel0 {*}{*}{*}{*} - - "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 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 WaveElev0 {*} - - "Instantaneous elevation time-series of incident waves at the platform reference point" (meters) 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) typedef ^ ^ INTEGER NWaveKin - - - "Number of points where the incident wave kinematics can be output" - @@ -181,6 +184,7 @@ typedef ^ ^ SiKi Wav 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 NumTotalOuts - - - "Number of all requested outputs including sub-modules" - diff --git a/modules/seastate/src/SeaState_DriverCode.f90 b/modules/seastate/src/SeaState_DriverCode.f90 index eaddab51d0..04dba25829 100644 --- a/modules/seastate/src/SeaState_DriverCode.f90 +++ b/modules/seastate/src/SeaState_DriverCode.f90 @@ -232,7 +232,10 @@ program SeaStateDriver ! Nullify these pointers because they are no longer needed nullify(InitOutData%WaveDynP) nullify(InitOutData%WaveAcc) - nullify(InitOutData%WaveVel) + nullify(InitOutData%WaveVel) + nullify(InitOutData%PWaveDynP0) + nullify(InitOutData%PWaveAcc0) + nullify(InitOutData%PWaveVel0) nullify(InitOutData%WaveTime) !nullify(InitOutData%WaveElevC0) !nullify(InitOutData%WaveDirArr) diff --git a/modules/seastate/src/SeaState_Types.f90 b/modules/seastate/src/SeaState_Types.f90 index 6ab40f4bd5..c8d565e656 100644 --- a/modules/seastate/src/SeaState_Types.f90 +++ b/modules/seastate/src/SeaState_Types.f90 @@ -185,9 +185,12 @@ MODULE SeaState_Types REAL(SiKi) , DIMENSION(:,:,:), POINTER :: WaveElev => NULL() !< Total wave elevation [-] 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)] 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)] @@ -195,6 +198,7 @@ MODULE SeaState_Types 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) :: NumTotalOuts !< Number of all requested outputs including sub-modules [-] @@ -4749,6 +4753,22 @@ SUBROUTINE SeaSt_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs 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) @@ -4787,6 +4807,24 @@ SUBROUTINE SeaSt_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs 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) @@ -4807,6 +4845,24 @@ SUBROUTINE SeaSt_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs 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) @@ -4866,6 +4922,7 @@ SUBROUTINE SeaSt_CopyParam( SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMs 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) @@ -4927,6 +4984,10 @@ SUBROUTINE SeaSt_DestroyParam( ParamData, ErrStat, ErrMsg ) DEALLOCATE(ParamData%WaveElev2) ParamData%WaveElev2 => NULL() ENDIF +IF (ASSOCIATED(ParamData%PWaveDynP0)) THEN + DEALLOCATE(ParamData%PWaveDynP0) + ParamData%PWaveDynP0 => NULL() +ENDIF IF (ASSOCIATED(ParamData%WaveDynP)) THEN DEALLOCATE(ParamData%WaveDynP) ParamData%WaveDynP => NULL() @@ -4935,10 +4996,18 @@ SUBROUTINE SeaSt_DestroyParam( ParamData, ErrStat, ErrMsg ) DEALLOCATE(ParamData%WaveAcc) ParamData%WaveAcc => NULL() ENDIF +IF (ASSOCIATED(ParamData%PWaveAcc0)) THEN + DEALLOCATE(ParamData%PWaveAcc0) + ParamData%PWaveAcc0 => NULL() +ENDIF IF (ASSOCIATED(ParamData%WaveVel)) THEN DEALLOCATE(ParamData%WaveVel) ParamData%WaveVel => NULL() ENDIF +IF (ASSOCIATED(ParamData%PWaveVel0)) THEN + DEALLOCATE(ParamData%PWaveVel0) + ParamData%PWaveVel0 => NULL() +ENDIF IF (ASSOCIATED(ParamData%WaveAccMCF)) THEN DEALLOCATE(ParamData%WaveAccMCF) ParamData%WaveAccMCF => NULL() @@ -5053,6 +5122,11 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -5063,11 +5137,21 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -5091,6 +5175,7 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -5336,6 +5421,31 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -5401,6 +5511,36 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -5436,6 +5576,36 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -5522,6 +5692,8 @@ SUBROUTINE SeaSt_PackParam( ReKiBuf, DbKiBuf, IntKiBuf, Indata, ErrStat, ErrMsg, 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 @@ -5850,6 +6022,34 @@ SUBROUTINE SeaSt_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM 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 @@ -5921,6 +6121,39 @@ SUBROUTINE SeaSt_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM 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 @@ -5959,6 +6192,39 @@ SUBROUTINE SeaSt_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM 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 @@ -6057,6 +6323,8 @@ SUBROUTINE SeaSt_UnPackParam( ReKiBuf, DbKiBuf, IntKiBuf, Outdata, ErrStat, ErrM 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 From f814b427e6d5f09c36e1c6c06fd5b60dc091b730 Mon Sep 17 00:00:00 2001 From: Lu Wang Date: Wed, 23 Feb 2022 13:43:11 -0700 Subject: [PATCH 072/338] Added documentation for the new SeaState and HydroDyn features: WaveMod=7, constrained NewWave, wave stretching, and the MacCamy-Fuchs diffraction model. --- .../HydroDyn/HydroDyn_MacCamy-Fuchs.docx | Bin 0 -> 80703 bytes .../HydroDyn_WaveStretching_Plan.docx | Bin 0 -> 4832594 bytes .../SeaState_Constrained_NewWave.docx | Bin 0 -> 1190372 bytes .../SeaState/SeaState_WaveMod7.docx | Bin 0 -> 29540 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/OtherSupporting/HydroDyn/HydroDyn_MacCamy-Fuchs.docx create mode 100644 docs/OtherSupporting/HydroDyn/HydroDyn_WaveStretching_Plan.docx create mode 100644 docs/OtherSupporting/SeaState/SeaState_Constrained_NewWave.docx create mode 100644 docs/OtherSupporting/SeaState/SeaState_WaveMod7.docx diff --git a/docs/OtherSupporting/HydroDyn/HydroDyn_MacCamy-Fuchs.docx b/docs/OtherSupporting/HydroDyn/HydroDyn_MacCamy-Fuchs.docx new file mode 100644 index 0000000000000000000000000000000000000000..5a2f466c95de2fa11532962812768cd4e8f0ed6b GIT binary patch literal 80703 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 literal 0 HcmV?d00001 diff --git a/docs/OtherSupporting/HydroDyn/HydroDyn_WaveStretching_Plan.docx b/docs/OtherSupporting/HydroDyn/HydroDyn_WaveStretching_Plan.docx new file mode 100644 index 0000000000000000000000000000000000000000..a6fec70bf5df05dc4c7ef202293b999cdc40e325 GIT binary patch literal 4832594 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 z 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


    mXq}#C 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
    R9rrkJ<3BW9g; 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 cDdTBoow-5lJucx33s3jWkG{?s?^LK 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

    Mqe%@Knr&EJWl%)la(e==n!G zOiqV`@ZGZk&K3HmnFETj;uF$D-M0H(ELZd(PJjQ!HJZnR=u2@&%)pB~mZBJ5nz@Y* zFL^&AE}pt?nN;g>%~C?xvIiV$^f2B%UUWgEpOt@}+;(M+PZ zQdX#YR)z5$2krlz;(Ul&RQh)+K}cT0_JPco`yyit!hJ_(h&LB0QalyB(metVfYbx}s{{4>t2p=D+ZVsRrt%+<7q0lw-Z5#GXn2%o_8_`S1{(@*rHUzbkx7 zpU0HjgGi4{-3d;r45^pXUfF!r-<8;3!6vl}nI_vsEc}}}-uOXi5rrZBkIF+$|HvyI z0O`l9Iy6HLZ1Kq48ZFY*}f5b5+0!jfA`)j;#8gDg`g&WI}z)T z@hqy7j$KD8Bz{bvPFGZZs5VRL9BN}v}Xs(y&Lwx2BzFSG%g`=1RRs$cWx}k7aJmN{3b?CE6;kEB;Q7?G)H8flNj{f z6}ZbXlbQKO}6tkGFg)Zz;5)k`zs4c@zay{wSu-c}MuJ8ogpTe6Gy zAWo0G!5nU{$EHbjD;!)FWuz`L406^~i<#MnvLn`n+k57~}xI9qdR}h);!~fXf!;88PMb{&@&@ zv)9m@DUz%A4ub=g1T6$OC$ZtGpt_Gp9O%F>I2`iZT|w1(Vz>R6N;S6B`F4rWxs1t6 zeXihERh7mn4PReLcK&cA287} zoK1~!0rnQuRXn}KiJ0tI!1Y)Z6=Z4QC?CV5r2&Y63eSDsx4C(wS5#FDLoQ2unxHJ| z!?L`-K5$LL*FXR+S*Q?~<7FO!ikO`IKXGV|>GJFHrW&d76a2)Wx}984lwCWdT?5V} zG732t1uWZW#AO>BPPs>iXb9nW4>`H_wbL}r7+N4#cRSr3ri&$bE;_lx+hlT&YX{f{mWt6vDt-LPS)3m z3JKbwA2p!gXa_kj(5-ql6X&ghX}Td%$y-OiDgy=bSQ2v81z$eAx^A0NoGvTsgQg6X`m8qO7X`>Kl1mJ=hr({fkY z49t?|ql-4_8aV36wmWi(h}6Yec*|R)$B)!vR&(`1MKf)iz8btO5+6@x)AAzxTFyoM z9A@!$4y_`qMgXCUBmCce{)&P|~qP!z<7dzIb~)6X~x61p=J>~+!Wo=x@lO4#z~ zLHT@PlL{O5(^Bq%roe3QG1M8KKF(L;++PJSBHNx^R3%i(=e|*-fV%&x*h9r}pc|G= zl~oC{z?ndO`rCa{4bu-H!3Vd5aqE@D$bn8YQ15;?)6v;HUeOjwrU4KjZ z6K&6{bhi<`X}#(Aqh^q;iV!WOGrivX*9(|~`S(wdi$gDy_dSqJleeCZwL!xSCh`yr zhlvzo4qR&{LC5~AB{pLrzdY2s=a!@7vC#YXVe#@nlbO^as^#>g{A(5=B zVQwM~OYC+~iwev3S9GpInJwhf@0z4eN>XWdC6T?)1(7wo?CN+ZG8&q{owHn$zg1UG z<4q>#(EVof>GPCn`(X#75O2Ua&58_G66`HjXF&OrlWNB2PbBXI-;l%J8SN z*_ckqX-|IBUUXNAPMnaEU0JlZ5Lk9#BxiYB`&fW8SxFrbE{eJ&3L+PLL@U0uUZ_xzgjYm#e~=kVvccZsTA(2yFD}Wa5?wdT=RJ$W>^0 z53%Hz_}pAZ+jjrKAaB?tGj%i5`_K!AHWS8q&b6kcwIF{0tngydZ0<;sTDQN_`TD-3TTI$CN$;lf# zTvE418P>VWvu*86v2zvgn|R^>Iy6VrKA0ZAuHMk1?O~xml@_;M=p(g~g1u@Za4IcW zWx1BTRS4c|jM9{;DzcP6*;27Q-Ka;ADN{m+ROru#*WRH&-#zeBF-#kaX`vY zYpxj&sP&X@z8)#%Xxvegd!VuiO=d)cLwz0}Jow}B8|$b6FH97g%dZV89# zif=!h4n*-tNcj2`Wz7<1%j>?xd0ub4$(@KZ1@4_91E(aiP$Vp)i^!M3`{o4dbKqpX z2JmC*IpI0&aK~<*(9Jr!66R%6(XOYmy!-MtR&78YKch(QIAOEB2fl;H8F58NkV*U_ z<4Q2XHOp8zM=Qs2TzjE7?dnTHhP2plyYSmRdcGC(Z;3N|*BG^`1ZR$o#A*I#4z9Rb zzn1-MlK|vqytAx`v(X1LH-H{xkwF0;@yNOa+_1*dGX>%@x^eaMVXmBf72Yk>`i%t@ zuUrxv?MUI0P#}JnJnA^g&(vq9=TxZ;?SFeus-MU=^g@9@RlC2QPx!EtfSF>)*T|bc znU5jAufo&@?d7bJQdB0OK-an%6B|lh|={@*RVO^yO&#kbHMzNi%hZXq^mFDBw4-U`WxXNT;{rs z$WIrEwvWxPo*ZLr)7!_=+dc!DY&}NhJ&hX)Ryw9;fQuIC4~=dkBn}~OWgc*L+17ae z8k5(o3Gmq!4}P?{`c?^CGZsh#E3U1GHoUb%*+7Ib>Bih%l{W@*+Xslet>U;-zdT0S zkk>Y8X58}t3G*IjX>>SurE?orCXZifN0;r!goZ-iY< zH7(g*QdH(bH7#ow@I>q`i!;U#<~H_Ctq+`FpT`@;g0!pa@oyMM{RlYU+(?-BP|YVR zZ7d>>^<|w)tDhPL7ngUTH;)*nH=*B9ZPvW@5O|eeOucAHn)JBC z*>-f^g>v~uzcuNPq=5dE4Y-15KRc4Qy+FhOtMWSj*>A3+NB#kEzI3$R+4o=TfeT_2 z>!&oR#~CQ+C?>dD)eR^Xg8q6UqDy61F=x6!#t}D?%T%ZZ-BmBM>ED7}ixIO;J`D2-Xp~!!=&}y zm|K=X1g2b!wqLi8XmZDi;EVzQ++GQZ%C?E|@JHri=JQIRpmBG~Gc)lJq zJ}&;s`-b6sNM~|GETNlgPyi|(&80{Z#?kw?&dx>HiDug@z!!Gvg|u9!?tZ5E#OOeN z>DeeDthc+MmlFDvg*4%d0{>ja6cqIHFzO^Y7G|9H8TSfY$gHiNO+_lhDWhj`z;JiX z+~cdtqhzaTF<;C$t}GUduBUWzbJKFDNTs>>-Bjp?;}y$r$&B#-jIF=a_-wo7cv zyZ75ih%df+hCht6BnbCL-TU35R|X#ha1wIh9Y6kU`?9fx#y4)bJhsO#Jx#@)+3V*0 zl$$)hCGbA5S@2NiaZ&!@9Nj`cGj>-EQDlZvLqg}9%NtAwzPXDFY4~HtUF;S5pqE#3 z#?jED-)L#H57_BG@seF)s5E+df^UQI-SbXL{RZ3#P^5Qtw(P8- zL}9S~V4e3P>9{UTKLyK;_-~WE@~>^s*1LQVXCZwAeOm#S0KPk(K6Uk&~@m3XvV(QvUTY4Pu|V;3%-1$=c$0v<|g=!_kmS@mIx8~ zO{Ac~tkVUtl#qXWmS`4r>_N=M@F+dy=MfDZ>%^vO=KLqsF3uwf_Z^?duDO6_yxZRp zyVVEBXxPZTEd;zT;OK^Sbr9ak8AOu+M)bjc_I}mgOw!&8?{jV4;Y@xUVRXI}usMcW z-MJWZ(|@ozA-VZC`1EK{aiOuIa2Ku%^kva>z97)#<9; zsvJELOO|z?RPU%5w@+7LwrE1t)iW%RC!lg|ARcJuMw2^)5Jvp&x@`NnUes+Et~9% zt{A}!0Q^S;9KeSWKAK^}1;T&-!nGIpn=|pnYgNT%;6@1)t88IH{E=L&rtm4+@V78% z)(aZ61_^G^*+B)j-H<+=S8uS(cSZ6AhHMF^!y%PgUNjG+;F>;e#&FGN1^gFEHa&2F z07W=}S6?Q4Q7G*^XE00Vu4OPwp?Si1g665unA(Z4Ng5uvRATl{0Y{#%Ak`qX;O)Z; zLEqLF#>w$;`^U}yod3w1g7FSWWCg9D*RWgZ1e?I42(~Y0sbmz+ywjw3SLzv7wZycv|LJzgwt;AQ za|HMMFH|M7_{ME04+n19=T8=h$$ ze>A+$aT5(nnGo)Nx~(}T{=UmU)@h$5ZB-3CT{q7Wy=ZuRaF)?nO{s6TEq z->|8?gvOKma8ZK>*4`1HVzn_*=WQHFZ2W|@T4H94zQ0>km%JNtLALRU>j>#Y6CZac zx5>iM!qoD=H$~r{77R>}@l6MZm&Z;J02zhh7w>IfHRT`ZDrxT@6Gg`YufSF#3#|7s ztNjbC$jfWqYw`L`r20*}B5RRV+8BQC^a-XP;-4&hQa8Ftn^1L>is55M*RicF&X=x( zwN)y6e_vv_gngs`6ydmF%0~Q(;lD0> zcDQN0izvJLTwRhBd5@bn#G%B}zI)mMAKdytAWAWJi-JZkU9t98I90nfGA14u1?y#r`V|U`3n< zJzPi99K{mDvFFqeNFWG+@3aO2#FyPhic?jEH5={DVik)LlDv1UL(gyU*u^@#zux1I z+>uB8My8dECbS%_$qB5ztzb>{qWr=sS^&4AMrqT z#`yT+obcgg(Hq@es>f-QrOlsn%CG{DF!?pFI#zfld@Wl}aD77hL4A9syHMJtMvBDj zhI?{q!JX>JI1pG6gSW9VC=+8`?_X#A0f+X;!T(7)+NuNVB>2H3Pf#Q`OL8t?J3~*$ z_bs{E3tEO)vnuh+UQ>je9h@3ziQ_vcv+~5{OGqy4FJy_m9$v^+hs0c0_5D+L5$U@^ z;OmRLYjFOv&lDS{Mw`hNFHs!3ycm8d&wtUi?M5i?y%Qse@$6$D0rIJ<*ElhD`r=OD zYN=m9Kko?aJZ55fe_rdRBt^;7f#{P4l4PA_WZ{#MPG$QrUKpTp<*F*g`GG8ZN;PSpzZFZ4A<=vd3By)b6xQ6 z<)!rdTVh)t&2-T6Xh(fo#c}-BkyLS%{biPxh)KXVg4(_4yFchcrZJNewu~kt!#PAb zZJP(U4?|cND<7Q`c0{?we#K&^(j(SN;S6zT#u7Y;OSRzCjzD8IsbXX5lrK4dBl7(e zH2?I0*q2?jD1{ByqZe#V;J4x3637}4>;L`h`>%CBFV^ip(q!Z`0oI~v4tvPefSr?B=~PDQIz2 zH_Xz(QX?Q_MKXyv54R@xITY4|=@@^`a`cpVf=`ufYA9$Nl{>@iBg$^La$B4Njn!iPb0eg1O3bJ3r>*U&Y z`T7(sa{xJB&*F_r4eu<4B!UtR(LU4dcF2qq5e*5QSG1ku59n2{zIAB(4OErZZ2eA`j3asXH`FUT zBl^$N;U)E)B*c(y2<*Kh z#UaBY!-jC&ZNwY|;M(H$;KU#2C^+;$W5Ysdq6{x7Nf4tre#TEqDRTIxsePD;r;xuq zSy7L=gt~bzusTHVZ(PWAQvB^YPHN}Q0Kz}^?MYyj+LwE{&$>+o2hgWBTiNoz@G;B= z_eDM}`mCEA+j)#X?Y0)rA8-dBn_&`bEra(;P~cOYRrKyW8&9BhrKy>4?{B%qi94Fz z*88KCpbzp)6a|FGE3K-Av$exgR?Mxnmh{YAq{<_WXiQ!DwJB>2JWUS6robvl>OITD zvToO)2GCoG3Osn_G@kL8G4Yt;kqXTa6JKbs5~0lko+f7#wpOkQi5<4Op60@({EM>`0>4N?oVONf#S0_;9K@0T&9(D{!6|8V6Nc z6-T{oWs7sxr31CzhSqHJE&Ze_#$uxdwSJv;Io(HxyUM1dbJq3hSIRwJ-k5B@nLGiQ zQ~b^BU8@!nKWv?~g{y5e!~Iq$!*vIv;9x!nBsJ`HT!U!33!S2?f^@!-Y`vZ=E`eJ3vp#_gkgw0v^F%ItxiZd4C z5fD^q$xfjz4o9QyGYt0e$JAZO0<79DhDe9|)aVL|A9A{my#x+B(5$I)1v4)`SR~g4 z!;|1^5(;N0fFD>Xe-mFxUIyz@Twsl4(q9-0s(L{7wL+a=2G@-H63k?!a{gK3uc)%x zVw^WR)r>eeaye&w|1=_1p}Juxw1Sd-#WmmS^Mm-xP};D#+BU2A0hACU6Ys57_AWcI zY{;zO=n@(9zU6g9B6AJdrDFAmA2xx<)o3l&y1e9_%mPI(uU1Ci6j)YBXNY`2eU8Sh zHFS&Uix$_%6t}qjp*YC`9PgXVl6HA2YFE?L{}g-gkGObRlE*5MA}l zE8P!7Q+W!Ih$;h+A!^{Vv286v-g*=a_0h^rrrlp9k-9*>PnT zxHssDNPiy7(q)1a@LMZW`7{q(_v@L&LpVYdT&_&NIrWwo1$?N2z3E%v84Kt7i&1pH zsNkT77q@;)s{#z26>(Zun9{%MQJ4ZcEwXS@?bm1;dH=hw3cbMZyGxBzWslqDDsBZW z1DvjWIL25REnBs1As}0!oD$*!h;Hb0XN1S2^M%*i{vx$^dzZ6roSx~n*bv3oYkI9j7UhZtjXsg(0Pu}b1 zN1}2T8wGQAg3(@`iu`?j!ASIO2skPZAmi4Z)|0na>#}8jUrm^JWl+hsy7LiKGLgA8 z(Ux1Weo3t&(js~kBN$*vZ!nP`d2#+ITLS##{cLhS?ZuR^cew#biSz|X!psaP^!nZZ z1u=}8cBRL$KuiJxlc2T(xH{A*nNxzU^@R{u}pEnr+LhC|lg%bmA z?fyU2GopmHTl|vl$Wq=`pLr-|u!^42x%irCYx69iaur5eoaSaG+%sw7TiOcDdsy|n%k^1#zW(eJPA$sPFgu<< zZ7vr;r}@j461Qwamo(;ix$;Y$db>o!y?_1y;jZ-u>u($uvm%{z;SMOE3Sp}Siq(*7 zKXv%|UHNWLe8``Y_@Ae*L~Kelbx^e}zQ1klqU1i7Ho_Sj$$P|R^XSFO7dfqS&`rak zrY_e62Xy3dGg~5f-$$jr?Rquw+Uqr26RNp4h?nILDHRan{?C{bzCTu7RxF(cfVxlL7QOjaHtezqcNAh?=IuUb&7 zYcm3+UN%*73+&22KDug5&9!b{xj9nba(nkBJ8CpybnY3S0F#Zu>1@m_inbW#IOSpX zrhOqh582Zn?;z}3Go8P$3c)7Y%LtEee@C1fwkYvqQv)%C&k4PsnC=8ny&efZ8B1@0 zBQ_tgdoK-8@x~>ez|EaFpj%p~aD{4@G1hPrKo+%Hic(zn{yY=4I_pF-Q@~)OmnS#6 zN_kMjd_rqiH=wpNw!BV3P{1T_EY;CCP@AUn?PxsM^muEO^`xzNFz)%w?Gd8^qaiJ|51H{&Ed~4qG(3)GwWnz^$j*F3~1GyVdTt4Tl`)FjD)n@<*QO({&Pf_V;fKcKjiS-7tifI91AN)eCXs2!j^bP87u?WT6vLzFoUr3d41qo4_QrtI15pdJt4>7 zLJaCkcA)m1HFTx_WzOc%E3uBpAF0Qn2zMuy26xXR4>v4khr{Wy>cXveKs^UXn4wI; zS($9kBpozx+1F{q(1PAWK9IQEl&a9JzMA;|1=%e4{E_Pd>Ts(XH8_WZ4I*JBYRMfm zIdJpV5*Up#cv+D@QkWTz^#J+|SAhP;pp=3|{?MHPu)P2>!kv5iY@hk92R75^G`-tL zx_0gRgU}(}I;njvMx`pW@6K|5iGGH2C_e*dsi8;=5BE_8?kRH`o|Fy1>A=gUJ0meV zhAgD_V@%su6xyws>8R zTJHZ+nRPOI0MO69z*$kI__UAr@p+5WYt^^a(Q;X{>P)eoAEgW2_ey2~d`vA)*&96n;w15cZXt`nwjo*H;Tr>Il^h%dYk#^WHH>3_VnImpYW^ zjVL+Q_g^e}pdPC3W)#j&n?&G(;SrO@5l2Udy(YhcT_M?V;i_L}V9nVGU*wHNDZ!Z} z>K;xh<-n6|%4@44iUcwyGl!U-A4025o^l}mH}`IrS8bIE*%SVN4foV+_+JXZp1!^x z7$R@)GeD%mq@+F8);#8+_oMuzM$W*LoMD_7R(#wqB>z_86e}SVEs2i zi7)aC$e>lWWUyC;^_QwD0^d1OiNrU>!^wYxnaDpE6E%A!>{I9xSTCAJ>{lS1Qh#Pd z&$!6nH{U#?7~`v3-s6v{>z->C#-(UdchU-gcvtaF_1Wo0uN>mte9pV8;w~oLx^n46d_h9q2XVM+{R}EM}^S23g-vXG(VnMr)p4D*cRo zww<^?zoLPPbk+S#a>p6b?8La@)pIJUzz4H`S;K{acG8>(f(Sk{t~~0wZzOyIYIIc) z6UaY9xu?{T%9wy)4L6@L>RRSJq*3H6vo05 z$$i5$->09-eXGH2@fhWsZKuO`EYARwhaU+<8h8q;_yyBvdGo#EDMHsTGXz@tuC{Ij z$yJIJ#|w`Kdy6TSJMU?$8dHUES!Wc80q?UU`4A&F2bDb3j&sH~ zK1V&95UbG7t#$i&24?zwlToMY;Rh|aHdx^VI&vh}au)kGTSKA850LVv=e=P4Vwj!O zz+v@hmQzU%hZ{5>{Q3`Y)NU=($H#j0QZ-%Y?A?60c2)!W1On-4aiT zi^dZ2Oed2@s2fu$Vk=Y_lTv3dvf1lrCPxVQN`7r!`?@R8xWals zSJRMFf=YO^-D-|H9pOsbWqx2pw=A@tzmPpW!TRLY049be`P>dk^I z1h4%Yc*r+sFyO|kM2P6SLF2)`rDOSgFrIr7>Np}Cb4_eOtSrSj@=+?a|3e#z3t@g` zM9J0bBjFgHj4S;IpJt^t`Sf%iesUZtWa?|^fs@nwBRP}g%&G7RXsQ6O>IcL6iNTN) zVk>NLwSI+|4#Ru2X|law>Y2ODKIzZvzqhI9o5i+V$*5z=BS$+Gca%|oIm|Izcpv*4 z7#*#@()Y&Iq1xoaL7rHBboPs>xlr)pjK&%2U41AJ0{@QTYw;Gc)AeikG`{%_VSbzs zCEJBW$L8Ejh)7lN?p=y4i69^KKhC?Nb{goP*LH7s*f{Q_8%IfEn6dp^P`W~zXEq1K z?CbtY2Y^UXz_JQF?!4ROGSUlXB<+oZRoKlshYl#248kir+HBP+Xeg{B ztOk2mDL3a1LsXlKhCvm_cXIEu(WD*}vcz_rM>bKzf>62w1}1p!zQ&*mxw7#_Xyb4{Z1V=ZYS}X0UFgfn55Ve3>30v+T zRGO29sS)V4F>Jf_=CDS$AA*O7Y#)YJ6gx@xq`q@|$ny(OLaaV5CwGo)icBr7C%o|` zyfSve3ILDbOfMOF>r(AcRes5`G1e0z+*G&uSBH%7+?{J+1jRxSroOVZQ}(0gqp8QD z^1!Vqx`;MVR*wQ)xR38_OZ@!;EEot`Nm+2=_SL8AiTd2h2xu?=cBOW16=Q>G-%&H5 z5s*DU2-)W7;myzJwe>Iy6^;`55$d{&dZ$wjboHyEsYE+x*{*%HA*XEr8tD#cn-M`cEM<#xW``I-IIj79H^}<-SrcJBD)eFEEeeQt_O84yn5;@8 z6nv^n287zjj(6r=6xLO_SN)>N^y#0u)D?-%K6nUPa-J6?K_&Xjo-z0(ilXGAfv4vj zmHw~Z1zAFHui*LVjjWq)_&V)PnAWVe#rn)1uz<8(FSiY?ivu32DP? z1*2ZIfvn)5Bhp`xeU~TyomUGWYX0)>!;GK_+w_WFEz_ z<_!q(x>S;HLW-IWD&1owm>{GocOo%c_r~cG{@sAGf&K{m%h$!Ms=Q;-DrJ<*K-DmT zqgY>R_3OVq^drPWE8^Q<%V9#rC{qX6)`?{`afgF-)kur4bRHQm1>aTR>;tpo8$&v! z3r~9~z@%GGF4IGwP1;Ajq|9?$JW8naNzGnopvI_>E|$*~4w+}$X*y(n8+|B3P43WX z3cMhm`9(;b7mBmGUE_=1@6s3YVLPJZn4R}Su6A^?u(ObTIZY-jZl3n|9|q@{wG+-+ z>?++*oVaZm{4}me~yWOAH=gb4K9;f&U#hg02 zbUR-q6v+KYQ;0|A2hvR7oH0L39-k(XaKfB1Sx-P9Z4^gA{^zCyTCBpt<{~sz-;ssH z3M$No3(pKd?4gs33nVp1++CiXdWC#**w2vq5?1gL<=E+~+6hf_bosQ{Y@{rcfi5oZPs@{fp-@CG2OOI?2 zzt6MCt5>gJFvM3%@`y-;uTWm0!RNHE-h6KQnB@NY)hit2S8w4GH#(I|!T18|HNWG?pQ~O`UIh z8`H_09Hz+?OWJr+q$z;O&PQEmWKCzr3&Q>(B6+FHv2&g2_ zy>sYzHKo0BBuDyPtVv&&=~#%pilfOe;fXeV><3yo2pBro=Rvdk77e7TYolvW7iGKM z>eSqOBrfjk!*B3=2P*6u>9iQ*Mf5+WzA`F~rU^GVgy6wtLxA8Ag6l#Eo`m4;?(Xg+ z!QD3m3-0cc#aS#kEWWrb&a!ZMzx(6fKQ-OePj&V5oHJch-BU%;`^RYN#Kze-5oerVqR0eKDTAcINvnq zQX*ZHJiSObN{~FAOPmYGiHmDczAs8h;nqCmDbD2%m!45(Fco7Yh=~g?4}8!;1cjA> zGawqV$*3RYPxSTEc4^ks^|@M4UFgzjo`nx@aR3MRIG`9fl!vREIsDa3tyT!!=(|!_ ziLZ#$zzut&=~(sbk7U!FdC_+xlZZ7G;7Tw2{+bh6yE-*atcWRMf32L|o0;$Q`NvGJv?Lc{_u^U2Rw zP6>x=B{`Dwh(-spo%H7|?jG;yx-M*-|HXXwpzd^{yJVe*llyv!uF1TH=6Q3seC2G3 zyNc~k+FVU5{b$)*5`LZ-MUEQy2y1kxTu$Uk<_KN-9H03ybCAd6in|UQ5Yta8RTC{UwuAeqXvu3Xk zUb2F>Yaodi5l_VA3=e~0M)%mWGvWBLK$q+zSJVYkLuEG}~3Jp&yQ$s+KbV9S72#Yyf|Wt%--1#~asaiGtB;`XNm$^FP0 zw*kicJErt`g}qQ&J}P8P*;MMj^t?6Ig+fAAbgSc4j9LtZix=HA+ROBz*8{gX5U;p^ z*0w|+{*x~UH?pT5ZIJ!IZgSzWK6JT!^B+WVF2n)&zM{gvGqkjEAU0y4yGLT@p;W=g zOG7tq=PUL?jCP5Q3Mu}Djwf;`fgd4Z(RUBgr z74wdpN2_hjo$J5$o>Yhx!OdH(8w5_3bk-V9C}Rx>3ttGe0s9&>5S1q-uipxtGa5$xn-8v&#Cf=8juf-ngORPU71C`|NPMRQ+p27Io4h6cM)amKG5&v)g=;H8$|X; zTwJ7-!{jqTh{BYDg-wDuWbq1Gl|W4?f>F9_IWKxSvX$@|S}LaP$Ytyt|f8law$QB%Jrg z{Mo{#$L6B==`~pi=VI(%8fQ~C0y1+uuo5k%%+upO<%-mM=?UM?Z&&xl59M^ zxj5rId*j$==)J<3fWkemle%1o3h3{-ERw{jd4M(#658IQx)JBt(${L|Gqa*`L$bnu zj^OoD_cB{)?C>}_>mXZM)nZ$jT6notwa7WJN|xI$9^owatdRD~=(QJe^42Jj$xTZ| zc;zIF;9c{UU&bWCImwFn$A2a<7P7Qc3$r0?gAH18Ger-4{U zm6ly?YG%y7IQD0uJ-8&V(npM7I%k=5)JKUAJ;@ zeact^29@5=Ksiq0EqR@{VA3wt7+#;)o^#eVK(>2#S7>*&*#p;x6LT|o8o{1viFe%F zZ`wz%Xt}Ju{*B3vZ9^3GJMiOXa>8w_D{j|?D*BV#{P#O-WwHxiHwy`>3oP>_Ag~Hc zq=2DY{p>T<;VGa(-i7SlT%Wtq?2K95=B4c1UysZ#xhf;}+w9kEhQqK9ev(5HYLadS zU#8deHvi@^eOrHMtSEEF#A!c@e}pWe z)^=Pz$xcvs7dwzhM9&e>CV4VEpxbEdr#s&y6<}@+xI^FOn~0bGad@h|$05w@-j)+9 z5%;UQfA8YW{n}5SLNktRe{lB!Cb*mUew1Emw_hW8CzM&tkF+{zu zgQG``qu0NpufzZQokB#RR5Tiq+&OheHUu}uiq`d#FTF-NL(6U2-m;dc9Z91 z1*WkyKmPN2JCbiAgfr*HvLja}Brrv2Mwzt1s0{UneW$9pFJX(ZSD6o{!&UX0JtB1 zZ!^A<%Nr%b_FD|E0d;z?oN~i(m`{OzhsF|lM{H=fx30RKY4PA&ocPZnNc4!Uo~a-8 zm^FRWKitT`$&YoLeEsnQbU!Zky=Q?%LPoUQHPb>NqFa1(HSI|=-ml+ z=BJe3uLDwY@);%{@tE3Qf){;Sl2*Ma;CtFkQH01JaCatz;OzWeb&{LMYxuoB(=xhW z0IUF7JE_NV&s69_INkCm4~!Ea;n)BR?8)2E>V2@<7PH~FDDD8#Zaw8792udj)`sj> z?Gn{0t%V($Q<{HmBh+g(nj)7%D?PJGlR)!FHHo?(4eOUx&9fbHX-xGPv}!BUIGfCc z2|wPv*|`pNutpMFBR~&_s5rYU0bEBR~b;M;*6pxUx8U zw)h+16Z+;uUH1@>r;q}yebP{J7cfe6$Ty-3lBJx-g|R~C(pHMKpFQ+{)*ujcCKfo`bbs^z|M z7k%UO2CjM{hv#j$DOC1$Y5w2B$_HD=YTXum@hCj+uftdBs2`sc6DEU}L1vyK@s4p= z0_}?k@|2uEv5o?bp;-=kTb4E`wqIve1y= z64FoOsCg|^Q;~gz)W{4t`1R94ynKwVW9l#01B(8(sZZd+QSXd_z4|W^#H)x#I9xrJEHFtx^LT-f41ZWo`X<9 zegj{Qr_1NOl5;OR|E-t{2IL+U2MYZ*ic^zD_xw;0Kq@Hu?dunS=FGS*B7dc4T-P8p zi0%0#=H_T<`Wz0bnq>%RRB_^uOpTi6xMS{-rIh7aYwx(~$61=b)(zBs;peOZM9aDo zc{Iz45?wUQCH@`4tZsL=Zt!9l!{3b`b#Li#Sn;uV;uh7oqdn0Aw>;}acbwZ7D}$bY z03v)I##yov=*Ky&(2v8Ay&G~t>h%&!x!gW~L)AKmAm?sZ>eMMA%M6UKxKl%r6)Ao` zIB&BOZS2F?>SeHOpldjYhV>C=KX5@^YXy+q_ZL}L8rc#g@sc#~^5ulwR^W4JyQ~TS zv?+`@pt$>^>(0WoKmHZV8O?831xP;2_T^fF#LxvY;j|#}rXV0sdP)L9UqndV&=k|; zkW}D6y&c$e1wZsA>x{ITVoyjvx8?+t>Q8lj zOgk>$Hb#iFmIV~hm_lDETvP=~A2C%w6HU86;tRT~hKstRhJSU*rx&>L;$`j@7w9aJ zuUj8FIy zU#08l>CWo0E*fW=biURXNniU0DA%VR`B9lNqSeA_!8hVypBJv$M%1r&5GJ=sob=5A zqtJWO1dW#4$~(sC16Y_A4kDhDc?yAw`_IW>%+ofkVMo|^eL0Mad?Pjn3|dtQ zc_(S)B_{pj*^;=_uc%4swFMLK3Qc(6Yc1@C9OSH=yj)%--;sSOI!$d+-}m5GHXfgA zH<|^+SXoQ!TrzZcygz8-I3=RZ#RTnYt3u&lpD6A88t;P8jzJ^ z<9E{3IeAQSDJ2qOnqx5=Gu&N3Q)ub$Nr}|?mm~4nV#3yTLQ=uP#{^Xm_{P~0jo*sz zV1}xUlE6p>8@4U68TMtiHC)Q!U+ef&e$Cm$LC$viYt4P(l-}egc5AFP*-m_YF6RM} z5TM;lyH)b7-WD}O4PLrix}9{DQ>j++GnNtY5aw@zvg3O`x+ctds=Q@8zoE=3m;x^h zQ74YE#Y)~&Z}_B$N}m4i`yDJEL@vLDBM%_$7C^aVrXronX8BM5Lfrd&8Itm?eV8i z_DuX+x|y}|tysDCn~ydUesT=VQHQN&hFv^Pbbr2I&|fZ35UCqRau?GoK<`dglBs%*-nn2TT zHr&>?-0QA7hS)mjJn&OfXYbbVMzGbS(T{5-p2)w~@EX10`;g8o4@~b|>_9o`mt8>; zSnY_N2ahR)Z{|Hc>q30y;ZfR?opQRBDcz$36uoMGSnWOe`E@Fs0^vH=?|O$PZ&bnH z8+Jo}WE9q(n}C$*GExmJ5d&f3bmRF*Bv#cuhye*c`d)ipoXzpTTNq{IExp| z%T3h+q5!Np)g>p;=HC_pUX8XBnNC{zEyO6X0|Ruf^Yxa9_a^j4>rK0qyu}cm!b23< z-Soxe;xH9bs@^TIqMUN}p{5lk*x>mLa zYDp2c{Q>H=h5DmA(k;7Sc`lKb*TUqc^8UV4Od`*AqR#8!S$zFF3) zZ-FyNI=>CkNOSw-(x{-hp9w*}d*GKbri?)#Y5tND0M~$(EyWIMI;jjIkA*Ew_9VWX z-BZg>a0Uot`Q1FBL_UnT7&z@ zWLH|1w%6_9KqQEJ@TaPu!l>xJ>=5miw=3~rdL8OG<^|ysa{{OvSWRop(YVyHN?SC^ zhp^J3%Zg)&x_3q$B>hUCCpky$sws9Zt#LzjxqE*kAekdjbbAzkE7jeOB?-8=WjjfZ z5;S>m3I+@S=BWI;aG-`v&Q#t)FOX7aGjmusXq(KZcp(MfPPN}$J|`u8vugC5ZmE!}{)p_^62^!%gFFxT>UW@LH2T6;8#l)T{jkbmPYcngN-~bb85%y6&LF)x#yD zr?@bWCk~G9Ur*y3)X+}?LYr#i+~Dt{7Dd)fnkPcX!Z!; z~ZkqZYV13hytuQQ`1;tvDBucw(SIf-cow}s@I#754O#b#Zw1D;q2 zJdgg~J}Jj}noBlG>7QA2(rn46LES4-pwx(a4=!{;3HL|Z%$fp!E&el7!9 z6;F)}hK2mp1~+f#+>y+WM>0`RiR#=NJ7+ve~i7m9e0e(U6#azYp=|{`vla(vPg+COhYRwW;%P1wA zpp{yGD#(sd>psYS#ZBMCIJErh*!n?O@LfWCFDbGqyk+`H?lf=gcp&xEsSgI-UFiy6 zUGVZ{{_uE^O!BbXDnlD! zS~_$sc_1CPe;j*yscIlV5}?{~O9$4iV<$nH89MGGCI@JD?j)K1sJ9eQFhD5+083Hr z*qXPe&EV{0 zoV9m*#{oXnB}VLVf|mfV@(z_p?pSER`g%8lC8pW(XwF;u?QVy7W%JEWWp-et&|20i z=GvYP;U9Gt(zREHFX3}Jt5i;8@4U-P|AR#S53)t6LgCanr4s!F^0DhE_4uH!zs;RH z3irI4&UnsfhN~n0Co?d#x#Um5dvKHIIaJ>eF*mLvzPEO8woLPhg4+QQ{C z=!%3tPN~?skeo8@kBTUF-A%(lf4Zu$C&FM|nOv2DysMn)5$12ZJ^YFD{JUFeB4@Gn zcY^I=*$Mec;^mx(HK9F_LM();lxaddmkP)rtJHwPS)K3yawkvM^tH1VIju$rQDwsb zL5R*(Yse$4hW9onA1a6ainZCXcAlRbxphFskJPO~cX)5udDQnFV zLr1^Ff($S^UK~c)eE;B#MAO}*ymf1fklYM;zsaf+^nj87(`oTG@n z|2alQ5cr;3t~aRrXK7+Ov(0yD9;05h#sQrS;23i(h~Z)5HZjgBm^3)HDqs8(fhLFw zd?7)wg03HbC;sXc$}aI&vgli$+shMjawOjSEj=((fXu7Gg~MyzJ+iVAD0f3-OJbv` zfhY2mGp4`gbkElX@i*3)p}J=KlzgU(G}We3+Uz-7`C73U5!ZO_Y|2{w!W-H4^Mo5k z>l*<+**f6_(zHzpGrG`w`iig!`&h0|Q4h3zx_UVreIG(soqVDeInKvyebQ5#$1ESy zlov=Z6g`I@m_(h{`dr7MQi0(#a>C^E)xRaa!JCIv6N<9T8^aX@lxR!iib7tS*f2Im zx}V)!oS7ZnQFbgk2ecI3ibJWUozM8jRF!;3iMjrM#FYNs+4TLe#GP8^j*_b}DprmY zzZ3(!)I-eiuSq?@R(nMLA4j^5#i)+vFq}7;6D#vCoYtJzTzrJxC4l|_R%e@*SrKW$ zR*n}(r46nlOPe}U8I$rGQd_Hy3IB9xrt*>!cL$zmpJ4I&XUM?EweZ|#4yXG3^`I6e z{10@d3%s|iw$&-mM}ab;$KUKvJj5|L!Eo{zgx@yr+=14GxvJ;6d!$dqAdr?oiXD)O z#O8$Ci=r)>{Wazo0=p6y^}JcQ2r3MzHkz%xQ>DAcWUML3=`_V%dake}YncDBY?uD@|1R1HdxxA?vA{Y3TSVT$=dw5y5Bd zuz&!ZF&-&na%D0m+%p}KSMNBy-~v?dEKYS@3vr(2nw1_)#7K7!u0K(%aS!r}nCf@r zfferg9Bm=UXmV^s^OhHlkmDiDE`{Jas~VE7&c#I#t_02OFXD6Kw8?HQZdlZpo*om3 zHZf!V#NG=QoV?9)5Gbjuw2Tcf^Q@;$5VssDkl9&o{G)8iJ~glCcJ5=#1a73+LcH42 zN6*B{9CaX1EuhZtN^F?df6qOQP{=wNE&RBYWJtp&TkkZ^upn^p?e>z)OVQuWZZ1w<%RYT`Vixg`Ym5><%jM;&1|c>tAtoW!I5m20P2J82t%sN znT{=Xj;F~-f$=L1S|_Hbl_4)Fu@ZtUiM5k=F(76;8XczbdaMlehfjl=BAQc)`@XQc zPwiDY+B3+5>q5Fuj|<1wVs~b?K7E>4pIS!)*A1Its{m(Y!t%wcL`rlK|&G zL)fGtj^r9g{G+Yh!j;Q-J%D0C=Yr9=1JP!aXG!ryd~1OFIOZ*NA%-aEAs0to?tPNH z)xh+BSd+f6N29|sy6VwVB@ZzG5mMya=7Ho-RTk(U>A<&>k9V3`CHM)AJ-5bQhP-Ey zj~rk4l&vm7v+@Nk-%lqcFKEEG*Z=;BjfWs@?eZY&M%cUUv}fLbcF&J`m*`yTUbl>L zyx)`v;eFtPOo*3CU2wOG|GO?u1Nx5~`*=9nejBH0wi5j&vUlyi6a{;;$rrYHA=(VP z0-SwK!bc*#<$42>B84RC{~jwy>UTdhM!WUl(W!I=-&W%w%cE3BA;9(PPn(Y-9T8@e zCbM2Zj!RR5pPrz-7P;=YTim23*Fpr`F^D{Tb=OM6jImxp0>Y-iP2MbPHO+XzFF=&E z9w0F#;*hgerA&Wp4cefhwzE{t(Ft8BQrX2S>`h>i_i{5RCCOtxK3}o3t9mDHn?^5{ zP&aL62`tUMdwFO)VP-IvzA&>U0g=8x_|E{gvd96Mp^aPVRNTF$wv-r_%?`43*)6c| zxFZC20rD(APSfjs^Xw0Mecj|kOYLabAGzL2;b8dJFyfO`Tc%choVQW*<@FQBb|P`h zJt|dsi`bDv^Gmof4g{`Ik$Q*A#mR$DUrrwx8<3F3blC}@!g`KA;~)nRp*D+SEu?kv z3>JUsxRh}t9J3!Ze@*35al?L2w@gyvz3Z0FVx1&MiZl+tiAy*lE{{`E`Re|J#dME)~0i=yo#FYWB!?j zBwoC;t&R2aOOk8;I>O>! zZSQ>cIs)tu&15=SZMhqI24+Nxbwgwn+zcqKir`B(!*1*JQb>GwSH*lZ2+09xc z2!EhyWF3M5Lx_4WwuU~)yA8%IVITt>tp-mgC6n(|U@;5B;w}s_uPtlA%Pztk7c7)$$0!_6(^DY32&k5@c)U(fz zDr`8@`I56ob<`5v=RP5CPe`a8hT;|f5Ts6I^c6xs-zYJExhgbE;1~)_=@$H#;F(>f z(EeG|2Fw0<9Z9~UN4IP;Vy5?nw6L;6IVsflSCo#5k;amxt2{KTugG1^z^0@W<=*D) zF~5vF@MB=;gRL#2!TW!STxRxY=G0RZXLW+Mup5UBKaAdS9D>#`t$^_x;?QjW@f)(xpyja}Dr}q6kc8_G z=$@0Iqk*xF`pldyq-WmboGsk%3(LtmUQ^6`!M$D%r9tsWp_nnim1v8AB4)eE6RAVB zZ2jZI%*M8KoxS=dbe-F>t2M%odjcRfy=VsBu;5385e`x~8~w3KWqpSFE(_@Gr)c|d zM&7XA)Prw*Gl*GX03s8r{@JspY};${Cmw-ygsS7m=`Ehh(74WKuKX{Q#9gd>OKs0d z=m3aHHz=h10wm|h9t%?lF$Xb#I{{ZF5Zm6VaLCVd;;(m##^kpoGt#&cs13o*L}$D> zo^hy@NAs8jM=G2x1SYtg-l#QR(jg`{Zrc~Ag%IvgMB88gxhKUj?tC6-52_zSghkFF zK0rL_FwksF(InnHqO>QkuC!1*>2C`F$n!5rLf~J@?)nku2!bZCPC*g|&_~h!`7kzqw1=L!5n#{aAQ;%OlkR zLaG{gi6}4#nvuP3vq3xDx(Y(uZX|wy2D{jse!Z2TX_C$MtP`3s6qs<2{_=jO#(Sok zu%GT20zSO{u~|_3I$oF(@B3~CX(##XSpU{O^%dRdE^;Xzw~vF_y@t;n%qF<-NX~oVn^_zot zt`)i*dOs>rHA?^zv671!FT`Yrj!{~XC&RzHL0yE%!9aTO#TFY+SB=L1wd=AgxBPz7 zAim5c6?*tr3+@Nm-5ENmW;Z^UZ3d~jnzLsO2FuGasPX=nTM9el!P^ojoQZ(+pq^U$^ebs)^e6*{%=NVW#Q*K?(xVt zVuY%CRZJMzdTy34l>Y->gtAj@TY|GZMPZu_MSW&uy=`$~1>0p=2Drv}=KtAl5gBV? zYo9gIi1AB*x(4Vwh2IxX+F>FsWp)8ehvTNERr|D8nitAggpYrM0v}7G+}fXa6fX@# zM}SW!jXBWf@I;96q$Tl*(xhbJ0l}N%U`5XQ5=CDgTLWhxu8Y|9?H9t&EFfxZm#dN@00e1R|YDTTYy51rnwf`SPaguc~tEDcmi}J@@oWzuUl1B+Yr^b8LfY z0>Ts0(pCiqvxs&9p&gzLx(>p_mb|`zTiy!4w-J6~LixA{C|uZbNHXKjnO+FJNczgV zm4Gub6{3@Jkb+Tz-|)u;ZHp{XVN!uKWj7edNF#^HuU1G<-1}{Bqqc_e6aot z?{suE>PxOC*Q13Fut$%~hN~5&?w(Voto94n%YL76ac>!mAbE+G!gywV$akBqBm6hQ zh1qIlt*0L)(v_`GniHKq*X~|(BuaQBk=!k;;!agq4RtCRT`~*< zkfT!ow5e_!W6rNF-Du1r;RxXa?#qjP_f~w5?hb7jbNZe?!M!*Q(i4v+HgGxeh92b( zPY%%!AXUY$FK~|(W4nA`x)zK(GSVGPwe)oJ1aiBD&dta3tyK#gGY3HlD%godg1nZI#muN%cjdc z0t<8XjZKXlGfk0|4HmUUJ+Pj^+i{0c%Nd94Me}U%TH~>?)ADuQyuG2ol4p2qU9LIz zQkNNngH|vUg&}BoE|_^C>s-*j^443=?=i2E1mu7V1EBp3No|@C8}(#{TH6is>#;yh z!p7N`)jRWUmilg0mO)qk(nEq!ZpdtQAzts(mpe~ATpj$>X7F5y)eEH%jHV|4JWg~E zyNQxTM;Y--|GG+iuf?j`PYujO4oVHQ<|Gc4WQP*9i&J$~R z?Q_#liL}GdgK8jkp1JI}Ngq`wrDE3}#UVge0Z~S}T^yXCNO^1nNx0#}KlpibD~lmK z5Lh8RHz9Kyy!)QSk3ULW=Rh>dDUMD;ocjLk&+guP>U*NQ4l&$&xZt?UD93C+3uBbv zY~~U(<*^-5$qD*P#}{EaHodGRq~rvECm*|w&n;W!6*Md956*UF@?Ktta6Wj&W?X-u zbqYRh`z7qVb<}1~PoWJMatih4W<%M|7-ayR2 zM%yE=-~w?l)sopKzqo>jtvSgZzQ1mwKud?=cwOmR6FYW8d%PV)$XjDTf)k$lSBku- ziw|~c!6T&;P^wqL4Le$uUT46HTyKLhqL-7{*x(fxtZgsB-K3~D%h;DvpLWEYdHn*p zXP}^$;`d&cFr&p~>>o-=hpfYsxKg<#nl8P`Z}&!T-1D*-Zv;ZSGC7{LrRhj|VD-9jf%(!hwyuE6i32)b2FtU+!MEFJGCnZV&4*Aj z#*xn0GYIpL^KJX-f5mF>=rbkT+F6smjdO8zlC~(#=Et1FZeLs?kY|*%cpWs@T>p3DiA|lNQFR7Iq7+LobR6d z{e_#nvxYgGdM&`V{Qz8EzJ+YUkvwnuYUXumCmg)XqNTipp=ob_X*2p?u~i-gyU35M7%&y1Q&gBQ3m>WXFBCS{m4a_xVM! zPQUku%O3w(PSW$41g9+i$u%&(EkQZeMUYj+Q>q^<=L;zPwBlj~`))#HusgbO&~ePce^qm%KM};uRm((ssx3BfOaiy?SbHjhvBjyeqh(9GfjT-ne` zxoL2o07O1SVwc?6RM=qRSWT$4DjZ{B!;0y#2eD!Iy>S2ddVj(`@d!7*7B9gKu_s3R z3$DI9j1~@k*x0p*Tr=s!jPi&$3QR4`-Lu1$wt2d>FyDDXD!^+_<}P8h48UK4>&hmU zFB}A*_lS3Ua8o50cA~C|x&VcU{p7cTzaP5E*!91+2@lAc;d!lJCY-Ch;Wc#8Pmldn zCLAP%q}*<^u9;PtxC`6y;jtnXT4KzBgyHsxv)GeO5T4neafi7V-;=2MMVAKje-_~l za|XW({ff|WbEM#SzS97fpeg!s8@k9dx^dxMoz5rrwJ5o%ll#5FnAs(%A|Hae#ud!S#BefvI`t{Z4|7I`q!Tm-nR%bATHuFOSAK zn2ILasRc6js@4#5;>Do0lO2)YKwGkmB!PtS>X3-ee2u`I#*ydqOCvOJXEJp@1@B1C zf)`;pYynI4_tab*{K{(RsVdy3n38-H4yScSX^B3Qd7v8-=o~s}N<*2A49_0Oujh<` zIy9b7%)MDdxsP8WM%NB*n~WG+$}&>ZJqM+bJ^YxCF;aEhf~8`1sH@!S;QSn*{LA4& zB~+wdK|Y?ap}=(JJ2j@1@EC52mUWh__#SRII-2tS@h9{}?w^U635mr$&vhc_f$nKNS2!1TEH}!b`q!WxO>2|0|_8hqu%Z~mqCa`_k zmkhh1c)9QLh6Mr%l7lEmd$^|KVJTg(Wzb8FAZB8!`GS@Gx)#{-%pn zwZ+u**C~Lssu?iY5=T@efPBA(g{@@*Xx(-5IOKFtn%|=nfrccjQ;!YT(9_*iiHEs=0_d*Dgc#Z0Gr z;KS5PVPbT8{LMPseeJTDHt>?Diq0FT`fbg`84-jtKZ@jmLSr9~xgq>YU-9OI>q?zD z(E+y6H&|lRk^Vheu`J~KYUf?|JL<kR|GMPIMSh`idbbB(8+{GSRNwFJ z@ zc-WIYB06+KyA4?AK2$X{K}*$p-ifR^miShC5yZ}U_kt-L7~(m|mjB@L3ouFT&1fua z;!QUpM~`ID`RXAcZzmzU-vd<_fuAc{Nl@ApqqwC2A9N6UzUN=So>8BWMY<~gKUEi)By^eS`Abi9@8QjA`J>r>kN`FD3UyyHLc z82Pa+BVczw%^M>3Po4jYT`MCPljQgkn(DU4v=dkA6iCg)Ggsi6xe)#YiSOIzS4GNi zTYEXDnG?lY@-7t!leypev@|B!7%F}(*Z7;ljWq1ljweZe28C$cGbR~n7An8>Ntbyp z&WyRPg8au>j)S*1FvV9Yt1cB7A!Q5!#KX+CN}x~hl%;9r{CX8w_`A10#MP#@+%71a zJ8t{Q@_`*`&rtIDq-XsRjnDdhY-pd^k9Gg`kWRh*kob_LFaa38Ve!4C%zoxQ87e>P zgUzQ);3To%G5)veUn-mhEiu>rQ%zPjEtfIF;-C(eH1k7Swiq_evY=eH*6EqkwXFY_ zrXXny8gLyI`L4hcRgJghNw8Dotlqw~;UhMrB;f?0GGbpEtC=u{L7d;%jLDopE%r zSQ`!0Unl(vNQ_w?K|lWKos*97OvzGksSxUcOwxkp+qthBG*fdX4ZLY2q+p!l2FlnX zPMJK98NV*l@;IX~a+@#3g1*I{awHuMBXnWRH#pDDF7tH%VRsEe=f36vE}lVSZ@wOv zL`7W@jKX4kVDwLbr4;m;IK3l@V#lfoM-=4bfs~7?EL^ew=Jl_n} zrSaF9*Xx~qmZBj!Fs(a6zkZJkZ`6IMEv`gw_hJPToqmO;d-+_9;`}2a5Pkn6N4AdA zsH~@-1!BLWs5A1~>63U zqQ3Uu$|o4Q3auJ2T%7)k_m3YN?-T9s)Qh`$Nqym`dxQ2J4eW>N`-86^fCX_?01{Ty z_vWcJ7+XJaa!E~2I~5pZplnB4^WO{4cKf>Q`N1~qCIDFPtrPoEH8-g{cXYt)+eE&` zf*Pwp)By5#M~N3@-V0$OC9>Fvz?$pmnx|``mgbt~Jc5%bD3I*(xNx;ik};E}Z!IAI z4fSf?cmLY!I=Pa=oEm-DFK(6ipn||Z5c|UHtkR3hTk#LN3*6p?bahTfIGs~k3;n$o zo$ir=sX3IaM^Qa$?JxZhuM*v_=uLuf_vJi^JeywL@1U5>YaZsb$-=k}FJWr)hvx(q zhx;Ugdv`=?j{{c-T!dLP`SwiHLPyb{lh;GkYME>&AW=t1nS%i;4sA}P#GcBP&1C|IF zU%N+JO~t)ty%*?Ritr%6AMz$*Q{?v|NwH*5=xEZVbFcZ+#jx+go`Uav-FM$W<4m9s z>(Vw=8@jW=KAP{ zaII*Ox8&`Ue+m%qE||pXzP~=fG2U{1_YHu1lZgRpmK6Zg-@D_@TD_#dytmlqRXzyv zOTSz1&k8tr_S8t$19YQ3k7theesSryrVJwr?(l+?H=Y7;_thT^iY4 zj~}X>po|+@71YGs$<_m#bessl5pS#H)3(CbfI#*KtOlplH_#|?QRxKk0SV`#H_+&S z1M*ORrt38&^t-P|oimqbE9z%b<7?-<4{@FjPv{%Te*~9^;Is$1q4#g0<<`*OKtAEP z4~KhOtV_Rn?V?=HYbO>#8=X#J=ZWu<6yJY^_T9e1m-WT~lY>t+VsO>WI+`iC4Gs>k ztae8{)$dpyr}Jw^x_f@!0+FkGIHdud(nwH_(Y}~UtMHk=@%GLxaN%Ybv`BejaUFYy zdXWXG^}nEO8urh!K>ayR>eg#wTnp?D&E6)De7a!(&)a|Z5!ADsFk>GJwa93$jlKZ4P)0j5}Ea%T@Lo3t{>xVmI) z5cssn`;m4tSMK3LK4`5YB3EV&nlb-ooUMtRut(O7OwYkEs?FZm=FceVg=bpmJySOB zBF%-#uipV*hP1Ywj69m;c_ju{LLmZCXF9uc{>80$ApFlL?-<00y4%nELt80>=2y_M z8{+=_gn8UiN8dzdj^y|ydvj8Z_c~?hJ^NGgA86h5Bqml+?z}$f5`H0KZ?G)v!*k{~b>3}O@L`>EkHvoL z_Vuq_94KF_$E`RJ|Jk7+e7R<5Om`vEG@%c69n(7NdK~K#c#8A-Lk2W$`h|}dB6%1S zpCRF?ihO9Eqr8321>mWz$ceP4t>pDp888N$c7I8@*ZeTI?_$F};^DWl04t&;Lrn8d zz+dygL#|Ho0n*c9qgrU0 zm{L%j_p0UUvQ@M%b?cOvzI*6Gwb~r$KR*F#LsBin}qC zRbWp?EZ%_r2W$${xrLb?=Qk3+9u1;kI-mbOCp$rl{skWfqcLEs}8Oug%7hIe6rVtQoyZs_^PE!%#vHEe7A27Xx0*Mz5l zUDWIMyHoNPtn2qpa&u?+4cm!-w9pT32oHRKg!n7;hzeh7IR2QfSp+37zJo!~3aP@QSi5&cr zqI61ExIj)Vc5Xtt*k~;OETKzB*c~{XAfD{H7g%`YbL{qf39n(-vk6Mg=u$|mpp^04 zB726YdTu5Dha|KJ#9xi)Grzy4X#>~{U4s6Tiz%d|T8-Z>6;&@lB#J@0tEQ0he`}NZ z+W@7v{|NY=FG5~_`rsbu!nO2&Sh~u9wwh*Lyf_q! zI|T}qQrrnn@dCx&p}4yjE860k;!dErYjJlEF2#Zeg52*tv>g9M)&n%NeQwUhY9cb;%)<@%0Q;Xjl6C0{Pz ztKIbubLfW{`bHYm+P+tl{!&0)W6{ymYmweh)_ZTbrEsqIo|3iWPx`5>>0biAna9t+ z6vF>y-6f1$7~lnt61AYo?V+XY$~`H&cx>wm5UOxa%f+4I;Ed#6s!JBNx(xPHbNXBS zw{#yHoVAFgp9_lgH#?6C`}=6$;O^<)LWX;oCE%?KdsrKz^2|ZNyP+u&_%W7qQSksR zY8lZpYd65JV%avCTYB${oXJ6}w5j}Z_yAjVd}s3Uvt&{Q+@VqHWS4DQ&I8_I zBvw^Aj2rub4gq$!)vYc8d9a@z&>0cWL^o`UEMbD}6(x$M?EN%B$OmKEPZP6o6FvIZ z9ie5i?F22W60+>W+1sFi??0U zw>a!3tD})k;P5NX+#`uWg7;$uK)(nSv+m1CPDAQAUH9GMRbi zK!Ze_o>Ews_~6+mJx9U*KQ#MT>gal!I#0|Sl7V;I4r-!ft;I_pW^|G~bCh@uBeo86jp^o;n4mreW1DN=gl@b7LF!qPK{ETU< zDLO$M^_!WjM-ux27q$ts$9joz*?a{n24*cHpKFP)7i}@>I?{Ts&UI?Wp+ZN|i0@X% z%jb#Hp@8h8Bg~89$@@HO=#S6v@`%N&#OYrrWedoKWEsP5i4PU@WEru)$MWPko2#9X z{9GR=OrK@Yyz1EXhk0|Wf+sC(a#EOe{zGpZJ)!vL=teaCKYf~ukqJ6JEf){GzjmJ zpw63*H*ff5yk_JdcVT5D*Mf~DVY)-m$1L{2iP+f!6AtJj5s%yv`?yGc$=3;2Y{hSC z=8nz|8V1RB+j(DTcXyOVqTW##^Vz$;8$*-MUHZulAe=L#UlKZ0xNGIJFO1Qm1L6K(`{QaJqDs=57$%Sw1B4Lv#-XzVeWw%Q*wva`}^Oa@^BIV8O_48w{HLKl)wKMzh8J8 zou?cLe8b#!eX4rsi*m+?TXxkhF=eI7a;MfN34;$p8WSZ8-F;NsO@6h5VrIRMtpCI7 zEuFr_SdVmO@dx1nlS_WZGY8B_!6}hoUY){g4?pnj*Ly=+QHLLJwSBlbWpM6urY?(3 zL92!ZftJchY6Khy`Ymu4U2}Sr{r}h6$OD zotjs}m@L`q7xUx{z3VwN6^2sy;vQZ*A$T!|jYXp6V4vRPjDHO@{f5g?@0ccMWr=rQTT}w) z@f$Z!o7-NnDbxB6OWr26G}!q0d6Z-hq{e>igRZm+~%-#O$52iiZxz9nTx zvI;Ugwl%|F!Ol)YTT3xp9h@g!_!RH_Rsl&ZXsQ3hO@}jOruAx9KPg`=Uu^R+kC`Yr zw!h%;fdxBReD%-%M7!_jLK}!q_?yvC5qKiEL0*!PSKlOil(r7QtahK4p@L?36Wrm$ z4F!k}#^E)TKvTOhrab#IGCfG+R0m&7 z9(}_+Vki3vXODM=YAayXdI&|V6NVI)|t4r_{?mdAu0XUgpnzERm~QmAvSF+7xx^PH3FBYlpn(VH!HHWG6o^{i;-6 z)YkOEgka`get(^gkuYmbs}Jj0s<1sGtu9{U;(FlSgqF=2?OqOH@(q<~+vV3~-$)$} zt*Y&k2l;+McFSqgIt?bALV4TTWmk!%a|}_;QG)J=$1)1zoRy za$6D%>{Mj{s3|70v1B7eAEx9_lUAqkD;07X|5Aq?3RmC`4_x*c4tkc$TXmVD(i@l( zUVsax(?MyIv4Wj4ccIU<%5YweyZ4QR*ID&4Fa2E|I8>tIoq|kzyBC%4s|#(WeE}V# zEtzt6-hk2Mt!y9$mww87det6?~^w8QzjBkqf~ z_HB~(<+ovJQ$<;m_Pf{f;UYonBw+vG0fdOz#5s@<v+ucN%5Wwbs*OZ3~8#7f$Jeqd3EPe^H3X72h%_1oFBU*}k z^HwA~cDGHwa(4`BBNw{`hun#m+5xf=YUd`OVvjYqiRQ8F9i!TG&Dd7QwMPX>RDO3@ zY0HihP_kaq8wJP)2Fwl7fA^FEen-Sc9A}5`Pxn(ITyIvc!~tK<$6N)RG;go{|pl zK>=2SD7#kS=su2vfoHa{_mtn5{01iDepZHoaF$8GKRsQcy|~jiPz^3>27tq)QaH?e zd$8?XCce1ymiomV4$tDtC>=vuFOKL>esOBM@|jicUajF5xY$vE@=IV=Nnenb!1Ar) z9s7OD_#*mFV(@wP+AlAyJLrFrgoU5XZ6_a3&7i>k|5^9p_U-n?bKdh)-KNa52z-}S zt6zousaF|+3H$BgU|?Vm@U%IzVCL}_OhN*1*yuWWNXSJ3BUPYvaMx{*VC6ozN-8{+ z<}w2vtzW$l3Jx?a`KylIS?kuz)36G`9I5z__;9=OV8OUrptu&;IpP%NZvoBm#wK2* z?G=E3t^JWqqFn8WEju~=*kwqAYl3~f(icZEU;7wd|2gsR1$MbMyjtwwrwS7VEb_&k z;ftZbXI1P!y0IkXi^5Sq+{%N@16%&hzb(fz<8f6mmm3wob7i^YM;(Oy_9#ssKEVhFEju>xAa4^UM0s8}y#Ax}Z7`hTj}Gr|QeFvBy+zSb)TOLl5vkesXO~aO( zlxZdl!MCK# z5Ts;xTJq+t>`LYE%?IS^lvf?()7cdqYs>`#u|8S6$ht-`=J(JFZL5cwfQFoChbX$o z`PxY`>HA76Ed|26C7&E#nV-PQ{m~ZH9jl|}29K9HQ4Q7~4|XC)7w<1>ul;^W{{$-S z<7IOR{m21?D4Y?C^x^>+)UNzG{$u8?B$p0ocpg|w4U$#0v)3xNLgXYsmkScpej`R= z&hcT{PQnun^|N+QhvXLzJVY|{WaPBLyw_OycHf--vI@S}x+xU;7(_$E^7}mT)btcr&tWb-tU9CEnB(nExKi>WIL|2 zdnq(+px_Ih)Cz3py$}Mv=ob6)?o(U53=G-JXGAmAKNiol9jxNSd1Qezi%jjebnp0LOIb<>4x=fYUFWXsJ{1sim?CWtiPKTAn-Hij1ij!if0u zqG>g8jC;zZiIa=-%o27RZkEg@OmY7W#IO3$Y8se!Ov?yU`+;ehTjc8Hoqe;Er6!QQ zr@r6#-&z9j3gK(1Wjl<%!M%#8sTQI*(FQ3Z?9cOMr*1s2_7}lZ;5CJNh_&`LiVKD2 z3&Fp7e15?YD17lmQ7+}}^_vrUyL!xyIFE^wZ-Q%oUu>HX3RI_!Unqy(1-b$&qXIt+ zvfz2li0ZM%hz#Z8lxkVOJ*=6$n0_5&WcI01#e zaS+9KS3GJzpuL#&M?5=ahcIih`ARE^1$z(T`t|m(q2Y{un@ux3{LN}b^PK%f&c6BEwxry>z5M#)&yp8{fSh19<`&zOVKJD( z+t+jQP#^ECAPzn!p|~I7B${O7L(uIw%GtgzcmP-Ji32?nDB?rT5?#3RZ~(mkEG!?s z5Db4Q?+1I0yd(OgXY3>7HV4Nsg`1al>f1gMbY$?UO&0HY*QR%+EmL_v#0!9wDT{pu zJ$=z#xi0y#w)m@Ao6ZrKCVTcxD}N@$^)jyKxsPmT6)gTjb*!6#BeE+@!&^si!;9Qw zb-i`5SnFe)2WKE(+Y;N$YFp7xh&`tvn$zy^fe_hA3*w1aL80>P<@(fn+12*g*S*U3 zC(*b5voq*ELMumCD zzQpMUStui8U4`n!C1>v-QyC$(rYPmRif0m#+}Bsskm^r^2(TaUtjH4*f!DCZz(@TA zLR$!ra~t=xuB?2mV1ZSIMuAo3ZlU+Q(~vzIBU{5$C|j)|vN8g=_U}AsQQ}DXrftqV zeSXaDhdZ0^bW1ok+C2h%o3F33w$(nvwC#Cc*K~D!y2zL` z!q%MU%hW7>BjRC8Ay*dTOm7z!y$2^PsL!@*^2pWCCuPkqs|g)Rsu3q0Vi#yT=BOO# zCzJ+&>srG;d;^o%v(5zX*aKkLpWEBO%wd)9hdg= zMO=}paK@ERHg<|GaQADsO8nc0b^h!dR?5A^7pmVSA+-u6(zKh8a-TqX`$m$~EU$2;l={C}B2S1ub|ldk_rvU3Oos1VDeLgYlP4jx(f z8(I(3QicZ{tJs~Rr$YF;a%LThw!IgLaXPUna^V&X=r4}ZfMr&(OrW7W+>~+~Ny{P5 zfzqQZD2fwN6ccfHC*J;b)<#=mzR$SAOs4bXKmt|%MG|$5`!zL<7Q0fqU7f803I&V9 zHU`x9eviP$)l-2f?-7p;^%S$av`0G*osUjKrq!%nXRj~?sj8&!$!;nwaK)}iTckzL zvkqRFpETN;wzAnSd5n-*zB&r#Nr_*CrCc9V7PLnRgCtWI*o1-%jw+GyvLXZMsYjn;?J_MeVOR};IPgvmotcwc25{5CRFeTq!P$y2&{mC4o(B(QJzJr+$tZQ~Cdlmg1#T&~5$ zd%9?ft^bf~>PTZ=wA}OO)+w$JO>S$m}Rjf1&!uH^m5oI`2SN3 z0G{ayOFBW_x{E)@Qx$=Py+nt{&M$4MGwkmFSwNfz`AA29DH;*+H`W`+fU>m8iyVc$ z=JSg{7>f&iS100kCb5d(_f8e2dyl+I5dVOHE7F{t{q*6>{awY)-OCik%?o}>(R~Px z|A0h0^h*qgFA(7q2qKVE~KEG`mCWrXVR#XwqV{X60jo=k*c;QmCM*7F@qyG#8Eq!I(yf z{ae`%VlL?8FLr0a&cKUgIBu~YcnojTDi`S11^Fv(gzjPQ@}l_+e-Ynv9Ktp_`|`&! z@fy@*2|2Q^m)2JqVnD7XYx>BEVk8L|_Ib5{c0Z@8U+h}~{7V-T;Q4yN(ZK1P^Wb)} zRkdjnxR&ZT@O);4GTJ((|3wjgCb@r4yXp^?0#&AQbC-uT*sY zoIk4bqPk8Iq=98jbI5I$aQ#9dw0(gC{W>_c+{SdDP&REMfpKoc7Z!AZjKfx@%9%Jz z1Z;s;r75_Jc)!^v-(K4Lj&@ci%u}>*|MBY~6YFeA)3Vj+Kta5j(m|+yxOwYtq-I!V zQHtCr$HO-FE@Btq5aBn*7t+lik@4a_-U{BOS%n|)>?lp7TQpe0{0gChrc-PeQMHKj zCfNkRcRa&t1}tW!Q7-kWS_aJX7YSdnOVDTkt}ef_!ML&xd5D*Ykj;(%!CCnMSNC7-byaGks!K}cZ zXC6w?pC56-f4pWPceo?)XFzsO4Z^_}t9D0aBRW{NIofa4u^R2`ag(s_hHvh}HXQI1so;+v3u#4Z3EC+1V)mA$KsmO^x_vqYAZ+^9X ziO_3i6m)*?+k1(yMNGjbtTMiE7`X05CDSwm3NOaeh9%arO7jYEwH}gUkN@BnNhUHD z{pjdJ_g??+mGCVhIB>^Kn2x_a{ZI!4=owUOXd?|;6??0%|{)6{BFv5x#`jvP-e5&u+( zd+a{qVg&R~f#ZzcsMkUp4NFSY>7QAV)s##3COc*TnLfp#Px+LNVW4 z#S@89DozoFNXnw(cYg=csfc$92GVlcA!eGSGl@u@{dw8;8x_B-aiK8lGzj2ax^ZL8 z8dTvlWA;vADQ1 z6CC05uj9Sfx&mFmg6Y)^MX#$1`n;B!#xcZ6mci?k`rsx~K<kPrp zpzYQ0fmfNeSSlC~zkWJ+kqjyA21J!{zV>OkE-~}RnxL44=@RdRQq2fqv`4x=J{&60 zJ)Zofdp>5!^V?FRJzG_y4IJlG1$&N2J@ysgF5b*Ugcpl6&G7clyt=y-3RlA zQr8W1u}i`5)P3=(wcl^~;+wSzvp$>A*~z!@ zGeCJ8^Fl@c{cxlH`yKp5zpV-{eaDRh-6AH+s+Lkv!S(lcCm7d;$LC+?T~ zCpq}h-#Y>x9iOwVp6>|Em7u98CQrqa+Y59qqfN#80q>08)ZOo|r*qTZ1A?1VZ`d;B zG^6RlwErmt4!akCcQU3Kn#0}1s~C5OouP)REgxhRw07SQF{L8^Kv-C^SQ>EI)!$20 zsRcQIWEHmI)m zh$iq=!%KqWY^^5%j6uWYOK*(vKN&qGh{U_NCU_E=TS!u2iWNf%q*3UV#^5c{ z1xT!U*G12U*-o2<50&gQsH>`R>Q-~4{%0reFsh#hc?-q)QQo=)v98d(%$obgendg7 zi^#zY-lJx)gHoZMy)@BNfyLtX@pVG*Q^tjJu z%WAB@ESs*7aen56~@O)lOjr9Z%^?5t#_%ePkQFG4O`N|vKgNCNsEQJTR z*xGf=Dx1t2!v);n){5i~9qq}~pU4%w1sT)9#A1;0G(DY6J8ip=5n8usHP}?>zdmB*B%{<8)`0!8b zMyi{;&ChCu!qzwfp3EX50odbW9n_u&4DXW88dVqeCpe>;sk>I$Cmi1d3@_0=$WTDc zHgsOg<^uRSbw5z~u3mzJ&oG+Lo6*8-?BEH0ewWpW7W}#j`1}sKrZ$EBq~QZLZ(+sTywCl&V%F z7hx#Ld{KYH3u-e;8ZA2lzjcFn9-nNyqFr)@RmKvQr$fam69g&h1rRw)Dz_ZBw*}SO z@g(eN(u_D4^{hJ^LzY$14>byRyN-YV`A5?pSI1gVB7k7_7Mr1sdOFRsaa&W8(2bC+ zF%Qz-6u4R@MruZ?0CS~2Z5}4esvRMkg4q*bToS7v1x(TrhtbA zhiCc;`fEbK=Iq}44^Sx7C^5Fq3sPe$v;4Th;$aeDI6Pr-*UG_n0^4IBKHK#=M}Ej+ zLOBb~FA%m#N*cjGXpQIKX#CQgcf+NgKp)mlgKd1te_y*F+}uU+-HQH1$A)Gki3$l7 zq5FQvxFG(gvfNjoPqZ*MI4)UPVY{HV%bNxbszb*5NLMIvHdVce{<}m}>5`9wHf7Bp z=<&OTMH}PZ&Drlc;={cgi$#pZhpl!XbhVq*Ro;A=Lv%nY1uzZ0G+dpPrbi-MN{a;w`?w#RGQqwQ(PNCVuW7Od0 z0MwV@YoKWH4G;ag$lu#J{^AC1`tqFl!-y&_3Ydz}@_4Db*SM&>r^rK= z1^zS$+<%JUhqOW*Cjd>I^v~}^O{M(qao4G`O8o;K>Vr!C*E>Eem#)2?QueKSEij}d zEyUKuvWz~ug047W&%B;onE6w(doyYhv#lkcv>Drj(KB>is|i3SZ%7odg3PEw zZH4aGhGK+q0aRgGr5n(GOJrvkgYi}6PmQh$Rn?bM!nxoSVUzuB;;?L7gEt;;68-Hb zh(9f9{R^pfW#c%uOQPSg8^!l{`bmF`>?+i~sysey}W;3ik@QV@=<1C`Wy!%m8M|Wtepi%qnA&>PrMm4fF$yMOH zIdLD#LxmmK1+V=dOeof$TGau~+4}Swql@eO{eny#h_@%T%dxrM;=pJZ*lw{6X%USg zoH(xbB^RWzWv^d%GBrpL z^`!mgaVq@Di~4@s|L*apT``yzx$#ldhKV(}gM`uEgrP9Dg8K`839Ws8;(8k0iP>18 zV>;steAU{XPw5An$#Rq{TMUu6zeT?Y9kiev`Ip9V{~2^gI{{6)OD*u8)I12?XvsLX z^)D1<)gF<^qchWX)qy0=?_%m}{-B=+jI-ZTFB+j&Obz1HbaIAb?~?R~bM;`&1M{h; zUvphpJhI+ssX+>DBOxcDW$z{LX&j>^b|LMtI4SZ0BgKT^3@&6Oc% zEB)G}PAEy(#yFc?0e!3V4KooE-rHYMEAO0pR!m7J{7wZyYW`@k9g?Bjg zR{Cj2-gveXmm-rj?TVh!U;Tadm27~+M1To3Zm*#{6O0*f7s~a}>wTp85y-Yad}LOt z=l%F0fOR1v%yIV~zgQMiGZ$c6m%P$z>9BiK%G_g!L0%1v1m{8aH)gZot#jBrPhJVcJ2E03f@{sy8 zrgXj*+!Neg>-xCi3jd8hyFLYAX1}ANqep{pjaG*yNF%E4&$R8la6aVw;ConSu{C==k>3Ccuv>X6<9H;9q{=K1HEm!=#zRC77voq zQH>W-H-_E2wFllmoKI(j#MRmN0a}bz*kuWON#=ouEYFQ-firuQw>C*KPx*qFx0v_H z%Rh!yAA|4Se?fCoVggeldejP?uh~MfF~DooWD`=N7i-fDyWG=!5LyGC`Skj~M$@HD zx)(+}M=(bSPrI#j$M1#e(9t7Z%Qe5Y~epm=JC?R+*K#nDg z`i=L)l&7z1;vS5#i}haEUy}GvFod`j{ufxaz1Ukl|q&;fRuVj3$N!C z0^WhkD<+%O72(+_Me~BD>UX2yrEBgTjz;e~$F%G>^Uu;DbEczkwt!Dlaxxch6;)TYWDAS#ChLkz%RP85%jvne*zyCnH77cUYVj3-VEt{Pl zcEv+Je65cZcXiX*@kf8>AmsDGb-WL^6-d3$e{go}hiVP^5RHziBhJ22roqm1(W)R3 zPc1n5s$P^{%ELxz7x36g9Ek!>1g zE$WQw*C1=$Jc>CG+Foq1jYbaPN>8S;)li9?MhH^Sg0h;LdSA^Ri@$+%@g}`^1^) zFD&L-O8+I$k&Vlrzo~qWGdx(xx{44|#H-8bOua_!P}Hm$l1Ru_i+{25&$fzk!=RpL z!E{j0$vT~t_IBu7hONjyZxKz`Y;VLn7FxiSS7S(ujxS=5YDW38`7A+I^PWnWKSSN< ztWCm1-S_0`Gx@mTN6o#24Wt$1&L(*!D8`{98@!&m#C}QD-up)1tbe*V0{K2==@a6o zVJT&{7!Mp}Isd-hx$)|0NRA1g6IyAte(iP?>(nUA@J6@?kri8pM$>b*a2X6e;i~D&vmk;dvf)jt4jEuHzpI?jvqnmE|cyXOon> zlB|$hAc99eWtDkZx@xtnpWv|!EdF0{OGd6yh5QAKUd~;F#}L8{9a`5JvqS7WImNw8 zGzNc$zI|F1kshP?9WO#n|KT3HiRJMueV|qc>8f{bW9YhGaSK2e1u?k-rwlICWv2*W z?3%UMR7oe?$^ynTsIU95<~g$=D?9iZ<$PBH!l>6`oz2^Q?#Lb%u>=&jos`s=BF@>( z>bcYpDM1er#zvt`b)#O3F#esNSrfuhwbPkMvEv%OlL^*+vW@Ej3VlvFJr{}ru*6s_Vy^pp z|D`T!?oy?B2;VniXC=MarIrjuX4XpV3$5GYv_$cY(1~2kmoPH7#CP-_sbFQ4KCd&kSMnu^S8Bk#bJrV zNH@i~Bj#6$Hj~~(Z%lyLzWdA`FuFqIdqrm$Mq%2c{RWaT!Ir4zY2%rUo*#;Dhep|A zyx6#kJko|LO?SXo8{219IT=4s*zM$zp2hFSS68c`7%70#*uwdHw=6&M=jQ^&;L*}9 zuDjg;iDsKdwp0WW&fl`(?Iru^W)}BGb_po!Lr*AY0~-oHpL1``B>H?Q>ptdR^Hz@Z z5M6iO)5&eO9R&cu#bN%44tQl@8b?vriPD&v=uh&~J;&{z);ZbixS+%CJa%8(nCn;oU__gSfhyIL{yOE+cyL}j(=B1l z4SE}sy!w)nAzr)ta_pVu>dNzD6aK=oxL)@I-yC(3tqL1nK(7!gK~iV~_iloH)%vU^^i|j$Bi#M!# z_C~Da_Gn4&4WYvkUErV(D_X;ER`!3aq*Mw!uKXUYX~!jOuo|~NNk{VC>&e+So)BK- zqULQvz^x|qy5_xU!|?6Te>z{y$@{kycQujBz2dOTyvQ})pdyEoQ|(_G^D6umv-puf z%oY8x9n_o`R16WZrlGFCq=Ig;S_GdYT>Lum-F=(njiilYS4|nNg8RPp%b8Y!E1td6 zq~T=ys*mroIlxil*XGh#!UFZ->8Ab~vC72l$+wu!E#dl%+6t!3Yi{kL-lyGv zUWC0VDT%9Go00GYo@&nW^GV6Ya2Up9P*=^NhN;_cNjXJE)jD?}AhG;#7223o-iYLo zXBu~oB+YsgL3FSkME3OyVZPMVySzyCf;s+9P?_$e@ZYxG5&xs-1=mVP|JhQ5)|+*A zAFXVATzvQ3PV(altv0Hd?1OkmSprOaP>?eBIdXsHu`&TnQiZmEEquLbaweY$tm2hL z64AlfW?3VDvzV`+U4F z;+jAn3LJbSQfV!qAo?7lbS-B#v+}NwP)tI}{WZ!uSG#lul8IRB8&_@jE7-5b1Y7Wy zz;UM4AjdQ6Pu-&T7cDlgyys@)zj9sECM)6>WR>zU$Lg1($s>5i;_rmlP&0qRq3I+? z`^nXBvQyy9J;d4n6KmVeWs*PQ!TcfXnC~M>2WkM#VL#z7n^l!RvFST?=lspaqqGaL zR=Apg5y8<{|4_j@=e4SfH94KF&WgDLs>+xI!d=`;9Lrgq-k;-NvI9n+nx13oeoocs3w1856 zr>x@1Dw6SWs7lflN|OX3O@ieZ9BCQP@AqsEPT(=)cU?|nfg~aW~nVE9hhYT*6^S_!gqOlgaEKI^FxD@x=2Fj z?o&1xZjk|geUIFZbH}Cu8ED%bp}@UQs}Ybyu7{n`)4=}Y>x5GVL+ZoAz9R+$dP6`W z!;=rjurJMn@dNZ4^$B<-z}En_=OsGxlohs50Rpwm1SL9nsAz3#v??S%8d?f}PJw4m z;1Ip@tLe*^^bW^4_p3o}_GWgum+EGG`Jf!(D}rB4 zd(`@3YLW!lUy{4oo~TlDpGH`P~n-`P<;TR4m!gR8Ba9 z97zv;iDrYemVGOukA6=XU%$uT&i6&~OqnRP)iAD0+j3&xc>B)pcu#!ZrUf9HMc|Rb z3eZJUk;)KxVy6l|&a+PP0?>ZdD=vh<-o} zuvO1(y2_pCWmw0=cY_%dFySI8+G3E&>g_%d7~Xw5*8eL5Yg>0{Hm`DiGVGIVYHb%vA6hvjzb zo_NXE(TMZn7BcUL41N7jtrAxK@4U2!SZT)N4A-S8e!LMYIn zd$xBppnsIQf3y>t5`x)d-Q#i<;T|Nsm2`>TPahE1!ELgIJZRRwuZ(~63=R0Q;i=4a z75{P1ch08gfMbJ&+vL^55VI_SV0=Uy!Vwmrw#^BiGu9HfCMQxdM^CPn<|8&J+TB9m zJ!gYYwAcG2?w1Gkx!XTHroIKuaV}7^_0zLMXTAq&Gktfh)dyD1o7vh)(hGr$XN+Fw zKUBU0xZ(ch#k651;cVtW6G{PNZNv|+EPqqVdXUN_nD^3L# zmxS1AllWp>MTgacS!fxpA~D#9RCwR8e%6SNnB5nBIl}80v5+HQz%yJ zP%(sKx;p!6dlA)+!C&N{_niOPK^n`~+q6X3EWl%a5d+ZB4W#Tcgu1>Kr4D@-Fi+aV zN=JT2@^qio^2&#g?8k(3g~%)yZm-e4N&S+J`TKF?ns9W81tF;o2}UPsPbY#or>Q7X z8YVxMs(GOazbOX-M|$w$hgUhN`w{eLfs9eY6Bmyodv~3eLfk`afUSLlasFpUa$QW( zg%IF=Vtm`c#N|*~54>5CgnH+2jW1-K`!O$yCCWyW9p7=@;q09Ir3){Y{n;Pc`8yd3 zZ^y?pZv4{qE0c%en+|BkqQY7ichp?)e&fRKggab1-R}>MwnE~2K4qYW&rIbz z5Eng2>`57g)~K@1DoYt6fPE7hJ)D+ttFN}M@t5~5T;ZFCdJT%9yWA3P5=TsL8?)oU zQ7PMbi^31iX^s=emV%J!S~B>)nm`)Zx1Vq5YuJw{U9zAQCkr?sp;oWE>;9PIw;l{ z+-N-t!UMPBf$VA{pNNbv6$8U5E}codDFyNcFFbj6{$Y@)lT9MV@4R-=I+b-8LK?*O zrfL2-fJh%SwS&7PgRy&lkSX?re2Nr5`O%`<>(z-#0XsPAmSsMi0hSB4E#)LZ}#S070gGEg(YTFx~1rNv$U z4kZ2*S&-r^w-GRVVJvVVja=^+eZ=FdHd1l@@#c9bB^caVutr&02$R{#z6sgZ!~Ez) zeJS?w19BVI{}J^aP)$8SzbXiSsVWGe1XM%>q)DVV=^g1vFVcILmZ(UP5|nP}y-M#@ zq=X(q7leSc(4__vLSFp7_s%;f=kCsLc4v3*-MiU4yR)-)XVb>#EYGuDL%o_)?1!i3VoI~{rA>|9pgxv&|ze7%dM^Y1G=)wgxf2ZWs}je4~)SCg8*&cjXBknv?ouCqGNri3(&hAX%C$Vi#;j6uHe^GkMZlrG@H}fmcBcP4A{|&DZ61E|%Z5=; zoSaWR#U&sj>ulG^lUu)^zWpAV- zzz%!PU1rf>iFFeBHOtr%y)BzZ-sBFC*o5`}fYV9vOL}YLhzP=>{u<9%iQ`g&-db0d zj@`gTyBNxlG;n*(7N6?X9y?@4#_v;ml&aurp_ya9lE7b#(sM|N9fMnyq<5pwU>#lQ zsO(#o`!S1>53VA355(4!wiFIE+0t4b-HBGAIvth&E$h>-l}R1K-1?`%_mf5DSti0m z{M#@VLB^+Je_VBQU+>pNOQkQjW=_KZZ^U+*geZ;8N&gI<|I-+P>0B_?t)R5QS)HzI z`*j>nSSbcb)v2#nl!7!#&@a>TN;Y91FAz6tTfE&ZO&J$T*L6cmwK7m}gm~a~vB_Xq z1kRfD$}|e+K!ve723pb6f+78)k(QrN-eCBDryc$`fFBX>lDZnvOkpLP_vcQ*%X(|- zaj$=FAEfLWWQlmJ;|0ANIy`{mt1oUz@7Qo(XNqf%>&26YWxiRqWj$wZ1btwCvES^;X~4=ZJ_#vi3KUT!b9*R&_qEZPwW1n@-(LVd25Hs@=<%vHx> zRJY>zV0V($y19?Mj1qL1Yw*>jm|9XoBFVAM6`oG~dC6DJAV%@WT*P%jPjB~^*tC_y z+v_b-#J{;XF1QziI1eoclMmH^a#EPjlV9<|8Zp14+|ojl#(V^hfi(;l_vh|!JiDK8 z?JTya`Log6hxUc~^{2jDBp+@%VR~C+e5@uZ+k)jCb%F%%hM&KlWbr-w8l~VM_L($) zf-QPCe1e^%_0bphk0+CNTV)r*ygLP$?nu*3h(7R1@&?EB{&MbMRT&r#uniXw31X}H zujx4_-A468%uBbc)X_B2#Qx)_b*v_oZi%9Ixv=Mhs7IC=gWyY*A9o7#J6XVo9Q>Cz ze%*0P$&q5=JEkZc`undmHlnfhGc7lJ#`JMs(i@JDug`2V6gwya-=uM`l1PH z_s8uO*4Z_x*@sc1Kk&^rOpNF&^lR)Z;0zl~O*OvT+?B6r)Rf!;*4VVeyGV|M68X21 z6proZgMb$m3A=fL`;?*P35}M@o2%gTs1UnsDT-a$&y|GqTS*WFJV~kut*~ru~x+4vkHK z2%;(5R-sjwfr*9akbtF)|I&|rA&QD!G7*>Rnl_J>^QZqq1Z(``Agg(vvr|?Hh_x_a zU3n|3SX%HF5i|ZIER9CQ>|Uogh(r>zj^X@?`{X#{fzh15pILQ{ghyh|@UNqhdp&jt zp315WKSJHloi=D~AidEXHDc;D@!DNfM3hz~tQRm&U2Ps&*XD7NVb5K$8!6iN?RgV3 zHEmEtT^s+_|IV5_USf|jS!GI}Z~ahSOR=pIn5S1~6m25bCj%6aO%$yrd5^1ldHQHX zIby~;2`t|CYc){M>!&BNB~NGi-%K*S0+M@jS61!*4JjnHu_b}g-hb)uFNxuuwpCjD zf7hHJ38zM&P${t+p@2Q7JCa(-Gyc7_;XuBJQNoVKe-&tjam3>?0m6hoW)%GY5e*V1 z*k^AZll@QDhs4>l2}YLKIDe1~$1KWMmUQ_8O1yF9kYt=@08`#u9rCXtVZLTI{ub~a zdEz|-F0F8l|59558=F|nA^BAPF&LRBLS$BUDFQCSI2O`?|FUq78k$%HdRzSeIW*LN zDJJ`>uF~X})lS>XFU{8xog%NtAI8@jcW{+_Nu9Sc4`AAZT2IMowoROU}0WI8t9Ags)ooBx#dmuUIFRxyG363 z57!S{3s5>9JAp|oSb86=ZeWv;8%a|lFPk|T#i`D$|H+v^`L5-As1%;YTHs2YGz`81 zq4`=<0(c)oFgtMc|E+vH<-gRP9R#?RNGRQ1p3&jNoYJj~JUdpEr3X_#k;vrLj1CIQ z<@qad{_#fUE9ODEyGcyZW4Ce(rDQGd`%|VKT8SV$d)ZM^x^or=>K&pv8<(4!6IO{= zJZp{g>{{X_m|`&S7HNW~+#8EI&w#u3{ubSw48+F>u0RocPxNudPnl+KWVd3|ETX!hGS2ftv!7Jm)MMU5%_itVt+f->Tg-jkNqRH zoZC1pq8jGif(2=>Y|iPg-&Q%Nt-m2TrP6>#tsY){_%Q zx7IXpN4hNO)ACZ%|7t_lDuP>{pB>rH*^f$ot;4im%%{r+(sxIQ44dyt&vD!M zKI~U#6 zA5Az+>ei>d4)L_Rgrl0j6+zngM;G>9;;-8NKEmItvmzQvp@pL!#9sm6uLj7LID}N5+e(oNvFW{K5AhthOB~Km!lc$!67#T+-nPiZ z#7(LsdcOyzS0p@*y-O&Pz~FV0hdOhTi`u>Hg{FqnELZr`Xlew&&!W0@Y$8y0c3d2D;-(K!(%EH#&q*|*h8 zwERdAmTZplK4t51r+v+h>&X8V@L%hGdH#`X%sHRZ2~sH2P(ybdqxsR@zRW>^A?3bR z9!z!c<@ZmQ39rj)C}y4y%8i#RzYL+d6Hr14y;3{HvEMzGJ)~O;Kfe;f= z*lJG3dF=^- zC7;6yyFy@s^6)j{^$89WT0PB*qY(!N>|Zh*ovN7k9C_Z^^d>72{U{~&lL9B`;mce8 zt?uUTY_^M$`%hu&S=Sy~0~Zv@T=S#rFhLJ4djtTM#otqe310ZiMTsY0g})sn_yBg7 zZ+j2-)svkXDoO#rlP;S60pDb7$Yt(+-b0=cv;e=2Atjgdxc5$4EU8iG`o;YAYL(5$ zFxgxfX%iH9m%MULeYBfu*C3C5CQhD}YYlv5o6sUFjoBqM!j|;S5bF@XYMU)w`yL_U zZ{V8a^o*$&6VOLd9Ph11-MZnQ3E5rQGt=pgAl>PHN_|FjwDLo2J+h9BRl(y zWivX;37G~_V>4&2AL5-nxg0vx%YRf;V0#PWWMa{0zZ7qI?A8q#S}<&iQ<>3xVO`?) zk#7bDc#t&tu+B&ajU)c{9S4aA^NPpSQbpyeSd;%XA;)zr=P{z^HC|XFyqARfo{`Js zd_Xv^_^NH4IH|3BrH&Bj{L`J1E*A5*Y9$!3YJ~J|k^6us^ zdjlK@qsz3t;r=PJVwli`dp2|H>Jl=j?Wd zyz@1trg@VbBzwmEuclQ0qh0gQ*!porM=Rc5|AcpIPW=s0GG1seK>0O>Y99DIwvDdw zUy<;i*DK@GOKj(oviS$DD<4IsmsrnBn)44ttkB{hKE6$hrQu z7Y7gxFXO($Ss*9m#h>kII8l{o!#e>_G?!&zL;kUYT$s2So3bL^uSql zHn(V{g$%NVx=VW-BA_BQdDLzfuLJ+DLhXi++jGIHX9$@$QE&1>+GyxjzinOmr~kL- z9_IINZgBr|=W~h>6RPtXo9Ih`_2VzOv5zVJdhf;Fi5{ZrbGZ3hFZ+<=|7p=k0}OdC zG4gGTyQXXB{P}T3+Gz^ygrh@SDA;0qxej~}{!*=QFZf=_fY7zhwWTW6pWf^4FZgc7 zK()|>v~ErIipoC7v493R9C$CWJ7}gs?c5$L}2|eRD^%ql7qM6jhFVJ7VxO& zV}fW?ovF&?&{HELoL44IZJlX!fl6u0jB+A?-0xnTuVi<&M=lh*A_vqOeovfe_*0QN zI+w29I-P$4Q~c4)#tn6zfb8b|iS7^OVB-nBhKKGZCi=CPrOcFyEe=~>g%}yF`G7nf z>|a(D^6*tw4s5hcOb)x4Lw^fCB0S5iF9-_hxd*J=tM^vhmo)w5xW?L(^^bz~jT@c+ zYALL;`0geUIKAg#pA+wEfPQpJdU}5?L;1g1Ok*8lfHQv2@gKt+?fEbG9oz5^bZ4{v zM=6H6{0sI-R8or6;{Ipt=)%7bfqW4I7v`2S?Q33=WAlu%yPE*flhYKcKifvur~ks5 z?{c>2eljU}8up28!MJkjpvyLkIN7jewK6oP<&E{fxrMf29Jt+kz`PO}NDuE?mSR&Y zlU6b>4}E-b>yN=@SE508Y|6|8E5|(*x>K>c#*T)tzIk1J!ILDRld0yUzf;ZiHHhZe zzx5E~RaAjT|L7GZm4L%0>R|TcNW%kgswdZ}0rvI9`Qoq^GRzww%C?sooO{`Jt-M zq$G?L!zK?6PI$t!yf*acuYe~ZGhKzT3lc>Lk^^0&7+n0s|BsyCa0(#*quZ)PcY zC>%5e4!ItazvWlJD2*OvU|#u*<8J(YOMRRP@7kJshzLsfG5=`2Bar@7F_HI&mfWN= z9m#A(W&mqhewOm+!sU;ot_&+L1S@eV>QAN`&!1&(^7I>r_vggO@#5>!gPriXi_0$2 z4{^8K!Ua`GekYuH$uqTOA;EB~k+p}Z_2XH0 z*||M?**F3bzF0B7z}UlHK0cvQzBFUxzsXP7~@jYg2xLt0)gM@SPFAfVo(? z8fKkUSDfc$l#YvANBk#aMtkhhli*RhC;Bl9cmCf2dNrh7NcNquSXISN+^wAbe2I+u zT{a^L$^idUb8^fLxZe+{73!MqVa^$`qvVkw93w5E5(W^ErWt?L0sVt@P7?;v?VF#n z>uH?^_H8`;^X9!6{?of9FL774*II|a1I68OhV6UbCF;-1&Sj~~>#1AZgZlWi8q zcl?;6^xf_?qB}Q{UMW51Tgk~GV|?i8{9hL&9tIMOb^A07j$Fu z9_PRc#|e|O;A=f9<$MUM;IB|qn8&pe%wC3b?4_dy<)}(g#Afg0;}fuRZBSbB+vP{% zqZ#UPJrt(`J#CS<5R0-#kDF`6D#`2HdPg?JAXmD`q&1UkTcC%|wXM)bBT6ReFZN~m z<*TII1ghm59+FCpjfC+yqzPhi2E zG@<%%q56@ZfB;+8W|rVjvSU)$9Rh%pWAJ>>h7BV-tz@gr{MeZ=PWoEPkTQ(NTN?ks zNGA|qk21R;yPoGv2~7=I3QRkNRr6fp+6tMw%JlqEZ>_mj6hkDdJQWB=gYFSs-}@0V z6P;(b+Y;oj0bZ;Ub$Prj67_kKEWU5;s@Bp^0Gl!tEYKSX{<2ND>X-5XSy`Rx=Ug|> z2YL^_)j-Iu(rGkr?>Xu8oDHFK{%id_A$r6OdDx1Xy0?XXUS=J`g4^?PbU3B^&!M?fI^+<#~@s?mtB*IF2vi z>DT%)s%l-8d7hr-^Ku5jY+cfJ)w!=Ug}Qw2?;FOHg{Jbh{$%Jc9P%rAyRRF!vQAO* zPEuUZN~n{p^#@B#t?|tT4E@wGdDZ$@0(}TcIP9lbeg5#`JRvDi)?km%rIfpS$#}0| z`E^p~0rz>M|MYt0VvID=FZE>C>spNuPF6}8*1whdEnk{waZ6RqV?=e6NOWv7KkhP3 zXv`$fOMeso0(ELFKTid-obU@CfuV=`6#e60swE3r>JVyOX4l09G9SJmw7Mk zC}<_waAF-uerol>YUv??TV66P7n`kxChb~= zNp=v!%2&cI;N7}!Jh5DB>y_+Ek^xz^cwe&h?$?#BCB28@F^yB8!Cwzt&DveegpF#) zvkDhn5~8G92&Dbku_rG%1+{BEZhDd(k~Zg*npmt*BoQOrVqV#{Dc^p}_qRQxaqr99 ze>YlBdc?H0dXJ5b2Wv;>8-)AqB(vOQb7RiY_;D+Epy_2T+rbFVy|LXZXc0CW+OaQB zSw(blKdx`SX1Lfu`(XFgMQt^4TYQDxS;2!{#=nxTZMI`?k1kokTY-%U!m0JLKX~9W%`=tvlAK|5@8v5-Mz_GVV@Z(c191vHL;UCL6cPer)ioE~>^6i<#g4 zFB&md0P~oIv_`|EMbrm~P0j9$KQTC-BhW!LW@f#Q_ew@{IUXkyS>AfmFb(dkg;iV& z92`gvm-*OCUljibc)dW%&2&qZ68Mxy>E~$sOfH;B=s&%WkLBeQANu_Vluw(`Aax~G zq*5|<8vj(qBtaVa;nB3s3qPGxlfNMt@U-uN1?D14wyXWXbZ)~^R=B>tKF1>JS9R4`MdpTn5iW>n<`6ja0tWDWR}wp zX8Vn6*X$j9t$b=pA>WKyxn3&#I#J5AVsNeAwH&inJ{brJEIc?!R`Y2$_zIr_1!Wqf zj;C%R>5ktW7X_O!Z(OIqf59kxaD0g)+-XG?2_4ex3YV>I>UYFZw}O5@NI4n%x=RrB z)qy*g6>;Iy#hVVrwo$^3h?y!+i22s_F=QBPhlQLW3JL8HD}RBcj&5!Up3vN)scZk9 z+nC8^SYN7mWSD-+(7q`%bWv4i;2ry9KF4Jn%YYj7uZoR)u1oCariKl~PPk_`{JyHryNcRoQS@z0$Ziu)((8(%JPcV8D@fd#}-i$2%QDKb7goL1f3 z-3Q62L;kH@{;flP)S?1^MH;u^Hm@vBx|OY0lY7`iU%2%UHtg?OKAJXlU;I1hWf~v1 z4@9~slylBMsVu(EFknwmx@1qJvvg0$ey}VlGxONrlk@G4K=+}M2u%5z6-;V)tN61| zhNf;RtXQpNBuqx*4lHz-VM^Y<8qXl>=ab7yAL5VyuJSF92L;itN#WR5ht zq?|A(Zn)Ji|yarE4oa4Cp%{&M9{S1RN*zB~Y#Ea@fbyO~wp*~DNt@ae{;xCi^ z4Tk4nzUCg~4R`U@^;4+SHQ8V_HOM`6F|5K|Ta~T7eZ4_N`;Cu8E|n0_i0s>ApRR&q zVdw~kjd0R(v6gueD4VoDcP;gF?3x`bjDj3jz9`rk1?>lNv^g^h3!5U;c)tg|tpW)M zuZ>Dwo|!ld^xr-{OBszDp`21@9GZKn*;cUoJ6);s$vvr1MR@5Zfp^@tsRY&BT}4~r$u#_M~Gkg&ko}S z9PQn(PsTF1w|qmhi}B;!YuC(W!o2uniOuRpUD2>9?dOAunBnm^OsInt%=lLQBp$aB zT4OBr9}@led$g8&sV%614qfgo$ng?~1UCmHIWMP=(k4d5#>s*~U~C z2RRO63_Bmq9X3|Ry}7L8<>1AaWE`Kx9-mN7cF;wbTRF$iwk@1bc2&7|pMLjl+R8S= zo@>c^sSppmS~{r5!>_XNd1d=KBPE2gtKeXyFE(^rW4t~`rsIc?(Z=?OmQ~1S{F50> z()41zVd}a6A^b6KXKBN44WCZ_;r(lMqu^>vA6!76JNxMBgEm4HsQaeKkVDDuq$*zWSW0`i_S9~QzzvtS4q6&=Z;mP4xJx)M)vQl`pe(~z(D z?KTfbRPnOU6+$d09tD*js~;;~ULOsQ4B2he4LsZ5I1N2^YP~}GNGlUI4%Zf*(CRH~ zvpp;!o&ou#Yb^3aM_*(lNPegwSyLSGN*tkk z*;$&&KeVlUEVp5FY`pWTgD@AX{Hw9j9^_pjRyIO+RsJkjteYThq(z?fbiP!MSF;Brgu{ub)b@}Etp-zWl z9n1In8jE4LUB_+JWRZqjQ$PN1BmXy>uMY|w6 ze0FJCMYKx=OKt=^44+A-U(M~4+heH0u)F82$2iK37iq)xkcYB%MOT$6gvqXBStl#* zcB8@bjk>Thw;X{CV%E zc#F^RiJ7!SL*RZcxGnk(tr?iIq$c>#C*4iSgy#%wH*?O$Ki;t~$=PYE+% zGKxX!#!6l*NUp4#L2_r7CA~oAHh+gz*OSry%>1ygY5fs?C4wE<`~#l;F?;?@f94!R z{PdHDqyYGU`Ozta0fBlVZ*k+#*JQ({w{ftj1 zSL|3t_uX;Pl4#*ne;<5FOp#gm&kpznOTY1mIaht!Mpv+z3K)Qj)?&5y5V-Bw-F`9ij$ z1IOTsUW=@?<-=;f@LeWm8*yH;BF6N>IZ1fmh_OUoz2)=IyomLoeL)>6$abBoTMn1< zS;y06c<3r~mOztim)xEyecGb^hnDuEroX3_&y-o)xtbA=Yj?*nKb!2nI_aLPv}Q3- znkD5#=y`m0A{;BUcBV#qWITBJ+p!FgX=Fg1Z1yyV6Y_tr`|{w@#C*|8P3sh=$XadwCf?}EzV zzxE`yyqu7Q=-B?|MgQ*RN%sEr}E6N72 z)eJdd1{%~XbI}bCbjm-BzWjr1Z8SV=w~FrX-6^e7ckTaVyiU{XMfv^M68R=ti)Hx`qEz{UH5kpZ>Cr1UJ3Qj$el%m|6w;~DLuf<#>Q8_GytZE zM#u3{&m?!U^sU?{`YQRr($5yc@lrP^X%IN08h^0#B$D5=Fp><+#~g-KJv09GyrJ87 zp`JD?ya~Nf?lJT7P{sbQ$dbv-e%mS@0AQUwGg{2sm3SY3(YAyUAd zCZo;w929LkSl6_GKhk7^6=fJmS7wNPLgt0|E6iZFv9tw_^I(Zla`XkmSTF6Q?%G`- z%J$ubjf6|620ReWd;|o( zEu{p%cbXuhrLr&V$EviL{tW0pKIu(mXE%=2<%)vZq0cf)3Ox9MaO8{gTfj5^NpIGA z_$E^K@IH`hLYiM$1wZ1K*;jaEj4p+wK$8H>ka(IAe+lh8-=EYH%u{Z+t5kil4?P_pCVH9k_{MtIOWaoU7rojoDr%6e-o#D zDGAiN@0Y27m}W;iVL5=}PUqL*PzPD$*KnIdgdYeO0X;#(i077$u}^-Djoj|8WlMQr znB)0S8I#|ses5_)u3=9Bl9JyR`3n6jD#9>kTY}u?T&BU0uZo5B(YvJ;HN*r_)rwteVH_q)+KqrUx=tYG(sa)q>d6pI4+gzbxoRps7Sr|IfbtIAui zMnzKc?EWJ@De+4oiO5`^|CWXlri4g=QG%J~sn9%t*eA7_5u^}3UDSkOrxZ{D2?i+4 z@J6X$$nW6Bbd1&3w^E(ZB_Vgp@DD)C%s0F)bLldEhm zp`446)SNDrhyND`jyi`KZUa7~{)crnDzJMJ{Mf`~N)fI)3eEj)^a99%%#80co!JIN z9Js~JyqFTA=>3&`{FYim*=F+Ismz-ss4iOKBa+J%Da5RxGNFf4lTa>LeHQF8S8NB8 zNU#mqm+*`0S0p%Sq{_sE^Pifb{184GQ2I(uV@izzd|C@TH*S(?JT|tk=o=-ZSN=DR<(0`tn^Q z^fOu}zLtz{J3V@J%E^5`2Kw1aDttNeI}xZ72Dr~hLe&5g;i<}qNufK`x~CwQ3YMHt zOBKL@4-y6S|y4&d=&wT+d z$E-koB!q@qE2qScX8@5`zfI|391vR)^16=Ub zk5*zcS2i-zaXHtHX21>|x~WA3_Fs_YY^%X>==M1Ek!JKecDpnrvW^jWSa3!`X4<6% zH$S!PQ5;$J8|_CwXlUM1fSWg%D?xY}fikD&{qHJ>wqb%k58S`wkgEzOFHal6QP3cC zS7hxhemgyC)z!)Ugdcb^@ebJOPBtM#YcVIZuqiFEX@{0D%?7H%LqWgg5cT2c^n`I1 zKu~}nkW%m+$(Z|+-*Y)m_9geIiP{^$OMr)DGBg4(s8Zk#08$ElP2gYjl3>WkKaF(b zK%0EJ&Tw)PO@t}|x<8Kx6cB-?TU1RfT5#Lb2f2w7kmprn)y`kDr;3-u za5;Upe*WPamb4whM9m>|btm|7`Y{Q^Y^FSB1kL(cEyp&1v{N?s`>cV4<-m%nUs%kh zTio^gE>la1NnNIhJRM|Kd@8$;kt;KB8x4qvL}$o3X;q~ke) zb24A4kUdql`77)Pe03r#h+Wr|crhWvoN^-)nu}w1DwB?dQk^C!tK6Vg5xSy1ozB*R z^O}e;lic)U>o3d^Y(Hm}uza-$&?FUnM{gmU*E){#>-g9u)Z5EctIvB5&H+ zO%TK-pn0o~RC7m2m4>;B*=)aI|F-%OScyaI5R>-k_I zq2QP@a)&>6&9EV^f1c-*T?H=SRNDLnYK#g6mYZ+6kJlqWh5KlVHyOF8uVV?OzSQtXIBY zb+(-WGyNyRR%3)(g0M4(8i2k^APpaV|ZA8Uuu1PY)d^0gZ^FrMg&F>@j;AU>OdCL<#SHMS3*B|Z&QZg0=g$T8=g^4>s-bw?< z1gEK&EF0W@n9yL^f61u`gZ$t%jM6L@ZiNL*672=v%*rCU7^wwyxBLPovi1U3 zW|*k$sT5W{R7=IzAQJ$KJcxH1>Noj3<_A)VqNAP?>bNJ}>crO?0o??6<@-u7i`qP4 z?Br~oMBbv)rqWiKdkV7p;WXs#*B}={Yv5o_^h_X-TQnUYVVc`bF5!^7>PlrLr&D$p z$PGCB@PP?^#T?Hlq~}5o=6==|6P=kRNgFA|O1%$NL>S^)@= z%77Z7(OKVJ5aHBaZiXQ;tTgr&3n#XS86p98;|o!o$>xHa0d*U=LQwELbwtV|#zXN|~O z7CLMxm(CI0lOnQqd*`4;R)|h39g&4v*!)y3jY`0X=eZzoBq!RX3n!4Rak_F5wjb~C zpUUHDqmw1eT-I)PxNDa$T-?mqEp+iqF`_&9M}1rwPbwE#{^5@=ERUBJOp`5gS-Y3- zu3ffpL7KChTpn*+gZPIrCR>ykxJxOZvD}6%DB=-rrZWSQCfU;8UDnubtEPx${gfp% zl*cD{?Il`S(KAM}lo+~SDYjfO8M5fC2A#*1$5+>!OBcAT@%=eLlrCJv{-_cr=IRYv zBeD>JM$zR9@8SpRbq!g%SNB;A8;@9_p8$%XZTT~d4mGtbAh=r<^{uDQ4@%-ZvqCGQ^V}i}nZ#;Tddwa{kJv0V_ zA+oCf49b?ctQk{1@FliNqs1Ls9`AW{I-=Wn#6KG$UM_OY*(IqmGtf(VOiU0OSN|u- zkVU|*A8=_=Yt7XEaKznHaxW6|qr5-ANTL zYySC^zQkJr_0%C^TeYZv38d90ZyT~4($!hKZak7b2;?tac=vE5pR!y;=2_F$$MSf_ zV^l}3%UTqx8Y8i&uX#&K#G>fITlwYjqQ}qMN?q0xDpBSJjYq0S8N?K!dJnmEW(Ii0 z7dMCxj?<1HWype{f0ImXVnzpQy=>tfm)WcA@_2~)6AQh@qt`tFX~b3~R}eUft+KZa zRht>mQR;3jbXhA4z5S1svIHRBG9z^tO@G!setCS*z9s8ax93pY_6eNA7K_6Vj9`yh z%hJv^Se830A(ros?C~ek-_p*`Y6k>%cNs-3k#nM7f|aZwTkXcDY-@?U!B$UBVwQK~ zt&lkPl&YOYj<3OnD4CwX>Yc@r#`W?p{OB9wvwfy`tC{BN>dBX3A&XO0+ly9AUh(+a zbyyeV_nWy>ygheE@nN?~(JuD-w8UZ#Q*HOdKMcZ>YB`62i0!t4rQT6g@4}1cJCZg&3tm@k}6ebT(SR#LtWt@bv&Hc6ZCy`i;44cUH(6_R^yRIENspZph<< zR}3l7cEjDR^T3^|&v~b-*?T%8uxEY#?XSDL(kp&XR*UMMrGoKC)Ez}u340@++jCs@ zD84G=W@1brFl7;YHhTQq9gk&Td1uy5Tx&qhRzsj+&1buLtK&o%Q01f2Z5f>1USK8r zJ^TPYH+69=i9LH+a|i`@`Y*Q@SV7_q4|nF)27Lq1cIyKtEbzhZC#acf)aNiF5cGH4 z0*^f?57y~k&dBL5u_6?NA8cbtatPUANX=n)2}&Tj9n%6a=&VNR{6?VW4h2$sFlRWe zQHWJH;Q~VhRG{rdASrKw1P^`yzWx9v98-aFQHV-*sfk0+BRuUX&SK?&1b@9%dEN<@ z1$F)H1ViGet}VN*f@Lo(yCDlSp+w3#z7|1CIc2J}iejwI|$}lJyG@ z@S}cpq8`Vlhze`qA}FeaP*K0as5h|woDVzYB510FfT;Tas-LpT?~=rE5#&`u{AiTc zq5$HbmdTweu6cp`LSpn5?D?01%Ivw-SOp17MSDP`j3UOSAvB?OryF_nSRyiSm4k|1 z8G-3W7#js?TjeaEo#K0pCnm@(>;(4|PPWj$J|GLyeTYgT8=GH`+s-8bPVwsGe&;o3-Y*T}z}p#Y1TTd*NiXZJRb1zMw-zgixGiZ*mUOxC#LD zpI9a%0lxOmn+nehN^hW8k`%%LOsfhoj&Uix+A0>O%{_|bel3FNSG}Qr-+%tq2C=Ik z{Nt|UxHs7I3iuhCUg0VLUU@GVvQC5=D3Sv5aAFQtDkB1DKC6$=Hm48k05|0`r`qE9Sfl0EivFQDrOkYWYd`dG*85HM#Ie zBsBe)20LK4D&GM4@IksXQ+`W}O1iJG5WZbw-9*h-oreL&#j7knK81YvER7b6=*e)p zptex6->%7R1qNI8q9xN`+zgAY`AgXV3ICv9N}qcoO2wH{P;j$t(dOLMX**&04#4bF zQzM!{MprVS`@RP?Vf|c3g@meE!I$gw6pkjH>hMUR2XAdsRlPo!ktrNyacAKJD7{JBdrE=M_pl|=nM zFlFM`U4=5Iy|{xwp%?e~G$wGI122#PWO#4QXUY;hHZ_l!Cnsi@dJpr1?gyt@pK3HX z$ef?NxLiY|ZUNAi}at`_O zMsLzY2fg&JAS`0`8J0rGvhW2^$2#{O&#kO#JEt4WTm>QA%CmW#am&vJD3C@C6hv(IvO1#?;+jyLWT(ubk5 zSk8EXCcm+C8z=+5FR@U$q1{w;^lDZ@Ex_O_H<=gR)r4`snx1HNuu)+>=OWsjS zl;<{bW3zkT88^`W{9#~lg*H#f3v(KMMeH;5)oLn+ry~9HzD~Q5*RRskV`yZ_<_c_N z+k6B=$;T3=^9y*CGxE=ZPW^i?9yWvst*F?ONMP)qk;exj@qsX3P0IlUf$a<2~B_p)Il;h6X0LqFM&0( z4&_*&wSCB#f-(Jg2%QD3ec-hC={h`pPzfGJmFgy^@}kYudLFvT zhGzPR+;+0~+@%GOjXtLYv?QpPMfyFlE4|IUSkO+c9GPoR7Hn+mMz=tdN4WL$prF8j zLn0CR8K%vRXp7AE96>>8r&JHFdtaibfxI^OAbu%%g6 zt#+bUm}ghG&8|+FrqL-`^bKCrZ(R5lQ}nB;xGv$YbDatd2LqMnfZXF6Rur7)DVzti zosr(oeTd0Q+~j>T;a@7zAUMZNo4P(u?PNez!BK6>Sd}tRy_2i(o2*9cp$5mkz>ti5 z;Y~|tA7f_^S?3AK$%Z$RA0JHCSWL#zP3Gqm-6N>h?~U2BKhoVByuu;u|yLre5OHlI7;RQrZc7I5sU+m+;!TPzSc8#VjZX zlQM!ynlU%1!@SPn$T+KsmO08d0UqPpNpiVbeqM)+o zB9O4Dsnl!c%PLSv705as6jTjrmSgtQf}OuMeccqlSI`71C~A0S$}FS`JF9AVTQ%LS z468RT&q^$|Oxl!Aj!bps#g+2$xpAKjs0x#-#iCM_!B564IjHBkw1`_5JD*ZxjbTPr zS^p$erhqtg=ejDeWpz^k$5|Ku7^?u^ zwJLL~5v)^(*~=6bY5~JlgGxg`?G->9a#KLhjbKM@4Ne^(+iZ~Q_lCDQ(-2dbuSL0Z zVsYx>LtH5bwL70yLJC6{|C#m|hw&ta>J;To^?Dr*5)aiRb~WFTz~r#$l;XxzhCcOP zG7aIUs;~Zs1c}aT(RiNrdP(wQ?tfs;1<8%i1*k~%lmO2MQ zwcb;egiRxf*DsYQh^+Bzv40u^RcfSGvcp^T*t(*7xS}_Xg`A>=*YL?q3X8YwXN6_% zg+WV2c?yNwbVU*0^bRGQH^I(FOwQ|C&gXW{a!MBGx;n5$W#(xGn24gOpf0nB6|7d< zw84tm+X&{bZ+dL9Q+*M$SCDPs%B!{iXpH4CwN_d&B8{OcDVSDO7@;2Psm_t3TF=|X zgDVx#^57lYe?+aGQe31#xv9}Rt07FI8auAe;h|Qat*XJJJS?-L;k%&TDCX=^4id0n zZj*y`S(?6++mYrP>)_-AKaQ_Fh3yq|fpW7z;@Yqb9-@8?)+A?IW62!w8s@ES>Ziec zWB@ZPs~{$tMrp(7xMm{N^-)Qid|x6xz7(@3Gh`-tso#$ zBHb1O(%oH3Bi$g~v4k{;fRc)Ihjd9d2*}bb-5pD_z`_zse6zm4_xIO#eb@ET_ z=JuX5=Q-y-v%52UZ;&?6hn*Pkjun4~D}YvhV*0ZvFFa=zV8jz%QRY9wvc8!I{vjX} zJuINQh?+>$%P8Jy(FB3abKeL6jf^rbHQtvgM~p`!$BOAtcDt>3 zfL({s*&yRmYoNcF0{@XU*&Ss*)kQ-aBo{cy%WBI8ILK)6xjz3S88@Pi`N4i>PJK^Vqoa?Ysgk=;%C!0Skz=NaS=h@?18- z+nR0YX&Q`-n?;*{ zyYfx%9#};Bv`cp>*|~3typ#%#FKN=V2fmS>_X3Ow)Ln$N`Ju16GU3~i5yIA*yA@P$ zB3ZnaeXxkEjEvV(a%Eox4A@3W-`%_qz6lL<1Ge?{>CGDPL%C~}mpsgkU!9j8HFI|S zxS%m9JSiT@>F}5tzKYofb}i@qRv=hPzCR8-AC30@KJ=BgnUn4V^@=n0q=ru6y$W% zorY?NW&iGi{S;*&0!ztW{XVZ$_@O2WZ+dsZB2j_rfI;u3L&QY1H^reEFoFCEpev+; z^LTgk00$}WL<%gWHx%#9L|>(KadbEhZF~~G^nl;~@VN%gsPGaG*aVYNIRV_Dig?)p zP;^A>gIiTkUjRGqHv?cZ(canF!U4b~Qt({^COMx=PMSHziKiKj`Jvyqg#PY>{nXVV zpO%vOBgknhso?T@8tWeBw8a+ctxiJ>SNy#I+=r1Iz`$gj4X_r`*vkMW&I7)LfVE1F zq^Jkzu2@}lDLMS@!Kem5G_SSIXAg?h!h;o4!8Lj`e1Hq9waFmrVc!1M7o@tB-XXLI zm{rEH_rXB0z7;HtGcIv4)}o}VD~xEL6chF`b9VT?_1T`~ov&=SZ_0hZ-$`SrPqo;t zWksb0h#k~+*WEUBzHPW;c_hz#WO>BS`@D0}*;ws!)BPwI8w&ri%-QJ|@Whus8It5B z^ZDw=Qbm~~3$m{IY-pR`P4V-UpEaEdN7j8%B=+eoqY6idc+U zw94Mxp0?o`>%Y^0Iq&{Ez}&#C3NS~k96GkQgA~p=OSgX05bkq?cI(~lj4xsF;U2nwhiy1?}uJ3 zwXn{KtXM7Pp^Edz5V;xGCmr!quKrHJI}L?@D}YqO#f(X@;UCq(7y6~ zA2Iw|gG02Zl{S=BnX^)rVgcB!rEVPIeH+mj|Irvy9iYlt=}e!GOqmf5j1GXFvlrTm z!+nZ8cCC%+G=5&E%nY{vxEvkcT$#wu&sC8?TMsDadI~=hCg5?vlhQN=l=L zoBLPJ;ICc5@vh4JWx8J}f$z}KFct2%@1+qd8y&rYvG=t1qIbSG7niV;m5uuqd9~gT zP+v1Dn5uJYIEZzlEtBxsbJz=-JMm~8G&EYwK3~QAj^&Paas6A!43C}2UBknCMU42X zj;xFI`@4ZpH!xols;rBSj{4&sqTNHxYErtJGWu{z7=w|Cw}EZhFQ(yyF$EmUsBvwI zQuhyF=E}Fb3h`XB-!uxCu?Lj$E4g$iidfV>B+w5$wiL|zQ68mHf2=N?U_0<|3w^7I zOJ1-?-cXa2Stmg?L3qG!E4bPiTdjf7a*9R)&m;DOs%Z9?Qu%oNJ${9#)XLYT+wp6A zvX-B(^SBgQKO`16#4FoXRh!%@_UkCdGw%^?W$G)iT2_^4v06@ICMwubDf048uWMrI z*%fcFoKFcRg7@AI4(>TA;_$AFYqM6nf1uMh)*3X(n`)jGs4M4{JU93`wKg5R$75g8 zJak>q+?`sG`8!6VQg20r&Y-YZ3r$>&3Ts5`{11km!s^HrbocdOdx zZmam`0jsoiWrx}N5KkFLXQZ6+Z<3-shwaIf`p7+n1=T%cgC9O%PsKLNmQt~r+kEZ1 zq@w6U)hQLkheVl{DXwwjX|5&X{_4NR!__@U)zsB9)#(j04U4t>RU)+=4psK7EcoRa z`9G%n$K`yd#o#z>p zbS&8V$~WVtWMC>-!CI9*DOR&-Ut0ChpbFjB^{Mk}9J&`WIDOA@aWGTL<}1wDA3 zM7%7$W;jmW=mX_rF8y2@p%>4_zDmE0<9sZA@*&%7^53tebK8$a7$l5}i1i~Qw|udfP-m$uXlr>Yx! zpiCH(XcIf~RR;Iwoy-$VGe)_OJYe%@1sl?SUt+6>2dglts_;xq>DpyzV>XCKHl9_i zQaWvT-9!hT;N~A*rQ&U=QSh$HIr7M8e90r3&*L_h29TrxB=Y|tS*-#{p}G-Ux{=Yd zVHvaG>?gbcQhPVOVW-C;7}gjIAVq+$)$z5|(48hFrFlZJ%13F9jwwGrjeY%V)dP5V zT~y~Mr7m2*uim;}^L2ykX1`J&{1x*Ht#qX>JfUG*vo`E?ya`5Ll0kCf&2AZE-xdWw zMFE9il|Kz;`-E5ZRsPxa8UVzI0s{XB$Pxwgh5A5-t-WhTAb8>uUwjn+a=t{rIC%^J z4bL0^NRQ)yIUX`?$$;N4ZNqVvq9q@_9*_0S;iuT4F)5?sN^dp7#bE>rOAx3>Y zIsy?y0@1J&^Z+p4O_=yG0qvULq+1!?mO4r2V@abgITWon(T{g_B6QDWoX@&VTZ7d< zVG(gqz|2XZW`v1m7}ZtS3spEx0$=h3g1Ikg#aGD||2Q{>2Od9W&rYykOFeaZ|rG`BzdV(dTP8NOqtkot2e{>9QX^hB!lrDsm+Ifve=`V3>>|Ed9 zmlkI9)m0P#Bc$u&UYBRqE)SDVaGcihkJcUnKrAGB;%}cn#{ZH_OSwjWIf_Yh{G>TY z*e8eJ+Wc|Y25VH0jFKd#)hnW`=Qzw&_-R!%Emd^kF1QS?q+~7>I<7=s#|*TqoM>;W z0&I%DJ{M3UIv;&Jye3WM{+D?tjCLnfj6CQCc}xQ*DG?_LMRN4j* zl^jLL^`ZFsTc=#|!1afj&$GGq*W12peTXl?* z6)Jd%4&tE8TGc4)5_0I=o{dHqh%)c%)ieAP+ZbWM2+m^cBzmOTKU2mS5>bT7V3#XK znJ1{94IpU&NY6&e(7#6zexlm=9#eez06>a7VbV4etzQKlbUvg8^P`ad{s+kfK#DIJ zxK_tZP{UK1l=9~R584FR?|jiA3>A2t&5rq!BztMeN z9>^c#ox0+aoxF;0!Rfigq5l-|L9&d_QXPA0Rf=^|o~Sj7)Fxcz6A6$+(Be3s7JnkL zB@e&gz@sx|BQ@m|>$WTF)js$`OZ}J7F9a>UTlVJ5%f&9Eo6u(>vc+~c2j8lTzU;Z= zkWyx28_OxyN;Am3q;!2J!-e^gaao3PxyLs-EG0P-L-#Y}Hzn0?65-!uSgwy&avyA~ zea%w)V&X~`xb`A5SJPuUwz?<^0OA9Hy2hRzj#B*i8b4HeP?9tLT63gN=TtiAXe=39Ug72D2~dwf^f4PpFCB0dfpH1xwTO{ zfrHeAlTqUZ*NNp(*X89&*S;fHhpGlQmZ}CXr3Nq8sM-$byV_m>p}7s3=)?ChB?#hP z?uGprgL<45z)U%X3|Il~4Gi5z{*jqn;^CqGl-5p%yNip&2Y| zpqVJ^5Dqhd3ExZy(m0kws6EOfYFekDel|?oEY+H>Py;&wFN4Jqtwf;_!Njl;*TjMm zNzz#E>G6R%@Ut}s)7|wlJMUq=foJ=zg<#>zqW2?yby=W}>t@hTp`j)vnyvKw7*`dw zUg7Z4pBepoxYkkEIW-|d5Q+*m_i2qJA^Rfcbjzu_kp~`m@Zh+O*1Q9EV=aUr`&$!1 zRVEYR*tfkISn(4h83SG;tONAc^`|wUCby*~nWjU-?3=ap(nYTk%{vbjolN0E#t3Gk zswOb=mXUeF+X_wvycrw%zX=7Cu5IN!GTfgo{h9AXK6k*ndOfx_%&%HM%@F4|*f)m(?)^mC(JS#{ntRwwjVunyqPs8}ZM2XR3>H1&3b@>xJen%a#OZ|#k| z;+5H^VNcY&ng>dnDk%4KDtz{4DqPOLl!o}sljH?#D`*G0;OPWj>ioaW;>HpH$7jMv7V1r_7ctDVyaFq)ZPSel-P95-U~0Wm?f}8C&`Hwsi}2`gaM< z`43;WBda_TTNGAByf*&GI*GcZ2-CZS`Wl+n3v;{t^ffn)LB3mMyV&|;cyarua?#RJ ze(BtSVe!zha0$B}wv^`}-e^4^;8|I_X*FhGwWkfwhf@7(kyn1e~Kbgvp=ojew+Q4`mwALPnY6xE}oEt zJioiV>X~F9F4(0tv?}>4Q{Nv4i*+KP5KfzM*PHVrHlD_;y&hRbLjnB-fY3$2IJ$OK z0h$s|0US{jP7a>XDv7(a*O?UES?^QaUIX&TZ^;q3LtsC@&n&3A0|x5OEl_s^zST4a z4K_xkHHL_vJcuP!OFNgAmVMM2oLUqvXM;~SpZ&^MlK)JC{jBo=Zl_CYG(f1h?+^7* zF9T35e&ZV)3wmxmz~3N01uE+CtBUnE5hp-J#YWrv9S|=G0DS|1z$l)C;l9nGOfL$(wuwqY0bv6`uJ0sFaAn@gJ;wtosx44a ze?LG~RCCe#k64J+=P|2P#H-Y7>kPzeq(|%Q@vBSnF(2aWCL`$Ul{LfQ28Yq&?@|2bUD8H zEn_$U#E$}c2>{UoK;!@rF#r_x*QPb{eR537_l@sK2xgpKgNFFMEoK(1Y#8d zf!`Rta>9St!yWGwUpc3SpP&xtX*p>gSpoeVQK1dqzkdKdZTd9K?6sV^$Qv^uvA^;_ z&rwBf|C?~(7z44UxVa{vvL?c|_M~EiFQC`|Cem7svIb}sNG5}*JVu`?uSqi3%9FK* zk^g;#&Gd<;o8y@|2klP|bh`CdEPp?+^y)kOD3aMF2T1_E!V|D*L1FAcODukq#xyV*p{Ebj`p(Uv*}pr>g7JuL$0X?IDTzb|Rq#t14m@S?iNmHt=^{b3pEmSX9CQr7ck z)0DyOgrpseoeuW8d?>yl6wpoA7%Tq?zm8&G-dj_aLrRUz%m$NP{}q}LAn;Lonu8n= z_{*J-l)%X3P;Zo;4t8*m!uNbZX0pbpvdYumOK?fSe@u1vNBq;5Z8ejR|G&aqiVYtH zgo^^g0Dz9x=tR13iiQC_{r^ZuUL1rP$6|nyxKE3mzG0MaR z-OGjGewEW$!apS|L;a!Fngrus4x#a90>{yZmDyCyd1TkX7phGKmb-KTg>PZX$8~~T z{rlPeZ$RM#g8Kia@Yl-dNS;0dIt7C0QEIVTN%_{#PCLQIJ0TCrKd*hFGUp`J_z^sp z9IN_0R7*E}_>#J%O8n-Rr@&34C(BK;C)dqaPrjRM&li5No`QZYp1gh`p4@(+o(z6J z5Z0Fthmx1Xhpv}4tbe#=YCgsB3{Pm4?%3vGcvITq$4Zy(R@tA65FAE}@E;C~ZXb$4 zUicb7NPXoY&ydWSy9h?eJ6{6T+_t2`pKXC@f#skn(@tKckOKFlM81t#rr6pqNj zdu$Qt7&=@u8Xe+O^2qpDr2cNF$*OHn(5!8D&WshoQggSPV&%U|;pD%5Vu0T2SWfC} zWKZGjZ7&OxR{Y-3w|)jFDjzR{J#QU7O5bhWRNr1bzh%k9`ej{3d1tD@(q+s(eXrE1}}{l!3=9hV;V?5)|78xxbK!%oBcd z16b{>1Jo-jmcg)~>RB(%t4S{fy~CEGvI`@v`pY9mVZX8!vTWMp1g+RhyP}oLz2d8O zm-F<>5T7x!yt^Gm?MT1wDT8)wyDI0z>m=tC{q==kVkd_>igkTD<*XG&mimht%yo>G zSK>;G*qZT{NKBVS2`I>Rj7Pd3gYcp}r&-+j-Eb(2M%ALLB!-d%rp&0TiHi<# zg9HYd8$*(U+@l0S+3%`^Bz^RWLx=av7w6yZN4$}9L&6Z`;>^_UA3^w8Vv}*S*U%Af zYN~kI*!YcXG#`}C&YcTuk|Qn8-ksaIY;2;nLyjHZMCm_t#oNxMGf8eyv9V+Cv?kEC zI6MY9*brD2nI2oA-Xk|PJ|uTo-Y2)a>*nmbG3h0Tcf>>vI}4R_G`Q;9-~F}yd1X-O z2z^kvWK}w04EHQVhyGNNAJWNCNxkA0!bxz}- zWZ|PLyBbY5u37YJfoi~OQnf_(1%-X;T`RWcCaydn&gm8l6p6wt*;s!-18Z76V8;BHh?>BP8hQR(Ekl2FY^Zb}jqUNSjxO8o?=IIC38C#b!s(fa zsO$}GoF&$X=Sld4wT|AewFbXtlPqnIWlg-YU0(8@tT_>RqE9KC2N}uhr-KwCCUR|* z*8KFR{KWh_1XB47GgZ5rd%n-y*i;k$9SzImBz7{A=+62(nn^%9z7>MQcmb7ae){`+ zYE;Ac-Ap;LSO8)4LF4xuCw<$aY7AnSZ9X@d`Oa{1sC#t)F2;(kL>7K@fwU2s+P*S; zcd3ZH*_}NC(V_O8`D`4pN-T| zC?%}!qIT3_qwQd8jrbn)2t#uy-y?-|p3{Mi)yX#Ju-J^4l3eAXW4F!eRnw%Y2ctJn znqr<^*m&AQGj~RgFLG2Vd~O6eN#5e#?VtAo>LRXX%71y;mlgOMX{#@Mo|em4DtND*R9;%x@mCvf!}zT|Rk44a;v zmCUnxG=MjK?{3R3>}LFBoxJ!cl5x}$8UUkJE#-GCSn+kp!`@1>p?9WF5=$!rTf3gk zghdmd^pFbaH3vsvIu>BJ@vGGlruEt1`dnLd$u%QwXwIL^ON6)0j2-Np^Vl8gKQU>D zu@g6xE=5%2?`KuyjMv!rJ)=^DQdLbt@9gxiV0HtmQNkg;)4Kdl>x5w5jpCQj!gyo?hZucS*$dLpIXu8 zw6Q;9vYs`&wv>2zesscoIQv5)--)UA{EFSZW%|YS)xOD2ETdYhz-LW8uwV5Ch_Rpw;bPB|<$?4kTo>wXJMIzfEwR*j&L1*$xRfKC-_zA9 z6#Ona8@Nc*A_t9hsCLY#P9Yna&m&h$t}Xpds}A; zhI@t(FY{@nR#&z*tGZX8g1RXk9``U~;W?C6M!ID&W)WG^s85q@3FeCE#QT4(W>-fr z4YbRqNXIwHq-ex9$@Z`1yUCppZJZm29e#+jonyKfSQPR*VStKa-J*?{Ef?4(^W&vj z&2l(Tz=6@5p?5mv!)!%&d^_CS(ud5)ip))QFC|{K7Kj&cskz<<&2{Sg?LgZp{H{U9Z%-8&AK`fFgunUEc{Tvy? zREPxz%+~?=Lo1_gnDzlbbM9@ESNhb?Q*bp@yV+m@#jZci+PFtgRg~-exXy&p4`BkO z%Xb`GxMwb$#Z`Bs?xdJaH}b5A@OJB*;rzrsUW_;Cp%u~grPEBKYhF7mjrh=HH2;9` z;^=+tk|wH3`woq4KNVlT=`q>@3GWz$nTU>W7Mi8Wd`Fe4Is%YW^FKM07(sR>Y-(mdDVKBLCb#_ln|U_vm8)&n&NVDhPqy(y61&l+7@YWTk5 zo_x=6=H2knEe*dVJ;W8pr@4=WLcT2nCao@D?BitzdY}7kfiPJ z#^T65Vf6X&Y@HggT^H_-UC6YRGDok{j&sP>up#r5U(^h5R*ITfp(xe94TL*eMBbM# zvs4rkRLy=kH(Q7hK?kVUa3&$BA6Pma&h<(9;s?e3L^x~~h+;|fYx(lIO=lKL?@Ide z`HTq`Nbf3dbNEc623PqzOL$ipU0>XH_NJd*VMvAJjIIpRG+{_(;c!fqC(P4727>xr z-=`??xo*J2>pF+>`H*ZcOeNbnx%00?-gM>6XeEz!8hF%6>}&0eo^VgCpusDpvSQk%G;t1m@W387hUIh* zS!YbWd&Npj9@UzJEN5JoFcFTv!UB8lg$uqkQ^RN3JHvo}{bDQlJID84q0V~4W0>LD zz;>;*InANqvjI@8^+wY?=uy1CEd(r9xBZwAWCH;kqP8^ES--+MoI|5$0AfekxBkB& z!}?#RyZqPb0{@)uLG$${H=Bt7(}U&S7K% zcSir?boBo?9YKx0B{*MmVt6P>InWNAP1Zb!CteU3u%Wgr0!bwVAws910u0hng9>0! zgBlRb*NjDu5Mt!>XLRqVZ-4zf4p-#7x7oaWsHFE;)Twip;O2WC3FgvgS-L27|8kB) z(zEMhdEU+^MmX8$-C3I9vZEajpn(F~=X#Gca7<^MHYOWof8ROU?D842nmhvDe(KwR zoovpj)PyH0mikqYR9fSO!;V<-hvEKDMj(A$fPX_(45E!3@VztO`-_*1$no}Qf4h~) z?4cZgDv&K|Q0`A9Xafv3fB922*{)~)ma>qsaPvcNd0KxILQmpe;v>!B(%AL8z?BhcHaRv_V2 zk^l*(4M;dJW>muA&n#`LL?xUhAmOxA0|}=ENI1Y?alQq(0`1hm6=(sjKszpQ1zLbB z01OD`TYxjD!c}kv5`ErC6|n+j=RP4$dT5+uvkeEMuil(Cts6e)_s-B zyfr&vAt%G~pD=3+%qf?RvfCwSLo@THR(cm6a4)6PfKk#WUW+LOD<54$Q@SF%Zei6F zZU1r=%;Cv=*7QJG)wCpy1muU^@~AU8zjCtmbM|7Pcax-^yl=+?fUocKcz+w1lNzG9 z%_IomOZ(VTv zeIJM_YB)$tHK*U7>Gb9aCPp{g$!`I4uxM!e(cq+y*eEG3>&YlHQKEP#_R*l0INgpA z)%->dFOiRU2!6SC5tGLFkr(@q*exrfnIc zp4j@v5|z{Ylcx_k%<#_^u#MQIkvKMvZN}%cz;g>t2UK6Ef>LRi2ODxe=l!K^sD<` z1jW@L0R#Pw9Ul%y6m{v^+PObIrCn zM|({WOuNP*{t#>>owe7ZrGb?U{5~bLyW$&AlfYW{vgd~n_6b65*GA(Ww^ekV?qSR zA&hAT+EH_WvUJW+d7DmnTqGj%F+KmG|KoVWx{EzEx0z+4?6X`DZZMGO)M*qdh2+uV zmrWw55icNZqXBsOG(W#vGwiJ5XuQn6H{SVy4yXA!HLEh(OP2c5Y|ofH9=%2AP$yET zQ@~`03VR*cj*VK^fY&hgxxp%U*V)T^eER|sJr!WW7`gO zcg|S>NI-g5Yx~`2RP!MH_EhA-p!1(E_cvi8!=oOLYUQQ(AMRuj(AZ^s&=?vGe026T z_zKI^LF}y9L!Z~XYm$(I5z|xjapb9)VL5k6B}3Ugx>96tV#w%z$M4o@y`eSi+kl`7 z9OL4vn+HJ0(?lBYQM(Ifa>#h7=Nvd`d| zLZa_*JSkxLa>q2fK{`}vu3;`7loeB5!EyNcQejsLu&2ed*+)gD~jcGmgZNPC9M76!gZDL14F8nRNv3@ zf?3-Q@-&5uY}?*9g}sbcm)>md;tEE2Bk-(yK`H*9Bk&lkj`8Y6IPk>&CqFgaO8gXB$yz&#)Twldm0u$^5lu_N$1l95srKIPZzAS(yHKNf3>8IsW;c zDtMfTtMCl_hL~TV{lkNFlJ|&WPnE}6@(p4&aB-OISU1>nq=QNpKhU~r1$=defaxs; zzT@#O8(a_E?|G`)zfP9I$@51zGSH|w=uNZ5$*v?$v2z;>0@qkK<(@Z-IsmljuFoeN zu5*wg$8;i?e&+X<#B%ePFROU-lqa0vAXCbiwGvb_ud&m@UJ2^b4Ag)6DPv(VS*c~c z0(jrdPo}LK4}?mZjNZNB_OaN{9kUukwlnOwa>zPL-HB3oqaw^#k zBU`8V4cMC>5(kOys8yXCp(iD~8^w|^5jGpaOv3``$w)g|O+Ow&j5ADbv8_|A5Ih>1$Ny;}pK~&>A1~9GCu{_{w5rG(_$y$^$wgs- zZr5*#YVkCUZa31vd(kEH1QLEK0KJTz43wk|7f1eJi|O0g77fe|hKjI7UVS@CJ-w`1 z%(C$`X6taGRh)_gd6!gWO~Ku+mU_*LyBnGgcK(wY9lRo~^x+7OYgt@Z?q(Pt zb9O!noXAfweq^T>4MZtK>VArVM`B;AYG}B2B&c$kU=9Y2BX!dSsaf>|4+!C zN>27MT0kO4==2-nl82=DWWr||#uqkhr^@v5=$*q0hPB7H}INqpM;M)IsPU8-W8SZPi8Ny^~o z-J2dMT5m7DIv?XcSN_0)rt+iXyEIVI71FCwtLEvo&kapL^Bljv4{KR}kU>h(F1us;8f?13$i$)&REE64#$ae+z>Qgj8~kjxZe31b&2xwDpY5FsSu}8i(2FkyKT-yiCbtohsmmyEc4(XC zv*JWH1(-9_Q0Wa#JClAuAbVK0YXJ28(aK+xhVZbESe-&_0nbEh4%i)=q%e7kVS&hql*2z$Ck!KzBr36z|g?w>#UZ0xZB|Vk*ACWY_8n9pPP{k((;E8JG#n z#`mW?T`g(Z`S3^juHTj)!^x*_c<)B4e1i70v*8(I-pvb!*0gursbcE{^G7-OS>o%^ zLqyy~oIEwf?{KU8v#$$Es=r=W%KIJkK5B+TU$x&JvQJ(fNiU0;0*`j|?Q6R}%%xYP zJADAla7Xlp8^(H#PQ=nx*Y$etok67&;X39=BBp|Yb%-5wU}Bwwnw(nM4Gf`-N{j;9W@^hg;^RN zIw^{Y=R}D&PQ)z*@Ju&te7L$h9<#jk@28uek=Uo$xqT|s7{76mZ#=p}=TjDXWo>#O zy|eKlC$-hAL>yNirzJB~mcT51P`sp)zf2sXpgc6OW^|vB#ml?w%_r#&rcn=?+N{uN z`O%h>j^qt)0lzcm^NT77a1)~=mLh9nrFTS1PbZKr4Q;FG8kvj}@4pK(x6U~*h!>Pe zQH&RqMRl$+{j%}tGX2W&)Uy3r@#(VtM)9;VyRzFZs4mbI6X>eK#s77InJ*y4qt2r4 zx9IctVbgCQKdha1IPeO}!tVklVm~CWY=%-UP+cp96yR~36Oe0OcOdtK{Bm#WgT&~% zzTA!SP+ntnX)?PnJqZa2MYzxAKhVDq?eQorT6W^7f;02-^D|!927tF^^yEQG;iuHY zAm)D`BON;P03Xc6(n+N#BFm5+9#Ku_@IZ-vSy&b((7U!_qk32IY@ioZ4H=I-YQYAY z?W{nFU9AgV5(OCh6g5IiHZ$C86vKu+$S6}{-+t#k}u#T24ef)m`Xk6VGRpdFx@lTNqrdNB#k7R-8!dC&ZAd4 zxKS9cqzAff`3=zgj3aPQ+BqD!Cyg|~1wO~fqXS51EoBeox3yye-RlKkykYHjx0>5T zJDDW#LBK^wTnl0a54gqEYmfR2<4HEqP*H~g-5_tce@q|zvC?o*MJUG(Q*Fo57m=l$ z^H;hzBxkhf8=rH!pY2c)XvF;SNg3^UI-e;O%Wqdg>Xm#?cy=0GWp3)tai)hxw4Sre zcsBT@ICS)!0@tUT0@T?3cLcb>wU`6k-~vKp87HT#w2dzG)bP+B8`W)_XCD~&-aj5N zoJUfrL8pQJo4IXt!9e$V7kIGbt(iD=ci}p|&($_X9XB-DXT?JG6_dH2uZ6LI+!9Rj zbn>qrp>;aR_QUW=7i~3aS5guNO)0!#LRsap4@^`l8JQ5Tzz-ur`{^rt?wRMl(>2z!S!obw5^{z+G1 z=5y&iJr$yiW2N{^H#XP-OpG}Cz-J?z<`Ly#Xufeb0u?p~2pL)D1)78Qr})Ze;*|qpMX9@*-&EU%%*GX$^}6wyWBFbP zP`PIeUq^cg%&ZBeR?j(+@FJ(;|CfIaiodWfihuDx{x4Dd?`WC#xj>b@1I@#WmH+q) z>!SD<|Krb~jaVAG71f4*oK}xbXi5Pb^pC&ZfA|*<-Y)iArJKTxtwYjjp#efQF=Vri zi4Mk$`*D8@aIGQ>tB#mw&oUh5u%}C-hTTi7_s$+u-J+!}#CbUNykV%q2+^C_b(nur zZ^5vCLZ7A%UiNT<3elR?7@Pic|2~E`tu%~$zfYHyJvSNQrvRCWDYGOF}D!9}5zj&l{7L-{;dQ~0uI9%h^ z9|X%Qx9!!Wuve=@MB|%-glk5m=Qb%EIu)jQW0je$6rFz4CQ!Q2oX@qe|Hu31FPUSx zky`)gvs-QX4=w6cyU|!3N$WMKa9?m}Pn$vSUNZ0VfC7UO{5e4ER+d>Plj>N&M0d^_ zWdb!tnSi+VKLsTSrh54G52Op;N1$RS3YpT|oM|!PR85~i=_XER$(>r|MM6b9V&!2* z(>>dm;;{U7+LAxbEsnLlzgfr0BK3~ZU^?pj)PlQPudu@5jDyeX&3<~%8<-W2N_EA` zZ`%Ya5KU|~Eqm3!&^dqhk9-Qs_u~Bn$mAyLDirx{T@-m26#3<-1dr4v9V<(^p+(i| zYE`SFQr$Uu?h7;EErKb&0?Z%|kTZB7eMsnS6&K+7pa1Lm-li# zKZ&h>eQfw%eQsMwz@r?o8vaN#=dei22P57;Wlj4iYNo#!IB-R7OjG%Q*wX@Yox89r%_x58{$Y0T;V#chBi@zpDqiiSv zUctD1_xi$_Jq<~+?-!|DpS6A`3T|%iD)9f4C{sJ|F&UGt>*MtW47;?9hHXZ@59u%@g&72viO zfec;oFjv|`f%ku0@Pbs#flyD+LxuXbj;>x(O3g5^P}5aW3w5Lvm1wqkv=LK7f^iA{ z{GfnPRHB(J8yYU#VAh5Xc`EOEpvjPmAcE$S^E z?Q@0?>vk^>TZfGN)@#t~4S}SAc|XF9Esa`d<8A5%QatGT3m|5L)4z?8vqRiv6Eu9+ zk~$T6g!>2D>NVogy58w2+?m!;zp#WEUXXG305VlD*5V&)y??Cr0M_u3va*GtD_mye zM`&wUfn@)&Z=CIHKVz+KVjEi`MJ4cUY8nFvi^<4^gJ* zA%$2j%~bCq=c;SUbOh7%>L_MT1kw&sv}0@j>ui>P&Q3%*o3>}bBSoD8AI(pBeBL|;9I?Q=+zV(-6-TOQSE?wcj5*to0#utLR{ldm z`ZcbibFE`#gVqiMLiLvq_5(7N?_*d?5pQSKx~y8XCJ$n9fHesM!-vu#sB}KEk4op; zW2kfvve&Ly7@EsS0M0?j94JR4+q!dP+}j>y2WcsAn}1P~h>8+VYfCmOnkn6sG`(Iy zZK&OJRei42{d9}#J$`l1w%!G7&b`-uQJidg--B-=&BLx+?&2e;_xA{VZu8usQ*!zo zEe#=Ru4WT@~)`{(h@e;yx1dAz~w-=efeElPY;Cie?Y@aF^>L;iW(4CV2K-~R%o1_%^< zEM^e*z5ryva9C(sXYybrjK483TsP?%-xiyJ;jQwK2@&5dUj0z`x!s@@!YTt?HHI_0 zh*t)Bm}b~Tx@c)+-)fmU{e{&# z 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�^vWu38Ka9IB2)D*PpgB;i$nbY`b@J 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

    d<|V=9lbB25%MS_)>8X25 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≻ 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

    clP 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

    8^bhx*zB+9}s5`QMCBGH@4`xrapc*%K|B1!KvK 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

    S&vuNnFXT?@$0SUv6|+mGj{7w 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

  • #a#Z;qP49jo{1#_m zF!5X7?%l?_%exJc9lkD%UCmcL9|Rp=%sR1#E#%%`Sswt%B=ydyB|n{!NNNS~i|U-c zl6?25aNcrB+*PyV-F3A~t5WtEufE93$zfIj6P6Myr?!P8&u@H;!JbH}2`L)VKiK9) zh=)oORI3n2$W)1F^YZe@n!w6ag&YQY6^ANS~xDrKQ5t z!u!%rA z?mQKc>O) zX#XW@YawaJ!=WaCR6HmY1xLs|%tT(zxuJ7JlQuHySmL*^FGedcLZvFKfKtzQbCl-K z2*0cw4$<;cpRQ|EmzZU#<7-zVUdYqZOTDbJ<7w3oH)z7(;F0(IMC?`C; z@g&f4=2`eY&l6NXvCF$``zok{^w|kx$IKAW)LdR+gr`NNMRxg>OUe1mF^@<+eiB`%NgCG& zXNv%0eiDA7T^|hqw*U67c)f3Jba=Gy0wqDFrP)1A6VWyMyN*A|#6SDsxdyhUS-Hx^ zk)3@yK$htxDV!yPM2>tU9r2>WMQkf*{BZW;#=|N6Ax9hT7WA~A^x0Q>uxTY@A17vz zj5;2KxmL927^q^oxjUORKMCUssV=E9PRQ7{E3JxG8H3;9?qruLsZG4>FK9Zz~Je6>xYR%d>5&2x|U&;S&(VSd`#YXl`` z0$tUHVpcY6wAoAa>*t(P3_gs-7;V{n=H^(ekJSL@SwX>(mlaA&OPa05OLFn(ka`l) z*-e|>7_^ZleeimcK8V`2imNDDKSa23p$QO-XUqvv$QJsN@iY2b+xCHPz7LU!Rj5Py ztX=e5M`fys2O;XR`kXgmM_c>arO*XU0ACQ}1wi-Vq)M_EnV$_>%?@wO@qPrOgF(Hj zr_&|#K8e}2QgbU-B2MKeg+ZdfO=GmbVR{SZ0ZB!cO-)p(3}(g*;JGWEV+KZ{AohL6 zQ{>3ERGka-MB8s*Wu@D}uu5&UG5h2ln@5}TrnRwzkXgrWv0vziVzP=8gv*rDIgZQE zrQ02sZ39~uhdl1?YCMW|8T&Rb-5F?c*2woOtemqzV!{N)0ty+;d zB|N?60xcT3^9&%Sg(RMSsI2=%xP{yZX8UpF;ZcM9 z4pv-u)20JodU2dn|91a4@k?>%+9Ymm@Cq0Y&5MKOwdTm7mN4`Muc&J4qpF>f@*IzM z+v~k9k9}XaeYc(Bh)X@^j12YU*i4_rpU7{xQ1M?byb!whBYVvXh^+!L5A@7`T7C`( z*214Ty_TJqt6yr5>!@kkJtgnqUQWG~UUrAu9w5Ip&%^=f6M$7lYwhn}R`R4;-z$kt zw(I=0Uw?zMDDqD0YQE#$Z33j@op-6w0_~S_=L*Mi>k5l?Qao8EDe-B5$6U80+ z=G!^pJPLWa{8nr(1$!}ZKcJ-CYF(R<@$g47l&_tRcl;qv4zZNWx=zpqRc|7J-doJ_ zgqMY$&K+2CAq0&@u9ulQ-&)xSY4e+f{w$KGB7 zuf6W1DYq#?-1^J|6M4t&;+~Q!xe)}&v%NZQ_Qtc^n-9EJGfoCRf|#51?eOE6NI^72 z^R~X$3v&#O^=q7#*PrBZGB3Z^{?zA5Gud2d#VgE?-OYZEIAw3icV z+qDjJ^&V$5xyuy~pX`VhXF<|E#{(*5XJ03DvrEPD`(6UEPCJ(eA;BY=D8f{!>316!G4_b?KhQhs>#mtcvZ=>cC#~Q8)`Pt< zG&53q7>2HaZ8JK7~92?Gd`?9;rOM^5*JBU4cOb zl_vs9h`!zD4sKeb90Nnt`=h?v=KI|2H9j}*@7<5Gls0_w<+FS4@yCxl(i+4bShx7H zeY~uKFkKmzjoKp znb=Ke{jd6!#m>6?#<>=*L-fS24$RY3vll;4NX;4&ZsY=ljy=!C(U39UNCKY%X}w`X z@Z;YE*ZenfT9tGNnQM%DZa6R?LlWca+~xj*Ynx6^RMU@|ia3SkRCC&tAr~2h8O;=4 zYlqnr_R8tk6OPM=giDEC_$S2!r@<>+&*a^GIGQL_{$}tBwH||e+h_@yWfHiN&+ z{9P&wq}EWjYjAR>?XS=IHGLyFyG+R6-oZH~eCf2R%=b5hTcb^!+5I7xX2b zXEO#;wi(0iPQd+?K(~GQtqzB*Bw);b;Wt!cg}p(&OROLY0#kLR)%xIi|Ca4L@1B9E zt~Cu#2|8);0G+lm+SPd(n!jh3xT#qudT<5TD}N}@tJ5>neEuiJxjB!fVFc{6aXI99 zRt9Hf1m1#zmsA{jpuE@I%8NivFJLRyX$#&pl=IcZONikg0wn=w1mpCljeu4bwPhJF) zn)^%U<0F5?BG{}ad9Hm-HH~b^N=`xqB9BY^*h{Z6w@R8+ ztS<&gAo)C>Qh<7Hb!u9N=@SockzD#_`cd~Gj(wy!0BOErcT8EMbDPt%8NAb0cJKli+NQQvWS-Q=BF7y^B zLjTa&7+1Cbd>=j()cq(W-YX{R2{c>V+HAmiEQ1@nVU>~IEvKRfbUtwvk?4}0#{*5= zy#9mkc0z1=lU{kAznR3IpjAB-ZkJ|tum5MEQf!B6bmMYF{%j{mX5xr z=WS~194s;q|Ldb|OmyuY@W!N*Y@URh)H{Ze+pyaiqt}i&aw6yl-E~VT;F>SCVoTbt ziEtZ)fqe5=IlpnGdUvZ7tliZUbU+Xau3u}Udj)86c}5-KKM?o}c2R_W_{fldA04+2 zayhsV)o5KNt5#z5-`u!4GU-10UHQB?2|}**QOv|4<(fCMbvprG$&V{0#-~ zyo-?{e|p+sRS>u0=*2RfADW6`f~yWZ_Y1X*knFG0%Q?7H34&C~(bW&|EFcjbOP@iJ8|s`P}de@8#Fq?1*FSp%#(x`ec~iNd*MtDq+9yg!mD!! zB|Bh^kx0-OlvTtSq-<;JqM0k7t{@#SCYP{l{=CMzf6s z)2Ysv{M_X_q`cb~&$gjIGYogl{^+#Luk@EGM@)mOB;)h#a$)i3mk%5+(IWLq-y(k^ z3q17K3QeeubDnJIiE)K`6wYr2y-2zjQq+%ywPqe9`DyZBU_(tOrunSCgP>sm7QD( z`Uj=w7b%lFs5C7OQPe3$)^`(MxsG*;0IL`C-s$?tG9iEj+Z2AUA56bLQru~)Df42e zV}HSg?&kN7m7tq^y^*cOq-Z=th6!|gaB-?-+iAv2xIgv#qFahVGrM4M%(M=u%km5UOD|= z+j6~BKcPJYf{dd zw2EDA@5R<{#)6=}@eGj~>MK|r_|1UEc-IZbA6Q}_SM`od@mqZ^`h+npg%V4Ie)*Kt9NB^DV!?z>%rL-?*ZnMTsws;frM$@l8;<(6*N*+$ZUKbLr z!1c12qJOEAh;^?1Q)H*%~` z-!9F4{$jAwY%9W~&5aZdqw_BFQG+6UIx542%VD0Fga^}`=- z7ygtihck`EQZPofHz(^c>uwv3<=_fU=>^MnVN^Z$0oo z3M{|*9!>MA9FuBYcAKhxD66|ZP3X3Kajag>JCiN;b+QX2S306x#*|~UZ@-w79Ks(3 z^@#GIM_BUk>=be>>imnBOzlg|LYEijn^IAiG`8YUlfnBJujks>m1> zh(sdWlGk`|#+gV1%kF=d1KbV!LtriTSM>`#!`ZiJutq89 zn@5413C^E&_}>tv;g&V%9(*et~f(Pp!XaKTd=H?(9{-%n1d6 z|KlRS`)353C&g@|z+GhR6&B!bV>JW^u%x|+0biK+l%y)(W8ZnpYh?Q4w>`fzmS7%# z%=)mWpz~7ByT(b?D@QC^4AYxVT?>}rZ15}cLi-%>N2ulk{iA_J;FtBbu)Sgot1({b zh3sXL)?a{;5Y!QtYw&_%USovAy37@I_ucLMoaAO_d!5k4{yERHtJT-OoO)Nj-j+_W zqWb77cCX33!JUWF8MXswBu{>1t2y=oTI|$_o>MV~&h|YX_6o>B?crJ*MfV~)1O-0L8(=g_+$a`fkOg_=adZl#B&O|ib*Ba^7c`y6k zgN^<3wU-Wvg`M`Rp1dhztaOb zTg%a@uv*6P+Zu%~Rfj8+LGMAGdF1949PYQ30uOENFGw zN#X59G!luvNbFA!i|Qye4vaW`n>+SC%F-hK7!Pr>DM$<}sv2)hzUea&R7t#qkR7|W ztAIK-LANB`dMaD6!IoXY7+>g*kAs5)*;0bGea7hOzoZe&T!o~E@^<5m*}l?k1!Big z6*~utyuSY!_tYjWD4~OL{-6l>z7Jf{`>;8fepiTP(zN-=I|XZ8VmIdFQjQiHd<}l- zodj#jUY?0h6kgZB!ndak)vIgylZ?@ai9c$?U?7yV-#I2vl2Z^lmWb@7?#>n#1-)lT} zeUe+UE_r(@s9$heS(gnnO>${+Y+*}v;`^Lbe=hy;`B5;fjXdzPUFi@#(Dr%qw2D^& zO(FKd{yV!^HWdW!rNEAeHsfJdaf~Of<&}_b@^CtbY-BU!5Qz!zxrD+En;_wvR$n0| zAAGU^1yB%2K6y9l&yp*U;A@_LCrzV|z&gjX7c7zoFOA^%>&njp&#BrQUftclZHLGx z1`veSrqWloz1BOUD%%ye59azhAZ`~7{Q54tu9La*fZHH-wxS3D^7AmszT+`|AW5YE1vnNMxQv~LcH;;op)%Do2NW!7tQ`32*sRM$%gx47@ydB&|`TRu_m=R3&1{g%RFu=7}^9ZpB!i|Pw zzh0nXm#@I8z-x}vhwc^<$tqKb8!q{@66&)NNOS6rNO9Z_5;NCkW3OvJZX$dyXa zZ^r-UYzM$;1na8_R5KSHXWrh%f3yV4?9r2rg>!!Awn(6VdhwczDcLJ{)mBwv(W4NmPoSu- z$dhE+cLUK_C-Z;ET_-q2qzhL%OW@%a9$?V1;{E66z*s@JH-^Ik7B!FldsHg~!XS{r8kuAhl3(342 zr)-C0HU{9YAFEQgr0jR}Rvljw`tiEC6HQo#{xj^L8BB3jU>< zCVi-f0tt5}E?ZknD8Zua5vVq|AGZS9sEbjtp4|+#Mw!}mGkxQ)2kax_OYcmaw{AZN zx}+j@8;upBenMtMKZ5&JPn+o6(4m`cYXi@B_}Iz71GL=_(M8%|t?kUhGUc>{w`CmSKlk`n-+3 zaEfzM5F6#YCFIAFR<(Rr2+I`-nfn?ld-U6g4uT5xfP0-G+hG@vvfTUy($gIL724*I zGqj>^1eLnD+AV^z|CU@N}<@kYKIo9~Yz@2_W$FG7jz$1!F9P*%(QNsw2Hvv~8G@ zB1;whaj+kHc@+yA@mhssFAChG3rvh&jb?p}7)iQ^oEf&4SqK|8j&yY1xhbnDo$;)& znGW8hOJEuyLR}|JBX7n!!dloC1Qi=?xrdaS#q}CN`cYo9+T9P5qF#Sop~g%%N%!0U zpTSA^nx~{f>%s&f-68R7hKK()O>$CF1^IOv9YVC}h|jw4Dr1h>R>A>2%`94t10lrC zxwISIuCp%E^Aa>j>fatiPTi|G6U3yO?TGYi`4%#suhE|io3y9REa8GaXWfz`-5447 z$o*$>F)(Yz*2S@O)Hg zma7hW4QXJ-x$!ifUg3EC+oZ$p%$7`vYKjJvyENQe&cuK?yMVegB5p#;m-eC3)s`pe z*c#>+xvtzu7rN4NEe}XQPIXW}@V$D-{BM3M^j^aCw_GDQ?@<;29*;ZLfQ|h0405j; zhvlyKOu0Zhrw$s*ed&ne)?I4>NKN|PIO+m{9nD|iA8)XYG;|)ZW+xvzo}RLLp6YX? z?MtU;X3}V1*6Jw9z95sZ$?R;eine8O+)kSiPRT|eUs^NY4<4zPL3qE&>FD-es7L!W z9+}yjcZ-|ivfO>?NVRCQ>|eiDA5&gcZjRbwb`0anG^`-pjV-4@9&sY|{tD2j1GW0}T*PJfmD;${htW9bL0@7%n3?<) z8wMmv^M%9YLObTD1tMY{VqPI0D);mRa5gbAdQ?v4sBcM%q15e*{&$}I*PEJSQ}h%F zLU^kr9^z7D%x#2owuhA|Tx2$ViG||S0if)%o~!SFZ!AL9mwX)-J; z4aWg7CT#xA(EWo=XC{{&Sf|1u&gDr~q#xRi42YwhBcT|CezcegXyIGS2YH_=Klc7O z_GB+NWTRFrI+Kk;pC3z^U~n?jC+T(BnuAgtk_f+9H=zKjXq8g0-b!h&(KrejGpW~^kLAV0;A{;rz`Ccnn=7eWM~k^7clZ)Zcq$fi8Ec4w zO;e`*=EyjSLzsNkId%e zR+gV3Y^qVIJwX4=3G+0Y2`2o*PMz_~dau&k2cjT%M^f$f>i{eqD(0EB50ldo?kI6E%|sew=hDB4vR)D z3Bh*I72z-H|4&tWzJE#@r*XoB75~;YXwvULEw1$gDt=Cv3!OUUTdFu$qQFoVJC5}W zg)+ISxvlZat`-O8t#0GJh+g@+Sf+TD_bMj6OTz;4b8P52gzk^s;mn&!uP%M>aB-So z!PpKKAq*n5ltSCSv38J?e(o3jT(rHSN^{=fM65I!z%o*%#v|N&^%m)OkU%&|aWU^b z2vbX%N$+_1a4yV?mS%&$%{GZ~rO|+bicn}joR~ z`f(5XE#rwlNgM6IocP^Z6y~wUyCd>mbWGh+RX|bH13av350DWRdHGKCgD3<)Wj`Qm zH{{hBTUK6ITMOaRnpPf{6|QSiIt|>NouxHz)>c^gIe*gapRgjTeDGEEI{+ z$aNKD%)m*4!X*LJ-_9#CuE=J=@BZT9DAVj_iRk5!dAtqIQ|*RJHojU3>9*N?fyNR7 zqR1DR1E(#?shm>TOs7+X3fR2zT$;%6crZha^iU3tM_{LR#T)A5FwQq|^k8}+Eg9(z zQ2?|9Y9mL^UXP=1;e=fgUdsVVAO3p@jSl+ogn2`zHX#s4jPQZhOtWmATx4Z&SalFp zP!wPFlf_REcP~1VOv6aWNd`sG;6v_o=N<|d>gy5%kEu5-*>;t1h`8P7^i{Ktu&Xx* zVLFrQG*yp{1kI(Tb<(lbl)gO2E@iPd{I1xd{r-kO7Z~ShIMMyj(T=g_hnh3$P-vSC z82JAYUvq^2Z7nRb1+Zr>z?5huDo848hE2ScE~*oU33YyFS+OKRzv6Yuhw^N}WaM*GxbU%Z?I&8EERM4t`gwwj+uW=uyu<=1ZLCfOhp+^GN+ zf*S>q-4jZBOyjIJ5i^}^1r}{zzQ0gs4~G1-G5L1QLP9ke3jXvh-qg^fF!aJS$<+j} z8KP5c%YpdbPT#g{P&Z!a+SHMCbRCFmL2UzIl|NyzCcD=k3NI77rL$%%4S`Rf3;vg3 z*iflaW-6fvs~SIOXeqZ1mT_nvQvtixgA2qh_K#=82EA7pc&Ajbztf?;@7y~iFirc9})+?XMW)>irqBJS#HnXUf= zu%g*Gy3ue(#!ax5$q>fz78~)Xx#@rJ7IjR%X+J}-4gBhQddvt3{OjCS;B-j2D!0F) z;OR`3oa%YNwrM~V5s1yW!o^cOBD2YU_8bVq91b8yHdCZMt)Ht$s#@&V;!V6Ojax&pn{riF8%r4LDO9)q?AM9N(x}u z_kv8UdIdG7j>iHrQU!@Fo}bei$pgFtUL1!@ch6x!71)O*UN}GTZ2C6=_U>DzIv#eL zY=-Q*#1(`||6*;(;a@y{RalB6xGN#tWdKsH>2_q5WQ(9L-zPdN>Sn8ZPXk)8i^Qzz zO?jeAhs(5h;$PzKgJmIHI!jkPzid5nEj^MEfteON63Oce&b!b5{iM7tXctOOtPDxI z<}G5*SsnDhCyec((fy~LBs5yEQ&}~Pz4xiU64RO^pjeA65dug7W;&YEgCDr8`n!Za& z8CHPuP*|Br4Q^WI+dQ5kbb+r;cc%i^cGz1%zXHejlPyvTk}5wBi={-vm<-`qW|D@* zBf93!CJ``JysNsR>NZeLhvJ9Q^v9RFqn1y#>I~NJG3+>$$0JGExH3QS%_p*Pxy-?h zFb)$HDNIcfOj?vH3_v2bkmHYFOg=b+)^|gW^u2MmFzSi3d z_QG2t6rLnns&qusfWt@ddnGq6lze>+LsWk$v+<~Eo?}!GN=@&^>DVgLcaZV!vA@H? zRVdbB=nYDqwF&Sr@l8{L`fu6sCpj?YQxTBJkW&cGRIexK-C0fhOt2nOlbzyNsGm}e zp8|J`W==1!RzXL-0IPz`4aq#R$TSk1^9bqR zST>wfSrm*B_=2-K^g>11u$|It`Ny4M9Q3vF8*nd?J;4k#0nuXlP?6OzngvhH6-u-! z`z6Vfif5qh_c9e%yd$v*nvi=XnUhV1nGL+DG4I9`b z_FS8uxe3j^N=e_2#T9osTnyBk^i!U=!nwH{XBf&sR(J)uSNwbIbNU*^Yq`eu<#Y#L zB{S(aqOw&RA+S|N+wI|&isH`MhdmQFO<&yO7|Ov&0^Cgjzl|H( zG;27s9W||S9JCe;RGCh~OH?d|P5GCOd#^Uo7(DQ&&CA~&ZgE} z-EeIr&5decE4?(<{Bsn}jOxgLPmcD)WV1?6x<@=xWott?q1g1m2c^8er_rtLUdBT; zh*|d<2I}$~A>$Ou(f;lFCYyK|-0w?mW!HzJC+o}EA5>c)=K5encRIm%`PT2?o^dJ# z{k7$gZBXuxn zID;xx=Sxie`N|I|)ZTbGY(Fezja5=;I-PCawd*L;m)b54Q2y6|_U@U;0MuKO;6v-H zUV?YcuSVX^Pge)8nk)v1yVzCydZ5yX9XnC0m7?}rb%1AhRgu($bFwV-qzIIi?lNe^ z(`7fD98FY+`-PtWJxB})*3ojFgUfcGOGb5Qlm{^xN=F|;Rl;(R5(qvVp3_M2&j>!! zr-?s##{=&p$zSL*JNDmM$lA&;1h|lVoN9P}KUc@V*4k9bV;ttTq_i;L$NRYa{Qg)O za~02mu1Pwg7dcG3=o4|w-jv9ofw zP8_)+i01*Kjb*9hlNAXy3}FwieC>73UBGM!f2EmDT<9MLxx2@8WIH6^oGh_t&*&Vl zSeHKr9*Ijm{-TxwZuv_AEQZ02K_GL`iwlOS9PPny{BJ87F~THpApIZ?*Rp(8R-wmc z(IC{$yn>+V1@*Umy2$+7FVG(6_#_18jvyX_1|E}v+awocZ1b!+T;6>#B!O!JSw_e) zkz{xKFcVe{&9Z4wBTGqMx4%7`3FW_Uw5fP%*Dz8L4Cp2~PiVD&-S|$V) zWYL`zl*T_gjJ4a*3`^xM9y`8D;amT5J0N^`+SRDhOFHD9HF>{p8}{_|wwz?=zH;B{ z`DNGw&fix%R8{H^vT+r?YXMbn)+5?{nrU+qv8DekN(6mhpZeLJ-q6$Ll$Tq2UTj~W73Rb%JuR<=+ka?C4({rD#xro&eb*N0 zW^Nw^d%azt3~YNGHCl{er|UBn7u121`4T=Abx=vs*H!rZc}l$E$Yx;|!O6jkYF$C% z+^-=8BrMxU+xbk*Os>Rq%%ppSGt_H1&ElIZxJ6%ZUheDqCL+7fpMrYtGPs1H7RqCA z$0q$sm8;h&PHUa>>5v-Lum9apAx-zG0q#|NW!U(yJA47{ zick^|>8qgGk$1w>U33w^mIDg+-6wpKoCb@y*x1IyME2$sYZ6Y;Fe|&V#&pslzqya~ z#gF*cTcZnp2eIt|9qZw|8dL3WcQ`H^D#Q)*DZoz7U5R7#fhkQwU_0lYA`I=XL(kNE zq1=*SGw1$wArUn6a>k=AKjTO2tv2&Q{{0mu6TA-|=Tv(sNL3G3(7;MctbmWqBaNmG z%VSQH02n*)zx=cwU-leeq<=pBF!}~ZzSvj6fl;5! z#J$^A61b^M^T=MIFAF8Qh=jV&3J>_`q_7Yvx&)eCiKG*3*uK{QOUX#b{p1&xQFA!w z#Boar_OXns>el4Hc--U-a7S3Skz-`&I$Kh)VvN6pB4M=?Y zNylfX5&m5!*Q;Mag-*gQ=+W@_1+r#KT!OPMC8$1To}!J_g4eQY{jDO9gW~wQ@tSP6 zS<3n3YWn3*;30)wcprX{(vrEGTSx)TYrMi6X;hrDYl%g3x9IPR5}d-jY$y&Pe*+W; zOp@`ma^Z3l)o>)}9jctF~$6_QvSwe|_@1illUuHu3yXPve3*(xDapzM% z)F+q_@Hd2ZovO?u&(Mq3AvmbdqaY@?Z71r!!tN6|>J;$BQ}_GMMmUppz>i`e#qx-t zy-WYCR`e3Ms_i|apH-`?1|!^xbFDbOl_?Qv-!Q+c7`1NMuv9>83BaA+6@AcQ8(65i zK^09)i$(}Jcb^sBq>pPdcpr0pf#flG`^qf@$NpScY8bjvJ~_9UHu;%7tK@F?uIR%hRmgXDkjg>Ou||8dQ9Ws+q+3kj9i}_UJ;zX z4cj??-r<~}d|G>7&*;q7hOsTUDKKB~Ih@#;iN2yktpob591ATTH3}Zf)%IO%2?tAm zQg~DE#Y@B$l1`FT(i>5EEJ6#*PgrJXb)3a9ja(#>GtozWG4qIoosSgiAb+zZficw3 z22_KA&;eC*r1v1yTOWF4y+ZCrDbp`JxbT94ir#V?|Ej6#JN)k}K5u^Fol>))I&)eV zOhKHb3=e&l!6#`C`T+8)FZpm1SKuGwYD&G*3RB_ohvB#f|es(P!rLg#j^4H6MQ8Ey`1_hJ0E%^2i21^iEuP{!K0! z_=y+aUnjTN*)sQ+tVqeT#Xrf@k+Q!@3S zn6qyRIS9(%S{OoMRenMq;rt_6BD#6N-mO3I{}odIqWG%YB8)x1k8x0lcZd?4(#{iH z0OtR-YhC=u(|RO@>T=les^mkv#Ka*Qs&41-BKLzZeO;#S;B`$?LUP|f(Q4cD|F7~A zm*+(M4$)SDA*+e(!iyp15a;Bwa<R)yQMo*?bqYB?yZQT!p^68blQ4{(eioY70Bp@P*5~TEOWK9;v zXy?E$JoBI!4;*fpeo!2e2P;heBRCBIhOlXqo#+r;gUaV`$Upoey<$9`1s)pAA(YO) z?&FENyy{3ll{lqo0^iyW)b|M`EYb}Qx(LdbDx`uc{N_DeI@){D z4@-OO@y2Lj-)BL+EiHgm50Q@$js77KzV@-+;AOwR#TXOVumAHU};4dY8MQK5{0xFON#~GfJykUM2W(s^nrSW6BC+!hVigk1Md`7!1l`2`9 zjW}u>L9GgX26y)1nL#t%0>%zw*)J@rbl!5yOcjR(N^Rj0!E!6*uUMVog(z4MJE?$* zYUJn67NJ3VQj4-Aa?^BYX5RYmO@Yh-1GP$9PP1|Y_PGqPa-GXUNkB}#7^SFk6`!Qf zb7Grs4;5_`^ck$SyAeIsi07Ku{w!nux|_O1a|V@)x#a}b{hL? z2}Ga4X>5*F2K0n?vh3K+l{rQLSb+yTpcU2OB0rd5rnUIb%ki3_LghbBVmq$MZ4o{j zLfTG`B||S}aVW1KDq~GEB%|y6b$gZOx*y0;-#mSZO$%|D|lg<_d)a zwXKa0Bo*G_^M?W*rmMEUd$!oCG*H>y=F$eJ1kaOcr%6k5%u|4Dfto);mwo3D40unr zu0Y_sM-l^55`0tIkM%PBN%sti&+mV{u-qTaKYwJf{CGT=A6!}WK`=(;h=!4WDV-s) zxi@mHAq)CJ*aT`Qtjp)v_IvVrP^lj(-vgLzy4@Mf@BNY;LN`NEuR6t;XzeF&*oC`s z-KzK#@l!|e5Hgrw&AOTG$(67t;c~kEssd*^nArbtvs$`a0-36q(Ge*N`VYX}x^99# z@XW=(xFgV%G|y!Jb-e}$MF;o_3*Ho;A;^i{vHtt5-9ulKElKi`-{0Vms*xvLF@BA7VZiR9_WTD0wT|52Wsg{b$B|t|DV-!Ie{Cefp{*n@wYl zvIWm?-DT+|$$t{aXSF&mqnT;X7ljyisr(W}t$KiA`vHp;{i~fX-+&)%R)!yWpZ9AP ziGMBrj>yz_V*G&r%;BVimNaPAU`TAV4{-B;*7_yYsuEjv_b5PQI2UImtV(+@NQQY*8n2nr9`(?M{ z3Js(ejGbLh?~$3>Ok{J%-ZTxeZCxmTc>@;8U;dXh^5CD0wO{`n=5b^@d&?E1ZI|Da z_LEv~J`7bh?34e~(H{97CBb*1HSZs_+Gx6=$U%D%zZF~&GGI(SpV=A~BnAowj3{BrvQ$AoWIwuj_ z86su@O;ezihmU5LO^8W?T=O2fU|m+<@xet{RrcRidNTcB89Th%?hE%|^NB!5&X;r6 zKF_hW+7t{ zg3{>pAK&rI4QQ6>CTlzhXP2*YHl&X(INnkJ?%8_ASK=*bfM_oeVK{a{uoo>1szk=L z(RYIXjkjrg_Iaj7%K@YMeEBh5pzlt5DAwfPG6;Z43b1y1x$Q*PTPGUG{9K6(vv9F? zP{L{GboYB(ZTVaGgEWw|=$g-Zu=iSR<6mM%J`HTq3tq7%`;PHDj%W<9GYGDbC;LwF zCjveXSg9xj?7rw3?=0$fhXlD?{YYB@|Ej%soOoCDq4h2;$&2$qvU@SHbYfXH%A?|g z4;lZzt$sIp^c-7ft4CR{U}8CNJ>-z3$hYc)Rr{ADUQP53S^Gv66KDuK>73b^ktp{< zMp#oXm`7m?A^dAy;fHm#ZlRzF|B~}(G3;mL#U-wI%FcSg?65OwlxNN?5z67y4zbRV zNr6(7%pKilu@g%2ztUSXul$kz)1|I>TtyfgDS0_HTE8F468dOW2^{_dzv`(*gYl&p zZ8s#?_mmdDCXe*;KIlK$AWR+!=(+Jpe}I?5`}sllG1~($T~aTIkK9l;+?2ts_vRhf zHLkK1#+QlIo!j(;@(W%kIsbdAEKC;zVIFHlKxg2zbMB4Pb~a#)Uox86K8c86S@@uqO3u#?h+f+-r=9b*ShFkL;M%#$LN& zBv!@ge#{}U-O%UbeIvC*_Z)#Yc3W=(`pCJUX4P&dRO^r3G}VwUB)g!`QaP^>so;PUCF-0oCk3fnk&OQZj*4$DS|_qO zQ3MeKWW4D@Pg}PQIZ-=)9ZhaLi}^06M%k%{Q)>+Kzl-T~e6r@DV+^Kap;ddGI( zQi)7r1hr_QOOBK1R;2s$rx2A&q)ZSe;# zQ>)L%uxl2z2VO(TJhW16y)yLE;~MjUEGox|LikO~Jd}U`vQorfp$m6^;VyIc)fg%1 z?L*$Qo%JlYW}5uy$X5rL6zLjK)j6|a`@ju5e^4puA+>7=%aMK164AH*H+!C2^rm*C z1)W%^?czX6d?F`={-5S?ml6+VCePl{^0CV*WwsFT-d!%%!?7{PfuaFtL!}S`RtnwC zI*S{z_^Kw-0HQ*Noj7CDP@-o(l8pR?tTBhAjYbLQA-t&O4|hJsisKE{0Wi4u=) zjq_YC`Lls?*D7CU==;}7WiKr$22lU3g0iZwcIcNhw!TrK;Hasv_)*XU=@zX|;DeEF_n*+-Mw~Mh7{W7si=9>c<^b!UriY;36b<}PFV8(YXUTD9)KO)#oxDn zF}O26g@NBLZnqVGdwx53Y2D>N%Ke_#+i^miuElB8%`5?rty zd%oc7{@7U}T&PpJOS&Jy_xcUJSrhZtLFm)&@>lm1aXY+i-uJiaUApIuD-we(A@eEu zB-(Ra&Des(b*MMNG{4B+Yzh(&qwqsba_qhiYamJe%p0%~YShcAs=igsS-kjKSbG8G zmwuJGB*2flRMqjXm*;lPsYleF+Y`W>n3o1|G2S}oSBSyXe+jniwBom88XU&{^Y1t zqZxM4yV|rA#!nQ!?cC;BQLh%u|H!$IZQ{j@&6}OCP#wiFfB7^4BM|Z;fUp0HPVHRC zAt|wvPG_s^NB75Av^ZD^805MXfu>0+xZ2Im3`wuACm5)t;#6=ch*qXfpqsq%YgMo9R2!pIPx4&oMCPr<$p7uu zj&3euGs4|qLbGJYpp$VGo!&WMBmst6j+t5+_syReq2R92-rOW z9$YVfa|nfjE}w#kX3)A(mIO~)DRLj+=_R3i8Chm?o40Zy<$ORVRpR%*@0?WWGwZ#CN2`R*bjfUX(;-3kv^6auDDi z;rQJhPoZ8o+cf?`M~%`pT3T67{P2KdK6%!L$`|_}2ioKM_dmnR@a~JG7%R1pPVP4W z`mFal5H90c?rS@4zVjE~#R_tAlMDJ}{(b1;2SxWTo@;Jb?(d8lz$uX2N+e68>fc~O zER!bK{H^D`X)qcW1>2t-$VZ!j^SQQZ=nXD~V=867U!O(xUeZ%uiN1bvh5I_jNu2AH zx+W|KJ=vOjWW@@&1nA$7(LbNfYA?9UHB|?XeJ!Eew65+Uc!RO~WwHGG(G2DSXP8zT zXJ>2LSc3YSO=Ln^SH8#(r*~iWU%ta&JMPt(w|aeek?Wm#)dSF{9$d%`maMJSq&EX; ze*Ih`aid4Mwl6D{-|X}Uj_wM}mX5IRYL9tQFLu@{vS*Pp%>5Vr6^#$ZNe1hri4gzA zRNyG(PmVE8S0be#Sd(e%UalCJ_|39dy7rl z8*9xT(i(sfAD=fX=%N#A_6Y9Lxy>(VQuROGJnR410AxUu$Z4LWoWDn~v{qPZNa z+{JD;`xkzvWZsx z%F)rhAkVEAyRMAk^_rQ!mM6-N*F0#FjPh2{W2j%{17 zFM@Bs0M_aWla*x1t*^;eZHqpN31(a7~cI6I1kq605&hpa(j2P87Ezx6)<@1@# zEB5~ZAfDe*wt|Y29{hp)-eH*1EA~@ytkm)~x_E2D;py+v(dYUAjZ^`M%w^!sGamYC z=FR(N>cO{Uko>Bh+sjW6bX6Rtavo3JGLyQfooq4yMc^GaBQ2h&iSd)k$m4%w#IzdeJ?$D(DdV3_XR;~ghJEuo!jR2r?y~eV*6CSVYStZtxL%Oq>b?Fz zrn6Qs2oWFA(=C0Jgq;@{{_|{7#=CivdV}u7o3Lr7l%-^PHvy`rVPos}em6>>CBS^I z{DdHzNMH_;`KLZ!?tqR}1=5?BUHYD5+U9G`?!@z-z%hoE7qer%deR>t@=C*HYz4k; zP=HfA;`>=(HuB8<^2)3>b3jk8zH=s17k^KFn#O*PVH=xRW|90Wls(=f$c^j`pub2b zwwicP_bth-dB&MlfTBjZ7Dty2c4r~Sbi%~CgpXr(TfYKB`gT{#&5bsY-TB@5+S)6t zsNXR&*C$TX@!4fi7Z!y>jO-k8(F%zobfpg(yLXxuo|dEV7+vcqS5{C${(T2^y5fJ} z$-z}%PmiI)cJ)?W-^LihY|D61(6@glCdrg{bwYiTzBd0D;P0er?I6}H>xSl<6;Vci zY88eaJ%~@p@1AD$f3i>NH|Cc^Ld|gQUCLCilSxk$AE>R~KVpkx?n=ZY*;kv(vf=A* ze*u$YM`PZsn{g}mIVCC0Ff*0eKpe~9<1d(Qn0M)7PX*wDV=l*EAEX(ve%s?D`i_iU zfBt4C4CQD09t$%tUbW1}sSK0kFjVO~f$-9U==cnZx8B9fK{BOVqZ@kitp(6JHfl6R6~-_FjpaQx(Y{7W@GJfX)#JJ1;8nX80B@afdP?LUWr-E^l+ z-&N6Z%>H@Dxqf%_LbrX&)DXrr=5KDM>I<&DS@HKi6-i)jx-c7?`a6V4)F!#Puy7 z8YaYMS-|23xsxBi24r~XmQSU)2FtlEvka<>*&2s_(Fu`t|HgL8Fkm?)V%e1NJrP4R zgKwx(u^^W3M$YiodT3CpkdWVufScIs_6xODts;ces(ZLXqb!38jPKicMG*q&+Ujso z0!8_?IZ5mrfs|7qOC5XS(*{Cq1 z)d@}$o6-8g#F!OYPqz{Fmd}s1qv}Wc^$A7C1qwB8<>_5vB`^xkl#ECnHGC8CZ;cq0 z)wPh>_&Z+hz-BW?-fQ~b>Gxd5eDIDfAQ_?L)D&)|OeMj1KDzCA723%wd6m}6h|I)3 zPXXsX*jopuJXk@bKiKJm+pJBV1&tHDwFIYu77+SG%O2CnY`L53J`&?0uIv#kBnhsS zui54K$OPIu#y56P7=ii)m1*3^Oc~sRTSL!|+YJC|Bae`VzC5vB5@~2h9$`5&;Cg05)q zT1otVKpA0jkhDT~SEg!(dkGp{Uu&ymI+_V}Oi_9m7~7&fSFHfY`!^t_b#Z}Y7(NO# z`q;EqyoG7cHgRMtEGuzz+f_@-Vcr})wEYJF#fRbED|GVN{`<2A3u}e|;SVZ8>j{RU zZsQOat|0$)AO2t%FKS+S<3g>q8hUw~gvhjJx#2oZB&BW@*?!$o5zX`PGm*p+Umc-o zMg8Z#>nAH4ZFDzcdKOP+G}QS!%4jPhl{?zCpF&60p%m~u*^-PTH?dLk@O=EV=b;;8AbeT+EZI<)D zrz4ZF80frEoBcW@r)C183-odbu>c||JHsB|lhE0U4ygwcw7&=`eh%WCFzio_xJiEn zju5ryG*^S%L>B5STLlLKq^O4K5BTo?Na<;8PqZKN|Hi+yF*7PRMbSQ*Rj|UHL@sF0 z`YGy`gcf2wX8&BT8Bd>rUw|L*K}s&_lT73ijlvpMrh>2pa^q1fQmJHxs{oqw|Glt0Bj(z)157I2K^KRE^xGBADza1Pc& zBwp3Y-Hkk3OvJ)vg*Fp5BGq zP^&A6s8M|4SU<+zJx7w!>u|8gB2q$ByZGK~&5L>^CY3~u19DDhrCn|3Z0QaaBy8rI zIMqxGLp7A`MEv~520d9M^1Y9*ISPlLzAUm5x{R{)ezATcs-hOwc+(hXCFuDzVMj3} zYn!KN%NBWlSY);6o4uTf)O0?%79Dl?rVfOj3}JzcH%s=ONZiYHG#PbXVW47ox;>Yt zPEU2aXM}QyOqf=;czT;-ea})&82B(y?HsY`Ik-x=VQpNO*55uAATWfb{P-)S+Lnuo zMbplZE>s=z3eYtSM}&#Dv(e_LuEbuutm%v=a`7FM9I+*+gj=b@IiZpAVwEq{@KFSt2090;91EeOolZ*PNZmF|dQ zsXB6{&3{jmH1~e?L|j?T=|`-fBu~F$EWe}=yw9RgS?%o&ZKV63z*I^FpLUo+SIB(? z?_XSmj1M=Fuw<`9E7JiDfod$Dq}b7IkXa;wR(TOS<-S?b7T?uMvoUe(TjOFEQAu5s zMSt(BMwH*L;`7L$t>zc29z5@W!*3^<{Nj#&_ zXCVphXDnsZIT^e=pS%sb);vFbql|@LKMOw%K9Rc<-ikP`9HBf0cuDsIfeMofGaOS) z4MrN9n=V-kNNN+8&=ti{V}S`0GS)_pMcz-zcrt4BjBaK1E9u|8jrXE_$INW-bE%wS zz(6m>g0_~A>)^)sNscu-{o?gH{ouNHlNZBJKLPo7u>ag516Qo^4;!YCld^Y#qDG5iC5xXU=8d(x;Ie>3tjr<>YQb#!e{&Bk#dAeLB77t%aU@Rm^qPm#;bW@HbZyXdEE!+aVFnL;gwY9wShWQE@*qD0G zo%voXlI6S3?uWL4x&rXV?gU$7hO2Z1%SOM`rIFEJ76ql5^;ZMzRQNwIgl8$|`kdG4 zHxt#Wj5izuvD*RehRfd@?DtEvdUyu(=VFiL-BpeHR0nNmFOJ)0g^z8{DIxfmI!6EA z_GivrAA6rOPQauW>5i}WKYLN?<8WbY4l+TuJ~=!)9tkK@?jK50fwP{M-4JAQ_zzm< zw{8Ve1$aGbdV-L?QtGdNjH1e0l$ktYG3UZClD_0FxFts|$9q8PHs^sI!eeBt0MiQHTEo(Y75UKj;xmGkDye%9Jv=4|t;&oTbUwv5j zAws3*FRC}z)l$FZN}N6(Ya+naRz$TL{y?~}tt`+c@jp9gypnAd?$Q=Ak>XOt z1llUA&#<2_Dujz{rcbsqbJ@+H_;eU}<#y=D+K_t_Q)nWeqy_>9M&0lGYLRLQ(TP#<2HDP59_Aaq( zE9B?#%j(%US1pD!tDoEkgeZFDvHBc%g zm-$72bE1UjLv(PV^--Mjc}sOIMH-E!7I(o+f_o^%TXvJOyxforS=y6Bx5d)fpct$* zEs9pEvsnF&S7uyhC2a>ilG@h6E?P9KXL#SuqBOmjI=f*z-d8e$bs{3Z@#%Ur5(JCH zH~bC4v#qnrD%UZiY$cUfC?eoJ>4PObID*#}tpmlHS4G?`T_e;8xBeExAO{W13vk5g@a~2K7C+a-|Iu6nIayZ@u@LK7wjxy z3~LCLkGEb~6Ma#h7ZfnV(j^ z>Pba}JJyLi7Su)mhX*%wxStu0d^<+eTpCQ%Na_C4?fbHJBar2X@e|OTry_C>3H@|w zONZhfkCGq*GJek*fM14M;y9_>k1VS4)w{UFKu*RDa$%bWrdw-N-?PaKpSnLy^eZ3T z5}eas4T89k@bBBjaj)C;KXW%4edZq2m~G;~Zna%cW>*_(1b3a)mCOXTMQ8a+&x)=z zLlA*3L0uz+;(J+7+}$O)_a*#3%qlAXPs*we+Bs6MMs!=6{lxw7MX29lO{eN=``J07 zwe4v?-Ra^aJgoF?YOnRl#PA+~5MLjxnS!U7TxedBFsbk((fd7RVTC&J<2Y$Vlk3^P zkB+Re&4`K5^Syr+!4Sp?g|cGv>SZb5qAv*s9wzH$gVF3_HQvr|r_?sOpXgxJ{cVy^ zaGCssyq20?aPpMR*S3rvjNFNr=YrQ+h8AE*q}}U(mUOcm{gRzpHNou;aE)_j_37%f z_xi(s_;|0=%FV@R#qD_YJ4i8cFJ!eKaM15pGUT$ zTlN)Ibp?c6N_wI4(t^t2nsVEX;OZ7faul0A5P>kczL3H_ts`uXCaRaD^p&seIp%ZiqAF&3**QM>wB9SHQ#o2wy__H{yU2?=IVz+4|H|UL^tQ<&b{*G_P@a z@OiK+T9OO>ALW>bBdvpri^2S!cNSYX>{dj8tHh3kct-zmlPZhPDXw!S3jcm{ZE#M! z&RrBr^0;hFF{$IB-U-E$znhI^wt732fAr1SI=YxQa@rG=9|fPK?oix#=dJD)4=ll= zK11O4Z9aN=8?Fd5|G<754_>G-p6%;`q)rTg2G#E1#P{EptH1xVBC1DT=?p$I0!G3* z&rDbJ8$jJV<3XRdM``U=&LKPc4SqJ&kkn4R{o+&C%i!Zge^1nhpaK7~!)J$TZyks( zczxzzM!KL-kndodb!pr0u{Ws7+wvgtU-|2f|t2BMuTG- zRlTSnCteVr!nd&pN@MA{%^B`@pwSwm&Jyo}P(*8sQMeqJ1U?9$SKEBYbj5vndPvhPlP4)kLu4B|CETrD`jhWN#4Z<5Jsn#iSUnNwuIXW9rV@!2d}$M%LT`$y?HaA2m# z@ff}2drBkFV471|;(xGZysyNb$IPY|nvLdflNS~5TUm{@rONLl zxrqwLl26@ar#)5LuBjv6x_@h27aH4Y(W$MVNWp5H{Yd}w{kvJ%%5RVRPl?w*F5AYn z5dtf}FW#ex2V8$j??%4(tF`?tjRd)UzIQyG!g=W{l>UzYcnV)mYwG@IKU%VCV{uWt z`#!ogPY4sm8UH|J`B!=s$%Rhqhg4uSesV8-#mV<4mF-iMZ!%AL>HSvBLD=k4IW}19 z?~zl>FIo^(EN(iqV+}~g7*vdJ3s^_0OdhyUhVAvC zz1V_ty&U_Nt-H8gY>bI_I&kN8&(&*qCdR!JLt0APveN4Y(q>TrgtSZp!uQ&jA#JtN z9}GrVGR$IcN3>%iO?0zrWK;>uusIH1kpKAz=Dg%+AT9V)eCN@0olUuact}|ShGrRP zMqesjai6L9r~WO0_0}{s`8Q5^;2e);!Z8KzqYs&UFL?b8_+ULXJ{NSuqxaTrl0%2X zj%orc^*eXRxVLYon5c#v$!dsijc(;#&cGgRzBRD-#S77i7uCYjt>YbC9oe@VL|5gk zO(%7!(EJo&zS#J|4Z&}68G-Gg}U|tn_Wy|9xvWqCRC?do57&qws_|0cH znRt2j!@n1Y<=0&*Z)OO;<>gttl>+G-4%aa>*A#8)JrX4#<#xec2k6SVl*>w1_SsYj zsy#QxT@PbKq(B91V-!R_xO`TWm0ZcNJv5)yR{p1)j)hWI(!sp0u>8H~SV&3$fP6+q zzMcxdA5Wm5$fI zJ;;r{U|U+z2+ydSQeI6y3Nn^>u}Vg-Wtil@=pn;+gxgU8kj3Gp?mV%0sv)|n?xQ(V z3|9kc2{MJ;!}KcuZUzX#Gz=|r?*nJ1hL+$|R3#N9U&9=D+Z}4Vrj&&Q3Eg9q!j`_? z$NPQOCO?f#jsW?;D6J^&B>><8=fq3Wqv7?2x6l1q_USO&I>AjZOVY8&N3#S!YpYx~ z?qVg^FGN;$0#-e4SE5Vz1da`taxEQX8invRXI%SfJPh0nrJ9T-D=m%W{bJXDr4wIe zS#5*Ic=_MC$jQRGo^dB$K@;*aY$eXb#jhCljTmC?2!Jg{>T4kP)F}f|>~VzIxMO?r zj{m4cPS0*GQw3J>)RaI(rSRjGuI;wr_(~^zZkHE>eXdgmM9&f4#>1bf&bo;w1hSF( z^WTQ2h_2`vqrHE^_N!LKu$oe$De1}D7?`jnow6G>elp#p1l)v~7`L$34tdUAi>wa? z+#WJF19h5Q=ZBI^4{H+5c2LhezK49z#8)m2dBm)E(5? z$IFVO$Bin-<&NC<{0beThA))-kHpa@Y7TNtNBu80DE-qmu@qX7nK}L~W#+S~&dOEz zgWPhBig(UL4jM5a-WE;88ge78m(I?s;Q%&V{89Lf1sEPO_dlg3Bec ziq|x^XQ7pA?F-xQT{bB!;{1XH<^g&%R!jvFW(ZvI1#Iqsmymi!*Yezg`QOjg$^^O@ zvHkLs9i;Ss#<#HSmSaj{xur;FvmxN40v{*_pR$|`%H= zWo7Z=2H2ewC4rp`IPdt7D#4&2+jl9xEh6tVc2{s5aBIDt5DF5&6;sn@*%vfL(DyhP z|D=!wbJ!SHP*k;%G?UrATT~dlJvaOs$!jt?^MUR9Nk2-u1Yd&i#cV8R`2p;;VmQL` z{+YL5IWdGOAm=*y$#yY^ml)&s7;6vYJ=x%k{w!jNMD0WTq)g{NXPPlqY;W^fBA*;l z`J($CJY6`$zM3Zx&v-(Xu$hURWqI$X8%=q=wc)crKgFl1B51d=FRoDl?tQawEg!kd zK9H4xx%6gTkyHuKED;e$Db}W$?b?pNOj&&b{k6L$e9QpY*H`N&Q!X~Mr>bclYJ^4J z;ba~Yop?bCrvbjJ0KM6W7`Qoi8UE3lo{slZ&$wrQ@~}O_pQTJPN@x<%!L;~nSsT8- z9umZ^gEWqCxtG*Gd$xpiVrs=*rsgtaYmeh-_cCpNjre-=4b{1!9nb#Ww9KqW?RQA* zdc2>FlBu!!Ytz(mG4Mbu<8X*yH|s}UCzgHh$2YjAb4wJ**Vd+H9cL!6Mg@L_@~>fY@*FViz5tDOTz!bg z6&{OUz;V1iw$#~Uhhc?G?Uxhv9J+t9e^@W%Q~$Xge72A}h_`@gQGW3A7!yfml72vB z5q}`qWB*S*r@mahf@30V~Twm+lAi+7;3ZU99@AOQqE)Eq^!5$0_1@7fjtgSGTMHHgJwF= zrA)e&ctNxIwU!sI#WDtZgPeWX3KV-#b@Cc_o&FsieJ$l%P|OKJTN1lBdPg!AT>iW` zA`1u-L$+jb^{UNl7au`egmR3Fv-*a$aYsKc0RyvXN}FUE7TJ|QE*U}mqIR`*S6jb? z>;hCIl-=4i$t2#nwdpfS=(uTv3NVBNzm^-KBQ~>h>>e?Fp^IMi1~A0>u#Sx%lsdL3oX6*oG``5)!S9rD?fasa zDh#}ayO8nqQ0_g`%H*Q<$B~qRM)8#11}M3^6bONt;iE@9NH)G0_D`1QMno(nR{PL0 z85j18H-y!ni&N$mf>V#<1_^#1$sh-i+Z!cf0D)Dc1Qf9ceiCT&?IzD${!7)DOLcZo8?MS!1GxL5)ZBoRE)JOH(dQF-Y1i}je zZc1mpZS7LO>U7Y4p(GmMc}8l*;g1ii>u|iJyv#5WB8BU8vp>5XnKy~5(GCV64Y8GI z$o%x((#Wo~&HT=EVktV+M}nJRi5jY=cg@BdNwU5z5S}@R?U9OTA>6BD!RRqP5wLeD zLF4ett-i@p0=$^vsv2Ie^weqFu!V~;c@w2@_q7Ok=Pz+n2fi3ma3J=2excuTFzBrF zn1o*_zg)R;?4!nW5<#I{V$Y??v_IILffdP{5WMY+;^=r=y5FMvCkp*e_wr-%MLJi_ z*020}--JvHljPN@e5wt#eqR2=;5U9LhDX$=(@>{J+;2$>fwT%^HNE_&Nlq-oLNCYc z*6h5;E-`OMF8P-n4M=_QZW1kNpw=-?z+u77F~Q!o(>#8#k#NrUiW<#GdR>dhlBp#rYhl-`+W&(`(mtse?e8)rR!r?~t0zKj4E zbawOxLlT*JM9s}_+4TqewAzWP#bl9yNf_$VOH%vzj)Im7LvXt-Dsfym&`2QW`{Jvs zM5hUq%!_lFZjvhZ;{8m=#EzJ%* zOI3kiTbeFa(vrm)UD3OuQ(3l}qa~Z~68|!#1(%khNliApD9!A)BqvoN#QEowmcf4D zrUBDBE4N^5MbKWHzDhfzsONzr;SNZb^ltM{=SFbfEz4!6MTha-uecsIXXJ`M$BPn9 zqPv!l%(|^y4N%?hlPDEZRbV;Nmtyf0XMPOIp&ex#$9=i$5frws5q_9JFX0j^6M7Tk zMfu%)IWD-^@>Ril4E=s;MO@Qo9b~m5<(E_)ByOtAm)}GqrLU=v)M<{0?q*cK_X%E} zx_|EzzT6fjjP>}oJwq7l|1EfUBkGLc?qzWn>Z~UWM|ij8x6%6ss<3q!liB-mYApFIT?? z<$Ua(`m6@2$u$8mSpodFMNQSd210mGqaYp!)~5FjgJ3A#D4)HI zG3XI{Zv6ozKbaMP*Xpo%5Q5-ri#dDL^5ZN3e8S%`;yGv7(FW7Led7q- zUj=0-thNS&H@_{0AvG*6O9a~PMNejAQ(`^+%s)S=Oy!F9ynXTX?2N*9MR)~&Yhs4( z(tl!W@e))&rPB&yIQruSs`%CG8UiwvkeM;7)Co3d?(~e~kp&o8`XW(Z(zU~G9x<$< zzR)IfmiJ=5q45ID^>3x$JQB?T_l?bsodKL% zmqfy2I?_y~D8>dZ8S7{c-b{*Qw1&23}$lr!8k@hv~s_qeaY+*v^sX=#97Pg|=C-cfPbFjoW>f%S-|-xlQ<+ z;UNga6`vXOJv3K3uqN6*Xg&OT0olUtdq_l#w+g?;xdf23j)ovyR<0Mre8JZ`u&vID zIfx_PzB0ysJN4AXk5M%<__daq#b_@0TT{zcEW4z~O*-P!Kd!8NjZ+r$C_vAqsuz{9>y*GoVGsa)|ajj+Z^iUVs|Z7o?nM&8-YlRP@9=0e)74lSnhW z<)0)-L=Hh1rz93HP*$I3WG&ie$yhEYB#K7`WrwiU(_@O)aWyJ(&A&`B@PD=G^Mj2p zk5b?-Kxvvd&<`_6Hsg^yUiCV-LzlN^ot2-{>inh;dr=v}5oNL2z8vaUt$fi(STYrC z;UJUci^pOVo+(Kyp^sDygKI^k;U9_PH5q>5LQR_2;zQPl$;S@=B^WbAy7ShqjUVhgQ+H=`zQt7TaUL$Pjx zqq-U7h%Ha%J@CM1a)ia>h0jG4<;EbR_cJjip!}V&g@~%~7sO?;DbwwAoGNA4j4Rj_ zThc@aj|*$_XSS3FP4D=du18nV%%LD_>i0mQ(|lDEOuhxafS1&H+b_Bvi}fNI8LX)l z%}C6?)|x(LFi%s(r?rIMg_3PIg|bO;!V7K#Fn8}XKjk=23`0z70HvKKGm+l<;By{Oi@{-zYRyyq0EU8_7a0_)o z-kW;|Sz>%ovsb_`Akg$I9`H{WIJ@2G(&Z6=Dfk}c8nnXY$MpW~&5@|vlT(McN#ICN zpCk{)7~n{kZOzH{t1JR}x}uI$0@r3!iW^$e`_PGZ-M*v{jBm7Gc5J$Iy1&qV5x}p~ z#nDXK>SMw8fA=nD3w5V>asx&&X4H}{O`cQ?irg2`h!Fs0j3h^k8N3Y9PmXHu9JPff zr8!%ldr^8862^pYA+-^vg#N9{O(b3t#ziW%95*NddyZ2$N}ya@{5#ONXbSNQx%IC$ zH;rsGdH1F;3SDO4{XOc&xrP!r&?JYX6xx3c@g-|~iAm@+&RT5G$66_M=g!S++*az5 zrHT|KIS*DkE(rBlTJQWkm*d%`GJnUi5M1$BaoO?s#mGvlvOW7wy5z>+%x?67_I~5V zf(Fi-nZIkBqY>ws7fa@5B$sRXzkENi>+qW}m5fXn^)v$@E`?wj^{DO27*LDJwze1l zensqEPyKprp}ZSd<6xt?HU&O>wsK$TJRgA9?-H&*96C$((`q|1T>O;Gp16YKj_#7? z+ww{!D>H0EeolkR<`T9H0XFcHVda@ADPTO#(X~? z4g6#X6heRDMC`{XnvZ$x;kUl4N3B6QhILW+%3Fa}MyVk8H1tiDQK~%lT0q39)qtww z2aR#z=sUti?8AJ+9+SS=2+deOX@Mv_c??7@gRI}+O>E%(eBUJ#wmAAmWn>GFt1i5+ zCY0t>R93(~{N@bnJc0`S;&^xbuFUhK550M^OGeGPWPCghj-CDNPI?y*e$#)lp19cu zJh@*fw`z4^*UTIdAurC>1rN9;GW81VvBUlj42#s(|BV>svsBR!yLr-8rlH;;n|4;8 z+)wps=nA(&cz?9)o{^vtrB*ZRh&M_!|> z`qwWT2ZXgP_Sgv=a;()k?{H@3FF?DXPX;(oK)Vb=5dZcI+!fuoZ1Et^R|gW zsxDNLnbJHI0|bpDt^y~`%I9scAI+Yss-CF5kLu1^DSJ3!1dN5wQqy6kFHW-PAGh*E z5jTeac^$P4O2Af5H+_L9N<|QozTj$4dLmD&h3QDTw$+CL-Q`R8g)s?P|FN?f7G=J8Cswi+ z=r1Yo{;BCb*SYqm#Jn$BQA2 zVOJJ$?VIp^;-?Eilz9GG(w(w8D>HL6FJ340r2AF1zI}Ev@8a;qJGW=xVc-5h4123ea${xq6j=cFuWzl%MZ4P%Y=FDh`;{~Trohy3mcZZk%%T7~{bm(P=HwEVkcs_7O*HD}ac~2#l&?a-Ojtbn zX#UAe*x;y$j+DByPG|RA92v2aCr?DYk(mrR>5#0%W)b_%3HCN3G5#9}^9B|l|M6N@ zYr7E~kL(HKa!?P@-w>~cd*C&CwFz~uY#vXqC@uOnpN)A7&sZ_sMQ85SYb~s8o|IH- zpwB9Mt1Re@R1RTOy0PzP6WoP~uZXNe0U^tcHU>{u6Q9J2Y^R4cc(|}DgUNjK{*u=+ zJ!;aN{%vr1RzkdNOx-LH{I4m@eHgw*?mSxP;%A<%CN`tyT}QZa!q$9a@d|8gG24|s z%g$GAA#XcjNzr?op(-C6vP?r`e#TeUw?q8&>Fa5QjR;QtYcZTQ0kSAx@~TG?GG!i* zMrHeji^k)wDK0uhF6%HahF?tiuLA4178qYxJOn- z`E6}487vT;;PHO<0lO8i zwY{!x+c*?PHNG}sV1mb&%-E&7{_9PsrIHi1c+_Fymu-hE-HAeJ*RVHn4#{|9yn$!! z>>{R}c$&hp6%Ja)dCi11MyFjEV^r&Y$6()Qop=Z(f$9b=Tk|5716 zq0=8#$S=h;-{s_obG7!IiVWqMmAYE^wHANv%0!IOyC~Q3<@!@6(1-Rp>(V4Cb|q4q zFkW|SW(dw7u3~7R8uJB>-Axeam3@&?A-5|VgmIR|K9A@0Ainio^PjQX3E=>uekmW} zn`MQi3Ct^Qh>ADTuC}x3C1o}y*;p*!OU1z;zp(8WJC7K?yV1PN4g^zuO>$*uAXzLP zPnZ^y5zy=V0Gj4dC)rajNpTB2t#u=SJe>_Ve`es3>(9GRDt$-Yo85a^Gv=aowdTUx zW<~0A@cUO0h-lBBY)`4|`i1cxkD}wPmVnMZM|zp@htK7E0m)LF^O4{D7_Y2kcrcIM zqv+U|ISYrn-~8s7j(1G~2VqF7Yk=4)(qcYdUrA^w-vHI{c#JWT36M zBGcQkZD`MPWI$h2_4bZDea20LTT!5L5APs6(aTWymqo$Q-d|~Py?@OWbd%Lp4;6B7 zycgivqVoTd_1#fTG*RCw2o{QpNCy>>Dn)vYfPm5!>4Yl1N$){H2^~@CB_PrvbdXR& z?jnVEYxyPMhBojV_1aULU|;1F)8c=UU7G_}*r z>vf-noG4{mbF`MLxZe6`Loo&-fJ4A*Mpe_$9(vEB2S)Z2Ze*MB0EK`xM1f{xxG~8< zGs|HShX}WqQON-PJks}1TJop1cn=nFSIEE~Xn5?Jef1dL_~oWvEZRq(#_{nqQ{Q8m zT#nKHyPPGZtP`FkW+TJo86DGq3~2s~fLrJXP$}NDtKa^i7X)d%?lV8JPg}fGn|Uwu zA{>aJSZGCHE82P_oa;Xyo}B_7#~t9TfTlz&di?=^{GtF)x|$9+OF3gwZ_$u*P{_)* zY16IvEJSu%+6VP54b8AzG^I2WGaEsfjiImE$QhtDk+z$(`!oS$|5^Fn1#MWC5k~*3 z-!zLJyWheQ=GM7?p?YvCnUs~eFY(dB@4w?jyhsN883~sJ7@w0*Fe&@Ole0JLK45!T zFc3->sW15q_Xz>FEL`&%YhC^?F7bd*KoJcK)!<$6W?cHSy4IB>oT5rK)(}1 z{VDJT^-jjUlTp5Dwf!wjUc)ixmKKpQP#+Za09!cznCKGthIF+h$Ku+rYudG0zs&={ z4O}h`ydE6O?2kCN5zq3oYQNN`NThiF)nKQ-l6|cNm=H2@NB;v+lBgJHiiBPM#Avy1 zj&F$*X{LLs*rruOkCt!gmW5WrO@D=&flnWMo1yl}PdZ@AC_k#p4ZSe=?kjS{&^3s8 zuPd*-8MFwBD~@Q9(>OKADu-rR$xnFHx!dgg2P<`h?e@M;XC^;SG-%?!9O(Y$l9cVEQKGz|6quocxL z`(~&!ZFEq&I6I|O6ch>pcQlVPg(72MSp+ZBdVzY;R**?g+=EO8&fnUhJ(zuK$FZ2h z( zX5`O;J!0t|+CcXXQ*FeoSrZt0Q)YTG8F%;VDjs7Bl^}9#`3Z$K_$u!(g$V7dtZmnb z!U*z13pkL}dE0($^qAus?fK=5O$dp~w;UScY`JmkA-&PNt;JMen4`?pR(wlj-pxHe z^w0dIy#i-WaeDi|G%ZmV=-+G$&Qofe^vsH{8F^_1MAg;ptC}?-Y$F{lsZamvsrvfa zrO%Wy7EdNSnv}n9PA>BF@M1S{d5G@I}4*|kHe7iR6RQ|O|PvjE`<>>@6+G6#xLBZ zEJHgDA+KTIIo}x9e8EcR0lKtF_zh|~#gZD*7nDtPmMswI100d<((lp5;`Uvix|5Pv z8tI=Amr~^k^G9+cNUaYit|g>&iY-vyv*W=}Ds5)9bRR-k&(&TCQXG+qz&UzO^ZdMt zn?4Iy0u?1cXOFe0C2TD_#=G4Urcc#Q*tGjQtC?Pyp`~-x{-c)zDH6+ovLJ69{E94N zp^a4xy5CY1legi+xry}dbo}JTv-)#O{4dSl@Q|*^kY6%8#c`P?96?b?h(d@eNyPO^ z2FoUzEMsg@aX9eH)EA4oW2mEeh~Oj^$8*(f>u6ISEVwRBWlDnzUJwjaY9RAGEG!VcADx_>&4Z#Bk=jh6^9aup0<0yTPh~KRRH&ZSU*Vq3=KcbHH9~ zhjy!54p=yNG7d;{79%UFBRdV7Obn0-PsGW+v9zaLe@#vZH^lh{tD&O4h#bwv9%kb`o8L;I{la@Q*>PKDQ*5~Of=p%#vgzkU$T^)1RE zjWaj0f8C9OxZqo%N6x}Jbd`f`axJ;sXlQ`aU%xqwZ35^Re9)INYsF@2#(*7=M!fvs z-c_+$Z}ub7AK_i*z`5*Pv6O{2lOTm!v)M&U3YGByOE<|3xvYlYU+_4m1xtWS=hTp> z{PAaqiY?y-3WQz*74U(oqUJ*$153_p??;+w8iHw<92qd!{mTrfwx zOChs3+GK5`iTz^Xfyk@mh0=_%{UY-rID!`3W?2+Yl-PH3tz|3Yd{38M>1o$D8k$9Z zaEKs_I=w%|k5uN0y7+7O{r@2~9?u;IOLgPykV={w_0tb*PX}amx_wf4c3i`~$NvtJ zGl#bbJP0ykJ*gClJbPj(^R+A{KgQeUZj57OKWmrWU0vgBj{hA;3x1AN=OeX#ZH-TH zy&04uJo0NJsj?MBYRQDk3!Uzw%3|qE3WXspu`Mf7Bw3`;6Pm*%;Nc)NWmBVzba<=M z&Z+cme9|m}&un(q0039$(`Mg-{i%YM_ivwx!s0Yq=Kl0JKj5>cen0Z-PJ6HEjDI;N z{+%;RMTpes=UM+}T{A*MJd+_UC_p6YQnEB2Y2 z^N$-0s0xom|IWO=q;v`SJTT&$7?y{a`)9xMmNRG?*kwMFcfF|b82Mo?aXIsQVzI?F zSjbOe$9V-7=QXv>eN0YsXJzi?%_-XY!_l7ncn<6T6y~x2ank!e|JCrefu`<1&IVKS z-|qC2O=-=$5o4e0oaWm;U86IP4C3sax`gjy;GL8HvRRxH{|YI3l0+?F5aM83#c18t zFjLhiA1C=&n^xi7GP~>oQ&FN8+#|2?UHF4-BZd#H?7miJH+CQo=9lYt<|TFG)SOg9 z@1`L3Z?#5BO*V2DN(A-xI6I6SM&{iN%#188W!G5Sap6fN^rsQFFna&CFdEYvr1%3- zM8m;81m?MZd0pj)=&8FOcl#vb2FTf$KF|rtb#d|U*%G(?9)@-EGu5YHQX-MkVO$Y#lJX=p5}^L34Ij=B3sc zoK1t4Kv%A1?7Yg>#;>u4pRcfOO z=2_laxbFjT=l|XmEnK7qtv_6?xx2x7F1DA&{PE^Nxpy3H45niNoyTr78}0--_Zj8N zGJ1*i5~uH<+KdCq&iA!iPV{$z^mhGcHCc2>8Y~*5_@E{6Hj0;Rr+Wu2w805s`(p?4 z=Z`RX9M~YS9cC&5McYX03!R+O?I0EVWuObV!d_8!$vm=ql5Kp+W{-gT^c2}YPx3Ip zo-h1*zHToKT-zQ~Sea0Drj$5>yVQ6c_p)a13fG7?HpIC!b;C5pv+T6IWH|(Lg}?V4 zdbv;h-cv6P3CJB-A-TKxoS9{CX@K;RWP7)s@=rwmD?Qb}@(6w{p#vE{;j_!|C6uI6W@Q=iZNnFT#aSBx_VECF4eXvjH1!~FF8>W*yFDU!r;McNQMOs| zTS0*~{+*c+_!=_*cZVQ9jUPj|zHXV+EADRbUGDBjP=0s?oGMRgE#L1--c|XqeT?ouKk}xN-MjOhgMNNCkOPAcO77kCw*`aMJnB}^Edrd%-Qv{rJIdv_@2 zqYfW&5hZ*)H^kZRnNywFe2vII?7?S{w({u>pSn%ufPmA_q;AWkfU@YMb&sT;oQyL8 zrkn2`gdc9gu02T~{W`P0-!F%AtZvIxdytm!t$V%meN+I**lAJa?XYarcyswi-UTcqPRgcg?$*M->i>P}=gLz*FR>Tf>${QLc{ z)?Y!<`)cv8d1q-`&GmVYe0bv5Az=*f7|iktHuukdd`&3k>e2Bx+2pLF*9ZA)l~>I3 zsX+w)ty4&*n0k3-Wh9t-;q)ZYHS6ollIYUs>u;EFCB#bQBq(^>f4X=(e4zy57FrC- zT(Ih(8JUNlR9Dt;)A{yJf9A-T^(O{(Vl7O^LaVdBrpQDdPQ@!(XshLNl#L9g&9$e^ z*{)H^ifGrd1bzm&wp=zpV*I~VBhfIZQ!XtR97_5!*$EEaB|Qtiirjge1Y65K#i(TC z3}1ajX2@Y-ip>8CuVStV*82TD_dRwGpO@I2Gq~I#TbN_dBk-&yTO1NT4yTy6ej)4W=w zwaXRhkitLNh?*UNhYxo2|On;&urB?f*g>KWDPWRcWTc2To;2a zsv0t$&V||YZYkWh&EPVAoiP7!?!l1Zzvj$w&)e7C@qP7yxF2EX`l;oIX8C`Ae3~h% z`4Pr8ndYkd`1b>^jiq~G)b~W;Lw*cmkA}o7k+S7e zT;l9&hgY3xmd=@Gx}=YyUD6>PS?tD-Sqd%Q^h(daM_Y$TQ#UQHxT1Oz!)$m?Y?WE!Rx%3%zlU1e} z)o(8^+8i5ARb-vwTuenwU%P+jo4ZAqbR2Q}Jv8g5HJV7iJRAhI|Uw+zeOVF*ks4rx(#65!`{!&ru6PODj&`v)QA^l)>ik zG6BkifF5J`SBF8`UobA{apkY?uLc7x6@-(#Yht_VuCB6aJlS%0RI?T+f8ER#saYi! zzGwHIw{rG~Z^j|_{q6I5)5V7v6PddW`P?(EOs`IiBED-5`d5!0DF|~Ish*g$K5P;Y z{AMNn!q+4|aX7i=efZkrGtm5k-v>RzSUg3z|$dB2;F8d63VJ+_N-B1~|y&o%_RwtxCj60w$w)YdMDD@HjALZKic48S5C7H)<_m|R! zV)OL6F`Q{kg@rMMjpw4b>}vTK42#5Kn+v?r%L3C+`E7oD=)_b%4;$}p6p-iVG&gE- zHRu^GUS=H=FCs)sMqJn2&X{)cV$h>>8_j+- z&kcxtBPz=Q^&pdeY0IABFG@iMf$eYQkSFT4=OtQ|Jf%s56x!~(cBjsR`L|%tA$nHwnamI#e zV{Z(4^7oUIePUT`)R)JGss`u8!R5=jWnzp;quSSL3#)QF^?>G8%-W%b1w;4Ye4q*& z<`|5gIMm+vr|S(pfc=yEb%f*XBM5b4##a(bH}XdnK8-pq^19exGSw{{ciSII-<;fd z;vIS!n0(PhU>HzOU@(BF?Vuff;M%04A5yJsU675^mBhojH>?bEkNicS#3x9Z=bc3F zUOeM(*%tJ$a4B4&@z4sC=U1LRxt>43`%YSR@8w8*Q&lM2>En%IVxKYLp{KfSYt$e~ zBh4L1(p_7oGBSm&%8I?>IVpqJKM4 z?|c-KQFiwtbVAl4JNCQ-)cg79l6SYlIk)_qj$`?E9jE;#Fx2yJxVrlO-mcv~Wc`?d zi%kcpe(VT26H$h#(_+tSNs&`(hNPaj9o?xaZ#QA_2;vX;I(_-DiX;5e6EZK?*f7Q0 zSok|mZ(np38IUaplKlpCmhY}Ve|kDj5rdAsS8=924*{<8eqtSczfGO^vh=6bPbLNa zBW{P8;mcK(zq9BYH2Pa=`TIkFJYyksvi)SWgns2ZXn$U9Z$Dj^>pAi{2nlQ$QA1s1*n%kbqh_ZF&U1TO?)39i%*#wVMu_{!}(uUd{Rw%SUq}orZ8#MRR`;b;7sQ8w zfY#Wt2UQ`%Nr}YJ5=rU@jTzje(K^_C=mg}}Wl9g5tE^M{;vs1bgNqm91vNZrq{h1^ zm5}(HO<3NN)}03>5CtJUj?Y#|jY3D_hewS4Xd+I0g>*Rmtvk-7FC>vf#8q)Ghk8=2 z(ot>`5)MvHOa4_j&dD}wC8{sD_N7w!GK17{vp$8WF32!LVGZ(XV20=OFdQIPpC!nkS``U@| z9AnL@@_h|IIg?ms!ddfofB2P9rtQK|yUFs!{%eI3HXb@hDQB7KQ~%O4VZn;-I>hw1 zhM})7k6L(=QE3WC$3LlIzPWxSr%%z$l+?zkj770v6&3g6N4q#TF`^O2E%>gs1+DM5 zCNmvoBLa&Pt{YwZc!TA6*}e+>dP_{~{jaIhto6ege(GOu#VHeu2OrAZ0i`}>p&a)!r1)NObSH4DHik7m_ea3{ z8)=fXc|FjGXdn91q~z2S?o`y#RVbi|%WIh$e|eaSNg4mA+mGsbMi(HB~^Y9yI$ z0%GJp(#pAxOyKl7i>g(yY3`Fw43uZp853&Flh@#mZ2r!JtBG2*07bdPNWB`SaIS9-OOPlb&psIGseC-}8r^i}oT-(|&@P}`-!2O^Z~R`7Qd@y{bq)bK}?X zg%8Fv)k^!)>r(CXO_bNOHF)47CeP(set24d)w+!}ieL5w4(v6?KJ}h?aal+_-m1J3 z5C&mBCaQWuS~5Ki-5;Cc=_h#YMf2S(6zeM7a=Xm=d2>4?qV+9Q=(9(E9h~S-JmieI z)?%PHr=WPGP!pj#G_4J1b9R_HXM4Zjl1!5||2ml&Tl5ejndS@6vsst_g*VpGnA^>N z6-Rx1`8VYLd?S$buN4*?a_xTT!%-`5+U%QuVo`z-Zic?Y2PLEmQc#? zr(4n}1f(^)N1h#b9-0kk&#GsBRl8g;Ek>8B_2Y&mO8$szj;v~yh;A^>oV@=tztGED z=l%eX%+QGv4?k`?d(wSE-hX_^d+T&T+x}@*!HZ!wZ)+^m(cXgMntLXfAu?;CPW$SN zR?}uM)a(6BLrg?0NT=Yksd%s8_OHoVWwi>kUwy6eVsL{;*9rUiPj`jBS4=6)?g~CW zy$t!~9{Fu$j(Du`M#LC)`;GP={pV1nA6Xu8RAkkTN0Hcf7xP!ujeNqZl_@uqyd?WU ze;?{=Hfv?iN{gA3zGu!zukJE%&b2AOKU~P2kbxGP?t#_iKBSg(V+yC+%+#HaK6d!T zqvCbg-~Mg8drLF;<)UK1I|$Lnb5dU2`BwH<;@>v|ETvVpA5z`qSb7TrdmZ|trKUXN z6Hg4})F?O#f7%?fmZj)`1CuQ+v=u^#zsQ@w+?)Ni-*$>Zzh#%0Mwdgi|5VrIPs^>| zziyghryM?hZ2nt}fkQ^C9&RfY)W9U0F= zKAN(&lcf}gVBhQYVtl_gYv^Zw7`|$d)qn5WWm`R3(U+*Ia$mtPF+4!!9arN$g6d1h zy7GHXEDYn^d+Iw~4DLT3W?L5)>!pGiS`77R~KC zm5Dd%T;G4{`GllUZu+B7@sx~Df^i1D`Y3MS=KX0Dbah0s+GdAyz#Vtr)FM!mOj5pk z{d>aJZh=mX)jXX#_(ZI?#Mwo&cqHDO8G11(-3(s&kpi>Aih7s@&WW;a()Uth%G=l3 zJTAuinRh~-W`nkf0xW^OxZQ8BcV_R7azoUYm+jRLS`EL=EH;tTN@Whs$f_TdEsD>) z&3nR8Y-t_3|1H?9I7&-aX3*2Yf{bQ|Z%{d1;=R|mPaMN8eddLq=H^}cA{Hnvci2Rm zz72R_8|?&rlUJ(Wh|c+?th{jI9MR?*m8TT59+X^bJVU7NV8Gd?7VcdItG9M4(5dp6 zcYirR4nwoqw=Rx0dv-M8eHzJP>wS{+jc>GV>UWF#7~qoYIsfAIOHwYSsU}|L=bNUU|oLJv}Mi z8orA3?;Yz9{l@e8`zL$l1LdJwR^i3Wp}QJZhDayYR9HuMP^kyu3$KeLmuI00Z{~tf z;@~rFtHIWnm+G66OaaNL2}~dEOLmB=xxj>zeD@J%)At0L7=kjuI@(r(G#6+?>PqFJ^(-zWlqzGSD(lo8Je~aS+jj2Hz;UccrC~PfSE=K z$QciSS=x>r1pcdy@G-~df&Q^5(WS#!DI2@o6-@AeuA;$F43%=mQoBR!^M3fROtyXDx|5UBb3p1ja(p1(h;3I zoTxvW^s9_CS^=o>P5o8It62fUe>TMd5FQ|0eu(W8xyGEJBC;0BDV064b#WHJPxuH;iC;o@ngVe zBg_^LR~e~odUIB;s{(>RRtj@eq7BtCJ2Zj;qZBV99LPFr;S$Gclf%VvZc+Of$`W{# zJN1j&^S9L#j@k6)I99h*-)raT&Ec#zxdif9@iP|B*e^?TsPjKfeIgIib(Hosw)#Y9 z5ZWD^8cYC)&{onIKmBUMDwY+NUErE%Bj=qRmRPX+)kcmgJIt|IVwI6Lt}s`&PTn&X z8b2J@YNO%8THR*iQ=L2gDYZicgt=aTM;wQRkN z-_qs(JR*ryjNd{T+z59+QHf_l8QzFXhV+S$_1wzs{KFw__X2CnSQ#9{Dw=!xT&$My zBde&@@$=dS#z;Vtf8*SgN-5qLrAJ|=6POdZbYBTkids7zoiQLOtNZ4Ib1 zele)!6N;A6IHgv%!LovQyc=CD->0>LaL+BMctd2^2J!&^B`Aj&Oj7Xc4 zcPX~&K-np{nMPX<%{jS4v8|&P?~9TnS6x>IZWlo}sHyE9s>yCLU(;h~TUJJ$-kD_? zdP&1F#C~nzcFvk`to-Loikh#T6k5tw{#TD#Bc{}Jouyc$T~N~Z(-}JYtTsc)U8y%7 zss%B!-U8nSZYly0@(^mITKtKy2jh_WjfFa#J5dwS59Bh0T#QRR?F6@A>;_y3yr+SzC(p$ zT4;PX>IY?~PEO&N9FTjv?yhhpqYN&`n7|~>tmsbZz;cyZ!%~^Sb@ z2^Y%$enhQBVxCBC@D&@*oY0%ztX~R#W4`8z90y-1=gh6Y58SKl=lA;(uW@p`*nj0< zdW+hMF&6ho?Up7%Ha7lqYd(rSqURszE9Z3tiRM|Jr3>#dG?x>i;3-Gj84AsQgF;X_ z^;$lJTm=Nf936c;n_vpp-kjVnrB#1+gu-XXJS%UeW47>Et}~wBL8vLmaP-70 zhDLSw9bOX)A@9t~?WHa6%{B16>DhcGi$f8|$atu{@8Q7TcwgH5b9+LLGnJ+(O||f-FC`T!8s+cs5*FW+ zN-ph4{`n=nOug`T_(oK8Qi=J7Le<;JeSv(#+-&swq>}wJka_-gNPJc4JK|`qXHp4e zgihI8yrRz5WQn;$h+|y|httVqNj4*6lgT7Q7QbO>VBXoPlYVII5A(e3#Kn}UqVr$F zt*Vp!)GGkA{jkQYKkA)jmbabZXggIBXn&kvS8};kQ=yO7CH$@{QE)P=Gnmv+=0=yC z7dH*b=C{qkDx*_wh_~?SpwOp{7hA~L?p)N7CUOB=kNOt6y~Dc>7P1&mHubu{Hzu7_ zEcR8i?@6^J+J?-(^Q9XM43P4n8$55^7}pZOZcW|HFq%Twi34haMyo$?~lD2O&y4uKa_SVT77;0RnY$l&SFvhqZHk^^V%V(a7FWLu;rN z%OK>-)|#sTfnjO1zG}zb|EZhJ45kvk&{K`c%>pRtuJHTn9jKJW$om-%kYWWni<{Lu`=1qPt9MR+BLNA?XzIH0Nw~FrxBx-<(sR!EB!;!Z#eN3#Jftei z7Q}n8;G0b38b$015VWTH0L)!}L6b}@YU7tRIw{Pw*s+|cc&;ndup8?^LFx}NKyHFp7!OQf+ zL9hV9HTQLs(FtZA>sPhYYkbSMYG<^2VBc=00*6Fo*pfyL*W8kca^tHD0)(I?e3S7B zLGC(0NoDjWl{=J96}wh598|%LP+KHQI)HZYGB==;J(<|`svV#z?q6C22yyl3lj(fRNUTKB?MqpOxLUnb{Z9p6RV7G0j#c z*n%cP+&Bg=i}IHt$;3a?&IIEV9b(o=%}$|A!H)fmh4^&n%Y0?s)ji$a9Gb^;@%C}&Fte_vxlom&e+W1Y7Uo!_cc4Tlw>mk zgl;$vpuLVsG?hEtY8IfjYUB31Un&dL?|IrpC<9&H$@Uph)k76>>Nuvh% z3DH#}l*T7D#B2c1#m51-NsED|dM6ahzgD>e4N3=Sf@#xgaYt$Fmqb zjZV~?E%~8pk~_vbbuIA9N_VFKn({N>MzxvHU$^W*PvXb!#6eGaMHeT*LHzYgtwsSf zimx{la1nsCW2>5mT(@V7PMc@++Bt`PgPs7IEX_XKx>13r z8h?Kfue3N=Xawh|=E}Bf%Jg)H?#HQ0%%SZA(&mGLVt>X z#9AO%P>iSmT8OC$X4RO@D~6*Q#B1%j+8e?Bs_$o6HD2;2`zNmj@`T3J2%y!Z5ir|E z^8qoez#v|4$<^K%UU+mr%eJv~z$v!U%ssy@_Tbym0uPGqG^^(EwuhJ9OL@@S`)?{v znQu>=xI6<0wfrq0y@x%0(W#&9gCgSV7=Xkuj}{a0b#jF#n8lUM0h`Pa?X}ys*?IvB zV_tm7wPM`1f0s$NVQ(*HrCG*2er99xP}DZduve5-z9PP2qxkl=zo{u$x7Pw2a23|O zb9)=-VF%WQr8NEvJHL3W1AYf9Y?xHRpUnoEzk@YcjR26cMzCZ*y!7ACb6~mOkk=s= zKg$J+_Y*2MxbPv>qm92>EqeX}@HV~0TMX!Q{L41MAy)}cjKvGQ!x)k>0q8@1d-8O~ zJ6|^h*{Ne;fbpXR8(>1Q=#J%qFsq=%b9su2`^A{T(!h5_^Kq#X2y(03uFe6}{V%MGklg4(8gc@1r1Q)>JZ*&~6Ve#^q}u3r1j$ zEfvK$$787T_Qm#`hgO#RE*j8PRQ34yD9~)7C(mXU2nZPq(`Eq5)~_IBV1x>=;f9}D z9LsjFdmuJKh6D}5=%UFIP9qQsMt+OB=-a#J)Mg;3`FCi#4O7WUeE0lD0b=oGGXQ&= za0LkV893%0n!B^6VFJ(hZ|a#3(G%a854U#&ExtuJY>t?22W~V$G{B^t(M1EavJG}_ z`iM00IO$gYdcSK;|YO)tLox^s*S<5I+@Kg01L3D@3qELof8eF!`p-cW7s9 z9B2}6su8^uxF}Nq-`BR+1n&=nx+n0UYW{*AvPBjVafM2*g*PkL!}0OVAo47~3I7iK zIGcFutGN)hILV)qdqsy(p)ELb!gRUcN*TyG;!Y%!HQ%-I3QR@WhtBy ztQbo9birOi0Z0rSN0M|xWYT`71t`ZabCkEV#lbw~o!Yrr-uctDOhJ zBy>_jI|WA@lp+NlQM(qt;w=q&oyiOsMdK0xkwvv+&z7fx%}CVv+C@*uBfvJRj|eD2 z1(H^Lq&beJV$f?BJW~SZDL5|EIe+j7>;k;(BMp208=y!}%{cU0F#kWbX2A_$YWE=` zJz=d2>j`<#dZ%LW%w#(pD1ebm(%AG=Ff^<9EV$t}wa(=&jltDD%Pqwl#@_>?m<0n8 z5S8Y$+`%*JnjC6m+1TIIWn*)k_gs|s`G8nl;%9yP@*Wm{y@RVU@%D`sz;x}St ztRPlsz2qjMtoJv|lg(-cx&Tha6g+dxGk~(VqshTjUe?O@fJUmcbWpY}y~u}vf}=AT zP=vEW>Aa0OZkekCioRnWMMHdEiLH;Z&Mirv(!uk$+Zh1kel$I>U48j(zOGCV`(`Q^ z5W$YLgi3)!cYAQVM7#bv1x;s{(q=GuO)2w_^#~O4Y3y{)8viESEt~ON*GI?hpCZgQ zc|NzRq285e{+YZJf%#m#o4dhpBzND${sl&<$o0#K86(fjhP9UK%3j+|vHB~b zsaY1uYM1KzY5g>}i6xdQJUI>3bfc$UY3}YOl8Ra zV;B^%5}UHu>K;3UUL%W2O3b_KUH@@rU)jrVlbwcBG}l(-*e$$@6J$-f5)uDvLaCqzEB1iqi&KqQLIaOTVz8`b{JeGBdd@On+jN)b2N2*6*kDJkr6&nGh5K<^8ViaxB{lIH>HPheX^gAUBQ-aS( zw?RcmkFO2bzVeflMDEzK$7W@_eWfS!lwmA2Z95-brM_3ynEv#t{B*kLv_C5rp4Yj8 zvJ!W#ToiLDVk~8g#_P1Hu3Kl7R!s&~R*4#+eOz+l*%OqZ_}X@g@k-B|QtvOnst zTa_Bv3|J+VZ9WdjwvqD`LYcNqo9QSc19xDW+{|LVU?%vudw?de*zF;69cuf?BJ~ zX~Tx-T$w0574X0`gp8%sxo1V#lFYR#%Db%aJ_~C^61PRptlclfisd`oR()8aa zz`_?(3|$eY)=B$S`be9+Sn7n%$nw`6J))I+&s}yul-WI>BHWa?-{o{_Ma0-}B5ktD z!g{T`dcIW(hEe~pqU)^6?w|h4Z4~fqs)3f}lD%}k%b?0vj)qgBk*z+$a>dr@^oGms z`?9AW@$l}56RWz7%FB%D8`!oLVXM+PD;sj`Hk3NH?dek+`KvA;o*67A;Ild-+^y;1 zOzhB`EUr+kk*=xZ&K@<(g~{pJD+V<**o6e@tWGC)E25c~91Y#nnLxb^9Sauf(-J}b z&W7%4nLV4tZw`J~@41^*r`c^e8qxY~V;3>HjCl@I9J7RZoR3i36ui@k#XKb8YjL%7z!D(-gc_(7Alj4CT9kw!?Z2E6NSuhKB#dOIdwMsq6MPJ9I79=r~ zP#!?bV)4+}mN)RQDQ%uE;>fsAsJDA0(aMfhh%6^wEo}_P-_n+&xotpTo!akFZ8qA# zPH&%9Redo+Q@H$nC~-(O@hTmZCBi`1k zldN)pWx9m6a!h4H&p_J>j~Mmo5bT83~|E%6%Jiqt#N zNdz)xTyWN}3rYyq^{(hv*7X}{Nlcl3qK@lwDzqlXR3&N|ZQOOiCrnR+%QPS~3CitH zzg1CIHxxgrdNZenH$O2psP8PlkDWhbI# zp`sF=**4536lysb|{%CPEH~_+z0uwobAh`W^Z7MrLu)p-Q6-!MBJ0g5pJ0k z52?zkjVk!!bldIeE}k-b8HwNI{O;}NkEcISm0m=Z2mZVbRFg4(({!ALCG;wmJ+3?} zelj>7@75mi*l3rljHKfNOmX&S9j=_rs;pWxLdQ(EIk;HMOyQ&@eqZMg4ab8!B1m0) z_@*Tfu})Q4tM6V_;zHIdc~yI~Rdp~Manq_rcf=UJ43+QZ9ikD0WC8CVq4%}X$j8Ho zalEko#-4XbnM{K$SSY4tItvbKT-?@1k6+{PEyOxUjW&(rB}S+Ayot~LY55`8xh?jz z(Hp_1fEe+Ccpm{N6w}GY2Iyz$ZJwKpNq&K!av^^xp-E1Q>bclYhqQn=C&=*@Sg33v zT?tJqjw$#XxV&~B(aMMbrk}FZ=^!@G^N@`(a5Yt#rp@zTqN6Hk{!$CiG5p}PsURYI zD}CuFHse#iAYw6Xdiy69mhBGqmKXD%Q9-M%Q3@i=w}YxF!60hMeMPihlA!$Nxs$#* zEn<;5q?i&Mss(AH1SgcIjfKNUds0qvuyuR7vlFOK zTe!x&L$L4ce^W<8IRlElTc*!E`M@AJL^cV|-D~&j58l?$l@IJr^ZD)8x!3X>V7z-K zodnmRDG5ubW^Fhb{-Zp)-b*q=dDyKwP~jNfXV}8=_u}HiEI1Ns@@pLL?~3+DDD3Zl*G6MGg$l>&>JAx`hbdxUh} zou4BW7y5u=GAU}DWw_G>FwjQG7Qh(&-Txn+&N3{HCRo$~0)$|} z-QC?Sgy0q+Sa1&k7I%l>1b25xg1ftWa9LaycUYV|eCM3|XP&OAo_DLJ+V+|089+#; zA#4s46uYc-z;e#QJ=&!`@KR*8!*X8Ty=)2-^hMSLj?rqO4p_h+<8H+ncRi={^peY# z?JZE=_~j2Ddo1U6yq9Ibklmt!n|sOJ5kNI?umz~3`+bHe54@(X*#Xt?$9(EQS zR3PbH0f5SNIM4&b`FY>77*OSIL<558AFsuTN%#F5z?>}=4F%5Nx%W7#YxXRA@Y;~uUa6Z$a)o!PP&CZt+AQgk>);BtOkWU zPPdUkFr0lQzPppEK!v`$?qWE<1iqL8g2ZQ^F{*>-caVJHyp!Y-&{Rmt1D$c%!v|-v zppjWXV1f>&jf1tQh8MaH5}>Z z*AHi(NTTmQICn_b%8IH$eW`^m!^tI=_a30F>B>NdSiJkZ zVz8+f3z%thGXcRjPvo^O{j(JyWMjG~00QH95&Y+s4%K63@&liwl)ru@4?4Qu$bf4! zXL2wq&<^TV7Qli(aRi%p5{*<&4+sSAnt)~ERtX0PNAdO>Ak5Q8Bfnd*ot^<4=Tj*L z0<@3wbbIIRThLCLcQPN=u}N|8OakQxLb;q7zxmMo@}m%_LjlYsg&{liA|(_ z`~32FkVkoc8qo$6pUTfAub$uTV*h(c*3$lbT4CXe(e~0cEqUbz+-VdM%`QqIwbjy5 zh&FI9O7RiwZ3aW%kirLG(ll0IkWE{N7diumgBWq#w{9X)DRLuG!M>fIZ zD8IiY)cz+ybalm3Zhx!eMu7piyI!8Wd6}<7;NAYy$?WPb-$qR;Tlu+`^Zqd$JNX|Z z-SInt_p`b(eg4G20vOObm9gee%y(u1Ma2w;{0WPRYoLfWw=bQ2THQ|O{rs?Wl@AHD z`zGe$^F{9d-=*a2q|enOM&@L6mU0~AIvo zCU0Ml=l6B{$`ck#SI<|EyKF$wH8%HY|87E{N=$@IW8zSGBD!i8P)y;RC{JYjfA{qe zRn$FIo~X!b*7s;fJ!rdnWNNscx~yVbk)N2@z+@9KVCreTder0jCqDuC=dSPJqpZJG z2zf}WOwM}QQekT&ZM1dUzs{{cdE?PGiI1>;oqznsLj8CruyPKS~L-iMFJ^_h>8U`8s*n zK>HiE0z!aubx+DzmNV~peD>bs399@jrvj1kl4zWpoPe1o!&^FW})$*K4z0Fn27+0INvTZE$WqN zyQxFUjsi?g0E4*(=ToZsDDvo!{((}XV0Q8TiBc0Oj>A+&b1E+X#nILQYoj6#id`ym zBCh1cE@nd)4*3+3GrHrz3gI`|?kRWSVVzI-TZ~eb%^#W|s?i3!ml&lBy&Y-_K2;nMzklEV!=cBOQIe z5piJ_%FOKb=~Xg;Wptod;bV{wy%ii#N zW{LFZ8~YkoRB_z!J|KH$w~dPiN55t5;$0`L7A!}z*m5h!fxb=d<=GT;5M&Liu}jSe z90^)u*m>Ei}FyBG6KeUCOE_!qhcf8RkH$l=+8 zyT4e!SXcHA(Rs3)2pNRsQDn7CY%_aPG8c7C>-$7{kdl{tu2430!FeV;UpDR4uH#SG zb{YDO5qLH+Ew@-Ga^Nka5xtnUTV^&zvK#4di|ZY zO=q7Rw-7Sc=b>m^vWu<0=5B1259VRY?~r@@yH!=#N^x1b&8t!?CA{Po*y=GTHyyi? zs^aZ5j#za+Ob5y5=`=Fl;BMwgH!>u>bNyTq^T7a{G&JyM$R_(n)ot?^O+uE+DJ}6B z+V|C0?OzP;zkH`3!%UO8e4AM-!!DPNtg$cO#af2(O@`>_+!Su^uUd)kY(YU$Q{uUQ zuYScaW`5u-EQz7g`|!R%{?l(Kb^2t`JGerj?l1ewMg>>VUub4==wt)<75}h}ClN*< z)3h}zRELZIPHmL*kOKo7Zlh%;!io!&HYFJ(TNw)@8fY4B8xoits->;TlS8H4{T6h6 zRII7cF@=VEJ|{mm?AvG&1r#I;xC z!rQ*$F}hK?oQWhxaz97cK#-ab0b#$=Ix%W+?4#ABh9ILDqF^9)3|jR^)-yj<_BXBX z5CVKrf> zy~SpR9})lX3RU_K8t@8z_X<5-N4FyrhE))0d|8)$g`&PfG56jG!r=|R(I!X74p9Aq zrVks~Wp{?)hTQs}rzmF}w{N}PCk5b;zvB(~uz++E(6g>%hv|jR8Zfd>cuVpKL+U5( z=e}9O>`y0-W%!nNl9>M$+WZE9wtXa}e`}UQ-1=4@rl*T&-R6un!xd*H3=ciAOeg*%^M0sV( zobkHhDIlnIqOcQr!HUAy8NzEJ^8!rxS0+9`d^@7pE7J}O43FMv(kY4rCF6dh=#N34 z18*1LLQdcWBk~5O?IYPFUV{JoGfp@7$Tw77%Z9`$C`EpRuT0#)Zbq355l}y>8N$B*4wHp&3^@AU;|*-JH~_tZ!&x^w zW5kD%3gGw;8UR4wb{c;{)(EIG#JVLsf_>=1utUi}fOJN$zrRHVzlC-htaGdrc0VDa z`r)Sd!F~%U78jbtaDo^4NIQt&{Sjjik+JjRD|7X&Nhkjo)FOb12rw&AO5a*_nV<0h z!3R>U3)vB7z=`=Yt@GI-gW-H(6sa0tJ|dv{15A?Ix5|MQ;?k2i1px{%s2Ad|%r1cG zhT4kM?{}U#ZZ2*SvM0U&Z5(*WWa^ze_qUyu+2DAsw-XiH$X#CcK>%mV}rVQx{F;r@0C zRuWjlwRHK|VS6De1zxVxogs$?>X5@cBc#zvn~~1Iq57kx_>A2Z z4I=jCh?Tq*Wq;d>Amz`&T|b*4&^BN)VwZ;25tI?>4yd|>9g zY+~M^i<7LVXunbRllq9x+?gvxDF(mfchlVCK(|8CBqTFUlCaVY=U}@c+VrtOll9+m zY+Lin1#&aV1^EiEdkHJ`gR{Xi5)VZ_RygZ)wZs_BL+$HL0{>TNaj?h8WTLS!dYj3^0+xH)DHm@EhSCZ) zl9>_J&ulVuSEbmq^NBu_Vz_MkWZ|0E=)H&cKi#B#r61LN)x1igBb-q+CA;ioy}Iqh zt*!Z)4p8Yn|D~Yh5dsdF!#Sq-qR#cyZGRBy;P|G1lhXqJ78l zAwooK=M4QdUd`wD*=FDg2w}q|=@vr!Ok)6ujKuboH4{`SX^eqx^_j?8S^qi#0N`YkcO`psmbvPVJ_HJ`vL(vDfJG@V5BX}lTwauJ@%6=R)Plm4njUVzDTAfp?(^$_mLj&51JGxwI9P>*FBXvAx4kQW;x)y5EtbGZ+W+~t7wP}fxt)}dQiV$>v z%dR7&kk+uJp40>?HY^$ySsf7-$sg$yT^?yo%eurdbo&@CP569Y8uGDT8Xo5>v%pK$ zsFqihU)(8@JR+Rdb;-A+ZJFf`S}{uNJ>mIfhMp=_vzGFBBs=}#rqq($v+HY@K5t@G zN80;Eq9WlNbTwShwS=x`6NjqECN8Elp~~wqS!=ACc%BrUN{yOsUcU6jIdhWbIdJH) zVflm$Z$#ADOu*51C<78kA#X%rhm&9k1qJYvAIK)&3*ykd(Gv zmQjjJ^Ie@wsoes15y!dKsHX2|oXKNWDF$PIQ`g4+rihI)r9SN9j8a`X1XpQXgeXnjN(pA>2ik zk8xkFj&h%`&Pp|198{>XHaFL*XD8G7G)k9bGg_QPGO9YlY90g+>_H~0`RCw=q>aWU z#DZa7v4iip;E-`Q=MXMnDKO$?D=?v3t82=tV?4?;g0t&7!n2D$;=Jp>gL^sXkZe>6 zB^bJoai98Ql&+;c_Z>$&y-su)ycFvE&DlC`cGRVk(HhSRdCttanqZE)KDiDq-Qsxk zrmlH`(+WWcG-hm2zgtzIg}k^i$LUf~7vQ}t7~?%J_%qY`x<;)uf01CW>d5+#`UdL| z`$p|hp?*#2nGlJfCEi z%r%RV4fN&vivjDMM}}qcXU}D;$LM;F$BBB`N1kP;=OP`?HBBMX%m1V^+;Bl}Zt*wu>B}NYnk*Eb&XeHKsX}P>`R)7p+oa zydQ~<-EuqCl^RVH)~cA@^Wjq9LYYm`!Ya4VRiOh3Nt+Bbvcknqn7&_C`?3?Q&-n_! zwElMMYZ?A{&Sutlt3|+4eRG~?olVJGIf0qJgcnNtpsG?;fvdB?7ooiD8hU*6&}ZuT z`RIoj#Z6^4PS{gGicJUgO_c%8!_tlYcf&j73@~p_O;oPE%{^-QOflA z_ArGdl^B_(uS(&^{yRBkp?aBPV$Xu8C@NLW0fyfpTX_lljf`eOAbD?MUwKJ1r4z_^ za!vloi;vQdck0qa?mzSMAB%cuqU{@Z&ZE4VmQ)y(oxcuqkp%7tL}55|a>zZ8a%kx9 zrZ87HDJ0Gdm=C9uIBr*vz_>S?k2Lu2^x-S~`MU7gNxueK8q%h~;rdN*)eqM%uUA5u9uG-!Lt2SVHiTb*{gnM0Hq65pz*Hzo5`^ha z1$I2b7crbu^KMi+4TF28}k|6D3#{$O!0yKYz5aQ%G z2U)9=i75vL8RC>#yg&$v z7H;s%1q*>}{X7Y$3hw3D2YMnve|3k*UBI5w0`^T&pylocy>p}>f zx(upnGB-JZoC?qii?5~mC>T#loq|Gc5N|v5{etQ)NP!%~R4|OjaS*mTrIg%iNUA!~ zno8SLY=~k&mXv{9a+|S9{FwrM5bGkYm8RUM7)4MuXomb+25#!-Z47R&9IUJkYytAV zc)-xd3!b|qFJ&L`K@uK)tQ#9?5NijI4EQ_D(<7`a%7L^?a4XC5BV<;UG!PGA? zh}#VAva6VV*;(0NDR^W>ru^J6$fg1oWXLV$W1J{NWXL#UycFB1*5b*ADySnr$Ix@e zk5V8HVO9r}Ql$@SRA(O1J`81Vv&Bh|$Nn!fupIb#(l zR7`PG<#FQ*O=+~HdE>dOGfm^+wv`U*I`XdiQM_Pb;_tPz|sCV9J%8=4!YS^iJa{MZJ19@uJ34E5gpORa#A8Hh{ zuiV2|)Ds+ABoX|QdPC&Hd(87_KFq7YeaxxAW5YMfUPxq~T91#ZkdES;5{D|U_!s4` zf^4wqG-Z$Zw6H|8WxY{|WiZ7uwh{k#LR)_0`$fC%tG10u%f^jX%bbn4-^m-cY8E{# zYB3vG44r3#rrg3@?gaX&q8zP!?)YD8`g8a?<~&o#4y{s855#y3rajXp4%5?=51vLt zu4x^URzXVBz99VyTMPa2m+r@qXL-krXC}vl_6h-Av4zL-f=?E449_Yp&7b>zc9bL#$Dld$Cbm@3_Sh1GAfdbm{2_YNNld_IDBPNp_X5 zJV%|c5XX3~rAKG4=*HBqEJhKY+-uUGtF>oeY+Pp7I6LN7_&WZHaCS_IaB1#6^N9Ux z;}e_uour!C<)8^MYRdg<*7WCLMz!Fw7JDyE+rilMyFn$qW+-JFrs`F3Eg zleUk^oV|~${bMhV*<*z?xin^0 z6*TKrmfE*iYj55(n3XTvjG#0;B-u4cCw*yvB%Q82*P%Fi+U`S&s$3kow1gVnwcu8M z=;$eNM>O<;d?n8c?TIX7qdgm0Ethx%9*t&Gyq4!I( za~ez68u7e+2W4ZGypt!jb5kc(%~t5zdUeue72I@XJ852rdSmd1JY!~u@MF$a<-7IQ zp}XzQ6-D4?#Y=En-ran&)RwVM-oJ%iOO$#oMV{raiZ;t{$BOH-xqn$xq?y+n5sK;f z{#u-qz%o26v9z)JYiWx-=~P=c<5c5r<*`Wk<9_krd+>rVcaIGyO{E@sfL@<`z`tyA z?Yb<&19p+fG-uMtw}H&?>y!&lxO~+!70O|)Io8lz=A6B*$L5)>R~oA<`{KHUIonq6 zen7Fzd|kpKCt?=y<iCQq(1AwN(XPYFX~S} zX+iTc-0TmR^l!_ns%5rNb)v=eKVwH(e>&RQf7H*bz#Yxb&fPHn@N7{!Hr1R3x!~0$ zKmD3odsZbd_ANqbNM@qA;oL!d5HZVms^?tQ&-=Mt!7zQ)Cl}c!6IPS0xw|;Q7`ix*o&jFJvr`zdb=F_P} z!$B^ujT=)|inQ?8`rSfB0Rr(?PPn~0xF~v0xG07YI3@Z4ScgP47>k4&7>mRR7)au# zA7vqRj#d+vogxD&y$UHJSc4JvgrNd%I6*GTLGsY8s8L9tahAk3K@bhEu3bW%NXY3= zLw@+dX-WAvV&|_R`Rz+f8^2xbxYdOOyk5MrOf0+=B`h!Q(bbvD;P}i$cx@r&pGC~ZU8HgJA5wul!-+!)O zw(T_iJ(DzTcw8{;U_3ZYP|0@8Vmv9WfBem_hMKbey`z#Ue$Vg3zWx~Yc@`QY+})R6U3$R(BCAd!(dl4$6}XW@31avbKRN0)a-9j zn+=a^NrbpM$&1cBO9+>3#o~WjJN_|KC%uypbPOkE|8Q#Y4A#{xdV*Trn=HLRxk5-p zpKI3#3?i}xtS@{ke3gA~AJ;1SCNNwmZE2et6XK&p1n&-)G*!zdD=x#V>LmJx)c4?j z>FPGaOMPk*z}zj3{25asV|UC+a-yDzW*J@FgU(bGcv?-bwZQp4ydwoh$RW@0q=%sL z$0W+Fu`KtMhalXlQ>cF+(m%TjZUj-TzRqCDs+^2p{=F_-8{4NfFMJmL>+Cqe%!*xM8NQ-J-*S=h8T z4H>U`x3ezYk;3;;_d7o?jEjb{AAt#^%XPQug98^#-g62ZQ6`ezk*@GeWHxe$)j-eo zp<~Y0I{$)AHk^-@xkSG9x!v#WV z3+6ho{mb$j(^m3^+vn7wX-(K@#jJsxR+zQgmBjZ3z$ZK6H9EzrM#ybu;pZqreG0Kd_+O`?@-as3POH3P4+E~M1y3Q2eS{pUB`TDHHji>f2 zZ|7MG&*b$JLJ50C5Qi<_r@|mBqv2M?FJj&#PGSuhQ7#6EzIDs*SSclH+W`Bh4H=&`4>A)90&38xZY5H>-qrNTEMKXA7Bs>w(hRN*K>{=aX zBBun=MC!H^o0n?AsFSh<(xi@T{1`AhJG$izRg!}pxTZeyt;NQDX~7=fRQ;~y%AlZC z{q{X?i_f+#nO=$5-E3zO$> z9MX--1A6Hso2tjSEk8D5Z z9dq0MrrBTxQSDns2rd^iaAFeq%dE?r`(C}D)0*g=t0F-$9GB$VD{KLG^%9d!&t~u1 zUEYCQnGlvsd%kdOzMrXweEhVe-e|{y_(QJ)A#v#u32O3;pg4$;BGu7RAOy=$R^ByI zu|LtG7X(>$=ya*V|FQ4zvF4d`pn zAkXz}Hg~eq{9UB85+|~`{!BkUNhrmzJtl2)a@Sy7yj|`w+#bH~d+sgLPmUI>jpe{Q z8Hk!<9LtHpkZtjlU8Dp7|eyAf`DU5*w2BX(^P;j(G!V`&bZFK3F7J6*@hcBPnnjJs3z+ zLH220uc`8=7w&dd1kXoH7on<0*?*u!b)oW-nz?c{gw#g4`@Rb*n&E5agTc+>D%sH@ zSt+YB>D@(h_N_EWdU<5BPr2{lMK>7l;cIDKCH`Z_l;KJa(;3tmb*{q|{?AKZU$C!k zP+K`@p{k>&*PPx`2jkCp_&`zlz{ z6<%+0-FfVd=0gnk^pR~vJl{c-X1Wjll67?})m7;=IN-;s5#ebhNUYU6vs;XrR9eh- zHH&2Vjp^bEwRyoh^Ue0{9AbPm{|RY(_Cn|Y{|RYf6AhVFJ2V<@nAo6m z6e(?ZAZT4v!)wrRM>y;#i8$`?d~dKj+r`q7-FesU%wBSU6-rEU$ zzjq5RsN@?O#!Ehg@b2AG;%x8iB6`<_n&OP7@X!9}AL|vs+dd+)t=1EdIPtG41zoP_ z0~4xd?MDVxzk78M&Mi5TMg9ERqwaVjamx0`yRm}f*J|e@D(cw)jBV$wCY;yKJ?=9n zPw!rBgQ22zC={VBFsp*dIAvGF>7gI%I`uU7M-<)7_x%80H=b@>F5NTBuT-Ut+W|Oy zgho-nF+sL#`0@EnMj<%A>~-yFh##ssZt5C0L)U2+80TYBty2SJ4C0f7h} z8-c0so2{?ABj&M>Hm0!Am()?-gTe)B)E_Nu)W8mUefP>~n{3`Zjh78Yzys=ikg>Ep z&+u?PRu7{HAI6)Ao9;JwIAl6)m5P4?V0`(+k1BHJk7ySP;{p(E6e}NaHMw;yBij%r z9Y6E*i`dba)@yvS(WgQo)Iv&+w)!b5N5fpU`tEOG)4KAq@IR9ng$m}2hBzHxcfPzi62!&n%+31}ZE3*YA2>Ffmbo zbZ!-!bJN7pVY?pi_7<_bCG|y-z3vQ2e*AYJ=gZc5CY>xkYxj|bYPVRkr-+uSd{$%N zSuc|R`S3vN<`;(Vg80))=$<}Y%P8+=@!H(SvG-JSnscP4wn=o$CF#p-`-`Rl!0OU(QJF}98+Th-RW5jwr< zNpMj=hq(JJwAH?Ejy#uu_NiC0-fke31P~qE84dOfHy-%2X~_MF}eIKzMe~PNw^ZW1YEXB1GhJ z_%Js@9=Y`URhadl8)$<81nJKnHjjqf?>fX2&L{IItOr9JMhJarg`8md*pi863jD2? z-j-XC^5x1(XeYCSzLPc-gcV!c;q%c&Tjl$jOUCy!)+ssWw-H_nbT?8IHwEb{-V$Rq zEfzPq?~pBbWUD;8tDFm}oQtZQ3*>D&O7=lR!%uN=CMX!QYD9w9#UqQi{{FV1z>nz2Bxx*ceQDf2-kaGgiUGXm2!0Rj=Q4TU za7N5m@o2K+ow*f0KlE_15e{q*P~HeXjcu8R4zEx(ZZ>V7TxB>w-<9)+fHTKwT%*^+ z9YMqyPn>KWphLR$6%MY=7EKSPl{ot)v5L5ZKN{XK_mA zWbzZJoI{59yC7d#%;92QrggVdxjY76t)%B-+&*}n5~LJ?<`qQ`a=>VCkzaTGY|j+l z2;_(9^lvDWJ{{vKoon#~22M7Ut8Ev~8k1}GIL-u(YcV9DMHv$AIJmN}>j2%?wFfl` ztpt`d;x)CzGMy-%kPhKM8C{D#lUk%5`p_I)mw@~L-w64i{3vXNXS%<1qVIU_bwe#r zhM@#wb$E{PV+I%A{dV~gO*p%tY6=c;w=u{<-gWT^zx)&j6jvBhN|8k56QuKFpFxN_ zDcv)O$n;5$mnG@YJu%(znC6f(p2#Cn$M|>*k}@>bG+ehFa7WD5R99htIV`5JI?q$? zmf6Zir0Ep}_NLYJiUw!4Yo3V4GiAx2C`~Z9M(_MzFk0pO4dBcZ@e|S!94IvqLww7C zU0>Vq%6`_)35RY~AUM+{781Gm zuFB1zu_4+q2;qrC&+;R)j$pRX6)RuE z82@4p(4ks%C+c&(qTqFteH(Lad^a4K*AZSWt1f(S?fMP@&qbRqVasoIo4CBA!R|1c z!Xe;PAT`3-Oj$Z73Xm9~381wBp@JPCcmEg7rEqzpbQ9OgU$8r=Cb$Kh>H<^)+7^%( zKKCeh-72Qjr>BsM6C*F*W7>-+mQ7kPq`5Y`7upc2i zH7Dr&6aB#NMb_Lzs0(qIv1oCnkwn_)(?|bbq1QS4qfm-&yb{PFpoCy}!BFDi@tftM33&(x% z#U*CbrvCQ0ld=Qk^ZyS7k8a_%uhVje z?LHiKIU{WWH{FAG?Y#{g4?)gichDj^j?0h;t>LZgKk?ZZ(AuJC%q^INvv@P%M#!b&1 zC4Jp<-Mmc!$v$Az0yIE5BX1MzFaRU~ugL;m6PymNL(&8TPk}@;o#>qq_u~Mg7x#Z% zZ1XjX#O)mwjY#p0ne&c%7fp*V4if2OiPy({EUCSU z-zHGUA%yylj%hT5!O+d6?k2OtrlC77vQ9qKRVl@{YKz ziNXjNvx@mNTa``}PUD3jukL5|Gy(39uLABnK)hZ%h9kdbhWrUQl4+d9bsQ4z87ri` z8SWV`#J3ghnfQ8A+ejvzeIM%u@mQlV(2BTptNscP6ukO>hu+@t3!DQB>LUVuyOi`& z?$Vuj2ilMVeS&GY)G3cp&a-x5=i?4IYzfm*?Nsy_LA}vtw%Y3fCXHa*O<>*_S#^l_ zP8viz?kVF5N^b}w@{S_9iqhGrNtpN-LWFq(bcXxa&d@gbussfG+;rR-S9`tuX?Nd_;5y!y|&{_4LpFgOimdN*$B?~KFi+Mm8w0j9%zf!E zG>+wbi}rd8L3xW%wMhW4af9`*+3_=Y$_Kn{3C{fuUczf?Vzs&@eg@|}gJWKEJe~bN zQwF1`^hw4r&KebCyXIG*D=!8yWvRVtfQ}5^dhN)1jhm#~;|#j?KwT}jdC(Wiy z`0_^ArpvFd{`W*Pxx_zYLBjQR1d4o^v&B+RIpWe=gM?~hbe5e(*79SCMEr=jGj*zh z(lrKA?N`VT7Xx(o{nFVpm))7>3q#Y7n^kyg;pbh+8%zcHESdNkL#@8>4(-;i2cvH< zHa!G(JbmIt( zOdvmKwTG~HWpg#&IDz(QK-JBOr_;SG#c8~^S#AjtH1E-Q|3@{jO*r3gi#%;q!nH^KKa z&duT{&NE|qs{1<&!#WKqYjp;=8bSOjD(uJau6aZaD2%05s{WP$6YGnX{b@_f zY3K8=r%IhYH0!e|JUZqze=})sj>}s#>*`Lt3eiP>zL0z4%wVB^J` zYc9r_B%=Jzvr41rmtClIuEvSHqHY&=O2U`*0;}I^k-gEm2Q*h)jCMkIwVb+ zx_t?4ylf<#hN7?A$StbLB$x$(w zBXNH2^nqjP$%kLOVm@fo5S819i3to+yr4Xb?5)4vDxoLK$T&6mhDX!Lho7;ps628t zi|LuYr{!C2WSGgOh%PZH|9Pp{IthOW0~xi&a`Iu~WkLG|3Br2ydGY52FsF-`a!LeY zJp-)m$T?tpRBhOg4c|)bFLbL4o#MgSoL9)dz4EE)D>p93`{d5pD#05G3$8~ z;1z${f=nl4oUgu5iyYCyG7UoemHf}w59h$9g8a-yQ<%^fen_o_(qRlo*moNKVO&@I zV2(8<*&SZGthrMi!U*nWHkyVof{^98pY3p{$eg6+mi{h48BGE_l2rAx>R?TrfOEX{e?e?Y7Jjo(=n{vS3kNwi43ICtQ2kFx+>T6U)D_0 zs(g4aN5y<@w~NEPKL?L?qxmJL?U{X=>HAGHGP4|8evPN5b&Cr@;kn+w$_Gx~C9STW zOHLG5EsB9>&fvDnZrHyg3s+=^MR(q}l(<(JpSOFptnqEad5Db9mor^%X}NJ%%a09{ zup-1Tmnh|55SsaG`~Lax*-;dsw$iP1UWnVUn{J_&3eOYP9h;=q*htJUAO z-S!v3F=$=g#i~~{Lh@>xch89jcSF)T=n-4 z$yB!9K%{$-;wAo_6>JgEJnq$FObYnxi+IzKo)&31pSO1;{8D~ z9g_pJjB%wK=jlVaCs25rMcrN1CzOko5K7b0j>FY=YqDreWokXh3}td zJgb5nCVO2CDXpI38xadfCrwx-!Tqg7X;>GFJ&8yKzkdpFM^!SN+0iIzyXPAN)VBy4 zVLzbMlaAVSe02U<(`haYNLOHuVrkhNNaNHmkV(IRnej;Ha$|GlSANCzU${y%c|Mmm z3O}9{beo-sjNFxj=JS^;`SqARxRv{JX(TCa4LLJRbKhlTMAjE6_m;2>K zhF#cVyA_~cg}?4jR4$PfZg$h4B64YfVdX(29hi;OGezB4m>6nXL9^j)^84LV=35V? z!}C!f9G&cCAe^l8?zszi@IW9cg6* zZ&=udR_R;bmY)Q_vy+i%lx%IZN(yGZLCRBiXXI7rV2~Op%Cl3;TWF`l@t#=2WT>f~ zkBy~PAW`L5@3A>=(`Hl<>!5N;EF?c!#*Xz7fe%bB4zKrA{Wx*{#LooJGIbj6orX<( zYo}~lrwk(kg^r{P$xPlATarq*H-)^^M&ov=o#YOb)1TM9h}>30V$W_sKd>`>dMnb7 z*cP_Y-N#RotjiV#37q<8@0P;PPeUT>&HA41#p!#q-iN}CeY^b+jIgA|`K`0=xg71$ z4Z)D!X>q8^A5V>2<)&yB)Z)H3FAwz3c5nG> zcZuDgoH{3sjHCJ-bSDz&LChfMd`jW=?d!Ccprlx5lzK?-fHeB#@sW5{g*yT!2tL9; zkhAh>A0}2%0L}^(EtEiq)9%l_&p$f`xH0KtEFm&8@(DVb1@4L7>-9EDkRk0KOlW9T zJePd|?Uw}W@!riWf8+B)h3(gcg2-_1d0ETnN)_Cw-X~TM^wEH)hc_4-SwS2fZ~2)kPs{65qjOa|`WeFNZ#)x$V)_*^Tsw?_ zy{%6A=>51Kl+06dv=s%P4ILBR41t;M2&*}hi`{O}$4K+(qo=aN$HXQ3iqw+#N2!4)eS6Uz-KuXs~o3?A<3vJ6cenmKX!#a>oMsAKq=l-rQ?r zh3{x`I%RmiVx#{~2WTIu0s_)0DI!XT(kURhQcEq}AYIb2Af&%Nh+W=_o9*_{J>$NL=0WpGtK(sx5I+Vv3PoqX5uv1N)zY1StD z`xMRNYH3i{qd1M?W20=iNJ7YYW0=&Kx`%8pp~`~~4QpvqXrR8w71$z$|3Z{3Vl458 z%Wfm*7=+zdFa~=skHq+2sP5O+b(YfJ?Tv|xgsy+py61`z2L0BN&YYU*4Ha!%S5a;H zs;I3s#Fn*G*96s_RgI!9Wkx`(&))CGLxJR3i&lR1TYTv6GBP?QJjbg7oY(7vl8}S> zKk;Lk&1he4bL-vDa-N{xxQAI}WUXy_al|lWb=>(U$)?^uYa?s@bpG(}Uv(cSJ$$xl z0rX4+`fba(_4fvD5NFmpgE>Fx#^zTJu9Xt}fEs9TriAXyLrdRDB0 zv8k`q?T?A=<3eGN!37ZC!so#cnK{0`1aRMTVwUtU&K+!}la-w3E4>R@nj|?@#=qRj zDl!auf!`V!&^@&uC1zL&;)i0pO(Dz%< z!r1DC`?v7zOylA2@4oNuF&)-P!8H+KowM&un4;+Vc{It(@x^7!BuZ5tSql<5h@$y^z+T-Z$LdWk#% zq+NqbObZL%{qI2)KzAr3+J({KIWy{oQLwK8I=nmZD$)Oj^A|J$Kz8D-e>r+vv0fddUJ`%mvu;3+Ey39Sj-*~#bs$E498ey1+`N_aRocz98p#^*z zSUTO{hThxIOAm&*lokm!ea6ny(yiB)CYWy%*@z5A**a^khf+@&%b~bo9H>3_GzsL_ z+P8?)WO?1$hgRMC8p1;iM5taLbEUU<^uIWbAHoMm8AC1!4hO9U;d?4*@IGN$JpgU= zwE_GprU9U?T-nnL6W_uT0O8G=0XJOYxh3NF$tWNs4(Cq)^c}vNvQifNC8@_#NNZyL z_>`R}@<*0}f!_^Fdy-nf4NFpm27uGe#p3rQVJXu;AF!m60??v5fHGO?{x>X4n#CXQ z6K2~rfolyK^`8%+d*7LX2QV{bwGQigVO2=zu`KW;%S&o%OI~-Xy#3WrLOPD8J$LOKyE<|p8Bi8?bUv@9-w!lC>KfWB?58N*#J)d5wU_E%i>b}({){|-Pf*jm` zhR13ywD)oR2$C`I_v8`*BXOX%;$v&F$FlXuR`R`Zo}c=|tqe%q$VK8#5rCh~ZE*_8 zHfQg73dx+oZNXl*dpS0J*5Qu_sozgMap0B0Zteh{b3p-gPnh-dWVJB1{wR|8&dchf z2q{Yig>sZxl_XAKAK@1bRCwhQlNTDik~_)=tzy|oqI!pfxdy>kV%{o|)kF5FVVk7f z`Uon&*xvQw;9gnf8bp=mS#C)a2VO0_g-kZ_!30uR37ckL%X(!sJA7q3v_A6kVl9(u zx)i<2%B_XBx$9W572jXV%k7z9N1)pl9E&1%pdo?gM=z%K6bI`DCxK#w7>6u@WtS}R`X7~R6KBdvD&73n>9ysVI@{$^SO0_76+nHaS6)rgHJ!~ z%4)YRC@FaAR9tEvc(!TYmi^^A5*JB!8CnVOn-4w`9=%9h{RdmspiYHznI#H>F;4@4JCZBQev5YtRUlvAQ!lCr3Uc=Sg+em9)x z7dXJeQ#M8cWM9FAQrw4pmL%e*X!!UKX=U2C*ZTB@c-6IS1XCdbM#c0+c$On_64qj?XBX;(L_ilLXTa+>+d})6q?HXA2$7fBQuKut@3V_hfORP4 z&(F(o^;^nUHMdr`jX0d+ht+OBQJiaT5BoAGI5nH`jx;Y+4u&4E%x(312 z9_Q6FjCY0f1sT>j1(!_|j>?qjHRA~&lZBu8(wd~!3tblJ<#{VZs7iWrtw}~DE({m? zxEOGGc&djI1DAv6zbKzfm;y1eP63E1I}PB=mt`zP zNnlSkO)v+;m*&fzEnB)oz{I)6~fV-FJtkb(()J zYx^{=E0C2gmT>qKxJpgG1YQN6RK$1AaG`f-0SCdG=QRHTsQZU2ddh8gyz?V?)l7*N zRnCV@@*QeQb2g=h5+}fTtlPdSI(l!N;h)zA@{RUa^GR|>kG)}c+kElnLT_7)3pm>a z@$r@zRqj46T=rm(vdLtO0C`in2q-8mumjzTHGUZR2!1r(V?=Gdj^+8QjO3%1k$jF0 zxhy>EY6@^D%Ui#YqX-I)&H=EBL*77o_G{{nht+Jy0qFpqW@ z1RAw-cD@`mISXxO{z-zSA1-l^nW2rCu8ru+7F)etZP^V{K@YC7akn?sCLdI1@iNhd zN_t#r+pEb+GKpRGPGr5<`bNOZnQ6}$!dBf$CnnkWb_u->0|&@YxgK}?l-u<~Vm1)7 zdM1EF!AZeD(97ZBK+ri&+X>= z7Dz0S5mM{bJfPK6(E(uoBPBgB61s8Qfa(xy>d<}n?awfAXE~o(-f5uu8^J~-UhqY{ zxsV&=08GURKj)2|dM9`M0YJ<&`!_{Ogm=|3d7=Z_WI$K3jRq8eQuwUC*o7Rr)vTmX zY-Gg?h6_2X)7m|SN^#fN>^xDqD+WnG)vr5vq9_T+chQ(pNcadRBq(^|$k-n8d3@Bv z$X?CYjFANcA-(@fQtPIP%vI~_s6<) z0CgreKH{-oyWT$gyw<4tU|xK4?upXnHS-KlG>$+IT-Rcm7RHrds)c$x+F%xUE`rml zIB`3L5XOTDM&7jT5QBE;c3a@L3`&XRAfGYQu?d%wqqK$U8ukkxWhT&`#;TZ}i6uMS zt8kfhM8Su4YhXfm8Uem!9m&X}k{y&P%Z<-pni4Fp6fBrywHqrfp?e|H;@-S6s6=aohWCnF$1B5S$WU?! z5+^;=T^jLzC9&4k(5J6@zIsmFdd^Q||7^0v_T(Ikh6ND zH6*opa5+3*cS>*&GN@3tDF|vTc6nA6fBUHBd~Dx$wlsvEZj{wmRi0uaD^QYaGI+*q zVX_Z#mYLbX;GGVu)f>7wFvA{$rBd2Byw%YeZQ8BT3{I_n>jS});eEiESxCFk8!|sK z!^kp2wS$qQlv<-v=9pZr-iZ}$=XX!s%HE_8-lK#1)Eke?c3YU;?12H;I_wAXzciwy zoiwP|teD{S7UZnlm}O+C$c(6E9Z}hOKm|E#G%i-g2Mp?kq~9j8g(JkXWmyCP(AOrV-sXo@VNabm(a`(I#O-4 zsQyZoa4V2Fn(JiHH{nva1U20iR6q35(heEaOUidCUaE$q1`OU)ftb@hB_f{mZPMW%(! z%mp^@Czv3S7DB*g*mK5PY|lAUA;Q9zw#qlbCOb19Joy9X;aeF=>Eb8euejD#{ugs& zy;&AzM3B`G8&?J)Nc#{J*?*EK;P#nk|AeF3;f|JI)SwSAJ+hs$fMgdhwHsPeGrNf- z&J;O8`zHVgceGOD27N?8&T5THrk1132oA`g_*QuzSka1lo^`8m#xXNLUEoovSm4TS z%Y(*HL}LEx*^FSwMVWE+MVWghsm({Rx~HXkZ+K1FOR8gB#5#HdtG4;HvZ#1#Lu+|p z8aG<7AmFw6rUCCNYn`>~BW(Vm%=~@2=NK0;W>i+9We{NZIPw^0rH{_qsx-n9lD}EF z!~y$ClW;4YST4CG`Xhf&tr1~@^cofE^_Y<*E;B+oaXZgx6$n86FbEC0qYufaniiD!|71hmGA%eMJ^gv)OhugLudHU8wD2-5EO?v6gyvFku6_XjJJ57f zN!M9ADm5b#6ER>mVgM5z@nlvNs;)zYh*{Jfzti}Tg>z|Q9iUYoX7lB>b!?w!i{WOP z&;L&D>F|6+k;hgga*{|PCkeu2S5WOxtnzCHGXjOROmb@_963pxwUCqKHFA>NR&vWE z+$#MyNwScWWCVir8<;QCg6y#P4?B-?JQ$B-9+?>P3t^>;Y`ol2JRSp{Ruy<0p3qeXP8r~KOQ@y;H5R)3t&C68?vqM%+G-ISXk0wK!>vpO z**FmDq>VMT8cRm(yW8n$Mfuybuvm+vTB5sGgLK*ZNB(AUdOhr` ze!`h4av2eh&fn7z;Ijahza1IYG99EwV_`a9H8&qpW4qXirhj5deN>utD`zHV3~Xmb zodg+7ID2@r^ME#Xgg3*H&ek$wMN{3$V`F>fE6m5j`xW2%lxL4CD8is$`?k6b3Y%Zw zUo+)hFdWjRU< zSos9LAzi-L0dPL3J>_>eUjKldduM}pk7XqVOg$YhV5Ir`-8Z&p#_lO35tr*#6!F=uK z+9qvQ2R&FoJL&>TCc8~)qmqy&yM$^?5HL%~U^R9L&Tl}@ zDgyRqmUhfLMXV$0Tf)itjV0*{5ab7?AM%6pHDpk|%w+G~^j#g!`ZcxDNG>FcnD+wH zT4(5{mb{pCzt<|bsxx!UYP5RG&?7lL$J=s%||{&QLjaM~F= zaVFo1-PCfKd51A^JI86IcVbCxbP|$UGU&kwa@G{6H)JBKjeN(t^=pQp2V8DNy(n6= zUGKv`c0|5MGt!$^wJlYuM4h&9`WRm)0%wCii

    ZCFfI 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 z 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

    Rgntte;S=a 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

    F8z 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

    kL3S@|@zDIWjiu-h@D0S+sbG_7f^& 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

    bGpyF=$)lW=U$Bm+ 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

    eVmp(*drib1fN?7^OwX3`&Bh;ZvvH@R~ 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%0D%(vF?Y>3V4cw!8W4A1p!5MmXL!jt^~)oD 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Ξ-DJC*%2Bh6) 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%0A{FY$usi4AH6152S~-fG27+RY z*Z;$Hy9j2~pQ>-0E?%(ZKpdH?+v%~k{=B6ztKss!nXVePq0o17IqgS;WzPn=6OOZ6 z&y3bg#ZvVrjyE;q9-=-0h{;>RdkAEIo9Jn~XB+U=bFuxg0viY7g~l9-aLKgKW2)4X-YfE!a;XGHE~LIBrF7FucK(MlNGco{Y(!_tos5pNF~ z9;5KF(3wKn(qw_VWw*e2+Dm9njo0byjP}u}?X2L&x<3lzU;J;-pP~m?xx_bNy(`ij z4{uzfOt5q`1=P!7wZLx2ILk)1#Hx=Q=XR^ojEHi+OGyMHR&@UM1|@)6-USMiN^82+ zMh9VQ;M5Bjo5;<)Z$bWxC#C6JRn7l!bmtw^GgeG-NzLLvEFuhAUW}C#rx zW(|iUY`NG~x1`DIVqt$CAYhxvx zxVA@jmDYT}ust;>Hf4kw@ih+x4DcEM`s(QAFJ-_HRN$i`^$ObJ1agcj9Is&e3NRY~ zIv}6FHdc|c^19p_XfHv~qP*PN*DCRzq`KTHEBg8EjK%rlTAt~%cMHFlK8C_Wr_NH? ze%St;Mo*{S4<;8^p&J&Z5Tlc=-XF|}57XC)V-PmRD@zKGKou&tkc|4XDHI-~<67;p z4g>Ag@*3IIK@0c?#4R&oKMVMXTbDlSe2FD8=ZV>>{NE6d!yfpYa+b4?0$h4}8NYL{ z{}bxf<(DP(fg6qyz=YaV@jus+D1baS9F@o5^ht%|b$HP3COOux zX(bB6@BHz~E)RE@_G!eVz(&G5>-e-rl|N}a=TX)M_^Oa$NpH&4&lHK)#%!uP)?n!J z@sMvM0_Eqo3&z7BqA0-6w}<#=fJnw``7}VCM$Eo4)X(B!+??Yg2n;U6QL3OI(W+V> zF5l4FH`zcuw*|!qxs@jnb^sE}`%zq?Uxqr8gzYybp;jCJL7g^!8}Zfc))8m8M+|?h z8|}#SvorjSPsrV&z9afg)^POXPid|!x{Hb{If$U$jaN1%4jU^JcZX+~&;_D8u`Rh_ z5*_rP7J*jP<4z@>cOPS~ub3*}@BPc`5ZF|x1kO$qm(oqYF&PcF-lfQ!z#r@8H^tPa zi$B-3xyBpOnVyCf9VFK*vtEdgg-;kdl7>icN}WyS43BLc2%zS0+Tg*bN>}2?nU2tI zXTzaQ&bq-)=L08_=1$UKqYck}<7DJMg6?4JDOuE5KMi!#R@+x*W;H~E&p1+O?yE;7IY`@5M>@qK*#1^HctO$W3xaq z7IdH4zO&#vMu|n zaEcY#Oz5AYoJLUqpU{@1FRw2nRNA~DfV|;XvfbiKVhwf&$^Cd5MOCIWWIwTEi&$l!4UZJNwa*nX2I@b`aN)7KfOh^}zUy^-Ckj#2fo(X2=Fkqjd;WlJ72sm2F)##Kp8Z-~OkJzL2e#^;WBG6FAj;kJ~ww?fbYv2D~+wgDW zOL&!K13y3DT)GA9dQ#b84z-fRbeV+3m}WnP=O9iK?*-HtP%lBJgKA!mtXoYUDRfz_ z%xafuf_V9nVOysxJ0ayeYq*dz!if{1Anof0iM;vl>#Z1VOn467UZZhlDB%F%8Gkdm z5R9Pyrk^kwdO0|<2bhfKL;D(z#P1+gk%X6S8~~G>KbzJ;#VO0ufq|va=cuM6=GXw< zzt#5tiRH8%AU(8_e((U| ztxg{8ha%}KtxDKL@4s8gOis}ApWv?k+vje;Gi%hxv!;Mgp0HzzAS`BuiqiP;`K2?8 z4aeW(6pKHc630P2L0ihU!*DOWy~Bj@x662TS16gX(+AL2$x%jU8LY04SAz!cYPH`s zKWeR3e@lHl%5{g&TDHOT`S-7_z;Zp(4^0&U#*BGozt#nEYYDzCb8{TZO*RV{y+vXB z$K_+A1~^eMA1_#-gHoGba}8;HnP5ZsoHs|npm$Sn+pK+fq)#W?HrdC4JE*^)$;~#* zZsP<2nQC$36A4BkxJAINTb_%(lr9y&+|;V zfCtX=C7^a%e?nh`lE5)|J z@m$m8okBT{Cx!1##Vic3D?=~ZX_4hb^@y_(+sV{V^=6w;p{IkbHOr8WzKBz$T(*zw^5yb%5Wd9dX=_R=-Gp)idn8JI|iwz`(r1qS;fovd&SjB zFz{c!OmfkGi~%%c~zB#6_$ygg!O=~tg*&NbhCXwqN;9ERV%Yselr z59XX{{QpboBt7ZPNG8=?NwrYaPT*H-y(hSNf_& zw(@8b_n*|eJU%zIt*x{y+ToM*pSK|1-bB1ZFP`3px3toIC-`MV4Z>XVr=oxQyIEkF z@ZQ5ZL|g^+nMi^k^&k!`5uOP8^VYv`oG;Iq2PnoMyVZ-gy~fh0X>3@L{|2(p>o2L z0s7DC!8vN_Wz9FzMt$XOfrjKWfuF7%rzHh&p_usRKPdH z&#p#AH&JU;(R(Gz9RbCg2G|y3ozgY%%RX4=K z*|lk?&7SxEOzo+eVUVM*V4w+HuUNTx(?uO}iKz}}ydj8!L?W1Ck&lJQ1ZH19-8Qy? z%4K|)2(6}7T9QxOkNWE&^H)iYt~!d9&hjCg65&3t0xa_KC&s68Ou;Mim!gRT(FWdv z2+_9;*D#!9qBKJL6ni#Psfev?V5!#tN+AtS=#Aw~C`%QnHEpVWu5bFXJUl||;%%V1 zt#UlB3b3J$Df8n_bHc&L3EZ=puhY=n3Ou`%X7N?O0vu#x0WbR6jrDo#?iLe z&T6LE+a?=vuA}MbHx2q^NQ3l01`8ZV(X?2pTt_>+BB1a!0yypqL(b-gAK~?VM@r4# zYpjsfPKCXQYScU7BHNBChwMLI3#{4If_xpV#i?$WJD9OfHZe_vx+f8y7&Zsrpf8RX z4)bPz_tG4Z?<5vBD>Q_G-tMsejhuA$m-pm2XY#U9lB8LFvTejTB`)xmZ0YWRTj5PX zGv9Znp={r!oE=y|n3FSQW$2C+3~Td)$l_A-4+VmT_{QElM1%1dm7iNF))R0vDYZg$k2lp|U~Yk@xSjY*=3CtbhoWT>C_T zm_D{Y(Oe?)#jYh(>z)N`8IBz^KC&LbGWin&M(rkiAJw!EPD@hXp69m|=d5!U^cG_Z zyV9b1J~--L7mL*ZhX6f?2q*7RO{gncRPW*%JVoGEgo3PS zOrTq`i9A6^`nLK*<7$XGY;BUk?+#!;LVq;V*@e`EtjB0=5V;)mMc^_Qe_l;|KDWpG zui>}q2J|qQQzGC8^6Be#i>yQ-Pu;VGBK~TmSxbz_)OWbWx37A3E5682aUV(@1kl*WjMZn*t^u;>0Ec;xts_w36ppm z3*(re+9>&hCU+1%vzNL?QcsvTstm@!g>+hbM2Mbhi!ulBg4>(}+JALkqzdKm?9b5- zaY>s?akSsWfU9PIN4MMKe2mq1`p;Yb>HsZrU*(O|cg-OrSF9iYF~mB{sz?3m6P96yJ&N@s-LoJF z1>^%QMp)4E1-W~<2lW0i-r)c&C8t&IHP=D%ZI7qWzvSy_1#_Zl2_oYFi;Dv;z~aSS zgnZi*ca2&=P9aMH$#});#;ZLEGEJNcn}4*}tf=Lh&2p+<2>tOXIV=TzZ(b*PY5Y6; z@Acb__;>KoV(Y-eFtHQhLq;lps=m{r`$4#63bE363 z8`HZ)@)lW(wP_Op{88FfYliIoW@A28D2&X!FOOAA$~6AJ5cdA} z@RQkvA(HdNJV5e_#P9Jy=&Ji-bGN#h=~`Mn09F$6HJNxRo~n!Znw za~##ae={%%8aE0L3Q`YJUoH=c=C(FD!Q|~-CD)~g6fKgjaGR(6LW5JFuL7HXp`FAA zcr6H;95{m<0a@otGsg(S+C{Vhr70(=&l zNhSWIno0W?>JnzO;jb-{1|^>FwjQ`3*f#{@LSr5)Q@S3uh4OCwDb1Y2ELsvCgZdG; zJS>HLvcMdsoa6e8q(@i@Jv-&=`{H`&8?$O{?e`FU5!B=X>ssG}y+f9iHj8#$hKNqG z)2sU;Ot$02huu-EM?xm1cW;dDLM0YVOKIiXtd((qJXqJ;0@uYfXb%d1y~ETjP{p9| z*h1RRHVv6;%dPfVsh?H*cE$r@7Bu2-N@H;7%f6Hbd$Tkzq=lWB^d7x*Hg8CE{X~i& z=;Q4(?vtV6vQ{5v`*QnwZR#L3%RBsn!@zm;rjGK7=TAcm>Mr<3mUG8jVgm-)5B^37 zp=d~L8!*vnpkB(>X%jIm>JahESILIOZ@M{&@0x2>)Z!1!|LvtJT&0_Ec+~rAFv%?n z^^w^?JBgt@d{lfQaMcxs4L5uiWA3WHh4?pxvyL%$$ z4DrTB%}FGar>@h(zqV>=r;w!aeIF@xX805ZV`gbdOF2T3)C_3Inxy|M*BXY@ylO-a zGC*X?8EMSNlE%J9P1W2y+JXLdG5!tw7HC?OY7}Vlamu7{}gE5H^z^gNq5oPGX z-KkU^HKC->i?J9D1ZVkP{BiOfvY}@YT;3N?zP)i;#s514>x>rubl!SP0z#TyxAMO4 z(!mZ?ebGCkmZm4yWF56_&pG2y+9)|G=<={3`tOMPiaq~KVCGj8N9;k7{HfgDB1`kp z!|04SBP-HMp;q?hdi8ew?!w0WZ#Mf}<;JG^a^2@BFB<3EM%Kt}q*Q{5!Vb1>A8;A6 zL^(HWc_@$$TF%Uno_meO6IJA`ab^V7l`FWYqa!LDjRINscSkg)JDq#iTe2FXx|u+Y zYd)*4xz2wY+vt~jL_x8v``o{ca@zl0RhM9Txz!x}C5k?_o2z^3&@AsENxo4L@6JoV zc0eUmnxHh@GRoKExsK>uBoc+AWyum1%6Uwg`38$ue5D4&x$FlY>m92Kmq= z81;X?%RaB(H(Fz>R!s}3Gr*f8mm>BJOsomDRAo4I!Puqpnn{m8JGnW3TTzFrd(US(j`70 zS~TSH|BL%^)<0zTDYQkW@*)Q3PxQRZQN!fXehb~-L9=9>{uMFHHTN|wYL-E}3z1Ww z@#-W6hDd7LYZ>FziX{*865`uL$?euAW!p z$C)IU5UMUgtC8&@jW1dG^z9nv+CH20pm+oq98~zmjX_ZS@#s&DpX239&ev&fq6nwX zbD|mR1)kMbw6*(NkcCz$%n|T7;9khC)97E3?V3~8$Sp{d`{oD7>hHc*nG@rX_4UHO zc#jaWm$O-Gqe&|pPGJ#LPf94W8YwpqTn@BcyHuF4aujk&FKty@k{wn`Fl5?I<`yY1LR`yE~(poU*JmEx^(ty=r z)b6NFua)|P1q$pY{ywZ~4{Cnn>3R)0NmxRiNH+C$sKzIhOYw-7Og;13%`%724VCuU znKLQnBfxsF+QS@o-j#AM+DEZLyLQO-y_1>J7qJGJ{lkX^!;_tS!#{41N zYf;PmlIH|e~=sC?Y$6*UN*H&A&mPg+vw zE-zA?T4*HO_M}ywhbqEHaq^lzGl){*kaCjgj$DhHFv?4P@<`S{gcLH_sooxRn_ce~ zMV5S5Tc|K1)0SNr{DVVCt67BFe(-np@7L63lMSMJ7mbCj{CHOqY<73ap0 zi>IxyO=|3_CeDwACn|d`Lgv#aE^o5%Q^Jn%b|4(=cN|)-nyZKqoinTs9gvB9)aO6( zN2G=UQ!Pr9Y7>ozat8d73$nGqslp2(^`Qg%Ty_=OSElS!IBAN0BYFz0_M2C+rG} z3_iNei)x~u{`%{RTj2oqdx`ts`*v#sk7}&nFC56XzCRsoaCnvbm3KDcMhFMN)u;iY zptZqV2)eS&vBDqhph*bzcIVkjAsZ6q;)n4BGs{?;E?+;~&IkU}rUW;-zNGXIy@IRe z-jTR2(+n!oz=9BS4#f(JXiFg~0pe9n7e9%SXt@@b5NU$lyU4F3F-Wzc3RfN#cCJts zxoO6<;49sFZgT_f!C9d}&U(`G!QQkK=Q+cvHow;^YL&oaIfc`z>Av2SoCmJPe>R0L z0yjPDsjDfg=~gjCjDrw3#PF<5wX*$?z~AN`5rb51QAsZ8UT1edqZul4X4lCqK$4b4 zZ`yRVbV6LByFcHIk=Sv6I|y>JbujX+z zOrNRmhRxi68k_OLt*v{;Svb_D4 zXkC41Vc_n@ZG^v`+J#>mVYsMtCcHDGcA0HlN^P50bnEzDIVS=r&8>&FQI$y;h$|^> zRtG7-%^|fHX~qwQuA?|PAz?|*76d#izz*Tzb^fSeKROBoT2^wIGW=4CJ0ETiL}?0m z0`u%PG|Dd6Z&o8jej;FmoNkIN8-`xlVTD{j(xHbO3RKC!&C*&V>76re^Ol$AxXv%A zb$8MH-U-Xn^_H!`)f-Uq`$IhNV^PJu3pF1!w+-{R6Wb3cBTs1kkSlG`xE;AI+bW1G7xi|{ z6n=kK8=dpT2-WC1O89(3z)c3rZSvzzV9CtE`e%V6dpb{Y*KYEIboppOd?#nLM;yZz2BMO6c_L zBt zRf@8Jy(ylY)AJ}si9zj3r25=}w-A`#Z4*wz~nlt00t)HgyVZLOxjl*BssFC)? z39XaYhF~{GGAPE&zg#v>X2RXt)f&;B?&%pvv1;j(0_W?RHhU+=Ba;*Oe_jqyXY`|~ zyVAtPT!eNc^`}MO zz@PYp@myQ}ZP3nK)c)Ascm?#AjRF+f=tO!Qnjz)3)W+!}wC3X^Ab+-~IdeX`;!Yry zkPr4iFK1cBa)QUZf8g%wz?ycDtpP3eIj*>EnyzEy_by#}T z-=36PnKw=TET?-19J~`9%uRb*uPd3%6tsMO3S+RYmdfJ(G?0tqlmpF#)N4BQk^dUW5ZAILVo}NC53iymh6V5nnB4`B9S3l?aQm+Mn z$frIR9*>m2A!ZMFw5K(3y(a&~Uk0^8UDd|^rh{kZa(`w8xt0aVIN+#l3xTsETHpAg z@08EVLN76?o5}=1(~3^0NccmaeXbLfuqpg&3CZ0acAIB7Eajv6!TB0wq@4AI=0YjL ztn%fr_${7vmai?gHO3i{dfdH)T3I%!VJEGwE>a((0-_paq5_hWs4b0SlxIW}7joC3 z8(A4@p(al<9J9J0X*r1oC+>np#?)1zC8@nKOC(pnz&ha#PT6cI=Dqs zreY^LfC;nU;9r)v10o(q;r^DVipvOat{cv!55d6}$bTbpa0 zV3VhqNKS|vvrZoa`%FB9EFPkpm{7&9|$11 zMG)M!$+m;qU0Ic*oNt}@HnT5-8-2?l7ZVo(d+umFyJsf$U43Kn93X2(} z*IN*}HOzKkCC z;n@?Hbql%g0v1rX&U1SplYf|K{&wrve;sx8=oVO}2R))x>L<86Jc8UC4#8w^>KV9e zXzR}pTz0w&vKlh#c&zyrwrYSoHle3$!4Y-CR#l_^E<&aI4yv=v3vVe1moBi*c0U+U zq*@PJPdNVH!|2|Vd6@1_IKtnt4pK2X;}N5s!Kv8!2dy7rUn{<$c zRIOu6SsHr5Bg6lvH~q5CfK)@m8;wVsBC3xEDC_r-Ihf=c!H5r;SJ`VTQ# zyrjq(-R`8Xkhxy?{|C|U5hz?s(wuXqIVI zO=u_08MG#}Yq;R#lrwUEuqCul6XP%|uWvHuaw@r@2;XW0(@Z!W`Sz7Hq@rlQB0y{V zwP`NWE-*Q#naoBw19E|`$vEq@B*fiVW5f7Jjy?{~ApBjAb=!EZq*rye_mH&-dAQvM zUc5ms&cwWeKhR9H=UH1_oMgOxs;99ZctcgWxNGW$$KuI$BE*7|Ys1T~20$&B>dV9! zr1FlD#{6wxaBL@v)Qgpe`faLBCfgI7Zex;2Vk&NqzcOvAAVO>`_F?)N53WvnC1qd? z`jbXDm2WsOEf>sC4lO}UY#Pu&jX{CynoOi=B{)B6C_7GvZP6_X+}K z1ZiwfaMT146?(9~o@^o2-kVtSwdD?Qa*+A5^wHboeIqaI-}{}kgc!1&q}K}yzX>Gc zol5HM3l{b+UgWNWjKh6}@R4WFcZSJ!W-a@07h$Rlczb%Dyx*45^FoC0QLju597^VN zHtI;lavs=vFsT#gKKn{@eM5HE%O|4yQ^cxJmFlcD>~DfBIP-@T$M+*qY>uBd5nqT0 z7Mu+RFBq1kx?o^89AG3}|4|xK$Fc-PRk;*m^0+ktTn~R^Y!C|NN9 ziuGlH-FqHgU6@HOZlLnmoJFMODHZ2gdTY(h|~2$2zg zed57(?$x0pxnx16=sm9TAMy-k53h7gt1wLupMhx7O&8Gf4feHmdL`F5^zuRmFaX_7 zU%Bvgel|sYcm&k5-|AoJzfzbZHbV;(<2-v0rp;&wphpPcs{*k=PdT`ZaZeo&J5Z7{ zlnH1qc?a$L!uOQ`?)Ifd4v}t4F#wCGdloxY?};+*00JDx1E%O>WLTWyBjgVJt^s|^yNct{Tp2D%(q?lWd_Q^& zehjPT($my6)qHQZ@ZeMUv0YEl<^hEnfAdGZ_7q&ir&ngY_8iQAqEt#HyLgA>jEWDD z#Ij2lsK>cXp=7{|Y#^+${0*()*4Nl~LMm3YarX)mAtpy5(qKE3kwzAwy?P#Udx2;DhiIN2Z|Br6{EU7xzmd z0jmi>srsmYMA59e<_hnjA1p43Y~w*)n57LO5csRmX-em*a;5?jLVp7Z?~o=2&k~tfe~&mfuRRD!0a19OC;vv$nVQhEC4Z5;=UT= z5AZ+co98i?DFcUwp==|r*D?TLPZC%R>2}(-hY$qZsCog@Xklgpc}Kyc(T>o2de%NU z=}z?4m90T9KW;;9kZK+xAoYhs%aF0 zm*t!Im}~Cq&US*Vm?}lJ9DC%M>Hk zRY?WXiUzE5`ERV>z(;_?{$v-n@HQP7+)hb$wycsm6Y*Gp`#7w`bweHOy!V-`cl5MQyo+rMZk5%{0al*j%o08N#K6E^!&ib3B)EPZ>XCkjQQ`ecKW?n?Ge&!^lc5{09-B zkiX^)anAgwg2FV}C%W%KVv95?U-(n50S1>oukKZegK1|*L@;edwz+OUaD+y6{1q+! zRA>CZnjdT8M0@v!YUlr%uz%Tm5$4R|rSur^lLwY;Rz5hW*5_yb<~zgwlkgu>fUL8` zR43nj2YcjG#j}*L6Yg$ZG9bYB%Y4I5>;-a@Qyz_L-p8?Rc-aW!v6v@{lJw8(1D{Zg zy>knXKZudSuk|4J=h+hnfJ-U){|A>=4;vJ|o={6b=3mGL4=_(wIKwaA1~5H4!cLVB z#TK1Zfno8t(EbNA<>#qO@$-g^X9d3&T?m%u z`D5AJm~;$XROqpxBq%UkWDPH_4s1~mFG~ISegCyZoY&|EQ08W~9>IT{)kG_#@E@?C zK3`-n4Q4b%n?vW6sz3Kl5GA%=z<)Fz$j!ZM#(9tOl=(Raty;Z!;5$)X)o?&Lr(C;W z4;fOF>yb4-tdmZqvA5{~?KFTc<{@~eKhVOHXinb&TJr-dLcuWQiKW|_tK9Vad=jRR z_W7K0osBsRi*xo<|EFs~jR)l1xbC14<0z1LxK!ya@8fe{BN&!hY>S@i+1e6~btU8q-x)=8*{J!~%I-Ag|XDMrqAe8N5aOgkYLS zIan+kM+<2{)LlHqhIeZ}NuAf3rK3j7MJ*qQh?o$BK8SYuEq9ay4AM31511kE7BA@0 zGHr5Q-oh?5G&7+|Y`t}uReTdgE&%*;@n=hhp}v9tO`VF`Q8p5t32CoMn5Jlj`mWqn zda{mck=esC)!ga1)S!=)OTOXe`YI}%?FDP1)3mfG##UrIvna{StKp;_ zte@X?ZA)w??v-yA z?d{EH>=tA5R+9!BD%~bJU4Z=*X|@Tkvf9F@@q3+$;f&(Mv0J+Gw}x-3Nh8%A+B3KH z?Bz~?sahyXdQs!G;O>kEkig~x}#XW!}5Z_y!iAz*~Js=-y5B&yy6+Rx3ttv_h{w|1x{lR5$}Z0^lnaJWph3IM4h`;))OC zOXBPrNXt50^}sgOuV$k^2ush0f-LRcpL;OcQQG>!)->(t?)r=|G7_IR?WCG99+Izo z!sn&QJg}uY%5HrqQPW{mtNX^qAt?L;mwlOJ70`vzMY@dv9u-VRwMyT%BYT9EVZhnh z72nJQ8^=r*!Cs3dY4R;=$RHt)*cTl&eB%nfSYFl&rx*VwD7z$J6ZCxy#6QSadFQ#> z5kmajD;y-;`THvGvu1(lFe?i2c9}eorf22wD!pr<;Q^mc$g7)fcP7KL!+;Y?zzeTE zUdioBvPedXIQMxAoy-jwracw{M*7Jb(pWmh%%C&!N4G0!j@58b_4r<(C!Y6Mg&7TN zd09@e+MaPNg4^4S9%dL&BS8OZz76DkYtDku}+xrwS;d=n($ks*#4cxne_<&bH3q2_OhFtk0mXCEsPVE@~;K(&I^lw`x<2&)9ks;2(Wvxz&SQ?VBn-JU#l&0zbWe1(I{h*a_Nf3IV z2;lz)p_427ah8#F`;lLfYx()ewp_Pv=haPNqy3{yKJOkapMV(&Hg^9?$z9AgCd*gz8S2qo?{XxeKUdVNZc`N4B_S>zG zCi_TO_#HAOXOhts&pojzQ2!ilf>U?V`cSOUVEAwff6HS}-<4W$kfx&irLZ>aRd4Yi z(Kd8a^cS4XM_O6;>|^MaPm=g^t4~|b?X(udGVFTIgTsgxl#?bi|o-4l#?Mm7}dH`k*JR_ z#%P@+K?EAwEpx5Nbe(_m>Gp&8Ecs<#ldhq$Y=d7KS(O%WR*BOa(HGlUr+SkeA(&(o?RrL<7?0J!f;z&`)Kt01 zQ*17GYLc9zq>J=$0co0ellAbldJ=W|*n-xAgyL`7>{rIgK_(8b8)x9n>6dx1Q-{}d zCVIcWbuvBtt=XPtjiDNzp9HVN)58u_iTcJ;QdDBv`25(&X<*x`ErZ`LV@sTjY4MJ2 z`XiAo;iXiF`=*j2jvuV|)FqOSW8~u(4*nHiQG%0pm`)?ulkiea=W^y@8>;k}u#MKO z;sF>&b$r-)&YbIs(ejJv82xm_j`tZAv1RMGO@o)cG?i)f=6-I&&K!?$K3@8B{mZig z!6N9vxcamdNFK=_w+rFNZ6d^(ra>#*_U$%IjC8F#VrR3YY_o(1c>a1cCP;*Pm}_i$ z?5NxGaYut!XlP_hszTh>Pq!^^C(^ll9wROWD1vS7nE`Pr~H_tTit- zyMI90P#F;l5Fw^Hn}?LVDi>B=D@_#|`KQ}Mj+}+W6Y>7wLaAr{Z4SkBuj2jT@BBYe zZ5+`L#`*6Tf|3Pcw&qO3x&=kyAm~PO{IiNHMXW1O#L8jSkI@nv59;9=QG#_m1q4sH z>)37bZ!sN8G(q=i2>A@k?zhzjNIz$Lwt7E_-UctqF!yR1i>+eP&+|L9e8z8k-H^w3 z)3$Bq-|$rmRDLnIj8Yq{NX_lw&NB-LFlKds?1y6@GEzcTWD8&hcj%9ou zzRf5zjsqXVk1{O$^uGP?px_|q@gnE&dyFIFf=@n-x2~yzs$#SDsn$)nZ4f!c`FGlA z>>%SVc%a`)okeKa=B@wvx|bKs!bL&~Ci}Hw+%L1|^Og&Y#$2w$kzCM-}W`lvYt~ugc1!4#LrV# zSf9K{A;dB$H+{4F?zVP;6PK^u-3JRTO*-}d5myyv;`owyqp{d(KW#K*fi#}EO*%JW z-P|ZaSf0ZD-^YJ*CaohJ4m^CMH~HZUa~)e_K!ElUu;7Y=5MDC#t5<2`B#^kM!1IzZ zHCxiYx^t$OqbHC>(oaSGkCKz7NoGFpH98IMZjQ7xp*Tslgz0u^-Jt1jPhS1H8w?PP zcv2$$_lgx^FDP|8Uz0|s0OP`$8D)D1es)uG;7hj->PS{9gI*W8&pwC{&5(iJN?c!) zogG3=TTW`P)4l1hFTUGhZAfgm8j44v=u&aAARrQpLAH<5%riG+J*JqG?prc;LLKF= zrNJk2;m^1TdY_%pJ*#QW=M{i_KUwhVdkUP$Xb^I;!MJD=b_eUN`}l0VOlx8o_%>!} z`m)WiNZ?*I7u|RhG7;@kNVnd0_{?UjsAQFGp#`h@Nj34&d1D&^68Oy_oLg5Srx)Y1 z-$bhE2UkbhTUm}9Xx1l@ljmD%5n8&13-q8q-koY#i<;!qfZpNVXW>KI()`d5(4+$M z2w_?QTmf11(9OdmNwBZn7w5-4l5&#*zhJt3$eAs(XEl-SUe3Atb@_toW%_|dPGz

    0z0P@Z@3dMU-# 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%0D^l`y&fQ6xspKXZ< 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�fCKpF-xsy|>?B|DzdUz!#%uMt_!{xQ413bFA-JmG{e&kGb?0>0Ngb1B zba7QpF;|xRfJL?77v9Ln|Kh4v-{_SGnrmL6ACHRa#bUXEAst6oSD$Go3%m#uI~lv( zmn(iE#{-o;NFNN!fLV#GnyGB-_f^m)Hz$HxEL~*_8VsZpjw*8;Z4v`*LSH?g+-R0c zII8yhVw0GnfXM6(`cgXP+=n!+WS1*Aeev75Z)SH!;8nXpzR%~QCQqd+ass6p$ugQs zZT%d5JGK1)=kuxuc;?k$DW+tZPOeZg^J@51k}fy3Zo6PK$SERJaW(qAL>-T`y#Da3 z^FPJvxko)2XLE_tnmZvGM|~8RWLXOL@t#Sa@UUr$tfqSi?%rx<=Ve_U#K^X9;?c+l zlYVa0yDRE_L2i=;E{RY}S|5ZX`txMD zCEK$dpFWV+s2_LAWr2cj{F}kQ{C%DV0qZi59Y3+yqlH8(mBfQ-2_u=M3f_RIBh=wt zQEv9C1)r!R=Y$o`L@w#D;Hab3g;P-;qiKK5L456eQF@}1s7T(+bHaE_dZO;UI&cvG zF4bLXb*eXmjR&E4ihQ5w778AIp9n5>_r1Nk2#0Mv>O;iVk47iP#;R^;_4P|^tZVfR zk2cXblFW(~T-{PJIu=~r`7|gt5Y$%DEjEBBHMW!rt{y4W&=5OaYNXY-a{;Q($b$g7 z<+1Z1!J5hd+0FwMHGu3Aj5nX1hYIx(2lxWJIu!xF(1(k)|M?=&|GMZ0$QRZ}Xc#k> z#+XWCn`@!r99QYHIH#Nqz_QCi0p;vqn5=wafHA?n=q+cq@*?R`5wV!fVu^@Uu zI&^YReU0)Zi4;6QuK${exqUVhe+G+P0Lw`M*;}X^WQzJ4#NKv>EtTX4UzB>dKXaLI zO20;Nc)d;gl53Bb;1WDL8{wk`&ItZu9~P*?JQj&mr-O4;k@$R7${0nl`0KrU;!#CK z_r&9iqROg`uIuQSm|yQLk{o%;nqE|PFP^n{KV;%sjUS(M^D zpSd5H%_6{09hTw@Yu;R->CN5#O)L<8MVBU)g1nA^CYDZnL~s+!(yl}2JOk8FwQZgu zMQX>vE6QkR;)lWEb{VO{;Bcos&x2FFEjYA+rE`yJ)xffpztP^$K&@i^=Moj$_H)i9 zDy6@pwVy#6b-F6RdEVaPp2AWf@Ye;-(pjM33TIhzI>P{y)@Yew zfHx^me@36BrF-Zfo>vA=eMXZEq-Q>($q*EcQ_Dp?^w;Rby-50N7ifM}E{*GB(!84x z&=|j>$r&8g2tNHXz{Q}nE0?A;Ab*-W0GLchfrV1gExw4jut&eyNCs;+p2wf%4oEBW z&x3`KR|{{+q=5%;YED82f11xD;?ASNeRQ0`A2X!cKM&}d^Q$-sNiUa8<_sA1B$g|r zmENQ4-^qeYH+_B)vj))b~CRbC4rOwLcVID?bN zkXLdB0%HK`uZ0fM{77Hp&UK@aw>g8a!g^!%*R(%PT=_DPkOB1_cns+YK&Qs3KYNF{ z%}MxlzU(h@EOMW1M}N(TzMvY_Xt$p;Q2e?D>5*HRiOkdem%<>fe9;1h_tDsue1+;`zIq+Ir>IZiztn?+L$YHsu!tmU&J0ZM65 zkDYlZA@&>m|D1#XnJrbn9y|Ux9lgj&5JQ4^_1DU;jVXK{u*z(vxC?>TWmb)_dtVI- zIXn-}H3G4)^Waq@=STN8)Z3!BMkQTu(K%u`*Im3XJZia_sMpdO_ z@+$^~WAe9ByaN2@gC^ zFleXfpyYjMf7*jrh|F?^ejP7UfTK7wKxod+AnE;tJ?L3)Y0J`3a=`|1qCw6+#RTHk ztclHnEr)nP_AkxAso8GL1ry16%fzbM^IqJ(?1pp|wb>Qw1AL=LO&}GMv502SqixCx zWpMlN2-#fe#~0GD=QFu8yOoL21?YE}f*;WKilQI%$&&X5WO3Usi`3*kZnN)(sIOZ< zmBaGZA@Bug775jYmE6(VJw(_5Sh*;pA>&y@r5)YFerR36%jxq`qG>1@Jk5u6##lqI z2_b6)GSvf;af5~Eh5V2P4F8VReuLjnw#pIa~$x3%X=d`ZcpKA_Pi)tT$SW&S$r@#Y0t~vH} zd+8crmI0y%QV#Fvq3|>iu94iAjIw7zxw+CcDB_v73)O(l+XYzF3Qr=>-7QTbt9pm> zkbgw_2S}R%?kGBxINtMbeMENp;`=^CNS4Bi z>zy{RDpShoL_8ud2OhKHo_d@GY^M)J1Z>~HwEZgwy#RTa7Kll@mv*|7>heQGX9F^c zqJF#z^Uis0(z4-IL(#NOvm&ghiqPtM;0_?tpw zr{0;SxPcD7X~F>^2_cJW$2W1Ie_fi&FvFVdI^pnx7M%`&|K3d;v|z?-?82xY*iZ8i z6_ks8WJ~cHW4CDY_A7Ynju<8UhL=V=EqxT&5c~`@y>N>G`xNpm+DWs#yX&*8xuYtIaJ<&! zz=$nzoU)LC5-D>QGAU0S_QgLNnf<)^t33zf%rOE-5bYSSZ~U5dWKgP=wagn1R9(p^ zf|AID(C65RV;XHndnPzJF12(EeTLbk*f3!0cka^8`^w~vU+uRrRm>X)i9Yc%Pz5uN z5sZSw^12lB@i6=d2aKq^fJocQ}= zh}ZN~*T1(7(EU9H6ATpn)@Z3iPgV#2NT`{HDHmQPyJUwR+JE1c3$HOTy-iOQrHDD8 znOwc687ao&rLA4kKgiFx@Vd8{cH!w?a|PV|BN2C+-bJG78=Gz)!W?foGoP1za?(Z{ zP3iLdKA$3g=t3Mr{$9n~aH!C>E!cuyGoM!}HSy6?JxQ9{=-7O97v}Q^3v?4X1a5&wC;+{0;C&3?wv3cKs;*@uhznb6fku7bYhXQZ zj}ocqLe0-P-@u1g8Y)IoF{+ayhZioC&N5J(7Q%A7q(?qBv0$yl6eD5Qb%P>@T=T$c zmh(Qk@3dTQQ!h?@+F5=*%lY8X3dKl}%|b_R7vd-1f&tns;Nm+@e6FKk8_W5aO`ty~ z9>%Wu&j20UN%2*R1QNSRiwqEV?Pp4nP>;DO19T}dZ&T#ZN*GQ%s&cS#pPuTU;1(DO zu+uDT>w;-$w6%4?8+!e@@J*1xMcTv5)y8(dI2lO8rE_pA+c|0oNJF$=KTUDQ(2hq0 zeOkVEnBu~u%6h(ba+FLDZF!qj+y$;m_P>rtW`E*mgw)To(d3YSYRU8n)y`QHG|0`8 zmc3h4Oq1JAql&u@_KouyC{6wUiADmXAcpkNFt5+)UD8nhmh>*5bnw74bm6NPEnlu;;+lLPeFBcag0m9bsOnf{Zjcv9yp_DB?<;b&|Y z)hM_+HiBvG``OjQNRVGBbC4Dmb4t>YDw%+5FsT1RRK-R}_tc+UJ^WBFrNMY!_|?dW zE@f8bM`?sn{n(}$`bL#r2rFI(eL;g!U3h=1fW9;B=!uatWxK9`o?>FQWY(qq&oh)2 z|B-~!U~Ip$7GOjNv{_w|M2p#Ij?s6Ts*l=q*=^rcVZ-ZT$Yb;ZtC<^;Xt`y$8e5RT zis%?UBpnNIqeF@<9!R3qE<;t=f>ORu*mOa|LU7j(zYZ*SFofL;_K>EN{?}Ta9RbLM zZ{0;dGbpFYgQvFAbl_uBbG8iBVp^}O*wizG1#eE-a-?^(2=2&^05zO!-bdSvb%(Iw zEgw38=?>zPcJHG>TW2RX537Io(`0L$Lq5ozJ20qMO%LmIVN^w0n1k{$>RfaPwzhelF6=d0TQ|I8KvqJ;S>{?BGaf_^ zl%l;^-duEm6YqB%hrd4taM1zvw>QMmaV^pIjA1oziYg+M6vupS9O{NQR7B_!z2DwA z94yPWXKa^U*RY~PjF6@+y5uART3PY0{Gux&0#zLYZX6mxJppv=Nk^N)=wf$DI755A zV0%gg%(8M<7+qe;e#UWVkv*bGzr_1_Mz;&J+PN=`uHjK5GGnd!iOfM>qrIB+kohXy zjYIpuvrhU>KG`aG#97ssIjb&co#n}mL-YzRoH49fsu&)@73jSuf$nz%(X!VLQF~CB z+%Nr~2NLK}mCA6&^A>X-&cn?Q5N~=-FP6(<8A2 zg>|(;=rsW(eIOm&2s%M&zhC%jxe-EN03!PV=}=&`S)(q};uwzekm?jmiBf;q?g`b> z6!d!u)pGp$Is~c(`5NE@)hhTZT!;_^p$XnNC z_&srhLc3X&G&wr(fG#RbyXPZaRJ*q6;eT3`+e#i0g6t*%sQQuP`*W?Su?hrot!ezIU1TJrOw$Ky3G}S%25M>Ec?)k7l)g4YOHX(5CWMPHm9A6cm_df zr}od;uG}8LWLO0=AFCQbLzrnbi4p=)>M5{Mv(Jd*lk02YrlLWt$3Q}z24nEoA&Y{j zFymq2f~fXXY(hcQxp7xpL6o}5t`bc*Ap&T+$+8cLoa+Aych^Wupxgj(XF#;&GXI?c z3C0u}m+nRK-WiZ{?YnYqEjRwtMV4d31|<8nHJIv>z?}i@;F~mF{9Bxf<=B)(mxg9@ zT)W7GkUx?pOl-#%I5HFMN2p_9O90>o6(F$@~)?HGo*QQU#2d2hyT4f?^iL*xK3glogW3+<8XO0mA-N-FHD zAx)P7eYgW9f9^Bwli$t@fO5|dK8Ur_E31_9Fq&vKtlQm;$Q!1KjFXpEDG3@HiKGW) zqRc+>x4_Z@d`i2c1v+06O-ZalVJzSmLp-O&I z3kx3QAEeyud~t{5utH4Rg{trf&#~(@CBKBe!Ta7JeP2II+l6W3gy)Qe?R0AqA`->3 z;HFc)UW%ROtLr46bd`AW+)cT7@;_;x>!iSwy5d=+8H%@;Qb6s!cS;%p>DEx2CXM-W1xbv8tzW?Yu-9_v~B|w4FHu z3oi%7Um=+QPQvGGaIq>esg#FlWMF_LgGrLZ$0o>#jg+ZV;X zjc6C`GiJAJSNuS%CagY~Oh}&ZHwF?9__Q^6{9awcx&BLfFqzA!(QgX1yv(Pk@sC$I zi#X}}%X)jNE41Gf(WjxA6{08{Dv8@`jH;PzQvfD@r+A^{vO;D%+$C{7Py4O6*A)yQ zlSmuw^Rm(eQIZL0W)xezwBJ6TLY$ZAO$kvCO9$YBSC}A^J1QuW2_k#{w73BL`lPtC z$sSj{bhf3LOa%HKDvw&? zX|}W_y{8n|sxr*nQJ_Egd#`E%HlYp^G$u#K+2_|8m#Px)yzGTe9wb2wpK_E}x{{KD3Cj$2SI1NeEyA!?m2E&wO|lOq52@}(@N;BKz+uj_ zQrD2dQlwz$Sm0eS$#1EGIt0VQwC@&xVN5ARKh4BuG&1d~at;q&-dSDI1!XE1{PI_T@tOI5fwyZEBPfr?=KdpI{@z5t36wu6cnti#A{R%ALDoMzkr3iCD1xSiQST6W>|lA1 zp~dQM*T~5wzn`4|-%!6i2KInyA>nbTK@sRvh~G7GdKhN##7w+HbOPkglB1944PJgp zl&13(nMjE<$k&I8kf#PuJXwJ``qUC)|KN$=zf;2!#A-l@EV%%^lfFgmIs5zwc+YS1 zI#FB4tmKdMk9^>Jiiz&|b>g#v6oW#<_0ys2L<1IpVIeicLG?Yv{2A^#(F`YA`UmdY zthk;GUFUuZl=v-?O0oR=?IF>j#qYuvG;{IBQ{c~|@rOj05KBR_Eb9Cr(ai+K_}55p z?#5H-{e#DXc3$P-kKm)6NDKNI6P?e=m%Mo7Ifyh?7XZx$p5GY)Ew;nr%rprof&f#x=sk$^EIBW?Q;d z!9n8W!Jk|uf8ml4H*xZC>q_~FoSH=GU(|`JVkX25-&=kHf33m}_M@!$BgbyAlg@Y#^&Wwy3X+SHal8&c=}=HC&Q zoqJ*NF@um>|C(#4!P zIEos6dyVaZQB11Rw~m{SD8`3A%)yT>Y?uj;Jq?(H-w%JedYsV3cYBS;M?-s1N%q70 zPl0dPF5RV;#a+6~?v4;O@6ufWu-`cRl)7t7b1r6A#c9q37{iKxepFyg2QF80h33P? zJ_Ir%6#H=e+GFP9DdPL~DPIE2? z26TYuv{2CaG%b`eG;cs>i$7ogquqC#|SW^d0a$bFGY-=k_oY4Q2+UdR|M@cCE!f&IK2T7LA!a^bu*~n53=|i z0q+G~6G3}@`Ql7ZvCQBSLHjg-Vp;I^{mC+PaICt32s+R?`!|ESv=&SZ9Xhu!$Jh>k zxj;MD3YZG*yDmOo3?04njHb%05WdhuKA)WG(;1DBJxU^^v&foeU3`2yZmjrXh;s?e zul%TE2$TImm865~^Qh@{Nn>ATMYvh^j9fb$-RQBQU)sViNYYVHP_lYm+Ai_0Sn#iH zdnM_l?<=e8bs1HRA+H@yPFF3{cW$rTltNcV7I!nAD@e)Pce%)AePF}yHu^8qJKACO znq=159lLqx0_Uk? zR98_CX^fB-t;)Yob1O!pH)&I1Mrm^E@&qm0ORNb9?NTb#Y^Y;AS3TZ+Lx(i%RIux6 zYC0_tMlY@lZ!qHn%?|l#j^%!iFnSeohU7Rr-W0_!U*b5Q7T zrwTn~|9pm@E`_~WMYjv%k}u5AuDPi8sOx|&T8Kd%5uz0nanQ8LcNg&LJS0Yq<|k|aCCK{A0r_;MvTT|b_p~d z^9kP))&3}a$ew1QGFxbV}h`GY|UOvplEm7p5|9-Na|XSkIr&L z2aNEBG&FlWnlCzF^=(1HD79%I^j(1<)a2+`T}z;tKn|w4mDNBjL-1v)1D1i1^qG^! zlj|jDJehtzOlzrl$gfk7I((g-e26DM9p?JKU17g}buI7>4;w?U0HTtOfl#n1P17~Y5i}iooFaL3EmE9n zBRIg+V11MI_|X`dhT3#4G<;mM@kp!lUijQ2t);TVU+<&NP5gV4)yv?X>ri zmZKQniiCy!yUq)0GEQ|HdSi2MK4Z^7NnA%*Wku-~4EDgj2gx_# z`2Yz0ci5{AU^L^xo}1sdAHhzwzIuR!4Ra<0YhD1^jbQoCj$RZTB-Zw-Q|CQyVnZhL z97lF0AmI<-*`dhSj)+v}@%92w`r_d5I-%m=j)a4_4IDgFGH0g{oB6tm9Uk?%D*F&n z)B?G7_SjEjJuiNPW>{{H;-=BfF*``vmn<{I$hEunurzGe+YS*_N6b#(PTyUcU$N0^ z?#w;Te%mqM3HpsYXbNRH(|)&lZ9ir5^zMQ*VKK{>YJSCbh&(ClBX*YU*JHZh6fvdO zLVckmxen2Xx{IB;Er;s0fGQ9UL*)5JKe4mAd6-@cB3fE{9g@-{wMs#rSoeh(uOSj~ zg^FQ3J39SCu0H_pP9%wiye_zgd@uYZLTQ*$JMi8@55&p=`%O4ovIwaKP#p zDkQCi<@H^59!z!}=*>=R6uG$Mfb}#z0Ci(mdcRO&7W^oy%86=I=gmkmnU<57g~g-n ze?csoyckJV7^K83vi(Y>6O;|u6h)RAznw*v?pMenSHF8HNpk5vu|Cz)dnZXMMgFrs zofs&6F$YRl>aRt4lWAQJn$AnDPghGW)a)V~>uPpqAWbjk5XGVJmq4RiHJ`{Dz@WRN zaM#J_r_?Nxr762Iu;mj`P|)oz&95v!-;O=mlPDKuJ*)iIS*BU{DWrI>@A)>n62@Xu z_}5ZJnbAtLr3w6{l(i1o^xc8@_LqPCRwk%-FX2T?N9V6^& z31mRFv8c@nsc-O5z?BcjO-)urT3MPQRFxO*R{E-+AgHiLD44oL=^%%a&Q1^ZQ1gf; zngCt0cYC*d23c*xAB9gvA9YNhc6Tq2ow=q^Q6%Ps=x&QxHB>Q~O01$NlO7PDAkMR9 z^4U_MCs(XD^{joKdM3I+A!(q3mY~$1|3G2oWXP|NY6o{mAR{%1Y)g_xr`r5{ttF2u z@LZDp9^I+%0A!>Z;GE_EJcexT6l@&V2#}DB8}cCez}IiPR=Rf7E`9p;rds`{x_9v7 z;D4WfzO+`nCv78OQG1^+Q%O>6$a2_aC^XA_U3i#t$Sq4WQ~JJ<7|OQ55>o$7Vm%9! zfs*8Tp1IEG3SZaxK7Cwk3ZDCR?mlRlBMBFCyAPMB%u>o2&a(gBU8~dL6|8HL5qP8G zxO3%OSXuKufEYQ$=sLS=uBaBqxmt#%N5fyxB0Q+fKR!Feo~Nq7{7E@f z%w_6kFR0_2z9n4TY$|u?QbPrA$@cb}hBj4@zh&`c=eFsTgG1pJORI|RsZa}$g4V54 zksoy1!rSKl#k@tDg=6M06U+}}1>02i)LoB8@_6o4+vNRiUYrAt4yUc~jQlvy3i4Waew_q9k5^(HmPKQ+*1wA8~J{}MjqH<#`dReTdTDY`R5i+rXyR^E^q>~a{;H*n%$`nsDe-G(thk$aio)H#0w$S zosR5NN}F{j{kWEp9D(n^3h601oVCU~t zi1HDXtDtZW|xnbUu*};i)>MUgRbxYJF&X zFmfpWgxB!{jBLc2#PQ_ogQ3sPiHg5>sj~ftNPzcoA_si3x;|22}sO*O7N-h5Ja*L zAW@mZ6F8qj+Ut)#U3Dhaj1!xWzLB3cmGDZ>rWj0%Ci3s3KdB-I_2;|_a|$22SFh<6 z<{jRL|Ci$(1`eN|^$s7y_vSe7R%?QH8#|qL>pEXg+JIz}ZR!%A?1-!;D$KvG>GZI# z-{9Vx9_=&O;d{bmS5-LI$i3(V<{N8NFHYIhaEZ8&;(kN=bJ!UEGO;%NMPgm}D~4H3 zrKmR`Ub#2DefslFPkN{__NXHb2QYuvxZgqeSj$;Km{n&ek_Hl>;^*ZSwss~-1`1DJ z=p+hi{rtoIOu@YDy89p72fU%2p))0xNkt~uSQL4cjBLRW)RDk5T*#F}2#UDzrRQ>{vHp3@33!oU4*35i3JGs0E&-%Ua z@(XE3{UEIHTXs#hv-P^8z%VI84EB&2A|f!#g=Pu6T`_3N#6T zJvc(B3rPp-Q~J$J^^7?T|8Qu@aK1<1;r*qT_(-;fMXX17Qkbsrb{w<8vs;CC36Edv z@v`MV^(*8fm~KA%$3}kY<}CQ^hU`=D?es8-#JkZk{IdE3!o@LPUgpWfuCeO8{89aJ zjZJTm-55;4|O~vwr+G4OT5pTbkvnUNdTb5E0 zRlk!R^ep}ct@tc=20aUsT;lxE>#>}P*9sD4U7>AP zr}vK+x}3mj3!40UvnVd$`d)qP=f_O(S~+4*+>@R>O(z7A?ng$QM+@AbD?7 z6`w2X=iW6Rw`A#m-4?@nQW2A0Z}(g5pWO1LJ=oizIq&TC_VrX7$eLww}T`xRYk39A~oSH!drEfIfAH_Dw&jA01 zP5sS-e-B3K`9beUlv+1Nna;`n$hco(Yx6*1n6+G6F;-;o*u7RVrSGLmebpO&uY1Ga z3|{h__}TD!-QUqu8!~mbvT^(8Fr9Up8E%M3S18ebiQ9Z@laZW7*bMrTZ}@3z>)n^A zu`Fj*Bg=HD)Q)Rh!v!CQUk3JM)=I4K&bj+^>{d71G@31lR9rn980w9#{k~#ilNMx~ zCGD8H{?Y2?mlcD#heriJWARU?O~OPxZ+B))aZyFt5){@A(=t7Ew4^@zwwzcER4^8w z7dWMZt}Ps|Mu9r*J`PC4{5zH{q;+lhW9=v?pKWxlGu4fCZ_WLYTkwy=r1r``dP|S- zmX3DZcg|R}*I(T>tGe1Z$a7nll7mdAc4LOYM}BJ7`cgmGsANF0vN9v&w660Sii z+dslnF<9t;A0hvE{2UUj3Vpl;1KvIugQY`zL7$p7;KR8`P3xBlOvkF{oWU_rsWU8i zO^On|FeLmwvY%A}_BHiLoDsQmT@q|Ext1T_)Kd|p_2~xkY5dCV^3rBKUUBbFCGo@G zzOSge7c1+iivJjxiNEkI_Jz_`McEzqc!N6*HCc(qKZS~KNDMIan#$VLeAKtPo_27< zZy>B!|F~EvMbdID)wI{zv}E9p=XIW!(Jut&iZ*o{B|<)F#Cxx$7ICVSyw)?6u>F(} zU$XY2=yuEZGTnVK(*YM9S%TH_UFjQ!$A-=#4H>Gx#Vj5hn-&?rC^8XxVcyvvu9SX~tzzmNR(%oIKpaaFA{ zFIjdNqTnNHxvES{R?>&0@Oibuoj>11gYVfbs|{`73u_-he!PjGnoW0uGkol|Z~RIW zkBAdz88$b}E319cG4%1i`2B!#^I2LsTI%y2pBsIE3hwjrA0pmALf9+K!Cx!4@4hp& z&{mo<+bj=ZAe%$AbGEO%Ec5>LbjqK*xRsvMg3CF6n}5VO|HFZW=vQO^>+u$`g^&IJ zgP80^gDl#Xm8P!De*Fx=A zU%gp$wr^G&FJ8(j14e@;lfK$7{s*y|iA~yWJ&bKt+%@laf~j7LozhY+Jngpezjj_8 z@XNp9mUqSd!=``C)H44=`+R2j6l)ON@V{^W14%%(zYzdy0H}rmrKTq6H19dH<_+i2 zyyU!^YA#vxgo|k&adkEKxrUnCTocU=?sLsmu8rnTuA}B0*Hv?h>#jM*_0=5azSHdI zhG=$iBQ)E%(V8vXc+Ey`l4dP8U9*atty#&<)0A>QYD&1pnuXjlO%bQw zOy@RhCUe_06SzH^vD`sTCU;ablsl~%#9hz~;I3%;aJMwwxqF(f+#^j#?wO_y_fpf6 z`=6#6S5w=F*tJGH)qq@IJefw1+*G2qE&FUwIWwv%W;jhwYcWm zckCD1S8RLjziemiWA+>EeYThOFZNsQRd$f}B0E%jh8?9n#*Wh-Vso^6**xubHeb7i zouggP7HQY8i?n6zQtdK!xppyIu3f;c)y`upw6obiwA0vK+DYtwZ8m#Eo5h~c4r9-0 z2eX&71K8`@-s~N1D*Hg&nSG*d&py|F!M@QpXFq5gvq&esFLkxq1YMX_>HMrt=VmQB zE9=x5Sg$UT4e4ZTijHUN=@_=5t_Isw_m*j?d%?8PJ!LxS9x`9+?lL`eH<`Y=%S@W? zJd>_F#f;D$Wya_ZG81%rn8~_r%naRT=6l_GX1;C>^P{eeDbbZOrMeQPOjpeOrYmGN z=n9xEx_oB4ZYr}^m&+W|Wi!WgSl zdIj^Po-*zAgz2JZnN)o(rnmkB8lZoR2J2smQ+9{e3i5e+SLd-$Zlu z*U%68%V?4Q0{U5h7Ol{qLaX%0&^rAQv`K#uRqFSlUHaYVfPM$6(pRFB`Yq_Zz5-p= zZ$LNnYtbG38uU=V3O&`Aq5t&D(OZ2fs$p1)7()pnhM$nkP>d1{3y|JWgsg`7$Yq#| ze1-xPGR#JCLq7W0Fav#Rn1-4e@=zSxGC0}bO)hG7gE zX&8;h7_!hr!zeVxkcnm(Mxp}42vleoj*1P#P>EqE`o)leel?_{-y|CiL(o>q4#Qxy zS8~`e2pyN4k^CvSW*CV6lH8a4BdM0WlFr{tJ~9qMAQ6p&ky4^H4nZb~!Hc z$~NYpNybTNnsEx6Wz0kKjMLBp;|%nZF&`~6&PFSZ1!%Q#E?Q@tk2V{N&^F@&wA)yW z4jO+#M~x-ulyNCKZ!ASujLXqYV;Q<@T!kJP*Pv&{wdjR$1A1$$Ks8NU5NoPLylDrL zn|33$X&*9}4kD}R2y&Z_A;0Mq3Y*TN+NKMrzUeY*WV(i$nQo#lOm|Q_(|z=n=@I(I z^c3|nRiplsqDYz-t0^B0QP_8!E8;-FqX4qv4SO=m0KpU z8p|}+XqnC0Eb~~mWdR$oEM_B?Wo&Ir8T*N44cpkVo^5W~!hT`d&bGJgWjk9AvENvZ zvAr#4*l#Tt*+G`8>`=>J>?q59cAVugn`8Nxooac-=3Cyeb1b#EA`8bYvWVPLi-KEj z(QvCQMsBUe##LC{T&2a&?XrZq{g&F?5lemUq@@ve&eDv#WNFFWu(aXsSUPeKEM2)L zmhRktmOk7Y%K+|!We~?$hjPT4$t76Faw_WtPH&yeS*+7Jr*#(Rv(Dv0)*>#&x{#}9 zE#W@3mU2z4E4h}|Ra{%^TCS6IBlop+3)jQCjq7LK#id#IbLrN@+(_#&ZjAL5H^F+2 zn{54)n_<1meQ&+N&9~m>imms#66+(b)cS-gvsQDzSzmG+tZ%q2*7w{FYfac|W#Et% z;Fwi_Gu8ySXjQ;fYa;w*)xmwM5guDD@UPVludFV3XH9}yHa~zZ2%;?v3R?^`w%TB_ z)djn)K6q>mAZTj@QQK!w$JPu!v9*BDY%QUM?MwL5)&@G*+Cdjv2S~Mbg5I{yFu>Lo z2HU#9Fk32Q*}6lvttaH#dc#y(ADCt92Xk%x;Ro9Q_{sJi{A^2u6}CaJ$~G9**@nO- zTRK$QGGMoDC>*d2gDTr_IB6RJ=WQe5vgC#>6Ykoiok;T3mIePw-b!lNM*}0_B{E5( zL@%*QT=p^GlY}L4$;XmU?PH;tq?LUfw3U2i&xUUH@z7J!&prVL+9yJWJqJeGb78D~ z5=^vDhAH+bFvFe)1@@^>XrBhf_8G9mJ`;Yi&w^j=v*9;;0c^C-fvxs=u)|&m`|L$< z*uDUc+l%3>eG&X=UkummOW-g2&+xZh+Dq-rq1s*sukGdV-o6?>a{Lb9SO?Ux5tNQi zpml5ov!fCmjvbKX*bPC)K8QIEKwZaSXy7;sO&llSbH{0D?KlS=92cRh;|g?lT!%i6 zTkxIZ4h(Vp4Z|IeAj|O-#yhHElH(;zbG(7sj`uLnQ4=q4F!(12#>*TcUg?nI)eaS2 z@6h7S4kO;?u;SegCqC#%!bcqee995Q7aVbX#ZeF6bTq(s9gXoLM|1ql(F(tCw88&# zbi_5CT`=oR#k{i@mOJ}nwKEMHoaxx+9D&`=EbMn?NAC%D}C9RKcojVqk*@gGh^b~-WH=cMF_Q$ytmOfET{Nr1zz(l8kWeCZk;k z$aq&3nd~}6rn}CQ*{;iEzUwCW(RG(Bc0DA^T+c|E>jhckdP~;3YVuoLEWh2w^Ltz} z{-8_EA9ES_(=IE2!R6wwy8QetSA@Uks>45aHRS(wHRE5pTJ!&NeZ|*ucjq~Ge_n8> z^9uK9UgOT?jqZHj<}Ttr?j?M{UCu|`6?`4{F8&jD72nu>o^S5H#eeDkhi~tG&3AS) zLaJLK^mdztZ{0p&kh``p%-uv7pLZ!P}*ya8p>~{-dm0K&GbUVd!?yz{tU0=N6ZXw=rcN8DE zdx%fn1I7Q`nc^FFj`+cyFEXAYk$9Gh37&E>(NiJnJv&8<=dkGXoECkaD`LoVM@;cN z5kL045D1l zr+E6(8J;xyy(fdt_hiyy&p2A*$)Tm5Jo>9ApZ?~VLpOK|=@w5h-QihG_j;DmL!K4% zxTl<+@vNa2J?rRI&qn%}XEVL;sicoR+iA6D7k%Z~OW%3+(^^RfDI^`HVp0`VBpsvL zq!ZMXbduVWPEk+N85&GFOQVuHN#|&Tr1SJMNejuBk`9tCl2l0_>H7fb-eAcvsV+;Z z&z5p>rMziU?kp*PuGHrTsozgY`{~a~d+Ca#U37KQcDgR9l5R@cOe>Q%(%nhx=z*j) zv?{5bo=RFl&nGRTmy;IL8%f3VZc-tAm^6nzP0FV)lJe-=q#RnqJC3s6Ov-yRsLY#2 z6TN+@!JA60-p1_A`bN45i`73#7ysLajf^SIMKUPoZ_tzXL`%U0`F3>&|4%f^yZ68ygA}8-c0dV z??CZ)Zx3;!x1+e#+d|ywtuOBLhQ-5Pr+D0}70-GF@lWpu;hMKvxb3|s{O!FY{Np_? zRC{*|ue}w*dvBTWk#CWJeFXybO%jy8OhM~Q6U@F;!QpEwB>9>M$-de`%;yv8`piND zpF(KjV}#Fruld%#fB25RTYOjFdA_@^itppw#ee6k;D`9i`Qg4L{AgbhKi-$mPx9sR z(|n`(*}imsp07W@z}KB$?E8ve=4;Kb^flvG`x^4=eRcTFz6ig~=jZqMT>L?wl|Sk; z@TYug{(?`&U-9w$O&`nO^VQ@Z`QDOez8B<$?-}`@?;)w_ze`yEO(OU&6S@C9QTtC3 zgTIQ{{0E5Jznl2|l_cWdL~8rjlKTEtq>+CGY3^T2zVI(1?fgZgvwsfx#y^wv^5>EM z{v0yMKb8#jXOc{R1{vocNOJuBNS?nZnd$FF=J-32B7a-5(BG0Q^*1HU{S8UEzaIJB zpF%49$>a~em+bUA$$r0?9P#VO3BQV*^;2@mkI8jEBDekT@dN*B{KWqpKleYuul*13 z2mfu10@pDPT*3)~b66EPiFJW0YzZ8|&cH704OHUfz$Tm$ScmHcR^x_&mAGl36t@hN z;5LC`+%ZsyzYY}O9)X#-Zy*n+1#)qEARCVeWZ}_)5qLr%9ZwFV;pu_?`1?RFJU@_% ze++cNivt~TX`l@*3$(&(0?qM;Kx4cm&;V}_)WdrMaeOEc!N&ptd^(VXF9w|WYQTzb z1&sJ!K#Ly-RQTV39KQ^R_+0?wT0sVL!J1eIz6V9{4QPTd!5FLtd+;fEf{!2&{2L;{ zJ5VQh3qA>6hsMDx&?0ydz6_p&_QBK8Id}q6gGZrv@GyKEJOG1(`(RjbH;fAIfN{Y} z$PI3VsliQ~xEhuQ%V9;Z3|0k~!`fgeYzqDimBA&jE4Uc;2NywA zuozAT7r?n-5nK)y!j0fOxD%WM4}t~oG&mdn3(kT!!I@Aac?K}a(|{yTg@oihNKBpr z`sB%ANuC6*5v_$=T2}vK*dW=OoC!OUN5Wpoq2v*8Jb5^rNgf6l zlZV2!I@A+o#3-j2WSy$2dzWWUK;umx`bLn_fQMy6KVznLZ89lP$L)~ zY5-ZG`j8!}3zI^%VOl5#vqE8*8w$dLkRN^uCBe@j7px4~VRgs?>q17@6w<-AP$KLO zDd0dT0gi?QI28goA7bEgs3zPDz31+R-f#~?FS%!-YVJko3HLVih^rC4&#~d#93Q^H z$--ATb@)%t5I)CQ!>2e`_!#F8ALhd0{aie}i>n{r#x)9W;hKdva;?H^xpv`I+*je1 zT(@v3*DGAY^$#!P28N5cjPP78GdznM8=lTh3{U3r!V|ce;jvsnIFl<359Jny2XRZn z1GrzpeYo;)ckcIaS8ijtBeyl&hT9o#$?Xd_;|_-#aVNs{xwGNg+@IkvcP;GaZin66 z-(ef~PuR#k4{NyBVFmX-EOH-3I1Wc@aWwLdRYqR1y2!t*Ir5lwMDDXmk-ymF$W=BL zxyaUyoM9VAjcijS!4jaGSZt}6G>&)M>?~cBkkF3kuTUi zk>>2dNMrVBM0#IFYO@z2VfISI&)$r<*?SQy`zT^ypG6Ycmk}BJzX;FPj4~`6t-%V> zw~Rdcf>B4GGREjb#umNHxT7~2fAlgFiJoU_M^7>Jqeq#>(SuC$=pN>a=r*Q(bTiXA zx}Nzax`yc$En~iomNJ8)CCt!hF*7P!$c&2?FgekDCNDab$&cnTbE4TyQ8bHL6dl1V zjixipqiIZev_G>p+KZ`(e#86`?ZWJec3}2L+b~C>EtwP1X3V*0Bj!@{6XtrfE^{Xu zV;)39%#)~}c^>sJZ=!bQL)6Tmn4TdqHIooiFsc}3bTPtMVl3l~)ndG{4=5CSi&A1Q zQN36-Y8ZQpn#LZXma+S&P3#Wp6uXJOj$K1NVwX|h*aegpJB!j|r_hMlF*GK21Wkw? zM3ZCt(Dc}D^nGjxnjfn~KgPD8l2`>Qjcq_>v9)MTYz^8FTZOj7%Fy=Ma`)S7Qs%tymGdADfRJ$L6AcV+H7CY&Loq%SW|RW*{zQ8WL0TkRoLY z(xgm6#*`dnPnn23DdSNfB^yOk#-TbXW6&olqfz6OEYu=p6#6nH6SYqniMphWK&dIi zQSX#t=-ZT`XmCmf8kUldMoF?$hM-)@)Re&}Uotmk5c)x~Nb<8}Man?5O0rh6Nm41< zC7mCTR7p-s&PjEbB{!s;JCcV|?o-KsQlB?czZ&sjh=~tJBt8Pk;v-RFJQL~TqmU(@ zggzRXkdIc z%7_=Bk@2}`Ong3?7%xIo;tSA>crhx7|AY$TC8#*Q6qUqF(J%4k=+}4|`YpZ+ZH%u$ zTjOidj`#+&H(r4b$G4#4@k(?iz61Rk-;J)t_o2Vy2hsib5%f>|7^;q+La*Xy(fjxX z^il202x?zLV(pvg|4e-aR8?EoHg)!)q*1yhq(RT2V?LBE2G;^?MFkW|F;G%MI;2cQ zMAT~s777?(qhO<66%heDF7mC{|9k!ZGsYfsud~-)G3S}{d7d%W7)M#~kA#}wjfA$~ zorIyFPr_92QNmL2Rl-j2Q^G+oDB&s)l`3a+mPr*)}sBjOD6V~x$gok(v!sEQ5!g`*juz{y1Y~~pYTX^QeTRa=#J>DqcL!Ps+ zljk9P#q$<+^TrDMc$0)*c+-SGc{7C~+#Df~TPT#_mI@WP6+%@mN~p=L7V2^9g~nX6 z(40#b+Hl!I0aqw==1PU0+*Y9vw@Wyd+bi_v4hRFdBf{C-DdAl1oNzIBNw}Q5B3#Mc z5XNwKg=@GD;YRMMFqL~L%;LI)dE9$pG51MW!F?C*;C>1Ba1su6oRq^MPR`*3r|fWs zQ+K$?={Q{G3>{iIGlx5zl|wsc@9>y&aCpJFIlSRK9J;yxo-O2yh$Q^?o_!Mjzq5^= z|92|!|L*^Dw$b2!`wy~@>HpsU=e(j1yS~MXh`eK$_jn(3Ne@x+c6Q&wE-{7k56=%_ z9rQ#*;xrR!%HcwC3QeT&hs>%b(JJdAaygSk(#b{SwlJCO9~F`3kQC}3Sxg&_rqIOf zVoD86C7teK+RRI%D8CZAS(ipDt4l~ZU=#K7w~)@SO>{kE3(eo1PGefP(B26dM0Tar z_a%c4mXwlkYbF(ll##D*7Bz>IQEqP*W!^0#m6FZW=}}I>9@(^Je>v5@VOG0>zUAc5 zldK9_=a@@PgB8@$nMdz^o0RL>VGbkg!>do}*NGU}OWRc$JQkp*{i|U?iAI%tgMlwZBE2N(NNwoi00ToFk(fXPKs`)#SZX^`Yf8!TeP(jCht7*aM z3d&quO`qmhlF5f^Iw`xAMAq%0u}8Pk1?d`64BAGgN^0mnx1G+I?4_j#wo~cxy<{_e z2UYpi(l?QvwC_PJovqnP`$P9p>f~LtOSFzA{M-w%a`fFpRhb7#v~LeRH2$0ZWpgPv{7p@sd+A-^A!xQ$>`=*0bbgzc2%ny>IWeu&!IY4_7_t5Mw`$_#lH4P8kPw6(*bn{XjeNWj< z!IpIt^0#fP7y zJ!%)&b&CFNxInuvoT4?M4YYIVX_~5bk!~p0)BcMWskOeIhKFCG?+ee6s%9g7kvmHo z&5dMm;w)`m)kJ!8&ylQNGmVozPkk-T6npqQ@m61^=-C%&n8_8|!E2y(cdyWm{S73! z@hWk47wM$rHJWOCiT={KO4>Uw((e2#)c3uCv|e4NOOqPtsKaF{uD(E#8O`MK>pa;! zX(EMb=V_d66TPTCN0mv9lqPnLe%!xAvuB*8M)OM~dhiTYt-nZjxij?ZP6NdS)>EWu z1C2j&nnKrJpnmDowE6aVDx7;sY?b%%z8Jfvk$?oh7sBPve4ONnP5(MOv$@>u+sCO&ARJcTE;H}M`t zo_s=_<$ZcN_bJW4cb__>p3&L$?d1RWGkR;{E(pYA3s4PbpHnoyx+WP;BIVN^gElYp&fRzV2gMXK;^{qaV?RxHdZ4 z@{p2m-ldNQ4{5r|UD_J^fM%|{L%P>HD6s7|`5JbRt;KEXiD@VM#9I{Ia-aAQZc?(| zeUi4lNgE>X(Ua60G~{v{J$rJUHfy%gkx|#FHta5?Wwuh$g*%k~qJ@%F?vQM93)LLH z{m0+Bq0dRz`7Mnb`hs-Y-_pZ#FQ_iEo0f*Wq)>%-)U5Omnb*Ff>Gl7RyLS)0UigZl zpY%|){A;=v{hs(IUz3YmFBQ*wLl<}TlBsML&35XeQ%Ac<{6-&*34TjQ=k?Pg$!=Qy zxu3!gb(3-G2NIe6jvfvBNR7N6I#K7p-=y>!T{i{z@_Q+L@La+H5h1|MHjd~6TR9P^qwp1q^o z?XPH>AM@L{f9T8pZW^5U51m)(CW-2olot1voPNEa1CP5XeA)|=@$CBJ|A`tuX>aN; zsxALXPdk6n5ubm_GGLI-_WetmR|YAsbbvgyMNr}Oi>6HzLCt&CCsPC`N(L$Dq6mET zMd12f1QVl05Mw2ZRo6topD&7dJyBdO5=By!C~jO4Mb=eO4E96BS0fmPygdM5^xE8_U6E{>5p5_st&j-XW%P-f3IU6w#}r8tgi z^B~9ibVl&d{y`jl%{(+}O2Ap0!!Jl6#hJr^zXX&LImjFrNAN-pQ){e+#o*p34&wkZxULk3yQvr) zwZ&2JT@-3;{i_yOBJxHg14AS<&U!1c<{{Yhl|!kP9L!|+P>qno3vE8ao8@r8nvbhm@+kJ;!#6@6<&*fh)GUuv!F+gX zE1)lwk8=?UaE<3f>#_pMQ~4;aVJJ~UP-qPl{Q*vpC-Q_aUWZ6$CA`G{Gig!bcn ze7&rMb7xswM;Y~(SbLQ+TCTA66=i&AW&L$jU~!9&xJVVm-{Ir?6%{SQR`nU%SWM^GQu_Z=xS3!z6u|%8ZmBsO&Jd7JF z3-y;gbSTQg{|*oTjrWBUny}53gyAnu%rBF~U4JcI#ENa4sQZM@c$LYkir=8u$uTe%JnkC%ddpAJ4OmO?jl@nfSD8j5xCrcw$g zyLEBuv=k!T^)RVJ3QP0#(Dqddc&!K1VbaiX)`!1P8fw}4m_1z@pPuW(cC|Em1qOIk zE{&FS11vZ%jmu9AaQ>wdyFI&T-Qcxuq0&Tw6V)i5(S3Z_{&ZbPS>^YSxXX~v08|cl*A%K zE!_Xahwfudto(=nC%*sMjlk!}a*$p=0z1XzVRL>2RyfKdK*b#WE99|ei8%~vlHf-j_4Yv3AxvfI90BROlKzyywk*oY$qhRYGK7o zC#=}4g&qfI9C@mRsaejjv(?7!PG<~F)W#%%3w+zOaXsAy4JJAm|I`J^t95YI-W6G` zIvAbiiU)eSXny31MUlE#{oNIhb97O<(hb{(>EgyzHz@zqfxd_vrdR7AqSh6Urs$wC zz!g;@Iv6VEio1!a6$1gEd(BL#+?OPD4FSu(aKur;yJ^- zK@(1YJ7L~RO+?OiLWiCvn)pt*cvAzv4msjOf(9l9Ibw^g2GXP)k@j324~{sXKVKcn za~x3Pt&XuW4!HW2`Sq9(OZTdwZLSb=1JxLY3lVCg_Q(J8>b>K|YaNIKR!pfH6SQ6s}fuS*eUGsv}YGbU?^Tw^4#!!m# z#%U81)Lik#zI7&W)A7OfHWRc(_+X2LDV8_;AUDwzqFTO4ePD``6~2hIHG@^7FXpD1 z;gY%^JfE5&BFqn#f)S9q=!gEy5vUwC8dWbwK-FqAs(*}t^PbU&NgRPoxuX%qa^2c> zG%l!)K*<|F44gHCSb-nRmY5;Q-H&k@GrWJx<~e1Gzlzwr^G(s<>5E)hQ<(R#bsaT9 zK?z%DkO>CigMEAxEa_$YIB1O9rEFg_jN#(rjeap>Z0`30w{JMUmV3c-+HlPC^Fr1y zBV79k^i&%`XDcw)-w0`AfQ}!A`0$yqahD-R)Db4nH2mZ5!Uf}T&eIxkC&uG;p*2i~ zOu(AA)+|mF(Bo!<#A6d+ly3uDnTgPSZG)%56Y}JR;MlA22Mi4 zNIR4qngp{{JNWSZv8lrjpJw@^+}s{J5Bei`tv#0TCZp@RJ%-Jk3`xC_Xxcv+w^ocq zruY=hxG)k<)2AR@aTLVrrodzFC>#`>iqeCl5F0QRwS%MJR5%rH9R-*tH4V?|N8!ZP zsW`E56da?c;+_2{wCPX9y_X~LSL+mvE*yyuu~QK1Jra>dQy}*@V65(N!$3_i(#qX%d|EL2gWRxLG#IUVZt$xM!pBZmh|LH>+zwZq zkqE-Pd9H{)7>I-VuCSgRi22W4(8UkLdbaP>!?V#h%LN|6v+-Qb1>dA+!=ud^e;=C# z`CMmAm^TYf+B>1Jeg+KQIpSWz3=BW% z_$NLUI*Txv1+=*>!b_G@1Nn;(%4(2F*CJT`3)s6Y#!xda1m!P=_cSkTdb1cc30^qr zx&$7zUU;6j1k!C@=zF~cUkAM4;u->5V{a_Y3qj_1ZK1Pd%Ug<* zXT9O`dMO&8d!xu@8TgzJnsb+7v8fN#UN6J9(LNaCvK+gY`k*3rIg-+S(EDmRQfqu* zBhT{86AGEv*#Vk=@=(~jB4XbsW-ax_>v`dD zjq-(MZaBW)^uf4g;TYHCgP39AxKZbWhKpfHC}87-hrx5T4^*|n;27)!x67dz%W9Qx zWGLc{eUPOWiszC(C~8@bz_;G0k6jL#Yucs#z47MeGTh(fjUj87L3D{X6wQ`l zoVPbdwJpUBeQ!8ySc+B5PqQqSVoE#nYexvC9`eGR2)gEbVZ-Ak$a40= z{7p;Xr^M{2CGdR%%(ULOsOBfyothxZLIAUjrY6#@HIaggSD*P6^-EsS=%iJ!H4}2R}h1` zqkj0-6$6Fiepu}ui!^4n3uB?oY{lDH9AeLPJmRpJ_1{_;2W$4eZg(7H_p!FeY7DUP z^@>(QVmoVhuZAw0U(Yihlk!-*C>}+d*!%C|(ZAjgYdqIrag-naEn0)#5H|n2HP{^J zhx?vu;Wx<-(~8$ZmHcq~-CBIN^TR}1hc5`XcknIt0w{#p$SZxXFGWUHa>=DBhRx?zK?P@J0ISwRpV6 z7Y~is;$pQgEbgp9(-B_;tzUz#^S(G>z6ORZz7T7VN6bB6j7*A0_fv*>Ht~ph|zGzgj_dP43QN+e89374AZ2UK$qtL|WbKMaI z9-H56VHCm{CjU47$+;V$rtE{o+c(0O<(){&Mku}T#-1-5@ss7Hhkhb785X}Dn}``K zZ`VgB;x^0Uq1zJ?%ksMJS|Y~(^1_raiSTB5|4=Up>8uW{7@LI8tS<1QlaR~mMESNP zEMRrR?phK;Ssgj?ISFT2T^XmBj8WTw&N0b&vjSKY#jFSLZfi1(6oBS&o=Ejgfn0(o617wC{;(%jd`!mh*PfVjB^le) z3FFy%0>=`o8OfNdquwWqHVpOTx%J zW+x`0ndPbY@Fe83yp{Nwh&-0Z;!Vf8*I7y@~M@SDY`~1j!m# zjBMHjPlk`X`!=DI;iar*Iz*nkV4Zh5A{nmqg{LEc;p@E8bW}0CZN8L_H4J|pd(&}% z;qg}W41_U!R`AL|Cd2Efunagd{O%~pz&wWMV=rc)f4CD4_GCciu_IK}GI28B5wVns z&e4u|ygU$cXpWNpq}y2(!p#rGG02XEgNZ!r)t$^LwtxG z9w%hOp7GeqfNZESUfV_4Fu8B{$KS8@3$gr@37**${?$qTjkrT&x(+nT{ii zVw`U@L{>mCs=^I%J)szl>V{COEk^%E159r##_TWy>=-OYhnfMNo0VY8MSbW`EkSCS zK9;X5!De-RXzwV2*lj%=SXhFj8G88OSpt*odMF!K0^t`uOzJ7d+_C!j)=-RF+w`%c zq!`P;=p!Jk80zB;AmUXF-VOsCQ7^{8R|5p~7QtqMA(R`7u$1Yd`qHA`I%(yKqTjm7 z*ry0>Oh?_&Ec&ghlKKmO>nw-n!r!{QQVVxmOEF`!7F52KBE(e-lMTvn{hcO~$CY7cxh5_~m*Mm{ zO?=%}2A=^92(FbueZK~ld@jR+U=393mgA>_20BKUL;j*VWFyOw9;J>kmF1Xjs*bgn z%Te=C4F^AzV{x_`I<+cL1U0DmRzUb|7<^V%V0_&$#FkZ{ecmwaZLGi(wPASJTYG5Yd#j9Y7rl+D*MHNY4a zlddDI*%;c&>o_*^2iz%hLxSTEnElWVdy9WSgPj|8nDvCsRyXAT(-S{Wal@62o_M9> zh9~`d;b_G*jNRJ{#xd8R|D+e<9j;-FUT@6!?;0)+>ivB_l&Kzg@uRMg7kfZmMHlr- zPYi#o1Kr7>~dF>9PRC`}6%>%5Wftc4>N zyfI{>7LJE{W9DcrT+a7~);9$_B)8!BOo6bUZsCoy0*R|{A!myMNoQ`s|7Qhq?%l!& zi2{|mx3DKi6PufEVOx|Y{!YDxTZ1$a9&`&G=9=ht_7>*u)r6~X{%@X|Fc3aZJ4+KM z#kX)QKRpyB;tx9MXdSLhj9k_;h;MgG@gu8g)q^HjJ`8spk z7iQx$@F>j}9}G2wJk1w&&2l*R_k&TM91e5+u=AlDyZ-V+=nXlx-|)kuQ*x|$=7&HF zIm{aUaB{vJqk8+J|2R1$v-}aIP!PY#AJ<1Y*x5 z87#L3V&^Csme>Vi?f@A~q648cl%cC65D$CEP_DRx*{U+c{Bj4etx`B{xPzXJQmFlP z2LtP+FxYtqvYAr+wE7P8XG^ii^bSfEN)fDn2ktASXvhnM`9>)yC=h8@Qk*^$2zFSC zC#wSCb4EDdG!WJHQmjx9L|+dnT=D`iDM*UkdjXglCq=I_0WissV&|#=G<}dFZgc>= zo1{=x4*B3_Zz*+A1;5&aB8$aJcT&qs`=xhoeaJ5 z{IDTFhJWt)K|M)^q|<)5RwVpF!>`C2X;$Pb}ke*mrL+ZNGRGTNiaD- z6kGcVKbM4|T~&e;W?_ge6Jz2ZVX%EF#_Mxo!Wu8ev5+uCUl3zRei+oYi4i9W$MIQW zY%>do!C)~)EDDFOh8W(a;rL*sj!`<{!gp7PX+;?7eAQtd6NZ{+>R^sx=vSqVm6l=H zBNJo$^e|Kn6=Rn{7#x`x4%MMput5yx$Dv@>Vg$H^V)<1u(szd9M5q|A5Q?HyG1`6z z#iCL%v_FNQ_L~@klS2@oE5UEqLvX@Gf(`pZU_DiW!?Q!+wpfCjeM6ABS%T!IU<^7W zK|x9|+=aM&@d(CPR|)zY3PzEi1T*IcBS47X&OyPjOOn8)H3*Jb65LAUI&tXCt7WBEr8x5zuxK z33*Ed=5G?gK|K=bqeU2O8i}*5D)3ts38w@V^f?oWj!P==xEF~V%T+KaFA^8~sK8e( z3KySuQLoWaNLbND?kl5ksJN2`oQ}dvt4_LdHwsN(I><0L3hve&bWt@LebhUsb7VB; z|JzRcevigDMLRW}jKz*dHmVyOjoxi-l-Cx80SCTOL`D?E_20a>pk*C2*(3_{pLdW+XC!t^=_G^Kkr;KalRo=LBD`-G6`hDg zs7)8WSRRSrzI9Rbh)BeaRe`H05@wbvIG+=NckU`UbvFVJGgYwnbOajJMOeQo0y}>Z zVZIRm;g%vy5$5B^Ya&d3_W-{O@&DiaTs;+or=<;~?-v8brUp8k6@xYDpQxZc2H}%F zk@>J#^!BMIpT)7bqE$~C$6_($P#x{M9gFnBTFT6b73#TK8viX8=K^cUbx0hpDQl=< zVH{)!s%hEZaX6Cuks@!!f%ipdr^jKWdlmiF8i(1Pm6S3l9@*u7qxs$0NnP zg#LUKkER)=G{PYs^Giyp)*>FJXUpi`)Oc(fT24px;t`!(PE)GlaB*t|X~f0hFR^eR zPH}kYT}fBB$6nOS|1{OYbbRjVY3ntamifb{L`Ldpd?1{mz8$QvKxiRoB z{zU(afBmuq=zVxcA^Q?A)$$!l-4n1j_ARY@ngHJS6wr`>7Z!OW>YWJQ7xmk$MB(={ zm%R2Qg7;0;UQ5KNh&RNN62bebF4rf5_gTIDAqgvjUy~V20`J4J-j#$C%U{vct4a9c zn?qaCY~k#_q9^*2pM%(9pCT0I$ls_FFK+a&xOoKDk& zldyJO27Nx8gx;E&6t*Tw$SH;EnG3Oa3{3>@dzyVA5xfto zV{Ia)KFg-qv5DY)Qv2kIxZgjA#=cJg@1v>=Pe7l;x#ag>0(hU*+Vu%o@G_73jZZ-O z;kRUIoPY!T@8bWzc}@8dI`{2a#<5@_X?=iq&Q-j|~@#A?i8O zo;;=jrO(0p0A`>RJ4^v(V+LKa5ayjjq)^PxJQ!b z*fiX3i=gbaX_&t&N6} z@*KRca7E`cynOY9x?Vj4?>l6{&rqdI{2uRTcV2?`uj=Q#gnZ;Znk7odIOn@`ctkqp ziSAOs@^q}&d57MeNXN3bfusmX7izaan(;avhzOuPo#~i7EP$?-o6>gZ1AN8nHf-6_|m>_8L%n1P2NK?AzFT$o-WKp{0kqdK9ULVUwugX zRwnK}xkWQxW+GD<69JelN80rRqOCEAN#9L$3EWG{MnDhpc1UKF%2 z3uh#ry?G287bfGGTHwdF zMBg-X@#2~jwT;h3)&eJLS)Yp|>P}SgUoHwCI#PMKF#eY#y(-Mb2~$VPl;t6|+JWN6 zt@|@>6F@ie{!`0D+Jg(O5*K)(fhjnn?l>GR>%-@?UMOMry0qAHa z0|D>p%KRck5Bh4SL|LZSnSJ<;k=bQ-Ck1{;XQ!mNRI^{0)8(Vl0DbdZu{wBq0LHH zD@mR>dcC6t5gs*+*14MFWh+*vl980<&pcf>enOfG(-G-?=Erqx6g#`=<-1No8|o`_ zVzs^#vJEugMqg5tW}5NZ`!8E|a&iv@Mpw?d9GSX-R%p7%e+=K`mNcuu3;Dafh}6a8u;rj&XGGJDOR^BtMFis(fddfA7CEKk(jORvuRQOFM-Q{ zcp5j);P)#b-%Z@G%$m}rpIVWdPg!Q=4=8=*yTmQsaSJ@4G_qOBp?wAYt;Sg5{^^nG zJyL@T#)2F35!x)1~dfKDaA}$1mjQ?&((feLkIdH)2Bg{R)JRk&L(($8u)w zB_9m>?|qsH3g>RI5tLX%weFq}pG6x7^$PQa@V96J(el$wuRefpMe@*?P*E#M@ z+wCDujLYd?!6NK6pUC%&eO=(GV^pV8Wh_HD*jIc3%|M^{2myxPF7Ss-z&5u0tY_$% zXU@GhgSR0-LXke8@42CxJFZM4__|XymdMzNS(BY^YMBM^$IcW{eb#+fRQf)GmT%@6 zY;N^ogU(NHjE!X^??yLOWOXcWBP;!H_t^`Psap7cyt`{bDQ-RtqP)JNA`Yu7a%SoG zjcF;e)hNkWcFq*aOy4fs9d|YIq_2N^dG&>{)eKMW@E*i6aUJ<_HxGHw5qqI~E1ehanA-ljo{8>US~40lbCl&bgjX_NuS72I8$4=} z=IlYFH1^A)ESKn65o&xX(~fLC>O`-C_h8L(Jnmf|=SuZU{Hgw1 zLV-5?rT+FuEp0RbV=@DMgAfg4{Tgqrkdxca!(V>rDO6q3i-m~S{rvu3vgqD1XT?J8 z+z@YY$P+_Ffy1%LfJsH-2k+#5(u&!uafPhzYT`9sn#uCv_*Dnr{P=zp^cf};s(~={ zttpF@L_{s~hSdQ>ZcR zTD%-?n4Hi~Tta%yq@#FsLYb^6$$88{^#KXH7^z54wf*4lSj@xm3`yUp4kcc*Sgqw- zAq6J8Uf^a31BPvHZ!p`#!6u?p8JBqgJeN?ofBbD@eQm2%qNwqrVV}N2nFwdFysGs> zjDj#mhh*Crs>>wLkhuC%&_P^a;?f z91w0l(nRQX{G&}rs9twlc-TV5;dJ zu+LDryKnYckj3+IoS~-wFOt6}k%v#;3{hAAx>siGj|zMjE(`4hyKfojqcl~Yd`lCf zXYQT}S`_sQ5N?DQ2=nfd5YznMaU7 zg7EwHUNY(YV@2p?O>z8rZU#+FvA|R=+q#a3R29E7eOnH#3SF_-xQxvjN@|1oRcAB& zv#jjVW++DM#OD&c8Zsvr)=x$2WS;9f@@-Y{k7)$Sw$m7-XfNL?g`0LNhmnpm*Dzoy z!{Fwfqlv=P^8ikfL74E1tirrR%wv}FxP-iKYbH~3v{rtN#l@FTCd8JypT}he1^22K zsJ;zO*y&hXge&TE&`x#* z6jJXi+`iAMsNWR1Aze4BnOAnZ&SdRW*u|>T@d;FLzzlypsS(`*^`45D$8?(7|FmN2 zf0~yJAOY1^?&0Tg6C8liJ8J(Csl4t%hVplfis{A+!<}&^@y^D8RXad2+g5-@s)n)7 zr?U$sW39J$cgm2PlS0guiWr~x2~YLmF7W)f|43!2&SS2Pgpj9Z-hj3`Ixm}w-e5)d zxT(If*Y4;VtfswXxM{WgS>3&}DVB$%vc7J~zEMpfHTTel=8_+);U4Ifdnpc8O4T?{ z{%rEJiNYNsZYSo$>F0vSuK5WzWGN0kJg80S)*W1eJ;~Np0$aB9tc22C=wkf#KFeJq zR~`L3n9|T~xGQ#*%B|TZf`5#2QM;~-e^~7|XF9T5j;*HU!Np=?Ih92mgUNd$T8ovC zK?twJ#PB3Gl~-K`jc#Ot@OU~AxnbvN#tW0_T9LBL>&7D)M2`r zF)QgZ&NT|d?izA+Qo2);yt3zDBffEmRFfNVzSUn00~rWEZYm<)i}9fBgmWB{rZt?v zn;o`NTM|f(&TP?JYSNB=Kl?TnH=XuZyCP@uSwH-YlFxRXAp}go*WoISNQaJ2d#@QD z@Mz5jGr)+MH(Kkm%P8t=_0g_VgzS%;t@@(_1-MW&;+T$fW!QfVD(Lsx+5Ikr7njW% zq0x=F1CvlL@4F#S8n}u^oF7dqkboT2?EGOwAJzwVY5|n$%17L(8CX;fab6DE0TvNg zZx0Y-wd6mIGS5ZmLFTCNAEmCjwDL{p5k1CMw%^kmsEuWs=iqi2jIQi|q;E9cvrCJ> z74iR3>Y8AZSd>GPlUTT@LnzD?_K%0}(TZlMxa3E(O%X1Q>K?RDmR>P)M0-_~9`SfI zbJUI=o8N3=O)p9zm1CGzuHZ&?csMq_pHXtSaah_IMrT?pC8rGiXlf~idZ0TF%#ig8 z{MK*aUP(auy49hV>>RMuqMy9ji26v!r9Eh*aK~p|?-kAU_q2BODbAYmi$-$SH9>PN z*UAp5La2rf2jkDTvt(IS50(gdhYXO&YE)_rRZt!aYO#VcXw4GUj8y|vvWfe7t-^>v z%C=zpcd)kOf@o@PFj1RT!K_ptMwzw9bwRN6ZDD2susaCT=z%l(^B>%p4gytsW?*j& z_UQncM>*R0w%#`ge+RZV4fKBQNMB!Vgn(OQCj`rf5Ls0UU)h<5$)xW!07g!m035lY z*8#o(C?Zh6tn-p3ariqJy9OP>&PXQez>0$2Pph!OzEzOZXDs6~zq@D93KmBbAj5@j z$|E3ZGiv>FLlDyX4Dpmha9~kpYdA-(%B?V>Sj0WFE;P!n=Srj>1P`m?G>dk!z!nGf zKKY|b<4}Ie8}-hLjGQ&wz95I3mW_H#T?hUwqOI&&fDc>Bg7%<)-2y2jJ7WT4G-(-+ z)^{GCMr&*ud~N--))y?+Hgk}dEjTxi2KL%`NCbM{z=i#pnC*X~BxKt#e*6ARvDA#; z5dHhA)Tml1ktm18=u{3Tt_=gtBk%eLoF#_LVN6M_My1ig>=@8WfcUXcv?;iA6%`T9|a=Z59}S$e0N;M7&ei9Yu`i3KYra8E06OaxUjd zUYn8n*3Q%M*dc@=Vao~2R_kwEY0~IAy{!8ytdH-ofoZDeN_5K`eR^15H~nCIYO2pu z?hyd#nKfVXd7x_5N%vEL#=pn=x_>$FW`X38eFI!9EE*q1{l0ga^GYk^{2P;D4cK#Y zeslFYL(utSP40|oCo98-O#Bd(JoNU(JLXoQ9DKwMGe+!LGVQFjQA{P@@zdxKxF)=1 zOTWG%Ivqgeowe*_{dc0~H~iR0eR;LA)Ffuyq7PxE2%Zc$ID#FJT~tzZ$+r*13q zr~Y@G66w~g&$2pS}I7SbhI0x2@#t&DfVFClabHj4&InLWv*)q&?P%H*9W> z6TRfaDjflDg_KU~j_8b7f2b&VcjX5&P-FykNv|Mq zf(YpU*dpFg%4}u@bw!%g5XoYC{NmY}=siFYf&$YHHj^D{wG$0uvFb1a9?;U2Bc!96 zz>Sv|KHr0|z%l$2{MXUHb@X?ggC4?}l!w2N7X2Ng9w;&Y)NkM>GYeWh2&(v`vC z$oDyvKYmx$yG;zJI&DIAx%+xiCh@XwQj{eQ!OY%lgDNEnaP$!d4&eHwZ^C_VjqVtQE zKN9w+^UKWQgSLe3R{EchQOi18fi7&ZL}qaA?5ni8f%+36VfaP_rX8bip(b;f{~76; zOuZ}?r!Huq==;T9Y;x^<6(tr_`la3F67B{e=qTLS0KOZhWWT{)ixqsSm z&<@m>u1y9OHRqL$00|4N2EFO{aKM2ELbDd=f7{I%{JVSR?Z1YQLyJNLjTZF6fj)dE zVQgvjDU~)!q`90Wdo?j}T;O(l z*|}`vI3mAPSHEIDgH?tjCrlT@yz{ba`hBD2M&1olqM;XxRa2i7Jn}!1Gf+E5P*2-; zyRhF$$Q=1*VO>a6pUs2tfPob=RSb;s7~f~Z;5AxT4JGpRnnmxI8Dza|!nVg5vQ`F( zZFSHpni?gYia!d3ac^J}sC}@G9o|IM$uo~VtPF4bchAMm#YMf~hGL%(68QL5@A->1t&hYU2fG{X60yln6Q$0$00OO|;=s4;f5T`zg* zkP%7e@dp_t+CS1ghTk8wNI0Pe$jYeA90fx-fVN?e3KQfC@Hts{;NRFf9@Zc z`)Y8CTOY(6BDLwx(Y3X)auebuqj8 z9~0<~@Kgvl-lX8J!Xf~#(B~<+18{|J;k^J)y$_u;A*tmN?A}_Z+gM08)hy0JXKIsbxibkjP z#bYQ?eFJhQz&INR436t^97uP#a?KbT0q1!Tj&1o?q;eCZB- zrK)g9OU36@N^tC!CFeMh=!!|Bi<^cOwcLf1Y&O31SF~j{uelD25R~gHelcMxKZ0mT zy&qSdzu$|?5ENCol_jflPRkP}->P=)bhsZxXei$CNSeTVF5dCV3}f8Sl$x2vs5$GzR+My-*eUson|Tx! z+3!TWzKNHvSG)uC@ylr?ki0f*E4U|D_qvy^ScclofQsP>|AN4*klLh?iaqHtc@_cfwL5tCp znpt;dF*-2gok2K7SEpFD1S5JhLdd^$-L!_}P6l7XJZWMr<2F6Ogx0>Q%Uf}ibDmNT z3{rJmFQbX$bxOpT3K;1-PN~B7a;ZfwLBi`tG~j-o7c(Ip?@a???1tSLk}ata&2eMP zQzw$3W&W}Bjm_kcuINW3K1fG#^W__#ban@F;DF{?fQRa{6nh4C$?fC; z#+-2q5~SlU{_@T9uaC8&n1p8ZBb?LlP_YGFZB*Zhdm20TFr)-%7W19JHrBo_UX=nYGCR3` z-wgHApM5S^|HJ*5TpHmF|ZZj()3RO<%A+^t$$f^;vb8xD%y!^il)5BxiqOAl_Z~3{=}U)m{le;SH=n~>Uzt7g{>d6JcDXkzdtYF z_;v-=kLR^J`__i!u{|3o&XNea?f90VDy_G^4p1vm%UuRm1m%Gm&YrY3qXZq-1)DC7 z9Q9K7tHrvnBzdjL1$+{DNlU!!CutqEWG>fSBDxYkPx=@doDU262yl4)jV++F8*Rya z`z#4jiHdz|t8Z`pEB@`qfxT6`WKg&>Pva*kxXL&lSBt>6IJMgI&oZbWANH#6f$Pz} zA#b4ugCYo!F4wlIHy!EI`3%6e^iPg6x>d1X!Gao0tnr&vrqd9SxD7r4H?+?U;M_kB zoYMDVh+hJ4{Z{1;$lVPF1V|7xtNe{Xg0Sj3m zoxp={3@^X*<)1;J4K1cgmt1}yD%q^tB?-@vt~rWpKbkotW`QhaqjpTl;^57-$X{>O zWBw(iuRa-bBYZ-h4vw&^Sb190-xw{L3iJBcvJh40@sk~<5p=u_{Md2>-d?9~BY=OIWx z;-Z=r;?~)|hvrTup!g814~E!x8!ZtqODYgfDnY)-m+m{sP!V<-POMXGn~Rv z3eWJ-NR9-Df$6sI&K2kQt_>4|iL0R9K}gGMH57wZ=K8=`mQ&2P*I`r}7E&xbAAeG3 zS|vP)V@k|5NddJAXSxQbEYAIC5cZDcDpdwQoqw9m=x&9@3n|WBqzb2Xau>3`Pu2P{ z7Ad((Kl?~Rm9<+o7_BVH#h~*OmRnMy@zZNVlIuqTHr`~(o*7M)1IgT0m~7*wsdNaB zY^^4t%Bh&_QLCwRmrbfwwz0I=bP5{^8@2uX8<3++1L~W{G%blYkQQ+%#6UkeBMm^_ z5g-KmMT0|u1onJ_H#f|s|KNMOC0-u^V^jz`u$*@CXk_Y*I6g1cV%i(fvL{H*yStMp zRT1rt5Beeqa9Y(rytyGRah}^e%~lrw_6B0R_5=BiPb}XsoKbCochNha*a+SfPvI6m z=C3t_t@e}j{?XW&EWC7G=CTl8t}@3mdaOe$>HC2cws;Qe9Tr)=V@qkDos`cR=F(zs zQy_H%3A-n$tuEsU{#+W{iFH_$zB}>ivQ$y+NAaMyRNet=6mn%mv%}0UU)mNUy_qh- zeFBoZYTNMzCoxCcYylu2@6Bb38|`6=RbEOaWZvWVhgK>dAd3sGXredp@H!ln$U88? zna28$DTchiJ~0Nf6)Xi_v>=H1%m!{NBKE=3rwg8SD`|YGHUim>0*~!kmcpGlV7+x`ZjSq8w9G-x_718u1&#>Rk2YNX0J6>G z76c3f>11OtkgO!Nx9%kQ z1QCJjlGg6X5PK#~Kn|w?OK)+W;C~0@@#jK@>xhk*4(W3cJGEhh*f)N`j;TJ)R(U)& ziY!&}W5yU>$4A5!pdmEOmR{wiCN$I{p4oab!d)erS%4VDxTcJizaQoxfUj^z9!BRa z_lpU^qUQZo=@{I*{BzZt6ZwW5F~y4#*_W)Xomu3|MqgmJ4*t8$csPXAcYW&C--OZ8 zf&(Jq&`+`7Ii|v8f{}u9)oh$Tj5$6c^cQ}9KP zv500s%-JzI#vm=U-#k2~KRv?4nSw}Roj6K*V_I`Qu@t#ycgT}=qHQ(J|tc;e}5?A6GSE7rX$oC)sWZOlkm!eyL3B=&5p%hK07U} zKyo$1z!3$wF%*eoY_!P%vmk`Dkb2@E-Y_FF_xE+vwEKO5v`io)BR!_MIR7=;oU4}u z3^O-O@NAv8SsG!Su?O+sdWI9|wso5V`x1 zr*$d}m_G3mD)$f{HR(O`Q+7Fq*ZY>(-^I3sW9!883!!Z9PneiP`q?~uO^Hu&!-v&l zt@SF|Cc2rJ|A{4Ts^t%_C#IqL5&Q7tx^P@u55|3OBrH?f=|LHK0?sntpS^RI%224p zl<#zOZjgsu8Hp6+P=*$rh*CpkYdunDNn5^yLcC3JP>1wZz&CbvTyM>pkB6?akUtDO^(Q>DN;J?js4*HwZ4EIr>RgLnRceUXzKHs|h=(Z$c(M4mSM|+KG5{SBuep&Zn4>%wKgtks@A-0Vq;DCZj?{H(;ut{tl@+o93bt z;pF`sFf31SywF>S(fs6e?@|ZqL5+%I9SoJnt8(x90RO9h_As4tUN?9KJqYUd^{Yy5&%3-N0I$r!%qw{g!{*gVXOUi%3kK zwfp~6kQBPo8C(BRP;QKxX?-b`&Y@r2?AN7yU=3BjZV_6#%`C7PNue7GWVboHw{o$l z>^ms)Ymr13GCbLL;J$lmDm_>vJn@rnUDFJic8s?D9#Tv7wO1UzyXH#I1D(a!UCRz- zKCo6me^my)8^dkKfY=I&3>U-Ds&~0uV|rmLZVztOFBK7LSbDMmY^pyE#K2a%YygbB zuKB=cx$I`;t;=_*HOfY>KctAl9?Cj~_%A(%!99NHq6cIfmsZFM`J;q+9-{C1F+Dr+Rld_Vt7q=5e>zAjw!O=3 z4wl6ty9;952bwl#ZlGIz&5+t?eP?-eAqx9L3+`=o6+b5RkZDbq%u>Yso>E>Qkbm+c zh}hR(S2~U6rO(0PBHdD~x<3$j9pFIjZDKPmd6&GlA+7fqQs_Fsstc>3O~ zm0!1xZ#OqF%a{%Ot2me9#5#3_qhyiov!pXjfvfbu0XIIz6y$b_INRv=eyPLm!xS8Q zWTpm9|F+55nOBK4YothRl`OlF)q4z>E^BuVF}yq5c=})<*@Oo-yAhJhi`9EbpI|pW zU?bL=^kNK8vEf6F-kzBBVOYfYGu=Hws=z?rwmUl_^qWBd1-wwc`|ATC2tJdY6>u)- zfJH@WD!+#Wb&kit2_#TO_MPWko78x`C+;y|ZPy;|ZR}LJvWi(){T!|-QDikMS)lzPHf2Vk-$sQCW61&gHmb;2xIzay7AI-CO3bc6 z7TeWfEA9`r0_l2xj2{lq%obkiQLrQJHf)u5osNSS$o@Oz?Ah*8e)q$KwEH_VUc)~4 zZ$pUO;Bu;S22P8(-3A3xmrL|eL9{a@t3fNrk2C_w0~j&za4t>QDlNzrA5myr;CX@< z|3ZT%p&A9AUP6=j7vuR)hzI zunle5 zG7A=1-P!0sZGjzwoJLN#S#zsd9E3KLC;v_$yHWQiy#)Vyov-t zC&_2Vcdmaa5<;6Rj{2!sP^Qt#&@O|inL59-$VbrroxAu^Ak2;8h?ExH5}gc+9~&w< zrv5!SHnc}2qvg~ipVOTcI^;7p_(CA_`KdzQ&MGa&5Gmzn7|-Y-t|4vdBX!X?16o>} zq`nPvBSj8K$1a96qEGsv%&5`ncF#v5sQy|d5F6V42E-2aWq}w$d~)B$UWGp@q=S@O z3C<_|wweBmy*dM}PRXzB87^aothYBLx+F<`{!}~u91zEaTsg$YSelOHK7X+$S|TW~ z!;~ywlotWUK#>QKL8_zx7~OwIje2H9^Oz>VvV#`MW-<1kvF_1jTKCi#h}V^Z?e)sF z{8><@#AJbHRn%(+dJG2DilP+OkKI|Rp{Ca*qTKu_O)6gn4^u;9`OFKsxKY~n%ti6? zLd}uJ2AOZEfhyTo$E47`mp#hDPgu=Ed)rH_KM9}h+cI2Ou>4Nb(H3Fipk(h>ek^G5 ziQR zP}=|KU;Z0IUgGD1klc=Hoe0B06-&7mebeTyartLLE!uE-xgqOvKeV*cLJ^zOschAA z5t~5gZzt;?SUy)MLqz1TlYd;fIpUlmCJW*nPn(Lj~TmH=ja`DQ_ zMs#NZ9+MBs9Z&5k23QgW*nAD2(4l%56!P=-n?d8&MhEqm*2IuDF0cIXS`G`@M;A-N zKNBC)ulPgsrA9-zK>v{25)j?V;%|$CfZO^_)<(-%e01ng{*4$J_>Q=Hzv5HPwCKAj zz(1#@1pIxUV&j$tp>qpszext4cFm^!wPmfM!Nx!+- z&)*AjLm1Yta=tSt7>P97C-;htdXna|3ty zb2{@vK9{TZsl(d)$-MGp9xTZ#Wgv-04kvSprW;d6MCTd06?SCpbWQfBFAN=KAh=o?&Gnm-abRa@RCuuZ~bf zq=Qu^gJg`UmeJf?fOVw*X+GvAB%dzF*4# zax#G-*iikYC5w=*@fXV#qthP^))U+_wn&Cc9@5_*oD*n$IsLxIi~Z&Gyq+y-FUu$ zE!JzbflMrqhF(6NS<8BW7MtclE_PY96T#6Ili-IIl8k6rpHJB6ogS$6{FQ+qhc3C9 zMU!`myp9#noUdTL^)J5D1A0z*6HSsj>tFP5e&XlQ?d+B>#_klU>#VnS|84*b)g`G) zl3UIA+2eht-&BpJVU>iCUY2AROoB$@$o#>#T#L;l*?VE4Ll!aV4<2j;Ba` zs5ok6Q@gVl#H89G$AMj4g6uf#9 z1ZxxnUC~=Fo?~YV}{hUS9;d)?N(!CiZOu5aqtdU5n!b^yZn%&0*4U$ZOL+G}|`E;8(OisS$dDCOBN zp~7DCb`Jn<5bpy%@v<4P2-!>EPYh_tvILy&KMUGUuLr*raG+tiStY19{Zk~W?|h68 za?JV+AZ^x3Myyb^)Q=D}0gEBDoBo^nFMw^~7h}X~mx{#Pa2Hdc zB#yOy_Sxqx3w%w4n_AhznCr@PZApdg&#fQanpbt_ZIEa-)g+;rtgkyH7dVp-D{3mn8F$;cTV!JZ$x ziZ&dl!{j_zLSIj(pU?SUC#PNBc#mvWjmN|L8>XKIbg=YH{d@BGck$?{|6*rw>o`6X z{~EBjz5Hsp_psCO+VLavNFn2OPzlQ0IA+LMrvB$A{JRYKoW)5svw%Sk54nlY6t(kAko@o!{_WhHqP z(`bwTNvxHztPggjS}DfNQ zNrSTQ%sFG6R>xlCOE1zgyg5NIOsKheq1>K5ljo+DrRQg<;E8mHv=KO{$ z{E1S_T%Rivnd0qC-POlj@%Xu;E9%K&%fq)1jFW{u^X6Cl`Vx+_*H@11nL?$jM`-QY zFH*Pj@enN86%>XQ`mEk5RU^ya!-{hrR{>XerC$dYq+IE`L z&&*%Rc?VCGNF6fCXNkHTd1i@8{SANL9*0r9(#YxnlOZVjCz^F&Z?2FLUBV`8J6>3Y z!#L93Kv~7hI5ell#}nx{99~Ck$5lB#+<<6@YCC38ufdeuWQnFl(428?BBw3f99+`C z{iO|#j<*4YDMG=#!|B3@C*BXd4`R0C_sWJ!;wO7y9ghw&*JvPHd~AU_bIYTj(j~^NpC& zm(c8Z5r(ICep>{GXapb8YrX~C;UM;s5h7!LB+KhH@<+0*s^>E)gBd6QP8-16QjkYAUyc;}J_~ZJ`gcloAQS zzHh`o2%loI435qBjy%FiacvN66y4e$qECYcsGvVE1)jr%M{Q@wSpF*A2)YL4pO<;R z)^~Rg@%pCfx4^bt0p#zkjz2r8MD8!PYIvxx)~`5%|>(L2w(o zo%se08#WPc{IFV3J`!Y>Qy$W=c&Hlw^X3i_iE8<&vruOqUj@Y8E8H^fp8b z`QyGA96Q0rg}mp_8l~AsxQER?a^5?&)_%GH1R<2Ei=SsW6qw+HQfOQFXN!}3r)UoWNK-IKe;dnt zGs1C*OpEU2VWuoTr*D4OPDpENXJC&~NYa0jZWPbAU2pPW1l_lLt-oQ{y;~l(zw$%a zkS_jg^5V;MVwq=+AozAX`YEz=EPkBiDW!8@dKBrY(08nMEd2@dK5H{k>5lmxGw<|r z`~v?~-Qd7-*ZigEDU~AC@=nAnDS-7A>@gzdTe&vQJErg3^c2UMo_&Yi7RQ>h@`TnF zGo7OCTd&s(9+elu&gI-S%VVKC6MX&sAWvOxQy5u6C0k*ptig?yswStb--P3)Mvz$L z9YtG_Z&f}AGXu&2(ftfP)Kq=uj@?ZTC)+oDw`a@_=%$O-My&x zUceZQFvmM;Zt)Th+!PBjENkAB6az7BA`Z1AXEAQ=k?&IYywu}L=n7^CVo_B#R*bep z{A1qXHTCRy$>`N)WMZ7!>oeaqI2Mx4(YeiK#PGBs-$iJNgi^7@oR4^YDRaYH8wo|{ ztj=T|oJQUv>UXOm-pjJztL>#@F6ugKcH#0a;y9~+z1#Y_oWM*#xHMAxo@9?VocTwp zamSj`NUH98pFQ`1Pi?DCYUFG=3BrVm<2d0B7nTE#7oC6WJIz{YU)k0Y0*D;OeZn6v zCeGK(C1y%srBUulM~< zazevZj~QNQ4YfOQsA@NoBUQd7F7Rfxn1ue+*L%-01JQ&zV>5ZzqP8};-U>*Flvz;P6&$gr$1|*MvH~kiIa{P?s)mvh}F6Ixzj#2mZdOI639&z?5IGa@? zVu9&1Oc|TTGYY%KA`}kmF>*BuS5@K z%{=1&w38g9POWtMWc# zVu$}0Kp{Go?EmgYW1P{Rz^0e0KvB8rj(QNH1;hT3R|)(N>;pV}JaMKjTk@L+KL3;(|&^ zW>#fiX{k+Xc_Oi?%`e)_vmQ8AeQvOt95b7`rgkZVO=fwLjyXf^QubKIWa%6OSWWMQ z2T%D?A#4FlHHqIis(ii_#BX^~DMuUMZt>&yKiZCVJC5Jcv{c>8=N$@UynN0Z(YJ3s zg=6^GC*=CqL^BNE-Qt4%N}L>tQhz>{W-}BjnR73xDa5iZew+SNA>4k=<5$yOWGm(B z5CUTciJ7WK*+lwXc;j;$CYMa4oAX^d*4N)xRT&F0|I1PuLEJB@&%95tGv8ob&2}-@ zymVg~@07UVbW91Eu-#?5l;!)=siw$gIcmL+@S~Yeb&7L3C3;eISLM>PZB9_9h7&XS z-z1TzV)FPT{4Vz8hx-z*)*M@MD$6XoG5Y=TADv!lq}F+ioD*n!-!3)lYrQg|#>20- z6Sn38mo4=rUX^yi9m$g&=46*b+UU6q1-jal(!Z8TC-4Y zW}%I}^;QcePe5F!aa(7|^$xx|5)F4#pglU3Fn(_OTp&zfel1m)SjbIrV^9*wn4bwT$^w@_}7h=~ZT7AplGL3av2MUm|7c6?f=LpfKU( z+u#))Zxom?Vus-}{(Va6uV^0_(H}N95=7m{Ael@@tD|KeN5r zoz+>HS&s1r`MRRMR4-$LuOGG}H>9DI_b)>aXEUGKIu_V{5!N zs+s6KZO5HA`hJ9ZG(Zo^)7Awi>vJ)i?fwohliUF{9-$G^Wcnd2Io5ltWH&|Ye%5&2foB*(WfZ51(T`~Eg3 zQfe`~>`rs*EHlSBHMx&#X@G7sGy8a{j(^%1{E=~R?W9Y!W{G|gxd=|KVlnt107*c$ zzu0QyC9Gy%)@tCDtb$jwQeNAdpC?=2Llf&8NU^?zw$^9R+4>lISRX(i>pd7~y$u=G z8!*!P2aK~`fhpEYFw^=Qd|^EY3$15hiS-mLvz~-3>tTHU0pB0P??1w1d_NAqkHonQ zoF9Pq`dF`G?se#7y@`A7;J*9N*!l=Qw?2W|))!FK`U)yq-$EJdN4&U|@K3D36RnDe zttRfZTDimOV9NrlZ85lQUqZmP0HU_}P|!9P zirBt@Qnooz&Ndr9v(19)wi!^@HXRz+ra@ENRA_0N0_|;+p^I%2^t4TczP1UFjtsSp zhf%h1Fdms=8w<0LIkqt{+cp?xB9oDEwjnUmmH|VM0k)yg$2JVQ+lE6Yq^)fPw6KkY z#2i(Yp0Go!1rWdcR_kFdjk)`jrGx(FUy zvmmecBg}n_`TrvS;l7XTLxI^dK-q_Y8FAPLgV&x8A^Si`v=4w!?ERs*Jq^m(`$9!~ zAE;_ih1&LB@VUJQG`4q#6nj@_Ywrx5?46*8y#w^Iw}S!pHjrU&1taY#FwWi_rr4Xp zbbDi%Y_AOy>~&$3y*>=JCqufuA@sxdJ@I=NoNJHst?VtKsl7Ecu(yS}m{kKaKeKm) za=4?Ey$ck@eIMiADDDr~dx9HXZ0M9=?+pU|2zutT_k-8Ae(>Cu2LIUl!$Tym_jP+5 zZrLO7w>=1t?LK&6cf)^n2YlqP0Cku^ISgQSaIiZlcpdp68WNjShStrLC*4^)<%TT04%h=6G)8_?gvn zoMSZ|7g!a??|A&sIk!+wPdjzIRMv2OQ(s50267N5?SsvttlD??_{p9lhBf zj_&L)M<;gA(U$$=NMX+%P1tKkGRx0?f3m|2`j%-}4{z*&M7aF${392MD1M^*OJQHwov)Ms}c4cQGxGj`R{id}TH zXJ;K<*eOR(cHGg29dQg``y4}9u46dMag1S`9241k$5fW*-`n{IO>_QE2RVPG!<=X6 z80Sek(Rq|ka~`B~oO|ee=MK8qxs@(;ZlKxD)pVV6Io;&^ism>M(p+aI-RGP^4?8E( zl{okI{VYh&c1l=PR}@d(v!}9^r$nP9&`?)dz_=`4(9~A)j5rBbk3%0 zob%~&=VH3Vxr~14%%*dl>*!49W;(^0L&rOF=}6~(n&CV`2RcvCzRuIMhw~im>byYn zy#1~u8gWHwk}E(9yIiz{%Sy|-5@;nCr`22b!6l3lMz6W246;(A2dx$cq9uA8KX z>l*3nx5{^1DWDFKxVqWCz-BYWU6ZmndHhLV_msqxN9F7>^e;P zyN;1m*H5II>lf0|b%C^YT_Md~f09P7+oZnh0jcSFLaMm_B^6x%k@G@*xeJlf?nF}F9VS)Wep1uzCiUEQ($KAw#%?p7 zIjQRwq=wr_KErqA@LMUIDT1>F@lF))`Z2?WSys$UaF-<&eo>o<&-sXQB3qXTDb0Gfyk%nWiOqrfU(;OwI3^tvNlJ zn#D6$GkO+i;Q3N3;90D_b1%W%rP@>Xa_ymeCGJ~|d)I1L-5bzj6Z&jLuN?H-fu6bO zyGPsQ-jDu=vBy#Db6i`AJ(gmhEbNunbE;>UHXX_I4AmBRGPEqu5N(-fu(rxGNL!C= z_M~e$o`G5}vfnd6JAxcXPI>xk=a7rYRpbV87kP+0MP4FrkpkZS8h8h221G}k-hrAA z347DExOb42=`Jp%F|st zh8#xrd3tEOkncP_wN1!cPcLnyCskYO>8&k7=6U*Pvps#WcRy{iC+$Q33ErvNB=0nB zhIfXR>7A)9@XpqOB% z-+ugi4?gGO`yKc_2j{lp{3h+GcLUyEi#ho3i#x93u8X+yEbcz#U927VeyJVyF3|R& zUoLunhrXN8d!2W>wi3H6^-k6ndnao1yyLam-m%&=?-*^ecl3vzU48#)J$&!AzP!_SCnk@l_XnzWylU+MY6|N zg&g$NAV+<5$&bEda>mz${OW5#F8kV$KYSg?ZC?uc)7O+-@iib9eD%mLzMAAGUsZAp z?;i4%C3`Vz7iMn5>~C?$THLh~cYck#7oo#EbeV-tQ+c2!%{ntpE|0Wsazek4qACWQsXJn%P6`AILPv-bFI^WOfVt)c%?q_s~KR;dQ|Brm( z|Ch}4KOvL-56C$GZ8FmTCmG_uLI(IRkUsujNDu!{q?7*`Y3n~sQvCZ!V}CCB+@C{g z`!|tl{&l3HKbw^CFC!)VS){0c5y|tu;%`Q;`kT`m{?_!4zXN^f??#{cQ|U{8fBMcp zm=*|(pb!{Kje$wj5|}}qflTTPEToaZS2QWGoE8qOrX>R#XxYG4S}CxDRtxN*bpi)z za^NU!7T8Z426Ab=Kn|@L*i0)2*3t5TY+5?7j1~(lrXL69(^z0O4F;xBcVGgw1x8a- zU>KEwbV>sKXud#C`o`adKKHky|M*+d`~If%mOq*P<^P=Kd4CZQY;HiZF9RmFBw%MN z0v@&|5M&zzF}5x6G20m^%Ju|Gv4eqf?0wy$@E6|qx z9q7a!2fDKtf!^%DKpOifIEazpP^NK{aU7!nl8EDU*23oO)foAMZ0DmtC z)Mr-%wb;c#RdzN|k(~;ZVaEd{*x^87wl9#xasy$O6Y#N30Vi7*u(0faku3{wwm6`% zMS%h=&%a@CCuV=v@qfm2b9!i1Mp;pi_)CRhR+Cgfl1N0Adg2AEAFg(;1 z#)i7Xq)-o-9_j^|p;TB9>H}G!zVJ;b4OWHv!}`zw*b*8D+e7KFJ2V*fAqPUeVGqvk z#5>zUJ>grtzXo$wVBXiEF0cr*=Y~4MEZj8}cTNbkg;Al_Ff`N>($S|Mdi6rTF6h}l z)DT*QlA&3sJ~Rl`g}T_KMyLi<4poD4p(;=+R0)cPDqzoYkk>aD9t|<%W27ijIy?r- zBbAXF;jvH;X&4>{&5%~%@z6dz0lFf+!V{ricoL+CC&RGt6c`af)U}7FgQE{`iF-@Z=_pz7<3E|g*M>~XpS@r4}tpO!B7*a zf>a0(!cK#r7*Z&lj$PBSa~`9?64?Xx$X@V74nQz+7~+v1pitx(6pQ=_r6Z@HLgWlo ziJXI)k>8+RsTn#KdsRPKs)=o)B%zMYJW? zqD}exNJIV_ou5T&@kfzr{6VA&&+D-=`kb$hzT_LDZ~4|}ez7CU#P?ByI2hH%(WpcG z81;!W(XjY6nkX(u3yVLZCB&_08F4>aN&FM7CSFAAh&Rz>kuTOnkXTD0W9@_~)xnaNZg3V#Fc1JT!?za z*{DsNikif+s1%2zMC^;^6T6~s_;={KDf$oJ5Pk5$yG3k+XdT-uI>d5Bx7cox8rv_@ zVn@WF*aBCl<#ZiDj|pB0Kh4tc$%Dn`4^Hi3yn- zOOX3wR(T}mlK+eOlaUW$#eCt`K%fmj~9BbLPe z6boZl#22v(VrJ|YF(vks7#BMxM#c__jM!c=AhuKViER@-V&96+u{EN7EL-Gx8{!?L zG2T&H;@zY(o+|zEG#QBxl1cGlvPgWiEEyj!%f_e3&*C#>^?0VN6JH>c<5{w4e5q_1 zUn$$g*T^pMjk0Hai|iZUF4N<=a%g<792Gw#$H$M#$?@ZIX8eGh7T+f)#&^pxI5RB1 zRSt@OE7Rg@WokTIc8xES9pYcf*71e1S$wW+7@sBU#iz=e@rkl>e2gp~A1+JBhsa{_ z0rKN`9~q1HkimFo>5jLTws4)t%` zqu$2-Dt}^FvBa2CiAhRNETkNXMU*$OxC$qhR*8va)hCJNRf)t(s!U=PRWY%;s+L$w z)lRIdK2NN#nj|(*DT$3#+r*}-9nv|mp6Z0(+9uXkEfQ;}#);K%t}@P7R8=vjVqzK0 zDTR5(F}Dcj7s5SB%J+Y!%{#1#EbQAz&P--9BPwEJMG;Fn$s{Dfwz|J#@4c6`cd;vC z7f}@HqM%@7K?G43tf-)3r`T7;-n;Iu1$AA&<9^@k`{lasD?`pXzvq6=kjeZrtbPsV z;i;`FSJc*KJ~f$FHRk6jmpAfYz7q2m*uRdD`h{1R<}wvF>DMMqnR#32BR&b6Qc*C?|&?2$BWr#i`m#>HfOQioDs;d zG0eI}vW`(-w@~(B)YL7It1>)v^JRgd(#@0qWxk)7_dDkQT02L6#(H_kdb*>XDPPyl zkS}Ye$)(z<@>%T^xllV<&eu+o^RyHH>w7=TKFo5DvCLB}uUN-=*Ugpx&;`r4bhG9A zx>@oQ-33hq~^*v?iyUA_!UF6RCj&fIh2f2g3rQA*rnd)1y@wRfHzP)VMcar_t z937impRK9G*4EPZm8x+MgskY&mRL^i&YGBBdd<;2~w_%S|&2UhvY&arm*civ=xUsok^rg~! z{UzzG{txK|%X-W*@3QPN{bT8>{yD4vS~{oyOFF6lARX0zlJfLlrM-GLdAFW0Z$VDe zOY&yDhn%dh@?Srb4D+O^hG1!yVTKf92$B{V#!F#_QPL{IuTr#Okd$EPE3G&5kTw}Q zOKFC7Qlv_O zO{j6KCfqne6KNc*i8uCR^wq33cGW}}yJ?mi`)C#$2WsXShiPUTM{A}TCu$}dr)tI+ zXK98T=V=BR7i;<&muq?$BQ%|iv6{BVwHg>VXqp?hXk5m0jm@}2V>bS-(HZw?{EUY+ zKE`93@7~vpo|@anikb&TwdSeOUGvKLRs7pnE|wer7QY%_i7L}mQ7}CaE1GVLo~G+! zP19x3$5bNvna+q>Q=w=!<%>4cLD6N}BQ`hf5@E^|+nUnE4yLUlHEj@Enl_3}O{t>8 zlp$J8*`m>uBQ`Yc7ky2K#h*;a#OkI~Vr5g2D48yZyy>dwW-1fE81IQ6jE}{)#uwrX z<6H5u@x6G@_(d!;x@oQ&In4#5^q+UEX{4B7`c>Ru8Ypfy^%c`hJ;h8@7jd_#gSgk! zM$9w)A{LmMiziKu#d9Wyc;2LlS4}3d%%l_Vni`0YOupg^laKh;R7-qsswRFmRT16H z6-Cah5jAFBtYmf_S!}-((dJvYNT9_D<%o-30MB=CqNyC7HU4YnW@4sh_xtxqt6tn7LFKX)Y1Q zna>H6&8LOw<`Y7&`M9vaTp%np9~M@a^MpwAej(1hS6FAx5t7Zjg{|hD!Zvf3u*1Av z_}#os*l$h~4x3YjW9BWwDf1?w*qkCpO6*!USXx6qs*95JsG4zQeDmY2UFt`;QZD z`HvU=@Sh-D^q(jc`%e;1`%e~*F%J6&3H$x02sw;wwr(3^E6Yh?Br@VyZX_d|5z1J= z2xiP+OlFMppTT;YAq-*kXCA#6T^Zl|?_}vEbhY#pdRe*){ViRDp_Wd8ZPgm{ZhNVHgljTV!TYS9ZBmPSIhrM{4B@f8kO ze1szwZ=ujqLpWopDwJ3%3zsbwh3ghkxWTw=aT6{vN-TtptA*nh4V&-5)>UEay;x2S zmgmiKeOSIPt5cuVYsBj6g_RZ~^YCXriZIt=7iLMcHnyDUQ zO;?YwZc&f5rl==d6V=nLYt(bB(dzlu2=!9ya`g)967_290(G1Imypb(nRQda-q`dY*NmdX_a*J=MBGJ<+;aJ;oZN z9%fBY53(ky`?6X+tXtKcSnamV0oGmWX3WXO+-%Iz%v`nBLbaduwEBA=&#gN3D{Djb zUshlBN9#}Ouh!~nccrpgtw?HF;nki>1$7POAHKHof%jAXJ>T z`l#6y~K&j2&R{Z#Dik82mnE4XL#-CAK{Bfl@e?$R)KxxP4D4qFir6-@E z^y5>N!F-A`f=^V&@@tg|{CDr3w!>U6TOQZnwwD`f+s%!%WpU$d>0FR)3pc}-%mv%l zaSLp5T&OLI3%9N0B5ljKc-tZ_(H6p`*k*HEZPU06+axaAHjc}&jpX**hH^)21G(e2 zKHOka;{MP3eI{(&^IeTt$1u|N44kPayB?@#K>|mVC2E6A}2niTVW-+D& zj3W~Q#*@(j6UeWOfdLaqpMXiETfk(}F(8Pv37A4!vW%uI&&hJFtcH=*YsBjMGKZg- zOLgW|Ibb1?m?s~wgt#&HFZM9=ER9-%nV^bH*E%^N#VEWqo7b#4($Q zjya@~BbazO=8{^D5K_l6k2G-1Cwj*M;_p~Q?2g5xv12Lu*%3;pBaF0jEGL~E;iRWy z73t@QAcGx|WVj=mjCI74Nsf3j&5=N6JJyl;jwG_kv7UrFV#s1P9>V6$V)LguR+0&h z6=XEa8pbjQI+l<=tWI~wLei1dZNnUXVJ=OXmy`J^4%WA025ID&PU<NOeaL zsp6PSB*!GeJ0_9}jtS%o+rtlRKmTO=`hxB6Q^xncuR2bWGRGNm*HJ_sJ4(q5$3^ni zafQ5hTq9o`H;J3`4&j{liN^VuRCYci)ts-0xAQIWb-p7Fo#n*f{6Z|wZ^YqLaZQ|R zu7y+LS~)$q4o*+5tFt=S%jwPach=#4Wyb^AXT8~2H>ZZ{=;XQ9PIs=Q^Iy```I$JK zABfe-{!g86NF(P9mj9IeZohL9cf>i3JMNs#opy$B#m+_CCFe5knsX(0%NfNz zaK>>@o$I()&SdT{=N7Kqna+K6W^wMW-JIIBm#gT?<2+pjTn*O=u9oW*=j+Pn>bj1w z;{%+RE0?R}%H}k#434-`xo^&m+-GMJ_s+S7d*h7eo;xGBhtB2P9p@76hI2l5#W{y7 zbx!BbI)k_q&hcEna};;bIgH!m9K`K(_T{!advf3X2fH-Vb@@OzpEdg}cX{%YT{1t;rRGPuRQz}E%7I7u zYJn$t@4zD7H}C@AFz_mG2)xN#0`KvTz{h-(z?XdUz}I}Mz$ZKcAM(ut@9?g`8@w&> zGH(hj<+XuldB4Cy-X}1huNipozr04ODa6RIG8~MijFzgYq&1@hqnm0P>CG6RnofqQ zW{{DL@v505NHvShP|YU6sySq#Dwu?-=8|w#2#Hk9Bk`*FBvG}1q^K5=t*XT&L$#D- zt3pYRDvaz`EhmRn;pC`lB{{*ykE#}uJT`wXTf3WOWU{<8mb;nNSkG!Du(~m<{wn4b zrV1j9Rg+1GY7&{Hnn!em}(pus2WT9FuJS8kdBNts?p>ZMpK4UHHs(< zBcsuOOdi)jW67pvNNF97iS5JCtba7B{uKtxq-cCiT8@>AqwyPEfu;%3hRF(oqw^H|o4!WcAI7=r`1W8k5S#jEld>^&cgX;ovfIXDhO z{A01wFCJ;_WAR(>c)0h7#gmA5_*aNQyZ-SwR343WJLAynRy1^c9C{v$#=$|c$WD)j zCMO01S4U&L7=xhc(Re;I8dq7r^Y%s|wPiHqicu)hMk8fJB>Gi~#>)e%VgDF~W|dcC z(w!(2kB)%H=_m|6yb2z>qwu!sDojj@LW}V$QHS+XS`d!F$x*0NBODq1qOfby3M`~i zXj!-%d;Oyj<-Hu#I|{y2!w|?vVe+YESo&8a-0CcY>rN!rZx2PUi;+LhkFi-24)uw{ z_Jc{dFewi4Bi7?v~%8?ZDh4&(N0z^_Gd@EnqiRWIZ451)dcD#jyUmxAo7@i;dw z1xbamIMp@b27G2CcQFvi3nq1w9E??H-;euW8ZnzGm+TCc=bsh4~ z@5b@qb$A;5JGP{*L#$s8c9pIJAD4r~m+SEFlN_kFtVR3TIS`kv#m(a1ai;%Tm>aNn zR@W_LH=2>Ph`X>0Z>}exk!~0M+L?ga3w9zfECHG;*|;+(0m;T}T(>8{vSbGuN(oqW zEem_@uR&Ey7Sax`LE5rRyo_A~*Ujx%Hen6U*tTN|+duE{3~csUgB^FaA@E~7S~$0% z-i3Hvh)BoK%y^7^kcPjP#UrP;hqF9&qM5dCL(=o9%`p1qDlTiC^HjLRP7*Q+a#jl zz6028O8imZRDKNA9m(jo`8aaMB%^hQLM%&4#@oLNv9dTBwKtr=SGN?1txqB~AO(9~ zoy7dHDY%z#3dc62prplVG`Wz1gHKQ61Gf=rF=z0x$wtIAIg92~He%s}vpD(NMof%2 zhuE@>=;tWH)+(FO=5`T2wA}>T@?xx7un9w~C78Wu6Qt`U2zj{)<%>&krT%6#FrG)) zz|E+9`8_zAbHlgI{1#DTq z3By}lz@V<1@L|n)^r^84D_@o(=FUb8p{4NKwh@0Nmf#NaZ1c7lXBuyWciUq4sy1Rr zauHICQh;~oFg_s#S2~=-%wJP5Zu40jH>BX7k7v;PeKMlEoPntz84Z3rjdrV&vG2<% zZ0nPZjy+DHt6wteW}HOV*BdbH+X+lQxB+~h6L=c70XMP=aj548m{f(><+}j|{g1=# z_4*&@Lv{NPgnihG1=X*ih9(u;^RMA;t5mEVdmXPAreax@8)%f5iroiqVCRQa3>i^| zwzl8UZ)+JouS;%b=rMIT}Ver*9W** zX&c6sKS0MW+t6q8LzG8s!;%h<@aEh$O#S;2R8j_pYZfy|DX$XWdoha)nv z+4%~Oi!%{*=M|b&%0k|X*SOX#3mM8AtccCR)f;ax|8f?dG=7WUK4rnN_bra*W#Vz4 zw^)>riI5#{Fs)Z6x{^28?wN^417739`R&-h`xREOYg}jH6)au0r2znvi1Y$W72SC+I>9lk%o*j z_wdOp4V4bvgQ{}ckMl9G_&pNXHMRE44@jP}6Yc7J#K7F0aGm-HZTU`&m{JaVvt8(3 z>k~RI+6AAbpCDxJ!X@|5STK1f)QO*PlhuBI-tPEOZ(8MV_~rHQ@XGy$l}Zj4`@2y;c1^Ci)Q!G7l!NR)+~_0sTr@OQ zpk?iHk+-M<)kNjOcBKMsb|n{Q^zJnMr#)!7z@2&x--D|c-Rb^qdoWR}qI2Ht!GjPL zZR*^M;PWb~%-@U34GBfzUMvqLw5PNWJ|%>%>#+|xejNRfxDUqJ9PM#$AC8{m=sn$j z^!4Rw*p&TvJ%gvM_V352Gd%tJZ9kSh<>?IX188eh(;j#CK`X0i*@=CK*~e31!9J7? z=c(1X53N0Ty6W{_>^#8Hf714%)+mlH8@d;xDsxn>xfi8*gq}LT2aU%Nx*>cImU(8V-tUHY>^Cg_efN+3&)P21 zMKkjdbWEgo!}Gw^(9pRT^Du9MhKfHOf@gt-7LGWC3@?dBXB|R|aS|Q>{tzB7l4!Ab z7{d!C+WveV^0FlQI4=(k`$<%uo`*=4L|Yp2P@b)!%kCY-@BtcHw(cNya2ndE+d({k zCDM~k5B{j1{EG+uI6fckhkMYr%kyz(uLs?9J|8osN>t@t0QuKSG-yNtw&Yf#53>po zC|0J!J`|v2aAo?q#Zip>y)vB^eiUE$DwMl)6fpy<(3IN8And9_{YD?dM&e0N?mPxZ ze@{C3(=nXe;Yoj@$1%*kDm@o*93T5sr3jr zJ?YAVqqx-0lir_o6wTgMp+B3CB5h+8y755){_IeNzDO*0!l!`2=_i!={v?s5ci%RJ~U<;aiy zAKAAib=Xd0z^0mX@6^+%^u8t?pLd$wYuBP*$r&_DsYS!tZ`H-WYEh4MXHduNO>@tl zf!9=TniO*yr=8yP-H_9;-LFN1s-4D$)wSq@bEm*Hu0^{oIfbByHR-;fy@DT&1>ds2sX zxL=HE&Fa!>#u5lIb?N!(B}jQxmxdfFLC+?>)WVhGS)?!B-?^0CKloDrgi<&H>(R{H zr8pN+kN(q$-3#2SM;iy7N4dj~4&QekJ68J9=x^si@38l_7uY>seL6Sl0)kf5r(OQI zfQGl~(}r~~B2Q^R&yBtaZTkjv{oISlT-AWKZg~MMW;CEPO&5?+w*f7EcpjeT>Qm3; z^H@KtKJC~0JUGAlbaKV>2rBlYlTVc5`W!zxV16lvH}In!9n7n=9`$%t0!K(adN`H! z)2JRDFsKCDi@x;VswIe-?@MQ%E5;X{FTJ^>7@?Qz(oRi^*>8DW8uMon`WoxfliP}L z^lBaYa%d5ZOX^Vf8b!!4*P#tc&cWxp53RH89F~XrP^sBDtXJ56zdQS5|A$u8(m5rU zF~q2)QBN-8-9jz3`(MGz%UYT@;|f~pb+kp^6wXdM8s-Di3ub_3lj&?eE871R&wAP}_a8=jQosBP};HZ}V^7kbeCTVGM)+HFb zYH3*9r62WQWf^JurfaYk8L9E$H9Yb)QPa0;2$^Z3Z|QX?XH7I?#dVyjW2Oy@uVdbH zGmU5WGM=Z+^knZFI91!9K2N-X!BhQd=`Hs8Nq?GNuM8R97W(t3G7Jr}uzf1S`{Nes z@v;otYg%b*%T2VLWTj1~-NgH&R$6z@O=MPA==F~`@yi5-c5iYEAMzEtXWlKW_Oj8d zM{WV*Z1jQKZCpESqgl9(NKZQ*8hRT|eC%{n#BDqrV5bAR+(KYCJFV5`7Pfq`(FNod zOzAdSeC#F?df4doMK@9BUxi-y`6gCmD0JCBWvJ3yp$!j~VXm7(LuZ#km1U(D0?H84 z*Gm8X^9DY+Tj`bT8(5fap=lFt;8}kQ{XaxnbyQX9*H*{G!S1of8Vh^Gzq1>e5Jqgfu815~74iDAE$5poD;uQWr+Q!}+bn_t#nXoVD&g=iU2#_Y+%w zYCbOZn9cB#JbVb6MX5_3j;hV#EcHCR>otoLN9JL7upDKwa}m2wjv=PGP?V9Q@}^vb zgwEvSUb$Fya3*`ky~m^9XL6k8d))axgP}*>cjjYc)!(dmT!f3iFXZ@?B1}EFkgYPs zC=6Xl*Nw%{kdf!l`^A{LU!JQ3%<(B$o=UwxLncL@w?}@4cF#qW&3Vb@X6iO-zOg>VIGH(T%xRfI5rvmw* z6w2F|(R_FrdV4Kn)V4A_Z(l|q<1%blUe0xiWtir?rnQ!%IeQfwV#;y*_A2JyFGpXwRlKQO4y)XiEFMvg zvAQeStEde3XRlyAnM5tU%9wB~UU^V84kah*+$^f#qMYx^yY) zeZJt0=~CLB`vQ4|rL3F#1ux5&a9ZPMwB#(IOvUHUd<^Nkh9eZJ&~5b^b~#XmXAjnJ znpG9feP6?V$yJz$we^1)zE>;QG$r4E6>g4M$0y^f zFePa%^S)KWL}M*2o>gMh__Z9ZTM4(6HQc|o5;L!^;l5Fo*tdKQ4Vo%CeN@`zOf<$C)8l&XGLmmt3lJk zP3)>u13$w}T>Q8OM~XIaQc(>?{=J!T{c4eRe=~C#vz`$R@5>EUe>zO)TnD zjoL^>{+<6F*N-c5h0k|P9<0cL*T2IgdLuP9e8-4W8|ggaJK~0Jq(%8RZ0oU+jfLMj z^RwmF4ql6GKuP)zrdKq;eu@f92mHXr8!8Nu|AFagDjd7-2Z|=`|sK6BYq|B;naam$Qh%`mGhfmd{LG4JDRZOwJJAVX~O8yd%4%930W8R zviq|p7{1!e9l1?7G)j%TTbeNPyc(N^HzPexjZ5U4p+7>MlXf;^#aVTRYBXbbtU8;` zn^7}tA3p{)!}Ih$?oVyTzL)!`SJjLmL-$j;cMHCs+|M_YTHq1ApG7NMpf>mbZPi-v z_lX1S_HPTmMG04n7Pt*ONH6~u$gDX?`{ykfyZ<29ooPnvjDtL>)(nsL2l!=GGv?em zz?Lb^h?sSNfqk2CJbyoj*EXU4?tYHUYQoLA`}rcQ3DXMqaj1P0g758P56vblU$Bq% z2bz%dNu4=p!ev8s#!YI%czJd1?AZjr&uY{a)^DMS@coI6h*_-0Os__4D&5P*dyQx| z-OJMlPJduIEMmMy3qf0QpZTX5se5gMIn z!PI|`u=}r)jaW4WoXYW|ysP$k={{z17>`>ve{~r`mAn zzcXyUDm>qImifAEXz)DC17>Y_({`439ouk6=^R&kw?V<<99=@%FhqKe&M$=LTh4P) zavMC{&ht`M8`N6PbKS=_EZls7(dBKZcD=yV+BUpyx~=K^c&rO@7aftBV`^zC+mTKA=R=6{|~wWQ#l^VGjAMNRkfY&#{zji7Vv zb3lr})Xp(thZMoR&awLjDV7JHWwnA7Rr}8J<{T+(WX{rSq7)OKp5eJ+QUn}4!_3}N zsLGz<2WczHo}H%lw^mpjInCFFtr#=lG`&+>krH`|b6>PV<@hOX3v5NV!KXOVxfRCI zCwbkZ6(dibjbXK6dO*=z9Oigw7{Ug{q}a`mtW(8ZS62q zxXvL;!gI6hG!^1bD7#K?;XT@y+~5J>y@Dk-7$UrvxU0YF;bhcLY)Lrn_Gpt8FNmXSA;tH_klK733WBhS(~fiws6UH zz83QMrSuw0+od>Xc8#t-rTAmnHA;U;JM&XJR)?chh5ffuhdqUT8GTBJPQpH&Zl%L_ z!oJmip+gU0A2(F!aHz1aw+^|(>B2tO9ealg!vCxvc88k2tyu8;9qt$EROYh|<%POU z3)5k!P{$s|I(#eC^_jyuG!*I_i*@)}sQaSfI;`y>?TkOoQJ3cG!hVX<<*cnzSd{5< z)KX!;4YJ-#bwhP$607yM|(4IMqs z`@IFqyY-kcQHVcFkK>lMpx`$>$_nTB!@Rq663+Fjfp?iGob$`>-ld~(?hoF3mwkmk zkUQrtCkTDPspnmO$ZUbe2VwocwqVHxx_z5xdaxS;s40Z#}xVc7=*9ushbcTYq95^zLKUqhxUHDN=W0eg3A#E>Qf z&J_A!UWx(F2z@cY)qv}SKB;llfH^|nT)f$U{q8rS|3m{834Qf&7X!w`Hg?AM&^2P> zh(@Rd7}4s-4}|9$QS03gO#IE5-F<#QTh5pi@KV7pW6BBmNnXd8u>zhl_cP{i1ApLW zjxmb`ytSvRiHL_nW|%PAt^xgbnlR{M1I}ohaO=hfCXfM@qaOPD3#+u4>95$~3q zlnD5t4&Eyy+%%^S=Y~r7muekYWkT0Gb?6gg!hF9vytOuAY<3+i&zNxM&pMod3GWH- zHEVi#)_S%bdm$)fn{LoaZlo$GNBGB95MDWX>Z3u5LbP z&UFILelBm$dI5Lq$eL4Gz~Sq^nDMB9%X_~zW1xO@XZ)LMEUDG|JBBM-@@3cWxP94@ zXH&o7t+OSicHb~H*^;va-evK_QsiMD$67H);AM+9SaE{D)2uF8ahbr|Y89=I2mumS_R(aTG2hQ0#*T5lq;>k z9$hP56nN!0RV!W+c;=VcR-7a7POl!qItV=UY=Nc7OD8-Qt^!YO*0bd49aV@_vt){X z75xYEG|jZ6B&Mn}A8EI3xne;X)?3@sYj_#lUfPN}M0KStBV0iHSwRZcc25)?|#P9r4F3F?lT4+ za}aeKHB$%fPAbOJ2nP-`D8`^t2T|uy>+i^ceT(sIu_NVEiZJMiBjpT>pl;&GK8i(n z_RNtEGDR5t#gSc-KVhG&6BX}&Lb$vWmDYd4Z-<AXHi%4`P-Q_(S_)7z**GYlnk7Ca!C}OcRU-v&^{I--9hb28aHk7!Q#9uP+utl1EwAO`cjF@kY*bZuZx!xFg z*RQdtw<}wfra^PEEH_uZE++PGZiqF@)a!3GM)AGjG4sC3ODl#8yIRXGr@HdB97_X^ zCFE?rrG0mu-6wx{JJ5be`*bBMQ&m9wsgnhW9@Y^nVS8z&AFTBoA7!GLKl^MXeGCfw zDh1V@lS}CBJYB4mS`9uJ4Q}+%e7x~|Kft!ECder#j$znDajiBfjEC|KjK#aCs)BGo zt@C4@6XW~sKIY!8$qQuK8vNCsbc#>ApzU@b(Tuy5i!BMsMf*v)I|-}Ds=`{UlD=<% z&qU}ck?&E=cw}v?WTSAyjQon}TtYf{RgqzdWi0>Lq+uF0oBtrNq0TV}Uj@(RmwhL` zkoHT>;IVLyj_j=ConORbFTZAQ{Q5pb)a71|zuf!B8eY42Iqf9M zEMW8+nzj5#8{GTndJh;8HOVA{!;D>w*@-t-j6v(XIPQ*&h!#Pd+eu_mo*`bw8TxPO zD$yKu2QtY$+wTctvaBRq3=B1$YaTxIr3UU`9vrC}wvRxGnAy`CHJ&TU3*#u%mH<9cFi4{2=!&E_gmXbafnw8HU&F7^gz`k_C?$5c>+ zJ{Nv5H*!oa{4*NSdMD)Ah{md}Hd(BT-SymmOdXP(TYFAS1v78oKmwS2vXkQ{O27^V zd7tr}z=|PoUsXR$kwzF`PAIyg@*9LVI=05Uu9I74Q7 zk$?VCW2KrCZiqf63>Tf;NNG|gK@x)LZ_jyF-=0_{!g$8r&r0MrdD2Wzwo>E>>Q=Ug zPrC^gC4ME9F%rPnH^(l82_A+VjKwR~x{pohqxxZ{NJ?yd18>hQa*X3L_9nYwF6!2g zy;v!SbZnoTY-6L}MJ4r%#kPF7m2&<86D{Ki>9N&E&gbt@(%NJ96`8!|eiq$c7OR9S z6u$ar{{^1gq8z5cG(R96ZNX#KXTlksC~f{1vcx>YNo4y4PFFxf`|K*(%IUtMxgZ

    Eq0+x&=o51#N8ZOu0}0i-FT& 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

    NN0^M#c#yJFJb>L5KOq| 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

    8GQ|*Vu$HOZnVy_{Q++DXt>OT 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 HM8HgFD<;h(J{N@8R$0r(!&@D!BBfgw0Z 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 z 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

  • ;G@2-x7BUa?5 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/&+%b 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