diff --git a/build/CMakeLists.txt b/build/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..161c2922aa86341aadc2f437fb88342f7e910a54 --- /dev/null +++ b/build/CMakeLists.txt @@ -0,0 +1,281 @@ +cmake_minimum_required(VERSION 3.10 FATAL_ERROR) + +set(PARENT_DIR /Summa-Actors) +set(EXEC_DIR ${PARENT_DIR}/bin) + +set(EXEC_NAME summa_actors) + +project(summa_actors LANGUAGES CXX Fortran) +enable_language(C) +SET (CMAKE_Fortran_COMPILER gfortran) +include(FortranCInterface) +FortranCInterface_VERIFY(CXX) + +set(ACTORS_DIR ${PARENT_DIR}/build/source/actors) +set(DRIVER_DIR ${PARENT_DIR}/build/source/driver) +set(DSHARE_DIR ${PARENT_DIR}/build/source/dshare) +set(ENGINE_DIR ${PARENT_DIR}/build/source/engine) +set(HOOKUP_DIR ${PARENT_DIR}/build/source/hookup) +set(NETCDF_DIR ${PARENT_DIR}/build/source/netcdf) +set(NOAHMP_DIR ${PARENT_DIR}/build/source/noah-mp) +set(FILE_ACCESS_DIR ${ACTORS_DIR}/file_acces_actor) +set(JOB_ACTOR_DIR ${ACTORS_DIR}/job_actor) +set(HRU_ACTOR_DIR ${ACTORS_DIR}/hru_actor) +set(GRU_ACTOR_DIR ${ACTORS_DIR}/gru_actor) + +set(NRUTIL + ${ENGINE_DIR}/nrtype.f90 + ${ENGINE_DIR}/f2008funcs.f90 + ${ENGINE_DIR}/nr_utility.f90) + +set(NRPROC + ${ENGINE_DIR}/expIntegral.f90 + ${ENGINE_DIR}/spline_int.f90) + +SET(HOOKUP + ${HOOKUP_DIR}/ascii_util.f90 + ${HOOKUP_DIR}/summaActors_FileManager.f90) + +SET(DATAMS + ${DSHARE_DIR}/multiconst.f90 + ${DSHARE_DIR}/var_lookup.f90 + ${DSHARE_DIR}/data_types.f90 + ${DSHARE_DIR}/globalData.f90 + ${DSHARE_DIR}/flxMapping.f90 + ${DSHARE_DIR}/get_ixname.f90) + +SET(DEPENDS_ON_FILEMANAGER + ${DSHARE_DIR}/popMetadat.f90 + ${DSHARE_DIR}/outpt_stat.f90) + +SET(UTILMS + ${ENGINE_DIR}/time_utils.f90 + ${ENGINE_DIR}/mDecisions.f90 + ${ENGINE_DIR}/snow_utils.f90 + ${ENGINE_DIR}/soil_utils.f90 + ${ENGINE_DIR}/updatState.f90 + ${ENGINE_DIR}/matrixOper.f90) + +set(SOLVER + ${ENGINE_DIR}/vegPhenlgy.f90 + ${ENGINE_DIR}/diagn_evar.f90 + ${ENGINE_DIR}/stomResist.f90 + ${ENGINE_DIR}/groundwatr.f90 + ${ENGINE_DIR}/vegSWavRad.f90 + ${ENGINE_DIR}/vegNrgFlux.f90 + ${ENGINE_DIR}/ssdNrgFlux.f90 + ${ENGINE_DIR}/vegLiqFlux.f90 + ${ENGINE_DIR}/snowLiqFlx.f90 + ${ENGINE_DIR}/soilLiqFlx.f90 + ${ENGINE_DIR}/bigAquifer.f90 + ${ENGINE_DIR}/computFlux.f90 + ${ENGINE_DIR}/computResid.f90 + ${ENGINE_DIR}/computJacob.f90 + ${ENGINE_DIR}/eval8summa.f90 + ${ENGINE_DIR}/summaSolve.f90 + ${ENGINE_DIR}/systemSolv.f90 + ${ENGINE_DIR}/varSubstep.f90 + ${ENGINE_DIR}/opSplittin.f90 + ${ENGINE_DIR}/coupled_em.f90) + +set(INTERFACE + ${ACTORS_DIR}/global/cppwrap_datatypes.f90 + ${ACTORS_DIR}/global/cppwrap_auxiliary.f90 + ${ACTORS_DIR}/global/cppwrap_metadata.f90) + +set(FILE_ACCESS_INTERFACE + ${FILE_ACCESS_DIR}/initOutputStruc.f90 + ${FILE_ACCESS_DIR}/deallocateOutputStruc.f90 + ${FILE_ACCESS_DIR}/cppwrap_fileAccess.f90) + +set(JOB_INTERFACE + ${JOB_ACTOR_DIR}/job_actor.f90) + +set(HRU_INTERFACE + ${HRU_ACTOR_DIR}/cppwrap_hru.f90) + +set(GRU_INTERFACE + ${GRU_ACTOR_DIR}/gru_actor.f90) + +set(PRELIM + ${ENGINE_DIR}/conv_funcs.f90 + ${ENGINE_DIR}/sunGeomtry.f90 + ${ENGINE_DIR}/convE2Temp.f90 + ${ENGINE_DIR}/allocspaceActors.f90 + ${ENGINE_DIR}/alloc_file_access.f90 + ${ENGINE_DIR}/checkStruc.f90 + ${ENGINE_DIR}/childStruc.f90 + ${ENGINE_DIR}/ffile_info.f90 + ${ENGINE_DIR}/read_attribute.f90 + ${ENGINE_DIR}/read_pinit.f90 + ${ENGINE_DIR}/pOverwrite.f90 + ${ENGINE_DIR}/read_paramActors.f90 + ${ENGINE_DIR}/paramCheck.f90 + ${ENGINE_DIR}/check_icondActors.f90) + +set(NOAHMP + ${NOAHMP_DIR}/module_model_constants.F + ${NOAHMP_DIR}/module_sf_noahutl.F + ${NOAHMP_DIR}/module_sf_noahlsm.F + ${NOAHMP_DIR}/module_sf_noahmplsm.F) + +set(MODRUN + ${ENGINE_DIR}/indexState.f90 + ${ENGINE_DIR}/getVectorz.f90 + ${ENGINE_DIR}/updateVars.f90 + ${ENGINE_DIR}/var_derive.f90 + ${ENGINE_DIR}/read_forcingActors.f90 + ${ENGINE_DIR}/access_forcing.f90 + ${ENGINE_DIR}/access_write.f90 + ${ENGINE_DIR}/derivforce.f90 + ${ENGINE_DIR}/snowAlbedo.f90 + ${ENGINE_DIR}/canopySnow.f90 + ${ENGINE_DIR}/tempAdjust.f90 + ${ENGINE_DIR}/snwCompact.f90 + ${ENGINE_DIR}/layerMerge.f90 + ${ENGINE_DIR}/layerDivide.f90 + ${ENGINE_DIR}/volicePack.f90 + ${ENGINE_DIR}/qTimeDelay.f90) + +set(NETCDF + ${NETCDF_DIR}/netcdf_util.f90 + ${NETCDF_DIR}/def_output.f90 + ${NETCDF_DIR}/outputStrucWrite.f90 + ${NETCDF_DIR}/writeOutput.f90 + ${NETCDF_DIR}/read_icondActors.f90) + +set(DRIVER + ${DRIVER_DIR}/summaActors_type.f90 + ${DRIVER_DIR}/summaActors_util.f90 + ${DRIVER_DIR}/summaActors_globalData.f90 + ${DRIVER_DIR}/summaActors_init.f90 + ${DRIVER_DIR}/SummaActors_setup.f90 + ${DRIVER_DIR}/summaActors_restart.f90 + ${DRIVER_DIR}/summaActors_forcing.f90 + ${DRIVER_DIR}/SummaActors_modelRun.f90 + ${DRIVER_DIR}/summaActors_alarms.f90 + ${DRIVER_DIR}/summaActors_wOutputStruc.f90) + +set(COMM_ALL + ${NRUTIL} + ${NRPROC} + ${DATAMS} + ${INTERFACE} + ${HOOKUP} + ${DEPENDS_ON_FILEMANAGER} + ${UTILMS}) + +set(SUMMA_ALL + ${NETCDF} + ${PRELIM} + ${MODRUN} + ${SOLVER} + ${DRIVER} + ${JOB_INTERFACE} + ${HRU_INTERFACE} + ${GRU_INTERFACE}) + +set(ACTORS_GLOBAL + ${ACTORS_DIR}/global/global.cpp + ${ACTORS_DIR}/global/timing_info.cpp) + +set(HRU_ACTOR + ${ACTORS_DIR}/hru_actor/hru_actor.cpp) + +set(GRU_ACTOR + ${ACTORS_DIR}/gru_actor/gru_actor.cpp) + +set(FILE_ACCESS_ACTOR + ${ACTORS_DIR}/file_access_actor/file_access_actor.cpp + ${ACTORS_DIR}/file_access_actor/forcing_file_info.cpp + ${ACTORS_DIR}/file_access_actor/output_manager.cpp) + +set(JOB_ACTOR + ${ACTORS_DIR}/job_actor/job_actor.cpp + ${ACTORS_DIR}/job_actor/GRUinfo.cpp) + +set(SUMMA_ACTOR + ${ACTORS_DIR}/summa_actor/summa_actor.cpp) + +set(SUMMA_CLIENT + ${ACTORS_DIR}/summa_actor/summa_client.cpp) + +set(SUMMA_SERVER + ${ACTORS_DIR}/summa_actor/summa_server.cpp + ${ACTORS_DIR}/summa_actor/batch_manager.cpp + ${ACTORS_DIR}/summa_actor/client.cpp) + +set(MAIN + ${ACTORS_DIR}/main.cpp) + + + + +add_library(SUMMA_NOAHMP OBJECT + ${NOAHMP} + ${NRUTIL}) + target_compile_options(SUMMA_NOAHMP PRIVATE + -g -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) + +add_library(SUMMA_COMM OBJECT + ${COMM_ALL}) + target_compile_options(SUMMA_COMM PRIVATE + -g -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) + target_include_directories(SUMMA_COMM PRIVATE + "/usr/include" + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES}) + target_link_libraries(SUMMA_COMM PUBLIC + ${netCDF_LIBRARIES} + ${LAPACK_LIBRARIES} + SUMMA_NOAHMP) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXEC_DIR}) +add_library(SUMMA_OBJ SHARED + ${SUMMA_ALL}) + target_compile_options(SUMMA_OBJ PRIVATE + -g -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors) + target_include_directories(SUMMA_OBJ PRIVATE + "/usr/include" + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES}) + target_link_libraries(SUMMA_OBJ PUBLIC + ${netCDF_LIBRARIES} + ${LAPACK_LIBRARIES} + SUMMA_COMM) + +set(CMAKE_CXX_FLAGS "-g -O3 -Wfatal-errors -std=c++17") + +find_package(CAF REQUIRED) +find_package(netCDF REQUIRED) +find_package(LAPACK REQUIRED) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXEC_DIR}) + + +add_executable(${EXEC_NAME} + ${ACTORS_GLOBAL} + ${HRU_ACTOR} + ${GRU_ACTOR} + ${FILE_ACCESS_ACTOR} + ${JOB_ACTOR} + ${SUMMA_ACTOR} + ${SUMMA_CLIENT} + ${SUMMA_SERVER} + ${MAIN}) + set_property(TARGET ${EXEC_NAME} PROPERTY LINKER_LANGUAGE Fortran) + target_include_directories(${EXEC_NAME} PUBLIC + ${CAF_INCLUDES} + ${netCDF_INCLUDES} + ${LAPACK_INCLUDES} + "/Summa-Actors/build/includes/global" + "/Summa-Actors/build/includes/summa_actor" + "/Summa-Actors/build/includes/gru_actor" + "/Summa-Actors/build/includes/job_actor" + "/Summa-Actors/build/includes/file_access_actor" + "/Summa-Actors/build/includes/hru_actor") + target_link_libraries( ${EXEC_NAME} + ${CAF_LIBRARIES} + ${netCDF_LIBRARIES} + ${LAPACK_LIBRARIES} + SUMMA_OBJ) \ No newline at end of file diff --git a/build/includes/global/message_atoms.hpp b/build/includes/global/message_atoms.hpp index e185dcfc20776e2854e0e109f98c5e0654037383..93f1b8f2e40b472a40095155c3e568ed805e3c86 100644 --- a/build/includes/global/message_atoms.hpp +++ b/build/includes/global/message_atoms.hpp @@ -9,6 +9,7 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id) CAF_ADD_ATOM(summa, err) // GRU Actor CAF_ADD_ATOM(summa, init_gru) + CAF_ADD_ATOM(summa, done_init_gru) // Job Actor CAF_ADD_ATOM(summa, done_reading_forcingFile) CAF_ADD_ATOM(summa, done_reading_first_forcing_file) diff --git a/build/includes/gru_actor/gru_actor.hpp b/build/includes/gru_actor/gru_actor.hpp index fd9a7a6075e8a88267ba49f3d322f933fbc2e45e..b0de9609e4ac9ba7c1782c007ea0ded4d131fa77 100644 --- a/build/includes/gru_actor/gru_actor.hpp +++ b/build/includes/gru_actor/gru_actor.hpp @@ -8,6 +8,7 @@ #include <array> #include <chrono> #include <string> +#include "var_lookup.hpp" namespace caf{ struct gru_state { @@ -20,7 +21,9 @@ struct gru_state { int ref_gru; // The actual ID of the GRU we are int num_hrus; + int nTimeDelay = 2000; // number of hours in the time delay histogram (default: ~1 season = 24*365/4) + struct iLookVarType var_type_lookup; int num_bpar_vars; // number of variables in the fortran structure for bpar_struct std::vector<double> bpar_struct; diff --git a/build/includes/gru_actor/gru_actor_subroutine_wrappers.hpp b/build/includes/gru_actor/gru_actor_subroutine_wrappers.hpp index 5e103fac8eee002f8b4b9b7e3fa7aa3d32f3c657..a078d41d6dca35216126318e4aff3b1b85074dcc 100644 --- a/build/includes/gru_actor/gru_actor_subroutine_wrappers.hpp +++ b/build/includes/gru_actor/gru_actor_subroutine_wrappers.hpp @@ -4,7 +4,9 @@ extern "C" { void getVarSizes(int* num_var_types, int* num_bpar_vars, int* num_bvar_vars); - void fillVarTypeLists(int* num_var_types, int* num_bpar_vars, int* num_bvar_vars, void* i_look_var_type_list, - void* bpar_struct_var_type_list, void* bvar_struct_var_type_list); + void initVarType(void* var_type_lookup); + + void fillVarTypeLists( int* num_bpar_vars, int* num_bvar_vars, + void* bpar_struct_var_type_list, void* bvar_struct_var_type_list, int* err); } \ No newline at end of file diff --git a/build/makefile b/build/makefile index bffef6f90ce0c2fd2bba7c7a2125adf223843304..94a5a62466990dbf9476f21b1b85ea2f2d511db9 100644 --- a/build/makefile +++ b/build/makefile @@ -262,8 +262,8 @@ TIMEINFO = $(SOURCE_DIR)/global/timing_info.cpp SUMMA_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/summa_actor SUMMA_ACTOR = $(SOURCE_DIR)/summa_actor/summa_actor.cpp SUMMA_CLIENT = $(SOURCE_DIR)/summa_actor/summa_client.cpp -SUMMA_SERVER = $(SOURCE_DIR)/summa_actor/summa_server.cpp +SUMMA_SERVER = $(SOURCE_DIR)/summa_actor/summa_server.cpp BATCH_MANGER = $(SOURCE_DIR)/summa_actor/batch_manager.cpp CLIENT_MANAGER = $(SOURCE_DIR)/summa_actor/client.cpp diff --git a/build/source/actors/gru_actor/gru_actor.cpp b/build/source/actors/gru_actor/gru_actor.cpp index 23449a18f0eb833ce9e3a8bb5e98fbb6da7d40c7..d715db2bc510a5cd25406e052d591b83f6d98b87 100644 --- a/build/source/actors/gru_actor/gru_actor.cpp +++ b/build/source/actors/gru_actor/gru_actor.cpp @@ -11,12 +11,11 @@ behavior gru_actor(stateful_actor<gru_state>* self, int refGRU, int indxGRU, std::string configPath, int outputStrucSize, caf::actor parent) { aout(self) << "GRU Actor Has Started\n"; + self->state.parent = parent; return { - // What does a GRU need to assemble its data structure? - // [=](init_gru) { // Get the variable data length, we also need the type information aout(self) << "init GRU \n"; @@ -42,15 +41,65 @@ behavior gru_actor(stateful_actor<gru_state>* self, int refGRU, int indxGRU, self->state.bvar_struct_var_type_list.push_back(integer_missing_value); } + initVarType(&self->state.var_type_lookup); + // aout(self) << "************C++************\n"; + // aout(self) << self->state.var_type_lookup.scalarv << "\n"; + // aout(self) << self->state.var_type_lookup.wLength << "\n"; + // aout(self) << self->state.var_type_lookup.midSnow << "\n"; + // aout(self) << self->state.var_type_lookup.midSoil << "\n"; + // aout(self) << self->state.var_type_lookup.midToto << "\n"; + // aout(self) << self->state.var_type_lookup.ifcSnow << "\n"; + // aout(self) << self->state.var_type_lookup.ifcSoil << "\n"; + // aout(self) << self->state.var_type_lookup.ifcToto << "\n"; + // aout(self) << self->state.var_type_lookup.parSoil << "\n"; + // aout(self) << self->state.var_type_lookup.routing << "\n"; + // aout(self) << self->state.var_type_lookup.outstat << "\n"; + // aout(self) << self->state.var_type_lookup.unknown << "\n"; + // aout(self) << "************C++************\n"; + // Fill The lists with the values from the fortran lists - fillVarTypeLists(&self->state.num_var_types, - &self->state.num_bpar_vars, + int err = 0; + fillVarTypeLists(&self->state.num_bpar_vars, &self->state.num_bvar_vars, - &self->state.i_look_var_type_list[0], &self->state.bpar_struct_var_type_list[0], - &self->state.bvar_struct_var_type_list[0]); + &self->state.bvar_struct_var_type_list[0], + &err); + // aout(self) << "Printing BPAR\n"; + // for(int i = 0; i < self->state.num_bpar_vars; i++) { + // aout(self) << i << ": " << self->state.bpar_struct_var_type_list[i] << "\n"; + // } + // aout(self) << "Printing BVAR\n"; + // for(int i = 0; i < self->state.num_bvar_vars; i++) { + // aout(self) << i << ": " << self->state.bvar_struct_var_type_list[i] << "\n"; + // } + + // Now we can allocate space for the structures + for(int i = 0; i < self->state.num_bpar_vars; i++) { + if (self->state.bpar_struct_var_type_list[i] == self->state.var_type_lookup.scalarv) { + self->state.bpar_struct.push_back(0.0); + } else { + aout(self) << "ERROR: GRU - bpar_struct contains type that is not a scalar\n"; + } + } + for(int i = 0; i < self->state.num_bvar_vars; i++) { + if (self->state.bvar_struct_var_type_list[i] == self->state.var_type_lookup.scalarv) { + std::vector<double> temp; + self->state.bvar_struct.push_back(temp); + self->state.bvar_struct[i].push_back(0.0); + + } else if(self->state.bvar_struct_var_type_list[i] == self->state.var_type_lookup.routing) { + std::vector<double> temp; + self->state.bvar_struct.push_back(temp); + for (int x = 0; x < self->state.nTimeDelay; x++) { + self->state.bvar_struct[i].push_back(0.0); + } + } else { + aout(self) << "ERROR: GRU - bvar_struct contains type that is not a scalar or routing\n"; + } + } + self->send(self->state.parent, done_init_gru_v); } diff --git a/build/source/actors/gru_actor/gru_actor.f90 b/build/source/actors/gru_actor/gru_actor.f90 index fe4c0b461f06573c8a439cef9d2ba4542929daf8..ae867c1239a756f0d7cf67c409c7f3deab59bd69 100644 --- a/build/source/actors/gru_actor/gru_actor.f90 +++ b/build/source/actors/gru_actor/gru_actor.f90 @@ -28,76 +28,103 @@ subroutine getVarSizes(num_var_types, & end subroutine getVarSizes -subroutine initVarType(num_var_types, & - i_look_var_type_list) bind(C, name="initVarType") +subroutine initVarType(var_type_lookup) bind(C, name="initVarType") USE var_lookup,only:iLookVarType + USE var_lookup,only:iLook_VarType + implicit none - integer(c_int), intent(in) :: num_var_types - integer(c_int), intent(out), dimension(num_var_types) :: i_look_var_type_list - - i_look_var_type_list(1) = iLookVarType%scalarv - i_look_var_type_list(2) = iLookVarType%wLength - i_look_var_type_list(3) = iLookVarType%midSnow - i_look_var_type_list(4) = iLookVarType%midSoil - i_look_var_type_list(5) = iLookVarType%midToto - i_look_var_type_list(6) = iLookVarType%ifcSnow - i_look_var_type_list(7) = iLookVarType%ifcSoil - i_look_var_type_list(8) = iLookVarType%ifcToto - i_look_var_type_list(9) = iLookVarType%parSoil - i_look_var_type_list(10) = iLookVarType%routing - i_look_var_type_list(11) = iLookVarType%outstat - i_look_var_type_list(12) = iLookVarType%unknown + type(iLook_VarType) :: var_type_lookup + + ! Get the indexes to match C++ offset starting at 0 + var_type_lookup%scalarv = iLookVarType%scalarv - 1 + var_type_lookup%wLength = iLookVarType%wLength - 1 + var_type_lookup%midSnow = iLookVarType%midSnow - 1 + var_type_lookup%midSoil = iLookVarType%midSoil - 1 + var_type_lookup%midToto = iLookVarType%midToto - 1 + var_type_lookup%ifcSnow = iLookVarType%ifcSnow - 1 + var_type_lookup%ifcSoil = iLookVarType%ifcSoil - 1 + var_type_lookup%ifcToto = iLookVarType%ifcToto - 1 + var_type_lookup%parSoil = iLookVarType%parSoil - 1 + var_type_lookup%routing = iLookVarType%routing - 1 + var_type_lookup%outstat = iLookVarType%outstat - 1 + var_type_lookup%unknown = iLookVarType%unknown - 1 + + ! check the values + ! print*, "************FORTRAN************" + ! print*, "iLookVarType%scalarv", iLookVarType%scalarv + ! print*, "iLookVarType%wLength", iLookVarType%wLength + ! print*, "iLookVarType%midSnow", iLookVarType%midSnow + ! print*, "iLookVarType%midSoil", iLookVarType%midSoil + ! print*, "iLookVarType%midToto", iLookVarType%midToto + ! print*, "iLookVarType%ifcSnow", iLookVarType%ifcSnow + ! print*, "iLookVarType%ifcSoil", iLookVarType%ifcSoil + ! print*, "iLookVarType%ifcToto", iLookVarType%ifcToto + ! print*, "iLookVarType%parSoil", iLookVarType%parSoil + ! print*, "iLookVarType%routing", iLookVarType%routing + ! print*, "iLookVarType%outstat", iLookVarType%outstat + ! print*, "iLookVarType%unknown", iLookVarType%unknown + ! print*, "************FORTRAN************" + end subroutine -subroutine fillVarTypeLists(num_var_types, & - num_bpar_vars, & +subroutine fillVarTypeLists(num_bpar_vars, & num_bvar_vars, & - i_look_var_type_list, & bpar_struct_var_type_list, & - bvar_struct_var_type_list) bind(C, name="fillVarTypeLists") + bvar_struct_var_type_list, & + err) bind(C, name="fillVarTypeLists") USE globalData,only:type_meta,bpar_meta,bvar_meta USE var_lookup,only:iLookBVAR,iLookBPAR,iLookVarType implicit none - integer(c_int), intent(in) :: num_var_types integer(c_int), intent(in) :: num_bpar_vars integer(c_int), intent(in) :: num_bvar_vars - integer(c_int), intent(out), dimension(num_var_types) :: i_look_var_type_list integer(c_int), intent(out), dimension(num_bpar_vars) :: bpar_struct_var_type_list integer(c_int), intent(out), dimension(num_bvar_vars) :: bvar_struct_var_type_list - - integer(i4b) :: i - - i_look_var_type_list(1) = iLookVarType%scalarv - i_look_var_type_list(2) = iLookVarType%wLength - i_look_var_type_list(3) = iLookVarType%midSnow - i_look_var_type_list(4) = iLookVarType%midSoil - i_look_var_type_list(5) = iLookVarType%midToto - i_look_var_type_list(6) = iLookVarType%ifcSnow - i_look_var_type_list(7) = iLookVarType%ifcSoil - i_look_var_type_list(8) = iLookVarType%ifcToto - i_look_var_type_list(9) = iLookVarType%parSoil - i_look_var_type_list(10) = iLookVarType%routing - i_look_var_type_list(11) = iLookVarType%outstat - i_look_var_type_list(12) = iLookVarType%unknown - - do i = 1, num_var_types - print*, "iLookVarType = ", i_look_var_type_list(i) + integer(c_int), intent(out) :: err + integer(i4b) :: iVar + + + ! Get the types of the variables for bparStruct + ! Index in bpar_struct_var_type_list will match bpar_Struct + do iVar=1, num_bpar_vars + select case(bpar_meta(iVar)%vartype) + case(iLookVarType%scalarv); bpar_struct_var_type_list(iVar) = iLookVarType%scalarv - 1 + case(iLookVarType%wLength); bpar_struct_var_type_list(iVar) = iLookVarType%wLength - 1 + case(iLookVarType%midSnow); bpar_struct_var_type_list(iVar) = iLookVarType%midSnow - 1 + case(iLookVarType%midSoil); bpar_struct_var_type_list(iVar) = iLookVarType%midSoil - 1 + case(iLookVarType%midToto); bpar_struct_var_type_list(iVar) = iLookVarType%midToto - 1 + case(iLookVarType%ifcSnow); bpar_struct_var_type_list(iVar) = iLookVarType%ifcSnow - 1 + case(iLookVarType%ifcSoil); bpar_struct_var_type_list(iVar) = iLookVarType%ifcSoil - 1 + case(iLookVarType%ifcToto); bpar_struct_var_type_list(iVar) = iLookVarType%ifcToto - 1 + case(iLookVarType%parSoil); bpar_struct_var_type_list(iVar) = iLookVarType%parSoil - 1 + case(iLookVarType%routing); bpar_struct_var_type_list(iVar) = iLookVarType%routing - 1 + case(iLookVarType%outstat); bpar_struct_var_type_list(iVar) = iLookVarType%outstat - 1 + case(iLookVarType%unknown); bpar_struct_var_type_list(iVar) = iLookVarType%unknown - 1 + case default + err = 40; + return + end select end do - do i = 1, num_bpar_vars - bpar_struct_var_type_list(i) = bpar_meta(i)%varType + do iVar=1, num_bvar_vars + select case(bvar_meta(iVar)%vartype) + case(iLookVarType%scalarv); bvar_struct_var_type_list(iVar) = iLookVarType%scalarv - 1 + case(iLookVarType%wLength); bvar_struct_var_type_list(iVar) = iLookVarType%wLength - 1 + case(iLookVarType%midSnow); bvar_struct_var_type_list(iVar) = iLookVarType%midSnow - 1 + case(iLookVarType%midSoil); bvar_struct_var_type_list(iVar) = iLookVarType%midSoil - 1 + case(iLookVarType%midToto); bvar_struct_var_type_list(iVar) = iLookVarType%midToto - 1 + case(iLookVarType%ifcSnow); bvar_struct_var_type_list(iVar) = iLookVarType%ifcSnow - 1 + case(iLookVarType%ifcSoil); bvar_struct_var_type_list(iVar) = iLookVarType%ifcSoil - 1 + case(iLookVarType%ifcToto); bvar_struct_var_type_list(iVar) = iLookVarType%ifcToto - 1 + case(iLookVarType%parSoil); bvar_struct_var_type_list(iVar) = iLookVarType%parSoil - 1 + case(iLookVarType%routing); bvar_struct_var_type_list(iVar) = iLookVarType%routing - 1 + case(iLookVarType%outstat); bvar_struct_var_type_list(iVar) = iLookVarType%outstat - 1 + case(iLookVarType%unknown); bvar_struct_var_type_list(iVar) = iLookVarType%unknown - 1 + case default + err = 40; + return + end select end do - - do i = 1, num_bvar_vars - bvar_struct_var_type_list(i) = bvar_meta(i)%varType - end do - - - - - - end subroutine fillVarTypeLists diff --git a/build/source/actors/job_actor/job_actor.cpp b/build/source/actors/job_actor/job_actor.cpp index 11e5b6dec8dfac2aa400fb7f1054759e6e55006a..bd91bfa234b26ae55bce386e8062f47e7a81e7fd 100644 --- a/build/source/actors/job_actor/job_actor.cpp +++ b/build/source/actors/job_actor/job_actor.cpp @@ -167,11 +167,17 @@ behavior job_actor(stateful_actor<job_state>* self, int start_gru, int num_gru, [=](done_file_access_actor_init) { // Init GRU Actors and the Output Structure - self->send(self, init_hru_v); - // auto gru = self->spawn(gru_actor, 1, 1, - // self->state.config_path, - // self->state.output_struct_size, self); - // self->send(gru, init_gru_v); + // self->send(self, init_hru_v); + auto gru = self->spawn(gru_actor, 1, 1, + self->state.config_path, + self->state.output_struct_size, self); + self->send(gru, init_gru_v); + }, + + [=](done_init_gru) { + aout(self) << "GRU is Initialized\n"; + self->quit(); + return; }, [=](file_access_actor_done, double read_duration, double write_duration) { diff --git a/build/source/dshare/var_lookup.f90 b/build/source/dshare/var_lookup.f90 index b1ae8c0ad725c0c80862e549b26dc1e118ac482d..9ae9d716b2e56839fc74e859bae0e6b5298e98b8 100755 --- a/build/source/dshare/var_lookup.f90 +++ b/build/source/dshare/var_lookup.f90 @@ -20,6 +20,7 @@ MODULE var_lookup ! defines named variables used to index array elements + USE, intrinsic :: iso_c_binding USE nrtype, integerMissing=>nr_integerMissing implicit none private @@ -719,19 +720,19 @@ MODULE var_lookup ! (13) structure for looking up the type of a model variable (this is only needed for backward ! compatability, and should be removed eventually) ! *********************************************************************************************************** - type, public :: iLook_varType - integer(i4b) :: scalarv = integerMissing ! scalar variables - integer(i4b) :: wLength = integerMissing ! # spectral bands - integer(i4b) :: midSnow = integerMissing ! mid-layer snow variables - integer(i4b) :: midSoil = integerMissing ! mid-layer soil variables - integer(i4b) :: midToto = integerMissing ! mid-layer, both snow and soil - integer(i4b) :: ifcSnow = integerMissing ! interface snow variables - integer(i4b) :: ifcSoil = integerMissing ! interface soil variables - integer(i4b) :: ifcToto = integerMissing ! interface, snow and soil - integer(i4b) :: parSoil = integerMissing ! soil depth - integer(i4b) :: routing = integerMissing ! routing variables - integer(i4b) :: outstat = integerMissing ! output statistic - integer(i4b) :: unknown = integerMissing ! cath-cal alternative type + type, public, bind(C) :: iLook_varType + integer(c_int) :: scalarv = integerMissing ! scalar variables + integer(c_int) :: wLength = integerMissing ! # spectral bands + integer(c_int) :: midSnow = integerMissing ! mid-layer snow variables + integer(c_int) :: midSoil = integerMissing ! mid-layer soil variables + integer(c_int) :: midToto = integerMissing ! mid-layer, both snow and soil + integer(c_int) :: ifcSnow = integerMissing ! interface snow variables + integer(c_int) :: ifcSoil = integerMissing ! interface soil variables + integer(c_int) :: ifcToto = integerMissing ! interface, snow and soil + integer(c_int) :: parSoil = integerMissing ! soil depth + integer(c_int) :: routing = integerMissing ! routing variables + integer(c_int) :: outstat = integerMissing ! output statistic + integer(c_int) :: unknown = integerMissing ! cath-cal alternative type endtype iLook_varType ! *********************************************************************************************************** diff --git a/build/source/hookup/summaActors_FileManager.f90 b/build/source/hookup/summaActors_FileManager.f90 index 8183fc79adbc63916529280bd10fb50c2c372fd8..f21f47635ec507cbaf9c7d0d561ecbd8a4d7d093 100755 --- a/build/source/hookup/summaActors_FileManager.f90 +++ b/build/source/hookup/summaActors_FileManager.f90 @@ -102,7 +102,12 @@ subroutine summa_SetTimesDirsAndFiles(file_manager,err) bind(C, name="setTimesDi ! open file, read non-comment lines, close file call file_open(trim(summaFileManagerIn),unt,err,cmessage) - if(err/=0) then; message=trim(message)//trim(cmessage)//"/Failed to open control file [''"//trim(summaFileManagerIn)//"']"; err=-10; return; end if + if(err/=0) then + message=trim(message)//trim(cmessage)//"/Failed to open control file [''"//trim(summaFileManagerIn)//"']" + print*, message + err=-10 + return + end if call get_vlines(unt,charline,err,cmessage) ! 'charline' is a list of strings from non-comment lines if(err/=0) then; message=trim(message)//trim(cmessage)//"/Control file read issue in get_vlines()"; return; end if close(unt)