diff --git a/build/source/file_access_actor/def_output.f90 b/build/def_output.f90 similarity index 100% rename from build/source/file_access_actor/def_output.f90 rename to build/def_output.f90 diff --git a/build/includes/job_actor/node_actor.hpp b/build/includes/job_actor/node_actor.hpp index 6bfa7f7f9c4e16993c5464cb96826d9aaeb7a311..f097cb7a34b48e9d803a2f03fe408e2c0713457a 100644 --- a/build/includes/job_actor/node_actor.hpp +++ b/build/includes/job_actor/node_actor.hpp @@ -18,7 +18,7 @@ struct node_state { TimingInfo node_timing; int start_gru; - int num_gru; + int num_gru_local; caf::actor file_access_actor; // actor reference for the file_access_actor GRU_Container gru_container; diff --git a/build/source/file_access_actor/cppwrap_fileAccess.f90 b/build/source/file_access_actor/cppwrap_fileAccess.f90 index b6aacef607f8ac05eb4dfcf321c4cf6898001ce4..59e5e464b8d09aea8e4c23367e17f88d8317a698 100644 --- a/build/source/file_access_actor/cppwrap_fileAccess.f90 +++ b/build/source/file_access_actor/cppwrap_fileAccess.f90 @@ -50,7 +50,6 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing USE paramCheck_module,only:paramCheck ! module to check consistency of model parameters USE read_icond_module,only:read_icond ! module to read initial conditions USE check_icond_module,only:check_icond ! module to check initial conditions - ! USE def_output_module,only:def_output ! module to define model output USE globalData,only:localParFallback ! local column default parameters USE globalData,only:basinParFallback ! basin-average default parameters USE globalData,only:mpar_meta,bpar_meta ! parameter metadata structures @@ -164,15 +163,16 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing ! *** read Noah vegetation and soil tables ! ***************************************************************************** - greenVegFrac_monthly = (/0.01_dp, 0.02_dp, 0.03_dp, 0.07_dp, 0.50_dp, 0.90_dp, 0.95_dp, 0.96_dp, 0.65_dp, 0.24_dp, 0.11_dp, 0.02_dp/) + greenVegFrac_monthly = (/0.01_dp, 0.02_dp, 0.03_dp, 0.07_dp, 0.50_dp, 0.90_dp,& + 0.95_dp, 0.96_dp, 0.65_dp, 0.24_dp, 0.11_dp, 0.02_dp/) ! read Noah soil and vegetation tables call soil_veg_gen_parm(trim(SETTINGS_PATH)//trim(VEGPARM), & ! filename for vegetation table - trim(SETTINGS_PATH)//trim(SOILPARM), & ! filename for soils table - trim(SETTINGS_PATH)//trim(GENPARM), & ! filename for general table - trim(model_decisions(iLookDECISIONS%vegeParTbl)%cDecision), & ! classification system used for vegetation - trim(model_decisions(iLookDECISIONS%soilCatTbl)%cDecision)) ! classification system used for soils + trim(SETTINGS_PATH)//trim(SOILPARM), & ! filename for soils table + trim(SETTINGS_PATH)//trim(GENPARM), & ! filename for general table + trim(model_decisions(iLookDECISIONS%vegeParTbl)%cDecision), & ! classification system used for vegetation + trim(model_decisions(iLookDECISIONS%soilCatTbl)%cDecision)) ! classification system used for soils if(err/=0)then; print*,trim(message); return; endif ! read Noah-MP vegetation tables @@ -246,7 +246,7 @@ subroutine fileAccessActor_init_fortran(& ! Variables for forcing ! ***************************************************************************** checkHRU = integerMissing call read_param(iRunMode,checkHRU,start_gru,num_hru,num_gru,outputStructure(1)%idStruct,& - outputStructure(1)%mparStruct,outputStructure(1)%bparStruct,err,message) + outputStructure(1)%mparStruct,outputStructure(1)%bparStruct,err,message) if(err/=0)then; print*,trim(message); return; endif ! ***************************************************************************** diff --git a/build/source/file_access_actor/read_force.f90 b/build/source/file_access_actor/read_force.f90 index 5eecbeafc5de3ddfdf74e19f9d56d993dbb1ad6b..15f4f5c0d21117154daa8b42b6d085917af64965 100644 --- a/build/source/file_access_actor/read_force.f90 +++ b/build/source/file_access_actor/read_force.f90 @@ -31,119 +31,117 @@ type(dlength),allocatable,save,public :: vecTime(:) contains subroutine read_forcingFile(handle_forcFileInfo, iFile, stepsInFile, startGRU, numGRU, err) bind(C,name="read_forcingFile") - USE netcdf ! netcdf capability - USE netcdf_util_module,only:nc_file_open ! open netcdf file - implicit none - type(c_ptr), intent(in), value :: handle_forcFileInfo - integer(c_int),intent(in) :: iFile - integer(c_int),intent(inout) :: stepsInFile - integer(c_int),intent(in) :: startGRU - integer(c_int),intent(in) :: numGRU - integer(c_int),intent(inout) :: err - ! local varibles - type(file_info_array), pointer :: forcFileInfo - integer(i4b) :: iHRU_Global - integer(i4b) :: varId - integer(i4b) :: ncid - integer(i4b) :: nFiles - integer(i4b) :: nTimeSteps - integer(i4b) :: numHRU - integer(i4b) :: nVars - integer(i4b) :: iVar - integer(i4b) :: iNC - integer(i4b) :: attLen ! attribute length - character(len=256) :: infile - character(len=256) :: cmessage - character(len = nf90_max_name) :: varName ! dimenison name - logical(lgt),dimension(size(forc_meta)) :: checkForce ! flags to check forcing data variables exist - character(len=256) :: message ! error message - - call c_f_pointer(handle_forcFileInfo, forcFileInfo) + USE netcdf ! netcdf capability + USE netcdf_util_module,only:nc_file_open ! open netcdf file + implicit none + type(c_ptr), intent(in), value :: handle_forcFileInfo + integer(c_int),intent(in) :: iFile + integer(c_int),intent(inout) :: stepsInFile + integer(c_int),intent(in) :: startGRU + integer(c_int),intent(in) :: numGRU + integer(c_int),intent(inout) :: err + ! local varibles + type(file_info_array), pointer :: forcFileInfo + integer(i4b) :: iHRU_Global + integer(i4b) :: varId + integer(i4b) :: ncid + integer(i4b) :: nFiles + integer(i4b) :: nTimeSteps + integer(i4b) :: numHRU + integer(i4b) :: nVars + integer(i4b) :: iVar + integer(i4b) :: iNC + integer(i4b) :: attLen ! attribute length + character(len=256) :: infile + character(len=256) :: cmessage + character(len = nf90_max_name) :: varName ! dimenison name + logical(lgt),dimension(size(forc_meta)) :: checkForce ! flags to check forcing data variables exist + character(len=256) :: message ! error message + + call c_f_pointer(handle_forcFileInfo, forcFileInfo) + + ! Start Procedure here + err=0; message="read_force.f90 - read_forcingFile/" + + nFiles=size(forcFileInfo%ffile_list(:)) + + nTimeSteps = sum(forcFileInfo%ffile_list(:)%nTimeSteps) + + ! Allocate forcing data input Struct + if (.not.allocated(forcingDataStruct))then + allocate(forcingDataStruct(nFiles)) + ! Allocate timing variables from forcing File + allocate(vecTime(nFiles)) + endif + + ! Files are assumed to be in the correct order + infile=trim(FORCING_PATH)//trim(forcFileInfo%ffile_list(iFile)%filenmData) + ! open netCDF file + call openForcingFile(forcFileInfo%ffile_list,iFile,trim(infile),ncid,err,cmessage) + if(err/=0)then; message=trim(message)//trim(cmessage);return; end if + + err = nf90_inq_varid(ncid,'time',varId); if(err/=nf90_noerr)then; message=trim(message)//'cannot find time variable/'//trim(nf90_strerror(err)); return; endif + err = nf90_inquire_attribute(ncid,varId,'units',len = attLen); if(err/=nf90_noerr)then; message=trim(message)//'cannot find time units/'//trim(nf90_strerror(err)); return; endif + err = nf90_get_att(ncid,varid,'units',forcingDataStruct(iFile)%refTimeString);if(err/=nf90_noerr)then; message=trim(message)//'cannot read time units/'//trim(nf90_strerror(err)); return; endif + + + nTimeSteps = forcFileInfo%ffile_list(iFile)%nTimeSteps + forcingDataStruct(iFile)%nTimeSteps = nTimeSteps + stepsInFile = nTimeSteps + if(.not.allocated(vecTime(iFile)%dat))then + allocate(vecTime(iFile)%dat(nTimeSteps)) + end if + + ! Get Time Information + err = nf90_inq_varid(ncid,'time',varId); + if(err/=nf90_noerr)then; message=trim(message)//'trouble finding time variable/'//trim(nf90_strerror(err)); return; endif + err = nf90_get_var(ncid,varId,vecTime(iFile)%dat(:),start=(/1/),count=(/nTimeSteps/)) + if(err/=nf90_noerr)then; message=trim(message)//'trouble reading time variable/'//trim(nf90_strerror(err)); return; endif + + ! Need to loop through vars and add forcing data + nVars = forcFileInfo%ffile_list(iFile)%nVars + forcingDataStruct(iFile)%nVars = nVars + if (.not.allocated(forcingDataStruct(iFile)%var))then + allocate(forcingDataStruct(iFile)%var(nVars)) + endif + if (.not.allocated(forcingDataStruct(iFile)%var_ix))then + allocate(forcingDataStruct(iFile)%var_ix(nVars)) + endif + forcingDataStruct(iFile)%var_ix(:) = integerMissing + + ! initialize flags for forcing data + checkForce(:) = .false. + checkForce(iLookFORCE%time) = .true. ! time is handled separately + do iNC=1,nVars + ! populate var_ix so HRUs can access the values + forcingDataStruct(iFile)%var_ix(iNC) = forcFileInfo%ffile_list(iFile)%var_ix(iNC) + + ! check variable is desired + if(forcFileInfo%ffile_list(iFile)%var_ix(iNC)==integerMissing) cycle + + + iVar = forcFileInfo%ffile_list(iFile)%var_ix(iNC) + checkForce(iVar) = .true. + if (.not.allocated(forcingDataStruct(iFile)%var(iVar)%dataFromFile))then + allocate(forcingDataStruct(iFile)%var(iVar)%dataFromFile(numGRU,nTimeSteps)) + endif - ! Start Procedure here - err=0; message="read_force.f90 - read_forcingFile/" - - nFiles=size(forcFileInfo%ffile_list(:)) + ! Get Forcing Data + ! get variable name for error reporting + err=nf90_inquire_variable(ncid,iNC,name=varName) + if(err/=nf90_noerr)then; message=trim(message)//'problem reading forcing variable name from netCDF: '//trim(nf90_strerror(err)); return; endif + + ! define global HRU + iHRU_global = gru_struc(1)%hruInfo(1)%hru_nc + numHRU = sum(gru_struc(:)%hruCount) - nTimeSteps = sum(forcFileInfo%ffile_list(:)%nTimeSteps) - ! Allocate forcing data input Struct - if (.not.allocated(forcingDataStruct))then - allocate(forcingDataStruct(nFiles)) - ! Allocate timing variables from forcing File - allocate(vecTime(nFiles)) - endif - - ! Files are assumed to be in the correct order - infile=trim(FORCING_PATH)//trim(forcFileInfo%ffile_list(iFile)%filenmData) - ! open netCDF file - call openForcingFile(forcFileInfo%ffile_list,iFile,trim(infile),ncid,err,cmessage) - if(err/=0)then; message=trim(message)//trim(cmessage);return; end if - - err = nf90_inq_varid(ncid,'time',varId); if(err/=nf90_noerr)then; message=trim(message)//'cannot find time variable/'//trim(nf90_strerror(err)); return; endif - err = nf90_inquire_attribute(ncid,varId,'units',len = attLen); if(err/=nf90_noerr)then; message=trim(message)//'cannot find time units/'//trim(nf90_strerror(err)); return; endif - err = nf90_get_att(ncid,varid,'units',forcingDataStruct(iFile)%refTimeString);if(err/=nf90_noerr)then; message=trim(message)//'cannot read time units/'//trim(nf90_strerror(err)); return; endif - - - nTimeSteps = forcFileInfo%ffile_list(iFile)%nTimeSteps - forcingDataStruct(iFile)%nTimeSteps = nTimeSteps - stepsInFile = nTimeSteps - if(.not.allocated(vecTime(iFile)%dat))then - allocate(vecTime(iFile)%dat(nTimeSteps)) - end if - - ! Get Time Information - err = nf90_inq_varid(ncid,'time',varId); - if(err/=nf90_noerr)then; message=trim(message)//'trouble finding time variable/'//trim(nf90_strerror(err)); return; endif - err = nf90_get_var(ncid,varId,vecTime(iFile)%dat(:),start=(/1/),count=(/nTimeSteps/)) - if(err/=nf90_noerr)then; message=trim(message)//'trouble reading time variable/'//trim(nf90_strerror(err)); return; endif - - ! Need to loop through vars and add forcing data - nVars = forcFileInfo%ffile_list(iFile)%nVars - forcingDataStruct(iFile)%nVars = nVars - if (.not.allocated(forcingDataStruct(iFile)%var))then - allocate(forcingDataStruct(iFile)%var(nVars)) - endif - if (.not.allocated(forcingDataStruct(iFile)%var_ix))then - allocate(forcingDataStruct(iFile)%var_ix(nVars)) - endif - forcingDataStruct(iFile)%var_ix(:) = integerMissing - - ! initialize flags for forcing data - checkForce(:) = .false. - checkForce(iLookFORCE%time) = .true. ! time is handled separately - do iNC=1,nVars - ! populate var_ix so HRUs can access the values - forcingDataStruct(iFile)%var_ix(iNC) = forcFileInfo%ffile_list(iFile)%var_ix(iNC) - - ! check variable is desired - if(forcFileInfo%ffile_list(iFile)%var_ix(iNC)==integerMissing) cycle - - - iVar = forcFileInfo%ffile_list(iFile)%var_ix(iNC) - checkForce(iVar) = .true. - if (.not.allocated(forcingDataStruct(iFile)%var(iVar)%dataFromFile))then - allocate(forcingDataStruct(iFile)%var(iVar)%dataFromFile(numGRU,nTimeSteps)) - endif - - ! Get Forcing Data - ! get variable name for error reporting - err=nf90_inquire_variable(ncid,iNC,name=varName) - if(err/=nf90_noerr)then; message=trim(message)//'problem reading forcing variable name from netCDF: '//trim(nf90_strerror(err)); return; endif - - ! define global HRU - iHRU_global = gru_struc(1)%hruInfo(1)%hru_nc - numHRU = sum(gru_struc(:)%hruCount) - - - err=nf90_get_var(ncid,forcFileInfo%ffile_list(iFile)%data_id(ivar),forcingDataStruct(iFile)%var(iVar)%dataFromFile, start=(/startGRU,1/),count=(/numHRU, nTimeSteps/)) - if(err/=nf90_noerr)then; message=trim(message)//'problem reading forcing data: '//trim(varName)//'/'//trim(nf90_strerror(err)); return; endif - - - end do - - call nc_file_close(ncid,err,message) - if(err/=0)then;message=trim(message)//trim(cmessage);return;end if + err=nf90_get_var(ncid,forcFileInfo%ffile_list(iFile)%data_id(ivar),forcingDataStruct(iFile)%var(iVar)%dataFromFile, start=(/startGRU,1/),count=(/numHRU, nTimeSteps/)) + if(err/=nf90_noerr)then; message=trim(message)//'problem reading forcing data: '//trim(varName)//'/'//trim(nf90_strerror(err)); return; endif + end do + + call nc_file_close(ncid,err,message) + if(err/=0)then;message=trim(message)//trim(cmessage);return;end if end subroutine read_forcingFile @@ -152,84 +150,84 @@ end subroutine read_forcingFile ! * open the NetCDF forcing file and get the time information ! ************************************************************************* subroutine openForcingFile(forcFileInfo,iFile,infile,ncId,err,message) - USE netcdf ! netcdf capability - USE netcdf_util_module,only:nc_file_open ! open netcdf file - USE time_utils_module,only:fracDay ! compute fractional day - USE time_utils_module,only:extractTime ! extract time info from units string - USE time_utils_module,only:compJulDay ! convert calendar date to julian day - !USE globalData,only:tmZoneOffsetFracDay ! time zone offset in fractional days - USE globalData,only:ncTime ! time zone information from NetCDF file (timeOffset = longitude/15. - ncTimeOffset) - USE globalData,only:utcTime ! all times in UTC (timeOffset = longitude/15. hours) - USE globalData,only:localTime ! all times local (timeOffset = 0) - USE globalData,only:refJulDay_data - USE summafilemanager,only:NC_TIME_ZONE - ! dummy variables - type(file_info),intent(inout) :: forcFileInfo(:) - integer(i4b),intent(in) :: iFile ! index of current forcing file in forcing file list - character(*) ,intent(in) :: infile ! input file - integer(i4b) ,intent(out) :: ncId ! NetCDF ID - integer(i4b) ,intent(out) :: err ! error code - character(*) ,intent(out) :: message ! error message - ! local variables - character(len=256) :: cmessage ! error message for downwind routine - integer(i4b) :: iyyy,im,id,ih,imin ! date - integer(i4b) :: ih_tz,imin_tz ! time zone information - real(dp) :: dsec,dsec_tz ! seconds - integer(i4b) :: varId ! variable identifier - integer(i4b) :: mode ! netcdf file mode - integer(i4b) :: attLen ! attribute length - character(len=256) :: refTimeString ! reference time string - - ! initialize error control - err=0; message='openForcingFile/' - - ! 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 - - ! get definition of time data - err = nf90_inq_varid(ncid,'time',varId); if(err/=nf90_noerr)then; message=trim(message)//'cannot find time variable/'//trim(nf90_strerror(err)); return; endif - err = nf90_inquire_attribute(ncid,varId,'units',len = attLen); if(err/=nf90_noerr)then; message=trim(message)//'cannot find time units/'//trim(nf90_strerror(err)); return; endif - err = nf90_get_att(ncid,varid,'units',refTimeString); if(err/=nf90_noerr)then; message=trim(message)//'cannot read time units/'//trim(nf90_strerror(err)); return; endif - - ! define the reference time for the model simulation - call extractTime(refTimeString, & ! input = units string for time data - iyyy,im,id,ih,imin,dsec, & ! output = year, month, day, hour, minute, second - ih_tz, imin_tz, dsec_tz, & ! output = time zone information (hour, minute, second) - err,cmessage) ! output = error code and error message - if(err/=0)then; message=trim(message)//trim(cmessage); return; end if + USE netcdf ! netcdf capability + USE netcdf_util_module,only:nc_file_open ! open netcdf file + USE time_utils_module,only:fracDay ! compute fractional day + USE time_utils_module,only:extractTime ! extract time info from units string + USE time_utils_module,only:compJulDay ! convert calendar date to julian day + !USE globalData,only:tmZoneOffsetFracDay ! time zone offset in fractional days + USE globalData,only:ncTime ! time zone information from NetCDF file (timeOffset = longitude/15. - ncTimeOffset) + USE globalData,only:utcTime ! all times in UTC (timeOffset = longitude/15. hours) + USE globalData,only:localTime ! all times local (timeOffset = 0) + USE globalData,only:refJulDay_data + USE summafilemanager,only:NC_TIME_ZONE + ! dummy variables + type(file_info),intent(inout) :: forcFileInfo(:) + integer(i4b),intent(in) :: iFile ! index of current forcing file in forcing file list + character(*) ,intent(in) :: infile ! input file + integer(i4b) ,intent(out) :: ncId ! NetCDF ID + integer(i4b) ,intent(out) :: err ! error code + character(*) ,intent(out) :: message ! error message + ! local variables + character(len=256) :: cmessage ! error message for downwind routine + integer(i4b) :: iyyy,im,id,ih,imin ! date + integer(i4b) :: ih_tz,imin_tz ! time zone information + real(dp) :: dsec,dsec_tz ! seconds + integer(i4b) :: varId ! variable identifier + integer(i4b) :: mode ! netcdf file mode + integer(i4b) :: attLen ! attribute length + character(len=256) :: refTimeString ! reference time string - select case(trim(NC_TIME_ZONE)) - case('ncTime'); forcingDataStruct(iFile)%tmZoneOffsetFracDay = sign(1, ih_tz) * fracDay(ih_tz, & ! time zone hour - imin_tz, & ! time zone minute - dsec_tz) ! time zone second - case('utcTime'); forcingDataStruct(iFile)%tmZoneOffsetFracDay = 0._dp - case('localTime'); forcingDataStruct(iFile)%tmZoneOffsetFracDay = 0._dp - case default; err=20; message=trim(message)//'unable to identify time zone info option'; return - end select ! (option time zone option) + ! initialize error control + err=0; message='openForcingFile/' + + ! 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 + + ! get definition of time data + err = nf90_inq_varid(ncid,'time',varId); if(err/=nf90_noerr)then; message=trim(message)//'cannot find time variable/'//trim(nf90_strerror(err)); return; endif + err = nf90_inquire_attribute(ncid,varId,'units',len = attLen); if(err/=nf90_noerr)then; message=trim(message)//'cannot find time units/'//trim(nf90_strerror(err)); return; endif + err = nf90_get_att(ncid,varid,'units',refTimeString); if(err/=nf90_noerr)then; message=trim(message)//'cannot read time units/'//trim(nf90_strerror(err)); return; endif + + ! define the reference time for the model simulation + call extractTime(refTimeString, & ! input = units string for time data + iyyy,im,id,ih,imin,dsec, & ! output = year, month, day, hour, minute, second + ih_tz, imin_tz, dsec_tz, & ! output = time zone information (hour, minute, second) + err,cmessage) ! output = error code and error message + if(err/=0)then; message=trim(message)//trim(cmessage); return; end if - call compjulday(iyyy,im,id,ih,imin,dsec, & ! output = year, month, day, hour, minute, second - refJulDay_data,err,cmessage) ! output = julian day (fraction of day) + error control - if(err/=0)then; message=trim(message)//trim(cmessage); return; end if + select case(trim(NC_TIME_ZONE)) + case('ncTime'); forcingDataStruct(iFile)%tmZoneOffsetFracDay = sign(1, ih_tz) * fracDay(ih_tz, & ! time zone hour + imin_tz, & ! time zone minute + dsec_tz) ! time zone second + case('utcTime'); forcingDataStruct(iFile)%tmZoneOffsetFracDay = 0._dp + case('localTime'); forcingDataStruct(iFile)%tmZoneOffsetFracDay = 0._dp + case default; err=20; message=trim(message)//'unable to identify time zone info option'; return + end select ! (option time zone option) - ! get the time multiplier needed to convert time to units of days - select case( trim( refTimeString(1:index(refTimeString,' ')) ) ) - case('seconds') - forcFileInfo(iFile)%convTime2Days=86400._dp - forcingDataStruct(iFile)%convTime2Days=86400._dp - case('minutes') - forcFileInfo(iFile)%convTime2Days=1440._dp - forcingDataStruct(iFile)%convTime2Days=1440._dp - case('hours') - forcFileInfo(iFile)%convTime2Days=24._dp - forcingDataStruct(iFile)%convTime2Days=24._dp - case('days') - forcFileInfo(iFile)%convTime2Days=1._dp - forcingDataStruct(iFile)%convTime2Days=1._dp - case default; message=trim(message)//'unable to identify time units'; err=20; return - end select + call compjulday(iyyy,im,id,ih,imin,dsec, & ! output = year, month, day, hour, minute, second + refJulDay_data,err,cmessage) ! output = julian day (fraction of day) + error control + if(err/=0)then; message=trim(message)//trim(cmessage); return; end if + + ! get the time multiplier needed to convert time to units of days + select case( trim( refTimeString(1:index(refTimeString,' ')) ) ) + case('seconds') + forcFileInfo(iFile)%convTime2Days=86400._dp + forcingDataStruct(iFile)%convTime2Days=86400._dp + case('minutes') + forcFileInfo(iFile)%convTime2Days=1440._dp + forcingDataStruct(iFile)%convTime2Days=1440._dp + case('hours') + forcFileInfo(iFile)%convTime2Days=24._dp + forcingDataStruct(iFile)%convTime2Days=24._dp + case('days') + forcFileInfo(iFile)%convTime2Days=1._dp + forcingDataStruct(iFile)%convTime2Days=1._dp + case default; message=trim(message)//'unable to identify time units'; err=20; return + end select - end subroutine openForcingFile + end subroutine openForcingFile end module access_forcing_module \ No newline at end of file diff --git a/build/source/job_actor/node_actor.cpp b/build/source/job_actor/node_actor.cpp index 0cec05cc5111e9a95ab5fdf2a6f241bb95f508e8..39960ccab2ad726dbdf79f09d115cba106239cc8 100644 --- a/build/source/job_actor/node_actor.cpp +++ b/build/source/job_actor/node_actor.cpp @@ -50,19 +50,19 @@ behavior node_actor(stateful_actor<node_state>* self, return { - [=](start_job, int start_gru, int num_gru) { + [=](start_job, int start_gru, int num_gru_local) { aout(self) << "Recieved Start Job Message\n"; aout(self) << "Start GRU: " << start_gru << " Num GRU: " - << num_gru << "\n"; + << num_gru_local << "\n"; self->state.start_gru = start_gru; - self->state.num_gru = num_gru; - self->state.gru_container.num_gru_in_run_domain = num_gru; + self->state.num_gru_local = num_gru_local; + self->state.gru_container.num_gru_in_run_domain = num_gru_local; int err, file_gru; job_init_fortran(self->state.job_actor_settings.file_manager_path.c_str(), - &self->state.start_gru, &self->state.num_gru, &self->state.num_gru, - &file_gru, &err); + &self->state.start_gru, &self->state.num_gru_local, + &self->state.num_gru_local, &file_gru, &err); if (err != 0) { aout(self) << "\nERROR: Job_Actor - job_init_fortran\n"; self->quit(); @@ -70,7 +70,7 @@ behavior node_actor(stateful_actor<node_state>* self, } // Spawn the file_access_actor. self->state.file_access_actor = self->spawn(file_access_actor, - self->state.start_gru, self->state.num_gru, + self->state.start_gru, self->state.num_gru_local, self->state.file_access_actor_settings, self); self->send(self->state.file_access_actor, def_output_v, file_gru); }, @@ -138,7 +138,7 @@ behavior node_actor(stateful_actor<node_state>* self, [=](write_output, int steps_to_write) { self->request(self->state.file_access_actor, infinite, write_output_v, - steps_to_write, 1, self->state.num_gru).await( + steps_to_write, 1, self->state.num_gru_local).await( [=](int err) { if (err != 0) { aout(self) << "Error Writing Output\n";