Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • gwu479/Summa-Actors
  • numerical_simulations_lab/actors/Summa-Actors
2 results
Show changes
Showing
with 3603 additions and 1368 deletions
#!/bin/bash
#### load modules if using Compute Canada or Copernicus ####
module load gcc/9.3.0
module load netcdf-fortran
module load openblas
module load caf
export LD_LIBRARY_PATH=/globalhome/kck540/HPC/SummaProjects/Summa-Actors/bin
\ No newline at end of file
#!/bin/bash
cd /Summa-Actors/build
# make -f /Summa-Actors/build/makefile-container all
export LD_LIBRARY_PATH=/Summa-Actors/bin
cd /Summa-Actors/bin
./summaMain -c /gladwell/kck540/Summa-Distributed/herschel/
\ No newline at end of file
module summaActors_deallocateOuptutStruct
USE nrtype
implicit none
public::deallocateOutputStruc
contains
subroutine deallocateOutputStruc(err)
USE globalData,only:outputStructure
implicit none
integer(i4b), intent(inout) :: err
err = 0
! Time
call deallocateData_output(outputStructure(1)%timeStruct(1)); deallocate(outputStructure(1)%timeStruct)
! Forc
call deallocateData_output(outputStructure(1)%forcStat(1)); deallocate(outputStructure(1)%forcStat)
call deallocateData_output(outputStructure(1)%forcStruct(1)); deallocate(outputStructure(1)%forcStruct)
! prog
call deallocateData_output(outputStructure(1)%progStat(1)); deallocate(outputStructure(1)%progStat)
call deallocateData_output(outputStructure(1)%progStruct(1)); deallocate(outputStructure(1)%progStruct)
! diag
call deallocateData_output(outputStructure(1)%diagStat(1)); deallocate(outputStructure(1)%diagStat)
call deallocateData_output(outputStructure(1)%diagStruct(1)); deallocate(outputStructure(1)%diagStruct)
! flux
call deallocateData_output(outputStructure(1)%fluxStat(1)); deallocate(outputStructure(1)%fluxStat)
call deallocateData_output(outputStructure(1)%fluxStruct(1)); deallocate(outputStructure(1)%fluxStruct)
! indx
call deallocateData_output(outputStructure(1)%indxStat(1)); deallocate(outputStructure(1)%indxStat)
call deallocateData_output(outputStructure(1)%indxStruct(1)); deallocate(outputStructure(1)%indxStruct)
! bvar
call deallocateData_output(outputStructure(1)%bvarStat(1)); deallocate(outputStructure(1)%bvarStat)
call deallocateData_output(outputStructure(1)%bvarStruct(1)); deallocate(outputStructure(1)%bvarStruct)
! id
call deallocateData_output(outputStructure(1)%idStruct(1)); deallocate(outputStructure(1)%idStruct)
! attr
call deallocateData_output(outputStructure(1)%attrStruct(1)); deallocate(outputStructure(1)%attrStruct)
! type
call deallocateData_output(outputStructure(1)%typeStruct(1)); deallocate(outputStructure(1)%typeStruct)
! mpar
call deallocateData_output(outputStructure(1)%mparStruct(1)); deallocate(outputStructure(1)%mparStruct)
! bpar
call deallocateData_output(outputStructure(1)%bparStruct(1)); deallocate(outputStructure(1)%bparStruct)
! finalize stats
call deallocateData_output(outputStructure(1)%finalizeStats(1)); deallocate(outputStructure(1)%finalizeStats)
end subroutine deallocateOutputStruc
subroutine deallocateData_output(dataStruct)
USE data_types,only:gru_hru_time_doubleVec, &
gru_hru_time_intVec, &
gru_hru_time_flagVec, &
gru_hru_time_int, &
gru_hru_int, &
gru_hru_time_int8, &
gru_hru_time_double, &
gru_hru_double, &
gru_double
implicit none
class(*),intent(inout) :: dataStruct
! local variables
integer(i4b) :: iGRU
integer(i4b) :: iHRU
integer(i4b) :: iVar
integer(i4b) :: iTim
select type(dataStruct)
class is (gru_hru_time_doubleVec)
do iGRU = 1, size(dataStruct%gru(:))
do iHRU = 1, size(dataStruct%gru(iGRU)%hru(:))
do iVar = 1, size(dataStruct%gru(iGRU)%hru(iHRU)%var(:))
do iTim = 1, size(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim(:))
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim(iTim)%dat)
end do ! Time
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim)
end do ! var
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var)
end do ! hru
deallocate(dataStruct%gru(iGRU)%hru)
end do ! gru
deallocate(dataStruct%gru)
class is (gru_hru_time_intVec)
do iGRU = 1, size(dataStruct%gru(:))
do iHRU = 1, size(dataStruct%gru(iGRU)%hru(:))
do iVar = 1, size(dataStruct%gru(iGRU)%hru(iHRU)%var(:))
do iTim = 1, size(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim(:))
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim(iTim)%dat)
end do ! Time
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim)
end do ! var
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var)
end do ! hru
deallocate(dataStruct%gru(iGRU)%hru)
end do ! gru
deallocate(dataStruct%gru)
class is (gru_hru_time_flagVec)
do iGRU = 1, size(dataStruct%gru(:))
do iHRU = 1, size(dataStruct%gru(iGRU)%hru(:))
do iTim = 1, size(dataStruct%gru(iGRU)%hru(iHRU)%tim(:))
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%tim(iTim)%dat)
end do ! Time
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%tim)
end do ! hru
deallocate(dataStruct%gru(iGRU)%hru)
end do ! gru
deallocate(dataStruct%gru)
class is (gru_hru_time_int)
do iGRU = 1, size(dataStruct%gru(:))
do iHRU = 1, size(dataStruct%gru(iGRU)%hru(:))
do iVar = 1, size(dataStruct%gru(iGRU)%hru(iHRU)%var(:))
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim)
end do ! var
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var)
end do ! hru
deallocate(dataStruct%gru(iGRU)%hru)
end do ! gru
deallocate(dataStruct%gru)
class is (gru_hru_int)
do iGRU = 1, size(dataStruct%gru(:))
do iHRU = 1, size(dataStruct%gru(iGRU)%hru(:))
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var)
end do ! hru
deallocate(dataStruct%gru(iGRU)%hru)
end do ! gru
deallocate(dataStruct%gru)
class is (gru_hru_time_int8)
do iGRU = 1, size(dataStruct%gru(:))
do iHRU = 1, size(dataStruct%gru(iGRU)%hru(:))
do iVar = 1, size(dataStruct%gru(iGRU)%hru(iHRU)%var(:))
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim)
end do ! var
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var)
end do ! hru
deallocate(dataStruct%gru(iGRU)%hru)
end do ! gru
deallocate(dataStruct%gru)
class is (gru_hru_time_double)
do iGRU = 1, size(dataStruct%gru(:))
do iHRU = 1, size(dataStruct%gru(iGRU)%hru(:))
do iVar = 1, size(dataStruct%gru(iGRU)%hru(iHRU)%var(:))
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var(iVar)%tim)
end do ! var
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var)
end do ! hru
deallocate(dataStruct%gru(iGRU)%hru)
end do ! gru
deallocate(dataStruct%gru)
class is (gru_hru_double)
do iGRU = 1, size(dataStruct%gru(:))
do iHRU = 1, size(dataStruct%gru(iGRU)%hru(:))
deallocate(dataStruct%gru(iGRU)%hru(iHRU)%var)
end do ! hru
deallocate(dataStruct%gru(iGRU)%hru)
end do ! gru
deallocate(dataStruct%gru)
class is (gru_double)
do iGRU = 1, size(dataStruct%gru(:))
deallocate(dataStruct%gru(iGRU)%var)
end do ! gru
deallocate(dataStruct%gru)
end select
end subroutine
end module
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
......@@ -4,44 +4,44 @@
! for the HRUs to read from
module access_forcing_module
USE, intrinsic :: iso_c_binding
USE nrtype
USE data_types,only:file_info
USE data_types,only:file_info_array
USE data_types,only:dlength ! global data structure for forcing data
USE data_types,only:ilength ! global data structure for forcing data
USE actor_data_types,only:file_info_array
USE actor_data_types,only:var_forc ! global data structure for forcing data
USE globalData,only:gru_struc
USE globalData,only:forcingDataStruct
USE globalData,only:vecTime
USE globalData,only:outputStructure
USE globalData,only:time_meta,forc_meta ! metadata structures
USE globalData,only:integerMissing ! integer missing value
USE var_lookup,only:iLookTIME,iLookFORCE ! named variables to define structure elements
USE summaActors_FileManager,only:FORCING_PATH ! path of the forcing data file
USE summaFileManager,only:FORCING_PATH ! path of the forcing data file
USE netcdf_util_module,only:nc_file_close ! close netcdf file
implicit none
private
public::access_forcingFile
public::read_forcingFile
contains
type(var_forc),allocatable,save,public :: forcingDataStruct(:) ! forcingDataStruct(:)%var(:)%dataFromFile(:,:)
type(dlength),allocatable,save,public :: vecTime(:)
subroutine access_forcingFile(forcFileInfo, iFile, stepsInFile, startGRU, numGRU, err, message)
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(file_info_array),intent(inout) :: forcFileInfo
integer(i4b),intent(in) :: iFile
integer(i4b),intent(inout) :: stepsInFile
integer(i4b),intent(in) :: startGRU
integer(i4b),intent(in) :: numGRU
integer(i4b),intent(inout) :: err
character(*),intent(out) :: message
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
......@@ -56,9 +56,12 @@ subroutine access_forcingFile(forcFileInfo, iFile, stepsInFile, startGRU, numGRU
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="access_forcing/"
err=0; message="read_force.f90 - read_forcingFile/"
nFiles=size(forcFileInfo%ffile_list(:))
......@@ -72,7 +75,6 @@ subroutine access_forcingFile(forcFileInfo, iFile, stepsInFile, startGRU, numGRU
endif
! Files are assumed to be in the correct order
! do iFile=1,nFiles
infile=trim(FORCING_PATH)//trim(forcFileInfo%ffile_list(iFile)%filenmData)
! open netCDF file
call openForcingFile(forcFileInfo%ffile_list,iFile,trim(infile),ncid,err,cmessage)
......@@ -144,7 +146,7 @@ subroutine access_forcingFile(forcFileInfo, iFile, stepsInFile, startGRU, numGRU
if(err/=0)then;message=trim(message)//trim(cmessage);return;end if
end subroutine access_forcingFile
end subroutine read_forcingFile
! *************************************************************************
! * open the NetCDF forcing file and get the time information
......@@ -154,13 +156,13 @@ subroutine openForcingFile(forcFileInfo,iFile,infile,ncId,err,message)
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 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 summaActors_filemanager,only:NC_TIME_ZONE
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
......@@ -208,7 +210,7 @@ subroutine openForcingFile(forcFileInfo,iFile,infile,ncId,err,message)
end select ! (option time zone option)
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
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
......
character(len=64), parameter :: summaVersion = ''
character(len=64), parameter :: buildTime = ''
character(len=64), parameter :: gitBranch = ''
character(len=64), parameter :: gitHash = ''
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
#include "global.hpp"
#include <chrono>
double calculateTime(std::chrono::time_point<std::chrono::system_clock> start,
......
#include "caf/all.hpp"
#include "message_atoms.hpp"
// HRU Errors
std::string to_string(hru_error err) {
switch(err) {
case hru_error::run_physics_unhandleable:
return "run_physics_unhandleable";
case hru_error::run_physics_infeasible_state:
return "run_physics_infeasible_state";
default:
return "unknown";
}
}
bool from_string(caf::string_view in, hru_error& out) {
if (in == "run_physics_unhandleable") {
out = hru_error::run_physics_unhandleable;
return true;
}
if (in == "run_physics_infeasible_state") {
out = hru_error::run_physics_infeasible_state;
return true;
}
return false;
}
bool from_integer(uint8_t in, hru_error& out) {
switch(in) {
case 1:
out = hru_error::run_physics_unhandleable;
return true;
case 2:
out = hru_error::run_physics_infeasible_state;
return true;
default:
return false;
}
}
// File Access Error
std::string to_string(file_access_error err) {
switch(err) {
case file_access_error::writing_error:
return "writing_error";
default:
return "unknown";
}
}
bool from_string(caf::string_view in, file_access_error& out) {
if (in == "writing_error") {
out = file_access_error::writing_error;
return true;
}
return false;
}
bool from_integer(uint8_t in, file_access_error& out) {
switch(in) {
case 1:
out = file_access_error::writing_error;
return true;
default:
return false;
}
}
\ No newline at end of file
This diff is collapsed.