From c4a9b6e6e692a2bb49f0e48b4f17e8219a020b7f Mon Sep 17 00:00:00 2001 From: KyleKlenk <kyle.c.klenk@gmail.com> Date: Tue, 28 Jun 2022 17:00:13 -0600 Subject: [PATCH] tested in apptainer --- build/makefile-container | 369 +++++++++++++++++++++++++++++++++++ build/source/actors/main.cpp | 50 +---- 2 files changed, 371 insertions(+), 48 deletions(-) create mode 100644 build/makefile-container diff --git a/build/makefile-container b/build/makefile-container new file mode 100644 index 0000000..8766bde --- /dev/null +++ b/build/makefile-container @@ -0,0 +1,369 @@ +#### parent directory of the 'build' directory #### +ROOT_DIR = /globalhome/kck540/HPC/SummaProjects/Summa-Actors + +#### Compilers #### +FC = gfortran # Fortran +CC = g++ # C++ + +#### Includes AND Libraries #### +INCLUDES = -I/usr/include -I/usr/local/include +LIBRARIES = -L/usr/local/lib -lnetcdff -lopenblas + +ACTORS_INCLUDES = -I/usr/local/include -I/usr/local/include +ACTORS_LIBRARIES = -L/usr/local/lib -L$(ROOT_DIR)/bin -lcaf_core -lcaf_io -lsumma -lopenblas -lnetcdff + + +# Production runs +# FLAGS_NOAH = -O3 -ffree-form -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors +# FLAGS_COMM = -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors +# FLAGS_SUMMA = -O3 -ffree-line-length-none -fmax-errors=0 -fPIC -Wfatal-errors +# FLAGS_ACTORS = -O3 -Wfatal-errors -std=c++17 + +# # Debug runs +FLAGS_NOAH = -g -O0 -ffree-form -ffree-line-length-none -fmax-errors=0 -fbacktrace -Wno-unused -Wno-unused-dummy-argument -fPIC +FLAGS_COMM = -g -O0 -Wall -ffree-line-length-none -fmax-errors=0 -fbacktrace -fcheck=bounds -fPIC +FLAGS_SUMMA = -g -O0 -Wall -ffree-line-length-none -fmax-errors=0 -fbacktrace -fcheck=bounds -fPIC +FLAGS_ACTORS = -g -O0 -Wall -std=c++17 + + + +#======================================================================== +# PART 1: Define directory paths +#======================================================================== + +# Core directory that contains source code +F_KORE_DIR = $(ROOT_DIR)/build/source + +# Location of the compiled modules +MOD_PATH = $(ROOT_DIR)/build + +# Define the directory for the executables +EXE_PATH = $(ROOT_DIR)/bin + +#################################################################################################### +###################################### Assemble Fortran Files ###################################### +#################################################################################################### +# Define directories +DRIVER_DIR = $(F_KORE_DIR)/driver +HOOKUP_DIR = $(F_KORE_DIR)/hookup +NETCDF_DIR = $(F_KORE_DIR)/netcdf +DSHARE_DIR = $(F_KORE_DIR)/dshare +NUMREC_DIR = $(F_KORE_DIR)/numrec +NOAHMP_DIR = $(F_KORE_DIR)/noah-mp +ENGINE_DIR = $(F_KORE_DIR)/engine +ACTORS_DIR = $(F_KORE_DIR)/actors +JOB_ACTOR_DIR = $(ACTORS_DIR)/job_actor +FILE_ACCESS_DIR = $(ACTORS_DIR)/file_access_actor +HRU_ACTOR_DIR = $(ACTORS_DIR)/hru_actor + +# utilities +SUMMA_NRUTIL= \ + nrtype.f90 \ + f2008funcs.f90 \ + nr_utility.f90 +NRUTIL = $(patsubst %, $(ENGINE_DIR)/%, $(SUMMA_NRUTIL)) + +# Numerical recipes procedures +# NOTE: all numerical recipes procedures are now replaced with free versions +SUMMA_NRPROC= \ + expIntegral.f90 \ + spline_int.f90 +NRPROC = $(patsubst %, $(ENGINE_DIR)/%, $(SUMMA_NRPROC)) + +# Hook-up modules (set files and directory paths) +SUMMA_HOOKUP= \ + ascii_util.f90 \ + summaActors_FileManager.f90 +HOOKUP = $(patsubst %, $(HOOKUP_DIR)/%, $(SUMMA_HOOKUP)) + +# Data modules +SUMMA_DATAMS= \ + multiconst.f90 \ + var_lookup.f90 \ + data_types.f90 \ + globalData.f90 \ + flxMapping.f90 \ + get_ixname.f90 \ + popMetadat.f90 \ + outpt_stat.f90 +DATAMS = $(patsubst %, $(DSHARE_DIR)/%, $(SUMMA_DATAMS)) + +# utility modules +SUMMA_UTILMS= \ + time_utils.f90 \ + mDecisions.f90 \ + snow_utils.f90 \ + soil_utils.f90 \ + updatState.f90 \ + matrixOper.f90 +UTILMS = $(patsubst %, $(ENGINE_DIR)/%, $(SUMMA_UTILMS)) + +# Model guts +SUMMA_MODGUT= \ + MODGUT = $(patsubst %, $(ENGINE_DIR)/%, $(SUMMA_MODGUT)) + +# Solver +SUMMA_SOLVER= \ + vegPhenlgy.f90 \ + diagn_evar.f90 \ + stomResist.f90 \ + groundwatr.f90 \ + vegSWavRad.f90 \ + vegNrgFlux.f90 \ + ssdNrgFlux.f90 \ + vegLiqFlux.f90 \ + snowLiqFlx.f90 \ + soilLiqFlx.f90 \ + bigAquifer.f90 \ + computFlux.f90 \ + computResid.f90 \ + computJacob.f90 \ + eval8summa.f90 \ + summaSolve.f90 \ + systemSolv.f90 \ + varSubstep.f90 \ + opSplittin.f90 \ + coupled_em.f90 + +SOLVER = $(patsubst %, $(ENGINE_DIR)/%, $(SUMMA_SOLVER)) + +# Interface code for Fortran-C++ +SUMMA_INTERFACE= \ + cppwrap_datatypes.f90 \ + cppwrap_auxiliary.f90 \ + cppwrap_metadata.f90 \ + +INTERFACE = $(patsubst %, $(ACTORS_DIR)/global/%, $(SUMMA_INTERFACE)) + +SUMMA_FILEACCESS_INTERFACE = \ + initOutputStruc.f90 \ + deallocateOutputStruc.f90 \ + cppwrap_fileAccess.f90 + +FILEACCESS_INTERFACE = $(patsubst %, $(FILE_ACCESS_DIR)/%, $(SUMMA_FILEACCESS_INTERFACE)) + +SUMMA_JOB_INTERFACE = \ + cppwrap_job.f90 + +JOB_INTERFACE = $(patsubst %, $(JOB_ACTOR_DIR)/%, $(SUMMA_JOB_INTERFACE)) + +SUMMA_HRU_INTERFACE = \ + cppwrap_hru.f90 + +HRU_INTERFACE = $(patsubst %, $(HRU_ACTOR_DIR)/%, $(SUMMA_HRU_INTERFACE)) + + +# Define routines for SUMMA preliminaries +SUMMA_PRELIM= \ + conv_funcs.f90 \ + sunGeomtry.f90 \ + convE2Temp.f90 \ + allocspaceActors.f90 \ + alloc_file_access.f90\ + checkStruc.f90 \ + childStruc.f90 \ + ffile_info.f90 \ + read_attribute.f90 \ + read_pinit.f90 \ + pOverwrite.f90 \ + read_paramActors.f90 \ + paramCheck.f90 \ + check_icondActors.f90 \ + # allocspace.f90 +PRELIM = $(patsubst %, $(ENGINE_DIR)/%, $(SUMMA_PRELIM)) + +SUMMA_NOAHMP= \ + module_model_constants.F \ + module_sf_noahutl.F \ + module_sf_noahlsm.F \ + module_sf_noahmplsm.F + +NOAHMP = $(patsubst %, $(NOAHMP_DIR)/%, $(SUMMA_NOAHMP)) + +# Define routines for the SUMMA model runs +SUMMA_MODRUN = \ + indexState.f90 \ + getVectorz.f90 \ + updateVars.f90 \ + var_derive.f90 \ + read_forcingActors.f90 \ + access_forcing.f90\ + access_write.f90 \ + derivforce.f90 \ + snowAlbedo.f90 \ + canopySnow.f90 \ + tempAdjust.f90 \ + snwCompact.f90 \ + layerMerge.f90 \ + layerDivide.f90 \ + volicePack.f90 \ + qTimeDelay.f90 +MODRUN = $(patsubst %, $(ENGINE_DIR)/%, $(SUMMA_MODRUN)) + +# Define NetCDF routines +# OutputStrucWrite is not a netcdf subroutine and should be +# moved +SUMMA_NETCDF = \ + netcdf_util.f90 \ + def_output.f90 \ + outputStrucWrite.f90 \ + writeOutput.f90 \ + read_icondActors.f90 +NETCDF = $(patsubst %, $(NETCDF_DIR)/%, $(SUMMA_NETCDF)) + +# ... stitch together common programs +COMM_ALL = $(NRUTIL) $(NRPROC) $(HOOKUP) $(DATAMS) $(UTILMS) + +# ... stitch together SUMMA programs +SUMMA_ALL = $(NETCDF) $(PRELIM) $(MODRUN) $(SOLVER) + +# Define the driver routine +SUMMA_DRIVER= \ + summaActors_type.f90 \ + summaActors_util.f90 \ + summaActors_globalData.f90 \ + summaActors_init.f90 \ + SummaActors_setup.f90 \ + summaActors_restart.f90 \ + summaActors_forcing.f90 \ + SummaActors_modelRun.f90 \ + summaActors_alarms.f90 \ + summaActors_wOutputStruc.f90 + + +DRIVER = $(patsubst %, $(DRIVER_DIR)/%, $(SUMMA_DRIVER)) + +#################################################################################################### +###################################### Assemble Fortran Files ###################################### +#################################################################################################### + +#################################################################################################### +######################################## Assemble C++ Files ######################################## +#################################################################################################### + +INCLUDE_DIR = /globalhome/kck540/HPC/SummaProjects/Summa-Actors/build/includes +SOURCE_DIR = /globalhome/kck540/HPC/SummaProjects/Summa-Actors/build/source/actors + + +GLOBAL_INCLUDES = -I$(INCLUDE_DIR)/global +GLOBAL = $(SOURCE_DIR)/global/global.cpp + +SUMMA_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/summa_actor +SUMMA_ACTOR = $(SOURCE_DIR)/summa_actor/summa_actor.cpp +SUMMA_CLIENT = $(SOURCE_DIR)/summa_actor/summa_client.cpp +SUMMA_SERVER = $(SOURCE_DIR)/summa_actor/summa_server.cpp + +BATCH_MANGER = $(SOURCE_DIR)/summa_actor/batch_manager.cpp +CLIENT_MANAGER = $(SOURCE_DIR)/summa_actor/client.cpp + +JOB_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/job_actor +JOB_ACTOR = $(SOURCE_DIR)/job_actor/job_actor.cpp +GRUinfo = $(SOURCE_DIR)/job_actor/GRUinfo.cpp + +FILE_ACCESS_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/file_access_actor +FILE_ACCESS_ACTOR = $(SOURCE_DIR)/file_access_actor/file_access_actor.cpp +FORCING_FILE_INFO = $(SOURCE_DIR)/file_access_actor/forcing_file_info.cpp +OUTPUT_MANAGER = $(SOURCE_DIR)/file_access_actor/output_manager.cpp + +HRU_ACTOR_INCLUDES = -I$(INCLUDE_DIR)/hru_actor +HRU_ACTOR = $(SOURCE_DIR)/hru_actor/hru_actor.cpp + +MAIN = $(F_KORE_DIR)/actors/main.cpp + +ACTOR_TEST = $(F_KORE_DIR)/testing/testing_main.cc +#################################################################################################### +######################################## Assemble C++ Files ######################################## +#################################################################################################### + + +#======================================================================== +# PART 3: compilation +#====================================================================== +all: fortran cpp + +fortran: compile_noah compile_comm compile_summa link clean_fortran + +cpp: compile_globals compile_hru_actor compile_file_access_actor compile_job_actor compile_summa_actor \ + compile_summa_client compile_summa_server compile_main link_cpp clean_cpp + +test: actors_test actors_testLink actorsClean + +################################################################################################################### +############################################## COMPILE SUMMA-Fortran ############################################## +################################################################################################################### +compile_noah: + $(FC) $(FLAGS_NOAH) -c $(NRUTIL) $(NOAHMP) + +# compile common routines +compile_comm: + $(FC) $(FLAGS_COMM) -c $(COMM_ALL) $(INCLUDES) + +# compile SUMMA routines +compile_summa: + $(FC) $(FLAGS_SUMMA) -c $(SUMMA_ALL) $(DRIVER) $(INTERFACE) $(JOB_INTERFACE) $(FILEACCESS_INTERFACE) $(HRU_INTERFACE) $(INCLUDES) + +# generate library +link: + $(FC) -shared *.o -o libsumma.so + mv libsumma.so $(ROOT_DIR)/bin + +# Remove object files +clean_fortran: + rm -f *.o *.mod soil_veg_gen_parm__genmod.f90 +################################################################################################################### +############################################## COMPILE SUMMA-Fortran ############################################## +################################################################################################################### + + +################################################################################################################### +################################################ COMPILE SUMMA-C++ ################################################ +################################################################################################################### +compile_globals: + $(CC) $(FLAGS_ACTORS) -c $(GLOBAL) $(GLOBAL_INCLUDES) + +compile_hru_actor: + $(CC) $(FLAGS_ACTORS) -c $(HRU_ACTOR) $(HRU_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) + +compile_file_access_actor: + $(CC) $(FLAGS_ACTORS) -c $(FILE_ACCESS_ACTOR) $(FORCING_FILE_INFO) $(OUTPUT_MANAGER) \ + $(FILE_ACCESS_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) + +compile_job_actor: + $(CC) $(FLAGS_ACTORS) -c $(JOB_ACTOR) $(GRUinfo) $(JOB_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) \ + $(FILE_ACCESS_ACTOR_INCLUDES) $(HRU_ACTOR_INCLUDES) + +compile_summa_actor: + $(CC) $(FLAGS_ACTORS) -c $(SUMMA_ACTOR) $(SUMMA_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) $(ACTORS_INCLUDES) \ + $(JOB_ACTOR_INCLUDES) + +compile_summa_client: + $(CC) $(FLAGS_ACTORS) -c $(SUMMA_CLIENT) $(SUMMA_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) + +compile_summa_server: + $(CC) $(FLAGS_ACTORS) -c $(SUMMA_SERVER) $(BATCH_MANGER) $(CLIENT_MANAGER) $(SUMMA_ACTOR_INCLUDES) $(GLOBAL_INCLUDES) + +compile_main: + $(CC) $(FLAGS_ACTORS) -c $(MAIN) $(GLOBAL_INCLUDES) $(SUMMA_ACTOR_INCLUDES) $(JOB_ACTOR_INCLUDES) + +link_cpp: + $(CC) $(FLAGS_ACTORS) -o summaMain *.o $(ACTORS_LIBRARIES) + mv summaMain $(ROOT_DIR)/bin + +clean_cpp: + rm *.o +################################################################################################################### +################################################ COMPILE SUMMA-C++ ################################################ +################################################################################################################### + + +################################################################################################################### +################################################## COMPILE TESTS ################################################## +################################################################################################################### +actors_test: + $(CC) $(FLAGS_ACTORS) -c $(ACTOR_TEST) -std=c++17 $(ACTORS_INCLUDES) + +actors_testLink: + $(CC) -o summaTest *.o $(ACTORS_LIBRARIES) + +clean_lib: + rm *.so diff --git a/build/source/actors/main.cpp b/build/source/actors/main.cpp index bffef41..cf370c0 100644 --- a/build/source/actors/main.cpp +++ b/build/source/actors/main.cpp @@ -37,11 +37,8 @@ class config : public actor_system_config { void run_client(actor_system& system, const config& cfg) { scoped_actor self{system}; - std::string key_1 = "DistributedSettings"; - std::string key_host = "host"; - std::string key_port = "port"; std::string host; - int port; + uint16_t port; aout(self) << "Starting SUMMA-Client in Distributed Mode\n"; host = getSettings(cfg.config_path, "DistributedSettings", "host", host).value_or(""); @@ -52,7 +49,6 @@ void run_client(actor_system& system, const config& cfg) { return; } - auto c = system.spawn(summa_client); if (!host.empty() && port > 0) { anon_send(c, connect_atom_v, host, port); @@ -64,7 +60,7 @@ void run_client(actor_system& system, const config& cfg) { void run_server(actor_system& system, const config& cfg) { scoped_actor self{system}; - int port; + uint16_t port; port = getSettings(cfg.config_path, "DistributedSettings", "port", port).value_or(-1); if (port == -1) { @@ -124,48 +120,6 @@ void caf_main(actor_system& sys, const config& cfg) { auto summa = sys.spawn(summa_actor, cfg.startGRU, cfg.countGRU, cfg.config_path, self); } - // // Start the Actors - // if (cfg.distributed) { - // aout(self) << "Starting SUMMA-Actors in Distributed Mode \n"; - // auto system = cfg.server_mode ? run_server : run_client; - // system(sys, cfg); - // } else { - // auto summa = sys.spawn(summa_actor, cfg.startGRU, cfg.countGRU, cfg.configPath, self); - // } - // start SUMMA - // auto system = cfg.server_mode ? run_server : run_client; - // system(sys, cfg); } CAF_MAIN(id_block::summa, io::middleman) -// void parseSettings(actor_system& sys, std::string config_path, const config& cfg) { -// scoped_actor self{sys}; - -// json settings; -// std::string summa_actors_settings = "/Summa_Actors_Settings.json"; -// std::ifstream settings_file(config_path + summa_actors_settings); -// settings_file >> settings; -// settings_file.close(); - -// if (settings.find("DistributedSettings") != settings.end()) { -// json distributed_settings = settings["DistributedSettings"]; - -// if (distributed_settings.find("distributed-mode") != distributed_settings.end()) { -// cfg.setDistributed(distributed_settings["distributed-mode"]); -// } else { -// aout(self) << "ERROR: Cannot find distributed-mode in settings file\n"; -// } -// if (distributed_settings.find("host") != distributed_settings.end()) { -// cfg.host = distributed_settings["host"]; -// } else { -// aout(self) << "ERROR: Cannot find host\n"; -// } -// if (distributed_settings.find("port") != distributed_settings.end()) { -// cfg.port = distributed_settings["port"]; -// } else { -// aout(self) << "ERROR: Cannot find port\n"; -// } -// } else { -// aout(self) << "ERROR: Cannot find Distributed Settings \n"; -// } -// } \ No newline at end of file -- GitLab