From ac951823cefa87ff6dbd07a85e411d4d6090202e Mon Sep 17 00:00:00 2001 From: Kyle Klenk <kyle.c.klenk@gmail.com> Date: Thu, 25 Apr 2024 22:54:57 +0000 Subject: [PATCH] This code produces the same results as normal sundials --- .../file_access_actor/file_access_actor.cpp | 22 ++++++++++++------- .../file_access_actor/summa_init_struc.cpp | 4 ++++ .../file_access_actor/summa_init_struc.f90 | 9 ++++++++ 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/build/source/file_access_actor/file_access_actor.cpp b/build/source/file_access_actor/file_access_actor.cpp index 68bb009..fa55c48 100644 --- a/build/source/file_access_actor/file_access_actor.cpp +++ b/build/source/file_access_actor/file_access_actor.cpp @@ -40,18 +40,24 @@ behavior file_access_actor(stateful_actor<file_access_state>* self, self->state.summa_init_struc = std::make_unique<SummaInitStruc>(); - int err = self->state.summa_init_struc->allocate(self->state.num_gru); - if (err != 0) aout(self) << "ERROR: SummaInitStruc allocation failed\n"; - err = self->state.summa_init_struc->summa_paramSetup(); - if (err != 0) aout(self) << "ERROR: SummaInitStruc paramSetup failed\n"; - err = self->state.summa_init_struc->summa_readRestart(); - if (err != 0) aout(self) << "ERROR: SummaInitStruc readRestart failed\n"; + if (self->state.summa_init_struc->allocate(self->state.num_gru) != 0) { + aout(self) << "ERROR -- File_Access_Actor: SummaInitStruc allocation failed\n"; + return -1; + } + if (self->state.summa_init_struc->summa_paramSetup() != 0) { + aout(self) << "ERROR -- File_Access_Actor: SummaInitStruc paramSetup failed\n"; + return -1; + } + if (self->state.summa_init_struc->summa_readRestart()!= 0) { + aout(self) << "ERROR -- File_Access_Actor: SummaInitStruc readRestart failed\n"; + return -1; + } // Get the information about the forcing files self->state.forcing_files = std::make_unique<forcingFileContainer>(); - err = self->state.forcing_files->initForcingFiles(); - if (err != 0) return -1; + if (self->state.forcing_files->initForcingFiles() != 0) return -1; + int err = 0; std::unique_ptr<char[]> message(new char[256]); fileAccessActor_init_fortran(&self->state.num_steps, &fa_settings.num_timesteps_in_output_buffer, diff --git a/build/source/file_access_actor/summa_init_struc.cpp b/build/source/file_access_actor/summa_init_struc.cpp index b34b06f..03d27b1 100644 --- a/build/source/file_access_actor/summa_init_struc.cpp +++ b/build/source/file_access_actor/summa_init_struc.cpp @@ -1,5 +1,6 @@ #include "summa_init_struc.hpp" #include <memory> +#include <iostream> SummaInitStruc::SummaInitStruc() {} @@ -11,6 +12,7 @@ int SummaInitStruc::allocate(int num_gru) { int err = 0; std::unique_ptr<char[]> message(new char[256]); initialize_init_struc(num_gru, err, &message); + if (err != 0) std::cout << message.get() << std::endl; return err; } @@ -18,6 +20,7 @@ int SummaInitStruc::summa_paramSetup() { int err = 0; std::unique_ptr<char[]> message(new char[256]); paramSetup_fortran(err, &message); + if (err != 0) std::cout << message.get() << std::endl; return err; } @@ -25,6 +28,7 @@ int SummaInitStruc::summa_readRestart() { int err = 0; std::unique_ptr<char[]> message(new char[256]); readRestart_fortran(err, &message); + if (err != 0) std::cout << message.get() << std::endl; return err; } diff --git a/build/source/file_access_actor/summa_init_struc.f90 b/build/source/file_access_actor/summa_init_struc.f90 index a16bdc1..8291ccb 100644 --- a/build/source/file_access_actor/summa_init_struc.f90 +++ b/build/source/file_access_actor/summa_init_struc.f90 @@ -25,6 +25,9 @@ subroutine initialize_init_struc(num_gru, err, message_r) bind(C, name="initiali indx_meta, & bpar_meta, & bvar_meta +#ifdef V4_ACTIVE + USE globalData,only:lookup_meta +#endif ! statistics metadata structures USE globalData,only:statForc_meta, & ! child metadata for stats statProg_meta, & ! child metadata for stats @@ -49,6 +52,9 @@ subroutine initialize_init_struc(num_gru, err, message_r) bind(C, name="initiali call f_c_string_ptr(trim(message), message_r) allocate(init_struc) summaVars: associate(& +#ifdef V4_ACTIVE + lookupStruct =>init_struc%lookupStruct , & ! x%gru(:)%hru(:)%z(:)%var(:)%lookup(:) -- lookup tables +#endif ! statistics structures forcStat => init_struc%forcStat , & ! x%gru(:)%hru(:)%var(:)%dat -- model forcing data progStat => init_struc%progStat , & ! x%gru(:)%hru(:)%var(:)%dat -- model prognostic (state) variables @@ -105,6 +111,9 @@ subroutine initialize_init_struc(num_gru, err, message_r) bind(C, name="initiali case('flux'); call allocGlobal(flux_meta, fluxStruct, err, cmessage) ! model fluxes case('bpar'); call allocGlobal(bpar_meta, bparStruct, err, cmessage) ! basin-average parameters case('bvar'); call allocGlobal(bvar_meta, bvarStruct, err, cmessage) ! basin-average variables +#ifdef V4_ACTIVE + case('lookup'); call allocGlobal(lookup_meta, lookupStruct, err, cmessage) ! lookup tables +#endif case('deriv'); cycle case default; err=20; message='unable to find structure name: '//trim(structInfo(iStruct)%structName) end select -- GitLab