From 945ef2eb0ec286ba6398a4ebfdbd6216fb8c53a1 Mon Sep 17 00:00:00 2001 From: KyleKlenk <kyle.c.klenk@gmail.com> Date: Tue, 4 Oct 2022 22:43:08 +0000 Subject: [PATCH] fixed indexing bug that had GRU and HRU swapped --- build/includes/summa_actor/summa_actor.hpp | 4 -- .../source/actors/summa_actor/summa_actor.cpp | 8 +-- build/source/driver/SummaActors_setup.f90 | 4 +- build/source/engine/ffile_info.f90 | 70 ++++++++++++++++--- build/source/engine/read_paramActors.f90 | 8 +-- 5 files changed, 68 insertions(+), 26 deletions(-) diff --git a/build/includes/summa_actor/summa_actor.hpp b/build/includes/summa_actor/summa_actor.hpp index d1a1603..8d26e51 100644 --- a/build/includes/summa_actor/summa_actor.hpp +++ b/build/includes/summa_actor/summa_actor.hpp @@ -30,10 +30,6 @@ struct summa_actor_state { // Information about the jobs int numFailed = 0; // Number of jobs that have failed - // Values Set By Summa_Actors_Settings.json - int maxGRUPerJob; // maximum number of GRUs a job can compute at once - int outputStrucSize; - caf::actor currentJob; // Reference to the current job actor caf::actor parent; diff --git a/build/source/actors/summa_actor/summa_actor.cpp b/build/source/actors/summa_actor/summa_actor.cpp index 9f9d42f..6793392 100644 --- a/build/source/actors/summa_actor/summa_actor.cpp +++ b/build/source/actors/summa_actor/summa_actor.cpp @@ -90,16 +90,16 @@ behavior summa_actor(stateful_actor<summa_actor_state>* self, int startGRU, int void spawnJob(stateful_actor<summa_actor_state>* self) { // Ensure we do not start a job with too many GRUs - if (self->state.numGRU > self->state.maxGRUPerJob) { + if (self->state.numGRU > self->state.summa_actor_settings.max_gru_per_job) { // spawn the job actor aout(self) << "\n Starting Job with startGRU = " << self->state.startGRU << "\n"; - self->state.currentJob = self->spawn(job_actor, self->state.startGRU, self->state.maxGRUPerJob, + self->state.currentJob = self->spawn(job_actor, self->state.startGRU, self->state.summa_actor_settings.max_gru_per_job, self->state.file_access_actor_settings, self->state.job_actor_settings, self->state.hru_actor_settings, self); // Update GRU count - self->state.numGRU = self->state.numGRU - self->state.maxGRUPerJob; - self->state.startGRU = self->state.startGRU + self->state.maxGRUPerJob; + self->state.numGRU = self->state.numGRU - self->state.summa_actor_settings.max_gru_per_job; + self->state.startGRU = self->state.startGRU + self->state.summa_actor_settings.max_gru_per_job; } else { diff --git a/build/source/driver/SummaActors_setup.f90 b/build/source/driver/SummaActors_setup.f90 index c2f860e..62fa12a 100755 --- a/build/source/driver/SummaActors_setup.f90 +++ b/build/source/driver/SummaActors_setup.f90 @@ -66,8 +66,8 @@ contains ! initializes parameter data structures (e.g. vegetation and soil parameters). subroutine setupHRUParam(& - indxHRU, & ! ID of hru - indxGRU, & ! Index of the parent GRU of the HRU + indxGRU, & ! ID of hru + indxHRU, & ! Index of the parent GRU of the HRU ! primary data structures (scalars) handle_attrStruct, & ! local attributes for each HRU handle_typeStruct, & ! local classification of soil veg etc. for each HRU diff --git a/build/source/engine/ffile_info.f90 b/build/source/engine/ffile_info.f90 index 32ff329..e69a482 100755 --- a/build/source/engine/ffile_info.f90 +++ b/build/source/engine/ffile_info.f90 @@ -106,11 +106,20 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message) ! open file call file_open(trim(infile),unt,err,cmessage) - if(err/=0)then; message=trim(message)//trim(cmessage); return; end if + if(err/=0)then + message=trim(message)//trim(cmessage) + print*, message + return + end if ! get a list of character strings from non-comment lines call get_vlines(unt,dataLines,err,cmessage) - if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; end if + if(err/=0)then + err=20 + message=trim(message)//trim(cmessage) + print*, message + return + end if nFile = size(dataLines) ! Get the number of forcing files needed @@ -128,7 +137,12 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message) startTime%var(iLookTIME%imin_tz), & ! time zone minnute dsec_tz, & ! time zone seconds err,cmessage) - if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; end if + if(err/=0)then + err=20 + message=trim(message)//trim(cmessage) + print*, message + return + end if call extractTime(trim(FORCING_START), & ! date-time string forcingStart%var(iLookTIME%iyyy), & ! year forcingStart%var(iLookTIME%im), & ! month @@ -140,7 +154,12 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message) forcingStart%var(iLookTIME%imin_tz), & ! time zone minnute dsec_tz, & ! time zone seconds err,cmessage) - if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; end if + if(err/=0)then + err=20 + message=trim(message)//trim(cmessage) + print*, message + return + end if ! put simulation end time information into the time structures call extractTime(trim(SIM_END_TM), & ! date-time string finishTime%var(iLookTIME%iyyy), & ! year @@ -153,26 +172,51 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message) finishTime%var(iLookTIME%imin_tz), & ! time zone minnute dsec_tz, & ! time zone seconds err,cmessage) ! error control - if(err/=0)then; err=20; message=trim(message)//trim(cmessage); return; end if + if(err/=0)then + err=20 + message=trim(message)//trim(cmessage) + print*, message + return + end if startIndx = (((startTime%var(iLookTIME%iyyy) - forcingStart%var(iLookTIME%iyyy)) * 12) & + startTime%var(iLookTIME%im) - forcingStart%var(iLookTIME%im) + 1) + if (startIndx < 0)then + print*, "Cannot have a startTime before the forcing files start. Check that forcingStart is less than startTime" + err=20 + return + endif totalFiles = (((finishTime%var(iLookTIME%iyyy) - startTime%var(iLookTIME%iyyy)) * 12) & + finishTime%var(iLookTIME%im) - startTime%var(iLookTIME%im) + 1) + if (totalFiles < 0) then + print*, "Cannot have a negative number of forcing files, check end time is greater than starttime" + err=20 + return + endif ! allocate space for forcing information if(allocated(forcFileInfo%ffile_list)) deallocate(forcFileInfo%ffile_list) allocate(forcFileInfo%ffile_list(totalFiles), stat=err) - if(err/=0)then; err=20; message=trim(message)//'problem allocating space for forcFileInfo'; return; end if + if(err/=0)then + err=20 + message=trim(message)//'problem allocating space for forcFileInfo' + print*, message + return + end if ffinfo_index = 1 + ! poputate the forcingInfo structure with filenames do iFile=startIndx,nFile if (ffinfo_index > totalFiles)then; exit; endif; ! split the line into "words" (expect one word: the file describing forcing data for that index) read(dataLines(iFile),*,iostat=err) filenameData - if(err/=0)then; message=trim(message)//'problem reading a line of data from file ['//trim(infile)//']'; return; end if + if(err/=0)then + message=trim(message)//'problem reading a line of data from file ['//trim(infile)//']' + print*, message + return + end if ! set forcing file name attribute forcFileInfo%ffile_list(ffinfo_index)%filenmData = trim(filenameData) ffinfo_index = ffinfo_index + 1 @@ -207,14 +251,20 @@ subroutine ffile_info(indxGRU,forcFileInfo,numFiles,err,message) ! check if file exists inquire(file=trim(infile),exist=xist) if(.not.xist)then - message=trim(message)//"FileNotFound[file='"//trim(infile)//"']" - err=10; return + message=trim(message)//"FileNotFound[file='"//trim(infile)//"']" + print*, message + err=10 + return end if ! open file mode=nf90_NoWrite call nc_file_open(trim(infile), mode, ncid, err, cmessage) - if(err/=0)then; message=trim(message)//trim(cmessage); return; end if + if(err/=0)then + message=trim(message)//trim(cmessage) + print*, message + return + end if ! how many variables are there? err = nf90_inquire(ncid, nvariables=nVar) diff --git a/build/source/engine/read_paramActors.f90 b/build/source/engine/read_paramActors.f90 index 661ffe6..19dbb14 100755 --- a/build/source/engine/read_paramActors.f90 +++ b/build/source/engine/read_paramActors.f90 @@ -68,13 +68,9 @@ subroutine read_param(indxHRU,indxGRU,mparStruct,bparStruct,dparStruct,err) ! Start procedure here err=0; message="read_paramActors.f90/" - ! do iVar=1, size(mpar_meta) - dparStruct%var(:) = outputStructure(1)%dparStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:) - ! end do - ! do iVar=1, size(localParFallback) - ! mparStruct%var(iVar)%dat(:) = dparStruct%var(iVar) - ! end do + dparStruct%var(:) = outputStructure(1)%dparStruct(1)%gru(indxGRU)%hru(indxHRU)%var(:) + ! populate parameter structures do iVar=1, size(mpar_meta) -- GitLab