Skip to content
Snippets Groups Projects
Commit 0c4c2eb5 authored by Kyle's avatar Kyle
Browse files

added gru_actor to makefile

parent c2b8ddec
No related branches found
No related tags found
No related merge requests found
...@@ -7,6 +7,8 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id) ...@@ -7,6 +7,8 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id)
CAF_ADD_ATOM(summa, start_summa) CAF_ADD_ATOM(summa, start_summa)
CAF_ADD_ATOM(summa, done_job) CAF_ADD_ATOM(summa, done_job)
CAF_ADD_ATOM(summa, err) CAF_ADD_ATOM(summa, err)
// GRU Actor
CAF_ADD_ATOM(summa, init_gru)
// Job Actor // Job Actor
CAF_ADD_ATOM(summa, done_reading_forcingFile) CAF_ADD_ATOM(summa, done_reading_forcingFile)
CAF_ADD_ATOM(summa, done_reading_first_forcing_file) CAF_ADD_ATOM(summa, done_reading_first_forcing_file)
......
...@@ -3,7 +3,8 @@ ...@@ -3,7 +3,8 @@
#include "caf/all.hpp" #include "caf/all.hpp"
#include "fortran_data_types.hpp" #include "fortran_data_types.hpp"
#include "timing_info.hpp" #include "timing_info.hpp"
#include <vector>
#include <array>
#include <chrono> #include <chrono>
#include <string> #include <string>
...@@ -11,9 +12,21 @@ namespace caf{ ...@@ -11,9 +12,21 @@ namespace caf{
struct gru_state { struct gru_state {
caf::actor file_access_actor; caf::actor file_access_actor;
caf::actor parent; caf::actor parent;
std::vector<caf::actor> hru_list;
int indx_gru; // index for gru part of derived types in FORTRAN
int ref_gru; // The actual ID of the GRU we are
int num_hrus;
int indxGRU; // index for gru part of derived types in FORTRAN int num_bpar_vars; // number of variables in the fortran structure for bpar_struct
int refGRU; // The actual ID of the GRU we are int num_bvar_vars; // number of variables in the fortran structure for bvar_struct
int numHRUs; int n_time_delay = 2000; // number of timesteps in the time delay historgram.
std::vector<double> bpar_struct;
std::vector<std::vector<double>> bvar_struct;
}; };
behavior gru_actor(stateful_actor<gru_state>* self, int refGRU, int indxGRU,
std::string configPath,
int outputStrucSize, caf::actor parent);
} }
\ No newline at end of file
#pragma once #pragma once
extern "C" { extern "C" {
void getVarSize();
} }
\ No newline at end of file
#pragma once
...@@ -55,6 +55,7 @@ ACTORS_DIR = $(F_KORE_DIR)/actors ...@@ -55,6 +55,7 @@ ACTORS_DIR = $(F_KORE_DIR)/actors
JOB_ACTOR_DIR = $(ACTORS_DIR)/job_actor JOB_ACTOR_DIR = $(ACTORS_DIR)/job_actor
FILE_ACCESS_DIR = $(ACTORS_DIR)/file_access_actor FILE_ACCESS_DIR = $(ACTORS_DIR)/file_access_actor
HRU_ACTOR_DIR = $(ACTORS_DIR)/hru_actor HRU_ACTOR_DIR = $(ACTORS_DIR)/hru_actor
GRU_ACTOR_DIR = $(ACTORS_DIR)/gru_actor
# utilities # utilities
SUMMA_NRUTIL= \ SUMMA_NRUTIL= \
...@@ -151,6 +152,11 @@ SUMMA_HRU_INTERFACE = \ ...@@ -151,6 +152,11 @@ SUMMA_HRU_INTERFACE = \
cppwrap_hru.f90 cppwrap_hru.f90
HRU_INTERFACE = $(patsubst %, $(HRU_ACTOR_DIR)/%, $(SUMMA_HRU_INTERFACE)) HRU_INTERFACE = $(patsubst %, $(HRU_ACTOR_DIR)/%, $(SUMMA_HRU_INTERFACE))
SUMMA_GRU_INTERFACE = \
gru_actor.f90
GRU_INTERFACE = $(patsubst %, $(GRU_ACTOR_DIR)/%, $(SUMMA_GRU_INTERFACE))
# Define routines for SUMMA preliminaries # Define routines for SUMMA preliminaries
...@@ -257,6 +263,9 @@ SUMMA_SERVER = $(SOURCE_DIR)/summa_actor/summa_server.cpp ...@@ -257,6 +263,9 @@ SUMMA_SERVER = $(SOURCE_DIR)/summa_actor/summa_server.cpp
BATCH_MANGER = $(SOURCE_DIR)/summa_actor/batch_manager.cpp BATCH_MANGER = $(SOURCE_DIR)/summa_actor/batch_manager.cpp
CLIENT_MANAGER = $(SOURCE_DIR)/summa_actor/client.cpp CLIENT_MANAGER = $(SOURCE_DIR)/summa_actor/client.cpp
GRU_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/gru_actor
GRU_ACTOR = $(SOURCE_DIR)/gru_actor/gru_actor.cpp
JOB_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/job_actor JOB_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/job_actor
JOB_ACTOR = $(SOURCE_DIR)/job_actor/job_actor.cpp JOB_ACTOR = $(SOURCE_DIR)/job_actor/job_actor.cpp
GRUinfo = $(SOURCE_DIR)/job_actor/GRUinfo.cpp GRUinfo = $(SOURCE_DIR)/job_actor/GRUinfo.cpp
...@@ -284,7 +293,7 @@ all: fortran cpp ...@@ -284,7 +293,7 @@ all: fortran cpp
fortran: compile_noah compile_comm compile_summa link clean_fortran fortran: compile_noah compile_comm compile_summa link clean_fortran
cpp: compile_globals compile_hru_actor compile_file_access_actor compile_job_actor compile_summa_actor \ cpp: compile_globals compile_hru_actor compile_gru_actor compile_file_access_actor compile_job_actor compile_summa_actor \
compile_summa_client compile_summa_server compile_main link_cpp clean_cpp compile_summa_client compile_summa_server compile_main link_cpp clean_cpp
test: actors_test actors_testLink actorsClean test: actors_test actors_testLink actorsClean
...@@ -301,7 +310,7 @@ compile_comm: ...@@ -301,7 +310,7 @@ compile_comm:
# compile SUMMA routines # compile SUMMA routines
compile_summa: compile_summa:
$(FC) $(FLAGS_SUMMA) -c $(SUMMA_ALL) $(DRIVER) $(INTERFACE) $(JOB_INTERFACE) $(FILEACCESS_INTERFACE) $(HRU_INTERFACE) $(INCLUDES) $(FC) $(FLAGS_SUMMA) -c $(SUMMA_ALL) $(DRIVER) $(INTERFACE) $(JOB_INTERFACE) $(FILEACCESS_INTERFACE) $(HRU_INTERFACE) $(GRU_INTERFACE) $(INCLUDES)
# generate library # generate library
link: link:
...@@ -322,6 +331,9 @@ clean_fortran: ...@@ -322,6 +331,9 @@ clean_fortran:
compile_globals: compile_globals:
$(CC) $(FLAGS_ACTORS) -c $(GLOBAL) $(TIMEINFO) $(GLOBAL_INCLUDES) $(CC) $(FLAGS_ACTORS) -c $(GLOBAL) $(TIMEINFO) $(GLOBAL_INCLUDES)
compile_gru_actor:
$(CC) $(FLAGS_ACTORS) -c $(GRU_ACTOR) $(GRU_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES)
compile_hru_actor: compile_hru_actor:
$(CC) $(FLAGS_ACTORS) -c $(HRU_ACTOR) $(HRU_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) $(CC) $(FLAGS_ACTORS) -c $(HRU_ACTOR) $(HRU_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES)
...@@ -331,7 +343,7 @@ compile_file_access_actor: ...@@ -331,7 +343,7 @@ compile_file_access_actor:
compile_job_actor: compile_job_actor:
$(CC) $(FLAGS_ACTORS) -c $(JOB_ACTOR) $(GRUinfo) $(JOB_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) \ $(CC) $(FLAGS_ACTORS) -c $(JOB_ACTOR) $(GRUinfo) $(JOB_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) \
$(FILE_ACCESS_ACTOR_INCLUDES) $(HRU_ACTOR_INCLUDES) $(FILE_ACCESS_ACTOR_INCLUDES) $(HRU_ACTOR_INCLUDES) $(GRU_ACTOR_INCLUDES)
compile_summa_actor: compile_summa_actor:
$(CC) $(FLAGS_ACTORS) -c $(SUMMA_ACTOR) $(SUMMA_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) \ $(CC) $(FLAGS_ACTORS) -c $(SUMMA_ACTOR) $(SUMMA_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) \
......
...@@ -7,8 +7,22 @@ ...@@ -7,8 +7,22 @@
namespace caf { namespace caf {
behavior gru_actor(stateful_actor<gru_state>* self, int refGRU, int indxGRU, behavior gru_actor(stateful_actor<gru_state>* self, int refGRU, int indxGRU,
std::string configPath, int outputStrucSize, caf::actor parent) std::string configPath, int outputStrucSize, caf::actor parent) {
aout(self) << "GRU Actor Has Started\n";
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";
}
};
}
} }
\ No newline at end of file
...@@ -4,91 +4,85 @@ module gru_actor ...@@ -4,91 +4,85 @@ module gru_actor
implicit none implicit none
! public::run_gru ! public::run_gru
public::init_basin_for_timestep public::getVarSizes
! public::run_gru_for_timestep()
contains contains
subroutine init_basin_for_timestep()
subroutine getVarSizes() bind(C,name="getVarSizes")
USE globalData,only:bpar_meta,bvar_meta
implicit none implicit none
! initialize runoff variables end subroutine getVarSizes
bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) = 0._dp ! surface runoff (m s-1)
bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) = 0._dp
bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1) = 0._dp ! outflow from all "outlet" HRUs (those with no downstream HRU)
bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = 0._dp
! initialize baseflow variables
bvarStruct%var(iLookBVAR%basin__AquiferRecharge)%dat(1) = 0._dp ! recharge to the aquifer (m s-1)
bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) = 0._dp ! baseflow from the aquifer (m s-1)
bvarStruct%var(iLookBVAR%basin__AquiferTranspire)%dat(1) = 0._dp ! transpiration loss from the aquifer (m s-1)
end subroutine
subroutine run_hru_for_timestep()
implicit none
! initialize runoff variables ! subroutine run_gru_for_timestep()
bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) = 0._dp ! surface runoff (m s-1) ! implicit none
bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) = 0._dp
bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1) = 0._dp ! outflow from all "outlet" HRUs (those with no downstream HRU) ! ! initialize runoff variables
bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = 0._dp ! bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) = 0._dp ! surface runoff (m s-1)
! bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) = 0._dp
! bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1) = 0._dp ! outflow from all "outlet" HRUs (those with no downstream HRU)
! bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = 0._dp
! initialize baseflow variables ! ! initialize baseflow variables
bvarStruct%var(iLookBVAR%basin__AquiferRecharge)%dat(1) = 0._dp ! recharge to the aquifer (m s-1) ! bvarStruct%var(iLookBVAR%basin__AquiferRecharge)%dat(1) = 0._dp ! recharge to the aquifer (m s-1)
bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) = 0._dp ! baseflow from the aquifer (m s-1) ! bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) = 0._dp ! baseflow from the aquifer (m s-1)
bvarStruct%var(iLookBVAR%basin__AquiferTranspire)%dat(1) = 0._dp ! transpiration loss from the aquifer (m s-1) ! bvarStruct%var(iLookBVAR%basin__AquiferTranspire)%dat(1) = 0._dp ! transpiration loss from the aquifer (m s-1)
! ----- calculate weighted basin (GRU) fluxes -------------------------------------------------------------------------------------- ! ! ----- calculate weighted basin (GRU) fluxes --------------------------------------------------------------------------------------
! increment basin surface runoff (m s-1) ! ! increment basin surface runoff (m s-1)
bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) = bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) + fluxStruct%var(iLookFLUX%scalarSurfaceRunoff)%dat(1) * fracHRU ! bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) = bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) + fluxStruct%var(iLookFLUX%scalarSurfaceRunoff)%dat(1) * fracHRU
!increment basin soil drainage (m s-1) ! !increment basin soil drainage (m s-1)
bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) = bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) + fluxStruct%var(iLookFLUX%scalarSoilDrainage)%dat(1) * fracHRU ! bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) = bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) + fluxStruct%var(iLookFLUX%scalarSoilDrainage)%dat(1) * fracHRU
! increment aquifer variables -- ONLY if aquifer baseflow is computed individually for each HRU and aquifer is run ! ! increment aquifer variables -- ONLY if aquifer baseflow is computed individually for each HRU and aquifer is run
! NOTE: groundwater computed later for singleBasin ! ! NOTE: groundwater computed later for singleBasin
if(model_decisions(iLookDECISIONS%spatial_gw)%iDecision == localColumn .and. model_decisions(iLookDECISIONS%groundwatr)%iDecision == bigBucket) then ! if(model_decisions(iLookDECISIONS%spatial_gw)%iDecision == localColumn .and. model_decisions(iLookDECISIONS%groundwatr)%iDecision == bigBucket) then
bvarStruct%var(iLookBVAR%basin__AquiferRecharge)%dat(1) = bvarStruct%var(iLookBVAR%basin__AquiferRecharge)%dat(1) + fluxStruct%var(iLookFLUX%scalarSoilDrainage)%dat(1) * fracHRU ! bvarStruct%var(iLookBVAR%basin__AquiferRecharge)%dat(1) = bvarStruct%var(iLookBVAR%basin__AquiferRecharge)%dat(1) + fluxStruct%var(iLookFLUX%scalarSoilDrainage)%dat(1) * fracHRU
bvarStruct%var(iLookBVAR%basin__AquiferTranspire)%dat(1) = bvarStruct%var(iLookBVAR%basin__AquiferTranspire)%dat(1) + fluxStruct%var(iLookFLUX%scalarAquiferTranspire)%dat(1) * fracHRU ! bvarStruct%var(iLookBVAR%basin__AquiferTranspire)%dat(1) = bvarStruct%var(iLookBVAR%basin__AquiferTranspire)%dat(1) + fluxStruct%var(iLookFLUX%scalarAquiferTranspire)%dat(1) * fracHRU
bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) = bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) & ! bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) = bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) &
+ fluxStruct%var(iLookFLUX%scalarAquiferBaseflow)%dat(1) * fracHRU ! + fluxStruct%var(iLookFLUX%scalarAquiferBaseflow)%dat(1) * fracHRU
end if ! end if
! perform the routing ! ! perform the routing
associate(totalArea => bvarStruct%var(iLookBVAR%basin__totalArea)%dat(1) ) ! associate(totalArea => bvarStruct%var(iLookBVAR%basin__totalArea)%dat(1) )
! compute water balance for the basin aquifer ! ! compute water balance for the basin aquifer
if(model_decisions(iLookDECISIONS%spatial_gw)%iDecision == singleBasin)then ! if(model_decisions(iLookDECISIONS%spatial_gw)%iDecision == singleBasin)then
message=trim(message)//'multi_driver/bigBucket groundwater code not transferred from old code base yet' ! message=trim(message)//'multi_driver/bigBucket groundwater code not transferred from old code base yet'
err=20; return ! err=20; return
end if ! end if
! calculate total runoff depending on whether aquifer is connected ! ! calculate total runoff depending on whether aquifer is connected
if(model_decisions(iLookDECISIONS%groundwatr)%iDecision == bigBucket) then ! if(model_decisions(iLookDECISIONS%groundwatr)%iDecision == bigBucket) then
! aquifer ! ! aquifer
bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) + bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1)/totalArea + bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1) ! bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) + bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1)/totalArea + bvarStruct%var(iLookBVAR%basin__AquiferBaseflow)%dat(1)
else ! else
! no aquifer ! ! no aquifer
bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) + bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1)/totalArea + bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1) ! bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1) = bvarStruct%var(iLookBVAR%basin__SurfaceRunoff)%dat(1) + bvarStruct%var(iLookBVAR%basin__ColumnOutflow)%dat(1)/totalArea + bvarStruct%var(iLookBVAR%basin__SoilDrainage)%dat(1)
endif ! endif
call qOverland(& ! call qOverland(&
! input ! ! input
model_decisions(iLookDECISIONS%subRouting)%iDecision, & ! intent(in): index for routing method ! model_decisions(iLookDECISIONS%subRouting)%iDecision, & ! intent(in): index for routing method
bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1), & ! intent(in): total runoff to the channel from all active components (m s-1) ! bvarStruct%var(iLookBVAR%basin__TotalRunoff)%dat(1), & ! intent(in): total runoff to the channel from all active components (m s-1)
bvarStruct%var(iLookBVAR%routingFractionFuture)%dat, & ! intent(in): fraction of runoff in future time steps (m s-1) ! bvarStruct%var(iLookBVAR%routingFractionFuture)%dat, & ! intent(in): fraction of runoff in future time steps (m s-1)
bvarStruct%var(iLookBVAR%routingRunoffFuture)%dat, & ! intent(in): runoff in future time steps (m s-1) ! bvarStruct%var(iLookBVAR%routingRunoffFuture)%dat, & ! intent(in): runoff in future time steps (m s-1)
! output ! ! output
bvarStruct%var(iLookBVAR%averageInstantRunoff)%dat(1), & ! intent(out): instantaneous runoff (m s-1) ! bvarStruct%var(iLookBVAR%averageInstantRunoff)%dat(1), & ! intent(out): instantaneous runoff (m s-1)
bvarStruct%var(iLookBVAR%averageRoutedRunoff)%dat(1), & ! intent(out): routed runoff (m s-1) ! bvarStruct%var(iLookBVAR%averageRoutedRunoff)%dat(1), & ! intent(out): routed runoff (m s-1)
err,message) ! intent(out): error control ! err,message) ! intent(out): error control
if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; endif ! if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; endif
end associate ! end associate
end subroutine ! end subroutine
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "global.hpp" #include "global.hpp"
#include "job_actor_subroutine_wrappers.hpp" #include "job_actor_subroutine_wrappers.hpp"
#include "hru_actor.hpp" #include "hru_actor.hpp"
#include "gru_actor.hpp"
using json = nlohmann::json; using json = nlohmann::json;
...@@ -131,7 +132,11 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU, ...@@ -131,7 +132,11 @@ behavior job_actor(stateful_actor<job_state>* self, int startGRU, int numGRU,
[=](done_file_access_actor_init) { [=](done_file_access_actor_init) {
// Init GRU Actors and the Output Structure // Init GRU Actors and the Output Structure
self->send(self, init_hru_v); // self->send(self, init_hru_v);s
auto gru = self->spawn(gru_actor, 1, 1,
self->state.configPath,
self->state.outputStrucSize, self);
self->send(gru, init_gru_v);
}, },
[=](file_access_actor_done, double read_duration, double write_duration) { [=](file_access_actor_done, double read_duration, double write_duration) {
......
Run start time on system: ccyy=2022 - mm=08 - dd=16 - hh=21 - mi=31 - ss=01.667 Run start time on system: ccyy=2022 - mm=08 - dd=17 - hh=22 - mi=42 - ss=53.312
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment