diff --git a/build/includes/job_actor/job_actor_subroutine_wrappers.hpp b/build/includes/job_actor/job_actor_subroutine_wrappers.hpp index 07622122f95a06bd0d06a57628f922ef82c5d1e6..0a0dd1d72c937a707215771a8a4377e06f484d95 100644 --- a/build/includes/job_actor/job_actor_subroutine_wrappers.hpp +++ b/build/includes/job_actor/job_actor_subroutine_wrappers.hpp @@ -1,9 +1,11 @@ #pragma once extern "C" { - void setTimesDirsAndFiles(char const* file_manager, int* err); - - void defineGlobalData(int* start_gru_index, int* err); + void job_init_fortran(char const* file_manager, + int* start_gru_index, + int* num_gru, + int* num_hru, + int* err); void readDimension(int* num_gru, int* num_hru, int* start_gru_index, int* err); diff --git a/build/source/actors/job_actor/job_actor.cpp b/build/source/actors/job_actor/job_actor.cpp index d27497b8b13250143d7ee7fb6f54eca9b72b4b14..504491cc1553d1b0bfbc17c54ca71768be771f2c 100644 --- a/build/source/actors/job_actor/job_actor.cpp +++ b/build/source/actors/job_actor/job_actor.cpp @@ -60,11 +60,12 @@ behavior job_actor(stateful_actor<job_state>* self, // Initalize global variables calling Fortran Routines int err = 0; - setTimesDirsAndFiles(self->state.job_actor_settings.file_manager_path.c_str(), &err); - if (err != 0) { aout(self) << "\nERROR: Job_Actor - setTimesDirsAndFiles\n"; return {}; } - defineGlobalData(&self->state.start_gru, &err); - if (err != 0) { aout(self) << "\nERROR: Job_Actor - defineGlobalData\n"; return {}; } + job_init_fortran(self->state.job_actor_settings.file_manager_path.c_str(), + &self->state.start_gru, + &self->state.num_gru, + &self->state.num_hru, + &err); readDimension(&self->state.num_gru, &self->state.num_hru, &self->state.start_gru, &err); if (err != 0) { aout(self) << "\nERROR: Job_Actor - readDimension\n"; return {}; } diff --git a/build/source/actors/job_actor/job_actor.f90 b/build/source/actors/job_actor/job_actor.f90 index 18f5fb7c0c3756e31888054ef3ba8566e1fb69af..dc0b0cc080a7eaa4c2784cdd5bb3f215a750b0ec 100644 --- a/build/source/actors/job_actor/job_actor.f90 +++ b/build/source/actors/job_actor/job_actor.f90 @@ -1,13 +1,55 @@ module job_actor - USE, intrinsic :: iso_c_binding + USE, intrinsic :: iso_c_binding - implicit none - public::allocateTimeStructure - public::deallocateJobActor + implicit none + public::job_init_fortran + public::allocateTimeStructure + public::deallocateJobActor contains +subroutine job_init_fortran(file_manager, start_gru, num_gru,& + num_hru, err) bind(C, name="job_init_fortran") + USE summaFileManager,only:summa_SetTimesDirsAndFiles ! sets directories and filenames + USE summa_globalData,only:summa_defineGlobalData ! used to define global summa data structures + + USE cppwrap_auxiliary,only:c_f_string ! Convert C String to Fortran String + + ! Variables that were set by getCommandArguments() + USE globalData,only: startGRU ! index of the starting GRU for parallelization run + + + implicit none + + ! dummy variables + character(kind=c_char,len=1),intent(in) :: file_manager + integer(c_int),intent(in) :: start_gru + integer(c_int),intent(in) :: num_gru + integer(c_int),intent(in) :: num_hru + integer(c_int),intent(out) :: err + + ! local variables + character(len=256) :: summaFileManagerIn + character(len=256) :: message + + ! Convert C Variables to Fortran Variables + call c_f_string(file_manager, summaFileManagerIn, 256) + summaFileManagerIn = trim(summaFileManagerIn) + + + ! Set variables that were previosuly set by getCommandArguments() + startGRU=start_gru + + call summa_SetTimesDirsAndFiles(summaFileManagerIn,err,message) + if(err/=0)then; print*, message; return; endif + + call summa_defineGlobalData(err, message) + if(err/=0)then; print*, message; return; endif + +end subroutine job_init_fortran + + subroutine allocateTimeStructure(err) bind(C, name="allocateTimeStructure") USE globalData,only:startTime,finshTime,refTime,oldTime USE allocspace_module,only:allocLocal diff --git a/build/source/driver/summa_globalData.f90 b/build/source/driver/summa_globalData.f90 index efd6b18169b19d2c698843770dc5074a0bd6e894..d3a6f327babc84cf5745a41b6d708fb015fd57b5 100755 --- a/build/source/driver/summa_globalData.f90 +++ b/build/source/driver/summa_globalData.f90 @@ -114,19 +114,11 @@ subroutine summa_defineGlobalData(start_gru_index, err) bind(C, name="defineGlob ! populate metadata for all model variables call popMetadat(err,cmessage) - if(err/=0)then - message=trim(message)//trim(cmessage) - print*, message - return - endif + if(err/=0)then; message=trim(message)//trim(cmessage); print*, message; return ;endif ! define mapping between fluxes and states call flxMapping(err,cmessage) - if(err/=0)then - message=trim(message)//trim(cmessage) - print*, message - return - endif + if(err/=0)then; message=trim(message)//trim(cmessage); print*, message; return ;endif ! check data structures call checkStruc(err,cmessage) @@ -141,11 +133,7 @@ subroutine summa_defineGlobalData(start_gru_index, err) bind(C, name="defineGlob ! create the averageFlux metadata structure call childStruc(flux_meta, flux_mask, averageFlux_meta, childFLUX_MEAN, err, cmessage) - if(err/=0)then - message=trim(message)//trim(cmessage) - print*, message - return - endif + if(err/=0)then; message=trim(message)//trim(cmessage); print*, message; return; endif ! child metadata structures - so that we do not carry full stats structures around everywhere ! only carry stats for variables with output frequency > model time step @@ -167,11 +155,7 @@ subroutine summa_defineGlobalData(start_gru_index, err) bind(C, name="defineGlob case('bvar'); call childStruc(bvar_meta,statBvar_mask,statBvar_meta,bvarChild_map,err,cmessage) end select ! check errors - if(err/=0)then - message=trim(message)//trim(cmessage)//'[statistics for = '//trim(structInfo(iStruct)%structName)//']' - print*, message - return - endif + if(err/=0)then; message=trim(message)//trim(cmessage)//'[statistics for = '//trim(structInfo(iStruct)%structName)//']' ;print*, message ;return ;endif end do ! iStruct ! set all stats metadata to correct var types