diff --git a/build/includes/summa_actor/summa_actor.hpp b/build/includes/summa_actor/summa_actor.hpp index d1a160356eb4ae6c0d3a01cc1d1e5eb9e0e6c243..8d26e51750421c1e25ecd89b1eaac9095980344a 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 9f9d42fcfd13f6d98acc41bde6899f8d57878cf6..679339251fcb8948242bb1794d59040028acb3ac 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 c2f860ee9bd07c6d3746c6d7aac7a00481034afb..62fa12a1814b07c5716bb9e4f83c8664740e52ec 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 32ff3292667bf16f4cefa4a6e391c603b96aacf2..e69a4823cac340791388e70e303197496f547d91 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 661ffe63d577a98c83ac7a03b138d5dcb9a1723e..19dbb1462320057e12cdf8f27b3cca23b25f675a 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)